繁体   English   中英

为什么c的值不变?

[英]Why does the value of c not change?

#include <stdio.h>
void main()
{
    int a = 5, b = -7, c = 0, d;
    d = ++a && ++b || ++c;
    printf("\n %d,%d,%d,%d", a,  b, c, d);
}

在上面的代码中,输出为6,-6、0、1。 为什么c的值和d 1的值? d是如何得到1的值的?

那是因为|| 首先检查左侧部分,如果为true,则返回true,而不评估右侧部分。

在C中,任何非零均被视为True,零被视为False

int a = 5, b = -7, c = 0, d;
    d = ++a && ++b || ++c;

这里++ a和++ b非零,并且都被视为True,因此++a&&++b变为True,并且表达式在那儿停止求值。

已经有很好的答案,解释为什么行后c0

d = ++a && ++b || ++c;

被执行。

该行等效于:

d = (++a && ++b || ++c);

这就解释了为什么d1

int a = 5, b = -7, c = 0, d;
d = ++a && ++b || ++c;

让我们逐一分析语句

++ a:a = 6

++ a && ++ b:b变为-6,然后它变为:6 && -6,等于1

现在有一个|| (或符号),但这不会影响d的值,因为

1||"value2" =1 ,因此编译器不评估“ ++ c”。

因此c保持为0,d变为6 && -6 = 1

&&的优先级高于|| 因此,首先对++ a && ++ b进行评估,然后它才成立。 表达式为true || ++c true || ++c和|| 因为|| ,所以从左到右求值 遇到true,它将返回1到d,而不评估++ c。 所以c值不会增加

创建评估树以进行评估。 || 一部分是父级,而其侧面的两个部分是父级。 当它评估一个孩子时,如果它为真,则不会评估另一个孩子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM