当前位置:  开发笔记 > 编程语言 > 正文

直接访问struct成员

如何解决《直接访问struct成员》经验,为你挑选了2个好方法。

我有一个测试结构定义如下:

struct test{
    int a, b, c;
    bool d, e;
    int f;
    long g, h;
};

在某个地方我用这种方式:

test* t = new test;   // create the testing struct
int* ptr = (int*) t;
ptr[2] = 15;          // directly manipulate the third word
cout << t->c;         // look if it really affected the third integer

这在我的Windows上正常工作 - 它按预期打印15,但它是否安全?我是否可以确定变量是在内存中我想要的 - 特别是在这种组合结构的情况下(例如f在我的编译器上是第五个字,但它是第六个变量)?

如果没有,有没有其他方法直接操作struct成员而不在代码中实际拥有struct-> member构造?



1> JaredPar..:

看起来你在问两个问题

治疗和测试作为3长度的安全是否安全?

最好避免这种情况.这可能是C++标准中定义的操作,但即使是这样,与您合作的每个人都不太可能理解您在此处所做的事情.我相信如果你阅读标准是不支持的,因为有可能填充结构,但我不确定.

没有它的名字,是否有更好的方式来访问会员?

是.尝试使用offsetof宏/运算符.这将提供结构中特定成员的内存偏移量,并允许您将点正确定位到该成员.

size_t offset = offsetof(mystruct,c);
int* pointerToC = (int*)((char*)&someTest + offset);

另一种方法是直接获取c的地址

int* pointerToC = &(someTest->c);



2> 小智..:

不,你不能确定.编译器可以在结构成员之间自由引入填充.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有