首先,这是我正在处理的问题:
在C中评估以下每个表达式:
int x=1, y=7, z=0; char a='m';
1)
a ? y-x : x–y
2)x = 5 ? (y = z) : (z = y)
我理解其余的问题,但数字(1)让我困惑......它不应该是一个逻辑表达式吗?
我的意思是'm'
不能是真的,也不是假的;我该怎么回答这个问题?它只是"错误"?还是我错过了什么?
对于数字(2),语句(z=y)
应该执行哪个z
更改为7,但它不应该是x == 5
并且我在终端上尝试了它,它将x
和y
都更改为0
。
我错过了什么?
答案 0 :(得分:5)
在C中,任何数字类型都可以被评估为bool,对于这种类型,任何非零值都是' true'。因此,由于字符'm'
非零(仅'\0'
为零),因此它是" true"
优先级 - C中的所有运算符都具有优先级,而?:虽然低于大多数运算符,但高于赋值运算符。所以这个表达式相当于:
x = (5 ? (y = z) : (z = y))