Мне любопытно узнать, Можно ли использовать массив битовых полей? Нравится:
struct st
{
unsigned int i[5]: 4;
};
Ответ 1
Нет, вы не можете. Бит-поле может использоваться только с интегральными переменными типа.
C11-§6.7.2.1/5
Поле бит должно иметь тип, который является квалифицированной или неквалифицированной версией _Bool, signed int, unsigned int или другого типа, определенного для реализации.
В качестве альтернативы вы можете сделать это
struct st
{
unsigned int i: 4;
} arr_st[5];
но его размер будет в 5 раз больше размера struct (как указано в comment @Jonathan Leffler) с 5 членами с полем бит 4. Таким образом, здесь это не имеет особого смысла.
Более внимательно вы можете это сделать
struct st
{
uint8_t i: 4; // Will take only a byte
} arr_st[5];
Ответ 2
C не поддерживает массивы бит-полей, поэтому короткий ответ - нет.
Для очень больших массивов может быть целесообразно упаковать значения по 2 байта следующим образом: