为什么表达式i = 2
返回2?这基于什么规则?
printf("%d\n", i = 2 ); /* prints 2 */
在Java / C#中花了很长时间后,我在C域。原谅我的无知。
答案 0 :(得分:43)
评估到2
,因为这是标准定义它的方式。来自C11 Standard,第6.5.16节:
赋值表达式具有赋值后左操作数的值
允许这样的事情:
a = b = c;
(尽管关于这样的代码是否是好事还存在争议。)
顺便说一句,这种行为在Java中被复制(我敢打赌它在C#中也是一样的。)
答案 1 :(得分:16)
规则是返回转换为赋值给的变量类型的=
的右操作数。
int a;
float b;
a = b = 4.5; // 4.5 is a double, it gets converted to float and stored into b
// this returns a float which is converted to an int and stored in a
// the whole expression returns an int
答案 2 :(得分:3)
答案 3 :(得分:3)
首先考虑表达式然后打印最左边的变量。
示例:
int x,y=10,z=5;
printf("%d\n", x=y+z ); // firstly it calculates value of (y+z) secondly puts it in x thirdly prints x
注意:
x++
是后缀,++x
是前缀所以:
int x=4 , y=8 ;
printf("%d\n", x++ ); // prints 4
printf("%d\n", x ); // prints 5
printf("%d\n", ++y ); // prints 9
答案 4 :(得分:2)
在C(差不多)中,所有表达式都有2个的东西
1)值
2)副作用
表达式的值
2
是2
;它的副作用是“无”;
表达式的值
i = 2
是2
;它的副作用是“将名为i
的对象中的值更改为2”;