参诸文籍, 带你深入理解常(量)指针, 指针常量, 常(量)指针常量的声明.
⭐本文参考了一些文章, 已置于页脚.⭐
⭐同时推荐我的另一篇博客(CSDN)《参诸文籍, 带你深入理解C/C++复杂指针声明》⭐
⭐我的微信公众号:Noah Miller, 希望关注支持一波!⭐
文章目录
1. 引言
干就完了
- 一般来说, 大家都能理解
const应用在变量上可致变量值不可改,但是如果这个变量是指针的话, 究竟是指针的指向不可改还是, 所指地址上的值不可改? - 大家有没有被
常(量)指针,指针常量,常(量)指针常量(后文简称`"三兄弟")的声明语法迷惑到?
:star:Motivation | 创作动机:star2:: 我发现, 网上很多相关文章都只是讲解了三兄弟的概念和记忆口诀, 我感觉仅仅这样不是很好理解这种声明语法的逻辑. :star:Aim | 创作目的:star2::本文旨在通过分享, 我阅读相关文章后对声明语法的理解, 为大家讲清楚这个声明语法究竟是怎么回事?
2. 关于 三兄弟
:star2:认真看代码!!! :star2:
// 声明一个演示用的变量
int for_demo = 520;
// 1. 常量指针 (两种形式)
// p = &for_demo; -> 可 | *p = for_demo; -> 不可
const int * p;
int const * p;
// 指针常量 (一种形式)
// p = &for_demo; -> 不可 | *p = for_demo; -> 可
int * const p;
// 常指针常量 (两种形式)
// p = &for_demo; -> 不可 | *p = for_demo; -> 不可
const int * const p;
int const * const p;
常量指针: 指针本身是一个常量, 指向的地址的值是变量, 其指向不可变, 指向的地址上的值可以改.指正常量: 指针本身是一个变量, 指向的地址的值是常量, 其指向可变, 指向的地址上的值不可变.常量指针常量: 指针本身是一个常量, 指向的地址的值也是常量, 其指向不可变, 指向的地址上的值不可变.
3. 理解方式
瞅瞅, 这是啥
1) 关于 const
const在默认情况下应用在左方最近元素,int * const p这里的const就是应用在了*上.- But, 如果
const左方没有元素, 就把const应用在右方最近元素,const int * p;这里的const就应用在了int上.
2) *和 type_name 的意义
Note: 为了方便理解, 我们认为在三兄弟的声明语法中,*和typename是具有特殊意义的.
*在这里我们可以理解为指针的指向.type_name可以理解为指针指向地址上的值.
4. 学费了, 应用一下
总于还是学废了
看完上面的理解方式, 我们可以很容易看出来.
const int * p;和int const *p;中的const都是应用在了int上, 即,常量指针.int * const p;中的const应用在了*上, 即指针常量.const int * const p;和int const * const p;中, 第一个const应用在了int上, 第二个const应用在了*上, 即常量指针常量
5. 相关资料
- 《The C++ 'const' Declaration: Why & How》By Andrew Hardwick
- 《How to interpret complex C/C++ declarations》By Vikram A Punathambekar
6. 求三连!!!
快三连
本文使用 mdnice 排版