什么是一个任务返回?

为什么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 
  1. 将值2分配给i
  2. 评估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