Re: [語法] pointer to array請教

看板C_and_CPP作者 (Lucius)時間15年前 (2010/08/20 17:29), 編輯推噓0(009)
留言9則, 2人參與, 最新討論串4/4 (看更多)
※ 引述《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)

08/20 17:54, , 1F
因為兩者型態不同 前者為array 後者為a pointer to array
08/20 17:54, 1F

08/20 17:55, , 2F
後者的情況以前者當例子是印出a[0]的位置(array decay)
08/20 17:55, 2F

08/20 20:20, , 3F
a為指向a[0]的指標, ip為指向a的指標, 內容為a的address
08/20 20:20, 3F

08/20 20:21, , 4F
請問這樣解釋正確嗎
08/20 20:21, 4F

08/20 21:04, , 5F
不 a是array type 許多情況下可以decay成pointer to a[0]
08/20 21:04, 5F

08/20 21:05, , 6F
而ip是a pointer to a,但是array type為compile-time型別
08/20 21:05, 6F

08/20 21:06, , 7F
一般實作中並無特別用額外memory儲存a的位置
08/20 21:06, 7F

08/20 21:07, , 8F
故a pointer to a所印出的位置會等同於a[0]的位置
08/20 21:07, 8F

08/20 21:11, , 9F
十分感謝 解決了很多疑惑!
08/20 21:11, 9F
文章代碼(AID): #1CRai6un (C_and_CPP)
文章代碼(AID): #1CRai6un (C_and_CPP)