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

时间:2019-05-07 10:01:21

标签: c++ c pointers printf

* 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

}

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

预先感谢

1 个答案:

答案 0 :(得分:6)

  

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

No it doesn't.

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

您正在考虑*++p