在函数中,用指针接收就可以改变相应的内容吗??

news2024/11/16 5:54:28

作者:小树苗渴望变成参天大树
作者宣言:认真写好每一篇博客
作者gitee:gitee
在这里插入图片描述如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!


我们在不管指针那篇博客,还是在函数那篇博客中,我都给大家讲解过,传值和传址的区别,但今天为了把知识点串连起来,让大家更好的理解,在讲解一遍传址和传值,也相当于给大家做复习了。

举个例子:通过函数交换两个整型的值

void Swap(int a, int b)
{
	int tmp = a;
	a = b;
	b = tmp;
}

在这里插入图片描述
我们发现通过这个函数,没有办法交换两个数,原因是这是值传递,为什么值传递不行呢??我将画一个图让大家理解:
在这里插入图片描述
我们来看一下传址可不可以:

void Swap(int* a, int* b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}
int main()
{
	int a = 10;
	int b = 20;
	printf("交换前:a=%d b=%d\n", a, b);
	Swap(&a, &b);
	printf("交换后:a=%d b=%d", a, b);
	return 0;
}

在这里插入图片描述

看到这里相信大家对为何修改数据需要用指针接收了吧,但是只要用指针接收的都可以改变里面的数据吗??我们再来看一个例子:

void Address(int* a)//传一级指针,用一级指针接收
{
	a = 0x11223344;
}
int main()
{
	int* a = 0x1122ff44;//假设a里面存放是一个整型数据的地址
    printf("a之前的地址:a=%p\n", a);
	Address(a);
	printf("a之后的地址:a=%p", a);
	return 0;
}

在这里插入图片描述
我们看到我们的a的地址并没有改变,这是为什么呢??
原因是我们a里面保存的虽然是地址,但地址是地址编号,是数值,实际上也是值,那我们怎么去做呢??
我先画一个图让大家理解一下:
在这里插入图片描述

所以看我们定义的什么类型的数据,就要使用相应的类型去接收,才能改变里面的内容,整型,就用一级指针。是一级指针,就用二级指针接收。那我们怎么修改上面的案例呢??

void Address(int** a)
{
	*a = 0x11223344;
}
int main()
{
	int* a = 0x1122ff44;
    printf("a之前的地址:a=%p\n", a);
	Address(&a);
	printf("a之后的地址:a=%p", a);
	return 0;
}

在这里插入图片描述
看到这里我相信大家有了更深一层的理解了吧

对于机器而言传值和传址都是传值,没有区别,但我们作为使用者,这么说有利于学习和区分

这时候大家在去看看我写的关于单链表的博客,就可以更好的理解为什么传二级指针,观察一下函数体看看那些需要改变指针里面的数值。单链表

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

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

相关文章

Unity 打包代码到 DLL

Unity 打包代码到 DLL 使用Unity API PlayerBuildInterface.CompilePlayerScripts 将项目中的代码生成为 DLL 程序集 在 Editor 文件夹下新建脚本 CompileDll using UnityEngine; using UnityEditor; using UnityEditor.Build.Player; using System.IO;public class Compile…

【springmvc】获取请求参数

SpringMVC获取请求参数 1、通过ServletAPI获取 将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象 RequestMapping("/testParam") public String testParam(HttpServletRequest request)…

Allegro如何输出ODB文件操作指导

Allegro如何输出ODB文件操作指导 在PCB设计完成之后,需要输出生产文件用于生产加工,除了gerber文件可以用生产制造,ODB文件同样也可以用于生产,如下图 用Allegro如何输出ODB文件,具体操作如下 首先确保电脑上已经安装了ODB这个插件,版本不受限制点击File

开学季准备哪些电容笔好?apple pencil一代平替笔推荐

一支简单而又易用的电容笔,配上我们的ipad,将会为我们的工作、学习带来更多的乐趣。在画画时,也不能忽略电容笔的重要作用。关于电容笔的相关知识,本人也略有知不少,以下是我今天要带来的几款具有极高性价比的电容笔&a…

【C#进阶】C# 特性

序号系列文章10【C#基础】C# 正则表达式11【C#基础】C# 预处理器指令12【C#基础】C# 文件与IO文章目录前言1,特性的概念1.1 特性的属性1.2 特性的用途2,特性的定义2.1 特性参数2.2 特性目标3,预定义特性3.1 AttributeUsage3.2 Conditional3.2…

【springmvc】java bean 的区分

