题为c程序设计(第五版)谭浩强 例8.30
前言
这篇博客,让我们一起来学习内存的动态分配。
那么,什么是内存的动态分配呢?C语言允许建立内存动态分配区域,以存取一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放。这些数据是临时存放在一个特别的自由存储区,称为堆区。可以根据需要,向系统申请所需大小的空间。由于未在声明部分定义它们为变量或数组,因此不能通过变量名或数组名去引用这些数据,只能通过指针来引用。
一、题目复现
二、实现步骤
1.思路分析
1.使用malloc函数开辟一个动态自由区域,用来存放5个学生的成绩,会得到这个动态域第1个字节的地址,它的基类型是void型。
2.用一个基类型为int的指针变量p来指向动态数组的各元素,并输出它们的值。但是必须先把malloc函数返回的void指针转换为整形指针,然后赋给p1。
2.具体实现
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h> //程序中用了malloc函数,应包含stdlib.h
int main()
{
void check(int*); //函数声明
int* p1, i; //p1是int型指针
p1 = (int*)malloc(5 * sizeof(int)); //开辟动态内存区,将地址转换成int*型,然后放在p1中
for (i = 0; i < 5; i++)
scanf("%d", p1 + i); //输入5个学生的成绩
check(p1); //调用check函数
return 0;
}
void check(int* p) //定义check函数,形参是int*指针
{
int i;
printf("They are fail:");
for (i = 0; i < 5; i++)
{
if (p[i] < 60)
printf("%d\t", p[i]); //输出不合格的成绩
}
printf("\n");
}
实验结果(示例):
总结
内存的动态分配能够更充分的利用计算机的内存空间,并且更好的发挥了c语言的灵活性。在实际应用中,内存的动态分配主要应用于建立程序中的动态数据结构(如链表)中。