【C/C++】1.函式傳入指標加const的作用及用法區別

朝槿yys發表於2024-10-27

在 C/C++ 中,const 用於定義常量,防止資料被意外修改。

什麼時候需要為指標加上const:

  1. 保證資料安全:如果函式不需要修改指標指向的資料,用 const 可以防止意外修改,確保資料安全。

    void func(const int *ptr){ // 只能讀取資料,無法修改 }
  2. 提升程式碼可讀性:使用 const 明確表示資料不可修改,使程式碼意圖更清晰,便於維護。

  3. 允許傳遞常量資料:如果指標引數為 const,可以傳遞常量或非常量資料,提高了函式的適用性。

    const int val = 10;
    void display(const int *ptr); // 可以傳入常量 val 的地址 display(&val);
  4. 防止指標誤用:若希望指標本身不變,可以加 const(如 int *const ptr),避免在函式內部修改指標指向的地址。

假設我們有一個函式,傳入的是一個指標 int *ptr,以下是加上 const 的幾種不同情況:

1. const int *ptrint const *ptr

  • 含義:指標 ptr 所指向的內容是常量,不能透過 ptr 來修改這個內容,但指標 ptr 本身可以指向其他地址。

  • 示例

    void func(const int *ptr) {
    // *ptr = 10; // 錯誤:不能透過 ptr 修改指向的資料
    int x = 20;
    ptr = &x; // 合法:可以讓 ptr 指向不同的地址
    }

2. int *const ptr

  • 含義:指標 ptr 本身是常量,因此不能指向其他地址,但指向的內容可以修改。

  • 示例

    void func(int *const ptr) {
    *ptr = 10; // 合法:可以透過 ptr 修改指向的資料
    int x = 20;
    // ptr = &x; // 錯誤:不能更改 ptr 本身指向的地址
    }

3. const int *const ptrint const *const ptr

  • 含義:指標 ptr 本身和指向的內容都是常量,既不能修改 ptr 所指向的內容,也不能讓 ptr 指向其他地址。

  • 示例

    void func(const int *const ptr) {
    // *ptr = 10; // 錯誤:不能透過 ptr 修改指向的資料
    int x = 20;
    // ptr = &x; // 錯誤:不能更改 ptr 本身指向的地址
    }

總結

  • const int *ptrint const *ptr:指標指向的內容是常量,內容不可修改,但指標本身可以指向其他地址。
  • int *const ptr:指標本身是常量,指向的內容可以修改,但指標不能指向其他地址。
  • const int *const ptr:指標和指向的內容都是常量,既不能修改內容,也不能修改指標的地址。

相關文章