1 00:00:07,185 --> 00:00:09,540 [Powered by Google Translate] CHRIS GERBER: En funksjon er en rekke trinn i en 2 00:00:09,540 --> 00:00:12,000 større program, som er vanligvis ment å bli kalt 3 00:00:12,000 --> 00:00:14,440 flere ganger 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 Ved oppretting av en C funksjonen, er en av kravene til 6 00:00:18,480 --> 00:00:21,050 angi en returverdi type. 7 00:00:21,050 --> 00:00:23,490 Det enkleste tilfellet er en situasjon der den anropende 8 00:00:23,490 --> 00:00:26,510 koden er ikke opptatt med resultatet av funksjonen. 9 00:00:26,510 --> 00:00:28,530 Dette kan være tilfelle når vi skriver data til 10 00:00:28,530 --> 00:00:31,120 brukerens skjerm, som med printf. 11 00:00:31,120 --> 00:00:33,140 I dette tilfellet, kan vi erklære en returverdi 12 00:00:33,140 --> 00:00:35,020 å være av typen ugyldige. 13 00:00:35,020 --> 00:00:37,130 Bruke ugyldig forteller ganske enkelt kompilatoren at ingen 14 00:00:37,130 --> 00:00:39,120 verdien vil bli returnert. 15 00:00:39,120 --> 00:00:40,530 La oss se hvordan dette ser ut. 16 00:00:40,530 --> 00:00:42,940 >> La oss si at vi har en funksjon som heter say_hello at 17 00:00:42,940 --> 00:00:44,490 tar ett 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å skjermen. 20 00:00:48,380 --> 00:00:50,505 Navnet vil være av type char *. 21 00:00:50,505 --> 00:00:53,080 Og vi vil presisere at som argument. 22 00:00:53,080 --> 00:00:55,970 Min søknad trenger ikke å vite hva som ble trykt, eller hvis det 23 00:00:55,970 --> 00:00:56,970 ble trykt. 24 00:00:56,970 --> 00:00:59,680 Så returverdien vil være av typen ugyldig. 25 00:00:59,680 --> 00:01:02,060 Denne funksjonen kan skrive til skjermen med en kommando som 26 00:01:02,060 --> 00:01:07,620 printf ("Hello,% s \ n 27 00:01:07,620 --> 00:01:12,100 ", Navn);. 28 00:01:12,100 --> 00:01:14,690 Hilsenen vises og kontroll vil bli sendt 29 00:01:14,690 --> 00:01:16,260 tilbake til den som ringer koden. 30 00:01:16,260 --> 00:01:19,370 En ting å merke seg er at når returverditype er ugyldig, 31 00:01:19,370 --> 00:01:20,790 du trenger ikke å inkludere en avkastning 32 00:01:20,790 --> 00:01:22,300 uttalelse i funksjon. 33 00:01:22,300 --> 00:01:25,270 Hvis du velger å inkludere en, inkluderer ikke en returverdi 34 00:01:25,270 --> 00:01:27,420 som et argument. 35 00:01:27,420 --> 00:01:29,380 >> I noen tilfeller er det fornuftig å returnere en 36 00:01:29,380 --> 00:01:30,570 verdi fra en funksjon. 37 00:01:30,570 --> 00:01:33,900 La oss si at vi skulle skrive en funksjon som heter add_floats. 38 00:01:33,900 --> 00:01:36,160 Vi passerer det to argumenter, både flyter, 39 00:01:36,160 --> 00:01:37,510 kalt første og andre. 40 00:01:37,510 --> 00:01:40,520 Og det vil fortelle oss hva summen av disse flyter er. 41 00:01:40,520 --> 00:01:43,000 Vi vet at hvis vi legge til to flyter sammen, resultatet 42 00:01:43,000 --> 00:01:44,120 vil være en flåte. 43 00:01:44,120 --> 00:01:47,540 Gitt at vi velger en retur type float. 44 00:01:47,540 --> 00:01:50,040 Denne funksjonen vil utføre denne beregningen og returnere 45 00:01:50,040 --> 00:01:52,260 verdiene i en uttalelse som retur 46 00:01:52,260 --> 00:01:54,770 første + andre;. 47 00:01:54,770 --> 00:01:57,300 Når kontroll er gått tilbake til den anropende koden, 48 00:01:57,300 --> 00:02:00,030 resultatverdien er nå tilgjengelig for denne koden. 49 00:02:00,030 --> 00:02:04,250 Vi kan lagre denne verdien slik: float resultat = 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 tilfellet ville nå inneholde verdien 4,76. 53 00:02:15,200 --> 00:02:18,620 >> Som en påminnelse, flytpunktverdier er upresise. 54 00:02:18,620 --> 00:02:21,250 Så hvis dette var en økonomisk beregning, ved hjelp av dollar og 55 00:02:21,250 --> 00:02:24,960 cent, kan vi ønsker å vurdere en presis datatype som 56 00:02:24,960 --> 00:02:29,120 int og utføre beregningen i pennies. 57 00:02:29,120 --> 00:02:31,270 >> En annen sak der vi ønsker å returnere en verdi fra en 58 00:02:31,270 --> 00:02:33,980 Funksjonen er når vi ønsker å vite om en funksjon var 59 00:02:33,980 --> 00:02:35,960 vellykket. 60 00:02:35,960 --> 00:02:39,190 Hvis det ikke var vellykket, kan vi også ønsker å vite hva slags 61 00:02:39,190 --> 00:02:41,250 Det oppstod. 62 00:02:41,250 --> 00:02:43,647 La oss si at vi prøver å åpne en fil på disken for å telle 63 00:02:43,647 --> 00:02:45,220 antall tegn i den. 64 00:02:45,220 --> 00:02:48,635 Hvis filen ikke kan åpnes, vil vi være i stand til å stoppe og 65 00:02:48,635 --> 00:02:50,910 fortelle brukeren om problemet. 66 00:02:50,910 --> 00:02:54,070 >> Vi kaller funksjonen count_file_chars og det vil 67 00:02:54,070 --> 00:02:55,490 ta ett argument. 68 00:02:55,490 --> 00:02:57,420 Vi vil passere i navnet på filen ved hjelp av en 69 00:02:57,420 --> 00:02:59,610 char * kalles filnavn. 70 00:02:59,610 --> 00:03:03,050 Denne funksjonen kan se noe sånt som dette. 71 00:03:03,050 --> 00:03:05,450 I dette eksempelet, vil vi forvente at antall returnerte til 72 00:03:05,450 --> 00:03:07,130 være 0 eller mer. 73 00:03:07,130 --> 00:03:08,870 Dette etterlater oss de negative heltall til 74 00:03:08,870 --> 00:03:10,200 bruke som sentinel verdier. 75 00:03:10,200 --> 00:03:13,320 En sentinel verdi er rett og slett en spesiell verdi som ikke er 76 00:03:13,320 --> 00:03:16,200 legitime data, men formidler informasjon. 77 00:03:16,200 --> 00:03:19,480 Her, hvis jeg kommer tilbake en -1 til ringer koden, jeg 78 00:03:19,480 --> 00:03:21,830 faktisk sender meldingen at en feil oppstod under 79 00:03:21,830 --> 00:03:23,810 prøver å få tilgang til filen. 80 00:03:23,810 --> 00:03:26,060 Jeg kunne da sjekke at returverdien å avgjøre om min 81 00:03:26,060 --> 00:03:28,060 funksjonskallet var vellykket. 82 00:03:28,060 --> 00:03:30,350 Hvis nummeret var 0 eller høyere, ville jeg vite 83 00:03:30,350 --> 00:03:32,180 Antallet tegn i filen. 84 00:03:32,180 --> 00:03:35,310 Hvis imidlertid antallet var mindre enn 0, kunne jeg rett og slett 85 00:03:35,310 --> 00:03:37,350 ut at et problem hadde oppstått. 86 00:03:37,350 --> 00:03:40,120 En avveining å vurdere er at ved å reservere alle 87 00:03:40,120 --> 00:03:43,180 negative verdier som sentinel verdier antar dette er en 88 00:03:43,180 --> 00:03:46,070 32-bits heltall, har jeg egentlig tatt bort rundt 89 00:03:46,070 --> 00:03:48,970 2000000000 mulig avkastning verdier. 90 00:03:48,970 --> 00:03:51,270 >> Returverdi typer er et av de viktigste elementene i 91 00:03:51,270 --> 00:03:52,460 funksjonskall. 92 00:03:52,460 --> 00:03:54,670 Forhåpentligvis denne korte oversikten har hjulpet deg tenke 93 00:03:54,670 --> 00:03:59,110 tre viktige typer: void, resultat verdier, og sentinel verdier, 94 00:03:59,110 --> 00:04:00,190 og når hver av de tre kan være 95 00:04:00,190 --> 00:04:02,010 hensiktsmessig i koden. 96 00:04:02,010 --> 00:04:03,260 Takk for å se.