未能将struct-array的变量作为函数参数传递

时间:2011-10-20 14:47:45

标签: c struct

我对C语言中的结构概念相当新,并遇到了一个问题。我已经找到了这里发布的任何类似问题,但找不到任何问题。我想要做的是将一个结构数组中的变量作为参数传递给函数,如下所示:

struct Student
{
    float average;
    int ID;
    int grades[5];
    char firstName[20], lastName[20];
};

void main(void)
{
    struct Student sTable[10];

    float maxAverage(float sTable[].average)
    {
        int i;
        float max = 0;

        for(i = 0;i < 10; ++i)
        {
            if(sTable[i].value > max)
            {
                max += sTable[i].value;
            }
        }
        return max;
    }

    printf("%f",maxAverage(sTable[].average));
}

2 个答案:

答案 0 :(得分:2)

这里有一些问题。

  1. 您不能像Java,C#,Python等语言那样将函数嵌套在其他函数中。
  2. 您正在错误地传递struct数组。
  3. 您的主要声明不正确。
  4. 你想要这样的代码:

    struct Student
    {
        float average;
        int ID;
        int grades[5];
        char firstName[20], lastName[20];
    };
    
    float maxAverage(struct Student sTable[])
    {
        int i;
        float max = 0;
    
        for(i = 0;i < 10; ++i)
        {
            if(sTable[i].value > max)
            {
                max += sTable[i].average;
            }
        }
        return max;
    }
    
    int main(void)
    {
        struct Student sTable[10];
        //initialize sTable
        printf("%f", maxAverage(sTable));
        return 0;
    }
    

    请注意,您缺少sTable的初始化。

    你真的应该将数组的长度作为参数传递给maxAverage。这样就可以更灵活地使用任何长度的数组。

答案 1 :(得分:0)

首先,你不能在另一个函数中声明或定义一个函数,所以在maxAverage之外移动main(顺便提一下,应该返回int,而不是{{} 1}})。其次,给定一个结构数组,你不能只是自动地从结构的某个字段创建一个值数组;如果你愿意,你必须手动声明一个单独的数组(在这种情况下)void,然后逐个复制float个字段。一种更简单的方法是简单地将average本身传递给sTable,并使maxAverage仅对数组中结构的maxAverage字段进行操作。