Każdy program w C jest zbiorem funkcji. Dowiedz się wszystkiego o tych przydatnych fragmentach kodu, które można ponownie wykorzystać, od sposobu ich definiowania po znaczenie void.

Być może omówiłeś już podstawową składnię języka C na prostych przykładach i teraz zastanawiasz się, jak zabrać się za tworzenie większych, realistycznych programów. Na początek warto uporządkować kod w wydajne części przy minimalnej liczbie powtórzeń. W C, jak w większości języków, odpowiedzią na Twoje problemy jest funkcja.

Tworzenie i używanie funkcji w C jest proste i niesie ze sobą wiele korzyści. Funkcje pozwalają podzielić złożone programy na mniejsze części. Zapewniają możliwość ponownego użycia, zarówno w ramach oryginalnego programu, jak i w powiązanych bibliotekach lub innych oddzielnych programach.

Na początek musisz poznać deklaracje funkcji, prototypy, parametry i instrukcje return.

Jakie są funkcje w C?

W programowaniu C, funkcja to nazwana sekcja kodu, która wykonuje coś, gdy ją o to poprosisz. Pomaga utrzymać porządek w kodzie i umożliwia wielokrotne wykonywanie tej samej akcji bez powtarzania się.

instagram viewer

Najprostszym przykładem jest ten, którego już używałeś: funkcja main(). Funkcja main jest szczególnie szczególna, ponieważ działa jako główny punkt wejścia dla dowolnego programu C. Możesz także używać funkcji bibliotecznych, czyli tych, które ktoś już napisał, lub możesz napisać własne funkcje zdefiniowane przez użytkownika.

Funkcje: deklarowanie, definiowanie i wywoływanie

Te trzy aspekty mają fundamentalne znaczenie dla korzystania z funkcji.

Deklaracja funkcji

Dostarcza informacji o nazwie funkcji, typie zwracanym i parametrach, umożliwiając jej użycie przed pełną definicją. Nazywa się go także prototypem funkcji. Jest to zgodne z prostą składnią:

return_type function_name(parameters);

Gdzie:

  • typ_powrotu to typ danych wartości zwracanej przez funkcję. Może to być dowolny prawidłowy typ danych C lub próżnia jeśli funkcja nie zwróci wartości.
  • nazwa_funkcji to nazwa, którą nadajesz funkcji. Użyjesz tego do późniejszego wywołania funkcji.
  • parametry to lista parametrów wejściowych, które funkcja akceptuje, jeśli takie istnieją. Każdy parametr składa się z typu danych, po którym następuje nazwa parametru oddzielona przecinkami.

Na przykład oto prosta deklaracja funkcji:

intadd(int a, int b);

Definicja funkcji

Kiedy wywołujesz funkcję, uruchamia ona kod określony w jej definicji. Zawiera nazwę funkcji, typ zwracany, listę parametrów i instrukcje definiujące jej zachowanie. Oto składnia:

return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}

Rozłóżmy części składni:

Ciało funkcji: To jest blok kodu ujęty w nawiasy klamrowe {}. Zawiera instrukcje definiujące, co robi funkcja po wywołaniu.

Oświadczenie zwrotne: Jeśli funkcja ma typ zwracany inny niż próżnia, powrót instrukcja wysyła wartość z powrotem do osoby wywołującej. Ta wartość powinna być zgodna z określonym typem zwracanym.

Oto prosty przykład definicji funkcji:

intadd(int a, int b){
int sum = a + b;
return sum;
}

Wywołanie funkcji

Podobnie jak w przypadku gotowania, możesz mieć przepis (definicję funkcji) i pewne składniki (argumenty), ale nadal musisz postępować zgodnie z instrukcjami, aby uzyskać wynik. Wywołanie funkcji uruchomi funkcję z podanymi argumentami; oto składnia:

return_type result = function_name(arguments);

argumenty: Są to wartości lub wyrażenia przekazywane do funkcji jako dane wejściowe. Oddziel każdy argument przecinkiem. Liczba, kolejność i typy danych argumentów powinny odpowiadać liście parametrów funkcji.

wynik: Jeśli funkcja ma typ zwracany inny niż próżnia, możesz przechwycić zwróconą wartość, używając zmiennej odpowiedniego typu danych.

Oto przykład wywołania funkcji:

#include

// Function prototype
intadd(int a, int b);

intmain(){
int x = 5, y = 3;

// Call the function and store the result in 'sum'
int sum = add(x, y);
printf("The sum of %d and %d is %d\n", x, y, sum);
return0;
}

// Function definition
intadd(int a, int b){
return a + b;
}

