![a2dea0a79cc26d17b73c6325768c74e8.png](https://i-blog.csdnimg.cn/blog_migrate/561806acb3c0ecd645ce61bf385d7ecf.jpeg)
首先我们看一个C示例
// 示例1while(status == 1){ printf("this is a test code!");}
// 示例2while(1 == status){ printf("this is a test code!");}
示例1和示例2达到的目的均是判断status与1是否相等,相等则返回true进入循环,不相等则跳过循环,但是通常会推荐使用示例2的写法,为什么呢?
我们来回顾一下C的一些基本概念
赋值运算符:=
在C语言中,=并不意味着“相等”,而是一个赋值运算符。下面的赋值表达式语句
status = 1;
把值1赋给变量status。也就是说,=号左侧是一个变量名,右侧是赋给该变量的值。符号=被称为赋值运算符。另外,上面的语句不读作“status等于1”,而读作“把值1赋给变量status”。赋值行为从右往左进行。
在C语言中,类似这样的语句没有意义(实际上是无效的)
1 = status;
在这种情况下,不能给常量赋值,常量本身就是它的值。
实际上,赋值运算符左侧必须引用一个存储位置。最简单的方法就是使用变量名。因此,上述写法在C语言编译过程中会提示错误。
关系运算符(等于):==
关系运算符等于常常用于左值和右值的比较,返回值为bool类型。通常用于循环结构和分支结构。
我们再回过头来看示例
当示例1不小心写成如下形式
// 示例1while(status = 1){ printf("this is a test code!");}
此时,编译器并不会报错(当然有些编译器会提供警告,提醒开发者是否确定要使用赋值语句),上述语句表示将值1赋给变量status,这与我们的设计初衷是不同的。
当示例2不小心写成如下形式
// 示例2while(1 = status){ printf("this is a test code!");}
此时,编译器会报错,报错相比于警告,对开发者的警醒作用往往要大的多。
一个即将脱发还未脱发的坚持将技术分享到脱发的90后,随手点赞转发评论,支持我,Peace!