历史上的今天
返回首页

历史上的今天

今天是:2025年01月03日(星期五)

正在发生

2018年01月03日 | C51程序设计嵌套设计

2018-01-03 来源:eefocus

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

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

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

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

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

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

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

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

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

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


推荐阅读

史海拾趣

CSR plc(剑桥硅晶无线电)公司的发展小趣事

除了自主研发和收购外,CSR plc还积极与其他企业进行技术合作与转让。例如,2012年7月,三星电子以3.1亿美元的价格收购了CSR Plc的无线技术部门,包括该部门的310名员工和相关的21项技术专利。这次技术合作不仅为CSR plc带来了可观的收益,也推动了整个行业的技术进步和发展。

通过以上五个故事,我们可以看到CSR plc在电子行业中的发展历程充满了创新与挑战。从初创时期的音频技术突破,到后来的多元化发展、重要收购和技术合作,CSR plc不断适应市场变化,拓展业务领域,最终在电子行业中取得了显著的地位和成就。

Esico-Triton公司的发展小趣事

随着科技的不断进步,电子行业也在快速变革。为了应对这一挑战,Esico-Triton不断加强研发投入,特别是在人工智能和物联网领域。公司推出了一系列智能家居和工业自动化产品,以适应市场的需求。同时,Esico-Triton还与多所知名大学和研究机构合作,共同研发新技术,确保公司在行业中的领先地位。

Hexawave公司的发展小趣事

随着科技的不断进步,电子行业也在快速变革。为了应对这一挑战,Esico-Triton不断加强研发投入,特别是在人工智能和物联网领域。公司推出了一系列智能家居和工业自动化产品,以适应市场的需求。同时,Esico-Triton还与多所知名大学和研究机构合作,共同研发新技术,确保公司在行业中的领先地位。

APSA公司的发展小趣事

随着全球电子市场的不断扩大,APSA公司开始实施全球化战略。公司先后在多个国家设立分支机构,拓展国际业务。通过与全球客户的合作,公司的产品线不断丰富,市场份额也逐渐提升。

动运科技(DONGWOON)公司的发展小趣事

在全球化的大背景下,企业之间的合作与共赢成为了一种趋势。动运科技积极寻求与全球知名企业的战略合作,共同推动电子行业的发展。例如,公司与香港希荻微的合作就是一个典型的例子。通过独占许可的方式,希荻微获得了动运科技在中国大陆及港澳台地区生产、销售与自动对焦及光学防抖技术相关的产品的权利,并有权使用授权技术进行技术改进及新产品研发。这一合作不仅为双方带来了互利共赢的机会,也为整个电子行业的发展注入了新的活力。

EFC [Electronic Film Capacitors, Inc.]公司的发展小趣事

EFC公司始终坚持“品质至上”的原则。他们严格控制原材料采购,确保每一批材料都符合最高标准。在生产过程中,EFC采用先进的生产设备和工艺,确保产品的稳定性和可靠性。此外,公司还建立了完善的质量检测体系,对每一个出厂的产品都进行严格的检测。正是这种对品质的执着追求,让EFC的产品在市场上赢得了良好的口碑。

问答坊 | AI 解惑

开关电源EMI对策经验总结

开关电源EMI整改中,关于不同频段干扰原因及抑制办法: 1MHZ以内----以差模干扰为主 1.增大X电容量; 2.添加差模电感; 3.小功率电源可采用PI型滤波器处理(建议靠近变压器的电解电容可选用较大些)。 1MHZ---5MHZ---差模共模混合 采用输入端并 ...…

查看全部问答>

如何成为电子工程师从书系列(共计17本,PDG格式)

洋洋百万字的如何成为电子工程师从书系列精品 精彩的内容,高超的技艺,教你如何成为电子工程师。 目录如下: ★第1篇 常用资料 ★第2篇 电磁学与电路基础 ★第3篇 电子材料 ★第4篇 电子元器件 ★第5篇 模拟电路 ★第6篇 数字电路 ★第 ...…

查看全部问答>

请教一下wince下bitblt双缓冲的效率问题

最近开发游戏的时候,试用双缓冲,但是发现240x320的缓冲图在bitblt的时候,大概刷新一次需要45-60毫秒,这个效率是没办法应用的,请问应该如何去改善 pDC->BitBlt(0,0,this->getWidth(),this->getHeight(),&screenBufferGc,0,0,SRCCOPY); 这里,screen ...…

查看全部问答>

要疯了

编译怎么会有 #inculde file  wouldn\'t open os+core.c这个错呢?…

查看全部问答>

是否有人用过LCM3202403ZK液晶模块?

有人用过吗?我现在用51来驱动它,总是不能显示.不知道是什么原因.有人用过的话,想请教,谢谢! 很郁闷…

查看全部问答>

请教,STM8S208,,,,,,TIM2定时的问题?

想把TIM2当做定时器使用, 所有寄存器都是复位值, 仅仅 TIM2_CR1_CEN=1;  //使能寄存器 但是当计数器溢出时候,没有产生标志位, 是不是还需要设置其他寄存器?…

查看全部问答>

探究信号链基础知识之桥接技术

测量现实世界现象的许多传感器都以改变电阻的形式表现其输出:热敏电阻为温度敏感型电阻,应变计随作用力而改变电阻大小,诸如此类。系统设计人员面对的挑战是如何精确地测量电阻。 图 1 简易分压器   图 1 显示的是您如何使用一个分压器 ...…

查看全部问答>

南华大学黄智伟系列 介绍一种滤波器电路设计的简易方法

南华大学黄智伟系列 介绍一种滤波器电路设计的简易方法…

查看全部问答>

求STM32F105的相关资料

求STM32F105的相关资料,数据手册,最好中文的。还有相关的应用资料,谢谢大虾们!811323585@qq.com…

查看全部问答>

DSP-Sitara课程第三讲边看边做笔记2

如有错误请指正 1.启动时间快速启动时间Fast Boot :从板子上电到系统能运行的时间。2.计算启动时间工具a三种方法:C program,RealTerm,TeraTerm.3.启动流程a.串口调试中输出的第一条信息--SPLb.输出u-boot版本信息时,说明uboot正常加载执行--U ...…

查看全部问答>