Logo

郎哥编程

第40讲:变量的作用域

2026-04-10 26

变量作用域是指我们在程序中命名的变量在多大范围能够访问到它。在函数内部声明的变量,在函数外部是否能够访问?在源程序文件函数外声明的变量,在函数内部是否能够访问?这些都是变量作用域要解决的问题。下面是一段有关变量作用域范围的代码。

#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呢? 

在执行程序的过程中,程序输出如下信息:

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

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论