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

相关推荐
38242782718 小时前
python:Ajax爬取电影详情实战
开发语言·python·ajax
微爱帮监所写信寄信18 小时前
微爱帮监狱写信寄信工具服务器【Linux篇章】再续:TCP协议——用技术隐喻重构网络世界的底层逻辑
linux·服务器·开发语言·网络·网络协议·小程序·监狱寄信
冰西瓜60018 小时前
STL——vector
数据结构·c++·算法
天呐草莓18 小时前
集成学习 (ensemble learning)
人工智能·python·深度学习·算法·机器学习·数据挖掘·集成学习
努力学算法的蒟蒻18 小时前
day45(12.26)——leetcode面试经典150
算法·leetcode·面试
进击的小头18 小时前
09_C 语言进阶之面向对象编程:跨平台设计 —— 从类型封装到工程实践
c语言
赵庆明老师18 小时前
VS2026扩展插件Visual Commander
java·开发语言
闻缺陷则喜何志丹18 小时前
【离线查询 前缀和 二分查找 栈】P12271 [蓝桥杯 2024 国 Python B] 括号与字母|普及+
c++·算法·前缀和·蓝桥杯·二分查找··离线查询
额呃呃18 小时前
信号量唤醒线程的实际机制
java·开发语言·jvm