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就讲到这里,继续下一篇,指针的指针


猜你喜欢

转载自blog.csdn.net/qq_32103261/article/details/80228158