Loading... **Resizable Array** * Array array_create(int init_size);//create用来创建一个数组 * void array_free(Array *a);//free用来把这个数组的空间回收 * int array_size(const Array *a);//size告诉我们这个数组有多少个单元可以用 * int* array_at(Array *a,int index);//at我们要去访问某个数组的单元 * void array_inglate(Array *a,int more_size);//让这个数组长大 ```C #include<array.h> #include<stdio.h> #include<stdlib.h> const BLOCK_SIZE = 20; //typedef struct { // int* array; // int size; //}Array; Array array_creatr(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) { return a->size; } int* array_at(Array* a, int index) { if (index >= size) { array_inflate(a, (index/BLOCK_SIZE+1)*BLOCK_SIZE-a->size); } return &(a->array[index]); } void array_inflate(Array* a, int more_size) { int* p = (int*)malloc(sizeof(int)(a->size + more_size)); int i; for (i = 0; i < a->size; i++) { p[i] = a->array[i]; } free(a->array); a->array = p; a->size += more_size; } int main(int argc, char* argv[]) { Array a = array_create(100); printf("%d\n", array_size(&a)); *array_ay(&a, 0) = 10; printf("%d\n", *array_ay(&a, 0)); int cnt = 0; while (1) { scanf("%d", attay_at(&a, cnt++)); if (number != -1) { *array_at(&a, cnt++) = number;; } } array_ferr(&a); return 0; } ``` 有点迷。。。。 [翁恺C语言程序进阶_链表_可变数组](https://www.icourse163.org/learn/ZJU-200001?tid=1462327456#/learn/content?type=detail&id=1239313883&cid=1260397913) 缺点:每一次数组长大的时候,我们都要取申请一块新的空间,可以容纳下新的东西,全部的东西。然后拷贝那就会有两个问题。 1. 拷贝需要花时间 2. 申请不了空间 所以下一节链表敬请期待。。。。^_^ 最后修改:2021 年 03 月 14 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