如果初学者对typedef这个函数的使用不熟悉的话,下面这串代码去掉typedef
#include<stdio.h> enum Sextype { female,male }; struct School { enum Sextype sextype; int Number; }; struct Number { int MaleSum; int FemaleSum; int AllSum; }; struct Number Sumscore(struct School* sn, int n); int main() { struct School school[3] = { {female,10},{male,15},{female,20} }; struct Number num; num = Sumscore(school,3); printf("male=%d,female=%d,all=%d\n", num.MaleSum,num.FemaleSum,num.AllSum); return 0; } struct Number Sumscore(struct School* school,int n) { struct Number temp = {0,0,0}; for (int i = 0; i < n; i++) { if (school[i].sextype == female) temp.FemaleSum += school[i].Number; else temp.MaleSum += school[i].Number; temp.AllSum += school[i].Number; } return temp; }结果运行效果截图: 运行没问题,这里解释一下如何把结构体数组作为参数传入函数,其实在C语言中,任何数组都可以用首地址加上数组长度的方式传入函数,结构体数组也是数组,同样可以以首地址加上数组长度的方式传入函数,需要注意是仅仅只有别把传入的数据类型给搞错了。(我想学到结构体这个地方了,指针应该比较熟悉了吧,如果不理解为什么首地址加上长度可以表示数组的原因,可以搜索数组传入函数这个问题)