指针操作

nag*_*esh 3 c pointers

#include <stdio.h>

int main()
{
    char a[] = "hello";
    char *ptr = a;
    printf ("%c\n",*ptr++);//it prints character 'h'.
    printf ("%c\n",*ptr);//it prints character 'e'.
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

据我所知:在上面的代码中,在*ptr++表达,都*++具有相同的优先级和操作将需要由右至左的地方,这意味着指针将递增第一和下一个顺从会发生.所以它应该'e'在第一个printf语句中打印字符.但事实并非如此.

所以我的问题是:*ptr++如果它没有在第一个printf语句中取消引用该位置,它将在何处存储递增的值(in,)?

Raw*_*ing 8

ptr++表示"递增ptr,但返回预增值".

因此,尽管首先发生增量,但它是被解除引用的原始的,未递增的指针.

相反,如果您的优先推理是正确的,*++ptr应该e按照您的预期打印.++ptr表示"递增ptr并返回后增量值".