C语言=和==如何区分?

一、问题

这两个符号,在不严格的情况下,都可以读成"等于",但是两个"等于"在程序中有完全不同的⽤法。错误使⽤将导致程序⽆法得出正确的结果,⽽且有时没有错误提⽰。 那么,怎样正确区分这两个运算符呢?

二、解答

这两个符号⼀个是赋值运算符"=",另⼀个是关系运算符或称⽐较运算符"==",表示相等。

有些⽼师讲课时会特别强调读法,"a=b"读作"将b赋值于a","a==b" 读作"a 等于b",但⼤多数学⽣⾃⼰读的时候都是统统读成"a等于b",只有发⾔时才强制⾃⼰读"赋值"的。

关系运算符"=="与习惯思维的等于相同。以"a==b"为例,是看a与b是否相等, 要得到结论,成⽴或不成⽴,应⽤在条件中"如果a与b相等,去做某⼀操作"对应程序就是 if(a==b)......

⽽ "="是个赋值运算符。"a=b"是"将b的值赋于"a",或称"让a的值等于b的值"。 注意,此时a的被改变,将要造成⼀个即成事实。⽽"a==b〞是看a与b是否相等,a的值不被改变。在程序中⽤的最多的就是"="

下⾯分析两个错误的⽤法。

cpp 复制代码
#include <stdio.h>
int main()
{
    int a, b;
    a = 3;
    b = 4;
    if (a = b)
    {
        printf("相等");
    }
    else
    {

        printf("不等");
    }
    return 0;
}

上⾯程序显⽰的是"相等"还是"不等"呢?不要不假思索地回答"不等",应该是 "相等"。

上⾯程序可理解为:如果条件"a=b"成⽴,就显示"相等",不成⽴就显示"不相等"。那这个条件怎么可能是成⽴的呢。"将b的值赋于a",注意不是"a是否等于b"。

"将b的值赋于a"算是什么条件呢,这就要理解C 语⾔中什么是"真",什么是"假",赋值表达式的值这两个概念。

cpp 复制代码
C语⾔规定:

(1)语⾔中没有专门的逻辑值,任何数据都可以表⽰逻辑值,规定0 是假,除0外的任何其他数都是真。

(2)赋值表达式的值就是变量的值。

因此,赋值表达式 a=b 的值是3,再将3⽤在条件中,当成逻辑值去理解,结果是真。 因此,上⾯程序的执⾏结果显示"相等"。

这样的程序在编译时系统会给出⼀个警告信息。如果不理会警告,再编译⼀次,就成功通过了。

三、总结

区分=和==的应⽤领域,这是⼀个基本问题,⽤的多了,⾃然也就会了。但要理解⼀个莫名其妙的程序的执⾏结果,有时⽤到很多C语⾔的细节知识。

相关推荐
belldeep1 分钟前
如何阅读、学习 Tcc (Tiny C Compiler) 源代码?如何解析 Tcc 源代码?
c语言·开发语言
LuckyTHP1 分钟前
java 使用zxing生成条形码(可自定义文字位置、边框样式)
java·开发语言·python
Trent198536 分钟前
影楼精修-肤色统一算法解析
图像处理·人工智能·算法·计算机视觉
feifeigo12339 分钟前
高光谱遥感图像处理之数据分类的fcm算法
图像处理·算法·分类
北上ing2 小时前
算法练习:19.JZ29 顺时针打印矩阵
算法·leetcode·矩阵
.格子衫.3 小时前
真题卷001——算法备赛
算法
XiaoyaoCarter3 小时前
每日一道leetcode
c++·算法·leetcode·职场和发展·二分查找·深度优先·前缀树
Blossom.1183 小时前
使用Python实现简单的人工智能聊天机器人
开发语言·人工智能·python·低代码·数据挖掘·机器人·云计算
da-peng-song3 小时前
ArcGIS Desktop使用入门(二)常用工具条——数据框工具(旋转视图)
开发语言·javascript·arcgis
galaxy_strive3 小时前
qtc++ qdebug日志生成
开发语言·c++·qt