一、局部變量和全局變量
1、局部變量
在一個函數(shù)內(nèi)部定義的變量是內(nèi)部變量,它只在本函數(shù)范圍內(nèi)有效。
說明:
1)、主函數(shù)main中定義的變量(m, n)也只在函數(shù)中有效,不像PASCAL在主函數(shù)中定義的變量在整個文件或程序中有效。主函數(shù)也不能使用其他函數(shù)中定義的變量。
2)、不同函數(shù)中可以使用相同名字的變量,它們代表不同的對象,互不干擾,在內(nèi)存中占有不同的單元。
3)、形式參數(shù)也是局部變量。
4)、在一個函數(shù)內(nèi)部,可以在復(fù)合語句中定義變量,這些變量只在復(fù)合語句中有效,這種復(fù)合語句也可稱為分程序。
2、全局變量
編譯單位是源程序文件,在所有函數(shù)之外定義的外部變量是全局變量,可以為本文件中其他函數(shù)所共用。它們的有效范圍從變量定義的位置開始到本源文件結(jié)束。
全局變量的第一個字母一般都用大寫
在一個源文件中外部變量與局部變量同名,則在局部變量的作用范圍內(nèi),外部變量被屏蔽,不起作用。
二、變量的存儲類別
1、動態(tài)存儲方式和靜態(tài)存儲方式
用戶使用的存儲空間可分為程序區(qū)、靜態(tài)存儲區(qū)和動態(tài)存儲區(qū)。全局變量放在靜態(tài)存儲區(qū)中。在動態(tài)存儲區(qū)中存放以下數(shù)據(jù):函數(shù)形式參數(shù)、自動變量、函數(shù)調(diào)用時現(xiàn)場保護和返回地址等。
數(shù)據(jù)的存儲類別分為靜態(tài)存儲類和動態(tài)存儲類,具體包含四種:自動的(auto)、靜態(tài)的(static)、寄存器的(register)、外部的(extern).
auto變量
函數(shù)中的局部變量,如不專門聲明為static存儲類別,都是動態(tài)地分配存儲的。關(guān)鍵字auto可以省略
用static聲明局部變量
有時希望漢書中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,即不釋放其占用的存儲單元,就應(yīng)該聲明為“靜態(tài)局部變量”。
靜態(tài)局部變量屬于靜態(tài)存儲類別,在靜態(tài)存儲區(qū)內(nèi)分配存儲單元。
對靜態(tài)局部變量是在編譯時賦初值的,即只賦初值一次,在程序運行時它已有初值。以后每次調(diào)用函數(shù)是不在重新賦初值而是保留上次函數(shù)調(diào)用結(jié)束時的值。如果定義局部變量時不賦初值的話,對靜態(tài)局部變量來說自動賦零或空字符。雖然靜態(tài)局部變量在函數(shù)調(diào)用后仍然存在,但其他函數(shù)是不能引用它的。
register變量
說明:只有自動局部變量和形式參數(shù)可以作為寄存器變量
用extern聲明外部變量
編譯時將外部變量分配在靜態(tài)存儲區(qū)
1、在一個文件內(nèi)聲明外部變量
如果外部變量不在文件的開頭定義,其有效的作用范圍只限于定義處到文件結(jié)束。如果在定義點之前的函數(shù)想引用該外部變量,則應(yīng)該在引用之前用關(guān)鍵字extern對該變量作“外部變量聲明”。
2、在多文件的程序中聲明外部變量
在任何一個文件中定義外部變量,而在另一個文件中用extern對該外部變量作“外部變量聲明”。
用static聲明外部變量
有時希望某些外部變量只限于被本文件引用,而不能被其他文件引用,這時可以在定義外部變量時加一個static聲明。靜態(tài)外部變量