wleci
O mnieProjektyBlogKontakt
Kontakt
Wróć do bloga
ReferencjeC++Pamięć

Etap 5: Referencje i referencje jako parametry funkcji

Zrozumienie mechanizmu referencji w C++: jak działają aliasy zmiennych i dlaczego są kluczowe w wydajnym przekazywaniu argumentów.

11 lutego 20263 min czytania
Udostępnij:

Referencje w C++: Potężne narzędzie programisty

Referencja to w uproszczeniu alias lub „druga nazwa” dla już istniejącej zmiennej. W przeciwieństwie do wskaźników (które przechowują adres), referencja zachowuje się dokładnie tak samo jak zmienna, do której się odnosi, ale nie tworzy jej kopii w pamięci. Na Twoim kolokwium to absolutna podstawa wydajnego programowania.


1. Podstawowa składnia i zasady

Referencję deklarujemy za pomocą operatora & umieszczonego przy typie danych.

cpp
int oryginal = 10; int &ref = oryginal; // ref jest teraz aliasem dla oryginal ref = 20; // Zmienia wartość oryginal na 20 std::cout << oryginal; // Wypisze 20

Złote zasady referencji:

  1. Musi być zainicjalizowana: Nie możesz napisać int &ref; bez przypisania jej do zmiennej.
  2. Nie może być „pusta”: Referencja zawsze musi wskazywać na poprawny obiekt (brak odpowiednika nullptr).
  3. Nieprzesuwalność: Raz przypisana referencja do końca swojego życia wskazuje na tę samą zmienną. Nie można jej „przełączyć” na inny obiekt.

2. Referencja jako parametr funkcji

To najważniejsze zastosowanie referencji na kolokwiach. Przekazywanie przez referencję rozwiązuje dwa główne problemy:

A. Wydajność (brak kopiowania)

Jeśli przekazujesz do funkcji duży obiekt (np. bardzo długi napis std::string lub dużą strukturę), przekazanie przez wartość zmusza komputer do zrobienia kopii całego obiektu. Referencja przesyła tylko „dostęp” do oryginału.

B. Modyfikacja argumentów

Funkcja domyślnie operuje na kopiach. Jeśli chcesz, aby funkcja zmieniła zmienną zadeklarowaną w main, musisz użyć referencji.

cpp
void dodajVat(double &cena) { cena *= 1.23; } int main() { double produkt = 100.0; dodajVat(produkt); // produkt wynosi teraz 123.0 }

3. Referencja do stałej (const &)

Często chcemy skorzystać z wydajności referencji (brak kopiowania), ale jednocześnie zagwarantować, że funkcja nie zmieni naszej zmiennej. Używamy wtedy const.

cpp
void wyswietlWielkiTekst(const std::string &tekst) { // tekst[0] = 'A'; // BŁĄD KOMPILACJI - nie można modyfikować const std::cout << tekst; }

Wskazówka na kolokwium: Jeśli funkcja ma tylko „czytać” dane z dużego obiektu, zawsze używaj const &.


4. Porównanie: Wartość vs Referencja

CechaPrzez wartośćPrzez referencję (&)
KopiaTak, tworzona jest nowa zmiennaNie, to tylko alias
Modyfikacja oryginałuNieTak
SzybkośćWolniejsza dla dużych danychZawsze szybka
Składnia wywołaniafunc(x)func(x) (identycznie)

Typowe błędy na kolokwium

  1. Zwracanie referencji do zmiennej lokalnej: To krytyczny błąd. Zmienna lokalna znika po zakończeniu funkcji, więc referencja do niej prowadziłaby do „pustki” (ang. dangling reference).

    cpp
    int& zle() { int x = 10; return x; // BŁĄD! x przestanie istnieć }
  2. Mylenie & w deklaracji z & jako operatorem adresu:

    • int &r = x; (deklaracja referencji)
    • cout << &x; (pobranie adresu zmiennej - to co innego!)
  3. Brak & w pętlach for: Przy operowaniu na tablicach obiektów, użycie for (auto &element : tablica) zapobiega niepotrzebnemu kopiowaniu każdego elementu przy każdej iteracji.

Może Cię zainteresować

C++Pamięć

Dynamiczna Alokacja Pamięci w C++: Jak budować i burzyć w RAMie

Zrozum operator new i delete. Wyjaśniamy różnicę między stosem a stertą, jak zarządzać pamięcią i unikać wycieków pamięci.

4 min czytania
C++Programowanie

Wskaźniki w C++: Operator Adresu i Dereferencji dla Każdego

Boisz się wskaźników? Spokojnie! W tym przewodniku krok po kroku wyjaśniamy, jak działają adresy pamięci, operator & oraz gwiazdka *.

4 min czytania
WskaźnikiPamięć

Etap 11: Arytmetyka wskaźników w C++

Zrozumienie, jak C++ operuje na adresach pamięci. Dowiedz się, dlaczego ptr++ to coś więcej niż dodanie jedynki.

3 min czytania
Wróć do bloga
wleci.pl

Full-stack Developer

Tworzę nowoczesne aplikacje webowe z pasją do czystego kodu i dobrego designu.

[email protected]
Polska

Nawigacja

  • Start
  • O mnie
  • Projekty
  • Blog
  • Kontakt

Usługi

  • Aplikacje webowe
  • Strony internetowe
  • API & Backend
  • Konsultacje

Technologie

  • React / Next.js
  • TypeScript
  • Node.js
  • PostgreSQL

Social

© 2026 wleci.pl. Wszelkie prawa zastrzeżone.

Polityka prywatności•Regulamin

Zrobione z w Polsce