Grundlagen der Informatik 11. Zeiger
Motivation Zeiger und Adressen Zeiger und Funktionen Zeiger und Arrays Dynamische Objekte
Grundlagen der Inform...
Motivation Zeiger und Adressen Zeiger und Funktionen Zeiger und Arrays Dynamische Objekte
Grundlagen der Informatik (Alex Rempel)
1
Grundlagen der Informatik Motivation ●
Dynamische Speicherverwaltung ●
Oft müssen große Speicherblöcke verwaltet werden –
●
Eine Speicherarithmetik wird gebraucht, um den Adressraum im Code komfortabel duchzugehen
Beispiel –
Mehrdimensionale Arrays sind sehr unhandlich, stattdessen wird oft ein großer eindimensinaler Array verwendet ●
Vorteil: Parameterübergabe an Funktionen vereinfacht
int iArray[12][5]; int i = iArray[3][2];
int iArray[60]; // 12x5 int i = iArray[3*5+2];
Grundlagen der Informatik (Alex Rempel)
2
Grundlagen der Informatik Motivation ●
Dynamische Speicheranpassung ●
●
Arrays müssen eine feste Größe haben, aber oft werden Arrays mit dynamischer Größe gebraucht Beispiel: –
Benutzer gibt Anzahl n der einzugebenden Elemente ein ●
●
Dynamische Parameterübergabe ●
●
Array wird erst danach dynamisch mit der Größe n erzeugt
Ferner auch die Möglichkeit, Arrays zurückzugeben
Etc. Grundlagen der Informatik (Alex Rempel)
3
Grundlagen der Informatik Zeiger und Adressen ●
Zeiger (Pointer) sind Variablen ●
Inhalt der Variable: Adresse im Speicher oder NULL –
Adresse im Speicher ist bei 32b Systemen eine 32b große Zahl ●
– ●
●
type * name;
Ändert sich der Inhalt, zeigt die Variable auf eine andere Speicherzelle
Inhalt NULL bedeutet, dass die Variable auf nichts zeigt
Beim Anwenden von Rechenoperatoren auf den Zeiger kann der Speicher entsprechend durchlaufen werden Beim Dereferenzieren eines Zeigers bekommt man die Variable, auf welche der Zeiger zeigt –
Der type des Zeigers gibt dabei den Typ der Variable an Grundlagen der Informatik (Alex Rempel)
4
Grundlagen der Informatik Zeiger und Adressen ●
Deklaration ●
Von rechts nach links interpretieren: –
●
type * name;
Variable name ist ein Zeiger auf etwas vom Typ type
Initialisierung ●
Zuweisung einer Adresse: –
●
int iNumber = 42; int* iPointer = &iNumber;
iPointer zeigt nun auf Variable iNumber
Falls nicht sofort zugewiesen wird, sollte immer die Initialisierung auf NULL erfolgen (sonst Fehlerquelle): int* iPointer = NULL; Grundlagen der Informatik (Alex Rempel)
5
Grundlagen der Informatik Zeiger und Adressen Name double* pPointer = NULL;
Grundlagen der Informatik Zeiger und Adressen p is saved in 0x0031FB60 and points to 0x00000000 (no value) ...dNumber=0.2 in address 0x0031FC50 #include p is saved in 0x0031FB60 and points to 0x0031FC50 (value = 0.2) #include using namespace std;