两种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
相关产品推荐
相关产品推荐

