SamgrLite——重要结构体Vector的相关知识

本文解析了Vector结构体,包括void类型的应用、结构详解、关键操作如Make、Clear、Add等,展示了如何利用Vector高效管理不同类型的serviceImpl和featureImpl。重点讨论了查找、比较和空间管理策略。

在完结SA服务框架初始化之前,我们先来补补课,看看这个频繁出现在代码中的结构体,弄清楚它们能让我们阅读源码时更加得心应手,也能够体会到鸿蒙开发人员设计函数和结构体时的巧妙构思,开拓眼界

1. void类型是什么?

这里先穿插一个非常重要的知识点——有利于后面讲解的展开
void关键字我们都知道是指定没有没有可用的值。在前面的文章中提到了void在鸿蒙OS中的一个妙用——通过在函数体中void(parameter)使得那么没有传入实参的形参不会导致编译warning

在common.c和其他函数中我们经常看到这样的写法:
在这里插入图片描述
在Vector的结构体中data的类型:
在这里插入图片描述
所以这里总结一下void的常见用法:

  1. 函数返回为空——常见的用法,函数不返回任何值比如void main
  2. 函数参数列表为空——不需要传入任何参数比如void publish(void)
  3. void的用法——void指针作为左值表示可用接受任意类型的指针;void*指针作为右值赋给其他类型的指针时需要进行强制转换

也就是是说void类型的指针能够指向任意类型的指针,一般用于数据封装和通用设计,而Vector能够管理不同类型比如serviceImpl或者featureImpl就是因为使用了void类型指针的缘故

2. Vector

主要的相关文件在common.h和common.c中

2.1 Vector结构体

首先在common.h中可以看到其详细的结构体:

typedef struct SimpleVector{
   
   
	int16 max;
	int16 top;
	int16 free;
	void **data;
	VECTOR_Key key;
	VECTOR_Compare compare;
}

typedef void *(*VECTOR_Key)(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国家一级假勤奋研究牲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值