В C указатель указывает на объект & кинжал;
Единственными объектами, которые не являются целым числом байтов, являются битовые поля.
Язык C не позволяет создавать указатель на битовое поле; этот код приведет к ошибке компилятора: «невозможно получить адрес битового поля« b »»:
struct S { unsigned int a:4, b:4, c:4, d:3, e:1; };
int main ( void ) {
struct S s;
int *i = &s.b; // would point half a byte into s
return 0;
}
Указатели могут быть увеличены только на целое число размера объекта, на который они указывают.
Поскольку вы не можете создать такой указатель на объект размером менее одного байта или увеличить указатель менее чем на один байт, вы не можете иметь указатель, выровненный менее чем на один байт.
& кинжал; в смысле С, а не в смысле ОО