天天看點

const 指針與指向const的指針

const 指針與指向const的指針

當使用帶有const的指針時其實有兩種意思。一種指的是你不能修改指針本身的内容,另一種指的是你不能修改指針指向的内容。聽起來有點混淆一會放個例子上來就明白了。

先說指向const的指針,它的意思是指針指向的内容是不能被修改的。它有兩種寫法。

const int* p; (推薦)

int const* p;

第一種可以了解為,p是一個指針,它指向的内容是const int 類型。p本身不用初始化它可以指向任何标示符,但它指向的内容是不能被改變的。

第二種很容易被了解成是p是一個指向int的const指針(指針本身不能被修改),但這樣了解是錯誤的,它也是表示的是指向const的指針(指針指向的内容是不能被修改的),它跟第一種表達的是一個意思。為了避免混淆推薦大家用第一種。

再說const指針,它的意思是指針本身的值是不能被修改的。它隻有一種寫法

int* const p=一個位址; (因為指針本身的值是不能被修改的是以它必須被初始化)

這種形式可以被了解為,p是一個指針,這個指針是指向int 的const指針。它指向的值是可以被改變的如*p=3;

還有一種情況是這個指針本身和它指向的内容都是不能被改變的,請往下看。

const int* const p=一個位址;

int const* const p=一個位址;

這個規律就是:指向const的指針(指針指向的内容不能被修改)const關健字總是出現在*的左邊,而const指針(指針本身不能被修改)const關健字總是出現在*的右邊,那不用說兩個const中間加個*肯定是指針本身和它指向的内容都是不能被改變的。

/*定義指向const的指針(指針指向的内容不能被修改)*/

const int* p1;

int const* p2;

/*定義const指針(由于指針本身的值不能改變是以必須得初始化)*/

int* const p3=&a;

/*指針本身和它指向的内容都是不能被改變的是以也得初始化*/

const int* const p4=&a;

int const* const p5=&b;