1. 在C語言中的const是什麼?
在使用C語言編寫程式時,const
關鍵字可以防止變數的值被不小心改變。const
的意思就是「這個變數的值不允許再被更動!」,也就是說,一旦設定好值後,就無法再修改。
請看看以下程式碼範例:
const int x = 10;
x = 20; // 會發生錯誤!
像這樣使用const
可以讓x
的值固定下來,避免被不小心更動。你可以把它想像成「阻止變數喊著『我想自由!』」,進而確保程式整體的穩定性。
2. 為什麼要使用const?
2.1 提升程式碼的安全性
使用const
可以降低特定變數或資料被意外修改的風險。例如,重要的設定值或常數如果被誤改,程式可能會變得不穩定;但加上const
就能防止這種情況。
2.2 讓編譯器最佳化效能
利用const
,編譯器會知道「這個值不會再被更動」,所以能做更有效率的最佳化。特別是const
變數容易被快取,當多次使用時也能提升效能。
2.3 增加可讀性和團隊合作的效率
使用const
是提升程式碼可讀性的好習慣。尤其在團隊開發時,const
能清楚傳達「這個值不會改變」的意圖,也能避免其他開發者誤改變數。

3. 指標與const:如何理解它們的關係
指標和const
的搭配是C語言中容易讓人混淆的地方。根據const
擺放的位置不同,指標本身或指標所指向的值,行為都會不同。
const int *p;
這種寫法代表p
指向的值(也就是*p
)不能被更改,但p
本身(指標所指的位址)可以改變。int *const p;
這代表p
本身(指標)不能更換到其他位址,但*p
(指標指向的值)可以更改。const int *const p;
這情況下,指標p
和它指向的值都無法被更動。也就是說「完全不能改變!」。
指標的運用非常強大,但也容易出錯,因此請多留意const
的擺放位置。
4. const的實際應用範例
4.1 在函式參數中使用const
當你將陣列或指標作為函式參數傳遞時,如果不希望這些資料被修改,就可以加上const
。例如,下方這樣寫就能防止函式內部更動陣列內容:
void printArray(const int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("
");
}
這樣一來,就能安全地參照陣列的資料。
4.2 用於查表(Lookup Table)的const
像是查表(Lookup Table)這種程式執行時不需要更改的資料,通常都會加上const
。以下範例用來表示星期幾的固定資料:
const char *days[] = {"Monday", "Tuesday", "Wednesday"};
這樣可以保證資料不會被誤改,也能更穩定地在程式內使用。

5. const的誤用與注意事項
5.1 const的誤用範例
如果錯誤使用const
,可能會導致預期外的行為或出現錯誤。請看下面這個例子:
void modifyArray(const int arr[], int size) {
arr[0] = 10; // 編譯錯誤!
}
這個函式裡,想要更改加了const
修飾的陣列arr
的元素,就會造成編譯錯誤。const
保證「不能改變」,強行更改就會報錯。
5.2 關於const和型態轉換的注意事項
雖然可以用const_cast
來移除const
修飾,但這樣做風險很大。特別是在系統相關應用中,這種作法可能會導致未定義的行為,因此原則上應該避免。寫安全程式碼時,請尊重const
的本意。
6. 結論
在C語言中,const
是提升程式安全性和效能最佳化的重要工具。正確地用在變數或指標上,可以讓程式更穩定,也能預防Bug發生。
下次寫程式時,請積極使用const
,打造更健壯的程式碼。你或許會驚訝:「原來這裡也可以用const
啊!」