当前位置: 首页 > 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.lryc.cn/news/614478.html

相关文章:

  • DMA伟大的数据搬运工
  • Dixon‘s 因子分解法——C语言实现
  • [GESP2023012 五级] 2023年12月GESP C++五级上机题题解,附带讲解视频!
  • 《算法导论》第 12 章 - 二叉搜索树
  • 三极管驱动电路的原理详解
  • GDB 调试全方位指南:从入门到精通
  • Go语言实战案例:用net/http构建一个RESTful API
  • Django缓存机制详解:从配置到实战应用
  • Java选手如何看待Golang
  • 疯狂星期四文案网第33天运营日记
  • 供电架构之供电构型分类
  • 题解:P13646 [NOISG 2016] LunchBox
  • Linux学习-数据结构(哈希表)
  • 代码随想录算法训练营第三十八天、三十九天|动态规划part11、12
  • 视频质量检测中准确率↑32%:陌讯多模态评估方案实战解析
  • 深入掌握Prompt工程:高效构建与管理智能模型提示词全流程实战
  • Node.js版本管理,方便好用
  • (1-9-2)Java 工厂模式
  • 解码华为云安全“铁三角”:用“分层防御”化解安全挑战
  • FFmpeg 视频旋转信息处理:3.4 vs 7.0.2
  • 剪映里面导入多张照片,p图后如何再导出多张照片?
  • centos系统配置防火墙
  • 基于深度学习的nlp
  • 2025.08.08 反转链表
  • 强化学习全流程开发:从环境搭建到智能体对弈的DQN与Actor-Critic实现
  • 使用 ast-grep 精准匹配指定类的方法调用(以 Java 为例)
  • TDSQL GTS文件说明
  • Mysql与Ooracle 索引失效场景对比
  • 大语言模型提示工程与应用
  • Node.js 》》数据验证 Joi 、express-joi