【C++】015、函数参数:值传递,指针传递,引用传递的区别 一、本质区别1、值传递是赋值粘贴函数内获取的副本不影响外部2、指针传递的是“邮寄地址”可通过地址间接修改外部对象3、引用传递的是别名绑定可直接操作原对象二、比对对比维度值传递指针传递引用传递传递内容实参的副本全新拷贝实参地址拷贝地址值实参的别名底层也是地址能否修改外部实参不能改的是副本能通过解引用*ptr能直接操作原对象内存开销打拷贝整个对象小拷贝8字节地址小空值null风险无有空指针需判断空无引用必须事先绑定对象代码#include iostream #include string // 1. 值传递改的是副本 void byValue(std::string s) { s _copy; // 只影响局部副本 } // 2. 指针传递通过地址修改原对象 void byPointer(std::string* s) { if (s) { // 必须判空 *s _ptr; } } // 3. 引用传递直接修改原对象 void byReference(std::string s) { s _ref; } int main() { std::string str Hello; byValue(str); std::cout str std::endl; // 输出 Hello未变 byPointer(str); std::cout str std::endl; // 输出 Hello_ptr byReference(str); std::cout str std::endl; // 输出 Hello_ptr_ref }三、引用使用场景1、需要修改实参void swap(int a, int b) { int tmp a; a b; b tmp; }2、传递大对象只读不写使用const引用void printVector(const std::vectorint v) { // 避免拷贝百万个元素 for (int x : v) std::cout x; }3、保留派生类信息实现多态class Animal { virtual void speak(){} }; class Cat : public Animal { void speak() override {} }; void play(Animal a) { a.speak(); } // 传 Cat 也能正确调用 Cat::speak()4、运算符重载int operator[](size_t idx) { return data[idx]; }四、使用指针的场景1、参数可选可能为空2、需要动态改变指针指向的对象指针可指向另外的对象地址而引用不允许3、与C语言交互C语言没有引用使用指针传递void*

相关新闻

最新新闻

Windows 7纯净版迅雷下载与安装全指南:版本选择、校验与驱动问题解决

Windows 7纯净版迅雷下载与安装全指南:版本选择、校验与驱动问题解决

1. 项目缘起与核心价值最近在整理一台老旧的办公电脑,系统还是Windows 7,需要重装。本以为找个系统镜像下载是件简单事,结果在网上兜兜转转了大半天,踩了不少坑。不是下载链接失效,就是速度慢得像蜗牛,要么…

2026/8/25 7:39:17
实验室移液工作站选购指南:手动、电动到自动化的升级路径

实验室移液工作站选购指南:手动、电动到自动化的升级路径

移液任务的升级很少一步到位。多数实验室从几把手动移液器起步,样本量上来后添置电动移液器,再往后,重复的孔板填充、连续稀释占据大量人手时,才考虑半自动或全自动移液工作站。每一步的投入从几百元到几十万元不等,跨…

2026/8/25 7:39:17
Python爬虫实战:从OP.GG抓取英雄联盟战绩数据并分析

Python爬虫实战:从OP.GG抓取英雄联盟战绩数据并分析

1. 项目缘起与核心价值 最近在社区里看到不少朋友在讨论游戏数据,尤其是《英雄联盟》的战绩分析。作为一个老玩家兼技术爱好者,我经常在想,如果能把自己或者关注的高手的对局数据系统地爬取下来,做点个性化的分析,比如…

2026/8/25 7:39:17
Android Studio 2024.3.1 安装与 AI 编程助手集成全攻略

Android Studio 2024.3.1 安装与 AI 编程助手集成全攻略

在实际 Android 开发中,从零开始配置一个高效、智能的开发环境,往往比写第一行代码更耗费精力。很多开发者卡在环境安装、依赖配置、工具集成这些前期步骤上,尤其是面对 Android Studio 这类大型 IDE 以及层出不穷的 AI 辅助编程工具时&#…

2026/8/25 7:39:17
利用OpenRouter与Inkling免费资源,从零构建AI智能体测试环境

利用OpenRouter与Inkling免费资源,从零构建AI智能体测试环境

在实际 AI 应用开发中,我们经常面临一个核心矛盾:一方面,我们需要快速测试和验证不同大语言模型(LLM)的能力,以找到最适合特定任务的模型;另一方面,直接对接各大模型厂商的 API 不仅…

2026/8/25 7:39:17
SaaS数据迁移困境与私有化部署解决方案

SaaS数据迁移困境与私有化部署解决方案

你是不是也遇到过这样的困境:公司决定停用某个SaaS系统,或者更换内部管理系统,结果发现几年积累的业务数据、客户信息、项目文档全都被“锁”在了旧系统里。导出功能要么没有,要么只能导出残缺的CSV,数据关系、附件、历…

2026/8/25 7:34:17