昨天,在经历this问题时,我发现了一个奇怪的案例,即传递和接收未命名的结构作为函数参数。

例如,如果我有这样的结构,

int main ()
{
    struct {
        int a;
    } var;

    fun(&var);
}

现在,fun的原型(prototype)应该是什么?以及如何在fun函数中将该结构用作结构(指针)?

最佳答案

出于对齐的原因,此原型(prototype)应工作:

void fun(int *x);
而且当然:
void fun(void *x);
我没有找到一种在函数中实际有效使用结构的简便方法。也许在该函数中再次声明它,然后分配void *
根据要求编辑

6.7.2.1-15
指向经过适当转换的结构对象的指针,指向该对象的
初始成员
(或者,如果该成员是位域,则到
它所在的位置),反之亦然。可能有未命名的填充
在结构对象中,但不是在其开始时。

10-07 13:01
查看更多