c语言 - 作为函数参数传递的数组的地址不等于实际地址



具体来说,这是我在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,然后进行打印。

最新更新