DOUG LLOYD: As jy begin werk met funksies,
Nog 'n ding gaan word werklik belangrik om te verstaan,
wat is die konsep van veranderlike omvang.
So is 'n omvang kenmerk van 'n veranderlike
wat bepaal waaruit funksies daardie veranderlike kan verkry word.
>> Daar is twee primêre bestekke in C, plaaslike veranderlikes en globale veranderlikes.
Nou, plaaslike veranderlikes kan net verkry binne die werksaamhede
waarin hulle geskep.
Hulle kan nie verkry word deur elke ander funksie wat bestaan ​​in jou program,
slegs die funksie in wat dit geskep is.
Globale veranderlikes op die ander kant, kan verkry word
deur enige funksie in die program.
En die rede daarvoor is want hulle is nie in geskep
van 'n bepaalde funksie.
Ons verklaar hulle buite al die funksies wat
beteken dat elke funksie weet waar dit is en kan toegang en manipuleer dit.
>> Tot dusver in die kursus wat jy het mooi veel uitsluitlik werk
met plaaslike veranderlikes.
Hier is 'n voorbeeld van 'n baie, baie eenvoudige belangrikste funksie en 'n baie eenvoudige
addisionele funksie wat ons geskryf het.
In hierdie geval, x, wat Ek het groen net gekleurde
om die omgewing te beklemtoon of die omvang van daardie veranderlike,
is plaaslike tot die funksie trippel.
hoof kan nie verwys na x at all.
Dit maak nie weet wat dit is.
Geen ander funksie, in werklikheid, as ons het bykomende funksies in hier,
kan verwys na x.
>> Net so, lei wat ek het gekleurde blou, is plaaslike net na.
Slegs belangrikste weet wat die veranderlike resultaat is.
triple kan dit nie gebruik nie.
>> Nou as ek genoem het, globale veranderlikes bestaan ​​nie.
As jy verklaar dat veranderlike buite enige funksie,
al die funksies in die program kan verwys.
So in hierdie geval Ek het uitgelig in groen 'n globale veranderlike verklaring.
In hierdie geval, die veranderlike verklaar
is globale genoem, net om wees baie duidelik daaroor.
Dit is van die tipe float.
En ek gee dit die waarde 0,5050.
>> Jy sal sien dat in die belangrikste en in trippel, ek is in staat om te verwys na die globale.
En in die feit, as ek gaan deur die program soos aangedui, hoof eerste oproepe trippel,
triple vermeerder globale deur 3, wat stel sy waarde tot 1,5-iets,
1,51 of iets soos dit, en dan belangrikste druk ook die waarde
van die globale.
So belangrikste sal nie druk 0,5050, dit sal druk globale keer 3, 1.51.
So jy het om versigtig te wees wanneer jy werk met globale veranderlikes.
Terwyl hulle is baie buigsaam in in staat is om inligting te slaag
rondom sodat elke funksie kan dit gebruik,
dit kan ook 'n paar het gevaarlike gevolge
As een funksie verander die waarde van 'n veranderlike
voordat jy verwag om dit te verander.
>> Waarom het hierdie onderskeid saak?
Hoekom moet ons omgee of sommige veranderlikes is plaaslike en ander globale?
Wel, vir die grootste deel, plaaslike veranderlikes in C is wat genoem verbygegaan waarde
wanneer ons 'n funksie oproep.
Wat beteken dit?
>> Wel, wanneer 'n veranderlike is verby volgens waarde die callee, wat
is 'n ander manier van die funksie te sê wat die ontvangs van die veranderlike wat
kry geslaag in as 'n inset, is dit eintlik ontvang nie daardie veranderlike self.
Dit ontvang sy eie afskrif daarvan om te werk met.
Dit is 'n baie belangrike onderskeid.
Ons het net 'n tweede gelede wat met globale veranderlikes,
as ons manipuleer die globale veranderlike in een funksie, die effek
in daardie een funksie dra deur na elke ander funksie.
>> Maar met die plaaslike veranderlikes, Dis nie waar nie.
Elke funksie wanneer dit ontvang veranderlikes as insette
afskrifte van daardie veranderlikes ontvang nie die veranderlikes self.
So, wat is die newe-effek van dit?
Dit beteken dat die veranderlike in die oproeper, die funksie wat
is die maak van die funksie, is onveranderd, tensy jy dit ignoreer.
>> Byvoorbeeld, in hierdie kode cat is glad nie verander nie.
Int cat gelyk 4, bel driedubbele van cat, binnekant van trippel,
sou ons verwag dat cat sou vermenigvuldig met 3 en teruggegaan
maar daar is eintlik geen effek.
>> Hier egter 'n baie subtiele verskil.
Dit het wel die effek wat ons wil.
Sien jy hoekom?
Ons oorheersende cat in die belangrikste hierdie tyd.
>> So int cat gelyk 4, cat gelyk triple cat, wanneer ons die oproep,
triple kry sy eie kopie van cat, sy eie afskrif van 4.
Dit sê terugkeer 4 keer 3, of wat ook al veranderlike kry geslaag in tye 3.
En dan is die terugkeer toewys ons waarde van die drie weer foo.
So dit is eintlik sou cat oorskryf.
Dit is die enigste manier om dit te doen dit met die plaaslike veranderlike.
So nou as ons 'n ander by te voeg reël van die kode hier
aan die einde van die hoof te druk die waarde van cat,
dit sou in werklikheid uit te druk 12.
>> Veranderlike omvang is algemeen nie te veel van 'n probleem
as jy al die naam van jou veranderlikes verskillende dinge.
Maar dit kan soort van nare kry As dieselfde veranderlike naam
verskyn in verskeie funksies, wat sal 'n baie gebeur.
As jy al ooit werk nie in die werklike wêreld waar
jy besig is op gesamentlike programme en mense in verskillende spanne
werk saam om dieselfde te skryf program of dieselfde stel van programme,
hulle sal gereeld veranderlike hergebruik name, veral algemeen kinders
soos x, y, i, j, en so aan.
>> Maar toe veranderlikes dieselfde naam, omvang kwessies
kan kry 'n bietjie moeiliker om te ontleed.
Byvoorbeeld, weet jy wat sou uitgedruk
aan die einde van hierdie program?
Neem 'n minuut.
Stop die video en lees deur middel van hierdie program.
Jy kan by die top ons sien het 'n funksie verklaring
vir 'n funksie genoem inkrement.
Daardie funksie neem 'n enkele parameter, 'n heelgetal wat ons x bel.
En dit uitset 'n heelgetal.
Dit is die soort opbrengs aan die begin.
>> Dan het ons hoof, 'n paar van die lyne van die kode in die belangrikste, die laaste van wat
is 'n druk verklaring.
En onthou, dit is die vraag wat hier.
Wat is eintlik gaan wees gedruk teen die einde van hierdie funksie?
En dan het ons eintlik die definisie van inkrement hieronder.
>> So neem 'n minuut, stap vir stap deur die kode, spoor dinge uit.
Weet jy wat sal ten gedruk die einde van hierdie program?
>> Alles reg.
Hopelik, jy het 'n paar sekondes geneem om te probeer en ontleed hierdie een uit.
Kom ons doen dit saam.
>> So ek het gekruis uit inkrement se verklaring aan die bokant is daar.
Dit was soort van 'n afleiding.
Dit is nie sy eie veranderlike.
Dit hoef nie sy eie omvang.
Dis net 'n funksie verklaring, so vir die doeleindes
probeer om te ontleed uit wat gebeur in hierdie program,
Ons kan net sowel dit vermy.
>> Nou het ons in hierdie geval, die rede waarom hierdie probleem is lastig
is omdat ons plaaslike veranderlikes in beide hoof- en inkrement, wat elk
is genoem x.
En natuurlik die kern van hierdie kwessie is probeer om uitkyk wat x kry verander
en hoe dit verander kry.
So ek het telkens gekleurde van x wat die plaaslike na rooi.
En ek het elke geval van gekleurde x dis plaaslike tot inkrementeer blou.
>> Kennisgewing in die derde lyn van die belangrikste, y is gelyk aan inkrement
x, is dat aanwas nie geslaag belangrikste se x, of die rooi x.
Dit raak geslaag 'n afskrif van dit.
En dit gaan slegs om te werk met daardie afskrif daarvan, die blou x.
As jy wiskundig is geneig is, kan jy
het in plaas gedink dit as x sub m vir die hoof en x sub i vir inkrement.
Maar dit is dieselfde idee.
x sub m, of die rooi x se in die vorige skyfie,
is die veranderlikes wat local-- is is die geval van x eerder dat
is plaaslike na, en x sub i, of die blou veranderlikes in die vorige skyfie,
is die gevalle van x wat is plaaslike tot inkrementeer.
>> So, was jy in staat om uit te vind wat hierdie funksie gedruk aan die einde?
Ek is Doug Lloyd, en dit is CS50.