变量的定义与声明

上传人:re****.1 文档编号:509588901 上传时间:2023-11-23 格式:DOC 页数:5 大小:57KB
返回 下载 相关 举报
变量的定义与声明_第1页
第1页 / 共5页
变量的定义与声明_第2页
第2页 / 共5页
变量的定义与声明_第3页
第3页 / 共5页
变量的定义与声明_第4页
第4页 / 共5页
变量的定义与声明_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《变量的定义与声明》由会员分享,可在线阅读,更多相关《变量的定义与声明(5页珍藏版)》请在金锄头文库上搜索。

1、1变量的定义从前面的章节可以看出,程序中所有的东西几乎都有名字。然而字面量却是个例外,它没有名字。那么使用变量,我们就可以为某个值取名字了。实际上,我们是为系统内存中用于保存数据的某块空间取名字。ANSIC规定:变量必须“先定义、后使用”,因此当用C定义变量时,不仅需要指定变量名,而且还必须告诉编译器其存储的数据类型,变量类型告诉编译器应该在内存中为变量名分配多大的存储单元,用来存放相应变量的值(变量值),而变量仅仅是存储单元的别名,供变量使用的最小存储单元是字节(Byte)。由此可见,每个变量都占据一个特定的位置,每个存储单元的位置都由“地址”唯一确定并引用,就像一条街道上的房子由它们的门牌

2、号码标识一样。即从变量中取值就是通过变量名找到相应的存储地址,然后读取该存储单元中的值,而写一个变量就是将变量的值存放到与之相应的存储地址中去。由于变量的定义不是可执行代码,因此要求局部变量的定义必须位于用“包围的程序块”的开头,即在可执行代码的前面。比如:intlower_limit=80;/定义lower_limit为整型变量即在定义lower_limit为int类型数据时,系统就已经为变量lower_limit分配了存储单元。请注意区分变量名和变量值这两个不同的概念,其中,lower_limit为变量名,80为变量lower_limit的值,即存放在变量lower_limit的存储单元中

3、的数据。那么到底如何获得变量的地址呢?C语言使用“&(地址运算符)加变量名”的方式获取变量的地址,比如,&lower_limit就代表变量lower_limit的地址,详见后续相关章节的描述。一个定义只能指定一种变量类型,虽然后面所带的变量表可以包含一个或多个该类型的变量:intlower_limit,upper_limit,sum;但如果将一个定义语句中的多个变量拆开在多个定义语句中定义的话:intlower_limit;/lower_limit为数据下限intupper_limit;/upper_limit为数据上限intsum;/sum为求和的结果则可在各个定义语句中添加注释,则大大提高

4、了程序的可阅读性,而且修改起来更加方便,但C编译器会忽略在每行右边用于描述变量用途的注释语句。与此同时还可以在定义中,对变量进行初始化,即允许在变量名的后面紧跟一个等号以及一个表达式。intlower_limit=1;intupper_limit=lower_limit+50;intsum;2外部变量的声明由于变量lower_limit是在别的文件中定义的,那么只要在引用之前用关键字extern对该变量作“外部变量声明”即可,无需再为变量lower_limit分配存储单元,这种情况称之为声明或引用性声明。比如:externintlower_limit;/将已定义的外部变量lower_limit

5、的作用域扩展到此在这里将extern置于变量前,就是为了告诉编译器变量lower_limit这个名字已经在别的文件中被定义了,因此遇到此变量时,需在其它模块中寻找与之相应的定义。有时程序是由多个源程序文件组成的,那么只需要在其中任一个文件中定义外部变量lower_limit,而在另一个文件中用extern对变量lower_limit作“外部变量声明”,即可将外部变量的作用域扩展到其它文件。当extern用于声明外部变量时,则类型名可写也可不写,由于声明变量不是定义变量,则可以不指定类型,只需写出变量名即可。比如:externlower_limit;注意:extern不仅可用于声明变量,而且还可

6、以用于声明数组和指针,以及用于声明外部函数,详见后续相关章节的描述。3静态变量的定义当用static修饰变量时,则全局变量与局部变量都保存在内存的静态区。即便函数运行结束,而静态变量的值都不会被销毁,以后仍然还可以继续使用。(1)静态全局(外部)变量当static用于定义外部变量时,则变量仅被所定义的文件使用,而其它文件则无法使用它。比如:staticunsignedchar_GucTask0;/任务0测试变量使用静态全局变量的好处就是在进行模块化程序开发时,不用担心外部变量名的冲突,只需在每个文件中定义全局变量时加上static即可。(2)静态局部变量静态局部变量则是在函数体内定义的,那么只

