Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
17.04.2015
Размер:
42.1 Кб
Скачать

Лекция. Структуры.

План лекции.

  1. Понятие структуры.

  2. Определение структуры.

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

  4. Примеры структур.

  5. Оператор typedef.

  6. Задание структур с typedef.

  7. Обращение к полям структуры.

  8. Ввод- вывод информации в структурах.

  9. Включение структур в структуры.

  10. Присваивание структур.

  11. Массивы в структурах.

  12. Структуры и функции.

  13. Указатели и ссылки в структурах.

  14. Массивы структур.

  15. Указатели на структуры.

  16. Вопросы для самопроверки.

    1. Понятие структур.

Структура — это одна или несколько переменных (возможно, различных типов), которые для удобства работы с ними сгруппированы под одним именем. (В некоторых языках, в частности в Паскале, структуры называются записями.) Структуры помогают в организации сложных данных (особенно в больших программах), поскольку позволяют группу связанных между собою перемен-ных трактовать не как множество отдельных элементов, а как единое целое.

Традиционный пример структуры — строка платежной ведомости. Она содержит такие сведения о служащем, как его полное имя, адрес, номер карточки социального страхования, зарплата и т.д. Некоторые из этих характеристик сами могут быть структурами: например, полное имя состоит из нескольких компонент (фамилии, имени и отчества); аналогично адрес, и даже зарплата. Другой пример (более типичный для Си) — из области графики: точка есть пара координат, прямоугольник определяется парой точек и т.д.

Главные изменения, внесенные стандартом ANSI в отношении структур, — это введение для них оператора присваивания. Структуры могут копироваться, над ними могут выполняться операции присваивания, их можно передавать функциям в качестве аргументов, а функции могут возвращать их в качестве результатов. В большинстве компиляторов уже давно реализованы эти воз-можности, но теперь они точно оговорены стандартом. Для автоматических структур и массивов теперь также допускается инициализация.

2. Определение структур.

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

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

struct point {

int x;

int y;

};

      1. Обьвление структуры.

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

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

Каждый элемент в структуре имеет свое имя и называется полем. Элементы в структуре располагаются последовательно. Размер структуры определяется суммой размеров всех элементов.

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

struct [имя типа] {

поле №1;

поле №2;

...

поле №N;

} [список переменных];

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

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

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:

Соседние файлы в папке Л№23.Структуры.ООП