1. 程式人生 > >為什麼二維陣列不能賦值為二維指標

為什麼二維陣列不能賦值為二維指標

http://zhidao.baidu.com/link?url=cItXIye6gilS80l_w0lhg0cFnpqFZkjOO0lrx201k4NiB3_c_-nv4U6blaM5_oAnHtR_Z4o32Xdcu6rtKyYDi0FHoCO0YcI8rbCOLW8h1nK
我理解你的問題是不是這樣:int a[3][4];  int**p = a;為什麼會報錯是吧?

回答:你理解的是對的,但是錯在,a是指向一維陣列,p是指向int*,這兩個不等價。
a指向一維的int陣列,記憶體大小為sizeof(int)*陣列長度;
而p只是指向一個int*型別指標,記憶體大小為4。指標指向的型別實際是不同的。
這裡你可能又有疑惑,為啥int b[10]
一維陣列
就可以賦值給int* pb = b呢,這是因為陣列退化到指標,只有第一維的陣列可以不確定陣列長度,可以直接作為首地址。有“陣列名能否作為右值”的討論。 如果想實現指標賦值,可以這樣int(*p)[4] = a; 這樣定義你就可以理解,p是一個指標,指向int[4]一維陣列