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

【C语言】值传递和地址传递

值传递 引用传递(传地址,传引用)的区别

传值,是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值
传地址,是传值的一种特殊方式,只是他传递的是地址,不是普通的如int,那么传地址以后,实参和行参都指向同一个对象
传引用,真正的以地址的方式传递参数, 传递以后,行参和实参都是同一个对象,只是他们名字不同而已,对行参的修改将影响实参的值。

从函数调用的角度比较容易理解:

  • 函数的名字就是函数的首地址,就是函数的入口,例子:(数组与之同理,数组的名字就是数组的首地址)
void fun(void) //fun 既是函数类型也使指针类型 一体两面
{}
//数组也是同理short arr[20]; //arr 既是数组类型,也是指针类型(一个变量两个类型) 应用场景不同,则展示出来的效果不同,如同一枚硬币的两面,同属于这枚硬币

请添加图片描述
既然 fun 是地址值,那么 fun 是什么类型? 指针类型,因为它的本质是一个地址。 // 这称为函数指针
void ( *)(void) —> void fun(void)

     int fun2(short s, int i){return 0;}int (*)(short, int) //fun2的类型函数调用: fun2(10,20);int (*p)(short, int)  = fun2; 

将 fun2 赋值给其他值:p = fun2,因为fun2的本质是一个地址,所以接收类型应该是:int (*)(short,int) p = fun2; <— 然而,并没有这样的写法。这里有一个规律,如果你看见 (*) 单独存在,要将后面的东西放入到 *的后面(语法规则),即 写法为: int ( *p)(short, int) = fun2;同理,如果你看见单独存在的 []或者多个[] [] [],将后面的东西放到[]的前面。例如,数组的定义为:存储类型 变量名字[元素个数]; —> 数组类型short [20] —> 定义数组short[20] arr(这样更易于理解,但没有这种写法) —> short arr[20];
因为将fun2的值赋值给了 p,所以下面两种调用是一致的:

    p(10,20); // fun2(10,20);
  • 形参
	void fun(short s, int *p){}short a = 10;int b = 20;fun(a, &b);
    值传递 : 将变量的值,直接传给形参 // 比如 a 址传递 : 将变量的地址,传给形参   // 比如 &b 
  	void fun(int x, int *p){}int a = 10;int b = 20;int *xp = &b;fun(a, xp);  // xp 是一个 值传递 而相对于 b 来说,这才是一个址传递

请添加图片描述

#include <stdio.h>int fun(int x, int y);
int main(void)
{int a = 10, b = 20;fun(a, b); //调用fun函数 --> 在内存中给 fun 函数开辟空间printf("%d %d\n", a, b); //a,b 没有变化,因为CPU的寄存器中,fun值传递后,内存被释放,a,b的值不变fun2(&a); // 址传递,获取到了a空间中存储的值,在内存中开辟fun2 空间,p 指针类型(32位 4个字节/64位 8个字节)printf("a:%d b:%d\n", a, b); // 300 20  // *&x ---> x return 0;
}int fun(int x, int y)
{x = 100;y = 200;return x+y;
}void fun2(int *p)
{*p = 300; //地址传递,指针 p 解引用可以获取到这个指针指向的对应的空间,它可以改变函数外面的某一个变量 传递结束后,fun2 被释放
}    
//因此 scanf("%d",&a); 函数中的传参是取地址传递,与上述 fun2 同理,因为值传递内存释放后原有的数值不发生改变 而地址传递会获取到“房间”中的值,并改变这个地址中存储的内容//函数的返回值 --> 定义与返回值前后一致
int *fun(void) 
{int *p;return p;
}

以上。便是值传递和地址传递的区别。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!

相关文章:

【C语言】值传递和地址传递

值传递 引用传递&#xff08;传地址&#xff0c;传引用&#xff09;的区别 传值&#xff0c;是把实参的值赋值给行参 &#xff0c;那么对行参的修改&#xff0c;不会影响实参的值。 传地址&#xff0c;是传值的一种特殊方式&#xff0c;只是他传递的是地址&#xff0c;不是普通…...

