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

两种C语言结构体定义方式的区别是什么?

两种C语言结构体定义方式的区别

先看你给出的代码示例:

// FIRST structure TAG**
struct worker
{
    int age1;
    char *hair_color1;
};

struct worker grzegorz;
grzegorz.age1 = 15;
grzegorz.hair_color1 = "gray";

struct worker krzys;
krzys.age1 = 26;
krzys.hair_color1 = "white";

// SECOND structure variables struct type**
struct
{
    int age2;
    char *hair_color2;
}
robert, szymon;

robert.age2 = 12;
robert.hair_color2 = "blond";

szymon.age2 = 14;
szymon.hair_color2 = "gray";

核心区别主要有这几点:

  • 复用性差异
    第一种带worker标签(TAG)的结构体,相当于给这个结构体类型起了专属名称,后续你可以在代码任意位置用struct worker创建任意多个同类型变量,还能定义该类型的指针、把它作为函数参数、嵌套到其他结构体里使用。
    第二种是匿名结构体,没有类型名称,只能在定义结构体的同时创建robert和szymon这两个变量,后续再也没法用这个结构体类型创建新变量——编译器不会留存这个无名类型的定义。

  • 灵活性与适用场景不同
    第一种方式灵活性拉满,适配绝大多数开发场景,尤其是需要批量创建同类型数据、或者在函数间传递这类结构体数据的场景。
    第二种方式仅适合一次性定义几个特定变量,且后续绝对不会扩展使用该结构体类型的极端小众场景,实用性极低。

你说第一种更实用完全没错,实际项目里99%的情况都会用带TAG的结构体定义方式,匿名结构体基本只有非常有限的使用场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:21:37