C 语言从 0 入门(十三)|结构体:自定义数据类型与实战

张开发
2026/4/13 19:13:47 15 分钟阅读

分享文章

C 语言从 0 入门(十三)|结构体:自定义数据类型与实战
大家好我是网域小星球。前面我们学习了基本数据类型、数组、指针、函数能够处理数字、字符等简单数据。但在实际开发中我们经常需要描述一个复杂对象比如学生、商品、员工、书籍等它们包含多种不同类型的信息姓名、年龄、学号、价格等。C 语言提供的结构体就是用来解决这个问题的。它允许我们自定义复合型数据类型把多个不同类型的变量打包在一起让程序更贴近现实逻辑。本篇从定义、使用到实战案例全程 VS2022 可直接运行零基础也能轻松掌握。目录一、本章学习目标二、什么是结构体三、结构体的定义语法四、结构体变量的定义与初始化1. 定义结构体变量五、结构体数组六、结构体指针- 操作符七、结构体做函数参数九、高频易错点十、本章核心总结下期预告一、本章学习目标学完本篇你将彻底掌握结构体的作用与基本概念结构体类型的定义、声明与初始化结构体变量的使用.成员访问符结构体数组批量存储复杂数据结构体与指针-操作符用法结构体做函数参数实战案例学生信息管理系统简化版二、什么是结构体基本类型int、char、float只能存单一数据数组只能存多个相同类型的数据结构体可以存多个不同类型的数据一句话结构体 打包多种数据类型的自定义类型比如一个 “学生”学号int姓名char []年龄int成绩float这些类型不同但属于同一个对象就可以用结构体打包。三、结构体的定义语法struct 结构体名 { 类型 成员1; 类型 成员2; ... };示例定义学生结构体struct Student { int id; // 学号 char name[20];// 姓名 int age; // 年龄 float score; // 成绩 };注意最后有分号。四、结构体变量的定义与初始化1. 定义结构体变量struct Student stu;2. 初始化struct Student stu {1001, ZhangSan, 18, 95.5};3. 成员访问使用.stu.id 1002; stu.age 19;完整示例#define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h struct Student { int id; char name[20]; int age; float score; }; int main() { struct Student stu {1001, ZhangSan, 18, 95.5}; printf(学号%d\n, stu.id); printf(姓名%s\n, stu.name); printf(年龄%d\n, stu.age); printf(成绩%.1f\n, stu.score); return 0; }五、结构体数组批量存放多个结构体用结构体数组。struct Student stus[3] { {1001, Zhang, 18, 90}, {1002, Li, 19, 85}, {1003, Wang, 20, 88} };遍历for (int i 0; i 3; i) { printf(%d %s %d %.1f\n, stus[i].id, stus[i].name, stus[i].age, stus[i].score); }六、结构体指针- 操作符指针指向结构体时用-访问成员。struct Student stu {1001, Zhang, 18, 90}; struct Student *p stu; printf(%d, p-id); printf(%s, p-name);p-id等价于(*p).id。七、结构体做函数参数示例打印学生信息void printStu(struct Student s) { printf(id%d name%s\n, s.id, s.name); }调用printStu(stu);八、综合实战简易学生信息管理#define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h struct Student { int id; char name[20]; float score; }; int main() { struct Student stus[3]; // 输入 for (int i 0; i 3; i) { printf(请输入第%d个学生信息学号 姓名 成绩\n, i1); scanf(%d %s %f, stus[i].id, stus[i].name, stus[i].score); } // 输出 printf(\n学生信息如下\n); for (int i 0; i 3; i) { printf(%d\t%s\t%.1f\n, stus[i].id, stus[i].name, stus[i].score); } return 0; }九、高频易错点结构体定义末尾忘记分号结构体成员不能直接整体赋值如stu.name aaa错误混淆.和-的使用场景结构体数组下标越界结构体嵌套过深导致访问混乱十、本章核心总结结构体用于封装多个不同类型的数据定义用struct 名{...};访问成员用.结构体指针用-结构体数组可批量管理复杂对象结构体是做项目、写管理系统的基础是从基础语法走向实用编程的关键一步下期预告下一篇我们学习文件操作实现把数据保存到本地文件、从文件读取数据做出真正能 “持久化存储” 的程序。

更多文章