引言:第一次写博文,那就写一下我在学习c++时常会疑惑的一点东西,那就是常量指针和指针常量。
一.定义格式:
1.指向常量的指针(常量指针):
const 类型名 * 指针变量名;
类型名 const * 指针变量名;
2.常指针(指针常量):
类型名 * const 指针名;
假如:"const"== 常量 "*"== 指针,那么我们就可以这样读,“按顺序读”。
二.驱除疑云
1.常量指针:
const int i = 2; const int j = 3; const int *p = &i; const int *q = &j; p = q; |
//p 是一个指针,指向const int 的指针,你说const int i; i 的值能变吗?(肯定不能),所以p所指向的常量是不能更改的,而p可以指向其他的常量所在的地址呀!
const int *p
假如p指向地址0x00000001 及 常量i 的地址 ,同时p也可以指向0x00010001及常量j的地址,但是0x00000001地址里的数据2是不能改变的,常变量存在静态数据区(除非程序结束)。
2.指针常量:
int i = 2; int j = 3; int * const p = &i; int * const q = &j; // p = q; i = 4;
|
// p是一个常指针,什么是常指针?你一定会联想到常量,对就是这样子滴!常量的指针,所以你说既然是常量,这种指针还能改变吗?(当然不能啦!)但是常指针所指向的值能变吧!
int * const p
p同样初始化指向存储i的地址 0x00000001,当给p赋新地址时,或指向存储j的地址就会报错!
Do you understand?
结语:本人理解如此,如有误,大家尽可谦虚交流!