【C++基础知识】“常量指针”和“指针常量”

文章介绍了常量指针和指针常量的概念,强调了两者在指针类型和对象值更改上的不同。常量指针允许指向非常量对象但不能修改对象值,而指针常量一旦初始化就不能改变指向。区分它们的关键在于const的位置和含义:const右侧是数据类型则为常量指针,反之为指针常量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博客主页:Skylar Lin
望本文能够给您带来一定的帮助,如果有错误的地方敬请斧正!
新人博主🧑,希望多多支持🍺,还有好多库存和大家分享🎁。
转载需注明出处和原作🌹。

常量指针

即一个指针指向一个常量对象的地址;指向常量的指针不能用于改变其对象的值。

const double pi = 3.14;  // pi 是一个常量
const double *ptr = π  // ptr 是一个常量指针

*ptr = 42;    // 错误,不能改变其对象的值

虽然我们说:指针的类型与其指向的对象的类型必须匹配;但是有两个例外

其一是允许“常量指针”指向一个非常量对象,另外一个是“常量引用”。

double xi = 3.14;  
const double *ptr = ξ  // ptr 指向非常量对象

// 注意:xi 必须与 ptr 一样是 double 

和常量引用一样,指向常量的指针仅仅要求不能通过该指针改变其对象的值,而没有规定那个对象不能通过其他途径改变。

指针常量

指针常量必须初始化,而且一旦初始化完成,其指向就不能再改变了。

double pi = 3.14;
double *const ptr = π  // ptr 是一个指针常量

*ptr = 5.20;   // 正确,可以修改其指向的对象的值

* 放在 const 之前,说明该指针本身就是一个常量。

如果是 const 既修饰 指针 又修饰 数据类型 的情况,则不能改变指向也不能改变指向的对象的值。

int a = 10;
int b = 20;
//const既修饰指针又修饰常量
const int *const p = &a;
// p = &b;  //错误
//*p = 100; //错误

区分常量指针和指针常量

区分技巧 1: 看 const 右侧紧跟着的是 指针 还是 数据类型,是指针则为常量指针,否则为指针常量

区分技巧 2:常量指针本身为指针,肯定可以改变指向;指针常量本身为常量,不能改变指向。

如果要用专业名词来区分的话,那便是顶层 const底层 const 了。

顶层 const 表示指针本身是一个常量,底层 const 表示指针指向的对象是一个常量。

更广泛的,顶层 const 可以表示任意对象是常量,这一点对于任意数据类型都适用。

int i = 10;
int *const p1 = &i;    // 不能改变 p1 的值(即p1指向),因为这是一个 顶层const

const int ci = 24;     // 不能改变 ci 的值,因为这是一个 顶层const

const int *p2 = &ci;   // 允许改变 p2 的值(即p2指向),因为这是一个 低层const

const int &r = ci;     // 允许改变 r 的值,因为这是一个 低层const
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Skylar Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值