指针传 1

1. 内存

在计算机中内存划分为⼀个个的内存单元,每个内存单元的⼤⼩取1个字节。每个内存单元放了八个bite位,就像我们在高中时住的八人间,那么每个人就代表了一个bite位。
每个内存单元也都有⼀个编号(这个编号就相当 于我们所住的寝室号),有了这个内存单元的编 号,CPU就可以快速找到⼀个内存空间。
⽣活中我们把⻔牌号也叫地址,在计算机中我们把内存单元的编号也称为地址。C语⾔中给地址起 了新的名字叫: 指针
所以我们可以理解为:          内存单元的编号 == 地址 == 指针

2. 指针变量和地址

2.1 取地址操作符(&)

在C语言中,我们创建变量时其实就是在向内存申请空间,我们来看一个示例:

 上述的代码就是创建了整型变量a,那么就在内存中申请4个字节,⽤于存放整数5,其中每个字节都有地址,上图中4个字节的地址就是画圈里面所展示的。

那么在C语言中,我们怎样获取a的地址呢?那么就要学习我们的取地址操作符了(&)

&a取出的是a所占4个字节中地址较⼩的字节的地址,我们只要知道了第⼀个字节地址,后面的也都可以知道了。

2.2 指针变量和解引⽤操作符(*)

2.2.1 指针变量
我们通过取地址操作符(&)拿到的地址是⼀个数值,⽐如:0x00BAF834,这个数值有时候也是需要 存储起来,⽅便后期再使⽤的,那我们把这样的地址值存放在哪⾥呢?那我们就把它储存在: 指针变量中。

取出 a的地址并储存到地址变量p中去,指针变量也是⼀种变量,这种变量就是⽤来存放地址的,存放在指针变量中的值都会理解为地址。

2.2.2 如何拆解指针类型
我们看到p的类型是 int* ,我们该如何理解指针的类型呢?
那么int表示p所指向的对象是整型变量,而*则表示p是一个指针变量。
2.2.3 解引⽤操作符

 我们看到,我们通过了*p去改了num的值,而且还成功了。*p的意思就是通过p中存放的地址,找到指向的空间, *p其实就是num变量了;所以*p = 10,这个操作符是把num改成了10.

3. 指针变量类型的意义

指针变量的⼤⼩和类型⽆关,只要是指针变量,在同⼀个平台下,⼤⼩都是⼀样的,为什么还要有各种各样的指针类型呢?

那么在 上图红色圆圈中我们看见了,四个都被改成了0.接下来我们来看看其他变量类型的一个效果:

 那么看见用char*的话只改变了一个,那么我们可以知道:指针的类型决定了,对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。

3.1 指针+-整数

 我们可以看出, char* 类型的指针变量+1跳过1个字节, int* 类型的指针变量+1跳过了4个字节。所以说不同类型的指针还是有不同之处哈!

3.2 void* 指针
⽆具体类型的指针(或者叫泛型指 针),这种类型的指针可以⽤来接受任意类型地址。但是也有局限性, void* 类型的指针不能直接进 ⾏指针的+-整数和解引⽤的运算。

那么会显示类型的不兼容,那么用到空指针就不会出现这样的问题了:

 那么会看见非法的间接寻址,所以说空指针不能进行指针运算!

4. const修饰指针

4.1 const修饰变量

 那么我们看见经过const修饰过后的b后,是不能被修改的。但是我们通过另外一种途径也可以修饰:

 这里我们通过了指针的方式修改了n的值,但是如果我们绕过n,使⽤n的地址,去修改n就能做到了,虽然这样做是在打破语法规则。我们可以看到这⾥⼀个确实修改了,但是我们还是要思考⼀下,为什么n要被const修饰呢?就是为了不能被修改,如果p拿到n的地址就能修改n,这样就打破了const的限制,这是不合理的,所应该让 p拿到n的地址也不能修改n,那接下来怎么做呢?

4.2 const修饰指针变量

 

 我们可以看见const在*左边修饰时,无法改变*p,const在*右边修饰时,无法改变p,左右两边都有时则都不能改变。

  const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。
但是指针变量本⾝的内容可变。
 const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指
向的内容,可以通过指针改变。
咱们下期见!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2000-2022年上市公司数字化转型同群效应数据

2000-2022年上市公司数字化转型同群效应数据 1、时间:2000-2022年 2、指标:股票代码、年份、行业代码、行政区划代码、数字化转型程度-A、数字化转型程度-B、同行业同群-数字化转型程度-A_均值、同行业同群-数字化转型程度-A_中位数、同省份同群-数字化…

odoo16 库存初始化 excel导入问题

最近在为一家公司实施odoo时,发现库存模块实施过程中按用户实际,产品初始化就是个问题。下面一一记录下 一个新公司,产品都有上百种,甚致几千种,如何把现有产品数据录入系统就是个不小的活。odoo16是有导入导出功能不…

1994-2021年分行业二氧化碳排放量数据

1994-2021年分行业二氧化碳排放量数据 1、时间:1994-2021年 2、来源:原始数据整理自能源年鉴 3、指标:统计年度、行业代码、行业名称、煤炭二氧化碳排放量、焦炭二氧化碳排放量、原油二氧化碳排放量、汽油二氧化碳排放量、煤油二氧化碳排放…

