打包:字段多了装进一个盒子
一组学生每人有 score 和 id 两个字段,用两个平行数组分开存,一排序就容易对不上号;把字段装进同一个盒子、整体一起动才是正解。struct Stu { int score; int id; }; 定义新类型,struct Stu a[4] 开结构体数组,先下标定位再点号进字段:a[1].score。scanf 读成员照样要取地址:scanf("%d", &a[i].score)。
typedef:给类型起短名
C 和 C++ 不同,struct 的名字不会自动成为类型名,定义变量必须写全 struct Stu s;。用 typedef struct { int score, id; } Stu; 起短名后,定义变量、开数组、写函数参数都是清爽的 Stu s;、Stu a[4];——一次 typedef,处处省事。
结构体指针与箭头 ->
Stu *p = &s 让指针指向整个结构体,访问成员用箭头:p->score 完全等价 (*p).score——先解引用回本体,再点号进成员。函数想修改结构体,就把地址传进去:void addScore(Stu *p, int d) { p->score += d; },调用 addScore(&s, 5) 后原件真的变了。按值传 Stu 不但改不到原件,还多付一次整个结构体的拷贝钱——传结构体,默认传指针。