Re: [問題] 月經文...二維陣列傳入函式...

看板C_and_CPP作者時間16年前 (2009/10/19 18:52), 編輯推噓3(3010)
留言13則, 4人參與, 最新討論串2/4 (看更多)
※ 引述《SATSUGAI (約翰‧克勞薩二世)》之銘言: : 我爬了一下前面的文 : 都是用動態方式去處理 : 可是我翻課本,他可以直接傳耶? : void printArray(const int a[][3]); : int main(void) : { : int array1[2][3]={{1,2,3},{4,5,6}}; : int array2[2][3]= ......(省略) : printArray(array1); : printArray(array2); : ....以下省略 : 這是課本的example 可是我照做 發現他都會出現warning : incompatitble pointer type : 那為什麼課本可以過 = =" : 雖然說我陣列型態是char...但是也不至於傳不進去吧? void printArray(const int a[2][3]) { int b[2][3]; printf("%x\n", &a); printf("%x\n", a); printf("%x\n", &b); printf("%x\n", b); } int main() { int local_array[2][3]; printf("%x\n", &local_array); printf("%x\n", local_array); printArray(local_array); system("pause"); return 0; } 程式結果: 12ff4c // &local_array 12ff4c // local_array 12fe78 // &a 12ff4c // a 12fe54 // &b 12fe54 // b 嗯..它其實傳了一個pointer進去 也就是說 出現在參數列上的陣列變數a 會有 a != &a 這樣的情形喔XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.15.163

10/19 19:30, , 1F
sorry我不太懂 就算是一維陣列 &a和a也是不一樣的東西
10/19 19:30, 1F

10/19 19:31, , 2F
所以原PO的意思有什麼特別要表達的嗎? ^^
10/19 19:31, 2F

10/19 19:32, , 3F
我不太懂這個討論串要討論的東西 XD?
10/19 19:32, 3F

10/19 19:35, , 4F
表達~其實傳到function裡面也是用pointer接
10/19 19:35, 4F

10/19 19:35, , 5F
所以function內 &a和a值不一樣
10/19 19:35, 5F

10/19 19:35, , 6F
call by value
10/19 19:35, 6F

10/19 19:38, , 7F
原發文者只說印出錯的值而已,誰知道他寫了什麼程式碼
10/19 19:38, 7F

10/19 19:43, , 8F
一樓~ 一維陣列 &a和a印出來是一樣的
10/19 19:43, 8F

10/19 20:38, , 9F
欸..我要表達的是 其實參數列上出現的陣列是指標..
10/19 20:38, 9F

10/19 20:38, , 10F
當你寫 void printArray(const int a[2][3]); 的時侯
10/19 20:38, 10F

10/19 20:38, , 11F
對Compiler來說是void printArray(const int (*a)[3]);
10/19 20:38, 11F

10/19 20:39, , 12F
這是在解釋原po問題那個「為什麼可以直接傳」的問題
10/19 20:39, 12F

10/19 21:29, , 13F
喔喔 謝謝 XD
10/19 21:29, 13F
文章代碼(AID): #1At4J_rb (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1At4J_rb (C_and_CPP)