#include<iostream>
using namespace std;
int main()
{
int a = 1;
int b = 2;
// 1. 指针常量: 指针指向的值无法修改, 但是可以修改指针的指向
const int* p1 = &a;
// ×
*p1 = 100;
// √
p1 = &b;
// 2. 常量指针: 指针指向的值可以修改, 但是无法修改指针的指向
int* const p2 = &a;
// √
*p2 = 100;
// ×
p2 = &b;
// 3. 指向常量的常量指针(const既修饰指针又修饰常量): 指针指向的值和指针本身的指向都无法修改
const int* const p3 = &a;
// ×
*p3 = 10;
// ×
p3 = &b;
/*
* 总结:
* 之所以const修饰有这三点, 根源在于const修饰的方向不同
* 首先明确以下两点条件:
* 1. 指针指向的是一个存储数据的内存地址, 该内存地址可以理解为未起名字的变量
* 2. 指针本身也是变量的一种, 它是把内存地址作为数据进行存储
* 根据以上总结的两个条件就做出如下推测:
* 1. const只修饰指针指向的存储数据的内存地址(可以理解为未起名字的变量) ---> 常量指针
* 2. 因为指针本身也是变量, 所以可以直接被const修饰, const也可以只修饰指针 ---> 指针常量
* 3. 可以把1和2结合一起使用 ---> 指向常量的常量指针
*/
return 0;
}
结尾
如果您觉得我还写的不错,请给我一点点的鼓励,您的鼓励就是我坚持的动力,当然啦,一切要量力而行,不要勉强哦!