- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章:善于利指针
要理解命令行参数,先看如下的两条DOS命令: ? CCOPY C:\COMMAND.COM A:\123.COM CTYPE C:\AUTOEXEC.BAT ? 执行DOS命令的格式: 命令名 参数1 参数2 ……(回车) C程序经编译与连接后生成的exe文件,本质上就相当于一条DOS命令,所以它也可使用参数传递相应数据,只不过它是有前提的。 动态存储分配是指在程序运行过程中,需要临时开辟和随时释放的存储分配方法。用于存放临时数据。动态存储分配可分为两个步骤:随机分配存储空间和分配存储空间的释放。 8.8.1 什么是内存的动态分配 非静态的局部变量是分配在内存中的动态存储区的,这个存储区是一个称为栈的区域。 C语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据需要时随时开辟,不需要时随时释放。这些数据是临时存放在一个特别的自由存储区,称为堆区。 这些操作是通过动态内存分配函数实现的。这4个函数的声明在stdlib.h头文件中。 1.malloc函数 其函数原型为 void *malloc(unsigned int size); 在内存的动态存储区分配一个长度为size的连续空间。若分配成功,则返回一个void类型的指向分配域起始地址的指针。若分配不成功,则返回null。 malloc函数用于为一个新的结点动态分配存储空间。 8.8.2 怎样建立内存的动态分配 如:malloc(100);表示开辟100字节的临时分配域,函数值为其第1个字节的地址 注意指针的基类型为void,即不指向任何类型的数据,只提供一个地址。 在实际使用过程中,常需要将指针进行强制类型转换。 8.8.2 怎样建立内存的动态分配 2.calloc函数 其函数原型为 void *calloc(unsigned n,unsigned size); 功能:在内存的动态存储区分配n个长度为size的连续空间。若分配成功,则函数返回一个void类型的指向分配域起始地址的指针。若分配不成功,则返回null。 8.8.2 怎样建立内存的动态分配 用calloc函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size。这就是动态数组。函数返回指向所分配域的起始位置的指针;如果分配不成功,返回NULL。 如: p=calloc(50,4); 开辟50×4个字节的临时分配域,把起始地址赋给指针变量p 8.8.2 怎样建立内存的动态分配 3.free函数 其函数原型为 void free(void *p); 功能:释放由p所指向的内存空间。 注:p只能是由malloc( )和calloc( )所分配的动态存储空间的指针。 8.8.2 怎样建立内存的动态分配 4. realloc函数 其函数原型为 void *realloc(void *p,unsigned int size); 如果已经通过malloc函数或calloc函数获得了动态空间,想改变其大小,可以用recalloc函数重新分配。 如: realloc(p,50);将p所指向的已分配的动态空间改为50字节 。 8.8.2 怎样建立内存的动态分配 8.8.3 void指针类型 例8.30 建立动态数组,输入5个学生的成绩,另外用一个函放数检查其中有无低于60分的,输出不合格的成绩。 解题思路: 用malloc函数开辟一个动态自由区域,用来存5个学生的成绩,会得到这个动态域第一个字节的地址,它的基类型是void型。用一个基类型为int的指针变量p来指向动态数组的各元素,并输出它们的值。但必须先把malloc函数返回的void指针转换为整型指针,然后赋给p1。 #include stdio.h #include stdlib.h int main() { void check(int *); int *p1,i; p1=(int *)malloc(5*sizeof(int)); for(i=0;i5;i++) scanf(%d,p1+i); check(p1); return 0; } void check(int *p) { int i; printf(They are fail:); for(i=0;i5;i++) if (p[i]60) printf(%d ,p[i]); printf(\n); } 本章小结:关于指针的四大问题 1.如何定义指向不同对象的指针? 2.如何指向这些对象? 3.如何通过指针变量访问这些对象?
您可能关注的文档
最近下载
- 艾滋病防治知识讲座.pptx VIP
- T∕ZZB 2086-2021 塑料拖链标准规范.docx VIP
- 2025年文化教育职业技能考试-钢琴调律师考试近5年真题集锦(频考类试题)带答案.docx
- 高清版40篇短文搞定3500词.pdf VIP
- 分流职员申请表标准模板.docx VIP
- 人教版(2024年新教材)七年级上册英语Unit 2 We're Family 单元整体教学设计.docx VIP
- 急诊手术患者围术期肺保护管理策略专家共识解读PPT课件.pptx VIP
- 基于临床实践出血性疾病动态危急值专家共识2024版解读.pptx VIP
- 绘本《我家是动物园》.ppt VIP
- 广州数控GSK928TF 车床数控系统 使用手册 速印版2009-5-13.pdf
文档评论(0)