C++ 入门学习经验 05——指针(一):从交换变量开始,搞懂值传递、指针和引用
大家好啊这里是土豆的博客一个正在努力学习技术的大学生。前面两篇我们聊了递归也用几个例子看到了有时候代码只是顺序换了一下结果就完全不一样。那今天这篇咱们来聊另一个很多初学者都会遇到的问题为什么我在函数里面明明改了变量回到主函数里却一点变化都没有这个问题其实特别适合用来引出 C 里面几个很重要的概念值传递、指针和引用。这几个东西刚开始看确实容易绕但只要从“函数到底拿到的是什么”这个角度去理解就会清楚很多。好了废话不多说咱们直接开始。简单案例交换函数我们先看一段代码。你觉得它会输出什么#include iostream using namespace std; void swap(int a, int b) { int temp a; a b; b temp; } int main() { int x 3, y 5; swap(x, y); cout x y endl; // 期待输出 5 3 ? return 0; }先暂停一下自己想一想。运行结果其实是3 5—— 完全没有交换。怎么回事明明 swap 函数里已经交换了a 和 b为什么外面的 x 和 y 没变这就要引出初学者最容易踩的第一个坑值传递。下面我们就开始讲讲要怎么理解这部分内容值传递函数里的变量是“复印件”在 C 里如果我们直接把变量传给函数比如swap(x, y)函数里面的a和b并不是原来的x和y而是它们的副本。可以这样理解你把一份资料复印给别人别人把复印件改得再多也不会影响你手里的原件。所以刚才那段代码真正发生的过程大概是这样main里面有两个变量x 3y 5。调用swap(x, y)时把x和y的值复制了一份分别给了a和b。函数里面交换的是a和b这两个副本。函数结束后a和b被销毁。原来的x和y从头到尾都没有被改过。所以这就是我们常说的函数里改了外面却没变。那如果我就是想让函数真的改到外面的变量该怎么办呢很自然的想法就是不要只给函数一份复印件而是告诉它原变量在哪里。这就引出了指针。指针保存地址的变量指针这个词刚听起来可能有点抽象但先不用想得太复杂。咱们可以先记住一句话指针就是用来保存地址的变量。比如int x 10; int* p x;这里有两个符号需要注意x表示取出变量x的地址。int* p表示p是一个指针变量它里面存的是一个int类型变量的地址。那既然p里面存着x的地址我们就可以通过p找到x这一步叫解引用cout *p endl; // 输出 10这里的*p就可以理解成顺着 p 里面保存的地址找到那个变量的值。所以如果要真正交换两个变量就可以把变量的地址传进函数void swapByPointer(int* a, int* b) { int temp *a; *a *b; *b temp; } ​ int main() { int x 3, y 5; swapByPointer(x, y); cout x y endl; return 0; }这次输出就是5 3因为函数拿到的不再是x和y的复印件而是它们的地址。函数通过地址找到了原变量所以修改就真的生效了。不过大家可能也发现了指针写起来会多一些*和刚开始很容易看晕。那有没有一种写法既能改到原变量又看起来更像普通变量呢有这就是引用。引用给变量起一个“别名”引用可以简单理解成给一个变量起了另一个名字。比如int x 10; int ref x; ref 20; ​ cout x endl; // 输出 20这里ref是x的引用也就是x的别名。我们修改ref其实就是在改x。所以交换两个变量时也可以这样写void swapByReference(int a, int b) { int temp a; a b; b temp; } ​ int main() { int x 3, y 5; swapByReference(x, y); cout x y endl; return 0; }这次同样会输出5 3引用的好处就是调用的时候很自然还是直接写swapByReference(x, y)但是函数内部拿到的不是副本而是原变量的别名。所以我觉得初学的时候可以这样记值传递看成复印件指针 地址引用 别名。三种方式简单对比为了方便理解咱们放在一起看一下方式函数参数写法调用时写法能不能改外面的变量值传递int afunc(x)不能指针传递int* afunc(x)能引用传递int afunc(x)能这里最容易混的地方就是两个在int ref x;里面表示引用。在x里面表示取地址。它们长得一样但出现在不同位置时意思是不一样的。这个刚开始不用死记硬背多看几段代码就会慢慢熟悉。指针和引用还有一个重要区别引用和指针都能让函数改到外面的变量但它们并不完全一样。引用一般定义时就要绑定到一个变量并且后面不能再改成引用别的变量int x 10, y 20; int ref x; ref y; // 这不是让 ref 改绑到 y而是把 y 的值赋给 x而指针就更灵活一点它可以先指向x后面再指向y也可以指向空int x 10, y 20; int* p x; p y; p nullptr;所以简单来说引用更像固定的别名用起来简洁。指针更像可以改变方向的地址变量更灵活但也更需要小心。至于什么时候用指针什么时候用引用这个后面结合数组、函数返回值、动态内存的时候会更好理解。今天先把最基础的概念弄清楚就行。写在最后今天咱们从一个简单交换函数的例子入手搞清楚了值传递类比复印件不改原件。指针传递传地址能改原件但写法稍复杂。引用传递别名能改原件写法简洁。所以只是参数的形式换一下——加个或*结果就不一样了。后面我们会继续聊数组与指针的关系、动态内存分配等等。如果你对指针还觉得晕没关系多练习写几遍自然就熟了。如果这篇文章对你有帮助麻烦点赞、关注和收藏吧谢谢有什么问题或者想法欢迎在评论区留言我们一起交流我们下篇见

