- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
.我们现在走在马路上,经常看到马路两侧有一些LED点阵广
我们现在走在马路上,经常看到马路两侧有一些LED点阵广告牌,这些广告牌看起来绚烂夺目,非常吸引人,而且还会变化很多种不同的显示方式。本章我们就会学习到点阵LED的控制方式,按照惯例,先普及部分C语言知识。
7.1?变量的作用域
所谓的作用域就是指变量起作用的范围。变量按他的作用域可以分为局部变量和全局变量
1.局部变量
在一个函数内部声明的变量是内部变量,他只在本函数内有效,在此函数以外是不能使用的,这样的变量就是局部变量。此外,函数的形参也是局部变量,形参我们后边详细解释。
比如上节课定义的unsigned?long?stopwatch?=?0,这个变量是定义在main函数内部的,所以只能由main函数使用,中断函数就不能用这个变量。同理,我们如果在中断函数内部定义的变量,在main函数中也是不能使用的。
2.全局变量
在函数外声明的变量是全局变量。一个源程序文件可以包含一个或者多个函数,全局变量的作用范围是从它开始声明的位置一直到程序结束。
比如上节课的unsigned?char?LedNumber[6]?=?{0};?这个数组的作用域就是从开始定义的位置一直到程序结束,不管是main函数,还是中断函数InterruptTimer0,都可以直接使用这个数组。
局部变量只有在声明它的函数范围内有效,而全局变量可以被作用域内的所有的函数直接引用。所以在一个函数内既可以使用本函数内声明的局部变量,也可以使用全局变量。在习惯上,我们把全局变量定义在我们程序所有函数的最前边。
由于函数通常只能有一个返回值,但是我们希望一个函数运行完了可以提供多个结果值给我们使用的时候,我们就可以利用全局变量来实现。但是考虑到全局变量的一些特征,应该限制全局变量的使用,过多使用全局变量也会带来一些问题。
(1)全局变量可以被作用域内所有的函数直接引用,可以增加函数间数据联系的途径,但同时加强了函数模块之间的数据联系,使这些函数的独立性降低,对其中任何一个函数的修改都可能会影响到其他函数,函数之间过于紧密的联系不利于程序的维护。
(2)全局变量的应用会降低函数的通用性,函数在执行的时候过多依赖于全局变量,不利于函数的重复利用。我们现在程序编写比较简单,就一个.c文件,将来以后我们要学到一个程序中有多个.c文件,当一个函数被另外一个.c文件调用的时候,必须将这个全局变量的变量值一起移植,而全局变量不只被一个函数调用,这样会引起一些不可预见的后果。
(3)过多使用全局变量会降低程序的清晰度,使程序的可读性下降。在各个函数执行的时候都可能改变全局变量值,往往难以清楚的判断出每个时刻各个全局变量的值。
(4)定义全局变量会直接占用单片机的内存单元,而局部变量只有进入定义局部变量的函数内才会分配内存,函数退出后会自动释放所占用的内存。所以大量的全局变量会额外增加内存占用。
综上所述之原因,我们一项原则就是尽量减少全局变量的使用,能用局部变量代替的就不用全局变量。
还有一种特殊情况,大家在看别人程序的时候注意。C语 言是允许局部变量和全局变量同名的,他们定义后在内存中占有不同的内存单元。如果在同一源文件中,全局变量和局部变量同名,在局部变量作用域范围内,只有 局部变量有效,全局变量不起作用,也就是说局部变量具有更高优先级。但是我们在编写程序的时候,尽量不要让变量重名,以避免不必要的误解。
.2?变量的存储类别
变量的存储类别分为自动、静态、寄存器和外部这四种。其中后两种我们暂不介绍,主要是自动变量和静态变量这两种。
函数中的局部变量,如果不加static这个关键字来进行特别声明,都属于自动变量,也叫做动态存储变量。这些存储类别的变量,在调用该函数的时候系统会给他们分配存储空间,在函数调用结束后会自动释放这些存储空间。动态存储变量的关键字是auto,但是这个关键字是可以省略的,所以我们平时都不用。
那么与动态变量对应的就是静态变量。首先,全局变量均是静态变量,此外,还有一种特殊的局部变量也是静态变量。即我们在局部变量声明前边加上static这个关键字,加上这个关键字的变量就称之为静态局部变量,他的特点是,在整个生存期中只赋一次初值,函数调用的时候,如果是第一次调用,它的值就是我们给定的那个初值;如果不是第一次调用,那么它的值就是上一次函数调用结束后的值。
在 某一些场合中,一些变量只在一个函数中使用了,但是这个变量每次变化的值我们还想保存,如果定义成局部动态变量的话,每次进入函数后上一次的值就丢失了, 如果定义成全局变量的话,又违背了我们上面提到的关于全局变量使用的一般原则,这个时候我们就可以定义成局部静态变量了。
比如上节课中断程序中有一个用于动态刷新数码管控制的变量j,我们上节课的程序是定义成了全局变量,现在我们可以直接改成局部静态变量来试试。
#include
文档评论(0)