Erstellen von arrays auf dem heap, und die Adressierung mit Pointer

Ich habe Probleme beim Verständnis der folgende code, die ich hoffte, würde erstellen Sie ein array auf dem heap, und füllen Sie es mit den Zeichen 9 bis 0 (ich weiß, ich könnte nur index das array wie eine normale stack-array mit [] - notation, um dies zu tun, aber ich mache es auf diese Weise zu versuchen zu verstehen, Zeiger in mehr Tiefe):

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";

Druckt es aus compleletly unerwartete Werte.

So wie ich das verstehe, muss der 'neue' Befehl erstellt ein array auf dem heap, und schickt mir wieder ein Zeiger auf die Adresse, wo das array ist. Da der Zeiger, die ich zuordnen (ptrHeapArray) ist der int-Größe bin ich davon ausgegangen, ich könnte mit Zeiger-post-Inkrementierung zum navigieren durch das array. Jedoch deuten die Ergebnisse darauf hin, dass meine Annahmen falsch sind.

Dieser hat mir zu denken, dass vielleicht die übergebene Zeiger zurück durch die "neue" Schlüsselwort wird nur ein pointer auf das gesamte array und kann nicht verwendet werden, um Schritt für Schritt durch das array aus irgendeinem Grund.
Also ich habe versucht, erstellen Sie einen weiteren Zeiger auf den Zeiger zurückgegeben, die durch die "neue" Schlüsselwort, und verwendet, um zu tun, mein array Bevölkerung:

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";   

Dies funktionierte gut.
Kann jemand mir erklären, warum ich dies tun musste und konnte nicht einfach haben, verwendet das übergebene Zeiger gesichert, um mich von den "neuen" Schlüsselwort?

Dank

InformationsquelleAutor Columbo | 2009-06-22

Schreibe einen Kommentar