- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用static声明局部变量 1. 静态局部变量 (1) 以static加以声明 (2) 属于静态存储类 (3) 其值在函数调用结束后不消失(占用的存储单元不释放),下一次调用时,该变量已有值,为上一次函数调用结束时的值,但其它函数不能使用。 (4) 程序举例 例1:f(int a) main() { int b=0; { int a=2,i; static int c=3; for(i=0;i3;i++) b=b+1; c=c+1; printf(“%d”,f(a)); return a+b+c; } } 程序演示 例2:int fac(int n) main() { static int f=1; { int i; f=f*n; for(i=1;i=5;i++) return f; printf(“%d!=%d\n”,i,fac(i)); } } 注:需要保留函数上次调用结束时的值,使用静态局部变量。 程序演示 2. 区分静态局部变量,自动变量 (1) 类别: 静:属于静态存储类别,在静态存储区中分配存储单元,在程序整个运行期间都不释放存储单元; 动:属于动态存储类别,在动态存储区中分配存储单元,函数调用结束后释放所占存储单元; (2)赋初值: 静:在编译时赋初值,只赋值一次,在程序运行时已有初值,下次调用为上次调用结束时的值。 动:赋初值在函数调用时进行,每次调用重新赋初值。 (3)不赋初值: 静:在编译时自动赋0或空字符; 动:若不赋初值则它的值是一个不确定的值,是由于每次函数调用结束后存储单元已释放,下次调用又重新分配单元,单元中的值是不确定的。 3. 什么情况下使用静态局部变量 (1) 保留上次函数调用结束时的值,如,求N!。 (2) 初始化后,变量只被引用而不改变其值,使用静态局部变量较方便,以免每次调用重新赋值。 小结:尽量不要多用静态局部变量。因为,静态局部变量长期占用内存,降低可读性,多次调用函数是不明确变量的当前值 register变量 1. 引入原因: (1)一般情况下,变量的值都是存储在内存中的,使用时由控制器发出指令将内存中该变量的值送到运算器中 (2)频繁使用某些变量,为存取变量的值要时间开销较大 (3)为提高执行效率,C语言允许将局部变量的值存放到寄存器中,这种变量就称为寄存器变量。定义格式如下: register 数据类型 变量表; register变量 2. 使用说明: (1)只有动态局部变量(自动变量),形参才能定义成寄存器变量,即全局变量不行;在调用一个函数时占用一些寄存器,函数调用结束时释放寄存器。 (2)对寄存器变量的实际处理,随系统而异。例如,微机上的MSC和TC 将寄存器变量实际当作自动变量处理。 (3)允许使用的寄存器数目是有限的,不能定义任意多个寄存器变量。 (4) 静态局部变量不能定义为寄存器变量。 用extern声明外部变量 作用:扩展外部变量的作用域。 1. 在一个文件内部声明外部变量,在定义点之前可引用此外部变量。 例:int max(intx,int y) { return xy?x:y; } main() { extern A,B; printf(“%d”,max(A,B)); } int A=5,B=8; 2. 在多文件的程序中声明外部变量,一个文件中可引用另一个文件中已经定义的外部变量。 (1)在一个文件中定义外部变量A; (2)在另一个文件中用extern对A作“外部变量声明”,说明此变量是一个已经在其它文件中定义的变量,不必再为它分配内存。 (3)慎用,执行一个文件中的函数时,可能会改变了该全局变量的值,会影响另一文件中函数的执行结果。 用static声明外部变量 1. 用static声明的外部变量称为静态外部变量。 如:static int A; 2. 此外部变量仅限于本文件使用,而不能被其它文件使用 3. 作用:在程序设计中,各人可独立
原创力文档


文档评论(0)