Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        3年前关闭。
                                                                                            
                
        
我目前正在为决赛做准备。我无法弄清楚这个答案,以及为什么会是那个答案。有人能向我解释答案以及它是如何产生的吗?这是从一个旧的考试。先感谢您!

int main(){
   int i = 1, j=1, k=1;
   printf("%d", ++i || ++j && ++k);
   printf("%d %d %d \n", i, j, k);
   return 0;
}

最佳答案

如果您不知道运算符的优先级,请使用here这个程序来了解优先级,这是一个非常简单的示例。根据我的理解,这就是我的想法,让我们逐步进行(按照从左到右的关联):


++胜过一切,我无语:

int main(){
   int i = 1, j=1, k=1;
   printf("%d\n", ++i );
   printf("%d %d %d \n", i, j, k);
   return 0;
}



输出:

2
2 1 1



这里是逻辑运算符,现在您需要知道某些表达式(如(expr1 || expr2))的情况,当expr1为零或false时,expr2被执行,这里i = 2,因此不会。同样,在执行(expr1 || expr2)之后,第一个printf打印true(1)或false(0)

int main(){
   int i = 1, j=1, k=1;
   printf("%d\n", ++i || ++j);
   printf("%d %d %d \n", i, j, k);
   return 0;
}



输出:

1
2 1 1



最后,在(expr1 && expr2)的情况下,expr2仅在expr1为true或1时执行,在这种情况下expr1为true,因此++ k不会消失。对于第一张printf,也要遵循上述相同的规则。

int main(){
   int i = 1, j=1, k=1;
   printf("%d\n", ++i || ++j && ++k);
   printf("%d %d %d \n", i, j, k);
   return 0;
}



输出:

1
2 1 1


请同时参阅以下参考资料:

Order of execution for an if with multiple conditionals

Order of logical OR execution in C

关于c - printf优先于|| &&在其中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37063523/

10-11 00:26