我無法理解以下代碼,我希望在堆上創建一個數組並填充字符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";
它打印出compleletly意外的值。
正如我所理解的,'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";
這工作得很好。 任何人都可以向我解釋爲什麼我必須這樣做,不能只使用通過'新'關鍵字支持給我的指針?
感謝
它基本上破壞了陣列的頭部 – 2009-06-22 11:58:19