变量作用域是指我们在程序中命名的变量在多大范围能够访问到它。在函数内部声明的变量,在函数外部是否能够访问?在源程序文件函数外声明的变量,在函数内部是否能够访问?这些都是变量作用域要解决的问题。下面是一段有关变量作用域范围的代码。
#include <stdio.h>
// 声明area函数
void area(double r);
// 定义变量π
double pi = 3.14;
void main()
{
// 调用area函数
area(2.1);
}
// 定义area函数
void area(double r)
{
double s = r*pi*pi;
printf("%.2f",s);
}
上面的代码是求圆的面积。在源程序文件头部声明了变量π和函数area,变量PI被定义的area函数在内部使用,area函数求出圆的面积并输出结果。
在函数外声明的变量PI称为全局变量,其作用域是整个源程序文件,源程序文件内所有的函数都可以使用访问全局变量,但需要遵循先声明后使用的原则。
在area函数内声明的变量s为函数内部声明的变量,在函数内部声明的变量称为局部变量,其作用域仅限于函数内部,在函数外部不能访问局部变量。
在上面的探讨中,我们了解了局部变量和全局变量的作用域。不过还有个问题没有弄明白,当全局变量的名称和函数体内局部变量的名称相同时,哪个变量会被使用呢?
#include <stdio.h>
// 声明area函数
void area(double r);
// 定义变量π
double pi = 3.14;
void main()
{
// 调用area函数
area(2.1);
}
// 定义area函数
void area(double r)
{
// 局部变量pi与全局变量pi重名
double s,pi = 0.314;
s = r*pi*pi;
printf("半径为%.2f,圆的面积为:%.2f\n",r,s);
}
上面的代码在area函数内部又声明了一个变量pi,这个变量pi是局部变量,其值为一个错误的π值。那么问题来了,在程序执行过程中,计算圆的面积是用局部变量的pi?还是用全局变量的pi呢?
在执行程序的过程中,程序输出如下信息:

程序的执行结果给出了答案,当全局变量的名称和函数体内局部变量的名称相同时,在函数体内声明的局部变量将覆盖与其名称相同的全局变量。