#include
#include
#define BLOCK_SIZE 20
//
每次
“
长大
”
的时候都要去申请新的内存空间,拷贝需要花时间。
//may fail in memory restricted situation
typedefstruct
{
int *array;
int size;
} Array;
//
创建新数组
Array array_create(intinit_size)
{
Array a;
a.array=(int*)malloc(sizeof(int)*init_size);
a.size=init_size;
return a;
}
//
释放内存空间
void array_free(Array *a)
{
free(a->array);
a->size=0;
a->array=NULL;
}
//
得到当前数组的长度(不见得是元素的个数)
intarray_size(const Array *a)
{
return a->size;
}
//
获取该下标下的元素
int* array_at(Array *a,int index)
{
void array_inflate(Array *a,intmore_size);//
函数申明
if(index>=a->size)
{
array_inflate(a,(index/BLOCK_SIZE+1)*BLOCK_SIZE-a->size);//**
}
return &(a->array[index]);
}
void array_inflate(Array *a,intmore_size)
{
inti;
int *p=(int *)malloc(sizeof(int)*(a->size+more_size));//**
for(i=0;isize;i++)
{
p[i]=a->array[i];
}
free(a->array);//**
a->array=p;//**
a->size+=more_size;
}
intmain(intargc,charconst *argv[])
{
Array a=array_create(5);
int j;
for(j=0;j<10;j++)
{
*array_at(&a,j)=j+1;
}
for(j=0;j<10;j++)
{
printf("%d
",*array_at(&a,j));
}
printf("\n%d\n",array_size(&a));
array_free(&a);
return 0;
}
//
输出
//1
2
3
4
5
6
7
8
9
10
//20