当前位置: 首页 > news >正文

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

在这里插入图片描述

文章目录

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

📚引言

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

  • 首先来看看下面这段代码,首先我定义了一个变量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修饰符,那么既无法通过指针去修改所指向的值,也无法修改指针的指向,虽然这使代码变得非常安全,但在还是没有这个必要╮(╯▽╰)╭
  • 要想一个男朋友连吃的都不给你买,而且还不准你换男朋友,强行霸占你🔨这种情况还是赶紧分手吧!

在这里插入图片描述

总结与提炼

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

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

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

在这里插入图片描述

相关文章:

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

文章目录📚引言✒常量指针🔍介绍与分析📰小结与记忆口诀✒指针常量🔍介绍与分析📰小结与记忆口诀👉一份凉皮所引发的故事👈总结与提炼📚引言 本文我们来说说大家很困惑的两个东西&am…...

python 打包工具 pyinstaller和Nuitka区别

1.1 使用需求 这次也是由于项目需要,要将python的代码转成exe的程序,在找了许久后,发现了2个都能对python项目打包的工具——pyintaller和nuitka。 这2个工具同时都能满足项目的需要: 隐藏源码。这里的pyinstaller是通过设置key来…...

Python解题 - CSDN周赛第28期

上一期周赛问哥因为在路上,无法参加,但还是抽空登上来看了一下题目。4道题都挺简单的,有点遗憾未能参加。不过即使参加了,手速也未必能挤进前十。 本期也是一样,感觉新增的题目都偏数学类,基本用不到所谓的…...

DNS记录类型有哪些,分别代表什么含义?

DNS解析将域名指向IP地址,是互联网中的一项重要服务。而由于业务场景不同,在设置DNS解析时,需要选择不同的记录类型。网站管理人员需要准确了解每一种DNS记录类型所代表的含义和用途,才能满足不同场景的解析需求。本文中科三方简单…...

