【发布时间】:2016-02-02 04:03:16
【问题描述】:
请告诉我 x 之后的值是什么(用 c 语言)
x=1;
x=x--&&++x;
我认为它应该是 0,因为x&&++x 会给出 1,而后减量会使其成为 0。
但是当我在计算机上输入这个结果是 1。 为什么后减量在这里不起作用。
我是这样想的:
pre 递增的优先级高于 && 所以两个 x 都应该被视为 2(布尔值 true )所以 x&&++x 将给出 1 而后递减应该将其递减为 0。
这不是一个重复的问题,因为这不是关于后减量如何工作的未定义行为的情况。
【问题讨论】:
-
命名你编程的语言?
-
如果这是关于 C 的,那么表达式会产生未定义的行为,
x允许编译器让恶魔飞出你的鼻子。如果是关于 C 的,那么这个问题已经在这里被问了太多次了。 -
为了避免未定义的行为,你需要写
int y = x--&&++x; x=y; -
@oo_miguel:如果您的
some_expression_with_x修改了x的值,就会出现问题。短路评估是一个红鲱鱼,在这里。x = something修改了x,x--也是如此,所以x = x--在同一表达式中修改了两次x的值,修改之间没有序列点。