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

C++ const 完整指南:常數、常數指標、指標常數與記憶口訣

     編輯:關於C語言

四種 const 型態對照表

宣告俗稱指標值可改?指向值可改?初始化要求
const int a = 2;const 常數—❌宣告時必須初始化
const int* p;
int const* p;
常數指標
(指向常數的指標)
✅❌可延遲初始化
int* const p = &n;指標常數
(常數指標)
❌✅宣告時必須初始化(且只能指向變數)
const int* const p = &e;指向常數的指標常數❌❌宣告時必須初始化

詳細語意解析

1. const 常數

const int a = 2;      // 推薦風格
int const b = c;      // 等價,c 為既有變數
// a = 3; // 編譯錯誤

2. 常數指標

const int* p;  // 或 int const* p
// *p = 5;     // ❌ 不能透過指標修改指向值
p = &x;        // ✅ 可以改變指向對象
int x, y;
p = &x; p = &y; // ✅ 可指向變數

理解為:「為了指向常數而設計的指標」。

3. 指標常數

int* const p = &n; // n 必須是變數
// p = &m;      // ❌ 指標本身不可修改
*p = 20;        // ✅ 可以透過指標修改指向值

因為指標本身是常數,**宣告時必須初始化**,且只能指向變數(否則無法發揮「可修改指向值」的意義)。

4. 指向常數的指標常數

const int* const p = &e; // e 可為常數或變數
// 完全唯讀:指標固定、指向值固定

記憶口訣:以 const 位置判斷

  • const int* p:const 在 * 左側 → 修飾 *p(解引用結果)為常數 → **指向常數的指標**。
  • int* const p:const 在 * 右側 → 修飾 p(指標本身)為常數 → **指標常數**。
  • 統一記憶模式:
    const int a = n;     // 常數
    const int* a;        // 常數指標
    int* const a = &n;   // 指標常數

進階:函數參數與回傳值應用

  • void func(const int* p):承諾不修改指向資料(輸入參數)。
  • void func(int* const p):承諾不修改指標本身(罕用)。
  • const int& func():回傳常數引用,防止修改內部資料。

總結

掌握 const 相對 * 的位置語意,即可輕鬆區分四種型態。善用 const 表達設計意圖,讓編譯器協助防禦誤改,是 C++ 程式碼健壯性的基石。

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