PyTorch 中使用自动求导计算梯度

使用 PyTorch 进行自动求导和梯度计算 在 PyTorch 中&#xff0c;张量的 requires_grad 属性决定了是否需要计算该张量的梯度。设置为 True 的张量会在计算过程中记录操作&#xff0c;以便在调用 .backward() 方法时自动计算梯度。通过构建计算图&#xff0c;PyTorch 能够有效…...

Oracle Instant Client 23.5安装配置完整教程

Oracle Instant Client 23.5安装配置完整教程 简介环境要求安装步骤1. 准备工作目录2. 下载Oracle Instant Client3. 解压Instant Client4. 安装依赖包5. 配置系统环境5.1 配置库文件路径5.2 配置环境变量 6. 配置Oracle钱包&#xff08;可选&#xff09; 验证安装常见问题解决…...

【jvm】方法区的理解

目录 1. 说明2. 方法区的演进3. 内部结构4. 作用5.内存管理 1. 说明 1.方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据。它是各个线程共享的内存区域。2.尽管《Java虚拟机规范》中把方法区描述为堆的一个逻辑部分&#xff0c;但它却…...

ES-针对某个字段去重后-获取某个字段值的所有值

针对上面表的数据&#xff0c;现在想根据age分组&#xff0c;并获取每个分组后的name有哪些(去重后)。 select age, GROUP_CONCAT(DISTINCT(name)) from testtable group by age ; 结果&#xff1a; 如果想要增加排序&#xff1a; SELECT age, GROUP_CONCAT(DISTINCT name)…...

百度 2025届秋招提前批 文心一言大模型算法工程师

文章目录 个人情况一面/技术面 1h二面/技术面 1h三面/技术面 40min 个人情况 先说一下个人情况&#xff1a; 学校情况&#xff1a;211本中9硕&#xff0c;本硕学校都一般&#xff0c;本硕都是计算机科班&#xff0c;但研究方向并不是NLP&#xff0c;而是图表示学习论文情况&a…...

sglang 部署Qwen2VL7B,大模型部署,速度测试,深度学习

sglang 项目github仓库&#xff1a; https://github.com/sgl-project/sglang 项目说明书&#xff1a; https://sgl-project.github.io/start/install.html 资讯&#xff1a; https://github.com/sgl-project/sgl-learning-materials?tabreadme-ov-file#the-first-sglang…...

fastadmin操作数据库字段为json、查询遍历each、多级下拉、union、php密码设置、common常用函数的使用小技巧

数据库中遇到的操作 查询字段是json的某个值 //获取数据库中某个字段是json中得某个值&#xff0c;进行查询&#xff0c;goods是表中字段&#xff0c;brand_id是json中要查詢的字段。//数据类型一定要对应要不然查询不出来。$map[json_extract(goods, "$.brand_id")]…...

UniApp在Vue3的setup语法糖下自定义组件插槽详解

UniApp在 Vue3的 setup 语法糖下自定义组件插槽详解 UniApp 是一个基于 Vue.js 的跨平台开发框架&#xff0c;可以用来开发微信小程序、H5、App 等多种平台的应用。Vue 3 引入了 <script setup> 语法糖&#xff0c;使得组件的编写更加简洁和直观。本文将详细介绍如何在 …...

springboot上传下载文件

