可用struct将学生姓名、学号、年龄、成绩、性别打包为student结构体;含char name[20]、int id、int age、float score、char gender;支持定义初始化、点号访问、函数传参及数组批量管理。

可以用 struct 将学生姓名、学号、年龄、成绩等不同类型的字段打包成一个整体,实现逻辑上的“一个学生”。
定义结构体类型
用 struct 关键字声明一个名为 Student 的结构体,内部按需组合基本类型和数组:
-
char name[20]:存放姓名(C 风格字符串,预留足够空间) -
int id:整型学号(如 2024001) -
int age:整型年龄(如 19) -
float score:浮点型成绩(支持小数,如 89.5) -
char gender:单字符表示性别('M' 或 'F')
示例代码:
struct Student {
char name[20];
int id;
int age;
float score;
char gender;
};
声明变量与初始化
定义结构体后,可直接声明变量,支持定义时初始化或后续赋值:
- 定义并初始化:
struct Student s1 = {"张三", 2024001, 19, 92.5, 'M'}; - 先定义后赋值:
struct Student s2; strcpy(s2.name, "李四"); s2.id = 2024002; ... - 注意:字符串不能直接用
=赋值,要用strcpy()(需包含<string.h></string.h>)
访问成员与实际使用
用点号 . 访问结构体成员,支持读写、打印、计算等操作:
- 打印信息:
printf("%s, %d, %d, %.1f, %c\n", s1.name, s1.id, s1.age, s1.score, s1.gender); - 修改成绩:
s1.score = 95.0; - 作为函数参数传递:
void printStudent(struct Student s) { ... }(传值)或void updateScore(struct Student *ps) { ps->score += 2.0; }(传地址更高效)
进阶:数组与指针管理多个学生
结构体可自然构成数组,便于批量处理:
- 学生数组:
struct Student class[50];—— 定义最多 50 人的班级 - 遍历打印:
for (int i = 0; i - 用指针操作:
struct Student *p = &class[0]; printf("%s", p->name);(->等价于(*p).name)










