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

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

Доступ к отдельным членам структуры осуществляется с использованием оператора точка ".".

Пример присвоения члену Zip структурной переменной addr_info

значение 12345

addr_info. Zip = 1 2 3 4 5 ;

За именем структурной переменной следует ".",а за ней имя членов, к которому происходит обращение. Ко всем членам структуры доступ осуществляется аналогично.

Формат доступов

Имя _ структуры. Имя _ члена

Для вывода содержимого поля Zip переменной addr_info на экран необходимо записать:

printf (" % ld," addr_info. Zip);

Пример посимвольного вывода содержимого addr_info. name

int t;

for (t=o; addr_info. name [t]; ++t)

putchar ( addr_info. name [t] );

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

Информация, содержащаяся в одной структуре, может быть присвоена другой структуре того же типа с помощью одиночного оператора присваивания, т.е. не нужно присваивать значение каждого числа по отдельности.

Пример присваивания структур:

# include < stdio.h >

main ( )

{ struct {

int a;

int b;

} x, y;

x. a = 10;

x. b = 20;

y = x; / * присваивание одной структуры другой * /;

printf ( " содержимое y : % "d % d", y. a, y. b );

}

После присваивания y. aиy. b будут содержать значение 10 и 20 соответственно.

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

Наиболее часто массивы используются в виде мотивов структур. Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Например, для объявления элементного массива структур типа addr определенного нами ранее (смотри выше) следует написать

struct addr addr _ info [100];

В результате получаем набор из 100 переменных устроенных, как объявлено в типе структуры addr для доступа к отдельным структурам массива addr_info следует проиндексировать имя массива.

Пример вывода содержимого поля Zip третьей структуры

printf ( " % ld ", addr_info [2]. Zip );

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

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

Член структуры может быть как простым, так и составным. Простой член - это обычный базовый тип данных. Например, целочисленный или символьный. Символьный массив, используемый в addr_info, типичный пример.

Пример:

struct x {

int a [10] [10]; /* массив целых 10х10 * /

float b;

}с;

Для обращения к числу с индексами 3, 7 массива а структуры у следует написать

у.а [3] [7]

Когда структура является членом другой структуры, то она называется вложенной структурой.

Пример вложение структуры addr в структуру emp

struct emp {

struct addr address;

float wage;

}

worker;

Здесь структура emp содержит два члена: первый - структура addr, содержащие адреса служащих; другой - wage, содержащий заработную плату служащих. Следующий элемент программы присваивает 35000 $ элементу wage структуры worker и 98765 полю Zip структуры address.

worker wage = 35 000 00;

worker address. Zip = 98765;

В данном примере обращение к членам структуры происходит снаружи во внутрь, слева на право.

Унарная операция & позволяет взять адрес структуры.

Предположим, что задано объявление

struct date { int d, m, y, } day;

здесь day - это структура типа date, включающая три элемента d,m,y.

Другое объявление

struct date * db;

устанавливает тот факт, что db - это указатель на структуру типа date. Запишем выражение

db = & day;

теперь для выбора элементов d, m, y, структуры необходимо использовать конструкции (* db). d, (*db).m, (*db). y

Действительно db - это адрес структуры, а * db - это сама структура.

Круглые скобки необходимы, так как точка имеет более высокий приоритет по сравнению с *.

Для аналогичных целей в C предусмотрена специальная операция ──>, она тоже выбирает элемент структуры и позволяет представить рассмотренные выше конструкции в более простом виде.

db ─> d, db ─> m, db ─> y