Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по С Живицкая (Мет пособие).doc
Скачиваний:
112
Добавлен:
15.06.2014
Размер:
2.11 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 * /

floatb;

} y;

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

у.а [3] [7]

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

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

struct emp {

struct addr address;

floatwage;

}

worker;

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

worker wage = 35 000 00;

worker address. Zip = 98765;

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

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

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

structdate{intd,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