1 00:00:00,000 --> 00:00:05,300 2 00:00:05,300 --> 00:00:07,300 DOUG LLOYD: Bilang ka magsimula nagtatrabaho sa mga pag-andar, 3 00:00:07,300 --> 00:00:09,966 isa pang bagay ay pagpunta sa maging talagang mahalaga na maunawaan, 4 00:00:09,966 --> 00:00:12,380 na kung saan ay ang konsepto ng variable na saklaw. 5 00:00:12,380 --> 00:00:14,490 Kaya saklaw ay isang katangian ng isang variable 6 00:00:14,490 --> 00:00:18,860 na tumutukoy kung saan ang mga function maaaring ma-access na variable. 7 00:00:18,860 --> 00:00:24,595 >> Mayroong dalawang pangunahing mga saklaw sa C, lokal na mga variable at global variable. 8 00:00:24,595 --> 00:00:27,830 Ngayon, ang mga lokal na mga variable ay maaari lamang ma-access sa loob ng function 9 00:00:27,830 --> 00:00:29,045 kung saan sila ay nilikha. 10 00:00:29,045 --> 00:00:32,170 Hindi nila maaaring ma-access sa pamamagitan ng lahat ng iba pang function na umiiral sa iyong programa, 11 00:00:32,170 --> 00:00:34,184 lamang ang mga function sa na kung saan ito ay nilikha. 12 00:00:34,184 --> 00:00:36,350 Global variable, sa kabilang dako, maaaring ma-access 13 00:00:36,350 --> 00:00:37,719 sa pamamagitan ng anumang mga function sa programa. 14 00:00:37,719 --> 00:00:40,260 At ang mga dahilan para sa na dahil hindi sila ay ginawa sa loob ng 15 00:00:40,260 --> 00:00:41,441 ng anumang partikular na function. 16 00:00:41,441 --> 00:00:43,690 Ipinapahayag namin ang mga ito sa labas ng ang lahat ng mga pag-andar, kung saan 17 00:00:43,690 --> 00:00:48,940 ay nangangahulugan na alam ng bawat pag-andar na kung saan ang ito ay at maaaring ma-access at paggamit ng ito. 18 00:00:48,940 --> 00:00:52,010 >> Sa ngayon sa course na sa iyo pretty marami ay nagtatrabaho ng eksklusibo 19 00:00:52,010 --> 00:00:54,280 sa mga lokal na mga variable. 20 00:00:54,280 --> 00:00:58,320 Narito ang isang halimbawa ng isang tunay, tunay simple pangunahing pag-andar at isang napaka-simple 21 00:00:58,320 --> 00:01:00,680 karagdagang function na namin ang nakasulat. 22 00:01:00,680 --> 00:01:03,180 Sa kasong ito, x, na kung saan Ko na kulay berde lamang 23 00:01:03,180 --> 00:01:07,400 upang i-highlight ang mga lugar o ang saklaw ng variable na iyon, 24 00:01:07,400 --> 00:01:09,240 lokal sa function na triple. 25 00:01:09,240 --> 00:01:12,300 pangunahing hindi maaaring tumukoy sa x sa lahat. 26 00:01:12,300 --> 00:01:14,259 Hindi nito alam kung ano ito. 27 00:01:14,259 --> 00:01:17,050 Walang iba pang mga function, sa katunayan, kung kami ay nagkaroon ng karagdagang function in dito, 28 00:01:17,050 --> 00:01:19,360 maaaring tumukoy sa x. 29 00:01:19,360 --> 00:01:23,520 >> Katulad nito, ang mga resulta kung saan hindi ko na kulay na asul, ang mga lokal na lamang sa main. 30 00:01:23,520 --> 00:01:26,980 Tanging pangunahing nakakaalam kung ano ang resulta variable ay. 31 00:01:26,980 --> 00:01:30,010 triple hindi maaaring gamitin ito. 32 00:01:30,010 --> 00:01:32,580 >> Ngayon tulad ng nabanggit ko, mga pangkalahatang variable umiiral. 33 00:01:32,580 --> 00:01:35,575 Kung ipinapahayag mo variable na sa labas ng anumang function, 34 00:01:35,575 --> 00:01:38,290 ang lahat ng mga function sa programa ay maaaring sumangguni sa mga ito. 35 00:01:38,290 --> 00:01:44,010 Kaya sa kasong ito na-highlight ko sa green isang pandaigdigang variable deklarasyon. 36 00:01:44,010 --> 00:01:45,830 Sa kasong ito, ang mga variable pagkatao ipinahayag 37 00:01:45,830 --> 00:01:48,720 ay tinatawag na global, para lamang maging lubhang malinaw tungkol sa mga ito. 38 00:01:48,720 --> 00:01:49,720 Ito ay uri ng float. 39 00:01:49,720 --> 00:01:52,940 At ako italaga ito ang halaga 0.5050. 40 00:01:52,940 --> 00:01:58,080 >> Mapapansin mo na sa main at sa triple, ako ay ma-refer sa global. 41 00:01:58,080 --> 00:02:03,480 At sa katunayan, kung pumunta ako sa pamamagitan ng programa gaya ng ipinahiwatig, main unang tawag triple, 42 00:02:03,480 --> 00:02:10,440 triple multiply global sa pamamagitan ng 3, na kung saan nagtatakda ng halaga nito sa 1.5-bagay, 43 00:02:10,440 --> 00:02:16,080 1.51 o isang bagay tulad na, at pagkatapos main din kopya ang halaga 44 00:02:16,080 --> 00:02:16,620 ng global. 45 00:02:16,620 --> 00:02:24,424 Kaya pangunahing hindi i-print out 0.5050, ito ay i-print out global beses 3, 1.51. 46 00:02:24,424 --> 00:02:27,340 Kaya mo na nakuha upang maging maingat kapag ikaw ay nagtatrabaho sa mga pangkalahatang variable. 47 00:02:27,340 --> 00:02:30,260 Habang ang mga ito lubos na kakayahang umangkop sa kawalan ng kakayahang ipasa ang impormasyon 48 00:02:30,260 --> 00:02:32,650 sa paligid upang ang bawat Maaaring gamitin ito function, 49 00:02:32,650 --> 00:02:34,580 ito rin ay maaaring magkaroon ng ilang mga mapanganib na kahihinatnan 50 00:02:34,580 --> 00:02:38,770 kung ang mga pagbabago sa isang function ang halaga ng isang variable 51 00:02:38,770 --> 00:02:42,360 bago mo inaasahan na ito ay nagbago. 52 00:02:42,360 --> 00:02:44,200 >> Bakit ang pagkakaiba na ito mahalaga? 53 00:02:44,200 --> 00:02:48,070 Bakit namin pag-aalaga kung ilang mga variable ay lokal at ang iba ay global? 54 00:02:48,070 --> 00:02:53,880 Well, para sa karamihan ng bahagi, ang mga lokal na mga variable sa C ay kung ano ang tinatawag na ipinasa ng halaga 55 00:02:53,880 --> 00:02:56,087 kapag gumawa kami ng isang function na tawag. 56 00:02:56,087 --> 00:02:56,920 Ano ang ibig sabihin nito? 57 00:02:56,920 --> 00:03:00,880 >> Well, kapag ang isang variable ay lumipas sa pamamagitan ng halaga, ang callee, na 58 00:03:00,880 --> 00:03:04,350 ay isa pang paraan ng pagsasabi sa mga function na tumatanggap ng mga variable na 59 00:03:04,350 --> 00:03:08,465 makakakuha ng lumipas sa bilang isang input, ito ang tunay ay hindi makatanggap ng na variable mismo. 60 00:03:08,465 --> 00:03:12,490 Ito na natatanggap ng kanyang sariling kopya ng mga ito upang magtrabaho sa. 61 00:03:12,490 --> 00:03:14,350 Ito ay isang tunay mahalagang pagkakaiba. 62 00:03:14,350 --> 00:03:18,250 Nakita namin lamang ng isang segundo na nakalipas na may pangkalahatang variable, 63 00:03:18,250 --> 00:03:23,240 kung manipulahin namin ang global variable sa isang function, ang epekto 64 00:03:23,240 --> 00:03:26,390 sa na ang isang function nagdadala sa pamamagitan ng sa bawat iba pang mga function. 65 00:03:26,390 --> 00:03:28,920 >> Ngunit sa mga lokal na variable, iyan ay hindi totoo. 66 00:03:28,920 --> 00:03:32,060 Ang bawat function kapag ito natatanggap na mga variable ng input 67 00:03:32,060 --> 00:03:36,367 tumanggap ng mga kopya ng mga variable, hindi ang mga variable sa kanilang sarili. 68 00:03:36,367 --> 00:03:37,825 Kaya kung ano ang epekto ng mga iyon? 69 00:03:37,825 --> 00:03:40,450 Ito ay nangangahulugan na ang mga variable sa ang tumatawag, ang function na 70 00:03:40,450 --> 00:03:45,600 ay ang paggawa ng mga pag-andar ng tawag, ay hindi magbabago maliban kung i-override ito. 71 00:03:45,600 --> 00:03:50,420 >> Halimbawa, sa ang code na ito foo ay hindi nagbago sa lahat. 72 00:03:50,420 --> 00:03:55,450 Int foo ay katumbas ng 4, tumawag triple ng foo, sa loob ng tatlong beses, 73 00:03:55,450 --> 00:03:58,850 Gusto naming asahan na foo gagawin na-multiply sa pamamagitan ng 3, at bumalik, 74 00:03:58,850 --> 00:04:01,450 ngunit may tunay na walang epekto. 75 00:04:01,450 --> 00:04:03,460 >> Narito bagaman, isang napaka-pino pagkakaiba. 76 00:04:03,460 --> 00:04:06,520 Ito ay magkaroon ng epekto ang gusto namin. 77 00:04:06,520 --> 00:04:07,730 Nakikita mo ba kung bakit? 78 00:04:07,730 --> 00:04:11,500 Kami ay pinakamahalaga foo sa pangunahing oras na ito. 79 00:04:11,500 --> 00:04:16,899 >> Kaya int foo ay katumbas ng 4, foo katumbas triple foo, kapag gumawa kami ng tawag na iyon, 80 00:04:16,899 --> 00:04:21,680 triple makakakuha sariling kopya ng foo, may sariling kopya ng 4. 81 00:04:21,680 --> 00:04:27,340 Sinasabi nito bumalik 4 na beses 3, o kahit na ano variable ay makakakuha ng lumipas na sa panahon 3. 82 00:04:27,340 --> 00:04:32,109 At pagkatapos naming italaga ang return halaga ng triple sa foo muli. 83 00:04:32,109 --> 00:04:33,650 Kaya ito talaga ay papatungan foo. 84 00:04:33,650 --> 00:04:35,816 Ito ay ang tanging paraan upang gawin sa mga lokal na variable. 85 00:04:35,816 --> 00:04:38,120 Kaya ngayon kung namin magdagdag ng isa pang linya ng code dito 86 00:04:38,120 --> 00:04:40,870 sa dulo ng main sa i-print out ang halaga ng foo, 87 00:04:40,870 --> 00:04:45,030 ito ay sa katunayan i-print ang 12. 88 00:04:45,030 --> 00:04:48,600 >> Variable saklaw ay karaniwang hindi masyadong maraming ng isang problema 89 00:04:48,600 --> 00:04:51,190 kung ang pangalan ng lahat ng iyong mga variable iba't ibang mga bagay. 90 00:04:51,190 --> 00:04:54,920 Ngunit ito ay maaaring makakuha ng mga uri ng mga bastos kung ang parehong pangalan ng variable 91 00:04:54,920 --> 00:04:58,820 lumilitaw sa maramihang mga pag-andar, na kung saan ang mangyayari sa isang pulutong. 92 00:04:58,820 --> 00:05:02,130 Kung ikaw ba ay gagana sa sa tunay na mundo kung saan 93 00:05:02,130 --> 00:05:06,080 ikaw ay nagtatrabaho sa collaborative mga programa at mga tao sa iba't ibang mga koponan 94 00:05:06,080 --> 00:05:11,000 ay gumagawa ng magkasama upang isulat ang parehong programa o mga katulad na hanay ng mga programa, 95 00:05:11,000 --> 00:05:13,900 ang mga ito ay madalas na muling gamitin ang mga variable pangalan, partikular na karaniwan sa buhay 96 00:05:13,900 --> 00:05:18,020 tulad ng x, y, i, j, at iba pa. 97 00:05:18,020 --> 00:05:20,370 >> Ngunit kapag variable ay may parehong pangalan, mga isyu sa saklaw 98 00:05:20,370 --> 00:05:23,080 ay maaaring makakuha ng isang maliit na trickier upang i-parse. 99 00:05:23,080 --> 00:05:26,790 Halimbawa, alam mo ba kung ano ang nais ipi-print out 100 00:05:26,790 --> 00:05:30,190 sa dulo ng mga ito partikular na programa? 101 00:05:30,190 --> 00:05:31,280 Kumuha nang isang minuto. 102 00:05:31,280 --> 00:05:33,382 I-pause ang video at magbasa pamamagitan ng programang ito. 103 00:05:33,382 --> 00:05:35,590 Maaari mong makita sa tuktok namin magkaroon ng isang function deklarasyon 104 00:05:35,590 --> 00:05:37,350 para sa isang function na tinatawag na pagdagdag. 105 00:05:37,350 --> 00:05:40,800 Function na tumatagal ng isang solong parameter, na isang integer na tinatawag naming x. 106 00:05:40,800 --> 00:05:42,610 At ito outputs isang integer. 107 00:05:42,610 --> 00:05:44,820 Iyan ay ang uri ng return sa simula. 108 00:05:44,820 --> 00:05:48,140 >> Pagkatapos kami ay may pangunahing, isang pares ng mga linya ng code sa main, ang huling ng kung saan 109 00:05:48,140 --> 00:05:49,250 ay isang pahayag print. 110 00:05:49,250 --> 00:05:51,140 At tandaan, na ang mga tanong dito. 111 00:05:51,140 --> 00:05:54,240 Ano ang tunay na magiging nakalimbag sa dulo ng function na ito? 112 00:05:54,240 --> 00:05:58,110 At pagkatapos ay ang tunay na namin ang mga kahulugan ng paglakas sa ibaba. 113 00:05:58,110 --> 00:06:01,760 >> Kaya maglaan ng isang minuto, na hakbang sa pamamagitan ng ang code, bakas na mga bagay. 114 00:06:01,760 --> 00:06:08,100 Alam mo ba kung ano ang ipi-print sa sa katapusan ng partikular na programa? 115 00:06:08,100 --> 00:06:08,600 >> Lahat tama. 116 00:06:08,600 --> 00:06:11,433 Sana, na iyong kinuha ng ilang segundo upang subukan at i-parse ang isang ito. 117 00:06:11,433 --> 00:06:13,370 Gawin ito nang magkasama. 118 00:06:13,370 --> 00:06:16,022 >> Kaya tumawid ako out paglakas ni deklarasyon sa tuktok doon. 119 00:06:16,022 --> 00:06:17,230 Ito ay uri ng isang libangan. 120 00:06:17,230 --> 00:06:18,570 Ito ay hindi kanyang sariling variable. 121 00:06:18,570 --> 00:06:19,879 Hindi nito ay may sarili nitong mga saklaw. 122 00:06:19,879 --> 00:06:21,920 Ito ay isang function na lamang deklarasyon, kaya para sa mga layunin 123 00:06:21,920 --> 00:06:24,330 ng sinusubukan mong i-parse out kung ano ang nangyayari sa programa na ito, 124 00:06:24,330 --> 00:06:26,660 maaaring pati na rin maiwasan lang namin ito. 125 00:06:26,660 --> 00:06:29,560 >> Ngayon kami ay may sa kasong ito, ang mga dahilan ng problemang ito ay mapanlinlang 126 00:06:29,560 --> 00:06:34,030 ay dahil kami ay may lokal na mga variable sa parehong pangunahing at pagdagdag, ang bawat isa ay 127 00:06:34,030 --> 00:06:35,090 ay tinatawag na x. 128 00:06:35,090 --> 00:06:39,830 At syempre ang puno ng ang isyu na ito ay sinusubukan na suss out na x ay makakakuha ng nagbago 129 00:06:39,830 --> 00:06:41,890 at paano ito makakuha ng nagbago. 130 00:06:41,890 --> 00:06:46,900 Kaya ko na kulay na ako bawat pagkakataon ng x na ang mga lokal na pangunahing red. 131 00:06:46,900 --> 00:06:52,040 At ko na may kulay ang bawat pagkakataon ng x na lokal sa pagdami asul. 132 00:06:52,040 --> 00:06:55,220 >> Notice sa na ikatlong linya ng main, ay katumbas ng y paglakas 133 00:06:55,220 --> 00:07:00,800 x, na paglakas ay hindi pagiging lumipas x main, o ang red x. 134 00:07:00,800 --> 00:07:03,320 Pagkuha Ito ay lumipas ang isang kopya ng mga ito. 135 00:07:03,320 --> 00:07:06,987 At ito ay lamang ang pagpunta upang gumana sa na kopya ng mga ito, ang mga asul na x. 136 00:07:06,987 --> 00:07:08,820 Kung ikaw ay mathematically hilig, maaari ka 137 00:07:08,820 --> 00:07:14,230 sa halip ay naisip ng mga ito bilang x sub m para sa pangunahing at x sub i para sa pagdagdag. 138 00:07:14,230 --> 00:07:15,700 Ngunit ito ay ang parehong mga ideya. 139 00:07:15,700 --> 00:07:18,999 x sub m, o ang pulang x sa nakaraang slide, 140 00:07:18,999 --> 00:07:21,790 ay ang mga variable na local-- ay ang halimbawa ng x sa halip na 141 00:07:21,790 --> 00:07:26,900 lokal sa main, at x sub i, o ang asul na mga variable sa mga naunang slide, 142 00:07:26,900 --> 00:07:30,760 ang mga pagkakataon ng mga x na mga lokal na dagdagan. 143 00:07:30,760 --> 00:07:36,220 >> Kaya, ay magawa mong malaman kung ano ang nakalimbag sa dulo ng function na ito? 144 00:07:36,220 --> 00:07:39,420 Ako Doug Lloyd, at ito ay CS50. 145 00:07:39,420 --> 00:07:41,542