在学习 C语言动态数组 之前,你可能已经熟悉了静态数组。静态数组在定义时必须指定大小,且无法在运行时改变。但在实际开发中,我们常常不知道数据量的大小,这时就需要使用动态数组——它能根据需要自动调整容量。本文将手把手教你如何用 C 语言实现一个简单的动态数组,适合编程小白阅读。
静态数组有以下局限:
而通过 动态内存分配(使用 malloc、realloc 等函数),我们可以创建一个可以根据需要自动扩容的数组结构。
我们将封装一个简单的动态数组结构体,包含以下成员:
data:指向实际存储数据的指针;size:当前已存储元素个数;capacity:当前分配的总容量。当添加新元素但空间不足时,我们会将容量翻倍(或其他策略),并使用 realloc 重新分配内存。
下面是一个完整的、可运行的 C 语言动态数组实现:
#include <stdio.h>#include <stdlib.h>typedef struct { int* data; int size; int capacity;} DynamicArray;DynamicArray* create_array(int initial_capacity) { DynamicArray* arr = (DynamicArray*)malloc(sizeof(DynamicArray)); if (!arr) { fprintf(stderr, "内存分配失败!\n"); return NULL; } arr->data = (int*)malloc(initial_capacity * sizeof(int)); if (!arr->data) { free(arr); fprintf(stderr, "数据内存分配失败!\n"); return NULL; } arr->size = 0; arr->capacity = initial_capacity; return arr;}void push_back(DynamicArray* arr, int value) { if (arr->size >= arr->capacity) { arr->capacity *= 2; // 扩容为原来的两倍 arr->data = (int*)realloc(arr->data, arr->capacity * sizeof(int)); if (!arr->data) { fprintf(stderr, "扩容失败!\n"); exit(1); } } arr->data[arr->size++] = value;}void print_array(DynamicArray* arr) { printf("["); for (int i = 0; i < arr->size; i++) { printf("%d", arr->data[i]); if (i < arr->size - 1) printf(", "); } printf("]\n");}void free_array(DynamicArray* arr) { free(arr->data); free(arr);}int main() { DynamicArray* arr = create_array(2); for (int i = 1; i <= 10; i++) { push_back(arr, i); } printf("当前数组内容: "); print_array(arr); printf("容量: %d, 大小: %d\n", arr->capacity, arr->size); free_array(arr); return 0;}
create_array:初始化动态数组,分配初始内存;push_back:向数组末尾添加元素,若空间不足则扩容;print_array:打印当前数组内容;free_array:释放所有动态分配的内存,防止内存泄漏。运行该程序,你会看到输出:
当前数组内容: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]容量: 16, 大小: 10
可以看到,虽然我们只添加了 10 个元素,但容量自动从 2 → 4 → 8 → 16 扩展,体现了 数组扩容 的能力。
malloc 或 realloc 后务必检查返回值是否为 NULL;free 释放内存,否则会造成内存泄漏;int 类型,可通过 void* 和宏实现泛型(进阶内容)。通过本教程,你已经掌握了如何用 C 语言实现一个基本的动态数组。这不仅是理解 C语言动态数组 和 动态内存分配 的关键一步,也为后续学习更复杂的数据结构(如链表、栈、队列)打下基础。希望这篇 C语言教程 能帮助你轻松入门!
提示:动手修改代码,尝试添加删除元素、插入元素等功能,加深理解。
本文由主机测评网于2025-12-05发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123447.html