指针传 1

news2025/1/22 9:27:14

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如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指
向的内容,可以通过指针改变。
咱们下期见!

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

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

相关文章

聊天机器人框架Rasa资源整理

Rasa是一个主流的构建对话机器人的开源框架,它的优点是几乎覆盖了对话系统的所有功能,并且每个模块都有很好的可扩展性。参考文献收集了一些Rasa相关的开源项目和优质文章。 一.Rasa介绍 1.Rasa本地安装 直接Rasa本地安装一个不好的地方就是容易把本地…

Django框架FAQ

文章目录 问题1:Django数据库恢复问题2:null和blank的区别问题3:Django创建超级用户报错问题4:Django同源策略 问题1:Django数据库恢复 问题: 从仓库拉下来的Django项目,没有sqlite数据库和migrations记录,如何通过model恢复数据库 解决方法: # 步骤1:导出数据 # 不指定 ap…

如何配置《动手学强化学习》的环境

如何配置《动手学强化学习》的环境 网站:https://hrl.boyuai.com/chapter/intro github仓库:https://github.com/boyu-ai/Hands-on-RL/tree/main 可以看到该教程要求使用gym0.18.3版本的gym库,本教程可以用于解决绝大多数需要使用Pendulum-…

阿里云从公网IP转为弹性公网IP,同时绑定多个IP教程

先将云服务器ECS 转为弹性IP 购买新的弹性辅助网卡 购买弹性公网iP 购买之后选择绑定资源选择第二步购买的网卡 进入ECS 终端 ,输入 ip address可以查看到eth1 的对应mac 地址 终端输入 vi /etc/sysconfig/network-scripts/ifcfg-eth1保存一下信息 DEVICEeth1 #表示新配置…

【MySQL基本功系列】第二篇 InnoDB事务提交过程深度解析

通过上一篇博文,我们简要了解了MySQL的运行逻辑,从用户请求到最终将数据写入磁盘的整个过程。 当数据写入磁盘时,存储引擎扮演着关键的角色,它负责实际的数据存储和检索。 在MySQL中,有多个存储引擎可供选择&#xf…

免费博客搭建笔记

title: 免费博客搭建笔记 tags: 博客搭建 本次是对自己在网上学习github搭建一个 👇个人免费静态网站的总结当然不是很完美👇 Bow to the new king iYANG (yangsongl1n.github.io) 接着我会从我的写笔记的个人习惯来逐步介绍如何搭建这个网站 1.写笔…

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

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

XML解析文档解析

1.首先是我的项目结构以及我所引入的依赖&#xff1a; 2.引入的依赖&#xff1a;jdk用的是17 <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target> </properties> <dep…

黑客技术(网络安全)-自学

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防…

Peter算法小课堂—八皇后问题

独立集问题&#xff1a;安排互不冲突的个体 四个斜眼枪手 bool valid(int x,int y){for(int i1;i<min(x,y);i)if(f[x-i][y-i]) return 0;for(int i1;i<min(x,N-1-y);i)if(f[x-i][yi]) return 0;return 1; } void dfs(int x,int y,int c){if(cGUNS){ans;print();return;}i…

不可否认程序员的护城河已经越来越浅了

文章目录 那些在冲击程序员护城河低代码/无代码开发平台自动化测试和部署工具AI辅助开发工具在线学习和教育平台 面临冲击&#xff0c;程序员应该怎么做深入专业知识&#xff1a;不断学习全栈技能开发解决问题的能力建立人际网络管理和领导技能 推荐阅读 技术和应用的不断发展对…

skynet学习笔记03— 服务

01、API newservice(name, ...)&#xff1a; 阻塞的形势启动一个名为 name 的新服务&#xff0c;待start函数执行完后会返回这个服务的地址。uniqueservice(name, ...)&#xff1a;针对于当前节点&#xff0c;启动一个唯一服务&#xff08;相当于单例&#xff09;&#xff0c;…

土壤含水量的计算

土壤含水量的计算 土壤水分的表示方法 一般所说的土壤水分&#xff0c;实际上是指用烘干法在105-110摄氏度温度下能从土壤中被驱逐出来的水。土壤水分含量即土壤含水量&#xff0c;它是指土壤中所含有的水分的数量。土壤含水量可以用不同的方法表示&#xff0c;最常用的表示方…

【Git】Git分支与标签掌握这些技巧让你成为合格的码农

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Git》。&#x1f3af;&#x1f3af; &#x1f449…

src/main/resources/fonts/songti.ttc not found as file or resource.

https://blog.csdn.net/Lewishhhh/article/details/122812272文章浏览阅读4.8k次&#xff0c;点赞2次&#xff0c;收藏7次。背景遇到个需求需要用Java导出PDF文件&#xff0c;权衡之下选择了iText&#xff0c;Java操作pdf的各个开源库之间的对比可以参考https://blog.csdn.net/…

论文笔记:AttnMove: History Enhanced Trajectory Recovery via AttentionalNetwork

AAAI 2021 1 intro 1.1 背景 将用户稀疏的轨迹数据恢复至细粒度的轨迹数据是十分重要的恢复稀疏轨迹数据至细粒度轨迹数据是非常困难的 已观察到的用户位置数据十分稀疏&#xff0c;使得未观察到的用户位置存在较多的不确定性真实数据中存在大量噪声&#xff0c;如何有效的挖…

大数据毕业设计选题推荐-生产大数据平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Centos7安装PostgreSQL 14

环境&#xff1a; Centos7安装PostgreSQL_14版本数据库&#xff1b; 打开官方网站&#xff1a;PostgreSQL: Linux downloads (Red Hat family) 一、 版本选择 复制、粘贴并运行如下脚本&#xff1a; 二、安装步骤 这些命令是在 CentOS 7.x 系统上安装和配置 PostgreSQL 14 的步…

【机器学习范式】监督学习,无监督学习,强化学习, 半监督学习,自监督学习,迁移学习,对比分析+详解与示例代码

目录 1. 监督学习 (Supervised Learning): 2. 无监督学习 (Unsupervised Learning): 3. 强化学习 (Reinforcement Learning): 4. 半监督学习 (Semi-Supervised Learning): 5. 自监督学习 (Self-Supervised Learning): 6. 迁移学习 (Transfer Learning): 7 机器学习范式应…