小学生学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 ↓ a2、指针变量 p 保存的是地址。它不是数字10。它保存的是去哪里找a。第七幕为什么*p能修改变量1、继续画图p ↓ 1000 ↓ a 10如果*p 100;什么意思就是顺着地址。找到真正变量。修改。于是a 100所以输出1002、一句话总结指针不是数据。指针保存的是数据在哪里。第八幕引用 VS 指针1、分别画两张图。1引用a ↑ ↓ x2指针p ↓ a3引用直接就是另一个名字。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 32、同学们画图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同学们解释下为什么第一次没变第二次变了第三次也变了同学们请画出这三张图。本课总结今天我们学习了函数参数的第三种方式——指针传递。请同学们记住五句话指针传递传递的是地址而不是数据本身。a表示获取变量a的地址。int *p表示p是一个保存整数地址的指针。*p表示根据地址找到真正的数据并进行操作。指针传递和引用传递都能修改原变量但实现方式不同。 数据传递模型值传递实参 │ │复制 ▼ 形参引用传递实参 ▲ │ ▼ 形参别名指针传递实参 │ │取地址 ▼ 指针参数 │ │解引用 ▼ 原变量同学们最终明白了三种方式数据是怎样进行传递的。