[英]How to access 2D array of unknown size using pointer to array
我正在為一個新項目修改現有代碼。 我被指示刪除動態內存分配並使用靜態聲明。
有一個變量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時,無法獲得數組的大小。 有什么辦法可以消除此錯誤?
指向數組的指針有助於一次跳過整個數組。 (即,具有單個增量)它是通過了解要跳轉的數組的列寬來實現的。 因此,恐怕在不知道列大小的情況下,指向數組的指針對您毫無用處。
但是,如果您有一個支持可變長度數組(C99)的現代編譯器,那么它非常簡單
int foo ( int m, int n )
{
int a[m][n];
int (*ptr)[n]=a;
a[0][2] = 78;
printf("%d", ptr[0][2]);
}
這是Dobbs博士的一篇文章,對它的解釋超出了我的期望,並且還包括有關如何在C90和C99中使用可變長度數組的提示: http : //www.drdobbs.com/184401444
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.