gpt4 book ai didi

c - 短路评估评估 if( (a = 4) || (b = 6) || (c = 7) || (d = 8) )

转载 作者:太空宇宙 更新时间:2023-11-04 00:23:41 25 4
gpt4 key购买 nike

程序贴在下面:

#include <stdio.h>

int main(void)
{
int a, b, c, d;

printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);

if( (a = 4) || (b = 6) || (c = 7) || (d = 8) )
printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);
}

我理解第一个 printf 语句,但在第二个 if 语句中,我不明白当只有一个等号而不是两个等号时它会计算什么。

输出是:

        a = 0, b = 0, c = 32767, d = -341260496
a = 4, b = 0, c = 32767, d = -341260496

所以第二个 if 语句最终为真,但是如何呢?
我认为一个等号会为变量赋值。

最佳答案

I do not understand what if would evaluate when there is only one equal sign instead of two.

一个等号使它成为一个赋值。因此,a=4 的计算结果为 4,逻辑“OR”运算符 || 将其解释为“true”。此时由于短路,没有进一步的评估发生,因此其余变量保留它们在 if 语句之前的值。

注意:打印未分配的变量会导致未定义的行为。您应该按如下方式更改声明行:

int a = 0, b = 0, c = 0, d = 0;

关于c - 短路评估评估 if( (a = 4) || (b = 6) || (c = 7) || (d = 8) ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44422983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com