我正在复习有关 C 的 Material 。我不确定为什么答案是 12 和 32。在第一个 printf()
中,我认为 %d
= 2 (i
), %d
= 2 (j
), \n
= 新行。谁能解释一下?
#include <stdio.h>
int main(void) {
int i,j;
i=2 && (j=2);
printf("%d%d\n",i,j);
(i=3) || (j=3);
printf("%d%d\n",i,j);
}
最佳答案
对于第一个表达式,i=2 && (j=2);
被隐式计算为 i = (2 && (j = 2));
因为与逻辑运算符相比,赋值运算符 =
的优先级较低。在第一个条件中,2 的真值为 true
,逻辑 AND &&
导致所有条件都被评估,这意味着 j = 2
是也进行了评估,将 2 分配给 j
并返回 2,其评估为 true
。所以现在要评估的实际表达式是 i = 2 && 2;
,它是 true
,或者用 C 的术语来说,1。所以,i
被赋值为1,第一个输出为12
。
对于第二个表达式 (i=3) || (j=3);
,使用逻辑或||
,短路确保如果第一个条件的计算结果为true
,则整体表达式为true
因此不评估第二个条件。所以在 i = 3
被求值后,i
被赋值为 3 并且整个表达式为真,所以 j = 3
没有被求值。所以第二个输出是 32
。
关于c - 确定 C 的打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44862820/