作者holymars ()
看板C_and_CPP
標題Re: [問題] 月經文...二維陣列傳入函式...
時間Mon Oct 19 18:52:44 2009
※ 引述《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
→ nowar100:sorry我不太懂 就算是一維陣列 &a和a也是不一樣的東西 10/19 19:30
→ nowar100:所以原PO的意思有什麼特別要表達的嗎? ^^ 10/19 19:31
→ nowar100:我不太懂這個討論串要討論的東西 XD? 10/19 19:32
推 QQ29:表達~其實傳到function裡面也是用pointer接 10/19 19:35
→ QQ29:所以function內 &a和a值不一樣 10/19 19:35
→ QQ29:call by value 10/19 19:35
推 twotwoone:原發文者只說印出錯的值而已,誰知道他寫了什麼程式碼 10/19 19:38
推 QQ29:一樓~ 一維陣列 &a和a印出來是一樣的 10/19 19:43
→ holymars:欸..我要表達的是 其實參數列上出現的陣列是指標.. 10/19 20:38
→ holymars:當你寫 void printArray(const int a[2][3]); 的時侯 10/19 20:38
→ holymars:對Compiler來說是void printArray(const int (*a)[3]); 10/19 20:38
→ holymars:這是在解釋原po問題那個「為什麼可以直接傳」的問題 10/19 20:39
→ nowar100:喔喔 謝謝 XD 10/19 21:29