具体来说,这是我在gcc上的程序。
#include <stdio.h>
char ga[]="abc";
void func(char ca[])
{
printf("%p %p %p %pn",ca,&ca[0],&ca[1],++ca);
}
main()
{
func(ga);
printf("%p %p %pn",ga,&ga[0],&ga[1]);
}
它的输出是
# ./a.out
0x8049735 0x8049735 0x8049736 0x8049735
0x8049734 0x8049734 0x8049735
那么为什么ca的地址比ga的地址大一个字节呢?
为什么++ca的值等于ca?将++ca
更改为ca
,您将获得预期的结果。
在printf("%p %p %p %pn",ca,&ca[0],&ca[1],++ca);
中,不需要从左到右计算参数;这种行为依赖于编译器。
在这种情况下,它们是从右到左计算的;首先增加ca
,然后进行打印。