用C语言定义一个动态一维数组
时间: 2024-10-22 19:22:29 浏览: 31
C++两个一维数组相加求和
在C语言中,动态数组通常通过`malloc`函数来创建,因为C标准库没有提供直接定义动态数组的数据结构。下面是一个例子,演示如何定义和操作一个动态的一维整数数组:
```c
#include <stdlib.h> // 包含malloc和free函数
// 动态数组的结构体声明
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 for the array failed.\n");
return NULL;
}
arr->size = 0;
arr->capacity = initial_capacity;
return arr;
}
// 动态增加数组元素
void resize_array(DynamicArray* arr, size_t new_capacity) {
if (new_capacity > arr->capacity) {
int* temp = (int*)realloc(arr->array, new_capacity * sizeof(int)); // 扩容
if (temp == NULL) {
printf("Resizing array failed.\n");
return;
}
arr->array = temp;
arr->capacity = new_capacity;
}
}
// 添加元素到数组
void add_element(DynamicArray* arr, int value) {
if (arr->size == arr->capacity) { // 判断是否需要扩容
resize_array(arr, arr->capacity * 2); // 扩大两倍
}
arr->array[arr->size] = value; // 插入元素
arr->size++;
}
// 示例使用
int main() {
DynamicArray* my_array = create_array(5);
if (my_array != NULL) {
add_element(my_array, 10);
add_element(my_array, 20);
// ...其他操作...
free(my_array->array); // 释放数组空间
free(my_array); // 释放动态数组自身
}
return 0;
}
```
阅读全文