C生万物 | 常量指针和指针常量的感性理解

news2025/2/27 21:12:52

在这里插入图片描述

文章目录

  • 📚引言
  • ✒常量指针
    • 🔍介绍与分析
    • 📰小结与记忆口诀
  • ✒指针常量
    • 🔍介绍与分析
    • 📰小结与记忆口诀
  • 👉一份凉皮所引发的故事👈
  • 总结与提炼

📚引言

本文我们来说说大家很困惑的两个东西👉【常量指针】与【指针常量】

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

	printf("num = %d\n", num);
	return 0;
}

在这里插入图片描述

  • 但若是我可以修改num值的话,别人也可以修改了,这就没有了安全性。所以我想给它加上一把锁🔒使得它无法被修改,这里介绍一种C语言中的关键字【const】,这个我在初识C语言也有说到过,若是我们在定义变量的时候在前面加上一个const做修饰,此时这个变量就会变成【常量】
  • 这个就和Java中的final关键字是一个道理,若是加上了这个关键字做修饰之后,就要在定义的时候对其进行一个初始化,并且后面不能去修改它的值
const int num = 10;
  • 可以看到,在加上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】的右边,表示的是指针变量本身的指向不能修改,但是指针指向的内容可以通过指针来修改
  • 口诀:指针常量这个指针本身就是一个常量,不能修改;但是指针所指向的内容不是常量,可以修改

👉一份凉皮所引发的故事👈

可能还是有同学对它们之间的关系不太理解。没关系,我们通过一个生活中的场景来介绍一下

在这里插入图片描述

  • 现在这里有三行代码,有一个常量num指针p里面保存了它的地址,还有一个常量num2
  • 我们假设这个指针p为一个女孩,num为一个男孩,他是这个女孩的男朋友。有一天男孩陪女孩去逛街,女孩看到路边有人在卖凉皮,所以就想要男孩给他买一份凉皮吃,可是呢男孩身上只有【10块钱】,若是给女朋友买了凉皮自己就没钱用了,于是说:“不行,不给你买,凉皮有什么好吃的😕”

在这里插入图片描述

  • 于是这个时候女孩就生气了,就对男孩说:“一份凉皮都不舍得给我买,还算是我男朋友吗?分手!”,于是看另一个男孩还不错,就想去找另一个男孩【他身上有100块钱】
  • 于是这个时候男孩就不乐意了,好不容易追到的女朋友(不是靠钱),怎么能说分手就分手呢,不能分。此时它就做了一个动作:在这个操作符[*]的前面加上了const作为修饰符,我们来回顾一下前面的知识

在这里插入图片描述

  • 这里的*p = 0就相当于是指针通过解引同让num = 0,那指的就是让男孩变得身无分文;这里的p = &num2指的就是重新修改指针p的指向,使其指向另一个值的地址。👉这就是【常量指针】

  • 此时男孩意识到事情的严重性,那个男的身上这么有钱,万一被它拐走了。想了想还是去给她买吧,一份凉皮罢了,就和女孩说:“行行行,给你买,但是你不可以换男朋友”。此时他就又做了一个动作:在这个操作符[*]的后面加上了const作为修饰符,去掉了前面的const

在这里插入图片描述

  • 同理,这里的*p = 0就相当于是指针通过解引同让num = 0,那指的就是让男孩变得身无分文;这里的p = &num2指的就是重新修改指针p的指向,也就是换一个男朋友。👉这就是【指针常量】

建议广大女性读者选择第二种男朋友,若是想下面这样的,就直接分手吧

  • [*]的前后都加上了const修饰符,那么既无法通过指针去修改所指向的值,也无法修改指针的指向,虽然这使代码变得非常安全,但在还是没有这个必要╮(╯▽╰)╭
  • 要想一个男朋友连吃的都不给你买,而且还不准你换男朋友,强行霸占你🔨这种情况还是赶紧分手吧!

在这里插入图片描述

总结与提炼

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

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

最后感谢您对本文的观看,如果学会了请给个三连哦❤️❤️❤️

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【蒸滴C】C语言指针入门很难?看这一篇就够了

