C语言| 静态局部变量
C语言| 局部变量、全局变量
【自动变量】(auto)
局部变量就是auto型,可省略auto。
【静态局部变量】(static)
static修饰过的局部变量==静态局部变量,它就会存储在静态存储区了,未初始化,系统自动将其初始化为0。
静态存储区,主要用于存放静态数据和全局数据。
静态局部变量存在于程序运行的整个过程中。
【知识点总结】
1 static修饰后的局部变量,叫做静态局部变量。直到整个程序都结束,才会释放静态局部变量的内存空间。
2 定义成static型的变量是存放在静态存储区中的,在程序的整个运行过程中都不会释放。
3 static int a; //静态局部变量未初始化,系统自动赋值 0 或者 空字符 ‘\0’ (对应字符变量)
i 静态局部变量,定义并初始化的语句,只执行一次。(只能在它作用范围内使用)每次调用,会使用上一次函数调用结束后的值。直到整个程序都结束了,才会释放空间。
ii 相当于全局变量,是因为它们都存放在静态存储区中,所以它们都一直存在程序运行的整个过程中。
4 静态局部变量(同全局变量一样)长期占用内存不放,当调用次数过多时会不知道当前变量的值是多少。静态局部变量能不用就尽量不用。
5 对于全局变量来说,
i 没有使用static修饰,那么其他文件只需要直接使用extern对该全局变量声明,就能直接使用该全局变量。
ii 使用static修饰,即使其他文件使用extern,对它进行声明,也不能使用它。
[程序代码分析]
先定义一个函数,JTJB(),主函数再调用它。
[JTJB()函数]
x定义的是静态局部变量,每次调用结束后,都不会释放。
一直存在整个程序运行中,直到整个程序都结束,才被释放。
所以,每次调用结果,x的值都有变化,相当于全局变量。
static int x=0; //只执行一次,保留上次函数调用结束的值
#include <stdio.h>
void JTJB(void); //函数声明
int main(void)
{
JTJB();
JTJB();
JTJB();
return 0;
}
void JTJB(void)
{
//静态局部变量,系统自动初始化为0
static int x;
int y = 0;
++x;
++y;
printf("x = %d, y = %d", x, y);
printf("\n");
return;
}