从*++ p和++*p指针输出

Mar*_*ars 3 c pointers

我不明白为什么我得到以下代码的输出1,2,3.我认为它应该是1,2,2.第一次输出的原因是什么?

另外,让我指出还有其他问题与这种指针算术和解除引用有关,但这些问题的答案表明输出应该是1,2,2.

int main()
{
    int p[3] = {1,2,3};
    int *q = p;
    printf("%d\n", *q);
    printf("%d\n", *++q);
    int x = ++*q;
    printf("%d\n", *q);
}
Run Code Online (Sandbox Code Playgroud)

nos*_*nos 5

int p[3] = {1,2,3};
int *q = p;
printf("%d\n", *q);
Run Code Online (Sandbox Code Playgroud)

q 指向1.元素,上面打印1

printf("%d\n", *++q);
Run Code Online (Sandbox Code Playgroud)

q 指向2.元素,上面打印2.

int x = ++*q;
Run Code Online (Sandbox Code Playgroud)

2.元素从2增加到3.

printf("%d\n", *q);
Run Code Online (Sandbox Code Playgroud)

q 指向2.元素,上面打印3.