《动态分配内存》ppt课件

《动态分配内存》ppt课件

ID:26912732

大小:252.00 KB

页数:14页

时间:2018-11-30

《动态分配内存》ppt课件_第1页
《动态分配内存》ppt课件_第2页
《动态分配内存》ppt课件_第3页
《动态分配内存》ppt课件_第4页
《动态分配内存》ppt课件_第5页
资源描述:

《《动态分配内存》ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第7讲动态分配内存本讲内容:(1)返回指针值的函数(2)动态内存分配函数(3)动态数组的实现6.2.2返回指针值的函数函数的返回值可以是一个指针类型的数据(即地址)返回指针值函数的定义格式:函数类型*函数名(形参列表){函数体;}说明:定义一个返回指针值的函数与定义普通函数的格式基本类似,只是在函数名前加*,表明该函数返回一个指针值例:int*fun(inta,intb){函数体;}例2求某班成绩的平均分要求用返回指针值的函数实现分析:通过函数average的返回值得到保存平均分变量的地址,进而得到平均分,函数

2、中将平均分变量定义成静态的,这样函数结束后该变量仍然存在。mainpaverageaver1静态aver&aver1&aver1816.2.2返回指针值的函数voidmain(){intn;float*p;printf("inputn:");scanf("%d",&n);p=average(n);printf("ave=%6.2f,",*p);}例2程序代码静态局部变量float*average(intn){inti;floats,*aver,sum=0;staticfloataver1;aver=&aver1

3、;for(i=1;i<=n;i++){printf("inputs:");scanf("%f",&s);sum=sum+s;}aver1=sum/n;return(aver);}6.6指针与动态内存分配动态内存分配(DynamicMemoryAllocation)在程序运行时为程序分配内存的一种方法什么时候需要使用动态内存分配?例:计算某班英语成绩的平均分,要求保存每个学生的成绩,而学生人数由键盘输入inta[60];intn,i;scanf("%d",&n);for(i=0;i

4、",&a[i]);必须将数组定义的足够大!如果输入的n较小(15),那么数组有多数以上的存储空间被浪费了我们希望在输入n后,根据实际的人数定义一个动态数组,这样不会浪费存储空间6.6.2动态内存分配和释放函数ANSIC标准定义了3个动态内存分配函数1.malloc()函数函数原型:void*malloc(unsignedintsize);作用:在内存开辟一个长度为size个字节的连续的存储空间,返回一个指向该存储区首地址的指针,若系统不能提供足够的内存单元(分配失败),函数将返回空指针NULL说明:void*是

5、一种指针类型,称为无类型指针,常用来说明其基类型未知的指针,即声明一个指针变量,但不指定它指向哪一种具体类型的数据需要#include"stdlib.h"int*p=NULL;double*q=NULL;p=(int*)malloc(4);q=(double*)malloc(sizeof(double));*p=36;*q=45.8;使用malloc函数时,必须用强制类型转换将返回的指针值转换回所需要的数据类型,然后再进行赋值操作定义指针变量通常将其初始化为空指针申请一个长度为4个字节的存储空间,并将其首地址赋

6、给int型的指针变量,则该空间可存放int型数据强制类型转换如果不知道某种类型数据所占内存空间的字节数,可用sizeof()进行计算6.6.2动态内存分配和释放函数int*p=NULL;double*q=NULL;p=(int*)malloc(4);q=(double*)malloc(sizeof(double));*p=36;*q=45.8;360x00371000NULLq45.80x00371048NULLp0x003710480x003710006.6.2动态内存分配和释放函数2.calloc()函数函

7、数原型:void*calloc(unsignedintnum,unsignedintsize);作用:给若干同一类型的数据项分配连续的存储空间,其中每个数据项的长度单位为字节,若函数调用成功,返回一个指向该存储区的首地址,若函数调用失败返回空指针NULL说明:参数num表示向系统申请的存储空间的数量参数size表示每个存储空间所占的字节数6.6.2动态内存分配和释放函数例:float*p=NULL;p=(float*)calloc(10,sizeof(float));申请10个连续的float型的存储单元,并将

8、其首地址赋给float型的指针变量,该存储空间总的字节数为10×sizeof(float)显然,用calloc()函数开辟的存储空间相当于一个一维数组,第1个参数决定了一维数组的大小,第2个参数决定了数组元素的类型,函数的返回值就是数组的首地址2.calloc()函数6.6.2动态内存分配和释放函数函数原型:voidfree(void*p);作用:释放动态申请的由指针变量p所指向的存储

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。