Инициализация C структуры, которая является индексом массива структур - PullRequest
0 голосов
/ 04 марта 2020

У меня есть такая структура:

typedef struct {
    char* name;
    int number;
} Customer;

У меня также есть массив структур Customer. Я хотел бы инициализировать каждый индекс массива структурой Customer, содержащей имя и номер. Вот код для этого:

Customer* customerArray = malloc (5 * sizeof(Customer));
customerArray[0] = { "Name", 1 };

Я получаю ошибку компилятора, которая говорит "Ожидаемое выражение" и ничего больше. Это происходит для каждого индекса массива, который я пытаюсь инициализировать таким образом. Однако, если я делаю это:

Customer myCustomer = { "Name", 1 };

Я не получаю ошибку компилятора. Почему я получаю эту ошибку только при попытке инициализировать структуру в массиве?

1 Ответ

6 голосов
/ 04 марта 2020

Этот синтаксис недопустим:

customerArray[0] = { "Name", 1 };

Поскольку это не инициализация, а присвоение, и при инициализации можно использовать только набор значений в скобках.

Вы можете установите каждое поле индивидуально:

customerArray[0].name = "Name";
customerArray[0].number = 1;

Или вы можете выполнить назначение с составным литералом:

customerArray[0] = (Customer){ "Name", 1 };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...