c - 确定 C 的打印

标签 c

我正在复习有关 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/

相关文章:

C : Input file does not sort in array

c - 尝试在 C 中创建链表

c++ - Win32 : Modal dialog not returning focus

c - GCC C vector 扩展 : How to move contents of a vector to the left by one element?

C 程序打印意外的字。这是怎么发生的?

c - 此 C 代码如何返回枚举?

java - JNI Android - 将 char* 转换为字节数组并将其返回给 java

c - 如何使用整数除法 SSE 指令?

c - 使用命名管道的进程间通信

c - 由于所有数字都是有效的返回值,如何指示错误?