You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不同类型指针是否兼容?C语言中struct t1与struct t2是否兼容?

结构体兼容性判定结论及解释

你的猜测是对的:struct t1 和 struct t2 不兼容,具体依据如下:

在C语言标准中,两个结构体类型兼容的核心条件是:

  • 成员的数量、名称、声明顺序完全一致;
  • 每个对应成员的类型必须是兼容类型。

针对你的示例:

  1. 两个结构体的成员数量、名称、顺序都一致,这部分满足;
  2. 但成员类型不兼容:
    • struct t1 的成员是 const char *name,指针指向的是 const char 类型;
    • struct t2 的成员是 string *name,指针指向的是自定义的 struct string 类型。
      这两种指针指向的底层类型既不相同也不兼容,因此这两个指针类型本身不属于兼容类型。

需要注意的是,平台上指针的大小和对齐方式相同只是内存布局的巧合,并非类型兼容的判定标准。类型兼容性由语言规则定义,和具体平台的内存特性无关。

这会直接影响你提到的场景:

  • 联合的公共初始序列:只有兼容的结构体,才能通过联合安全访问彼此的公共初始成员;
  • 兼容类型指针转换:不兼容类型的指针转换属于未定义行为,不能保证程序的正确性。

内容的提问来源于stack exchange,提问作者Levi Morrison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:39:58