Przejdź do głównej treści
eLearner.app
Moduł 5 · Lekcja 2 z 212/18 w kursie~15 min
Lekcje modułu (2/2)

Wskaźniki

Wskaźniki (pointers) to jedna z najpotężniejszych i najbardziej charakterystycznych cech języka C++. Pozwalają na bezpośredni dostęp do fizycznej pamięci komputera, co umożliwia wydajne zarządzanie zasobami i wysoką wydajność.


1. Czym jest pamięć i adres?

Każda zmienna deklarowana w programie jest przechowywana w komórce pamięci RAM. Każda komórka ma unikalny adres pamięci (zazwyczaj wyrażany w formacie szesnastkowym, np. 0x7ffee3bf87ac).

C++ pozwala nam uzyskać adres pamięci dowolnej zmiennej za pomocą operatora adresu &:

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

2. Definicja wskaźnika

Wskaźnik to specjalna zmienna, która przechowuje jako swoją wartość adres pamięci innej zmiennej.

Składnia wymaga użycia gwiazdki * po typie danych:

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

3. Operator wyłuskania (dereferencji) (*)

Aby uzyskać dostęp do wartości zapisanej pod adresem wskazywanym przez wskaźnik lub ją zmodyfikować, używamy operatora wyłuskania (lub dereferencji), również reprezentowanego przez symbol *:

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. Wskaźniki puste: nullptr

Wskaźnik, który nie wskazuje na żaden prawidłowy adres, musi zostać zainicjalizowany słowem kluczowym nullptr (wprowadzonym w C++11):

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

Spróbuj sam

Ćwiczenie#cpp.m5.l2.e1
Próby: 0Ładowanie...

W funkcji main znajduje się zmienna value zainicjalizowana na wartość 42. Zadeklaruj wskaźnik do liczby całkowitej ptr wskazujący na adres value. Użyj wyłuskania wskaźnika ptr, aby ustawić wartość value na 100, a na koniec wypisz value za pomocą std::cout.

Ładowanie edytora...
Pokaż wskazówkę

Zadeklaruj wskaźnik za pomocą `int* ptr = &value;`, zmodyfikuj wartość wyłuskując go `*ptr = 100;`i wypisz za pomocą`std::cout << value;`.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#cpp.m5.l2.e2
Próby: 0Ładowanie...

Zdefiniuj funkcję doubleValue przyjmującą wskaźnik do liczby całkowitej (int* ptr) i mnożącą przez 2 wartość, na którą wskazuje (jeśli wskaźnik nie jest pusty). W main wywołaj doubleValue przekazując jej adres zmiennej num, a następnie ją wypisz.

Ładowanie edytora...
Pokaż wskazówkę

Funkcja musi przyjmować `int* ptr`. Wewnątrz użyj `*ptr = (_ptr) _ 2`. W main wywołaj ją za pomocą `doubleValue(&num);`.

Rozwiązanie dostępne po 3 próbach

Quiz#cpp.m5.l2.q1
Gotowe

Na podstawie przedstawionego kodu, które wyrażenie pozwala bezpośrednio zmodyfikować wartość zmiennej a, ustawiając ją na 10?

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