W języku programowania C, argumenty mogą być przekazywane do funkcji na dwa główne sposoby: przez wartość i przez referencję. Przekazywanie przez wartość oznacza kopiowanie oryginalnej wartości argumentu, podczas gdy przekazywanie przez referencję pozwala funkcji na bezpośrednią pracę z oryginalnym argumentem poprzez jego adres. Rozróżnienie między tymi dwoma metodami jest kluczowe dla zrozumienia, jak manipulować danymi w funkcjach i jakie są skutki tych operacji.
Przekazywanie argumentów przez wartość
Gdy argument jest przekazywany do funkcji przez wartość, funkcja pracuje na kopii tego argumentu. Oznacza to, że zmiany dokonane na argumencie wewnątrz funkcji nie wpłyną na oryginalną zmienną używaną podczas wywołania funkcji.
Przykład:
#include <stdio.h>
// Definicja funkcji, która przyjmuje argument przez wartość
void addTen(int number) {
number += 10; // Zwiększenie wartości argumentu o 10
printf("Wartosc wewnatrz funkcji: %d\n", number);
}
int main() {
int number = 5;
addTen(number); // Wywołanie funkcji z przekazaniem zmiennej przez wartość
printf("Wartosc po wywolaniu funkcji: %d\n", number); // Wyświetlenie oryginalnej wartości
return 0;
}
W powyższym przykładzie, mimo że funkcja addTen
zmienia wartość przekazanego argumentu, oryginalna zmienna number
w funkcji main
pozostaje niezmieniona po wywołaniu funkcji.
Przekazywanie argumentów przez referencję
Przekazywanie przez referencję umożliwia funkcji bezpośrednie modyfikowanie wartości oryginalnej zmiennej. W języku C, odbywa się to przez przekazanie adresu zmiennej (użycie wskaźników).
Przykład:
#include <stdio.h>
// Definicja funkcji, która przyjmuje argument przez referencję (wskaźnik)
void modifyValue(int *numberPointer) {
*numberPointer += 10; // Zwiększenie wartości zmiennej, na którą wskazuje wskaźnik
printf("Wartosc wewnatrz funkcji: %d\n", *numberPointer);
}
int main() {
int number = 5;
modifyValue(&number); // Wywołanie funkcji z przekazaniem adresu zmiennej
printf("Wartosc po wywolaniu funkcji: %d\n", number); // Wyświetlenie zmodyfikowanej wartości
return 0;
}
W tym przykładzie, funkcja modifyValue
przyjmuje wskaźnik na zmienną i modyfikuje jej wartość bezpośrednio. Dzięki temu zmiany wprowadzone w funkcji są widoczne po jej wywołaniu w funkcji main
.
Podsumowanie
Rozumienie różnicy między przekazywaniem argumentów przez wartość a przez referencję jest kluczowe przy projektowaniu funkcji w języku C. Przekazywanie przez wartość jest użyteczne, gdy chcemy chronić oryginalną zmienną przed niechcianymi zmianami, natomiast przekazywanie przez referencję pozwala na efektywną manipulację wartościami zmiennych. Oba te podejścia mają swoje zastosowania i wybór między nimi zależy od konkretnego przypadku użycia i oczekiwanych rezultatów działania funkcji.