第6讲 预处理命令与程序的模块化结构程序设计技巧.pptxVIP

第6讲 预处理命令与程序的模块化结构程序设计技巧.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6讲 预处理命令与程序的模块化结构程序设计技巧

低栈存储区堆存储区程序代码区静态存储区高C程序的内存映像一个已编译完成的C程序在运行时将占用4块内存区域在执行函数调用时, 函数的局部变量和参数在栈中创建, 函数执行结束时,这些内存空间被自动释放程序运行期间,用动态内存分配函数来申请的内存空间从堆上分配。动态内存的生存期由程序员决定,但必须注意当这些内存不再使用时一定要用释放函数将它们释放,归还给系统。存放程序代码存放全局变量和静态变量, 在编译时就分配好, 整个程序运行期间都一直存在, 在程序结束时被系统自动收回堆存储区动态内存分配(Dynamic Memory Allocation)在程序运行时为程序分配内存的一种方法 什么时候需要使用动态内存分配?例: 计算某班英语成绩的平均分,要求保存每个学生的成绩,而学生人数由键盘输入以前的方法是将数组定义的足够大!我们更希望在输入n后,根据实际的人数定义一个动态数组,这样不会浪费存储空间int a[60];int n, i;scanf(“%d”, n);for(i=0; in; i++) scanf(“%d”, a[i]);如果输入的n较小,那么数组多数的存储空间被浪费了堆存储区——动态内存分配函数ANSI C标准定义了4个有关动态内存分配函数1. malloc( )函数 函数原型:void *malloc( unsigned int size);作用: 在内存开辟一个长度为 size 个字节的单元存储空间, 返回一个指向该存储区首地址的指针,若系统不能提供足够的内存单元(分配失败), 函数将返回空指针NULL说明:void * 是一种指针类型, 称为普通指针, 常用来说明其基类型未知的指针, 即声明一个指针变量, 但不指定它指向哪一种具体类型的数据,这里用于指向malloc函数的指针,即malloc函数的返回值为指针类型0x003710480qNULLNULL堆存储区——动态内存分配函数若malloc函数返回具体某种指针类型时, 必须用强制类型转换将返回的指针值转换回所需要的数据类型, 然后再进行赋值操作void main(){ int *p=NULL; double *q=NULL; p= (int *) malloc ( 4 ); q= (double *) malloc ( sizeof(double) ); *p=36; *q=45.8;}定义指针变量通常将其初始化为空指针0x003710003645.80请一个长度为4个字节的存储空间, 并将其首地址赋给int型的指针变量, 则该空间可存放int型数据如果不知道某种类型数据所占内存空间的字节数, 可用sizeof( )进行计算强制类型转换动态内存分配函数2. calloc( )函数 函数原型: void *calloc(unsigned int num,unsigned int size);作用: 给若干同一类型的数据项分配连续的单元存储空间, 若函数调用成功, 返回一个指向该存储区的首地址, 若函数调用失败返回空指针NULL说明:参数num表示向系统申请的单元存储空间的数量参数size表示每个单元存储空间所占的字节数动态内存分配函数2. calloc( )函数int *p=NULL;p=(int *) calloc (10, sizeof(int));申请10个连续的int型的存储单元, 并将其首地址赋给int型的指针变量, 该存储空间总的字节数为10×sizeof(int)显然,用calloc( )函数开辟的存储空间相当于一个一维数组, 第1个参数决定了一维数组的大小, 第2个参数决定了数组元素的类型, 函数的返回值就是数组的首地址动态内存分配函数3. free( )函数 函数原型 : void free( void *p );作用: 释放动态申请的由指针变量p所指向的存储空间,该函数无返回值说明:①参数p的值不是任意的地址, 必须是程序中执行malloc或calloc函数所返回的地址②调用free函数时不需要对p进行强制类型转换, 计算机系统会自动识别③该函数执行后, 将指针p所指向的存储空间交还给系统,系统可再重新分配pNULL0x003710000x003710040态内存分配函数3. free( )函数例:int i, *p=NULL;p=(int *) calloc (3, sizeof(int) );for(i=0; i3; i++) *(p+i)=i+1;0x00371000123free(p); 注意:free函数释放的是p所指向的动态存储空间, 变量p并没有被释放动态内存分配函数4. realloc( )函数函数原型:void *realloc(v

文档评论(0)

peili2018 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档