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的值不被改变。在程序中⽤的最多的就是"="

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

#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 语⾔中什么是“真”,什么是“假”,赋值表达式的值这两个概念。

C语⾔规定:

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

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

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

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

三、总结

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

相关推荐

  1. C语言===如何区分

    2024-02-15 02:30:01       48 阅读
  2. C++】C语言C++的区别

    2024-02-15 02:30:01       26 阅读
  3. C&C++语言defineconst区别

    2024-02-15 02:30:01       54 阅读
  4. c++c语言区别实例

    2024-02-15 02:30:01       41 阅读
  5. C语言 typedef #define 区别

    2024-02-15 02:30:01       68 阅读
  6. C语言sizeofstrlen区别

    2024-02-15 02:30:01       59 阅读
  7. C语言C++C#的区别在什么地方?

    2024-02-15 02:30:01       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-15 02:30:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-15 02:30:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-15 02:30:01       87 阅读
  4. Python语言-面向对象

    2024-02-15 02:30:01       96 阅读

热门阅读

  1. SpringBoot数据请求和响应

    2024-02-15 02:30:01       45 阅读
  2. C语言系列4——函数:C语言的模块化力量

    2024-02-15 02:30:01       42 阅读
  3. Linux篇:网络基础1

    2024-02-15 02:30:01       42 阅读
  4. 什么是vite,如何使用

    2024-02-15 02:30:01       66 阅读
  5. rtt设备io框架面向对象学习-输入捕捉设备

    2024-02-15 02:30:01       59 阅读
  6. 双指针_贪心_1921_D. Very Different Array

    2024-02-15 02:30:01       52 阅读
  7. Linux中MySQL表名与@TableName中大小写关系

    2024-02-15 02:30:01       47 阅读
  8. 寒假作业2024.2.14

    2024-02-15 02:30:01       45 阅读
  9. 二叉树 ---- 所有结点数

    2024-02-15 02:30:01       53 阅读
  10. Nginx介绍和使用

    2024-02-15 02:30:01       54 阅读
  11. 「Linux」基础命令

    2024-02-15 02:30:01       55 阅读
  12. 深度学习与机器学习研究综述

    2024-02-15 02:30:01       51 阅读