- 1、本文档共213页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.8.2 怎样建立内存的动态分配 malloc(100); 开辟100字节的临时分配域,函数值为其第1个字节的地址 注意指针的基类型为void,即不指向任何类型的数据,只提供一个地址 如果此函数未能成功地执行(例如内存空间不足),则返回空指针(NULL) 8.8.2 怎样建立内存的动态分配 2.calloc函数 其函数原型为 void *calloc(unsigned n,unsigned size); 其作用是在内存的动态存储区中分配n个长度为size的连续空间,这个空间一般比较大,足以保存一个数组。 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应是最近一次调用calloc或malloc函数时得到的函数返回值。 8.8.2 怎样建立内存的动态分配 free(p); 释放指针变量p所指向的已分配的动态空间 free函数无返回值 8.8.2 怎样建立内存的动态分配 4. realloc函数 其函数原型为 void *realloc(void *p,unsigned int size); 如果已经通过malloc函数或calloc函数获得了动态空间,想改变其大小,可以用recalloc函数重新分配。 8.8.2 怎样建立内存的动态分配 用realloc函数将p所指向的动态空间的大小改变为size。p的值不变。如果重分配不成功,返回NULL。如 realloc(p,50); 将p所指向的已分配的动态空间改为50字节 8.8.2 怎样建立内存的动态分配 以上4个函数的声明在stdlib.h头文件中,在用到这些函数时应当用“#include stdlib.h”指令把stdlib.h头文件包含到程序文件中。 8.8.3 void指针类型 例8.30 建立动态数组,输入5个学生的成绩,另外用一个函放数检查其中有无低于60分的,输出不合格的成绩。 8.8.3 void指针类型 解题思路:用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); } 8.9有关指针的小结 1.首先要准确地弄清楚指针的含义。指针就是地址,凡是出现“指针”的地方,都可以用“地址”代替,例如,变量的指针就是变量的地址,指针变量就是地址变量 要区别指针和指针变量。指针就是地址本身,而指针变量是用来存放地址的变量。 8.9有关指针的小结 2. 什么叫“指向”?地址就意味着指向,因为通过地址能找到具有该地址的对象。对于指针变量来说,把谁的地址存放在指针变量中,就说此指针变量指向谁。但应注意:只有与指针变量的基类型相同的数据的地址才能存放在相应的指针变量中。 8.9有关指针的小结 void *指针是一种特殊的指针,不指向任何类型的数据,如果需要用此地址指向某类型的数据,应先对地址进行类型转换。可以在程序中进行显式的类型转换,也可以由编译系统自动进行隐式转换。无论用哪种转换,读者必须了解要进行类型转换 8.9有关指针的小结 3. 要深入掌握在对数组的操作中怎样正确地使用指针,搞清楚指针的指向。一维数组名代表数组首元素的地址 8.9有关指针的小结 int *p,a[1
文档评论(0)