DOUG Lloyd: Si ju filloni punuar me funksione,
një tjetër gjë do të bëhet të vërtetë e rëndësishme për të kuptuar,
i cili është koncepti i fushës ndryshueshme.
Pra Shtrirja është një karakteristikë e një ndryshore
që përcakton nga i cili funksionon që variabël mund të arrihen.
>> Ka dy qëllimeve kryesore në C, ndryshoret lokale dhe ndryshoret globale.
Tani, ndryshoret lokale mund vetëm të arrihen brenda funksioneve
në të cilën ata janë krijuar.
Ato nuk mund të arrihen nga çdo tjetër funksion që ekziston në programin tuaj,
vetëm funksioni në të cilat ajo u krijua.
Variabla globale, nga ana ana tjetër, mund të arrihen
nga çdo funksion në program.
Dhe arsyeja për këtë është sepse ata nuk janë krijuar brenda
e çdo funksioni të caktuar.
Ne deklarojmë ato jashtë të gjithë nga funksionet, të cilat
do të thotë se çdo funksion e di se ku ajo është dhe mund të hyni dhe të manipuluar atë.
>> Deri më tani në kursin ju keni mjaft shumë qenë duke punuar ekskluzivisht
me variablat lokale.
Ja një shembull i një shumë, shumë Funksioni kryesor i thjeshtë dhe një shumë të thjeshtë
funksion shtesë që ne kemi shkruar.
Në këtë rast, x, i cili Unë e kam vetëm me ngjyrë jeshile
për të nxjerrë në pah lokalitetin apo shtrirja e kësaj variable,
është lokal në funksion trefishtë.
kryesor nuk mund t'i referohet x fare.
Ajo nuk e di se çfarë është ajo.
Asnjë funksion tjetër, në fakt, në qoftë se ne kishte funksione shtesë në këtu,
mund t'i referohet x.
>> Në mënyrë të ngjashme, rezulton që unë kam ngjyrë blu, është lokal vetëm për kryesor.
Vetëm kryesore e di se çfarë rezultati variabël është.
trefishtë nuk mund ta përdorin atë.
>> Tani siç e përmenda, Variablat globale ekzistojnë.
Nëse ju të deklarojë se ndryshore jashtë çdo funksioni,
të gjithë nga funksionet në Programi mund të referohen asaj.
Pra, në këtë rast unë e kam theksuar në e gjelbër një deklaratë globale variabel.
Në këtë rast, qenie e ndryshueshme deklaruar
quhet globale, vetëm për të të jetë tejet i qartë në lidhje me të.
Është e tipit float.
Dhe unë caktoj atë vlerën 0.5050.
>> Ju do të vëreni se në kryesore dhe në trefishtë, unë jam në gjendje për t'iu referuar globale.
Dhe në fakt, nëse unë shkoj përmes programit siç tregohet, thirrjet kryesore para trefishtë,
shumëfishon trefishtë globale nga 3, të cilat vendos vlerën e saj për 1.5-diçka,
1.51 ose diçka të tillë, dhe atëherë kryesor edhe printon nga vlera
e globale.
Pra kryesor nuk do të shtypura nga 0.5050, atë do të shtypura nga herë globale 3, 1.51.
Pra, ju keni marrë për të jenë të kujdesshëm kur ju jeni duke punuar me ndryshore globale.
Ndërsa ata janë shumë fleksibël në duke qenë në gjendje për të kaluar informacionin
rreth në mënyrë që çdo funksion mund ta përdorin atë,
ajo gjithashtu mund të ketë disa Pasojat e rrezikshme
në qoftë se ndryshimet e një funksion vlera e një variable
para se ju presin që ai të ndryshohet.
>> Pse ka rëndësi se ky dallim?
Pse nuk kemi intereson nëse disa variablave janë lokale dhe të tjerët janë globale?
E pra, për pjesën më të madhe, ndryshoret lokale në C janë atë që quhet i miratuar nga vlera
kur kemi bërë një telefonatë funksion.
Cfare do te thote ajo?
>> E pra, kur një variabël është kaluar nga vlera, i callee, i cili
është një tjetër mënyrë për të thënë funksionin që po merr ndryshore që
merr kaluar në si një input, ai në fakt nuk e marrin atë variabël vetë.
Ajo merr vet kopje e tij për të punuar me të.
Ky është një dallim të vërtetë e rëndësishme.
Ne vetëm e pa një të dytë më parë që me ndryshore globale,
në qoftë se ne të manipuluar globale variabël në një funksion, efekti
ne ate qe nje funksion i mbart nëpër çdo funksion tjetër.
>> Por me variablat lokale, kjo nuk është e vërtetë.
Çdo funksion kur ajo merr variablave si input
marrin kopje të këtyre variablave, jo vetë variablave.
Pra, çfarë është efekt anësor i kësaj?
Kjo do të thotë se ndryshueshme në telefonuesi, funksioni që
është bërë thirrje funksion, është pandryshuar nëse nuk shkel atë.
>> Për shembull, në këtë kod foo nuk është ndryshuar fare.
Int foo barabartë me 4, thirrje trefishtë e foo, brenda të trefishtë,
ne do të presim se do të foo të shumëzohet me 3 dhe u kthye,
por nuk ka të vërtetë nuk ka efekt.
>> Këtu megjithatë, një dallim shumë delikate.
Ky nuk kanë efekt ne duam.
A e shihni se pse?
Ne jemi thelbësor foo në kryesor këtë kohë.
>> Pra, foo int barabartë me 4, foo barabartë foo trefishtë, kur kemi bërë këtë thirrje,
trefishtë merr kopjen e vet i foo, kopjen e vet të 4.
Ajo thotë se kthehen 4 herë 3, apo çfarëdo ndryshueshme merr kaluar në kohë 3.
Dhe pastaj ne të caktojë kthimin Vlera e trefishtë për të foo përsëri.
Pra, kjo në fakt do të prishësh foo.
Kjo është e vetmja mënyrë për të bërë kjo me ndryshore lokale.
Pra, tani, nëse i shtojmë një tjetër linjë e kodit këtu
ne fund te kryesor deri shtypura nga vlera e foo,
kjo në fakt do të shtypura nga 12.
>> Shtrirja e ndryshueshme në përgjithësi është jo shumë e një problemi
në qoftë se ju emrin gjithë tuaj Variablat gjëra të ndryshme.
Por ajo mund të merrni lloj të keqe në qoftë se me të njëjtin emër ndryshueshme
shfaqet në funksione të shumta, e cila do të ndodhë shumë.
Nëse ju ndonjëherë punojnë në bota reale ku
ju jeni duke punuar në bashkëpunuese programet dhe njerëzit në ekipe të ndryshme
po punojnë së bashku për të shkruar të njëjtën gjë program ose të njëjtin grup të programeve,
ata shpesh do të ripërdorimin ndryshueshme emrat, veçanërisht ato të përbashkëta
si X, Y, i, j, dhe kështu me radhë.
>> Por kur variablat kanë të njëjtin emër, çështjet Fushëveprimi
mund të merrni pak e komplikuar për të kuptoj.
Për shembull, nuk e dini çfarë do të printohet
ne fund te programit veçantë?
Merrni një minutë.
Ndalo video dhe lexoni përmes këtij programi.
Ju mund të shihni në ne krye të ketë një deklaratë funksion
për një funksion të quajtur rritje.
Se funksioni merr një të vetme parametër, një numër i plotë që ne e quajmë x.
Dhe kjo nxjerr një numër të plotë.
Kjo është lloji kthimi në fillim.
>> Pastaj ne kemi kryesor, një çift i linjave e kodit në kryesor, i fundit i cili
është një deklaratë të shtypura.
Dhe mbani mend, kjo është çështja këtu.
Çfarë është në të vërtetë do të jetë printohen në fund të këtij funksioni?
Dhe pastaj ne fakt kemi Përcaktimi i rritjes më poshtë.
>> Pra, të marrë një minutë, hap përmes kodi, gjurmë gjërat jashtë.
A e dini se çfarë do të jenë të shtypura në fundi i këtij programi të veçantë?
>> Në rregull.
Shpresojmë, ju keni marrë disa sekonda të përpiqen dhe të kuptoj këtë jashtë.
Le të bëjmë atë së bashku.
>> Kështu që unë kam kaluar nga rritje e Deklarata në krye atje.
Ajo ishte lloj i një zbavitje.
Kjo nuk është e ndryshueshme e vet.
Ajo nuk ka qëllimin e vet.
Është vetëm një funksion Deklarata, kështu që për qëllime
e duke u përpjekur të kuptoj se çfarë është ndodh në këtë program,
ne mund edhe vetëm të shmangur atë.
>> Tani ne kemi në këtë rast, arsye ky problem është i ndërlikuar
është sepse ne kemi variabla lokale në dy kryesore dhe rritje, secila prej të cilave
është quajtur x.
Dhe sigurisht thelbi i kësaj çështjeje është duke u përpjekur për të Süss se cilat x merr ndryshuar
dhe si e bën atë të ndryshuar.
Kështu që unë kam me ngjyrë çdo shembull e X kjo është lokal të kuqe kryesor.
Dhe unë kam të ngjyrosura çdo shembull i x kjo është lokal të ardhura blu.
>> Njoftim në këtë linjë të tretë e kryesor, y barabartë me rritje të
x, kjo rritje nuk është duke u kaloi x kryesor-së, ose të kuqe x.
Ajo është duke u miratuar një kopje të saj.
Dhe ajo është vetëm do të punojë me se kopje e saj, blu x.
Nëse ju jeni matematikisht prirur, ju mund të
kanë menduar në vend të kësaj si x nën m për kryesor dhe x nën I për rritjes.
Por kjo është e njëjta ide.
x m sub, ose të kuqe e x në rrëshqitje e mëparshëm,
janë variablat që janë local-- është shembull i X në vend që
është lokal te kryesor, dhe x sub i, ose Variablat blu në slide e mëparshëm,
janë raste të x që janë lokale të ardhura.
>> Pra, ishin në gjendje të kuptoj se çfarë ky funksion printohen në fund?
Unë jam Doug Lloyd, dhe kjo është CS50.