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

【C++】如何理解函数调用中的传值和传址

一.代码用例

        本篇文章使用以下代码进行阐述说明:

#include <Windows.h>

void SwapValue(int x,int y)
{
	int t = 0;
	t = x;
	x = y;
	y = t;
	printf("x = %d,y = %d\n",x,y);
}

void SwapAddress(int* x,int* y)
{
	int t = 0;
	t = *x;
	*x = *y;
	*y = t;
	printf("x = %d,y = %d\n", *x, *y);
}

int main()
{
	int a = 3;
	int b = 2;
	
	SwapValue(a,b);
	//SwapAddress(&a,&b);

	printf("a = %d,b = %d\n",a,b);
	system("pause");

    return 0;
}

二.形参和实参

        什么是形参?比如有以下的交换数值函数:

         

         其中int x,和int y就是形参,为什么叫形参?因为它们是没有数值的参数,类似两个没有装东西的瓶子:

        

        函数里面定义了这两个瓶子需要怎么用(例子中就是把两个瓶子里面的内容交换过来),这种行为就和数学中的函数表达式一样

         比如公式:ax+by=c,x和y就是形参,只有确定了x和y具体等于多少,再根据公式计算才能得出结果:

        图上在主函数中把具体数值传输到交换函数中去,这就是实参

 

 三.传值

        其实传值的具体核心上面已经全部讲完了,当主函数中把a和b的值复制一份给了X和Y,这样就导致四个瓶子里面有四个值:

        紧接着,瓶子x和y根据函数规则进行交换,从而使得两个瓶子的数值调换:

        所以可以得出最后的结果:

         总结:函数调用中的传值是把实参中的数据复制一份给形参,所以两个参数之间互不相干

四.传址

        传址的意思就是把实参的地址直接给了形参,让形参通过地址来修改真正的值,在例子中就相当于两个形参x和y把a和b连数据带瓶子全部装进了瓶子中:

        然后再根据函数所示把瓶子里面的值进行互换:

        代码如下:

        输出之后你就会发现如下结果:

        总结:函数调用中的传址是把实参的本体放到了形参里,所以两个参数之间会互相干扰。

        题外话:如果将代码改成这样:

        效果就会变成和传值一样:

        因为这个的意思就是把瓶子X和瓶子Y里面的瓶子a和瓶子b互换:

            如果你不知道是为什么,那就快快拿起你的笔记本去学习一下指针的相关知识~~ 

相关文章:

  • 糖尿病会隐身,这些信号一定要重视
  • 智能驾驶功能软件平台设计规范第五部分:定位功能服务接口
  • 框架阶段六:SpringCloud
  • 《effecttive C++》和一些其他C++开发的东西的学习总结(长期更新)
  • 登录测试用例
  • hadoop笔记——YARN部署
  • 目前全球生物识别市场规模迅速扩张,虹膜识别技术也发展迅猛
  • kafka原理解读
  • Java架构师技能点面试题汇总消息队列面试题
  • ora-00922-error-message文档
  • 1-十八烷基-3-三乙氧基丙基硅烷咪唑溴盐离子液体([ODTIm]Br)修饰Fe3O4磁性纳米颗粒
  • Android:滚动字幕
  • 美容仪器设计市场是什么行情?
  • 第九章Redis持久化
  • 申请外观设计专利多少钱?
  • 「面试题」如何实现一个圣杯布局?
  • 【剑指offer】让抽象问题具体化
  • Android开源项目规范总结
  • CEF与代理
  • Cookie 在前端中的实践
  • gf框架之分页模块(五) - 自定义分页
  • javascript面向对象之创建对象
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Laravel Mix运行时关于es2015报错解决方案
  • Linux中的硬链接与软链接
  • node学习系列之简单文件上传
  • SwizzleMethod 黑魔法
  • 阿里研究院入选中国企业智库系统影响力榜
  • 翻译:Hystrix - How To Use
  • 每天一个设计模式之命令模式
  • 我感觉这是史上最牛的防sql注入方法类
  • 我是如何设计 Upload 上传组件的
  •  一套莫尔斯电报听写、翻译系统
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 仓管云——企业云erp功能有哪些?
  • 国内开源镜像站点
  • ​力扣解法汇总946-验证栈序列
  • (1)(1.13) SiK无线电高级配置(六)
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)负载均衡,回话保持,cookie
  • .NET Standard 的管理策略
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • /etc/sudoers (root权限管理)
  • @ModelAttribute 注解
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @ResponseBody
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [AX]AX2012 R2 出差申请和支出报告
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • [C#]winform部署yolov9的onnx模型
  • [CSDN首发]鱿鱼游戏的具体玩法详细介绍
  • [Django ]Django 的数据库操作
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件