作业返回的是什么?

时间:2012-03-01 10:32:10

标签: c

为什么表达式i = 2返回2?这基于什么规则?

printf("%d\n", i = 2 ); /* prints 2 */

在Java / C#中花了很长时间后,我在C域。原谅我的无知。

5 个答案:

答案 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)

  1. 将值2分配给i
  2. 评估i变量并显示它

答案 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”;