#pragma pack(1)
typedef struct
{
char a;
short b;
}str1_t;
typedef struct
{
char c;
char d;
str1_t st1;
}str1_t;
#pragma pack()
str1_t tst; //Все элементы структуры tst упакованы, но адрес самой переменной tst кратен 4 байтам.
Поэтому void fn(&tst.b) делать нельзя так как функция fn ожидает что принимаемый ею указатель будет кратен 4 байтам.