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

C語言 const 指標回傳技巧:防止呼叫端修改資料

     編輯:關於C

前言

在 C 語言開發中,函式回傳指標是常見的設計模式。然而,實作者往往不希望呼叫端能透過回傳的指標修改所指向的資料內容。這時候,const 修飾詞就派上用場了——透過回傳「指向常數的指標」,即可在編譯期阻止非預期的修改行為。

核心解法:回傳 const int*

關鍵在於函式的回傳型別宣告為 const int*,這代表「指向 const int 的指標」。呼叫端接收此指標後,若嘗試透過解參考修改值,編譯器會直接報錯。

正確範例

#include <stdio.h>

static const int* getConstPointer(void);

int main(void) {
    const int *ptr = getConstPointer();
    printf("Value: %d\n", *ptr);  // 僅能讀取
    return 0;
}

const int* getConstPointer(void) {
    static int value = 100;          // 靜態區塊,生命週期覆蓋整個程式
    return &value;                   // 回傳指向常數的指標
}

嘗試修改將導致編譯錯誤

int main(void) {
    const int *ptr = getConstPointer();
    *ptr = 34;  // 錯誤:assignment to read-only location
    return 0;
}

編譯器(如 MSVC)會產生類似 error C3892: 'ptr' : you cannot assign to a variable that is const 的訊息,確保資料完整性。

總結

  • 函式回傳 const T* 可防止呼叫端修改指向物件。
  • 搭配 static 區域變數,避免回傳區域變數位址導致未定義行為。
  • 此技巧常用於唯讀資料表、單例模式、硬體暫存器映射等場合。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved