1 00:00:00,000 --> 00:00:05,300 2 00:00:05,300 --> 00:00:07,300 Doug LLOYD: Ko začnete delo s funkcijami, 3 00:00:07,300 --> 00:00:09,966 še ena stvar se dogaja, da postanejo Zelo pomembno je razumeti, 4 00:00:09,966 --> 00:00:12,380 ki je pojem variabilnega področja. 5 00:00:12,380 --> 00:00:14,490 Torej, obseg je Značilnost spremenljivke 6 00:00:14,490 --> 00:00:18,860 ki določa, iz katerih funkcij da spremenljivka je mogoče dostopati. 7 00:00:18,860 --> 00:00:24,595 >> Obstajata dve glavni področji v C, lokalne spremenljivke in globalnih spremenljivk. 8 00:00:24,595 --> 00:00:27,830 Sedaj lahko lokalne spremenljivke le se pogledali v okviru funkcij 9 00:00:27,830 --> 00:00:29,045 v kateri oni ustvarili. 10 00:00:29,045 --> 00:00:32,170 Jih ni mogoče dostopati z vsako drugo Funkcija, ki obstaja v vašem programu, 11 00:00:32,170 --> 00:00:34,184 samo funkcija ki je bil ustvarjen. 12 00:00:34,184 --> 00:00:36,350 Globalne spremenljivke na drugi strani pa je mogoče dostopati 13 00:00:36,350 --> 00:00:37,719 katera koli funkcijo v programu. 14 00:00:37,719 --> 00:00:40,260 In razlog za to je ker oni niso ustvarili v notranjosti 15 00:00:40,260 --> 00:00:41,441 katere koli določene funkcije. 16 00:00:41,441 --> 00:00:43,690 Mi jih razglasi za izven vse funkcije, ki 17 00:00:43,690 --> 00:00:48,940 pomeni, da je vsaka funkcija ne ve, kje je in lahko dostopate in ga manipulirajo. 18 00:00:48,940 --> 00:00:52,010 >> Do zdaj je v teku ste precej veliko delali izključno 19 00:00:52,010 --> 00:00:54,280 z lokalnimi spremenljivkami. 20 00:00:54,280 --> 00:00:58,320 Tukaj je primer zelo, zelo preprost Glavna naloga in zelo preprost 21 00:00:58,320 --> 00:01:00,680 Dodatna funkcija, ki smo jih napisali. 22 00:01:00,680 --> 00:01:03,180 V tem primeru, x, ki Sem obarvana zeleno pravkar 23 00:01:03,180 --> 00:01:07,400 izpostaviti lokalnost ali obseg te spremenljivke, 24 00:01:07,400 --> 00:01:09,240 je lokalna funkciji trojno. 25 00:01:09,240 --> 00:01:12,300 Glavna ne more sklicevati na x sploh. 26 00:01:12,300 --> 00:01:14,259 Ne vem kaj je. 27 00:01:14,259 --> 00:01:17,050 Nobena druga funkcija, v resnici, če bomo imeli dodatnih funkcij tukaj, 28 00:01:17,050 --> 00:01:19,360 se lahko nanaša na x. 29 00:01:19,360 --> 00:01:23,520 >> Podobno, rezultati, ki Sem modre barve, je lokalna le glavni. 30 00:01:23,520 --> 00:01:26,980 Edina glavna ve, kaj spremenljivka rezultat. 31 00:01:26,980 --> 00:01:30,010 triple ne more uporabljati. 32 00:01:30,010 --> 00:01:32,580 >> Zdaj pa, kot sem že omenil, globalne spremenljivke ne obstajajo. 33 00:01:32,580 --> 00:01:35,575 Če se ugotovi, da spremenljivko izven katerekoli funkcije, 34 00:01:35,575 --> 00:01:38,290 vse funkcije v Program se lahko sklicujejo nanjo. 35 00:01:38,290 --> 00:01:44,010 Torej, v tem primeru sem poudaril v zelena globalna spremenljivka deklaracija. 36 00:01:44,010 --> 00:01:45,830 V tem primeru je spremenljivka bitje razglasila 37 00:01:45,830 --> 00:01:48,720 se imenuje globalno, samo da bi biti zelo jasen o tem. 38 00:01:48,720 --> 00:01:49,720 To je tipa float. 39 00:01:49,720 --> 00:01:52,940 In jaz dodeliti ji vrednosti 0.5050. 40 00:01:52,940 --> 00:01:58,080 >> Opazili boste, da v glavni in v triple, sem lahko sklicuje na globalno. 41 00:01:58,080 --> 00:02:03,480 In v resnici, če grem skozi program kot je navedeno, glavni Prvi razpisi triple, 42 00:02:03,480 --> 00:02:10,440 trojni množi globalna za 3, ki določa njegovo vrednost na 1,5-nečem, 43 00:02:10,440 --> 00:02:16,080 1.51 ali nekaj takega, in potem glavna tudi izpiše vrednost 44 00:02:16,080 --> 00:02:16,620 globalnega. 45 00:02:16,620 --> 00:02:24,424 Torej glavni ne bo izpisal 0.5050 ga, bo izpisal globalne krat 3, 1.51. 46 00:02:24,424 --> 00:02:27,340 Torej moraš biti previdni, ko delate z globalnimi spremenljivkami. 47 00:02:27,340 --> 00:02:30,260 Medtem ko oni so zelo prilagodljivi pri da lahko prenese podatke 48 00:02:30,260 --> 00:02:32,650 okoli, tako da je vsak funkcijo lahko uporabite, 49 00:02:32,650 --> 00:02:34,580 Prav tako imajo lahko nekatere nevarne posledice 50 00:02:34,580 --> 00:02:38,770 če spremembe ena funkcija vrednost spremenljivke 51 00:02:38,770 --> 00:02:42,360 preden ste pričakovali, da je treba spremeniti. 52 00:02:42,360 --> 00:02:44,200 >> Zakaj je to razlikovanje pomembno? 53 00:02:44,200 --> 00:02:48,070 Zakaj nam ni vseeno, ali nekaterih spremenljivk so lokalni in drugi so globalno? 54 00:02:48,070 --> 00:02:53,880 No, za večino del, lokalne spremenljivke v C so tisto, kar se imenuje po vrednosti 55 00:02:53,880 --> 00:02:56,087 ko naredimo klic funkcije. 56 00:02:56,087 --> 00:02:56,920 Kaj to pomeni? 57 00:02:56,920 --> 00:03:00,880 >> Torej, če je spremenljivka opravili po vrednosti, je callee, ki 58 00:03:00,880 --> 00:03:04,350 je še en način rekel funkcijo ki prejema spremenljivko, ki 59 00:03:04,350 --> 00:03:08,465 gets opravili v kot vložek, dejansko ne sprejema, da sama spremenljivka. 60 00:03:08,465 --> 00:03:12,490 Prejme svojo izvod to delati. 61 00:03:12,490 --> 00:03:14,350 To je res pomembna razlika. 62 00:03:14,350 --> 00:03:18,250 Pravkar smo videli pred eno sekundo da je z globalnimi spremenljivkami, 63 00:03:18,250 --> 00:03:23,240 če bomo manipulirajo svetovno spremenljivka v eno funkcijo, učinek 64 00:03:23,240 --> 00:03:26,390 s tem, da ena funkcija izvaja do vsake druge funkcije. 65 00:03:26,390 --> 00:03:28,920 >> Toda z lokalnimi spremenljivkami, da to ni res. 66 00:03:28,920 --> 00:03:32,060 Vsaka funkcija, ko jo prejme spremenljivk kot vhod 67 00:03:32,060 --> 00:03:36,367 prejeli kopije teh spremenljivk, ne spremenljivke same. 68 00:03:36,367 --> 00:03:37,825 Torej, kaj je stranski učinek tega? 69 00:03:37,825 --> 00:03:40,450 To pomeni, da je spremenljivka klicatelj, funkcija, ki 70 00:03:40,450 --> 00:03:45,600 je kar klic funkcije, je nespremenjene, razen če ga preglasijo. 71 00:03:45,600 --> 00:03:50,420 >> Na primer, v tej kodi foo se sploh ni spremenil. 72 00:03:50,420 --> 00:03:55,450 Int foo enaka 4, pokličite triple za foo, znotraj triple, 73 00:03:55,450 --> 00:03:58,850 mi bi pričakovali bi, da foo treba pomnožiti s 3, in se vrnil, 74 00:03:58,850 --> 00:04:01,450 ampak tam je pravzaprav nobenega učinka. 75 00:04:01,450 --> 00:04:03,460 >> Tukaj, čeprav, je zelo subtilna razlika. 76 00:04:03,460 --> 00:04:06,520 To ima za posledico, ki jo želimo. 77 00:04:06,520 --> 00:04:07,730 Ali vidite, zakaj? 78 00:04:07,730 --> 00:04:11,500 Mi smo nujnimi foo v glavni tem času. 79 00:04:11,500 --> 00:04:16,899 >> Torej int foo enaka 4, foo enaka triple foo, ko naredimo ta klic, 80 00:04:16,899 --> 00:04:21,680 triple dobi svojo kopijo za foo, lasten izvod 4. 81 00:04:21,680 --> 00:04:27,340 Piše se vrnete 4 krat 3, ali karkoli spremenljivka dobi opravil v času 3. 82 00:04:27,340 --> 00:04:32,109 In potem smo dodeliti vrnitev Vrednost triple spet foo. 83 00:04:32,109 --> 00:04:33,650 Torej je to dejansko bi prepisali foo. 84 00:04:33,650 --> 00:04:35,816 To je edini način, da to to z lokalno spremenljivko. 85 00:04:35,816 --> 00:04:38,120 Torej, zdaj, če bomo dodali še eno vrstica kode tukaj 86 00:04:38,120 --> 00:04:40,870 na koncu glavni do izpisal vrednost foo, 87 00:04:40,870 --> 00:04:45,030 da bi v resnici natisniti 12. 88 00:04:45,030 --> 00:04:48,600 >> Spremenljivka področje je na splošno ne preveč problem 89 00:04:48,600 --> 00:04:51,190 Če vam ime vse vaše spremenljivke različne stvari. 90 00:04:51,190 --> 00:04:54,920 Vendar pa lahko dobite vrste grdo če istim imenom spremenljivke 91 00:04:54,920 --> 00:04:58,820 pojavlja v več funkcij, ki se bo zgodilo veliko. 92 00:04:58,820 --> 00:05:02,130 Če ste kdaj ne dela v resnični svet, kjer 93 00:05:02,130 --> 00:05:06,080 delate na sodelovalno programi in ljudje v različnih ekip 94 00:05:06,080 --> 00:05:11,000 delajo skupaj, da napišete enako Program ali enak nabor programov, 95 00:05:11,000 --> 00:05:13,900 oni pogosto ponovno spremenljivko Imena, zlasti pogosti tisti, 96 00:05:13,900 --> 00:05:18,020 kot so x, y, i, j, in tako naprej. 97 00:05:18,020 --> 00:05:20,370 >> Ko pa spremenljivke isto ime, vprašanja področje 98 00:05:20,370 --> 00:05:23,080 lahko dobite malo težje razčleniti. 99 00:05:23,080 --> 00:05:26,790 Na primer, veš kaj bi se natisne 100 00:05:26,790 --> 00:05:30,190 Na koncu tega posebnega programa? 101 00:05:30,190 --> 00:05:31,280 Vzemite si minuto. 102 00:05:31,280 --> 00:05:33,382 Premor video in preberite v okviru tega programa. 103 00:05:33,382 --> 00:05:35,590 Si lahko ogledate na zgornjem mi imeti deklaracijo funkcije 104 00:05:35,590 --> 00:05:37,350 za funkcijo imenovano prirastka. 105 00:05:37,350 --> 00:05:40,800 Ta funkcija je ena sama parameter, celo število, ki ga imenujemo x. 106 00:05:40,800 --> 00:05:42,610 In to real celo število. 107 00:05:42,610 --> 00:05:44,820 To je tip povratka na začetku. 108 00:05:44,820 --> 00:05:48,140 >> Potem imamo glavno, nekaj vrstic kode v glavnem, zadnji, ki 109 00:05:48,140 --> 00:05:49,250 je izjava tiskanja. 110 00:05:49,250 --> 00:05:51,140 In ne pozabite, da je vprašanje tukaj. 111 00:05:51,140 --> 00:05:54,240 Kaj se dejansko bo natisnjena na koncu te funkcije? 112 00:05:54,240 --> 00:05:58,110 In potem smo dejansko imajo opredelitev prirastka spodaj. 113 00:05:58,110 --> 00:06:01,760 >> Torej vzeti minuto, korak skozi koda, stvari izslediti. 114 00:06:01,760 --> 00:06:08,100 Ali veste, kaj se bo natisnjena na Konec tem programu? 115 00:06:08,100 --> 00:06:08,600 >> V redu. 116 00:06:08,600 --> 00:06:11,433 Upam, da ste si vzeli nekaj sekund poskusiti in razčleniti tole ven. 117 00:06:11,433 --> 00:06:13,370 Dajmo skupaj. 118 00:06:13,370 --> 00:06:16,022 >> Tako sem prečrtana prirastek je Izjava na vrhu tam. 119 00:06:16,022 --> 00:06:17,230 To je bil neke vrste motnjo. 120 00:06:17,230 --> 00:06:18,570 To ni sama spremenljivka. 121 00:06:18,570 --> 00:06:19,879 To nima svoje področje. 122 00:06:19,879 --> 00:06:21,920 To je samo funkcija izjavo, da za namene 123 00:06:21,920 --> 00:06:24,330 poskuša razčleniti, kaj je dogaja v tem programu, 124 00:06:24,330 --> 00:06:26,660 bomo lahko tudi samo izogniti. 125 00:06:26,660 --> 00:06:29,560 >> Sedaj smo v tem primeru Razlog je ta problem je težavno 126 00:06:29,560 --> 00:06:34,030 je zato, ker imamo lokalnih spremenljivk v obe glavni in prirastek, pri čemer je vsak 127 00:06:34,030 --> 00:06:35,090 je imenovani x. 128 00:06:35,090 --> 00:06:39,830 In seveda je jedro tega vprašanja poskuša suss, katere dobi x spremenilo 129 00:06:39,830 --> 00:06:41,890 in kako se je spremenilo. 130 00:06:41,890 --> 00:06:46,900 Tako sem obarvana vsak primerek x, ki je lokalno na glavno rdeče. 131 00:06:46,900 --> 00:06:52,040 In sem obarvani vsak primerek x, ki je lokalno prirastom modro. 132 00:06:52,040 --> 00:06:55,220 >> Obvestilo v tej tretji vrstici od glavnega, y enak prirastek 133 00:06:55,220 --> 00:07:00,800 x, da prirastek se niso minilo x Glavno je, ali rdeči x. 134 00:07:00,800 --> 00:07:03,320 To je pridobivanje sprejela kopijo. 135 00:07:03,320 --> 00:07:06,987 In to je samo še za delo z da je kopija, modra x. 136 00:07:06,987 --> 00:07:08,820 Če ste matematično nagnjena, boste morda 137 00:07:08,820 --> 00:07:14,230 Namesto tega so pomislili, da je to x sub m za glavno in x sub i za prirastek. 138 00:07:14,230 --> 00:07:15,700 Ampak to je ista ideja. 139 00:07:15,700 --> 00:07:18,999 x sub m ali rdeči x je v prejšnjem diapozitivu, 140 00:07:18,999 --> 00:07:21,790 so spremenljivke, ki so local-- je primer x, namesto da 141 00:07:21,790 --> 00:07:26,900 lokalno na glavno in x sub i, ali modre spremenljivke v prejšnjem diapozitivu, 142 00:07:26,900 --> 00:07:30,760 so primeri X, ki so lokalni za prirastek. 143 00:07:30,760 --> 00:07:36,220 >> Torej, ste bili sposobni, da ugotovimo, kaj ta funkcija natisnjena na koncu? 144 00:07:36,220 --> 00:07:39,420 Sem Doug Lloyd, in to je CS50. 145 00:07:39,420 --> 00:07:41,542