一、 全局变量:定义在函数外的变量叫全局变量,在.c文件中定义,在.h文件中声明,并且声明时不能赋值。
存储位置:初始化的存储在data,未初始化的存储bss。
生命周期:main函数执行前就完成定义,到程序执行结束才释放,整个程序的执行期间不会释放。
作用域:整个程序的任何位置都可以使用(可以在函数之间共享)。
全局变量的缺点:
1、它的名字可能与结构、联合、枚举名、枚举值、宏名、函数名冲突。
2、在程序运行期间它不会被释放,浪费内存,尽量少用全局变量。
二、局部变量:定义在函数内的变量、函数的形参变量叫局部变量。
存储位置:栈内存段
生命周期:它所在的函数被调用后,执行变量的定义语句开始,到函数执行结束释放。
作用域:从定义的位置开始,到函数结束。
三、块变量:定义在if、for、while、do while等语句块内的变量叫块变量。
存储位置:栈内存段
生命周期:它所在的函数被调用后,执行变量的定义语句开始,出了它所在的语句块就被释放了。
作用域:从定义的位置开始,到语句块结束。
局部变量、块变量的优缺点:
1、使用范围受限
2、不能长期保存数据
3、会随着代码的执行动态的定义、释放,节约内存。
全局变量、局部变量、块变量的同名问题:
1、 全局变量、局部变量、块变量可以同名。
2、 局部变量会屏蔽同名的全局变量,块变量会屏蔽同名的全局变量、局部变量。