2012-06-18 19 views

回答

3

它衰減到的指針的第一個元素:

int a[5][7]; 

衰減到

int (*pa)[7] = a; 

在實踐中,存儲在pa的值將是相同的指針,在第一int元素a,但獲得指向a第一個元素的指針的正確方法是使用

int *p_elm = &(a[0][0]); 

或等效

int *p_elm = &(pa[0][0]); 

然而,請注意,一個指針的第一個元素不能(嚴格)被作爲一個指針指向一個N*M數組的開始處理;見例如http://www.lysator.liu.se/c/c-faq/c-2.html#2-11

2

Yes並商店作爲地址:

int *p = &a[0][0]; 
2

2D陣列本質上是一維陣列,其中每個元件本身是一個數組。

該數組的名稱相當於& arrayName [0]。

分配一個指向這個地址與往常一樣,一樣的東西:

int myArray[5][5]; 
int (*arrayptr)[5] = myArray; 

這是說arrayptr是一個指向5個整數數組。由於myArray是第一個元素的地址,它是int[5],我們的聲明沒有問題。

但是,當您取消引用此指針時,您將獲得第一個元素,它是一個數組。因此,您可以執行如下操作:

(*arrayptr)[3]; // parens necessary for precedence issues 

訪問嵌套在「外部數組」的第一個元素內的數組中的第3個元素。 這是

myArray[0][3]; 

相當於發生了什麼事是你提領arrayptr這將產生(在這種情況下,大小5)一維數組..然後你問這個一維數組的第4單元。

現在,如果你正在尋找的是矩陣的左上角的「角」,你會想:

int *topleft = &(myArray[0][0]); 
0

使用運營商的地址指向基地的偏移。

char base[2][2]; 
int *basepointer = &base; 
相關問題