Strona główna › Pytania INF.04 › Pytanie 359
INF.04 · pytanie #359
Przykład wywołania funkcji zamien w języku C++ może wyglądać w następujący sposób: <pre class="code-block">void zamien(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; }</pre>
- Azamien(*a, *b); // a, b - zmienne całkowite
- Bzamien(m, n); // m, n - zmienne całkowite
- Czamien(12, 34)
- Dzamien(&a, &b); // a, b - zmienne całkowite
Poprawna odpowiedź: D. zamien(&a, &b); // a, b - zmienne całkowite
Kliknij odpowiedź, którą uważasz za poprawną.
Wyjaśnienie
W tym przypadku wywołanie zamien(&a, &b); jest prawidłowe, bo funkcja zamien oczekuje wskaźników do zmiennych całkowitych, nie samych wartości tych zmiennych ani ich referencji. Przekazując adresy przez &a i &b, pozwalamy funkcji modyfikować oryginalne zmienne, a nie ich kopie. To jest fundament operacji wskaźnikowych w C++. Takie podejście umożliwia tzw. przekazywanie przez adres, które jest wykorzystywane wszędzie tam, gdzie trzeba w funkcji podmienić faktyczną zawartość zmiennej, a nie tylko jej kopię. W praktyce, na przykład podczas sortowania tablic czy zamiany miejscami dwóch wartości, korzysta się właśnie z takiego mechanizmu. Przekazywanie wskaźników jest bardzo uniwersalne – pozwala nie tylko zmieniać wartości, ale też np. przekazywać duże struktury bez kopiowania całej ich zawartości, co przyspiesza program i zmniejsza zużycie pamięci. Moim zdaniem warto też zauważyć, że użycie wskaźników jest jednym z filarów programowania na niskim poziomie w C i C++. Wielu początkujących programistów boi się wskaźników (nie wiem czemu, chyba przez te wszystkie historie o błędach i segfaultach), ale jak się już zrozumie, dlaczego i jak przekazywać adresy zmiennych, to potem dużo łatwiej korzystać z bardziej zaawansowanych mechanizmów np. dynamicznej alokacji pamięci czy tablic wskaźników. Standard C++ wręcz zaleca, by wszędzie tam, gdzie funkcja ma zmienić przekazane wartości, używać wskaźników lub referencji. W tym przypadku wskaźniki są idealne, bo dokładnie tego wymaga deklaracja funkcji. Dobrze jest też znać różnicę między przekazywaniem przez wartość, wskaźnik i referencję, bo to pozwala świadomie projektować interfejsy funkcji.
🤖 Wyjaśnienie generowane przez AI – weryfikuj w oficjalnych źródłach.