目录
作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量:
- 在函数或块内部的局部变量
- 在所有函数外部的全局变量
- 在形式参数的函数参数定义中
- 在某个函数或语句块的内部声明的变量称为局部变量,它们只能在该函数或语句块内部的语句使用
- 局部变量在函数或语句块外部是不可用的
- 局部变量在函数返回或语句块结束时由系统收回内存空间
test39.c
- #include
-
- int main ()
- {
- // 局部变量声明
- int a, b, c;
-
- // 初始化
- a = 3;
- b = 5;
- c = a + b;
-
- printf ("a = %d, b = %d and c = %d\n", a, b, c);
-
- return 0;
- }
- 全局变量是定义在函数外部,通常是在程序的顶部(其它地方也可以)。全局变量在整个程序生命周期内都是有效的,在定义位置之后的任意函数中都能访问
- 全局变量在主程序退出时由系统收回内存空间
test40.c
- #include
-
- // 全局变量声明
- int g;
-
- int main ()
- {
- // 局部变量声明
- int a, b;
-
- // 初始化
- a = 3;
- b = 5;
- g = a + b;
-
- printf ("a = %d, b = %d and g = %d\n", a, b, g);
-
- return 0;
- }
局部变量和全局变量的名称可以相同,在某函数或语句块内部,如果局部变量名与全局变量名相同,就会屏蔽全局变量而使用局部变量
test41.c
- #include
-
- double d=3.14; // 全局变量声明
-
- void func1(); // 声明一个自定义函数
-
- int main()
- {
- printf("位置一 d=%lf\n",d);
- func1();
- printf("位置二 d=%lf\n",d);
- }
-
- void func1()
- {
- double d=3.1415; // 局部变量的声明
- printf("位置三 d=%lf\n",d);
- }
在 test41.c 中,定义了全局变量 d,在func1()函数中,定义了局部变量 d,func1()函数运行的时候,会使用自己的局部变量d,不会使用全局变量d,所以main函数中位置二输出d的值是3.14
再举一个简单的栗子 test42.c
- #include
-
- // 全局变量声明
- int g = 3;
-
- int main ()
- {
- // 局部变量声明
- int g = 5;
-
- //局部变量名与全局变量名相同,就会屏蔽全局变量而使用局部变量
- printf ("g = %d\n", g);// g 等于 5
-
- return 0;
- }
函数的参数,形式参数,被当作该函数内的局部变量,如果与全局变量同名它们会优先使用
test43.c
- #include
-
- // 全局变量声明
- int a = 3;
-
- int main ()
- {
- // 在主函数中的局部变量声明
- int a = 5;
- int b = 8;
- int c = 0;
- int sum(int, int); //函数的声明
-
- printf ("a = %d\n", a);
- c = sum( a, b);
- printf ("c = %d\n", c);
-
- return 0;
- }
-
- // 函数的定义
- int sum(int a, int b)
- {
- printf ("a = %d\n", a);
- printf ("b = %d\n", b);
-
- return a + b;
- }
- 全局变量保存在内存的全局存储区中,占用静态的存储单元;
- 局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元;
- 当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化
- 定义全局变量时,系统会自动对其初始化,如下所示:
数据类型 | 初始化默认值 |
---|---|
int(整形) | 0 |
char(字符型) | '\0' |
float(单精度浮点型) | 0 |
double(双精度浮点型) | 0 |
pointer (指针)下期介绍 | NULL |
本期的内容到这里就结束了,下期再见!