1、语言程序设计 第八章综合设计与应用C8.5动态存储空间分配 动态存储空间分配相对于静态存储空间分配具有如下特点: 不需要预先分配存储空间; 分配的空间可以根据程序的需要扩大或缩小。 C语言提供了若干动态存储空间分配函数,常用的有: malloc函数、 calloc函数和 free函数。语言程序设计 第八章综合设计与应用C(1) malloc()函数 原 型: void *malloc(unsigned int size); 头文件: #include 参 数: size 参数是一个无符号整形数,表示分配存储空间的字节数 功 能:在内存的动态存储区中分配一个长度为 size的连续空间 说 明:若
2、成功,返回指向分配区域起始地址的指针 (类型为 void);若失败,返回空指针NULL语言程序设计 第八章综合设计与应用C(2) calloc()函数 void * calloc( unsigned n, unsigned size ); 头文件: #include 参 数: size 表示分配存储空间的字节数; n 有多少个 size 功 能:在内存的动态区存储中分配 n个长度为 size的连续空间 说 明:若成功,返回指向分配区域起始地址的指针 (类型为 void);若失败,返回空指针NULL语言程序设计 第八章综合设计与应用C(3) free()函数 原 型: void free(voi
3、d *ptr); 头文件: #include 参 数: ptr欲释放内存单元的地址 功 能:在完成对所分配内存空间的使用之后,要通过调用 free()函数来释放它,释放后的内存区能够重新分配给其他变量使用 说 明:参数 ptr必须是先前调用动态空间分配函数 (malloc或 calloc等 )时返回的指针语言程序设计 第八章综合设计与应用C例 8-10动态分配一块区域,存储一个学生数据,并输出该学生数据。 语言程序设计 第八章综合设计与应用C程序清单 8-11 StructStu.c#include “stdio.h“#include “stdlib.h“struct sStudentint
4、nNum;char *cName;char cSex;float fScore; *psStu;void main(void) psStu = ( struct sStudent * ) malloc( sizeof ( struct sStudent ) ); 语言程序设计 第八章综合设计与应用C程序清单 8-11 StructStu.cpsStu-nNum=102;psStu-cName=“Zhang ping“;psStu-cSex=M;psStu-fScore=62.5;printf( “Number=%dnName=%sn“, psStu-nNum,psStu-cName ); pr
5、intf(“Sex=%cnScore=%fn“,psStu-cSex,psStu-fScore);free(psStu);语言程序设计 第八章综合设计与应用C 运行结果如图 8-22所示。语言程序设计 第八章综合设计与应用C8.6链表 8.6.1链表的概念 问题:结构体内的成员类型可以是其本身吗? 程序清单 8-12 StuTest.c语言程序设计 第八章综合设计与应用C程序清单 8-12 StuTest.c#include “stdio.h“#include “stdlib.h“struct studentint nNum;char cName20;int nScoreAvg;struct student sStu;void main()printf(“仅用来测试! “);