任何人都可以向我解释输出。
#include<stdio.h>
int main() {
int a[]={10,20,30};
int *p=a;
++*p++;
printf("%d %d %d %d",*p,a[0],a[1],a[2]);
}
输出为20 11 20 30
后缀增量具有更高的优先级,因此第二个索引的值应该增加。为什么第一个索引的值会增加?
答案 0 :(得分:14)
++*p++
与++(*(p++))
相同。
这相当于:
int* p1 = p++; // p1 points to a[0], p points to a[1]
++(*p1); // Increments a[0]. It is now 11.
这解释了输出。
答案 1 :(得分:2)
这是因为后缀运算符返回增量前的值。因此指针很好地递增,但前缀运算符仍适用于原始指针值。