正在加载图片...
本程序中定义了函数ave,其形参为结构指针变量ps。boy被定义为外部结构数组,因 此在整个源程序中有效。在main函数中定义说明了结构指针变量ps,并把boy的首地址赋 予它,使ps指向boy数组。然后以ps作实参调用函数ave。在函数ave中完成计算平均成 绩和统计不及格人数的工作并输出结果 由于本程序全部采用指针变量作运算和处理,故速度更快,程序效率更高。 118动态存储分配 在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变。C语言 中不允许动态数组类型。 例如 int n canf(%d",&n) int alnI 用变量表示长度,想对数组的大小作动态说明,这是错误的。但是在实际的编程中,往 往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种 问题,用数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些 内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地 利用内存资源提供了手段 常用的内存管理函数有以下三个 1.分配内存空间函数 malloc 调用形式 (类型说明符*) malloc(size) 功能:在内存的动态存储区中分配一块长度为"size"字节的连续区域。函数的返回值为 该区域的首地址 类型说明符”表示把该区域用于何种数据类型。 (类型说明符*)表示把返回值强制转换为该类型指针。 “size〃是一个无符号数 例如 pc=(char *)malloc(100) 表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该 字符数组的指针,把该指针赋予指针变量pc。 2.分配内存空间函数 calloc calloc也用于分配内存空间。 调用形式: (类型说明符*) calloc(n,size) 功能:在内存动态存储区中分配n块长度为size〃字节的连续区域。函数的返回值 为该区域的首地址 (类型说明符*)用于强制类型转换。 calloc函数与 malloc函数的区别仅在于一次可以分配n块区域。 例如: ps=(strut stu*)calloc(2, sizeof(struct stu))本程序中定义了函数 ave,其形参为结构指针变量 ps。boy 被定义为外部结构数组,因 此在整个源程序中有效。在 main 函数中定义说明了结构指针变量 ps,并把 boy 的首地址赋 予它,使 ps 指向 boy 数组。然后以 ps 作实参调用函数 ave。在函数 ave 中完成计算平均成 绩和统计不及格人数的工作并输出结果。 由于本程序全部采用指针变量作运算和处理,故速度更快,程序效率更高。 11.8 动态存储分配 在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变。C语言 中不允许动态数组类型。 例如: int n; scanf("%d",&n); int a[n]; 用变量表示长度,想对数组的大小作动态说明,这是错误的。但是在实际的编程中,往 往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种 问题,用数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些 内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地 利用内存资源提供了手段。 常用的内存管理函数有以下三个: 1. 分配内存空间函数 malloc 调用形式: (类型说明符*)malloc(size) 功能:在内存的动态存储区中分配一块长度为"size"字节的连续区域。函数的返回值为 该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。 (类型说明符*)表示把返回值强制转换为该类型指针。 “size”是一个无符号数。 例如: pc=(char *)malloc(100); 表示分配 100 个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该 字符数组的指针,把该指针赋予指针变量 pc。 2. 分配内存空间函数 calloc calloc 也用于分配内存空间。 调用形式: (类型说明符*)calloc(n,size) 功能:在内存动态存储区中分配 n 块长度为“size”字节的连续区域。函数的返回值 为该区域的首地址。 (类型说明符*)用于强制类型转换。 calloc 函数与 malloc 函数的区别仅在于一次可以分配 n 块区域。 例如: ps=(struet stu*)calloc(2,sizeof(struct stu));
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有