百科问答小站 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语言学习的考题中,故意用相同变量名来命名形参实参,局部变量和全局变量让学生区分,有实际意义吗? 
  为什么8bit限制是-128到127而不是-127到128? 
  如何用C语言写一个简易计算器? 
  请问学 C 有必要死磕指针吗? 
  我怎样成为@vczh一样的大神? 
  为什么游戏引擎大多选择使用 C++ 而不是 C 开发? 
  i=1,为什么 (++i)+(++i)=6? 
  编译器是如何编译自己的? 
  自己开发的Windows7 64位驱动程序需要签名,怎么解决? 
  为什么很多编程语言采用花括号区分 block 而非缩进? 

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





© 2025-03-26 - tinynew.org. All Rights Reserved.
© 2025-03-26 - tinynew.org. 保留所有权利