我在接受C编程的采访时遇到了这个问题.它是:
int X,i=4,j=7;
X=j || i++ && 1;
Run Code Online (Sandbox Code Playgroud)
X和的价值是i什么?
我在编译器上测试了程序,输出是:
X=1 , i =4
Run Code Online (Sandbox Code Playgroud)
你能解释一下原因吗?
这是测试您对运算符优先级(或者您喜欢的语言语法)的了解,并且您知道运算符优先级和评估顺序之间的区别.
该协会是:
X = (j || (i++ && 1));
Run Code Online (Sandbox Code Playgroud)
请注意,优先级通常不等于执行顺序.在这种情况下,我们有以下评估逻辑:
=我们需要评估其右手操作数(j || stuff...)我们首先评估jj是非零,所以结果(j || stuff...)是1,我们不评估stuff由于短路行为||=已经评估的右侧操作数1,因此分配1给X.最终结果:X == 1和i,j不变.
这里只检查j的值是否为真.如果j为真,则将值1(真)分配给x,然后程序退出
注意i ++没有被执行,
这也被称为C编程中的短路
int X,i=4,j=7;
X=j || i++ && 1;
x = j != 0 // is what is executed
Run Code Online (Sandbox Code Playgroud)
如果j为0,则执行(i ++ && 1)