Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1.docx
Скачиваний:
11
Добавлен:
26.09.2019
Размер:
364.88 Кб
Скачать

Объявление переменных, реализующих структуру.

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

struct ИмяСтруктуры ИмяПеременной;

Например:

struct MyStruct

{

int item1;

int item2;

};

struct MyStruct var1;

Таким образом, переменная с типом структура может быть объявлена в любом месте программы.

Доступ к элементам структуры.

Для доступа к элементам структуры существуют две основных операции: . и ->

Операция <.> обеспечивает доступ к какому либо элементу структуры при известной переменной, реализующей структуру. Например, если мы имеем переменную

struct MyStruct var1;

то доступ к её полю item1 будет осуществляться с помощью оператора <.> :

i=var1.item1;

Операция -> используется для доступа к элементу структуры при заданном указателе на структуру.

Например, если в программе имеется некоторый указатель на структуру MyStruct:

struct MyStruct * p1;

то получить значение её элемента item1 можно с помощью следующей записи:

i=var1->item1;

Заметим, что эта запись эквивалентна следующей записи с использованием операции<.> и операции косвенной адресации <*>:

i=(*var1).item1;

Существуют также 2 дополнительных операции .* и ->*, отвечающие за получение значения переменной по указателю, записанному в структуре, но эти операции легко могут быть переписаны с помощью операции косвенной адресации *, причём такая запись улучшает читаемость программы:

var1.*pItem1 эквивалентно *(var1.pItem1)

p1->*pItem1 эквивалентно *(p1->pItem1)

Объединение (union).

Объединение (union) является производным (сложным) типом данных, представляющим собой набор переменных, хранящихся в памяти в одних и тех же ячейках. Синтаксис определения структуры выглядит следующим образом:

union ИмяОбъединения

{

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

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

}ИмяПеременной;

где ИмяОбъединения – некоторый идентификатор объединения,

ИмяПеременной – имя создаваемой переменной.

Внутри фигурных скобок находится список переменных – элементов (членов) структуры, разделённых точкой с запятой. Аналогично синтаксису определения перечисления, ИмяОбъединения и ИмяПеременной могут быть опущены.

Пример:

union un1

{

int i;

char str[5];

double j;

}var1;

В результате выполнения такого определения будет создано объединенение с идентификатором un1 и переменная var1 типа объединение st1. Её элементы будут размещены в памяти следующим образом:

Адрес начала переменной var1( = &var1)

B0

B1

B2

B3

B4

B5

B6

B7

int i;

char str[5];

double j;

При записи какого-либо значения в одно из полей объединения, значения остальных его элементов также изменятся, т.к. значения этих переменных хранятся в одной и той же области памяти.

Доступ к элементам объединения и работа с ними в программе осуществляется аналогично работе с элементами структуры. Побитовое описание элементов объединения также осуществляется аналогично работе со структурами.