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

小学生学C++编程语法知识(C++函数 :7、指针传递)


C++函数 第七课

《神奇的遥控器——指针传递(Pointer Passing)》


本课学习目标

学完本课,同学们能够:

✅ 理解为什么函数还需要指针传递

✅ 理解指针传递就是"传地址"

✅ 掌握指针作为函数参数的写法

✅ 理解*&在函数参数中的作用

✅ 能区分值传递、引用传递和指针传递


第一幕:程序王国的新难题

1、上一节课。

我们已经学会了:

引用传递。


2、画图:

a ↑ ↓ x

修改:

x = 100;

其实就是:

a = 100;

3、既然:

引用已经可以修改变量。

为什么C++还要有:

指针传递?

是不是:

多此一举?


4、国王笑着说:

"当然不是!"

今天。

我们学习另一种魔法。


第二幕:电视遥控器的秘密

1、国王拿出一个电视。

问大家:

如果:

我们要换频道。

是不是:

要把电视搬过来?

当然不用。

我们只需要:

遥控器。


2、遥控器里面有什么?

不是电视。

而是:

电视的位置。


3、画图:

遥控器 ↓ 电视地址 ↓ 电视

程序也是一样。

有时候。

函数不需要整个变量。

它只需要:

变量所在的位置(地址)。


第三幕:地址是什么?

1、程序王国有很多房子。

100号房 ↓ 小明 200号房 ↓ 小红 300号房 ↓ 小刚

2、如果想找小明。

需要:

名字?

还是:

地址?

当然:

地址更准确。


3、变量也都有自己的地址。

例如:

int a = 10;

它在内存里就像住在一间房子里。


第四幕:复习&—— 取地址

1、前面的指针课程已经学过:

int a = 10; cout << &a;

这里:

&a

不是引用。

而是:

取地址。

得到:

变量住在哪里。


2、我们发现:

同样是&,位置不同,意义不同!

写法含义
int &x引用(别名)
&a取地址

这是同学们开始,容易混淆的地方。


第五幕:认识指针参数

看代码:

#include <iostream> using namespace std; void change(int *p) { *p = 100; } int main() { int a = 10; change(&a); cout << a << endl; return 0; }

运行:

100

为什么?


第六幕:到底发生了什么?

1、画图:

main a 10 地址:1000

调用:

change(&a);

其实就是:

把1000送进去 ↓ p = 1000

于是:

p ↓ 1000 ↓ a

2、指针变量 p 保存的是地址。

它不是数字10。

它保存的是:

"去哪里找a"。


第七幕:为什么*p能修改变量?

1、继续画图:

p ↓ 1000 ↓ a 10

如果:

*p = 100;

什么意思?

就是:

顺着地址。

找到真正变量。

修改。


于是:

a 100

所以:

输出:

100

2、一句话总结:

指针不是数据。

指针保存的是数据在哪里。


第八幕:引用 VS 指针

1、分别画两张图。

(1)引用:

a ↑ ↓ x

(2)指针:

p ↓ a

(3)引用:

直接就是另一个名字。


(4)指针:

先找到地址。

再找到变量。


(5)引用:

像:

双胞胎名字。


(6)指针:

像:

家庭住址。


第九幕:经典案例——交换两个数字(指针版)

1、看代码:

#include <iostream> using namespace std; void swap(int *a,int *b) { int t = *a; *a = *b; *b = t; } int main() { int x = 3; int y = 8; swap(&x,&y); cout << x << " " << y << endl; return 0; }

输出:

8 3

2、同学们画图:

a ↓ x 3 b ↓ y 8

交换的是:

真正变量。

不是副本。


第十幕:为什么指针调用要写&

1、为什么是:

swap(&x,&y);

不是:

swap(x,y);

2、因为:

函数需要的是:

地址。

不是:

数字。


3、函数传参要求:

int *

就必须要送:

地址。


第十一幕:什么时候用指针?

1、已经有引用,为什么还学指针?

因为:

很多地方。

只能使用指针。


2、例如:

① 动态内存

② 链表

③ 二叉树

④ 图

⑤ C语言接口

等等


3、所以,指针:

不是为了替代引用。

而是:

解决引用做不到的问题。


第十二幕:三种参数传递大总结

1、画整张大图。


(1)值传递:

a ↓ 复制 ↓ x

特点:

复制。

不能修改原变量。


(2)引用传递:

