6个回答
展开全部
这个涉及函数调用的参数进栈顺序
简单的说,就是函数在执行调用的时候,参数是从最后一个向前开始运行的
于是在倒数第三个的时候p自加了
倒数第四个,也就是实际上的第一个打印参数打出来的就是自加后的p指向的num值。
你可以实际打一下代码,并且尝试把自加的位置移动,就可以确认自加前面的参数打印出来的都是自加后的值
简单的说,就是函数在执行调用的时候,参数是从最后一个向前开始运行的
于是在倒数第三个的时候p自加了
倒数第四个,也就是实际上的第一个打印参数打出来的就是自加后的p指向的num值。
你可以实际打一下代码,并且尝试把自加的位置移动,就可以确认自加前面的参数打印出来的都是自加后的值
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里的原因可能是printf函数中多个表达式的执行次序是从右往左。那么++p执行后p指向下一个结构体数组元素,所以输出结果是1002
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是因为c语言函数的参数调用是从右往左依次入栈处理的,printf在执行时,先把(*p).age和(*p).num的值压入栈中,再把(++p)->age压入栈中,最后把p->num入栈,最后一一出栈进行输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参数从右向左入栈,第二个参数的++运算改变了p的位置,导致第一个参数输出1002
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2019-12-20
展开全部
因为在执行printf之前,先执行了++p
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询