У меня проблемы с пониманием следующего фрагмента кода, который я надеялся создать массив в куче и заполнить его символами от 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, я предположил, что могу использовать приращение указателя для перемещения по массиву. Однако результаты показывают, что мои предположения неверны.
Это заставило меня задуматься о том, что, возможно, указатель, возвращаемый ключевым словом "new", является просто указателем на весь массив и по какой-то причине не может использоваться для перехода по массиву.
Поэтому я попытался создать еще один указатель на указатель, возвращаемый ключевым словом «new», и использовал его для заполнения массива:
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";
Это сработало нормально.
Может кто-нибудь объяснить мне, почему я должен был это сделать, и не мог просто использовать указатель, переданный мне ключевым словом «new»?
Спасибо