1.可变数组
C 语言数组大小固定,无法改变。
考虑用 C 语言实现一个可以变大小的 int 数组:可成长,能得到大小,能访问元素。
可以实现一个函数库,定义数组所需的函数:创建,回收,大小,访问元素,成长。
2.定义可变数组
习惯定义为 *Array ,Array 为指针。这时无法定义本地变量,不要定义指针类型!!
3.创建 Array (array_create(int size))
为什么不返回指针?因为 a 是本地变量,返回指针的话在函数结束后本地变量消失,指针无效。
为什么不直接 malloc 结构的 size ? 会使得使用困难。传入指针返回指针有风险。
4.回收 Array(array_free(Array *a))
5.得到 Array 大小(array_size(const Array *a))
封装得到数组大小的方法,保护内部实现细节,之后升级可以集中改动。
6.访问元素(array_at(Array* a,int index))
可以通过 *array_at(&a,0)=10 做赋值,做左值把值写到数组里,也可以做右值赋值给左值。
可用 array_get() 和 array_set() 两个存取函数代替 array_at()
7.内存块 memory in block
const int BLOCK_SIZE = 20;
可自动增长,每次涨 BLOCK_SIZE 个单元。
8. Array 的成长(array_inflate(Array *a,int more_size))
分配新空间,复制原数组到新空间,可用memcpy替换。