2.3 變量
1變量的定義
變量的定義是通過變量聲明語句來實現(xiàn)的,變量聲明語句的一般格式為:
[<存儲類>]<類型名><變量名>[=<初值表達式>],...;
<存儲類>有四種,它們分別是auto、register、static、extern。
<類型名>為已存在的一種數(shù)據(jù)類型名稱,如char,short,int,long,float,double等基本數(shù)據(jù)類型名,或者用戶定義的數(shù)據(jù)類型名。
<變量名>是用戶定義的一個標識符,用來表示一個變量,該變量可以通過后面的可選項賦予一個值,稱為給變量賦初值,也叫做對變量進行初始化。C+ +中標識符是區(qū)分大小寫的,也就是說,大寫字母和小寫字母被認為是不同的字母。
變量名的命名遵循如下規(guī)則:
(1) 不能是C+ +關(guān)鍵字;
(2)第一個字符必須是字母或下劃線;
(3)中間不能有空格;
(4)變量名中不能包括;,′″+-之類的特殊符號。
實際上變量名中除了能使用26個英文大小寫字母和數(shù)字外,只能使用下劃線“_”。
2變量的使用方式
(1)全局變量和局部變量
全局變量是在所有函數(shù)定義、類定義和程序塊之外聲明的變量。聲明全局變量時如果在程序中不對它進行專門的初始化,該變量會被系統(tǒng)自動初始化為0。在程序的任何一個函數(shù)、類或程序塊之內(nèi)均可以訪問全局變量。
局部變量是在某個函數(shù)定義、類定義或程序塊之內(nèi)聲明的變量。局部變量只能在聲明它的函數(shù)、類或程序塊中被訪問。
(2)生存期與作用域
生存期是指從一個變量被聲明且分配了內(nèi)存開始,直到該變量聲明語句失效,它占用的內(nèi)存空間被釋放為止。一個全局變量的生存期從它被聲明開始,直到程序結(jié)束;一個局部變量的生存期從它被聲明開始,直到包含它的最近的一個程序塊結(jié)束。
作用域是指變量名可以代表該變量存儲空間的使用范圍。
一般情況下,變量的作用域與其生存期一致,但由于C+ +語言允許在程序的不同部分為不同變量取同一名字,因此一個變量名的作用域可能小于其生存期。
(3)變量的存儲類屬性
在C+ +中變量還可以按存儲分配方式的不同被劃分為4種不同的存儲類別,它們分別是:
①auto變量:用關(guān)鍵字auto聲明的局部變量稱為自動變量。auto為變量聲明時的默認存儲類別,即在變量定義時,如果不顯式標明存儲類別,則系統(tǒng)自動按auto變量處理。auto變量所占用存儲空間的分配和釋放工作將由系統(tǒng)自動完成。
、趓egister變量:用關(guān)鍵字register聲明的局部變量稱為寄存器變量。register變量可能以寄存器作為其存儲空間。聲明寄存器變量時,關(guān)鍵字register的作用只能是建議(而不是強制)系統(tǒng)使用寄存器,原因是寄存器雖然存取速度快,但空間有限,當寄存器不夠用時,該變量仍然按自動變量處理。
、踫tatic變量:用關(guān)鍵字static聲明的變量稱為靜態(tài)變量。任何靜態(tài)變量的生存期將延續(xù)到整個程序的終止。與全局變量一樣,為靜態(tài)變量分配的存儲空間在整個程序運行過程中不再被釋放;如果靜態(tài)變量未被賦初值,系統(tǒng)將自動為其賦初值為0。
④extern變量:用關(guān)鍵字extern聲明的變量稱為外部變量。變量一旦被聲明為外部變量,系統(tǒng)就不必像一般變量那樣為其分配內(nèi)存,因為該變量已在這一局部的外面被定義。外部變量一般用于多個文件組成的程序中,有些變量在多個文件中被聲明,但卻是指同一變量。標明某一變量為外部變量可以避免為其重復(fù)分配內(nèi)存。
(4)typedef類型說明
使用關(guān)鍵字typedef可以為已有類型名定義一個新類型名。其語法格式為:
typedef<已有類型名><新類型名>
typedef類型說明并沒有真正地定義新的數(shù)據(jù)類型,它只是相當于給某個已有的數(shù)據(jù)類型起了一個別名。在規(guī)模較大的程序中為了提高代碼可讀性常采用這種形式。
3符號常量聲明語句
符號常量在使用之前必須先進行聲明。符號常量聲明語句同變量聲明語句類似,其語法格式為:
const<類型名><符號常量名><初值表達式>……;
其中,關(guān)鍵字const指明這是一條符號常量聲明語句,后面跟著符號常量的類型名,接著是符號常量名,它是一個用戶定義的標識符,符號常量名之后為一個賦值號和一個初值表達式。由此可見,必須在聲明符號常量的同時為其賦初值。該語句也可以聲明多個符號常量。
系統(tǒng)執(zhí)行符號常量聲明語句時,需要依次為每個符號常量分配存儲單元并賦初值。一個符號常量被聲明后,它的值就是聲明所賦予的初值,作為常量,這個值以后將始終保持不變,因為系統(tǒng)只允許讀取它的值,而不允許再次向它賦值。另外,在符號常量聲明語句中,若<類型名>為int,則int可省略。
符號常量聲明語句既可以出現(xiàn)在函數(shù)體外,也可以出現(xiàn)在函數(shù)體內(nèi),這一點也跟變量定義語句相同。
C+ +關(guān)鍵字中的true和false就是系統(tǒng)預(yù)先定義的兩個符號常量,它們的值分別為1和0。使用符號常量往往可以提高程序的可讀性和可維護性。由于符號常量和變量同樣要求系統(tǒng)為其分配內(nèi)存單元,所以可以把符號變量視為一種不允許賦值改變的或只讀不寫的變量,稱其為const變量。
4使用#define命令定義符號常量
# define命令是一條預(yù)處理命令,也可以用它來定義符號常量。其命令格式為:
#define<符號常量名><字符序列>
<符號常量名>是用戶定義的標識符,又稱為宏或宏標識符;<字符序列>也是由用戶給定的用來代替宏的一串字符序列,也稱為宏替換體,它可以是數(shù)值常量、可計算值的表達式或字符串。宏被該命令定義后就可以使用在其后的程序中。當程序被編譯時將把所有地方使用的宏標識符替換為對應(yīng)的字符序列,并把宏命令刪除掉。
編輯推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |