我正在修改新项目的现有代码。我被指示删除动态内存分配并使用静态声明。
有一个变量arrp,早先它是一个双指针,将使用malloc为其分配内存,并将作为2D数组进行访问。
现在我把它改为指向数组的指针,即:char(* arrp)[];
arrp指向的2D数组的大小仅在运行时才知道。我的问题是如果size没有声明编译器抛出错误('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时无法获得数组的大小。有没有办法消除这个错误?
答案 0 :(得分: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]);
}
答案 1 :(得分:0)
这是来自Dobbs博士的一篇文章,它解释了它比我希望的更好,还包括如何使用C90和C99中的可变长度数组的提示:http://www.drdobbs.com/184401444