c语言数组动态
更新时间:2024-01-17介绍
在C语言中,数组是一种用于存储相同类型数据的数据结构。数组的长度在声明时必须事先确定,这就意味着数组的大小是固定的,无法在运行时动态地改变。然而,有时候我们需要根据程序的需要动态地分配和释放内存,这就需要使用动态数组。
动态数组实现
在C语言中,可以通过动态内存分配函数来实现动态数组,这些函数包括malloc
、calloc
和realloc
。以下是这些函数的详细解释和示例代码:
malloc
malloc
函数用于分配指定大小的连续内存块,并返回该块内存的起始地址,如果内存分配失败,则返回NULL
。
#include#include int main() { int size = 5; int* dynamicArray = (int*)malloc(size * sizeof(int)); if (dynamicArray == NULL) { printf("内存分配失败"); return 0; } // 使用动态数组 for (int i = 0; i < size; i++) { dynamicArray[i] = i + 1; printf("%d ", dynamicArray[i]); } free(dynamicArray); // 释放内存 return 0; }
calloc
calloc
函数也用于分配连续的内存块,但与malloc
不同的是,它会将内存块中的所有字节设置为零。
#include#include int main() { int size = 5; int* dynamicArray = (int*)calloc(size, sizeof(int)); if (dynamicArray == NULL) { printf("内存分配失败"); return 0; } // 使用动态数组 for (int i = 0; i < size; i++) { printf("%d ", dynamicArray[i]); } free(dynamicArray); // 释放内存 return 0; }
realloc
realloc
函数用于重新调整之前分配的内存块的大小。它接受两个参数:之前分配的内存块的指针以及新的大小。如果新的大小小于之前分配的大小,则内存块会被缩小;如果新的大小大于之前分配的大小,则内存块会被扩展。函数返回调整后的内存块的起始地址,如果内存分配失败,则返回NULL
。
#include#include int main() { int size = 5; int* dynamicArray = (int*)malloc(size * sizeof(int)); if (dynamicArray == NULL) { printf("内存分配失败"); return 0; } // 使用动态数组 for (int i = 0; i < size; i++) { dynamicArray[i] = i + 1; printf("%d ", dynamicArray[i]); } int newSize = 10; int* resizedArray = (int*)realloc(dynamicArray, newSize * sizeof(int)); if (resizedArray == NULL) { printf("内存重新分配失败"); free(dynamicArray); // 释放内存 return 0; } dynamicArray = resizedArray; // 更新指针 // 使用重新分配后的动态数组 for (int i = size; i < newSize; i++) { dynamicArray[i] = i + 1; printf("%d ", dynamicArray[i]); } free(dynamicArray); // 释放内存 return 0; }
总结
通过使用malloc
、calloc
和realloc
函数,我们可以实现 C 语言中的动态数组。动态数组的主要优势是可以根据程序的需求动态地分配和释放内存,以适应不同大小的数据集。