百科问答小站 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语言本身是用什么语言写的? 
  为什么51单片机编程喜欢用unsigned(无符号)类型定义变量呢直接用 int.char..不好吗? 
  学C++花了一天半刚搞懂指针和数组,怎么提高效率? 
  C 语言自带函数返回值为指针类型的数组为什么不需要释放内存? 
  i=1,为什么 (++i)+(++i)=6? 
  如何用一段简单的代码讲述一个悲伤的故事? 
  埃式筛为什么只要筛到根号n就好了? 
  完成了c语言程序设计初步学习,大概了解了数据类型,循环,判断,数组,函数和指针。接下来该学什么(书)? 
  C的结构体成员变量的命名有必要加前缀吗? 

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





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