c++ 指针常量,常量指针

时间:2023-01-23 22:53:08

当const遇到指针

一般来说,const修饰指针可以分为下面的集中情况。

描述 例子 含义 备注
const在*的左边

const int *b=&a;

int const *b=&a;

const修饰指针指向的变量,也就是说我们不能通过修改指针b

指向的值去修改a。即*b=100;这种操作是错误的。

这时候,指针b本身不是常量,*b是常量。

这种情况下,如果要修改*b返回的值,也就是修改指针b所指的对象可以用两种办法:

· 改变b指向的变量a的值,a=100;

·让b指向别的变量,int c=100;  b=&c;

const在*的右边 int* const b=&a;

const修饰指针,也就是说,试图改变b的值都是错误的。如:

b++; ++b;之类的操作都是错误的。

这时候,指针b本身是常量,*b是不是常量。

既然指针b是常量,那么创建她的时候必须初始化,不然会出错。
*的左右两边都有const const int* const b=&a; 指针本身和指针的内容都是常量。  

额外说一点,c++定义类的时候,如果类的内部有函数我们想要它 不得修改类内部的成员变量,在该函数的形参列表后加一个const可以告诉编译器,该函数不会修改类内部的成员变量。不过你想要该函数只对一部分成员变量有该效果的话,在可以修改的成员变量前面加一个mutable就可以在该const函数里修改该成员变量了。

//更新

总的来说:

const 和*分别代表常量和指针,谁在前面,谁就无法修改

比如:const int a=1;

const int* b=a;b就是一个常量指针,它所指向的常量a无法改变,以为a是常量。所以对*b的赋值操作是错误的,但是指针变量b是可以随意指向别的int变量的。

int z=2;

int * const d=z;d是一个指针常量,顾名思义,d无法再被赋给其他的地址,而*d也就是z是一个变量,可以随意改变。