返回信息流有这么一段程序:
#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;
}
运行结果是:
我的问题是,为什么数组参数的地址和数组参数的第一个元素的地址竟然不一样?比如第二组结果。
这是一条镜像帖。来源:北邮人论坛 / cpp / #15034同步于 2008/10/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
问个问题,关于数组参数
fifarcheung
2008/10/31镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
在这里,数组作为参数时,传递的是指针,而不是副本
【 在 fifarcheung 的大作中提到: 】
: 有这么一段程序:
: #include <stdio.h>
: #include <stdlib.h>
: ...................
你得首先明白,数组在作为参数传递时,严格的形式应该写为 func(char *),
当然 func(char ga【】)与func(char *ga)或func(char *)是等价的, 当数组在作为参数传进来时传的是数组的首地址,传进来后,ga与ca指向同一块内存,故有你的输出结果
在这里只是传递了地址的副本,但他们指向同一块内存
相当于 int *p=&i;
int *q=p;
p和q的内存地址不同,但cout《《p和cout《《q都将输出&i