char adres[300]; float summa; } STR_SOT, str_S[4];
STR_SOT.tab_number = 1;
printf(" N = %d ",STR_SOT.tab_number);
strcpy(STR_SOT.fio.surname,"Sidorov");
printf(" surname = %s ",STR_SOT.fio.surname);
STR_SOT.data.day = 25; STR_SOT.data.month = 5;
STR_SOT.data.year = 1984;
printf("\n data_birth: %2d.%2d.%4d",STR_SOT.data.day,
STR_SOT.data.month,STR_SOT.data.year);
strcpy(STR_SOT.adres,"Moskva, Vavilova, 1 - 23");
printf("\n adres: %s ",STR_SOT.adres);
str_S[1].tab_number = 2;
printf("\n N = %d ",str_S[1].tab_number);
strcpy(str_S[1].fio.surname,"Petrov");
printf(" surname = %s ",str_S[1].fio.surname);
}
Доступ к элементам динамических структур также можно осуществлять при помощи операции ‘.’. Однако с элементами структур, созданных с использованием переменной-указателя, удобнее работать при помощи операции доступа ‘->’. Выражение, реализующее доступ, имеет форму:
< указатель на структуру > -> <имя элемента>.
Операция ‘->’ – двуместная операция доступа к элементу, задаваемому правым операндом выражения. Структуру, к элементу которой осуществляется доступ, адресует левый операнд выражения.
При использовании операции -> следует придерживаться двух основных правил:
· Тип результата операции ‘->’ совпадает с типом правого операнда, т.е. того элемента структуры, на который «нацелена» стрелка.
· Операции доступа ‘->’ и ‘.’ имеют самый высокий ранг наряду с квадратными скобками ‘[ ]’ (индексированием массива) и круглыми скобками ‘( )’ (обозначением функции).
В примере 7.11 демонстрируются варианты занесения информации в некоторые поля динамической структуры.
Пример 7.11.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main (void)
{ char NM[] = "Sergej Petrovich"; int i;
struct sotrudnik
{ int tab_number; char fio[50]; char data[11];
char pol; char adres[40]; float summa; } * ptr;
ptr =( struct sotrudnik*)malloc(3*sizeof(struct sotrudnik));
(ptr+2)-> tab_number = 2;
strcpy((ptr+2)->fio,"Sidorov");
(ptr+2)->fio[7] = ' ';
for (i=0; NM[i]; i++) (ptr+2)->fio[8 + i] = NM[i];
(ptr+2)->fio[8 + i] = '\0';
(ptr+2)->summa = 20000.8;
printf("\n N = %d ",(ptr+2)-> tab_number);
printf(" fio: %s ",(ptr+2)->fio);
printf("\n zarplata: %f ",(ptr+2)->summa);
}
В случае, когда элементом структур в динамическом массиве является структура, в выражении, соответствующем операции доступа к такому элементу, знак ‘->’ можно использовать только перед переменной-указателем.
Данные, объединенные в одной структуре, могут занимать несколько участков памяти. В данном случае в участке, выделенном для такой структуры, в соответствующих полях, должны храниться начальные адреса тех байт, где размещаются данные.
В примере 7.12 структура типа structpersonиспользуется для хранения следующих данных о сотруднике: фамилия, количество отработанных месяцев, зарплата за каждый месяц. Первое поле структуры предназначено для хранения адреса символьного массива – фамилии, третье – адреса массива переменных типа float, значение i-ого элемента этого массива – зарплата за i-ый месяц работы. Во втором поле - количество месяцев.
Пример 7.12.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main (void)
{ struct person
{char * str; int n; float * wages; } *pp; int i;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.