解释这个序列的执行:x = j || i ++ && 1

xsa*_*i3x 0 c

我在接受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)

你能解释一下原因吗?

M.M*_*M.M 6

这是测试您对运算符优先级(或者您喜欢的语言语法)的了解,并且您知道运算符优先级和评估顺序之间的区别.

该协会是:

X = (j || (i++ && 1));
Run Code Online (Sandbox Code Playgroud)

请注意,优先级通常不等于执行顺序.在这种情况下,我们有以下评估逻辑:

  • 评估=我们需要评估其右手操作数
  • 评估(j || stuff...)我们首先评估j
  • j是非零,所以结果(j || stuff...)1,我们不评估stuff由于短路行为||
  • 现在我们已经确定=已经评估的右侧操作数1,因此分配1X.

最终结果:X == 1i,j不变.


San*_*h A 5

这里只检查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)