Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Структуры






Не все совокупности данных, используемые в реальной жизни, состоят из однотипных элементов, как массивы. Пример – различные ведомости и таблицы, строки которых содержат числовые и текстовые данные. Составной тип данных, предназначенный для манипулирования подобными данными, называется структурой. Структура языка С аналогична " записи" (record) языка Pascal.

Для работы со структурой необходимо описать ее состав, для чего следует определить шаблон структуры, используя, например, формат:

struct имя {

тип_1 элемент_1;

тип_2 элемент_2;

...

тип_n элемент_N;

};

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

Пример:

struct Worker { // описание нового типа Worker

int code;

char fio[30];

int age;

double salary;

}; // описание заканчивается точкой с запятой

Идентификаторы в списке объявлений элементов должны быть уни­кальны. Однако они могут совпадать с идентификаторами элементов других структур и с идентификаторами обычных переменных.

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

struct Worker worker; // объявление переменной worker типа Worker

В языке С при объявлении переменной структурного типа наличие ключевого сло­ва struct являлось обязательным. В языке С++ это не так, достаточно имени шаблона структуры:

Worker worker;

В этих в объявлениях struct Worker (в C++ – Worker) играет ту же роль, что и, например, int или float в объявлениях обычных переменных. Переменная объявленного структурного типа содержит указанную в описании шаблона последовательность величин заданного типа.

При объявлении переменной структурного типа компилятор выделяет память для каждого элемента структуры. Элементы структуры размещаются в памяти последовательно в том же по­рядке, в котором они объявляются. Па­мять каждому элементу выделяется на границе, соответствующей его типу. Поэтому в памяти могут появиться неиспользуемые неименованные участки между соседними элементами. Вследствие этого размер пе­ременной структурного типа не всегда равен сумме размеров ее эле­ментов. Для определения действительного размера структурной пере­менной следует использовать операцию sizeof.

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

struct {

int code;

char fio[30];

int age;

double salary;

} worker = { 3124, " Ivanoff", 31, 3400.55};

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

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

int iAge = worker.age;

worker.code = 3125;

strcpy (worker.fio, " Sidoroff");

cout < < worker.salary;

Для переменных одного и того же структурного типа определена операция при­сваивания, при этом происходит поэлементное копирование. Так, для

Worker worker2;

worker2 = worker;

элементы worker2 получат значения соответствующих элементов worker.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.