c语言中字符串的子式咋样输出,c语言的问题

这个问题用汇编给你回答吧

5:        int a = 0;

004015B8   mov         dword ptr [ebp-4],0

6:        int b = 5;

004015BF   mov         dword ptr [ebp-8],5

7:        a =(++b)+(++b)+(++b);

004015C6   mov         eax,dword ptr [ebp-8]

004015C9   add         eax,1

004015CC   mov         dword ptr [ebp-8],eax                b=6;

====================================

004015CF   mov         ecx,dword ptr [ebp-8]

004015D2   add         ecx,1                                          b=7;

004015D5   mov         dword ptr [ebp-8],ecx

====================================

004015D8   mov         edx,dword ptr [ebp-8]

004015DB   add         edx,dword ptr [ebp-8]           7+7 =14  结果保存在edx寄存器中;

===================================

004015DE   mov         eax,dword ptr [ebp-8]

004015E1   add         eax,1

004015E4   mov         dword ptr [ebp-8],eax            b=8;

===================================

004015E7   add         edx,dword ptr [ebp-8]           8+[edx] 即 8+14 = 22;

004015EA   mov         dword ptr [ebp-4],edx          22存到a的存储单元中

上面回答为24的同志,您忽略了“+”实际是个二元操作符,出现连加的时候,只会先把前面计算出来的数值先存储起来然后再作为操作数参与下一次加法。

注:我的调试是在VC6.0环境下。《c++ programming language》一书中说,子表达式的求值顺序并没有定义,因此象题目中的值是依赖于编译器的,语言本身并没有规定,而其这种代码的可移植性也是很差的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值