指针间接问题

abs*_*sis 2 c c++ gcc pointers

这个程序产生0 1 1作为输出对我预期的输出0 1 2.有人可以解释为什么增量运算符不能作为前缀工作吗?

#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)++);
    printf("%d ", *ptr);
    printf("%d ", *++ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

per*_*eal 6

假设int *p = ptr:

printf("%d ", (*ptr)++);  // print ptr[0] then increment ptr[0] ==> 0
printf("%d ", *ptr);      // print ptr[0] ==> 1
printf("%d ", *++ptr);    // increment ptr then effectively print p[1] ==> 1
Run Code Online (Sandbox Code Playgroud)