C массив структуры - PullRequest
       4

C массив структуры

0 голосов
/ 12 сентября 2018
typedef struct Expected {

   const int number;
   const char operand;

} Expected;   

Expected array[1];
Expected e = {1, 'c'};
array[0] = e;

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

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Это запрещено, потому что struct имеет const членов:

ошибка: назначение места только для чтения array[0]

array[0] = e;

Если struct имеет один const член, целое struct также нельзя назначить.

Если бы можно было назначить элементы массива подобным образом, можно было бы обойти константу любого члена struct, например:

Expected replacement = {.number = array[0].number, .operand = newOperand}; // << Allowed
array[0] = replacement; // <<== This is not allowed

Компилятор помечает это назначение как ошибку ( demo ).

Если вам нужно сохранить const, вам придется создавать свой массив с инициализаторами вместо использования присваиваний.

0 голосов
/ 12 сентября 2018

Создание членов структуры const означает, что вы не можете писать им.После удаления это работает.

typedef struct Expected {

   int number;
   char operand;

} Expected;
0 голосов
/ 12 сентября 2018

Элемент Expected объявлен const.Это означает, что они не могут быть изменены.

Чтобы установить значения, вам необходимо инициализировать их во время определения переменной:

Expected array[1] = { {1, 'c'} };

Тот факт, что вы используете массив, в этом случае не имеет значения.

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