[原创] 参诸文籍, 带你深入理解常量指针, 指针常量, 常指针常量.

90 阅读3分钟

参诸文籍, 带你深入理解常(量)指针, 指针常量, 常(量)指针常量的声明.


⭐本文参考了一些文章, 已置于页脚.⭐
⭐同时推荐我的另一篇博客(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. 相关资料

6. 求三连!!!

快三连

快三连

本文使用 mdnice 排版