PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 二維陣列與雙重指標關係
作者:
ipod7788
(小小涼)
2014-11-19 15:18:08
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
codeblock GCC 4.8.1
最近在學C++ 遇到雙重指標與多維陣列問題
有看到一個網頁上
int x[1][20];
int (*p)[20] = x;
比較常用以下寫法
int **p=(int**)x;
接著我想測試那個常用寫法是否可以就自己寫了一個小程式
int a1[3][2] ;
int** a2 = (int**)a1 ;
int count=0;
for (int i = 0; i < 3; ++i){
for (int j = 0; j < 2; ++j){
a1[i][j] = ++count;
std::cout << "a1["<<i<<"]["<<j<<"] :" << a1[i][j] <<"\t";
std::cout << "a2["<<i<<"]["<<j<<"] :" << *((*a2+i)+j) <<"\t";
}
printf("\n");
}
我想說 如果 a1給值的話 照理說 a2也應該有設定到值
compiler沒有問題 但是 執行之後 dos畫面 會寫 沒有回應 就停止程式
不知道是甚麼原因? 我有上網查過 用雙重指標表示二維陣列的其他寫法
還是想問一下 這樣寫為什麼有錯誤? 感謝!
作者:
nctucch17170
(kkadam)
2014-11-19 15:29:00
*(a2+i)? (*a2+i)?
作者:
purpose
(秀才遇到肥宅兵)
2014-11-19 17:09:00
a2 這種寫法,你要在執行時期配置記憶體,也就是要作 new程式當掉,應該會有錯誤訊息,那很重要如果你要把 a2 指向 a1 的話,應該用 int (a2)[2] = a1;少打 int (*a2)[2] = a1;
作者:
dirkc
(3781615)
2014-11-19 17:13:00
原po寫法等於*(*a2+i+j) , 一樓已提示囉
作者:
ichleibeqbi
(positive)
2014-11-19 17:18:00
*(a2 + i * 2 + j)
作者:
s25g5d4
(function(){})()
2014-11-19 18:05:00
哪個網頁教你可以用雙重指標接二維陣列的阿
作者:
dirkc
(3781615)
2014-11-19 18:22:00
疏忽了orz purpose與s25g5d4說的對
作者:
s25g5d4
(function(){})()
2014-11-19 18:27:00
我甚麼都沒說阿?首先你要知道 a1 會指向 a[0][0] 這樣你就知道為什麼不能用雙重指標接二維陣列了
作者:
dirkc
(3781615)
2014-11-19 20:51:00
我猜你意思是不能用,所以說你說的對 XD
作者:
purpose
(秀才遇到肥宅兵)
2014-11-19 23:07:00
http://goo.gl/OeDeTY
你說的那個網頁,後來有人留言了
作者:
ichleibeqbi
(positive)
2014-11-20 09:56:00
更正一下 *((int*)a2 + i * 2 + j)參考:
http://ppt.cc/cAOc
作者:
dirkc
(3781615)
2014-11-20 12:04:00
代表在C/C++主題上這個板比該網站稍稍略勝一籌
作者:
ipod7788
(小小涼)
2014-11-21 09:28:00
兩邊都看 不一樣就可以跟板友討論一下XD
繼續閱讀
Re: [問題] scanf()問題
anoymouse
[問題] scanf()問題
anoymouse
[問題] opencv遺失CVHARRTRAINING.DLL
jkowaur
[問題] 組合語言請求解釋
adam77x
Re: [理工] 程式語言觀念
littleshan
Re: [理工] 程式語言觀念
ando5566
Re: [理工] 程式語言觀念
bachelorwhc
Fw: [理工] 程式語言觀念
gauss760220
[問題] THX
laputaca
[問題] 如何讓程式持續等待指令內容
love606009
Links
booklink
Contact Us: admin [ a t ] ucptt.com