DOUG LLOYD: Jak začnete práce s funkcemi,
další věc se stane opravdu důležité pochopit,
který je představa o proměnné rozsahu.
Takže rozsah je charakteristika proměnné
, která definuje, ze kterého funkcí tato proměnná lze získat přístup.
>> Existují dva základní obory v C, lokální proměnné a globální proměnné.
Nyní mohou pouze lokální proměnné být přístupné v rámci funkce
, ve kterém jsou vytvořeny.
Nemohou přistupovat každý druhý funkce, která existuje ve vašem programu,
pouze funkce v který byl vytvořen.
Globální proměnné, na straně naopak, lze přistupovat
by jakékoliv funkce v programu.
A důvod pro to je protože to nejsou vytvoreny uvnitr
jakékoliv konkrétní funkce.
Prohlašujeme, je mimo všechny funkce, které
Znamená to, že každá funkce ví, kde to je a může přistupovat a manipulovat.
>> Dosud se v průběhu nemáš dost hodně pracuje výhradně
s lokálními proměnnými.
Zde je příklad velmi, velmi jednoduché hlavní funkce, a to velmi jednoduchý
doplňková funkce, které jsme v písemné formě.
V tomto případě, x, který Já jsem jen zelené barvě
zvýrazněte lokalitu nebo dosah této proměnné,
je místní funkci trojitého.
Hlavní nemůže odkazovat na x vůbec.
To neví, co to je.
Žádné jiné funkce, ve skutečnosti, pokud bychom měl další funkce tady,
by se mohla týkat x.
>> Podobně, výsledky, které jsem modré barvy, je lokální pouze na hlavní.
Pouze hlavní ví, co proměnná výsledek.
trojnásobný nemůže použít.
>> Teď, jak jsem již zmínil, existují globální proměnné.
Pokud deklarovat této proměnné vně jakékoliv funkce,
všechny funkce v Program může odkazovat se na to.
Takže v tomto případě jsem zvýrazněny zelená a globální proměnné prohlášení.
V tomto případě je Proměnná bytost deklarována
se nazývá globální, jen proto, aby být velmi jasné, o tom.
To je typu float.
A já jsem mu přidělit hodnotu 0.5050.
>> Všimněte si, že v hlavní a trojitý, jsem schopen odkazovat na globální.
A ve skutečnosti, když půjdu prostřednictvím programu jak je uvedeno, hlavní první výzvy triple,
trojité násobí globální o 3, které nastaví jeho hodnotu na 1,5-něco,
1.51 nebo něco takového, a pak hlavní také vytiskne hodnotu
na globální.
Takže hlavní nebude tisknout 0.5050 to, vytiskne globální krát 3, 1.51.
Takže musíš být opatrní při pracujete s globální proměnné.
Zatímco oni jsou velmi flexibilní v budou moci předat informace
kolem tak, že každý Funkci lze použít,
to také může mít některé nebezpečné důsledky
pokud změní jedna funkce hodnota proměnné
než se očekávat, že to je třeba změnit.
>> Proč tento rozdíl na tom?
Proč se nám jedno, jestli některé proměnné jsou místní a jiní jsou globální?
No, z větší části, lokální proměnné v C jsou to, co se nazývá předány hodnotou
když uděláme volání funkce.
Co to znamená?
>> Tak, když je předán proměnná hodnotou, volaným, který
je další způsob, jak říkat funkce který dostává proměnnou, která
dostane prošel v jako vstup, je to vlastně neobdrží tuto proměnnou sám.
Přijímá vlastní kopii, která s ním pracovat.
To je opravdu důležitý rozdíl.
Právě jsme viděli před vteřinou že u globálních proměnných,
pokud budeme manipulovat globální proměnná v jedné funkci, účinek
v tom, že jedna funkce nese prostřednictvím na všechny ostatní funkce.
>> Ale s lokálními proměnnými, to není pravda.
Každá funkce, pokud jej přijímá proměnné jako vstup
obdržet kopie těchto proměnných, ne se samotnými proměnné.
Takže to, co je vedlejší účinek, že?
To znamená, že proměnná v volající, funkce, která
je dělat volání funkce, je beze změny pokud ji přepsat.
>> Například, v tomto kódu foo se vůbec nezměnila.
Int foo se rovná 4, volejte triple z foo, uvnitř triple,
bychom očekávat, že by foo vynásobí 3 a vrátil se,
ale je to vlastně žádný účinek.
>> Zde však, velmi jemný rozdíl.
To však mít za následek, co chceme.
Vidíte, proč?
Jsme naléhavými foo v hlavním této době.
>> Takže int foo se rovná 4, foo rovná triple foo, když uděláme, které vyžadují,
triple dostane jeho vlastní kopii Foo, vlastní kopii 4.
To říká, že se vrátit 4 krát 3, nebo co proměnná je předán v době 3.
A pak jsme přiřadit návratnost Hodnota triple opět foo.
Takže to vlastně by přepsání foo.
To je jediný způsob, jak dělat to s lokální proměnné.
Takže teď, když jsme se přidat další řádek kódu zde
Na konci Mohanem do vytisknout hodnotu foo,
že by ve skutečnosti vytisknout 12.
>> Variabilní rozsah je obecně není příliš velký problém
Pokud název všechny vaše Proměnné různé věci.
Ale to může dostat druh ošklivé Pokud stejný název proměnné
se objeví v různých funkcích, která se bude dít hodně.
Pokud jste někdy dělat práci v skutečný svět, kde
pracujete na kolaborativní programy a lidé v různých týmech
spolupracují psát totéž Program nebo stejný soubor programů,
budou často opakovaně používat proměnnou jména, zejména obyčejné
jako x, y, I, J, a tak dále.
>> Ale když proměnné mají stejný název, otázky rozsah
může být trochu složitější analyzovat.
Například, víte, co by vytisknout
Na konci tohoto konkrétního programu?
Take minutu.
Pozastavit video a číst prostřednictvím tohoto programu.
Můžete vidět v horní my mají prohlášení o funkci
pro funkci nazvanou přírůstek.
Tato funkce trvá jeden parametr, celé číslo, které nazýváme x.
A to výstupy celé číslo.
To je návratový typ na začátku.
>> Pak máme hlavní, pár řádků kódu v hlavní, z nichž poslední
je tisková prohlášení.
A pamatujte, že je to otázka tady.
To, co se vlastně bude vytištěny na konci této funkce?
A pak jsme vlastně mít Definice přírůstku níže.
>> Tak se chvilku, krokovat kód, stopové věci.
Víte, co se bude tisknout na konec tohoto konkrétního programu?
>> Dobře.
Doufejme, že si vzít pár vteřin aby se pokusila analyzovat tento jeden ven.
Pojďme to udělat společně.
>> Takže jsem přeškrtnutá přírůstek je Prohlášení v tam nahoře.
Bylo to trochu rozptýlení.
Není to jeho vlastní variabilní.
Nemá svůj vlastní prostor.
Je to jen funkce prohlášení, takže pro účely
se snaží analyzovat, co je děje v tomto programu,
můžeme stejně dobře se mu vyhnout.
>> Nyní máme v tomto případě, Důvodem tohoto problému je složité
je proto, že máme lokální proměnné v oba hlavní a přírůstek, z nichž každý
je tzv x.
A samozřejmě podstata tohoto problému je snaží se Süss, jaké x dostane změněn
a jak se dostat ke změně.
Takže jsem barevný všechny výskyty x, která je lokální na hlavní červené.
A já jsem barevné každý výskyt x, která je místní zvýšit modré.
>> Všimněte si v tomto třetím řádku z hlavní, y se rovná přírůstek
x, že přírůstek není prošel hlavní je x, nebo červený x.
Začíná to prošel jeho kopii.
A to jen bude pracovat s že kopie toho, modrá x.
Pokud jste matematicky nakloněný, můžete
místo toho myslel na to, jak x sub m pro hlavní a sub x I pro přírůstek.
Ale je to stejný nápad.
x sub m, nebo červený x je v předchozím snímku,
jsou proměnné, které jsou local-- je instance x spíš, že
je místní hlavní, a x i náhradník, nebo modré proměnné v předchozím snímku,
jsou případy, které x jsou místní zvýšit.
>> Takže, jste byli schopni zjistit, co Tato funkce vytištěny na konci?
Jsem Doug Lloyd, a to je CS50.