Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции по проге / 15_Динамические структуры данных

.pdf
Скачиваний:
33
Добавлен:
14.03.2016
Размер:
246.85 Кб
Скачать

Выделение памяти

Для определения того, сколько байт необходимо для хранения значения данного типа можно воспользоваться операцией sizeof:

sizeof(<тип или переменная>)

Для того, чтобы получить указатель на нужный тип необходимо воспользоваться операцией приведения типов: (<тип>)

11

Задание

Создать динамический массив arr дробных чисел одинарной точности размером N, определяемый пользователем:

1)

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

 

ной точности arr

2)

Запросить у пользователя кол-во элементов N

 

массива arr

3)

Выделить память под динамический массив arr

12

 

Выделение памяти под динамический массив

float *arr; int

N;

scanf( "%d", &N );

arr = (float *)

malloc(N * sizeof(float));

5

4

3

2

1

1 — используем операцию sizeof для получения размера значения типа float в байтах

2 — вычисляем кол-во байт, занимаемых массивом

3 — вызываем функцию malloc для выделения памяти под определенный размер

4 — приводим тип результата функции malloc к указателю на дробное число одинарной точности

13 5 — присваиваем полученный указатель переменной arr

Выделение памяти под динамический массив

int N;

//

размер массива

float arr;

/*

указатель на первый элемент

 

 

динамического массива */

//Запрашиваем размер массива scanf("%d", &N);

//Выделяем память под массив

arr = (float *)malloc(N * sizeof(float));

// или

arr = (float *)calloc(N, sizeof(float));

14

Обращение к элементам динамического массива

Обращение к элементам динамического массива выполняется так же, как и к элементам статического (обычного) массива, поскольку в динамическом массиве:

имеется указатель на первый элемент массива;

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

15

Задание

Присвоить первому элементу динамического массива arr значение 15, используя операцию []

Ввести с клавиатуры вещественное число в последний элемент динамического массива arr. Операции * и [] не использовать

Поменять местами первый и последний элементы массива, используя операцию *

16

Обращение к элементам динамического массива

//Присвоение первому элементу массива arr[0] = 15;

//Функция scanf ожидает указатель

scanf( "%f", arr + N – 1 ); // последний элемент

// Меняем местами элементы массива float tmp = *arr;

*arr = *(arr + N - 1); *(arr + N - 1) = tmp;

17

Освобождение памяти, занимаемой динамическим массивом

Память, выделенная под динамический массив, доступна в течение жизни всей программы

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

Если динамический массив становиться ненужным, то его следует уничтожить

18

Освобождение памяти, занимаемой динамическим массивом

Для освобождения памяти, занимаемой массивом, используется библиотечная функция

void free ( void *memblock )

которой передается адрес начала блока освобождаемой памяти

 

dynamicArray

 

 

dynamicArray

 

 

 

 

19

10 22

1

23

4

 

 

 

 

Задание

Освободить память, занимаемую динамическим массивом arr

20