Kiekviena C programa yra funkcijų rinkinys. Sužinokite viską apie šias naudingas daugkartinio naudojimo kodo dalis, nuo jų apibrėžties iki to, ką reiškia tuštuma.
Galbūt apžvelgėte pagrindinę C sintaksę su paprastais pavyzdžiais ir dabar galvojate, kaip kurti didesnes realaus pasaulio programas. Pirmiausia norėsite suskirstyti kodą į efektyvias dalis, kuo mažiau pasikartojant. C kalboje, kaip ir daugeliu kalbų, atsakymas į jūsų problemas yra funkcija.
Funkcijų kūrimas ir naudojimas programoje C yra nesudėtingas ir suteikia daug naudos. Funkcijos leidžia suskaidyti sudėtingas programas į mažesnes dalis. Jie suteikia galimybę pakartotinai naudoti tiek pradinėje programoje, tiek susijusiose bibliotekose ar kitose atskirose programose.
Norėdami pradėti, turėsite sužinoti apie funkcijų deklaracijas, prototipus, parametrus ir grąžinimo sakinius.
Kas yra C funkcijos?
C programavimo srityje, funkcija yra pavadinta kodo dalis, kuri atlieka ką nors, kai to prašote. Tai padeda sutvarkyti kodą ir leidžia kelis kartus atlikti tą patį veiksmą nesikartojant.
Paprasčiausias pavyzdys yra tas, kurį jau naudojote: funkcija main (). Pagrindinė funkcija yra ypač ypatinga, nes ji veikia kaip pagrindinis bet kurios C programos įėjimo taškas. Taip pat galite naudoti bibliotekos funkcijas, kurias jau parašė kažkas kitas, arba galite parašyti savo vartotojo nustatytas funkcijas.
Funkcijos: deklaravimas, apibrėžimas ir iškvietimas
Šie trys aspektai yra esminiai naudojant funkcijas.
Funkcijos deklaracija
Tai suteikia informacijos apie funkcijos pavadinimą, grąžinimo tipą ir parametrus, leidžiančius ją naudoti prieš visą jos apibrėžimą. Jis taip pat vadinamas funkcijos prototipu. Toliau pateikiama tokia paprasta sintaksė:
return_type function_name(parameters);
Kur:
- grąžinimo_tipas yra reikšmės, kurią funkcija grąžina, duomenų tipas. Tai gali būti bet koks tinkamas C duomenų tipas arba tuštuma jei funkcija negrąžina reikšmės.
- funkcijos_pavadinimas yra pavadinimas, kurį suteikiate funkcijai. Naudosite tai norėdami iškviesti funkciją vėliau.
- parametrus yra įvesties parametrų, kuriuos funkcija priima, jei tokių yra, sąrašas. Kiekvieną parametrą sudaro duomenų tipas, po kurio nurodomas kableliais atskirtas parametro pavadinimas.
Pavyzdžiui, čia yra paprasta funkcijos deklaracija:
intadd(int a, int b);
Funkcijos apibrėžimas
Kai iškviečiate funkciją, ji paleidžia kodą, nurodytą jos apibrėžime. Tai apima funkcijos pavadinimą, grąžinimo tipą, parametrų sąrašą ir teiginius, apibrėžiančius jos veikimą. Štai sintaksė:
return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}
Išskaidykime sintaksės dalis:
Funkcinis kūnas: tai kodo blokas, įtrauktas į riestinius skliaustus {}. Jame yra instrukcijos, apibrėžiančios, ką funkcija daro, kai ji iškviečiama.
Grąžinimo pareiškimas: jei funkcijos grąžinimo tipas yra kitoks nei tuštuma, grąžinti pareiškimas siunčia reikšmę atgal skambinančiajam. Ši reikšmė turi atitikti nurodytą grąžinimo tipą.
Štai paprastas funkcijos apibrėžimo pavyzdys:
intadd(int a, int b){
int sum = a + b;
return sum;
}
Funkcijos skambutis
Kaip ir gaminant maistą, galite turėti receptą (funkcijos apibrėžimą) ir kai kuriuos ingredientus (argumentus), bet vis tiek turite vadovautis instrukcijomis, kad gautumėte rezultatą. Funkcijos iškvietimas paleis funkciją su nurodytais argumentais; čia yra sintaksė:
return_type result = function_name(arguments);
argumentai: tai reikšmės arba išraiškos, kurias perduodate funkcijai kaip įvestis. Kiekvieną argumentą atskirkite kableliu. Argumentų skaičius, tvarka ir duomenų tipai turi atitikti funkcijos parametrų sąrašą.
rezultatas: jei funkcijos grąžinimo tipas yra kitoks nei tuštuma, galite užfiksuoti grąžintą reikšmę naudodami atitinkamo duomenų tipo kintamąjį.
Štai funkcijos iškvietimo pavyzdys:
#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;
}
Atlikdami šiuos tris veiksmus – funkcijos deklaravimą, jos įgyvendinimą ir iškvietimą su tinkamais argumentais – galite efektyviai naudoti funkcijas įvairioms užduotims atlikti programa.
Funkcijų parametrai ir grąžinimo reikšmės
Parametrai yra funkcijos deklaracijoje arba apibrėžime deklaruoti kintamieji, kurie veikia kaip reikšmių, perduodamų funkcijai, kai jie iškviečiami. Jie leidžia perduoti duomenis į funkciją, kad ji galėtų dirbti su šiais duomenimis ir jais manipuliuoti. Grąžinamos reikšmės yra reikšmės, kurias funkcija sukuria ir siunčia atgal skambinančiajam.
Yra du parametrų perdavimo būdai.
Pravažiuokite vertę
Taikant šį metodą, funkcijos iškvietimas nukopijuoja tikrojo argumento reikšmę į funkcijos parametrą. Funkcijos parametro pakeitimai neturi įtakos pradiniam argumentui.
Pavyzdžiui:
#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;
}
- Kvadratinės funkcijos parametras yra sveikasis skaičius, nr.
- Kvadrato funkcija apskaičiuoja skaičiaus kvadratą, atnaujina jo reikšmę ir grąžina šią naują reikšmę.
- Pagrindinė funkcija deklaruoja sveikąjį kintamąjį, x, ir priskiria jam 5 reikšmę.
- Tada ji iškviečia kvadratinę funkciją, perduodama jai x reikšmę. Jis priskiria rezultatą antrajam kintamajam, y.
- Po funkcijos iškvietimo main atspausdina x ir y reikšmes. X reikšmė išlieka ta pati, nes kvadrato viduje esančio parametro num pakeitimas neturi įtakos pradiniam x.
Praeiti pro nuorodą
Naudodamiesi šiuo metodu, funkcijai perduodate reikšmės atminties adresą (rodiklį). Funkcijos viduje atlikti parametro pakeitimai turi įtakos pradinei vertei už jos ribų.
Rodyklės, įskaitant jų naudojimą kaip parametrus, yra vienas iš aspektų C, kurios skiriasi nuo tokios kalbos kaip 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 kvadratas funkcija paima sveikojo skaičiaus žymeklį (int *) parametras, nr. Tai negrąžina vertės.
- Kvadrato funkcija apskaičiuoja reikšmės kvadratą nr yra ir atnaujinama ši reikšmė naudojant žymeklio nuorodos operatorių, *.
- The pagrindinis funkcija deklaruoja sveikąjį kintamąjį, x, ir priskiria jam reikšmę 5.
- Tada jis vadina kvadratas funkcija su žymekliu į x naudojant operatoriaus adresą: &x.
- Po funkcijos iškvietimo main atspausdina reikšmę x, kuris yra dabar 25 nuo pakeitimų į *nr viduje kvadratas funkcija turi įtakos originalui x.
Apibendrinant galima pasakyti, kad pagrindinis skirtumas tarp dviejų metodų yra tai, kaip parametro pakeitimai funkcijos viduje veikia pradinę vertę už jos ribų. Pass by value sukuria kopiją, o leidimas pagal nuorodą (rodiklį) leidžia tiesiogiai manipuliuoti pradine verte.
Kitos kalbos dažnai turi C rodyklių atitikmenį, tačiau paprastai jos veikia aukštesniu lygiu. Vienas pavyzdys yra C# palaiko išorinius kintamuosius.
Tuščios funkcijos
C programavimo tuščiosios funkcijos yra funkcijos, kurios negrąžina reikšmės. Naudokite juos veiksmams ar užduotims atlikti be rezultato. Jie gali keisti savo parametrus naudodamiesi nuoroda, bet neprivalo.
Štai tuščiosios funkcijos pavyzdys:
#include
// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}intmain(){
// Call the void function, output: "Hello, MUO!"
greet();
return0;
}
Tuščiosios funkcijos yra naudingos atliekant veiksmus, spausdinant pranešimus, keičiant duomenis arba atliekant užduotis nereikalaujant grąžinamos reikšmės.
Ištirkite C programavimo funkcijas
Praktika kuriant funkcijas pagerina jūsų supratimą ir taikymą C programavimo srityje. Be to, tai pagerina kodo skaitomumą ir palengvina priežiūrą. Pasinerkite į įvairias funkcijų programas, kad atskleistumėte jų pranašumus.
Kai įvaldysite C funkcijų pagrindus ir norite mesti sau iššūkį, apsvarstykite galimybę pasinerti į rekursiją.