看板 C_and_CPP 關於我們 聯絡資訊
你原本的 code 用 gcc -Wall 編譯時 test.c: In function 'main': test.c:8: warning: assignment from incompatible pointer type 這個警告你沒有看過嗎? 你把 ptr 宣告成 int (*ptr)[3]; 就不會有這個警告了 指標和陣列是不同的東西, 一言難盡, 板上高手眾多, 在此就不獻醜了. ※ 引述《yguma410 (malo)》之銘言: : 不好意思~~ : 我想我沒表表達清楚 : 我指的是我用下面這一行沒問題,因為這是我自算要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: 114.44.19.112