从头开始学C语言第八天——static静态存储和extern外部存储
静态存储类型,既可以在函数体内,也可以在函数体外。也就是static既可以用作局部变量,只存在于函数体内,也可以用作全局变量。(初值默认为0)作为局部变量时,static变量在内存中以固定地址存放,而不是堆栈形式(堆栈相当于在函数体执行完之后,函数体内的数据就会直接释放内存,数据清零),在程序没有结束之前,static类型的数据会保存在一个固定的地址并且数据变量会一直保留,在调用时会保留上次调用存
static
静态存储类型,既可以在函数体内,也可以在函数体外。也就是static既可以用作局部变量,只存在于函数体内,也可以用作全局变量。(初值默认为0)
作为局部变量时,static变量在内存中以固定地址存放,而不是堆栈形式(堆栈相当于在函数体执行完之后,函数体内的数据就会直接释放内存,数据清零),在程序没有结束之前,static类型的数据会保存在一个固定的地址并且数据变量会一直保留,在调用时会保留上次调用存储空间。
#include <stdio.h>
int main()
{
int a=1;
while(a<5)
{
static int b;
b++;
printf("b=%d \n",b);
a++;
printf("a=%d \n",a);
}
return 0;
}
代码中如果没有对b变量进行static,输出的结果会是:“b=1”循环,而a会是一个不断+1的循环。因为变量a不在函数体while内部,而是存于整个主函数内部,不属于while函数体的局部变量,所以每次循环都会和现在声明为static类型的b变量一样出现递增的情况。
extern
在文件中函数体外说明的数据类型,所有其他文件中的程序或者函数都可调用这个变量。extern也被称为外部参照引用型,用extern说明的变量是从其他文件引用的变量。但是,当static说明的变量为全局变量时,这个变量其他外部程序将无法引用。
外部声明变量:
int a=20;
主函数需要调用外部文件变量:
#include <stdio.h>
extern int a;
int main()
{
printf("a=%d \n",a);
return 0;
}
上述程序中如果外部声明变量的程序改为:static int a=20;
那么主函数将无法调用a变量,程序会报错。
更多推荐
所有评论(0)