1.3.2 作用域

不少人在编程中并不重视作用域的问题,实际上,它是C语言程序设计中的一个要点。通常来说,一段程序代码中所用到的名字并不总是有效或可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。现在,我们通过如下代码来分析作用域。


include<stdio.h>

void fun()

{

int a=3,b;

printf("fun()函数里面的a值为:%d\n",a);

return;

}

int main(void)

{

int a=0,b;

{

int a=1;

printf("main()函数里面被大括号封装的a值为:%d\n",a);

}

fun();

printf("main()函数里面的a值为:%d\n",a);

return 0;

}


运行结果:


main()函数里面被大括号封装的a值为:1

fun()函数里面的a值为:3

main()函数里面的a值为:0


分析上面的代码后发现,在main()函数中定义的变量a和b仍然可以在fun()函数中定义和使用,这是因为局部变量的作用域仅在该函数中有效,所以可以在一个函数中定义与另一个函数中的变量同名的变量。再看main()函数,我们发现,居然可以在main()函数中定义两次变量a。这是由于在函数体内可以进一步限制变量的作用域,通常的方法是采用大括号封装来限制变量的作用域,这就可以再次使用a来定义变量了。但是,值得注意的是,此时a的作用域为大括号的封装范围,在大括号的封装范围之外再次使用printf打印语句打印a的值时,a的值为大括号封装外面的a值,所以,当在函数体中定义和使用变量名的时候一定要注意其作用域。图1-3说明了同名变量的不同作用域的处理方法。

如果在一个区域中出现了同名的变量,那么以在该区域有效且定义最接近该区域的变量为准。

1.3.2 作用域 - 图1

图 1-3 同名变量的不同作用域