请简答一下常量指针和指针常量的区别?
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的指向。