📅  最后修改于: 2023-12-03 15:29:44.587000             🧑  作者: Mango
C数组是一种可存储相同类型数据项的集合。但是,一旦数组被声明和初始化,它的大小就不可更改。这时,我们可以借助动态内存分配机制来创建大小可变的数组——动态数组。
C语言提供了两个函数来进行动态内存分配:malloc()和calloc()。它们都可以在堆上分配一块指定大小的内存空间,并返回分配空间的地址。
void* malloc(size_t size);
void* calloc(size_t num, size_t size);
借助malloc()/calloc()函数,我们可以在程序运行时动态地分配数组的空间。首先,我们利用指针变量p指向malloc()/calloc()函数分配的内存空间。随后,利用p指针操作真正存储数据的空间。
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 5; // 数组长度
int *p = (int*)malloc(n * sizeof(int)); // 分配空间
p[0] = 1;
p[1] = 2;
p[2] = 3;
p[3] = 4;
p[4] = 5; // 操作空间
for (int i = 0; i < n; i++) {
printf("%d ", p[i]);
}
printf("\n");
free(p); // 释放空间
return 0;
}
注意事项:
动态数组的最大好处在于可以在程序运行时扩展数组的空间大小。当使用malloc()/calloc()分配空间时,可以通过realloc()函数重新调整动态数组的大小。
void* realloc(void* ptr, size_t size);
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 5; // 数组长度
int *p = (int*)malloc(n * sizeof(int)); // 分配空间
p[0] = 1;
p[1] = 2;
p[2] = 3;
p[3] = 4;
p[4] = 5; // 操作空间
int *q = (int*)realloc(p, 10*sizeof(int)); // 扩展空间
q[5] = 6;
q[6] = 7;
q[7] = 8;
q[8] = 9;
q[9] = 10; // 操作新空间
for (int i = 0; i < 10; i++) {
printf("%d ", q[i]);
}
printf("\n");
free(q); // 释放空间
return 0;
}
注意事项:
动态数组是C语言中非常实用的一种数据结构,能够解决数组空间固定不足以存储所有数据的问题。借助malloc()/calloc()和realloc()函数,我们可以自由地分配和调整数组的大小,提高程序的灵活性和扩展性。