Die 100 steht immer noch in dem Speicher an der Adresse. Beim Verlassen des Scope wirfst du aber die Adresse / den Pointer weg und verlierst damit die Möglichkeit den Wert wiederzufinden. Das ist als wenn du dein Auto irgendwo parkst und dann vergisst wo es steht.
Genau das ist der wichtige Punkt. Der Zeiger ist selbst wieder eine lokale Variable welche auf dein Array zeigt. Dein Array ist hinterher noch vorhanden, die Adresse ist jedoch weg.
Bisher dachte ich, dass die Zeiger an sich immer auf dem Heap sind, weil dadurch das Problem mit der Parameterübergabe von Funktionen bei großen Objekten umgangen wird, aber die Zuweisung einer Adresse an sich hat mit Heap/Stack nichts zutun, so viel hab ich bereits verstanden.
Ein Zeiger ist erst mal nur eine Variable. So wie ein int eine Ganzzahl oder ein char ein einzelnes Zeichen speichert, so speichert ein Zeiger eben eine Adresse. Stell dir das wie bei deinem Haus vor. Dein Haus hat eine Adresse, diese Adresse ist aber nicht dein Haus. Du kannst die Adresse auf ein Stück Papier schreiben und es mir schicken. Wenn ich das Stück Papier verbrenne so habe ich deine Adresse nicht mehr, dein Haus steht aber noch.
Jetzt ist es bei C++ ja so dass Objekte bei der Parameterübergabe kopiert werden.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
|
void useVariable(int i) {
i = 1337;
}
void useFunction() {
int a = 42;
useVariable(a); // hier wird a kopiert und die Kopie an die Funktion übergeben
// a hat hier immer noch den Wert 42
}
|
Bei einem Zeiger ist es das gleiche Spiel. Übergibst du einer Funktion einen Zeiger, so wird der Zeiger kopiert. Dabei werden nicht die Daten auf die der Zeiger zeigt kopiert, sondern nur die Variable die deren Adresse speichert. Das ist oft viel kleiner. Hast du ein Array mit 1000 Zahlen, so übergibst du einfach die Startadresse und zusätzlich die Größe deines Arrays. Kopiert werden jetzt ein Zeiger und eine Variable mit der Größe anstatt die 1000 Zahlen kopieren zu müssen. Bei anderen großen Objekten kannst du das eben genau so machen.
Was die Parameterübergabe angeht, wie schon angesprochen gibt es da noch die Referenzen. Die machen das Leben etwas einfacher.