详解const int* 与 int const*的区别

本文详细讲解了const关键字在指针和变量声明中的不同作用,包括常量指针、常量引用以及它们在内存管理和类型限制上的区别。通过实例演示,揭示了const在C++中的实际应用和含义。

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

文章引自: https://www.zhihu.com/question/443195492,有改动。

可以有一个小技巧,即:

const默认作用于其左边的东西,如果左边没东西,则作用于其右边的东西。

 

例如,

const int*

 const 要作用于左边的东西,但是左边没东西,所以const修饰int成常量整型,然后*再作用于常量整型。所以这是a pointer to a constant integer(指向一个整型,不可通过该指针改变其指向的内容,但可改变指针本身所指向的地址)

int const *

再看这个,const左边有东西,所以const作用于int,*再作用于int const所以这还是 a pointer to a constant integer(同上)。

int* const

这个const的左边是*,所以const作用于指针(不可改变指向的地址),所以这是a constant pointer to an integer,可以通过指针改变其所指向的内容但只能指向该地址,不可指向别的地址。

const int* const

这里有两个const。左边的const 的左边没东西,右边有int那么此const修饰int。右边的const作用于*使得指针本身变成const(不可改变指向地址),那么这个是a constant pointer to a constant integer,不可改变指针本身所指向的地址也不可通过指针改变其指向的内容。

int const * const

这里也出现了两个const,左边都有东西,那么左边的const作用于int,右边的const作用于*,于是这个还是是a constant pointer to a constant integer。

剩下的不是很常见,该文章不再此处表述,详情请见:

 https://www.zhihu.com/question/443195492

 

补充:

int gorp = 16;

int chips = 12;

const int* p_snack = &gorp;

*p_snack = 20; //不可以,禁止修改p_snack指向的值

p_snack = &chips; //可以,p_snack可以指向另一个变量

 

int gorp = 16;

int chips = 12;

int* const p_snack = &gorp;

*p_snack = 20; //可以,p_snack可用来修改值

p_snack = &chips; //不可以,禁止修改p_snack指向的变量

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值