C 指针的增量和整数的增量不一样吗?

C 指针的增量和整数的增量不一样吗?,c,pointers,pointer-arithmetic,C,Pointers,Pointer Arithmetic,考虑以下代码: 这将a增加到11,但这: 上述代码生成的值为10 指针运算与整数运算不同,还是我在这里遗漏了什么??您缺少运算符优先级。(*a)+与*a++完全不同。 第一个在地址a处递增值,第二个在后递增a处递增值,并在原始地址处获取值。语句printf(“%d\n”,a)不打印a指向的整数的值。如前所述,它调用未定义的行为 printf("%p\n", (void*)a); 将打印指针的值,即整数变量的地址 printf("%d\n", *a); 将打印整数的值 此外,*a=*a+1与*

考虑以下代码:

这将a增加到11,但这:

上述代码生成的值为10


指针运算与整数运算不同,还是我在这里遗漏了什么??

您缺少运算符优先级。
(*a)+
*a++
完全不同。 第一个在地址
a
处递增值,第二个在后递增
a
处递增值,并在原始地址处获取值。

语句
printf(“%d\n”,a)
不打印
a
指向的整数的值。如前所述,它调用未定义的行为

printf("%p\n", (void*)a);
将打印指针的值,即整数变量的地址

printf("%d\n", *a);
将打印整数的值

此外,
*a=*a+1
*a++不同。由于运算符优先级规则,
*a++
被解析为
*(a++)
,指针是递增的,而不是指向的值。您可以使用
++*a
作为
*a=*a+1的缩写,以及其他可能的变体:
++a[0]
a[0]++
(*a)+
,但首选的解决方案是:

*a += 1;

@芭丝谢芭是的<代码>***a=*a+1**
WT*?a++实际上做了什么?它增加了地址??如果是,怎么办??我无法想象,
a
只是局部变量。它会递增,但不再使用,所以不会造成伤害。如果您写入它,它将在原始变量
(*a)+
工作后更改内存;
a[0]+
也是如此。
printf("%d\n", *a);
*a += 1;