a ↑ ↓ x

特点:

同一个变量。

修改成功。


(3)指针传递:

p ↓ 地址 ↓ a

特点:

传地址。

通过地址修改变量。


2、总结口诀:

值传递——送副本。

引用传递——换名字。

指针传递——给地址。


第十三幕:课堂综合案例

#include <iostream> using namespace std; void add1(int x) { x++; } void add2(int &x) { x++; } void add3(int *x) { (*x)++; } int main() { int n = 10; add1(n); cout << n << endl; add2(n); cout << n << endl; add3(&n); cout << n << endl; return 0; }

运行结果:

10 11 12

同学们解释下:

为什么:

第一次没变?

第二次变了?

第三次也变了?

同学们请画出这三张图。


本课总结

今天,我们学习了函数参数的第三种方式——指针传递。请同学们记住五句话:

  1. 指针传递传递的是地址,而不是数据本身。

  2. &a表示获取变量a的地址。

  3. int *p表示p是一个保存整数地址的指针。

  4. *p表示根据地址找到真正的数据并进行操作。

  5. 指针传递和引用传递都能修改原变量,但实现方式不同。


🌟 数据传递模型:

值传递

实参 │ │(复制) ▼ 形参

引用传递

实参 ▲ │ ▼ 形参(别名)

指针传递

实参 │ │(取地址) ▼ 指针参数 │ │(解引用) ▼ 原变量

同学们最终明白了:三种方式数据是怎样进行传递的。


http://www.jsqmd.com/news/1187762/

相关文章:

  • 如何3步搞定B站视频下载?这份免费离线观看指南让你轻松收藏心爱内容!
  • 如何快速掌握Wand-Enhancer:WeMod完整功能解锁终极指南
  • 人生意义的前世今生的庖丁解牛
  • ub-lldpd VLAN与bonding支持:复杂网络环境下的配置实践
  • 终极指南:如何免费解锁Adobe全家桶完整功能
  • 终极指南:如何用SoccerData快速获取专业足球数据分析
  • 小程序计算机毕设之电子书书架管理与离线阅读系统设计 基于 SpringBoot 的图书阅览数据管理系统设计(完整前后端 代码+说明文档+LW,调试定制等)
  • 2026年医疗动画制作公司
  • 猫抓Cat-Catch终极指南:浏览器资源嗅探扩展的完整使用教程
  • Home Assistant界面个性化定制终极指南:3步打造专属智能家居视觉体验
  • 未来展望:Boogu-Image-0.1-Edit-4bit的技术路线图与发展方向
  • 3个理由告诉你为什么Windows电脑需要酷安UWP桌面客户端
  • 河北定制游旅行社怎么选?资质/口碑/售后三个维度实测2026 - 老金2026
  • Dialog提示框进阶教程:等待、完成、警告、错误提示全解析
  • 3个维度彻底理解Wand-Enhancer:免费解锁游戏修改器的完整方案
  • GPT-5.6 对比 5.5:推理、多模态、日常使用体验全面评测
  • 终极幻兽帕鲁存档迁移指南:快速解决跨服务器角色丢失问题
  • 深度解析SetTraverse函数:矩阵计算方向优化的实战指南
  • APK Installer架构深度解析:Windows平台Android应用部署技术实践
  • 如何在Ryzen AI平台上实现Qwen2.5-0.5B-Instruct模型4096序列长度的高效推理:终极性能测试指南
  • 15分钟完成黑苹果EFI配置:OpCore-Simplify图形化工具完全指南
  • Mistral-7B-Instruct-v0.1_rai_1.7.1_hybrid高级应用:如何通过genai_config.json调优生成参数
  • Windows安卓应用安装神器:3分钟搞定APK安装的终极方案
  • MediaMTX企业级实时媒体服务器架构解析:高性能跨协议流处理引擎技术选型指南
  • 如何在10分钟内掌握Fluent分布式计算平台:从零到实战的完整指南
  • 终极指南:如何用OpCore-Simplify快速配置Hackintosh
  • 如何用GBFR-Logs免费高效提升《碧蓝幻想:Relink》伤害统计:新手终极指南
  • RAG 结果去重算法:MinHash 和 SimHash 在检索结果去重中的实战对比
  • Jboot微服务部署最佳实践:Docker容器化与Nacos配置中心详解
  • 小学生学C++编程语法知识(C++函数 :8、默认参数)