指針與 const --- 指針常量與常量指針

注:該文主要來源於 網易公開課之《C++ 程序設計入門(上)》課件。數組

在 C 語言標準中,const 修飾的變量稱之爲 只讀變量,spa

在 C++ 語言標準中,const 修飾的變量稱之爲 常量,設計

例:指針

    const int ARRAY_LEN = 100;ci

    int array[ARRAY_LEN];    //該語句在C++ 編譯器中是可行的,可是在C編譯器中是會報錯的編譯器

以上是 const 在 C 和 C++ 中的差異,下邊主要介紹 const 與指針:編譯

1. 指針的兩個屬性入門

    a. 指針變量自己程序設計

    b. 指針變量所指向的內容變量

2. 常量指針和指針常量

    a. 常量指針(常指針):指針(p)所指向的內容不能經過指針的間接引用(*p)來改變

    例:

        const int i = 0;

        const int* p1 = &i;    //指針 p1 的類型是 const int*

        *p1 = 10;    //error

    b. 指針常量:指針自己的內容是一個常量,不能夠改變

    例:

        int a = 1;

        int b = 2;

        int* const p = &a;    //常量 p2 的類型是 int*

        *p2 = 10;    //ok, a = 10

        p = &b;    //error

 

注:數組名是數組首地址的別名,能夠說 數組名就是一個指針常量,因此 :

    int a[] = {1, 2, 3, 4};

    a = a + 1;    //error

3. 變量、常量和常量指針

    a. 

        int i = 10;

        int const *pi = &i;

        *pi = 11;    //error

        i = 11;    //ok

        上述語句只是說明 pi 指向的地址中所存的內容不能經過 *pi 的方式被改變;

    b. 

        const int ci = 10;

        const int* pci = &ci;

        *pci = 11;    //error

        ci = 11;    //error

        上述語句說明 ci 是一個常量,存放在常量區,不能被改變,pci 指向的地址中所存的內容不能經過 *pci 的方式被改變;

    c.

        const int ci = 10;

        int* pci = &ci;    //error

        上述語句說明 ci 是一個常量,存放在常量區,不能被改變,也不能經過 *pci 的方式被改變,因此指向 ci 的指針必須是常量指針。

總結:

    const int* p;    //語句1

    int const *p;    //語句2

    int* const p;    //語句3

    在前先讀,在前不變

    ① *(指針) 和 const(常量)誰在前先讀誰;

    ② * 表明被指的數據,名字表明指針地址;

    ③ const 在誰的前面誰就不能被改變。

    ④ 語句1 和語句2 等價

相關文章
相關標籤/搜索