C语言基础疑问:赋值与判断运算后为何变量c的值为1
C语言表达式返回值规则说明
- 你对
b=(a=10)的运算逻辑理解完全正确。C语言中赋值表达式本身具备返回值,返回值为赋值操作完成后左操作数的最终取值。此处a=10执行后将变量a设为10,整个表达式的返回值也为10,赋值给b后b的取值自然为10。 - 变量c取值为1的核心原因是
==为C语言的相等关系运算符,和赋值运算符=的作用完全不同:- 所有关系运算符的运算结果均为布尔逻辑对应的整数值:关系成立时返回
1,关系不成立时返回0。 - 你的代码中变量a此前已经被赋值为10,
a==10的判断条件成立,因此该表达式返回值为1,赋值给c后c的最终取值就是1。
- 所有关系运算符的运算结果均为布尔逻辑对应的整数值:关系成立时返回
你提供的代码逐行逻辑验证如下:
#include <stdio.h> int main() { int a = 10; // 初始化a的值为10 int b=(a=10); // 赋值表达式a=10返回10,b被赋值为10 int c=(a==10); // 相等判断a==10成立,表达式返回1,c被赋值为1 printf("B %d\n",b); // 输出结果为 B 10 printf("C %d\n",c); // 输出结果为 C 1 }
注:日常写代码时注意区分赋值运算符
=和相等判断运算符==,二者混用是C语言新手最常见的bug来源之一。
内容的提问来源于stack exchange,提问作者Alelele
相关产品推荐
相关产品推荐

