printf对*p++的处理与p的处理不同。

25 浏览
0 Comments

printf对*p++的处理与p的处理不同。

这个问题已经有了答案

指针表达式:*ptr ++、*++ptr 和 ++ *ptr

++i 和 i++ 有什么不同?

一般情况下,*p++ 会将指针加 1 然后取值。

但是 printf 只是先取值后指针加 1,因此输出的值已经增加了但是指针并没有。

#include
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
}

请问有人能解释一下这是为什么吗?

谢谢!

admin 更改状态以发布 2023年5月20日
0
0 Comments

*p++ 通常会将指针的值加 1 然后再进行[解]引用

不,它不会。

你使用了后缀递增(++p之后),所以提供的是原始值,而不是新递增的值。

你可能想要使用 *++p

0