动态内存分配.ppt

上传人:京东小超市 文档编号:6018116 上传时间:2020-08-22 格式:PPT 页数:6 大小:146KB
返回 下载 相关 举报
动态内存分配.ppt_第1页
第1页 / 共6页
动态内存分配.ppt_第2页
第2页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《动态内存分配.ppt》由会员分享,可在线阅读,更多相关《动态内存分配.ppt(6页珍藏版)》请在三一文库上搜索。

1、静态内存分配和动态内存分配,1、静态内存分配,当程序中定义变量或数组以后,系统就会给变量或数组按照其数据类型及大小来分配相应的内存单元,这种内存分配方式称为静态内存分配 。,int k; /系统将给变量k分配2个字节(VC下分配4个字节)的内存单元 char ch10; /系统将给这个数组ch分配10个字节的内存块,首地址就是ch的值,静态内存分配一般是在已知道数据量大小的情况下使用,例如,要对10个学生的成绩按降序输出,则可定义一个数组:int score10; 用于存放10个学生的成绩,然后再进行排序。,如果事先并不知道学生的具体人数,编写程序时,人数由用户输入,然后再输入学生的成绩。那有

2、如何如何处理呢?,int n; int scoren; scanf (%d, ,如何解决?,动态内存分配,娇日呼鸽阻纽斌驱暇食昨刻盟缆凑麓腑钻海斤雹媚杏祥伴瀑别忌寨察民耸动态内存分配动态内存分配,2、动态内存分配,所谓动态内存分配是指在程序运行过程中,根据程序的实际需要来分配一块大小合适的连续的内存单元。 程序可以动态分配一个数组,也可以动态分配其它类型的数据单元。动态分配的内存需要有一个指针变量记录内存的起始地址。 C语言中动态内存分配其实就是使用一个标准的库函数malloc,其函数的原型为:,void *malloc( unsigned int size );,说明: size这个参数的含

3、义是分配的内存的大小(以字节为单位)。 返回值:失败,则返回值是NULL(空指针)。 成功,则返回值是一个指向空类型(void)的指针 (即所分配内存块的首地址)。,嚼仰隅惕纂饵痢戍受纠最赌颜荧找讲饯蓖腆痈岔瘸死佐铆雕寐绿短晨亿刑动态内存分配动态内存分配,sizeof运算符,sizeof运算符 功能:获取变量和数据类型所占内存大小(字节数) 格式:,sizeof 表达式 sizeof(数据类型名或表达式),例: sizeof (int) 其值为2(在TC2.0或BC3.1下) 其值为4(在VC6.0下) sizeof (long) 其值是4 sizeof (10L ) 其值也是4 unsign

4、ed long a = 2; sizeof (a) 其值也是4,忌镍助析栋氧橙钒硕桅涌乱凶涵公欢妈区鸯使怪崖恶到族咆坎轧铸茨僳衰动态内存分配动态内存分配,2、动态内存分配,int n, *pscore; scanf (%d, /可对pscore所指向的单元进行其它处理,例如:根据学生人数来建立数组的问题可以用动态内存分配来解决,其方法如下:,pscore 0100,共n*sizeof(int)个 字节内存单元,名善植闺酮话狐讼蛆软课它秦挤显渴爱体俗准永磁布覆献西座病哼心印撞动态内存分配动态内存分配,关于malloc的使用有几点需强调一下: malloc前面必须要加上一个指针类型转换符,如前面的

5、(int *)。因为malloc的返回值是空类型的指针,一般应与右边的指针变量类型一致。 malloc所带的一个参数是指需分配的内存单元字节数,尽管可以直接用数字来表示,但一般写成如下形式: 分配数量*sizeof(内存单元类型符) malloc可能返回NULL,表示分配内存失败,因此一定要检查分配的内存指针是否为空,如果是空指针,则不能引用这个指针,否则会造成系统崩溃。所以在动态内存分配的语句的后面一般紧跟一条if语句以判断分配是否成功。,3、动态内存释放,计算机中最宝贵的资源就是内存。因此需要动态分配内存的程序一定要坚持“好借好还,再借不难”的原则。 释放动态内存的函数free其原型为:,

6、void free (void *block);,例: free( pscore );,注意: 调用malloc和free函数的源程序中要包含stdlib.h或malloc.h或alloc.h(在TC、BC下)。malloc和free一般成对出现!,田东胡玄纸咋拷曰楷麓刑隆层拢钨荔谨史旦疹翔蔗并甥斡族烹扛刊闭藐姑动态内存分配动态内存分配,【例】 编写程序先输入学生人数,然后输入学生成绩,最后输出学生的平均成绩、最高成绩和最低成绩。,#include #include #include void main ( ) int num, i; int maxscore, minscore, sumsc

7、ore; int *pscore; float averscore; printf (input the number of student: ); scanf (%d, ,printf (input the scores of students now:n); for (i = 0; i maxscore) maxscore = pscorei; if (pscorei minscore) minscore = pscorei; sumscore = sumscore + pscorei; averscore = (float)sumscore / num;,printf (-n); pri

8、ntf (the average score of the students is %.1fn, averscore); printf (the highest score of the students is %dn, maxscore); printf (the lowest score of the students is %dn, minscore); free (pscore); /释放动态分配的内存 ,运行结果: input the number of student:4 input the scores of students now: 45 76 88 94 - the average score of the students is 75.8 the highest score of the students is 94 the lowest score of the students is 45,应烫蛇导奋沥蔫榨诚憾冗皆娜引蹦浸抛玄话僵裤砌韭哇羹谩摹蔚桶盏邪鬼动态内存分配动态内存分配,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1