#include const int BLOCK_SIZE = 20;
//创建结构体
typedef struct {
int *array;
int size;
} Array;
//函数声明
Array array_create(int init_size);
void array_free(Array *a);
int array_size(const Array *a);
int* array_at(Array *a,int index);
void array_inflate(Array *a,int more_size);
//函数
//创建数组
Array 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);
a->array = NULL;
a->size = 0;
}
//封装,获取数组大小
int array_size(const Array *a){//*a 声明a是一个指针变量,传入参数的时候要用&传入地址
return a->size;
}
//查询数组下标对应值
int* array_at(Array *a,int index){
if (index >= a->size){
array_inflate(a, (index/BLOCK_SIZE+1)*BLOCK_SIZE-a->size);
}//如果下标超出数组长度,则把数组增大一个BLOCK
return &(a->array[index]);
}
/*
int array_get(const Array *a,int index){
return a->array[index];
}
void array_set(Array *a, int index, int value){
a->array[index] = value;
}
*/
//增长数组
void array_inflate(Array *a,int more_size){
int *p = (int*)malloc(sizeof(int)*(a->size + more_size));
int i;
for (i=0; isize; i++){
p[i] = a->array[i];
}
free(a->array);
a->array = p;
a->size += more_size;
}
int main(int argc, char const *argv[] )
{
Array a = array_create(10);
printf("数组长度为:%d\n",array_size(&a));
*array_at(&a,0) = 5;//写入值到数组
*array_at(&a,1) = 6;//写入值到数组
*array_at(&a,2) = 7;//写入值到数组
printf("第一位值为:%d\n",*array_at(&a,0));
printf("第二位值为:%d\n",*array_at(&a,1));
printf("第三位值为:%d\n",*array_at(&a,2));
//int number = 0;
//int cnt = 0;
//while (number !=-1){
//scanf("%d", &number);
//if (number != -1){
//*array_at(&a,cnt++) = number;
//}
//}
array_free(&a);
return 0;
}
本文详细介绍了如何使用C++创建和管理数组,包括动态数组的创建、`array_create`函数,内存释放的`array_free`函数,以及如何通过`array_inflate`函数实现数组的动态扩容。核心展示了数组操作和内存管理的关键点。
1196

被折叠的 条评论
为什么被折叠?



