1 00:00:07,185 --> 00:00:09,540 [Powered by Google Translate] CHRIS Gerber: funkcija je niz koraka unutar 2 00:00:09,540 --> 00:00:12,000 veći program, koji je obično namijenjen da se zove 3 00:00:12,000 --> 00:00:14,440 više puta i iz više drugih lokacija u 4 00:00:14,440 --> 00:00:15,720 Program. 5 00:00:15,720 --> 00:00:18,480 Prilikom stvaranja C funkciju, jedan od uvjeta je da 6 00:00:18,480 --> 00:00:21,050 navesti vrstu vrijednosti povratka. 7 00:00:21,050 --> 00:00:23,490 Najjednostavniji slučaj je situacija u kojoj poziva 8 00:00:23,490 --> 00:00:26,510 Kod se ne bavi rezultat funkcije. 9 00:00:26,510 --> 00:00:28,530 To može biti slučaj kada smo ispisuje podatke na 10 00:00:28,530 --> 00:00:31,120 Korisnički zaslon, kao i sa printf. 11 00:00:31,120 --> 00:00:33,140 U tom slučaju, možemo proglasiti vrijednost povratnu 12 00:00:33,140 --> 00:00:35,020 biti tipa prazninu. 13 00:00:35,020 --> 00:00:37,130 Korištenje prazninu jednostavno govori prevodilac koji ne 14 00:00:37,130 --> 00:00:39,120 Vrijednost će biti vraćen. 15 00:00:39,120 --> 00:00:40,530 Idemo vidjeti kako to izgleda. 16 00:00:40,530 --> 00:00:42,940 >> Recimo da imamo funkciju pod nazivom say_hello da 17 00:00:42,940 --> 00:00:44,490 uzima jedan argument. 18 00:00:44,490 --> 00:00:47,050 Mi ćemo proći to ime osobe i ona će se prikazati pozdrav 19 00:00:47,050 --> 00:00:48,380 na zaslonu. 20 00:00:48,380 --> 00:00:50,505 Naziv će biti tipa char *. 21 00:00:50,505 --> 00:00:53,080 A mi ćemo navesti da kao argument. 22 00:00:53,080 --> 00:00:55,970 Moj program ne treba znati što je tiskana ili ako ga 23 00:00:55,970 --> 00:00:56,970 bio tiskan. 24 00:00:56,970 --> 00:00:59,680 Dakle, vrijednost povratak će biti tipa prazninu. 25 00:00:59,680 --> 00:01:02,060 Ova funkcija može ispisivati ​​na zaslonu pomoću naredbe poput 26 00:01:02,060 --> 00:01:07,620 printf ("Hello,% s \ n 27 00:01:07,620 --> 00:01:12,100 ", Ime);. 28 00:01:12,100 --> 00:01:14,690 Pozdrav će biti prikazano i kontrole će biti donesen 29 00:01:14,690 --> 00:01:16,260 Povratak u zovete koda. 30 00:01:16,260 --> 00:01:19,370 Jedna stvar je imati na umu da kada tip povratna vrijednost je nevažeća, 31 00:01:19,370 --> 00:01:20,790 ne morate uključiti povratak 32 00:01:20,790 --> 00:01:22,300 Izjava u funkciji. 33 00:01:22,300 --> 00:01:25,270 Ako se odlučite uključiti jedan, ne uključuju vrijednost povratnu 34 00:01:25,270 --> 00:01:27,420 kao argument. 35 00:01:27,420 --> 00:01:29,380 >> U nekim slučajevima, ima smisla da se vrate 36 00:01:29,380 --> 00:01:30,570 vrijednost iz funkcije. 37 00:01:30,570 --> 00:01:33,900 Recimo da smo pisali funkciju pod nazivom add_floats. 38 00:01:33,900 --> 00:01:36,160 Mi ćemo proći ga dva argumenta, oba plovi, 39 00:01:36,160 --> 00:01:37,510 zove prvi i drugi. 40 00:01:37,510 --> 00:01:40,520 I to će nam reći što je zbroj tih plovaka je. 41 00:01:40,520 --> 00:01:43,000 Znamo da ako smo dodali dvije pliva zajedno, rezultat 42 00:01:43,000 --> 00:01:44,120 će biti s plovkom. 43 00:01:44,120 --> 00:01:47,540 S obzirom da smo izabrati povratak tip float. 44 00:01:47,540 --> 00:01:50,040 Ova funkcija će izvesti taj izračun i povratak 45 00:01:50,040 --> 00:01:52,260 vrijednosti u priopćenju poput povratka 46 00:01:52,260 --> 00:01:54,770 prvi + drugi;. 47 00:01:54,770 --> 00:01:57,300 Kada kontrola je prošao povratak na raspisivanje koda, 48 00:01:57,300 --> 00:02:00,030 rezultiralo vrijednost je sada dostupan na tom kodu. 49 00:02:00,030 --> 00:02:04,250 Mi može pohraniti tu vrijednost ovako: float rezultat = 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 Rezultat je u tom slučaju sada će sadržavati vrijednost 4,76. 53 00:02:15,200 --> 00:02:18,620 >> Kao podsjetnik, s pomičnim zarezom vrijednosti su neprecizni. 54 00:02:18,620 --> 00:02:21,250 Dakle, ako je to financijski obračun, koristeći dolara, a 55 00:02:21,250 --> 00:02:24,960 centi, možemo uzeti u obzir točan tip podataka, kao što su 56 00:02:24,960 --> 00:02:29,120 int i obavlja obračun u novčića. 57 00:02:29,120 --> 00:02:31,270 >> Drugi slučaj u kojem bismo željeli vratiti vrijednost iz 58 00:02:31,270 --> 00:02:33,980 Funkcija je kad želimo znati je li funkcija bila 59 00:02:33,980 --> 00:02:35,960 uspješna. 60 00:02:35,960 --> 00:02:39,190 Ako to nije bila uspješna, mi svibanj također žele znati što tip 61 00:02:39,190 --> 00:02:41,250 Došlo je do pogreške. 62 00:02:41,250 --> 00:02:43,647 Recimo da smo pokušavate otvoriti datoteku na disk računati 63 00:02:43,647 --> 00:02:45,220 broj znakova u njega. 64 00:02:45,220 --> 00:02:48,635 Ako datoteka ne može biti otvorena, želimo biti u mogućnosti da se zaustavi i 65 00:02:48,635 --> 00:02:50,910 korisniku reći o tom problemu. 66 00:02:50,910 --> 00:02:54,070 >> Mi ćemo pozvati naše count_file_chars funkcija, a to će 67 00:02:54,070 --> 00:02:55,490 uzeti jedan argument. 68 00:02:55,490 --> 00:02:57,420 Mi ćemo proći u ime datoteke pomoću 69 00:02:57,420 --> 00:02:59,610 char * filename zove. 70 00:02:59,610 --> 00:03:03,050 Ova funkcija može izgledati nešto poput ovoga. 71 00:03:03,050 --> 00:03:05,450 U ovom primjeru, mi bi se očekivati ​​Broj vratio 72 00:03:05,450 --> 00:03:07,130 biti 0 ili više. 73 00:03:07,130 --> 00:03:08,870 To ostavlja nam negativne prirodna broja na 74 00:03:08,870 --> 00:03:10,200 koristiti kao sentinel vrijednosti. 75 00:03:10,200 --> 00:03:13,320 Sentinel vrijednost je jednostavno posebna vrijednost koja nije 76 00:03:13,320 --> 00:03:16,200 legitimne podaci, ali ne prenose informacije. 77 00:03:16,200 --> 00:03:19,480 Evo, ako ja vratiti -1 do zovete koda, ja sam 78 00:03:19,480 --> 00:03:21,830 zapravo šalje poruku da je došlo do pogreške, a 79 00:03:21,830 --> 00:03:23,810 pokušava pristupiti datoteci. 80 00:03:23,810 --> 00:03:26,060 I onda mogla provjeriti tu vrijednost povratnu utvrditi je li moj 81 00:03:26,060 --> 00:03:28,060 Funkcija poziv bio uspješan. 82 00:03:28,060 --> 00:03:30,350 Ako je broj bio 0 ili veća, ja bih znati 83 00:03:30,350 --> 00:03:32,180 broj znakova u datoteci. 84 00:03:32,180 --> 00:03:35,310 Ako je, međutim, broj je manji od 0, mogao bih jednostavno 85 00:03:35,310 --> 00:03:37,350 ispisati da je došlo do problema. 86 00:03:37,350 --> 00:03:40,120 Jedan trade-off za razmatranje je da rezervirajući sve 87 00:03:40,120 --> 00:03:43,180 negativne vrijednosti kao sentinel vrijednosti, uz pretpostavku da je to 88 00:03:43,180 --> 00:03:46,070 32-bitni cijeli broj, ja u suštini su odveli oko 89 00:03:46,070 --> 00:03:48,970 2000000000 mogućem povratku vrijednosti. 90 00:03:48,970 --> 00:03:51,270 >> Povratna vrijednost tipa su jedan od najvažnijih elemenata 91 00:03:51,270 --> 00:03:52,460 funkcija poziva. 92 00:03:52,460 --> 00:03:54,670 Nadam se da ovaj kratki pregled je pomogao mislite o 93 00:03:54,670 --> 00:03:59,110 Tri ključne vrste: void, rezultat vrijednosti, i sentinel vrijednosti, 94 00:03:59,110 --> 00:04:00,190 i kada je svaki od tri mogu biti 95 00:04:00,190 --> 00:04:02,010 prikladno u svom kodu. 96 00:04:02,010 --> 00:04:03,260 Hvala za gledanje.