爲什麼在下列情況下指針數組「等價」不起作用?指針和數組
void foo(int** x) {
cout << x[0][1];
}
int main() {
int a[2][2] = {{1,2},{2,3}};
foo(a);
}
謝謝
爲什麼在下列情況下指針數組「等價」不起作用?指針和數組
void foo(int** x) {
cout << x[0][1];
}
int main() {
int a[2][2] = {{1,2},{2,3}};
foo(a);
}
謝謝
int **和int [2] [2]的內存模型是不同的。
int a[2][2]
被存儲在存儲器中作爲:
&a : a[0][0]
&a + 4 : a[0][1]
&a + 8 : a[1][0]
&a + 12: a[1][1]
int** x
:在存儲器
&x : addr1
&x + 4 : addr2
addr1 : x[0][0]
addr1 + 4: x[0][1]
addr2 : x[1][0]
addr2 + 4: x[1][1]
而addr1
addr2
和只是地址。
你只是不能將一個轉換爲另一個。
它不工作,因爲只有多維數組的第一級衰減到指針。試試這個:
#include <iostream>
using std::cout;
void foo(int (*x)[2]) {
cout << x[0][1];
}
int main() {
int a[2][2] = {{1,2},{2,3}};
foo(a);
}
因爲該類型不是int **。這個權利爲foo功能
foo(int * [2]);
指針類型a不是int **,完全是int * [2] ..
什麼不行?你得到什麼錯誤信息? – Dani 2011-05-12 20:47:23
可能重複[在C中,是數組指針還是用作指針?](http://stackoverflow.com/questions/4607128/in-c-are-arrays-pointers-or-used-as-pointers) – ildjarn 2011-05-12 20:48:55
指針數組「等價」 – user695652 2011-05-12 20:49:06