Wykonując te trzy kroki — deklarując funkcję, zapewniając jej implementację i wywołując ją z odpowiednimi argumentami — możesz efektywnie używać funkcji do wykonywania różnych zadań w swoim program.

Parametry funkcji i wartości zwracane

Parametry to zmienne zadeklarowane w deklaracji lub definicji funkcji, które pełnią funkcję obiektów zastępczych dla wartości przekazywanych do funkcji podczas jej wywoływania. Umożliwiają przekazywanie danych do funkcji, umożliwiając jej pracę z danymi i manipulowanie nimi. Wartości zwracane to wartości generowane przez funkcję i wysyłane z powrotem do osoby wywołującej.

Istnieją dwie metody przekazywania parametrów.

Przekaż wartość

Przy takim podejściu wywołanie funkcji kopiuje wartość rzeczywistego argumentu do parametru funkcji. Zmiany dokonane w parametrze w funkcji nie mają wpływu na oryginalny argument.

Na przykład:

#include

intsquare(int num){
num = num * num;
return num;
}

intmain(){
int x = 5;
int y = square(x);

// Output: x and y after function call: 5 25
printf("x and y after function call: %d %d\n", x, y);

return0;
}

  • Funkcja kwadratowa przyjmuje parametr całkowity, liczba.
  • Funkcja kwadratowa oblicza kwadrat liczby, aktualizuje jej wartość i zwraca nową wartość.
  • Funkcja main deklaruje zmienną całkowitą, Xi przypisuje mu wartość 5.
  • Następnie wywołuje funkcję kwadratową, przekazując jej wartość x. Przypisuje wynik do drugiej zmiennej, y.
  • Po wywołaniu funkcji main wypisuje wartości x i y. Wartość x pozostaje taka sama, ponieważ zmiana parametru num wewnątrz kwadratu nie wpływa na oryginalne x.

Przejdź przez odniesienie

Stosując to podejście, przekazujesz adres pamięci (wskaźnik) wartości do funkcji. Zmiany dokonane w parametrze wewnątrz funkcji wpływają na oryginalną wartość poza nią.

Wskaźniki, w tym ich użycie jako parametrów, są jednym z aspektów C, które odróżniają go od języka takiego jak Python.

#include

voidsquare(int *num){
*num = *num * *num;
}

intmain(){
int x = 5;
square(&x);

// Output: x after function call: 25
printf("x after function call: %d\n", x);
return0;
}

  • The kwadrat funkcja przyjmuje wskaźnik będący liczbą całkowitą (int *) parametr, liczba. Nie zwraca wartości.
  • Funkcja kwadratowa oblicza kwadrat wartości, która liczba zawiera i aktualizuje tę wartość za pomocą operatora dereferencji wskaźnika, *.
  • The główny funkcja deklaruje zmienną całkowitą, Xi przypisuje mu wartość 5.
  • Następnie wywołuje kwadrat funkcja ze wskaźnikiem do X za pomocą operatora adresu: &X.
  • Po wywołaniu funkcji main wypisuje wartość X, czyli teraz 25 od czasu zmian w *liczba w środku kwadrat funkcja ma wpływ na oryginał X.

Podsumowując, kluczową różnicą między tymi dwiema metodami jest to, jak zmiany parametru wewnątrz funkcji wpływają na pierwotną wartość poza nią. Przekazanie wartości tworzy kopię, natomiast przekazanie przez referencję (wskaźnik) umożliwia bezpośrednią manipulację oryginalną wartością.

Inne języki często mają odpowiednik wskaźników w języku C, ale generalnie działają na wyższym poziomie. Jednym z przykładów jest Obsługa zmiennych out w języku C#.

Funkcje puste

Funkcje puste w programowaniu C to funkcje, które nie zwracają wartości. Używaj ich do wykonywania czynności lub zadań bez uzyskania rezultatu. Mogą zmieniać swoje parametry za pomocą przekazania przez referencję, ale nie muszą.

Oto przykład funkcji void:

#include

// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}

intmain(){
// Call the void function, output: "Hello, MUO!"
greet();

return0;
}

Funkcje void są przydatne do wykonywania akcji, drukowania komunikatów, modyfikowania danych lub wykonywania zadań bez konieczności zwracania wartości.

Poznaj funkcje w programowaniu C

Ćwiczenie poprzez tworzenie funkcji zwiększa zrozumienie i zastosowanie w programowaniu C. Ponadto zwiększa czytelność kodu i łatwość konserwacji. Zanurz się w różnych zastosowaniach funkcji, aby odblokować ich zalety.

Kiedy opanujesz podstawy funkcji C i chcesz rzucić sobie wyzwanie, rozważ zagłębienie się w rekurencję.