Hur ser ett funktionsanrop ut
Funktioner
Hur man använder funktioner
En funktion brukar ofta liknas nära ett "svart låda", var man stoppar in en alternativt flera värden, samt ut får man nya värden.
Att du ska f¨orst˚a antalet arguments koppling till hur programmet ¨ar skrivet och att f˚a intution f¨or sinusfunktioner och deras frekvens, amplitud och fasFunktioner existerar många viktigt till en överskådligare samt mer lättprogrammerat program.
Vi besitter redan använt standardfunktionerna printf() samt scanf(), samt ni äger sett enstaka tredjeplats standardfunktion, putchar(). Funktioner inom C tar emot värden inom parenteser (jfr. printf("hejdu")), samt antar själva värdet dem returnerar.
Den sista satsen kunna låta klurig, dock oss bör försöka förklara sålunda utmärkt oss kan.
Tänk dig för att oss besitter ett funktion likt heter summera().
Hur man använder funktioner(Om namngivningen vid funktioner: identisk regler gäller likt på grund av variabler.) Den tar emot numeriskt värde värden, numeriskt värde heltal. Våran funktion adderar dessa numeriskt värde heltal, samt returnerar summan. således på denna plats skulle anropet mot denna funktion titta ut:
int summa;
summa = summera(4, 8);
//nu besitter variabeln summa värdet 12
Eftersom ni redan visste hur funktionsanrop sker, då ni äger använt både printf() samt scanf() sen tidigare, således plats den angripen inget nytt.
Nytt existerar däremot hur oss använde funktionen vilket en värde, då oss tilldelade variabeln summa en värde. Detta innebär ett massiv flexibilitet tillsammans funktioner, för att dem kunna användas noggrann vilket en värde. Betänk nästa exempel.
if (summera(tal1, tal2) < 10) {
printf("Summan från talen existerar %i\n", summera(tal1, tal2));
}
Här kollar oss inledningsvis, returnerar funktionen en värde beneath tio?
angående den fullfölja detta, sålunda skriver oss ut vilket till värde funktionen returnerade.
Vilka gör det?eftersom funktionen returnerar en heltal, använder oss %i tillsammans printf() på grund av för att nedteckna ut värdet. Återigen visar oss denna plats hur funktioner är kapabel användas liksom dem värden dem returnerar.
Hur man skapar funktioner
Detta möjligen hittills äger varit ett tråkig sektion för att studera, eftersom ni ej kunnat testa.
ni besitter ju trots allt ej funktionen oss använder. idag existerar detta dags för att visa hur man fullfölja funktioner.
Funktioner är mycket viktigt för ett överskådligare och mer lättprogrammerat programdenna plats kommer en modell tillsammans föregående funktion, fast tillsammans koden inom sin helhet.
#include <stdio.h>
int summera(int a, int b) {
return a + b;
}
int main() {
int talett, int taltva;
printf("Skriv in tva heltal, sa skriver jag ut summan!\n");
printf("Tal 1: ");
scanf("%i", &talett);
printf("Tal 2: ");
scanf("%i", &taltva);
printf("Summan ar: %i\n", summera(talett, taltva));
return 0;
}
I main() existerar detta faktiskt ej således många nytt, oss initierar numeriskt värde heltalsvariabler, oss skriver ut lite skrivelse, oss läser in värden mot dem båda variablerna.
Sen kommer detta nya: då oss skriver ut sista texten anropar oss även funktionen summera(). Anropet ser ut noggrann likt oss lärt oss.
Det intressanta inom detta kodexempel existerar förstås själva funktionen summera(), samt ej anropet mot den. Definitionen från funktioner ser ut liksom inom detta modell, samt ni känner nog igen flera delar från detta ifrån våran main()-funktion.
inledande raden, int summera(int a, int b) { säger flera saker.
inledningsvis samt främst, funktionen existerar från heltalstyp (int) samt den heter summera. Sedan inom parentes anges hur flera argument den tar, samt från vilken sort, samt vilket dem bör varma inom funktionen. inom vårt fall tar den numeriskt värde argument, båda från heltalstyp, samt dem bör varma a samt b.
Nästa rad, vilket även existerar enda raden inom funktionen, returnerar en värde.
detta värde vilket returneras blir "funktionens värde". inom detta fall existerar detta från heltalstyp, eftersom funktionen existerar från heltalstyp. Värdet likt returneras existerar summan från våra numeriskt värde argument, a samt b. då ett return-instruktion körs inom ett funktion, avslutas körningen från funktionen. bör något utföras inuti ett funktion bör detta ske innan return sker.
Detta existerar alltså all magi på baksidan enstaka simpel funktion!
vilket ni idag även förmå utläsa, existerar alltså main() från heltalstyp, tar ej emot några argument (än inom varenda fall, den kan utföra detta angående man vill), samt den returnerar 0 dit den anropades. liksom oss berättade inom sektion 1 existerar detta systemet såsom anropar main(), samt systemet tolkar nollan vilket för att programmet avslutades utan fel.
Varning: variabler tillsammans tillsammans med funktioner är kapabel artikel krångligt, ifall man ej känner mot vad likt kallas scope vid engelska.
varenda variabel äger alltså en scope, inom vilket den existerar. då körningen från programmet går utanför detta scope kommer variabeln för att tas försvunnen. Detta existerar viktigt för att hålla koll vid. ett variabels scope existerar oftast funktionen den existerar initialiserad inom.
Den svarta ifyllda pilen motsvarar ett synkront funktionsanrop, tdetta innebär för att, inom förra exemplet, känner ej våran summera()-funktion mot variablerna talett samt taltva. Skulle man försöka anlända åt dem inom summera()-funktionen skulle man ett fåtal en fel.
vid identisk sätt går detta ej för att komma åt variablerna a alternativt b inom main()-funktionen, på grund av sålunda fort summera() äger körts tydligt existerar dessa variabler borttagna. Detta plats alltså anledningen för att summera ej kunde summera talett samt taltva egen, utan oss plats tvugna för att vandra via a samt b.
Funktioner såsom ej returnerar någonting
Alla funktioner vilket existerar från typen int, char, double alternativt någon från dem andra typerna oss listar inom sektion 2ska returnera en värde.
Ett funktionsanrop Så här ser ett funktionsanrop utdetta finns däremot en undantag, den mystiska typen void. Funktioner från denna typ får inte returnera värden, samt angående funktionen existerar från denna typ behöver man ej ens äga tillsammans ett return-rad. Man kunna ifall man behöver äga enstaka tom return, utan något värde, dock man måste ej. mot vilken nytta existerar då dessa funktioner?
förmå man fråga sig. Jo, självklart enstaka hel sektion, angående man besitter fantasi. dock desto viktigare kommer detta bli sen, då oss kommer in vid pekare. Dock önskar oss vandra in vid dessa funktioner ändå idag, till för att äga detta gjort.
#include <stdio.h>
void skriv_ut_tal(int a) {
printf("Argumentet jag fick var: %i\n", a);
}
int main() {
skriv_ut_tal(34);
return 0;
}
Detta måste artikel våran kortaste main()-funktion någonsin!
Allt den fullfölja existerar för att anropa vår alldeles egna utskriftsfunktion, samt sen slutföra. Vår utskriftsfunktion fullfölja inget annat än för att notera ut talet den får liksom argument.
Här kommer en mer avancerat modell vid void-funktion. Den tar emot ett sträng såsom argument, samt skriver ut den. Notera för att detta schema inte någonsin anropar printf().
denna plats kommer eventuellt lite nytt, därför håll inom dig!
#include <stdio.h>
void skriv_ut_strang(char str[]) {
int i;
i = 0;
while (str[i] != '\0') {
putchar(str[i]);
i++;
}
putchar('\n');
}
int main() {
char namn[30];
printf("Vad heter du?
");
gets(namn);
skriv_ut_strang(namn);
return 0;
}
Och, vilket vanligt kommer jag börja förklara main()-funktionen, eftersom detta även existerar var exekveringen från koden börjar. Initialiseringen från vår sträng bör ej artikel främmande, ifall ni äger läst sektion 8.
ej heller bör printf() artikel något nytt nära detta på denna plats laget. nästa rad existerar däremot intressant. Den läser in enstaka sträng mot våran array. denna plats finns enstaka små sak för att påpeka, skriv ej in en värde längre än 29 indikator (arrayen existerar 30 poster utdragen, den sista behövs till nulltecknet såsom avslutar ett sträng).
gets() står på grund av get string, alltså plocka upp eller ta enstaka sträng (från användaren). Denna lagras sedan inom arrayen såsom existerar argument mot funktionen.
Varning: Notera utebliven användning från scanf() till för att plocka upp eller ta strängen! Självklart går detta för att nyttja scanf() till detta, dock den klipper från strängen nära inledande mellanrum, vilket ej ständigt existerar vad man önskar.
Därför föredrar jag för att notera egna funktioner till för att studera in strängar, till full övervakning. Tills vidare duger gets(). existerar ni den experimenterande typen liksom önskar, efter detta avsnitt, testa för att notera enstaka funktion till för att studera in strängar är kapabel jag ge ledtråden för att getc() läser in en indikator.
ett objekt av klass X anropar klass Y’s metod doAför att nedteckna ett stränginläsande funktion anser dock jag existerar lite överkurs vid den på denna plats nivån, sålunda bli ej förkrossad angående ni ej får mot detta. :)
Sedan sker en anrop vid våran utskrivningsfunktion, samt efter detta avslutas programmet.
Vår utskrivningsfunktion kräver lite extra tilltanke på grund av för att förstå. ursprunglig samt främst tar den en argument såsom existerar ett array från char-värden.
Notera dem tomma hakparenteserna. för att detta går för att utföra beror vid för att oss skickar ett array vilket argument, samt vår nya array kommer automatiskt för att bli lika massiv likt vår gamla. (Faktum existerar för att våran nya array egentligen ej ens existerar enstaka färsk array, utan samma array! Bry dig ej på grund av många ifall detta än, mer angående detta kommer då oss går in vid pekare.)
Sedan deklarerar oss heltalet inom, samt tilldelar detta värde 0, inget konstigt tillsammans med detta.
nästa loop drar nytta från hur strängar fungerar inom C. sålunda länge bokstaven tillsammans siffra inom, inte existerar lika tillsammans med nulltecknet, därför bör den notera ut bokstaven samt öka vid inom. vid sålunda sätt kommer oss för att nedteckna ut varenda tecken inom strängen tills oss stöter vid nulltecknet (som betyder för att strängen besitter tagit slut).
då nulltecknet existerar upptäckt avslutas loopen, samt enstaka radbrytning skrivs ut.
Varning: återigen önskar oss påpeka: detta existerar viktigt för att null-tecknet kommer tillsammans med inom strängen! inom detta senaste schema framträda detta klart hur viktigt detta existerar, på grund av vilket sker angående detta ej finns tillsammans något nulltecken?
Då kommer inom behärska ett fåtal därför höga värden liksom typ 1627378... samt tecken nr 1627378 finns ej. Programmet kommer leta vid något plats inom minnet detta helt ej får gräva i.
Detta plats troligtvis den längsta delen hittills, dock ni besitter även fått känna till nästan allt ifall funktioner. Dessutom äger ni fått ett extralektion ifall strängar.
Ja, strängar inom C är svårt.