Как передать и вернуть указатель на массив структур? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть массив структур, и структура выглядит следующим образом:

struct patient {
    int pictures[2];
    int personal_number;
    char patient_name[FILE_PATIENT_NAMES + 1];
    int num_of_matches;
};

typedef struct patient Patient;

Patient patientregister[5];

У меня есть две функции, как показано ниже:

/********* function declaration *********/

Patient *search_patient(Patient patientregister[], int num_of_patients);
Patient *search_by_personaNumber(Patient *matches[],
                                 Patient patientregister[], int num_of_patients);

Код начинается с *search_patient, а затем переходит к *search_by_personalNumber. *search_patient имеет другой массив структур, объявленных внутри него: Patient matches[5];, и идея состоит в том, чтобы отправить указатель с Patient matches[5]; на *search_by_personalNumber. и затем верните его на *search_patient с совпадениями, которые ищет пользователь. Мой вопрос заключается в том, как отправить указатель массива структур в другую функцию, использовать указатель для заполнения массива структур и отправить указатель обратно на исходную функцию, в моем случае *search_patient?

1 Ответ

1 голос
/ 25 июня 2019

Массивы неявно (за редким исключением) преобразуются в указатели на свои первые элементы в выражениях.

Так что если в функции search_patient вы объявили массив, подобный этому

Patient *search_patient(Patient patientregister[], int num_of_patients)
{
    Patient matches[5];
    //...
}

затем передать его функции search_by_personaNumber можно следующим образом

Patient *search_patient(Patient patientregister[], int num_of_patients)
{
    Patient matches[5];
    //...

    search_by_personaNumber( matches, 5 );
    //...
}

Фактически в функции search_patient нет необходимости использовать возвращаемое значение функции search_by_personaNumber. Но если вам действительно нужно его использовать, вы можете написать

Patient *search_patient(Patient patientregister[], int num_of_patients)
{
    Patient matches[5];
    //...

    Patient *p = search_by_personaNumber( matches, 5 );
    //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...