Объединения
Пример
Пример
Пример объявления структуры
St | ruct | date |
{ | ||
int | day; | |
int | month; | |
int | year; | |
}; |
Элементы структуры располагаются в памяти ЭВМ в том же порядке, в котором они объявляются.
При объявлении структур, их разрешается вкладывать одну в другую.
St { | ruct persone | ||
char | fam[20] | r | |
char | im[2 0]; | ||
char | ot[20]; | ||
struct date | bd; | ||
}; |
Здесь одним из элементов структуры persone является структура типа date с именем структурной переменной bd (birthday).
Инициализация структуры может осуществляться двумя способами:
• присвоение значений элементам структуры в процессе объявления переменной, относящейся к типу структуры;
• присвоение начальных значений элементам структуры с использованием функций print/n scan/.
В первом случае инициализация осуществляется по следующей форме:
struct тип структуры имя переменной= {значение элемента 1, значение элемента 2,
значение элемента п};.
Второй случай не отличается от способа инициализации объектов языка Си уже известных типов.
Для обращения к элементу структуры нужно указать не только имя самого элемента, но и имя переменной. Они разделяются точкой:
имя_переменной.имя_элемента.
Имя структурной переменной может быть указано при объявлении структуры. В этом случае оно размещается после закрывающейся фигурной скобки.
struct complex_type
{
double real;
doubl imag; } number;
В этом примере элементами структуры будут переменные number.real и number imag.
Пример 1.Объявление и инициализация структуры
/* | Объявление структуры | comput | er, */ | |||
/* | состоящей из | двух элементов | : model и memor | y.*/ | ||
St { | ruct computer | |||||
char model[30]; | ||||||
}; | int memory; | |||||
/* | Объявление и | инициализация | переменной*/ | |||
/* | Elecom типа computer. | */ | ||||
St | ruct computer | Elecom = | = {"IBM | PC | Pentium 4", | 1024}; |
Пример 2.Объявление и инициализация структуры
#include <stdio.h> | |
main () { /^Объявление структуры типа data. | |
*/ | |
struct data { int day; | |
char month[10]; |
int year; }; | |
/^Объявление структуры типа person;*/ | |
/*одним из элементов структуры person*/ | |
/^является структурная переменная bo! типа | data.*/ |
struct person { char fam[20]; | |
char im[20]; | |
char ot[20]; | |
struct data bd; }; | |
/^Объявление структурной переменной indl* | / |
/*типа person.*/ | |
struct person indl; | |
printf ("\n Укажите через Enter фамилию, | имя, |
отчество,"); | |
printf ("\n День, месяц и год рождения гражданина | |
indl\n"); | |
/* Ввод сведений о гражданине indl. */ | |
scant ("%s%s%s%d%s%d", indl.fam, indl.im, | indl.ot, |
&indl.bd.day, &indl.bd.month. &indl.bd.ye | ar) ; |
/* Вывод сведений о гражданине indl. */ | |
printf ("\n\n Сведения о гражданине indl: | \n\n"); |
printf ("Фамилия, имя, отчество: \t%s %s | %s\t \n", |
indl.fam, indl.bd.month, indl.be } | .year); |
Объединениями называют сложный тип данных, позволяющий размещать в одном и том же месте оперативной памяти данные различных типов. Естественно, что в данный момент времени в данном месте памяти может быть размещено значение только одного включенного в объединение типа.
Размер оперативной памяти, требуемый для хранения объединения, определяется размером памяти, необходимым для размещения данных того типа, который требует максимального количества байт.
Главной особенностью объединения является то, что для каждого из объявленных элементов выделяется одна и та же область памяти. Когда используется элемент меньшей длины, чем наиболее длинный элемент объединения, то этот элемент использует только часть отведенной памяти. Все элементы объединения хранятся в одной и той же области памяти, начиная с одного адреса.