管理能力测评,如何提升管理能力?

管理能力是综合能力的体现,通常也解读为组织管理能力,如果要再细分的话,可能还包括有沟通能力,协调能力,组织能力,执行力和专业能力等等。不过没有办法说的太细节,因为每个部分铺开了都是一个独…

基于51单片机RFID射频门禁刷卡系统设计

**单片机设计介绍, 基于51单片机RFID射频门禁刷卡系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序程序 六、 文章目录 一 概要 基于51单片机RFID射频门禁刷卡系统,是一种将单片机技术和射频标识技术应用于门禁控制系统的…

自主开发刷题应用网站H5源码(无需后端无需数据库)

该应用使用JSON作为题库的存储方式,层次清晰、结构简单易懂。 配套的word模板和模板到JSON转换工具可供使用,方便将题库从word格式转换为JSON格式。 四种刷题模式包括顺序刷题、乱序刷题、错题模式和背题模式,可以根据自己的需求选择适合的模…

接口--抽象方法

回答问题: 1.接口是什么? 2.接口中可以包含什么内容? 3.如何定义接口格式? 4.接口定义抽象方法格式? Code //接口是公共规范标准,类似于“模具” //如何定义接口格式?/** public interface 接…

写在 Chappyz 即将上所之前:基于 AI 技术对 Web3 营销的重新定义

前不久,一个叫做 Chappyz 的项目,其生态代币 $CHAPZ 在 Seedify、Poolz、Decubate、ChainGPT、Dao Space 等几大 IDO 平台实现了上线后几秒售罄,并且 Bitget、Gate.io、PancakeSwap 等几大平台也纷纷表示支持,并都将在 11 月 13 日…

“目标值排列匹配“和“背包组合问题“的区别和leetcode例题详解

1 目标值排列匹配 1.1 从目标字符串的角度来看,LC139是一个排列问题,因为最终目标子串的各个字符的顺序是固定的? 当我们从目标字符串 s 的角度来看 LC139 “单词拆分” 问题,确实可以认为它涉及到排列的概念,但这种…

Android拖放startDragAndDrop拖拽Glide加载堆叠圆角图,Kotlin(5)

Android拖放startDragAndDrop拖拽Glide加载堆叠圆角图,Kotlin(5) import android.content.ClipData import android.graphics.Canvas import android.graphics.Point import android.os.Bundle import android.util.Log import android.view.…

单词规律问题

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 示例1: 输入: pattern “abba”, s “dog cat cat d…

macOS Sonoma 14.2beta2(23C5041e)发布(附黑白苹果镜像地址)

系统介绍 黑果魏叔11 月 10 日消息,今日向 Mac 电脑用户推送了 macOS 14.2 开发者预览版 Beta 2 更新(内部版本号:23C5041e),本次更新距离上次发布隔了 14 天。 macOS Sonoma 14.2 添加了 Music 收藏夹播放列表&…

报时机器人的rasa shell执行流程分析

本文以报时机器人为载体,介绍了报时机器人的对话能力范围、配置文件功能和训练和运行命令,重点介绍了rasa shell命令启动后的程序执行过程。 一.报时机器人项目结构 1.对话能力范围 (1)能够识别欢迎语意图(greet)和拜拜意图(goodbye) (2)能够识别时间意…

AI 绘画 | Stable Diffusion 进阶 Embeddings(词嵌入)、LoRa(低秩适应模型)、Hypernetwork(超网络)

前言 Stable Diffusion web ui,除了依靠文生图(即靠提示词生成图片),图生图(即靠图片提示词生成图片)外,这两种方式还不能满足我们所有的绘图需求,于是就有了 Embeddings&#xff0…

TiPro7000 Smart Tool V1.1无法打开解决办法

长江存储官网下载的TiPro7000 Smart Tool V1.1在win10运行时无法打开,转圈圈之后就没有反应了。官网下载的压缩包解压之后内容如下图。 解决办法:将.exe文件名的“致钛”二字删掉即可。文件名不能有中文。 打开后软件界面如下。 吐槽一下这软件做得挺简…

[Linux打怪升级之路]-信号的保存和递达

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、信号的保…

基于Java Web的在线教学质量评价系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

C语言--从键盘输入当月利润I,求应发奖金总数。

题目描述: 企业发放的奖金根据利润提成。利润I低于或等于100000元的,奖金可提成10%; 利润高于100000 元,低于200000元(1000001000000时,超过1000000元的部分按 1%提成。从键盘输入当月利润I,求应发奖金总数。 int main() {int m…

人工智能与养老:技术助力银色产业的崛起

人工智能与养老:技术助力银色产业的崛起 随着人口老龄化的加速推进,养老问题成为了全球关注的热点。人工智能(AI)技术的迅猛发展,为养老领域注入了新的活力。本文将探讨人工智能在养老领域的应用、关键挑战以及前景展望…

【解决】conda-script.py: error: argument COMMAND: invalid choice: ‘activate‘

运行conda activate base报错: 试了网上找到的解决方法都不行: 最后切换了一下terminal: 从powershell改回cmd(不知道为什么一开始手贱换成powershell) 就可以了