通过简单的例子看c程序死循环

在解释什么是程序死循环之前,先看一段代码,直观感受一下:

事实上,“Welcome to my town”在运行窗口是不断无休止的执行的。单就这个程序来说,每当执行一遍循环时,数组里面的内容被放进了整形数据0,即就是说,arr[0]——arr[9]里放的内容为0。因为数组长度为10,i刚好是数组的下标,数组最后一个元素为arr[9],当i自加到10的时候,按道理应该是arr[10]=0,但是考虑到数组长度,系统自动找到存放0的第一个位置,即arr[0]。以后,就不断的i自加、循环,导致了死循环的产生。

怎么解决呢?

为了避免出现这样的问题,我们将上面的代码中for里面的i的取值范围修改为:i<10。然后在看看运行结果:

经过修改,该代码不再出现死循环。接下来,我们认识认识什么是死循环。。

“死循环”就是指程序无休止的执行,无论如何都不能跳出循环体的一种现象。目前貌似没有一种算法,对任何一个程序都可以判断是否会出现死循环。因此,在编译的时候,系统都不做死循环检查。在设计程序时,若遇到死循环,我们可以通过按下Ctrl+Pause/Break的方法,结束死循环。

在编程中死循环并不是一个需要避免的问题,相反,在实际应用中,经常需要用到死循环。例如,我们使用的Windows操作系统下的窗口程序中的窗口都是通过一个叫消息循环的死循环实现的。在单片机、嵌入式编程中也经常要用到死循环。在各类编程语言中,死循环都有多种实现的方法,以C语言为例,可分别使用while.for,goto实现。

总结:对于死循环的了解尚浅,需要学习的有很多,需要看的有很多。。最后送上一句话给自己,同时,也给所有看到我的博文的各位

——生命不止,奋斗不息

时间: 2024-08-12 09:32:43

通过简单的例子看c程序死循环的相关文章

从一个简单的例子看spring ApplicationContext上下文隔离

前言 某天,浏览博客园的时候,对首页上面的一篇文章,标题为:<<一个普通类就能干趴你的springboot,你信吗?>>,文章链接:https://www.cnblogs.com/rongdi/p/11780204.html#4414216 很是感兴趣.点进去之后,大致看一下.该篇博文主要说的是在使用spring boot环境下想创建一个名为Environment的bean,结果发现创建不了,于是不断调试终于找到了“真理”. 说真的.这篇博文的内容非常长,主要也是记录调试过程的“流

一个简单的例子看明白如何利用window.location.hash实现ajax操作时浏览器的前进/后退功能

我们知道JavaScript中很早就提供了window.history对象,利用history对象的forward().go().back()方法能够方便实现不同页面之间的前进.后退等这种导航功能.但是AJAX操作,是不能用浏览器的前进和后退按钮进行导航的,因为浏览器并不会将AJAX操作加入到历史记录中.但是借助location.hash,我们能够自己实现AJAX操作的前进和后退.关于window.location.hash的详细介绍和使用方式,可以参考下面这2篇文章. location.has

spark core源码分析8 从简单例子看transformation

前面提到过spark自带的一个最简单的例子,也介绍了SparkContext的部分,这节介绍剩余的内容中的transformation. object SparkPi { def main(args: Array[String]) { val conf = new SparkConf().setAppName("Spark Pi") val spark = new SparkContext(conf) val slices = if (args.length > 0) args(

一起学libcef--一个应用libcef的简单例子(windows程序)

之前博客<一起学libcef–搭建自己的libcef运行环境(Win32程序,错误C2220解决方案)>讲述了如何在win32程序中搭建libcef的环境,今天就通过一个简单的例子,在windows程序中使用libcef. 现在再重新写一下如何搞?直接在源代码上搞起! 1 打开源码cefclient解决方案 2 确保cefclient例子可以完美运行 3 在cefclient中,除了util.h之外,全部移除 4 manifests 和 resources文件也可以移除(you must re

Freemarker 最简单的例子程序

首先导入包,freemarker.jar 下载地址: freemarker-2.3.18.tar.gz http://cdnetworks-kr-1.dl.sourceforge.net/project/freemarker/freemarker/2.3.18/freemarker-2.3.18.tar.gz 当然如果是Maven项目,可以从仓库里面下载,这里不赘述; 1.通过String来创建模版对象,并执行插值处理 import freemarker.template.Template; i

Linux内核中的信号机制--一个简单的例子【转】

本文转载自:http://blog.csdn.net/ce123_zhouwei/article/details/8562958 Linux内核中的信号机制--一个简单的例子 Author:ce123(http://blog.csdn.NET/ce123) 信号机制是类UNIX系统中的一种重要的进程间通信手段之一.我们经常使用信号来向一个进程发送一个简短的消息.例如:假设我们启动一个进程通过socket读取远程主机发送过来的网络数据包,此时由于网络因素当前主机还没有收到相应的数据,当前进程被设置

win32汇编实现一个简单的TCP服务端程序(WinSock的简单认知应用)

Windows网络编程,相信好多人都知道,但是我们一般都是用其他语言编写,例如C,C++,JAVA,python等等,这些语言都可以,但是汇编语言比较底层,利用它,我们可以更清晰的了解到网络编程的内在部分,这是其他语言不能相比的,好了,废话不多说,这其实就是这次的目的(毕竟水平欠缺,还是先来按照罗云斌老师的WIN32汇编书上的例子加以学习,举一反三吧). 说道网络编程,现在我所接触到的程序开发,工具软件的使用,库等等都是基于Windows平台的,想要了解Windows的网络编程就必须要知道Win

用nodejs搭建一个简单的服务监听程序

作为一个从业三年左右的,并且从事过半年左右PHP开发工作的前端,对于后台,尤其是对以js语言进行开发的nodejs,那是比较有兴趣的,虽然本身并没有接触过相关的工作,只是自己私下做的一下小实验,但是还是记录一下方便以后复习! 今天主要记录一下,很久以前用nodejs制作一个简单的服务监听程序的一些过程! 大家都知道,通过nodejs可以对前台请求进行监听,这里就放一个官网的hello world例子吧: var http = require('http'); http.createServer(

Learn Prolog Now 翻译 - 第一章 - 事实,规则和查询 - 第一节, 一些简单的例子

 该系列文章是网上的Prolog学习资料:www.learnprolognow.org的中文翻译.希望能够通过翻译此学习资料,达到两个目的:第一.系统学习prolog的知识:第二.提升英文文章理解 和翻译能力. 内容摘要: 给出一些Prolog编程的简单例子: Prolog的基本结构:事实,规则和查询: 环境说明: 本系列文章使用的Prolog运行环境是:SWI-Prolog,官网地址是:http://www.swi-prolog.org. Prolog中只有三种基础结构:事实(facts),规