Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_С++_последная.doc
Скачиваний:
40
Добавлен:
07.05.2019
Размер:
876.54 Кб
Скачать

5.2.4. Указатели на структурный объект

Описание struct DATE *PD; говорит, что PD является указателем структуры типа DATE.

Запись PD->YEAR означает обращение к содержимому поля YEAR структурного объекта, адрес которого хранится в PD.

Так как PD указывает на структуру, то к члену YEAR можно обратиться и следующим образом (*PD).YEAR, но указатели структур используются настолько часто, что запись “->” оказывается удобным сокращением.

Круглые скобки в (*PD).YEAR необходимы, потому что операция указания члена старше, чем “*” . Обе операции, “->” и “.”, ассоциируются слева направо, так что конструкции слева и справа эквивалентны P->Q->MEMB (P->Q)->MEMB EMP.BIRTHDATE.MONTH (EMP.BIRTHDATE).MONTH.

Можно выделить основные моменты структурного типа:

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

- после описания структурного типа ставится точка с запятой;

- элементы структуры называются полями. Поля могут быть любого основного типа, массивом, указателем, объединением или структурой;

- для обращения к полю используется операция выбора: «точка» при обращении через имя структуры и “->” при обращении через указатель;

- структуры одного типа можно присваивать друг другу;

- ввод/вывод структур выполняется поэлементно;

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

Контрольные вопросы

1. Понятие и определение функции.

2. Формальные и фактические параметры функции.

3. Рекурсивные вызовы и передача параметров функции.

4. Пользовательские типы данных.

5. Указатели на структурный объект

Лекция 6.

Работа с динамической памятью. Динамические структуры данных

6.1. Работа с динамической памятью

6.1.1. Статическое и динамическое распределение памяти

Традиционно принято выделять статическое и динамическое распределения памяти.

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

float b[100];

char buf[255];

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

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

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

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