Sposoby przekazywania parametrów

Przekazywanie argumentów przez wartość

Najpopularniejszą metodą budowania funkcji jest przekazywanie argumentów przez wartość. Funkcja musi zawierać argumenty wraz z ich typami oddzielone przecinkami. Kiedy przekazujemy do funkcji jakąś zmienną, zostaje utworzona w pamięci jej kopia. Wszystko co dzieje się wewnątrz funkcji odbywa się tak na prawdę na kopii zmiennej przekazanej w argumencie poprzez wartość.

W takim wypadku konieczne staje się zwrócenie odpowiedniej wartości za pomocą return i przypisanie zwróconej wartości do odpowiednich zmiennych. Jeżeli funkcja nie zwróci żadnej wartości, wtedy jej wywołanie może stać się bezcelowe. Utworzona kopia zmiennej, nawet jeżeli zostanie zmodyfikowana, zostanie usunięta z pamięci po zakończeniu funkcji.

Podsumowując przekazywanie przez wartość:

  • zmienna przekazana do funkcji jest jej kopią
  • wszelkie operacje odbywają się na kopii, więc nie są widoczne poza blokiem funkcji
  • aby jakiekolwiek zmiany były widoczne poza ciałem funkcji, należy przypisać do odpowiednich zmiennych poza funkcją wartość zwracaną przez funkcję (return)
  • ponieważ funkcja może zwrócić tylko jedną wartość (return) – możliwe jest zmodyfikowanie tylko jednej zmiennej z poza funkcji

Przekazywanie argumentów przez wskaźnik

Przekazując argumenty przez wartość, funkcja może zwrócić tylko jeden parametr za pomocą return. Oznacza to, że możliwe jest zmodyfikowanie wartości tylko jednej zmiennej lokalnej występującej poza wywoływaną funkcją (tak jak w przykładzie wyżej). Co w przypadku gdy podczas wywołania jednej funkcji chcemy zmienić kilka zmiennych? – tutaj przydają się wskaźniki. Jest to najlepszy przykład na zobrazowanie tego – dlaczego wskaźniki są przydatne.

Podsumowując przekazywanie przez wskaźnik:

  • argumenty wskaźnikowe wskazują na zmienne z poza funkcji, więc wewnątrz funkcji nie są tworzone kopie
  • funkcja może zmodyfikować wiele zmiennych z poza funkcji (bez użycia return)
  • wskaźniki także przekazujemy przez wartość, wynika to z faktu że wskaźnik też jest typem zmiennej (zmienna wskaźnikowa)

przykład 1

Przekazywanie argumentów przez referencję:

Referencja występuje jedynie w języku C++. Wszystko odbywa się na takiej samej zasadzie jak w przypadku wskaźników. Sama referencja także bardzo przypomina wskaźniki. Ciężko jednoznacznie podać definicję referencji.

Przekazywanie argumentów przez referencję jest łatwiejsze, ponieważ nie trzeba operować na gwiazdkach i ampersandach. To jedyna różnica między referencją a wskaźnikami w argumentach funkcji. Przez to początkujący programiści często mylą lub wręcz nie wiedzą, z którego sposobu chcą skorzystać.

W funkcji tworzymy dowolną ilość argumentów wraz z typami. Nazwy argumentów poprzedzone są ampersandem (&). Zmienne wewnątrz funkcji nie są kopią, oznacza to że operując na zmiennych referencyjnych operujemy także na zmiennej oryginalnej z pod której wywołana została funkcja.

przykład 1

przykład 2

 

 

 

źródło