7、能在这个函数中使用。町注意:static还可以用于修饰函数,如果在函数前加static,则该函数只能成为被本文件中的其它函数所调用的静态函数(内部函数),其好处就是不用担心函数名的冲突,便于模块化开发,详见后续相关章节的描述。后记:任何一本教材都有一定的侧重点和面向的读者群,本教材是为“高等学校电类专业新概念教材.卓越工程师教育丛书”而写作的配套图书,适当淡化了计算机应用软件的编程,重点强化了嵌入式系统应用中的程序设计,并将后续教材中与常用算法以及嵌入式操作系统微小内核关联较大的内容提前作了铺垫,为初学者读懂项目驱动单片机应用设计基础教材中的操作系统微小内核源代码,并最终独立写出一个属于自己的

8、基于位核的嵌入式操作系统(嵌入式系统初级教程(基于)教材的最后一章仅详细地介绍了一个微小内核的设计思想,但未给出源代码,要求初学者自己完成)打下扎实基础。虽然过来人常常告诉初学者,学习程序设计一定多阅读经典程序,一定要多上机编程,但总不见他们“多”起来,90以%上的大学生却感到写程序是一件非常痛苦的事情,以至于对所学的专业没有丝毫的兴趣。而大多数人普遍缺乏阅读源代码的方法和耐心,说句实在话,连“书(即程序的设计思想)”都没有“真正地”看懂(想一想什么是“真正地”?),那又怎么会编程呢?虽然大凡高手都是“山寨”过来的,但要“山寨”出水平来却不是一件容易的事情。其实并不难,关键是方法出了问题,我们

9、都是“凡人”,不要与那些“聪明人”相比,我们应该下点苦功夫,用点土办法,踏踏实实地卖苦力,肯定会有所突破,我将另行撰文作经验介绍。其实刚开始我也没有搞清楚“声明与定义”的概念和含义,只会编程搞得我云里雾里,到底有没有办法搞清楚?其实“定义”不仅说明了保存的数据类型,而且还为变量分配了空间,即变量所占的字节数,那么你不妨写一段程序,看看与之对应的汇编代码便知道了。由此可见,“声明”一个常量其实也是“定义”,比如,“”,因为系统为分配了一个与之对应的存储单元。暂时没有搞清楚没有关系,但一定不能放过!虽然很多人阅读过瓦/OS操作系统的源代码,可到头来还是不会写一个简单的OS,即便有些人很认真地“写”

10、了一个,但实际上却是“抄”来的,为什么?很多人想要通过修改,期望搞出一点“不一样”的意思出来却非常困难。我认为,当初学者只有具备了一定的基础之后,才有成为高手的兴趣和可能,这就是作者的教学思想和出发点。4常变量的声明为了提高程序的可阅读性与可维护性,ANSIC允许用户命名常量(namedconstant,声明为const的变量)。当它被初始化之后,它的值便不能改变。ANSIC规定:可以使用const关键字声明常量,修饰符const可以用在类型说明符前,也可以用在类型说明符后。比如:intconstMAX_LENGTH=78;/命名常变量的最佳方式是使用大写字母constintMAX_LENGT

11、H=78;/MAX_LENGTH的初值为78虽然const修饰的值是常量,而实际上MAX_LENGTH却是一个只读变量。通过汇编代码可以看出,编译器仅仅给出了MAX_LENGTH变量对应的内存地址,却并没有为MAX_LENGTH变量分配存储空间,而是将其保存在符号表中,编译器在编译时直接进行“替换”优化。注意:const除了可以修饰只读变量之外,还可以用于修饰数组、指针、函数的参数与函数的返回值,详见后续相关章节的描述。5.标识符ANSIC规定标识符只能由字母、数字和下划线3种字符组成,且第1个字符必须为字母或下划线。比如:_GucTask0町注意:C是区分大小写字母的语言,也就是说,由相同字

12、母组成的字符,如果大小写不同,就会被看做不同的字符。比如,命名age与sum的变量与Age或AGE以及Sum的变量就是不同的变量。一般来说,变量名常用小写字母来表示,比较符合人们的阅读习惯。虽然ANSIC并没有规定标识符的长度,但各个编译器都有自己的规定,比如,TurboC则允许变量名最多不超过32个字母。关键知识点:变量的声明与定义广义地说,声明包含定义,但并非所有的声明都是定义。对于intlower_limit;来说,它既是声明又是定义;而对externlower_limit;来说,它是声明不是定义。“声明”仅仅告诉编译器变量名的值的类型而已,不会生成目标代码,当然也不会给它分配存储空间,更不会增大可执行程序的体积。由于声明并不分配存储空间,因此同一个声明可以在程序中多次出现。它的位置可在执行代码之外,也可在执行代码里面。而“定义”不仅要告诉编译器变量名的值的类型,而且还要给变量分配存储空间。既然在定义变量时就已经建立了存储空间,那么变量的定义只能出现一次,且它的位置在所有执行代码之外。由于系统是根据外部变量的“定义”来分配存储空间的,因此对外部变量的初始化只能在“定义”时进行,不能在“声明”中进行,而“声明”则是告诉编译器,该变量已经存在。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号