作者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
1F:→ nowar100:sorry我不太懂 就算是一维阵列 &a和a也是不一样的东西 10/19 19:30
2F:→ nowar100:所以原PO的意思有什麽特别要表达的吗? ^^ 10/19 19:31
3F:→ nowar100:我不太懂这个讨论串要讨论的东西 XD? 10/19 19:32
4F:推 QQ29:表达~其实传到function里面也是用pointer接 10/19 19:35
5F:→ QQ29:所以function内 &a和a值不一样 10/19 19:35
6F:→ QQ29:call by value 10/19 19:35
7F:推 twotwoone:原发文者只说印出错的值而已,谁知道他写了什麽程式码 10/19 19:38
8F:推 QQ29:一楼~ 一维阵列 &a和a印出来是一样的 10/19 19:43
9F:→ holymars:欸..我要表达的是 其实参数列上出现的阵列是指标.. 10/19 20:38
10F:→ holymars:当你写 void printArray(const int a[2][3]); 的时侯 10/19 20:38
11F:→ holymars:对Compiler来说是void printArray(const int (*a)[3]); 10/19 20:38
12F:→ holymars:这是在解释原po问题那个「为什麽可以直接传」的问题 10/19 20:39
13F:→ nowar100:喔喔 谢谢 XD 10/19 21:29