1. 要点
静态局部变量是指用static修饰的局部变量,例如
static int var1 = 0;
一般的,默认的未被修饰的局部变量称之为自动变量。
-
1. 静态局部变量在静态存储区分配存储单元。该存储区域在程序运行期间不释放;自动变量属于动态存储类别,存储在动态存储区,函数调用结束后即释放。
补充知识:C语言内存四大区域–
(1)代码区(只读):程序代码指令,define定义的常量;
(2)静态区:全局(关键)变量/常量,静态(关键)变量/常量,常量字符串;
静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。
(3)栈区:局部变量;
栈区上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间大小有限。
(4)堆区:由malloc或者realoc,calloc分配的内存区域;
堆区其生命周期由free决定。 -
2. 为静态局部变量赋初值是在编译时进行的,只赋值一次;程序运行过程已有初值,每次调用函数的时候不再重新赋初值,而是保留上次函数执行结束保留的值。而自动变量的初值是在函数调用的时候进行的,不是在编译的时候进行的,所以每次执行函数的时候,都会重新赋初值。
2. 代码示例
#include <stdio.h>
#include "stdlib.h"
void fun_test(void)
{
static int var1 = 0; //静态局部变量
int var2 = 0; //自动变量
var1 ++;
var2 ++;
printf(" var1 = %d ", var1);
printf(" var2 = %d ", var2);
printf("\n\r");
}
int main(void)
{
for(int i = 0; i < 4; i++)
{
printf("excute fun_test, i = %d: \n\r", i);
fun_test();
}
printf("\n\r");
system("pause");
return 0;
}
执行结果如下: