数组增长的本质就是重新分配一块更大的内存空间,把原数组内容memcpy过去, 释放掉原数组空间,新的数组即增长后的数组。
memcpy内存拷贝函数
void*memcpy(void*destin,void*source,unsigned n);
从source中拷贝n个字节到destin中
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//创建一个Array的结构体
typedef struct{
int *array;
int size;//数组大小
}Array;
//创建一个init_size大小的数组 ,并返回
Array create(int init_size)
{
Array a;
a.size=init_size;
a.array=(int *)malloc(sizeof(int)*a.size);
return a;
}
//释放数组内存空间
void array_free(Array*a)
{
free(a->array);
}
//返回数组的大小
int size(Array*a)
{
return a->size;
}
//数组增长(malloc一片更大的空间,把原内容复制过去,释放掉原空间)
void inflate(Array*a,int more_size)
{
int *p=(int *)malloc(sizeof(int )*((a->size)+more_size));
memcpy(p,a->array,sizeof(int)*a->size);
free(a->array);
a->array=p;
a->size+=more_size;
}
//根据索引获取某个位置上的数组值
int* at(Array*a,int index)
{
if(index>=a->size){
inflate(a,index-a->size+1);//如果索引值已经超过整个数组,则数组增长
}
return &(a->array[index]);
}