Когда выполняется double * dp [10] и создается массив указателей.
Эти строки на самом деле ничего не выполняют, они просто резервируют пространство (в стеке)на 10 указателей на double
.
Эти указатели: куда они указывают в памяти?
Нигде, потому что они не инициализированы.Таким образом, считайте их недействительными до тех пор, пока они не получат какое-то действительное значение.
почему я не могу просто использовать это место в памяти для хранения каждого двойного числа?
Поскольку вы спросилидля 10 указателей до double
вместо 10 doubles
.
Почему я должен указывать новый double, разве это не очевидно?по типу указателей?
Да, но в C ++ new
является независимым выражением.В C ++ могло бы быть что-то вроде new(p)
, где p
- указатель, но это не так:)
Обратите внимание, что вы можете реализовать его самостоятельно с помощью шаблонов:
template <typename T>
void allocate(T* & p, std::size_t n)
{
p = new T[n];
}
Или, в C ++ 11, вы можете просто использовать auto
, если вам это нравится:
auto p = new int[10];
Сказав все это, если вы уже знаете заранее, что вы точнонужно 10 doubles
, вы можете просто попросить об этом:
double my_ten_doubles[10];
Нет необходимости в выделении памяти (дорого), нет необходимости в освобождении памяти (без утечек памяти) и т. д.