关于++i的入栈问题

危机! 2020-09-16 09:08:49
众所周知C语言函数传参是从右向左依次入栈的,调用print()函数,然后传入不同的参数,函数调用结束后,遵循“先进后出”所以会下面f()函数的打印结果是4321
#include <stdio.h>
void f(int i){
printf("%d,%d,%d,%d\n", i, i++, i++, i++);
}
void f2(int i){
printf("%d,%d,%d,%d\n", i, i++, ++i, ++i);
}
int main(void)
{
int i = 1;
int a=1;
f(i);
f2(i);
return 0;
}

但是f2()函数的打印结果是4344,按照“先进后出” 的入栈原理,应该是4332(但是是错误的),有人知道原因的吗?
...全文
270 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
危机! 2020-09-17
  • 打赏
  • 举报
回复
引用 7 楼 ggglivw 的回复:
这种是出书的人瞎搞,故意给你来这一个题目问你答案,他自己也不知道答案,用当时随便找的编译器执行结果当标准答案,不知道具体细节误人子弟。
哈哈哈
危机! 2020-09-17
  • 打赏
  • 举报
回复
引用 6 楼 自信男孩 的回复:
i++和++i是有副作用的。对于这样的代码,不建议写,在同一个打印里,有多个++还是对于同一个变量的。
害~ 就是有这样的憨憨出题人出来玩人
危机! 2020-09-17
  • 打赏
  • 举报
回复
引用 5 楼 早打大打打核战争的回复:
如果象java那样明确规定表达式求值顺序就好了,也就没有那么多孔乙己研究回字有几种写法~~~
哈哈 c语言内存分配就是烦人
ggglivw 2020-09-17
  • 打赏
  • 举报
回复
这种是出书的人瞎搞,故意给你来这一个题目问你答案,他自己也不知道答案,用当时随便找的编译器执行结果当标准答案,不知道具体细节误人子弟。
自信男孩 2020-09-17
  • 打赏
  • 举报
回复
i++和++i是有副作用的。对于这样的代码,不建议写,在同一个打印里,有多个++还是对于同一个变量的。
  • 打赏
  • 举报
回复 1
如果象java那样明确规定表达式求值顺序就好了,也就没有那么多孔乙己研究回字有几种写法~~~
赵4老师 2020-09-17
  • 打赏
  • 举报
回复
老马何以识途 2020-09-17
  • 打赏
  • 举报
回复
關鍵是++i運算與函數傳值的次序關係,因為智商的關係,一般來說我不會寫難以直觀理解的代碼,怕把自己搞糊塗。
lin5161678 2020-09-16
  • 打赏
  • 举报
回复
众所周知说错了 后面的内容都不用看 没有这个众所周知 那是错的 这里决定因素是求值顺序 和入栈顺序毫无关系 输出结果没意义 编译器有有多种不同理解
qybao 2020-09-16
  • 打赏
  • 举报
回复
++i返回值是递增后的i,i++返回值是临时变量(递增前的i的值) 所以f2相当于 printf(i, 最后一次递增前的i, i, i)

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