如何传递并返回指向结构数组的指针?

时间:2019-06-25 17:50:18

标签: c arrays pointers struct structure

我有一个结构数组,其结构如下:

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 个答案:

答案 0 :(得分:1)

将数组隐式地(很少有例外)转换为指向表达式中第一个元素的指针。

因此,如果在函数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 );
    //...
}