Doug LLOYD: Ko začnete delo s funkcijami,
še ena stvar se dogaja, da postanejo Zelo pomembno je razumeti,
ki je pojem variabilnega področja.
Torej, obseg je Značilnost spremenljivke
ki določa, iz katerih funkcij da spremenljivka je mogoče dostopati.
>> Obstajata dve glavni področji v C, lokalne spremenljivke in globalnih spremenljivk.
Sedaj lahko lokalne spremenljivke le se pogledali v okviru funkcij
v kateri oni ustvarili.
Jih ni mogoče dostopati z vsako drugo Funkcija, ki obstaja v vašem programu,
samo funkcija ki je bil ustvarjen.
Globalne spremenljivke na drugi strani pa je mogoče dostopati
katera koli funkcijo v programu.
In razlog za to je ker oni niso ustvarili v notranjosti
katere koli določene funkcije.
Mi jih razglasi za izven vse funkcije, ki
pomeni, da je vsaka funkcija ne ve, kje je in lahko dostopate in ga manipulirajo.
>> Do zdaj je v teku ste precej veliko delali izključno
z lokalnimi spremenljivkami.
Tukaj je primer zelo, zelo preprost Glavna naloga in zelo preprost
Dodatna funkcija, ki smo jih napisali.
V tem primeru, x, ki Sem obarvana zeleno pravkar
izpostaviti lokalnost ali obseg te spremenljivke,
je lokalna funkciji trojno.
Glavna ne more sklicevati na x sploh.
Ne vem kaj je.
Nobena druga funkcija, v resnici, če bomo imeli dodatnih funkcij tukaj,
se lahko nanaša na x.
>> Podobno, rezultati, ki Sem modre barve, je lokalna le glavni.
Edina glavna ve, kaj spremenljivka rezultat.
triple ne more uporabljati.
>> Zdaj pa, kot sem že omenil, globalne spremenljivke ne obstajajo.
Če se ugotovi, da spremenljivko izven katerekoli funkcije,
vse funkcije v Program se lahko sklicujejo nanjo.
Torej, v tem primeru sem poudaril v zelena globalna spremenljivka deklaracija.
V tem primeru je spremenljivka bitje razglasila
se imenuje globalno, samo da bi biti zelo jasen o tem.
To je tipa float.
In jaz dodeliti ji vrednosti 0.5050.
>> Opazili boste, da v glavni in v triple, sem lahko sklicuje na globalno.
In v resnici, če grem skozi program kot je navedeno, glavni Prvi razpisi triple,
trojni množi globalna za 3, ki določa njegovo vrednost na 1,5-nečem,
1.51 ali nekaj takega, in potem glavna tudi izpiše vrednost
globalnega.
Torej glavni ne bo izpisal 0.5050 ga, bo izpisal globalne krat 3, 1.51.
Torej moraš biti previdni, ko delate z globalnimi spremenljivkami.
Medtem ko oni so zelo prilagodljivi pri da lahko prenese podatke
okoli, tako da je vsak funkcijo lahko uporabite,
Prav tako imajo lahko nekatere nevarne posledice
če spremembe ena funkcija vrednost spremenljivke
preden ste pričakovali, da je treba spremeniti.
>> Zakaj je to razlikovanje pomembno?
Zakaj nam ni vseeno, ali nekaterih spremenljivk so lokalni in drugi so globalno?
No, za večino del, lokalne spremenljivke v C so tisto, kar se imenuje po vrednosti
ko naredimo klic funkcije.
Kaj to pomeni?
>> Torej, če je spremenljivka opravili po vrednosti, je callee, ki
je še en način rekel funkcijo ki prejema spremenljivko, ki
gets opravili v kot vložek, dejansko ne sprejema, da sama spremenljivka.
Prejme svojo izvod to delati.
To je res pomembna razlika.
Pravkar smo videli pred eno sekundo da je z globalnimi spremenljivkami,
če bomo manipulirajo svetovno spremenljivka v eno funkcijo, učinek
s tem, da ena funkcija izvaja do vsake druge funkcije.
>> Toda z lokalnimi spremenljivkami, da to ni res.
Vsaka funkcija, ko jo prejme spremenljivk kot vhod
prejeli kopije teh spremenljivk, ne spremenljivke same.
Torej, kaj je stranski učinek tega?
To pomeni, da je spremenljivka klicatelj, funkcija, ki
je kar klic funkcije, je nespremenjene, razen če ga preglasijo.
>> Na primer, v tej kodi foo se sploh ni spremenil.
Int foo enaka 4, pokličite triple za foo, znotraj triple,
mi bi pričakovali bi, da foo treba pomnožiti s 3, in se vrnil,
ampak tam je pravzaprav nobenega učinka.
>> Tukaj, čeprav, je zelo subtilna razlika.
To ima za posledico, ki jo želimo.
Ali vidite, zakaj?
Mi smo nujnimi foo v glavni tem času.
>> Torej int foo enaka 4, foo enaka triple foo, ko naredimo ta klic,
triple dobi svojo kopijo za foo, lasten izvod 4.
Piše se vrnete 4 krat 3, ali karkoli spremenljivka dobi opravil v času 3.
In potem smo dodeliti vrnitev Vrednost triple spet foo.
Torej je to dejansko bi prepisali foo.
To je edini način, da to to z lokalno spremenljivko.
Torej, zdaj, če bomo dodali še eno vrstica kode tukaj
na koncu glavni do izpisal vrednost foo,
da bi v resnici natisniti 12.
>> Spremenljivka področje je na splošno ne preveč problem
Če vam ime vse vaše spremenljivke različne stvari.
Vendar pa lahko dobite vrste grdo če istim imenom spremenljivke
pojavlja v več funkcij, ki se bo zgodilo veliko.
Če ste kdaj ne dela v resnični svet, kjer
delate na sodelovalno programi in ljudje v različnih ekip
delajo skupaj, da napišete enako Program ali enak nabor programov,
oni pogosto ponovno spremenljivko Imena, zlasti pogosti tisti,
kot so x, y, i, j, in tako naprej.
>> Ko pa spremenljivke isto ime, vprašanja področje
lahko dobite malo težje razčleniti.
Na primer, veš kaj bi se natisne
Na koncu tega posebnega programa?
Vzemite si minuto.
Premor video in preberite v okviru tega programa.
Si lahko ogledate na zgornjem mi imeti deklaracijo funkcije
za funkcijo imenovano prirastka.
Ta funkcija je ena sama parameter, celo število, ki ga imenujemo x.
In to real celo število.
To je tip povratka na začetku.
>> Potem imamo glavno, nekaj vrstic kode v glavnem, zadnji, ki
je izjava tiskanja.
In ne pozabite, da je vprašanje tukaj.
Kaj se dejansko bo natisnjena na koncu te funkcije?
In potem smo dejansko imajo opredelitev prirastka spodaj.
>> Torej vzeti minuto, korak skozi koda, stvari izslediti.
Ali veste, kaj se bo natisnjena na Konec tem programu?
>> V redu.
Upam, da ste si vzeli nekaj sekund poskusiti in razčleniti tole ven.
Dajmo skupaj.
>> Tako sem prečrtana prirastek je Izjava na vrhu tam.
To je bil neke vrste motnjo.
To ni sama spremenljivka.
To nima svoje področje.
To je samo funkcija izjavo, da za namene
poskuša razčleniti, kaj je dogaja v tem programu,
bomo lahko tudi samo izogniti.
>> Sedaj smo v tem primeru Razlog je ta problem je težavno
je zato, ker imamo lokalnih spremenljivk v obe glavni in prirastek, pri čemer je vsak
je imenovani x.
In seveda je jedro tega vprašanja poskuša suss, katere dobi x spremenilo
in kako se je spremenilo.
Tako sem obarvana vsak primerek x, ki je lokalno na glavno rdeče.
In sem obarvani vsak primerek x, ki je lokalno prirastom modro.
>> Obvestilo v tej tretji vrstici od glavnega, y enak prirastek
x, da prirastek se niso minilo x Glavno je, ali rdeči x.
To je pridobivanje sprejela kopijo.
In to je samo še za delo z da je kopija, modra x.
Če ste matematično nagnjena, boste morda
Namesto tega so pomislili, da je to x sub m za glavno in x sub i za prirastek.
Ampak to je ista ideja.
x sub m ali rdeči x je v prejšnjem diapozitivu,
so spremenljivke, ki so local-- je primer x, namesto da
lokalno na glavno in x sub i, ali modre spremenljivke v prejšnjem diapozitivu,
so primeri X, ki so lokalni za prirastek.
>> Torej, ste bili sposobni, da ugotovimo, kaj ta funkcija natisnjena na koncu?
Sem Doug Lloyd, in to je CS50.