C++: 《三兄弟三姐妹之:指针常量、常量指针、常量指针常量》

C++: 《三兄弟三姐妹之:指针常量、常量指针、常量指针常量》


一.这三个玩意是个嘛(我愿称之为"常量三流氓", 因为不好区分)?

  • 指针常量: 它的主语是"常量"("指针"是定语, 修饰常量), 意思就是, 它是一个常量, 这个常量数据类型是指针, 其特点是: 指针指向的值(地址)不可变, 但是指针所指向的对象的状态(比如字段的值)可变。
  • 常(量)指针:它的主语是"指针"("常量"是定语, 修饰指针), 意思就是, 它是一个指针, 这个指针指向了一个常量, 其特点是: 指针指向的值(地址)可变, 但是指针所指向的对象的状态(比如字段的值不)可变。
  • 常指针常量(指向常量的常量指针): 本质是一个指向常指针的常量, 指向和值都不可变。

二.让我看看这语法是这么个事儿

  • 指针常量:type_name* const variable 例如: int* const p;
  • 常量指针: type_name const *variable or type_name const *variable
    - 例如: int const *p ; or const int *p;
  • 常指针常量: const type_name* const variable or const type_name const *variable
    - 例如: const int const p; or int const
    const p;*

三. 说了这么多, 怎么记下来啊? | How to memorize?

在这个背景下(与"int *p , int* p, int * p"这种不一样, 看靠下面"豆包", 那部分), 可以把*p理解为指针所指向的对象, p可以理解为指针本身, 然后在int* const p中, const直接修饰p, 所以指针指向不可变, 对象状态可变,它是指针常量, 而int const *p中, const 直接修饰*p所以指针的指向可变, 所指对象的状态不可变, 常量指针.

  • const type_name / type_name const这个顺序不是很重要.
  • 进一步来讲, 常量指针常量首先是指针常量所以它应该有个*“int* const p”, 其次它的值不变(还有一个"常量"), 所以它应该是 const int* const p, 或者是int const*const p

四.看官看这里, 来自豆包(抖音家的AI)的答案

问题(1): p表示指针?*p表示指针指向的对象?

答案:
通常情况下,可以这样理解:在 C++ 中,p 表示指针变量,它存储了一个内存地址。而 *p 用于访问指针所指向的对象。例如,如果有 int a = 10; int *p = &a; ,这里的 p 是指向变量 a 的指针,*p 就表示 a 这个对象


问题(2): 我的意思是前者中无论是int* p、int * p、int *p, 只能表示指针, 但后者中*p表示指针所指向的对象(而不是指针本身), p表示指针本身吗?


答案:

您的理解在一定程度上是正确的。在 int* pint * pint *p 这几种普通指针的声明中,p 表示指针本身,*p 表示指针所指向的对象。而在 int* const p 中,p 是指针本身且其指向不能更改,*p 表示所指向的对象。在 int const *p 中,p 是指针本身且其指向可以更改,*p 表示所指向的对象,但不能通过 *p 来修改对象的值。

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值