LS: 谁告诉你while(1)相当于复位? 如果不是你想当然这么认为的,而是真的有人这么告诉你的,你去扇他(她就算了)俩大嘴巴!然后再扇自己一大嘴巴!
while的语法大致是: ... ... while(条件) 语句; 其它语句; ... ...
意思是当条件满足时,就执行后面的语句,执行完了这个语句再去检测这个条件是否满足,如果满足就再次执行后面的语句,... ...,这个过程不断反复,直到条件不满足才会走到下一步,去执行其它语句。
而所谓“条件满足”,就是指()里面的值不等于0,现在在()里面直接放个1,1当然是不等于0,这个结论是由幼儿园中班的娃娃精确推导出来的,不用怀疑吧?
好了,现在的写法是:while(1); 在while(1)的后面似乎没有语句啊? 有的,空语句,空语句也是语句,执行空语句就是什么也不做,于是这个写法就意味着:反复检测1是否不等于0,很变态的,对吧? 不过没办法,因为我们需要让程序就停在这里别往下走了。
为什么我们有这样的要求呢?程序这玩意儿,你不让它停下来,它就往下继续走啊! 看起来main()函数已经结束了,后面没有代码了啊?它还往哪儿走呢? C程序最后总是要变成代码放到存储器里的,main()函数结束了,她的代码就到这里了,可存储器里在此之后还有啥码子就不好说了(就算后面没有真实的存储器了,代码存储空间还是有的,CPU从没有真实存储单元的地址里读回来的一般都是FF)。代码存储空间是有限的,比如51,代码空间就是64K,这64K空间都走完了,就又回到0地址上了,就等价于重新开始了。 你一开始用的是while(0);灯亮了5次以后走到这里,检测“0是否不等于0”,结论显然为“否”,于是继续往下走,跑出main()函数了,后面很快就把64K代码空间都走完了,又回到开头了,....,不停的循环,你的灯就不停的亮5次,再亮5次,.....。
|