printf对* p ++的处理不同于对p的处理

Moh*_*ibi -2 c c++ printf pointers

* p ++通常将1加到指针,然后再引用。但是printf只是在取消引用后才使用该值,而指针先增加后又取消引用。

#include<stdio.h>

int main()
{
    int a[] = { 10,20,30 };
    int *p = a;

    printf("%d\n", *p++);//this makes p point at 20 but prints 10
    printf("%d\n", *p);//prints 20
    printf("%d\n", a[0]);//prints 10

}
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么会这样吗?

提前致谢

Lig*_*ica 6

* p ++通常将1加到指针,然后[de]引用

不,不是。

您使用了后缀增量(++位于之后p),因此提供了原始值,而不是新增加的值。

您正在考虑*++p