Доступ к отдельным полям структуры осуществляется с помощью операции “.” (“точка”). При этом сначала записывается имя структурной переменной (но не типа!), а затем через “точку” — имя поля структуры. Например, ввод массива arr выполняется следующим образом: for (int i=0; i<12; i++) cin>>S1.arr[i]; а оператор gets(S1.name); вводит поле с наименованием. Оператор S1.Par=12.3; полю Par структурной переменной S1 присваивает значение 12.3.
Присваивание структур является одним из преимуществ рассматриваемого типа. Информация, содержащаяся в одной структуре, может быть присвоена другой структуре с помощью одиночного оператора присваивания. Например, оператор S2=S1; копирует все поля (строковую переменную, 12 элементов массива и вещественную переменную) переменной S1 в переменную S2.
При объявлении структуры можно инициализировать её элементы. Например tPoint P2={1.1, 2.2, 0.3};
1.3. Вложенные структуры и статические массивы в структурах
В качестве поля структуры можно использовать переменную другого ранее определённого структурного типа. В таком случае говорят о вложенных структурах. Например, сначала определим структуру для координат одной точки плоскости:
|
|
struct tpoint2 { float x; float y; };
В другой структуре определим координаты центра и радиус окружности:
struct tcircle { tpoint2 senter; float rad;
} MyCircle;
Тогда для ввода координат центра окружности надо выполнить следующий оператор:
cin >> MyCircle.senter.x>> MyCircle.senter.y;
То есть доступ к полям вложенной структуры осуществляется с помощью нескольких операций “точка”.
Полем структуры может быть одномерный или двумерный массивы фиксированной размерности. Пример объявления и доступ к такому полю показан в структуре tstr1(см. 1.1).
Статический массив структур
Для объявления массива структур желательно сначала определить структурный тип, а затем объявляем массив переменных данного типа. Например, массив из 10 точек структуры типа tpoint2(см. 1.3) объявляем следующим образом:
const n=10; tpoint2 ArrPoints[n];
Такой массив в памяти занимает (4+4)*n= 80 байт. Доступ к полям каждого элемента массива, например, ввод координат точек, осуществляется так:
for (int k=0; k<10; k++)
cin>>ArrPoints [k].x>> ArrPoints [k].y;
Для массива, объявленного
const n=10; tstr1 AS[n];,
доступ к его элементам и полям осуществляется, например, следующим образом:
a) AS[i].Par=1.2; — полю Par i -го элемента массива структур присваивается значение 1.2 (i=0,1,…,n-1);
b) int Sum=0; for (int j=0; j<12; j++) Sum+=AS[0].arr[j]; — суммирование всех 12-ти элементов массива arr (поля структуры) 0-го элемента массива структур AS