ICLR 2022—你不应该错过的 10 篇论文(上)

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 ICLR 2023已经放榜,但是今天我们先来回顾一下去年的ICLR 2022! ICLR 2022将于2022年 4 月 25 日星期一至 4 月 29 日星期五在线举行(连续第三年!&#xf…...

HydroD 实用教程(三)环境数据

目 录一、前言二、Location三、Wind Profile四、Directions五、Water5.1 Wave Spectrums5.2 Current Profile5.3 Frequency Set5.4 Phase Set5.5 Wave Height5.6 Regular Wave Set六、参考文献一、前言 SESAM (Super Element Structure Analysis Module)…...

第四章 统计机器学习

机器学习:从数据中学习知识; 原始数据中提取特征;学习映射函数f;通过映射函数f将原始数据映射到语义空间,即寻找数据和任务目标之间的关系; 机器学习: 监督学习:数据有标签&#x…...

Redis第一讲

目录 一、Redis01 1.1 NoSql 1.1.1 NoSql介绍 1.1.2 NoSql起源 1.1.3 NoSql的使用 1.2 常见NoSql数据库介绍 1.3 Redis简介 1.3.1 Redis介绍 1.3.2 Redis数据结构的多样性 1.3.3 Redis应用场景 1.4 Redis安装、配置以及使用 1.4.1 Redis安装的两种方式 1.4.2 Redi…...

Java面试题-消息队列

消息队列 1. 消息队列的使用场景 六字箴言:削峰、异步、解耦 削峰:接口请求在某个时间段内会出现峰值,服务器在达到峰值的情况下会奔溃;通过消息队列将请求进行分流、限流,确保服务器在正常环境下处理请求。异步&am…...

基于离散时间频率增益传感器的P级至M级PMU模型的实现(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...

9个相见恨晚的提升办公效率的网站!

推荐9个完全免费的神器网站,每一个都是功能强大,完全免费,良心好用,让你相见恨晚。 1:知犀思维导图 https://www.zhixi.com/ 知犀思维导图是一个完全免费的宝藏在线思维导图工具。它完全免费,界面简洁唯美…...

java的双亲委派模型-附源码分析

1、类加载器 1.1 类加载的概念 要了解双亲委派模型,首先我们需要知道java的类加载器。所谓类加载器就是通过一个类的全限定名来获取描述此类的二进制字节流,然后把这个字节流加载到虚拟机中,获取响应的java.lang.Class类的一个实例。我们把实…...

Docker 笔记

Docker docker pull redis:5.0 docker images [image:57DAAA3E-CC88-454B-B8AC-587E27C9CD3A-85324-0001A93C6707F2A4/93F703D2-5F44-49AB-83C7-05E2E22FB226.png] Docker有点类似于虚拟机 区别大概: docker:启动 Docker 相当于启动宿主操…...

用户认证-cookie和session

无状态&短链接 短链接的概念是指:将原本冗长的URL做一次“包装”,变成一个简洁可读的URL。 什么是短链接-> https://www.cnblogs.com/54chensongxia/p/11673522.html HTTP是一种无状态的协议 短链接:一次请求和一次响应之后&#…...

UUID的弊端以及雪花算法

目录 一、问题 为什么需要分布式全局唯一ID以及分布式ID的业务需求 ID生成规则部分硬性要求 ID号生成系统的可用性要求 二、一般通用方案 (一)UUID (二)数据库自增主键 (三)Redis生成全局id策略 三…...

使用netty+springboot打造的tcp长连接通讯方案

文章目录项目背景正文一、项目架构二、项目模块三、业务流程四、代码详解1.消息队列2.执行类3.客户端五、测试六、源码后记项目背景 最近公司某物联网项目需要使用socket长连接进行消息通讯,捣鼓了一版代码上线,结果BUG不断,本猿寝食难安&am…...

【正点原子FPGA连载】第十章PS SYSMON测量温度电压实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十章PS SYSMON…...

AcWing《蓝桥杯集训·每日一题》—— 1460 我在哪?

AcWing《蓝桥杯集训每日一题》—— 1460. 我在哪? 文章目录AcWing《蓝桥杯集训每日一题》—— 1460. 我在哪?一、题目二、解题思路三、代码实现本次博客我是通过Notion软件写的,转md文件可能不太美观,大家可以去我的博客中查看&am…...

AcWing《蓝桥杯集训·每日一题》—— 3729 改变数组元素

AcWing《蓝桥杯集训每日一题》—— 3729. 改变数组元素 文章目录AcWing《蓝桥杯集训每日一题》—— 3729. 改变数组元素一、题目二、解题思路三、代码实现本次博客我是通过Notion软件写的,转md文件可能不太美观,大家可以去我的博客中查看:北天…...

如何熟练掌握Python在气象水文中的数据处理及绘图【免费教程】

pythonPython由荷兰数学和计算机科学研究学会的吉多范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多…...

HDiffPatch实际应用案例:APK文件差异化和Android应用商店优化

HDiffPatch实际应用案例:APK文件差异化和Android应用商店优化 【免费下载链接】HDiffPatch a C\C library and command-line tools for Diff & Patch between binary files or directories(folder); cross-platform; runs fast; create small delta/differentia…...

千问 LeetCode 2281.巫师的总力量和 Python3实现

LeetCode 2281. 巫师的总力量和(Sum of Total Strength of Wizards) 是一道难度较高的题目,核心在于 贡献法 单调栈 前缀和的前缀和(prefix sum of prefix sums)。下面给出 清晰、高效、符合 Python3 习惯 的实现&am…...

使用 Taotoken 聚合 API 一周后的延迟与稳定性实际体验分享

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用 Taotoken 聚合 API 一周后的延迟与稳定性实际体验分享 1. 项目背景与接入动机 最近在开发一个需要调用多种大语言模型的个人…...

阿里AI产品经理实习深度解析:从业务痛点到评估体系,手把手拆解求职攻略!

本文详细拆解了阿里AI产品经理实习岗位的核心职责与面试要点,强调理解业务场景、设计AI应用流程、运用Prompt技术、评估产品效果等关键能力。文章指出,该岗位不仅需要掌握AI基础概念,更要具备业务洞察力、问题拆解能力及数据驱动优化能力&…...

白嫖新网免费云主机,挂QQ机器人亲测可用

申请门槛低:只要手机号,不需要人脸识别,不想太麻烦就选择阿贝云 配置够用:1核1G 20G SSD,挂QQ机器人完全够 国内速度快:独立公网IP,延迟低,不掉线申请花了不到5分钟,装完…...

基于RAG与向量数据库的智能知识库构建实战指南

1. 项目概述:一个开源的深度知识库构建与问答引擎最近在折腾一个挺有意思的开源项目,叫deepwiki-open。简单来说,它就是一个帮你把一堆文档(比如公司内部Wiki、产品手册、技术文档)变成一个能“听懂人话”并“对答如流…...

2026年强烈建议收藏:八大热门AI编程工具权威评测

AI编程工具已全面进入智能体时代,从单一代码补全进化为全流程开发引擎。本文精选8款全球主流工具,从核心能力、场景适配、使用体验等维度客观解析,为开发者提供精准选型参考。 一、Trae(字节跳动旗下)—— 全链路AI原生…...

KLayout终极指南:5分钟快速上手开源版图设计工具

KLayout终极指南:5分钟快速上手开源版图设计工具 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout KLayout是一款功能强大的开源版图设计工具,专为集成电路(IC)设计和…...

金融机器学习实战:MlFinLab工具包核心模块解析与应用指南

1. 从零到一:为什么我们需要一个金融机器学习的“瑞士军刀”?如果你和我一样,在量化金融和算法交易这条路上摸爬滚打了好几年,那你一定经历过这样的场景:为了复现一篇顶级期刊论文里的某个特征工程方法,你需…...

如何解决QQ音乐下载的歌曲在其他设备上无法播放的问题

如何解决QQ音乐下载的歌曲在其他设备上无法播放的问题 【免费下载链接】qmcflac2mp3 直接将qmcflac文件转换成mp3文件,突破QQ音乐的格式限制 项目地址: https://gitcode.com/gh_mirrors/qm/qmcflac2mp3 你是否曾经在QQ音乐下载了喜欢的歌曲,却发现…...