繁体   English   中英

数组下标的类型int [int]无效

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM