三个重要的内存动态管理函数——malloc函数、calloc函数和free函数
前言:对于以往的数组,其长度都是一个固定的常量,C语言不允许定义动态数组,但是却提供了内存动态管理函数,分别是malloc函数、calloc函数和free函数。
一、mallpoc函数
1. 函数信息
函数原型 | 函数说明 |
---|---|
void *malloc(unsigned int size); | malloc函数返回值类型是void*,在使用malloc函数的返回值时需要强制类型转换成所需的类型 |
2. 代码说明
float * pc;
pc = (float*)malloc(5*sizeof(float)); //相当于声明了一个float pc[5];
二、calloc函数
1. 函数信息
函数原型 | 函数说明 |
---|---|
void *calloc(unsigned n, unsigned size); | calloc函数返回值类型是void*,在使用malloc函数的返回值时需要强制类型转换成所需的类型 |
2. 代码说明
float * ps;
ps = (float*)calloc(5, sizeof(float)); //相当于声明了一个float ps[5];
三、free函数
1. 函数信息
函数原型 | 函数说明 |
---|---|
void free(void *p) | 释放p所指向的一片内存区域,被释放的区域是malloc或calloc函数分配的,free函数没有返回值 |
2. 代码说明
free(pc);
free(ps);
四、综合案例——动态分配一个数组,并对该数组进行写入和读出
1. 代码部分
#include <stdio.h>
#include <stdlib.h>
int main() {
float *pf; //数组名
int i, n; //数组的大小
printf("Please input the size of the array:");
scanf("%d",&n);
pf = (float *) malloc(n*sizeof (float )); //生成动态函数
for(i = 0; i<n; i++)
pf[i] = 1.1f*(i + 1);
for(i = 0; i<n; i++)
printf("%f ",pf[i]);
printf("\n");
free(pf); //调用free函数时自动将pf的类型转换为void类型
return 0;
}
2. 运行结果