Определение указателей на массив структур - PullRequest
0 голосов
/ 10 мая 2018

я наткнулся на этот код:

typedef struct {
    char *name;
    char *value;
} SPAM;

typedef struct {
    char *name;
    int num_spams;
    SPAM *spams;
} EGG;

SPAM my_spams[2] = {
    { "name1", "value1" },
    { "name2", "value2" },
};

EGG my_eggs[1] = {
    { "first egg", 1, my_spams }
};

EXPORT(int) getSPAMANDEGGS(EGG **eggs)
{
    *eggs = my_eggs;
    return 1;
}

В этом объявлении не должно быть определения структуры EGG со спамом ** спам; как определение члена спама, так как мы храним там массив СПАМов позже?

1 Ответ

0 голосов
/ 10 мая 2018

Нет, не должно. Массив SPAM значений выражается через один указатель, поэтому SPAM *spams является правильным.

Причина, по которой параметру функции getSPAMANDEGGS нужны две звездочки, заключается в том, что устанавливает указатель, передаваемый ему извне:

EGG *eggArray; // First asterisk is due to *
int eggArraySize = getSPAMANDEGGS(&eggArray); // Second asterisk is due to &

Без оператора & getSPAMANDEGGS не сможет установить новое значение для указателя eggArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...