永发信息网

C程序问题(关于自增运算符)

答案:5  悬赏:50  手机版
解决时间 2021-04-27 02:03

#include<stdio.h>
void main()
{
int i=3,j;
j=(++i)+(++i)+(++i);
printf("%d\n",j);
}

为什么j为16啊?讲一下求解过程。

最佳答案

我在自己机器上实验过了,运行结果的确是16.


我试着解释一下,不知道是不是这样,供楼主【参考】。


首先,(++i)+(++i ),第一次++i,值为4(第一个加数增加1);第二次++i,值为5(第二个加数自加1);此时注意了,第二个加数的自加同时影响第一个加数,因为都是i,储存在同一个单元,所以(++i)+(++i )的结果是5+5,为10;此时10储存在内存单元,不自加,而++i再次自加,为6。所以,最后结果为10+6=16.



【PS】:谢谢四楼的同志“77086959”7对我的想法的验证。

全部回答

第一个++i执行完后并没有马上使用,等到两个++i相加的时候才使用它的值,这时候两个i都是5

正解 按照他的思路 下面的程序应该输出13

#include<iostream> using namespace std; int main() { int i=3,j=0; j=(++i)+(i++)+(++i); printf("%d\n",i); printf("%d\n",j); return 1; }

应该是15的啊。 怎么会是16呢?会不会是跟你的编译器有关啊?

不同编译器对++或者--的处理不同~

以VC6.0

编译器做如下处理得到16

mov eax,dword ptr [ebp-4] add eax,1 mov dword ptr [ebp-4],eax mov ecx,dword ptr [ebp-4] add ecx,1 两次自加得到5

mov dword ptr [ebp-4],ecx mov edx,dword ptr [ebp-4] add edx,dword ptr [ebp-4] 自生相加EDX得到10但是i为5 mov eax,dword ptr [ebp-4] 将i的值传到EAX add eax,1 EAX+1得到6 mov dword ptr [ebp-4],eax i现在是6 add edx,dword ptr [ebp-4] 与EDX中的10相加 mov dword ptr [ebp-8],edx 最终得到16

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我和我女朋友在一起一百天,想对她在做一件浪
什么时候才到顶级?
我想买个四扇门的衣橱和电视柜须要多少钱,普
QQ空间 我卖8个种子,怎么只种了7个就没了 si
平洞口怎么去啊,有知道地址的么
福建哪家检测单位可以检测沥青混凝土用抗剥落
爱国诗歌抒发的感情,夸男士对感情专一的诗词
肚脐眼里面刺痛
诺基亚,上滑盖,价格在800-1000
艾薇儿的一首快歌
在上饶办什么手机卡最划算,或者说办什么套餐
李小龙到底是怎么死的
请一个5级蓝钻帮忙给个丝路的CEKDY 谢谢
修建祠堂管理机构
谁能帮我熄灭图标?
推荐资讯
阿斗的歇后语是什么,秋天,葡萄一大串一大串的
气功堆智力用啥手饰
怎样才能长得高?
萧莹的创业经历
交换机一台机子一连上,其它的就掉线
同继地址有知道的么?有点事想过去
如何安全的使用户外健身器材?
佐助的万花筒写轮眼不是简单的三勾玉连在一起
哈尔滨伟航机电设备经销有限公司这个地址在什
2009年服装趋势走向
游戏王的魔轰神与什么组合好
在开封想开出租车要上岗证,驾驶证还有其他证
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?