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

C++ const 指針完全解析:const int*、int* const、const int* const 區別與用法

     編輯:C++ 入門

核心口訣

「看 * 右邊」:* 右邊有 const → 指針本身不可變 (常量指針);
「看 * 左邊」:* 左邊有 const → 指向的數據不可變 (指向常量的指針)。

四種組合詳細說明

聲明含義可修改指針?可修改數據?
const int* p / int const* p指向 常量整數 的指針是否
int* const p指向整數的 常量指針否是
const int* const p指向 常量整數 的 常量指針否否
int* p普通指針是是

代碼演示

#include <iostream>
int main() {
    const int i = 10;
    int a = 20;

    const int* p1 = &i;       // 數據不可改,指針可改
    // *p1 = 5; // Error
    p1 = &a;                  // OK

    int* const p2 = &a;       // 指針不可改,數據可改
    *p2 = 30;                 // OK
    // p2 = &i; // Error: 不能將 const int* 轉為 int* const

    const int* const p3 = &i; // 雙重 const
    // *p3 = 5; // Error
    // p3 = &a; // Error

    return 0;
}

嵌入式開發特別注意

被 const 修飾的全局/靜態變量通常會被編譯器放入 只讀數據段 (.rodata),最終燒錄進 ROM/Flash,不佔用寶貴的 RAM。這對資源受限單片機至關重要。

C vs C++ 風格建議

  • C 語言常用 #define 定義常量,無類型安全。
  • C++ 強烈建議改用 const (或 constexpr),擁有類型檢查、作用域限制、可調試符號表。

常見面試陷阱

void func(const int* p) { /* ... */ }
int main() {
    int* p = nullptr;
    func(p); // OK: int* 隱式轉換到 const int*
    // 反向轉換需要 const_cast,極度危險,除非確定原對象非 const
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved