Московский государственный университет имени М.В.Ломоносова
Опубликован: 03.10.2006 | Доступ: свободный | Студентов: 1224 / 79 | Длительность: 09:08:00
Специальности: Программист
Лекция 8:

Производные типы данных языка C++. Структуры, объединения и перечисления

< Лекция 7 || Лекция 8: 123 || Лекция 9 >

Структуры

Объявление структуры

Структуры языка C++ представляют поименованную совокупность компонентов, называемых полями, или элементами структуры. Элементом структуры может быть:

  • переменная любого допустимого типа;
  • битовое поле;
  • функция.

Объявление структуры имеет следующее формальное описание:

struct [имя_структуры] {
    тип_элемента_структуры  имя_ элемента1;
    тип_элемента_структуры  имя_ элемента2;
     ...
    тип_элемента_структуры  имя_ элементаN;
} [список_объявляемых_переменных];

Объявление структуры с битовыми полями имеет следующее формальное описание:

struct [имя_структуры] {
    тип_элемента_структуры  
        [имя_ элемента1] : число_бит;
    тип_элемента_структуры  
        [имя_ элемента2] : число_бит;
     ...
    тип_элемента_структуры  
        [имя_ элементаN] : число_бит;
} [список_объявляемых_переменных];

Возможно неполное объявление структуры, имеющее следующее формальное описание:

struct имя_структуры;

При отсутствии имени объявляемой структуры создается анонимная структура. При создании анонимной структуры обычно указывается список объявляемых переменных.

Список объявляемых переменных типа данной структуры может содержать:

  • имена переменных;
  • имена массивов;
  • указатели.

Например: struct sA {char a[2], int i;} struA, struB[10], *struC;

Для использования указателя на структуру ему необходимо присвоить адрес переменной типа структуры.

Размер структуры с битовыми полями всегда кратен байту. Битовые поля можно определять для целочисленных переменных типа int, unsigned int, char и unsigned char. Одна структура одновременно может содержать и переменные, и битовые поля. Если для битового поля не задано имя элемента, то доступ к такому полю не разрешен, но количество указанных бит в структуре размещается.

Типом элемента структуры может быть:

  • другой структурный тип (допускаются вложенные структуры);
  • указатель на данный структурный тип;
  • неполно объявленный структурный тип;
  • любой другой базовый или производный тип, не ссылающийся рекурсивно на объявляемый структурный тип.

Например:

struct sA {char a[2], sA* this_struct;};  
    // Корректное объявление структуры 
struct sB;   
    // Неполное объявление структуры
struct sA {char a[2], sB sb*_struct;};  
    // Корректное объявление структуры
struct sA {char a[2], sA this_struct;};  
    // Ошибочное объявление

Структура не может содержать в качестве вложенной структуры саму себя, но она может содержать элемент, являющийся указателем на объявляемую структуру.

Например:

struct structA { 
    struct structA *pA; int iA; } sA; 
    // pA указатель на структуру

При одновременном объявлении структурного типа, объявлении переменной данного типа и ее инициализации список значений указывается в фигурных скобках в последовательности, соответствующей последовательности определения элементов структуры.

Например:

struct POINT   // Объявление структурного 
               // типа POINT 
{
   int x;      // Объявление элементов x и y
   int y;
} p_screen = { 50, 100 }; 
    // Эквивалентно записи p_screen.x = 50; 
    // и p_screen.y = 100;

< Лекция 7 || Лекция 8: 123 || Лекция 9 >