char pol; char adres[40]; float summa;};
Второй способ typedef struct
{ int tab_number; char fio[50]; char data[10];
char pol; char adres[40]; float summa; } sotrudnik_2 ;
Замечание. Эти два способа различаются только тем, что в первом случае создается тип данных – struct sotrudnik_1, а во втором – sotrudnik_2. Шаблоны обеих структур одинаковы, т.е. одинаковыми являются соответствующие компоненты обеих структур (имена компонент, их типы и общее количество).
Конкретные экземпляры структур создаются (т.е. им присваиваются имена и для них выделяются участки памяти) в соответствии с обычным оператором объявления:
< спецификации типа > <идентификатор>; –
где < спецификации типа > – тип данных “структура”, созданный при помощи шаблона, <идентификатор> – имя конкретного экземпляра-структуры.
В примере 7.7 объявляются экземпляры структур с типами, созданными в примере 7.6.
Пример 7.7.
structsotrudnik_1 str1;
sotrudnik_2 str_1;
structsotrudnik_1 str[30];
sotrudnik_2 st_r[30];
В соответствии с каждым из первых двух операторов объявляются структуры с именами strи str_1, для каждой из них выделяется участок памяти размером (sizeof(int) + 50* sizeof(char) + 10* sizeof(char) + sizeof(char) + 40* sizeof(char) + sizeof(float) ) байт. В соответствии с каждым из вторых двух операторов объявляются массивы из 30 структур, для каждого массива выделяется участок памяти размером 30*(sizeof(int) + 50* sizeof(char) + 10* sizeof(char) + sizeof(char) + 40* sizeof(char) + sizeof(float) ) байт.
Элементом структуры может быть любая структура. В частности, для структуры, предназначенной для хранения информации о сотруднике, поле fio (как и поля data и adres) может само быть структурой. Пример 7.8 демонстрирует такую возможность.
Пример 7.8.
typedefstruct
{ charsurname[25]; charname[15];
charpatronymic[20];} fio_sotrud;
typedef struct
{int day; int month; int year;} data_birth;
struct adres_sotrud
{ char town[30]; char street[40]; int house;
int building; int flat;};
struct sotrudnik_3
{ int tab_number;
fio_sotrud fio;
data_birth data;
char pol;
struct adres_sotrud adres;
float summa;
} STR_SOT;
В соответствии с оператором объявления структуры STR_SOT выделяется участок памяти размером (sizeof(int) + sizeof(fio_sotrud)+ sizeof(data_birth)+ sizeof(char) + sizeof(struct adres_sotrud) + sizeof(float) ) байт.
Для работы с динамическим массивом структур необходимо объявить переменную-указатель на структуру, значением которой впоследствии будет начальный адрес выделенного участка памяти. Пример 7.9 демонстрирует такую возможность.
Пример 7.9.
structsotrudnik_3* ptr;
ptr =( structsotrudnik_3*)malloc(3*sizeof(structsotrudnik_3));
После вызова функции malloc() выделяется участок памяти размером 3* sizeof(structsotrudnik_3), начальный адрес данного участка – значение переменной ptr.
7.5. ДОСТУП К ЭЛЕМЕНТАМ СТРУКТУР
Доступ к элементам статических структур, созданных в примерах 7.7 и 7.8, осуществляется при помощи операции ‘.’. Выражение, реализующее доступ, имеет форму:
< имя структуры >.<имя элемента>. Причем перед ‘.’ указывается не тип данных – структура, а имя конкретной структуры, для которой уже выделен участок памяти.
В примере 7.10 демонстрируются варианты доступа (занесения и извлечения информации) к некоторым элементам структур.
Пример 7.10.
#include <stdio.h>
#include <string.h>
void main (void)
{ typedef struct
{ char surname[25];
char name[15];
char patronymic[20]; } fio_sotrud;
typedef struct
{ int day; int month; int year; } data_birth;
struct sotrudnik_3
{ int tab_number; fio_sotrud fio;
data_birth data; char pol;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.