Menu
Coddy logo textTech

Wskaźniki jako parametry

Lekcja 7 z 14 w kursie Wskaźniki w C++ w Coddy.

Zastosowanie funkcji w programowaniu jest powszechne. Używamy ich jako narzędzia do wielokrotnego wykonywania zadania, a jeśli nie, to przynajmniej do organizowania kodu i jego rozdzielania. 

Gdy przekazujemy wartości do funkcji, wartości, na których operujemy wewnątrz funkcji, są kopiami wartości oryginalnych. Właśnie wtedy przydatne okazuje się przekazywanie wartości do funkcji jako wskaźników.

void swap(int x, int y) {
    int temp = x;
    x = y;
    y = temp;
    cout << x << " " << y << endl;
}

int main() {
    int a = 10, b = 20;
    cout << a << " " << b << endl;
    swap(a, b);
    cout << a << " " << b;
}
Output:
10 20
20 10
10 20

Jak widać, początkowo wartości są zwykłe. Gdy przekazujemy je do funkcji, tworzone są kopie wartości oryginalnych, kopie zostają zamienione miejscami, wypisujemy zamienione wartości, a na koniec widzimy, że po wywołaniu funkcji w funkcji main() nie otrzymujemy trwałych rezultatów i wartości pozostają zwykłe. Można to rozwiązać, używając wskaźników.

void swap(int *x, int *y) {
    int temp = *x;
    *x = *y;
    *y = temp;
    cout << *x << " " << *y << endl;
}

int main() {
    int a = 10, b = 20;
    cout << a << " " << b << endl;
    swap(&a, &b);
    cout << a << " " << b;
}
Output:
10 20
20 10
20 10

Rozwiązaliśmy problem. Teraz zamiast przekazywać wartości, przekazujemy adresy, pod którymi znajdują się wartości, a jako argumenty funkcji przyjmujemy wskaźniki przechowujące te adresy. Tworzymy liczbę całkowitą temp, która przyjmuje wartość pobraną przez dereferencję x. Wartość pod adresem x (który jest tym samym adresem co a w funkcji main()) zostaje zmieniona na wartość y (początkową wartość spod adresu b), a na koniec y po dereferencji przyjmuje wartość temp. Ponieważ zmieniliśmy wartości pod podanymi adresami, a nie podane wartości, zmiana jest trwała.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

challenge icon

Wyzwanie

Łatwy

Ukończ funkcję Calculator, która na stałe zmienia wartości zmiennych large i small: odejmuje od large różnicę między large a small, a small mnoży przez samą siebie.

Dane wejściowe
5 3

Dane wyjściowe
5 3
3 9

Wyjaśnienie
Odjęcie od 5 różnicy między 5 a 3, która wynosi 2, daje 5 - 2 = 3, a pomnożenie 3 przez samą siebie daje 9

Uwaga: NIE pisz funkcji main()

Spróbuj swoich sił

#include <iostream>

using namespace std;

void Calculator(// Przyjmij argumenty: large & small) {
    // Wpisz kod wykonujący obliczenia
}


// NIE pisz funkcji main()

Wszystkie lekcje w sekcji Wskaźniki w C++

Poćwicz samodzielnie: Kompilator C++ online