目录 一、前言 二、指针是什么 小结: 三、指针变量是什么 小结: 四、指针在32位机器和64位机器中的差别 32位机器: 64位机器: 小结: 五、指针和指针类型 (1)指针的意义 (2&#xff…

springboot自动配置原理以及spring.factories文件的作用详解

一、springboot 自动配置原理先说说我们自己的应用程序中Bean加入容器的办法:bean加入容器我们在应用程序的入口设置了 SpringBootApplication标签,默认情况下他会扫描所有次级目录。如果增加了 scanBasePackages属性,就会扫描所有被指定的路…

SAP ABAP根据事务码查找增强最直接的方法

下面是为任意事务代码查找用户出口的步骤: 方法一: 第 1 步:使用 事务代码:SE93。输入您要搜索用户出口的 事务代码。 在我们的场景中,我们将使用 CO11N。 第 2 步:点击显示: 第 3 步&#xf…

2023年浙江安全员精选真题题库及答案

百分百题库提供建筑安全员考试试题、安全员证考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 268.注册执业人员未执行法律法规和工程质量强制性标准,造成重大安全事故的,(). A.停止执业 B.5年不予注册 C.10年不予注…

29-Golang中的切片

Golang中的切片基本介绍切片在内存中的形式切片使用的三种方式方式一:方式二:方式三:切片使用的区别切片的遍历切片注意事项和细节说明append函数切片的拷贝操作string和slice基本介绍 1.切片是数组的一个引用,因此切片是引用类型…

采用Spring配置文件管理Bean

文章目录采用Spring配置文件管理Bean(一)创建Maven项目(二)添加Spring依赖(三)创建杀龙任务类(四)创建勇敢骑士类(五)采用传统方式让勇敢骑士完成杀龙任务&am…

2.14日报

今日修改token传参异常bug 国际化bug修复:code中的success只有第一次调用识别lang 没继承BaseController 异常处理的三种方式 1|0一. Controller层面上异常处理 ExceptionHandler 说明:针对可能出问题的Controller,新增注解方法ExceptionHandler. Con…

论文投稿指南——中文核心期刊推荐(农学)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

进程调度(4.1)

进程调度 进程调度是操作系统的基本功能,在多道程序系统中,内存中有多个进程,每个进程交替的去使用处理机,而合理的调度是至关重要的。处理机的调度有三种类型,分别是高级调度、中级调度、低级调度,其中低…

dvwa靶场上的 RCE漏洞+暴力破解的简单学习

记录一下自己重新开始学习web安全之路⑦。 操作系统的一些简单基础: windows: 查询IP地址:ipconfig 查看完整的网卡信息:ipconfig/all 列出当前目录下的文件信息:dir 切换目录:cd 读取文件内容&…

PID控制算法进阶

关于PID控制算法基础概念在本文不再重复了,详情可参考:PID控制算法基础介绍 本文主要从PID算法代码实现,代码解析,理论进阶,PID调参等方向进行阐述。 目录位置式PID和增量式PID1.1 位置式PID1.2 增量式PID1.3 位置式和…

Spring3之基于Aspect实现AOP

简介 使用 Aspect 搭配 Spring 可轻松实现 AOP;本章将通过一个完整示例演示如何实现这一功能 实现步骤 修改 beans.xml 配置文件的 schema 部分;可以在 spring-framework-reference.html 文件通过搜索关键字 “/aop” 找到配置 schema,然后…

Linux安装ElasticSearch

下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch 1 版本选择 ElasticSearch 7 及以上版本都是自带的 jdk,假如需要配置指定的 jdk 版本的话,可以在 es 的 bin 目录下找到elasticsearch-env.bat 这个文件&#x…

(学习日记)2023.2.12

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

谷粒商城:订单中心概念解析

1、订单中心 电商系统涉及到 3 流,分别时信息流,资金流,物流,而订单系统作为中枢将三者有机的集 合起来。 订单模块是电商系统的枢纽,在订单这个环节上需求获取多个模块的数据和信息,同时对这 些信息进行加…

千峰jquery进阶内容

封装选项卡&#xff1a; HTML部分&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport&…

在基于全志D1s的芒果派麻雀上运行国产开源rt-smart系统

想必RT-Thread系统大家不陌生了&#xff0c;RT-Thread Smart&#xff08;简称 rt-smart&#xff09;是基于 RT-Thread 操作系统衍生的新分支&#xff0c;面向带 MMU&#xff0c;中高端应用的芯片&#xff0c;例如 ARM Cortex-A 系列芯片&#xff0c;MIPS 芯片&#xff0c;带 MM…

ELK采集MySQL慢日志实现

文章目录一、ELK采集MySQL慢日志架构二、filebeat三、logstash四、eskibana一、ELK采集MySQL慢日志架构 MySQL 服务器安装 Filebeat 作为 agent 收集 slowLogFilebeat 读取 MySQL 慢日志文件做简单过滤传给 Kafka 集群Logstash 读取 Kafka 集群数据并按字段拆分后转成 JSON 格…

春季开学即将到来!大学生活必备数码清单奉上

马上就要开学了&#xff0c;你的返校装备是否已经准备齐全了呢&#xff1f;对于高校学生来说&#xff0c;很多数码产品都属于必备装备&#xff0c;比如下面这几款产品就受到了大量年轻消费者的喜爱&#xff0c;在它们的帮助下能够让大家的学习时光变得更快乐。1、不入耳黑科技骨…

DM8:DMDSC共享存储集群搭建-配置文件准备

DM8:DMDSC共享存储集群搭建-配置文件准备1 环境介绍2 配置文件2.1 EP73 节点配置文件2.1.1 dmdcr_cfg.ini2.1.2 dmasvrmal.ini2.1.3 dmdcr.ini2.1.4 dminit.ini2.1.5 dmcssm.ini2.1.6 配置文件就绪2.2 EP74 节点配置文件2.2.1 dmdcr.ini1 环境介绍 使用裸设备搭建 2 节点 DMDS…