Modulelessen (2/2)
Wijzers
Pointers zijn een van de krachtigste en meest onderscheidende kenmerken van C++. Hiermee kunt u rechtstreeks toegang krijgen tot het fysieke geheugen van de computer, waardoor efficiënt bronnenbeheer en hoge prestaties mogelijk zijn.
1. Wat is geheugen en een adres?
Elke variabele die u in uw programma declareert, wordt opgeslagen in een cel van het RAM-geheugen. Elke cel heeft een uniek geheugenadres (meestal uitgedrukt in hexadecimaal formaat, bijvoorbeeld 0x7ffee3bf87ac).
Met C++ kunnen we het geheugenadres van elke variabele verkrijgen met behulp van de address-of operator &:
int x = 42;
std::cout << &x; // Prints the memory address of x (e.g., 0x7ffee3bf87ac)2. Definitie van een aanwijzer
Een pointer is een speciale variabele die het geheugenadres van een andere variabele als waarde opslaat.
De syntaxis vereist het gebruik van het sterretje * na het gegevenstype:
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x3. De dereferentieoperator (*)
Om toegang te krijgen tot de waarde die is opgeslagen op het adres waarnaar een aanwijzer verwijst, of deze te wijzigen, gebruiken we de dereferentie-operator (of indirectie-operator), ook weergegeven door het symbool *:
int x = 42;
int* ptr = &x;
std::cout << *ptr; // Prints 42 (the value ptr points to)
*ptr = 100; // Modifies the value of x through the pointer
std::cout << x; // Now prints 100!4. Nul-aanwijzers: nullptr
Een pointer die niet naar een geldig adres verwijst, moet worden geïnitialiseerd met het trefwoord nullptr (geïntroduceerd in C++11):
int* ptr = nullptr; // Safe null pointerProbeer het zelf
In het algemeen is er een geheel getal variabele waarde geïnitialiseerd op 42. Declareer een pointer naar geheel getal ptr die naar het adres van de waarde wijst. Gebruik de dereferentie van ptr om de waarde van value in te stellen op 100, en druk ten slotte de waarde af met std::cout.
Toon hint
Declareer de pointer met `int* ptr = &value;`, wijzig de waarde door `*ptr = 100;`te verwijderen, en print`std::cout << value;`.
Oplossing beschikbaar na 3 pogingen
Definieer een functie doubleValue die een pointer naar een geheel getal (int* ptr) accepteert en de waarde waarnaar deze verwijst met 2 vermenigvuldigt (als de pointer niet nul is). Roep in het algemeen doubleValue aan, geef het adres van de variabele num door en druk het af.
Toon hint
De functie moet `int* ptr`accepteren. Gebruik binnen`*ptr = (_ptr) _ 2`. Roep het in principe aan met `doubleValue(&num);`.
Oplossing beschikbaar na 3 pogingen
Met welke expressie kunt u, gegeven de verstrekte code, rechtstreeks de waarde van a wijzigen door deze op 10 in te stellen?
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?