- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章 指针类型(续) 主要内容 5.1 指向普通变量的指针 5.2 指向数组和函数的指针 5.3 动态变量和链表 5.3 动态变量和链表 两类变量:定义变量和动态变量 定义变量个数是固定,存储单元的分配时机也相对固定 动态变量个数不确定,产生的时机也不确定 每调用一次动态分配函数malloc便产生一个动态变量 动态变量的产生依赖于调用动态分配函数的次数和时机 5.3.1 动态管理函数的用法 malloc.h中动态存储分配函数(申请存储空间): malloc(size) calloc(n,size) realloc(p,size) size和n为无符号整型(unsigned) 返回值存储单元首地址(若分配失败返回NULL) 回收函数(释放存储空间):free(p) p是指针 1.malloc(size)函数的用法 分配size个字节的存储区,返回值为所分配存储区的首地址 返回值的类型为void*(使用时进行类型转换) 2.calloc(n,size)函数的用法 分配n个单位的连续内存空间,每个单位占size字节 产生长度可变的动态数组 2.calloc(n,size)函数的用法 分配n个单位的连续内存空间,每个单位占size字节 产生长度可变的动态数组 3.realloc(p,size)函数的用法 重新分配函数 p:原来分配空间的首地址 size:现在要求的空间长度 含义:将原来用动态分配函数所分配的存储空间 修改为长度为size的动态存储空间 例5-16 动态数组用法示例 //数组长度可根据输入元素个数动态变化 //由初始长度n开始,每当长度不足时就追加长度增量d #include stdio.h #include malloc.h #define d 10 //空间追加增量 void main( ) { int x,*p,*a; unsigned n,m=0,i; printf(请输入数组的初始长度n=); scanf(%d,n); a=p=(int *)calloc(n,sizeof(int)); //产生初始长度的动态数组 printf(请输入数组元素值,0表示输入结束:\n); scanf(%d,x); //读入第一个元素值 例5-16 动态数组用法示例 while(x) //x为0退出循环 { if(m==n) //若现空间用完 { n+=d; //空间长度加一个增量 printf(原空间已经用完,现长度追加至n=%d\n,n); a=(int *)realloc(a,n*sizeof(int)); //申请追加空间 p=a+m; //将指针调整到当前尾部 } *p++=x,m++; //存储x,并计数m scanf(%d,x); //继续读入下一个元素 } printf(当前共有%d个元素:\n,m); for(p=a,i=0;im;i++)printf(%4d,*p++); //输出数组元素 printf(\n); } 4.free(p)函数的用法 用于释放已经用过而不再使用的动态内存空间 将其回收到动态分配区(以便供给后续申请者) 5.3.2 new和delete的用法 new和delete是C++的两个运算符(不是函数) 功能分别相当于malloc和free函数 5.3.2 new和delete的用法 (1)产生简单的动态变量示例 5.3.2 new和delete的用法 (2)产生一维动态数组示例 (2)产生二维动态数组示例 使用new运算的注意事项 5.3.2 new和delete的用法 2.delete用法示例 例5-17 new和delete的用法示意性程序 例5-17 new和delete的用法示意性程序 5.3.3 链表简介 链表(linked list)由相互链接在一起的结点组成的 动态存储结构 结点通常是结构类型 结点含有值域(value field)和链域(link field) 值域用于存储元素值 链域用于存储下一结点的地址(对于单向链表) 最后一个结点(尾结点)的链域值为空(NULL) 5.3.3 链表简介 链表的种类很多,这里指简单的单向动态链表 例5-18 结点类型定义示例 例5-19 构造3个结点链表的程序段(步骤) 例5-19 构造3个结点链表的程序段(步骤) 例5-19 构造3个结点链表的程序段(步骤) 例5-20 用向前插入法构造链表的函数 向前插入构造法示例,
您可能关注的文档
- AutoCAD应用教程 第2版 教学课件 作者 李善锋 姜东华 姜勇 第2章 设置图层、线型、线宽及颜色.ppt
- AutoCAD应用教程 第2版 教学课件 作者 李善锋 姜东华 姜勇 第3章 基本绘图与编辑(一).ppt
- AutoCAD应用教程 第2版 教学课件 作者 李善锋 姜东华 姜勇 第4章 基本绘图与编辑(二).ppt
- AutoCAD应用教程 第2版 教学课件 作者 李善锋 姜东华 姜勇 第5章 高级绘图与编辑.ppt
- AutoCAD应用教程 第2版 教学课件 作者 李善锋 姜东华 姜勇 第6章 复杂图形绘制实例.ppt
- AutoCAD应用教程 第2版 教学课件 作者 李善锋 姜东华 姜勇 第7章 查询图形信息.ppt
- AutoCAD应用教程 第2版 教学课件 作者 李善锋 姜东华 姜勇 第8章 在图形中添加文字.ppt
- AutoCAD应用教程 第2版 教学课件 作者 李善锋 姜东华 姜勇 第9章 标注尺寸.ppt
- AutoCAD应用教程 第2版 教学课件 作者 李善锋 姜东华 姜勇 第10章 参数化绘图.ppt
- AutoCAD应用教程 第2版 教学课件 作者 李善锋 姜东华 姜勇 第11章 图块及外部引用.ppt
- AutoCAD2010中文版范例教程 教学课件 作者 王重阳 autocad2010中文版范例教程 第4章.ppt
- C C++程序设计 第2版 教学课件 作者 陈卫卫 电子教案 C第6章 1.ppt
- C C++程序设计 第2版 教学课件 作者 陈卫卫 电子教案 C第6章 2.ppt
- C C++程序设计 第2版 教学课件 作者 陈卫卫 习题解答 第1章,仅答案.doc
- AutoCAD2010中文版范例教程 教学课件 作者 王重阳 autocad2010中文版范例教程 第5章.ppt
- C C++程序设计 第2版 教学课件 作者 陈卫卫 习题解答 第2章,仅答案.doc
- C C++程序设计 第2版 教学课件 作者 陈卫卫 习题解答 第3章,仅答案.doc
- C C++程序设计 第2版 教学课件 作者 陈卫卫 习题解答 第4章,仅答案.doc
- C C++程序设计 第2版 教学课件 作者 陈卫卫 习题解答 第5章,仅答案.doc
- AutoCAD2010中文版范例教程 教学课件 作者 王重阳 autocad2010中文版范例教程 第6章.ppt
文档评论(0)