C语言 全局变量
与局部变量对应的是全局变量。全局变量是在函数外部定义的变量,因为是定义在函数之外,所以也可称为外部变量。以此类推,在函数外部定义的数组就称为外部数组。
关于全局变量,做如下几点说明:
(1)外部变量不属于任何一个函数,其作用域为从外部变量的定义位置开始,到本文件结束为止。例如:
int k=0; /*定义全局变量k*/
void fun(int m) /*m为形参,局部变量*/
{
m=m+k;
k+=m;
printf("m=%d k=%d".m,k);
}
main() /*i为main()函数的局部变量 */
{
int i=4;
fun(i++);
printf (" i=%d k=%d\n",i,k);
}
程序分析:
从main()函数执行,首先定义变量i,初值为4,调用fun(i++)函数,将i的值4作为实参传递,之后i的值加1。
fun()函数中,形参m接收实参传递的值4,执行m=m+k, k是全局变置,取出k值0,参与m+k运算,所以m的值为4+0,
计算k=k+m运算,k的值也为4, printf()函数的执行结果为:m=4, k=4。fun()函数执行结束, 返回main()函数调用处继续执行。
main()函数开始执行printf()函数,输出结果为:i=5, k=4。
通过分析可以看出,变量k是全局变量,当k的值在fun()函数中被改变时,这种改变将作用在所有后面使用变量k的函数中。
(2)全局变量可以和局部变量同名。同名时,在局部变量的作用域内,局部变量屏蔽全局变量,
例如:
#include<stdio.h〉
int a=5;
void fun(int b)
{
int a=10;
a+=b;
printf("%d ",a);
}
main()
{
int k=20;
fun(k);
a+=*k;
printf("%d \n",a);
程序分析:
main()函数中变置k为局部变量,只在main()函数内有效,调用fun()函数将变置k的值20作为实参传递给fun()函数的形参b。
在fun()函数内部定义了_个变量a,这个a是局部变量,与在函数外部定义的全局变量a不是一回事。在函数内部,如果局部变量与全局变量重名,局部变量屏蔽全局变量,所以程序的执行过程为:
a=a+b,相当于a=10+20,即a的值为30,输出。
fun()函数执行完毕,返回main()函数调用处继续执行a+=k;。因为在main()函数内部没有定义变量a,所以此处出现的是全局变量a,经过赋值计算,全局变置a的值为25,输出。
(3)外部变量的作用域是从定义处到本文件结束。如图所示,程序中出现三组全局变量,每组全局变量的定义位置都不一样。x、y定义在所有函数的最上面,所以它们的作用范围为整个文件;全局变量m、n定义在fun()和main()函数之间,如果不做声明,那么只有main()函数可以使用它们,fun()函数如果使用会出现“变量未定义”的错误。同样,全局变量a、b定义在文件的末尾,所有函数的后面,如果main()函数和fun()函数试图使用a、b,也会出现“变量未定义”的错误。
C语言规定,如果定义点之前的函数引用这些全局变量时,需要在函数内对被引用的外部变量进行说明。全局变量说明的一般形式为:
extern数据类型外部变置[,外部变量2……];
例如,在main()函数中想使用全局变量a, b的说明语句为:
extern float a,b;
点击加载更多评论>>