Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИИ Программирование и основы алгоритмизации...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.5 Mб
Скачать

Форматы определения объектов структурных типов

1) имя_структурного_типа список_объектов;

2) struct имя_структурного_типа

{определения элементов} список_объектов;

3) struct {определения элементов} список_объектов;

Память, выделяемая под объекты структурного типа

struct st{ типы int float ch

int i; |_|_|_|_|_|_|_|

float f; байты 2 4 1

char ch; объекты i f ch

} s;

В общем случае между полями структуры имеются промежутки. Поэтому объем памяти, выделяемой под объекты (переменные) структурного типа, определяют следующим образом:

sizeof(имя_структурного_типа); //можно без скобок

sizeof(имя_объекта_структурного_типа); //можно без скобок

Операции над объектами структурного типа

1) инициализация: complex z = {-3.1, 5.2};

2) присваивание однотипных структур:

complex z, p;

………….

z=p;

…….

3) операции сравнения – только поэлементно.

Доступ к элементам объектов структурного типа

Используются уточненные имена.

1) С использованием операции «точка»: имя_объекта.имя_элемента. Например: goods tea; tea.price = ……;

2) С использованием операции «стрелка»:

указатель_на_объект->имя_элемента.

Например: goods* tovar; tovar->name, или (*tovar).name.

Структуры, массивы и указатели

1)В качестве элементов структур можно использовать массивы:

struct {

double mas;

float coord[3];

} point = {12.3, {-1.0, 2.2, -4.3}};

Доступ к координате x: point.coord[o].

2)В качестве элементов структур можно использовать ранее определенные структуры:

struct date{int d, m, y;}

struct goods{

…………

date data;

} tea;

Доступ – по уточненному имени – tea.data.y;

3)Данные могут быть представлены в виде массива структур:

complex set[80] = {{., .},{. , .}, ………., {., .}};//массив из 80 структур

4)Указатели на структуры, ссылки, массивы:

struct {……} point, &pp=point, *pptr=&point, point1[30];

Можно pptr=point1; Тогда с помощью pptr++, pptr-- можно перемещаться по массиву структур с помощью указателя. Для перемещения по массиву структур можно также использовать индексирование указателя: pptr[i].

5)Компонентами (элементами) структур могут быть данные любых ранее определенных типов, за исключением структур, здесь определяемых. Но в качестве элемента структуры может быть указатель на определяемый структурный тип:

struct stud{

int nz;

char f[10];

stud* uk; };

Объединения (смеси)

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

union sm{ Размещение смеси в ОП

int i; |__|__|__|__|

float f; |ch|

char ch; | int |

} u; | f |

Доступ: u.f.

Объединения часто используют в составе структур:

struct st {

char ch[5];

int i;

union {

int a;

float b;

char c[7];

} uv;

} dat;

Доступ: dat.uv.c[2]. Допустимые операции – как над структурами.

Тип-перечисление

Есть две формы объявления переменных типа-перечисление.

1)enum {список_значений типа} имя_переменной;

2) enum имя_типа_перечисление {список_значений типа};

имя_типа_перечисление имя_переменной;

Примеры.

1)enum {kr, gel, zel} svetofor;

2)enum typsvet { kr, gel, zel};

typesvet svetofor;

Последовательность перечисленных констант автоматически нумеруется от 0 до 255. Но можно:

enum typsvet { kr=1, gel, zel}; //будет gel=2, zel=3

enum typsvet { kr=5, gel=10, zel=20};

Допустимые операции над данными типа-перечисление.

1)Переменной типа-перечисление можно присвоить значение константы того же типа: svetofor = gel;

2)Разрешены операции сравнения и операции проверки на равенство и неравенство.

3)Можно использовать в качестве меток оператора switch.

4)Можно использовать в качестве индексов элементов массива.

5)Можно использовать в качестве значений целого типа.