オフセット私はこの構造体を持っているとしましょう:Cの構造体は、
typedef struct nKey {
int num;
widget* widget;
} NUMBER_KEY;
と機能:
void dialKey(widget* widget) {
// Need to print 'num' of the struct that this widget resides in
}
は、どのように私はこれを達成するについて行くのですか?
printf("%d", * (int *) widget - sizeof(int)); // Failure.org
編集:私のような何かをしようとした問題ではない別の方法への解決策を探して:渡されているウィジェットが実際にNUMBER_KEY構造体
編集の一員であると仮定しても安全です。
構造体のメンバー間に実装定義のパディングがある可能性があるため、コードは必ずしも機能しません。 –
大きなことは、ポインタがウィジェットのポインタではなく、ウィジェットへのポインタであることです。また、(int *)からsizeof(int)を減算すると、sizeof(int)intsのポインタだけが移動します。パディングの可能性はもちろんですが。 –