Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебное пособие ОАиП.doc
Скачиваний:
11
Добавлен:
25.04.2019
Размер:
2.63 Mб
Скачать

Структуры

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

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

Примером использования структуры может служить, например, строка платежной ведомости. В ней должна содержаться информация о служащем: ФИО, адрес, табельный номер, зарплата и т.д.

Как и другие объекты в С(С++) (переменные, массивы и т.д.) структуры должны быть определены. Для этого создается (объявляется) некоторый тип являющийся структурой, а затем по мере необходимости определяются переменные этого типа (типа структура).

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

struct [имя типа структуры]

{ тип элемента 1 имя элемента 1;

. . . . . . . . . . . . .

тип элемента n имя элемента n;

}[имя структурной переменной];

Имена структур должны быть уникальными в пределах их области видимости (действия), для того, чтобы компилятор мог различать эти структуры.

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

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

Определение переменной имеющей тип структура аналогично определению переменных рассмотренных ранее типов, например:

struct inform

{ char fam[30]; // фалилия

int god; // год рождения

float stag; // стаж работы

};

inform rab; // определение переменной rab типа struct inform

С синтаксической точки зрения эта запись аналогична записи вида:

char fam[30]; // фалилия

int god; // год рождения

float stag; // стаж работы

В обоих случаях компилятор выделит под каждую переменную количество байт памяти, согласно определения этой переменной (элемента структуры).

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

struct book

{ char title [20];

char autor [30];

int page;

} bk1, bk2, *ptr_bk=&bk1;

В этом случае если имя структуры book более ни где не используется, то оно может быть опущено.