C语言 动态内存分配的详解及示例
什么是动态内存分配
在编程中,有时我们需要根据实际情况动态地分配内存空间,而不是在编写时就预先分配好。这种内存分配方式被称为动态内存分配。动态内存分配可以避免预分配内存的浪费,同时还可以根据需要扩充内存。
C语言中提供了四个用于动态内存分配的库函数,分别是 malloc
、calloc
、realloc
和 free
。
malloc
函数用于分配一块指定大小的内存空间,并返回一个指向它的指针;calloc
函数分配一块指定数量和大小的内存空间,并初始化为0,其返回值也是指向该内存块的指针;realloc
函数用于改变原来已分配内存的大小,并返回修改后的内存空间首地址;free
函数用于释放已经分配的内存空间。
动态内存分配实例
一维数组的动态内存分配
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i;
scanf("%d", &n);
int *a = (int *) malloc(n * sizeof(int)); //分配一维数组
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
free(a); //释放内存
return 0;
}
在上述示例中,我们通过 malloc()
函数动态地分配了一个包含 n
个整数的一维数组,并用指针变量 a
指向了这个数组。随后,用户输入了该数组的各个元素,最后依次输出这些元素,并通过 free()
函数释放了已分配的内存空间。
二维数组的动态内存分配
#include <stdio.h>
#include <stdlib.h>
int main() {
int row, col, i, j;
scanf("%d%d", &row, &col);
int **a = (int **) malloc(row * sizeof(int *)); //分配二维数组整体
for (i = 0; i < row; i++) {
a[i] = (int *) malloc(col * sizeof(int)); //为二维数组的每行分配一维数组
for (j = 0; j < col; j++) {
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
for (i = 0; i < row; i++) {
free(a[i]); //释放每行的内存空间
}
free(a); //释放整体内存空间
return 0;
}
该示例中,我们通过 malloc()
函数动态地分配了一个包含 row
行、col
列的二维数组,并用指针变量 a
指向了其整体。随后,我们为二维数组的每一行分别动态分配了一维数组,用于存储该行的元素。接口用户依次输入了各个元素,最终输出整个数组,并通过 free()
函数按先行后列的顺序释放了动态分配的内存空间。
小结
本文主要讲解了C语言中动态内存分配的详细知识以及两个实例,希望读者能够掌握在实际程序中使用这些函数的方法。 需要注意的是,使用 malloc()
及其相关函数前应该了解程序所需的内存空间大小,同时强烈建议在使用完毕后及时释放动态分配的内存空间。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 动态内存分配的详解及实例 - Python技术站