У меня возникли проблемы с пониманием следующего фрагмента кода, который, как я надеялся, создаст массив в куче и заполнит его символами от 9 до 0 (я знаю, что могу просто индексировать массив как обычный массив стека с нотацией [] сделать это, но я делаю это таким образом, чтобы попытаться понять указатели более глубоко):
int *ptrHeapArray = new int[10];
for(int f=9; f>=0 ;f--)
{
*ptrHeapArray = f;
ptrHeapArray++;
}
for(int f=0; f<10; f++)
cout << ptrHeapArray[f] << "\n";
Он выводит совершенно неожиданные значения.
Как я понял из вышеизложенного, команда "new" создает массив в куче и отправляет мне обратно указатель на адрес, где находится массив. Поскольку указатель, который я назначаю (ptrHeapArray), имеет размер int, я предположил, что могу использовать приращение указателя для навигации по массиву. Однако результаты показывают, что мои предположения неверны.
Это навело меня на мысль, что, возможно, указатель, переданный ключевым словом «новое», является просто указателем на весь массив и по какой-то причине не может использоваться для прохода по массиву. Поэтому я попытался создать еще один указатель на указатель, возвращаемый ключевым словом «новое», и использовал его для заполнения моего массива:
int *ptrHeapArray = new int[10]; //array to hold FRANK data in 32 bit chunks
int *ptrToHeapArrayPointer = ptrHeapArray;
for(int f=9; f>=0 ;f--)
{
*ptrToHeapArrayPointer = f;
ptrToHeapArrayPointer++;
}
for(int f=0; f<10; f++)
cout << ptrHeapArray[f] << "\n";
Это сработало нормально. Может ли кто-нибудь объяснить мне, почему я должен был это сделать и не мог просто использовать указатель, переданный мне с помощью ключевого слова «новое»?
Спасибо