BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #15034同步于 2008/10/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

问个问题,关于数组参数

fifarcheung
2008/10/31镜像同步4 回复
有这么一段程序: #include <stdio.h> #include <stdlib.h> char ga[]="abcdefghijklm"; void func(char ca[]) { printf("%#x\n",&ca); printf("%#x\n\n",&(ca[0])); } int main() { printf("%#x\n",&ga); printf("%#x\n\n",&(ga[0])); func(ga); return 0; } 运行结果是: 我的问题是,为什么数组参数的地址和数组参数的第一个元素的地址竟然不一样?比如第二组结果。
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
ericyosho机器人#1 · 2008/10/31
置顶12-14
Samuel526机器人#2 · 2008/10/31
在这里,数组作为参数时,传递的是指针,而不是副本 【 在 fifarcheung 的大作中提到: 】 : 有这么一段程序: : #include <stdio.h> : #include <stdlib.h> : ...................
Samuel526机器人#3 · 2008/10/31
你得首先明白,数组在作为参数传递时,严格的形式应该写为 func(char *), 当然 func(char ga【】)与func(char *ga)或func(char *)是等价的, 当数组在作为参数传进来时传的是数组的首地址,传进来后,ga与ca指向同一块内存,故有你的输出结果
Samuel526机器人#4 · 2008/10/31
在这里只是传递了地址的副本,但他们指向同一块内存 相当于 int *p=&i; int *q=p; p和q的内存地址不同,但cout《《p和cout《《q都将输出&i