相关新闻

Figma AI转代码不是替代开发者,而是淘汰不会Prompt Engineering的前端工程师(附MIT实验室认证的12个高阶提示词模板)

Figma AI转代码不是替代开发者,而是淘汰不会Prompt Engineering的前端工程师(附MIT实验室认证的12个高阶提示词模板)

更多请点击: https://intelliparadigm.com 第一章:Figma AI转代码的本质:一场前端工程范式的静默革命 Figma AI转代码并非简单的“设计图→HTML”映射工具,而是将UI设计语言、组件语义与前端工程约束深度融合的智能编译器。它背后…

2026/7/14 18:35:53阅读更多 →
RuoYi框架二次开发系列(三)第三方功能集成实战(OSS、短信、登录、支付)生产级方案

RuoYi框架二次开发系列(三)第三方功能集成实战(OSS、短信、登录、支付)生产级方案

在前两篇文章中,我们搞定了RuoYi基础开发规范、CRUD高效开发、核心数据权限体系,解决了框架基础开发、数据安全两大核心问题。但企业级后台系统想要落地商用,必须依赖各类第三方服务:文件存储、短信验证、快捷登录、在线支付等。 …

2026/7/14 18:35:53阅读更多 →
为什么你的ComfyUI人脸总像“蜡像”?——面部修复节点底层渲染机制首次公开(含Diffusion Attention热力图)

为什么你的ComfyUI人脸总像“蜡像”?——面部修复节点底层渲染机制首次公开(含Diffusion Attention热力图)

更多请点击: https://codechina.net 第一章:为什么你的ComfyUI人脸总像“蜡像”?——问题现象与核心症结 当你在ComfyUI中生成人像时,是否常遇到面部僵硬、缺乏微表情、皮肤质感塑料感强、眼神空洞等问题?这种“蜡像感…

2026/7/14 18:35:53阅读更多 →
2026年技术团队项目管理工具选型指南:ZenTao/GitLab/Jira/国产替代全方位对比

2026年技术团队项目管理工具选型指南:ZenTao/GitLab/Jira/国产替代全方位对比

2026 年了,如果你还在为"选什么项目管理工具"纠结——不是你在挑工具,是工具在挑你的命。一句话回答核心问题: 没有最好的项目管理工具,只有最适合你团队的方案。20-50 人团队优先选 GitLab Issue ZenTao 组合&#xf…

