2018-12-03

const 與 多重指針

先讓我們來看const與指針的情況

#include<stdio.h>

int main()
{
    int apple = 3;
    const int *p1=&apple;/*p1是一個指向int型常量的指針,雖然apple不是常量,但傻乎乎的p1以為它是個常量,因此不能通過p1修改apple的值*/
    int const *p2=&apple;/*和上面的沒有區(qū)別,const在int的左右都一樣*/
    int  * const p3 = &apple;/*這里的p3是一個常量指針,也就是說不能修改p3的值,但我們可以通過p3修改apple的值*/
}

然而,當(dāng)const碰到多重指針的時候,情況就會變得復(fù)雜起來,我們可能會有

const int ** p1 = &p;
int const ** pp2 = &p;
int *const* pp3 = &p;
int **const pp4 = &p;

這四種情況 , 看起來很惡心,其實也不難


const int ** pp1 = &p;
int const ** pp2 = &p;

依然是相同的,他們表示pp指向一個指向int型常量的int型指針(即c++ primer中所說的底層指針),比如

#include<stdio.h>

int main(void)
{
    int apple=3;
    const int * p = &apple;
    /*如果p的定義為 int * p = &apple,則下面兩句就會報錯 */
    const int ** pp1 = &p;
    int const ** pp2 = &p;
    //*(*pp1) = 5;這句會報錯
    return 0;
}

int *const* pp3 = &p;

表示pp3指向一個常量指針(即c++ primer 中說的頂層指針),比如

#include<stdio.h>
int main(void)
{
    int apple=3;
    int banana = 2;
    int * const p = &apple;
    int *const* pp3 = &p;
    //*(*pp3) = &banana;這句會報錯
    return 0;
}

int **const pp4 = &p;

則表示pp4本身是一個常量,比如

int main(void)
{
    int apple=3;
    int * p1 = &apple;
    int * p2 = &apple;
    int ** const pp4 = &p1;
    //pp4 = &p2;這句會報錯
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容