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 20Jak 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 10Rozwią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.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wyzwanie
ŁatwyUkoń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++
2Wskaźniki i referencje
Wskaźniki jako parametryReferencje - &Referencje jako parametryWskaźniki a referencje3Dynamiczna alokacja pamięci
Operatory new i deleteWycieki pamięciTablica dynamicznaTablica dynamiczna — wstawianiePoćwicz samodzielnie: Kompilator C++ online