Онлайн компилятор C

#include <stdio.h> int main() { int i = 10; int k = 20; int m; m = (3 > 2) && (k = 8); printf("m=%d, k=%d\n", m, k); return 0; }
这段代码定义了两个整数变量 i 和 k,然后计算一个逻辑表达式并将结果赋值给 m。表达式 `(3 > 2) && (k = 8)` 中,`3 > 2` 为真,接着执行 `k = 8` 这个赋值操作,由于赋值表达式的值是所赋的值(非零即为真),所以整个 && 结果为真,m 被赋值为 1。最后打印 m 和 k 的值。

- 注意在 C 语言中,逻辑与 `&&` 运算符具有短路特性:如果左侧为假,右侧不会执行。这里左侧为真,所以右侧的赋值 `k = 8` 会被执行,导致 k 的值从 20 变为 8。
- 思考一下,如果左侧条件改为 `(3 > 4)`,那么右侧的赋值还会执行吗?k 的值会变成多少?