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

C 語言 const 修飾詞四種組合完全解析:指向常數、常數指標與雙重常數

     編輯:關於C語言

C 語言 const 修飾詞四種組合完全解析:指向常數、常數指標與雙重常數

宣告語法解析 (右左法則)

從變數名往右讀,再往左:

宣告讀法可修改指標可修改指向值
const int *p / int const *pp 是指向 const int 的指標是否
int * const pp 是 const 指標指向 int否是
const int * const pp 是 const 指標指向 const int否否
int *pp 是指標指向 int是是

程式碼驗證

int main() {
    int a = 10, b = 20;
    const int *p1 = &a; // 指向常數
    // *p1 = 20; // 錯誤
    p1 = &b; // 合法

    int * const p2 = &a; // 常數指標
    *p2 = 30; // 合法
    // p2 = &b; // 錯誤

    const int * const p3 = &a; // 雙重常數
    // *p3 = 40; // 錯誤
    // p3 = &b; // 錯誤

    return 0;
}

常見應用場景

  • const int *p:函數參數 void print(const int *arr, int n) 承諾不修改陣列。
  • int * const p:固定指向特定硬體暫存器、記憶體映射區。
    volatile int * const REG = (int*)0x4000;
  • const int * const p:常數表指標、字串常數指標。

const 的「假象」

const int x = 10;
int *p = (int*)&x;
*p = 20; // 透過指標修改,行為未定義 (視平台而定)
printf("%d", x); // 可能輸出 10 (編譯器優化) 或 20

const 是編譯器契約,非硬體強制。嵌入式開發需配合 volatile 與記憶體保護單元 (MPU)。

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