版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务6.1设计指针变量地址访问器主讲:陈静目录任务导入:指针的重要性必备知识:地址和指针的区别必备知识:认识指针指针定义和引用的简单案例任务实施:变量地址访问器设计0102030405教学目标知识目标1.理解地址与指针的本质区别,掌握指针变量的定义格式及四种初始化方式(指向变量、指向数组、指针间赋值、赋NULL)。2.掌握取地址运算符&与间接访问运算符*的使用,理解通过指针间接访问和修改变量值的原理。3.了解指针变量的长度特性及指针运算(加减、比较),认识野指针、空指针等常见错误及防范方法。能力目标1.能正确定义和初始化不同类型的指针变量,使其指向确定的内存对象。2.能通过指针间接访问和修改变量的值,理解指针赋值与变量修改的内在联系。3.能独立设计变量地址访问器程序,演示指针的基本操作并安全处理空指针。素养目标1.培养"寻址有方、精准定位"的严谨态度,确保指针指向合法内存区域,避免野指针与空指针误用。2.树立"透过现象看本质"的科学思维,从内存地址的角度深入理解变量的存储本质。3.学习裴秀"制图六体"与郑和"过洋牵星术"的精准定位精神,以科学精神对待每一个细节。树立"透过现象看本质"的科学思维学习重点与难点学习重点学习难点指针定义与初始化掌握指针变量的定义与初始化方法,理解地址与指针的本质区别,能够正确使用指针引用运算符访问变量值指针运算与应用熟悉指针在数组遍历和函数参数传递中的应用,掌握指针运算的基本规则,能够通过指针实现简单的数据操作逻辑内存特性与类型匹配区分指针变量与普通变量的内存存储特性,理解指针类型对运算结果的影响,避免因类型不匹配导致的逻辑错误风险防范与规范使用防范野指针和空指针风险,掌握指针使用常见错误的排查方法,培养规范使用指针的编程习惯任务导入:指针的重要性01生活中的地址与内存中的地址生活中的地址定位与访问的基础在现实生活中,每个人都有唯一的家庭住址,通过该地址可以准确找到对应的人并进行访问。例如根据门牌号"301房间"找到特定住户,地址就是定位目标的关键标识。内存中的地址核心变量的"门牌号"计算机内存中的每个变量同样拥有唯一"住址"——内存地址,它是内存单元的编号。通常用十六进制数表示,如0064fec8,用于标识变量在内存中的精确位置。类比关系从生活到计算机的映射生活中通过地址找人,与计算机通过内存地址访问变量的逻辑完全一致。地址是定位目标的"标识",而指针则相当于记录地址的"工具"。指针在C语言中的核心地位C语言的"门槛"理解指针是学习C语言的关键难点也是区分C语言与其他高级语言的核心特性之一掌握指针是深入学习C语言的必经之路数组与函数参数传递的关键数组名本质是数组首元素地址,指针可用于高效遍历数组函数参数传递中,指针允许实现"传址调用",实现函数对外部变量的修改高级特性的基础动态内存分配基础指针是实现动态内存分配的基础,通过指针可以灵活管理内存空间按需申请和释放内存,避免静态内存分配的局限性必备知识:地址和指针的区别02地址的本质与特点地址是内存单元的编号,本质是一个具体的数值固定性与非占用内存地址是固定不变的,不占用内存空间,它是内存单元的固有标识无符号整数值与唯一性地址是一个无符号整数值(通常用十六进制表示),且变量、函数等在内存中都有唯一的地址无类型信息地址本身不包含类型信息,它仅表示内存单元的位置指针的本质与特点指针的本质是一个变量,专门用来存储地址占用内存空间指针本身占用内存空间,通常在32位计算机中为4字节,64位计算机中为8字节值可变性指针的值是地址,但这个地址可以变化,即可以重新赋地址值有明确类型信息指针有类型信息(如int*、char*等),某种数据类型的指针变量只能存储该类型变量的地址可进行算术运算指针可以进行算术运算,通常用于遍历数组,但需注意是否会超越数组定义界限地址和指针区别对比区别维度地址指针本质区别数值常量变量内存占用不占用内存空间占用内存空间(通常4字节或8字节)可变性固定不变值可以改变(重新赋地址值)类型信息无类型信息有明确的类型信息(如int*、float*等)操作区别不能进行运算可以进行算术运算(如指针加减)地址和指针区别示例分析示例代码展示intnum=10;int*ptr=#printf("num的地址:%p\n",&num);printf("ptr存储的地址:%p\n",ptr);printf("ptr自身地址:%p\n",&ptr);printf("ptr的大小:%d\n",sizeof(ptr));地址相关分析&num获取num的地址,是一个数值常量,在执行结果中如0064fec8,它固定不变且不占用内存空间指针相关分析ptr是指针变量,其值为num的地址(与&num输出相同),但ptr本身占用内存空间,通过sizeof(ptr)可输出其大小,且ptr的值可改变4sizeof(ptr)输出字节数0064fec8地址示例值(&num输出)必备知识:认识指针03指针变量的定义数据类型
*指针变量名[=地址]int*p;定义指向整型的指针变量pchar*ch;定义指向字符型的指针变量chfloat*f;定义指向单精度浮点型的指针变量fdouble*d;定义指向双精度浮点型的指针变量d指针变量的初始化方式指向变量的初始化inta=67,*pa=&a;inta=67,*pa;pa=&a;使用取地址运算符&,可在定义时或定义后初始化,使指针存储变量地址指向数组的初始化inta[5],*p=a;inta[5],*p;p=a;将数组名赋给指针,数组名即数组首地址同类型指针变量初始化floata=3.5,*pa=&a;float*pb=pa;floata=3.5,*pa,*pb;pa=&a;pb=pa;用已初始化的指针给同类型指针赋值初始化为0或NULLint*p=0;int*p=NULL;表示空指针状态,避免野指针风险指针变量的长度4字节指针长度取决于计算机字长长度与计算机字长的关系指针变量长度固定,与指针类型无关,取决于计算机字长。32位计算机指针变量长度为4字节,64位计算机则为8字节。例6-1案例辅助理解例6-1中通过sizeof(ptr)输出指针大小为4,可直观看到在对应计算机环境下指针变量的长度,帮助理解其与字长的关联。指针使用常见错误使用未初始化的指针int*pa;printf("%d",*pa);错误后果:未初始化的指针为野指针,指向未知地址,输出结果随机,可能导致程序崩溃正确做法:使用前必须初始化,如inta=10;int*pa=&a;指针赋值常量float*pf=12.345;int*pi=100;错误后果:不能将非地址值存放到指针变量中,此类操作会编译报错正确做法:指针只能存储地址,如inta;int*pa=&a;void类型指针使用错误inta=100;void*pa=&a;printf("%d",*pa);//错误错误后果:void类型指针类型不确定,直接解引用错误正确做法:printf("%d",*(int*)pa);需先强制类型转换指针与对象类型不一致doublea=1.2;int*pa=(int*)&a;错误后果:指针类型与所指对象类型不同,(*pa)会获得意料之外的结果,应避免此类类型不匹配的指针使用正确做法:保证指针类型与指向对象类型一致指针引用运算符间接访问运算符**为间接访问运算符,右边操作数必须是已指向确定对象的指针,用于取指针所指对象的值inta=5,*p=&a;*p可获得a的值5语法要点*运算符作用于指针变量,通过地址间接访问内存中的实际数据内存访问解引用操作实现从地址到值的转换,是指针最核心的功能下标运算符[][]为下标运算符,左边操作数必须是已指向确定对象的指针,用于取指针所指对象的值inta=5,*p=&a;p[0]也可获得a的值5*p与p[0]完全等价运算符等价关系&运算符取变量地址,*运算符取指针所指对象值,表达式*(&a)与a等价*(&a)⟺a地址与值的转换体现了地址与值之间的对应转换关系,是指针运算的理论基础核心原理取地址与解引用互为逆运算,构成完整的指针操作闭环指针定义和引用的简单案例04案例一:输出两整数关系及和代码功能概述通过定义指针变量并初始化,实现输入两个整数,比较大小后输出最大值、最小值及两数之和,展示指针引用的实际应用指针变量定义与初始化定义int型变量a、b及指针pa、pb、pc,其中pa=&a、pb=&b将指针直接指向变量,pc初始化为NULL,为后续交换指针做准备指针引用方式通过pa[0]、pb[0]或*pa、*pb引用指针指向的变量值,两种方式等价,在比较大小(pa[0]<pb[0])和输出结果时均有体现指针交换逻辑当pa指向的变量值小于pb指向的变量值时,借助临时指针pc交换pa和pb的指向,实现最大值与最小值的动态定位案例二:指针指向数组的运算→→代码功能概述定义整型数组arr及指针ptr,通过指针自增运算遍历数组元素,输出每个元素的值及其内存地址,演示指针在数组访问中的高效应用。指针遍历相比下标访问更直接操作内存,执行效率更高。指针与数组的关联数组名arr代表数组首地址,指针ptr=arr使ptr指向数组首元素,此时*ptr等价于arr[0],体现指针与数组的内在联系。这种等价关系是C语言指针操作数组的基础。指针加减运算实现遍历通过ptr++使指针向后移动一个整型元素的位置(即4字节),循环5次依次访问arr[0]至arr[4],实现数组元素的顺序遍历。每次自增指针自动跳转到下一元素地址。指针运算注意事项指针运算仅适用于指向数组的场景,需严格控制边界,避免超越数组定义范围导致指向未知区域,引发程序错误或崩溃。越界访问是C语言常见安全隐患。代码功能概述定义整型数组arr及指针ptr,通过指针自增运算遍历数组元素指针与数组关联数组名arr代表首地址,ptr=arr使ptr指向首元素→指针加减运算ptr++向后移动4字节,循环5次遍历arr[0]至arr[4]运算注意事项严格控制边界,避免超越数组范围引发程序错误任务实施:变量地址访问器设计05实施思路→→→1变量与指针基础构建定义整型、浮点型、字符型等普通变量并初始化,同时定义对应类型的指针变量,建立指针与变量的指向关系,为后续操作奠定基础2地址与值的访问验证通过&运算符获取普通变量地址并输出,利用指针变量存储地址,再通过解引用运算符*访问指针指向变量的值,验证地址与值的对应关系3值的修改与指针赋值操作借助指针变量修改所指向变量的值,观察原变量变化;实现指针间的赋值,让一个指针指向另一个指针所指向的变量,拓展指针应用场景4空指针概念与安全检查将指针赋值为NULL,演示空指针状态,并通过条件判断实现对空指针的安全检查,避免因空指针解引用导致的程序错误任务分析整型变量及指针操作定义整型变量a并初始化为10,输出a的值和地址定义整型指针p,将a的地址赋值给p输出p存储的地址、p自身地址及通过*p访问的值通过*p修改a的值为20并验证浮点型变量及指针操作定义浮点型变量b和对应指针q重复整型变量的操作流程输出b的值和地址、q指向b后访问值通过q修改b的值并观察变化指针间接赋值操作定义指针变量r,将p赋值给r使r指向a,通过*r修改值验证a的变化理解指针间接赋值的传递效果空指针操作定义指针变量s并赋值为NULL演示空指针状态通过条件判断检查s是否为空确保不进行空指针的解引用操作,保障程序安全结果展示与代码解析整型指针操作inta=10,*p;p=&a;printf("%d",*p);*p=20;运行结果:a=10,&a=0x...,p=0x...,*p=10,*p=20后a=20浮点型指针操作floatb=3.14,*q;q=&b;printf("%f",*q);*q=6.28;运行结果:b=3.14,*q=3.14,*q=6.28后b=6.28指针间接赋值int*r;r=p;*r=30;运行结果:r指向a,*r=30使a=30,多指针同目标空指针安全int*s=NULL;if(s==NULL)printf("空指针");运行结果:输出"s是空指针,不进行解引用操作"整型变量与指针演示代码解析代码中定义inta=10,int*p;输出a的值、地址,p存储的地址、自身地址及通过*p访问的值,再通过*p=20修改a的值,最终a变为20,清晰展示整型指针的基础操作及效果。浮点型变量与指针演示代码解析定义floatb=3.14,float*q;输出b的值、地址,q指向b后通过*q访问值,再通过*q=6.28修改b的值,b更新为6.28,体现浮点型指针操作与整型指针的相似性。指针间接赋值演示代码解析定义int*r,将p赋值给r,使r指向a;通过*r=30修改值,a变为30,直观展示指针间接赋值后对原变量的修改作用。空指针演示代码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妇产科灌肠课件
- 房产竞聘主管课件
- 帆船酒店设计课件
- 绿色与社会价值核算报告2025
- 防虫防蚊课件
- 粉尘爆炸应急预案课件
- 2026-2027学年初中心理健康七年级下册北师大版(2021)第十二课 可贵的自制力课时巩固卷
- 第3周作业-答案 习题解答辅导 可编辑 配套学习辅导
- 肺部感染护理查房课件
- 管道保温层修复施工方案
- 2026全国税收执法资格考试题库及答案
- 2026年职业技能鉴定国家题库维修电工中级理论知识题库及答案
- 2026中级会计-经济法练习题-第二章公司法律制度参考试题库历年考点答案详解
- T/HAEPCI 115-2019重金属矿山酸性废水污染控制技术规范
- 2026年四川申论执法卷申论真题材料及参考答案
- 设备防护施工方案范本
- 2026年旅行社计调员业务操作理论知识试卷答案
- 2026年突发环境事件应急笔试试题(含答案)
- 2026年电厂化学设备检修工专项题库(附答案与解释)
- 统招专升本英语4000个考前必背词汇表
- 年产5000吨竹原纤维可行性研究报告
评论
0/150
提交评论