输出++*p ++

Shu*_*are 6 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]);
}
Run Code Online (Sandbox Code Playgroud)

输出是20 11 20 30

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

R S*_*ahu 14

由于运营商的优先权,

++*p++和...一样++(*(p++)).

这相当于:

int* p1 = p++; // p1 points to a[0], p points to a[1]
++(*p1);       // Increments a[0]. It is now 11.
Run Code Online (Sandbox Code Playgroud)

这解释了输出.