Tag: 指针转换

C函数指针类型兼容性

编写一个与函数回调一起工作的库,我经常对具有相同调用约定和相同签名的类型进行类型化(和调用)函数指针,但有一个例外:它们具有指向不同类型(所有数据)的参数,或无效指针。 最近,我发现它可能不那么安全,根据这个: https : //stackoverflow.com/a/14044244/3079266 基本上,正如我所理解的那样,如果参数的类型是兼容的,那意味着函数指针类型也是兼容的,并且应该没有问题。 现在,我有3个问题。 第一:这是否意味着,由于指向不同类型的指针在技术上是不兼容的,我所做的可能导致未定义的行为? 第二:在哪里(在什么样的架构上)我可以逃脱它? 其中是Windows x86还是x64版本? 第三:我哪里可以逃脱它?

通过在作为另一个结构的一个结构而不是第一个成员的结构之间转换指针来实现C中的inheritance是否合法?

现在我知道我可以通过将指向struct的指针强制转换为该struct的第一个成员的类型来实现inheritance。 然而,纯粹作为一种学习经验,我开始想知道是否有可能以稍微不同的方式实现inheritance。 这段代码合法吗? #include #include struct base { double some; char space_for_subclasses[]; }; struct derived { double some; int value; }; int main(void) { struct base *b = malloc(sizeof(struct derived)); b->some = 123.456; struct derived *d = (struct derived*)(b); d->value = 4; struct base *bb = (struct base*)(d); printf(“%f\t%f\t%d\n”, d->some, bb->some, d->value); return 0; } […]