Vsak program C je zbirka funkcij. Izvedite vse o teh uporabnih delih kode za večkratno uporabo, od tega, kako jih definirati, do tega, kaj pomeni praznina.
Morda ste s preprostimi primeri obravnavali osnovno sintakso C in se zdaj sprašujete, kako se lotiti ustvarjanja večjih programov iz resničnega sveta. Za začetek boste želeli svojo kodo organizirati v učinkovite dele z minimalnim številom ponavljanj. V C, tako kot v večini jezikov, je odgovor na vaše težave funkcija.
Ustvarjanje in uporaba funkcij v C je preprosto in prinaša številne prednosti. Funkcije vam omogočajo, da kompleksne programe razdelite na manjše dele. Zagotavljajo možnost ponovne uporabe, tako znotraj vašega izvirnega programa kot v sorodnih knjižnicah ali drugih ločenih programih.
Za začetek se boste morali naučiti o deklaracijah funkcij, prototipih, parametrih in stavkih o vrnitvi.
Kaj so funkcije v C?
V programiranju C, je funkcija poimenovan del kode, ki naredi nekaj, ko to od nje zahtevate. Pomaga ohranjati vašo kodo organizirano in vam omogoča, da isto dejanje uporabite večkrat, ne da bi se ponavljali.
Najenostavnejši primer je tisti, ki ste ga že uporabljali: funkcija main(). Glavna funkcija je še posebej posebna, ker deluje kot glavna vstopna točka za kateri koli program C. Uporabite lahko tudi funkcije knjižnice, ki so tiste, ki jih je že napisal nekdo drug, ali pa napišete lastne uporabniško definirane funkcije.
Funkcije: deklariranje, definiranje in klicanje
Ti trije vidiki so temeljni za uporabo funkcij.
Deklaracija funkcije
To zagotavlja informacije o imenu funkcije, vrnjeni vrsti in parametrih, kar omogoča njeno uporabo pred popolno definicijo. Imenuje se tudi prototip funkcije. Sledi tej preprosti sintaksi:
return_type function_name(parameters);
Kje:
- return_type je podatkovni tip vrednosti, ki jo vrne funkcija. Lahko je kateri koli veljaven podatkovni tip C oz praznina če funkcija ne vrne vrednosti.
- ime_funkcije je ime, ki ga daste funkciji. To boste uporabili za poznejši klic funkcije.
- parametri je seznam vhodnih parametrov, ki jih funkcija sprejme, če obstajajo. Vsak parameter je sestavljen iz podatkovnega tipa, ki mu sledi ime parametra, ločeno z vejicami.
Na primer, tukaj je preprosta deklaracija funkcije:
intadd(int a, int b);
Definicija funkcije
Ko pokličete funkcijo, zažene kodo, določeno v njeni definiciji. Vključuje ime funkcije, vrnjeno vrsto, seznam parametrov in stavke, ki določajo njeno vedenje. Tukaj je sintaksa:
return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}
Razčlenimo dele sintakse:
Funkcijsko telo: To je blok kode v zavitih oklepajih {}. Vsebuje navodila, ki določajo, kaj funkcija počne ob klicu.
Izjava o vračilu: Če ima funkcija povratni tip, ki ni praznina, the vrnitev stavek pošlje vrednost nazaj klicatelju. Ta vrednost se mora ujemati s podanim povratnim tipom.
Tukaj je preprost primer definicije funkcije:
intadd(int a, int b){
int sum = a + b;
return sum;
}
Klic funkcije
Tako kot pri kuhanju imate lahko recept (opredelitev funkcije) in nekaj sestavin (argumente), vendar morate še vedno slediti navodilom, da dobite rezultat. Klic funkcije bo zagnal funkcijo z danimi argumenti; tukaj je sintaksa:
return_type result = function_name(arguments);
argumenti: To so vrednosti ali izrazi, ki jih posredujete funkciji kot vhodne podatke. Vsak argument ločite z vejico. Število, vrstni red in podatkovni tipi argumentov se morajo ujemati s seznamom parametrov funkcije.
rezultat: Če ima funkcija povratni tip, ki ni praznina, lahko zajamete vrnjeno vrednost z uporabo spremenljivke ustreznega podatkovnega tipa.
Tukaj je primer klica funkcije:
#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;
}
Če sledite tem trem korakom – deklarirate funkcijo, zagotovite njeno izvedbo in jo pokličete z ustreznimi argumenti—funkcije lahko učinkovito uporabljate za izvajanje različnih nalog v svojem program.
Funkcijski parametri in vrnjene vrednosti
Parametri so spremenljivke, deklarirane v deklaraciji ali definiciji funkcije, ki delujejo kot ograda za vrednosti, posredovane funkciji, ko jo pokličete. Omogočajo vam prenos podatkov v funkcijo, kar ji omogoča delo s temi podatki in njihovo manipulacijo. Povratne vrednosti so vrednosti, ki jih funkcija ustvari in pošlje nazaj klicatelju.
Obstajata dva načina podajanja parametrov.
Pass by Value
S tem pristopom klic funkcije kopira vrednost dejanskega argumenta v parameter funkcije. Spremembe parametra znotraj funkcije ne vplivajo na prvotni argument.
Na primer:
#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;
}
- Kvadratna funkcija sprejme celoštevilski parameter, št.
- Funkcija kvadrat izračuna kvadrat num, posodobi njegovo vrednost in vrne to novo vrednost.
- Glavna funkcija deklarira celoštevilsko spremenljivko, xin mu dodeli vrednost 5.
- Nato pokliče kvadratno funkcijo in ji posreduje vrednost x. Rezultat dodeli drugi spremenljivki, l.
- Po klicu funkcije main natisne vrednosti x in y. Vrednost x ostane enaka, ker sprememba parametra num znotraj kvadrata ne vpliva na prvotni x.
Pass by Reference
S tem pristopom posredujete pomnilniški naslov (kazalec) vrednosti funkciji. Spremembe parametra znotraj funkcije vplivajo na prvotno vrednost zunaj nje.
Kazalci, vključno z njihovo uporabo kot parametri, so eden od vidikov C, zaradi česar se razlikuje od jezika, kot je 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 kvadrat funkcija sprejme celoštevilski kazalec (int *) parameter, št. Ne vrne vrednosti.
- Funkcija kvadrat izračuna kvadrat vrednosti, ki št vsebuje in posodablja to vrednost z uporabo operatorja dereference kazalca, *.
- The glavni funkcija deklarira celoštevilsko spremenljivko, x, in mu dodeli vrednost 5.
- Nato pokliče kvadrat funkcija s kazalcem na x z uporabo naslova operaterja: &x.
- Po klicu funkcije main natisne vrednost x, ki je zdaj 25 od sprememb do *št znotraj kvadrat funkcija vpliva na izvirnik x.
Če povzamemo, ključna razlika med obema metodama je, kako spremembe parametra znotraj funkcije vplivajo na prvotno vrednost zunaj nje. Prenos po vrednosti ustvari kopijo, medtem ko prenos po sklicu (kazalec) omogoča neposredno manipulacijo izvirne vrednosti.
Drugi jeziki imajo pogosto enakovredne kazalce C-ja, vendar običajno delujejo na višji ravni. En primer je Podpora C# za izhodne spremenljivke.
Prazne funkcije
Prazne funkcije v programiranju C so funkcije, ki ne vrnejo vrednosti. Uporabite jih za izvajanje dejanj ali opravil brez rezultatov. Svoje parametre lahko spremenijo s prehodom po sklicevanju, ni pa jim treba.
Tukaj je primer funkcije void:
#include
// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}intmain(){
// Call the void function, output: "Hello, MUO!"
greet();
return0;
}
Voidne funkcije so uporabne za izvajanje dejanj, tiskanje sporočil, spreminjanje podatkov ali izvajanje nalog, ne da bi zahtevali vrnjeno vrednost.
Raziščite funkcije v programiranju C
Vadba z ustvarjanjem funkcij izboljša vaše razumevanje in uporabo v programiranju C. Poleg tega izboljša berljivost kode in enostavnost vzdrževanja. Potopite se v različne aplikacije funkcij, da odklenete njihove prednosti.
Ko obvladate osnove funkcij C in se želite preizkusiti, se poglobite v rekurzijo.