常量與變量是C語言程序操作數據的兩種基本形式。本文詳細講解變量定義初始化、常量分類與表示、符號常量定義、轉義字符機制,夯實C語言數據操作基礎。
類型說明符 變量名1 [= 初值], 變量名2 [= 初值], ... ;
示例:
int a = 10, b = 20;
double pi = 3.14159;
char grade = 'A';
int arr[5] = {1,2};剩餘元素自動補0count ≠ Count)user_count)、常量全大寫(MAX_SIZE)常量:程序運行過程中值不變的量。
| 類型 | 示例 | 說明 |
|---|---|---|
| 整型常量 | 123, -456, 0177(八進制), 0x7B(十六進制) | 十進制無前綴,八進制以0開頭,十六進制以0x/0X開頭 |
| 實型常量 | 3.14, -0.5, 1.2e3(科學記數法=1200), 5E-2(=0.05) | 默認double類型,浮點字面量含小數點或指數部分 |
| 字符常量 | 'A', '\n', '\x41', '\101' | 單引號括起,值為ASCII碼。注意:'A'(字符,1字節) ≠ "A"(字符串,2字節含\0) |
| 字符串常量 | "Hello", "C\n語言", ""(空串) | 雙引號括起,編譯器自動在末尾添加\0,類型為const char[] |
| 符號常量 | #define PI 3.14159 | 預處理宏定義,編譯前文本替換,無類型檢查,不佔運行時內存 |
以反斜杠\開頭,表示特殊控制字符或不可打印字符:
| 轉義序列 | 含義 | ASCII碼 |
|---|---|---|
| \n | 換行 | 10 (0x0A) |
| \t | 水平制表符 | 9 (0x09) |
| \r | 回車 | 13 (0x0D) |
| \b | 退格 | 8 (0x08) |
| \f | 換頁 | 12 (0x0C) |
| \v | 垂直制表符 | 11 (0x0B) |
| \\ | 反斜杠本身 | 92 (0x5C) |
| \' | 單引號 | 39 (0x27) |
| \" | 雙引號 | 34 (0x22) |
| \0 | 空字符 | 0 (0x00) |
| \ddd | 1-3位八進制 | 如\101 = 'A' |
| \xhh | 1-2位十六進制 | 如\x41 = 'A' |
char c = 'A'; // 類型 char,值 65,佔1字節
char *s = "A"; // 類型 char*,指向只讀內存區,含'A','\0',佔2字節
sizeof('A') == 1 // C++中為1,C中為int大小(通常4) —— 歷史遺留差異
sizeof("A") == 2 // 數組大小,含\0
#define MAX_BUFFER 1024
#define PI 3.141592653589793
#define GREETING "Hello, World!"
#define SQUARE(x) ((x)*(x)) // 函數式宏,參數加括號防優先級錯誤
constexpr/const替代,有類型安全、作用域、調試可見性
const int MAX = 100; // 唯讀變量,有類型、有作用域
const double PI = 3.14159;
const char *MSG = "Hello"; // 指向常量字符串
// MAX = 200; // 編譯錯誤:賦值唯讀變量
#define的優先選擇:類型安全、編譯器優化友好、調試器可見const int* p(指向常量)、int* const p(常量指針)、const int* const p(雙重常量)
enum Color { RED, GREEN, BLUE }; // RED=0, GREEN=1, BLUE=2
enum Status { OK=1, ERR=-1 }; // 可指定值
enum Week { MON=1, TUE, WED }; // 遞增
int類型編譯期常量enum class提供強類型枚舉,防止隱式轉換| 場景 | 推薦方式 | 理由 |
|---|---|---|
| 編譯期常數值 | constexpr (C++11) / const | 類型安全、作用域、調試可見 |
| 相關常數組 | enum / enum class | 語義分組、自動編號 |
| 平台相關配置 | #define (配合編譯選項) | 條件編譯、命令行覆蓋 |
| 字符串字面量 | const char* / std::string_view | 避免數組退化、生命周期清晰 |
理解常量與變量的存儲、類型、作用域、生命周期差異,正確選擇定義方式,是編寫健壯、可維護C代碼的起點。