Re: [問題] 一個關於陣列和指標的問題
不好意思~~
我想我沒表表達清楚
我指的是我用下面這一行沒問題,因為這是我自算要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
03/31 14:02, 1F
→
04/01 21:22, , 2F
04/01 21:22, 2F
→
04/01 21:23, , 3F
04/01 21:23, 3F
討論串 (同標題文章)