文档详情

【2017年整理】第7章 C语言 变量存储类型与多文件.doc

发布:2017-02-04约2.68万字共16页下载文档
文本预览下载声明
第7章 变量存储类型与多文件系统 本章重点 ● 变量的存储类型。 ● 静态变量在多个函数中的应用。 ● 外部变量在多个文件中的应用。 本章难点 ● 自动变量的作用范围。 ● 内部静态变量与外部静态变量作用范围及生存期。 ● 外部变量在多文件中的应用。 7.1 变量的存储类型 在C语言中,变量的存储类型有:auto(自动)、register(寄存器)、static(静态)和extern(外部)。不同的存储类型直接影响着变量在函数中的作用域与生存期。 7.2 auto存储类型的变量与作用范围 定义自动变量时,可在函数内或复合语句内指定存储类型说明符auto或省略,系统都认为所定义的变量具有自动类别。因此,在函数内部定义变量: float a; 就等价于: auto float a ; 例如: int sub(float a) { int i=2; if(i0) { int n=1; printf(%d\n,n); n的作用范围i的作用范围 } n的作用范围 i的作用范围 return 0; } 例7.1 模块内外自动变量应用的例子。 :编辑源程序代码7-1.c如下: #includestdio.h int main() { int x=5; auto int y; y=x++; if(y==5) { int x=2; printf(x=%d\n,x); } printf(x=%d\n,x); return 0; } 7.3 static存储类型的变量与作用范围 静态变量可分为内部静态变量和外部静态变量。 格式:static 数据类型 变量名(=初始化常数表达式); 内部静态变量是指定义在函数内,只在本函数内有效。外部静态变量是指定义在函数外,限定在本文件内有效。 在整个程序运行期间,静态变量在内存的静态存储区中占据着永久性的存储单元。即使退出函数以后,下次再进入该函数时,静态局部变量仍使用原来的存储单元,从而可以继续使用存储单元中原来的值。 对未赋初值的静态局部变量,C编译程序自动给它赋初值0。 例7.3 应用内部静态变量的例子。 编辑源程序代码7-3.c #includestdio.h int kk( ) { int x = 4 ; static int y = 5 ; x*= 2 ; y*= 2; return (x+y); } int main( ) { int j , s = 0 ; for ( j = 0 ; j 2 ; j ++ ) s = kk( ); printf( s = %d\n ,s ); return 0; } (c)第二次执行语句return (x+y); 时参数情况 (c)第二次执行语句return (x+y); 时参数情况 main时参数情况 (b)首次函数调用结束返回main时参数情况 (a)执行语句static int y = 5; 时参数情况 图7.1 内部静态变量 7.4 register存储类型的变量与作用范围 寄存器变量的特点: ? register变量具有局部寿命,与auto相同。 ? 只用于自动型变量及函数的形式参数说明,不适用于外部变量和静态变量。 ? 寄存器变量不能用运算符取其地址。 ? 寄存器变量也是自动类变量。它与auto变量的区别仅在于:用register说明的变量,可以把那些频繁引用的变量声明为register变量,有助于提高程序的运行速度。 例7.5 阅读下列程序,register变量应用举例。 编辑源程序代码7-5.c #includestdio.h int power(int x, register int u) { register int n , p ; for(p=1,n=1;n=u;n++) p= p*x ; return p ; } int main( ) { int s; s=power(5,3); printf(s=%d\n,s); } 7.5 extern存储类型的变量与作用范围 外部变量是在函数外部任意位置上定义的变量。定义时,在变量的类型前不能用extern标识,定义在函数外部即可。它的作用域是从变量定义的位置开始,到整
显示全部
相似文档