C语言中,i=3,则j=(++i)+(++i)+(++i)运行后为何j=16?
展开全部
这是一个非常有意思的编程问题。
我简单阐述一下我的理解。希望能对你有帮助。
我们假设有3块内存空间。i,j,_tmp。其中_tmp用于保存加法运算的中间结果。
j = (++i) + (++i) + (++i)这行数据,可以拆分成多个步骤进行执行。
执行第一个括号中的++i,将空间i的数值,从3变更为4。
执行第二个括号中的++i,将空间i的数值,从4变更为5。
执行第一个括号和第二个括号的加法运算。相当于执行i+i=5+5=10。将这个10保存到临时的内存空间_tmp中。
执行第三个括号的++i,将空间i的数值,从5变更为6。
将_tmp的数值与第三个括号进行加法运算。相当于执行_tmp + i = 10 + 6。
所以最后j的空间被赋值为16。
这个问题的关键,在于编译运行的顺序。
程序并不是将所有括号中的数字都运算完成之后,再执行加法运算。而是从头开始执行,如果运算级相等,则顺次执行,遇到运算级不等时,再进行高优先级的运算。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询