递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 9047|回复: 16
打印 上一主题 下一主题

[视窗] 关于火山结构类的问题

[复制链接]

16

主题

89

帖子

1103

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1103
跳转到指定楼层
楼主
发表于 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没有原生的自定义数据结构方式,只有类自定义数据结构的方式吗?


回复

使用道具 举报

29

主题

305

帖子

2598

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2598
17#
发表于 2021-8-14 06:40:59 | 只看该作者
我也遇到这个问题,火山的结构类限制太多,而且在内存中不连续存放.和c++的结构不一样.无法像c++一样的操作.希望官方可以考虑改进
回复

使用道具 举报

25

主题

497

帖子

1808

积分

金牌会员

Rank: 6Rank: 6

积分
1808
16#
发表于 2021-6-26 13:46:42 | 只看该作者
火山 根本就没有结构体,你又何来的直接操作结构体,只能通过类模拟操作,
其实这也是一大遗憾,C 的大多数特性火山都不支持,就算是火山的类,也是一个半残废品,C++类强大就强大在重载,可火山不支持
回复

使用道具 举报

17

主题

792

帖子

2744

积分

金牌会员

Rank: 6Rank: 6

积分
2744
15#
发表于 2021-6-9 14:30:33 | 只看该作者
都是牛人
回复

使用道具 举报

16

主题

89

帖子

1103

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1103
14#
 楼主| 发表于 2021-6-9 10:36:06 | 只看该作者
暴风 发表于 2021-6-9 08:35
看似可以, 感觉会出问题

也只有你看明白我说的意思了,现在我就是不确定这样做有没有安全风险
我现在的实现方法是用内嵌C++代码实现,定义一个常量表,把常量表里代表的序号当做指针的偏移量,当结构体传入C++函数来读写
回复

使用道具 举报

21

主题

102

帖子

1541

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1541
13#
发表于 2021-6-9 08:35:27 | 只看该作者


看似可以, 感觉会出问题
回复

使用道具 举报

444

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
40551
12#
发表于 2021-6-9 08:32:41 | 只看该作者
aiyanok 发表于 2021-6-9 01:38
你没理解我的意思.. 我要的不是复制 复制很简单
我要的是通过火山结构体去操作C++结构体
并不是复制来读 ...

????火山结构体操作c++结构体??   把c++结构体封装进来就可以操作了。。
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

16

主题

89

帖子

1103

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1103
11#
 楼主| 发表于 2021-6-9 01:52:40 | 只看该作者
呵呵仙8 发表于 2021-6-8 23:58
自定义数据也可以直接复制到内存的!线程池中也有例子!这是企鹅大神教的! ...

举个例子
比如有个
类 C 里面分别有3个成员 ABC

取指针处对象(C).A
再取变量地址能够获取到A的地址 这没错 你也可以读取 也可以通过地址去修改A的值
但是也仅限于此
如果
假设内存里有3个数据
00400000  00400004 00400008
1              2             3
你没办法通过这个C类直接去修改这3个地址的数据
不能 c.a=3 去把00400000的数据修改成3
而C++就很容易
c *p;
p=(c*)0x00400000
c->a=3
就行了
这下应该明白我的意思了吧
回复

使用道具 举报

16

主题

89

帖子

1103

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1103
10#
 楼主| 发表于 2021-6-9 01:38:00 | 只看该作者
呵呵仙8 发表于 2021-6-8 23:58
自定义数据也可以直接复制到内存的!线程池中也有例子!这是企鹅大神教的! ...

你没理解我的意思.. 我要的不是复制 复制很简单
我要的是通过火山结构体去操作C++结构体
并不是复制来读取
回复

使用道具 举报

50

主题

567

帖子

2477

积分

金牌会员

Rank: 6Rank: 6

积分
2477
9#
发表于 2021-6-8 23:58:30 来自手机 | 只看该作者
自定义数据也可以直接复制到内存的!线程池中也有例子!这是企鹅大神教的!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-25 18:10 , Processed in 0.102608 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表