常量又稱為字面量,在程序執(zhí)行期間不會改變。
1 常量分類
常量可以是任何的基本數(shù)據(jù)類型,分為以下幾類:
- 整數(shù)常量
- 浮點(diǎn)常量
- 字符常量
- 字符串常量
1.1 整數(shù)常量
整數(shù)常量可以是十進(jìn)制、八進(jìn)制或十六進(jìn)制的常量。整數(shù)常量也可以帶一個后綴,后綴是 U 和 L 的組合,U 表示無符號整數(shù)(unsigned),L 表示長整數(shù)(long)。后綴可以是大寫,也可以是小寫,U 和 L 的順序任意。
85 /* 十進(jìn)制 */
0213 /* 八進(jìn)制 */
0x4b /* 十六進(jìn)制 */
30 /* 整數(shù) */
30u /* 無符號整數(shù) */
30l /* 長整數(shù) */
30ul /* 無符號長整數(shù) */
1.2 浮點(diǎn)常量
浮點(diǎn)常量由整數(shù)部分、小數(shù)點(diǎn)、小數(shù)部分和指數(shù)部分組成。當(dāng)使用小數(shù)形式表示時,必須包含整數(shù)部分、小數(shù)部分,或同時包含兩者。當(dāng)使用指數(shù)形式表示時, 必須包含小數(shù)點(diǎn)、指數(shù),或同時包含兩者。帶符號的指數(shù)是用 e 或 E 引入的。
3.14159 /* 合法的 */
314159E-5L /* 合法的 */
1.3 字符常量
字符常量是括在單引號中,可以是一個普通的字符、一個轉(zhuǎn)義序列或一個通用的字符。
'a' /* 合法的 */
'\\' /* 合法的 */
1.4 字符串常量
字符串字面值或常量是括在雙引號?” “?中的。一個字符串包含類似于字符常量的字符:普通的字符、轉(zhuǎn)義序列和通用的字符。
"hello world" /* 合法的 */
"1234567" /* 合法的 */
2 常量定義
C語言中有兩種定義常量的方式:
- 使用?#define?預(yù)處理器: #define 可以在程序中定義一個常量,它在編譯時會被替換為其對應(yīng)的值。語法格式:
#define 常量名 常量值
例如,
#define PI 3.14159
- 使用?const?關(guān)鍵字:const 關(guān)鍵字用于聲明一個只讀變量,即該變量的值不能在程序運(yùn)行時修改。語法格式:
const 數(shù)據(jù)類型 常量名 = 常量值;
例如,
const int MAX_VALUE = 100;
3 define和const區(qū)別
在C語言中,#define和const用于定義常量,但它們之間存在幾個關(guān)鍵區(qū)別:
- 類型和安全檢查不同。#define定義的常量沒有類型,不做任何類型檢查,僅僅是簡單的字符串替換,可能導(dǎo)致邊界效應(yīng);const定義的常量有具體的類型,在編譯階段會執(zhí)行類型檢查。
- 存儲方式不同。#define宏不分配內(nèi)存,給出的是立即數(shù),有多少次使用就進(jìn)行多少次替換,在內(nèi)存中會有多個拷貝,消耗內(nèi)存大;const常量會分配內(nèi)存,在程序運(yùn)行過程中內(nèi)存中只有一個拷貝。
- 在編譯時,編譯器通常不為const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內(nèi)存的操作,使得它的效率也很高;#define宏沒有類型,不做任何類型檢查,僅僅是展開。
- 在編譯時,#define宏定義的作用范圍僅限于當(dāng)前文件,默認(rèn)狀態(tài)下,const對象只在文件內(nèi)有效,如果多個文件中出現(xiàn)了同名的const變量,等同于在不同文件中分別定義了獨(dú)立的變量;#define宏定義的作用范圍是全局的。
- 宏替換只作替換,不做計(jì)算,不做表達(dá)式求解;const定義的常量可以進(jìn)行調(diào)試,但是不能對宏常量進(jìn)行調(diào)試。
- 宏定義可以配合#ifdef、#ifndef、#endif等預(yù)處理指令來使用,可以讓代碼更加靈活;const定義的常量通常與類型相關(guān),不適合這種靈活的使用方式。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至2705686032@qq.com 舉報,一經(jīng)查實(shí),本站將立刻刪除。原文轉(zhuǎn)載: 原文出處: