Przejdź do głównej treści
eLearner.app
Moduł 3 · Lekcja 2 z 28/18 w kursie~12 min
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:

Code
#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:

Code
#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

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

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.

Ładowanie edytora...
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

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

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.

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

Użyj `int temp = a; a = b; b = temp;` do zamiany wartości.

Rozwiązanie dostępne po 3 próbach