|
第一章的时候我说过,字节集变量和字节数组在传递的时候是不同的,不过在此之前,我们先来看看字节集变量的存储方式吧,还是按照之前的方法写
变量名 | 类 型 | 静态 | 数组 | 备 注 | 字节集变量 | 字节集 | | | 内存地址 | 整数型 | | | 临时字节集 | 字节集 | | |
字节集变量 = { 11, 22, 33 }内存地址 = 取变量地址 (字节集变量 )调试输出 (内存地址, 取变量数据地址 (字节集变量 )) 临时字节集 = 指针到字节集 (内存地址, 4 )内存地址 = 取字节集数据 (临时字节集, #整数型, )调试输出 (内存地址, 指针到字节集 (内存地址, 8 + 3 ))
开始运行被调试程序
* 1309896 | 1432024
* 1432016 | 字节集:11{1,0,0,0,3,0,0,0,11,22,33}
被调试易程序运行完毕
这次情况和之前很不一样了
首先我们来看下字节集的变量地址和数据地址,他们是不一样的。
我在代码里从变量地址(1309896)读取了长度为4的内存地址,这个内存地址(1432016)和数据地址(1432024)相差8...很奇怪,于是我尝试输出了内存地址里+8+字节集长度的字节集数据来看看。
得到结果
{1,0,0,0,3,0,0,0,11,22,33}
OK,还记得之前说的整数型变量占用长度为4么?我们假设这个变量是由多个数据组合的,那么把它分开看看
{1,0,0,0}
{3,0,0,0}
{11,22,33}
第三个是字节集的真实数据,这点毫无争议。
我们来看下第二组数据,有个3,而我们字节集的长度也是3,那么他存储的可能是字节集的长度。为了做实验我们赋值一个255的空白字节集来试试。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 字节集变量 | 字节集 | | | 内存地址 | 整数型 | | | 临时字节集 | 字节集 | | |
字节集变量 = 取空白字节集 (255 )内存地址 = 取变量地址 (字节集变量 )临时字节集 = 指针到字节集 (内存地址, 4 )内存地址 = 取字节集数据 (临时字节集, #整数型, )调试输出 (指针到字节集 (内存地址, 8 ))
开始运行被调试程序
* 字节集:8{1,0,0,0,255,0,0,0}
被调试易程序运行完毕
可以看出,第二组数据变成了{255,0,0,0}
与字节集长度是一样的,我们可以大胆的猜测,第二组数据的用途就是记录字节集的长度
为了进一步验证我们的想法,我们可以这样做一个实验
变量名 | 类 型 | 静态 | 数组 | 备 注 | 字节集变量 | 字节集 | | | 内存地址 | 整数型 | | | 临时字节集 | 字节集 | | |
字节集变量 = { 11, 22, 33 }内存地址 = 取变量地址 (字节集变量 )临时字节集 = 指针到字节集 (内存地址, 4 )内存地址 = 取字节集数据 (临时字节集, #整数型, )写到内存 ({ 9 }, 内存地址 + 4, 1 )调试输出 (字节集变量 )
开始运行被调试程序
* 字节集:9{11,22,33,171,171,171,171,171,171}
被调试易程序运行完毕
可以看到,我们明明定义的字节集长度是3,最后输出了长度为9的字节集,由此可以证明字节集变量在内存里,它的内存地址前四位存储的是字节集的长度
不过第一组数据我不管如何的修改字节集,(估计是指的是数组的维数,但是字节集是一维的,不可能是二维或者更多的维数,所以随便怎么修改都没有用),都没什么用,也不知道是干嘛的,具体用途怕是只有吴涛知道了QAQ...或者哪位大神去破J易语言主程序看看内部怎么处理?
|
|