C程序输出混乱(指针)

man*_*ish 2 c pointers

#include <stdio.h>

int main(void)
{
    int i;
    int *ptr = (int *) malloc(5 * sizeof(int));

    for (i=0; i<5; i++)
        *(ptr + i) = i;

    printf("%d ", *ptr++);//prin1
    printf("%d ", (*ptr)++);//print2
    printf("%d ", *ptr);//print3
    printf("%d ", *++ptr);//print4
    printf("%d ", ++*ptr);//print5
}
Run Code Online (Sandbox Code Playgroud)

我正进入(状态

0 1 2 2 3
Run Code Online (Sandbox Code Playgroud)

作为输出.

我无法理解为什么"print4"正在打印2它应该打印3作为指针*++ ptr将被视为*(++ ptr),即指针将首先递增

hac*_*cks 5

*ptr++ - >打印0,递增ptr1.
(*ptr)++ - >打印1,增量12.
*ptr - >打印存储的增量值,即2.
*++ptr - >增加ptrby 1然后打印指向的值ptr,即2.
++*ptr - >增加值,即2指向ptr,然后打印,即3.