#include <stdio.h>
#include <stdlib.h>
#include<mem.h>
struct dynamicArray{
void ** pAddr;//动态数组首个地址对应的阵势地址
int m_capacity;
int m_size;
};
//初始化数组
struct dynamicArray * ini_dyArray(int capacity){
if(capacity<=0){
return NULL ;
}
struct dynamicArray * array=malloc(sizeof(struct dynamicArray));
if(array==NULL){
return NULL;
}
array->pAddr=malloc(sizeof(void )(array->m_capacity));
array->m_capacity=capacity;//容量
array->m_size=0;//大小
//array->pAddr=&array;
return array;
}
void insert_dyArray(struct dynamicArray * array,int pos,void * data){
if(array==NULL){
}
if(data==NULL){
}
if(pos<0||pos>array->m_capacity){
//若数据无意义则尾插
pos=array->m_capacity;
}
if(array->m_size==array->m_capacity){
//新数组的容量
int new_capacity=(array->m_capacity)*2;
//创建新数组
//1.申请一个更大的空间
void ** new_array= malloc(sizeof(void *)*new_capacity);
//C 库函数 void *memcpy(void *str1, const void *str2, size_t n)
// 从存储区 str2 复制 n 个字节到存储区 str1
//2.将arry中的数据复制到new_array中
memcpy(new_array,array->pAddr,sizeof(void*)*array->m_capacity);//这里用size也可
//3.释放原有空间
free(array->pAddr);
//4.改变指针指向
array->pAddr=new_array;
//5.改变容量
array->m_capacity=new_capacity;
}
for(int i=array->m_size-1;i>=pos;i--){
array->pAddr[i+1]=array->pAddr[i];
}
//2.插入元素
array->pAddr[pos]=data;
//3.更新大小
array->m_size++;
}
void foreach_DynamicArray(struct dynamicArray * array,void(myForreach)(void)){
if(array==NULL){
return ;
}
if(myForreach==NULL){
return ;
}
for(int i=0;im_size;i++){
myForreach(array->pAddr);
}
}
struct person{
char name[64];
int old;
};
void myPrintPerson(void *data){
struct person *ele=data;
printf("姓名:%s 年龄:%d\n",ele->name,ele->old);
}
void test01(){
struct dynamicArray * arr=ini_dyArray(5);
struct person p1={"a",10};
struct person p2={"b",20};
struct person p3={"c",30};
struct person p4={"d",40};
struct person p5={"e",50};
struct person p6={"f",60};
insert_dyArray(arr,0,&p1);
insert_dyArray(arr,0,&p2);
insert_dyArray(arr,3,&p3);
insert_dyArray(arr,11,&p4);
insert_dyArray(arr,2,&p5);
insert_dyArray(arr,1,&p6);
//bbb fff aaa eee ccc ddd
foreach_DynamicArray(arr,myPrintPerson);
}
int main(){
test01();
return 0;
}