当前位置: 首页 > 编程笔记 >

浅谈C语言=与==的区别详解

端木令雪
2023-03-14
本文向大家介绍浅谈C语言=与==的区别详解,包括了浅谈C语言=与==的区别详解的使用技巧和注意事项,需要的朋友参考一下

在 C 语言中,最容易产生混淆的操作符要属“=”与“==”。其中,“=”并不等于符号,而是赋值操作符,如 x=3。除此之外,还可以在一个语句中向多个变量赋同一个值,即多重赋值。例如,在下面代码中把 0 同时赋给 x、y 与 z。

x = y = z = 0;

相对于只有一个等号的赋值操作符,关系操作符中的等于操作符采用两个等号“==”来表示。正因如此,导致了一个潜在的问题:出于习惯,我们可能经常将需要等于操作符的地方写成赋值操作符,如下面的代码:

int x=10;
int y=1;
if(x=y)
{
  /*处理代码*/
}

在上面的代码中,if 语句看起来好像是要检查变量 x 是否等于变量 y。实际上并非如此,此时if语句将变量 y 的值赋给变量 x 并检查结果是否为非零。因此,虽然这里的 x 不等于 y,但是 y 的值为 1,if 语句还是会返回真。

当然,当确实需要先对一个变量进行赋值之后再检查变量是否非零时,可以考虑显式给出比较符。示例代码如下:

int x=10;
int y=1;
if((x=y) != 0)
{
  /*处理代码*/
}

这样,程序的可读性就得到了很大提高。

上面的示例代码详细地阐述了将等于操作符“==”误写成赋值操作符“=”所带来的严重后果。同理,将赋值操作符“=”误写成等于操作符“==”也会带来非常严重的后果。示例代码如下:

int x=0;
int y=-1;
if((x==y)<0)
{
  printf("y<0\n");
}

在上面的代码中,if 语句的本意是将变量 y 的值赋给变量 x,然后再判断变量 x 的值是否小于 0。如果变量 x 的值小于 0,就执行语句 printf("y<0\n")。由于错误地将赋值操作符“=”误写成等于操作符“==”,所以无论变量 y 为何值,都不会执行语句 printf("y<0\n")。原因是等于操作符“==”的结果只能是 0 或 1,永远不会小于 0。

除此之外,为了防止将等于操作符“==”误写成赋值操作符“=”,还可以在代码中采用如下形式:

int x=0;
if(0==x)
{
}

这样,就可以在一定程度上避免误写的发生。

到此这篇关于浅谈C语言=与==的区别详解的文章就介绍到这了,更多相关C语言=与==内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍浅谈C语言共用体和与结构体的区别,包括了浅谈C语言共用体和与结构体的区别的使用技巧和注意事项,需要的朋友参考一下 共用体与结构体的区别 共用体: 使用union 关键字 共用体内存长度是内部最长的数据类型的长度。 共用体的地址和内部各成员变量的地址都是同一个地址 结构体大小: 结构体内部的成员,大小等于最后一个成员的偏移量+最后一个成员大小+末尾的填充字节数。 结构体的偏移量:某一个

  • 本文向大家介绍浅析C语言中堆和栈的区别,包括了浅析C语言中堆和栈的区别的使用技巧和注意事项,需要的朋友参考一下 在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。 堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以及在网

  • 本文向大家介绍详谈Lock与synchronized 的区别,包括了详谈Lock与synchronized 的区别的使用技巧和注意事项,需要的朋友参考一下 1、lock是可中断锁,而synchronized 不是可中断锁 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定, 如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断 如果 使用Ree

  • 本文向大家介绍浅谈$('div a') 与$('div>a')的区别,包括了浅谈$('div a') 与$('div>a')的区别的使用技巧和注意事项,需要的朋友参考一下 浅谈$('div a') 与$('div>a')的区别 $('div a'):div标签下所有层次a元素的jquery对象 $('div>a'):div标签下子元素层次a元素的jquery对象 以上这篇浅谈$('div a')

  • 本文向大家介绍浅谈JS中String()与 .toString()的区别,包括了浅谈JS中String()与 .toString()的区别的使用技巧和注意事项,需要的朋友参考一下 我们知道String()与 .toString()都是可以转换为字符串类型,但是String()与 .toString()的还是有区别的 1、.toString()可以将所有的的数据都转换为字符串,但是要排除null 和

  • 本文向大家介绍C语言中fgets和fscanf区别详解,包括了C语言中fgets和fscanf区别详解的使用技巧和注意事项,需要的朋友参考一下 C语言中fgets和fscanf区别详解 一、作用上的大概区别: 二、举个例子:把a.txt文件中的内容复制到b.txt。 a.txt中的内容(第一行中“我爱你小白”和“开玩笑”中间有个空格,每行的最后都有回车): 1、使用fgets读取a.txt文件并写