请简答一下常量指针和指针常量的区别?

1.常量指针

常量指针表示指针指向的数据是被const修饰的变量,其定义形式如下:

const 指针类型 * 指针变量名;
指针类型 const * 指针变量名;

在上述格式中,在定义的指针数据类型前加const关键字,表明该指针指向的数据是只读的,不允许通过该指针修改变量的值,而指针变量可以指向其他对象。示例代码如下:

int a = 1;
const int b=2;
const int* p = &a;
p = &b;    //允许修改指向
*p = 2;    //错误,不允许通过指针变量p间接修改变量a的值

2.指针常量

指针常量表示指针指向的地址不允许被修改,指针常量的定义形式如下:

指针变量类型 *const 指针变量名

在上述格式中,const放在指针变量名称前,修饰的是指针变量,指针变量的值不能被更改,但指针变量指向的内存空间的数据可以被更改。

下列代码定义了一些指针常量,具体如下:

int a = 1;
int b = 2;
int * const p = &a;
p = &b;   //错误,不允修改指针的指向
*p=3;      //可以通过指针变量p修改变量a的值

上述代码中,指向变量a的指针变量p被const修饰,表明指针p不能指向其他变量,修改指向是不被允许的,但可以通过指针p修改变量a的值。

【问题扩展】

常量的常指针,意味着不能修改指针的指向,并且不能通过当前指针修改变量的值。常量的常指针定义形式如下:

const 指针变量类型 *const 指针变量

示例代码如下:

int a = 1;
int b = 2;
const int * const p = &a;
*p = 3;    //错误
p = &b;    //错误

上述代码中既不允许通过指针p修改变量a的值,也不允许修改指针变量p的指向。

点击此处
隐藏目录