Можно ли создать динамический массив в C ++ без явного использования указателя (int array [] вместо int * array)?
то есть. что-то вроде этого:
int size = 5;
int array[];
array = new int{size};
for (int i = 0; i < size; i++)
{
array[i];
}
Да, конечно, это возможно:
#include <iostream>
int main()
{
[](int array[] = new int[10]) {
std::cout << "array = " << array << "\n";
delete[] array;
}();
}
Вы можете сделать это с помощью ссылка:
#include <iostream>
using namespace std;
int main()
{
int& val = *(new int[2]);
val = 1;
*(&val + 1) = 2;
cout << val << ' ' << *(&val+1) << '\n';
delete [] (&val);
return 0;
}
Но, как вы можете видеть, это не очень читабельно и будет очень подвержен ошибкам. Лучше всего было бы просто использовать std::vector
,
Нет, но вы можете использовать динамические типы из std
библиотека, как std::vector
,
Тип std::vector
действуя очень похоже на массив.
Посмотри на это станд :: вектор.
int array[];
обязательно имеет автоматическую продолжительность хранения (в области действия функции или класса) и не может иметь динамическую продолжительность хранения.
Вы можете скрыть указатель внутри класса, как std::vector<int>
,
Вы могли бы сделать что-то вроде
int (&array)[5] = reinterpret_cast<int(&)[5]>(*new int[5]);
удалить: delete [] array;
Короче нет. Компилятору необходимо знать размер массива, поэтому для использования выделенных в стеке массивов в c ++ он должен быть указан в объявлении. Я рекомендую вам посмотреть на STL Вектор класс вместо.