前言
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:
定义接口模样:
使用一个可能的接口实现(不加*
)