是否可以像在fortran中那样,在C中分配特定的索引范围:
allocate(f(istart-1:iend+1), u(istart-1:iend+1), uold(istart-1:iend+1))
do i = istart, iend
.
.
.
end do
最佳答案
你想要的基本上可以归结为设置数组的下界和上界,就像在Basic中一样(显然是Fortran):Dim Matrix(3, 4) As Integer
。
作为一种用途,我可以考虑在稀疏数组中处理一个部分,而不必分配整个数组。
在C语言中,可以使用一个用作偏移量的整数变量作为一个简单的例子来实现这一点:
int getElement(int *arr, int index, int offset)
{
return *(arr + (index-offset));
}
也可以采用更详细的方法,例如:
typedef struct MY_ARR {
int *arr;
int lowerbound; // from
int upperbound; // up and including
} t_myArr;
t_myArr *newArr(int lower, int upper)
{
t_myArr *p;
if (!(p= malloc(sizeof(t_myArr))) return 0;
if (!(p->arr= calloc(sizeof(int),upper-lower+1))) {free(p); return 0;}
p->arr.lowerbound= lower;
p->arr.upperbound= upper;
return p;
}
int getElement(t_myArr *p, int element)
{
if (!p || p->arr.lowerbound<element || element>p->arr.uperbound) return 0;
return(*(p->arr+element-lowerbound));
}
实际上,您现在已经创建了自己的整数数组类型。
关于c - 在C特定索引范围内分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42438634/