Re: [語法] pointer to array請教

看板C_and_CPP作者 (Cary)時間15年前 (2010/08/18 17:57), 編輯推噓4(405)
留言9則, 3人參與, 最新討論串2/4 (看更多)
※ 引述《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的位址 : 3. cout<< ip[0] 正確印出2 這裡應該跟樓上一樣印出2的位址(等同於(*ip)) : 4. cout<< ip[1~3] 垃圾值 X,和超出array的位置(等同於(*ip + 1~3),也就是ia[2~5][0]的位置) : 5. cout<<(*ip)[0~3] 正確 等同於ia[1][0~3],印出2 4 6 8 : 測試後知道要用(*ip)[index]才能取值, 可是不懂為什麼.. : 1為什麼會得到位址, 以及3,4兩點好像有衝突 : 請問這些code應該怎麼正確解讀呢, 感激不盡:) 一開始比較難瞭解array和pointer之間的關係 指來指去就不知道指到哪裡去了~ 老實說因為我程式經驗少 所以理解也常常會出錯啊... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.168.54

08/18 18:03, , 1F
但是 ip 仍然是個 int(*)[4] 所以 ip[1] 不該是 4 的位置
08/18 18:03, 1F

08/18 18:03, , 2F
應該是後面的 X 的位置
08/18 18:03, 2F
對 我搞錯了 感謝糾正 ※ 編輯: hilorrk 來自: 114.36.168.54 (08/18 18:27)

08/19 05:51, , 3F
嗯嗯,那我有疑問~~
08/19 05:51, 3F

08/19 05:51, , 4F
void search(int **arr, int *p);
08/19 05:51, 4F

08/19 05:52, , 5F
void search(int *arr[COL], int *p);
08/19 05:52, 5F

08/19 05:52, , 6F
void search(int arr[][COL], int *p);
08/19 05:52, 6F

08/19 05:52, , 7F
分別是怎麼被解釋的呢~~!?
08/19 05:52, 7F

08/19 07:11, , 8F
呃…我是想問那個arr會怎麼被解釋~~
08/19 07:11, 8F

08/19 08:52, , 9F
謝謝..正努力理解中
08/19 08:52, 9F
文章代碼(AID): #1CQww8YI (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CQww8YI (C_and_CPP)