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

C語言 const 關鍵字完全指南:從基本用法到指針進階

     編輯:關於C語言

C語言 const 關鍵字完全指南:從基本用法到指針進階

const 是 C 語言中「只讀」語義的核心關鍵字,正確使用能提高代碼安全性、可讀性並幫助編譯器優化。本文從基礎到進階系統講解。

一、修飾基本類型變量

const int MAX_SIZE = 100;    // 常量,不可修改
int arr[MAX_SIZE];           // C99 支持變長數組,但 const 變量不可作為標準 C 數組大小(C89)
// 標準做法:#define MAX_SIZE 100 或 enum { MAX_SIZE = 100 }

注意:C 語言中 const int n = 10; int arr[n]; 在 C99 中合法,但 C89 不支持,且 const 變量本質仍是變量,有地址佔用內存。

二、const 與指針:核心難點

口訣:「誰在 * 右邊,誰就是常量」

聲明含義可修改內容可修改指針
const int *p / int const *p指向常量的指針❌ *p = 10 錯誤✅ p = &other 合法
int *const p常量指針(指針本身不可變)✅ *p = 10 合法❌ p = &other 錯誤
const int *const p指向常量的常量指針❌❌

代碼驗證示例

void test_const_pointers() {
    int a = 10, b = 20;
    
    // 情況 1:指向常量的指針
    const int *p1 = &a;
    // *p1 = 20;  // 編譯錯誤:不能通過 p1 修改值
    p1 = &b;      // 合法:可指向其他地址
    
    // 情況 2:常量指針
    int *const p2 = &a;
    *p2 = 20;     // 合法:可修改指向的值
    // p2 = &b;   // 編譯錯誤:指針本身不可變
    
    // 情況 3:雙重 const
    const int *const p3 = &a;
    // *p3 = 30;  // 錯誤
    // p3 = &b;   // 錯誤
}

三、const 修飾字符串字面量

const char *str = "hello";  // 正確:字符串字面量存放在只讀區
// str[0] = 'H';            // 運行時崩潰:嘗試修改只讀內存
char *bad = "hello";        // 危險:舊標準允許,但極不推薦

四、const 在函數參數中的應用

// 1. 參數指向的內容不可修改(常用於輸入參數)
void print_str(const char *str) { /* ... */ }

// 2. 參數指針本身不可修改(較少用)
void func(int *const ptr) { /* ... */ }

// 3. 引用傳遞配合 const(C++ 風格,C 中用指針模擬)
void process(const BigStruct *data) { /* 避免拷貝且防修改 */ }

五、最佳實踐總結

  1. 默認給指針參數加 const,除非需要修改
  2. 字符串字面量賦值必須用 const char *
  3. 定義不變的配置值優先用 #define 或 enum
  4. 結構體大對象傳遞用 const struct Type *
  5. 嵌入式開發中將寄存器映射聲明為 volatile const
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved