快捷搜索: 王者荣耀 脱发

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);
}
经验分享 程序员 微信小程序 职场和发展