具体来说,这是我在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 ?
答案 0 :(得分:4)
将++ca
更改为ca
,您将获得预期的结果
在printf("%p %p %p %p\n",ca,&ca[0],&ca[1],++ca);
中,参数不必从左到右进行评估;这种行为取决于编译器
在这种情况下,他们正在从右到左进行评估;第一个ca
正在递增,然后进行打印。