簡體   English   中英

如何使用指向數組的指針訪問未知大小的2D數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM