c语言,如下程序运行结果,解释?

#include"stdio.h"
main()
{
int x=1,y=2,z=3;
x=y+z+5,++y;
printf("%d\n",x);
x=(y+z+5,++y);
printf("%d\n",x);
}

第1个回答  2013-03-25
结果为
10
4
解释
x=y+z+5,++y;//x=2+3+5=10,++y先自加在取值y=3 而x是10
x=(y+z+5,++y);逗号运算符取最后面的值 故x是4
第2个回答  2013-03-25
这个程序有错误,在VC6.0中不能运行,正确的程序为:

#include"stdio.h"
void main()
{
int x,y,z;
x=1;y=2;z=3;
x=y+z+5;++y;
printf("%d\n",x);
x=y+z+5;++y;
printf("%d\n",x);
}
输出两个数,10 11
第3个回答  2013-03-25
10,4
x=y+z+5,++y;整个是逗号表达式,从左向右依次运行,所以x=2+3+5=10,y=3

x=(y+z+5,++y);括号里面是逗号表达式,整个括号的值为右边那个表达式的值,即为4

自己调试一下,如果很难理解的,可以看一下对应的汇编代码来研究是怎么实现的,部分汇编如下:
5: x=y+z+5,++y;
0040103D mov eax,dword ptr [ebp-0Ch]
00401040 mov ecx,dword ptr [ebp-8]
00401043 lea edx,[ecx+eax+5]
00401047 mov dword ptr [ebp-4],edx
0040104A mov eax,dword ptr [ebp-8]
0040104D add eax,1
00401050 mov dword ptr [ebp-8],eax

7: x=(y+z+5,++y);
00401064 mov edx,dword ptr [ebp-8]
00401067 add edx,1
0040106A mov dword ptr [ebp-8],edx
0040106D mov eax,dword ptr [ebp-8]
00401070 mov dword ptr [ebp-4],eax
其中ptr [ebp-8]为y,ptr [ebp-4]为x,汇编代码我估计是经过优化的本回答被提问者和网友采纳
第4个回答  2013-03-25
x=10
第一个就是将y+z+5的值付给x,让后y自加一y=3

x=4
第二个是括号运算,不管括号中有多少表达式或值,输出的都是括号中最后一个值,由于前面y自加一一次等于3,再自加一后等于4
相似回答