C/C++ : 型別限定符const
阿新 • • 發佈:2018-12-20
一、const介紹
關鍵字const是C/C++中的型別限定符(qualified type),以const關鍵字宣告的物件,其值不能通過賦值或遞增、遞減來修改,但可以初始化const變數。
二、用法說明
先來看一個簡單的例子:
#include <stdio.h>
int main(int argc, char **argv)
{
const int a = 10; // work (initialization)
const int a; a = 10; // not work (assignment)
return 0;
}
正如上面的註釋所說的那樣,第一行程式碼可以工作,因為它是對"const int"型別的變數"a"初始化;而第二行程式碼不工作,因為它先定義了一個"const int"型別的變數,然後對"a"賦值。
用關鍵字const修飾普通變數和陣列相對簡單和容易理解,當用來修飾指標時,要複雜一些,因為需要區分是限定指標本身為const還是限定指標指向的值為const,再來看下面的例子:
#include <stdio.h> int main(int argc, char **argv) { const char *a = NULL; // *a is const, but a isn't a = argv[1]; // work (change a, not *a) *a = argv[1]; // not work (change *a, not a) return 0; }
上面的例子中,const限定指標a所指向的值*a是不可變的,但指標a本身是可變的,可以隨時指向其他的記憶體位置。
要想限定指標a本身不可變,將限定符const放在*的右側即可,如下:
int * const a; // a is const
此時,指標a本身的值不可變,a必須指向同一個地址,但是它所指向的值可以改變。
三、總結
用const來限定普通變數,其值不可變。
用const來限定指標,需要注意區分是限定指標本身為const還是限定指標指向的值為const。當const放在*左邊任意位置,限定了指標指向的資料不能改變;當const放在*右邊,限定了指標本身不能改變。
參考資料:
<<C Primer Plus>>(Sixth Edition), by Stephen Prata. P.403