这个程序怎么理解?
答案:2 悬赏:50 手机版
解决时间 2021-03-19 17:06
- 提问者网友:送舟行
- 2021-03-19 14:10
这个程序怎么理解?
最佳答案
- 五星知识达人网友:轻熟杀无赦
- 2021-03-19 15:02
实际上就是直接展开成(++n)*(++n)*(++n)
你可以试试,(++n)*n=36, (++n)*(++n)=49
显然,这个结果跟我们理解的不一样。
我只能说,这跟编译器的实现有关,不建议用这种语法挑战编译器的上限。
你可以试试,(++n)*n=36, (++n)*(++n)=49
显然,这个结果跟我们理解的不一样。
我只能说,这跟编译器的实现有关,不建议用这种语法挑战编译器的上限。
全部回答
- 1楼网友:神也偏爱
- 2021-03-19 15:32
编译时对s=CUBE(++n);宏扩展为s=(++n*++n*++n);。对这种边缘化语句目前的编译器常见两处理方案:一种是先将前两个表达式++n*++n算出来存放在一个临时变量中比如y,由于前++要在参与运算前计算,所以y=7*7==49;然后将后面的表达式再与y计算得y*++n==49*8==392——这就是题目提供的答案。另一种是先将表达式中的前++或--都做完,再从左至右用运算符操作计算结果;比如这里就是先将3个++n做完使n==8,再计算8*8*8==512。显然题目提供的是前一种计算方法,我的编译器也是前一种方法。由于C/C++没有提供处理这种边缘化语句的具体要求,所以两种(或许还有其他方法)方法都是合法的,故为了代码移植可靠,不提倡写这种语句。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