简单c语言问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 17:27:45
mai()
{
int x,k;
k=(x=3*5,x*4,x+5);
prinft("k=%d,x=%d\n",k,x);
}
结果:k=20,x=15
请问k为什么会等于20?
为什么中间的x*4不求?

1 打错字了,应该是main()
2 a,b,c是C/C++中的所谓逗号表达式,运算顺序是从左到右,整个逗号表达式是最右边那个分式的值。

那么很显然,k=(x=3*5,x*4,x+5)中,我们先考虑x=3*5,x*4,x+5这个逗号表达式,他有3个分式:(1)x=3*5
(2)x*4 (3)x+5。
对于初始值x=3*5,可以得到x=15,然后x*4和x+5这2个式子的值分别为60和20,那么,这个逗号表达式的值就是20,因此k=20。x*4和x+5并不是没有运算,而是运算结果没有对x的值产生影响,因此x=15。

补充说明:比如对于a=1来说,式子a+2的运算结果是3,也就是说,该表达式的结果为3,但是如果这时候我们print下a的值,显示仍为1。这就是为什么我们想让a的值发生变化的时候要写a=a+2,而不直接写a+2的道理。
这样可以理解x*4为什么不对x产生影响了么?

x=3*5可知赋值给x得x=15,k就是赋了三次值,不过其值应该只能等于第三次赋的值,有赋值的基本概念就可以知道!

k=(x=3*5,x*4,x+5); 的确是首先执行x=3*5,然后x=15,即此时变成k=(15,60,20);根据逗号表达式的含义把最后一个值赋给k;懂了没?

括号内的覆值顺序是左到右,K最后一次接受到的值是X+5,所以是20