用生活日常的案例来介绍“程序运行时,对函数的调用一般有两种形式:传值调用和引用调用 和 这两种调用有什么区别?

核心概念:

函数调用:就像你请别人帮忙处理一个东西(比如修改一份文件)

传值调用:你把这个东西的复印件给别人。别人在复印件上修改,不会影响你手里的原件。

传值调用的精髓:函数内部操作的是原始数据的一个独立副本。函数里怎么该这个副本,都不会影响外面的原始数据。

引用调用:你直接把这个东西本身(或者存放它的柜子钥匙)给别人。别人直接修改原件,你手里的东西就真的被改变了

引用调用的精髓:函数内部操作的是通过地址找到的原始数据本身,函数里的修改会直接反映到原始数据上。

传值调用和引用调用的区别:

|----------|------------------------|---------------------------|
| 特性 | 传值调用 | 引用调用 |
| 传递东西 | 数据的副本(复印件) | 数据的地址/引用(共享连接/钥匙/位置信息) |
| 操作对象 | 函数内部操作是 原始数据的独立副本 | 函数内部操作的是原始数据本身(通过地址找到他) |
| 对原始数据的影响 | 不会改变函数外部的原始数据 | 会直接改变函数外部的原始数据 |
| 内存操作 | 在内存中创建参数的新拷贝 函数使用这个新拷贝 | 函数直接使用参数所指向的原始内存位置 |
| 生活比喻 | 给别人一份文件的复印件去修改 | 告诉别人共享文档的连接,让他们直接在原始文件上修改 |

代码展示:

复制代码
传值调用:
void swap(int a , int b )
{
    int temp;
    temp=a;
    a=b;
    b=temp;
}
执行完这个函数之后  a和b  的值是没有变化的!

引用调用:
void swap(int &a , int &b )
{
    int temp;
    temp=a;
    a=b;
    b=temp;
}
执行完这个函数之后 a和b 的值是发生了调换的

参考文章:传值调用与引用调用的个人见解_引用调用值调用后值分别为-CSDN博客

相关推荐
vx-程序开发15 分钟前
【计算机毕设】51300童装超市管理系统的设计与实现
java·vue.js·spring boot·源码·课程设计·毕设·大作业
ym hyd 11144 分钟前
题库建立与考试系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·vue.js·spring boot·毕设
risc1234561 小时前
什么是码点?
java
List<String> error_P1 小时前
freertos数据结构--链表
数据结构·链表
JavaPub-rodert1 小时前
公共 Docker 镜像源总失效?用 Harbor Proxy Cache 自建 Docker Hub 镜像缓存
java·缓存·docker
智鸟科技GemeOpen开发者智能设备1 小时前
平安校园 AI 智能实时告警系统 智鸟科技·GemeOpen + 谷华科技·融合创新方案白皮书
java·开发语言·python·物联网·智能家居
自强的小白2 小时前
nacos配置中心面试题(导入配置的优先级),注意是如果后导入相同配置是以 后导入优先。外部入优先和nacos的数据隔离。
java·微服务
Wang's Blog2 小时前
Java框架 SpringCloud 快速入门: Feign 的自定义配置与日志级别
java·开发语言·spring cloud
成旭先生2 小时前
企业全景信息查询 API:工商照面 33 项、股东出资、变更与社保一次查全
java·开发语言·api接口·企业信息查询·工商数据·风控尽调·供应商准入
longlongzihan2 小时前
LeetCode 128. 最长连续序列 —— 从排序到哈希集合
数据结构·c++·算法·leetcode·排序算法·哈希表