Int *массив = новый int[n]; что на самом деле делает эта функция?
Автор вопроса: pauliwagoОтветов: 8
Я смущен тем, как создать динамически определенный массив:
int *array = new int[n];
Я понятия не имею, что это делает. Я могу сказать, что он создает указатель с именем array, который указывает на новый объект/массив int? Кто-нибудь захочет объяснить?
new выделяет объем памяти, необходимый для хранения запрашиваемого объекта/массива. В этом случае n чисел int.
Затем указатель сохранит адрес в этом блоке памяти.
Но будьте осторожны, этот выделенный блок памяти не будет освобожден, пока вы не сообщите об этом, написав
delete [] array;
Ответ 2 · рейтинг 12 · Nawaz
int *array = new int[n];
Он объявляет указатель на динамический массив типа int и размера n.
Чуть более подробный ответ: new выделяет память размером, равным sizeof(int) * n байтам, и возвращает память, которую хранит переменная array. Кроме того, поскольку память динамически выделяется с помощью new, вы должны освободить ее вручную, написав (конечно, когда вам это больше не нужно):
delete []array;
В противном случае ваша программа потеряет память как минимум на sizeof(int) * n байт (возможно, больше, в зависимости от стратегии выделения, используемой реализацией).
Ответ 3 · рейтинг 11 · aeon
Оператор в основном делает следующее:
Создает целочисленный массив из "n" элементов
Выделяет память в памяти HEAP процесса, поскольку вы используете оператор new для создания указателя
Возвращает действительный адрес (если выделение памяти требуемого размера доступно в момент выполнения этого оператора)
Ответ 4 · рейтинг 2 · DhruvPathak
Он выделяет место в куче, равное целочисленному массиву размера N, и возвращает указатель на него, который присваивается указателю типа int*, называемому "массивом".
Ответ 5 · рейтинг 1 · Saurabh Gokhale
Он выделяет столько места в соответствии со значением n, и указатель будет указывать на массив, то есть на 1-й элемент массива.
int *array = new int[n];
Ответ 6 · LLS
В C/C++ указатели и массивы (почти) эквивалентны. int *a; a[0]; вернет *a, а a[1]; вернет *(a + 1)
Но массив не может изменить указатель, на который он указывает, в то время как указатель может.
new int[n] выделит несколько пробелов для "массива"
Ответ 7 · Android M
new оператор выделяет место для блока из n целых чисел и назначает адрес памяти этого блока в переменную int*array.
Общая форма new применительно к одномерным массивам выглядит следующим образом:
array_var = new Type[desired_size];
Ответ 8 · Engineero
Начиная с C++11, безопасный для памяти способ сделать это (по-прежнему используя аналогичную конструкцию) - использовать std::unique_ptr:
std::unique_ptr<int[]> array(new int[n]);
Это создает интеллектуальный указатель на блок памяти, достаточно большой для n целых чисел, который автоматически удаляется, когда выходит за пределы области видимости. Эта автоматическая очистка важна, потому что она позволяет избежать ситуации, когда ваш код завершает работу раньше времени и никогда не достигает вашего оператора delete [] array;.
Другой (вероятно, предпочтительный) вариант - использовать std::vector, если вам нужен массив возможность динамического изменения размера. Это хорошо, когда вам нужно неизвестное количество места, но у него есть некоторые недостатки (непостоянное время добавления/удаления элемента). Вы можете создать массив и добавить в него элементы, например:
std::vector<int> array;
array.push_back(1); // adds 1 to end of array
array.push_back(2); // adds 2 to end of array
// array now contains elements [1, 2]