输出++ * p ++

时间:2015-08-04 16:13:47

标签: c

任何人都可以向我解释输出。

#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

后缀增量具有更高的优先级,因此第二个索引的值应该增加。为什么第一个索引的值会增加?

2 个答案:

答案 0 :(得分:14)

由于operator precedence

++*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)

这是因为后缀运算符返回增量前的值。因此指针很好地递增,但前缀运算符仍适用于原始指针值。