DOUG LLOYD: Eins og þú byrjar vinna með virka, Annar hlutur er að fara að verða mjög mikilvægt að skilja, sem er hugtakið Variable Gildissvið. Svo er svigrúm a einkennandi breytu sem skilgreinir sem virka sem breyta má nálgast. Það eru tvær aðal mælar í C, staðbundnar breytur og alþjóðlegt breytur. Nú, staðbundnar breytur geta aðeins að nálgast innan hlutverkum þar sem þeir eru búin. Þeir geta ekki nálgast hvert annað fall sem er til í forritinu, aðeins virka í sem það var búið til. Global breytur, hins hins vegar er hægt að nálgast með hvaða aðgerð í forritinu. Og ástæðan fyrir því er því þeir eru ekki búin til inni af sérhverri tegund virka. Við lýsum þeim utan allar aðgerðir, sem þýðir að hvert hlutverk veit hvar það er og hefur aðgang að og vinna það. Svo langt í námskeiðinu þú hefur nokkuð mikið verið að vinna eingöngu með staðbundnar breytur. Hér er dæmi um mjög, mjög einfalt Helsta hlutverk og mjög einfalt viðbótar fall sem við höfum skrifað. Í þessu tilviki, X, þar sem Ég hef litað grænt bara að varpa ljósi á dvalarstað eða umfang þeirrar breytu, er staðbundið við virka þrefaldur. Helstu getur ekki átt við x á öllum. Það veit ekki hvað það er. Engin önnur virka í raun, ef við hafði fleiri aðgerðir hér, gæti átt við x. Á sama hátt, niðurstöður sem ég hef litast blár, er staðbundin aðeins to main. Eina helstu veit hvað breytan niðurstaðan er. þrefaldur getur ekki notað það. Nú eins og ég nefndi, alþjóðlegt breytur eru ekki fyrir hendi. Ef þú játar með þá breytu utan hvaða aðgerð, allar aðgerðirnar í program geta átt við það. Þannig að í þessu tilfelli ég hef bent á grænt a global breyta yfirlýsingu. Í þessu tilviki er breyta vera lýst heitir heimsvísu, bara til að vera mjög skýr um það. Það er af gerðinni fljóta. Og ég tengt það gildi 0.5050. Þú munt taka eftir því að í helstu og þrefaldur, ég er fær um að vísa til alheims. Og í raun, ef ég fer í gegnum forritið eins og tilgreint er, helstu Fyrstu símtöl þrefaldur, þrefaldur fjölgar Alþjóðlegar um 3, sem setur gildið 1,5-eitthvað, 1.51 eða eitthvað svoleiðis, og þá helstu prentar einnig út verðmæti á heimsvísu. Svo helstu mun ekki prenta út 0.5050, það mun prenta út alþjóðlegt sinnum 3, 1,51. Svo þú hefur got til vera varkár þegar þú ert að vinna með alþjóðlegum breytur. Á meðan þau eru mjög sveigjanleg í vera fær um að koma upplýsingum um þannig að hver aðgerð getur notað það, það er einnig hægt að hafa nokkrar hættuleg afleiðingar ef einn virka breytingar gildi breytu áður en þú búast við það til að breyta. Hvers vegna er þessi aðgreining máli? Hvers vegna eigum við hvort sumum breytur eru staðbundin og aðrir eru alþjóðlegt? Jæja, að mestu leyti, staðbundnar breytur í C eru það sem er kallað samþykkt af verðmæti þegar við tökum virka símtalinu. Hvað þýðir það? Jæja, þegar breyta er liðinn með gildi, callee, sem er önnur leið til að segja aðgerðina það er að fá á breytu sem fær staðist í sem inntak, það er í raun ekki fá þá breytu sig. Það fær sína eigin afrit af því að vinna með. Þetta er mjög mikilvægt greinarmun. Við sáum bara annað síðan að með alþjóðlegum breytur, ef við vinna á heimsvísu breyta í eina virka, áhrif af því að ein aðgerð ber gegnum til allra aðra aðgerð. En með staðbundnar breytur, það er ekki satt. Hver aðgerð þegar það fær breytur sem inntak fengið afrit af þeim breytum, ekki breytur sig. Svo er það aukaverkun að? Það þýðir að breyta í hringir, sem virka sem er að gera virka símtalinu, er óbreytt nema þú hunsa það. Til dæmis, í þessum kóða foo er ekkert breyst. Int foo jafngildir 4, kalla þrefaldur af foo, inni þrefaldur, Við væntum þess að foo myndi margfölduð með 3 og aftur, en það er í raun engin áhrif. Hér þó, mjög lúmskur munur. Þetta þýðir að hafa áhrif við viljum. Ert þú sjá hvers vegna? Við erum þyngra foo í helstu þessum tíma. Svo INT foo jafngildir 4, foo jafngildir þrefaldur foo, þegar við gera það að hringja, þrefaldur fær eigið eintak af foo, eigið eintak af 4. Það segir aftur 4 sinnum 3, eða hvað breyta fær staðist á tímum 3. Og þá erum við að tengja aftur gildi þrefaldur að foo aftur. Svo þetta er í raun myndi skrifa foo. Þetta er eina leiðin til að gera þetta með heimamaður breytu. Svo nú ef við bætum annað lína af kóða hér í lok main til prenta út verðmæti foo, myndi það í raun prenta út 12. Variable Gildissvið almennt ekki of mikið vandamál ef þú nafn alla þína breytur mismunandi hluti. En það er hægt að fá svona viðbjóðslegur ef sama breytu nafninu birtist í margar aðgerðir, sem mun gerast mikið. Ef þú alltaf virka í hið raunverulega heimi þar þú ert að vinna á samstarf áætlanir og fólk í mismunandi hópa eru að vinna saman að því að skrifa það sama program eða sama mengi af forritum, þeir oft endurnýta breytu nöfn, sérstaklega algengar sjálfur eins x, y, i, j, og svo framvegis. En þegar breytur hafa sama nafn, umfang málefni getur fengið smá trickier að flokka. Til dæmis, þú veist hvað myndi prentast út í lok þessa tiltekna forrit? Taka eina mínútu. Gera hlé á vídeó og lesa í gegnum þetta forrit. Þú getur séð á topp hafa fallið yfirlýsingu fyrir aðgerð sem kallast stighækkun. Að virka tekur einn breytu, heiltala sem við köllum x. Og sem birtist heiltölu. Það er aftur gerð í upphafi. Þá höfum við helstu, a par af línum af kóða í helstu, síðasta sem er prentað yfirlýsing. Og mundu, það er spurningin hér. Hvað er í raun að fara að vera prentuð í lok þessa aðgerð? Og þá höfum við í raun Skilgreining vöxtur neðan. Svo taka eina mínútu, skref í gegnum kóðinn, rekja það út. Veistu hvað verða prentað á í lok þessa tilteknu forriti? Allt í lagi. Vonandi hefur þú tekið nokkrar sekúndur til að reyna að flokka þetta einn út. Við skulum gera það saman. Þannig að ég hef yfir út stighækkun er Yfirlýsing efst þar. Það var eins konar truflun. Það er ekki eigin breyta hennar. Það er ekki með eigin gildissvið hennar. Það er bara fall yfirlýsing, svo vegna að reyna að flokka út hvað er gerast í þessari áætlun, við gætum eins vel bara forðast það. Nú höfum við í þessu tilfelli, Ástæðan þetta vandamál er erfiður er vegna þess að við höfum staðbundnum breytur í bæði aðal og vöxtur, sem hver um sig er kallað x. Og auðvitað crux á þessu máli er reyna að Suss út sem x fær breytt og hvernig virkar það að fá breytt. Þannig að ég hef litað öllum tilfellum x sem er staðbundið við helstu rauðu. Og ég hef litað hvert eintak af x sem er staðbundin að hækka blár. Tilkynning í þeirri þriðju línu af helstu, jafnt Y aukningu x, sem vöxtur er ekki að vera framhjá helstu er X, eða á rauða X. Það er að fá samþykkt afrit af honum. Og það er bara að fara að vinna með að afrit af henni, bláa x. Ef þú ert stærðfræðilega hneigðist, þú gætir hafa í stað hugsað um þetta sem x undir m fyrir helstu og x undir i fyrir hækkun. En það er sama hugmynd. x undir m, eða rauða x er í fyrri mynd, eru breytur sem eru local-- er dæmi um x fremur að er staðbundið við aðal, og x undir i, eða blár breytur í skyggnu, eru dæmi um x að eru staðbundnar að hækka. Svo, varstu fær um að reikna út hvað þessi aðgerð prentuð á endanum? Ég er Doug Lloyd, og þetta er CS50.