1.dynamicArray.h文件-底层
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 动态数组结构体里面包含了真实堆区开辟的数组指针,数组容量,数组实际长度
struct dynamicArray
{
// 真实在堆区开辟数组的指针
void** pAddr; // 类似于栈区的 void *pAddr[100]; 数组的每一个元素都是void *类型
// 数组的容量
int m_capicity;
// 数组实际长度
int m_size;
};
// 初始化数组 参数:数组的容量 返回值:把申请的堆区动态数组结构体指针返回给调用者
extern struct dynamicArray* init_dynamicArray(int capicity);
extern void insert_dynamicArray(struct dynamicArray* arr, int pos, void* data);
extern void removeByPosDynamicArray(struct dynamicArray* arr, int pos);
extern void removeByValueDynamicArray(struct dynamicArray* arr, void* data, int (*compareData)(void* data1, void* data2));
extern void foreach_dynamicArray(struct dynamicArray* arr, void (*print_arr)(void*));
extern void destory_dynamicArray(struct dynamicArray* arr);
2.dynamicArray.c文件
#include "dynamicArray.h"
// 初始化数组 参数:数组的容量 返回值:把申请的堆区动态数组结构体指针返回给调用者
struct dynamicArray* init_dynamicArray(int capicity)
{
if (capicity < 0)
{
return NULL;
}
struct dynamicArray* arr = (struct dynamicArray*)malloc(sizeof(struct dynamicArray));
// 判断申请堆区空间是否成功,因为malloc函数申请堆区内存也会有可能失败
if (ar