C语言 为什么输出结果是2 6 8 9呢?希望大佬能详细解释一下过程 感谢

#include
int main()
{
int a[]={2,4,6,8,10};
int p=a;
printf("%d\n",(*p++));
printf("%d\n",(
++p));
printf("%d\n",(*++p)++);
printf("%d\n",*p);
return 0;
}

把a赋值给p,所以p和a是一样的,共用一个地址。
输出*p++,先输出在++,所以是2.
现在p的指针指向4.
输出++p,先+后输出,因为数组是引用型,数组的名字就是默认指向a[0]的指针。所以输出就是6.
输出*++p,p先+指向8,因为(*++p)++,所以先输出在++,输出8,然后8++就是9.
输出9.。
完事,希望点个免费的赞。不够清晰可以继续问我。

a=b++是先取值再加,等价于如下
a=b;b++;

a=++b是先加再取值,等价于如下
b++;a=b;

全拆开等价于如下函数

int main() {
    int a[]={2,4,6,8,10};
    int p=a;

    printf("%d\n",*p);        //打印2
    p++;               //指向4

    p++;               //指向6
    printf("%d\n",*p);        //打印6

    p++;               //指向8
    printf("%d\n",*p);        //打印8
    (*p)++;            //指向9

    printf("%d\n",*p);        //打印9
    return 0;
}