可以说我有这个结构:
typedef struct nKey {
int num;
widget* widget;
} NUMBER_KEY;
Run Code Online (Sandbox Code Playgroud)
和功能:
void dialKey(widget* widget) {
// Need to print 'num' of the struct that this widget resides in
}
Run Code Online (Sandbox Code Playgroud)
我该如何完成这项工作?我尝试过类似的东西:
printf("%d", * (int *) widget - sizeof(int)); // Failure.org
Run Code Online (Sandbox Code Playgroud)
编辑:可以安全地假设传递的窗口小部件实际上是NUMBER_KEY结构的成员
编辑:寻找问题的解决方案而不是另一种方法.
正如迈克尔在他的回答中解释的那样,你无法用给定的约束来做到这一点,因为没有办法"向后走"指针图.为了使事情更加明显,让我绘制一个对象图(用C语言表示,而不是OOP意义上):
+- NUMBER_KEY --+
| ... | points to
| widget field -+-----------+
| ... | |
+---------------+ | + widget +
+-->| ... |
| ... |
+-->| ... |
| +--------+
points to |
[widget argument]-----------+
Run Code Online (Sandbox Code Playgroud)
注意箭头.它们是单向的 - 你可以从指针"走"到指向值,但你不能"走"回来.所以你可以推导widget你的函数的参数来到达widget对象,但是一旦那里,就没有办法告诉别人指向它 - 包括NUMBER_KEY结构的任何实例.想想看:如果你有十几个其他指针widget,其中一些来自不同的NUMBER_KEY对象怎么办?如何在不保留widget对象内所有指针的列表的情况下跟踪它?如果你确实需要这个,那就是你必须要做的 - widget指出它拥有它NUMBER_KEY.
| 归档时间: |
|
| 查看次数: |
1001 次 |
| 最近记录: |