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

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

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

arrp指向的2D数组的大小仅在运行时才知道。我的问题是,如果未声明大小,则编译器将引发错误('char(*)[]':未知大小)

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

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时,无法获得数组的大小。有什么办法可以消除此错误?

最佳答案

这是Dobbs博士的一篇文章,对它的解释超出了我的期望,并且还包括有关如何在C90和C99中使用可变长度数组的提示:http://www.drdobbs.com/184401444

关于c - 如何使用指向数组的指针访问未知大小的2D数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10121600/

10-11 22:56
查看更多