c++关于指针运算问题?

为啥第一个输出的数是1002而不是1001... 为啥第一个输出的数是1002而不是1001 展开
 我来答
风若远去何人留
2019-12-20 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20413 获赞数:450080
专业C/C++软件开发

向TA提问 私信TA
展开全部
这个涉及函数调用的参数进栈顺序
简单的说,就是函数在执行调用的时候,参数是从最后一个向前开始运行的
于是在倒数第三个的时候p自加了
倒数第四个,也就是实际上的第一个打印参数打出来的就是自加后的p指向的num值。
你可以实际打一下代码,并且尝试把自加的位置移动,就可以确认自加前面的参数打印出来的都是自加后的值
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yzjxbin76
2019-12-20 · TA获得超过123个赞
知道小有建树答主
回答量:251
采纳率:67%
帮助的人:59.2万
展开全部
这里的原因可能是printf函数中多个表达式的执行次序是从右往左。那么++p执行后p指向下一个结构体数组元素,所以输出结果是1002
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夏天的小红花

2019-12-20 · TA获得超过4800个赞
知道大有可为答主
回答量:1万
采纳率:83%
帮助的人:644万
展开全部
这是因为c语言函数的参数调用是从右往左依次入栈处理的,printf在执行时,先把(*p).age和(*p).num的值压入栈中,再把(++p)->age压入栈中,最后把p->num入栈,最后一一出栈进行输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
最大的宝宝
2019-12-20 · TA获得超过828个赞
知道小有建树答主
回答量:1569
采纳率:67%
帮助的人:370万
展开全部
参数从右向左入栈,第二个参数的++运算改变了p的位置,导致第一个参数输出1002
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-12-20
展开全部
因为在执行printf之前,先执行了++p
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式