2.2 標(biāo)識(shí)符、常量和變量
2.2.1 字符集
字符(Character)是組成語言最基本的元素。C 語言的字符集由字母、數(shù)字、空白符、標(biāo)點(diǎn)和特殊字符組成。
① 字母:26個(gè)英文字母,包括大小寫共52個(gè)。
② 數(shù)字:0~9共10個(gè)。
③ 空白符:空格符、制表符、換行符統(tǒng)稱為空白符,共3個(gè)。
④ 標(biāo)點(diǎn)和特殊字符:如+ - * / % _ . = < > & | ( ) [ ] { } ; ? : ' " ! # 等共25個(gè)。
2.2.2 標(biāo)識(shí)符
標(biāo)識(shí)符(Identifier)是一個(gè)由有限個(gè)有效字符組成的序列,在 C 語言中只起標(biāo)識(shí)作用,可用作符號(hào)常量名、變量名、函數(shù)名、數(shù)組名、文件名等。
1.標(biāo)識(shí)符的構(gòu)成規(guī)則
C語言允許用作標(biāo)識(shí)符的有效字符包括:
● 26個(gè)英文字母,包括大小寫
● 數(shù)字0,1,…,9
● 下劃線
合法的標(biāo)識(shí)符必須由字母(A~Z,a~z)或下劃線(_)開頭,后面可以跟隨任意的字母、數(shù)字或下劃線。C語言標(biāo)識(shí)符的長(zhǎng)度(即一個(gè)標(biāo)識(shí)符允許包含的字符個(gè)數(shù))受C語言編譯系統(tǒng)的限制,比如,某C語言編譯系統(tǒng)規(guī)定標(biāo)識(shí)符的有效長(zhǎng)度是31,若超過31個(gè)字符,則后面的字符無效。不同的C語言編譯系統(tǒng)規(guī)定的標(biāo)識(shí)符的長(zhǎng)度可能會(huì)不同,學(xué)習(xí)者在使用標(biāo)識(shí)符時(shí)應(yīng)當(dāng)了解所用編譯系統(tǒng)的規(guī)定。
合法的標(biāo)識(shí)符:student,a10,Ij,_5n,x_sum
不合法的標(biāo)識(shí)符:30d 錯(cuò)在以數(shù)字開頭
a$n 錯(cuò)在出現(xiàn)“$”
n abc 錯(cuò)在中間有空格
2.C語言標(biāo)識(shí)符的分類
標(biāo)識(shí)符是形成C語言代碼的基礎(chǔ)。C語言中的標(biāo)識(shí)符有3種類型:關(guān)鍵字、預(yù)定義標(biāo)識(shí)符和用戶標(biāo)識(shí)符,每種標(biāo)識(shí)符都有自己的要求。
(1)關(guān)鍵字
C 語言中有一些標(biāo)識(shí)符被稱為關(guān)鍵字或保留字,在系統(tǒng)中具有特殊用途,只能以特定的方式用在特定的地方,如果試圖將關(guān)鍵字用于其他用途,編譯程序?qū)a(chǎn)生一個(gè)編譯錯(cuò)誤。例如,標(biāo)識(shí)符int是整型數(shù)據(jù)類型關(guān)鍵字。
表2.1列出了C語言完整的關(guān)鍵字列表,隨著教材內(nèi)容的深入,讀者將理解在什么地方、為什么和如何使用這些關(guān)鍵字。
表2.1 C語言關(guān)鍵字
C 語言中有些標(biāo)識(shí)符雖然不是關(guān)鍵字,但總是以固定的形式用于專門的地方,使用較多的預(yù)定義標(biāo)識(shí)符是C語言標(biāo)準(zhǔn)函數(shù)(參見附錄B)。例如,printf是C語言提供的標(biāo)準(zhǔn)函數(shù)名, define是C 語言提供的編譯預(yù)處理命令等。因此,用戶也不要把它們當(dāng)作一般標(biāo)識(shí)符使用,以免造成混亂。
(3)用戶標(biāo)識(shí)符
用戶標(biāo)識(shí)符是由用戶根據(jù)需要定義的標(biāo)識(shí)符。一般用于給變量、符號(hào)常量、數(shù)組、函數(shù)、指針、文件等命名。在程序中使用用戶標(biāo)識(shí)符時(shí)除了要遵守標(biāo)識(shí)符的構(gòu)成規(guī)則外,還應(yīng)注意以下兩點(diǎn)。
① 大小寫字母有不同的含義,例如,sum、Sum和SUM是3個(gè)不同的標(biāo)識(shí)符。習(xí)慣上,變量名用小寫字母表示,符號(hào)常量名用大寫字母表示。
② 在構(gòu)造用戶標(biāo)識(shí)符時(shí),應(yīng)注意做到“見名知意”,即選用有含義的字符組合(如英文單詞或漢語拼音)作為標(biāo)識(shí)符,以增加程序的可讀性。例如,表示日期可用day,表示長(zhǎng)度可用length,表示和可用sum等。
2.2.3 常量
常量是指在程序運(yùn)行過程中其值不發(fā)生改變的量。在C語言中,有直接常量(或字面常量)和符號(hào)常量?jī)煞N常量。直接常量可以從其字面形式上區(qū)分其數(shù)據(jù)類型,如12和-10為整型常量,2.5和-10.2為實(shí)型常量。
符號(hào)常量是用用戶標(biāo)識(shí)符表示的常量。通常習(xí)慣用大寫字母表示符號(hào)常量。符號(hào)常量在使用之前必須在程序開頭定義。符號(hào)常量的定義形式為:
#define 符號(hào)常量名 常量
例如:
#define PRICE 30
符號(hào)常量一旦定義,凡是本程序中出現(xiàn)PRICE的地方,系統(tǒng)均用30來替換。
【例2.1】 已知某產(chǎn)品的單價(jià)和數(shù)量,求總價(jià)格。
程序代碼如下:
#define PRICE 30
/* 定義用戶標(biāo)識(shí)符PRICE為符號(hào)常量,表示商品的單價(jià)為30 */
#include "stdio.h"
main( )
{
int num,total; /* 變量num表示產(chǎn)品數(shù)量,變量total表示總價(jià)格 */
num=10; /* 程序中出現(xiàn)的數(shù)值10為直接常量 */
total=num*PRICE; /* PRICE為符號(hào)常量 */
printf("total=%d\n",total);
}
程序運(yùn)行結(jié)果為:
total=300
注意:
① 定義符號(hào)常量時(shí)。必須以 # 開始,在 #define 命令行的最后不能加分號(hào)。有關(guān)#define命令的使用,將在第7章詳細(xì)介紹。
② 符號(hào)常量所代表的值是不能改變的。正確使用符號(hào)常量可以增強(qiáng)程序的可讀性和可維護(hù)性。
2.2.4 變量
變量是指在程序執(zhí)行過程中其值可以改變的量。在源程序中,變量用標(biāo)識(shí)符標(biāo)識(shí),表示變量的標(biāo)識(shí)符稱為變量名。
在內(nèi)存中,變量和一個(gè)存儲(chǔ)單元相對(duì)應(yīng),該存儲(chǔ)單元用于存放變量所代表的數(shù)據(jù)值。變量名、存儲(chǔ)單元和變量的值三者之間的關(guān)系如圖2.2所示。變量所對(duì)應(yīng)存儲(chǔ)單元的大小(組成一個(gè)存儲(chǔ)單元的字節(jié)數(shù))取決于變量值的數(shù)據(jù)類型,所以每個(gè)變量都與一個(gè)數(shù)據(jù)類型相聯(lián)系,類型決定了變量在內(nèi)存中占據(jù)的存儲(chǔ)空間的大小,也就決定了變量可以取值的范圍和變量值可以參加的運(yùn)算。所以變量名、變量類型和變量的值是一個(gè)變量的三要素。
在C語言程序中出現(xiàn)的任何一個(gè)變量必須首先確定其數(shù)據(jù)類型,即必須遵循“先定義,后使用”的原則,否則會(huì)在編譯時(shí)出錯(cuò)。
變量定義的一般形式為:
類型標(biāo)識(shí)符 變量名1,變量名2,……;
變量的定義一般出現(xiàn)在函數(shù)的開頭部分,如例2.1主函數(shù)中的語句“int num,total;”使用類型標(biāo)識(shí)符int定義了兩個(gè)整型變量num和total,系統(tǒng)分別為它們各自分配由4個(gè)字節(jié)組成的存儲(chǔ)單元,以存放整型數(shù)據(jù)。
注意:一個(gè)定義語句必須以一個(gè)“;”結(jié)束。