Массивы битовых полей в Си

Рейтинг: 1Ответов: 1Опубликовано: 16.09.2014

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

Если говорить об адресах полей внутри структур, то всё более-менее понятно: у середины байта "целочисленного" адреса быть не может, тем более что конкретное размещение в памяти зависит от реализации.

Но вот с массивами непонятно. Что мне мешает создать массив структур, у которых есть битовые поля? Если речь не об этом, то о чём? Мне сложно представить себе массив из экземпляров одного поля структуры. Или речь идёт о том, что битовые поля не могут сами иметь тип массива?

Ответы

▲ 1

Насколько я понимаю, создавая массив структур с битовыми полями, Вы не добьетесь их "компактной" упаковки. В зависимости от настройки #pragma package, структура даже с одним битовым полем будет занимать минимум 1 байт.

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