之前C++介绍过const的使用,但是修饰指针,不同位置,作用不一样,这里简单记录一下常量指针和指针常量相关内容。
记录于此,方便自己查。(好像以前也记录过。。。忘了)
正文
常量指针
const int *p定义:const 修饰的是 int,即指向的内容是常量。指针本身不是常量,可以随时换指向。
int main() {
int a = 10;
int b = 20;
// 定义常量指针:指向的内容不可变,指针指向可变
const int *p = &a;
// 合法:指针指向可以改变
p = &b;
cout << "p 现在指向 b,值为: " << *p << endl; // 输出 20
// 编译报错:不能通过常量指针修改指向的值
// *p = 30;
// 合法:原变量本身可以被修改(不受指针限制)
b = 30;
cout << "b 被直接修改为: " << *p << endl; // 输出 30
return 0;
}指针常量
int * const p定义:const 修饰的是 p,即指针本身是常量。指向的内容不是常量,可以通过指针修改。
int main() {
int a = 10;
int b = 20;
// 定义指针常量:指针指向不可变,指向的内容可变
// 必须初始化,否则编译报错
int * const p = &a;
//合法:可以通过指针常量修改指向的值
*p = 99;
cout << "a 被指针修改为: " << a << endl; // 输出 99
// 编译报错:指针常量不能改变指向
// p = &b;
// 合法:原变量本身也可以被直接修改
a = 100;
cout << "a 被直接修改为: " << *p << endl; // 输出 100
return 0;
}双重锁定
两个const,指向的内容和指针指向都不可以改变,也就只能读取。
const int * const p定义:const 同时修饰 int 和 p,即指针指向和内容都不可变。
int main() {
int a = 10;
int b = 20;
// 定义双重锁定:指针指向和内容都不可变
const int * const p = &a;
// 编译报错:不能改变指向
// p = &b;
// 编译报错:不能通过指针修改值
// *p = 99;
// 合法:原变量本身仍可被直接修改
a = 100;
cout << "a 被直接修改为: " << a << endl; // 输出 100
return 0;
}小结
const int *p→const在*左边 → 锁值(内容不可改)int * const p→const在*右边 → 锁向(指向不可改)const int * const p→ 两边都有const→ 双重锁定
AI
C++资料

