Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AllCandC++Lectures.docx
Скачиваний:
2
Добавлен:
25.09.2019
Размер:
52.56 Кб
Скачать

Изменение размеров выделенного блока

В некоторых случаях, уже после того как динамически был выделен блок памяти необходимо либо увеличить либо уменьшить размер этого блока.

Void* realloc(void* llock, size_t newsize);(используется функция realloc)

Newsize - новый размер. Функция возвращает указатель на выделенный блок, или NULL в случае неудачи.

Размер нового блока может быть больше или меньше ранее выделенного. Важно, что данные из старого блока будут скопированы в новый блок.

Освобождение блока памяти:

Void free(void* block); block - адрес ранее выделенного блока. Освобождение памяти означает, что эта память далее может использоваться для других целей.

Замечание. В библиотеки borland c++ есть нестандартная функция, которая называется coreleft. Эта функция возвращает размер свободной памяти незанятой стеком и кучей.

Агрегатные типы данных

Базовые типы языка C позволяют представлять простые неструктурированные данные. В C имеется механизм для представления массивов, который позволяет рассматривать группу однотипных данных как единый объект (агрегат). Так как массив играет очень важную роль, то C обеспечивает для них некоторую функциональность. Например: обращение к элементу по индексу. Но существует много задач, в которых было бы удобно агрегировать в единый объект данные разных типов. Например, фамилию и год рождения человека желательно рассматривать неразрывно. Количество комбинаций типов данных для таких агрегатов бесконечно. Поэтому задача их создания полностью ложится на программиста. В C имеется несколько агрегатных типов: массивы, структуры, объединения, битовые поля.

Объявление структур

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

struct student {

char name[50];

int born;

}; - определение структуры.

Отдельные элементы структуры называются полями. В данном случае у нас два поля.

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

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

Методы обращения к полям структуры: передача структур в функции и в качестве возвращаемого значения, создание синонимов для имен структурных типов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]