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

【入门级-C++程序设计:9、函数与递归-传值参数与传引用参数】

在 C++ 中,函数参数传递有两种主要方式:传值参数(pass-by-value)和传引用参数(pass-by-reference),它们在内存处理和使用效果上有显著区别。
1、 传值参数
原理:将实参的值复制一份,传递给函数的形参。函数内部对形参的修改不会影响外部实参。
特点:会创建参数的副本,额外占用内存;适合传递基本数据类型或占用内存少的小型对象。
举例说明:
#include
using namespace std;
// 传值参数:修改形参不影响实参
void increment(int num)
num++;
cout << “函数内:” << num << endl; // 输出 11
}
int main() {
int a = 10;
increment(a); // 将形参a进行传递
cout << “函数外:” << a << endl; // 输出 10(未被修改)
return 0;
}
main函数中a为10,进行函数调用的时候,只是将实参a的值传递给形参num,此时num的值也为10,在子函数increment中,输出num为11。

2、传引用参数
原理:将实参的内存地址传递给形参,形参是实参的 “别名”。函数内部对形参的修改会直接影响外部实参。
声明方式:在参数类型后加“&”符号。
特点:不创建副本,直接操作原变量;适合传递大型对象(避免复制开销)或需要修改实参的场景。
举例说明:
#include
using namespace std;
// 传引用参数:修改形参会影响实参
void increment(int &num) { // & 表示引用
num++;
cout << “函数内:” << num << endl; // 输出 11
}
int main() {
int a = 10;
increment(a); // 将形参a进行传递
cout << “函数外:” << a << endl; // 输出 11(被修改)
return 0;
}

3、常量引用
如果希望传递引用(避免参数复制)但不允许修改原始数据,可以使用常量引用(const &)
举例说明:
#include
using namespace std;
// 常量引用:不能修改参数值
void print(const int &num) {
//num++; // 错误:常量引用不可修改
cout << num << endl;
}
int main() {
int a = 10;
print(a); // 输出 10
return 0;
}

总结:
若只需使用参数的值,无需修改原始数据:优先用传值(简单类型)或常量引用(大型数据)。
若需要修改原始数据,或传递大型数据以提高效率:使用传引用。
常量引用(const &)是传递大型只读数据的最佳实践(兼顾效率和安全性)。

http://www.dtcms.com/a/320809.html

相关文章:

  • 数据持久化 —— `chrome.storage` 的记忆魔法
  • 服务器硬件电路设计之I2C问答(一):为什么I2C总线要加上拉电阻?
  • 华为USG防火墙双机,但ISP只给了1个IP, 怎么办?
  • WinForm 对话框的 Show 与 ShowDialog:阻塞与非阻塞的抉择
  • Java机密计算新维度:基于AMD SEV-ES的Enclave数据湖安全架构
  • 离线安装大语言模型管理工具Ollama
  • ArgoCD 与 GitOps:K8S 原生持续部署的实操指南
  • 使用 Grunt 替换 XML 文件中的属性值
  • Linux下GCC的C++实现Hive到Snowflake数据迁移
  • 在Java中,守护线程(Daemon Thread)和用户线程(User Thread)以及本地线程(Native Thread)的区别
  • 豆包新模型+PromptPilot:AI应用开发全流程实战指南
  • 深入掌握Prompt工程:高效构建与管理智能模型提示词全流程实战
  • Flutter Packge - 组件应用
  • [链表]142. 环形链表 II
  • 【洛谷题单】--分支结构(二)
  • 为什么需要锁升级?从CPU缓存到JVM的优化艺术
  • Autosar AP中Promise和Future的异步消息通信的详细解析
  • Kotlin 数据容器 - MutableList(MutableList 概述、MutableList 增删改查、MutableList 遍历元素)
  • 【JVM】流程汇总
  • OpenSCA开源社区每日安全漏洞及投毒情报资讯—2025年8月7日
  • OCC 主要库和功能模块
  • AI对互联网公司职位改变?
  • Android 系统的基本安全属性
  • 恒科持续低迷:新能源汽车股下跌成拖累,销量担忧加剧
  • ZCC3094--30V,-500mA超低噪声线性稳压电源
  • HFSS许可证常见问题及解决方案
  • 分享超图提供的、很不错的WebGIS学习资源
  • 分布式微服务--GateWay的断言以及如何自定义一个断言
  • 【昇腾】基于RK3588 arm架构Ubuntu22.04系统上适配Atlas 200I A2加速模块安装EP模式下的驱动固件包_20250808
  • simulink tlc如何通过tlc写数据入文件