扩容背景
- 原理:在C语言中,常规定义的数组在初始化之后,长度是不可变的,且数组名存储的是数组首地址,不支持重新赋值为其他数组的地址
- 思路:
(1)数组定义之后长度不可变,因此需要再创建一个更大的数组
(2)将原数组的数据逐一迁移到新数组中
(3)利用指针变量存储新分配内存的首地址,通过指针加下标的形式来操作所有数据
具体操作
- 添加数据与扩容函数 :
当仓库存满时,触发扩容机制,并将旧数据迁移到新数组:
int*addData(intnum,intvalues[],int*size,int*length){intlen=*length;intsi=*size;// 先判断是否存满了if(si==len){// 需要扩容intnewLen=len*2;int*newValues=(int*)malloc(newLen*sizeof(int));// 迁移数据for(inti=0;i<len;i++){newValues[i]=values[i];}// 更新数据*length=newLen;// 更新旧数组名存储的地址values=newValues;printf("扩容完成,当前的总容量升级为: %d\n",*length);}values[si]=num;*size=*size+1;// values 存储的是一个新数组的地址,返回出去重新赋给 main 里面的 valuesreturnvalues;}
- 将函数加入数字仓库
![]()