Doug LLOYD: Kao što počnete rad s funkcijama,
još jedna stvar će postati jako važno da razumiju,
što je koncept varijablu opsegu.
Dakle, opseg je karakteristika varijable
koji definira iz kojih funkcija koje varijabla može pristupiti.
>> Postoje dvije osnovne opsega u C, lokalne varijable i globalne varijable.
Sada, lokalne varijable mogu samo može pristupiti unutar funkcija
u kojem oni stvorili.
Oni ne može pristupiti svaki drugi funkcija koja postoji u svom programu,
samo funkcija u koje je stvorio.
Globalne varijable, o s druge strane, može se pristupiti
bilo koja funkcija u programu.
A razlog za to je jer oni ne stvorena unutar
bilo određenu funkciju.
Mi ih proglasiti izvan svim funkcijama koje
znači da je svaka funkcija zna gdje to i mogu pristupiti i manipulirati.
>> Do sada je u toku ste lijepa mnogo radili isključivo
s lokalnim varijablama.
Evo primjer vrlo, vrlo Jednostavan glavna funkcija i vrlo jednostavan
Dodatna funkcija koje sam napisao.
U tom slučaju, x, koji je Ja sam zelene boje jednostavno
označite mjesto ili opseg te varijable,
je lokalno na funkciju trostrukog.
Glavna ne može odnositi na x na sve.
Ona ne zna što je to.
Niti jedna druga funkcija, u stvari, ako imala dodatne funkcije ovdje,
može upućivati ​​na x.
>> Slično tome, rezultati koji sam plave boje, lokalna samo glavni.
Samo glavna zna što varijabla rezultat.
Trostruka ne mogu ga koristiti.
>> Sada kao što sam spomenuo, ne postoje globalne varijable.
Ako izjaviti da varijablu izvan bilo funkcije,
sve funkcije u Program se odnosi na to.
Tako je u ovom slučaju sam istaknuo u zeleni globalna varijabla izjava.
U tom slučaju, varijabla biće proglašen
zove globalno, samo da biti vrlo jasno o tome.
To je tipa float.
A ja ga dodijeliti vrijednost 0.5050.
>> Primijetit ćete da u glavnom i trostruki, ja sam u mogućnosti da se odnosi na globalno.
A u stvari, ako idem preko programa kao što je navedeno, glavna prva pozivi trostruki,
trostruki umnožava globalne po 3, koji postavlja svoju vrijednost na 1,5-nešto,
1,51 ili nešto slično, i zatim glavni i ispisuje vrijednost
globalne.
Dakle, glavna neće ispisati 0.5050 ga, će ispisati globalne puta 3, 1.51.
Dakle, moraš biti oprezan kada radite s globalnim varijablama.
Dok su oni vrlo fleksibilna u bitak u mogućnosti da prođe podatke
okolo, tako da svaki funkcija može ga koristiti,
to također može imati neke opasne posljedice
ako je promjena jedna funkcija vrijednost varijable
Prije nego što očekujete da se to promijeni.
>> Zašto ta razlika važna?
Zašto mi je stalo da li neke varijable su lokalni i drugi su globalno?
Pa, za najveći dio, lokalne varijable u C su ono što se zove donosi vrijednost
kad smo napraviti funkciju poziv.
Što to znači?
>> Pa, kad je prošao varijabla po vrijednosti, u pozivani, što
je još jedan način govoreći funkciju koji prima varijablu koja
dobiva prošao u kao ulaz, to je zapravo ne dobivaju tu samu varijablu.
Ona dobiva vlastitu Kopija to raditi.
Ovo je stvarno važna razlika.
Upravo smo vidjeli prije sekundu da je s globalnim varijablama,
ako manipulirati globalna varijabla u jednu funkciju, učinak
time da jedna funkcija nosi do svake druge funkcije.
>> Ali s lokalnim varijablama, to nije istina.
Svaka funkcija, kada ga prima varijable kao ulaz
dobivaju kopije tih varijabli, ne same varijable.
Dakle, što je nuspojava toga?
To znači da je varijabla u pozivatelj, funkcija
je stvaranje funkcija poziv, je nepromijenjeno, osim ako ga nadjačati.
>> Na primjer, u tom kodu foo nije promijenilo na sve.
Int foo jednak 4, nazovite trostruki od foo, unutar triple,
očekivali bismo da će foo pomnožiti s 3 i vratio,
ali tu je zapravo nikakav učinak.
>> Ovdje ipak, vrlo suptilna razlika.
Ovo ima učinak koji želimo.
Vidite li zašto?
Mi preskakanja foo u glavnom ovom trenutku.
>> Dakle int foo jednaka 4, foo jednak trostruki foo, kada smo napraviti taj poziv,
Trostruka dobiva svoj primjerak od foo, vlastitom kopijom 4.
Ona kaže da se vrate 4 puta 3, ili što god varijabla dobiva prošao u vremenu 3.
A onda smo dodijeliti povratak vrijednost trostruko ponovno foo.
Dakle, to bi zapravo prebrisati foo.
To je jedini način da to učinite ovo s lokalnim varijable.
Pa sad, ako dodamo još linija koda ovdje
na kraju glavni na ispisati vrijednost foo,
to bi zapravo ispisati 12.
>> Varijabilni opseg općenito Ne previše problema
ako spomenemo sve svoje varijable različite stvari.
Ali to može dobiti kakve neugodne ako isto ime varijable
pojavljuje se u više funkcija, što će se dogoditi puno.
Ako ste ikada raditi u stvarni svijet u kojem
radite kolaborativni programa i ljudi u različitim timovima
rade zajedno napisati isti Program ili isti skup programa,
oni često će ponovno varijablu imena, osobito one uobičajene
kao što su x, y, I, J, i tako dalje.
>> No, kada su varijable isti naziv, djelokrug pitanja
može dobiti malo trickier analizirati.
Na primjer, znate li što bi se ispisati
na kraju ovaj program?
Uzmite minutu.
Stanka video i čitati kroz ovaj program.
Možete vidjeti na vrhu smo imaju funkciju izjavu
za funkciju zove prirast.
To je funkcija traje jedan parametar, cijeli broj koji zovemo x.
I to izlazi cijeli broj.
To je vrsta povratak na početku.
>> Onda smo glavni, par redaka koda u glavnom, posljednji od kojih
je izjava za ispis.
I zapamtite, to je pitanje ovdje.
Ono što se zapravo događa se tiskana na kraju ove funkcije?
I onda mi zapravo imaju Definicija prirasta ispod.
>> Dakle, uzeti minutu, korak po kod, pratiti stvari.
Znate li što će se ispisati na kraj ovom programu?
>> U redu.
Nadamo se da ste uzeli nekoliko sekundi pokušati analizirati ovu jednu van.
Učinimo to zajedno.
>> Tako sam prešao iz prirast a izjava na vrhu tamo.
To je vrsta ometanja.
Nije vlastiti promjenjiva.
To nema vlastiti djelokrug.
To je samo funkcija izjava, tako da za potrebe
pokušava analizirati ono što je događa u ovom programu,
možemo i samo ga izbjeći.
>> Sada smo u ovom slučaju, Razlog je taj problem je lukav
je zato što imamo lokalne varijable u i glavni i prirast, od kojih je svaki
zove x.
I naravno poanta ovog pitanja je pokušavajući Süss koji x dobiva promijenila
i kako to dobiti promijenilo.
Tako sam boji sve instance x to je lokalno na glavni crveno.
I ja sam obojen svaki primjerak x to je lokalna povećajte plave.
>> Obavijest u tom trećem retku od glavne, y jednak prirast
x, da prirast ne bude prošlo je glavna x, odnosno crveni x.
To je uzimajući donijela kopiju.
I to samo ide na posao s da kopija nje, plava x.
Ako ste matematički skloni, možda
umjesto toga mislili o tome što je x sub m za glavne i x sub I za prirast.
Ali to je ista ideja.
x sub m, odnosno crveni x-a u prethodnom slajdu,
su varijable koje su local-- je instanca x umjesto da
je lokalna na glavni, a x sub ja, ili plave varijabli u prethodnom slajdu,
su slučajevi da x su lokalni povećavati.
>> Dakle, bili ste u mogućnosti shvatiti što ova funkcija tiskana na kraju?
Ja sam Doug Lloyd, a to je CS50.