aiyanok 发表于 2021-6-8 22:42:20

关于火山结构类的问题

本帖最后由 aiyanok 于 2021-6-8 22:46 编辑

假设有个结构
[*]struct jiegou
[*]{
[*]    int a;
[*]    int b;
[*]    int c;
[*]};
在C++里 如果定义这个结构 那么这个结构的指针假设是 00400000,A的指针就是00400000 B是00400004 C是00400008
但是在火山结构类里 定义同样的结构,这个结构指针是00400000 A的指针却成了0040000C B是00400010 C是00400014
如果在C++里 要操作这个结构的内存,只需要将结构指针指向结构内存即可
比如有内存
00400000 00400004 00400008
1      2      3
p=0x00400000
那么
*p++=3
*p++=2
*p=1
就可以变成
00400000 00400004 00400008
3      2      1


但是在火山里,取变量地址(结构变量)得到的却是火山结构的指针,如果直接把地址覆盖火山对象的指针,比如
写指针处值(取变量地址(结构),0x00400000)
结构.a=3
结构.b=2
结构.C=1
这样操作是不行的
请问如何像C++一样 ,实现结构直接对内存操作?

需要解决2个问题,
第一.如何得到火山结构对象指针内存地址,而不是对象指针指向的数据内存地址,以便更改指针指向的数据地址
第二个,如何解决火山结构成员会相对结构指针偏移 +0C的问题..因为我发现火山结构对象的第一个内存空间的内容,好像是this指针的值
如果直接通过更改对象指针指向的内存地址,缺少this可能会报错


有没有大能能够解释下用法?或者说火山的结构不用类结构的实现方式是怎么样的?只能靠嵌入式方法或者C++代码来实现吗?
IDE没有原生的自定义数据结构方式,只有类自定义数据结构的方式吗?


aiyanok 发表于 2021-6-8 22:45:22

本帖最后由 aiyanok 于 2021-6-8 23:01 编辑

我想实现的就是类似以下的方式,不知道是火山不支持,还是我不会用,刚接触火山几天不是很清白,求教各路大神,如何实现

我描述能力比较差,我想要的就是通过改变火山结构对象指针指向的方式,直接指向到内存中其他已有的数据空间以便直接通过结构对象修改其他内存的值,完事之后再把结构对象指向的地址给还原,以防程序崩溃
对象指针=取对象指针(结构对象)//得到对象的指针地址
原数据指针=取变量地址(结构对象)//保存缘来对象指向的数据内存空间
写指针处值(对象指针,0x00400000)//更改对象指针地址的指向,指向到要修改的内存空间
结构.a=3
结构.b=2
结构.C=1
写指针处值(对象指针,原数据指针)//还原对象指针指向到原来的数据内存空间

当让以上代码行不通,只是个形式,就是不知道如何实现

比如获取对象的指针地址,和对象this的问题,不知道如何处理

aiyanok 发表于 2021-6-8 23:15:22

其实结构类 可以这样设计
this
数据结构指针

这样可以直接通过修改数据结构指针指向其他内存空间
但是现在火山结构类的内存里是这样的
this
0
0
成员1
成员2
成员3
......

呵呵仙8 发表于 2021-6-8 23:26:33

aiyanok 发表于 2021-6-8 23:31:49

本帖最后由 aiyanok 于 2021-6-8 23:35 编辑

呵呵仙8 发表于 2021-6-8 23:26
利用读指针对象()就可以华丽的变成对方!然后.成员=什么!就可以改变对方值了!你看下我这两天开源的多线程 ...
不是火山的对象 也能这样读? 比如内存里就只有00400000 00400004 00400008
1             2            3
然后定义一个火山类结构
结构 jiegou
a 整数
b 整数
c 整数

测试结构 jiegou

测试结构=读指针处对象(00400000,jiegou)
测试结构.a=3
测试结构.b=2
测试结构.c=1

这样不行吧?
因为内存00400000只是数据空间 而火山的结构是
this
0
0
a
b
c
......
这么操作会因为读取的时候 缺少this而报错..这样应该只能火山结构和火山结构之间的互相变身.

呵呵仙8 发表于 2021-6-8 23:35:56

aiyanok 发表于 2021-6-8 23:37:19

我目前想到一个办法就就是很麻烦
@begin
stuct jiegou{
int a,
int b,
};
jieogu a;
@end
然后类_初始化 里用嵌入代码保存这个jiegou a变量的指针
在类_清理 里用嵌入代码还原
读取和写入结构数据就用类的 属性读 和属性写 方法来实现
只是这样就需要建立大量的属性读和属性写方法..结构数据大的话..特别麻烦

呵呵仙8 发表于 2021-6-8 23:48:36

呵呵仙8 发表于 2021-6-8 23:58:30

aiyanok 发表于 2021-6-9 01:38:00

呵呵仙8 发表于 2021-6-8 23:58
自定义数据也可以直接复制到内存的!线程池中也有例子!这是企鹅大神教的! ...

你没理解我的意思.. 我要的不是复制 复制很简单
我要的是通过火山结构体去操作C++结构体
并不是复制来读取
页: [1] 2
查看完整版本: 关于火山结构类的问题