Lekcje modułu (2/2)
Przekazywanie przez wartość i referencję
W C++, kiedy przekazujesz argument do funkcji, istnieją dwa główne sposoby, aby to zrobić: przez wartość (by value) lub przez referencję (by reference).
Zrozumienie tej różnicy jest kluczowe zarówno dla poprawności programu, jak i dla optymalizacji wydajności.
Przekazywanie przez wartość (kopia)
Domyślnie C++ przekazuje argumenty przez wartość. Oznacza to, że w pamięci tworzona jest kopia danych. Wszelkie modyfikacje dokonywane wewnątrz funkcji nie wpłyną na oryginalną zmienną na zewnątrz:
#include <iostream>
void increment(int n) {
n++; // Modifica solo la copia locale
}
int main() {
int x = 5;
increment(x);
std::cout << x << std::endl; // Stampa 5, x non è cambiata!
return 0;
}
Przekazywanie przez referencję (&)
Jeśli chcesz, aby funkcja mogła modyfikować oryginalną zmienną lub jeśli chcesz uniknąć kopiowania dużych obiektów (takich jak długie ciągi znaków lub wektory), musisz użyć przekazywania przez referencję.
Referencję deklaruje się, dodając symbol & po typie parametru:
#include <iostream>
void incrementRef(int& n) {
n++; // Modifica direttamente la variabile originale
}
int main() {
int x = 5;
incrementRef(x);
std::cout << x << std::endl; // Stampa 6!
return 0;
}
Parametr int& n nie jest kopią, ale aliasem (bezpośrednim odniesieniem) do zmiennej x przekazanej w momencie wywołania.
Spróbuj sam
Zdefiniuj funkcję doubleNumber z typem zwracanym void, która przyjmuje referencję do liczby całkowitej n (używając int& n) i podwaja jej wartość (n = n * 2). Wywołaj ją w main, przekazując jej zmienną val zainicjalizowaną na 10, a następnie wypisz val.
Pokaż wskazówkę
Sygnatura funkcji używa znaku `&`po typie, aby wskazać referencję:`void doubleNumber(int& n)`.
Rozwiązanie dostępne po 3 próbach
Zdefiniuj funkcję swap, która przyjmuje dwie referencje do liczb całkowitych a i b (int& a, int& b) i zamienia ich wartości miejscami, używając zmiennej tymczasowej temp. Wywołaj ją w main do zamiany wartości x i y, a następnie je wypisz.
Pokaż wskazówkę
Użyj `int temp = a; a = b; b = temp;` do zamiany wartości.
Rozwiązanie dostępne po 3 próbach