2026/7/14 19:35:59阅读更多 →
从零到精通:收藏这份AI学习路线,小白程序员也能抓住大模型红利!

从零到精通:收藏这份AI学习路线,小白程序员也能抓住大模型红利!

本文指出许多人在学习AI时因缺乏系统规划、理论与实践脱节、学用结合困难等原因而半途而废。文章提出了一套从AI基础到算法、CV、NLP、Agent、强化学习、多模态与大模型的完整学习路线,包含7大模块和3大实战篇,旨在帮助学员构建系统知识体系,…

2026/7/14 19:35:58阅读更多 →
小白程序员轻松入门大模型:手把手教你打造企业级RAG知识库

小白程序员轻松入门大模型:手把手教你打造企业级RAG知识库

本文介绍了如何利用RAG技术解决企业内部文档检索难题,从数据清洗、分块向量化到检索优化,详细阐述了每一步的实践经验和技巧。文章还分享了工业级RAG实施的关键点,如重排序提升信息密度、答案溯源增强可信度、改写优化降低检索难度等&#xf…

2026/7/14 19:35:58阅读更多 →
2026年小白程序员必备:AI编码重写开发范式,掌握这三门课领跑前端圈

2026年小白程序员必备:AI编码重写开发范式,掌握这三门课领跑前端圈

本文探讨了AI编码对前端开发范式的重写影响,提出了三个核心范式:从“写代码”到“描述Review”的Vibe Coding,AI原生应用架构下前端的新角色,以及AI生成UI带来的语义优先开发模式。文章强调,AI编码不仅是工具的辅助&am…

2026/7/14 19:35:58阅读更多 →
见证荣耀:瑞芯微荣膺ICA年度最具市场竞争力品牌,触觉智能深度同行

见证荣耀:瑞芯微荣膺ICA年度最具市场竞争力品牌,触觉智能深度同行

6月26日,2026工业控制产业发展峰会暨ICA金控奖颁奖盛典在苏州隆重举行。瑞芯微凭借在工业赛道持续爆发的市场表现、完善的芯片产品矩阵与海量行业落地案例,从众多参评企业中脱颖而出,成功斩获含金量十足的「年度最具市场竞争力品牌奖」。触觉…

2026/7/14 19:35:58阅读更多 →
Linux排障必备:10个高效命令组合实战

Linux排障必备:10个高效命令组合实战

1. 线上排障必备:10个Linux命令的实战价值在服务器运维和线上问题排查中,Linux命令是工程师最锋利的武器。当系统出现异常时,90%的问题都能通过日志分析定位根源。但面对动辄几个GB的日志文件,如何快速锁定关键信息?这…

2026/7/14 19:30:58阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/14 4:56:14阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/14 2:55:05阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/14 6:17:41阅读更多 →
【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

更多请点击: https://intelliparadigm.com 第一章:Cursor数据库安全红线概览 Cursor 作为一款基于 AI 的智能编程助手,其本地数据库(SQLite 存储)承载着用户代码片段、会话历史、自定义规则及敏感上下文信息。理解其安…

2026/7/14 0:03:18阅读更多 →
【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

更多请点击: https://codechina.net 第一章:Notion AI写作辅助的底层能力边界认知 Notion AI 并非通用大语言模型的直接封装,而是基于 Llama 系列与自研微调模型构建的轻量化推理服务,其输入上下文窗口严格限制在 8192 token&…

2026/7/14 0:03:18阅读更多 →
AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

更多请点击: https://kaifayun.com 第一章:AI Agent数据越界行为的合规性挑战与溯源必要性 AI Agent在自主执行任务过程中,可能因提示注入、上下文污染或权限配置缺陷,无意或有意访问、缓存、传输受保护数据(如PII、G…

2026/7/14 0:03:18阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/14 15:07:30阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/14 4:45:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/14 2:42:17阅读更多 →