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语⾔的细节知识。

相关推荐
小电玩9 分钟前
JAVA SE8
java·开发语言
爱数模的小云25 分钟前
【华为杯】2024华为杯数模研赛E题 解题思路
算法·华为
白葵新28 分钟前
PCL addLine可视化K近邻
c++·人工智能·算法·计算机视觉·3d
seanli100833 分钟前
线性dp 总结&详解
算法·动态规划
小丁爱养花35 分钟前
记忆化搜索专题——算法简介&力扣实战应用
java·开发语言·算法·leetcode·深度优先
Faris_yzf43 分钟前
物联网LoRa定位技术详解
科技·算法
爱上语文1 小时前
Springboot三层架构
java·开发语言·spring boot·spring·架构
Crossoads1 小时前
【数据结构】排序算法---快速排序
c语言·开发语言·数据结构·算法·排序算法
DS数模1 小时前
2024华为杯研赛E题保姆级教程思路分析
算法·数学建模·华为·华为杯数学建模·2024华为杯·2024研赛
6230_1 小时前
git使用“保姆级”教程2——初始化及工作机制解释
开发语言·前端·笔记·git·html·学习方法·改行学it