【2017年整理】第7章 C语言 变量存储类型与多文件.doc
文本预览下载声明
第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标识,定义在函数外部即可。它的作用域是从变量定义的位置开始,到整
显示全部