Jes*_*ada 1 c if-statement logical-operators
该计划发布如下:
#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);
}
Run Code Online (Sandbox Code Playgroud)
我理解第一个printf语句但在第二个if语句中我不明白当只有一个等号而不是两个时它会评估什么.
输出是:
a = 0, b = 0, c = 32767, d = -341260496
a = 4, b = 0, c = 32767, d = -341260496
Run Code Online (Sandbox Code Playgroud)
所以第二个if语句最终是真的但是怎么样?
我认为一个等号将为变量赋值.
我不明白如果只有一个等号而不是两个那么会评价.
一个等号使它成为一个任务.因此,a=4求值为4,逻辑"OR"运算符将其解释为"true" ||.此时由于短路没有进一步的评估,因此剩余的变量保留了它们在if语句之前的值.
注意:打印未分配的变量会导致未定义的行为.您应该更改声明行,如下所示:
int a = 0, b = 0, c = 0, d = 0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |