69
– использование еще не проинициализированных элемен-
тов массива также относится к логическим ошибкам, например в
следующем фрагменте программы массив x описан, но не про-
инициализирован, тем не менее элемент массива с индексом 0
участвует в вычислении значения переменной y :
int x[10];
int y =x[0]+15;
значение переменной y в этом случае не может быть опре-
делено однозначно.
Если программа должна уметь обрабатывать массивы про-
извольной размерности, целесообразней использовать динами-
ческие массивы. При описании указателей Вы познакомились с
оператором выделения памяти new. В рассмотренном примере
память выделялась под один элемент. Язык Си позволяет выде-
лить память под несколько элементов:
int* x = new int [15]; // выделение памяти под массив из 15
элементов
Таким образом, понятие «указатель» и «массив» очень тес-
но связаны между собой. Имя массива в Си — это указатель на
адрес первого элемента массива. Обращение к элементу дина-
мического массива с заданным индексом не отличается от об-
ращения к элементу статического массива. Инициализировать
элементы динамического массива возможно только поэлемент-
но, после выделения необходимой памяти. Следующий фраг-
мент программы описывает и инициализирует элементы дина-
мического массива x. Принцип работы цикла for подробно опи-
сан в следующей главе.
int *x;
int n = 5;
x = new int[n];
for(int i=0;i<n;i++)
x[i]=i;
После выполнения этого фрагмента программы элементы
массива x определены следующим образом:
x[0]=0,x[1]=1,x[2]=2,x[3]=3,x[4]=4.
Освобождение памяти после работы с динамическими мас-
сивами нужно выполнять следующим образом:
delete [] x;