看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《hilorrk (Cary)》之銘言: : ※ 引述《jehovah (Lucius)》之銘言: : : 最近在看C++ primer, 看到pointers 與多維 arrays的關係 : : 有段code 我拿來跑跑看, 有些不清楚的地方想請教 : : int ia[3][4] = { : : {1, 2, 3, 4}, : : {2, 4, 6, 8}, : : }; : array是長這樣子的 : 1 2 3 4 : 2 4 6 8 : X X X X : : int (*ip)[4] = ia; //請問這邊=ia 意義是什麼? : 此處ia先decay成"pointer to a int[4](a int array type)"並assign給ip : ip成為a pointer to a int array named ia[0] : : ip=&ia[1]; : 指向ia[1]的位址(a pointer to a int array named ia[1]) : : 1. cout<< *ip 印出address : ia[1](a int array)decay成pointer to ia[1][0],印出2的位址 : : 2. cout<< ip 印出相同address (這個我懂) : ia[1]的位址等同於ia[1][0]的位址,也就是2的位址 束刪, 先謝謝指教, 真的獲益很多^^ 還有一個疑問想請教 假設有個一維陣列 int a[4]={}; 當我取 *a時會得到 a[0] 的element 0 而ip指向一個 int[4] 的array {1, 2, 3, 4} 為什麼 *ip時得到的是 ia[1][0] 的位址呢? 謝謝~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.69.128.66 ※ 編輯: jehovah 來自: 210.69.128.66 (08/20 17:30)
hilorrk:因為兩者型態不同 前者為array 後者為a pointer to array 08/20 17:54
hilorrk:後者的情況以前者當例子是印出a[0]的位置(array decay) 08/20 17:55
jehovah:a為指向a[0]的指標, ip為指向a的指標, 內容為a的address 08/20 20:20
jehovah:請問這樣解釋正確嗎 08/20 20:21
hilorrk:不 a是array type 許多情況下可以decay成pointer to a[0] 08/20 21:04
hilorrk:而ip是a pointer to a,但是array type為compile-time型別 08/20 21:05
hilorrk:一般實作中並無特別用額外memory儲存a的位置 08/20 21:06
hilorrk:故a pointer to a所印出的位置會等同於a[0]的位置 08/20 21:07
jehovah:十分感謝 解決了很多疑惑! 08/20 21:11