Пример создания одномерного динамического массива. В языке Си размерность массива при объявлении должна задаваться константным выражением.
В языке Си размерность массива при объявлении должна задаваться константным выражением.
Если до выполнения программы неизвестно, сколько понадобится элементов массива, нужно использовать динамические массивы, т.е. при необходимости работы с массивами переменной размерности вместо массива достаточно объявить указатель требуемого типа и присвоить ему адрес свободной области памяти (захватить память).
Память под такие массивы выделяется с помощью функций mallос и calloc (операцией new) во время выполнения программы. Адрес начала массива хранится в переменной-указателе. Например:
int n = 10;
double *b = (double *) malloc(n * sizeof (double));
В примере значение переменной n задано, но может быть получено и программным путем.
Обнуления памяти при ее выделении не происходит. Инициализировать динамический массив при декларации нельзя.
Обращение к элементу динамического массива осуществляется так же, как и к элементу обычного – например а[3]. Можно обратиться к элементу массива и через косвенную адресацию – *(а + 3). В любом случае происходят те же действия, которые выполняются при обращении к элементу массива, декларированного обычным образом.
После работы захваченную под динамический массив память необходимо освободить, для нашего примера free(b);
Таким образом, время жизни динамического массива, как и любой динамической переменной – с момента выделения памяти до момента ее освобождения. Область действия элементов массива зависит от места декларации указателя, через который производится работа с его элементами. Область действия и время жизни указателей подчиняются общим правилам для остальных объектов программы.
Пример работы с динамическим массивом:
#include <alloc.h>
void main()
{
double *x;
int n;
printf("\nВведите размер массива – ");
scanf("%d", &n);
if ((x = (double*)calloc(n, sizeof(*x)))==NULL) { // Захват памяти
puts("Ошибка ");
return;
}
...
// Работа с элементами массива
...
free(x); // Освобождение памяти
}
__________________________________________________________________
Примеры создания одномерного и двухмерного динамических массивов с использованием операций new и delete можно посмотреть в разд. 16.4.
__________________________________________________________________
Дата добавления: 2015-09-11; просмотров: 639;