位置:首页 > 软件操作教程 > 编程开发 > C语言 > 问题详情

C语言 全局变量

提问人:刘团圆发布时间:2020-12-01

    与局部变量对应的是全局变量。全局变量是在函数外部定义的变量,因为是定义在函数之外,所以也可称为外部变量。以此类推,在函数外部定义的数组就称为外部数组。

    关于全局变量,做如下几点说明:

(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;

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部