首页 > 解决方案 > 给定一个结构数组,如何将结构中一个成员的所有值传递给函数

问题描述

给定一个结构数组,有没有办法通过

emp[0].hourly_wage, emp[1].hourly_wage, emp[2].hourly_wage, emp[3].hourly_wage, emp[4].hourly_wage

作为浮点数组的函数?

是否可以传递一个只包含“hourly_wage”成员而不是“OT”成员的浮点数组......而不仅仅是将值复制到一个单独的浮点数组中,然后将其传递给函数。

struct employee
{
    float hourly_wage;
    float OT;
};

struct employee emp[5];

标签: c

解决方案


不,你不能,但你可以创建另一个指针数组,指向结构数组中的那个成员,并将这个指针数组传递给函数。

执行:

#include <stdio.h>
  
#define ARR_SZ 5

struct employee
{
        float hourly_wage;
        float OT;
};

void test_fun(float **arr) {
        for (int i = 0; i < ARR_SZ; ++i) {
                printf ("%f ", *arr[i]);
        }
        printf ("\n");
}

int main(void) {
        struct employee emp[ARR_SZ];

        for (int i = 0; i < ARR_SZ; ++i) {
                emp[i].hourly_wage = 2.0f;  // dummy value
                emp[i].OT = 1.0f;    // dummy value
        }

        float *hw_arr[ARR_SZ];

        for (int i = 0; i < ARR_SZ; ++i) {
                hw_arr[i] = &(emp[i].hourly_wage);
        }

        test_fun(hw_arr);

        return 0;
}

或者简单地将结构数组传递给函数并访问该成员:

#include <stdio.h>
  
#define ARR_SZ 5

struct employee
{
        float hourly_wage;
        float OT;
};

void test_fun(struct employee *arr) {
        for (int i = 0; i < ARR_SZ; ++i) {
                printf ("%f ", arr[i].hourly_wage);
        }
        printf ("\n");
}

int main(void) {
        struct employee emp[ARR_SZ];

        for (int i = 0; i < ARR_SZ; ++i) {
                emp[i].hourly_wage = 2.0f;  // dummy value
                emp[i].OT = 1.0f;    // dummy value
        }

        test_fun(emp);

        return 0;
}

推荐阅读