第八章 变量的作用域和储存类别
主要问题:变量的作用域和生存周期
文章目录
8.1变量的作用域
【定义】:给变量分配确定的储存单元;
【说明】:说明变量的性质,并不是分配确定的储存单元;
C语言中变量按作用域范围分为:局部变量和全局变量。
8.1.1局部变量
【局部变量】:在一个函数内部或复合语句内部定义的变量。
作用域:定义该变量的函数内或定义该变量的符合语句内,只能在定义它的函数或复合语句内才能使用。
【注意】:
1.形参变量属于被调函数的局部变量,实参属于主调函数的局部变量。
2.局部变量可同名,即允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同单元,互不干扰。
【例】
#include<stdio.h>
int a=3,b=5; //a,b为全局变量,作用范围到本程序结束
max(int a,int b)
/*a、b为局部变量*/
{
int c;
c=a>b?a:b; //形参a、b的作用范围
return c;
}
main(){
int a=8; /*a为局部变量*/
printf("%d",max(a,b));
/*局部变量a的作用范围*/
}
//运行结果:8
8.1.2 全局变量
【全局变量】:在函数外部任意位置定义的变量。
作用域:从定义变量的位置到本源文件结束,它可以被本源程序文件的其他函数共用。
8.2变量的存储类别
变量的存储方式按变量值的生存期可划分为静态存储方式和动态存储方式。
【静态存储方式】:程序运行期间分配固定的储存空间。
【动态存储方式】:程序运行期间按需要动态分配储存空间。
与之相关的4个说明符:auto(自动的)、static(静态的)、register(寄存器的)、extern(外部的)。
【格式】:储存类别 数据类型 变量名1…变量名n
eg:auto int i,j 或int auto i,j
动态储存区存放数据:
1.函数形参变量,调用时分配储存空间。
2.局部变量。
3.函数调用时的现场保护和返回地址。
8.2.1 auto(自动)变量
局部变量可声明为自动变量,全局变量不能声明为自动变量。
特点:
1.内存分配:调用函数或执行复合语句是时,在动态存储区为其分配储存单元,执行结束后所占空间立即释放。
2.变量初值为随机值。若赋初值,则每次函数被调用时执行一次赋值操作。
3.生存期:函数或复合语句执行期间。
4.作用域:自动变量定义位置开始到函数体(或复合语句)结束。
8.2.2 static(静态)变量
【说明】:1.除形参外,局部变量和全局变量都可定义为静态变量。
8.2.3 register(寄存器)变量
【说明】:将变量的值保存到cpu的寄存器中,不占据内存单元,且访问速度快。
适用于:频繁引用的少数变量。
8.2.4 extern 变量