Lecții din modul (2/2)
Indicatori
Pointerii sunt una dintre cele mai puternice și distinctive caracteristici ale C++. Acestea vă permit să accesați memoria fizică a computerului în mod direct, permițând gestionarea eficientă a resurselor și performanță ridicată.
1. Ce este memoria și o adresă?
Fiecare variabilă pe care o declarați în programul dumneavoastră este stocată într-o celulă a memoriei RAM. Fiecare celulă are o adresă de memorie unică (exprimată de obicei în format hexazecimal, de exemplu, 0x7ffee3bf87ac).
C++ ne permite să obținem adresa de memorie a oricărei variabile folosind operatorul address-of &:
int x = 42;
std::cout << &x; // Prints the memory address of x (e.g., 0x7ffee3bf87ac)2. Definiția unui Pointer
Un pointer este o variabilă specială care stochează adresa de memorie a unei alte variabile ca valoare.
Sintaxa necesită utilizarea asteriscului * după tipul de date:
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x3. Operatorul Dereference (*)
Pentru a accesa sau modifica valoarea stocată la adresa către care indică un pointer, folosim operatorul de dereferință (sau operatorul de indirecție), reprezentat și de simbolul *:
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. Indicatori nuli: nullptr
Un pointer care nu indică nicio adresă validă ar trebui inițializat cu cuvântul cheie nullptr (introdus în C++11):
int* ptr = nullptr; // Safe null pointerÎncercați-l singur
În principal, există o valoare variabilă întreagă inițializată la 42. Declarați un pointer către ptr întreg care indică adresa valorii. Utilizați dereferențiarea ptr pentru a seta valoarea valorii la 100 și, în final, imprimați valoarea folosind std::cout.
Afișează indiciu
Declarați pointerul cu `int* ptr = &value;`, modificați valoarea dereferențând `*ptr = 100;`și imprimați`std::cout << value;`.
Soluție disponibilă după 3 încercări
Definiți o funcție doubleValue care acceptă un pointer către un număr întreg (int* ptr) și înmulțește valoarea către care indică cu 2 (dacă pointerul nu este nul). În principal, apelați doubleValue trecând adresa variabilei num și imprimați-o.
Afișează indiciu
Funcția trebuie să accepte `int* ptr`. În interior, utilizați `*ptr = (_ptr) _ 2`. În principal, îl apelați cu `doubleValue(&num);`.
Soluție disponibilă după 3 încercări
Având în vedere codul furnizat, ce expresie vă permite să modificați direct valoarea lui a, setând-o la 10?
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?