Przyjmowanie argumentów przez wartość i referencję w języku C

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.

 

 

Scroll to Top