[Powered by Google Translate] DAVID DICIURCIO: Så ett viktigt begrepp att förstå i
programmering är begreppet räckvidd.
Omfattning kan definieras som det sammanhang i vilket en variabel är
synliga eller åtkomliga.
Till exempel, låt oss säga att vi har en funktion, huvud, det är
tänkt att öka en variabel, X, 1-2.
Som vi kan se, initierar viktigaste x till ett, skriver
ut lite text, sedan körs funktionen ökningen, innan
trycka mer text.
Om denna funktion skulle fungera, skulle det
skriva ut x som 2.
Låt oss försöka det.
>> Så, som ni kan se, gör stora inte vad vi förväntas.
Den returnerar värdet 1 i stället
än 2 väntat.
Anledningen till detta fel kan förklaras av omfattning.
I funktionen, huvud, initieras vi X
endast inom funktionen.
Med andra ord, är variabeln x deklareras lokalt inom
funktion, huvud, och är inte tillgänglig
utanför funktionen.
Endast viktigaste kan komma X i denna situation.
När vi kallar steg vi inte passera x som ingången, men
endast en kopia av X.
Som ett resultat av detta, lägger funktionen inkrementet endast
värdet 1 till en kopia av värdet av x.
Men inte till x själv.
När vi kommer tillbaka till huvudgruppen har X själv inte förändrats alls.
Så skriva ut x kommer endast ger värdet 1.
>> Nå, då lämnar frågan: hur ska vi fixa
denna funktion?
En lösning är att ha ökning returnerar ett värde.
På detta sätt, funktionen inkrementet kommer
ge oss tillbaka ett heltal.
Så här är vår reviderade kod med
alternativa inkrement funktion.
Här återvände vi istället x + 1, snarare än bara slut
där x är lika med x + 1.
Också notera att vi ersatt produktionen av
ökning, tidigare ogiltig, med int, som anger att
ökning kommer nu passera tillbaka ett heltalsvärde.
Nu, efter inkrement körningar, återgår till ett värde av
2, precis som vi tänkt.
>> En annan situation som visar omfattningen betydelse
är i scopeloop.c.
I denna kod har vi en for-slinga där variabeln
totalt initieras under varje steg.
Tyvärr sammanställa denna kod inte.
Detta är eftersom variabeln totala faktiskt inte existerar
utanför for-slingan.
Variabler som deklarerats inom slingor existerar endast inom
slinga själv och demonstreras i vårt fel
meddelande, totalt odeklarerat.
Den rörliga totala har ännu inte deklareras inom ramen
av funktionen huvud.
Dessutom under varje iteration av vår for-slingan, vi
är återinitialisera vår totalt 0.
Detta i sig håller inte koden från kompilering, men det
skulle förhindra totalt från att någonsin summering till ett värde förbi 1.
>> Återigen, vad är det bästa sättet att åtgärda detta?
En av de enklare metoderna innefattar att den totala lokal till
funktionen, huvud, snarare än till slingan själv.
Detta kommer att uppgå till faktiskt öka, och slutligen,
att den kan skrivas ut efter for-slingan.
En annan teknik som jag ska bara kort sammanfatta skulle
vara användningen av globala variabler.
Globala variabler är variabler som deklareras före huvud
som upprätthåller sitt värde under hela programmet.
Naturligtvis kan funktionerna ändra värdet på en global,
men de går inte utanför ramen som lokala variabler.
Men med hjälp globala variabler tenderar att rynkade
på som dålig design, eftersom det finns bättre sätt att
dela data mellan funktioner.
Till exempel, med användning av pekare.
Men mer om det en annan gång.
>> Slutligen är det viktigt att ha en förståelse för omfattningen
inom ramen för datorns minne, eller RAM.
När vi utför ett program, lokala variabler och funktioner
sättes till en specifik plats i
RAM kallas stapeln.
Som funktioner gengäld stapeln ramar variablerna är
effektivt avlägsnas från stapeln frigöra mer minne.
Så när du granskar omfattning, se till att du kommer ihåg dessa tre
viktiga punkter.
Ett, omfattning kan vara antingen lokalt eller globalt.
Det beror på var variabeln är deklarerad.
Två, variabler deklarerade eller initieras funktioner är
lokal för denna funktion och kan inte ändras av andra
funktioner, åtminstone inte utan att använda pekare.
Slutligen, variablerna är också lokal loopar som är
deklareras enligt.
Variablerna är inte tillgängliga
utanför slingan.
>> Det var allt för nu omfattning.
Tack för att titta.