Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.

Ähnliche Präsentationen


Präsentation zum Thema: "Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung."—  Präsentation transkript:

1 Pointer

2 * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung (NULL) int *var2 = &var1; ○ // … auf gültige Variable int &var3 = var1; ○ // Referenz auf var1, explizite Initialisierung muss sein  Gleiche Syntax (ohne Initialisierung) im Funktionskopf

3 * und &  Verwendung bei Zuweisung Referenz wie ganz normale Variable! Zugriff auf den Inhalt der Variablen, auf die der Pointer zeigt ○ cout << *var2; // Dereferenzierung über * ○ *var2 = 10; // Auch schreibend möglich Zugriff auf die Adresse der Variablen, auf die der Pointer zeigt ○ cout << var2; // Die Adresse ist der Inhalt des Pointers Zugriff auf Adresse einer normalen Variablen ○ var2 = &var1;

4 Dynamische Speicherverwaltung  Anfordern, Verwalten und Freigeben von Speicher nach Bedarf zur Laufzeit  Spezielle Operatoren in C++ new zur Resservierung des Speichers ○ keine Garantie einer impliziten Initialisierung! delete zur Freigabe des verwendeten Speichers ○ nur auf einen BasePointer (zeigt auf den Anfang eines reservierten Speicherblockes) anwendbar! int32 *dynVar = new int32; delete dynVar;

5 Dynamische Speicherverwaltung  Pointer beliebig oft verwendbar  Speicherreservierung mit expliziter Initialisierung dynVar = new int32(10);  Wenn ein Pointer nicht mehr auf eine gültige Variable zeigt, auf NULL setzen! delete dynVar; dynVar = NULL;

6 Aufgabe 9: Nur noch Pointer!  Überarbeite Aufgabe 7 und 8 dahin, dass keine primitiven Variablen verwendet werden!  Aufgabe 7: Ausgabe von Adresse und Inhalt von Variablen (int32, bool, double) Benutze nur einen Pointer je Datentyp!  Aufgabe 8: Verdoppeln von int32 und int64 Variablen

7 Dynamische Arrays  Speicheranforderung für ein gesamtes Array  Anzahl der gewünschten Elemente in eckigen Klammern hinter dem Datentyp const uint16 LENGTH = 10; int32 *dynArray = new int32[LENGTH];  Pointer zeigt auf den Anfang (das erste Element) des dynamischen Arrays  Freigabe durch delete[] dynArray;

8 Dynamische Arrays  Zugriff auf Elemente des Arrays Eckige Klammern mit Nummer des Elements Keine implizite Initialisierung! Iterator und Pointerarithmetik int32 *iterator = dynArray; for (uint16 count = 0; count < LENGTH; count++) *iterator++ = 0; // Wert von iterator wird auf 0 gesetzt // danach wird iterator incrementiert

9 Pointerarithmetik  Addieren von einem Wert zu einem Arraypointer bewirkt das Vorrücken des Pointers um die entsprechende Anzahl an Elementen unabhängig von der Elementgröße! andere arithmetische Operationen ebenfalls möglich  Vorsicht bei Dereferenzierung! *iterator + 5 // Wert um 5 erhöht *(iterator + 5) // Pointer um 5 erhöht

10 Statische Arrays und Pointer  Pointer und statische Array-Variablen sind austauschbar Pointerarithmetik funktioniert mit statischen Arrays statische Arrays intern über Pointer realisiert void showArray(const int32 array[ ], uint16 length) { while (length--) cout << "[" << *array++ << "] "; cout << endl; } showArray(dynArray, LENGTH);

11 Pointer und call-by-reference  Wie die Adresse, auf die der Pointer zeigt nachhaltig verändern?  int32 *&dst – Referenz auf einen Pointer auf einen int32 void Clone(int32 *&dst, const int32 src[ ], uint16 length) { dst = new int32[length]; int32 *dstIterator = dst; while (length--) *dstIterator++ = *src++; }

12 Aufgabe 10: Dynamische Erweiterung eines Arrays  Erstelle ein dynamisches Array der Länge 10  Erstelle eine Schleife mit 21 Durchläufen weise dem Array an der Stelle Durchlaufzähler das Ergebnis der Funktion zur Verdoppelung des Zahlenwertes mit dem Durchlaufzähler als Parameter zu Vergrößere bei Bedarf das Array um jeweils weitere 10 Elemente  Gib den Inhalt des gesamten Arrays in der Konsole aus


Herunterladen ppt "Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung."

Ähnliche Präsentationen


Google-Anzeigen