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

Для обращения к элементам, входящим в состав конкретной структуры используются уточненные имена:

<имя структуры> . <имя элемента структуры>

Уточненные имена формируются с именем конкретной структуры, а не с именем структурного типа!

Например, для определенной выше структуры A оператор

A.st=450.5

присвоит переменной st значение 450,5.

Для ввода значения переменной fio структуры A можно, например, использовать оператор:

cin.getline (A.fio, 20);

Можно вывести в стандартный выходной поток значения элементов структуры.

Например, вывод в столбик полей fio каждой структуры массива grup:

for (int i=0; i< 25; i++) cout<<’\n’<<grup[i].fio;

Структурный тип обладает всеми правами имен типов и, следовательно, можно объявлять, как было уже сделано выше, указатели на структуры:

<имя структурного типа> * <указатель на структуру>;

Значением указателя на структуру может быть адрес структуры того же типа, то есть номер байта, начиная с которого структура размещена в оперативной памяти. Структурный тип задает размеры структуры и тем самым определяет, на какую величину (на сколько байт) изменится значение указателя на структуру, если к нему прибавить 1 (или из него вычесть 1), или при операциях инкремента (декремента).

Например, можно определить указатель на структуру типа men с инициализацией (тип men и структуры men1, men2, men3 объявлены выше):

men*ptr = & men2;

Указатель ptr инициализирован адресом структуры men2.

После объявления указателя, инициализированного адресом структуры men2, появляется еще два способа обращения к элементам структуры men2:

1) используя операцию ‘->’ доступа к элементам структуры, с которой в этот момент связан указатель:

имя указателя -> имя элемента структуры

2) используя операцию разыменования указателя и формирования уточненного имени:

(*Имя указателя). Имя элемента структуры

Таким образом, три следующих обращения эквивалентны:

men2.age

(*ptr).age

ptr->age

Если применить к указателю, например, операцию инкремента ( ptr++), значением указателя будет адрес другой структуры с большим адресом. Так, если структуры men1, men2, men3 являются локальными переменными, то ptr получит адрес структуры men1, так как сегмент стека заполняется от больших адресов к меньшим адресам. Если структуры являются внешними, то после операции инкремента ptr будет обладать адресом структуры men3, так как сегмент данных заполняется от меньших адресов к большим адресам. И теперь посредством указателя ptr можно будет обращаться к элементам другой структуры, “связанной” с этим указателем.

3.2.2 Инициализация структур

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

После объявления структуры ставится знак ‘=’, за которым следует заключенный в фигурные скобки список значений для элементов структуры. Значения элементов перечисляют через запятую. Элементы инициализируются по правилам, определенным их типом.

Объявим с инициализацией структуру one типа student (см. выше) и структуру без объявления имени типа:

student one =

{“Петров”, 4123, {4,3,2}, (one.maks [0]+one.maks [1]+one.maks [2])/3.0};

struct { char* FIO ; int nz ; float st ; } A = { “ Иванов”, 1234, 280.5 };

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

Например,

men Mas [3] = { {“Иванов”,30}, {“Петров”, 40}, {“Сидоров”, 70}};