一文读懂 C 语言结构体:从基础到实践
在 C 语言的世界里,结构体(struct)是一个超实用的自定义数据类型,能帮我们把不同类型的数据打包在一起,完美模拟现实中的复杂事物。今天就用最简单的方式,带你搞定结构体的核心知识点✅
一、什么是结构体?
我们平时用的int、char、float都是基础数据类型,只能存单一信息。但现实里的事物往往有多个属性,比如一个学生:
- 学号(整数)
- 姓名(字符串)
- 年龄(整数)
- 成绩(浮点数)
这时候基础类型就不够用了,结构体就是把多个不同类型的变量 “打包” 成一个新类型,专门用来描述这类复杂对象。
二、结构体的基本写法
1. 定义结构体类型
c
运行
// 定义一个描述学生的结构体类型
struct Student {
int id; // 学号
char name[20];// 姓名
int age; // 年龄
float score; // 成绩
};
这里struct Student就是我们自定义的新类型,和int、char的地位是一样的~
2. 定义结构体变量
有了结构体类型,就可以定义对应的变量了:
c
运行
// 方式1:先定义类型,再定义变量
struct Student stu1;
// 方式2:定义类型的同时定义变量
struct Student {
int id;
char name[20];
int age;
float score;
} stu2, stu3;
3. 初始化结构体变量
可以在定义变量时直接赋值:
c
运行
struct Student stu = {2024001, "张三", 18, 95.5};
三、如何访问结构体成员?
访问结构体成员分两种情况:
1. 普通结构体变量 → 用.操作符
c
运行
#include <stdio.h>
int main() {
struct Student stu = {2024001, "张三", 18, 95.5};
// 访问并打印成员
printf("学号:%d\n", stu.id);
printf("姓名:%s\n", stu.name);
printf("年龄:%d\n", stu.age);
printf("成绩:%.1f\n", stu.score);
// 修改成员
stu.score = 98.0;
printf("修改后的成绩:%.1f\n", stu.score);
return 0;
}
2. 结构体指针变量 → 用->操作符
如果是指向结构体的指针,就用->来访问成员:
c
运行
#include <stdio.h>
int main() {
struct Student stu = {2024001, "张三", 18, 95.5};
struct Student *p = &stu; // 定义结构体指针
// 用指针访问成员
printf("学号:%d\n", p->id);
printf("姓名:%s\n", p->name);
// 修改成员
p->age = 19;
printf("修改后的年龄:%d\n", p->age);
return 0;
}
四、结构体的实用小技巧
1. 用typedef简化结构体名
每次写struct Student太麻烦?用typedef给结构体起别名,代码会更简洁:
c
运行
typedef struct {
int id;
char name[20];
int age;
float score;
} Student; // 给匿名结构体起别名Student
// 之后直接用Student定义变量
Student stu = {2024002, "李四", 19, 88.5};
2. 结构体数组:批量管理对象
如果有多个学生,用结构体数组最方便:
c
运行
Student stu_arr[3] = {
{2024001, "张三", 18, 95.5},
{2024002, "李四", 19, 88.5},
{2024003, "王五", 18, 90.0}
};
// 遍历打印数组
for(int i=0; i<3; i++){
printf("第%d个学生:%s 学号%d 成绩%.1f\n", i+1, stu_arr[i].name, stu_arr[i].id, stu_arr[i].score);
}
3. 结构体嵌套:模拟更复杂的关系
结构体里还能套结构体,比如给学生加一个 “地址” 属性:
c
运行
// 地址结构体
typedef struct {
char province[10]; // 省份
char city[10]; // 城市
} Address;
// 学生结构体(嵌套Address)
typedef struct {
int id;
char name[20];
int age;
float score;
Address addr; // 嵌套地址
} Student;
// 初始化嵌套结构体
Student stu = {
2024001, "张三", 18, 95.5,
{"广东省", "深圳市"}
};
// 访问嵌套成员
printf("地址:%s %s\n", stu.addr.province, stu.addr.city);
五、结构体的常见应用场景
- 数据封装:把相关数据打包,让代码逻辑更清晰,比如描述图书、员工、订单等对象。
- 函数传参:把多个参数打包成一个结构体传给函数,减少参数数量,让代码更易维护。
- 链表实现:结构体是实现链表、树等数据结构的基础,是 C 语言数据结构的核心工具。
六、小总结
结构体是 C 语言里的 “数据打包神器”,核心就是:
- 用
struct定义自定义类型 - 用
.或->访问成员 - 配合
typedef、数组、嵌套,能灵活应对各种复杂数据场景
下次再遇到需要描述复杂对象的需求,不妨试试用结构体,代码会变得更整洁哦~