第8章 第1、2节:指针的概念及指向简单变量的指针(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂

2025-12-29
| 31页
| 105人阅读
| 1人下载
精品

内容正文:

8.1与8.2节:指针的概念及指向简单变量的指针 编程语言基础——C语言 同步精品课堂 高教版(第5版) 掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。 教学目标 一 03 能够正确定义指针变量,掌握指针变量的初始化、赋值和引用方法 能够运用指针变量编写程序,实现通过指针访问变量、交换变量值等基本操作 04 能够区分变量的直接访问方式和间接访问方式,理解通过指针间接访问变量的原理 02 掌握内存单元地址与内容的区别,理解指针和指针变量的定义及其相互关系 01 教学重难点 二 03 通过指针访问变量:能够正确使用指针变量间接访问和修改其所指向的变量值 指针变量的间接访问方式:理解并掌握通过指针间接访问变量的原理,区分指针变量本身的值和它所指向的变量的值 04 指针变量的引用:掌握通过指针运算符*访问指针所指向变量的方法 02 指针与指针变量的概念:理解指针是地址,指针变量是存放地址的变量,二者之间的关系 01 导入新课 三 指针的"寻宝游戏" 指针 = 寻宝地图 如果我们有100个X标记点,如何快速找到并修改宝藏? X标记点​ → 内存地址 宝藏内容​ → 变量值 地图本身​ → 指针变量 今天,我们将学习C语言中的'寻宝神器'——指针,它能让程序高效地找到并操作内存中的数据! 新知讲授 四 指针是C语言中的一个重要概念,也是C语言的一个重要特色。正确而灵活地运用它,可以有效地表示复杂的数据结构;能动态分配内存;方便地使用字符串;有效而方便地使用数组;在调用函数时能获得1个以上的结果;能直接处理内存单元地址等。掌握指针的应用,可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人,都应当深入地学习和掌握指针。 概述 新知讲授 四 知识点1:指针的概念 1、内存单元地址与内容 例如: int k; 定义一个变量 编译系统根据定义的变量类型分配一定长度的空间 程序编译 int型:4字节 char型:1字节 float型:4字节 double型:8字节 第1个字节 第2个字节 第3个字节 第4个字节 地址 1000 1001 1002 1003 内存单元地址 空间 内存单元内容 整型变量“k”在内存中的存储空间 新知讲授 四 知识点1:指针的概念 1、内存单元地址与内容 设有语句: int i; //编译时系统分配2000~2003四个字节给变量i。 printf(“%d”,i); /*找到变量i的地址2000,然后由2000开始的四个字节中取出数据(即变量值),将其输出。*/ scanf(“%d”,&i);//把从键盘输入的值送到地址为2000开始的整型存储单元中。 变量名 i 地址 2000 2001 2002 2003 存储单元 在编译时确定变量名与地址的对应关系 新知讲授 四 知识点1:指针的概念 2、指针与指针变量的概念 #include <stdio.h> main() { int i; float j; double y; char c; int *p1;//定义了指向整型变量的指针 float *p2; double *p3; char *p4; printf("%d,%d,%d,%d ",sizeof(i),sizeof(j),sizeof(y),sizeof(c)); printf("%d,%d,%d,%d ",sizeof(p1),sizeof(p2),sizeof(p3),sizeof(p4)); } 【定义】 “指针”即“内存地址” “指针变量”即“用来存放这些内存地址的变量” 【特点】 不同类型的指针变量所占用的存储空间长度是“相同的” 而存放数据的变量因数据的类型不同,所占用的存储空间长度是“不同的”。 新知讲授 四 知识点1:指针的概念 3、变量的直接访问方式和间接访问方式 (1)直接访问方式 例如:float x=123.45; //在内存中占用4字节的空间 变量名 x 使用“变量名”直接对存储空间进行访问,即“直接访问方式” 地址 2060 2061 2062 2063 存储单元 123.45 变量名与地址建立了逻辑关系 这个存储空间的首地址就是变量的地址,即“指针” 新知讲授 四 知识点1:指针的概念 3、变量的直接访问方式和间接访问方式 (2)间接访问方式(如下图所示) 变量名 x 存储单元内容 123.45 地址 2060 2061 2062 2063 定义一个指针变量p,用于存储变量x的地址,可称为“指针p指向x” p *p 将变量x的地址2060存入指针变量p,即p的值为2060,此时可通过p找到变量x的地址,从而找到x的值。 新知讲授 四 知识点1:指针的概念 3、变量的直接访问方式和间接访问方式 (2)间接访问方式 如右简易图所示,其中“*”是指针运算符,也称为“间接访问”运算符。 “*p”表示指针变量p所指向的变量。 若要改变x变量的值,也可以通过改变“*p”的值来实现。 如执行“*p=47;”,则此时“x=47”。 p x 123.45 *p 新知讲授 四 知识点2:指向简单变量的指针 1、定义一个指针变量 (1)一般形式: 类型标识符 * 指针变量名; int * pointer_1, * pointer_2; “基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型 “*”表示该变量为指针型变量。指针变量名则不包含“*” 用户自定义的“指针变量名” 新知讲授 四 知识点2:指向简单变量的指针 1、定义一个指针变量 (2)在定义指针变量时要注意: 指针变量前面的“*”表示该变量为指针型变量。指针变量名则不包含“*”。 在定义指针变量时必须指定基类型。一个变量的指针的含义包括两个方面,一是以存储单元编号表示的纯地址(如编号为2000的字节),一是它指向的存储单元的数据类型(如int,char,float等)。 类型标识符 * 指针变量名; *pointer_1; //企图定义pointer_1为指针变量。出错 int *pointer_1; //正确,必须指定指针变量的基类型 新知讲授 四 知识点2:指向简单变量的指针 1、定义一个指针变量 (2)在定义指针变量时要注意: 如何表示指针类型。指向整型数据的指针类型表示为“int *”,读作“指向int的指针”或简称“int指针”。 指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量。 属于同类型的指针变量可以相互赋值。 类型标识符 * 指针变量名; int *pointer_1=3; //企图将一个整数赋给指针变量pointer_1 int *pointer_1=&a; //将变量a的地址赋给指针变量 int *p1,*p2;p1=&a;p2=p1; //将p1指向的地址赋给p2,p1、p2均指向&a 新知讲授 四 知识点2:指向简单变量的指针 2、指针变量的引用 ① 给指针变量赋值。 ② 引用指针变量指向的变量。 ③引用指针变量的值。 int a, *p; p=&a; //把a的地址赋给指针变量p ① printf("%d",*p); //以整数形式输出指针变量p所指向的变量的值,即a的值 ② *p=1; //将整数1赋给p当前所指向的变量,由于p指向变量a,相当于把1赋给a,即a=1 ② printf("%o",p); //以八进制形式输出指针变量p的值,由于p指向a,相当于输出a的地址,即&a ③ 要熟练掌握两个有关的运算符: “&”取地址运算符。&a是变量a的地址。 “*”指针运算符(或称“间接访问”运算符),*p代表指针变量p指向的对象。 新知讲授 四 知识点2:指向简单变量的指针 例8-1:通过指针变量访问变量 #include <stdio.h> main( ) { int a,b,*p1,*p2; //p1、p2为指向整型变量的指针 float x,y,*q1,*q2; //q1、q2为指向实型变量的指针 a=123; b=45; x=1.25; y=-0.98; p1=&a; //p1指向变量a p2=&b; q1=&x;//q1指向变量x q2=q1;//q2指向变量x printf("a=%d, b=%d ", a,b ); printf("*p1=%d, *p2=%d ", *p1,*p2 ); printf("x=%f, y=%f ", x,y ); printf("*q1=%f, *q2=%f ",*q1,*q2 ); } 123 45 p1 p2 a b *p1 *p2 123 -0.98 q1 x y q2 新知讲授 四 知识点2:指向简单变量的指针 例题:通过指针变量访问整型变量 #include <stdio.h> main() { int a=100,b=10; //定义整型变量a,b,并初始化 int *pointer_1,*pointer_2; //定义指向整型数据的指针变量pointer_1, pointer_2 pointer_1=&a; //把变量a的地址赋给指针变量pointer_1 pointer_2=&b; //把变量b的地址赋给指针变量pointer_2 printf("a=%d,b=%d ",a,b); //输出变量a和b的值 printf("*pointer_1=%d,*pointer_2=%d ",*pointer_1,*pointer_2); //输出变量a和b的值 } pointer_1 a &a → 100 *pointer_1 pointer_2 b &b → 10 *pointer_2 新知讲授 四 知识点2:指向简单变量的指针 例题:输入a和b两个整数,按先大后小的顺序输出a和b。 #include <stdio.h> main() { int *p1,*p2,*p,a,b; //p1,p2的类型是int *类型 printf("please enter two integer numbers:"); scanf("%d,%d",&a,&b); //输入两个整数 p1=&a; //使p1指向变量a p2=&b; //使p2指向变量b if(a<b) //如果a<b { p=p1;p1=p2;p2=p;} //使p1与p2的值互换 printf("a=%d,b=%d ",a,b); //输出a,b printf("max=%d,min=%d ",*p1,*p2); //输出p1和p2所指向的变量的值 } 新知讲授 四 知识点2:指向简单变量的指针 例题:输入a和b两个整数,按先大后小的顺序输出a和b。 解题思路:不交换整型变量的值,而是交换两个指针变量的值(即a和b的地址)。 p1 a &a → 5 p2 b &b → 9 p 交换前 交换后 p1 a &b 5 p2 b &a 9 p a和b的值并未交换,它们仍保持原值,但p1和p2的值改变了。 实际上,第9行可以改为{p1=&b; p2=&a;}即直接对p1和p2赋以新值,这样可以不必定义中间变量p,使程序更加简练。 if(a<b) //如果a<b { p=p1;p1=p2;p2=p; } //使p1与p2的值互换 师生互动 五 指针密室逃脱——你能帮程序逃出去吗? 师生互动 五 指针密室逃脱——你能帮程序逃出去吗? 【互动规则】 小组讨论3分钟 每组派代表在黑板上写出关键代码 最快完成的小组获得"指针大师"称号 基础任务: 进阶任务 定义指针变量p1和p2 让p1指向a,p2指向b 输出p1和p2的值 不直接交换a和b的值 只通过交换指针p1和p2的指向 实现输出时"先大后小" 随堂练习 六 1.以下关于指针的说法正确的是( ) A. 指针变量存储的是变量的值 B. 指针变量存储的是变量的地址 C. 指针变量可以直接存储整型数据 D. 指针变量的大小与指向的数据类型无关 答案:B 解析:指针变量专门用于存储内存地址,即变量的地址。 随堂练习 六 2.若有定义int a = 10, *p = &a;,则*p的值是( ) A. a的地址 B. 10 C. p的地址 D. 不确定 答案:B 解析:*p表示取指针p所指向的变量的值,即a的值10。 随堂练习 六 3.若有int a = 5, *p = &a;,则*p = *p + 1;执行后a的值是( ) A. 5 B. 6 C. p的地址加1 D. 不确定 答案:B 解析:*p = *p + 1等价于a = a + 1,所以a变为6。 随堂练习 六 4.设有定义“int a=4;”,则以下定义指针变量的语句正确的是( ) A. int p = &a; B. int *p = a; C. int *p = &a; D. int &p = *a; 答案:C 解析:定义指针变量需要在变量名前加*,且初始化时应赋地址值。 随堂练习 六 5.若有int a = 3, b = 5, *p = &a, *q = &b;,则*p + *q的值是( ) A. a和b的地址之和 B. 8 C. 3 D. 5 答案:B 解析:*p是3,*q是5,所以*p + *q等于8。 随堂练习 六 6.以下程序段的输出结果是( ) #include<stdio.h> main() { int a = 10, *p = &a; *p = 20; printf("%d", a);} 答案:20 解析:通过指针p修改了a的值,所以a变为20。 随堂练习 六 7.若有int a = 8, *p = &a;,则p和&a的关系是( ) A. p的值等于&a的值 B. p的值等于a的值 C. *p的值等于&a的值 D. *p的值等于p的值 答案:A 解析:p存储的是a的地址,所以p的值等于&a的值。 随堂练习 六 8.以下程序段的输出结果是( ) #include<stdio.h> main() { int a = 5, b = 10, *p = &a; p = &b; printf("%d", *p); } 答案:10 解析:p先指向a,后改为指向b,所以*p输出b的值10。 课堂小结 七 谢谢 EV录屏5.4.2软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.2软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.2软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.2软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn $

资源预览图

第8章 第1、2节:指针的概念及指向简单变量的指针(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
1
第8章 第1、2节:指针的概念及指向简单变量的指针(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
2
第8章 第1、2节:指针的概念及指向简单变量的指针(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
3
第8章 第1、2节:指针的概念及指向简单变量的指针(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
4
第8章 第1、2节:指针的概念及指向简单变量的指针(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
5
第8章 第1、2节:指针的概念及指向简单变量的指针(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。