推 cplusplus:int nA[3][2]; int (*pA)[2]=nA[1]; 這樣有提示到你嗎 06/08 06:45
推 cplusplus:PU 看錯你的問題了 你已經打出error了 一維比較例外... 06/08 06:54
推 cplusplus:寫出名字可以看成少一維度 A[x]=>* A[x][y]=>(*)[y] 06/08 06:57
謝謝這位前輩的指導,小弟瞭解了。
我是用下中斷點後,用 Visual C++ 2008 的監看功能去檢查 nA 而得到其資料型態是
int [2] 這個結論。
但實際上,nA的語意應該是等於nA[0]的記憶體位址,即視為 int *
故 int *p = nA; 是正確無誤的。
也就是說,單純去認為 nA 代表 int [2] 不太正確,畢竟如果取出他的值
是會得到一個記憶體位址,而記憶體位址當然不會是陣列。
謝謝
推 POSIX:記得沒錯的話, declaration 的 '=' 和一般assign 的'=' 不同 06/08 07:25
→ POSIX:尤其在用pointer declaration 時常會造成混淆 06/08 07:26
這部份的討論就沒看過了,不知道有沒有人可提示相關資訊。
--
再補充一下結論 (以下 AM 08:42 修文)
1. 以前在版上跟學校都聽過「陣列名稱」=「&陣列名稱」的說法
記憶體位址值上這沒有錯,但是從此例可以看出,資料型態會不同,進而有潛在的
編譯錯誤可能性。
2. 若有 int nAA[3][2]; 則 int *p = nAA; 會錯誤。不像 p = nA; 可通過
應為 int (*pp)[2] = nAA; 或 int (&r)[3][2] = nAA;
規則一般化:
陣列名稱的資料型態,視為兩種 a.本身的陣列 (故r可以等於nAA)
b.減掉一層維度後的指標 (故pp可以等於nAA)
※ 編輯: zlw 來自: 124.8.129.95 (06/08 08:42)