天天看點

c++指針(四)——指針常量和常量指針

(1)、常量的定義,const的使用

int const a=10;//定義一個int型的常量a,以後不能修改a的值
const int b=20;//定義一個int型的常量b,以後不能修改b的值
           

const 和 int 的位置可以互換,都表達的是相同的意思。

以下是不正确的定義

const int c;//錯誤,系統不會對c進行初始化為0,是以此語句沒有對 c 進行初始化,不正确
           
const int d;//錯誤,沒有進行初始化
d=8;//錯誤,對d進行了修改
           

總結:在const定義一個常量的時候同時要對其初始化

(2)、指針常量和常量指針

指針常量和常量指針的概念:(對于概念我很多時候傻傻分不清,隻要能通過代碼認清楚就好了)

首先它兩都是定義了一個指針,其次指針常量指的是指針本身是常量,常量指針是被指向的對象是常量

那麼定義一個常量指針(下邊四條語句都是正确的定義)

const int * p1;//定義一個常量指針,系統為其指向的int型對象初始化
int const * p1;//同上
const int *p1=array;//定義一個常量指針,為其初始化為array
int const *p1=array;//定義一個常量指針,為其初始化為array
           

定義一個指針常量

int * const p2;//定義出錯,
int * const p2=array;//定義成功
           

那麼指針常量和常量指針的差別在哪裡呢?我們做下面一個測試

int a1=10;
int a2=20;
const int * p=&a1;//定義一個常量指針,并給指針p指派
p=&a2;//改變指針p的值,正确
*p=a2;//錯誤,不能為指針p指向的内容賦新值
           

在上邊一段代碼中 const int * p=&a1; 這條語句定義了一個指針 p ,我們知道const int * p=&a1; 和int const * p=&a1; 是等價的,  我們把const int看成一個整體 ci ,那麼 ci 就是*p 的類型,也就是 *p 的類型是 “被const修飾過的int類型”,是以 *p 是不能改變的,const 修飾的不是 p ,是以 p 是可以修改的

我們繼續做一個測試

int a1=10;
int a2=20;
int * const p=&a1;
*p=30;
p=&a2;
           

此時const直接修飾的是 p ,是以 p 的值不能改,*p 的值可以修改~~~

那我們定義這樣一個指針p呢?

const int * const p=&a1;
           

p 和 *p 都不能修改~~~

那下邊這條最簡單的語句

int * p;
           

p 和 *p 都是可以修改的~~~

const就講到這裡,繼續下一篇,指針的指針