Hvert C-program er en samling funktioner. Find ud af alt om disse nyttige genanvendelige bidder af kode, fra hvordan du definerer dem til hvad tomhed betyder.
Du har muligvis dækket grundlæggende C-syntaks med enkle eksempler, og du spekulerer nu på, hvordan du skal gå til at skabe større programmer i den virkelige verden. Til at begynde med vil du organisere din kode i effektive dele med et minimum af gentagelser. I C, som i de fleste sprog, er svaret på dine problemer funktionen.
Oprettelse og brug af funktioner i C er ligetil og giver mange fordele. Funktioner giver dig mulighed for at opdele komplekse programmer i mindre bidder. De giver genbrugelighed, både i dit originale program og i relaterede biblioteker eller andre separate programmer.
For at starte skal du lære om funktionserklæringer, prototyper, parametre og returudsagn.
Hvad er funktioner i C?
I C programmering, er en funktion en navngivet kodesektion, der gør noget, når du beder den om det. Det hjælper med at holde din kode organiseret og lader dig bruge den samme handling flere gange uden at gentage dig selv.
Det enkleste eksempel er et, du allerede har brugt: funktionen main(). Hovedfunktionen er særlig speciel, fordi den fungerer som hovedindgangspunktet for ethvert C-program. Du kan også bruge biblioteksfunktioner, som er dem, som en anden allerede har skrevet, eller du kan skrive dine egne brugerdefinerede funktioner.
Funktioner: Erklære, definere og kalde
Disse tre aspekter er grundlæggende for brugen af funktioner.
Funktionserklæring
Dette giver information om en funktions navn, returtype og parametre, hvilket muliggør brugen af den før dens fulde definition. Det kaldes også en funktionsprototype. Det følger denne simple syntaks:
return_type function_name(parameters);
Hvor:
- return_type er datatypen for den værdi, som funktionen returnerer. Det kan være enhver gyldig C-datatype eller ugyldig hvis funktionen ikke returnerer en værdi.
- funktionsnavn er det navn, du giver funktionen. Du skal bruge dette til at kalde funktionen senere.
- parametre er en liste over inputparametre, som funktionen accepterer, hvis nogen. Hver parameter består af en datatype efterfulgt af et parameternavn adskilt af kommaer.
For eksempel, her er en simpel funktionserklæring:
intadd(int a, int b);
Funktionsdefinition
Når du kalder en funktion, kører den den kode, der er angivet i dens definition. Det inkluderer funktionens navn, returtype, parameterliste og de udsagn, der definerer dens adfærd. Her er syntaksen:
return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}
Lad os nedbryde dele af syntaksen:
Funktions krop: Dette er kodeblokken omsluttet af krøllede seler {}. Den indeholder instruktionerne, der definerer, hvad funktionen gør, når den kaldes.
Returerklæring: Hvis funktionen har en anden returtype end ugyldig, det Vend tilbage erklæring sender en værdi tilbage til den, der ringer. Denne værdi skal matche den angivne returtype.
Her er et simpelt eksempel på en funktionsdefinition:
intadd(int a, int b){
int sum = a + b;
return sum;
}
Funktionsopkald
Ligesom madlavning har du muligvis en opskrift (funktionsdefinition) og nogle ingredienser (argumenter), men du skal stadig følge instruktionerne for at få et resultat. Et funktionskald vil køre funktionen med givne argumenter; her er syntaksen:
return_type result = function_name(arguments);
argumenter: Dette er de værdier eller udtryk, du sender til funktionen som input. Adskil hvert argument med et komma. Argumenternes antal, rækkefølge og datatyper skal matche funktionens parameterliste.
resultat: Hvis funktionen har en anden returtype end ugyldig, kan du fange den returnerede værdi ved hjælp af en variabel af den relevante datatype.
Her er et eksempel på et funktionskald:
#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;
}
Ved at følge disse tre trin - at erklære funktionen, levere dens implementering og kalde den med passende argumenter – du kan effektivt bruge funktioner til at udføre forskellige opgaver i din program.
Funktionsparametre og returværdier
Parametre er variabler, der er erklæret i funktionens erklæring eller definition, der fungerer som pladsholdere for de værdier, der sendes til funktionen, når de kaldes. De giver dig mulighed for at overføre data til funktionen, så den kan arbejde med og manipulere disse data. Returværdier er de værdier, en funktion producerer og sender tilbage til den, der ringer.
Der er to metoder til at overføre parametre.
Gå forbi Værdi
Med denne tilgang kopierer et funktionskald værdien af det faktiske argument ind i funktionens parameter. Ændringer i parameteren i funktionen påvirker ikke det oprindelige argument.
For eksempel:
#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;
}
- Kvadratfunktionen tager en heltalsparameter, num.
- Kvadratfunktionen beregner kvadratet af num, opdaterer dens værdi og returnerer denne nye værdi.
- Hovedfunktionen erklærer en heltalsvariabel, x, og tildeler den værdien 5.
- Den kalder derefter kvadratfunktionen og giver den værdien af x. Den tildeler resultatet til en anden variabel, y.
- Efter funktionskaldet udskriver main værdierne af x og y. x-værdien forbliver den samme, fordi ændring af num-parameteren i kvadratet ikke påvirker det oprindelige x.
Gå forbi reference
Ved at bruge denne fremgangsmåde videregiver du hukommelsesadressen (markøren) for en værdi til en funktion. Ændringer i parameteren inde i funktionen påvirker den oprindelige værdi uden for den.
Pointere, herunder deres brug som parametre, er et af aspekterne ved C, der gør det anderledes end et sprog som 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;
}
- Det firkant funktion tager en heltals pointer (int *) parameter, num. Det returnerer ikke en værdi.
- Kvadratfunktionen beregner kvadratet af værdien, der num indeholder og opdaterer denne værdi ved hjælp af pointer dereference operatoren, *.
- Det vigtigste funktion erklærer en heltalsvariabel, x, og tildeler den værdien 5.
- Det kalder så firkant funktion med en pointer til x ved hjælp af operatørens adresse: &x.
- Efter funktionskaldet udskriver main værdien af x, som er nu 25 siden ændringerne til *antal inde i firkant funktion påvirker originalen x.
Sammenfattende er den vigtigste forskel mellem de to metoder, hvordan ændringer af parameteren inde i funktionen påvirker den oprindelige værdi uden for den. Pass by value skaber en kopi, mens pass by reference (pointer) tillader direkte manipulation af den originale værdi.
Andre sprog har ofte en ækvivalent til C's pointer, men de fungerer generelt på et højere niveau. Et eksempel er C#'s understøttelse af ud-variabler.
Ugyldige funktioner
Ugyldige funktioner i C-programmering er funktioner, der ikke returnerer en værdi. Brug dem til at udføre handlinger eller opgaver uden at producere et resultat. De kan ændre deres parametre ved hjælp af pass by reference, men det behøver de ikke.
Her er et eksempel på en void-funktion:
#include
// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}intmain(){
// Call the void function, output: "Hello, MUO!"
greet();
return0;
}
Ugyldige funktioner er nyttige til at udføre handlinger, udskrive meddelelser, ændre data eller udføre opgaver uden at kræve en returværdi.
Udforsk funktioner i C-programmering
Øvelse gennem oprettelse af funktioner forbedrer din forståelse af forståelse og anvendelse i C-programmering. Desuden øger det kodelæsbarheden og nem vedligeholdelse. Dyk ned i forskellige anvendelser af funktioner for at låse op for deres fordele.
Når du har mestret det grundlæggende i C-funktioner og ønsker at udfordre dig selv, kan du overveje at dykke ned i rekursion.