Salt la conținutul principal
Modulul 5 · Lecția 2 din 212/18 în curs~15 min
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 &:

C++
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:

C++
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x

3. 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 *:

C++
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):

C++
int* ptr = nullptr; // Safe null pointer

Încercați-l singur

Exercițiu#cpp.m5.l2.e1
Încercări: 0Se încarcă…

Î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.

Se încarcă editorul...
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

Exercițiu#cpp.m5.l2.e2
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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

Quiz#cpp.m5.l2.q1
Gata

Având în vedere codul furnizat, ce expresie vă permite să modificați direct valoarea lui a, setând-o la 10?

C++
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?
Opțiuni de răspuns