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> 不同?