c: 用c 实现Java 中的ArrayList

前言

Java 中封装好了许多直接上手就可以用的容器,python 里也有功能很强大的list,元组什么的。

使用c就是原始人在发展,石器时代,什么都要自己来做。

今天就做个ArrayList, 用于装一些unsigned int数据。

参考:

Java集合之ArrayList源码分析:
https://www.cnblogs.com/xujian2014/p/4625346.html

ArrayList(c语言)// 这个没有支持容器size的扩展能力, 而我可能需要
https://blog.csdn.net/ckq707718837/article/details/52839636

这个是主要的参考,就它了,最好
https://blog.csdn.net/JAVA2010CZP/article/details/8146732

后记

void 这种类型

本来我想直接使用void 来做类型声明,就像下图

在这里插入图片描述

但是,void 其实有这样的限制:

void a; 

这行语句编译时会出错,提示“illegal use of type ‘void’”。不过,即使void a的编译不会出错,它也没有任何实际意义。

void真正发挥的作用在于: (也就是其限制使用的范围,仅仅在如下两处)
(1) 对函数返回的限定;
(2) 对函数参数的限定。

而void 的长度是1

int a1 = sizeof(void);
printf("a1 = %d\n", a1);

//a1 = 1

对void类型的 完整的测试代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef void element;
typedef unsigned int element2;

void print_bin(char* n);

int main()
{
	int a = sizeof(element);
	int b = sizeof(element2);

	int a1 = sizeof(void);
	int b1 = sizeof(void *);
	int c = sizeof(char*);
	element* el_c;
	el_c = (element*) malloc (sizeof(element));

	memset(el_c, 67, sizeof(void));

	printf("a = %d\n", a);
	printf("b = %d\n", b);
	printf("a1 = %d\n", a1);
	printf("b1 = %d\n", b1);
	printf("c = %d\n", c);

	printf("elc  = %c\n", (char *)el_c);
	printf("---------\n");
	print_bin(el_c);


}

void print_bin(char* n)
{
 
    int l = strlen(n)*8;//总位数。
    printf("%s : %d\n","you have total byte ", l );
    int i = l - 1;
    int k;
    for(;i>=0; i -= 8)
    {
    	// i 仅仅用做计数,从尾往前计算有几个8bits, 有几个,我们就挪几次n
    	if(((i + 1) % 8 == 0) && (i != l -1))
		{
			n += 1;
			printf("\n");
		}
		// 测试此时的n 对应的8bits 构成的一个char 的内容:10010101这样
		for ( k = 7; k >= 0; k --)
		{
    		printf("%d", (*n&(1<<k)) != 0);
		}
    }
}

在这里插入图片描述

注: 有个%号在尾部是什么鬼?

typedef 的函数, 就是在声明接口

先这样记忆吧:

a: 先要 typedef 的时候带有*号,表明我们在typedef 一个函数(理解为接口更好,因为其实你可以把此时的 typedef 当作java 中的interface 关键字:interface MeditationView {...}
b: 然后呢, 在声明函数的时候,要引用typedef 声明的函数(接口),此时不用加*

eg:
定义接口模样:

使用一个可能的接口实现(不加*)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值