作者jehovah (Lucius)
看板C_and_CPP
標題Re: [語法] pointer to array請教
時間Fri Aug 20 17:29:40 2010
※ 引述《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