求解!!!
#include<stdio.h>main()
{
int a = 10;
a = ( 3 * 5 , a + 4);
printf("a = %d n", a);
}
这个程序执行后,结果为a=14是怎么来得?!
这是逗号表达式
从左向右执行 如果像这样是赋值语句则被赋的就是最右边的 所以a = (3 * 5,a+4);
等价于a = a + 4; 但是其他的也是会执行的 比如a = (b++,a+b);如果b一开始是1a一开始是2则最终a=4不是3 逗号表达式,从左到右执行,最后表达式表示的值是最后一个值
b,a=1
b=a++,a++,a+3,a;
那么b就是加了两次后的2 5: int a = 10;
00401028 mov dword ptr ,0Ah ;把10放到这个基址寄存器里面
6:
7: a = ( 3 * 5, a + 4 );
0040102F mov eax,dword ptr ;把基址寄存器里面的东西放到eax里面
00401032 add eax,4 ;eax 加 4 就等于 14
00401035 mov dword ptr ,eax ;再把eax里的14放到基址寄存器里面
8:
9: printf("a = %d\n",a);
00401038 mov ecx,dword ptr
0040103B push ecx
0040103C push offset string "a = %d\n a= %d" (0042201c)
00401041 call printf (00401080)
00401046 add esp,8
10: }
00401049 pop edi
0040104A pop esi
0040104B pop ebx
以上是他的汇编代码,不过3*5是什么意思,在汇编代码里面也没出现它的作用啊,或许是我眼拙没看出来,呵呵!^_^!
根据汇编的话,14就是这样出来的,亲,懂了吗!!^&^!
青玄 发表于 2013-11-1 12:28 static/image/common/back.gif
5: int a = 10;
00401028 mov dword ptr ,0Ah ;把10放到这个基址寄存器里面 ...
额!有点看不懂!3*5是3乘5 czr27 发表于 2013-10-31 21:57 static/image/common/back.gif
逗号表达式,从左到右执行,最后表达式表示的值是最后一个值
b,a=1
b=a++,a++,a+3,a;
那就是说a=a+4,而不等于3*5? 虽然3*5 运行了,但是他没有将结果付给任何值,所以a还是10,在运行a+4,所以是14 #include<stdio.h>
main()
{
int a = 10;
a = ( a=3 * 5,a+4 );
printf("a = %d n", a);
}
这样结果为19 悬赏给我吧 {:1_1:}a = ( 3 * 5 , a + 4); 该表达式是以最后一次赋值为准的,这么规定的所以10+4=15希望LZ理解 逗号表达式返回最后一个表达式的值 标准如此 然后编译器制定规则如此 所以如此 Z_belief 发表于 2013-11-1 13:00 static/image/common/back.gif
额!有点看不懂!3*5是3乘5
哦,这个没关系,如果汇编不懂得话,可以看一下甲鱼大哥的《0基础入门学习汇编语言》和他的《win32汇编》
这样的话,你就能看懂了,也会使你了解到一个程序在计算机的底层是怎么运作的。 逗号表达式。。 4: int a = 10;
00401028 mov dword ptr ,0Ah
5: a = ( 3 * a , a + 4);
0040102F mov eax,dword ptr
00401032 add eax,4
00401035 mov dword ptr ,eax
6: printf("a = %d\n", a);
00401038 mov ecx,dword ptr
0040103B push ecx
0040103C push offset string "a = %d n" (0042201c)
00401041 call printf (00401070)
00401046 add esp,8
我把你的程序改了一下,3*a;结果依然是14.
从这一点就可以证明逗号表达式应该算的是最后一个表达式,之前的都不计数。
至于到底是什么还是看书吧。。。。 a=(3*5,a+4);
这个语句是把(3*5,a+4)的值赋给a
因为(3*5,a+4)的值为14.
,起到了一个分隔符的作用 青玄 发表于 2013-11-1 12:28 static/image/common/back.gif
5: int a = 10;
00401028 mov dword ptr ,0Ah ;把10放到这个基址寄存器里面 ...
我很喜欢你的思路,呵呵,用汇编来展示细节,{:2_30:}
页:
[1]