C中更大或更小的结构

Jac*_*ack 1 c casting structure

我在C程序中有两个结构:SmallStructABC和BigStructXYZ

我有两个成员; SmallStructABC的所有10个成员与BigStructXYZ的前10个成员完全相同.BigStructXYZ还有50名成员.

可以将这两个结构相互转换成型吗?

SmallStructABC *i = (BigStructXYZ*)j;
BigStructXYZ   *a = (SmallStructABC*)b; 
Run Code Online (Sandbox Code Playgroud)

我只能在打字后访问前10个(普通)成员.

我写了C程序,它在我的机器上工作正常.只是想验证我是否需要处理任何极端情况(对齐,无效读取,非gcc编译等).

编辑:问:为什么我想做这样的事情?

答:BigStructXYZ的大小非常大(比如说50KB)并且包含一些标题(键,地图等).我在通过网络发送之前压缩这些数据.我保留标题(在我们的例子中是SmallStructABC).通过类型转换,我可以在需要时从头文件中访问这些键.

Fra*_*ger 10

不,这不是一个好主意.更好的将强制类型转换指针的结构,并通过指针操纵它们:

void DoSomething(Small *thing) {
    // ...
}

int main() {
    Big big = {0};
    Small small = {0};

    Small *p0 = (Small*)&big;
    Small *p1 = &small;

    DoSomething(p0);
    DoSomething(p1);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

另一种更安全的设计是定义Big在以下方面Small:

typedef struct Small {
    int foo;
};
typedef struct Big {
    Small small;
    int y;
};
Run Code Online (Sandbox Code Playgroud)