v75.可变数组

本文详细介绍了如何使用函数库实现数组操作,包括创建、释放、查询大小、访问元素以及可变数组的自动增长。特别强调了指针在这些操作中的重要性,并讨论了数据访问的封装和内存管理策略。
摘要由CSDN通过智能技术生成

可变数组

在这里插入图片描述在这里插入图片描述
可以实现一个函数库,定义一些函数。creat创建数组;free回收数组空间;size查询单元个数;at访问数组某个单元;inflate使数组扩大。
可以看到函数需要传入的变量都是指针,因为指针更加轻巧!!!
前排提醒:传址方式需要传入指针或者变量的地址!!

  • create&&free(数组的创建和释放)

在这里插入图片描述
create函数:
没有传入指针,传入的是你所需要的数组的大小。因为在函数内部通过return返回结构变量a,进而赋值。因为不需要在函数内部做出改变,所以传值方式即可。
free函数:
传入函数的参数是指针(结构变量a的地址),属于传址方式。在主函数内部Array a = array_creat(100);程序结束之后本地结构变量a会自动回收,但其中内部的结构成员变量(指针变量)*array不会释放,所以要通过free函数释放指针所指的内存:free(a->array); 做保险:a->array = 0;a->size = 0;以上代码全部应该是在函数内部,此a非彼a,这里的a指的是函数括号中的形参avoid array_free(*a){}
在这里插入图片描述

  • size&&at(实现数据访问、读写)

size函数:

//封装
int array_size(const Array *a )//传入指针或者地址
{
	return a->size;
}
printf("%d",array_size(&a));
//因为a->size == (*a).size 其实就是访问结构变量的成员,不过是通过指针取地址的方式(复习)
//至于为什么那么不是传入整个结构变量a而是传入*a:传入指针轻巧!!

那为什么不直接访问呢:

printf("%d",a.size);

简单来说函数将a的size保护起来了…
at函数:

int* array_at(Array *a,int index)
{
	return &(a->array[index]);
}
printf("%d",*array_at(&a));

因为函数返回的是指针,所以进行的操作是*指针,与之对应的操作是&普通变量&普通变量 == 指针*(&普通变量)== 普通变量值
为什么函数返回的是*int而不是int呢?

因为可以实现函数调用对数组进行赋值操作:*(array_at(*a,0)) = 7;这里相当于a[0] =7;

实现读的功能:printf("%d",*array_at(&a));
实现写的功能:*(array_at(*a,0)) = 7;
  • inflate(可变数组的自动增长)

因为malloc申请的空间不可改变,所以要重新申请一块空间,其大小是原来的空间大小+所需的额外的空间的大小。然后把原来空间的东西放到新的空间。
在这里插入图片描述

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值