在 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 區域變數,避免回傳區域變數位址導致未定義行為。