我对以下代码段有疑问
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?请帮帮我
答案 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++))