gpt4 book ai didi

c++ - 直接访问结构成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:04:44 26 4
gpt4 key购买 nike

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

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->member 构造?

最佳答案

看起来你在问两个问题

将 &test 视为长度为 3 的 int 数组是否安全?

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

有没有更好的方法来访问没有名字的成员?

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

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

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

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

关于c++ - 直接访问结构成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/623693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com