6

我很惊讶字符串加布尔值具有类似的三元运算效果:

int apple = 2;                                                                      
printf("apple%s\n", "s" + (apple <= 1));

如果apple <= 1,它将打印苹果。为什么这行得通?

4

1 回答 1

11

因为条件计算结果为 0 或 1,并且字符串"s"在 0 终止符之前正好包含一个字符。因此,"s" + bool将评估"s"if的地址bool为 false,以及后面的一个字符,如果为 true,则评估 0 终止符的地址。

这是一个很酷的 hack,但永远不要认真使用这样的代码。

于 2012-07-01T00:42:41.887 回答