回覆列表
-
1 # sgeai9293
-
2 # 影片好笑
我理解你的問題是不是這樣: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]一維陣列
二維陣列名相當於指標,但是它是一個指向陣列型別(也就是整型或者字元型,具體取決於你陣列的定義)。而二級指標在真正意義上也是一個指標,但它是一個指向指標的指標。在定址時,拿整型陣列舉例,直接引用陣列名,系統會在陣列名指向的地址往後定址2個位元組得到一個整型數字。而引用二級指標時,系統會在指標指向的地址後定址4個位元組得到一個地址,所以兩個不能相互賦值。純手打,求採納啊。