netlib.narod.ru< Назад | Оглавление | Далее >

6.1. Основные сведения о структурах

Сконструируем несколько графических структур. В качестве основного объекта выступает точка с координатами x и y целого типа.


Рис. 15.

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

  struct point {
      int x;
      int y;
  };

Объявление структуры начинается с ключевого слова struct и содержит список объявлений, заключенный в фигурные скобки. За словом struct может следовать имя, называемое тегом структуры (в нашем случае — point). Тег дает название структуре данного вида и далее может служить кратким обозначением той части объявления, которая заключена в фигурные скобки.

Перечисленные в структуре переменные называются членами (members). Имена членов структур и тегов без каких-либо коллизий могут совпадать с именами обычных переменных (т.е. не являющихся элементами структуры), так как они всегда различимы по контексту. Более того, одни и те же имена членов могут встречаться в разных структурах, хотя, если следовать хорошему стилю программирования, лучше одинаковые имена давать только близким по смыслу объектам.

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

  struct { ... } x, y, z;

с точки зрения синтаксиса аналогично выражению

  int x, y, z;

в том смысле, что и то и другое объявляет x, y и z переменными указанного типа; и то и другое приведет к выделению памяти соответствующего размера.

Объявление структуры, не содержащее списка переменных, не резервирует памяти; оно просто описывает шаблон, или образец структуры. Однако, если структура имеет тег, то этим тегом можно далее пользоваться при определении структурных объектов. Например, с помощью заданного выше описания структуры point строка

  struct point pt;

определяет структурную переменную pt типа struct point. Структурную переменную при ее определении можно инициализировать, формируя список инициализаторов ее членов в виде константных выражений:

  struct point maxpt = { 320, 200 };

Инициализировать автоматические структуры можно также присваиванием или обращением к функции, возвращающей структуру соответствующего типа.

Доступ к отдельному члену структуры осуществляется посредством конструкции вида:

  имя-структуры.элемент

Оператор доступа к члену структуры . соединяет имя структуры и имя члена. Чтобы напечатать, например, координаты точки pt, годится следующее обращение к printf:

  printf("%d,%d", pt.x, pt.y);

Другой пример: чтобы вычислить расстояние от начала координат (0, 0) до pt, можно написать

    double dist, sqrt(double);
    dist = sqrt((double)pt.x * pt.x + (double)pt.y * pt.y);

Структуры могут быть вложены друг в друга. Одно из возможных представлений прямоугольника — пара точек на углах одной из его диагоналей:


Рис. 16.

  struct rect {
      struct point pt1;
      struct point pt2;
  };

Структура rect содержит две структуры point. Если мы объявим screen как

  struct rect screen;

то

  screen.pt1.x

обращается к координате x точки pt1 из screen.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz