0

我正在为一个新项目修改现有代码。我被指示删除动态内存分配并使用静态声明。

有一个变量 arrp,之前它是一个双指针,将使用 malloc 为其分配内存,并将作为 2D 数组访问。

现在我已将其更改为指向数组的指针,即:char (*arrp)[];

arrp 指向的二维数组的大小只有在运行时才能知道。我的问题是,如果未声明大小,编译器会抛出错误('char (*)[]' : unknown size)

请参考以下代码,我做了这样的事情

char (*arrp)[]; //This will be from different module, 
        //I have declared as local variable for our reference

char (*parr)[2];

char arr[3][2];

parr = &(arr[0]);   
arrp = (char (*)[])&(arr[0]);

//inside loops for i, j
...

printf("%c",parr[i][j]); // This works fine
printf("%c",arrp[i][j]); // Error :'char (*)[]' : unknown size) 

....
//Some code

声明 arrp 时无法获取数组的大小。有没有办法消除这个错误?

4

1 回答 1

0

指向数组的指针有助于一次跳过整个数组。(即使用单个增量)它通过知道要跳转的数组的列宽来做到这一点。因此,如果不知道列大小,恐怕您指向数组的指针对您毫无用处。

但是,如果您有一个支持可变长度数组( C99 )的现代编译器,那么它非常简单

int foo ( int m, int n )
{
    int a[m][n];
    int (*ptr)[n]=a;
    a[0][2] = 78;
    printf("%d", ptr[0][2]);

}
于 2012-04-12T10:51:40.637 回答