数据结构,易语言称为:自定义数据类型。
但它不够灵活,我们会在某些特殊情况时,希望它可以动态分配很多个,而且不要在子程序结束时就自动释放内存。
C++有new和delete操作符,而易语言没有。
但是我们可以用常量来做内存偏移。
数据结构不过是一块内存而已,通过 结构.成员 这种方式访问成员,结构它有内存地址,成员它就是内存偏移。
所以 结构.成员 相当于 结构内存地址+成员内存偏移。
例如:
我们改成这样:
用下划线来代表原来的“.”号。内存偏移从0开始,整数型占4个字节,结构_大小 整个结构的大小,分配内存时用到。
但考虑到名称冲突问题,直接记住不跟下划线就是大小了:
用法:
结构 = 申请内存(#结构)
整数到指针(结构+#结构_A, 1) '相当于:结构.A = 1
输出调试文本(指针到整数(结构+#结构_A)) '相当于:输出调试文本(结构.A)
当不再用时记得:释放内存(结构)
对了,虽然可以直接把整个数据结构复制到新的内存,但这样做不够效率。而且易语言的数据结构是强制4字节对齐的。
在调用API的时候会进行转换并分配内存,调用结束后会释放。
当调用API复制内存的时候其实是复制两遍了。
如果你不先算好大小的话调用LocalSize又被来一次。
RtlMoveMemory(地址,结构,LocalSize(结构))
当然也可以反过来:RtlMoveMemory(结构,地址,LocalSize(结构))
这里是演示,建议用常量的方法。
|