【C/C++】常量指针与指针常量的深入解析与区分(什么是const int * 与 int * const ?)

目录

一、前言

[二、const 的简单介绍](#二、const 的简单介绍)

三、常量指针

🔍介绍与分析

📰小结与记忆口诀

四、指针常量

🔍介绍与分析

📰小结与记忆口诀

五、总结与提炼

六、共勉


一、前言

在【C/C++】的编程中,指针const关键字的组合常常会引出大部分初学者的困惑(比如我😂),特别是学习到C++ 中的拷贝构造那里如果分不清**【常量指针】【指针常量】**之间的含义与区别的话,是相当的难受。所以本文旨在深入解析这两种声明的含义,帮助大家准确的区分它们。

二、const 的简单介绍

  • 首先来看看下面这段代码,首先我定义了一个变量num为10,然后又对其进行了一个赋值修改,打印出来之后就是修改之后的值【相信这是最基本的认识】

    int main(void)
    {
    int num = 10;
    num = 20;

    复制代码
      printf("num = %d\n", num);
      return 0;

    }

  • 但若是我可以修改num值的话,别人也可以修改了,这就没有了安全性。所以我想给它加上一把锁🔒使得它无法被修改,这里介绍一种C语言中的关键字**【const】,若是我们在定义变量的时候在前面加上一个const做修饰,此时这个变量就会变成【常量】**

    const int num = 10;

  • 可以看到,在加上const常进行修饰之后,这个变量就无法被修改了,若是有人想要去修改的话编译器就会报出警告**⚠**

知道了const 的含义之后,接下去我们来说说有关**【常量指针】和【指针常量】**之间的区别

三、常量指针

🔍介绍与分析

  • 上面看到,因为在定义num的时候前面加上了const常的修饰,就使得它变成了一个常量,无法被修改,在指针初阶章节,我有介绍过可以将一个指针进行解引用去修改这个指针所指向那块地址的值

    int* p = #
    *p = 20;

  • 可以看到,确实可以对其进行一个修改

  • 那此时这个num的安全性就又降低了,所以我想再做制裁🗡,使得指针也无法对其解引用进行一个修改
  • 那么又需要使用上面所说的const修饰符,也是和修饰num一个道理,只需要在前面加上一个【const】作为修饰即可

    const int* p = #

  • 可以看到,此时我们通过指针解引用的方式也无法对其进行修改❌

  • 虽然是不可以通过指针解引用去修改这个指针所指向的值,但是可以去修改这个指针的指向,令其重新指向一个变量的地址,这是合法的

    const int num = 10;
    //num = 20;
    int num2 = 20;

    const int* p = #
    //*p = 20; //err
    p = &num2;

  • 不过原理还是一样的,我们无法通过这个指针进行解引用去修改它所指向的值

📰小结与记忆口诀

以上所描述的就是【常量指针】,一起来总结一下📖

  • 总结:对于常量指针而言,是将【const】放在*的左边,表示的是指针所指向的内容不能通过指针来修改,但指针变量本身可修改
  • 口诀:常量指针所指向的是一个常量,不能修改;但是指针本身不是常量,可以修改

四、指针常量

知道了什么是**【常量指针】,接下去让我们来看看什么是【指针常量】**

🔍介绍与分析

  • 刚才我们将const放在的左边,现在我们换个地方,将它放在的右边试试

    int* const p = #

  • 此时若再去做这两步操作的时候你就会发现和【常量指针】完全不同,可以通过指针解引同去修改指向的值,但是无法再次修改指针的指向

    *p = 20;
    p = &num2; //err

📰小结与记忆口诀

以上所描述的就是【指针常量】,一起来总结一下📖

  • 总结:对于指针常量而言,是将【const】放在*的右边,表示的是指针变量本身的指向不能修改,但是指针指向的内容可以通过指针来修改
  • 口诀:指针常量这个指针本身就是一个常量,不能修改;但是指针所指向的内容不是常量,可以修改

五、总结与提炼

最后,我们来总结一下本文所学习的内容

  • 对于【常量指针】而言,是将const放在[*****]左边的,指针所指向的内容不能通过指针来修改,但指针变量本身可修改
  • 对于【指针常量】而言,是将const放在[*****]右边的,指针变量本身的指向不能修改,但是指针指向的内容可以通过指针来修改

六、共勉

以下就是我对常量指针与指针常量的深入解析与区分的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++的理解,请持续关注我哦!!!

相关推荐
天桥下的卖艺者5 小时前
使用R语言编写一个生成金字塔图形的函数
开发语言·数据库·r语言
2301_790300965 小时前
C++与微服务架构
开发语言·c++·算法
一切尽在,你来5 小时前
C++多线程教程-1.1.4 并发编程的风险(竞态条件、死锁、数据竞争、资源争用)
开发语言·c++
艳阳天_.5 小时前
web 分录科目实现辅助账
开发语言·前端·javascript
重生之我是Java开发战士6 小时前
【优选算法】前缀和:一二维前缀和,寻找数组的中心下标,除自身以外数组的乘积,和为K的子数组,和可被K整除的子数组,连续数组,矩阵区域和
线性代数·算法·矩阵
梵刹古音6 小时前
【C语言】 循环结构
c语言·开发语言·算法
消失的旧时光-19436 小时前
C++ 函数参数传递方式总结:什么时候用值传递、引用、const 引用?
开发语言·c++
2601_949868366 小时前
Flutter for OpenHarmony 剧本杀组队App实战04:发起组队表单实现
开发语言·javascript·flutter
一匹电信狗6 小时前
【C++】CPU的局部性原理
开发语言·c++·系统架构·学习笔记·c++11·智能指针·新特性
bbq粉刷匠6 小时前
Java-排序2
java·数据结构·排序算法