看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
LPH66:但是 ip 仍然是個 int(*)[4] 所以 ip[1] 不該是 4 的位置 08/18 18:03
LPH66:應該是後面的 X 的位置 08/18 18:03
對 我搞錯了 感謝糾正 ※ 編輯: hilorrk 來自: 114.36.168.54 (08/18 18:27)
aecho:嗯嗯,那我有疑問~~ 08/19 05:51
aecho:void search(int **arr, int *p); 08/19 05:51
aecho:void search(int *arr[COL], int *p); 08/19 05:52
aecho:void search(int arr[][COL], int *p); 08/19 05:52
aecho:分別是怎麼被解釋的呢~~!? 08/19 05:52
aecho:呃…我是想問那個arr會怎麼被解釋~~ 08/19 07:11
jehovah:謝謝..正努力理解中 08/19 08:52