存储位置
- 普通局部变量存储在栈上
- 静态局部变量存储在静态存储区
生命周期
- 当函数执行完毕时, 普通局部变量会被销毁
- 静态局部变量的生命周期则是整个程序运行期间, 即使函数调用结束, 静态局部变量的值也会被保留
初始化
- 普通局部变量在每次函数调用时都会被初始化, 他们的初始化是不确定的, 除非显式地进行初始化
- 静态局部变量在第一次函数调用时会被初始化, 然后保持其值不变, 直到程序结束
#include <stdio.h>
void normal_func() {
int i = 0;
i++;
printf("局部变量 i = %d\n", i);
}
void static_func() {
static int j = 0;
j++;
printf("static局部变量 j = %d\n", j);
}
int main() {
// 调用3次normal_func()
normal_func();
normal_func();
normal_func();
// 调用3次static_func()
static_func();
static_func();
static_func();
return 0;
}
运行结果
局部变量 i = 1
局部变量 i = 1
局部变量 i = 1
static局部变量 j = 1
static局部变量 j = 2
static局部变量 j = 3