存储位置
- 普通局部变量存储在栈上
- 静态局部变量存储在静态存储区
生命周期
- 当函数执行完毕时, 普通局部变量会被销毁
- 静态局部变量的生命周期则是整个程序运行期间, 即使函数调用结束, 静态局部变量的值也会被保留
初始化
- 普通局部变量在每次函数调用时都会被初始化, 他们的初始化是不确定的, 除非显式地进行初始化
- 静态局部变量在第一次函数调用时会被初始化, 然后保持其值不变, 直到程序结束
#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