我已閱讀,如果你聲明兩個結構是這樣的:此代碼是否由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哦,可能吧。對不起 –