Передача целой структуры в функцию

Проблема в том, что у меня есть структура, которая задана не глобально, а внутри функции main(). Предположим, что в моей структуре есть несколько полей. Я создаю массив структур. Затем я создаю новую функцию, в которой хочу изменить значения всех полей, допустим, 0-го элемента массива структур. Я разобрался с тем как передать адреса полей в функцию, нашёл как передать массив структур в функцию, но в источниках при передаче массива структур, структура задана глобально, поэтому у меня не выходит сделать также. Условие задания: глобальные переменные использовать нельзя!

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include <clocale>
#include <fstream>
using namespace std;

void Input(int& n, int& a, int& b, char* c, char* g);
void Adding(int& a, int& b, char* c, char* g);
void Looking(int n, int& a, int& b, char* c, char* g);
void Output();
void Changing();
void Removing(int v, int& a, int& b, char* c, char* g);


int main()
{
    setlocale(LC_ALL, "Russian");

    union Sex {
        char _sex[2];
    };

    struct Olympiad {
        char surname[30];
        int points;
        int rank;
        Sex sex;
        enum SexNumber { man_number = 1, woman_number };
    } mass[8];

    strcpy_s(mass[0].surname, "Smith");
    strcpy_s(mass[1].surname, "Lemon");
    strcpy_s(mass[2].surname, "Teuchi");
    strcpy_s(mass[3].surname, "Tennant");
    strcpy_s(mass[4].surname, "Lona");
    mass[0].points = 99;
    mass[1].points = 75;
    mass[2].points = 60;
    mass[3].points = 47;
    mass[4].points = 16;
    mass[0].rank = 1;
    mass[1].rank = 2;
    mass[2].rank = 3;
    mass[3].rank = 4;
    mass[4].rank = 5;
    strcpy_s(mass[0].sex._sex, "M");
    strcpy_s(mass[1].sex._sex, "W");
    strcpy_s(mass[2].sex._sex, "M");
    strcpy_s(mass[3].sex._sex, "M");
    strcpy_s(mass[4].sex._sex, "W");
    menu();

    system("pause");
    return 0;
}

void menu() {
    int p = 0, a, v, n = 5; //n - кол-во строк в таблице
    cout << "Введите число для выбора операции: " << endl;
    cout << "1)Ввод данных в таблицу из текстового файла" << endl;
    cout << "2)Добавление новых элементов в конец таблицы" << endl;
    cout << "3)Просмотр таблицы" << endl;
    cout << "4)Ввод данных из текстового файла в таблицу" << endl;
    cout << "5)Изменение выбранного элемента таблицы" << endl;
    cout << "6)Удаление выбранного элемента таблицы" << endl;
    cout << "7)Выход" << endl;
    cin >> p;
    switch (p) {
    case 1:
        Input(n, mass[n].points, mass[n].rank, mass[n].surname, mass[n].sex._sex);
        menu();
        break;
    case 2:
        cout << "Сколько строк Вы желаете ввести?" << endl;
        cin >> a;
        for (a; a > 0; a--) {
            Adding(mass[n].points, mass[n].rank, mass[n].surname, mass[n].sex._sex);
            n++;
        }
        Looking(n, mass[n].points, mass[n].rank, mass[n].surname, mass[n].sex._sex);
        menu();
        break;
    case 3:
        Looking(n, mass[n].points, mass[n].rank, mass[n].surname, mass[n].sex._sex);
        menu();
        break;
    case 4:
        Output();
        menu();
        break;
    case 5:

        Changing();
        menu();
        break;
    case 6:
        cout << "Которую строку Вы желаете удалить?" << endl;
        cin >> v;
        n--;
        Removing(v, mass[n].points, mass[n].rank, mass[n].surname, mass[n].sex._sex);
        Looking(n, mass[n].points, mass[n].rank, mass[n].surname, mass[n].sex._sex);
        menu();
        break;
    case 7:
        exit(0);
    }

}

void Input(int& n, int& a, int& b, char* c, char* g) {
    ifstream Table("Table.txt");
    if (!Table)
    {
        cout << "Error!" << endl;
        exit(1);
    }
    char s;
    int number_n = 0;
    while (!Table.eof())
    {
        Table.get(s);
        if (s == '\n')
            number_n++;
    }
    Table.close();
    Table.open("Table.txt");
    n = number_n + 1;
    for (int i = 0; i < n; i++) {
        Table >> mass[i].surname;
        Table >> mass[i].points;
        Table >> mass[i].rank;
        Table >> mass[i].sex._sex;
    }
    Table.close();
}

void Adding(int& a, int& b, char* c, char* g) {
    int d;
    char m = 'M';
    char w = 'W';
    cout << "Введите имя участника олимпиады:" << endl;
    cin >> c;
    cout << "Введите количество очков, полученное участником:" << endl;
    cin >> a;
    cout << "Введите место участника:" << endl;
    cin >> b;
    cout << "Введите «1», если участник - мужчина и «2», если участник - женщина" << endl;
    cin >> d;
    switch (d) {
    case mass[0].man_number:
        *g = 'M'; // M - man
        break;
    case mass[0].woman_number:
        *g = 'W'; // W - woman
        break;
    }
}

void Looking(int n, int& a, int& b, char* c, char* g) {
    cout << "Surname" << setw(20) << "Points" << setw(20) << "Rank" << setw(20) << "Sex" << endl;
    for (int i = 0; i < n; i++)
        cout << mass[i].surname << "\t" << setw(19) << mass[i].points << setw(19) << mass[i].rank << setw(19) << mass[i].sex._sex << endl;
}

void Output() {

}

void Changing() { //Также необходимо передать адреса для изменения

}

void Removing(int v, int& a, int& b, char* c, char* g) {
    for (v; v < 8; v++) {
        strcpy_s(mass[v - 1].surname, mass[v].surname);
        mass[v - 1].points = mass[v].points;
        mass[v - 1].rank = mass[v].rank;
        strcpy_s(mass[v - 1].sex._sex, mass[v].sex._sex);
    }
}

Ответы (0 шт):