int main() {
int d,a = 1&0&&(d=4);
printf(“%d”,d);
return 0;
}
根据运算符的优先级()语句d,但是在上面的程序逻辑中应被赋值,并且首先执行。 d值未分配给4。请任何人帮助我了解上述程序。我已经尝试过gcc和一些在线编译器
1 & 0 && (d=4)
的评估如下:(1 & 0) && (d=4)
(1 & 0)
为0&&
从不评估d=4
从未分配d
包含垃圾,因为未初始化局部变量如果将d
更改为int d
,则程序的输出将为int d = 42
让我们先看看42
。>>
优先级和关联性决定什么是什么的操作数。例如,他们告诉我们
f() + g() * h()
手段
f() + g() * h()
而不是
f() + ( g() * h() ) # * has higher precedence than +
优先级不能确定操作数的求值顺序。在我们的示例中,可以将三个函数以任意顺序调用,只要
( f() + g() ) * h() # If + had higher precedence than *
的结果和g()
的结果相乘在一起,并且h()
的结果与相乘的结果相加即可。] >返回
f()
优先级和关联性简单地说,上述等同于以下内容:
1 & 0 && ( d = 4 )
那么这是做什么用的?
( 1 & 0 ) && ( d = 4 ) # & has higher precedence than &&
指示仅在其左侧为true时才评估其右侧。这称为“&&
”或“短路”。
[shift-circuit evaluation为假,因此从不评估1 & 0
。