慕用4063026
#include<stdio.h> #include<stdlib.h> #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;i<a->size;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