Хранить int32 в указателе int8 - PullRequest
0 голосов
/ 04 января 2019

В следующем фрагменте я определяю foo, который достаточно большой, чтобы содержать 32-разрядное целое число.Однако, когда я пытаюсь сохранить 32-разрядное целое число в foo, оно не подходит.

int8_t * foo = malloc(sizeof(int32_t));
int32_t value = 300;
foo[0] = value;
printf("%i ", foo[0]); // 44

Есть ли способ использовать больше элементов для хранения значения вместо его усечения?

1 Ответ

0 голосов
/ 04 января 2019

foo[0] имеет тип int8_t, поэтому он достаточно велик только для 1 байта.

Хотя доступны смежные байты (foo[1], foo[2], foo[3]), компилятор не знает, что вы собираетесь копировать все4 байта при работе только с foo[0].

Вместо:

*((int32_t*)foo) = 300;

Что говорит: "Представьте, что foo является началом 4-байтового целого числа, затем назначьте егозначение 300 ".

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