C语言中,i=3,则j=(++i)+(++i)+(++i)运行后为何j=16?

 我来答
GiraKoo
2021-03-11 · 还没有任何签名哦
GiraKoo
采纳数:3949 获赞数:11109

向TA提问 私信TA
展开全部

这是一个非常有意思的编程问题。

我简单阐述一下我的理解。希望能对你有帮助。

我们假设有3块内存空间。i,j,_tmp。其中_tmp用于保存加法运算的中间结果。

j = (++i) + (++i) + (++i)这行数据,可以拆分成多个步骤进行执行。

  1. 执行第一个括号中的++i,将空间i的数值,从3变更为4。

  2. 执行第二个括号中的++i,将空间i的数值,从4变更为5。

  3. 执行第一个括号和第二个括号的加法运算。相当于执行i+i=5+5=10。将这个10保存到临时的内存空间_tmp中。

  4. 执行第三个括号的++i,将空间i的数值,从5变更为6。

  5. 将_tmp的数值与第三个括号进行加法运算。相当于执行_tmp + i = 10 + 6。

所以最后j的空间被赋值为16。


这个问题的关键,在于编译运行的顺序。

程序并不是将所有括号中的数字都运算完成之后,再执行加法运算。而是从头开始执行,如果运算级相等,则顺次执行,遇到运算级不等时,再进行高优先级的运算。

syht2000
高粉答主

2021-03-11 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
没有原因,这种表达式被叫做未定义行为,如何计算完全取决于编译器,你在不同的环境运行这个表达式会有不同的结果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式