Direkt zum Hauptinhalt springen
eLearner.app
Modul 5 · Lektion 2 von 212/18 im Kurs~15 min
Lektionen des Moduls (2/2)

Zeiger

Zeiger (Pointer) sind eines der leistungsstärksten und charakteristischsten Merkmale von C++. Sie ermöglichen den direkten Zugriff auf den physischen Arbeitsspeicher des Computers, was eine effiziente Ressourcenverwaltung und hohe Leistung ermöglicht.


1. Was ist Speicher und eine Adresse?

Jede Variable, die Sie in Ihrem Programm deklarieren, wird in einer Zelle des RAM-Speichers abgelegt. Jede Zelle hat eine eindeutige Speicheradresse (meist im Hexadezimalformat ausgedrückt, z. B. 0x7ffee3bf87ac).

C++ ermöglicht es uns, die Speicheradresse einer beliebigen Variable mithilfe des Adressoperators & abzufragen:

Code
int x = 42;
std::cout << &x; // Stampa l'indirizzo di memoria di x (es. 0x7ffee3bf87ac)

2. Definition eines Zeigers

Ein Zeiger ist eine spezielle Variable, die die Speicheradresse einer anderen Variable als Wert speichert.

Die Syntax sieht die Verwendung des Sternchens * nach dem Datentyp vor:

Code
int x = 42;
int* ptr = &x; // ptr è un puntatore a intero che contiene l'indirizzo di x

3. Der Dereferenzierungsoperator (*)

Um auf den Wert zuzugreifen oder ihn zu ändern, der an der Adresse gespeichert ist, auf die ein Zeiger verweist, verwenden wir den Dereferenzierungsoperator (oder Indirektionsoperator), der ebenfalls durch das Symbol * dargestellt wird:

Code
int x = 42;
int* ptr = &x;

std::cout << *ptr; // Stampa 42 (il valore a cui punta ptr)

*ptr = 100; // Modifica il valore di x tramite il puntatore
std::cout << x;    // Ora stampa 100!

4. Null-Zeiger: nullptr

Ein Zeiger, der auf keine gültige Adresse zeigt, sollte mit dem Schlüsselwort nullptr (eingeführt in C++11) initialisiert werden:

Code
int* ptr = nullptr; // Puntatore nullo e sicuro

Probier es aus

Übung#cpp.m5.l2.e1
Versuche: 0Wird geladen…

Im main ist eine Variable value vorhanden, die mit 42 initialisiert ist. Deklariere einen Ganzzahlzeiger ptr, der auf die Adresse von value zeigt. Verwende die Dereferenzierung von ptr, um den Wert von value auf 100 zu setzen, und gib schließlich value mit std::cout aus.

Editor wird geladen…
Hinweis anzeigen

Deklariere den Zeiger mit `int* ptr = &value;`, ändere den Wert durch Dereferenzieren mit `*ptr = 100;`und gib das Ergebnis mit`std::cout << value;` aus.

Lösung nach 3 Versuchen verfügbar

Übung#cpp.m5.l2.e2
Versuche: 0Wird geladen…

Definiere eine Funktion doubleValue, die einen Zeiger auf eine Ganzzahl (int* ptr) akzeptiert und den Wert, auf den er zeigt, mit 2 multipliziert (sofern der Zeiger nicht Null ist). Rufe im main die Funktion doubleValue auf und übergib ihr die adresse der Variable num, und gib num anschließend aus.

Editor wird geladen…
Hinweis anzeigen

Die Funktion muss einen `int* ptr`akzeptieren. Verwende im Inneren`*ptr = (_ptr) _ 2`. Rufe sie im main mit `doubleValue(&num);` auf.

Lösung nach 3 Versuchen verfügbar

Quiz#cpp.m5.l2.q1
Bereit

Welcher Ausdruck ermöglicht es bei dem angegebenen Code, den Wert von a direkt auf 10 zu ändern?

Code
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?
Antwortoptionen