Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我很惊讶字符串加布尔值具有类似的三元运算效果:
int apple = 2; printf("apple%s\n", "s" + (apple <= 1));
如果apple <= 1,它将打印苹果。为什么这行得通?
apple <= 1
因为条件计算结果为 0 或 1,并且字符串"s"在 0 终止符之前正好包含一个字符。因此,"s" + bool将评估"s"if的地址bool为 false,以及后面的一个字符,如果为 true,则评估 0 终止符的地址。
"s"
"s" + bool
bool
这是一个很酷的 hack,但永远不要认真使用这样的代码。