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

时间:2014-06-12 04:29:12

标签: c arrays

具体来说,这是我在gcc上的程序。

#include <stdio.h>
char ga[]="abc";
void func(char ca[])
{
    printf("%p %p %p %p\n",ca,&ca[0],&ca[1],++ca);
}
main()
{   
    func(ga);
    printf("%p %p %p\n",ga,&ga[0],&ga[1]);
}

它的输出是

# ./a.out 
0x8049735 0x8049735 0x8049736 0x8049735
0x8049734 0x8049734 0x8049735

那么为什么 ca 的地址一个字节大于 ga 的地址?

为什么 ++ ca 的值等于 ca

1 个答案:

答案 0 :(得分:4)

++ca更改为ca,您将获得预期的结果 在printf("%p %p %p %p\n",ca,&ca[0],&ca[1],++ca);中,参数不必从左到右进行评估;这种行为取决于编译器 在这种情况下,他们正在从右到左进行评估;第一个ca正在递增,然后进行打印。