35(2课时——动态内存分配与指向它的指针变量).docx

上传人:太** 文档编号:63229742 上传时间:2022-11-23 格式:DOCX 页数:4 大小:16.32KB
返回 下载 相关 举报
35(2课时——动态内存分配与指向它的指针变量).docx_第1页
第1页 / 共4页
35(2课时——动态内存分配与指向它的指针变量).docx_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《35(2课时——动态内存分配与指向它的指针变量).docx》由会员分享,可在线阅读,更多相关《35(2课时——动态内存分配与指向它的指针变量).docx(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Yangzhou College of Industrial Technology扬州工业职业技术学院教案序号 035周次授课形式新授授课章节名称动态内存分配与指向它的指针变量教学目的理解动态内存分配与指向它的指针变量教学重点学会使用动态内存分配与指向它的指针变量教学难点学会使用动态内存分配与指向它的指针变量使用教具机房课外作业课后体会授课主要内容 什么是内存的动态分配 非静态的局部变量是分配在内存中的动态存储区的,这个存储区是一个称为栈的 区域 C语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据需要 时随时开辟,不需要时随时释放。这些数据是临时存放在一个特别的自由存储区, 称

2、为堆区 怎样建立内存的动态分配 对内存的动态分配是通过系统提供的库函数来实现的,主要有malloc, calloc, free, realloc这4个函数。 怎样建立内存的动态分配1 .malloc函数其函数原型为void *malloc(unsigned int size);其作用是在内存的动态存储区中分配一个长度为size的连续空间Yangzhou College of Industrial Technology函数的值是所分配区域的第一个字节的地址,或者说,此函数是一个指针 型函数,返回的指针指向该分配域的开头位置 怎样建立内存的动态分配malloc(lOO);开辟100字节的临时分配域

3、,函数值为其第1个字节的地址注意指针的基类型为void,即不指向任何类型的数据,只提供一个地址如果此函数未能成功地执行(例如内存空间缺乏),那么返回空指针(NULL) 怎样建立内存的动态分配calloc 函数其函数原型为void *calloc(unsigned n,unsigned size);其作用是在内存的动态存储区中分配n个长度为size的连续空间,这个空间一般 比拟大,足以保存一个数组。 怎样建立内存的动态分配用calloc函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长 度为size。这就是动态数组。函数返回指向所分配域的起始位置的指针;如果分配 不成功,返回NUL

4、L。如:p=calloc(50,4);开辟50X4个字节的临时分配域,把起始地址赋给指针变量p 怎样建立内存的动态分配free函数其函数原型为void free(void *p);其作用是释放指针变量P所指向的动态空间,使这局部空间能重新被其他变量使 用。p应是最近一次调用calloc或malloc函数时得到的函数返回值。 怎样建立内存的动态分配free(p);释放指针变量P所指向的已分配的动态空间 free函数无返回值 怎样建立内存的动态分配realloc 函数其函数原型为void *realloc(void unsigned int size);如果已经通过malloc函数或calloc函

5、数获得了动态空间,想改变其大小,可以用 recalloc函数重新分配。 怎样建立内存的动态分配用realloc函数将p所指向的动态空间的大小改变为size。p的值不变。如果重分 配不成功,返回NULL。如realloc(p,50);将P所指向的已分配的动态空间改为50字节 怎样建立内存的动态分配A 以上4个函数的声明在stdlib.h头文件中,在用到这些函数时应当用U#include vstdlib.h指令把stdlib.h头文件包含到程序文件中。Yangzhou College of Industrial Technology 8.8.3 void指针类型例8.30建立动态数组,输入5个学生

6、的成绩,另外用一个函放数检查其中有无低于60 分的,输出不合格的成绩。 8.8.3 void指针类型 解题思路:用malloc函数开辟一个动态自由区域,用来存5个学生的成绩,会得到这个动态域第一个字节的地址,它的基类型是void型。用一个基类型为int的 指针变量P来指向动态数组的各元素,并输出它们的值。但必须先把malloc函数 返回的void指针转换为整型指针,然后赋给pl#include #include int main() void check(int *);intpl=(int )malloc(5*sizeof(int);for(i=0;i5;i+)scanf(n%dfpl+i);

7、check(pl);return 0;)void check(int *p)int i;printf(nThey are fail:n);for(i=0;i5;i+)if (pi 8.9有关指针的小结L首先要准确地弄清楚指针的含义。指针就是地址,但凡出现“指针”的地方,都可以用“地址”代替,例如,变量的指针就是变量的地址,指针变量就是地址变量 要区别指针和指针变量。指针就是地址本身,而指针变量是用来存放地址的变量。 8.9有关指针的小结2 .什么叫“指向”?地址就意味着指向,因为通过地址能找到具有该地址的对象。对于 指针变量来说,把谁的地址存放在指针变量中,就说此指针变量指向谁。但应注意:只有

8、 与指针变量的基类型相同的数据的地址才能存放在相应的指针变量中。 8.9有关指针的小结void *指针是一种特殊的指针,不指向任何类型的数据,如果需要用此地址指向某类型的 数据,应先对地址进行类型转换。可以在程序中进行显式的类型转换,也可以由编译系统 自动进行隐式转换。无论用哪种转换,读者必须了解要进行类型转换 8.9有关指针的小结3 .要深入掌握在对数组的操作中怎样正确地使用指针,搞清楚指针的指向。一维数组名 代表数组首元素的地址 8.9有关指针的小结德对工告靴卡杜格郸tYangzhou College of Industrial Technologyint *p,a10;P=a; p是指向

9、int类型的指针变量,p只能指向数组中的元素,而不是指向整个 数组。在进行赋值时一定要先确定赋值号两侧的类型是否相同,是否允许 赋值。对“p=a;”,准确地说应该是:p指向a数组的首元素 8.9有关指针的小结4.有关指针变量的定义形式的归纳比拟,见主教材中表8.4。1 8.9有关指针的小结5 .指针运算(1)指针变量加(减)一个整数例如:p+p,p+ipi,p+=i, P=等均是指针变量加(减)一个整数。将该指针变量的原值(是一个地址)和它指向的变量所占用的存储单元的字节数相 加(减)。 8.9有关指针的小结6 .指针运算(2)指针变量赋值将一个变量地址赋给一个指针变量不应把一个整数赋给指针变量 8.9有关指针的小结5 .指针运算(3)两个指针变量可以相减如果两个指针变量都指向同一个数组中的元素,那么两个指针变量值之差是两个指 针之间的元素个数 8.9有关指针的小结5 .指针运算(4)两个指针变量比拟假设两个指针指向同一个数组的元素,那么可以进行比拟指向前面的元素的指针变量“小于”指向后面元素的指针变量如果pl和p2不指向同一数组那么比拟无意义

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