局部与全局
局部变量也称为内部变量。局部变量是在函数内定义的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。
在复合语句中也可定义变量,其作用域只在复合语句范围内
main.c
void main(){
int a=1;
}
void add(){
//在这个方法中无法使用a变量
}
全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序
main.c
int a=1;
void main(){
printf("%d",a);//输出:1
}
void add(){
printf("%d",a);//输出:1
}
甚至另外一个文件都可以使用a变量,只需要引入即可
hello.c
extern int a;
void main(){
printf("%d",a);//输出:1
}
void add(){
printf("%d",a);//输出:1
}
变量存储类别
C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。
静态存储方式: 是指在程序运行期间分配固定的存储空间的变量。静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量。
动态存储方式: 是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储区中存放的变量是根据程序运行的需要而建立和释放的,通常包括:函数形式参数;自动变量;函数调用时的现场保护和返回地址等。
C语言中存储类别又分为四类:
1.自动(auto)
2.静态(static)
3.寄存器的(register)
4.外部的(extern)
auto: 用关键字auto定义的变量为自动变量,auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式
void main(){
auto int a=1;
}
static: 用static修饰的为静态变量,如果定义在函数内部的,称之为静态局部变量;如果定义在函数外部,称之为静态外部变量
静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放。
静态局部变量在编译时赋值,只赋初值一次;在定义静态局部变量时不赋值的话,编译时自动赋值0
static int a=1;
void main(){
static int b=1;
}
静态全局变量只能在本文件使用,别的文件无法引入
静态方法也只能在本文件使用,别的文件无法引入
register: 为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明
只有局部自动变量和形式参数可以作为寄存器变量,局部静态变量不能定义为寄存器变量
一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;
void main(){
register int a=1;
}
extern: 用于引入外部变量