1、使用 struct 定义结构体
当使用 struct
关键字定义结构体时,需要在每次声明该结构体变量时都指定关键字 struct
。
#include <stdio.h> // 定义结构体 struct Person { char name[100]; int age; }; int main() { // 使用 struct 关键字声明变量 struct Person p1; p1.age = 30; snprintf(p1.name, sizeof(p1.name), "John Doe"); printf("Name: %s, Age: %d\n", p1.name, p1.age); return 0; }
2、使用 typedef struct 定义结构体
使用 typedef
可以为结构体类型创建一个别名,从而省去每次都要写 struct
关键字的麻烦。
#include <stdio.h> // 使用 typedef 创建别名 typedef struct { char name[100]; int age; } Person; int main() { // 直接使用别名 Person 声明变量 Person p1; p1.age = 30; snprintf(p1.name, sizeof(p1.name), "John Doe"); printf("Name: %s, Age: %d\n", p1.name, p1.age); return 0; }
3、区别
使用 typedef struct
通常更简洁,因为不需要每次声明变量时都重复使用 struct
关键字。如果没有 typedef
,每次声明变量时都需要写 struct
,显得有些冗长。
但使用 typedef
时,类型被别名化,可能会让代码看起来不太直观,特别是对于不熟悉的开发者来说,Point
看起来像一个普通类型,而不是结构体类型。如果没有 typedef
,可以立即明确知道 Point
是一个结构体类型。
#include <stdio.h> // 使用 typedef typedef struct { int x; int y; } Point; // 没有 typedef struct PointWithoutTypedef { int x; int y; }; int main() { // 使用 typedef 声明变量 Point p1; p1.x = 10; p1.y = 20; // 没有 typedef 声明变量 struct PointWithoutTypedef p2; p2.x = 30; p2.y = 40; // 打印结果 printf("p1: x = %d, y = %d\n", p1.x, p1.y); printf("p2: x = %d, y = %d\n", p2.x, p2.y); return 0; }
4、常使用 typedef 的原因
C 语言中,typedef
常常和 struct
一起使用,简化代码,使代码更加简洁和易读。避免重复使用 struct
关键字,尤其在处理复杂结构体时。帮助定义抽象数据类型,使其在代码中更易于重用。