【发布时间】:2009-06-22 11:53:45
【问题描述】:
我无法理解以下代码,我希望在堆上创建一个数组并用从 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”关键字传递给我的指针?
谢谢
【问题讨论】:
标签: c++ pointers heap-memory new-operator