【发布时间】:2020-09-23 21:31:14
【问题描述】:
我遇到了一个问题,促使我进行了一些研究。我发现有这样一段代码:
#include <stdio.h>
int main(void)
{
char i = 0;
i++ && puts("Hi!");
printf("%hhd\n", i);
}
只处理增量,并输出:
1
如果后缀增量被前缀替换,则不是这种情况,它会输出:
Hi!
1
为什么会这样?
如果问题很愚蠢,我深表歉意。
【问题讨论】:
-
了解逻辑运算符的短路评估。
-
&&和||进行短路评估。如果您说x && y,那么如果x 为假(0),那么整个表达式为假,因此不需要评估y部分。而且,在您的程序中,我 is false (0) 因为它在 AFTERWARDS 之后递增(它是一个后递增) -
它看起来不像
i++应该被评估为false的true -
如果它是逻辑表达式的一部分(例如包含
&&或||的表达式),则所有内容都被视为真或假 - 值为 0 为假,其他为真。跨度>
标签: c increment postfix-operator prefix-operator