文章目录
-
-
- 1. const
- 2. 指针
- 3. 常量和指针
- 4. 指针的内存布局
- 5. 总结
-
该文为中国大学MOOC上北京邮电大学崔毅东和杨谈老师主讲的《C++程序设计(面向对象进阶)》笔记整理
1. const
常量是程序中一块数据,这个数据一旦声明后就不能被修改
代码示例:
const datatype CONSTANTNAME = VALUE;
或
datatype const CONSTANTNAME = VALUE;
常量分为命名常量和字面常量,如 const int A = 12; 其中 A 是这块数据的名字,称为命名常量,其中 12 能从字面上就看出它的值,称为字面常量
2. 指针
指针是一个地址,类似 0x8FFF 这样。而地址,就是某个内存位置的编号。该位置的地址可以存放数据,这些数据被称为"指针所指的数据"或"指针指向的数据"
代码示例:
int* x; // 定义 int 型指针
int y = 2;
x = &y; // &y 取到 y 的地址,赋值给 x
std::cout << *x << std::endl; // *x 访问指针指向数据的值
3. 常量和指针
指针本身具有两个属性:
- 指针本身
- 指针所指向的数据
指针所指向的数据可以是常量,也可以是变量;指针可以是常量,也可以是变量,即:
- 当指针所指向的数据为变量,指针也是变量时,称为"指针变量"
int x = 5; int* y = &x; int z = 3; *y = 20; // *y 可以改变 x 的值 y = &z; // y 也可以指向其他地址
- 当指针所指向的数据为常量,指针是变量时,称为"常指针"
const int x = 5; const int* y = &x; // const 意思是此指针指向的数据为常量 int z = 10; *y = 20; // error,因为指针指向的数据为常量 y = &z; // y 可以指向其他地址
- 当指针所指向的数据为变量,指针是常量时,称为"指针常量"
int x = 5; int* const y = &x; int z = 10; *y = 20; // *y 可以改变 x 的值 y = &z; // error,y 为常量,不可以指向其他值
- 当指针所指向的数据为常量,指针是常量时,称为"常指针常量"
const int x = 5; // 前一个 const 指明此指针指向的数据为常量,后一个 const 指明此指针为常量 const int* const y = &x; int z = 10; *y = 20; // error,*y 指向的 x 为常量 y = &z; // error,y 为常量
4. 指针的内存布局
代码:
const int a = 5;
int b = 9;
const int* pa = &a;
int* const pb = &b;
指针的内存布局:

5. 总结
- *(指针)和 const(常量)谁在前先读谁
- * 代表被指的数据,名字代表指针地址
- const 在谁前面就不允许谁改变,例如 const int * x; const 在 * 前面,即指针指向的数不能被修改;而 int * const y; const 在 y 前面,即指针的指向不能被修改