1) Это не C, а С++ (смотрю на тег вопроса)
2) Число полей структуры не может быть переменным. Здесь их три: NumSrtucts, Size, Offsets.
3) Offsets это указатель, которому в конструкторе присваивается выделенная в куче память. И размер это памяти варьируется динамически на момент вызова конструктора, но хранится эта память вне структуры, а как было сказано в куче (динамической памяти) и структура лишь хранит адрес этого участка кучи в Offsets.