1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> David MALAN: Hello, at maligayang pagdating pabalik sa CS50. 3 00:00:13,260 --> 00:00:14,860 Kaya ito ay ang katapusan ng linggo apat. 4 00:00:14,860 --> 00:00:16,680 Lamang ng isang anunsyo unang. 5 00:00:16,680 --> 00:00:19,600 Kaya ng tinatawag na ikalimang Lunes ay paparating na ito darating na Lunes. 6 00:00:19,600 --> 00:00:22,800 Ito ang pagkakataon upang baguhin mula sa SAT / UNSAT sa isang grado ng sulat, o mula sa 7 00:00:22,800 --> 00:00:24,130 sulat grade SAT / UNSAT. 8 00:00:24,130 --> 00:00:27,130 Annoyingly, ang proseso na ginagawa ng nangangailangan ng lagda, dahil mayroon kang upang punan 9 00:00:27,130 --> 00:00:28,770 out sa isa sa mga kulay rosas na add / drop form. 10 00:00:28,770 --> 00:00:31,680 >> Dahil technically, ang SAT / UNSAT bersyon at ang titik bersyon grado 11 00:00:31,680 --> 00:00:33,320 may natatanging mga numero ng catalog. 12 00:00:33,320 --> 00:00:34,240 Subalit hindi sang-ayon. 13 00:00:34,240 --> 00:00:36,620 Lamang sumalubong sa akin o sa Rob o sa Lauren sa anumang punto. 14 00:00:36,620 --> 00:00:39,550 O mag-email sa amin kung ikaw ay walang mga uri ng mga gawaing isinusulat kailangan mo ngayon, at kami 15 00:00:39,550 --> 00:00:43,410 magiging sigurado na makatulong sa iyo na gumawa ng pag-aalaga ng bago na Lunes. 16 00:00:43,410 --> 00:00:45,780 >> Ang lahat ng mga karapatan, kaya ngayon - 17 00:00:45,780 --> 00:00:47,630 talaga, may isang bit ng isang echo. 18 00:00:47,630 --> 00:00:51,070 Kaya namin tono sa akin pababa sa isang bit? 19 00:00:51,070 --> 00:00:51,730 OK. 20 00:00:51,730 --> 00:00:54,850 Kaya ngayon, namin ipakilala ang isang paksa Kilala bilang payo. 21 00:00:54,850 --> 00:00:57,770 At kukunin ko na aminin na ito ay isa sa mga mas kumplikadong mga paksa na may posibilidad namin upang 22 00:00:57,770 --> 00:01:00,960 masakop ito sa klase, o talagang anumang panimulang kurso na gumagamit ng C. 23 00:01:00,960 --> 00:01:05,510 >> Ngunit tumagal ang aking mga salita para dito, lalo na kung ang iyong isip pakiramdam ng kaunti pang nakatungo 24 00:01:05,510 --> 00:01:07,100 ngayon at sa linggo na dumating. 25 00:01:07,100 --> 00:01:10,340 Ito ay hindi na kinatawan ng sa iyo sa pagkuha ng anumang mas masahol pa sa ito ito lamang ay nangangahulugan na 26 00:01:10,340 --> 00:01:13,360 ito ay isang partikular na kumplikadong paksa na nangangako ako, sa loob ng ilang linggo 27 00:01:13,360 --> 00:01:17,610 samakatuwid, ay tila ang lahat ng masyadong strikingly tuwiran sa pag-alaala. 28 00:01:17,610 --> 00:01:18,720 >> Ako pa rin matandaan sa araw na ito. 29 00:01:18,720 --> 00:01:22,190 Ako ay pag-upo sa Elliott Dining Hall, pag-upo sa tabi ng aking tf Nishat Mehta, 30 00:01:22,190 --> 00:01:24,070 sino ay isang residente ng Elliott bahay. 31 00:01:24,070 --> 00:01:26,340 At para sa ilang kadahilanan, ito topic lang nag-click. 32 00:01:26,340 --> 00:01:29,430 Alin ang sabihin na ako masyadong struggled may mga ito para sa ilang mga halaga ng oras, ngunit ko 33 00:01:29,430 --> 00:01:33,610 Gagawin ang aking makakaya upang makatulong na maiwasan ang anumang naturang pakikibaka sa isang paksa na sa huli 34 00:01:33,610 --> 00:01:34,580 ay lubos na makapangyarihan. 35 00:01:34,580 --> 00:01:37,350 >> Sa katunayan, ang isa sa mga paksa namin talakayin sa linggo na dumating ay na 36 00:01:37,350 --> 00:01:41,130 ng seguridad, at kung paano maaari mong tunay maningning na tagumpay machine sa mga paraang 37 00:01:41,130 --> 00:01:42,320 na hindi nilayon. 38 00:01:42,320 --> 00:01:45,850 At iyon exploitations ay karaniwang ang resulta ng mga bug, mga pagkakamali na namin 39 00:01:45,850 --> 00:01:49,740 gumawa ng mga tao sa pamamagitan ng hindi pag-unawa sa ilang ng ang kalakip na pagpapatupad 40 00:01:49,740 --> 00:01:52,250 mga detalye sa pamamagitan ng mga programa na kung saan ay ginawa. 41 00:01:52,250 --> 00:01:55,410 >> Ngayon upang gumawa ito tila ang lahat ng mga higit pang mga gumagamit palakaibigan, naisip ko na gusto kong i-play ang isang 10 42 00:01:55,410 --> 00:01:59,680 pangalawang preview ng isang maliit claymation figure na pinangalanan Binky sino ay dinadala sa 43 00:01:59,680 --> 00:02:03,020 buhay sa pamamagitan ng isang kaibigan ng atin sa Stanford, propesor Nick Parlante. 44 00:02:03,020 --> 00:02:06,753 Kaya payagan ako na magbigay sa iyo ito teaser ng Binky dito. 45 00:02:06,753 --> 00:02:09,520 >> [Video playback] 46 00:02:09,520 --> 00:02:10,380 >> -Uy, Binky. 47 00:02:10,380 --> 00:02:11,050 Gumising. 48 00:02:11,050 --> 00:02:13,610 Ito ay oras na para sa pointer masaya. 49 00:02:13,610 --> 00:02:14,741 >> -Ano iyon? 50 00:02:14,741 --> 00:02:16,440 Alamin ang tungkol sa mga payo? 51 00:02:16,440 --> 00:02:17,928 Oh, goodie. 52 00:02:17,928 --> 00:02:18,920 >> [END-playback ng video] 53 00:02:18,920 --> 00:02:20,670 >> David MALAN: Iyon ay Stanford computer science. 54 00:02:20,670 --> 00:02:23,194 Kaya higit pa sa na sa darating. 55 00:02:23,194 --> 00:02:24,930 >> [Palakpakan] 56 00:02:24,930 --> 00:02:26,660 >> David MALAN: Paumanhin, Nick. 57 00:02:26,660 --> 00:02:30,680 >> Kaya isipin ang na huling beses namin natapos sa ito talagang kapana-panabik na cliffhanger 58 00:02:30,680 --> 00:02:32,960 kung saan ang function na ito lamang ay hindi gumagana. 59 00:02:32,960 --> 00:02:34,960 Hindi bababa sa intuitively, ito nadama tulad ng ito ay gagana. 60 00:02:34,960 --> 00:02:37,600 Simpleng pagpapalit ang mga halaga ng dalawang integer. 61 00:02:37,600 --> 00:02:40,915 Ngunit isipin ang na kapag kami naka-print out ang orihinal na halaga sa pangunahing, at isa 62 00:02:40,915 --> 00:02:44,210 dalawa, sila ay pa rin ng isa at dalawa at hindi dalawa at isa. 63 00:02:44,210 --> 00:02:46,070 >> Kaya hayaan mo akong lumipat talaga sa ibabaw ng mga appliance. 64 00:02:46,070 --> 00:02:50,180 At ako ay nagsulat up ng isang bit ng kalansay ng code sa makapunta dito, kung saan-claim ko na x 65 00:02:50,180 --> 00:02:52,500 Magiging 1, y magiging 2. 66 00:02:52,500 --> 00:02:54,810 Ako pagkatapos ay i-print out ang parehong ng kanilang mga mga halaga na may naka-print na f. 67 00:02:54,810 --> 00:02:57,540 >> Pagkatapos kong i-claim pababa dito na kami ay pagpunta sa swap sa kanila. 68 00:02:57,540 --> 00:03:00,800 Ako iniwan ng blangkong lugar dito para sa amin upang fill in ngayon sa loob lamang ng ilang sandali. 69 00:03:00,800 --> 00:03:03,380 Pagkatapos, pupuntahan ko i-claim na ang dalawang variable ay nai-swapped. 70 00:03:03,380 --> 00:03:04,770 Pagkatapos ay pupuntahan ko i-print out ang mga ito muli. 71 00:03:04,770 --> 00:03:07,090 At kaya sana, ang dapat kong makita 1, 2. 72 00:03:07,090 --> 00:03:07,380 2, 1. 73 00:03:07,380 --> 00:03:09,830 Iyon ang sobrang simple layunin sa ngayon. 74 00:03:09,830 --> 00:03:12,430 >> Kaya paano namin pumunta tungkol sa pagpapalit dalawang variable? 75 00:03:12,430 --> 00:03:17,220 Well kung ipanukala ko dito na ang mga tasa maaaring kumatawan sa memory sa isang computer. 76 00:03:17,220 --> 00:03:19,070 Ito ay isang ilang mga kagat, ito ay isa pang ilang kagat. 77 00:03:19,070 --> 00:03:23,260 Puwede namin ang isang volunteer dumating sa up at ihalo sa amin ng ilang mga inumin, kung pamilyar? 78 00:03:23,260 --> 00:03:23,920 Halika sa up. 79 00:03:23,920 --> 00:03:24,815 Ano ang inyong pangalan? 80 00:03:24,815 --> 00:03:25,260 >> Jess: Jess. 81 00:03:25,260 --> 00:03:25,690 >> David MALAN: Jess? 82 00:03:25,690 --> 00:03:26,540 Halika sa up, Jess. 83 00:03:26,540 --> 00:03:29,180 Kung hindi tututol kayo, mayroon kaming upang ilagay ang Google Glass sa iyo upang maaari naming 84 00:03:29,180 --> 00:03:30,430 papanatilihing-buhay na ito. 85 00:03:30,430 --> 00:03:32,800 86 00:03:32,800 --> 00:03:34,670 OK, salamin. 87 00:03:34,670 --> 00:03:37,250 Mag-record ng video. 88 00:03:37,250 --> 00:03:43,103 At OK, kami ay handa na upang pumunta sa Jess dito. 89 00:03:43,103 --> 00:03:43,810 Ayos lang. 90 00:03:43,810 --> 00:03:45,120 Masaya akong makilala kayo. 91 00:03:45,120 --> 00:03:47,720 >> Kaya kung ano ang nais kong gawin mo dito - kung magagawa mo, masyadong mabilis - 92 00:03:47,720 --> 00:03:51,040 pours lamang sa amin kalahati ng isang baso ng orange juice at kalahati ng isang baso ng gatas, 93 00:03:51,040 --> 00:03:55,710 na kumakatawan epektibo ang mga numero 1 sa isang tasa at 2 sa iba pang tasa. 94 00:03:55,710 --> 00:04:01,380 95 00:04:01,380 --> 00:04:02,630 >> Ito ay magiging magandang footage. 96 00:04:02,630 --> 00:04:04,910 97 00:04:04,910 --> 00:04:05,860 >> Tanikala: Paumanhin. 98 00:04:05,860 --> 00:04:06,330 >> David MALAN: Hindi, hindi. 99 00:04:06,330 --> 00:04:08,703 Ito ay ang OK. 100 00:04:08,703 --> 00:04:10,120 Nice. 101 00:04:10,120 --> 00:04:12,950 Ang lahat ng mga karapatan, kaya kami ay may apat na bytes nagkakahalaga ng orange juice. 102 00:04:12,950 --> 00:04:14,460 Ipapakita namin na tinatawag na ito ang halaga 1. 103 00:04:14,460 --> 00:04:16,579 Ngayon ay isa pang apat na bytes na halaga ng gatas. 104 00:04:16,579 --> 00:04:18,519 Tatawagan Pinahahalagahan ito 2. 105 00:04:18,519 --> 00:04:20,440 Kaya x at y, ayon sa pagkakabanggit. 106 00:04:20,440 --> 00:04:23,450 >> Ang lahat ng mga karapatan, kaya ngayon kung ang gawain sa kamay - para sa iyo, Jess, sa harap ng lahat 107 00:04:23,450 --> 00:04:24,270 ng iyong mga kaklase - 108 00:04:24,270 --> 00:04:28,510 ay upang magpalitan ng mga halaga ng x at y tulad na gusto namin ang orange juice sa 109 00:04:28,510 --> 00:04:32,070 iba pang mga tasa at ang gatas sa tasa na ito, kung paano maaari ka - bago aktwal mong gawin 110 00:04:32,070 --> 00:04:34,020 ito - pumunta tungkol sa paggawa na ito? 111 00:04:34,020 --> 00:04:35,220 >> OK, maalam na desisyon. 112 00:04:35,220 --> 00:04:36,340 Kaya kailangan mo ng kaunti pang memory. 113 00:04:36,340 --> 00:04:38,190 Kaya sabihin maglaan ng pansamantalang tasa, kung kalooban mo. 114 00:04:38,190 --> 00:04:40,540 At ngayon magpatuloy upang magpalitan ng x at y. 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> Magaling. 117 00:04:53,530 --> 00:04:54,420 Kaya napaka na rin tapos na. 118 00:04:54,420 --> 00:04:55,670 Salamat sa iyo kaya magkano, Jess. 119 00:04:55,670 --> 00:04:59,520 120 00:04:59,520 --> 00:05:00,020 Heto. 121 00:05:00,020 --> 00:05:01,950 Ang isang maliit na subenir. 122 00:05:01,950 --> 00:05:04,350 >> OK, kaya malinaw naman, napaka-simpleng ideya. 123 00:05:04,350 --> 00:05:07,500 Ganap na madaling maunawaan na kailangan namin ng kaunti higit pang mga puwang sa imbakan - sa form na ito, 124 00:05:07,500 --> 00:05:09,750 isang tasa - kung namin talagang nais na magpalitan ng dalawang variable. 125 00:05:09,750 --> 00:05:11,110 Kaya natin gawin eksakto na. 126 00:05:11,110 --> 00:05:14,330 Hanggang dito sa pagitan ng kung saan inaangkin ko ako pagpunta sa ay ang paggawa ng ilang pagpapalit, bibigyan ko 127 00:05:14,330 --> 00:05:15,720 sige at ipinapahayag Temp. 128 00:05:15,720 --> 00:05:17,980 At kukunin ko na itakda ito katumbas ng, sabihin nating, x. 129 00:05:17,980 --> 00:05:21,110 >> Pagkatapos ay pupuntahan ko na baguhin ang halaga ng x tulad ng Jess ginawa dito sa 130 00:05:21,110 --> 00:05:23,200 gatas at orange juice upang maging katumbas ng y. 131 00:05:23,200 --> 00:05:27,460 At ako pagpunta sa baguhin ang y upang maging katumbas upang hindi x, dahil ngayon gusto naming maging 132 00:05:27,460 --> 00:05:29,530 natigil sa isang lupon, ngunit sa halip Temp. 133 00:05:29,530 --> 00:05:33,170 Saan ako pansamantalang - o kung saan Jess Pansamantalang ilagay ang orange juice 134 00:05:33,170 --> 00:05:35,460 bago clobbering na tasa na may gatas. 135 00:05:35,460 --> 00:05:37,250 >> Kaya ipaalam sa akin sige ngayon at gumawa ng mga ito. 136 00:05:37,250 --> 00:05:39,210 Ito ay tinatawag na noswap.c. 137 00:05:39,210 --> 00:05:41,190 At ngayon hayaan mo akong tumakbo walang makipagpalitan. 138 00:05:41,190 --> 00:05:43,910 At sa katunayan ko makita, kung ako palawakin ang window Medyo, na 139 00:05:43,910 --> 00:05:45,160 x ay 1, y ay 2. 140 00:05:45,160 --> 00:05:47,230 At pagkatapos ay x 2, y ay 1. 141 00:05:47,230 --> 00:05:51,910 >> Ngunit isipin ang na sa Lunes ginawa namin bagay medyo naiiba kung saan ako 142 00:05:51,910 --> 00:05:56,760 sa halip ay ipinatupad ng isang lingkod function, kung ang kalooban mo, na noon ay talagang walang bisa. 143 00:05:56,760 --> 00:05:58,010 Tumawag ako nito magpalit. 144 00:05:58,010 --> 00:06:01,600 Nagbigay ako ng dalawang ito parameter, at ako tinatawag ang mga ito at isang Tumawag ako sa kanila b. 145 00:06:01,600 --> 00:06:04,380 >> Lantaran, kaya kong tumawag sa kanila x at y. 146 00:06:04,380 --> 00:06:06,040 Wala humihinto sa akin mula sa paggawa na. 147 00:06:06,040 --> 00:06:08,140 Ngunit Gusto ko magtaltalan ito ay pagkatapos medyo hindi maliwanag. 148 00:06:08,140 --> 00:06:11,910 Dahil isipin ang para sa Lunes na namin na-claim na mga parameter na ito ay 149 00:06:11,910 --> 00:06:13,650 mga kopya ng mga halaga nakapasa in 150 00:06:13,650 --> 00:06:15,640 Kaya lang messes sa iyong isip, sa palagay ko, kung gumagamit ka ng 151 00:06:15,640 --> 00:06:17,370 eksakto ang parehong mga variable. 152 00:06:17,370 --> 00:06:20,150 >> Kaya kukunin ko na sa halip tumawag sa kanila ng at b, para lamang sa kaliwanagan. 153 00:06:20,150 --> 00:06:21,840 Ngunit maaari naming tawagan ang mga ito pinaka- kahit ano gusto namin. 154 00:06:21,840 --> 00:06:26,280 At ako pagpunta sa kopyahin at i-paste epektibo ang code na ito mula up doon 155 00:06:26,280 --> 00:06:27,170 down sa dito. 156 00:06:27,170 --> 00:06:29,110 Dahil ko lang nakita na ito gumagana. 157 00:06:29,110 --> 00:06:30,790 Kaya na nasa medyo magandang hugis. 158 00:06:30,790 --> 00:06:37,390 At makikita ko babaguhin ang aking x sa isang, x aking sa isang, ang aking y sa b at ang aking y upang b. 159 00:06:37,390 --> 00:06:39,130 >> Kaya sa ibang salita, eksaktong parehong logic. 160 00:06:39,130 --> 00:06:40,850 Ang eksaktong parehong bagay na ginawa Jess. 161 00:06:40,850 --> 00:06:44,350 At pagkatapos ay ang isang bagay na kailangan kong gawin up dito, siyempre, na ngayon ang panawagan na ito 162 00:06:44,350 --> 00:06:45,990 function, o tawagan ang function. 163 00:06:45,990 --> 00:06:50,430 Kaya ako ay tinatawag ito ng pag-andar na may dalawang input, x at y, at pindutin ang I-save. 164 00:06:50,430 --> 00:06:52,300 >> Ang lahat ng mga karapatan, kaya sa panimula ang parehong bagay. 165 00:06:52,300 --> 00:06:55,570 Sa katunayan, marahil Ginawa ko ang programa nang hindi kinakailangan kumplikado sa pamamagitan ng 166 00:06:55,570 --> 00:07:00,820 Sumulat ng isang function na lang ang pagkuha ng ilang anim na linya ng code samantalang ako 167 00:07:00,820 --> 00:07:02,970 dati ay ipinatupad ito sa loob lamang ng tatlo. 168 00:07:02,970 --> 00:07:06,230 >> Kaya ipaalam sa akin pumunta nang mas maaga ngayon at muling paggawa ito, gumawa ng walang makipagpalitan. 169 00:07:06,230 --> 00:07:07,920 Ang lahat ng mga karapatan, ako screwed up dito. 170 00:07:07,920 --> 00:07:11,290 Dapat ito ay isang error na maaari mong tingnan ang nagiging karaniwang bilang iyong 171 00:07:11,290 --> 00:07:12,380 mga programa makakuha ng mas kumplikadong. 172 00:07:12,380 --> 00:07:13,470 Subalit mayroong isang madaling pag-aayos. 173 00:07:13,470 --> 00:07:15,650 Hayaan ang mga mag-scroll sa akin back up dito. 174 00:07:15,650 --> 00:07:18,190 >> At kung ano ang unang error akong nakikitang? 175 00:07:18,190 --> 00:07:19,520 Implicit deklarasyon. 176 00:07:19,520 --> 00:07:21,466 Ano ang ginagawa na karaniwang nagpapahiwatig? 177 00:07:21,466 --> 00:07:22,830 Oh, Nakalimutan ko ang prototype. 178 00:07:22,830 --> 00:07:26,900 Nakalimutan ko ang upang turuan ang mga tagatala na makipagpalitan ng ay paalis na umiiral kahit na siya 179 00:07:26,900 --> 00:07:28,920 Hindi umiiral sa pinakadulo simula ng programa. 180 00:07:28,920 --> 00:07:35,780 Kaya lang ako pagpunta sa sabihin walang bisa, makipagpalitan, int, isang int b, tuldok-kuwit. 181 00:07:35,780 --> 00:07:37,280 >> Kaya hindi ako pagpunta sa reimplement ito. 182 00:07:37,280 --> 00:07:39,140 Ngunit ngayon na tumutugma ito sa kung ano ang pababa dito. 183 00:07:39,140 --> 00:07:42,530 At notice, ang kawalan ng isang tuldok-kuwit dito, na kung saan ay hindi kinakailangan kapag 184 00:07:42,530 --> 00:07:43,200 pagpapatupad. 185 00:07:43,200 --> 00:07:46,010 >> Kaya ipaalam sa akin gumawang muli ito, gumawa ng walang makipagpalitan. 186 00:07:46,010 --> 00:07:46,910 Karamihan mas mahusay na hugis. 187 00:07:46,910 --> 00:07:48,130 Patakbuhin walang makipagpalitan. 188 00:07:48,130 --> 00:07:48,740 At ang diyablo. 189 00:07:48,740 --> 00:07:51,650 Ngayon kami ay bumalik kung saan namin sa Monday, kung saan ang bagay ay hindi magpalit. 190 00:07:51,650 --> 00:07:55,410 >> At ano ang intuitive paliwanag para sa kung bakit ito ang kaso? 191 00:07:55,410 --> 00:07:56,380 Oo? 192 00:07:56,380 --> 00:07:57,630 >> MAG-AARAL: [hindi marinig]. 193 00:07:57,630 --> 00:08:04,140 194 00:08:04,140 --> 00:08:05,230 >> David MALAN: Mismong. 195 00:08:05,230 --> 00:08:07,330 Kaya isang at b ay mga kopya ng mga x at y. 196 00:08:07,330 --> 00:08:10,680 At sa katunayan, anumang oras ka nakapunta pagtawag ng isang function kaya malayo na 197 00:08:10,680 --> 00:08:12,540 nagpapasa ng mga variable tulad ng ints - 198 00:08:12,540 --> 00:08:14,470 tulad ng makipagpalitan ay umaasa dito - 199 00:08:14,470 --> 00:08:16,270 ka guys na pagpasa sa mga kopya. 200 00:08:16,270 --> 00:08:19,150 >> Ngayon na nangangahulugan na ito ay tumatagal ng ilang sandali ng panahon, isang split second, para sa mga 201 00:08:19,150 --> 00:08:23,270 computer upang kopyahin ang mga piraso mula sa isa variable papunta sa mga piraso ng isa pa. 202 00:08:23,270 --> 00:08:24,610 Ngunit hindi iyon tulad ng isang malaking pakikitungo. 203 00:08:24,610 --> 00:08:25,920 Ngunit ang mga ito ay gayunman isang kopya. 204 00:08:25,920 --> 00:08:30,020 >> At kaya ngayon, sa konteksto ng makipagpalitan, Ako ay sa katunayan matagumpay 205 00:08:30,020 --> 00:08:31,180 pagbabago ng isang at b. 206 00:08:31,180 --> 00:08:33,000 Sa katunayan, sabihin gawin ng isang mabilis na kaliwanagan ng isip check. 207 00:08:33,000 --> 00:08:36,830 I-print ang f ay isang% i, bagong linya. 208 00:08:36,830 --> 00:08:38,770 At sabihin na plug sa isang. 209 00:08:38,770 --> 00:08:41,830 Ngayon sabihin gawin ang parehong bagay sa b. 210 00:08:41,830 --> 00:08:43,640 At sabihin gawin ang parehong bagay dito. 211 00:08:43,640 --> 00:08:47,260 >> At ngayon, hayaan mo akong kopyahin ang mga parehong linya muli sa ilalim ng pag-andar 212 00:08:47,260 --> 00:08:51,250 pagkatapos ng aking tatlong linya ng mga kawili-wiling sana pinaandar, at 213 00:08:51,250 --> 00:08:53,270 mag-print ng isang at b pa muli. 214 00:08:53,270 --> 00:08:56,030 Kaya ngayon sabihin gawin ito, gumawa ng walang makipagpalitan. 215 00:08:56,030 --> 00:08:58,430 Hayaan akong gumawa ng terminal na window ng bit taller, sa gayon maaari naming makita 216 00:08:58,430 --> 00:08:59,520 higit pa sa mga ito nang sabay-sabay. 217 00:08:59,520 --> 00:09:00,860 >> At tumakbo walang makipagpalitan. 218 00:09:00,860 --> 00:09:04,000 x ay 1, y ay 2. isang ay 1, b ay 2. 219 00:09:04,000 --> 00:09:06,070 At pagkatapos, ay isang 2, b ay 1. 220 00:09:06,070 --> 00:09:09,390 Kaya ito ay gumagana, tulad ng Jess ginawa dito sa loob ng makipagpalitan. 221 00:09:09,390 --> 00:09:13,090 Ngunit siyempre, ito ay walang epekto sa mga variable sa main. 222 00:09:13,090 --> 00:09:15,360 >> Kaya nakita namin ang isang nanlilinlang kung saan kami maaaring ayusin ito, tama? 223 00:09:15,360 --> 00:09:19,560 Kapag ikaw ay nahaharap sa mga ito scoping isyu na ito, maaari mo lamang magtikin at gumawa x 224 00:09:19,560 --> 00:09:22,400 y at kung anong uri ng variable sa halip? 225 00:09:22,400 --> 00:09:23,390 >> Maaari kang gumawa ng mga ito global. 226 00:09:23,390 --> 00:09:27,560 Ilagay ang mga ito sa pinakatuktok ng file tulad ng ginawa namin, kahit na sa laro ng 15. 227 00:09:27,560 --> 00:09:28,890 Gumagamit kami ng isang global variable. 228 00:09:28,890 --> 00:09:32,420 Ngunit sa konteksto ng mga laro 15, ito ay makatwirang upang magkaroon ng isang global 229 00:09:32,420 --> 00:09:37,170 variable na kumakatawan sa mga board, dahil ang kabuuan ng 15.c ang lahat 230 00:09:37,170 --> 00:09:38,650 tungkol sa pagpapatupad ng na laro. 231 00:09:38,650 --> 00:09:41,470 Iyon ay kung ano ang file ay umiiral upang gawin. 232 00:09:41,470 --> 00:09:44,170 >> Ngunit sa kasong ito dito, ako pagtawag ng isang function makipagpalitan. 233 00:09:44,170 --> 00:09:45,380 Gusto kong magpalit ng dalawang variable. 234 00:09:45,380 --> 00:09:48,950 At dapat itong magsimula sa pakiramdam lamang nanggigitata kung ang solusyon sa lahat ng aming 235 00:09:48,950 --> 00:09:51,300 problema kapag tumakbo kami sa saklaw mga isyu ay gawin itong global. 236 00:09:51,300 --> 00:09:54,730 Dahil masyadong mabilis ang aming mga programa ay pagpunta sa maging lubos isang gulo. 237 00:09:54,730 --> 00:09:57,760 At ginawa namin na masyadong matipid bilang isang resulta sa 15.c. 238 00:09:57,760 --> 00:10:00,470 >> Ngunit ito lumiliko out mayroong isang mas mahusay na paraan nang sama-sama. 239 00:10:00,470 --> 00:10:05,600 Hayaan akong talagang bumalik at tanggalin ang mag-print ng f, lamang upang gawing simple ang code na ito. 240 00:10:05,600 --> 00:10:09,160 At ipaalam sa akin imungkahi na ito, sa katunayan, ay masama. 241 00:10:09,160 --> 00:10:15,990 Ngunit kung ako sa halip idagdag sa ilang mga asterisk at mga bituin, na maaari kong i-on sa halip na ito 242 00:10:15,990 --> 00:10:18,670 pagpapaandar sa isang bagay na talaga operational. 243 00:10:18,670 --> 00:10:25,020 >> Kaya hayaan mo akong bumalik dito at umamin sinasabi asterisk ay laging mahirap, 244 00:10:25,020 --> 00:10:26,170 kaya Sasabihin kong bituin. 245 00:10:26,170 --> 00:10:27,660 Kukunin ko na lang fess hanggang sa na ang isa. 246 00:10:27,660 --> 00:10:28,190 Ayos lang. 247 00:10:28,190 --> 00:10:30,190 At ngayon, kung ano ako ng pagpunta na gawin sa halip? 248 00:10:30,190 --> 00:10:34,130 >> Kaya una sa lahat, pupuntahan ko tukuyin na sa halip ng pagpasa sa isang int sa 249 00:10:34,130 --> 00:10:37,980 ang makipagpalitan ng pag-andar, ako sa halip ng pagpunta sa sabihin int star. 250 00:10:37,980 --> 00:10:39,170 Ngayon, ano ang nilalaman ng star ang ipahiwatig? 251 00:10:39,170 --> 00:10:41,970 Ito ay na paniwala ng isang pointer na Binky, ang claymation character, noon ay 252 00:10:41,970 --> 00:10:43,465 nagre-refer sa isang sandali ang nakalipas. 253 00:10:43,465 --> 00:10:47,610 >> Kaya kung sabihin namin int bituin, ang kahulugan ng ito ngayon ay isang na ay hindi pagpunta sa maging 254 00:10:47,610 --> 00:10:49,110 naipasa sa pamamagitan ng halaga nito. 255 00:10:49,110 --> 00:10:50,350 Hindi Ito ay pagpunta sa makokopya in 256 00:10:50,350 --> 00:10:54,700 Sa halip, ang address ng isang ay pagpunta sa maipasa in 257 00:10:54,700 --> 00:10:57,840 >> Kaya isipin ang na sa loob ng iyong computer ay ang maramihang mga memorya, kung hindi man 258 00:10:57,840 --> 00:10:58,760 kilala bilang RAM. 259 00:10:58,760 --> 00:11:00,520 At RAM na lamang ang buong bungkos ng mga byte. 260 00:11:00,520 --> 00:11:03,320 Kaya kung ang iyong Mac o iyong PC ay dalawang gigabytes, mayroon kang 2 261 00:11:03,320 --> 00:11:05,760 bilyong bytes ng memorya. 262 00:11:05,760 --> 00:11:08,440 >> Ngayon sabihin lamang ipagpalagay na lamang sa panatilihin ang mga bagay na maganda at nasa ayos, namin 263 00:11:08,440 --> 00:11:09,450 magtalaga ng isang address - 264 00:11:09,450 --> 00:11:10,170 isang numero - 265 00:11:10,170 --> 00:11:12,270 sa bawat byte ng RAM sa iyong computer. 266 00:11:12,270 --> 00:11:15,410 Ang pinakaunang byte ng mga 2 bilyon ay sa pamamagitan ng numerong zero. 267 00:11:15,410 --> 00:11:18,572 Ang susunod na isa ay byte bilang isa, ang bilang dalawa, ang lahat ng mga paraan sa up, tuldok tuldok 268 00:11:18,572 --> 00:11:20,530 tuldok, sa humigit-kumulang 2 bilyong. 269 00:11:20,530 --> 00:11:23,640 >> Kaya maaari mong bilang ng mga byte ng memorya sa iyong computer. 270 00:11:23,640 --> 00:11:26,460 Kaya sabihin ipinapalagay na ang ginagawa ibig sabihin namin sa pamamagitan ng isang address. 271 00:11:26,460 --> 00:11:31,360 Kaya kapag nakita ko int star a, kung ano ang nangyayari upang maipasa sa makipagpalitan ngayon ay ang 272 00:11:31,360 --> 00:11:32,830 address ng isang. 273 00:11:32,830 --> 00:11:37,150 Hindi nito halaga, ngunit kung anumang postal nito address, sa gayon na magsalita - 274 00:11:37,150 --> 00:11:38,810 lokasyon nito sa RAM. 275 00:11:38,810 --> 00:11:41,250 >> At katulad para b, pupuntahan ko upang sabihin ang parehong bagay. 276 00:11:41,250 --> 00:11:42,720 Int, bituin, b. 277 00:11:42,720 --> 00:11:46,350 Bilang isang tabi, technically ang star maaaring pumunta sa iba pang mga lokasyon. 278 00:11:46,350 --> 00:11:50,140 Ngunit kailangan naming ilagay sa pamantayan sa pagiging star sa tabi mismo ng mga uri ng data. 279 00:11:50,140 --> 00:11:54,080 >> Kaya swap lagda ngayon ay nangangahulugan na, ibigay sa akin ang address ng isang int, at tawag 280 00:11:54,080 --> 00:11:55,400 na isang address. 281 00:11:55,400 --> 00:11:58,690 At bigyan ako ng isa pang address ng isang int at tawagan ang address na iyon b. 282 00:11:58,690 --> 00:12:01,120 >> Ngunit ngayon ang aking code dito ay upang baguhin. 283 00:12:01,120 --> 00:12:03,470 Dahil kung Ipinahahayag ko int Temp - 284 00:12:03,470 --> 00:12:05,580 na kung saan ay pa rin ng uri int - 285 00:12:05,580 --> 00:12:08,700 ngunit mag-imbak ako sa isang ito, kung anong uri ng halaga? 286 00:12:08,700 --> 00:12:12,870 Upang maging malinaw, ako paglalagay ng isang may ang code bilang nakasulat na ngayon? 287 00:12:12,870 --> 00:12:14,360 >> Ako ng paglagay ng lokasyon sa isang. 288 00:12:14,360 --> 00:12:16,500 Ngunit Wala akong pakialam tungkol sa lokasyon ngayon, tama? 289 00:12:16,500 --> 00:12:21,940 Temp umiiral lamang Jess 'ikatlong tasa umiral, kung para sa anong layunin? 290 00:12:21,940 --> 00:12:23,090 Upang mag-imbak ng isang halaga. 291 00:12:23,090 --> 00:12:24,830 Gatas o orange juice. 292 00:12:24,830 --> 00:12:28,520 Hindi na talaga maitago ang address ng ang alinman sa mga bagay, na nakakaramdam ng 293 00:12:28,520 --> 00:12:31,200 maliit na walang saysay ito sa real mundo konteksto pa rin. 294 00:12:31,200 --> 00:12:34,990 >> Kaya talaga, kung ano ang gusto kong ilagay sa Temp ay hindi ang address ng isang, ngunit ang 295 00:12:34,990 --> 00:12:36,180 mga nilalaman ng isang. 296 00:12:36,180 --> 00:12:41,930 Kaya kung ang isang ay isang numero tulad ng 123, ito ay 123 mga byte ng memorya na may lamang 297 00:12:41,930 --> 00:12:45,090 Nagkataong ito ang sumasakop, na ang halaga sa isang Nagkataong sumasakop. 298 00:12:45,090 --> 00:12:49,040 >> Kung gusto kong pumunta sa address na iyon, Kailangan kong sabihin bituin isang. 299 00:12:49,040 --> 00:12:52,610 Katulad nito, kung ako ay upang baguhin kung ano ang sa address na isang, baguhin ko 300 00:12:52,610 --> 00:12:53,570 ito upang simulan ang isang. 301 00:12:53,570 --> 00:12:58,185 Kung gusto kong iimbak sa kung ano ang sa ang lokasyon ng kung ano ang sa lokasyon 302 00:12:58,185 --> 00:13:02,180 sa b, star b bituin. 303 00:13:02,180 --> 00:13:05,340 >> Kaya sa maikling, kahit na ito ay hindi masyadong paglubog sa pa - at hindi ko inaasahan 304 00:13:05,340 --> 00:13:06,560 na gagawin ito kaya mabilis - 305 00:13:06,560 --> 00:13:11,100 Napag-alaman na ang lahat ng ako paggawa ay prefixing mga bituin na ito sa aking mga variable, 306 00:13:11,100 --> 00:13:13,350 sinasabi hindi grab ang mga halaga. 307 00:13:13,350 --> 00:13:14,520 Huwag baguhin ang mga halaga. 308 00:13:14,520 --> 00:13:17,600 Ngunit sa halip, pumunta sa mga address na iyon at kumuha ng mga halaga. 309 00:13:17,600 --> 00:13:21,430 Pumunta sa address na iyon at pagbabago ang halaga doon. 310 00:13:21,430 --> 00:13:25,500 >> Kaya ngayon ipaalam sa akin mag-scroll back up sa itaas, lamang upang ayusin ang linya dito, upang 311 00:13:25,500 --> 00:13:27,690 baguhin ang prototype upang tumugma sa. 312 00:13:27,690 --> 00:13:30,280 Ngunit ako ngayon ay kailangan upang gawin ang isa sa iba pang mga bagay. 313 00:13:30,280 --> 00:13:35,500 Intuitively, kung ako ay nagbago ang mga uri ng mga argument na makipagpalitan ay umaasa, 314 00:13:35,500 --> 00:13:37,245 ano pa ang kailangan kong baguhin sa aking code? 315 00:13:37,245 --> 00:13:39,750 316 00:13:39,750 --> 00:13:40,840 >> Kapag tumawag ako makipagpalitan. 317 00:13:40,840 --> 00:13:43,340 Dahil sa ngayon, kung ano ang am Ako pagpasa sa swap pa rin? 318 00:13:43,340 --> 00:13:47,450 Ang halaga ng x at ang halaga ng y, o ang gatas at ang orange juice. 319 00:13:47,450 --> 00:13:48,510 Ngunit hindi ko nais upang gawin iyon. 320 00:13:48,510 --> 00:13:51,060 Ko sa halip nais upang pumasa sa kung ano? 321 00:13:51,060 --> 00:13:53,050 Ang lokasyon ng x at ang lokasyon ng y. 322 00:13:53,050 --> 00:13:55,300 Ano ang kanilang mga postal address, kaya na magsalita. 323 00:13:55,300 --> 00:13:57,600 >> Kaya upang gawin iyon, mayroong isang ampersand. 324 00:13:57,600 --> 00:13:59,260 Ampersand uri ng tunog tulad ng address. 325 00:13:59,260 --> 00:14:03,240 kaya n, ampersand, ang address ng x, at ang address ng y. 326 00:14:03,240 --> 00:14:06,790 Kaya ito ay sinadya na ginagamit namin ampersand kapag tumatawag ang function, 327 00:14:06,790 --> 00:14:10,230 at mga bituin kapag deklarasyon at kapag pagpapatupad ng mga function. 328 00:14:10,230 --> 00:14:14,220 >> At lamang sa tingin ng ampersand bilang address ng operator, at bilang star ang 329 00:14:14,220 --> 00:14:15,490 pumunta doon operator - 330 00:14:15,490 --> 00:14:18,640 o, mas maayos, ang dereference operator. 331 00:14:18,640 --> 00:14:23,480 Kaya na ang isang buong maraming mga salita lamang sa nating ngayon, sana, makipagpalitan ay pagpunta 332 00:14:23,480 --> 00:14:24,440 upang maging tama. 333 00:14:24,440 --> 00:14:26,550 >> Hayaan akong sige at gumawa ng mga - 334 00:14:26,550 --> 00:14:30,940 sabihin aktwal na muling pangalanan ang file, baka program na ito pa rin ang tinatawag na makipagpalitan ng no. 335 00:14:30,940 --> 00:14:33,240 Inaangkin ko na kami ay tumawag ito swap.c ngayon. 336 00:14:33,240 --> 00:14:35,670 Kaya gumawa, swap. 337 00:14:35,670 --> 00:14:37,520 Dot, slash, mag-swap. 338 00:14:37,520 --> 00:14:40,210 >> At ngayon, sa katunayan, ay x 1, y ay 2. 339 00:14:40,210 --> 00:14:44,040 At pagkatapos, x 2, y ay isa. 340 00:14:44,040 --> 00:14:46,500 Well sabihin makita kung hindi namin maaaring gawin ito ng Medyo naiiba ang bilang sa kung ano ang 341 00:14:46,500 --> 00:14:47,180 pagpunta sa dito. 342 00:14:47,180 --> 00:14:51,250 Una, hayaan mo akong mag-zoom in sa aming pagguhit ng screen dito. 343 00:14:51,250 --> 00:14:54,160 At ipaalam sa akin imungkahi para sa isang sandali - at tuwing gumuhit ko dito ay mirrored 344 00:14:54,160 --> 00:14:58,660 up na ngayon doon - ipaalam sa akin imungkahi na narito ang isang buong bungkos ng memorya, o 345 00:14:58,660 --> 00:15:00,540 RAM, sa loob ng aking computer. 346 00:15:00,540 --> 00:15:04,140 >> At ito ay magiging kagat ng numero, sabihin nating, 1. 347 00:15:04,140 --> 00:15:05,720 Ito ang magiging bytes number 2. 348 00:15:05,720 --> 00:15:08,220 At kukunin ko na gawin ang maramihang higit pa, at pagkatapos ng grupo ng mga tuldok tuldok tuldok sa 349 00:15:08,220 --> 00:15:10,880 nagpapahiwatig na mayroong 2 bilyong ng mga bagay na ito. 350 00:15:10,880 --> 00:15:13,520 4, 5, at iba pa. 351 00:15:13,520 --> 00:15:17,055 >> Kaya doon ay ang unang limang mga byte ng memorya ng aking computer. 352 00:15:17,055 --> 00:15:17,560 Ang lahat ng mga karapatan? 353 00:15:17,560 --> 00:15:19,060 Napakakaunting out ng 2 bilyong. 354 00:15:19,060 --> 00:15:21,120 Ngunit ngayon ako pagpunta sa imungkahi ang mga sumusunod na. 355 00:15:21,120 --> 00:15:27,490 Pupunta ako sa ipanukala na x ay pagpunta sa mag-imbak ang numero 1, at y ay pagpunta 356 00:15:27,490 --> 00:15:29,690 mag-imbak ang numero 2. 357 00:15:29,690 --> 00:15:35,000 At ipaalam sa akin sige at ngayon ay kumakatawan ang mga halagang ito tulad ng sumusunod. 358 00:15:35,000 --> 00:15:41,510 >> Tayo'y gawin ito tulad ng sumusunod. 359 00:15:41,510 --> 00:15:42,870 Bigyan mo ako ng isa lang pangalawa. 360 00:15:42,870 --> 00:15:44,150 Isang segundo. 361 00:15:44,150 --> 00:15:45,680 OK. 362 00:15:45,680 --> 00:15:47,560 Gusto kong gumawa ito ng kaunti - 363 00:15:47,560 --> 00:15:50,440 natin gawin ito muli. 364 00:15:50,440 --> 00:15:53,250 Kung hindi man ako pagpunta sa at paggamit ng parehong numero, hindi sinasadyang, 365 00:15:53,250 --> 00:15:54,230 maraming beses. 366 00:15:54,230 --> 00:15:57,320 >> Kaya lamang kaya kami ay may iba't ibang mga numero ng pag-uusapan, sabihin tinatawag ito byte 367 00:15:57,320 --> 00:16:03,391 numero 123, 124, 125, 126, at tuldok tuldok tuldok. 368 00:16:03,391 --> 00:16:08,400 At hayaang i-claim sa akin ngayon na pupuntahan ko ilagay ang halaga 1 dito, at ang halaga 2 369 00:16:08,400 --> 00:16:11,990 dito, kung hindi man ay kilala bilang x at y. 370 00:16:11,990 --> 00:16:15,300 Kaya ito lang kaya ang mangyayari na ito ay x, ito ay y. 371 00:16:15,300 --> 00:16:18,180 >> At sa pamamagitan lamang ng ilang mga random na pagkakataon, ang computer, sa operating system, 372 00:16:18,180 --> 00:16:21,890 Nangyari ito upang ilagay ang x sa lokasyon number 123. 373 00:16:21,890 --> 00:16:25,590 At y napunta sa lokasyon 124 - 374 00:16:25,590 --> 00:16:26,330 diyablo. 375 00:16:26,330 --> 00:16:28,700 Ang dapat kong naayos na ito. 376 00:16:28,700 --> 00:16:34,040 Oh tao, ko ba talagang gawin ito? 377 00:16:34,040 --> 00:16:37,340 Oo, gusto kong ayusin ito at b tamang tungkol sa ito ngayon. 378 00:16:37,340 --> 00:16:39,950 Paumanhin, bago sa ito. 379 00:16:39,950 --> 00:16:45,020 >> 127, 131, at hindi ko nais upang maging ito complex, ngunit bakit ko babaguhin ang 380 00:16:45,020 --> 00:16:46,340 mga numero doon? 381 00:16:46,340 --> 00:16:48,360 Dahil gusto ko ang mga ints sa talagang maging apat na bytes. 382 00:16:48,360 --> 00:16:49,810 Kaya natin maging sobrang anal tungkol sa mga ito. 383 00:16:49,810 --> 00:16:53,800 Kaya na kung 1 ang mangyayari sa ma-address 123, ang 2 ay magiging sa address 384 00:16:53,800 --> 00:16:55,730 127 sapagkat ito lang 4 byes ang layo. 385 00:16:55,730 --> 00:16:56,210 Iyon lang. 386 00:16:56,210 --> 00:16:58,640 At ipapakita namin kalimutan ang tungkol sa lahat ng iba pang mga address sa mundo. 387 00:16:58,640 --> 00:17:03,320 >> Kaya x ay nasa 123 lokasyon, y ay nasa lokasyon 127. 388 00:17:03,320 --> 00:17:05,770 At ngayon, kung ano ang ginagawa ko talaga gusto mong gawin? 389 00:17:05,770 --> 00:17:10,099 Kapag tumawag ako makipagpalitan ng ngayon, kung ano ang talaga ang nangyari? 390 00:17:10,099 --> 00:17:14,920 Well, kapag tumawag ako makipagpalitan, ako ang pagpasa sa ang address ng x at ang address ng y. 391 00:17:14,920 --> 00:17:18,540 Kaya halimbawa, kung ang dalawang piraso ng papel ngayon ay kumakatawan sa dalawang 392 00:17:18,540 --> 00:17:23,510 argumento ng isang at b upang magpalitan, ano Ako pagpunta sa sumulat sa unang sa mga ito, 393 00:17:23,510 --> 00:17:27,720 kung saan ako pupunta na tumawag sumangguni sa bilang isang? 394 00:17:27,720 --> 00:17:30,610 >> Mismong, 123. 395 00:17:30,610 --> 00:17:31,905 Kaya ito inaangkin ko ay isang. 396 00:17:31,905 --> 00:17:32,955 Ito ang isang parameter. 397 00:17:32,955 --> 00:17:35,856 Ako paglagay ng address ng x sa doon. 398 00:17:35,856 --> 00:17:38,152 >> Ano iyan? 399 00:17:38,152 --> 00:17:40,890 >> Ano iyan? 400 00:17:40,890 --> 00:17:41,190 >> Hindi, hindi. 401 00:17:41,190 --> 00:17:41,720 Iyon ay OK. 402 00:17:41,720 --> 00:17:42,570 Mabuti pa rin, mabuti pa rin. 403 00:17:42,570 --> 00:17:43,530 Kaya ito ay isang. 404 00:17:43,530 --> 00:17:46,240 At ngayon sa ikalawang piraso ng papel, ito ay magiging b, at kung ano Ako 405 00:17:46,240 --> 00:17:49,010 pagpunta sa ay sumusulat sa ito piraso ng papel? 406 00:17:49,010 --> 00:17:50,080 127. 407 00:17:50,080 --> 00:17:53,720 >> Kaya ang tanging bagay na nagbago mula noong ang aming nakaraang pagsabi ng kuwentong ito ay, 408 00:17:53,720 --> 00:17:58,590 sa halip na literal na 1 at 2, ako pagpunta sa pumasa sa 123 at 127. 409 00:17:58,590 --> 00:18:02,130 At ngayon ako pagpunta sa ilagay ang mga ito sa loob ng ng kahon na ito, ang lahat ng karapatan? 410 00:18:02,130 --> 00:18:04,640 Kaya itim na kahon na ngayon ay kumakatawan ang makipagpalitan ng pag-andar. 411 00:18:04,640 --> 00:18:07,230 >> Samantala, sabihin na ngayon ng isang tao ipatupad ang makipagpalitan ng pag-andar. 412 00:18:07,230 --> 00:18:09,090 Ayos lang ba isang tao up dito gustong magboluntaryo? 413 00:18:09,090 --> 00:18:09,560 Halika sa up. 414 00:18:09,560 --> 00:18:11,080 Ano ang inyong pangalan? 415 00:18:11,080 --> 00:18:11,460 Charlie. 416 00:18:11,460 --> 00:18:12,080 Ang lahat ng mga karapatan, Charlie. 417 00:18:12,080 --> 00:18:14,810 Halika sa up. 418 00:18:14,810 --> 00:18:17,310 >> Kaya Charlie ay pagpunta upang i-play ang papel na ginagampanan ng aming mga itim na kahon. 419 00:18:17,310 --> 00:18:21,460 At Charlie, ano ang gusto ko mong gawin ngayon ay ipatupad makipagpalitan sa paraan 420 00:18:21,460 --> 00:18:25,320 na, ibinigay na mga dalawang mga address, talaga ikaw ay pagpunta 421 00:18:25,320 --> 00:18:26,330 upang baguhin ang mga halaga. 422 00:18:26,330 --> 00:18:28,290 At kukunin ko na bulong sa iyong tainga kung paano patakbuhin ang TV dito. 423 00:18:28,290 --> 00:18:29,930 >> Kaya't sige, at ikaw ang itim na kahon. 424 00:18:29,930 --> 00:18:30,920 Abutin sa doon. 425 00:18:30,920 --> 00:18:34,054 Ano ang halaga mo para makita ng, at kung ano ang halaga mo makita para b? 426 00:18:34,054 --> 00:18:36,740 >> Charlie: a ay 123 at b ay 127. 427 00:18:36,740 --> 00:18:37,530 >> David MALAN: OK, eksakto. 428 00:18:37,530 --> 00:18:38,940 Ngayon i-pause doon para sa sandali lamang. 429 00:18:38,940 --> 00:18:41,680 Ang unang bagay na ikaw ay pagpunta sa gawin ngayon, ayon sa mga code - na 430 00:18:41,680 --> 00:18:43,220 Magpapadala ako ngayon ililis sa screen - 431 00:18:43,220 --> 00:18:46,750 ay magiging upang magtalaga ng isang maliit na bit ng memory na tinatawag na Temp. 432 00:18:46,750 --> 00:18:48,850 Kaya pupuntahan ko sige at bigyan mo na memory. 433 00:18:48,850 --> 00:18:52,210 >> Kaya ito ay magiging isang third variable na ikaw ay may access sa 434 00:18:52,210 --> 00:18:54,080 iyo na tinatawag na Temp. 435 00:18:54,080 --> 00:18:57,120 At kung ano ang iyong pagpunta sa magsulat sa Temp piraso ng papel? 436 00:18:57,120 --> 00:19:02,524 437 00:19:02,524 --> 00:19:03,470 >> Charlie: payo, tama? 438 00:19:03,470 --> 00:19:04,790 >> David MALAN: OK, na rin hindi kinakailangan payo. 439 00:19:04,790 --> 00:19:07,230 Kaya ang linya ng code na nag ako naka-highlight sa kanang bahagi, 440 00:19:07,230 --> 00:19:07,900 sabihin simulan doon. 441 00:19:07,900 --> 00:19:08,890 Sinasabi nito ng isang bituin. 442 00:19:08,890 --> 00:19:11,670 Kaya isang ay kasalukuyang pag-iimbak ang bilang 123. 443 00:19:11,670 --> 00:19:16,660 At lamang intuitively, kung ano ang star 123 ibig sabihin nito? 444 00:19:16,660 --> 00:19:21,630 >> Ngunit partikular, kung ang isang 123, isang bituin ay nangangahulugan na kung ano? 445 00:19:21,630 --> 00:19:22,560 Ang halaga ng isang. 446 00:19:22,560 --> 00:19:24,580 O kaya naman mas casually, pumunta doon. 447 00:19:24,580 --> 00:19:28,620 Kaya ipaalam sa akin imungkahi na, hinahawakan ang isang sa ang iyong mga kamay, sige at ituturing na 448 00:19:28,620 --> 00:19:29,430 na parang ito ay isang mapa. 449 00:19:29,430 --> 00:19:32,940 At lumakad iyong sarili sa ibabaw ng mga computer memory, at hanapin sa amin kung ano ang 450 00:19:32,940 --> 00:19:36,520 sa 123 lokasyon. 451 00:19:36,520 --> 00:19:37,720 Mismong. 452 00:19:37,720 --> 00:19:41,100 >> Kaya naming makita sa lokasyon 123 ay kung ano ang, nang walang alinlangan? 453 00:19:41,100 --> 00:19:44,240 OK, kaya kung ano ang halaga ngayon ikaw ay pagpunta sa ilagay sa Temp? 454 00:19:44,240 --> 00:19:44,750 Mismong. 455 00:19:44,750 --> 00:19:45,600 Kaya sige lang at gawin iyon. 456 00:19:45,600 --> 00:19:51,280 At isulat ang numero 1 sa mga piraso ng papel na kasalukuyang may pamagat na Temp. 457 00:19:51,280 --> 00:19:53,540 >> At ngayon sa susunod na hakbang na ka pagpunta sa ipatupad 458 00:19:53,540 --> 00:19:54,310 ay magiging kung ano. 459 00:19:54,310 --> 00:19:57,820 Well, sa kanang bahagi ng susunod na linya ng code ay star b. b, ng 460 00:19:57,820 --> 00:19:59,260 Siyempre, nag-iimbak ng isang address. 461 00:19:59,260 --> 00:20:02,270 Iyon addresses 127. 462 00:20:02,270 --> 00:20:06,620 Star b ibig sabihin kung ano, casually nagsasalita? 463 00:20:06,620 --> 00:20:08,700 >> Pumunta sa lokasyon na iyon. 464 00:20:08,700 --> 00:20:14,988 Kaya sige lang at hanapin sa amin kung ano ang sa 127 lokasyon. 465 00:20:14,988 --> 00:20:15,480 OK. 466 00:20:15,480 --> 00:20:19,170 Siyempre, sa 127 lokasyon, pa rin ang halaga 2. 467 00:20:19,170 --> 00:20:24,060 Kaya ano pa ang pagpunta ngayon sa store ang kahit anong sa lokasyon sa isang? 468 00:20:24,060 --> 00:20:26,860 Kaya star ng paraan pumunta sa isang lokasyon. 469 00:20:26,860 --> 00:20:29,770 Ano ang isang lokasyon? 470 00:20:29,770 --> 00:20:30,430 >> Mismong. 471 00:20:30,430 --> 00:20:34,190 Kaya ngayon, kung gusto mong baguhin kung ano ang sa lokasyon na iyon - 472 00:20:34,190 --> 00:20:36,470 Kukunin ko sige at magpatakbo ng pambura ang mga dito. 473 00:20:36,470 --> 00:20:37,760 At ngayon ilagay ito pabalik sa brush. 474 00:20:37,760 --> 00:20:42,190 Ano ang numero mo ay pagpunta sa isulat sa na blangko ang kahon ngayon? 475 00:20:42,190 --> 00:20:42,850 >> Mismong. 476 00:20:42,850 --> 00:20:46,470 Kaya ito na linya ng code, upang maging malinaw - hayaan pause sa akin kung anong ni Charlie paggawa at 477 00:20:46,470 --> 00:20:51,730 ituro dito, ano lang siya tapos ay sumulat sa na kahon sa lokasyon 123 478 00:20:51,730 --> 00:20:55,150 ang halaga na dati ay sa b. 479 00:20:55,150 --> 00:20:59,140 At kaya na namin ngayon ang ipinapatupad sa katunayan ito pangalawang linya ng code. 480 00:20:59,140 --> 00:21:01,920 >> Ngayon, sa kasamaang-palad, mayroong pa rin ang isang linya na natitira. 481 00:21:01,920 --> 00:21:04,900 Ngayon kung ano ang nasa Temp, literal? 482 00:21:04,900 --> 00:21:06,200 Ito ay malinaw naman ang bilang ng isa. 483 00:21:06,200 --> 00:21:07,020 Iyan ay hindi isang address. 484 00:21:07,020 --> 00:21:09,380 Ito ay lamang ng isang numero, uri ng isang variable mula sa isang linggo. 485 00:21:09,380 --> 00:21:13,520 >> At ngayon kapag sinabi mong star b, na nangangahulugang pumunta sa b address, na kung saan ay sa 486 00:21:13,520 --> 00:21:15,090 Siyempre dito. 487 00:21:15,090 --> 00:21:16,020 Kaya sa sandaling makarating doon - 488 00:21:16,020 --> 00:21:18,320 Kukunin ko sige at burahin kung ano ang aktwal na doon - at kung ano ang ikaw ay 489 00:21:18,320 --> 00:21:20,820 pagpunta sa magsulat ngayon sa 127 lokasyon? 490 00:21:20,820 --> 00:21:22,010 >> Charlie: Temp, na kung saan ay isa. 491 00:21:22,010 --> 00:21:23,430 >> David MALAN: Temp, na kung saan ay isa. 492 00:21:23,430 --> 00:21:25,670 At ano ang mangyayari sa Temp sa dulo? 493 00:21:25,670 --> 00:21:26,600 Well, hindi namin talaga alam. 494 00:21:26,600 --> 00:21:27,420 Hindi namin talagang pakialam. 495 00:21:27,420 --> 00:21:31,090 Anumang oras na namin naipatupad ang isang function na kaya sa ngayon, ang anumang lokal na variable mayroon kang 496 00:21:31,090 --> 00:21:31,890 ay sa katunayan lokal. 497 00:21:31,890 --> 00:21:33,060 At sila lamang mawala. 498 00:21:33,060 --> 00:21:35,040 Sila ay naka-reclaim ng operating sistema kalaunan. 499 00:21:35,040 --> 00:21:39,800 >> Kaya ang katunayan na ang Temp ay mayroon pa ring mga halaga 1 ay isang uri ng sa panimula 500 00:21:39,800 --> 00:21:41,150 hindi kawili-wili sa amin. 501 00:21:41,150 --> 00:21:43,100 Ang lahat ng mga karapatan, sa gayon ang isang pag-ikot ng papuri kung magagawa namin para sa Charlie. 502 00:21:43,100 --> 00:21:46,400 Tunay na magaling. 503 00:21:46,400 --> 00:21:51,520 >> Ang lahat ng mga karapatan, kaya kung ano ang higit pa ang ibig ang ibig sabihin nito maaari naming gawin? 504 00:21:51,520 --> 00:21:54,400 Kaya ito lumiliko out na kami nakapunta na nagsasabi ng ilang puting kasinungalingan 505 00:21:54,400 --> 00:21:55,540 para sa lubos ng ilang oras. 506 00:21:55,540 --> 00:21:59,990 Sa katunayan, ito lumiliko out na ang isang string, lahat ng oras na ito, ay hindi talaga isang 507 00:21:59,990 --> 00:22:02,190 pagkakasunud-sunod ng mga character per se. 508 00:22:02,190 --> 00:22:03,980 Ito ay uri ng ay na intuitively. 509 00:22:03,980 --> 00:22:08,270 >> Pero technically speaking, string ay isang sa uri ng data na aming ipinahayag sa loob ng 510 00:22:08,270 --> 00:22:12,170 ang CS50 library upang gawing simple ang mundo para sa unang ilang linggo ng klase. 511 00:22:12,170 --> 00:22:20,130 Ano ang isang string ay talagang ay ang address ng isang character sa isang lugar sa RAM. 512 00:22:20,130 --> 00:22:25,530 Ang isang string ay talagang isang numero, tulad ng 123 o 127, na ang mangyayari sa maghiwalay 513 00:22:25,530 --> 00:22:28,420 kung saan ang isang string ay nagsisimula sa memory ng iyong computer. 514 00:22:28,420 --> 00:22:31,870 >> Ngunit hindi ito ay kumakatawan sa string, per se, mismo. 515 00:22:31,870 --> 00:22:33,460 At maaari naming makita ito tulad ng sumusunod. 516 00:22:33,460 --> 00:22:35,980 Hayaan akong sige at buksan up ang ilang mga code na kasama ng 517 00:22:35,980 --> 00:22:38,340 pinagmulan ngayong araw code halimbawa. 518 00:22:38,340 --> 00:22:42,225 At ako pagpunta sa sige at buksan up, sabihin nating, ihambing-0.c. 519 00:22:42,225 --> 00:22:44,830 520 00:22:44,830 --> 00:22:48,790 Ito ay isang maraming surot na programa ay pagpunta upang maipatupad ng tulad ng sumusunod. 521 00:22:48,790 --> 00:22:49,040 >> Una. 522 00:22:49,040 --> 00:22:50,420 Pupunta ako sa sinasabi ng isang bagay. 523 00:22:50,420 --> 00:22:52,660 Pagkatapos ay pupuntahan ko sige at makakuha ng isang string mula sa mga gumagamit 524 00:22:52,660 --> 00:22:53,750 sa susunod na linya. 525 00:22:53,750 --> 00:22:55,370 Pagkatapos ay pupuntahan ko ito sinasabi muli. 526 00:22:55,370 --> 00:22:57,540 Pagkatapos Pupunta ako makakuha ng isa string mula sa user. 527 00:22:57,540 --> 00:23:00,390 >> At notice, ako na nagpapakita ng isa sa mga mga string sa isang variable na tinatawag s, at 528 00:23:00,390 --> 00:23:03,040 isa pa sa mga string sa isang variable na tinatawag na t. 529 00:23:03,040 --> 00:23:07,480 At ngayon ako pagpunta sa i-claim, napaka makatwirang, na kung s ay katumbas ay katumbas ng t, 530 00:23:07,480 --> 00:23:08,940 ang mga string ay pareho. 531 00:23:08,940 --> 00:23:09,970 Mong i-type ang mga parehong bagay. 532 00:23:09,970 --> 00:23:11,830 Iba Pa, ang mga string ay hindi ang parehong bagay. 533 00:23:11,830 --> 00:23:15,440 >> Pagkatapos ng lahat, kung kami input dalawang ints, dalawang char, dalawang kamay, dalawang Doubles, alinman sa 534 00:23:15,440 --> 00:23:18,400 ang mga uri ng data na aming uusapang tungkol sa kaya sa ngayon upang paghambingin ang mga ito - 535 00:23:18,400 --> 00:23:22,070 isipin ang ginawa namin napaka-clear ng isang habang ang nakalipas na hindi mo magawa ito, dahil isang 536 00:23:22,070 --> 00:23:25,840 single sign katumbas ay siyempre ang pagtatalaga operator. 537 00:23:25,840 --> 00:23:26,820 Kaya iyon ay magiging isang bug. 538 00:23:26,820 --> 00:23:29,260 >> Ginagamit namin ang pantay pantay na pag-sign, na sa katunayan Inihahambing 539 00:23:29,260 --> 00:23:31,050 mga bagay para sa tunay na pagkakapantay-pantay. 540 00:23:31,050 --> 00:23:32,275 Pero inaangkin ko na ito ay maraming surot. 541 00:23:32,275 --> 00:23:37,400 Kung ako sige at gumawa ihambing zero, at pagkatapos ay huwag dot slash ihambing zero. 542 00:23:37,400 --> 00:23:39,700 At ako type sa, sabihin nating, kumusta. 543 00:23:39,700 --> 00:23:41,590 At pagkatapos ay sabihin kamustahin muli. 544 00:23:41,590 --> 00:23:46,040 Literal ang parehong bagay, ang computer claim ko na na-type iba't ibang mga bagay. 545 00:23:46,040 --> 00:23:47,640 >> Ngayon siguro ko lang namali isang bagay. 546 00:23:47,640 --> 00:23:49,910 Kukunin ko i-type ang aking pangalan sa oras na ito. 547 00:23:49,910 --> 00:23:52,580 Ibig kong sabihin, kumusta. 548 00:23:52,580 --> 00:23:54,770 Hello. 549 00:23:54,770 --> 00:23:57,360 Ito ay naiiba sa bawat solong oras. 550 00:23:57,360 --> 00:23:58,430 >> Well, kung bakit ay na? 551 00:23:58,430 --> 00:24:00,140 Kung ano talaga ang nangyayari sa sa ilalim ng hood? 552 00:24:00,140 --> 00:24:03,270 Well, kung ano talaga ang nangyayari sa ilalim hood ang ay ang string pagkatapos 553 00:24:03,270 --> 00:24:07,410 I-type sa na unang pagkakataon halimbawa ay ang salita kumusta, siyempre. 554 00:24:07,410 --> 00:24:11,660 Ngunit kung kami ay kumakatawan ito sa ilalim ang hood, isipin ang isang na 555 00:24:11,660 --> 00:24:13,470 string ay nasa isang array. 556 00:24:13,470 --> 00:24:15,040 At namin ang sinabi ng mas maraming sa nakaraan. 557 00:24:15,040 --> 00:24:20,200 >> Kaya kung gumuhit ko na array ganito, ako pagpunta sa kumakatawan sa isang bagay na lubos 558 00:24:20,200 --> 00:24:23,030 katulad ng kung ano ginawa namin ng ilang sandali ang nakalipas. 559 00:24:23,030 --> 00:24:25,390 At mayroong isang bagay na talagang espesyal na dito, masyadong. 560 00:24:25,390 --> 00:24:28,090 Ano ang tinutukoy namin ay sa sa dulo ng bawat string? 561 00:24:28,090 --> 00:24:30,760 Oo, ito backslash zero, na kung saan ay lamang ang paraan ng kumakatawan, 562 00:24:30,760 --> 00:24:33,610 Literal, 00,000,000. 563 00:24:33,610 --> 00:24:35,680 Eight 0 mga piraso sa isang hilera. 564 00:24:35,680 --> 00:24:37,610 >> Hindi ko alam, lantaran, kung ano ang pagkatapos nito. 565 00:24:37,610 --> 00:24:40,090 Iyon lang ang isang bungkos mas RAM sa loob ng aking computer. 566 00:24:40,090 --> 00:24:40,970 Ngunit ito ay isang array. 567 00:24:40,970 --> 00:24:42,260 Usapan natin ang tungkol sa array bago. 568 00:24:42,260 --> 00:24:45,010 At kami ay karaniwang makipag-usap tungkol sa array bilang sa pagiging lokasyon zero, 569 00:24:45,010 --> 00:24:46,580 pagkatapos ng isa, at pagkatapos ay dalawa. 570 00:24:46,580 --> 00:24:47,950 Ngunit ito lamang ay para sa kaginhawaan. 571 00:24:47,950 --> 00:24:49,380 At iyan ay ganap na kamag-anak. 572 00:24:49,380 --> 00:24:53,010 >> Kapag talagang nakakakuha ka ng memorya mula sa ang computer na ito, siyempre anumang 573 00:24:53,010 --> 00:24:55,450 2 bilyong ilang kakaiba bytes, potensyal na. 574 00:24:55,450 --> 00:24:59,100 Kaya talagang sa ilalim ng hood, lahat ng oras na ito, oo. 575 00:24:59,100 --> 00:25:01,670 Ito ay maaaring napakahusay maging bracket zero. 576 00:25:01,670 --> 00:25:04,780 Ngunit kung ka kumuha sa lupa kahit na mas malalim sa ilalim ang hood, na talaga 577 00:25:04,780 --> 00:25:07,000 tugunan ang numero 123. 578 00:25:07,000 --> 00:25:09,150 Ito ang address 124. 579 00:25:09,150 --> 00:25:11,040 Ito ang address 125. 580 00:25:11,040 --> 00:25:12,540 >> At hindi ko magtaas oras na ito. 581 00:25:12,540 --> 00:25:15,840 Ito ang ngayon isa bytes bukod para sa kung ano ang dahilan? 582 00:25:15,840 --> 00:25:17,930 Paano malaki ay isang pansamantalang trabaho? 583 00:25:17,930 --> 00:25:19,170 Ang isang pansamantalang trabaho ay isa lamang byte. 584 00:25:19,170 --> 00:25:20,570 Ang isang int ay karaniwang apat na bytes. 585 00:25:20,570 --> 00:25:24,850 Kaya na ang dahilan kung bakit ko ginawa ito 123, 127, 131 at iba pa. 586 00:25:24,850 --> 00:25:27,560 Ngayon ay maaari ko bang panatilihin ang matematika mas simple at lamang gawin plus 1. 587 00:25:27,560 --> 00:25:30,510 At ito ay ngayon kung ano talaga ang pagpunta sa ilalim ng hood. 588 00:25:30,510 --> 00:25:37,760 >> Kaya kapag ikaw idedeklara ng isang bagay na tulad nito, string s, ito ay talagang - 589 00:25:37,760 --> 00:25:39,170 ito lumiliko out - 590 00:25:39,170 --> 00:25:41,190 pansamantalang trabaho star. 591 00:25:41,190 --> 00:25:44,640 Bituin, siyempre, ay nangangahulugan address, aka pointer. 592 00:25:44,640 --> 00:25:46,200 Kaya ito ang address ng isang bagay. 593 00:25:46,200 --> 00:25:47,510 Ano ito sa address ng? 594 00:25:47,510 --> 00:25:47,760 >> Well - 595 00:25:47,760 --> 00:25:51,680 Ako ang isa lamang kung sino ang makakakita sa pinakasentro mahalagang punto ako sa paggawa, o sa tingin 596 00:25:51,680 --> 00:25:52,560 Ako sa paggawa. 597 00:25:52,560 --> 00:25:55,270 Kaya string - 598 00:25:55,270 --> 00:25:57,180 ang malungkot bagay ay mayroon akong isang monitor doon kung saan ako 599 00:25:57,180 --> 00:25:58,100 maaaring nakakita na. 600 00:25:58,100 --> 00:26:00,990 >> Ang lahat ng mga karapatan, kaya string s ay kung ano ang Ipinahayag ko dati. 601 00:26:00,990 --> 00:26:04,600 Ngunit ito lumiliko out, salamat sa isang maliit na magic sa CS50 library, lahat ng ito 602 00:26:04,600 --> 00:26:08,780 oras string ay may literal naging pansamantalang trabaho star. 603 00:26:08,780 --> 00:26:11,310 Ang mga bituin ay nangangahulugan na muli pointer o address. 604 00:26:11,310 --> 00:26:14,180 Ang katotohanan na ito ay ang flanking salita pansamantalang trabaho ay nangangahulugan na ito ang 605 00:26:14,180 --> 00:26:15,970 address ng isang character. 606 00:26:15,970 --> 00:26:23,100 >> Kaya kung makakakuha ng string ay tinatawag na, at ako type sa H-E-L-L-O, ipinapanukala ngayon kung ano ang makakuha 607 00:26:23,100 --> 00:26:27,330 string literal na ibinabalik ang lahat ng oras na ito, kahit na namin sa halip 608 00:26:27,330 --> 00:26:29,980 oversimplified ang mundo? 609 00:26:29,980 --> 00:26:33,310 Ano ang ibig makakuha ng string talaga bumalik bilang nito return halaga? 610 00:26:33,310 --> 00:26:35,830 611 00:26:35,830 --> 00:26:38,720 >> 123 sa kasong ito, halimbawa. 612 00:26:38,720 --> 00:26:42,630 Dati kami sinabi na makakuha ng string lamang ay nagbabalik ng isang string, isang pagkakasunud-sunod ng 613 00:26:42,630 --> 00:26:43,300 character. 614 00:26:43,300 --> 00:26:44,790 Ngunit iyon lamang ang isang bit ng isang maliit na kasinungalingan. 615 00:26:44,790 --> 00:26:48,010 Ang paraan makakuha ng string talagang gumagana sa ilalim ng hood ay ito ay nakakuha ng 616 00:26:48,010 --> 00:26:48,930 string mula sa user. 617 00:26:48,930 --> 00:26:51,530 Ito plops ang mga character na siya sa mga uri ng memorya. 618 00:26:51,530 --> 00:26:54,680 Ito ay naglalagay ng isang backslash zero sa dulo ng mga pagkakasunud-sunod ng mga character. 619 00:26:54,680 --> 00:26:57,310 >> Ngunit pagkatapos ay kung ano ang makakuha ng string Literal na bumalik? 620 00:26:57,310 --> 00:27:02,710 Ito literal ay magbabalik ng mga address ng pinakaunang bytes sa RAM na 621 00:27:02,710 --> 00:27:04,130 ito na ginagamit para sa na lakas. 622 00:27:04,130 --> 00:27:07,500 At ito lumiliko out na lamang sa pamamagitan ng pagbalik isang solong address ng 623 00:27:07,500 --> 00:27:12,120 unang character sa string, iyon ay sapat na para sa paghahanap ng ang kabuuan ng 624 00:27:12,120 --> 00:27:12,630 ang string. 625 00:27:12,630 --> 00:27:16,930 >> Sa ibang salita, kumuha ng string ay walang bumalik sa 123 at 124 at 125. 626 00:27:16,930 --> 00:27:19,950 Hindi nito kailangang magbigay sa akin ng isang mahabang listahan ng lahat ng mga bytes na 627 00:27:19,950 --> 00:27:20,740 ang aking mga string ay gumagamit. 628 00:27:20,740 --> 00:27:22,670 Dahil isa, ang mga ito ay ang lahat ng bumalik upang i-back. 629 00:27:22,670 --> 00:27:28,160 At dalawang, batay sa unang address, ako maaaring maisip kung saan ang string ay nagtatapos. 630 00:27:28,160 --> 00:27:29,910 Paano? 631 00:27:29,910 --> 00:27:33,490 >> Ang mga espesyal na character na walang bisa, ang backslash zero sa dulo. 632 00:27:33,490 --> 00:27:35,430 Kaya sa ibang salita, kung pinapasa mo ang mga - 633 00:27:35,430 --> 00:27:36,530 sa loob ng mga variable - 634 00:27:36,530 --> 00:27:41,300 ang address ng isang pansamantalang trabaho, at angkinin mo na sa dulo ng anumang string, anumang 635 00:27:41,300 --> 00:27:45,040 pagkakasunud-sunod ng mga character tulad namin mga kawani na tao Sa tingin ng mga string, kung ipagpalagay mo na 636 00:27:45,040 --> 00:27:48,600 sa dulo ng anumang naturang string mayroong isang backslash zero, ikaw ay golden. 637 00:27:48,600 --> 00:27:52,430 Dahil maaari mong laging mahanap sa dulo ng isang string. 638 00:27:52,430 --> 00:27:54,870 >> Ngayon kung ano talaga pagkatapos ng pagpunta sa sa programang ito? 639 00:27:54,870 --> 00:27:59,990 Bakit programa na ito, ihambing-0.c, maraming surot? 640 00:27:59,990 --> 00:28:01,690 Ano ay aktwal na ina-kumpara? 641 00:28:01,690 --> 00:28:02,420 Oo? 642 00:28:02,420 --> 00:28:05,000 >> MAG-AARAL: [hindi marinig]. 643 00:28:05,000 --> 00:28:05,730 >> David MALAN: Mismong. 644 00:28:05,730 --> 00:28:08,350 Ito ay inihahambing ang mga lokasyon ng mga string. 645 00:28:08,350 --> 00:28:12,420 Kaya kung ang gumagamit ay nag-type sa halo-sabay, tulad ng ginawa ko, memory maaaring magtapos up 646 00:28:12,420 --> 00:28:13,430 naghahanap ng ganito. 647 00:28:13,430 --> 00:28:18,210 Kung ang gumagamit pagkatapos ay sa mga uri kumusta muli, ngunit sa pamamagitan ng pagtawag makakuha ng string muli, c ay 648 00:28:18,210 --> 00:28:21,800 hindi partikular na matalino maliban kung magturo sa iyo ito upang maging matalino sa pamamagitan ng pagsusulat ng code. 649 00:28:21,800 --> 00:28:22,430 >> C - 650 00:28:22,430 --> 00:28:23,860 at mga computer sa mas pangkalahatang - 651 00:28:23,860 --> 00:28:27,370 kung type ka sa word kumusta muli, alam mo kung ano ang iyong pagpunta upang makakuha ng. 652 00:28:27,370 --> 00:28:31,480 Lamang ka ng pagpunta upang makakuha ng isang pangalawang array ng memorya na, oo, maging ang mangyayari 653 00:28:31,480 --> 00:28:35,510 pag-iimbak ng H-E-L-L-O at iba pa. 654 00:28:35,510 --> 00:28:38,240 >> Ito ay pagpunta sa hitsura ang parehong upang amin ang mga kawani na tao, ngunit ang address na ito 655 00:28:38,240 --> 00:28:39,460 maaaring hindi 123. 656 00:28:39,460 --> 00:28:42,470 Maaaring lamang kaya mangyari na ang operating system ay may ilang mga magagamit na 657 00:28:42,470 --> 00:28:45,430 espasyo para sa halimbawa sa lokasyon - 658 00:28:45,430 --> 00:28:49,820 sabihin nating ang isang bagay na di-makatwirang, tulad nito ay 200 lokasyon. 659 00:28:49,820 --> 00:28:51,620 At ito ang 201 lokasyon. 660 00:28:51,620 --> 00:28:53,060 At ito ang 202 lokasyon. 661 00:28:53,060 --> 00:28:55,730 Wala kaming ideya kung saan na pagpunta sa maging sa memorya. 662 00:28:55,730 --> 00:28:59,110 >> Ngunit ano ang ibig sabihin nito ay ang kung ano ang pagpunta upang ma-imbak sa huli sa s? 663 00:28:59,110 --> 00:29:00,750 Ang bilang 123. 664 00:29:00,750 --> 00:29:04,860 Ano kaya ang nangyari na naka-imbak sa t, sa di-makatwirang halimbawa? 665 00:29:04,860 --> 00:29:06,300 Ang bilang 200. 666 00:29:06,300 --> 00:29:11,410 At lahat ng ito ay nangangahulugan na pagkatapos ay malinaw naman, 123 ay hindi katumbas ng 200. 667 00:29:11,410 --> 00:29:14,940 At kaya ito kung kondisyon ay hindi kailanman sinusuri sa true. 668 00:29:14,940 --> 00:29:18,430 Dahil get string ay gumagamit ng iba't-ibang chunks ng memory sa bawat oras. 669 00:29:18,430 --> 00:29:20,360 >> Ngayon ay maaari naming makita ito muli sa isa pang halimbawa. 670 00:29:20,360 --> 00:29:23,764 Hayaan akong sige at buksan up kopya-0.c. 671 00:29:23,764 --> 00:29:28,770 Inaangkin ko na halimbawa na ito ay pagpunta sa subukan - ngunit mabibigo - upang kopyahin ang dalawang mga string 672 00:29:28,770 --> 00:29:29,910 tulad ng mga sumusunod. 673 00:29:29,910 --> 00:29:31,730 >> Pupunta ako sa isang bagay na sabihin sa user. 674 00:29:31,730 --> 00:29:34,490 Pagkatapos Pupunta ako upang makakuha ng isang string at tawagan ito s. 675 00:29:34,490 --> 00:29:36,400 At ngayon, ako ng paggawa ng pagsusuring ito dito. 676 00:29:36,400 --> 00:29:37,990 Binanggit namin ito ng back habang. 677 00:29:37,990 --> 00:29:42,490 Ngunit kapag maaaring makakuha ng string return null, isa pang espesyal na karakter, o mga espesyal na 678 00:29:42,490 --> 00:29:45,050 simbolo sabihin nating. 679 00:29:45,050 --> 00:29:45,900 Kung ito ay sa labas ng memorya. 680 00:29:45,900 --> 00:29:48,970 >> Halimbawa, kung ang gumagamit ay talagang pagiging mahirap at uri ng mabangis 681 00:29:48,970 --> 00:29:51,220 bilang ng mga character sa keyboard at hit ang Enter. 682 00:29:51,220 --> 00:29:54,580 Kung na bilang ng mga character lamang hindi maaari magkasya sa RAM para sa anumang mabaliw 683 00:29:54,580 --> 00:29:57,820 dahilan, na rin makakuha ng mga string kapangyarihan napakahusay bumalik null. 684 00:29:57,820 --> 00:30:01,080 >> O kung ang iyong programa mismo ay ginagawa ng maraming ng iba pang mga bagay at mayroong lamang 685 00:30:01,080 --> 00:30:03,790 hindi sapat na memorya para sa get string upang magtagumpay, maaaring ito magtapos 686 00:30:03,790 --> 00:30:05,240 up bumabalik null. 687 00:30:05,240 --> 00:30:07,160 Ngunit sabihin maging mas tumpak bilang sa kung ano ito ay. 688 00:30:07,160 --> 00:30:10,280 Ano ang uri ng data ni talaga? 689 00:30:10,280 --> 00:30:11,610 Pansamantalang trabaho star. 690 00:30:11,610 --> 00:30:14,560 >> Kaya ito lumiliko out na ngayon ng aming makakaya alisan ng balat i-back ang layer ng null. 691 00:30:14,560 --> 00:30:17,500 Lumiliko out, ay walang bisa - oo, nang walang alinlangan isang espesyal na simbolo. 692 00:30:17,500 --> 00:30:19,190 Ngunit ano ito talaga? 693 00:30:19,190 --> 00:30:25,220 Talagang, walang bisa lamang ang isang simbolo na namin mga kawani na tao gamitin upang kumatawan sa zero pati na rin. 694 00:30:25,220 --> 00:30:29,010 >> Kaya ang mga may-akda ng mga C, at mga computer mas pangkalahatang paraan, nagpasya taon na ang nakalipas 695 00:30:29,010 --> 00:30:30,010 na, alam mo kung ano. 696 00:30:30,010 --> 00:30:34,850 Bakit hindi namin matiyak na walang gumagamit data ay kailanman, kailanman, kailanman 697 00:30:34,850 --> 00:30:36,730 naka-imbak sa hindi importanteng bagay zero? 698 00:30:36,730 --> 00:30:39,610 Sa katunayan, kahit na sa aking mga arbitrary na halimbawa bago, hindi ko simulan ang pagnunumero 699 00:30:39,610 --> 00:30:40,390 bytes sa zero. 700 00:30:40,390 --> 00:30:41,540 Ako nagsimula sa isa. 701 00:30:41,540 --> 00:30:44,950 Dahil alam ko na ang mga tao sa mundo nagpasya upang inilalaan ang zero 702 00:30:44,950 --> 00:30:47,970 byte sa RAM ng sinuman bilang isang bagay na espesyal. 703 00:30:47,970 --> 00:30:52,020 >> Ang dahilan sa pagiging, anumang oras na nais mong magsenyas ng isang bagay na maling naganap 704 00:30:52,020 --> 00:30:55,960 may pagtatangi sa mga address, ibinalik mo null - kung hindi man ay kilala bilang zero - 705 00:30:55,960 --> 00:30:59,410 at dahil alam mo na walang legit data sa address zero, malinaw na 706 00:30:59,410 --> 00:31:00,400 na nangangahulugan ng error. 707 00:31:00,400 --> 00:31:04,080 At iyon ang dahilan kung bakit kami, sa pamamagitan ng convention, suriin para sa null at pagbalik ng isang bagay 708 00:31:04,080 --> 00:31:06,260 tulad ng isa sa mga kasong iyon. 709 00:31:06,260 --> 00:31:09,300 >> Kaya kung mag-scroll down na kami ngayon, ito lamang ang pagkatapos ay ang ilang mga error checking, kung sakali 710 00:31:09,300 --> 00:31:10,610 may nangyaring mali sa [? magpyansa?] 711 00:31:10,610 --> 00:31:13,470 nang sama-sama at mag-quit sa programa sa pamamagitan ng pagbalik maaga. 712 00:31:13,470 --> 00:31:19,030 Linyang ito ngayon ma-rewritten bilang na ito, na nangangahulugan na kung ano? 713 00:31:19,030 --> 00:31:23,155 Sa kaliwang bahagi, bigyan ako ng isa pang pointer sa isang character, at tawagan ito t. 714 00:31:23,155 --> 00:31:26,935 Ano ako pag-iimbak sa loob ng t, batay ito sa isang linya ng code? 715 00:31:26,935 --> 00:31:30,950 716 00:31:30,950 --> 00:31:32,170 >> Ako pag-iimbak ng isang lokasyon. 717 00:31:32,170 --> 00:31:34,742 Sa partikular sa lokasyon na noon ay nasa s. 718 00:31:34,742 --> 00:31:39,000 Kaya kung ang gumagamit ay nag-type sa kumusta, at na una kumusta ang mangyayari sa mga end up 719 00:31:39,000 --> 00:31:42,567 dito, pagkatapos ay ang numero 123 ay pagpunta sa bumalik mula makakuha 720 00:31:42,567 --> 00:31:43,810 string at maiimbak - 721 00:31:43,810 --> 00:31:44,780 bilang namin sinabi nang mas maaga - 722 00:31:44,780 --> 00:31:45,440 sa s. 723 00:31:45,440 --> 00:31:50,560 >> Kailan ako ngayon magpahayag ng isa pang pointer sa isang pansamantalang trabaho at tawagan ito t, ano ang numero 724 00:31:50,560 --> 00:31:53,940 Literal na pagpunta sa hantungan t ayon sa mga kuwento? 725 00:31:53,940 --> 00:31:55,420 Kaya 123. 726 00:31:55,420 --> 00:32:00,310 >> Kaya technically ngayon kapwa at s t ay nagtuturo sa eksaktong 727 00:32:00,310 --> 00:32:02,410 parehong chunks ng memorya. 728 00:32:02,410 --> 00:32:06,140 Kaya't mapapansin kung ano ako ng pagpunta sa gawin ngayon upang patunayan ang programang ito ay maraming surot. 729 00:32:06,140 --> 00:32:08,820 >> Unang pupuntahan ko i-claim, may isang print f, capitalize 730 00:32:08,820 --> 00:32:10,080 ang kopya ng string. 731 00:32:10,080 --> 00:32:11,660 Pagkatapos ay pupuntahan ko na gawin ang isang maliit na error checking. 732 00:32:11,660 --> 00:32:12,160 Pupunta ako upang tiyakin na. 733 00:32:12,160 --> 00:32:16,710 Sabihin tiyakin na ang string t ay sa hindi bababa sa mas mataas sa zero ang haba, 734 00:32:16,710 --> 00:32:19,190 kaya mayroong ilang mga character na doon upang aktwal na sulatin sa malaking titik. 735 00:32:19,190 --> 00:32:22,840 >> At pagkatapos ay maaari mo maalala muli ang mula sa nakaraang mga halimbawa. 736 00:32:22,840 --> 00:32:25,630 2 itaas - na kung saan ay sa ang ctype.h file. 737 00:32:25,630 --> 00:32:30,800 T bracket zero ay nagbibigay sa akin ang zero katangian ng t string. 738 00:32:30,800 --> 00:32:34,360 At 2 ng itaas na parehong halaga, ng Siyempre, convert ito sa uppercase. 739 00:32:34,360 --> 00:32:38,230 >> Kaya intuitively, ito naka-highlight na linya ng code ay capitalize ang unang 740 00:32:38,230 --> 00:32:40,250 sulat sa t. 741 00:32:40,250 --> 00:32:44,485 Ngunit hindi ito capitalize, intuitively, ang unang titik sa s. 742 00:32:44,485 --> 00:32:48,130 Ngunit kung pinag-iisipan mo nang mas maaga, kung ano Ako tungkol sa upang makita kapag nagpatakbo ako ng program na ito 743 00:32:48,130 --> 00:32:54,220 at i-print out ang parehong orihinal, s, at ng tinatawag na kopya, t? 744 00:32:54,220 --> 00:32:55,350 >> Talaga sila ay pagpunta sa maging ang parehong. 745 00:32:55,350 --> 00:32:56,600 At bakit sila ay pagpunta sa maging ang parehong? 746 00:32:56,600 --> 00:32:58,970 747 00:32:58,970 --> 00:33:01,020 Ang mga ito ay kapwa na nagtuturo sa eksakto ang parehong bagay. 748 00:33:01,020 --> 00:33:01,610 Kaya sabihin gawin ito. 749 00:33:01,610 --> 00:33:03,160 >> Gumawa ng kopya zero. 750 00:33:03,160 --> 00:33:04,070 Ito compiles ang OK. 751 00:33:04,070 --> 00:33:06,500 Hayaan akong magpatakbo ng kopya zero. 752 00:33:06,500 --> 00:33:10,110 Hayaan akong mag-type ng isang bagay na tulad ng halo sa lowercase lahat pagkatapos ay pindutin ang Enter. 753 00:33:10,110 --> 00:33:16,520 At itong mga claim na pareho ang orihinal s at ang kopya ay talagang magkapareho. 754 00:33:16,520 --> 00:33:17,920 >> Kaya kung ano ang talagang nangyari dito? 755 00:33:17,920 --> 00:33:20,100 Hayaan akong redraw ang larawang ito lamang upang sabihin ang kuwento sa isang 756 00:33:20,100 --> 00:33:21,340 bahagyang kakaibang paraan. 757 00:33:21,340 --> 00:33:26,060 Kung ano talaga ang nangyayari sa ilalim ng hood kapag idedeklara ko ng isang bagay tulad ng 758 00:33:26,060 --> 00:33:30,410 pansamantalang trabaho simula s, o string s, Ako ay nakakakuha ng isang pointer - 759 00:33:30,410 --> 00:33:33,090 na kung saan ang mangyayari sa maging apat na bytes sa CS50 appliance 760 00:33:33,090 --> 00:33:34,410 at ng maraming mga computer. 761 00:33:34,410 --> 00:33:36,008 At ako pagpunta sa tumawag ito s. 762 00:33:36,008 --> 00:33:39,810 At ito ay kasalukuyang may ilang mga hindi kilalang halaga. 763 00:33:39,810 --> 00:33:43,900 >> Kapag ipinapahayag mo sa isang variable, maliban kung ilagay ang iyong sarili ng isang halaga doon, nag- 764 00:33:43,900 --> 00:33:44,570 nakakaalam kung ano ang doon. 765 00:33:44,570 --> 00:33:48,110 Ito ay maaaring maging ng ilang mga random na pagkakasunod-sunod ng mga piraso mula sa nakaraang execution. 766 00:33:48,110 --> 00:33:52,490 Kaya kapag ako, sa aking mga linya ng code gawin makakuha string, at pagkatapos ay i-imbak ang return 767 00:33:52,490 --> 00:33:54,800 halaga sa mga makakuha ng string sa paanuman - 768 00:33:54,800 --> 00:33:58,520 at bibigyan namin ng kalaunan alisan ng balat pabalik kung paano makakuha string gawa, kahit papaano allocates isang 769 00:33:58,520 --> 00:34:00,480 array na marahil kamukha isang bit tulad nito. 770 00:34:00,480 --> 00:34:05,390 H-E-L-L-O, backslash zero. 771 00:34:05,390 --> 00:34:09,510 >> Sabihin ipagpalagay na ito ay address 123 lang muna hindi pabago-bago. 772 00:34:09,510 --> 00:34:13,000 Kaya makakuha ng returns string, sa naka-highlight na linya doon, ito ay magbabalik ng mga 773 00:34:13,000 --> 00:34:15,000 numero ng sinabi namin, 123. 774 00:34:15,000 --> 00:34:17,420 Kaya kung ano ang talagang napupunta sa loob ng s dito? 775 00:34:17,420 --> 00:34:26,590 >> Well, kung ano ang talagang napupunta sa loob ng s ay 123. 776 00:34:26,590 --> 00:34:29,250 Subalit lantaran, nakakakuha ako ng isang maliit na nalilito sa pamamagitan ng lahat ng mga address na ito, 777 00:34:29,250 --> 00:34:30,320 lahat ng mga arbitrary na numero. 778 00:34:30,320 --> 00:34:32,290 123, 124, 127. 779 00:34:32,290 --> 00:34:34,570 Kaya natin talaga gawing simple mundo sa isang maliit na bit. 780 00:34:34,570 --> 00:34:38,800 >> Kapag makipag-usap namin tungkol sa mga payo, lantaran, upang amin ang mga kawani na tao, na ano ba ang nagmamalasakit kung saan 781 00:34:38,800 --> 00:34:39,870 bagay ang sa memory? 782 00:34:39,870 --> 00:34:41,080 Iyon ay ganap na arbitrary. 783 00:34:41,080 --> 00:34:43,370 Ito ay pagpunta sa ay depende sa kung paano magkano RAM ang user ay may. 784 00:34:43,370 --> 00:34:46,590 Ito ay pagpunta sa depende sa kapag nasa araw pinatakbo mo ang programa, marahil, at 785 00:34:46,590 --> 00:34:48,250 kung ano ang input ng user ang nagbibigay sa iyo. 786 00:34:48,250 --> 00:34:50,060 Humihingi kami ng tirahan sa mga hindi mahalagang mga detalye. 787 00:34:50,060 --> 00:34:54,230 >> Kaya natin abstract layo at sabihin na, kapag nagpatakbo ka ng isang linya ng code na tulad nito, 788 00:34:54,230 --> 00:34:57,320 pansamantalang trabaho star s nakakakuha ng pagbalik halaga ng get string. 789 00:34:57,320 --> 00:35:02,720 Bakit hindi namin sa halip lamang gumuhit ng kung ano ang aming panatilihin ang pagtawag sa isang pointer na parang ito 790 00:35:02,720 --> 00:35:04,140 pagturo sa isang bagay? 791 00:35:04,140 --> 00:35:07,000 Kaya inaangkin ko na ngayon na s up mayroong isang pointer - 792 00:35:07,000 --> 00:35:08,480 sa ilalim ng hood ito ay isang address. 793 00:35:08,480 --> 00:35:11,330 Ngunit lamang ito ay tumuturo sa ang unang byte sa 794 00:35:11,330 --> 00:35:12,780 string na hindi ibinalik. 795 00:35:12,780 --> 00:35:16,710 >> Kung ako ngayon bumalik sa code dito, ano ang nangyayari sa sa linyang ito? 796 00:35:16,710 --> 00:35:20,020 Well, ito sa naka-highlight na linya ngayon, Ako deklarasyon tila isa pang 797 00:35:20,020 --> 00:35:21,070 variable na tinatawag na t. 798 00:35:21,070 --> 00:35:25,700 Ngunit ito ay din ng isang pointer, kaya ako pupunta upang gumuhit ito bilang, sa teorya, ang eksaktong 799 00:35:25,700 --> 00:35:26,710 parehong sukat ng kahon. 800 00:35:26,710 --> 00:35:28,160 At ako pagpunta sa tumawag ito t. 801 00:35:28,160 --> 00:35:33,500 >> At ngayon, kung pumunta kami pabalik sa muli ang code, kapag iimbak ko s loob ng t, 802 00:35:33,500 --> 00:35:36,920 ano Ako technically paglalagay sa loob ng t? 803 00:35:36,920 --> 00:35:39,350 Well technically, ito ay ang bilang 123. 804 00:35:39,350 --> 00:35:42,270 Kaya talaga dapat kong pagsusulat ang numero 123 doon. 805 00:35:42,270 --> 00:35:43,900 Ngunit sabihin dalhin ito mas mataas na antas. 806 00:35:43,900 --> 00:35:48,090 t, kung ito lamang ang pointer, intuitively, ay lamang na. 807 00:35:48,090 --> 00:35:49,800 Iyon lang ang na pagiging naka-imbak sa doon. 808 00:35:49,800 --> 00:35:54,970 >> Kaya ngayon sa huling kagiliw-giliw na mga linya ng code, kapag ako ay talagang pumunta tungkol sa 809 00:35:54,970 --> 00:36:00,680 capitalize ang zero na character sa t, ano ang nangyari? 810 00:36:00,680 --> 00:36:06,310 Well, t bracket zero na ngayon ang pagturo sa kung ano ang karakter, siguro? 811 00:36:06,310 --> 00:36:07,460 >> Ito ay nagtuturo sa h. 812 00:36:07,460 --> 00:36:08,870 Dahil t bracket zero - 813 00:36:08,870 --> 00:36:12,490 pagkuhang muli, ito ay lumang syntax. t bracket zero ay nangangahulugan lamang kung t ay isang string, t 814 00:36:12,490 --> 00:36:15,590 bracket zero ay nangangahulugan na ang pagkuha ng zero character sa na lakas. 815 00:36:15,590 --> 00:36:18,650 Kaya kung ano na talaga ay nangangahulugan ay pumunta sa array na ito - 816 00:36:18,650 --> 00:36:21,520 at oo, maaaring ito ay 123, maaaring ito ay 124. 817 00:36:21,520 --> 00:36:22,790 Ngunit lahat ng ito ay kamag-anak, alalahanin. 818 00:36:22,790 --> 00:36:25,640 Tuwing pinag-uusapan ng isang array, mayroon kaming ang bentahe ng pakikipag-usap tungkol sa 819 00:36:25,640 --> 00:36:27,000 kamag-anak ng mga indeks. 820 00:36:27,000 --> 00:36:31,120 >> At kaya ngayon maaari naming ipagpalagay lamang na zero t bracket ay h. 821 00:36:31,120 --> 00:36:35,090 Kaya kung tumawag ako 2 upper sa ito, ano iyon talaga ginagawa ay capitalize 822 00:36:35,090 --> 00:36:38,290 ang maliit na mga h sa uppercase H. Ngunit siyempre, kung ano ang s? 823 00:36:38,290 --> 00:36:41,010 Ito ay nagtuturo sa parehong darn string. 824 00:36:41,010 --> 00:36:44,200 >> Kaya ito ang lahat na hindi nangyayari sa ang code na ito sa ngayon. 825 00:36:44,200 --> 00:36:45,960 Kaya kung ano ang pagkatapos ay ang implikasyon? 826 00:36:45,960 --> 00:36:48,300 Paano namin ayusin ang mga ito ng dalawang mga problema? 827 00:36:48,300 --> 00:36:50,870 Paano namin upang ihambing ang aktwal na mga string? 828 00:36:50,870 --> 00:36:53,720 >> Well intuitively, paano gagawin pumunta ka tungkol sa paghahambing ng dalawang 829 00:36:53,720 --> 00:36:55,090 mga string para sa tunay na pagkakapantay-pantay? 830 00:36:55,090 --> 00:36:58,920 831 00:36:58,920 --> 00:37:00,750 >> Ano ang ibig sabihin kung dalawang string ay pantay-pantay? 832 00:37:00,750 --> 00:37:04,330 Malinaw na hindi na ang kanilang mga address ay kasing-halaga sa memorya, dahil na ang isang mababang 833 00:37:04,330 --> 00:37:06,590 antas ng pagpapatupad ng detalye. 834 00:37:06,590 --> 00:37:08,360 Ang lahat ng mga character ay pareho. 835 00:37:08,360 --> 00:37:12,810 Kaya ipaalam sa akin imungkahi, at ipaalam sa akin ipakilala sa bersyon ng isa sa compare.c 836 00:37:12,810 --> 00:37:14,970 dito, kaya ihambing-1.c. 837 00:37:14,970 --> 00:37:19,590 >> Hayaan akong magpanukala na kami pa rin makakuha ng isang pointer tinatawag s, at iimbak sa mga ito 838 00:37:19,590 --> 00:37:20,610 bumalik halaga ng get string. 839 00:37:20,610 --> 00:37:21,750 Tayo'y gawin ang parehong bagay sa t. 840 00:37:21,750 --> 00:37:23,230 Kaya wala sa mga code ay naiiba. 841 00:37:23,230 --> 00:37:25,420 Pupunta ako sa magdagdag ng isang maliit na higit pang mga error na ngayon ng pagsusuri. 842 00:37:25,420 --> 00:37:29,390 Kaya ngayon na kami ay isang uri ng pagbabalat pabalik ito layer sa CS50 ng kung ano ang isang string 843 00:37:29,390 --> 00:37:33,520 talaga, kailangan namin upang maging mas anal tungkol sa pagtiyak na hindi namin abusuhin 844 00:37:33,520 --> 00:37:35,330 di-wastong mga halaga tulad null. 845 00:37:35,330 --> 00:37:36,440 >> Kaya lang ako pagpunta upang suriin. 846 00:37:36,440 --> 00:37:41,490 Kung s ay hindi katumbas null at t hindi katumbas null, na nangangahulugan na namin ang OK. 847 00:37:41,490 --> 00:37:44,460 Maging string ay hindi magtaas pagkuha ang alinman sa mga string. 848 00:37:44,460 --> 00:37:51,270 At maaari mong marahil hulaan ngayon, kung ano ay STR CMP siguro gawin? 849 00:37:51,270 --> 00:37:52,000 String ihambing. 850 00:37:52,000 --> 00:37:55,470 >> Kaya't kung ikaw ay programa sa java bago, ito ay tulad ng mga pamamaraan ay katumbas sa 851 00:37:55,470 --> 00:37:56,490 string class. 852 00:37:56,490 --> 00:37:57,890 Ngunit para sa mga ng sa iyo na may hindi -program bago, 853 00:37:57,890 --> 00:37:59,320 ito lamang ang c function. 854 00:37:59,320 --> 00:38:02,180 Ito ay nangyayari na dumating sa isang file na tinatawag na string.h. 855 00:38:02,180 --> 00:38:03,830 Iyon ay kung saan ito ipinahayag. 856 00:38:03,830 --> 00:38:05,110 >> At ihambing ang string - 857 00:38:05,110 --> 00:38:07,530 Ko talaga makalimutan nito paggamit, pero hindi bale na. 858 00:38:07,530 --> 00:38:10,470 Isipin ang maaari naming gawin tao, gumalaw ihambing. 859 00:38:10,470 --> 00:38:12,590 At ito ay pagpunta upang ilabas ang Linux programmer manu-manong. 860 00:38:12,590 --> 00:38:14,060 At, lantaran, medyo misteriyoso. 861 00:38:14,060 --> 00:38:15,270 Ngunit maaari ko bang makita na dito, yep. 862 00:38:15,270 --> 00:38:17,570 Mayroon akong upang isama string.h. 863 00:38:17,570 --> 00:38:20,590 >> At sinasabi nito dito sa ilalim paglalarawan, "ang function na string ihambing Inihahambing 864 00:38:20,590 --> 00:38:24,560 ang dalawang mga string ng S1 at S2. "At S1 at S2 ay tila ang dalawang 865 00:38:24,560 --> 00:38:26,120 argumento nakapasa in 866 00:38:26,120 --> 00:38:28,650 Hindi ko talaga matandaan kung ano const ay, ngunit ngayon mapansin - 867 00:38:28,650 --> 00:38:31,480 at maaaring nakakita ka ito na kapag mo na gamitin ang mga pahina ng tao kung 868 00:38:31,480 --> 00:38:32,390 mayroon ang lahat ng ito - 869 00:38:32,390 --> 00:38:36,220 pansamantalang trabaho na bituin lamang ang magkasingkahulugan may string. 870 00:38:36,220 --> 00:38:40,440 >> Kaya ihahambing nito ang dalawang mga string, at S1 S2, at ito ay nagbabalik ng isang integer mas kaunti 871 00:38:40,440 --> 00:38:44,930 sa o katumbas ng o mas malaki kaysa sa zero kung S1 ay nakita, ayon sa pagkakabanggit, upang maging 872 00:38:44,930 --> 00:38:47,450 mas mababa sa, o tugma, o na mas malaki sa S2. 873 00:38:47,450 --> 00:38:51,220 Iyon lang ang isang napaka-komplikadong paraan ng pagsabi string na ihambing returns 874 00:38:51,220 --> 00:38:55,760 zero kung ang dalawang mga string ay intuitively magkakahawig, character para 875 00:38:55,760 --> 00:38:57,120 karakter para sa character. 876 00:38:57,120 --> 00:38:59,970 >> Ito ay nagbabalik ng mga negatibong numero kung s, ayon sa alpabeto, ay dapat 877 00:38:59,970 --> 00:39:01,010 na dumating bago t. 878 00:39:01,010 --> 00:39:05,300 O kaya ay nagbabalik ng isang positibong numero kung s ay dapat na dumating pagkatapos ng t 879 00:39:05,300 --> 00:39:06,170 ayon sa alpabeto. 880 00:39:06,170 --> 00:39:08,360 Kaya ito na may simpleng mga function, maaari mong, halimbawa, isang uri-uriin 881 00:39:08,360 --> 00:39:09,770 buong bungkos ng mga salita? 882 00:39:09,770 --> 00:39:13,984 >> Kaya sa bagong bersyon, pupuntahan ko upang sige at gumawa ng compare1. 883 00:39:13,984 --> 00:39:15,750 Dot slash ihambing isa. 884 00:39:15,750 --> 00:39:18,030 Kukunin ko i-type sa kumusta sa lahat ng mas mababang kaso. 885 00:39:18,030 --> 00:39:20,300 Pupunta ako mag-type ng halo sa lahat ng maliit na muli. 886 00:39:20,300 --> 00:39:23,340 At ngayon thankfully ito napagtanto I-type ang parehong bagay. 887 00:39:23,340 --> 00:39:27,520 >> Samantala, kung i-type ko sa halo sa mas mababang kaso at HELLO sa itaas na kaso at 888 00:39:27,520 --> 00:39:29,710 paghambingin ang mga ito, ako nag-type iba't ibang bagay. 889 00:39:29,710 --> 00:39:32,530 Dahil hindi lamang ang mga address ibang, ngunit kami ay paghahambing 890 00:39:32,530 --> 00:39:35,350 ibang mga character muli at muli. 891 00:39:35,350 --> 00:39:37,320 >> Well sabihin pumunta at ayusin isa iba pang mga problema ngayon. 892 00:39:37,320 --> 00:39:41,590 Hayaan akong buksan up na bersyon ng isa sa kopya, na sa ngayon ay address 893 00:39:41,590 --> 00:39:42,900 ang isyu na ito bilang mga sumusunod. 894 00:39:42,900 --> 00:39:45,650 At ang isang ito ang nangyayari upang tumingin medyo mas kumplikado. 895 00:39:45,650 --> 00:39:49,320 Pero kung sa tingin mo tungkol sa kung ano ang problema namin kailangan upang malutas, sana ito ay magiging 896 00:39:49,320 --> 00:39:51,870 i-clear sa loob lamang ng ilang sandali ngayon. 897 00:39:51,870 --> 00:39:57,280 >> Kaya ang unang linya, pansamantalang trabaho simula t, sa mga tuntunin karaniwang tao ay maaaring ipanukala ang isang tao 898 00:39:57,280 --> 00:39:59,450 ano ang linya na ito dito ibig sabihin? 899 00:39:59,450 --> 00:40:01,050 Pansamantalang trabaho star t, ano na ang ginagawa? 900 00:40:01,050 --> 00:40:06,660 901 00:40:06,660 --> 00:40:07,210 >> Magandang. 902 00:40:07,210 --> 00:40:09,500 Lumikha ng isang pointer sa ilang lugar sa memorya. 903 00:40:09,500 --> 00:40:10,930 At hayaan mo akong pinuhin ito nang kaunti. 904 00:40:10,930 --> 00:40:17,180 Ipinapahayag sa isang variable na mag-iimbak ang address ng ilang mga pansamantalang trabaho sa memory, lamang 905 00:40:17,180 --> 00:40:18,480 upang maging isang kaunti pa tamang. 906 00:40:18,480 --> 00:40:21,210 >> OK, kaya ngayon sa kanang bahagi kamay, nag ko hindi kailanman nakita ang isa sa mga pag-andar 907 00:40:21,210 --> 00:40:22,660 bago, malloc. 908 00:40:22,660 --> 00:40:26,980 Ngunit kung ano ang maaaring sabihin na? 909 00:40:26,980 --> 00:40:28,050 Paglalaan ng memorya. 910 00:40:28,050 --> 00:40:29,410 Memory laang-gugulin. 911 00:40:29,410 --> 00:40:33,050 >> Kaya ito lumiliko out, pataas hanggang sa ngayon, kami hindi talaga ay nagkaroon ng isang malakas na paraan ng 912 00:40:33,050 --> 00:40:36,210 nagtatanong sa operating system, bigyan ako ng ilang memory. 913 00:40:36,210 --> 00:40:39,980 Sa halip, kami ay mayroon na ngayong ng isang function na tinatawag na malloc na gumagana nang eksakto na. 914 00:40:39,980 --> 00:40:42,960 Kahit na ito ay isang bit ng isang kaguluhan ng isip sa ngayon, mapapansin na sa 915 00:40:42,960 --> 00:40:46,200 sa pagitan ng dalawang panaklong ay lamang ng pagpunta sa maging isang numero. 916 00:40:46,200 --> 00:40:48,510 Saan ko na nai-type na pinag-uusapan mga marka ay maaaring maging isang numero. 917 00:40:48,510 --> 00:40:51,020 >> At bilang na nangangahulugan, bigyan mo ako 10 bytes. 918 00:40:51,020 --> 00:40:52,320 Bigyan mo ako 20 bytes. 919 00:40:52,320 --> 00:40:53,820 Bigyan ako ng 100 bytes. 920 00:40:53,820 --> 00:40:56,500 At malloc ay gawin ang lahat upang tanungin ang operating system - 921 00:40:56,500 --> 00:40:57,630 Linux, sa kasong ito - 922 00:40:57,630 --> 00:40:59,630 hey, ang kanilang 100 bytes ng RAM magagamit? 923 00:40:59,630 --> 00:41:04,320 Kung gayon, bumalik mga bytes sa akin sa pamamagitan ng bumabalik ang address ng kung alin sa 924 00:41:04,320 --> 00:41:06,610 mga bytes, marahil? 925 00:41:06,610 --> 00:41:07,610 Ang pinakaunang isa. 926 00:41:07,610 --> 00:41:10,460 >> Kaya dito masyadong - at ito ay kitang-kita sa C, anumang oras handa ka 927 00:41:10,460 --> 00:41:11,680 pakikitungo na may mga address? 928 00:41:11,680 --> 00:41:15,830 Ikaw ay halos palaging pagharap sa mga unang tulad address, hindi mahalaga kung gaano kalaki 929 00:41:15,830 --> 00:41:19,490 isang tipak ng memory mo ay nagiging ipinasa likod, kaya na magsalita. 930 00:41:19,490 --> 00:41:20,880 >> Kaya natin sumisid in dito. 931 00:41:20,880 --> 00:41:23,940 Ako ay sinusubukan upang magtalaga ng kung paano maraming bytes, eksakto? 932 00:41:23,940 --> 00:41:24,080 Well. 933 00:41:24,080 --> 00:41:26,090 String haba ng s - sabihin gawin ang isang kongkreto halimbawa. 934 00:41:26,090 --> 00:41:30,700 Kung s ay kumusta, H-E-L-L-O, kung ano ang mga string haba ng s, malinaw naman? 935 00:41:30,700 --> 00:41:32,010 Kaya ito ay limang. 936 00:41:32,010 --> 00:41:34,590 Ngunit ako paggawa ng plus 1 sa mga iyon, bakit? 937 00:41:34,590 --> 00:41:37,700 Bakit gusto kong anim bytes sa halip ng limang? 938 00:41:37,700 --> 00:41:38,790 Ang null character. 939 00:41:38,790 --> 00:41:41,210 >> Hindi ko nais na mag-iwan off ito espesyal na character null. 940 00:41:41,210 --> 00:41:45,160 Dahil kapag gumawa ako ng isang kopya ng Kamusta at lamang gawin H-E-L-L-O, ngunit hindi ko ilagay 941 00:41:45,160 --> 00:41:50,160 na espesyal na character, ang computer Hindi maaaring magkaroon ng, sa pamamagitan ng pagkakataon, ang isang backslash 942 00:41:50,160 --> 00:41:51,730 zero ang doon para sa akin. 943 00:41:51,730 --> 00:41:55,570 At kaya kung sinusubukan ko upang malaman ang haba ng mga kopya, maaari ba akong mag-isip na 944 00:41:55,570 --> 00:41:59,360 ito ay 20 character ang haba, o isang milyong character ang haba kung ko lang ay hindi kailanman mangyayari 945 00:41:59,360 --> 00:42:01,050 upang maabot ang isang backslash zero. 946 00:42:01,050 --> 00:42:05,780 >> Kaya kailangan namin ng anim bytes upang mag-imbak H-E-L-L-O, backslash zero. 947 00:42:05,780 --> 00:42:07,870 At pagkatapos ay ito lamang ang upang maging napaka-anal. 948 00:42:07,870 --> 00:42:10,700 Ipagpalagay na nakalimutan ko kung ano ang laki ng isang pansamantalang trabaho ay. 949 00:42:10,700 --> 00:42:12,020 Panatilihin namin sinasabi ito ng isang byte. 950 00:42:12,020 --> 00:42:12,860 At ito ay karaniwang ay. 951 00:42:12,860 --> 00:42:15,425 Sa teorya, maaaring ito ay isang bagay na iba, sa isang iba't ibang mga Mac o isang 952 00:42:15,425 --> 00:42:16,250 ibang PC. 953 00:42:16,250 --> 00:42:19,650 >> Kaya ito lumiliko out mayroong operator na ito tinatawag sizeof na kung pumasa ka ito ang 954 00:42:19,650 --> 00:42:22,680 pangalan ng isang uri ng data - tulad ng pansamantalang trabaho, o int, o Float - 955 00:42:22,680 --> 00:42:26,930 ito ay magsasabi sa iyo, pabago-bago, kung gaano karaming bytes isang pansamantalang trabaho tumatagal ng hanggang sa ito 956 00:42:26,930 --> 00:42:28,090 partikular na computer. 957 00:42:28,090 --> 00:42:31,360 >> Kaya ito ay epektibo lamang tulad ng sinasabi ng 1 beses o 958 00:42:31,360 --> 00:42:32,440 beses wala sa lahat. 959 00:42:32,440 --> 00:42:36,340 Ngunit ako ito ginagawa para lamang maging super anal, na kung sakali isang pansamantalang trabaho ay naiiba 960 00:42:36,340 --> 00:42:40,610 sa iyong computer kumpara sa minahan, sa ganitong paraan matematika ay palaging pagpunta sa check out. 961 00:42:40,610 --> 00:42:43,720 >> Panghuli, pababa dito ako suriin para sa null, na kung saan ay palaging mahusay na kasanayan - muli, 962 00:42:43,720 --> 00:42:44,920 anumang oras kami pagharap sa mga payo. 963 00:42:44,920 --> 00:42:47,520 Kung malloc ay hindi magagawang magbigay ako anim byes - na kung saan ay 964 00:42:47,520 --> 00:42:49,210 malamang na hindi, pero kung sakali - 965 00:42:49,210 --> 00:42:50,730 bumalik isa kaagad. 966 00:42:50,730 --> 00:42:53,290 At ngayon, sige at kopyahin ang string tulad ng sumusunod. 967 00:42:53,290 --> 00:42:57,240 At ito ay pamilyar na syntax, kahit na sa ibang papel. 968 00:42:57,240 --> 00:43:01,210 >> Pupunta ako sa sige at makakuha ng string haba ng s at mag-imbak ito sa n. 969 00:43:01,210 --> 00:43:06,620 Pagkatapos ay pupuntahan ko umulit mula i katumbas zero ang hanggang sa at kabilang n, 970 00:43:06,620 --> 00:43:08,410 mas malaki kaysa sa o patas sa. 971 00:43:08,410 --> 00:43:13,540 Kaya na sa bawat pag-ulit, ko bang ilagay ang ith character ng s sa ith 972 00:43:13,540 --> 00:43:15,380 katangian ng t. 973 00:43:15,380 --> 00:43:18,190 >> Kaya kung ano talaga ang nangyayari sa ilalim ng hood dito? 974 00:43:18,190 --> 00:43:22,140 Well kung ito ay, halimbawa, ay s - 975 00:43:22,140 --> 00:43:26,400 at ko na nag-type sa word H-E-L-L-O at mayroong isang backslash zero. 976 00:43:26,400 --> 00:43:29,020 At muli, ito ay s pagturo dito. 977 00:43:29,020 --> 00:43:30,830 At dito ngayon ay t. 978 00:43:30,830 --> 00:43:34,860 >> At ito ay tumuturo sa ngayon isang kopya ng memorya, tama? 979 00:43:34,860 --> 00:43:37,340 Malloc ay nagbigay sa akin isang buo tipak ng memory. 980 00:43:37,340 --> 00:43:41,440 Hindi ko alam sa una kung ano ang sa anuman sa mga lokasyon na ito. 981 00:43:41,440 --> 00:43:44,340 Kaya Pupunta ako sa tingin ng mga ito bilang mga ang maramihang mga marka ng tanong. 982 00:43:44,340 --> 00:43:50,190 >> Ngunit sa lalong madaling simulan ko looping mula sa zero sa up sa pamamagitan ng haba ng s, t 983 00:43:50,190 --> 00:43:52,790 bracket zero at t bracket 1 - 984 00:43:52,790 --> 00:43:55,080 at makikita ko bang ilagay ito ngayon sa overhead - 985 00:43:55,080 --> 00:44:04,190 t bracket zero at s bracket zero ibig sabihin na pupuntahan ko ay pagkopya 986 00:44:04,190 --> 00:44:09,875 iteratively h in dito, E-L-L-O. Plus, dahil ginawa ko ang plus 987 00:44:09,875 --> 00:44:12,370 1, backslash zero. 988 00:44:12,370 --> 00:44:19,060 >> Kaya ngayon sa kaso ng ihambing-1.c, sa dulo, kung mag-print out ko ang 989 00:44:19,060 --> 00:44:24,760 capitalization ng t, dapat namin makita na s ay hindi nabago. 990 00:44:24,760 --> 00:44:26,090 Hayaan akong sige ngayon at gawin ito. 991 00:44:26,090 --> 00:44:28,630 Kaya gumawa COPY1. 992 00:44:28,630 --> 00:44:30,860 Dot slash COPY1. 993 00:44:30,860 --> 00:44:33,670 Pupunta ako mag-type ng halo, ang Enter. 994 00:44:33,670 --> 00:44:37,430 At ngayon mapansin, tanging ang kopya Na-malaking titik. 995 00:44:37,430 --> 00:44:40,890 Dahil ang tunay na ako magkakaroon ng dalawang chunks ng memorya. 996 00:44:40,890 --> 00:44:44,390 >> Sa kasamaang palad, maaari mong gawin ang ilang mga kaakit-akit masamang at medyo mapanganib bagay dito. 997 00:44:44,390 --> 00:44:49,290 Hayaan akong makuha ang isang halimbawa dito ngayon, na nagbibigay sa amin ng isang halimbawa ng ilang 998 00:44:49,290 --> 00:44:51,540 iba't-ibang linya. 999 00:44:51,540 --> 00:44:56,040 Kaya lamang intuitively dito, ang unang linya ng code, int star x, ang deklarasyon 1000 00:44:56,040 --> 00:44:57,340 isang variable na tinatawag na x. 1001 00:44:57,340 --> 00:44:58,810 At kung ano ang mga uri ng data ng na variable? 1002 00:44:58,810 --> 00:45:01,820 1003 00:45:01,820 --> 00:45:04,290 Ano ang data uri ng variable na? 1004 00:45:04,290 --> 00:45:06,980 Iyon ay hindi ang cliffhanger. 1005 00:45:06,980 --> 00:45:08,350 >> Ang data uri ay int star. 1006 00:45:08,350 --> 00:45:12,600 Kaya ano ang nilalaman na ibig sabihin nito? x kalooban mag-imbak ng address ng isang int. 1007 00:45:12,600 --> 00:45:13,520 Simple bilang na. 1008 00:45:13,520 --> 00:45:16,220 Y ay pagpunta upang mag-imbak ang address ng isang int. 1009 00:45:16,220 --> 00:45:18,390 Ano ang pangatlong linya code ng paggawa doon? 1010 00:45:18,390 --> 00:45:21,850 Ito ay paglaan ng kung gaano karaming bytes, pinaka-malamang? 1011 00:45:21,850 --> 00:45:22,350 Apat. 1012 00:45:22,350 --> 00:45:25,460 Dahil sa laki ng isang int ay sa pangkalahatan ay apat, malloc ng apat na nagbibigay sa 1013 00:45:25,460 --> 00:45:29,950 i-back sa akin ang address ng isang tipak ng memorya, ang unang ng kung saan ang bytes ay 1014 00:45:29,950 --> 00:45:32,110 naka-imbak na ngayon sa x. 1015 00:45:32,110 --> 00:45:34,410 >> Ngayon kami ay gumagalaw ng kaunti mabilis. 1016 00:45:34,410 --> 00:45:35,760 Star x ibig sabihin kung ano? 1017 00:45:35,760 --> 00:45:38,480 1018 00:45:38,480 --> 00:45:42,590 Ito ay nangangahulugan na pumunta sa address na iyon at ilagay kung ano ang numero doon? 1019 00:45:42,590 --> 00:45:43,870 Ilagay ang numero ng 42 doon. 1020 00:45:43,870 --> 00:45:47,590 Star y nangangahulugan pumunta sa kung ano ang sa y at ilagay ang numero ng 13 doon. 1021 00:45:47,590 --> 00:45:48,600 >> Ngunit maghintay ng isang minuto. 1022 00:45:48,600 --> 00:45:51,640 Ano ang y sa sa sandaling ito? 1023 00:45:51,640 --> 00:45:54,950 Ano ang address ng y-iimbak? 1024 00:45:54,950 --> 00:45:55,770 Hindi namin alam, tama? 1025 00:45:55,770 --> 00:45:59,230 Hindi namin na-minsan gamitin ang pagtatalaga operator na kinasasangkutan y. 1026 00:45:59,230 --> 00:46:03,370 Kaya y bilang ipinahayag sa ikalawang linya ng code lamang ang ilang mga basura na halaga, isang malaking 1027 00:46:03,370 --> 00:46:04,760 tandang pananong sa gayon na magsalita. 1028 00:46:04,760 --> 00:46:07,230 Maaaring ito ay tumuturo random sa anumang bagay sa memorya, na 1029 00:46:07,230 --> 00:46:08,340 ay pangkalahatan masama. 1030 00:46:08,340 --> 00:46:13,540 >> Kaya sa lalong madaling namin hit na linya doon, star y katumbas ng 13, isang bagay na masama, 1031 00:46:13,540 --> 00:46:17,220 isang bagay na lubhang masama ay tungkol sa mangyayari sa Binky. 1032 00:46:17,220 --> 00:46:25,810 Kaya sabihin makita kung ano ang nangyayari sa mga end up nangyayari sa Binky dito sa minutong ito 1033 00:46:25,810 --> 00:46:26,200 o kaya tingnan. 1034 00:46:26,200 --> 00:46:26,490 >> [Video playback] 1035 00:46:26,490 --> 00:46:26,745 >> -Uy, Binky. 1036 00:46:26,745 --> 00:46:27,000 Gumising. 1037 00:46:27,000 --> 00:46:29,296 Ito ay oras na para sa pointer masaya. 1038 00:46:29,296 --> 00:46:30,680 >> -Ano iyon? 1039 00:46:30,680 --> 00:46:31,980 Alamin ang tungkol sa mga payo? 1040 00:46:31,980 --> 00:46:34,010 Oh, goodie. 1041 00:46:34,010 --> 00:46:37,220 >> -Well, upang magsimula, hulaan ko kami ay pagpunta sa kailangan ng ilang mga payo. 1042 00:46:37,220 --> 00:46:37,930 >> -OK. 1043 00:46:37,930 --> 00:46:41,650 Ang code na ito allocates dalawang pointer na maaaring tumuro sa integer. 1044 00:46:41,650 --> 00:46:43,760 >> -OK, na rin, ko makita ang dalawang pointer. 1045 00:46:43,760 --> 00:46:45,850 Ngunit hindi sila mukhang pagturo sa anumang bagay. 1046 00:46:45,850 --> 00:46:46,490 >> -Iyan ay karapatan. 1047 00:46:46,490 --> 00:46:48,630 Sa una, mga payo ay hindi tumuro sa anumang bagay. 1048 00:46:48,630 --> 00:46:51,700 Ang mga bagay na ituro ang mga ito sa ay tinatawag na pointees, at pagse-set up ang mga ito ay isang 1049 00:46:51,700 --> 00:46:52,850 hiwalay na hakbang. 1050 00:46:52,850 --> 00:46:53,740 >> -Oh, karapatan, karapatan. 1051 00:46:53,740 --> 00:46:54,500 Alam ko na. 1052 00:46:54,500 --> 00:46:56,270 Ang pointees ay hiwalay. 1053 00:46:56,270 --> 00:46:58,553 Kaya paano mo magtalaga ng isang pointee? 1054 00:46:58,553 --> 00:46:59,480 >> -OK. 1055 00:46:59,480 --> 00:47:03,707 Well, ang code na ito allocates ng isang bagong integer pointee, at ang bahaging ito nagtatakda x 1056 00:47:03,707 --> 00:47:05,520 upang tumuro sa ito. 1057 00:47:05,520 --> 00:47:06,760 >> -Uy, na mukhang mas mahusay. 1058 00:47:06,760 --> 00:47:08,520 Kaya gawin itong gawin ang isang bagay. 1059 00:47:08,520 --> 00:47:09,530 >> -OK. 1060 00:47:09,530 --> 00:47:14,110 Kukunin ko dereference ang pointer x-imbak ang bilang 42 sa pointee nito. 1061 00:47:14,110 --> 00:47:17,660 Para sa mga kahanga-hangang gawa na ito, Kailangan ko ng aking magic wand ng dereferencing. 1062 00:47:17,660 --> 00:47:20,695 >> -Ang iyong magic wand ng dereferencing? 1063 00:47:20,695 --> 00:47:22,632 Uh, mabuti iyan. 1064 00:47:22,632 --> 00:47:24,620 >> -Ito ay kung ano ang code kamukha. 1065 00:47:24,620 --> 00:47:27,526 Kukunin ko na lang i-set up ang numero, at - 1066 00:47:27,526 --> 00:47:28,250 >> -Uy, tumingin. 1067 00:47:28,250 --> 00:47:29,680 Nagkaroon ito napupunta. 1068 00:47:29,680 --> 00:47:34,520 Kaya ang paggawa ng isang dereference sa x sumusunod ang arrow upang ma-access nito pointee. 1069 00:47:34,520 --> 00:47:36,690 Sa kasong ito, upang mag-imbak 42 sa doon. 1070 00:47:36,690 --> 00:47:40,890 Uy, subukang gamitin ito upang mag-imbak ang numero 13 sa pamamagitan ng iba pang mga pointer, y. 1071 00:47:40,890 --> 00:47:42,125 >> -OK. 1072 00:47:42,125 --> 00:47:46,810 Kukunin ko na lang pumunta sa paglipas dito upang y at makuha ang mga numero ng 13-set up. 1073 00:47:46,810 --> 00:47:50,890 At pagkatapos gawin ang wand ng dereferencing at lang - 1074 00:47:50,890 --> 00:47:52,430 aba! 1075 00:47:52,430 --> 00:47:53,030 >> -Oh, hey. 1076 00:47:53,030 --> 00:47:54,610 Iyon ay hindi gumagana. 1077 00:47:54,610 --> 00:47:58,200 Sabihing, Binky, Hindi sa tingin ko ang dereferencing y ay isang magandang ideya, 1078 00:47:58,200 --> 00:48:01,370 dahil sa pagse-set up ang pointee ay isang hiwalay na hakbang. 1079 00:48:01,370 --> 00:48:03,460 At palagay ko ay hindi kailanman namin ginawa ito. 1080 00:48:03,460 --> 00:48:03,810 >> -Hmm. 1081 00:48:03,810 --> 00:48:05,160 Magandang punto. 1082 00:48:05,160 --> 00:48:07,410 >> -Oo, inilalaan namin ang pointer y. 1083 00:48:07,410 --> 00:48:10,045 Ngunit kami ay hindi kailanman itakda ito upang tumuro sa isang pointee. 1084 00:48:10,045 --> 00:48:10,490 >> -Hmm. 1085 00:48:10,490 --> 00:48:12,170 Tunay na mapagmasid. 1086 00:48:12,170 --> 00:48:13,790 >> -Uy, ang hinahanap mo magandang doon, Binky. 1087 00:48:13,790 --> 00:48:16,920 Puwede ninyo bang ayusin ito upang ang y punto sa parehong pointee bilang x? 1088 00:48:16,920 --> 00:48:17,810 >> -Oo naman. 1089 00:48:17,810 --> 00:48:20,300 Makikita ko bang gamitin ang aking magic wand ng pointer pagtatalaga. 1090 00:48:20,300 --> 00:48:22,240 >> -Ay na pagpunta sa maging isang problema tulad ng bago? 1091 00:48:22,240 --> 00:48:22,665 >> -Hindi. 1092 00:48:22,665 --> 00:48:24,300 Hindi ito pindutin ang pointees. 1093 00:48:24,300 --> 00:48:27,880 Ito lamang nagbabago isa pointer upang ituro upang ang parehong bagay bilang isa pa. 1094 00:48:27,880 --> 00:48:28,970 >> -Oh, nakikita ko. 1095 00:48:28,970 --> 00:48:31,730 Ngayon y punto na tumuturo sa parehong lugar bilang x. 1096 00:48:31,730 --> 00:48:32,450 Kaya maghintay. 1097 00:48:32,450 --> 00:48:33,490 Ngayon y ay naayos na. 1098 00:48:33,490 --> 00:48:34,630 Mayroon itong pointee. 1099 00:48:34,630 --> 00:48:36,520 Kaya maaari mong subukan ang wand ng dereferencing muli 1100 00:48:36,520 --> 00:48:39,200 upang magpadala ng higit sa 13. 1101 00:48:39,200 --> 00:48:39,840 >> -OK. 1102 00:48:39,840 --> 00:48:41,570 Narito napupunta. 1103 00:48:41,570 --> 00:48:42,870 >> -Uy, tumingin sa na. 1104 00:48:42,870 --> 00:48:44,320 Ngayon dereferencing gawa sa y. 1105 00:48:44,320 --> 00:48:47,020 At dahil ang pointer ay namamahagi na ang isa pointee, sila 1106 00:48:47,020 --> 00:48:48,585 parehong makita ang 13. 1107 00:48:48,585 --> 00:48:49,040 >> -Oo. 1108 00:48:49,040 --> 00:48:49,670 Pagbabahagi. 1109 00:48:49,670 --> 00:48:50,380 Anuman. 1110 00:48:50,380 --> 00:48:52,290 Kaya kami makapupunta lugar lumipat ngayon? 1111 00:48:52,290 --> 00:48:52,970 >> -Oh, tumingin. 1112 00:48:52,970 --> 00:48:54,150 Humihingi kami ng out ng oras. 1113 00:48:54,150 --> 00:48:55,200 >> -Ngunit - 1114 00:48:55,200 --> 00:48:57,060 >> -Tandaan lamang ang tatlong pointer panuntunan. 1115 00:48:57,060 --> 00:49:00,100 Numero ng isa, ang pangunahing istraktura ay na mayroon kang isang pointer. 1116 00:49:00,100 --> 00:49:02,170 At sa ibabaw ng mga punto sa isang pointee. 1117 00:49:02,170 --> 00:49:04,160 Ngunit ang pointer at pointee ay hiwalay. 1118 00:49:04,160 --> 00:49:06,460 At ang mga karaniwang mga error ay upang set up ng isang pointer, ngunit sa 1119 00:49:06,460 --> 00:49:08,540 kalimutan na ibinigay pointee isang. 1120 00:49:08,540 --> 00:49:12,460 >> Numero ng dalawang, pointer dereferencing nagsisimula sa pointer at sinusunod nito 1121 00:49:12,460 --> 00:49:14,570 arrow sa ibabaw upang ma-access nito pointee. 1122 00:49:14,570 --> 00:49:18,640 Bilang namin ang lahat ng alam, ito ay gagana lamang kung may ay isang pointee, na kung saan ay makakakuha ng pabalik sa 1123 00:49:18,640 --> 00:49:19,790 mamuno bilang isa. 1124 00:49:19,790 --> 00:49:23,670 >> Numero ng tatlong, pointer pagtatalaga tumatagal isa pointer at mga pagbabago ito upang tumuro sa 1125 00:49:23,670 --> 00:49:25,850 ang parehong pointee bilang isa pang pointer. 1126 00:49:25,850 --> 00:49:27,840 Kaya matapos ang pagtatalaga, ang dalawang pointer kalooban 1127 00:49:27,840 --> 00:49:29,430 tumuturo sa parehong pointee. 1128 00:49:29,430 --> 00:49:31,600 Minsan na tinatawag na pagbabahagi. 1129 00:49:31,600 --> 00:49:33,430 At iyon ang lahat doon ay upang ito, talagang. 1130 00:49:33,430 --> 00:49:33,840 Hindi importanteng bagay hindi importanteng bagay ngayon. 1131 00:49:33,840 --> 00:49:34,300 >> [END-playback ng video] 1132 00:49:34,300 --> 00:49:36,940 >> David MALAN: Kaya higit pa sa mga payo, higit pa sa Binky susunod na linggo. 1133 00:49:36,940 --> 00:49:38,190 Gagamitin namin ang nakikita mo sa Lunes. 1134 00:49:38,190 --> 00:49:42,187