文章概述
- 指向常量的指针
- 常量指针
- 顶层const和底层const
指向常量的指针
a. 指向常量的指针通过实例说明:
//其中b就是指向常量的指针
const int a = 10;
const int*b =&a;
b. 指向常量的指针表示的是不能通过指针改变指针所指向的对象,并没有规定指向的对象是否是常量和指向的对象不能通过别的途径改变。
int a =20;
//b指向的是a的地址
const int *b =&a;
//a的值发生了变化
a=30;
(只不过不能通过b改变a的值)
c. 指针的类型必须与其所指向的对象的类型相同。但是指向常量的指针可以指向一个非常量的对象。
int a = 10;
//指针的类型与所指向对象的类型相同
int *b=&a;
//定义了常量
const int c =20;
//定义指向常量的指针,指向常量c
const int*d =&c;
//指向常量的指针d可以指向a
d=&a;
常量指针
a. 指针不同于引用,引用是别名。但是指针确是一个对象,可以把指针本身定义为常量。常量指针(和常量,常量引用一样)必须初始化,一旦初始化完成,指针的值(存放在指针的地址)不会发生改变。
b. 常量指针的格式:
int a =5;
//常量指针的格式是int const* b;
int *const b = &a;
c. 常量指针表示的是指针本身的值不会放生改变(一直指向初始化指向的对象),但是可以通过常量指针改变所指向的对象的值。
int a =8;
int *const b =&a;
//这时改变了a的值
(*)b=10;
顶层const和底层const
a. 顶层const:表示的是对象本身为常量。
//const:表示的是顶层const,a是常量
const int a=20;
//const: 表示的是顶层const,c是常量指针
int b = 10;
int *const c = &b;
b. 底层const: 表示的是指针指向的对象是常量或者引用绑定的对象是常量。
//底层const,引用a绑定的对象是常量
const int &a =10;
//底层const,指针c指向的是对象是常量
int b = 20;
const int *c =&b;
(其实做题的时候,总的记着非常量可以转换为常量,具体问题具体分析)