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




  

相关话题

  单精度浮点数中的「单」和「浮点」是什么意思? 
  视频RAM与IO内存映射的问题,大家可以指导一下吗? 
  在C语言中,math.h中定义的各种数学函数在电脑上具体是怎么实现的? 
  有什么像a=a+b;b=a-b;a=a-b;这样的算法或者知识? 
  如何用一段简单的代码讲述一个悲伤的故事? 
  如何向一个零基础的人,解释学习计算机编程的正确顺序和原因? 
  C语言中整型输出(%d)有什么用? 
  自学计算机,打印沙漏研究俩小时还有希望么? 
  这个如此诡异的C语言「怪事」是怎么回事? 
  C语言中按%d打印char会不会把相邻内存的也print出来? 

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





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