printf 对待 *p++ 的方式与对待 p 的方式不同 [重复]

Posted

技术标签:

【中文标题】printf 对待 *p++ 的方式与对待 p 的方式不同 [重复]【英文标题】:printf treats *p++ differently from what happens to p [duplicate] 【发布时间】:2019-09-24 23:14:17 【问题描述】:

*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


有人能解释一下为什么会这样吗?

提前致谢

【问题讨论】:

*p++ 是一个后修复增量。虽然p 增加了*p 反映了p 在增加之前的内容。 Built-in postfix operators 你应该阅读这个:***.com/questions/24853/… 非常感谢我知道了! 【参考方案1】:

*p++ 通常给指针加 1 然后 [de]references

No it doesn't.

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

你在想*++p

【讨论】:

我知道您在个人资料中声明“不要在 cmets 中写答案。” - 因此我立即投赞成票... ;-) @Scheff 因此我没有支持您在 cmets 中的回答 ;)

以上是关于printf 对待 *p++ 的方式与对待 p 的方式不同 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 <button> 标签对待 em 的方式与 <div> 不同?

谨慎对待人工智能

为啥 Firefox 对待 Helvetica 和 Chrome 的方式不同?

垃圾回收-按分区对待的方式

快速排序详解

愿你被这个世界温柔地对待