# 结构体 ```c #include struct stu { char *name; int num; int age; char group; float score; }stus[] = { {"Li ping", 5, 18, 'C', 145.0}, {"Zhang gang", 4, 19, 'A', 130.5}, {"Wang wei", 1, 18, 'B', 160.3}, {"Lei feng", 2, 17, 'A', 100.3}, {"Xu dada", 4, 19, 'F', 85.0}, }; void average(struct stu *ps, int len); int main(int argc, char *argv[]) { int len = sizeof(stus) / sizeof(struct stu); average(stus, len); return 0; } void average(struct stu *ps, int len) { int i, num_140 = 0; float average, sum = 0; for (i = 0; i < len; i++) { sum += (ps + i)->score; if ((ps + i)->score < 140) num_140++; } printf("sum=%.2f\naverage=%.2f\nnum_140=%d\n", sum, sum / 5, num_140); } ``` ## 获取结构体成员 通过结构体指针可以获取结构体成员,一般形式为: (*pointer).memberName 或者: pointer->memberName 第一种写法中,`.`的优先级高于`*`,`(*pointer)`两边的括号不能少。如果去掉括号写作`*pointer.memberName`,那么就等效于`*(pointer.memberName)`,这样意义就完全不对了。 第二种写法中,`->`是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是`->`在C语言中的唯一用途。 上面的两种写法是等效的,我们通常采用后面的写法,这样更加直观。