我已阅读,如果你声明两个结构是这样的:此代码是否由C标准保证?
struct Node {
int a, b, c;
};
struct DerivedNode {
struct Node base;
int d, e, f;
};
然后你可以使用指针给他们这样的:
struct DerivedNode myDerivedNode;
struct Node *regularNode = (struct Node *) &myDerivedNode;
regularNode->a = 3;
换句话说,对于a, b, c
地址偏移量是相同的在struct Node
和struct DerivedNode
之内。因此,您可以从中获得一种多态性,您可以在其中强制传递一个DerivedNode指针,无论通常会采用哪个节点指针。
我的问题是这种行为是否有保证。我知道存在一些奇怪的内存对齐问题,并且编译器有时会重新排序字段以实现更好的内存打包。 base
字段是否会位于struct DerivedNode
的开头?
你在几处忘了'struct'关键字,不是? –
@Jens哦,可能吧。对不起 –