1 00:00:00,000 --> 00:00:05,300 2 00:00:05,300 --> 00:00:07,300 DOUG LLOYD: Eins og þú byrjar vinna með virka, 3 00:00:07,300 --> 00:00:09,966 Annar hlutur er að fara að verða mjög mikilvægt að skilja, 4 00:00:09,966 --> 00:00:12,380 sem er hugtakið Variable Gildissvið. 5 00:00:12,380 --> 00:00:14,490 Svo er svigrúm a einkennandi breytu 6 00:00:14,490 --> 00:00:18,860 sem skilgreinir sem virka sem breyta má nálgast. 7 00:00:18,860 --> 00:00:24,595 >> Það eru tvær aðal mælar í C, staðbundnar breytur og alþjóðlegt breytur. 8 00:00:24,595 --> 00:00:27,830 Nú, staðbundnar breytur geta aðeins að nálgast innan hlutverkum 9 00:00:27,830 --> 00:00:29,045 þar sem þeir eru búin. 10 00:00:29,045 --> 00:00:32,170 Þeir geta ekki nálgast hvert annað fall sem er til í forritinu, 11 00:00:32,170 --> 00:00:34,184 aðeins virka í sem það var búið til. 12 00:00:34,184 --> 00:00:36,350 Global breytur, hins hins vegar er hægt að nálgast 13 00:00:36,350 --> 00:00:37,719 með hvaða aðgerð í forritinu. 14 00:00:37,719 --> 00:00:40,260 Og ástæðan fyrir því er því þeir eru ekki búin til inni 15 00:00:40,260 --> 00:00:41,441 af sérhverri tegund virka. 16 00:00:41,441 --> 00:00:43,690 Við lýsum þeim utan allar aðgerðir, sem 17 00:00:43,690 --> 00:00:48,940 þýðir að hvert hlutverk veit hvar það er og hefur aðgang að og vinna það. 18 00:00:48,940 --> 00:00:52,010 >> Svo langt í námskeiðinu þú hefur nokkuð mikið verið að vinna eingöngu 19 00:00:52,010 --> 00:00:54,280 með staðbundnar breytur. 20 00:00:54,280 --> 00:00:58,320 Hér er dæmi um mjög, mjög einfalt Helsta hlutverk og mjög einfalt 21 00:00:58,320 --> 00:01:00,680 viðbótar fall sem við höfum skrifað. 22 00:01:00,680 --> 00:01:03,180 Í þessu tilviki, X, þar sem Ég hef litað grænt bara 23 00:01:03,180 --> 00:01:07,400 að varpa ljósi á dvalarstað eða umfang þeirrar breytu, 24 00:01:07,400 --> 00:01:09,240 er staðbundið við virka þrefaldur. 25 00:01:09,240 --> 00:01:12,300 Helstu getur ekki átt við x á öllum. 26 00:01:12,300 --> 00:01:14,259 Það veit ekki hvað það er. 27 00:01:14,259 --> 00:01:17,050 Engin önnur virka í raun, ef við hafði fleiri aðgerðir hér, 28 00:01:17,050 --> 00:01:19,360 gæti átt við x. 29 00:01:19,360 --> 00:01:23,520 >> Á sama hátt, niðurstöður sem ég hef litast blár, er staðbundin aðeins to main. 30 00:01:23,520 --> 00:01:26,980 Eina helstu veit hvað breytan niðurstaðan er. 31 00:01:26,980 --> 00:01:30,010 þrefaldur getur ekki notað það. 32 00:01:30,010 --> 00:01:32,580 >> Nú eins og ég nefndi, alþjóðlegt breytur eru ekki fyrir hendi. 33 00:01:32,580 --> 00:01:35,575 Ef þú játar með þá breytu utan hvaða aðgerð, 34 00:01:35,575 --> 00:01:38,290 allar aðgerðirnar í program geta átt við það. 35 00:01:38,290 --> 00:01:44,010 Þannig að í þessu tilfelli ég hef bent á grænt a global breyta yfirlýsingu. 36 00:01:44,010 --> 00:01:45,830 Í þessu tilviki er breyta vera lýst 37 00:01:45,830 --> 00:01:48,720 heitir heimsvísu, bara til að vera mjög skýr um það. 38 00:01:48,720 --> 00:01:49,720 Það er af gerðinni fljóta. 39 00:01:49,720 --> 00:01:52,940 Og ég tengt það gildi 0.5050. 40 00:01:52,940 --> 00:01:58,080 >> Þú munt taka eftir því að í helstu og þrefaldur, ég er fær um að vísa til alheims. 41 00:01:58,080 --> 00:02:03,480 Og í raun, ef ég fer í gegnum forritið eins og tilgreint er, helstu Fyrstu símtöl þrefaldur, 42 00:02:03,480 --> 00:02:10,440 þrefaldur fjölgar Alþjóðlegar um 3, sem setur gildið 1,5-eitthvað, 43 00:02:10,440 --> 00:02:16,080 1.51 eða eitthvað svoleiðis, og þá helstu prentar einnig út verðmæti 44 00:02:16,080 --> 00:02:16,620 á heimsvísu. 45 00:02:16,620 --> 00:02:24,424 Svo helstu mun ekki prenta út 0.5050, það mun prenta út alþjóðlegt sinnum 3, 1,51. 46 00:02:24,424 --> 00:02:27,340 Svo þú hefur got til vera varkár þegar þú ert að vinna með alþjóðlegum breytur. 47 00:02:27,340 --> 00:02:30,260 Á meðan þau eru mjög sveigjanleg í vera fær um að koma upplýsingum 48 00:02:30,260 --> 00:02:32,650 um þannig að hver aðgerð getur notað það, 49 00:02:32,650 --> 00:02:34,580 það er einnig hægt að hafa nokkrar hættuleg afleiðingar 50 00:02:34,580 --> 00:02:38,770 ef einn virka breytingar gildi breytu 51 00:02:38,770 --> 00:02:42,360 áður en þú búast við það til að breyta. 52 00:02:42,360 --> 00:02:44,200 >> Hvers vegna er þessi aðgreining máli? 53 00:02:44,200 --> 00:02:48,070 Hvers vegna eigum við hvort sumum breytur eru staðbundin og aðrir eru alþjóðlegt? 54 00:02:48,070 --> 00:02:53,880 Jæja, að mestu leyti, staðbundnar breytur í C eru það sem er kallað samþykkt af verðmæti 55 00:02:53,880 --> 00:02:56,087 þegar við tökum virka símtalinu. 56 00:02:56,087 --> 00:02:56,920 Hvað þýðir það? 57 00:02:56,920 --> 00:03:00,880 >> Jæja, þegar breyta er liðinn með gildi, callee, sem 58 00:03:00,880 --> 00:03:04,350 er önnur leið til að segja aðgerðina það er að fá á breytu sem 59 00:03:04,350 --> 00:03:08,465 fær staðist í sem inntak, það er í raun ekki fá þá breytu sig. 60 00:03:08,465 --> 00:03:12,490 Það fær sína eigin afrit af því að vinna með. 61 00:03:12,490 --> 00:03:14,350 Þetta er mjög mikilvægt greinarmun. 62 00:03:14,350 --> 00:03:18,250 Við sáum bara annað síðan að með alþjóðlegum breytur, 63 00:03:18,250 --> 00:03:23,240 ef við vinna á heimsvísu breyta í eina virka, áhrif 64 00:03:23,240 --> 00:03:26,390 af því að ein aðgerð ber gegnum til allra aðra aðgerð. 65 00:03:26,390 --> 00:03:28,920 >> En með staðbundnar breytur, það er ekki satt. 66 00:03:28,920 --> 00:03:32,060 Hver aðgerð þegar það fær breytur sem inntak 67 00:03:32,060 --> 00:03:36,367 fengið afrit af þeim breytum, ekki breytur sig. 68 00:03:36,367 --> 00:03:37,825 Svo er það aukaverkun að? 69 00:03:37,825 --> 00:03:40,450 Það þýðir að breyta í hringir, sem virka sem 70 00:03:40,450 --> 00:03:45,600 er að gera virka símtalinu, er óbreytt nema þú hunsa það. 71 00:03:45,600 --> 00:03:50,420 >> Til dæmis, í þessum kóða foo er ekkert breyst. 72 00:03:50,420 --> 00:03:55,450 Int foo jafngildir 4, kalla þrefaldur af foo, inni þrefaldur, 73 00:03:55,450 --> 00:03:58,850 Við væntum þess að foo myndi margfölduð með 3 og aftur, 74 00:03:58,850 --> 00:04:01,450 en það er í raun engin áhrif. 75 00:04:01,450 --> 00:04:03,460 >> Hér þó, mjög lúmskur munur. 76 00:04:03,460 --> 00:04:06,520 Þetta þýðir að hafa áhrif við viljum. 77 00:04:06,520 --> 00:04:07,730 Ert þú sjá hvers vegna? 78 00:04:07,730 --> 00:04:11,500 Við erum þyngra foo í helstu þessum tíma. 79 00:04:11,500 --> 00:04:16,899 >> Svo INT foo jafngildir 4, foo jafngildir þrefaldur foo, þegar við gera það að hringja, 80 00:04:16,899 --> 00:04:21,680 þrefaldur fær eigið eintak af foo, eigið eintak af 4. 81 00:04:21,680 --> 00:04:27,340 Það segir aftur 4 sinnum 3, eða hvað breyta fær staðist á tímum 3. 82 00:04:27,340 --> 00:04:32,109 Og þá erum við að tengja aftur gildi þrefaldur að foo aftur. 83 00:04:32,109 --> 00:04:33,650 Svo þetta er í raun myndi skrifa foo. 84 00:04:33,650 --> 00:04:35,816 Þetta er eina leiðin til að gera þetta með heimamaður breytu. 85 00:04:35,816 --> 00:04:38,120 Svo nú ef við bætum annað lína af kóða hér 86 00:04:38,120 --> 00:04:40,870 í lok main til prenta út verðmæti foo, 87 00:04:40,870 --> 00:04:45,030 myndi það í raun prenta út 12. 88 00:04:45,030 --> 00:04:48,600 >> Variable Gildissvið almennt ekki of mikið vandamál 89 00:04:48,600 --> 00:04:51,190 ef þú nafn alla þína breytur mismunandi hluti. 90 00:04:51,190 --> 00:04:54,920 En það er hægt að fá svona viðbjóðslegur ef sama breytu nafninu 91 00:04:54,920 --> 00:04:58,820 birtist í margar aðgerðir, sem mun gerast mikið. 92 00:04:58,820 --> 00:05:02,130 Ef þú alltaf virka í hið raunverulega heimi þar 93 00:05:02,130 --> 00:05:06,080 þú ert að vinna á samstarf áætlanir og fólk í mismunandi hópa 94 00:05:06,080 --> 00:05:11,000 eru að vinna saman að því að skrifa það sama program eða sama mengi af forritum, 95 00:05:11,000 --> 00:05:13,900 þeir oft endurnýta breytu nöfn, sérstaklega algengar sjálfur 96 00:05:13,900 --> 00:05:18,020 eins x, y, i, j, og svo framvegis. 97 00:05:18,020 --> 00:05:20,370 >> En þegar breytur hafa sama nafn, umfang málefni 98 00:05:20,370 --> 00:05:23,080 getur fengið smá trickier að flokka. 99 00:05:23,080 --> 00:05:26,790 Til dæmis, þú veist hvað myndi prentast út 100 00:05:26,790 --> 00:05:30,190 í lok þessa tiltekna forrit? 101 00:05:30,190 --> 00:05:31,280 Taka eina mínútu. 102 00:05:31,280 --> 00:05:33,382 Gera hlé á vídeó og lesa í gegnum þetta forrit. 103 00:05:33,382 --> 00:05:35,590 Þú getur séð á topp hafa fallið yfirlýsingu 104 00:05:35,590 --> 00:05:37,350 fyrir aðgerð sem kallast stighækkun. 105 00:05:37,350 --> 00:05:40,800 Að virka tekur einn breytu, heiltala sem við köllum x. 106 00:05:40,800 --> 00:05:42,610 Og sem birtist heiltölu. 107 00:05:42,610 --> 00:05:44,820 Það er aftur gerð í upphafi. 108 00:05:44,820 --> 00:05:48,140 >> Þá höfum við helstu, a par af línum af kóða í helstu, síðasta sem 109 00:05:48,140 --> 00:05:49,250 er prentað yfirlýsing. 110 00:05:49,250 --> 00:05:51,140 Og mundu, það er spurningin hér. 111 00:05:51,140 --> 00:05:54,240 Hvað er í raun að fara að vera prentuð í lok þessa aðgerð? 112 00:05:54,240 --> 00:05:58,110 Og þá höfum við í raun Skilgreining vöxtur neðan. 113 00:05:58,110 --> 00:06:01,760 >> Svo taka eina mínútu, skref í gegnum kóðinn, rekja það út. 114 00:06:01,760 --> 00:06:08,100 Veistu hvað verða prentað á í lok þessa tilteknu forriti? 115 00:06:08,100 --> 00:06:08,600 >> Allt í lagi. 116 00:06:08,600 --> 00:06:11,433 Vonandi hefur þú tekið nokkrar sekúndur til að reyna að flokka þetta einn út. 117 00:06:11,433 --> 00:06:13,370 Við skulum gera það saman. 118 00:06:13,370 --> 00:06:16,022 >> Þannig að ég hef yfir út stighækkun er Yfirlýsing efst þar. 119 00:06:16,022 --> 00:06:17,230 Það var eins konar truflun. 120 00:06:17,230 --> 00:06:18,570 Það er ekki eigin breyta hennar. 121 00:06:18,570 --> 00:06:19,879 Það er ekki með eigin gildissvið hennar. 122 00:06:19,879 --> 00:06:21,920 Það er bara fall yfirlýsing, svo vegna 123 00:06:21,920 --> 00:06:24,330 að reyna að flokka út hvað er gerast í þessari áætlun, 124 00:06:24,330 --> 00:06:26,660 við gætum eins vel bara forðast það. 125 00:06:26,660 --> 00:06:29,560 >> Nú höfum við í þessu tilfelli, Ástæðan þetta vandamál er erfiður 126 00:06:29,560 --> 00:06:34,030 er vegna þess að við höfum staðbundnum breytur í bæði aðal og vöxtur, sem hver um sig 127 00:06:34,030 --> 00:06:35,090 er kallað x. 128 00:06:35,090 --> 00:06:39,830 Og auðvitað crux á þessu máli er reyna að Suss út sem x fær breytt 129 00:06:39,830 --> 00:06:41,890 og hvernig virkar það að fá breytt. 130 00:06:41,890 --> 00:06:46,900 Þannig að ég hef litað öllum tilfellum x sem er staðbundið við helstu rauðu. 131 00:06:46,900 --> 00:06:52,040 Og ég hef litað hvert eintak af x sem er staðbundin að hækka blár. 132 00:06:52,040 --> 00:06:55,220 >> Tilkynning í þeirri þriðju línu af helstu, jafnt Y aukningu 133 00:06:55,220 --> 00:07:00,800 x, sem vöxtur er ekki að vera framhjá helstu er X, eða á rauða X. 134 00:07:00,800 --> 00:07:03,320 Það er að fá samþykkt afrit af honum. 135 00:07:03,320 --> 00:07:06,987 Og það er bara að fara að vinna með að afrit af henni, bláa x. 136 00:07:06,987 --> 00:07:08,820 Ef þú ert stærðfræðilega hneigðist, þú gætir 137 00:07:08,820 --> 00:07:14,230 hafa í stað hugsað um þetta sem x undir m fyrir helstu og x undir i fyrir hækkun. 138 00:07:14,230 --> 00:07:15,700 En það er sama hugmynd. 139 00:07:15,700 --> 00:07:18,999 x undir m, eða rauða x er í fyrri mynd, 140 00:07:18,999 --> 00:07:21,790 eru breytur sem eru local-- er dæmi um x fremur að 141 00:07:21,790 --> 00:07:26,900 er staðbundið við aðal, og x undir i, eða blár breytur í skyggnu, 142 00:07:26,900 --> 00:07:30,760 eru dæmi um x að eru staðbundnar að hækka. 143 00:07:30,760 --> 00:07:36,220 >> Svo, varstu fær um að reikna út hvað þessi aðgerð prentuð á endanum? 144 00:07:36,220 --> 00:07:39,420 Ég er Doug Lloyd, og þetta er CS50. 145 00:07:39,420 --> 00:07:41,542