RequestMapping(“bigJson”) RestController Slf4j public class TestBigJsonController { Resource private BigjsonService bigjsonService;PostMapping("uploadJsonFile") public ResponseResult<Long> uploadJsonFile(RequestParam("file")Mul…...

Python学习从0到1 day29 Python 高阶技巧 ⑦ 正则表达式

目录 一、正则表达式 二、正则表达式的三个基础方法 1.match 从头匹配 2.search&#xff08;匹配规则&#xff0c;被匹配字符串&#xff09; 3.findall&#xff08;匹配规则&#xff0c;被匹配字符串&#xff09; 三、元字符匹配 单字符匹配&#xff1a; 注&#xff1a; 示例&a…...

机器学习-web scraping

Web Scraping&#xff0c;通常称为网络抓取或数据抓取&#xff0c;是一种通过自动化程序从网页中提取数据的技术。以下是对Web Scraping的详细解释&#xff1a; 一、定义与原理 Web Scraping是指采用技术手段从大量网页中提取结构化和非结构化信息&#xff0c;并按照一定的规…...

移远通信5G RedCap模组RG255C-CN通过中国电信5G Inside终端生态认证

近日&#xff0c;移远通信5G RedCap模组RG255C-CN荣获中国电信颁发的5G Inside终端生态认证证书。这表明&#xff0c;该产品在5G基本性能、网络兼容性、安全特性等方面已经过严格评测且表现优异&#xff0c;将进一步加速推动5G行业终端规模化应用。 中国电信5G Inside终端生态认…...

Javaweb梳理17——HTMLCSS简介

Javaweb梳理17——HTML&CSS简介 17 HTML&CSS简介17.1 HTML介绍17.2 快速入门17.3 基础标签17.3 .1 标题标签17.3.2 hr标签17.3.3 字体标签17.3.4 换行17.3.8 案例17.3.9 图片、音频、视频标签17.3.10 超链接标签17.3.11 列表标签17.3.12 表格标签17.3.11 布局标签17.3.…...

【Android、IOS、Flutter、鸿蒙、ReactNative 】自定义View

Android Java 自定义View 步骤 创建一个新的Java类&#xff0c;继承自View、ViewGroup或其他任何一个视图类。 如果需要&#xff0c;重写构造函数以支持不同的初始化方式。 重写onMeasure方法以提供正确的测量逻辑。 重写onDraw方法以实现绘制逻辑。 根据需要重写其他方法&…...

win11跳过联网激活步骤

win11跳过联网激活步骤 win11跳过联网激活步骤方法一&#xff1a;使用Shift F10快捷键&#xff08;推荐&#xff09;1. 启动Windows 112. 选择键盘布局或输入法3. 是否想要添加第二种键盘布局4. 让我们为你连接到网络5. 调出管理员模式CMD6. 耐心等待自动重启7. 启动Windows 1…...

利用c语言详细介绍下冒泡排序

软件开发过程中&#xff0c;排序算法是常规且使用众多的方法之一&#xff0c;而冒泡算法又是排序算法中最常规且基本的算法。今天我们利用c语言&#xff0c;图文详细介绍下冒泡算法。 一、图文介绍 我们输入一个数组&#xff0c;数组为【10&#xff0c;5&#xff0c;3&#xf…...

C# 面向对象

C# 面向对象编程 面向过程&#xff1a;一件事情分成多个步骤来完成。 把大象装进冰箱 (面向过程化设计思想)。走一步看一步。 1、打开冰箱门 2、把大象放进冰箱 3、关闭冰箱门 面向对象&#xff1a;以对象作为主体 把大象装进冰箱 1、抽取对象 大象 冰箱 门 &#xff0…...

android wifi扫描的capability

混合型加密android11 8155与普通linux设备扫描到的安全字段差别 android应用拿到关于wifi安全的字段&#xff1a; systembar-WifiBroadcastReceiver---- scanResult SSID: Redmi_697B, BSSID: a4:39:b3:70:8c:20, capabilities: [WPA-PSK-TKIPCCMP][WPA2-PSK-TKIPCCMP][RSN-PSK…...

datawhale 2411组队学习:模型压缩4 模型量化理论(数据类型、int8量化方法、PTQ和QWT)

文章目录 一、数据类型1.1 整型1.2 定点数1.3 浮点数1.3.1 正规浮点数&#xff08;fp32&#xff09;1.3.2 非正规浮点数&#xff08;fp32&#xff09;1.3.3 其它数据类型1.3.4 浮点数误差1.3.5 浮点数导致的模型训练问题 二、量化基本方法2.1 int8量化2.1.1 k-means 量化2.1.2 …...

League-Toolkit:提升英雄联盟竞技效率的智能辅助工具集

League-Toolkit&#xff1a;提升英雄联盟竞技效率的智能辅助工具集 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolki…...

低成本自动化方案:OpenClaw+Qwen3-32B替代SaaS API调用实测

低成本自动化方案&#xff1a;OpenClawQwen3-32B替代SaaS API调用实测 1. 为什么选择本地AI自动化方案 去年我在处理海外客户邮件时&#xff0c;每月需要支付近200美元的SaaS服务费。这些费用主要消耗在邮件分类、摘要生成和自动回复等基础功能上。当我发现OpenClaw框架可以对…...

League-Toolkit英雄联盟工具集启动故障解决方案

League-Toolkit英雄联盟工具集启动故障解决方案 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit作为一款基于LCU A…...

黑马点评技术汇总(一)验证码登录

一、session实现验证码登录总思路&#xff1a; 前端提交手机号发起code请求&#xff0c;服务端校验手机号是否符合格式&#xff0c;成功后生成验证码存入session并发送给用户。 用户提交手机号和验证码验证手机是否符合格式&#xff08;这里有个bug&#xff09;验证码是否和ses…...

电工必看:正弦交流电路中的相量法实战技巧(附计算示例)

电工必看&#xff1a;正弦交流电路中的相量法实战技巧&#xff08;附计算示例&#xff09; 在电气工程领域&#xff0c;正弦交流电路的分析是每位电工和电气工程师必须掌握的核心技能。面对复杂的电路计算&#xff0c;传统的三角函数解析法往往让从业者陷入繁琐的运算泥潭。相量…...

AHT20传感器数据漂移?STM32硬件I2C与软件模拟的稳定性对比测试

STM32硬件I2C与软件模拟I2C在AHT20传感器应用中的稳定性深度解析 工业级环境监测系统对温湿度数据的可靠性有着严苛要求。AHT20作为一款高精度温湿度传感器&#xff0c;其数据采集的稳定性直接关系到整个系统的可信度。本文将深入探讨STM32平台下硬件I2C与GPIO模拟I2C两种实现方…...

终极指南:Windows虚拟磁盘驱动器的完整解决方案ImDisk深度解析

终极指南&#xff1a;Windows虚拟磁盘驱动器的完整解决方案ImDisk深度解析 【免费下载链接】ImDisk ImDisk Virtual Disk Driver 项目地址: https://gitcode.com/gh_mirrors/im/ImDisk ImDisk Virtual Disk Driver是一款专为Windows系统设计的虚拟磁盘驱动解决方案&…...

HunyuanVideo-Foley实战案例:为AI生成视频自动匹配Foley音效工作流

HunyuanVideo-Foley实战案例&#xff1a;为AI生成视频自动匹配Foley音效工作流 1. 项目背景与价值 在视频制作领域&#xff0c;Foley音效&#xff08;环境音、动作音效等&#xff09;的创作往往需要专业录音设备和大量人工处理。HunyuanVideo-Foley创新性地将视频生成与音效生…...

nli-distilroberta-base环境部署:Docker容器内Python依赖与模型权重加载验证

nli-distilroberta-base环境部署&#xff1a;Docker容器内Python依赖与模型权重加载验证 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务。它能智能分析两个句子之间的关系&#xff0c;判断它们之间的逻辑关联。这项技术在智能客…...

CSS线性渐变实战:5分钟搞定炫酷按钮背景(附完整代码)

CSS线性渐变实战&#xff1a;5分钟搞定炫酷按钮背景&#xff08;附完整代码&#xff09; 最近在重构一个企业官网时&#xff0c;产品经理突然要求把所有按钮的纯色背景换成"更有设计感"的效果。面对30多个不同尺寸的按钮&#xff0c;手动设计图片背景显然不现实。这时…...