Динамический массив C: основы использования и преимущества
Динамический массив в языке С – это массив, который может изменять свой размер на этапе выполнения программы. Он может быть создан в памяти как на стеке, так и на куче.
Создание динамического массива осуществляется с помощью функции malloc(), которая выделяет запрашиваемое количество байтов памяти. Для работы с динамическим массивом также используются функции calloc(), realloc() и free().
Пример создания динамического массива:
// Выделение памяти под массив из 10 элементов int* arr = (int*) malloc(10 * sizeof(int));
// Заполнение массива for (int i = 0; i < 10; ++i) { arr[i] = i; }
// Освобождение памяти free(arr);
Функция malloc() принимает на вход количество байтов, которое необходимо выделить, и возвращает указатель на начальный адрес выделенной области памяти. В данном примере мы запросили выделение памяти размером 10 элементов типа int и присвоили указатель на начальный адрес этой области памяти переменной arr.
Затем мы заполнили массив значениями от 0 до 9 и освободили выделенную память с помощью функции free().
Также рассмотрим пример создания динамического массива с использованием функции calloc():
// Выделение памяти под массив из 10 элементов int* arr = (int*) calloc(10, sizeof(int));
// Заполнение массива for (int i = 0; i < 10; ++i) { arr[i] = i; }
// Освобождение памяти free(arr);
Функция calloc() принимает на вход количество элементов массива и размер каждого элемента и выделяет соответствующее количество памяти. В данном примере мы запросили выделение памяти под массив из 10 элементов типа int и присвоили указатель на начальный адрес выделенной области памяти переменной arr.
Также важно отметить, что после создания динамического массива его размер можно изменять с помощью функции realloc():
// Выделение памяти под массив из 10 элементов int* arr = (int*) malloc(10 * sizeof(int));
// Увеличение размера массива до 20 элементов int* new_arr = (int*) realloc(arr, 20 * sizeof(int)); if (new_arr != NULL) { arr = new_arr; }
// Заполнение массива for (int i = 0; i < 20; ++i) { arr[i] = i; }
// Освобождение памяти free(arr);
В данном примере мы сначала выделили память под массив из 10 элементов, а затем увеличили его размер до 20 элементов с помощью функции realloc(). Если выделение памяти прошло успешно, то новый указатель на начальный адрес области памяти будет записан в переменную new_arr. Если возникла ошибка, функция вернет NULL. В таком случае исходный указатель на начальный адрес массива arr останется без изменений.
В заключение, динамические массивы в языке С – это важный инструмент для работы с переменным объемом данных. Однако при их использовании необходимо следить за корректностью использования памяти и правильным освобождением ее после завершения работы.