C51程序设计嵌套设计

发布者:HarmonyInLife最新更新时间:2018-01-03 来源: eefocus关键字:C51  程序设计  嵌套设计 手机看文章 扫描二维码
随时随地手机看文章

C语言的基本规则是有限的,可把这有限的规则组合与嵌套起来,就实现了多种多样的功能。

常量与变量本质是值,不同的变量只是存储结构的不通。表达式最终也是一个值,所以可以通用,可以嵌套。

指针变量存放的是地址。数组名不是变量,而是地址常量。数组是相同结构的变量的集合。数组指针与数组名可以通用。

从本质上来说,没有多维数组的存在。因为c语言允许数组元素可以为任何类型的对象,可以是整型变量,字符型变量,结构体变量,当然也可以是数组。所以,多维数组无非就是一维数组的嵌套而已。掌握了这一点,就可以理解二维数组名可以看作是指向指针常量(一维数组名)的指针常量。就这样一路指下去,一直指到底才是变量名。

结构体(structure),与数组不同的地方就在于,数组必须是同一类型变量的集合,数组是编译系统默认好的一种构造类型数据,而结构体类型需要自己声明,至于存放什么类型的成员,都是自定义的。结构体类型的成员,与数组的成员一样,是可以为任何类型的对象,包括数组和结构体类型。这里也体现了嵌套的优越性。声明了结构体类型,需要定义结构体类型变量。结构体类型名与变量名的区别,就不用多说了,不能因为结构体是自定义类型,就把类型名当作变量来看待。

结构体变量同样是变量,同其他类型变量一样,可以在声明或定义的同时进行初始化,或者分开进行。与数组名不同的是,结构体变量名不是指针常量,所以相同结构体类型的结构体变量之间可以相互直接赋值,而数组名则不可以。

c中有字符串类型常量,但是没有字符串类型的变量。字符数组使用嵌套的办法,把一串字符组合成字符串,在c中充当字符串变量的作用。为了使用中的方便,c运行在声明字符数组时用字符串为字符数组初始化,在标准输入输出中,也同样提供了%s格式输入输出以及其他输入输出函数进行字符串的操作。相比较而言,数值数组就没有这么幸运,输入输出必须一个一个变量(元素)的进行。对于字符串的处理,字符指针同样可以,c规定,把字符串常量赋给一个字符指针,就是把这个字符串常量的首地址赋给了这个指针,很明显,这个字符指针实际上变成了一个字符数组,只不过界限不明朗。

数组与指针的等价关系,提供了很多方便。但是缺点也是有的。首当其冲的就是数组之间不能直接赋值,哪怕是相同类型相同大小的数组之间。因为数组名是指针常量,哪有常量与常量赋值的道理?(提醒一下,数组名在个别时候并不代表数组首地址,而是代表整个数组,比如sizeof(数组名),这里就不能把数组名理解为指针常量了)。第二个缺点,那就是指针的操作无法检查溢出。你定义了一个指针指向一个数组,然后进行指针的运算,数组是有大小有界限的,可是指针无法判断是否超出了你定义的数组范围。这样,一旦指针溢出,进入了其他变量的领地,很明显就会产生不可挽回的错误。

再简单说说函数的嵌套。对于一个有返回值的函数,引用函数之后返回的是一个确定了类型的数值,既然是数值,当然可以随便使用了。函数自己调用自己,被称为递归。但是C语言本身为了编译的便利,不允许在一个函数里面定义另一个函数。这就造成了C语言的主体构架形式:一个主函数+N个子函数,N=0~多。只有儿子辈的函数,没有孙子辈的函数。函数里不能嵌套函数,但是函数的调用时可以随便套的,几层都没关系。

说到底,嵌套让简单的语句或者表达式实现了复杂的功能,任何一种程序设计语言都是可以进行大量的嵌套的。c语言的语句嵌套很丰富,光是选择语句、循环语句的自我嵌套和互相嵌套,就把我套蒙了很久。对于我来说,就是认识到嵌套的本质,掌握好嵌套,千万别上了嵌套的套。


关键字:C51  程序设计  嵌套设计 引用地址:C51程序设计嵌套设计

上一篇:C51程序设计中的sizeof详细解析
下一篇:C51学习心得体会,函数的传引用调用和传值调用方法

推荐阅读最新更新时间:2024-03-16 15:51

