位置:首頁 > 軟件操作教程 > 編程開發(fā) > C語言 > 問題詳情

C語言 全局變量

提問人:劉團圓發(fā)布時間:2020-12-01

    與局部變量對應(yīng)的是全局變量。全局變量是在函數(shù)外部定義的變量,因為是定義在函數(shù)之外,所以也可稱為外部變量。以此類推,在函數(shù)外部定義的數(shù)組就稱為外部數(shù)組。

    關(guān)于全局變量,做如下幾點說明:

(1)外部變量不屬于任何一個函數(shù),其作用域為從外部變量的定義位置開始,到本文件結(jié)束為止。例如:

int k=0; /*定義全局變量k*/

void fun(int m) /*m為形參,局部變量*/

{

    m=m+k; 

    k+=m;

    printf("m=%d k=%d".m,k);

}

main()        /*i為main()函數(shù)的局部變量 */

{

    int i=4;

    fun(i++);

    printf (" i=%d k=%d\n",i,k);

}

程序分析:

    從main()函數(shù)執(zhí)行,首先定義變量i,初值為4,調(diào)用fun(i++)函數(shù),將i的值4作為實參傳遞,之后i的值加1。

    fun()函數(shù)中,形參m接收實參傳遞的值4,執(zhí)行m=m+k, k是全局變置,取出k值0,參與m+k運算,所以m的值為4+0,

    計算k=k+m運算,k的值也為4, printf()函數(shù)的執(zhí)行結(jié)果為:m=4, k=4。fun()函數(shù)執(zhí)行結(jié)束, 返回main()函數(shù)調(diào)用處繼續(xù)執(zhí)行。

    main()函數(shù)開始執(zhí)行printf()函數(shù),輸出結(jié)果為:i=5, k=4。

    通過分析可以看出,變量k是全局變量,當(dāng)k的值在fun()函數(shù)中被改變時,這種改變將作用在所有后面使用變量k的函數(shù)中。

(2)全局變量可以和局部變量同名。同名時,在局部變量的作用域內(nèi),局部變量屏蔽全局變量,

例如:

#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()函數(shù)中變置k為局部變量,只在main()函數(shù)內(nèi)有效,調(diào)用fun()函數(shù)將變置k的值20作為實參傳遞給fun()函數(shù)的形參b。

    在fun()函數(shù)內(nèi)部定義了_個變量a,這個a是局部變量,與在函數(shù)外部定義的全局變量a不是一回事。在函數(shù)內(nèi)部,如果局部變量與全局變量重名,局部變量屏蔽全局變量,所以程序的執(zhí)行過程為:

    a=a+b,相當(dāng)于a=10+20,即a的值為30,輸出。

    fun()函數(shù)執(zhí)行完畢,返回main()函數(shù)調(diào)用處繼續(xù)執(zhí)行a+=k;。因為在main()函數(shù)內(nèi)部沒有定義變量a,所以此處出現(xiàn)的是全局變量a,經(jīng)過賦值計算,全局變置a的值為25,輸出。

(3)外部變量的作用域是從定義處到本文件結(jié)束。如圖所示,程序中出現(xiàn)三組全局變量,每組全局變量的定義位置都不一樣。x、y定義在所有函數(shù)的最上面,所以它們的作用范圍為整個文件;全局變量m、n定義在fun()和main()函數(shù)之間,如果不做聲明,那么只有main()函數(shù)可以使用它們,fun()函數(shù)如果使用會出現(xiàn)“變量未定義”的錯誤。同樣,全局變量a、b定義在文件的末尾,所有函數(shù)的后面,如果main()函數(shù)和fun()函數(shù)試圖使用a、b,也會出現(xiàn)“變量未定義”的錯誤。


C語言規(guī)定,如果定義點之前的函數(shù)引用這些全局變量時,需要在函數(shù)內(nèi)對被引用的外部變量進行說明。全局變量說明的一般形式為:

    extern數(shù)據(jù)類型外部變置[,外部變量2……];

例如,在main()函數(shù)中想使用全局變量a, b的說明語句為:

    extern float a,b;

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部