Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 11 Структуры 2015.doc
Скачиваний:
132
Добавлен:
29.02.2016
Размер:
117.76 Кб
Скачать

Глава 11. Структуры

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

Операции над переменными структурного типа

Вложенные структуры

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

Структуры и указатели

  • Указатели в структуре

  • Указатели на структуру

Динамический массив структур

Ссылка на структуру

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

В С++ существуют специальные средства, позволяющие программистам создавать свои собственные типы данных, такие как структуры, классы и др.

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

Структура – тип данных, объединяющий под одним именем несколько данных одного или разных типов, которые называются полями (элементами или членами) структуры. В качестве полей могут быть переменные простых типов, массивы, другие структуры, указатели и т.д. Структуры позволяют сгруппировать данные, объединяемые каким-либо общим понятием. Например, данные – имя, фамилия, год рождения, оценки по экзаменам можно поместить в структуру данных о студенте.

Для определения структуры используется ключевое слово struct, за которым следует идентификатор, являющийся именем типа структуры, и список полей или членов структуры, заключённых в фигурные скобки. Каждое поле структуры, как и структура в целом, заканчивается точкой с запятой. Например:

struct Date{ // Date – название нового типа пользователя

char name[10]; // поле name

int year; // поле year

int month; // поле month

};

После того как определён структурный тип, пользоваться этим типом нельзя до того момента, пока не объявлена переменная структурного типа. Это можно сделать двумя способами:

Date st1; // переменная st1 типа Date

или

struct Date{

char name[10];

int year;

int month;

}st1;

При объявлении нескольких структурных переменных для одного структурного типа их следует разделять запятыми:

Date st1, st2;

В момент создания структурной переменной компилятор резервирует под неё место в памяти компьютера, В частности, для переменных st1, st2 резервируется память по 18 байтов для каждой.

Доступ к полям структуры осуществляется с помощью операции точка (.). При этом сначала записывается имя структурной переменной, а затем через операцию точку (.) имя поля структуры, например:

st1.name, st1.year.

Присваивать значения полям структуры можно одним из трёх способов:

st1.year = 1999; // использовать оператор присваивания

cin>>st1.name; // ввести значения полей с клавиатуры

Date st1 = {"Иванов", 1999, 11}; // инициализация при объявлении

Операции над переменными структурного типа

Чаще всего над переменными структурного типа выполняют операцию присваивания. Присваивание структур возможно, только если они имеют один и тот же тип:

Date st1, st2, st3;

st2 = st1; // все поля структуры st1 побитово копируются в st2

Недопустимо присваивание структур разных типов, даже в том случае, когда они идентичны по количеству, типу и размеру их полей.

Несмотря на возможность присваивания однотипных структурных переменных, сравнивать их нельзя:

Date st1, st2;

if(st1 == st2) оператор; // Нельзя: ошибка компиляции!

Единственный доступный способ достоверно сравнить структурные переменные – это их поэлементное сравнение:

if(st1.day == st2.day) && (st1.month == st2. month)оператор;