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:
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:
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:
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:
int* ptr = nullptr; // Puntatore nullo e sicuro
Probier es aus
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.
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
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.
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
Welcher Ausdruck ermöglicht es bei dem angegebenen Code, den Wert von a direkt auf 10 zu ändern?
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?