СТРУКТУРЫ
Структура-это
совокупность логически связанных переменных,
возможно, различных типов, сгруппированных под
одним именем для удобства дальнейшей обработки.
Традиционным примером
структуры служит учетная карточка работающего:
служащий предприятия описывается набором
атрибутов, таких, как табельный номер, имя, дата
рождения, пол, адресс, зарплата. В свою очередь,
некоторые из этих атрибутов сами могут оказаться
структурами. Таковы, например: имя, дата рождения,
адресс, имеющие несколько компонент.
Элементы структуры обозначаются
идентификаторами, с которыми можно связываьб
описатели типов. В результате структуру можно
рассматривать как единое целое и осуществлять
при необходимости выбор составляющих ее
элементов.
Для образования структуры
присваиваются имена каждому из включаемых
элементов и структуре в целом. Затем посредством
спечиального описания задают иерархию, порядок
следования и типы элементов, включаемых в
структуру. Так, для рассмотренного выще примера с
анкетой служащего можно выбрать имена:
tab_nom - табельный номер;
fio - фамилия, имя, отчество;
pol - пол;
summa - зарплата; |
: Все эти понятия можно
объединить в такую, например, структуру:
struct anketa
{
int tab_nom;
char fio[30];
char data[10];
int pol;
char adres[40];
float summa;
}; |
Эта запись называется описанием
структуры. Она начинается с ключевого слова struct
и состоит из заключенного в фигурные скобки
списка описаний. За словом struct может
следовать необязательное имя, которое
называется именем типа структуры (иногда
его называют тэгом или ярлыком структуры). Этот
ярлык именует структуру и в дальнейшем может
использоваться для сокращения подробного
описания. Переменные, упоминающиеся в записи,
называются элементами. Следом за правой
фигурной скобкой, заканчивающей список
элементов, может следовать список переменных,
так же, как и в случае базисных типов. Вот почему в
приведенном выше описании структуры после
закрывающей фигурной скобки стоит точка с
запятой; она завершает пустой список. Описание struct
{....} p1, p2, p3; синтаксически аналогично int
p1, p2, p3; в том смысле, что каждый из операторов
описывает p1, p2, p3 как переменные
соответствующего типа и приводит к выделению для
них памяти. Описание же структуры без
последующего списка переменных не выделяет
никакой памяти. Оно только определяет форму
сируктуры и действует как шаблон. Если такое
описание снабжено ярлыком (именем типа), то его
можно позже использовать при определении
фактических экземпляров структуры. Например,
используя указание выше описане anketa, можно
с помощью строки
struct anketa a0, a1 ,a2;
описать структурные переменные a0, a1,
a2, каждая из которых строится по шаблону,
введенному структурой anketa. Любая
переменная a0, a1, a2 содержит в строго
определенном порядке элементы tab_nom, fio, data, pol,
adres, summa. Все переменные , как и все остальные
переменные языкаЮ получают места в памяти.
Внешние и статические структуры можно
инициировать, помещая следом за определением
список начальных значений элементов:
struct anketa a0={ 1024, "Макагон В.М",
"10.01.1943",0 , "Одесса, Варневская, 23/99", 175.00};
Каждой структурной переменной в нашем
случае могут быть присвоены шесть значений,
имеющих соответствующие базовые типы. Доступ к
этим значениям осуществляется с помощью
следующей конструкции:
имя_структуры.имя_елемента
Операция выделения элемента .
(точка) связывает имя структуры в имя
элемента. Например, мы можем с учетом введенных
обозначений написать:
a0.data="10.01.43"; a1.summa=0.0;
if(a2.pol==1) man=man+1; |
Действия над
структурами, в общем, ограничены. Все, что можно
делать со структурой, - это взять ее адресс с
помощью операции & и обращаться к ее
элементам, как показано выше. Записи нельзя
копировать или присваивать как единое целое; их
нельзя передавать в функцию или получить оттуда
целиком. Однако, к указателям на структуры это
замечание не относится.
На практике структурные
переменные обычно появляются в виде массива или
списка. Нетрудно видеть, что наши три переменные a0,
a1, a2 будет проще использовать, если их
объединить в массив, сосотоящий из элементов
типа struct anketa. Применив в программе
описание
struct anketa a[3];
мы можем употреблять в ней,
например, такие операторы:
a[0].fio ="Макагон В.М";
if(a[i].tab_nom>a[i+1].tab_nom)
{
p=a[i].tab_nom;
a[i].tab_nom=a[i+1].tab_nom;
a[i+1].tab_nom=p;
} |
< Дальше >
|