DS-1 传值与传引用

一、本质

  1. 传值(Pass by Value)拷贝一份给别人,别人改复印件,原件不动。

  2. 传引用(Pass by Reference)直接给原件,别人改的就是你的原件。

二、代码对比(C++)

1. 传值

cpp 复制代码
void func(int x) {  // x 是 a 的复制品
    x = 100;        // 只改复制品
}

int main() {
    int a = 10;
    func(a);        // 传值
    cout << a;      // 输出:10(原值没变!)
}

2. 传引用

cpp 复制代码
void func(int& x) { // x 就是 a 本身(别名)
    x = 100;        // 直接改 a
}

int main() {
    int a = 10;
    func(a);        // 传引用
    cout << a;      // 输出:100(原值被改了!)
}

三、区别

对比点 传值 传引用
是否复制数据 会复制,耗内存、速度慢 不复制,省内存、速度极快
能否修改原值 不能改,安全 能改,灵活
适用场景 简单小数据、不想被改 大数据、需要修改、提高性能

四、应用场景

  1. 数据小 (int、char)→ 传值(安全、简单)

  2. 数据大 (数组、对象、字符串)→ 传引用(快、省内存)

  3. 想在函数里修改变量传引用

  4. 不想被修改但要高效const 传引用(最常用!)

cpp 复制代码
// 不修改数据,又要高效 → 万能写法
void func(const int& x) { ... }
相关推荐
寒秋花开曾相惜3 小时前
(学习笔记)第四章 处理器体系结构
linux·网络·数据结构·笔记·学习
低代码布道师5 小时前
微搭低代码MBA 培训管理系统实战 30——学习卡
学习·低代码·rxjava
南無忘码至尊5 小时前
Unity学习90天 - 第 6天 - 学习协程 Coroutine并实现每隔 2 秒生成一波敌人
学习·unity·c#·游戏引擎
LN花开富贵5 小时前
【ROS】鱼香ROS2学习笔记二
linux·笔记·python·学习·嵌入式
檬柠wan6 小时前
MySQL-数据库增删改查学习
数据库·学习·mysql
ouliten6 小时前
C++笔记:std::invoke
c++·笔记
minglie16 小时前
Zynq 开发中的工程文件管理
学习
炽烈小老头8 小时前
【每天学习一点算法 2026/04/16】逆波兰表达式求值
学习·算法
千寻girling8 小时前
机器学习 | 线性回归 | 尚硅谷学习
学习·机器学习·线性回归
风曦Kisaki9 小时前
# LAMP 架构 + Discuz! 论坛实战笔记
笔记·架构