1. 程式人生 > >C/C++ : 型別限定符const

C/C++ : 型別限定符const

一、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