Как создать динамический массив в С
В языке С динамический массив представляет собой массив, размер которого определяется во время выполнения программы. Для создания динамического массива необходимо выделить память во время выполнения программы, а затем освободить ее после использования.
Выделение памяти для динамического массива
Выделение памяти для динамического массива осуществляется с помощью функции malloc или оператора new. Оба этих способа используются для выделения непрерывного блока памяти заданного размера. Размер блока памяти определяется по количеству элементов массива умноженного на размер одного элемента.
Пример использования функции malloc⁚
#include nlt;stdio.hngt;
#include nlt;stdlib.hngt;
int main {
int n;
printf(″Введите размерность массива⁚ ″);
scanf(″%d″, nn);
int *arr (int *) malloc(n * sizeof(int));
// Используйте массив arr
free(arr); // Освобождение памяти
return 0;
}
Пример использования оператора new⁚
#include nlt;iostreamngt;
int main {
int n;
std⁚⁚cout nlt;nlt; ″Введите размерность массива⁚ ″;
std⁚⁚cin ngt;ngt; n;
int *arr new int[n];
// Используйте массив arr
delete[] arr; // Освобождение памяти
return 0;
}
Индексация и изменение размера динамического массива
Динамический массив индексируется так же, как и статический массив. Доступ к элементам осуществляется через индексы, начинающиеся с 0.
Изменение размера динамического массива можно выполнить с помощью функции realloc или оператора new. Оба этих способа используются для изменения размера выделенного блока памяти.
Пример использования функции realloc⁚
#include nlt;stdio.hngt;
#include nlt;stdlib.hngt;
int main {
int n;
printf(″Введите размерность массива⁚ ″);
scanf(″%d″, nn);
int *arr (int *) malloc(n * sizeof(int));
// Используйте и изменяйте массив arr
int newSize;
printf(″Введите новую размерность массива⁚ ″);
scanf(″%d″, nnewSize);
arr (int *) realloc(arr, newSize * sizeof(int)); // Изменение размера
// Используйте измененный массив arr
free(arr); // Освобождение памяти
return 0;
}
Пример использования оператора new⁚
#include nlt;iostreamngt;
int main {
int n;
std⁚⁚cout nlt;nlt; ″Введите размерность массива⁚ ″;
std⁚⁚cin ngt;ngt; n;
int *arr new int[n];
// Используйте и изменяйте массив arr
int newSize;
std⁚⁚cout nlt;nlt; ″Введите новую размерность массива⁚ ″;
std⁚⁚cin ngt;ngt; newSize;
int *newArr new int[newSize]; // Создание нового массива
for (int i 0; i nlt; newSize; i ) {
newArr[i] arr[i]; // Копирование элементов в новый массив
}
delete[] arr; // Освобождение памяти старого массива
arr newArr; // Присвоение адреса нового массива старому
// Используйте измененный массив arr
delete[] arr; // Освобождение памяти измененного массива
return 0;
}
Таким образом, динамический массив является более гибким и удобным инструментом для работы с данными, чем статический массив. Он позволяет изменять размер массива во время выполнения программы, а также освобождать занимаемую им память после использования.