百科问答小站 logo
百科问答小站 font logo



C语言中while(a=10);和while(a==10);有什么区别? 第1页

  

user avatar   joker238789590 网友的相关建议: 
      

前面的答主,喷题主是不看书的小白,首先得问题主:能区分赋值运算符比较运算符吗?

不能的话,直喷,走了。


如果能区分,那得注意到一个问题:很多书籍并不强调赋值表达式本身也可以有返回值的。这让初学者看书也看不懂。

在这里就是一个体现:a=10这个表达式,会返回a的引用,这算是有点小的实用价值吧:你可以写出a=b=c=1这种简洁且语义明显的表达式。当然,你甚至可以写出(a=10)=1这样诡异的表达式,a的值会是1。

问出这个问题,估计也不能区分c和c++。这里提一下,c语言没有重载运算符,而在c++里,重载赋值运算符时,一般需要返回一个*this的const引用(这里的const是为了阻止上面那种诡异表达式),以便写出连等式。

回到题目,while语句,真正的形式是while(expression){ loop }。这里,expression可以是a==b(比较)、a+b(运算)、a=!b(赋值)...等,但必须返回一个可转化为bool的值,例如直接是bool,或者数值(0为false,非零为true),或者重载了operator bool并且没有标注explicit的类,或者指针(nullptr为false,其他为true)。if语句同理。

表达式a=10返回a,此时a被赋值10,即为非零,无限循环。

表达式a==10,在a等于10的时候会执行一次循环体,要是a没有在循环体里被改变,你只能祈祷别的线程来抢救你了,这是另外一个故事了。

之所以讲的这么啰嗦,是为了展示给小白题主,在成为老手的路上,哪天觉得写代码写的啰嗦了,可以怎么利用expression的形式,写出可读性高,简洁的代码。




  

相关话题

  C 语言 printf("%f ",3/2) 为什么结果是 0 ? 
  Linux 内核的 C 代码风格是怎样的? 
  当你学会了什么之后感觉自己的编程算是入门了? 
  如何用最简短的二进制代码表示一张19*19的围棋棋盘的情况? 
  C 语言中,x += 5 == 4 是什么意思? 
  如何评价《王垠:C 编译器优化过程中的 Bug》? 
  求教,atan2函数有什么简易的替代品? 
  学会了 C 语言真的可以开发出很多东西吗? 
  大学c语言学习的考题中,故意用相同变量名来命名形参实参,局部变量和全局变量让学生区分,有实际意义吗? 
  只会c语言语法,就能强行做一个编译器出来吗? 

前一个讨论
既然暗物质“观测”不到为什么还要定义为物质?
下一个讨论
宇宙年龄 138 亿年,宇宙直径 930 亿光年,光速最快,这跟宇宙爆炸论不矛盾吗?





© 2025-05-14 - tinynew.org. All Rights Reserved.
© 2025-05-14 - tinynew.org. 保留所有权利