@annozzer

В чем разница между примерами приведенными ниже?

В чем разница между:
int *arr = new int[100];
int arr[100];
  • Вопрос задан
  • 175 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy
Android developer at Yandex
В первом случае память выделяется в куче и надо её явно освободить, вызвав delete[] arr; когда массив перестанет быть нужен. Во втором память выделяется на стеке и будет освобождена после покидания области видимости переменной arr.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Еще одно важное различие: в первом случае мы можем задавать размер массива динамически, в процессе работы программы:
int size = 0;
cout << "Введите размер массива: "; cin >> size;
int *arr = new int[size];

Во втором случае мы обязаны предоставить число, которое будет известно (вычеслено) на этапе компиляции - константу или результат константного выражения (constexpr):
const int SIZE = 333 + 768 * 2;
int arr[SIZE];
Ответ написан
Комментировать
@abcd0x00
В первом случае arr - это указатель. Указатель - это переменная, хранящая какой-то адрес каких-то данных определённого размера. Указатель можно менять, присваивая ему новые значения. Его можно сдвигать вправо (arr++) и влево (arr--) или вообще переставлять на какие-то другие данные в другом месте (arr = новый адрес). Так указатель можно поставить на начало массива, а можно на середину массива, а можно на конец массива и потом через него читать или менять массив в том месте.

Во втором случае arr - это массив. Каким ты его создал, таким он и остаётся до конца.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы