如何使用指向数组的指针访问未知大小的2D数组

时间:2012-04-12 10:14:49

标签: c multidimensional-array

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

有一个变量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时无法获得数组的大小。有没有办法消除这个错误?

2 个答案:

答案 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