第4周:链表——4.1 可变数组

1.可变数组

C 语言数组大小固定,无法改变。

考虑用 C 语言实现一个可以变大小的 int 数组:可成长,能得到大小,能访问元素。

可以实现一个函数库,定义数组所需的函数:创建,回收,大小,访问元素,成长。

函数库


2.定义可变数组

可变数组定义

习惯定义为 *Array ,Array 为指针。这时无法定义本地变量,不要定义指针类型!!


3.创建 Array (array_create(int size))

创建可变数组函数,返回Array

为什么不返回指针?因为 a 是本地变量,返回指针的话在函数结束后本地变量消失,指针无效。

为什么不直接 malloc 结构的 size ? 会使得使用困难。传入指针返回指针有风险。


4.回收 Array(array_free(Array *a))

回收可变数组,无返回值。


5.得到 Array 大小(array_size(const Array *a))

得到数组大小,返回 int

封装得到数组大小的方法,保护内部实现细节,之后升级可以集中改动。


6.访问元素(array_at(Array* a,int index))

访问数组元素,返回指向数组元素的指针

可以通过 *array_at(&a,0)=10 做赋值,做左值把值写到数组里,也可以做右值赋值给左值。

可用 array_get() 和 array_set() 两个存取函数代替 array_at()

可用array_get得到数组中元素的值,array_set设置数组中元素的值


7.内存块 memory in block

const int BLOCK_SIZE = 20;

考虑index越界的情况

可自动增长,每次涨 BLOCK_SIZE 个单元。


8. Array 的成长(array_inflate(Array *a,int more_size))

成长more_size个单元,找一片新的空间复制原来的数组,删除原数组。无返回值

分配新空间,复制原数组到新空间,可用memcpy替换。


9. main

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容