Katra C programma ir funkciju kolekcija. Uzziniet visu par šīm noderīgajām atkārtoti lietojamām koda daļām, sākot ar to definēšanu un beidzot ar to, ko nozīmē tukšums.
Iespējams, esat aprakstījis pamata C sintaksi ar vienkāršiem piemēriem un tagad domājat, kā izveidot lielākas, reālas programmas. Sākumā vēlēsities sakārtot savu kodu efektīvās daļās ar minimālu atkārtojumu skaitu. C valodā, tāpat kā lielākajā daļā valodu, atbilde uz jūsu problēmām ir funkcija.
Funkciju izveide un izmantošana programmā C ir vienkārša un sniedz daudzas priekšrocības. Funkcijas ļauj sadalīt sarežģītas programmas mazākos gabalos. Tie nodrošina atkārtotu izmantošanu gan sākotnējā programmā, gan saistītajās bibliotēkās vai citās atsevišķās programmās.
Lai sāktu, jums būs jāapgūst funkciju deklarācijas, prototipi, parametri un atgriešanas priekšraksti.
Kas ir C funkcijas?
Programmēšanā C, funkcija ir nosaukta koda sadaļa, kas veic kaut ko, kad to lūdzat. Tas palīdz sakārtot jūsu kodu un ļauj veikt vienu un to pašu darbību vairākas reizes, neatkārtojoties.
Vienkāršākais piemērs ir tas, ko jau esat izmantojis: funkcija main (). Galvenā funkcija ir īpaši īpaša, jo tā darbojas kā galvenais ieejas punkts jebkurai C programmai. Varat arī izmantot bibliotēkas funkcijas, kuras kāds cits jau ir uzrakstījis, vai arī varat rakstīt savas lietotāja definētas funkcijas.
Funkcijas: deklarēšana, definēšana un izsaukšana
Šie trīs aspekti ir būtiski funkciju lietošanā.
Funkcijas deklarācija
Tas sniedz informāciju par funkcijas nosaukumu, atgriešanas veidu un parametriem, ļaujot to izmantot pirms tās pilnīgas definīcijas. To sauc arī par funkcijas prototipu. No tā izriet šī vienkāršā sintakse:
return_type function_name(parameters);
Kur:
- atgriešanas_veids ir tās vērtības datu tips, ko funkcija atgriež. Tas var būt jebkurš derīgs C datu tips vai nederīgs ja funkcija neatgriež vērtību.
- funkcijas_nosaukums ir nosaukums, ko piešķirat funkcijai. Jūs to izmantosit, lai vēlāk izsauktu funkciju.
- parametrus ir to ievades parametru saraksts, kurus funkcija pieņem, ja tādi ir. Katrs parametrs sastāv no datu veida, kam seko parametra nosaukums, kas atdalīts ar komatiem.
Piemēram, šeit ir vienkārša funkcijas deklarācija:
intadd(int a, int b);
Funkcijas definīcija
Kad izsaucat funkciju, tā palaiž tās definīcijā norādīto kodu. Tajā ir iekļauts funkcijas nosaukums, atgriešanas veids, parametru saraksts un priekšraksti, kas nosaka tās darbību. Šeit ir sintakse:
return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}
Sadalīsim sintakses daļas:
Funkciju korpuss: šis ir koda bloks, kas ietverts krokainajās iekavās {}. Tajā ir norādījumi, kas nosaka, ko funkcija dara, kad tā tiek izsaukta.
Atgriešanas paziņojums: ja funkcijai ir atgriešanas veids, kas nav nederīgs, atgriezties paziņojums nosūta vērtību atpakaļ zvanītājam. Šai vērtībai ir jāatbilst norādītajam atgriešanas veidam.
Šeit ir vienkāršs funkcijas definīcijas piemērs:
intadd(int a, int b){
int sum = a + b;
return sum;
}
Funkcijas izsaukums
Tāpat kā ēdiena gatavošanā, jums var būt recepte (funkcijas definīcija) un dažas sastāvdaļas (argumenti), taču jums joprojām ir jāievēro norādījumi, lai iegūtu rezultātu. Funkcijas izsaukums izpildīs funkciju ar norādītajiem argumentiem; šeit ir sintakse:
return_type result = function_name(arguments);
argumenti: šīs ir vērtības vai izteiksmes, kuras nododat funkcijai kā ievades. Atdaliet katru argumentu ar komatu. Argumentu skaitam, secībai un datu veidiem ir jāatbilst funkcijas parametru sarakstam.
rezultāts: ja funkcijai ir atgriešanas veids, kas nav nederīgs, varat tvert atgriezto vērtību, izmantojot atbilstošā datu tipa mainīgo.
Šeit ir funkcijas izsaukuma piemērs:
#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;
}
Veicot šīs trīs darbības - funkcijas deklarēšana, tās ieviešanas nodrošināšana un izsaukšana ar atbilstošiem argumentiem — varat efektīvi izmantot funkcijas dažādu uzdevumu veikšanai savā programma.
Funkciju parametri un atdeves vērtības
Parametri ir funkcijas deklarācijā vai definīcijā deklarēti mainīgie, kas darbojas kā vietturi vērtībām, kas tiek nodotas funkcijai izsaukšanas brīdī. Tie ļauj nodot datus funkcijai, ļaujot tai strādāt ar šiem datiem un manipulēt ar tiem. Atgriešanas vērtības ir vērtības, ko funkcija rada un nosūta atpakaļ zvanītājam.
Ir divas parametru nodošanas metodes.
Paiet garām vērtībai
Izmantojot šo pieeju, funkcijas izsaukums kopē faktiskā argumenta vērtību funkcijas parametrā. Funkcijas parametrā veiktās izmaiņas neietekmē sākotnējo argumentu.
Piemēram:
#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;
}
- Kvadrātveida funkcijai tiek izmantots vesels skaitlis, nr.
- Kvadrātveida funkcija aprēķina kvadrātu ar skaitli, atjaunina tā vērtību un atgriež šo jauno vērtību.
- Galvenā funkcija deklarē veselu mainīgo, x, un piešķir tai vērtību 5.
- Pēc tam tas izsauc kvadrātveida funkciju, nododot tai x vērtību. Tas piešķir rezultātu otrajam mainīgajam, y.
- Pēc funkcijas izsaukšanas galvenais izdrukā x un y vērtības. X vērtība paliek nemainīga, jo parametra num maiņa kvadrātā neietekmē sākotnējo x.
Iet pa atsauci
Izmantojot šo pieeju, jūs nododat funkcijai vērtības atmiņas adresi (rādītāju). Izmaiņas, kas veiktas parametrā funkcijas iekšpusē, ietekmē sākotnējo vērtību ārpus tās.
Rādītāji, tostarp to izmantošana kā parametri, ir viens no aspektiem C, kas to atšķir no tādas valodas kā 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 kvadrāts funkcija aizņem vesela skaitļa rādītāju (int *) parametrs, nr. Tas neatgriež vērtību.
- Kvadrātveida funkcija aprēķina kvadrātu vērtībai, kas nr satur un atjaunina šo vērtību, izmantojot rādītāja atsauces operatoru, *.
- The galvenais funkcija deklarē veselu mainīgo, x, un piešķir tai vērtību 5.
- Pēc tam tas izsauc kvadrāts funkcija ar rādītāju uz x izmantojot operatora adresi: &x.
- Pēc funkcijas izsaukšanas galvenais izdrukā vērtību x, kas ir tagad 25 kopš izmaiņām uz *nr iekšpusē kvadrāts funkcija ietekmē oriģinālu x.
Rezumējot, galvenā atšķirība starp abām metodēm ir tā, kā parametra izmaiņas funkcijā ietekmē sākotnējo vērtību ārpus tās. Nodošana garām vērtībai rada kopiju, savukārt nodošana pēc atsauces (rādītāja) ļauj tieši manipulēt ar sākotnējo vērtību.
Citām valodām bieži ir C norādītāju ekvivalents, taču tās parasti darbojas augstākā līmenī. Viens piemērs ir C# atbalsts mainīgajiem lielumiem.
Nederīgas funkcijas
Nederīgās funkcijas C programmēšanā ir funkcijas, kas neatgriež vērtību. Izmantojiet tos, lai veiktu darbības vai uzdevumus, nesniedzot rezultātu. Viņi var mainīt savus parametrus, izmantojot atsauci, bet tas nav jādara.
Šeit ir tukšas funkcijas piemērs:
#include
// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}intmain(){
// Call the void function, output: "Hello, MUO!"
greet();
return0;
}
Void funkcijas ir noderīgas darbību veikšanai, ziņojumu drukāšanai, datu modificēšanai vai uzdevumu veikšanai, neprasot atgriešanas vērtību.
Izpētiet C programmēšanas funkcijas
Praktizēšana, veidojot funkcijas, uzlabo jūsu izpratni par C programmēšanu un pielietojumu. Turklāt tas uzlabo koda lasāmību un atvieglo apkopi. Iedziļinieties dažādās funkciju lietojumprogrammās, lai atklātu to priekšrocības.
Kad esat apguvis C funkciju pamatus un vēlaties izaicināt sevi, apsveriet iespēju iedziļināties rekursijā.