[問題] 二維陣列與雙重指標關係
開發平台(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畫面 會寫 沒有回應 就停止程式
不知道是甚麼原因? 我有上網查過 用雙重指標表示二維陣列的其他寫法
還是想問一下 這樣寫為什麼有錯誤? 感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.15.165.131
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1416381491.A.60A.html
※ 編輯: ipod7788 (163.15.165.131), 11/19/2014 15:18:48
推
11/19 15:29, , 1F
11/19 15:29, 1F
請問 要這樣寫嗎? *(a2+i)+j 剛剛試過 結果會印出 6個不同的記憶體位置
所以我又加上 *(*(a2+i)+j) 執行後就會出現
array.exe (array是我的project名字)沒有回應
推
11/19 17:09, , 2F
11/19 17:09, 2F
→
11/19 17:10, , 3F
11/19 17:10, 3F
→
11/19 17:12, , 4F
11/19 17:12, 4F
→
11/19 17:12, , 5F
11/19 17:12, 5F
我有上網找 好像寫法會略有不同
int **a2;
a2 = new int*[10];
可是這樣 a1給值 好像 就與a2無關
文章上說的錯誤是指 執行後 會出現 array.exe (array是 project名稱) 沒有回應
感覺是存取錯誤的記憶體位置 才發生這種問題
→
11/19 17:13, , 6F
11/19 17:13, 6F
→
11/19 17:18, , 7F
11/19 17:18, 7F
這個寫法 剛剛試過 也是不行
好像是要
int a1[3][2] ;
int* a2 =(int*)a1;
就可以正確取值
※ 編輯: ipod7788 (163.15.165.131), 11/19/2014 18:04:19
推
11/19 18:05, , 8F
11/19 18:05, 8F
→
11/19 18:22, , 9F
11/19 18:22, 9F
推
11/19 18:27, , 10F
11/19 18:27, 10F
推
11/19 18:34, , 11F
11/19 18:34, 11F
→
11/19 18:34, , 12F
11/19 18:34, 12F
→
11/19 20:51, , 13F
11/19 20:51, 13F
所以那個網頁寫的是錯的嗎?
int a[2][3]; int** a2=(int**) al <--這個
另外想請問一下 這樣寫法 int(*) a2 = (int*)a1
是轉二維轉成 一維陣列的意思嗎?
※ 編輯: ipod7788 (114.39.0.63), 11/19/2014 22:34:22
推
11/19 23:07, , 14F
11/19 23:07, 14F
謝謝提醒~ 我還想說那篇文章評價蠻高的 應該不太會有錯
※ 編輯: ipod7788 (114.39.0.63), 11/20/2014 00:23:01
→
11/20 09:56, , 15F
11/20 09:56, 15F
→
11/20 09:56, , 16F
11/20 09:56, 16F
推
11/20 12:04, , 17F
11/20 12:04, 17F
→
11/21 09:28, , 18F
11/21 09:28, 18F
討論串 (同標題文章)