Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Int *массив = новый int[n]; что на самом деле делает эта функция?

Автор вопроса: pauliwagoОтветов: 8

Я смущен тем, как создать динамически определенный массив:

 int *array = new int[n];

Я понятия не имею, что это делает. Я могу сказать, что он создает указатель с именем array, который указывает на новый объект/массив int? Кто-нибудь захочет объяснить?

c++arraysnew-operatorpointers

Ответы

Ответ 1 · рейтинг 30 · ANisus

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

Оператор в основном делает следующее:

  1. Создает целочисленный массив из "n" элементов
  2. Выделяет память в памяти HEAP процесса, поскольку вы используете оператор new для создания указателя
  3. Возвращает действительный адрес (если выделение памяти требуемого размера доступно в момент выполнения этого оператора)

Ответ 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]

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы