[問題] 一個關於陣列和指標的問題

看板C_and_CPP作者 (malo)時間15年前 (2010/03/25 22:37), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/4 (看更多)
問題: 程式如下,我的問題是:用array去寫成 *(*(array+i)+j) 就沒問題 這表示說c語言的陣列是有記住他是3x3的陣列 不然他怎麼知道第一層的array+i他要跳 3*sizeof(int) 呢? 這樣是不是表示array除了用了 [3][3]的記憶體外,還有用到其它的? 有哪位高手可解解疑問嗎 謝謝 程式: void pointer_test2() { int array[3][3]= {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int **ptr; int i, j; ptr = array; for(i=0; i<3; i++) for(j=0; j<3; j++) printf("array[%d][%d]=%d\n", i, j, *(ptr+(i*3+j))); //下面這一行是不行的,因為ptr不是陣列,所以程式不知道一列有幾個元素 //printf("array[%d][%d]=%d\n", i, j, *(*(ptr+i)+j)); } int main() { pointer_test2(); return 0; } 遇到的問題: (題意請描述清楚) 希望得到的正確結果: 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) 有問題的code: (請善用置底文標色功能) 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.126.16.142

03/25 22:43, , 1F
compiler會幫你算出*(ptr+(i*3+j)))所代表的記憶體位址
03/25 22:43, 1F

03/25 22:45, , 2F
底下的新手12誡,請去看一下好嗎?
03/25 22:45, 2F

03/25 23:04, , 3F
順便把書本上array, 與pointer(to pointer)的地方再看深
03/25 23:04, 3F

03/25 23:04, , 4F
一點:)
03/25 23:04, 4F
文章代碼(AID): #1BgtKL31 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BgtKL31 (C_and_CPP)