@KiVa

Столкнулся со странным объявлением структуры — где о таком прочитать?

Привожу фрагмент кода:

struct t_EEPROMOffsets
{
  t_EEPROMOffsets(bool isEKM)
    {
      if (isEKM)
        {
          NumSrtucts = 9;
          Size = sizeof(t_EEPROMImage);
        }
      else
        {
          NumSrtucts = 8;
          Size = sizeof(t_EEPROMImage) - sizeof(t_ExtraMul1);
        }
      Offsets = new WORD [NumSrtucts];
      Offsets[0] = offsetof(t_EEPROMImage, stHead1);
      Offsets[1] = offsetof(t_EEPROMImage, stBPPS_Param1);
      Offsets[2] = offsetof(t_EEPROMImage, stAdcGrad1);
      Offsets[3] = offsetof(t_EEPROMImage, stTcorrCoef1);
      Offsets[4] = offsetof(t_EEPROMImage, stKeyClb1);
      Offsets[5] = offsetof(t_EEPROMImage, stItcUst1);
      Offsets[6] = offsetof(t_EEPROMImage, stDACPar1);
      Offsets[7] = offsetof(t_EEPROMImage, stDACGrad1);
      if (isEKM)
        Offsets[8] = offsetof(t_EEPROMImage, stExtraMul1);      
    }
  ~t_EEPROMOffsets()
    {
      delete[] Offsets;
    }
  WORD NumSrtucts;
  WORD Size;
  WORD* Offsets;
};


Код рабочий. Раньше я не знал, что число полей внутри структуры может быть переменным ( см. IF() ), т.е. получается, что мне не хватает знаний. Где можно почитать о таком способе объявления структур? Какие ограничения есть? Или кто может разъяснить? Интересует не общая информация, а конкретная по данному случаю.
  • Вопрос задан
  • 227 просмотров
Решения вопроса 1
@wawa
1) Это не C, а С++ (смотрю на тег вопроса)
2) Число полей структуры не может быть переменным. Здесь их три: NumSrtucts, Size, Offsets.
3) Offsets это указатель, которому в конструкторе присваивается выделенная в куче память. И размер это памяти варьируется динамически на момент вызова конструктора, но хранится эта память вне структуры, а как было сказано в куче (динамической памяти) и структура лишь хранит адрес этого участка кучи в Offsets.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы