2013-06-29 184 views
1

我一個2D陣列說INT一個[2] [3]指向數組的指針,在差2D陣列和1d陣列

當我們調用函數說添加(a)的

我們接收使用它的指針陣列空隙加載(INT(* P)[3])

BUT

1D陣列說INT B [5 ]

我們將數組的地址存儲在一個簡單的整數指針中 int * p;p = b;

我的問題是,我們爲什麼不在一個指針存儲b鍵陣列前INT(* P)[5] = B;

回答

1

作爲數值使用時的數組名稱將衰減爲與指向其第一個元素的指針相同的值,並使用該類型。這意味着:

int a[2][3]; 

名稱a將衰減到&a[0],其具有類型int (*)[3]。但是,對於:

int b[5]; 

名稱b將衰減到&b[0],它具有類型int *

但是,&b是指向b的指針,這意味着它的類型爲int (*)[5]。恰巧對於一個數組類型,它的地址將與其第一個元素的地址相等。但是,&b&b[0]有不同的類型。