1 00:00:07,185 --> 00:00:09,540 [Powered by Google Translate] CHRIS GERBER: En funktion er en række trin i en 2 00:00:09,540 --> 00:00:12,000 større program, som normalt er beregnet til at blive kaldt 3 00:00:12,000 --> 00:00:14,440 flere gange og fra flere andre steder i 4 00:00:14,440 --> 00:00:15,720 programmet. 5 00:00:15,720 --> 00:00:18,480 Når du opretter en C-funktion, et af kravene er at 6 00:00:18,480 --> 00:00:21,050 angive en returværdi type. 7 00:00:21,050 --> 00:00:23,490 Det enkleste tilfælde er en situation, hvor den kaldende 8 00:00:23,490 --> 00:00:26,510 kode vedrører ikke resultatet af funktionen. 9 00:00:26,510 --> 00:00:28,530 Dette kan være tilfældet, når vi udskriver data til 10 00:00:28,530 --> 00:00:31,120 brugers display, som med printf. 11 00:00:31,120 --> 00:00:33,140 I dette tilfælde kan vi erklære en returværdi 12 00:00:33,140 --> 00:00:35,020 være af typen ugyldige. 13 00:00:35,020 --> 00:00:37,130 Brug ugyldig simpelthen fortæller compileren, at der ikke 14 00:00:37,130 --> 00:00:39,120 værdi vil blive returneret. 15 00:00:39,120 --> 00:00:40,530 Lad os se hvad det ligner. 16 00:00:40,530 --> 00:00:42,940 >> Lad os sige, at vi har en funktion kaldet say_hello at 17 00:00:42,940 --> 00:00:44,490 tager et argument. 18 00:00:44,490 --> 00:00:47,050 Vi passerer det en persons navn, og det vil vise en hilsen 19 00:00:47,050 --> 00:00:48,380 på skærmen. 20 00:00:48,380 --> 00:00:50,505 Navnet vil være af typen char *. 21 00:00:50,505 --> 00:00:53,080 Og vi vil specificere, som argument. 22 00:00:53,080 --> 00:00:55,970 Min ansøgning behøver ikke at vide, hvad der blev trykt, eller hvis det 23 00:00:55,970 --> 00:00:56,970 blev trykt. 24 00:00:56,970 --> 00:00:59,680 Så returværdien vil være af typen ugyldige. 25 00:00:59,680 --> 00:01:02,060 Denne funktion kan udskrive til skærmen med en kommando 26 00:01:02,060 --> 00:01:07,620 printf ("Hej,% s \ n 27 00:01:07,620 --> 00:01:12,100 ", Navn);. 28 00:01:12,100 --> 00:01:14,690 Hilsenen vil blive vist og kontrol vil blive væltet 29 00:01:14,690 --> 00:01:16,260 tilbage til den kaldende kode. 30 00:01:16,260 --> 00:01:19,370 Én ting at bemærke er, at når returværditype er ugyldig, 31 00:01:19,370 --> 00:01:20,790 du behøver ikke at indeholde et afkast 32 00:01:20,790 --> 00:01:22,300 erklæring i funktionen. 33 00:01:22,300 --> 00:01:25,270 Hvis du vælger at inkludere en, ikke omfatter en returværdi 34 00:01:25,270 --> 00:01:27,420 som et argument. 35 00:01:27,420 --> 00:01:29,380 >> I nogle tilfælde giver det mening at returnere en 36 00:01:29,380 --> 00:01:30,570 værdi fra en funktion. 37 00:01:30,570 --> 00:01:33,900 Lad os sige, at vi skulle skrive en funktion kaldet add_floats. 38 00:01:33,900 --> 00:01:36,160 Vi passerer det to argumenter, begge flåd, 39 00:01:36,160 --> 00:01:37,510 kaldet første og andet. 40 00:01:37,510 --> 00:01:40,520 Og det vil fortælle os, hvad summen af ​​disse flåd er. 41 00:01:40,520 --> 00:01:43,000 Vi ved, at hvis vi tilføjer to flydere sammen, bliver resultatet 42 00:01:43,000 --> 00:01:44,120 være en flyder. 43 00:01:44,120 --> 00:01:47,540 Da vælger vi et afkast type float. 44 00:01:47,540 --> 00:01:50,040 Denne funktion vil udføre denne beregning og vende tilbage 45 00:01:50,040 --> 00:01:52,260 værdierne i en erklæring som afkast 46 00:01:52,260 --> 00:01:54,770 1. + sekunder. 47 00:01:54,770 --> 00:01:57,300 Når styring overføres tilbage til den kaldende kode, 48 00:01:57,300 --> 00:02:00,030 resulterende værdi er nu tilgængelig for denne kode. 49 00:02:00,030 --> 00:02:04,250 Vi kan gemme denne værdi som så: float result = 50 00:02:04,250 --> 00:02:09,410 add_floats (3,14, 1,62 51 00:02:09,410 --> 00:02:11,290 ). 52 00:02:11,290 --> 00:02:15,200 Resultatet i dette tilfælde vil nu indeholde værdien 4,76. 53 00:02:15,200 --> 00:02:18,620 >> Som en påmindelse, er kommeværdier upræcis. 54 00:02:18,620 --> 00:02:21,250 Så hvis dette var en økonomisk beregning, ved hjælp af dollars og 55 00:02:21,250 --> 00:02:24,960 cents, kan vi måske overveje en præcis datatype såsom 56 00:02:24,960 --> 00:02:29,120 int og udføre beregningen i småpenge. 57 00:02:29,120 --> 00:02:31,270 >> En anden sag, hvor vi ønsker at returnere en værdi fra en 58 00:02:31,270 --> 00:02:33,980 Funktionen er, når vi ønsker at vide, om en funktion, var 59 00:02:33,980 --> 00:02:35,960 vellykket. 60 00:02:35,960 --> 00:02:39,190 Hvis det ikke lykkedes, kan vi også ønsker at vide, hvilken type 61 00:02:39,190 --> 00:02:41,250 fejlen opstod. 62 00:02:41,250 --> 00:02:43,647 Lad os sige, at vi forsøger at åbne en fil på disken for at tælle 63 00:02:43,647 --> 00:02:45,220 antallet af tegn i det. 64 00:02:45,220 --> 00:02:48,635 Hvis filen ikke kan åbnes, vi ønsker at være i stand til at stoppe op og 65 00:02:48,635 --> 00:02:50,910 fortælle brugeren om problemet. 66 00:02:50,910 --> 00:02:54,070 >> Vi ringer til vores funktion count_file_chars og det vil 67 00:02:54,070 --> 00:02:55,490 tage ét argument. 68 00:02:55,490 --> 00:02:57,420 Vi passerer i navnet på filen ved hjælp af en 69 00:02:57,420 --> 00:02:59,610 char * kaldet filnavn. 70 00:02:59,610 --> 00:03:03,050 Denne funktion kan se noget som dette. 71 00:03:03,050 --> 00:03:05,450 I dette eksempel, ville vi forvente Greven vendte tilbage til 72 00:03:05,450 --> 00:03:07,130 være 0 eller mere. 73 00:03:07,130 --> 00:03:08,870 Dette efterlader os de negative heltal til 74 00:03:08,870 --> 00:03:10,200 anvendelse som kontroldyr værdier. 75 00:03:10,200 --> 00:03:13,320 En sentinel værdi er simpelthen en særlig værdi, der ikke 76 00:03:13,320 --> 00:03:16,200 legitime data men videregive information. 77 00:03:16,200 --> 00:03:19,480 Her, hvis jeg vender tilbage en -1 til den kaldende kode, er jeg 78 00:03:19,480 --> 00:03:21,830 faktisk sender det budskab, at der opstod en fejl under 79 00:03:21,830 --> 00:03:23,810 forsøger at få adgang til filen. 80 00:03:23,810 --> 00:03:26,060 Jeg kunne så kontrollere, at returværdien at afgøre, om min 81 00:03:26,060 --> 00:03:28,060 Funktionen opkaldet blev modtaget. 82 00:03:28,060 --> 00:03:30,350 Hvis nummeret var 0 eller derover, ville jeg vide det 83 00:03:30,350 --> 00:03:32,180 Antallet af tegn i filen. 84 00:03:32,180 --> 00:03:35,310 Hvis imidlertid antallet var mindre end 0, I kunne simpelthen 85 00:03:35,310 --> 00:03:37,350 udskrive, at et problem var forekommet. 86 00:03:37,350 --> 00:03:40,120 Et trade-off til at overveje, er, at ved at forbeholde alle 87 00:03:40,120 --> 00:03:43,180 negative værdier som sentinel værdier er under forudsætning af dette en 88 00:03:43,180 --> 00:03:46,070 32-bit heltal har jeg hovedsageligt taget væk omkring 89 00:03:46,070 --> 00:03:48,970 2 milliarder mulige returværdier. 90 00:03:48,970 --> 00:03:51,270 >> Retur værdi typer er en af ​​de vigtigste elementer i 91 00:03:51,270 --> 00:03:52,460 funktionskald. 92 00:03:52,460 --> 00:03:54,670 Forhåbentlig vil denne korte oversigt har hjulpet dig tænker 93 00:03:54,670 --> 00:03:59,110 tre centrale typer: void, resultatværdier, og sentinel værdier, 94 00:03:59,110 --> 00:04:00,190 og når hver af de tre kan være 95 00:04:00,190 --> 00:04:02,010 hensigtsmæssigt i din kode. 96 00:04:02,010 --> 00:04:03,260 Tak for at se.