C程序设计教案352课时——动态内存分配与指向它的指针变量.docx

上传人:lao****ou 文档编号:405686 上传时间:2023-10-24 格式:DOCX 页数:6 大小:21.15KB
下载 相关 举报
C程序设计教案352课时——动态内存分配与指向它的指针变量.docx_第1页
第1页 / 共6页
C程序设计教案352课时——动态内存分配与指向它的指针变量.docx_第2页
第2页 / 共6页
C程序设计教案352课时——动态内存分配与指向它的指针变量.docx_第3页
第3页 / 共6页
C程序设计教案352课时——动态内存分配与指向它的指针变量.docx_第4页
第4页 / 共6页
C程序设计教案352课时——动态内存分配与指向它的指针变量.docx_第5页
第5页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C程序设计教案352课时——动态内存分配与指向它的指针变量.docx》由会员分享,可在线阅读,更多相关《C程序设计教案352课时——动态内存分配与指向它的指针变量.docx(6页珍藏版)》请在第一文库网上搜索。

1、教案序号035周次授课形式新授授课章节名称动态内存分配与指向它的指针变量教学目的理解动态内存分配与指向它的指针变量教学重点学会使用动态内存分配与指向它的指针变量教学难点学会使用动态内存分配与指向它的指针变量使用教具机房课外作业课后体会授课主要内容 8.8.1什么是内存的动态分配 非静态的局部变量是分配在内存中的动态存储区的,这个存储区是一个称为栈的区域 C语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据需要时随时开辟,不需要时随时释放。这些数据是临时存放在一个特别的自由存储区,称为堆区 8.8.2怎样建立内存的动态分配 对内存的动态分配是通过系统提供的库函数来实现的,主要有ma

2、11oc,ca11oc,free,rea1Ioc这4个函数。 8.8.2怎样建立内存的动态分配1.ma11oc函数其函数原型为void*ma11oc(unsignedintsize);其作用是在内存的动态存储区中分配一个长度为size的连续空间函数的值是所分配区域的第一个字节的地址,或者说,此函数是一个指针型函数,返回的指针指向该分配域的开头位置8.8.2怎样建立内存的动态分配ma11oc(100);开辟100字节的临时分配域,函数值为其第1个字节的地址注意指针的基类型为VOid,即不指向任何类型的数据,只提供一个地址如果此函数未能成功地执行(例如内存空间不足),则返回空指针(NU11)8.8

3、.2怎样建立内存的动态分配2. CaIIOC函数其函数原型为void*ca11oc(unsignedn,unsignedsize);其作用是在内存的动态存储区中分配n个长度为SiZe的连续空间,这个空间一般比较大,足以保存一个数组。8.8.2怎样建立内存的动态分配用CanOC函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size。这就是动态数组。函数返回指向所分配域的起始位置的指针:如果分配不成功,返回NU11。如:p=ca11oc(50,4);开辟50X4个字节的临时分配域,把起始地址赋给指针变量p8.8.2怎样建立内存的动态分配3. free函数其函数原型为voidf

4、ree(void*p);其作用是释放指针变量P所指向的动态空间,使这部分空间能重新被其他变量使用。P应是最近一次调用Ca11OC或ma11oc函数时得到的函数返回值。8.8.2怎样建立内存的动态分配free(p); 释放指针变量P所指向的已分配的动态空间 free函数无返回值 8.8.2怎样建立内存的动态分配4. rea11oc函数 其函数原型为void*rea11oc(void*p,unsignedintsize); 如果已经通过maoc函数或CaIIoC函数获得了动态空间,想改变其大小,可以用reca11oc函数重新分配。 8.8.2怎样建立内存的动态分配 用rea11oc函数将P所指向的

5、动态空间的大小改变为size。P的值不变。如果重分配不成功,返回NU11。如rea11oc(p,50);将p所指向的已分配的动态空间改为50字节 8.8.2怎样建立内存的动态分配A以上4个函数的声明在std1ib.h头文件中,在用到这些函数时应当用“inc1udeVStd1ib.h指令把std1ib.h头文件包含到程序文件中。 8.8.3void指针类型例&30建立动态数组,输入5个学生的成绩,另外用一个函放数检查其中有无低于60分的,输出不合格的成绩。 8.8.3void指针类型 解题思路:用maoc函数开辟一个动态自由区域,用来存5个学生的成绩,会得到这个动态域第一个字节的地址,它的基类型

6、是VOid型。用一个基类型为int的指针变量P来指向动态数组的各元素,并输出它们的值。但必须先把mai1s函数返回的Void指针转换为整型指针,然后赋给P1#inc1ude#inc1udeintmain()voidcheck(int*);int*p1,i;p1=(int*)ma11oc(5*sizeof(int);for(i=0;i5;i+)scanf(,%d,p1+i);check(p1);return0;)voidcheck(int*p)inti;printf(Theyarefai1:,1);for(i=0;i5;i+)if(i 8.9有关指针的小结1.首先要准确地弄清楚指针的含义。指针就

7、是地址,凡是出现“指针”的地方,都可以用“地址”代替,例如,变量的指针就是变量的地址,指针变量就是地址变量要区别指针和指针变量。指针就是地址本身,而指针变量是用来存放地址的变量。8.9有关指针的小结2 .什么叫“指向”?地址就意味着指向,因为通过地址能找到具有该地址的对象。对于指针变量来说,把谁的地址存放在指针变量中,就说此指针变量指向谁。但应注意:只有与指针变量的基类型相同的数据的地址才能存放在相应的指针变量中。 8.9有关指针的小结VOid*指针是一种特殊的指针,不指向任何类型的数据,如果需要用此地址指向某类型的数据,应先对地址进行类型转换。可以在程序中进行显式的类型转换,也可以由编译系统

8、自动进行隐式转换。无论用哪种转换,读者必须了解要进行类型转换 8.9有关指针的小结3 .要深入掌握在对数组的操作中怎样正确地使用指针,搞清楚指针的指向。一维数组名代表数组首元素的地址8.9有关指针的小结int*p,a10;p=a;P是指向ini类型的指针变量,p只能指向数组中的元素,而不是指向整个数组。在进行赋值时一定要先确定赋值号两侧的类型是否相同,是否允许赋值。对“p=a;”,准确地说应该是:P指向a数组的首元素8.9有关指针的小结4 .有关指针变量的定义形式的归纳比较,见主教材中表8.4。8.9有关指针的小结5 .指针运算(1)指针变量加(减)一个整数例如:p+,p-,p+ipi,p+=i,P-=i等均是指针变量加(减)一个整数。将该指针变量的原值(是一个地址)和它指向的变量所占用的存储单元的字节数相加(减)。8.9有关指针的小结5.指针运算(2)指针变量赋值 将一个变量地址赋给一个指针变量 不应把一个整数赋给指针变量 8.9有关指针的小结5.指针运算(3)两个指针变量可以相减如果两个指针变量都指向同一个数组中的元素,则两个指针变量值之差是两个指针之间的元素个数8.9有关指针的小结5.指针运算(4)两个指针变量比较若两个指针指向同一个数组的元素,则可以进行比较指向前面的元素的指针变量“小于”指向后面元素的指针变量如果p1和p2不指向同一数组则比较无意义

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 汇报材料

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服