c语言创建一个动态数组代码
时间: 2024-09-20 17:00:29 浏览: 55
在C语言中,由于缺乏内置的动态数组类型,我们通常使用`malloc()`和`realloc()`函数来手动管理内存来创建动态数组。以下是一个简单的示例,展示如何创建一个动态数组存储整数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义动态数组结构体
typedef struct {
int* array; // 数组指针
size_t size; // 当前数组大小
size_t capacity; // 预期最大容量
} DynamicArray;
// 动态数组初始化
DynamicArray* create_array(size_t initial_capacity) {
DynamicArray* arr = (DynamicArray*) malloc(sizeof(DynamicArray));
if (arr == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
arr->array = (int*) malloc(initial_capacity * sizeof(int)); // 分配初始内存
if (arr->array == NULL) {
free(arr); // 如果内存分配失败,释放之前分配的
printf("Memory allocation failed for the array.\n");
return NULL;
}
arr->size = 0;
arr->capacity = initial_capacity;
return arr;
}
// 扩容函数
void resize_array(DynamicArray* arr, size_t new_capacity) {
int* new_arr = (int*) realloc(arr->array, new_capacity * sizeof(int));
if (new_arr != NULL) { // 成功扩展内存
arr->array = new_arr;
arr->capacity = new_capacity;
} else { // 扩展失败,尝试缩小
new_arr = (int*) realloc(arr->array, arr->size * sizeof(int)); // 返回旧容量
if (new_arr != NULL) {
arr->array = new_arr;
} else {
printf("Memory reallocation failed.\n");
free(arr->array); // 无论如何,都要释放旧内存
free(arr);
}
}
}
// 添加元素
void add_element(DynamicArray* arr, int element) {
if (arr->size == arr->capacity) {
resize_array(arr, arr->capacity * 2); // 如果满了,就扩展一倍
}
arr->array[arr->size] = element;
arr->size++;
}
// 释放数组
void destroy_array(DynamicArray* arr) {
free(arr->array);
free(arr);
}
int main() {
DynamicArray* my_array = create_array(5);
if (my_array) {
// 添加元素...
add_element(my_array, 10);
add_element(my_array, 20);
// 使用和清理数组...
// ...
destroy_array(my_array);
}
return 0;
}
```
在这个例子中,`create_array`函数负责创建数组,`resize_array`用于扩展数组,`add_element`添加元素,最后`destroy_array`用于释放内存。
阅读全文