【C/C++】 if (a=1) {...}, 每年都有无数学生犯的错 ~ 说说赋值操作符

本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者"海洋饼干叔
叔";本文不允许以纸质及电子出版为目的进行抄摘或改编。
1.《Python编程基础及应用》,陈波,刘慧君,高等教育出版社。免费授课视频 Python编程基础及应用
2.《Python编程基础及应用实验教程》, 陈波,熊心志,张全和,刘慧君,赵恒军,高等教育出版社Python编程基础及应用实验教程
3. 《简明C及C++语言教程》,陈波,待出版书稿。免费授课视频

a = 3中的赋值(assignment)操作符除了将3传递给变量a之外,还有其它额外功能。请先看下述C语言代码:

//Project - Assignment
#include <stdio.h>

int main(){
    int a, b;
    a = b = 3;
    printf("a = %d, b = %d.\n",a,b);
  
    if (a=4)
        printf("a is equal to 4.");
    else
        printf("a is not equal to 4.");
 
     return 0;
}

上述代码的执行结果为:

a = 3, b = 3.
a is equal to 4.

第6行a = b = 3的执行过程如下:

  • b = 3是一个表达式,该表达式中的赋值操作符将3赋值给变量b,同时返回整数3作为表达式的值。
  • a = b = 3也是一个表达式,子表达式 b = 3 的值作为右值(right value)被第1个赋值操作符赋值给变量a。

第9 ~ 12行代码的本意是判断变量a是否等于4。显然,a的值为3,代码预期应输出"a is not equal to 4.“,但实际的输出结果却是"a is equal to 4.”。问题出现在第9行,判断两个值是否相等,应使用双等号,即(a == 4)。(a=4)对于编译器而言,是完全正确的表达。这个表达式除了将4赋值给变量a之外,还会返回整数4作为表达式的值。对于if条件语句,非零即真,因此,(a=4)被视为逻辑真,第10行代码被执行。

类似于上述代码第9行的错误很多初学者都犯过。在早期的编译器里,上述代码被“愉快”接受。可能是意识到第9行的写法多半是个错误,作者注意到mingw编译器会在第9行代码处给出警告。

为了帮助更多的年轻朋友们学好编程,作者在B站上开了两门免费的网课,一门零基础讲Python,一门零基础C和C++一起学,拿走不谢!

简洁的C及C++
由编程界擅长教书,教书界特能编程的海洋饼干叔叔打造
Python编程基础及应用
由编程界擅长教书,教书界特能编程的海洋饼干叔叔打造

如果你觉得纸质书看起来更顺手,目前Python有两本,C和C++在出版过程中。

Python编程基础及应用

Python编程基础及应用实验教程
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值