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

看板C_and_CPP作者 (malo)時間15年前 (2010/03/31 13:50), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串2/4 (看更多)
不好意思~~ 我想我沒表表達清楚 我指的是我用下面這一行沒問題,因為這是我自算要shift多少個int的長度 printf("array[%d][%d]=%d\n", i, j, *(ptr+(i*3+j))); 但是當我用改為這樣時,就會出錯(我用code:blocks會程式當掉) printf("array[%d][%d]=%d\n", i, j, *(*(ptr+i)+j)); 但若用原來的陣列的指標來寫,就沒有問題 printf("array[%d][%d]=%d\n", i, j, *(*(array+i)+j)); 我想問的是ptr和array不都是二維的指標嗎? 為何array就知道第一次array+i要shift 3個int 而ptr就不知道?且當掉 ※ 引述《yguma410 (malo)》之銘言: : 問題: : 程式如下,我的問題是:用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; : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.221.131.34

03/31 14:02, , 1F
陣列跟指標操作的code很像, 本質上卻是不一樣的東西....
03/31 14:02, 1F

04/01 21:22, , 2F
由這一個測試是可以知道指標和陣列不同…
04/01 21:22, 2F

04/01 21:23, , 3F
但是array帶出來的是指標沒錯丫,請說明不同點在哪兒…
04/01 21:23, 3F
文章代碼(AID): #1BikAPfA (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BikAPfA (C_and_CPP)