keil C51单片机存储模式有哪些?
在使用C51时有时我们并没有明确指定所定义的数据的存储类型,然而依然正确。 这是由于存储模式决定了没有明确指定存储类型的变量,函数参数等的缺省存储区域。 供有3种存储模式(存储模式在 C51 编译器选项中选择): 1.Small模式 所有缺省变量参数均装入内部 RAM,优点是访问速度快,缺点是空间有限,只适用于小程序。 2. Compact 模式 所有缺省变量均位于外部RAM区的一页(256Byte)。 3. Large 模式 所有缺省变量可放在多达 64KB 的外部RAM 区,优点是空间大,可存变量多,缺点是速度较慢。
[单片机]
51单片机入门 - 按键驱动程序设计实验
独立按键原理是这样的:按键没按下的时候,相应端口是高电平状态,而当按键按下的时候,相应的端口则是低电平。所以可以根据这个现象,实现相应的功能。 还有一点应该注意的是:按键在闭合和断开时,触点会存在抖动现象。 在实际情况下,我们需要的是稳定闭合的那部分状态。所以可以采用延时的方法来解决这个问题,具体的过程就是先看看有没有键按下,有键按下了,再延迟一段时间,再看看有没有键按下, 这时候如果还是有键按下的话那就真的是有键按下了。 而这个抖动的时间大概是10ms,所以只要用一个延时10ms的子函数就行。 上面代码的第66行那个判断按键是否松开也是必要的,虽然在这个程序中
[单片机]
51单片机入门 - 按键驱动<font color='red'>程序设计</font>实验
C51与汇编混合编程详解
1.在 C文件中要嵌入汇编代码片以如下方式加入汇编代码: #pragma ASM ;Assembler Code Here #pragma ENDASM   2.在 Project窗口中包含汇编代码的 C文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态;   3.根据选择的编译模式,把相应的库文件(如 Small模式时,是 Keil\C51\Lib\C51S.Lib)加入工程中,该文件必须作为工程的最后文件;   4.编译,即可生成目标代码。   来个实例吧: #includ
[单片机]
步进电机加速-匀速-减速运行程序(C51源程序)
ME300系列单片机开发系统+步进电机模块演示程序 功能:步进电机以加速方式启动,转速达到程序规定的最快速度后保持一段时间匀速运转,又开始以减速 方式运行直到步进电机停止转动。由K1键控制演示程序运行。步进电机模块上D1-D4可以指示工作状态。 /******************************************************************/ /* */ /* ME300B单片机开发系统演示程序 - 步进电机加减速运行程序
[单片机]
步进电机加速-匀速-减速运行程序(<font color='red'>C51</font>源程序)
基于VxWorks的多DSP系统的多任务程序设计
作者:中国科技大学  张万生 邢涛 刘尉悦 冯海涛 张俊杰 乔崇 王砚方   近年来,计算机产品的应用领域越来越广,数字信号处理器的发展表现得尤为明显。DSP芯片制造商和DSP板开发商利用自身的优势不断开发出多DSP结构的产品来满足这种需求。通常的DSP设备是与嵌入式系统相结合,来实时地完成某一特定任务。随着信号采集速度和处理速度的要求越来越高,许多领域都需要进行多处理器运算,其中包括医学、图像处理、军事、工业控制、电信等许多领域。多处理器系统可以根据所需实现的功能和处理器的性能来调节处理结点的数目,使系统达到最佳的性能价格比。   实际上,只有从芯片开始仔细设计,才能方便地实现多处理器系统的调节功能。这里选用的是AD公司新出品的
[嵌入式]
Keil C51的一些有趣特性
首先得说的是我是菜鸟,在此论坛上学了很多的东东。但是今年以来,论坛上似乎没有了去年一大帮高手讨论问题的场面了,似乎失去了往日的风光了。在此我那出我近日一些不成熟的想法,希望大家斧正。有啥不正确的,请一定告之与我。 Keil C51的一些有趣特性 Keil c51号称作为51系列单片机最好的开发环境,大家一定都很熟悉。它的一些普通的特性大家也都了解,(书上也都说有)如:因为51内的RAM很小,C51的函数并不通过堆栈传递参数(重入函数除外),局部变量也不存储在堆栈中,而是存在于固定的RAM中及寄存器中。那么看一下下面的程序。 void fun1(unsigned char i) { … } 正常情
[单片机]
数据排序程序设计
  数据排序就是将一批数由小到大(升序)排列,或由大到小(降序)排列。下面介绍无符号数据升序排序程序设计。      最常用的数据排序算法是冒泡法。冒泡法是相邻数互换的排序方法,因其过程类似水中气泡上浮,故称冒泡法。排序时,从前向后进行相邻两个数的比较,如果数据的大小次序与要求的顺序不符时,就将两个数互换;否则,顺序符合要求就不互换。如果进行升序排序,应通过这种相邻数互换方法,使小数向前移,大数向后移。如此从前向后进行一次次相邻数互换(冒泡),就会把这批数据的最大数排到最后,次大数排在倒数第二的位置,从而实现一批数据由小到大的排列。      假设有7个原始数据的排列顺序为6、4、1、2、5、7、3。第一次冒泡的过程是:     
[单片机]
数据排序<font color='red'>程序设计</font>
基于ARM的直流系统接地故障检测应用程序设计
0 引言 发电厂、变电站的直流供电系统是控制和信号系统、继电保护及自动装置的工作电源,对保障电力系统安全运行是十分重要的,这就要求直流系统及其网络必须具有高可靠性。当直流系统发生一点接地时,应能及时找出和处理。目前,国内外基于单片机的绝缘监测装置大多是基于传统的平衡电桥法、低频信号注入法等研制的,但要解决直流系统大电容接地和环网影响等问题,则需要采用更为先进的处理方法,如基于小波变换的检测方法,而单片机有限的资源限制了这类方法的使用。 本文通过基于ARM的嵌入式系统进行直流系统接地故障检测装置的设计,并在该装置中实现基于小波变换的检测方法解决直流系统大电容接地和环网影响等问题,并重点阐述了基于该系统的应用程序的设计。 1
[单片机]
基于ARM的直流系统接地故障检测应用<font color='red'>程序设计</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved