Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование).docx
Скачиваний:
32
Добавлен:
28.10.2018
Размер:
52.68 Кб
Скачать

1) Структурные типы данных и переменные этих типов .-

Структурный тип – это тип созданный на основе компонентов базовых типов или ранее созданных структурных типов . При создании структурного типа его имя пишется после struct , а после имени в {} пишется список компонентов . Имена этих компонентов могут совпадать с именами обычных переменных , так как их можно различать по контексту . Имя структурного типа может и не задаваться при описании нового структурного типа . Описание структурного типа не резервирует память , память выделяется только при описании какой-либо переменной структурного типа . Доступ к отдельным компонентам структурного типа осуществляется при помощи конструкции имя переменной _ компонент.

Struct Kristina {

Int a;

Float b;

};

Struct Kristina obsch

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

Struct point a;

&a …. A=b; b…

B=a; a….

2) Передача структурных переменных функциям .-

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

Main ()

{struct vect screen;

Struct point middle;

Struct point makepoint (int,int);

Screen.pt1=makepoint(0,0);

Screen.pt2=makepoint(xMax,yMax);

Middle=makepoint((screen.pt1.x+screen.pt2.x);screen.pt1.y+screen.pt2.y)/2);

}

Struct point makepoint (int x , int y)

{struct point tmp;

Tmp.x=x;

Tmp.y=y;

Return tmp;}

Struct point addpoint (struct point p1,struct point p2)

{p1.x+=p2.x;

P1.y+=p2.y;

Return p1;}

Как правило при передачи структурных переменных функции используется передача по адресу . Наличие скобок необходима из-за того , что приоритет оператора «.» выше приоритета оператора «*» , а запись без () неверна .

3)Указатели на структурные переменные .

При работе с указателем на переменную со структурным типом используют операцию «->». Операторы доступа к компонентам структурных переменных вместе с операторами вызова функции и обращение к элементам массивов занимают самое высокое положение в таблице приоритетов и выполняются раньше других операторов.

Struct {int len;

Char str;

}*p;

++p->len

В этом примере на единицу увеличится значение компонента len , а не указателя *p.

4) Массивы структурных переменных .

В Си существует возможность описывать массивы переменных того или иного структурного типа . Для работы с такими массивами используют те же механизмы , что и при работе с обычными массивами.

Struct key

{chfr *word;

Int count;

}keytab[100];

For (i=0;I<=100;i++)

Massiv[i].count++

Struct key *p;

For (p=keytab;p<keytab+99;p++)

If (p->count>0)

Printf(“%d %s\n”,p->count,p->word);

Используя массивы структурных переменных средствами языка Си++ можно решать ряд задач обработки таблиц , то есть выполнять часть функций систем управления БД.

5)Объединения (для экономии памяти)

Объединение – переменная , которая может в разные моменты времени содержать в себе объекты различных типов и размеров . Размер памяти таков , что хватило места под самый большой компонент объединения . Синтаксис доступа к компонентам объединения такой же , как и при работе со структурными .

Union {

Int klasha;

Float glasha;

Long double sasha;

}kreslo;

В случае рассогласования типов результат непредсказуем . Объединения могут являться компонентами структурных типов и наоборот объединение может включать в свой состав в качестве компонента структурную переменную .