川建军 发表于 2020-10-19 00:39:46

常量指针和指针常量的区别!

const char *p = "thisisastring";
这句话是声明并初始化一个常量指针还是指针常量?如何区别。

风过无痕1989 发表于 2020-10-19 01:17:09

本帖最后由 风过无痕1989 于 2020-10-19 01:18 编辑

常量指针(被指向的对象是常量)
定义: 又叫常指针,可以理解为常量的指针,指向的是个常量

关键点:
1、常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改;
2、常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值;
3、指针还可以指向别处,因为指针本身只是个变量,可以指向任意地址; 

指针常量(指针本身是常量)
定义: 本质是一个常量,而用指针修饰它。指针常量的值是指针,这个值因为是常量,所以不能被赋值。

关键点:
1、它是个常量!
2、指针所保存的地址可以改变,然而指针所指向的值却不可以改变;
3、指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化;

两种方式来区分常量指针与指针常量

一种方式是看 * 和 const 的排列顺序,比如
int const* p;        //const * 即常量指针
const int* p;        //const * 即常量指针
int* const p;        //* const 即指针常量

另一种方式是看const离谁近,即从右往左看,比如
int const* p;        //const修饰的是*p,即*p的内容不可通过p改变,但p不是const,p可以修改,*p不可修改;
const int* p;        //同上
int* const p;        //const修饰的是p,p是指针,p指向的地址不能修改,p不能修改,但*p可以修改;
页: [1]
查看完整版本: 常量指针和指针常量的区别!