当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是一个变量,可以随意改变。