首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言進階:轉義字符陷阱與常量深度解析

     編輯:關於C語言

C語言進階:轉義字符陷阱與常量深度解析

轉義字符核心知識

轉義字符以反斜槓 \ 開頭,表示難以直接輸入或有特殊含義的字符。所有轉義序列在內存中佔用 1 字節。

易混淆的轉義場景

  1. 引號輸出:
    printf("\"");  // 輸出雙引號
    printf("%c", '"'); // 同理
  2. 反斜槓輸出:
    printf("\\"); // 輸出單個反斜槓
  3. 文件路徑處理:
    // 錯誤:C:\test\add\11-25\test.c 被解釋為 C:␣est␣dd␣-25␣est.c (\t \a \1 等被轉義)
    // 正確:雙重反斜槓
    printf("C:\\test\\add\\11-25\\test.c");
  4. 字符串長度計算陷阱:
    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);
  • 枚舉常量默認從 0 開始遞增 1。
  • 可指定任意整數值,後續成員在前一值基礎上 +1。
  • 本質是 int 常量,可隱式轉換。

const 修飾符的真相

const int n = 10;
// n = 20; // 編譯錯誤:不能修改 const 變量

// 但可通過指針間接修改(未定義行為,視編譯器/優化級別而定)
int *p = (int *)&n;
*p = 20;
printf("%d", n); // 可能輸出 20,也可能輸出 10(優化時編譯器可能直接用 10 替換 n)

警告:通過指針修改 const 對象屬於未定義行為,嚴禁在生產代碼中使用。

數組長度與 const

int n = 10;
int arr[n]; // C99 支持變長數組 (VLA),但非標準 C89

const int m = 10;
int arr2[m]; // 某些編譯器不接受 const 變量作為數組長度(因非常量表達式)

標準 C 要求數組長度為編譯期常量表達式(整型常量、枚舉常量、sizeof 表達式等)。const 修飾的變量在 C 中不屬於常量表達式(C++ 則屬於)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved