Przekazywanie przez referencję
Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 41 z 56.
Gdy przekazujesz argumenty do funkcji, C++ zwykle tworzy kopie wartości. Oznacza to, że zmiany wewnątrz funkcji nie wpływają na oryginalne zmienne. Przekazywanie przez referencję zmienia to zachowanie, umożliwiając funkcjom bezpośrednią pracę na oryginalnych zmiennych.
Aby przekazywać przez referencję, dodaj symbol & po typie parametru w deklaracji funkcji:
void doubleValue(int& number) {
number = number * 2; // Modyfikuje oryginalną zmienną
}Gdy wywołasz tę funkcję, wszelkie zmiany wprowadzone w parametrze wewnątrz funkcji bezpośrednio zmodyfikują oryginalną zmienną, która została przekazana. Jest to szczególnie przydatne, gdy chcesz, aby funkcja modyfikowała swoje argumenty, lub gdy pracujesz z dużymi obiektami, których kopiowanie byłoby nieefektywne.
Przekazywanie przez referencję eliminuje narzut związany z kopiowaniem danych, dzięki czemu programy działają szybciej i efektywniej wykorzystują pamięć, zwłaszcza w przypadku złożonych struktur danych, takich jak wektory czy mapy.
Wyzwanie
ŁatwyUtwórz funkcję, która demonstruje przekazywanie przez referencję, modyfikując zmienne bezpośrednio za pomocą parametrów funkcji. To wyzwanie sprawdzi, czy rozumiesz, jak symbol & pozwala funkcjom pracować na oryginalnych zmiennych zamiast na ich kopiach.
Podane zostaną następujące dane wejściowe:
- Liczba całkowita
value1reprezentująca pierwszą liczbę - Liczba całkowita
value2reprezentująca drugą liczbę - Liczba całkowita
value3reprezentująca trzecią liczbę
Twój program powinien:
- Utworzyć funkcję o nazwie
tripleValues, która przyjmuje trzy parametry typu całkowitego przez referencję - Wewnątrz funkcji pomnożyć każdy parametr przez 3
- W funkcji main odczytać trzy wartości wejściowe i zapisać je w zmiennych
- Wypisać oryginalne wartości przed wywołaniem funkcji
- Wywołać funkcję
tripleValuesz użyciem trzech zmiennych - Wypisać zmodyfikowane wartości po wywołaniu funkcji, aby pokazać, że zostały zmienione
Użyj dokładnie następującego formatu wyjściowego:
Przed wywołaniem funkcji:
Original values: [value1] [value2] [value3]Po wywołaniu funkcji:
Tripled values: [new_value1] [new_value2] [new_value3]Sygnatura funkcji powinna używać symbolu & po typie każdego parametru, aby wskazać przekazywanie przez referencję: void tripleValues(int& a, int& b, int& c). Dzięki temu funkcja może bezpośrednio modyfikować przekazane do niej oryginalne zmienne, demonstrując kluczową różnicę między przekazywaniem przez wartość a przekazywaniem przez referencję. Zmienne w funkcji main zostaną trwale zmienione po wywołaniu funkcji, co dowodzi, że funkcja działała na oryginalnych lokalizacjach pamięci, a nie na kopiach.
Spróbuj swoich sił
#include <iostream>
using namespace std;
// TODO: Utwórz tutaj funkcję tripleValues
int main() {
// Wczytaj wartości wejściowe
int value1, value2, value3;
cin >> value1 >> value2 >> value3;
// Wyświetl pierwotne wartości
cout << "Original values: " << value1 << " " << value2 << " " << value3 << endl;
// TODO: Wywołaj tutaj funkcję tripleValues
// Wyświetl zmodyfikowane wartości
cout << "Tripled values: " << value1 << " " << value2 << " " << value3 << endl;
return 0;
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Wskaźniki i pamięć
Czym jest wskaźnik?Operator pobrania adresuOperator dereferencjiWskaźniki zeroweWskaźniki i tabliceDynamiczne zarządzanie pamięcią za pomocą „new”Zwalnianie pamięci za pomocą „delete”Podsumowanie — ćwiczenia ze wskaźnikami4Mapy (pary klucz–wartość)
Poznajemy std::mapTworzenie mapyOdczytywanie i modyfikowanie wartościSprawdzanie kluczyUsuwanie parIterowanie po mapiePodsumowanie – częstość występowania słów7Zaawansowane funkcje
Przekazywanie przez referencjęWprowadzenie do wyrażeń lambdaWyrażenia lambda z parametramiWyrażenia lambda z wartościami zwracanymiWprowadzenie do rekurencjiRekurencyjny silniaSortowanie za pomocą lambda2Wektory (tablice dynamiczne)
Wprowadzenie do std::vectorTworzenie wektoraDodawanie elementówDostęp do elementówRozmiar wektoraIterowanie za pomocą pętli forPętla for oparta na zakresieUsuwanie elementówPodsumowanie — operacje na wektorach5Projekt: Narzędzie do zarządzania zapasami
Konfiguracja projektuDodawanie i aktualizowanie produktów3Projekt: narzędzie do listy zadań
Przegląd projektuDodawanie zadaniaPoćwicz samodzielnie: Kompilator C++ online