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) { ... }
相关推荐
ALINX技术博客2 小时前
【黑金云课堂笔记】第一~二期FPGA知识点总结
笔记·fpga开发
solicitous2 小时前
历史与术语
学习·c#
悠哉悠哉愿意2 小时前
【单片机学习笔记】第十一届省赛复盘
笔记·单片机·嵌入式硬件·学习
oi..2 小时前
Flag入门—修改数据包拿到答案
笔记·测试工具·安全·网络安全
报错小能手2 小时前
ios开发方向——Swift语言学习 为啥要学Swift?
学习·ios·swift
Xzq2105092 小时前
Mysql API学习
数据库·学习·mysql
马猴烧酒.2 小时前
【Java复习|Lambda表达式】Java Lambda 表达式、函数式接口与匿名内部类:从起源到原理
java·开发语言·ide·笔记·python·spring
風清掦2 小时前
【江科大STM32学习笔记-09】USART串口协议 - 9.2 USART串口数据包
笔记·stm32·单片机·嵌入式硬件·学习
happymaker06263 小时前
web前端学习日记——DAY07(js交互编程)
前端·javascript·学习