c函数传递结构体数组
结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针。(结构体变量传递给函数与基本变量传递给函数类似,可参考)
如果结构体成员较多,尤其是成员为数组时,传送的时间和空间开销会很大,影响程序的运行效率。所以最好的办法就是使用结构体指针,这时由实参传向形参的只是一个地址,非常快速。(结构体数组传递给函数与数组传递给函数类似)
一 形式参数
形式参数是一个结构体指针
void average(struct stu *ps, int len)
{...}
二 调用方式
结构体数组名是一个指向结构体数组中第一个元素的常量指针,将结构体数组名(常量指针)传递给函数
average(stus, len);
三 案列展示
#include <stdio.h> struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 }stus[] = { {"Li ping", 5, 18, C, 145.0}, {"Zhang ping", 4, 19, A, 130.5}, {"He fang", 1, 18, A, 148.5}, {"Cheng ling", 2, 17, F, 139.0}, {"Wang ming", 3, 17, B, 144.5} }; void average(struct stu *ps, int len); int main(){ 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 average=%.2f num_140=%d ", sum, sum/5, num_140); }