Как инициализировать структуру, содержащую другую структуру?
Существует несколько способов инициализации структуры. Для упрощения в следующем примере используются меньшие структуры, чем те, которые вы предоставили ...
Ниже приведена иллюстрация инициализации с инициализацией со значениями (= {,,,{,,}};
), а затем с нулями = {0}
:
typedef struct {
int count;
float cash;
char item[50];
}Purchase;
typedef struct {
int accnt;
char acct_name[50];
Purchase purch;
} Acct;
Acct acct = {100123, "Robert Baily", {15, 12.50, "Tires"}};
//Or, using member names to self document the initialization statement as suggested in comments:
Acct acct1 = Acct acct = {.accnt=100123, .acct_name="Robert Baily", {.count=15, .cash=12.50, .item="Tires"}};
Acct acct2 = {0};
int main(void)
{
printf("acct = %d\nAcct_name = %s\nitem = %s\ncount = %d\ncash = %3.2f\n", acct.accnt, acct.acct_name, acct.purch.item, acct.purch.count, acct.purch.cash);
printf("acct2 = %d\nAcct_name = %s\nitem = %s\ncount = %d\ncash = %3.2f\n", acct2.accnt, acct2.acct_name, acct2.purch.item, acct2.purch.count, acct2.purch.cash);
return 0;
}
Хотя они маленькие, они иллюстрируют, что вы делаете с вашими более крупными и сложными структурами. Я полагаю, что для ваших структур это будет чрезвычайно утомительно, и, вероятно, нет необходимости использовать первый метод, поскольку использование struct
в реальном программировании обычно начинается с обнуления. т.е. {0}