【发布时间】:2020-11-09 21:11:38
【问题描述】:
我有以下数据设计:
struct Info {
int i;
};
struct Data {
long data;
}
struct C {
Info I;
Data d;
};
int main() {
C c;
Data* d=&(c.d);
C* getOuterC(d);
}
现在我有一个指向数据 (Data*) 的指针,我知道它位于 C 结构中。我想要一个函数 C* getOuterC(Data*) 函数返回一个指向包含数据的外部C 结构的C 指针(C*)。有什么想法吗?
【问题讨论】:
-
正确的方式?有一个指向数据结构内部的外部指针。疯狂、危险并依赖于实施细节?将指针值计算为
d - sizeof(Info)。 -
stackoverflow.com/questions/142016/c-c-structure-offset -- 请注意,在 C++ 中,对
offsetof的支持取决于实现。如果你认为你需要这个并且你必须在 Stack Overflow 上询问它,我断言你不需要它并且你的设计有问题。 -
如果不使用一些有问题的方法,我认为这是不可能的,但您可以更改
Data使其指向其父C -
顺便说一下,该副本中接受的答案的行为是未定义的(指针算法仅在数组中有效)。
-
@Bathsheba 有一个提案(我上次检查过)在进行中(我上次检查过),以使其在对象中有效,即采用表明对象可以被视为“数组
unsigned char'(或者,现在,std::byte)并通过在标准中的其他地方不与它相矛盾来实际使用它。或者至少,这就是我记得的!
标签: c++