轉義字符以反斜槓 \ 開頭,表示難以直接輸入或有特殊含義的字符。所有轉義序列在內存中佔用 1 字節。
printf("\""); // 輸出雙引號
printf("%c", '"'); // 同理
printf("\\"); // 輸出單個反斜槓
// 錯誤:C:\test\add\11-25\test.c 被解釋為 C:␣est␣dd␣-25␣est.c (\t \a \1 等被轉義)
// 正確:雙重反斜槓
printf("C:\\test\\add\\11-25\\test.c");
int a = strlen("C:\test\add\11-25\test.c");
// 實際字符數少於可見字符,因每個轉義序列只佔 1 字節
enum OS { WIN, LINUX, UNIX }; // 默認值 0, 1, 2
enum OS2 { WIN=10, LINUX, UNIX }; // LINUX=11, UNIX=12
printf("%d %d %d", WIN, LINUX, UNIX);
int 常量,可隱式轉換。const 修飾符的真相const int n = 10;
// n = 20; // 編譯錯誤:不能修改 const 變量
// 但可通過指針間接修改(未定義行為,視編譯器/優化級別而定)
int *p = (int *)&n;
*p = 20;
printf("%d", n); // 可能輸出 20,也可能輸出 10(優化時編譯器可能直接用 10 替換 n)
警告:通過指針修改 const 對象屬於未定義行為,嚴禁在生產代碼中使用。
constint n = 10;
int arr[n]; // C99 支持變長數組 (VLA),但非標準 C89
const int m = 10;
int arr2[m]; // 某些編譯器不接受 const 變量作為數組長度(因非常量表達式)
標準 C 要求數組長度為編譯期常量表達式(整型常量、枚舉常量、sizeof 表達式等)。const 修飾的變量在 C 中不屬於常量表達式(C++ 則屬於)。