不同类型指针是否兼容?C语言中struct t1与struct t2是否兼容?
结构体兼容性判定结论及解释
你的猜测是对的:struct t1 和 struct t2 不兼容,具体依据如下:
在C语言标准中,两个结构体类型兼容的核心条件是:
- 成员的数量、名称、声明顺序完全一致;
- 每个对应成员的类型必须是兼容类型。
针对你的示例:
- 两个结构体的成员数量、名称、顺序都一致,这部分满足;
- 但成员类型不兼容:
- struct t1 的成员是
const char *name,指针指向的是const char类型; - struct t2 的成员是
string *name,指针指向的是自定义的struct string类型。
这两种指针指向的底层类型既不相同也不兼容,因此这两个指针类型本身不属于兼容类型。
- struct t1 的成员是
需要注意的是,平台上指针的大小和对齐方式相同只是内存布局的巧合,并非类型兼容的判定标准。类型兼容性由语言规则定义,和具体平台的内存特性无关。
这会直接影响你提到的场景:
- 联合的公共初始序列:只有兼容的结构体,才能通过联合安全访问彼此的公共初始成员;
- 兼容类型指针转换:不兼容类型的指针转换属于未定义行为,不能保证程序的正确性。
内容的提问来源于stack exchange,提问作者Levi Morrison
相关产品推荐
相关产品推荐

