什么是一个任务返回?
为什么expression式i = 2
返回2? 这是基于什么规则?
printf("%d\n", i = 2 ); /* prints 2 */
我花了很长时间在Java / C#后在C域。 原谅我的无知
它的评估为2
因为这是标准如何定义它。 从C11标准第6.5.16节:
赋值expression式具有赋值后左操作数的值
这是允许这样的事情:
a = b = c;
(尽pipe对于这样的代码是否是好事存在一些争议。)
顺便说一下,这种行为是在Java中复制(我敢打赌,它在C#中也是如此)。
该规则是将=
转换的右侧操作数返回给分配给的variables的types。
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分配给i
- 评估ivariables并显示它
在C中(几乎)所有的expression式都有两个东西
1)一个值
2)副作用
expression式的值
2
是2
; 其副作用是“无”;
expression式的值
i = 2
是2
; 其副作用是“将名称i
的值更改为2”。
首先考虑expression式,然后打印最左边的variables。
例:
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