小程序

1.   int k=2; 
     k = ( (k==2) ? k--: 5); 
     cout<<k<<endl;                 //输出2 
  
2.   int k = 2; 
     if (k==2) 
     { 
         k = k--; 
     } 
     else 
     { 
         k = 5; 
     } 
     cout<<k;  //输出1 

分析:
转成汇编看一下 
k = ( (k==2) ? k--: 5) 
00401025  cmp         dword ptr [k],2  
00401029  jne         main+3Fh (40103Fh)  
0040102B  mov         eax,dword ptr [k]  
0040102E  mov         dword ptr [ebp-0D0h],eax 

00401034  mov         ecx,dword ptr [k]  
00401037  sub         ecx,1  
0040103A  mov         dword ptr [k],ecx  
0040103D  jmp         main+49h (401049h)  
0040103F  mov         dword ptr [ebp-0D0h],5  
00401049  mov         edx,dword ptr [ebp-0D0h]  
0040104F  mov         dword ptr [k],edx 

注意红色部分,编译器先把三目运算符的结果2存到了一块临时区域,最后又把2赋给k 
  
k=k--; 
00401025  mov         eax,dword ptr [k]  
00401028  mov         dword ptr [k],eax  
0040102B  mov         ecx,dword ptr [k]  
0040102E  sub         ecx,1  
00401031  mov         dword ptr [k],ecx  
可以看到最后一步计算的是k--,所以结果是1 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值