我无法理解以下代码,我希望在堆上创建一个数组并用字符 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”关键字传递给我的指针?
谢谢