- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C第12章作用域和存储类别要点
* * * * * * * * * * * 第12章 用户标识符的作用域和存储类别 12.1 局部变量、全局变量和存储分类 12.1.1 作用域 一个标识符的有效范围,称为其作用域。 12.1.2 局部变量、全局变量和存储分类 局部变量:函数内部、复合语句内部;形参 全局变量:函数外部 存储类别:自动类(局部变量)、静态类(局部变量、全局变量) 存储类别确定了所说明对象在内存中的存储位置,从而也确定了所说明对象的作用域和生存期。 动态存储区 静态存储区 程序代码区 函数调用时的返回地址 自动类别的局部变量 全局变量 静态类别的局部变量 12.2 局部变量 12.2.1 auto 变量 指在函数内部或复合语句内部定义变量时,没有指定存储类别的情况。或者使用auto说明符。 auto变量的存储单元被分配在动态存储区。 每当进入函数体(或复合语句)时,系统自动为auto型变量分配存储单元,退出时自动释放这些单元。 这类变量的作用域是定义它的函数体或复合语句。 例 main( ) ?? { int a,b; /* a、b的作用域是整个函数体*/ ???? …… ???? { int c; /*c的作用域是该复合语句*/ ?????? c=a+b; ?????? …… ????? } ???? …… ?? }? 其他说明: 1、形参也是局部变量。 2、内层作用域的局部变量,能够屏蔽外层作用域的同名变量。 main( ) ?? { int a,b,c; /* a,b,c的作用域是整个函数体*/ ???? …… ???? { int c; /*c的作用域是该复合语句*/ ?????? c=a+b; ?????? …… ????? } ???? …… ?? }? 12.2.2 register变量 ⑴程序运行时,将优先把register变量存入寄存器中,以提高访问速度。 ⑵但一般编译系统都能自动优化寄存器的分配,故定义register变量已无必要。 12.2.3 静态存储类的局部变量 1.在函数体(复合语句)内部定义变量时用static来说明。如:static int a; 2.静态局部变量的存储空间,在函数返回时并不释放,而一直保持到整个程序运行结束。 3.静态局部变量在编译时进行初始化,且只进行一次初始化。 12.3 全局变量 1、全局变量是指在函数外部定义的变量。 2、全局变量的作用域是从定义点至整个程序文件的末尾。 例 int p=1,q=5; /*p、q是全局变量*/ ?? float f1(int a) ?? { int b,c; ???? …… } ?? char c1,c2; /*c1、c2是全局变量*/ ?? char f2( int x,int y) ?? { int i,j; ???? …… } ??? main() ??? { int m,n; ????? …… ???? } 3、全局变量通常用于在不同函数之间传递数据。 int m; /*全局变量*/ void max(int a,int b,int c) {if(ab) m=a; ? else m=b; ? if(cn) m=c; } main() {int x,y,z; ? scanf(%d%d%d,x,y,z); max(x,y,z); ? printf(m=%d\n,m);} 4、局部变量能够屏蔽同名的全局变量 #include stdio.h int k=6; main( ) { ? printf(%d\n,k); /* k=6 */ { int k=9; k++; printf(%d\n,k); /* k=10*/ } k++; printf(%d\n,k); /* k=7 */ } 5、不建议使用全局变量 (1)不论是否需要,全局变量在整个程序运行期间都占用内存空间 (2)全局变量必须在函数以外定义,降低了函数的通用性,影响了函数的独立性 (3)使用全局变量容易因疏忽或使用不当而导致全局变量中的值意外改变,从而引起副作用,产生难以查找的错误。 12.3.2 在同一编译单位内用extern说明符扩展全局变量的作用域 当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明,以便通知编译程序:该变量是一个已经在外部定义了的全局变量,已经分配了存储单元,不需要
文档评论(0)