变量的作用域与生命周期
-
局部变量
-
普通
仅在作用域有效,每次调用包含该局部变量的函数时,该变量会被重新初始化。
例如:
void func() { int a = 1; ++a; printf("a = %d\n",a); } int main() { func(); func(); }
-
静态
staic
仅在作用域有效,每次调用包含该局部变量的函数时,该变量不会被重新初始化,而是接着上一次的值运行下去。
例如:
void func() { static int a = 1; ++a; printf("a = %d\n",a); } int main() { func(); func(); }
注:局部变量不赋初值其值为随机值
-
-
全局变量
-
普通
作用域跨文件,不会被重新初始化,在上次值得基础上改变值。
跨文件使用时需用
extern
声明。例如:
int a = 1;
extern int a; int main() { a++; printf("a = %d\n",a); return 0; }
-
静态
static
作用域限定在其所在的文件内。
例如:
static int a = 1;
extern int a; int main() { a++; printf("a = %d\n",a); return 0; } //err
注:局部变量不赋初值其值为 0
-