百科问答小站 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的形式,写出可读性高,简洁的代码。




  

相关话题

  为什么很多程序员不用 switch,而是大量的 if...else if ...? 
  纯C语言的工作有前(钱)景吗? 
  Rust有可能在嵌入式领域取代C的位置吗? 
  为什么学c语言我只会写计算程序? 
  为什么 C 语言有了 while 还需要 for? 
  C 语言float和double哪个算得快? 
  什么时候用C而不用C++? 
  如何通俗地解释 C、C++、C#、Java、JavaScript、HTML、Python的用处? 
  为什么 Windows 是用 C 语言编写的,却默认对文件大小写不敏感? 
  怎样用c语言画一个"三维的球体"? 

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





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利