【发布时间】:2011-04-20 06:43:38
【问题描述】:
如果我有结构定义,例如,像这样:
struct Base {
int foo;
};
struct Derived {
int foo; // int foo is common for both definitions
char *bar;
};
我可以这样做吗?
void foobar(void *ptr) {
((struct Base *)ptr)->foo = 1;
}
struct Derived s;
foobar(&s);
换句话说,当它的类型实际上是Derived * 时,我可以将void 指针转换为Base * 以访问其foo 成员吗?
【问题讨论】:
-
你试过了吗?发生了什么?
-
它在没有编译器抱怨的情况下工作,但我想知道这是一种常用的做法,还是一些讨厌的 hack(它现在对我有很大帮助)。
-
@PaulR 如果您的问题是“尝试自己而不是询问”,您应该了解未定义行为以及它如何使您的实验今天看起来正确但明天失败 - 反之亦然。