正文 第25章 函數3(1 / 3)

C語言中,變量的使用是有一定範圍的,例如函數的形參在函數調用結束就釋放。變量的有效範圍稱為變量的作用域。C語言中所有的變量都有自己的作用域,變量說明的方式不同,其作用域也不同。C語言中的變量根據不同的標準有不同的分類,從作用域範圍(即從空間)角度來看可分為兩種:局部變量和全局變量;從變量值存在的時間(即生存期)角度來看,變量的存儲方式有靜態存儲方式和動態存儲方式兩種,可分為自動變量、寄存器變量、靜態變量、外部變量。

從作用域範圍(即從空間)角度來分可分為局部變量和全局變量。

(1)局部變量

在函數內部定義的變量稱為局部變量(又稱內部變量)。其作用域僅限於本函數內,在該函數外就不能再使用。

例如:

intlocal(inta)/*函數local*/

intb,c;/*a、b、c作用於函數local內*/

……

voidmain()

intm,n;/*m、n作用於函數main內*/

……

在函數local內定義了三個變量,a為形參,b、c為一般變量。在local的範圍內a、b、c有效,m、n的作用域限於main函數內。

局部變量的作用域說明如下:

不同於其他語言,在C語言中,main函數定義的變量隻能在main函數中使用。同樣,main函數中也不能使用其他函數中定義的變量。這是由於main函數也是一個函數,它與其他函數是平行關係,應予以注意。

形參是屬於函數內定義的變量,因此也是局部變量,作用域也僅限於本函數。

C語言允許在不同的函數中定義相同的變量名,但它們代表不同的內存單元,不會發生混淆。如在前例中,形參和實參的變量名都為n是完全允許的。

在複合語句中也可定義變量,其作用域隻在複合語句範圍內。

[例811]

voidmain()

inti=9,j=3,x;

x=i+j;

intx=3;

printf("%d\n",x);

printf("%d%d\n",i,x);

本程序在main()中定義了i、j、x變量,而在複合語句內又定義了一個變量x,並賦初值為3。注意這兩個x不是同一個變量。在複合語句外定義的x隻在main函數中起作用,而在複合語句內定義的x隻在複合語句內起作用。因此程序第4行的x在main函數中定義,其值應為12。第7行輸出x值,該行在複合語句內,由複合語句內定義的x起作用,其值為3。故輸出值為3,第9行輸出i、x值,由於i是在整個程序中有效的,其值為9,故輸出9。而第9行已在複合語句之外,故輸出的x應為複合語句之外所定義的x,即第3行中定義的變量x,此x值由第4行已獲得為12,故輸出12。

程序運行結果:

3

912

(2)全局變量

在函數外部定義的變量稱為全局變量,它的作用域是從定義全局變量的位置開始到整個程序結束。在一個函數中使用全局變量分兩種情況:一種是全局變量在該函數之前已經定義過,則可以在該函數內直接使用此全局變量;另一種是全局變量在該函數之後定義,則隻有在該函數內對全局變量進行說明之後才能使用。全局變量的說明符為extern。