任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C语言中有三个地方可以声明变量:
- 在函数或块内部的局部变量
- 在所有函数外部的全局变量
- 在形式参数的函数参数定义中
局部变量
在某个函数或块的内部声明的变量称为局部变量。它们只能被该函数或该代码块内部的语句使用。局部变量在函数外部是不可知的。下面是使用局部变量的实例。在这里,变量a,b,c是main()函数的局部变量。
#include<stdio.h>
int main(){//局部变量声明int a,b;int c;//实际初始化a=10;b=20;c=a+b;printf("Value of a=%d,b=%d and c=%d\n",a,b,c);return 0;
}
全局变量
全局变量是定义在函数外部,通常是在程序的顶部。全局变量在整个程序生命周期内都是有效的,在任意的函数内部能访问全局变量。
全局变量可以被任何函数访问。也就是说,全局变量声明后在整个程序中都是可用的。下面是使用全局变量和局部变量的实例。
#include<stdio.h>
//全局变量声明
int g;
int main(){//局部变量声明int a,b;//实际初始化a=10;b=20;g=a+b;printf("Value of a=%d,b=%d and g=%d\n",a,b,g);return 0;
}
在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。下面是一个实例:
#include<stdio.h>
int g=20;
int main(){int g=10;printf("Value of g=%d\n",g);return 0;
}
//运行结果:
//Value of g=10
形式参数
函数的参数,形式参数,被当作该函数的局部变量,它们会优先覆盖全局变量。下面是一个实例:
#include<stdio.h>
int a=20;
int main(){int a=10;int b=20;int c=0;int sum(int,int);printf("Value of a in main() =%d\n",a);c=sum(a,b);printf("Value of c in main() =%d\n",c);return 0;
}
int sum(int a,int b){printf("Value of a in sum() =%d\n",a);printf("Value of b in sum() =%d\n",b);return a+b;
}
/*运行结果:
Value of a in main() =10
Value of a in sum() =10
Value of b in sum() =20
Value of c in main() =30
*/
初始化局部变量和全局变量
当局部变量被定义时,系统不会对其进行初始化,您必须自行对其初始化。定义全局变量时,系统会自动对其初始化,如下所示:
数据类型 | 初始化默认值 |
---|---|
int | 0 |
char | ’ ’ |
float | 0 |
double | 0 |
pointer | NULL |
正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果,因为未初始化的变量会导致一些在内存位置中已经可用的垃圾值。