定义可变数组
typedef struct {
int* array;
int size;
}*Array;
出现一个问题那就是定义的所有Array 实际上都是一个指针,虽然会简便一些但是可读性会很差
创建一个h头文件,将需要的函数声明写好
Array array_creat(int init_size);
void array_free(Array* a);
int* array_at(Array* a, int index);
然后写一个.c文件,将函数实现
Array array_creat(int init_size);可变数组的创建
Array array_creat(int init_size) {
Array a;
a.size = init_size;
a.array = (int*)malloc(sizeof(int) * a.size);
return a;
}
void array_free(Array* a);可变数组的析构
void array_free(Array* a) {
free(a->array);
a->size = 0;
a->array = NULL;
}
int array_size(Array* a);
通过封装将我的代码保护起来
int* array_at(Array* a, int index);返回可变数组下标处的地址
int* array_at(Array* a, int index) {
return &(a->array[index]);
}
所以就可以这样使用:为某个下标处设置值
*(array_at(&a, 0)) = 10;
也可以再设置两个函数get和set来方便使用
数组如何增长
因为malloc的空间不能变化,所以只能是再mallloc一块地址,把之前的数据全部转过去
Array* array_inflate(Array* a, int more_size) {
int* p = (int*)malloc(sizeof(int) * (a->size + more_size));
int size = a->size + more_size;
for (int i = 0; i < a->size; i++) {
p[i] = a->array[i];
}
free(a->array);
a->array = p;
a->size = size;
}
注意:不要忘记free原来的array
因为数组需要一整块内存,故需要链表的存在