[英]Invalid types int[int] for array subscript
我试图将一个二维数组传递给一个函数,但它始终抛出此错误。 我的代码如下:
void initialize_centroids(int *,int,int);(Initialization)
initialize_centroids(centroid[0],noofcentroids,newnoofvar);(inside my main)
void initialize_centroids(int *carray,int p,int q)
{
int i,j;
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
carray[i][j]=i;
}
}
return;
}
您正在传递指向int( int*
)的指针,但您尝试使用两个下标。 它是2D阵列吗? 然后参数需要是指向int的指针: int**
void initialize_centroids(int**, int, int);
int centroid[][] = .... // wherever this comes from
initialize_centroids(centroid, noofcentroids, newnoofvar);(inside my main)
void initialize_centroids(int** carray, int p, int q)
{
int i,j;
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
carray[i][j]=i;
}
}
return;
}
传入时不要取消引用centroid
。这样做只会通过你的第一行。 做这个:
initialize_centroids( centroid, noofcentroids, newnoofvar );
然后你需要在这里使用正确的类型:
void initialize_centroids( int **carray, int p, int q )
你的数组可能是一个int**
。 这意味着它是一个指向内存中包含int*
指针数组的位置的指针。 这些指针中的每一个(我假设)引用已分配一行数组的内存。
现在,一旦你通过carray[i]
获得其中一个指针,你就选择了第i
行。 你现在有一个int*
,这意味着它指向一个int
数组。
最后, carray[i][j]
从第i
行的i
j
列中选择一个特定的整数。
[编辑]
关于可能出现的问题的理论......你可能不是在动态意义上分配2D数组,或者它实际上可能是一维数组,你应该使用步长等。这是一个你可以使用的解决方案用于动态分配2D数组,并将其索引为carray[i][j]
。
注意:由于对齐问题,有些人过去对我这种方法感到不满,但我从未遇到过问题。 我想他们只是脾气暴躁的一天。 对于那些担心对齐的人来说,很容易对此进行调整,但对于这个例子来说太复杂了。
int** allocate_array2d( int rows, int cols )
{
int i, **arr, *data;
arr = (int**)malloc( rows * sizeof(int*) + rows*cols*sizeof(int) );
data = (int*)(arr + rows);
for( i = 0; i < rows; i++ ) {
rows[i] = data;
data += cols;
}
return arr;
}
void free_array2d( int** arr ) {
free((void*)arr);
}
现在,在你的主要:
int** centroid = allocate_array2d( noofcentroids, newnoofvar );
initialize_centroids( centroid, noofcentroids, newnoofvar );
[更多...]
好的。是的,我在11分钟之前分配了像这个质心[100] [100] - Bobby这样的记忆
在这种情况下,您应该声明:
void initialize_centroids( int carray[100][100], int p, int q )
{
//...
}
无需使用我的动态数组示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.