Итак, мы хотим выделить в памяти место под новый массив целых чисел во время работы
программы. Мы уже знаем его размер, пусть он хранится в переменной N(это число обязательно должно быть больше нуля). Оператор выделения памяти newвернет нам адрес нового выделенного блока и для работы с массивов нам надо где-то его запомнить. Вы уже знаете, что есть специальный класс переменных для записи в них адресов памяти – указатели.
• динамические массивы используются тогда, когда на момент написания программы раз-
мер массива неизвестен
• для того, чтобы работать с динамическим массивом, надо объявить указатель соответствующего типа (в нем будет храниться адрес первого элемента массива);
int *A;
• когда требуемый размер массива стал известен, надо использовать оператор newязыка
Си++, указав в скобках размер массива (в программе для краткости нет проверки на положительностьN) ;
A = newint[N];
• нельзяиспользовать оператор newпри отрицательном или нулевом N;
• после выделения памяти надо проверить, успешно ли оно прошло; если память выделить не удалось, то значение указателя будет равно NULL, использование такого массива приведет к сбой программы;
• работа с динамическим массивом, на который указывает указательА, идет также, как и с обычным массивом размера N(помните, что язык Си не следит за выходом за границы
массива);
• после использования массива надо освободить выделенную память, вызвав оператор
delete A;
• после освобождения памяти значение указателя не изменяется, но использовать его уже
нельзя, потому что память освобождена;
• учитывая, что при добавлении числа к указателю он сдвигается на заданное число ячеек
ЗАДАННОГО ТИПА, то следующие записи равносильны и вычисляют адрес i-ого эле-
мента массива:
&A[i] и A+i
Отсюда следует, что Aсовпадает с &A[0], и поэтому имя массива можно использовать