1. c语言-静态局部变量
1.1 测试代码 ( 静态局部变量的生命周期及作用域 )
void fun01_01_01(){
int a01_01=0;
static int b01_01=0;
a01_01++; b01_01++;
printf("a01_01=%d ",a01_01);
printf("b01_01=%d\n",b01_01);
}
/* 1. 静态局部变量的生命周期 */
void fun01_01(){
fun01_01_01();
fun01_01_01();
fun01_01_01();
}
1.2 执行结果
1.3 作用域实验代码
void fun01_01_01(){
int a01_01=0;
static int b01_01=0;
a01_01++; b01_01++;
printf("a01_01=%d ",a01_01);
printf("b01_01=%d\n",b01_01);
}
/* 1. 静态局部变量的生命周期 */
void fun01_01(){
fun01_01_01();
fun01_01_01();
fun01_01_01();
printf("a01_01=%d ",a01_01);
printf("b01_01=%d\n",b01_01);
}
1.4 编译结果
1.5 分析
静态局部变量在函数内定义,生存期为整个源程序;但作用域与局部变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。
2. 静态局部变量自动初始化为0
2.1 测试代码
/* 2. 静态局部变量自动初始化为0 */
void fun01_02(){
int a01_02;
static int b01_02;
printf("a01_02=%d ",a01_02);
printf("b01_02=%d\n",b01_02);
}
2.2 执行结果
、
2.3 理论分析
对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对非静态局部变量不赋初值,则其值是不定的。
3.c语言-静态全局变量、全局变量
3.1 代码
/* test_01.h文件 */
extern int a01_03;
/* test_01.c文件 */
int a01_03=1;
static int b01_03=1;
void test01_03(){
printf("a01_03=%d ",a01_03);
printf("b01_03=%d\n",b01_03);
}
/* main.c文件 */
int main(){
test01_03();
printf("in the main: a01_03=%d\n",a01_03);
// printf("b01_03=%d\n",b01_03);//静态全局变量,不可跨文件使用
return 0;
}
3.2 执行结果
3.3 分析
普通全局变量:定义在函数外部;对整个工程可见,其他文件可以使用extern外部声明后直接使用(作用域,整个源程序);其他文件不能再定义一个与其相同名字的变量
静态全局变量:定义在函数外部;仅对当前文件可见,其他文件即便使用extern外部声明也不能使用(作用域,当前文件);其他文件可以再定义一个与其相同名字的变量
4. 总结
静态局部变量:作用域是函数内,生命周期整个源程序。
静态全局变量:作用域是当前文件,生命周期整个源程序。