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)