У меня есть структура, в которой я бы хотел передать свои поля определенным функциям. Например, одно из полей в моей структуре - это оценки викторины студентов для quiz1, 'quiz1'. Я хотел бы рассчитать среднее значение, max и min всех запросов. Я хотел бы создать функцию для каждого вычисления, но я не знаю, как передать конкретное поле структуры данной функции. вот что у меня есть:Передача поля Struct в функцию в C
структура:
struct studentData {
char name[30];
int quiz1; int quiz2;
int quiz3; int quiz4;
int mid1; int mid2;
int finalexam;
} ;
средняя функция:
double calcFAverage(struct studentData *record, int reccount)
{
float sum_F,F_avg;
int k;
// calculate the score sums
for (k=0; k<reccount; k++)
{
sum_F += record[k].finalexam;
}
F_avg = sum_F/reccount;
return F_avg;
}
в основном:
struct studentData record[100];
calcFAverage(record,reccount);
Переменная reccount
содержит число записей для структуры. Но, как вы видите, средняя функция специфична только для итоговых экзаменов. Как я могу сделать это так, чтобы я мог передать любое из полей в структуре и получить его среднее значение. Прямо сейчас у меня есть средняя функция для каждого поля, которое действительно является плохим способом сделать это, я думаю.
С чистым C вам нужно передать смещение, чтобы счет можно было получить с помощью '* ((int *) ((char *) & record [k] + offset))'. Если вы используете C++, вы можете передать указатель на член класса, такой как & studentData :: mid1 –
@YakumoRan: есть технический термин для этого предложения: Yuck! –