c语言例题
int i=5,j=5,p,q;p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
我用程序走了一遍,结果p=15,q=22,为什么出现这种结果求高手指点。 这种代码用不同的C语言编译器编译出来的程序,执行结果本来就不一样。 i++:这个是一般用在循环上吧,i++是执行完后面的语句才加1;
而++j就先做j+1才执行后面的语句。(++j)+(++j)+(++j) 这种表达式本身就不符合C语言对代码的要求是毫无意义的这是没有意义的[/color]毫无意义 ≠ 错
下面是vc6的计算 别的编译器不一样,
1 6: q =(++j)+(++j)+(++j);
2 00401036 mov eax,dword ptr 移动J=5到寄存器eax内
3 00401039 add eax,1 在寄存器eax值上加1,eax=6
4 0040103C mov dword ptr ,eax 把寄存器的值移动到变量j上去,j= 6
5 0040103F mov ecx,dword ptr 移动J=6到寄存器ecx
6 00401042 add ecx,1 在寄存器上ecx+1,j=6
7 00401045 mov dword ptr ,ecx 把寄存器ecx上的值移到J上去,J=7
8 00401048 mov edx,dword ptr 把J=7移动到寄存器edx=7
9 0040104B add edx,dword ptr edx值+j此时j=7,edx=7+7
10 0040104E mov eax,dword ptr 把j=7Move给 第一个寄存器eax
11 00401051 add eax,1 eax再加1,此时寄存器eax=8
12 00401054 mov dword ptr ,eax 把此时的eax的值move给 j=8
13 00401057 add edx,dword ptr edx值= edx+j = 14+8
14 0040105A mov dword ptr ,edx edx值 move给 j = 22 快乐呵呵 发表于 2015-9-5 22:31
i++:这个是一般用在循环上吧,i++是执行完后面的语句才加1;
而++j就先做j+1才执行后面的语句。(++j)+( ...
看这样好像是先计算前两个括号里的++运算再执行第一个加法运算,然后执行最后一个++运算再加上去是吧?
页:
[1]