bean JavaBean分为两类: 一类称为实体类Bean:专门存储业务数据的,如 Student、User 等一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问。 在一个java的springboot中,一般…

day59-day60【代码随想录】二刷数组

文章目录前言一、移动零(力扣283)【双指针】二、轮转数组(力扣189)三、寻找数组的中心下标(力扣728)四、和为 K 的子数组(力扣560)五、按奇偶排序数组 II(力扣922&#x…

【SPSS】多因素方差分析详细操作教程(附案例实战)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【微信小程序-原生开发】实用教程14 - 列表的分页加载,触底加载更多(含无更多数据的提醒和显示,自定义组件)

此页可在动态列表的基础上完善,也可以单独学习 【微信小程序-原生开发】实用教程10 - 动态列表的新增、修改、删除 https://blog.csdn.net/weixin_41192489/article/details/128835069 效果预览 核心技术 列表的分页加载 skip 跳跃到指定下标开始查询limit 限制返…

Vulnhub系列:SickOS1.1

靶机地址:SickOS1.1渗透思路:信息收集对于目标靶机进行扫描,可以利用nmap或arp-scan -l进行查询,查询到靶机后,探测其开放的端口,常见的端口21、22、80、3306、445等等,对于不同的端口进行不同的…

博途PLC开放式以太网通信之TRCV_C指令编程应用

博途PLC开放式以太网通信TSENG_C指令应用,请参看下面的文章链接: 博途PLC 1200/1500PLC开放式以太网通信TSEND_C通信(UDP)_plc的udp通信_RXXW_Dor的博客-CSDN博客开放式TSEND_C通信支持TCP 、UDP等,关于TSEND_C的TCP通信可以参看下面这篇文章:博途PLC 1200/1500PLC开放式…

存储器分类

存储器(Memory)包括: RAM(Random Access Memory)(计算机运行内存、CPU的L1/L2 Cache等)、 ROM(Read Only Memory)(用于BIOS等固化程序/数据的存储)和 Flash(可用于机械硬盘等)。 存储器&#x…

现代神经网络(VGG),并用VGG16进行实战CIFAR10分类

专栏:神经网络复现目录 本章介绍的是现代神经网络的结构和复现,包括深度卷积神经网络(AlexNet),VGG,NiN,GoogleNet,残差网络(ResNet),稠密连接网络…

Blender Python材质处理入门

本文介绍在 Blender 中如何使用 Python API 获取材质及其属性。 推荐:用 NSDT场景设计器 快速搭建3D场景。 1、如何获取材质 方法1、 获取当前激活的材质 激活材质是当前在材质槽中选择的材料。 如果你选择一个面,则活动材料将更改为分配给选定面的材质…

ceph-ansible部署Ceph Pacific版本集群

文章目录环境规划节点初始化设置ssh免密主机名解析时间同步关闭防火墙部署ceph下载ceph-ansible修改配置文件执行部署验证集群状态扩容mon节点扩容osd节点环境规划 总共9个节点,3个mon节点,6个osd节点,每个osd节点3块50G的osd磁盘 主机名os…

Linux命令系统总结

Linux Linux常用操作_linux基本操作_槑の少年的博客-CSDN博客 help help 命令 :获得 shell 内置命令的帮助信息,常用形式 help cd ls --help 文件夹级 常用参数: cd 绝对路径 :切换路径 cd 相对路径 :切换路径 …

移动web(三)

her~~llo,我是你们的好朋友Lyle,是名梦想成为计算机大佬的男人! 博客是为了记录自我的学习历程,加强记忆方便复习,如有不足之处还望多多包涵!非常欢迎大家的批评指正。 媒体查询 目标:能够根据…

凌恩生物资讯

凌恩生物转录组项目包含范围广,项目经验丰富,人均10年以上项目经验,其中全长转录组测序研究基因结构已经成为发文章的趋势,研究物种包括高粱、玉米、拟南芥、鸡、人和小鼠、毛竹、棉花等。凌恩生物提供专业的全长转录组测序及分析…

【微信小程序】-- 页面导航 -- 编程式导航(二十三)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…

面向对象的使用

目录1. 类和对象的概念类对象类和对象的关系2. 定义简单的类(只包含方法)3. 创建对象4. self参数5. 类的初始化方法在初始化方法内部定义属性在初始化方法内部接收参数定义属性6. 类的内置方法使用__del__ 方法__str__ 方法7. 身份运算符is 与 区别:8. …