1 00:00:07,185 --> 00:00:09,540 [Powered by Google Translate] CHRIS GERBER: En funktion är en serie av steg inom en 2 00:00:09,540 --> 00:00:12,000 större program, som vanligen är avsedda att kallas 3 00:00:12,000 --> 00:00:14,440 flera gånger och från flera andra platser i 4 00:00:14,440 --> 00:00:15,720 programmet. 5 00:00:15,720 --> 00:00:18,480 När man skapar en C-funktion, är ett av kraven för att 6 00:00:18,480 --> 00:00:21,050 ange en typ returvärde. 7 00:00:21,050 --> 00:00:23,490 Det enklaste fallet är en situation där den uppringande 8 00:00:23,490 --> 00:00:26,510 koden inte avser resultatet av funktionen. 9 00:00:26,510 --> 00:00:28,530 Detta kan vara fallet när vi skriver data till 10 00:00:28,530 --> 00:00:31,120 användarens skärm, som med printf. 11 00:00:31,120 --> 00:00:33,140 I det här fallet kan vi förklara ett returvärde 12 00:00:33,140 --> 00:00:35,020 vara av typen ogiltigt. 13 00:00:35,020 --> 00:00:37,130 Använda void bara berättar kompilatorn att inga 14 00:00:37,130 --> 00:00:39,120 värdet kommer att returneras. 15 00:00:39,120 --> 00:00:40,530 Låt oss se vad detta ser ut. 16 00:00:40,530 --> 00:00:42,940 >> Låt oss säga att vi har en funktion som kallas say_hello att 17 00:00:42,940 --> 00:00:44,490 tar ett argument. 18 00:00:44,490 --> 00:00:47,050 Vi ska ge det en persons namn och det kommer att visa en hälsning 19 00:00:47,050 --> 00:00:48,380 på skärmen. 20 00:00:48,380 --> 00:00:50,505 Namnet kommer att vara av typen char *. 21 00:00:50,505 --> 00:00:53,080 Och vi kommer att ange att som argument. 22 00:00:53,080 --> 00:00:55,970 Min ansökan behöver inte veta vad som trycktes eller om det 23 00:00:55,970 --> 00:00:56,970 trycktes. 24 00:00:56,970 --> 00:00:59,680 Så returvärdet kommer att vara av typen void. 25 00:00:59,680 --> 00:01:02,060 Denna funktion kan skriva till skärmen med ett kommando som 26 00:01:02,060 --> 00:01:07,620 printf ("Hej,% s \ n 27 00:01:07,620 --> 00:01:12,100 ", Namn);. 28 00:01:12,100 --> 00:01:14,690 Hälsningen visas och kontrollen kommer att föras 29 00:01:14,690 --> 00:01:16,260 tillbaka till den anropande koden. 30 00:01:16,260 --> 00:01:19,370 En sak att notera är att när returvärdet typen är ogiltig, 31 00:01:19,370 --> 00:01:20,790 Du behöver inte ta med en avkastning 32 00:01:20,790 --> 00:01:22,300 uttalande i funktion. 33 00:01:22,300 --> 00:01:25,270 Om du väljer att inkludera en, inkluderar inte ett returvärde 34 00:01:25,270 --> 00:01:27,420 som ett argument. 35 00:01:27,420 --> 00:01:29,380 >> I vissa fall är det klokt att returnera en 36 00:01:29,380 --> 00:01:30,570 värde från en funktion. 37 00:01:30,570 --> 00:01:33,900 Låt oss säga att vi skrev en funktion som kallas add_floats. 38 00:01:33,900 --> 00:01:36,160 Vi ska ge det två argument, båda flottar, 39 00:01:36,160 --> 00:01:37,510 kallas första och andra. 40 00:01:37,510 --> 00:01:40,520 Och det kommer att berätta vad summan av dessa flöten är. 41 00:01:40,520 --> 00:01:43,000 Vi vet att om vi lägger två flottörer tillsammans, resultatet 42 00:01:43,000 --> 00:01:44,120 kommer att vara en flottör. 43 00:01:44,120 --> 00:01:47,540 Med tanke på att vi väljer en returtyp av flottören. 44 00:01:47,540 --> 00:01:50,040 Denna funktion kommer att utföra denna beräkning och återgå 45 00:01:50,040 --> 00:01:52,260 värdena i ett uttalande som avkastning 46 00:01:52,260 --> 00:01:54,770 1:e + sekund,. 47 00:01:54,770 --> 00:01:57,300 När styrningen övergår tillbaka till den anropande koden, 48 00:01:57,300 --> 00:02:00,030 resulterande värdet är nu tillgängligt för denna kod. 49 00:02:00,030 --> 00:02:04,250 Vi kan lagra detta värde så här: 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 detta fall skulle nu innehålla värdet 4,76. 53 00:02:15,200 --> 00:02:18,620 >> Som en påminnelse, flyttal är oprecisa. 54 00:02:18,620 --> 00:02:21,250 Så om detta var en ekonomisk beräkning med hjälp dollar och 55 00:02:21,250 --> 00:02:24,960 cent, kan vi vill överväga en exakt datatyp som 56 00:02:24,960 --> 00:02:29,120 int och utföra beräkningen i småpengar. 57 00:02:29,120 --> 00:02:31,270 >> Ett annat fall där vi vill returnera ett värde från en 58 00:02:31,270 --> 00:02:33,980 funktion är när man vill veta om en funktion var 59 00:02:33,980 --> 00:02:35,960 framgångsrik. 60 00:02:35,960 --> 00:02:39,190 Om det inte lyckas kan vi vill också veta vilken typ av 61 00:02:39,190 --> 00:02:41,250 fel uppstod. 62 00:02:41,250 --> 00:02:43,647 Låt oss säga att vi försöker öppna en fil på disk att räkna 63 00:02:43,647 --> 00:02:45,220 antalet tecken i den. 64 00:02:45,220 --> 00:02:48,635 Om filen inte kan öppnas, vill vi kunna stoppa och 65 00:02:48,635 --> 00:02:50,910 tala om för användaren om problemet. 66 00:02:50,910 --> 00:02:54,070 >> Vi kallar vår funktion count_file_chars och det kommer 67 00:02:54,070 --> 00:02:55,490 ta ett argument. 68 00:02:55,490 --> 00:02:57,420 Vi ska passera i namnet på filen med en 69 00:02:57,420 --> 00:02:59,610 char * kallas filnamn. 70 00:02:59,610 --> 00:03:03,050 Denna funktion kan se ut ungefär så här. 71 00:03:03,050 --> 00:03:05,450 I detta exempel skulle vi förvänta oss att räkna tillbaka till 72 00:03:05,450 --> 00:03:07,130 vara 0 eller mer. 73 00:03:07,130 --> 00:03:08,870 Detta lämnar oss de negativa heltalen till 74 00:03:08,870 --> 00:03:10,200 använda som kontrolldjur värden. 75 00:03:10,200 --> 00:03:13,320 Ett sentinel värde är helt enkelt ett speciellt värde som inte är 76 00:03:13,320 --> 00:03:16,200 legitima uppgifter men förmedla information. 77 00:03:16,200 --> 00:03:19,480 Här, om jag återvänder en -1 till den anropande koden, jag 78 00:03:19,480 --> 00:03:21,830 faktiskt skickar meddelandet om att ett fel uppstod när 79 00:03:21,830 --> 00:03:23,810 försöker komma åt filen. 80 00:03:23,810 --> 00:03:26,060 Jag kunde då kontrollera att returvärdet för att avgöra om min 81 00:03:26,060 --> 00:03:28,060 funktionsanropet lyckades. 82 00:03:28,060 --> 00:03:30,350 Om antalet var 0 eller mer, skulle jag veta 83 00:03:30,350 --> 00:03:32,180 antal tecken i filen. 84 00:03:32,180 --> 00:03:35,310 Om emellertid var antalet mindre än 0, kunde jag helt enkelt 85 00:03:35,310 --> 00:03:37,350 ut att ett problem har uppstått. 86 00:03:37,350 --> 00:03:40,120 En avvägning att tänka på är att genom att reservera all 87 00:03:40,120 --> 00:03:43,180 negativa värden som indikatordjur värden, förutsatt att detta är ett 88 00:03:43,180 --> 00:03:46,070 32-bitars heltal har jag tagit väsentligt ifrån runt 89 00:03:46,070 --> 00:03:48,970 2 miljarder möjliga returvärden. 90 00:03:48,970 --> 00:03:51,270 >> Returvärde typer är en av de viktigaste delarna av 91 00:03:51,270 --> 00:03:52,460 funktionsanrop. 92 00:03:52,460 --> 00:03:54,670 Förhoppningsvis denna korta översikt har hjälpt dig tänker 93 00:03:54,670 --> 00:03:59,110 tre viktiga typer: void, värderingar resultat och värderingar Sentinel, 94 00:03:59,110 --> 00:04:00,190 och när var och en av de tre kan vara 95 00:04:00,190 --> 00:04:02,010 lämpligt i koden. 96 00:04:02,010 --> 00:04:03,260 Tack för att titta.