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
。だから、ノードポインタが正常に取られるでしょうどこでも強制的に(struct Node *)
-cast DerivedNodeポインタを渡すことができ、それのうち多型の種類を取得することができます。
私の質問は、この動作が保証されているかどうかです。私はいくつかの奇妙なメモリアラインメントの問題があることを知っているし、コンパイラは時々メモリのより良いパッキングを達成するためにフィールドを並べ替えます。 base
フィールドは、struct DerivedNode
の始め以外のどこにでも置かれますか?
あなたはいくつかの場所で 'struct'キーワードを忘れましたか? –
@Jensああ、おそらく。申し訳ありません –