什么是0.5 ++的c

时间:2015-08-26 10:51:42

标签: c

我对以下代码段有疑问

float func(float x, float y)
{ 
 return x*0.5 + y;
}
int main()
{
 float x = 0.5;
 if (x = func(x, x++))
 {
  printf("%f\n", x);
 }   
}

上述代码的答案为1.250000。在函数调用中,x ++表示0.5 ++。函数传递1.0到x ++参数。我想知道0.5 ++是什么意思?为什么它再添加0.5而不是添加1.0?请帮帮我

2 个答案:

答案 0 :(得分:2)

正如其他人所解释的那样,发布的代码包含未定义的行为,因此没有意义。

因此,我们假设您将问题更改为......

  

你能告诉我什么是0.5 ++?是1.0还是1.5,还有为什么?

两者都不是:0.5++无效的C代码。

  

C99§6.5.2.4约束:1。后缀增量的操作数[...]应为可修改的左值。

这意味着它必须是可以存储值的东西。 0.5是常量,无法修改。

如果您再次将问题更改为:

  

浮动x = 0.5;

     

printf(“%f \ n”,x ++);

     

什么是印刷值?

...然后我们最终降到适当的C.打印的值将是“0.500000”,因为后缀运算符的结果是之前的值增量。

x的新值是1.5。参见

  

C99§6.5.2.4语义:2。后缀++运算符的结果是操作数的值。作为副作用,操作数对象的值会递增(即,将相应类型的值1添加到其中)。

答案 1 :(得分:-4)

该行:

if (x = func(x, x++))

应该是:

if (x == func(x, x++))