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
关键字,尤其在处理复杂结构体时。帮助定义抽象数据类型,使其在代码中更易于重用。