【发布时间】:2010-11-15 14:07:53
【问题描述】:
假设我有这个结构:
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) 个整数,而不仅仅是一个。更不用说填充的可能性了。