DOUG LLOYD: Ako začnete práca s funkciami,
ďalšia vec sa stane naozaj dôležité pochopiť,
ktorý je predstava o premenné rozsahu.
Takže rozsah je charakteristika premenné
, Ktorá definuje, z ktorého funkciou táto premenná možno získať prístup.
>> Existujú dva základné odbory v C, lokálne premenné a globálne premenné.
Teraz môžu iba lokálne premenné byť prístupné v rámci funkcie
, V ktorom sú vytvorené.
Nemôžu pristupovať každý druhý funkcia, ktorá existuje vo vašom programe,
iba funkcie v ktorý bol vytvorený.
Globálne premenné, na strane naopak, možno pristupovať
by akékoľvek funkcie v programe.
A dôvod pre to je pretože to nie sú vytvorené vo vnutri
akejkoľvek konkrétnej funkcie.
Prehlasujeme, je mimo všetky funkcie, ktoré
Znamená to, že každá funkcia vie, kde to je a môže pristupovať a manipulovať.
>> Doteraz sa v priebehu nemáš dosť veľa pracuje výhradne
s lokálnymi premennými.
Tu je príklad veľmi, veľmi jednoduché hlavné funkcie, a to veľmi jednoduchý
doplnková funkcie, ktoré sme v písomnej forme.
V tomto prípade, x, ktorý Ja som len zelenej farbe
zvýraznite lokalitu alebo dosah tejto premennej,
je miestna funkciu trojitého.
Hlavné nemôže odkazovať na x vôbec.
To nevie, čo to je.
Žiadne iné funkcie, v skutočnosti, ak by sme mal ďalšie funkcie tu,
by sa mohla týkať x.
>> Podobne, výsledky, ktoré som modrej farby, je lokálne iba na hlavnej.
Len hlavné vie, čo premenná výsledok.
trojnásobný nemôže použiť.
>> Teraz, ako som už spomenul, existujú globálne premenné.
Ak deklarovať tejto premennej mimo akejkoľvek funkcie,
všetky funkcie v Program môže odkazovať sa na to.
Takže v tomto prípade som zvýraznené zelená a globálne premenné vyhlásenie.
V tomto prípade je Premenná bytosť deklarovaná
sa nazýva globálne, len preto, aby byť veľmi jasné, o tom.
To je typu float.
A ja som mu priradiť hodnota 0.5050.
>> Všimnite si, že v hlavnej a trojitý, som schopný odkazovať na globálne.
A v skutočnosti, keď pôjdem prostredníctvom programu ako je uvedené, hlavnou prvé výzvy triple,
trojité násobí globálne o 3, ktoré nastaví jeho hodnotu na 1,5-niečo,
1.51 alebo niečo také, a potom hlavný tiež vytlačí hodnotu
na globálne.
Takže hlavný nebude tlačiť 0.5050 to, vytlačí globálne krát 3, 1.51.
Takže musíš byť opatrní pri pracujete s globálne premenné.
Zatiaľ čo oni sú veľmi flexibilné v budú môcť odovzdať informácie
okolo tak, že každý Funkciu možno použiť,
to tiež môže mať niektoré nebezpečné dôsledky
ak zmení jedna funkcia hodnota premennej
než sa očakávať, že to je potrebné zmeniť.
>> Prečo tento rozdiel na tom?
Prečo sa nám jedno, či niektoré premenné sú miestne a iní sú globálne?
No, z väčšej časti, lokálne premenné v C sú to, čo sa nazýva odovzdané hodnotou
keď urobíme volanie funkcie.
Čo to znamená?
>> Tak, keď je odovzdaný premenná hodnotou, volaným, ktorý
je ďalší spôsob, ako hovoriť funkcie ktorý dostáva premennú, ktorá
dostane prešiel v ako vstup, je to vlastne nedostane túto premennú sám.
Prijíma vlastné kópiu, ktorá s ním pracovať.
To je naozaj dôležitý rozdiel.
Práve sme videli pred sekundou že u globálnych premenných,
ak budeme manipulovať globálnej premenná v jednej funkcii, účinok
v tom, že jedna funkcia nesie prostredníctvom na všetky ostatné funkcie.
>> Ale s lokálnymi premennými, že to nie je pravda.
Každá funkcia, ak ho prijíma premenné ako vstup
dostať kópie týchto premenných, nie so samotnými premenné.
Takže to, čo je vedľajší účinok, že?
To znamená, že premenná v volajúci, funkcia, ktorá
je robiť volanie funkcie, je bezo zmeny pokiaľ ju prepísať.
>> Napríklad, v tomto kóde foo sa vôbec nezmenila.
Int foo sa rovná 4, volajte triple z foo, vnútri triple,
by sme očakávať, že by foo vynásobí 3 a vrátil sa,
ale je to vlastne žiadny účinok.
>> Tu však, veľmi jemný rozdiel.
To však mať za následok, čo chceme.
Vidíte, prečo?
Sme naliehavými foo v hlavnom tejto dobe.
>> Takže int foo sa rovná 4, foo rovná triple foo, keď urobíme, ktoré vyžadujú,
triple dostane jeho vlastné kópiu Foo, vlastné kópiu 4.
To hovorí, že sa vrátiť 4 krát 3, alebo čo premenná je odovzdaný v čase 3.
A potom sme priradiť návratnosť Hodnota triple opäť foo.
Takže to vlastne by prepísanie foo.
To je jediný spôsob, ako robiť to s lokálne premenné.
Takže teraz, keď sme sa pridať ďalšie riadok kódu tu
Na konci Mohanom do vytlačiť hodnotu foo,
že by v skutočnosti vytlačiť 12.
>> Variabilné rozsah je všeobecne nie je príliš veľký problém
Ak názov všetky vaše Premenné rôzne veci.
Ale to môže dostať druh škaredé Ak rovnaký názov premennej
sa objaví v rôznych funkciách, ktorá sa bude diať veľa.
Ak ste niekedy robiť prácu v skutočný svet, kde
pracujete na kolaboratívne programy a ľudia v rôznych tímoch
spolupracujú písať to isté Program alebo rovnaký súbor programov,
budú často opakovane používať premennú mená, najmä obyčajné
ako x, y, I, J, a tak ďalej.
>> Ale keď premenné majú rovnaký názov, otázky rozsah
môže byť trochu zložitejšie analyzovať.
Napríklad, viete, čo by vytlačiť
Na konci tohto konkrétneho programu?
Take minútu.
Pozastaviť video a čítať prostredníctvom tohto programu.
Môžete vidieť v hornej my majú vyhlásenie o funkciu
pre funkciu nazvanú prírastok.
Táto funkcia trvá jeden parameter, celé číslo, ktoré nazývame x.
A to výstupy celé číslo.
To je návratový typ na začiatku.
>> Potom máme hlavné, pár riadkov kódu v hlavnej, z ktorých posledná
je tlačová vyhlásenie.
A pamätajte, že je to otázka tu.
To, čo sa vlastne bude vytlačené na konci tejto funkcie?
A potom sme vlastne mať Definícia prírastku nižšie.
>> Tak sa chvíľku, krokovať kód, stopové veci.
Viete, čo sa bude tlačiť na koniec tohto konkrétneho programu?
>> Dobre.
Dúfajme, že si vziať pár sekúnd aby sa pokúsila analyzovať tento jeden von.
Poďme to urobiť spoločne.
>> Takže som prečiarknutá prírastok je Vyhlásenie v tam hore.
Bolo to trochu rozptýlenia.
Nie je to jeho vlastný variabilný.
Nemá svoj vlastný priestor.
Je to len funkcie vyhlásenie, takže na účely
sa snaží analyzovať, čo je deje v tomto programe,
môžeme rovnako dobre sa mu vyhnúť.
>> Teraz máme v tomto prípade, Dôvodom tohto problému je zložité
je preto, že máme lokálne premenné v oba hlavné a prírastok, z ktorých každý
je tzv x.
A samozrejme podstata tohto problému je snaží sa Süss, aké x dostane zmenený
a ako sa dostať k zmene.
Takže som farebný všetky výskyty x, ktorá je lokálne na hlavnej červenej.
A ja som farebné každý výskyt x, ktorá je miestny zvýšiť modrej.
>> Všimnite si v tomto treťom riadku z hlavnej, y sa rovná prírastok
x, že prírastok nie je prešiel hlavné je x, alebo červený x.
Začína to prešiel jeho kópiu.
A to len bude pracovať s že kópia toho, modrá x.
Ak ste matematicky naklonený, môžete
namiesto toho myslel na to, ako x sub m pre hlavné a sub x Aj pre prírastok.
Ale je to rovnaký nápad.
x sub m, alebo červený x je v predchádzajúcom snímke,
sú premenné, ktoré sú local-- je inštancia x skôr, že
je miestna hlavné, a x i náhradník, alebo modré premenné v predchádzajúcom snímke,
sú prípady, ktoré x sú miestne zvýšiť.
>> Takže, ste boli schopní zistiť, čo Táto funkcia vytlačené na konci?
Som Doug Lloyd, a to je CS50.