大家好呀,我是灰灰,今天咱们来聊聊C++里让无数萌新抓狂的const
和指针的缠绵纠葛,还有函数传参时那些&
和const
的"小心机"。准备好瓜子饮料,咱们开车啦!
一、指针与const的"花式捆绑"(附经典姿势)
1. 只读情人模式(指向常量的指针)
const int* ptr; // 或 int const* ptr;
特点:你可以换女朋友(修改指针指向),但不能动手动脚(修改指向的值)
适用场景:查看数据但不想修改时
int a = 10, b = 20;
const int* ptr = &a;
// *ptr = 30; // 达咩!禁止修改值
ptr = &b; // 可以随时换对象(指向新地址)
这种模式就像博物馆的讲解员——你可以带着游客(指针)看不同的展品(内存地址),但绝对不能触碰展品(修改值)。适合处理配置数据、只读缓存等场景。如果强行修改值,编译器会直接报错:“你小子想干嘛?这展品碰不得!”
2. 霸道总裁模式(常量指针)
int* const ptr;
特点:死心塌地跟定你(不能改指向),但允许你为所欲为(修改值)
适用场景:需要固定操作某个内存区域时
int a = 10;
int* const ptr = &a;
*ptr = 20; // 随便改值
// ptr = &b; // 禁止劈腿!(不能改指向)
这个模式就像你的银行账户密码——一旦设置就不能更改(指针地址固定),但你可以随时修改账户余额(指针指向的值)。常用于硬件寄存器操作,或者需要确保指针始终指向特定对象时。
3. 柏拉图式恋爱(双const锁死)
const int* const ptr;
特点:既不能换对象,也不能动手动脚
适用场景:只可远观不可亵玩的配置数据
const int MAX = 100;
const int* const ptr =