1.const修饰指针 常量指针
下面结合代码进行详解
int a=10;
int b=10;
int *p=&a;//此时指针指向a;
const int *p=&a;
现在我们在最前面加了一个const ,我们可以按顺序记忆 ,首先const是常量 ,后面是指针 ,所以就叫常量指针;
特点:指针的指向可以修改 ,但是指针指向的值不可以改
示例:
int a = 10;
int b = 20;
const int *p= &i;
*P=10;//error错误操作,指针指向的值不可以改 也就是不可以通过解引用给指针指向的变量赋值。
cout<< *p<<endl;
p = &b;//这就是对的,因为可以更改指针指向
cout<< *p<<endl;
return 0;
2.const修饰常量 指针常量
int a=10;
int b=10;
int *p=&a;//此时指针指向a;
int * const p=&a;
现在我们在p前面加了一个const ,我们可以按顺序记忆 ,首先最前面是int*代表指针,后面const是常量 ,所以就叫指针常量;
特点:指针的指向不可以修改 ,但是指针指向的值可以改
示例
*p=20//这是正确的
p=&b//错误,
其实我们常见的数组名就是指针常量 ,因为数组名就是数组首地址,数组首地址不可以改,但是第一个元素大小可以改变,这就是所谓的指针常量(指针在前,地址不变,对应着下面的总结方法)
3.总结记忆方法
(1)指针和 const 谁在前先读谁 ;按顺序读
(2)int*象征着地址,const象征着内容;
(3)谁在前面谁就不允许改变。const 在前面时称为常量指针,内容不可以改;int *在前面时叫指针常量,指针指向不可以改
(1)常量指针是指指向常量的指针,顾名思义,就是指针指向的是常量,即,它不能指向变量,它指向的内容不能被改变,不能通过指针来修改它指向的内容,但是指针自身不是常量,它自身的值可以改变,从而指向另一个常量。
(2)指针常量是指指针本身是常量。它指向的地址是不可改变的,但地址里的内容可以通过指针改变。它指向的地址将伴其一生,直到生命周期结束。有一点需要注意的是,指针常量在定义时必须同时赋初值。
4.const既修饰指针,又修饰常量
那就是指针的指向和指针指向的值都不可以改变