1 00:00:00,000 --> 00:00:01,110 >> [MUZIKO Ludante] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 DAVID J. Malan: Bone. 4 00:00:11,650 --> 00:00:15,610 Jen CS50, kaj ĉi Estas la fino de Semajno Kvar. 5 00:00:15,610 --> 00:00:19,420 Kaj unu el la temoj hodiaŭ estas tiu de cifereca jura, 6 00:00:19,420 --> 00:00:20,989 La arto de rekuperi informon. 7 00:00:20,989 --> 00:00:22,780 Kaj efektive, kvankam vi estas en la mezo 8 00:00:22,780 --> 00:00:25,070 nun de Paco ĉe Tri kaj Breakout, la proksima semajno, 9 00:00:25,070 --> 00:00:27,880 la fokuso estos sur ĝuste tiu domajno. 10 00:00:27,880 --> 00:00:30,686 >> Do unu el la malvarmaj laborpostenoj mi iam havis estis reen en postdiploma lernejo, 11 00:00:30,686 --> 00:00:33,560 kiam mi laboris por la loka Middlesex County District Attorney La 12 00:00:33,560 --> 00:00:34,950 oficejo, farante jura labori. 13 00:00:34,950 --> 00:00:37,450 Do esence la Masaĉuseco Ŝtata Polico, foje, 14 00:00:37,450 --> 00:00:40,100 kiam laborante en kazoj farus konduku aĵojn kiel malmolaj diskoj 15 00:00:40,100 --> 00:00:42,185 kaj disketojn kaj kartoj de memoro kaj similaj. 16 00:00:42,185 --> 00:00:44,060 Kaj ili transdonos ilin mi kaj mia mentoro, 17 00:00:44,060 --> 00:00:48,070 kaj nia celo estis trovi provojn, se estis iu, pri tiuj komunikiloj. 18 00:00:48,070 --> 00:00:50,700 Nun, eble vi vidis ekvidojn de tiu mondo de jura 19 00:00:50,700 --> 00:00:53,000 en la amaskomunikiloj, televido kaj kino. 20 00:00:53,000 --> 00:00:55,730 Sed la tasko mi havis, kaj daresay tiu mondo, 21 00:00:55,730 --> 00:00:57,550 ne estas tute kiel vi vidus ĝin. 22 00:00:57,550 --> 00:01:00,794 Ni rigardu kion vi probable vidis. 23 00:01:00,794 --> 00:01:01,460 [VIDEO Playback] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 Nun, ni akiras bonan rigardon ĉe vi. 26 00:01:05,380 --> 00:01:06,850 >> [MUZIKO Ludante] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> -Hold Ĝin. 29 00:01:12,932 --> 00:01:13,657 Kuri ke dorso. 30 00:01:13,657 --> 00:01:14,733 >> -Wait Minuton. 31 00:01:14,733 --> 00:01:15,233 Iri dekstren. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -There. 34 00:01:16,870 --> 00:01:17,369 Frostigi tion. 35 00:01:17,369 --> 00:01:17,930 -Full Ekrano. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 Frostigi tion. 38 00:01:18,875 --> 00:01:20,160 -Tighten Sur tio, ĉu vi? 39 00:01:20,160 --> 00:01:22,126 >> -Vector En sur tiu ulo de la malantaŭa rado. 40 00:01:22,126 --> 00:01:24,435 >> -Zoom En ĝuste ĉi tie sur ĉi tiu loko. 41 00:01:24,435 --> 00:01:28,580 >> -kun Rajtas teamo, la bildo povas esti pligrandigita kaj akraj. 42 00:01:28,580 --> 00:01:29,330 >> -Kio Estas tio? 43 00:01:29,330 --> 00:01:30,780 >> -ĝi An plifirmigo programo. 44 00:01:30,780 --> 00:01:32,170 >> -Can Vi certe ke ĝis neniu? 45 00:01:32,170 --> 00:01:33,070 >> -Mi Ne scias. 46 00:01:33,070 --> 00:01:34,150 Ni plibonigi ĝin. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance Sekcio A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 Mi plibonigis la detalon, kaj- 50 00:01:38,562 --> 00:01:40,020 -Mi Pensas ke estas sufiĉe por plibonigi. 51 00:01:40,020 --> 00:01:40,976 Ĵeti ĝin al mia ekrano. 52 00:01:40,976 --> 00:01:42,559 >> -Mi Plibonigita reflekto en ŝia okulo. 53 00:01:42,559 --> 00:01:44,322 -Let Run ĉi per video plibonigo. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, Vi povas plibonigi ĉi? 55 00:01:45,210 --> 00:01:45,710 >> -Hang Plu. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -Mi Estis laborante en ĉi tiu interkonsiliĝo. 58 00:01:49,458 --> 00:01:50,402 >> -There De ies reflekto. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 -There Estas spegulbildo de la homa vizaĝo. 61 00:01:52,870 --> 00:01:53,694 >> -la Reflekto! 62 00:01:53,694 --> 00:01:54,610 -There Estas reflekto. 63 00:01:54,610 --> 00:01:55,880 -Zoom En la spegulo. 64 00:01:55,880 --> 00:01:57,860 Vi povas vidi reflekto. 65 00:01:57,860 --> 00:01:59,630 >> -Can Vi plibonigi la bildon de ĉi tie? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 -Can Vi plibonigi ĝin? 68 00:02:01,210 --> 00:02:02,190 -Can Vi plibonigi ĝin? 69 00:02:02,190 --> 00:02:03,066 -Can Ni plibonigi ĉi? 70 00:02:03,066 --> 00:02:03,898 -Can Vi plibonigi ĝin? 71 00:02:03,898 --> 00:02:04,740 -Hold Je sekundo. 72 00:02:04,740 --> 00:02:05,281 Mi plibonigos. 73 00:02:05,281 --> 00:02:06,470 -Zoom En la pordo. 74 00:02:06,470 --> 00:02:06,970 -Times 10. 75 00:02:06,970 --> 00:02:08,009 -Zoom. 76 00:02:08,009 --> 00:02:08,509 -Move En. 77 00:02:08,509 --> 00:02:09,340 -More. 78 00:02:09,340 --> 00:02:10,094 -Wait, Halti. 79 00:02:10,094 --> 00:02:10,750 -Stop. 80 00:02:10,750 --> 00:02:11,250 -Pause Ĝin. 81 00:02:11,250 --> 00:02:13,542 -Rotate Ni 75 gradoj ĉirkaŭ la vertikala, bonvolu. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> -Stop. 84 00:02:16,127 --> 00:02:19,330 Reiru al la parto pri la pordon denove. 85 00:02:19,330 --> 00:02:21,420 >> -Got Bildon Enhancer kiu povas bitmap? 86 00:02:21,420 --> 00:02:24,420 >> -Maybe Ni povas uzi la Pradeep Singh metodo vidi en la fenestrojn. 87 00:02:24,420 --> 00:02:25,902 >> -la Programaro estas stato de la arto. 88 00:02:25,902 --> 00:02:26,866 >> -la Ajgeno estas malŝaltita. 89 00:02:26,866 --> 00:02:29,758 >> -kun Dekstre kombino de algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> -li La prenita lumigado algoritmoj por la sekva nivelo, 91 00:02:32,168 --> 00:02:34,110 kaj mi povas uzi ilin plibonigi tiun foton. 92 00:02:34,110 --> 00:02:36,840 >> -Lock Sur kaj disvastigu la z-akso. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 Plibonigi. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 -Freeze Kaj plibonigi. 97 00:02:40,070 --> 00:02:43,420 [FINO VIDEO Playback] 98 00:02:43,420 --> 00:02:45,830 DAVID J. Malan: Do tiuj estas ĉiuj vortoj, sed ili ne estis 99 00:02:45,830 --> 00:02:47,870 uzata en frazoj korekte. 100 00:02:47,870 --> 00:02:52,370 Kaj efektive en la estonteco, ajna momento, bonvolu, vi aŭdas iun diri la vorton, 101 00:02:52,370 --> 00:02:54,250 "Plibonigi" kluketo malmulta. 102 00:02:54,250 --> 00:02:57,190 Ĉar kiam vi provas plibonigi, Ekzemple, tiu estas kio okazas. 103 00:02:57,190 --> 00:02:58,580 >> Do jen belega foto. 104 00:02:58,580 --> 00:02:59,720 Jen CS50 propra Daven. 105 00:02:59,720 --> 00:03:03,740 Kaj supozu ke ni volas enfokusigi en la sekundo en la okulon, 106 00:03:03,740 --> 00:03:05,870 aŭ la reflekto de la malbona ulo, kiu estis klare 107 00:03:05,870 --> 00:03:07,820 kaptita de la ĉambro de sekureco. 108 00:03:07,820 --> 00:03:10,330 Jen kio okazas kiam vi zomi sur bildo kiu 109 00:03:10,330 --> 00:03:14,060 havas nur finia nombro de bitoj asociita kun ĝi. 110 00:03:14,060 --> 00:03:15,420 >> Tio estas kion vi ricevas. 111 00:03:15,420 --> 00:03:19,190 Kaj efektive, en Daven okulo estas nur kvar, eble ses rastrumeroj 112 00:03:19,190 --> 00:03:22,110 kiuj formas precize kion Estis glimante tie. 113 00:03:22,110 --> 00:03:25,890 Do Problemo Ara Kvar finfine havas Esplorante tiun mondon, aparte 114 00:03:25,890 --> 00:03:28,090 nature ion ni nomas dosiero i / o, kie 115 00:03:28,090 --> 00:03:31,000 i / o estas nur ornama metodo dirante enigo kaj eligo. 116 00:03:31,000 --> 00:03:34,280 >> Do ĝis nun, ĉiuj el la interagoj ni havis kun komputilo 117 00:03:34,280 --> 00:03:36,770 estis plejparte kun via klavaro kaj ekrano, 118 00:03:36,770 --> 00:03:40,770 sed ne tiel kun la malmola disko, aŭ ŝparado de dosieroj preter tiujn vi 119 00:03:40,770 --> 00:03:41,620 vi skribas. 120 00:03:41,620 --> 00:03:44,570 Viaj programoj tiel malproksime havas ne krei kaj savi, 121 00:03:44,570 --> 00:03:46,270 kaj ĝisdatigi siajn proprajn dosierojn. 122 00:03:46,270 --> 00:03:47,150 >> Nu, kio estas dosiero? 123 00:03:47,150 --> 00:03:48,105 Nu, iu kiel JPEG. 124 00:03:48,105 --> 00:03:50,520 Tiu estas bildo vi povus havi aŭ alŝuti al Facebook, 125 00:03:50,520 --> 00:03:51,690 aŭ vidi ie en la reto. 126 00:03:51,690 --> 00:03:54,460 Ja, tiu foto oni nur segilo de Daven estis JPEG. 127 00:03:54,460 --> 00:03:57,570 Kaj kio estas interesa pri dosierojn kiel JPEG-oj 128 00:03:57,570 --> 00:04:02,170 estas ke ili povas esti identigita, tipe, por iuj ŝablonoj de bitoj. 129 00:04:02,170 --> 00:04:05,200 >> Alivorte, kio okazis, ke distingas JPEG de GIF 130 00:04:05,200 --> 00:04:08,109 el PING el Vorto dokumento el Excel dosiero? 131 00:04:08,109 --> 00:04:09,900 Nu, estas nur malsama mastroj de bitoj. 132 00:04:09,900 --> 00:04:12,820 Kaj tiuj diversaj ŝablonoj estas kutime ĉe la komenco de tiuj dosieroj. 133 00:04:12,820 --> 00:04:18,200 >> Tiel ke kiam via komputilo malfermas Vorto doc aŭ kiam komputilo malfermas JPEG, 134 00:04:18,200 --> 00:04:20,940 ĝi aspektas tipe ĉe la unuaj pluraj bitoj en la dosiero. 135 00:04:20,940 --> 00:04:24,059 Kaj se ĝi rekonas mastro, ĝi diras, ho, tiu estas bildo. 136 00:04:24,059 --> 00:04:25,850 Lasu min montri ĝin la uzanto kiel grafika. 137 00:04:25,850 --> 00:04:27,870 Aŭ, ho, tio aspektas kiel Word doc. 138 00:04:27,870 --> 00:04:30,480 Lasu min montri al la uzanto kiel eseon. 139 00:04:30,480 --> 00:04:33,020 >> Do ekzemple, JPEG-oj, rezultas, estas 140 00:04:33,020 --> 00:04:35,460 sufiĉe kompleksa sub la kapuĉo. 141 00:04:35,460 --> 00:04:40,140 Sed la unuaj tri bajtoj en plej ĉiun JPEG starti kun tiuj tri nombroj. 142 00:04:40,140 --> 00:04:44,680 Do bajto nulo, unu kaj du estas, plej ĉiu JPEG, 255, tiam la nombro 143 00:04:44,680 --> 00:04:46,675 216, tiam la nombro 255. 144 00:04:46,675 --> 00:04:48,990 >> Kaj kion vi povos komenci fari proksiman semajnon 145 00:04:48,990 --> 00:04:52,920 Efektive ŝovas sube la kapuĉo de dosieroj kiel JPEG-oj 146 00:04:52,920 --> 00:04:57,210 kaj kiel bitmap dosierojn, kaj vidante kio ĉiam estis tie por tiel longe 147 00:04:57,210 --> 00:04:58,650 kiel vi estis uzante komputilon. 148 00:04:58,650 --> 00:05:01,860 >> Sed kio estas tie ne estas tipe skribita kiel dekuma nombro ŝatas ĉi. 149 00:05:01,860 --> 00:05:04,620 Komputila sciencistoj ne inklinas paroli en dekuma. 150 00:05:04,620 --> 00:05:06,139 Ili ne vere parolas en duuma. 151 00:05:06,139 --> 00:05:07,930 Tipe, kiam ni volas esprimi nombrojn, 152 00:05:07,930 --> 00:05:10,710 ni vere uzas deksesuman, kiun eble vi memoras 153 00:05:10,710 --> 00:05:13,027 de, ni diru, Problemo Ara Unu, kiu defiis 154 00:05:13,027 --> 00:05:14,610 vi pensi malsama sistemo. 155 00:05:14,610 --> 00:05:17,170 >> Ni, kompreneble, estas familiara kun decimala, nula tra naŭ. 156 00:05:17,170 --> 00:05:18,215 Ni parolis pri duumaj. 157 00:05:18,215 --> 00:05:20,710 Kaj ni ne vere havas uzi ke multe ĉi tie 158 00:05:20,710 --> 00:05:22,470 sur ekstere, ĉar komputiloj uzos tion. 159 00:05:22,470 --> 00:05:24,900 Sed programistoj tre Ofte, sed ne ĉiam, 160 00:05:24,900 --> 00:05:29,360 uzi deksesuman, kiu signifas nur vi havos 16 literojn en via alfabeto 161 00:05:29,360 --> 00:05:31,330 kontraste al du aŭ 10. 162 00:05:31,330 --> 00:05:34,530 >> Do kiel vi bontrovas altaj ol naŭ en deksesuma? 163 00:05:34,530 --> 00:05:41,120 Vi iru 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, nur konvencio. 164 00:05:41,120 --> 00:05:43,540 Sed kio estas ŝlosilo estas ke ĉiu tiuj estas sola simbolo. 165 00:05:43,540 --> 00:05:44,340 Ne estas 10. 166 00:05:44,340 --> 00:05:48,400 Ne estas 11, per, ĉar ĉiu viaj ciferoj, ĝuste kiel en dekuma 167 00:05:48,400 --> 00:05:51,940 kaj ĝuste kiel en duuma, devus simple esti sola karaktero, per konvencio. 168 00:05:51,940 --> 00:05:55,280 >> Tial do estas la alfabeto ni havas je nia dispono por deksesuma. 169 00:05:55,280 --> 00:05:58,600 Do kion signifas al JPEG simila se vi estis verki tiujn unuajn tri 170 00:05:58,600 --> 00:06:01,980 bajtoj ne kiel dekuma sed, Ekzemple, kiel deksesuma? 171 00:06:01,980 --> 00:06:03,640 Kaj kial estas hex cxiuj tiom utila? 172 00:06:03,640 --> 00:06:05,290 >> Nu, rapidan rigardon al ekzemplo. 173 00:06:05,290 --> 00:06:09,030 Do se mi skribas la bitoj kiuj reprezentos tiuj decimalaj numbers-- 174 00:06:09,030 --> 00:06:12,450 tio povus esti iom rusta nun de kelkaj semajnoj reen, 175 00:06:12,450 --> 00:06:14,820 sed la maldekstra kaj la dekstra estas sufiĉe facila. 176 00:06:14,820 --> 00:06:17,990 255 estis la plej granda nombro ni povus reprezenti per ok bitoj. 177 00:06:17,990 --> 00:06:18,820 Ĉio estis karaj. 178 00:06:18,820 --> 00:06:21,320 Do la sola kiu estas milde Interesa estas la meza. 179 00:06:21,320 --> 00:06:24,700 Kaj se vi speco de fari la math, vi deduktas ke, efektive, 180 00:06:24,700 --> 00:06:27,949 ke mastro de unu kaj nuloj reprezentas 216. 181 00:06:27,949 --> 00:06:30,240 Do ni nur kondiĉas por nun ke ili estas ĝustaj. 182 00:06:30,240 --> 00:06:31,730 Sed kial estas tiu interesa? 183 00:06:31,730 --> 00:06:33,970 >> Nu, bajto, kompreneble, estas ok bitoj. 184 00:06:33,970 --> 00:06:38,980 Kaj ĝi rezultas ke se vi opinias de bajto kiel du pecoj de kvar bitoj, 185 00:06:38,980 --> 00:06:39,500 kiel tiu. 186 00:06:39,500 --> 00:06:41,000 Lasu min nur aldoni iun spacon. 187 00:06:41,000 --> 00:06:42,550 Do antaŭ, post. 188 00:06:42,550 --> 00:06:46,520 Mi ĵus aldonis kelkajn blanka spaco por videbligo la bono tie. 189 00:06:46,520 --> 00:06:51,840 Kiom eble ni nun reprezentas en, diru, deksesuma ĉiu quad de bitoj, 190 00:06:51,840 --> 00:06:52,880 ĉiu aro de kvar bitoj? 191 00:06:52,880 --> 00:06:56,420 >> Do ekzemple, en la maldekstra Nun ni havas 1111 en duuma. 192 00:06:56,420 --> 00:07:00,420 Kio estas tiu nombro en dekuma, se vi faros la math? 193 00:07:00,420 --> 00:07:03,780 Vi havas la lokon de unuoj, la duope loko, la kvarpiede loko kaj la eights loko. 194 00:07:03,780 --> 00:07:04,341 >> Publiko: 15. 195 00:07:04,341 --> 00:07:05,340 DAVID J. Malan: Estas 15. 196 00:07:05,340 --> 00:07:08,340 Do se ni faras ok plus kvar plus du plus unu, ni ricevas 15. 197 00:07:08,340 --> 00:07:11,790 Do mi povus noti 15 sube 1111, sed la tuta punkto tien 198 00:07:11,790 --> 00:07:13,190 estas deksesuma, ne decimala. 199 00:07:13,190 --> 00:07:17,310 Do anstataŭ notante 15, 1-5, Mi tuj skribos, ke en deksesumajn, 200 00:07:17,310 --> 00:07:22,311 kio se vi pensas reen, se vi havas nulo per f, kio estas 15 tuj estos? 201 00:07:22,311 --> 00:07:22,810 Publiko: f. 202 00:07:22,810 --> 00:07:24,434 DAVID J. Malan: Do rezultas ke la f. 203 00:07:24,434 --> 00:07:29,140 Kaj vi povas labori ke el dirante, bone, se estas 10, tiam OK, f estas 15. 204 00:07:29,140 --> 00:07:33,250 Do ja, ni povus reverki tiu sama aro de nombroj kiel f f. 205 00:07:33,250 --> 00:07:35,750 Kaj tiam se ni faras iom de math, ni deduktas ke tio d. 206 00:07:35,750 --> 00:07:38,650 Ok estas sufiĉe facila, ĉar ni havas unu en la eights loko. 207 00:07:38,650 --> 00:07:40,620 Kaj tiam ni havas paron pli f f-aj jaroj. 208 00:07:40,620 --> 00:07:44,669 >> Do kion homoj inklinas fari per konvencio kiam uzi deksesuman estas simple 209 00:07:44,669 --> 00:07:47,710 skribi ĉi iom pli koncize, forigi plimulton de tiu blanka spaco. 210 00:07:47,710 --> 00:07:50,890 Kaj simple esti súper klara al legantoj, ke tiu estas deksesuma, 211 00:07:50,890 --> 00:07:54,670 la simpla konvencio inter homoj estas vi skribas nulo 212 00:07:54,670 --> 00:07:58,000 x, kiu havas neniun signifon aliaj ol vida ensalutilo de, 213 00:07:58,000 --> 00:07:59,590 tien venas hex nombro. 214 00:07:59,590 --> 00:08:04,210 >> Kaj tiam, vi metis la du ciferojn, f f en ĉi tiu kazo, tiam d a, tiam f f. 215 00:08:04,210 --> 00:08:06,700 Do longan rakonton, deksesuma simple inklinas 216 00:08:06,700 --> 00:08:11,990 esti utila ĉar ĉiu de liaj ciferoj, nula tra f, perfekte linioj 217 00:08:11,990 --> 00:08:13,880 kun ŝablono de kvar bitoj. 218 00:08:13,880 --> 00:08:18,080 >> Do se vi havas du deksesumaj ciferoj, nulo tra F, denove kaj denove, 219 00:08:18,080 --> 00:08:20,256 kiu donas al vi perfekte ok bitoj aŭ unu bajto. 220 00:08:20,256 --> 00:08:22,380 Tial do inklinas esti konvencie utila. 221 00:08:22,380 --> 00:08:24,990 Mankas intelektulo enhavo vere preter tio, 222 00:08:24,990 --> 00:08:27,010 alia ol lia reala utileco. 223 00:08:27,010 --> 00:08:29,310 >> Nun JPEG-oj ne estas la sola dosiero formatoj por grafikaĵoj. 224 00:08:29,310 --> 00:08:33,230 Vi eble memoras ke ekzistas dosierojn kiel tiu en la mondo, 225 00:08:33,230 --> 00:08:34,830 almenaŭ de kelkaj jaroj reen. 226 00:08:34,830 --> 00:08:37,580 >> Do tio estis fakte instalita en Windows XP 227 00:08:37,580 --> 00:08:39,960 sur milionojn da komputiloj ĉirkaŭ la mondo. 228 00:08:39,960 --> 00:08:43,000 Kaj tio estis bitmap dosieron, BMP. 229 00:08:43,000 --> 00:08:47,690 Kaj bitmap dosiero, kiel vi vidos apud semajno, nur signifas mastron de dots, 230 00:08:47,690 --> 00:08:51,710 rastrumeroj kiam ili estas vokitaj, mapo sur bitoj, vere. 231 00:08:51,710 --> 00:08:55,160 >> Do kio estas interesa, kvankam, pri tiu dosiero formato, BMP, estas 232 00:08:55,160 --> 00:08:58,590 ke sub la kapuĉo, ĝi havas pli ol tri bitokoj 233 00:08:58,590 --> 00:09:01,020 kiuj formas lian kaplinion, do paroli, la unuaj malmultaj pikoj. 234 00:09:01,020 --> 00:09:03,330 Ĝi vere aspektas iom komplikita unuavide. 235 00:09:03,330 --> 00:09:04,704 Kaj vi vidos tion en la P aro. 236 00:09:04,704 --> 00:09:06,810 Kaj ekhavi ion aparta el tiu nun 237 00:09:06,810 --> 00:09:10,720 ne estas tiel grava, kiel ĝuste la fakto ke komence de ĉiu bitmap 238 00:09:10,720 --> 00:09:13,823 dosiero, grafika formato, tie estas tuta aro de nombroj. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> Nun Microsoft, La aŭtoro de ĉi tiu formato, 241 00:09:16,720 --> 00:09:18,820 inklinas nomi tiujn aferoj ne ints kaj signoj 242 00:09:18,820 --> 00:09:22,259 kaj flosas sed vortoj kaj d vortoj kaj sopiras kaj bajtoj. 243 00:09:22,259 --> 00:09:23,800 Do ili estas simple malsamaj datumtipoj. 244 00:09:23,800 --> 00:09:25,170 Ili estas malsamaj nomoj por la sama afero. 245 00:09:25,170 --> 00:09:26,740 Sed vi vidos ke en P Ara Kvar. 246 00:09:26,740 --> 00:09:31,450 >> Sed tio estas nur por diri, ke se homo duoble klakas iun .BMP dosieron sur sia 247 00:09:31,450 --> 00:09:35,015 aŭ ŝi malmola disko, kaj fenestro malfermiĝas supren montranta lin aŭ ŝin tiu bildo, 248 00:09:35,015 --> 00:09:38,500 ke tio okazis ĉar la mastruma sistemo supozeble rimarkis ne nur 249 00:09:38,500 --> 00:09:41,460 la .BMP dosiersufikso en la dosiernomo, 250 00:09:41,460 --> 00:09:45,010 sed ankaŭ la fakto, ke ekzistas iuj konvencio al la ŝablono de bitoj 251 00:09:45,010 --> 00:09:47,490 en la komenco de tiu bitmap dosieron. 252 00:09:47,490 --> 00:09:50,270 >> Sed ni nun enfokusigi tiom komplika dosieron, 253 00:09:50,270 --> 00:09:52,120 sed anstataŭe sur iu kiel ĉi tio. 254 00:09:52,120 --> 00:09:55,190 Supozi tie en gedit, mi nur havi la komencoj 255 00:09:55,190 --> 00:09:57,070 de programo kiu estas sufiĉe simpla. 256 00:09:57,070 --> 00:09:58,860 Mi havas kelkajn inkludas ĝis supro. 257 00:09:58,860 --> 00:10:02,120 Nun mi havas #include "structs.h" sed Mi revenos al tio en momento. 258 00:10:02,120 --> 00:10:03,974 Sed tio estas utila por nun. 259 00:10:03,974 --> 00:10:05,890 Do tiu estas programo ke tuj apliki 260 00:10:05,890 --> 00:10:07,335 kiel la matrikulisto datumbazo. 261 00:10:07,335 --> 00:10:09,710 Do datumbazon de studentoj, kaj ĉiu lernanto en la mondo 262 00:10:09,710 --> 00:10:13,190 havas nomon kaj domon kaj verŝajne iuj aliaj aferoj, sed ni tenu ĝin simpla. 263 00:10:13,190 --> 00:10:15,140 Ĉiu studento havas nomon kaj domo. 264 00:10:15,140 --> 00:10:17,700 >> Do se mi volis skribi programo kies celo en la vivo 265 00:10:17,700 --> 00:10:19,860 Estis nur persisti el nulo en ĝis tri, 266 00:10:19,860 --> 00:10:22,070 se estas tri studentoj Harvard University. 267 00:10:22,070 --> 00:10:25,350 Mi nur volas, uzante GetString, ĉiu studenta nomo kaj domo, 268 00:10:25,350 --> 00:10:26,600 kaj tiam simple presi tiujn ekstere. 269 00:10:26,600 --> 00:10:28,630 >> Tiu estas speco de kiel Semajno Unu, Semajno Du aferojn nun, 270 00:10:28,630 --> 00:10:30,810 kie Mi nur volas por buklo aŭ io simila. 271 00:10:30,810 --> 00:10:34,500 Kaj mi volas nomi GetString kelkaj fojojn, kaj tiam presi f kelkajn fojojn. 272 00:10:34,500 --> 00:10:37,340 Do kiel povus mi tion faras, kvankam, kiam ambaŭ nomon kaj domo 273 00:10:37,340 --> 00:10:39,070 estas implikitaj por ĉiu studento? 274 00:10:39,070 --> 00:10:42,830 >> Do mia unua instinkto multobligita esti fari ion kiel tiu. 275 00:10:42,830 --> 00:10:49,620 Mi povus unua diri, nu, al mi, diri, tabelo de kordoj nomita nomojn. 276 00:10:49,620 --> 00:10:51,530 Kaj mi ne volas hardcode tri ĉi tie. 277 00:10:51,530 --> 00:10:53,064 Kion mi volas meti tie? 278 00:10:53,064 --> 00:10:55,730 Do studentoj, ĉar tio estas nur konstanta deklaris ĉe la supro, 279 00:10:55,730 --> 00:10:57,860 ĝuste tiel mi ne devos hardcode tri en multnombraj lokoj. 280 00:10:57,860 --> 00:11:00,859 Tiu vojo, mi povas ŝanĝi ĝin en unu lokon, kaj tio efikas ŝanĝon ĉie. 281 00:11:00,859 --> 00:11:04,470 Kaj poste, mi povus fari kordo gastigas studentojn. 282 00:11:04,470 --> 00:11:10,250 >> Kaj nun, mi povas fari ion kiel por (int i = 0; i 00:11:14,390 Do mi tajpas rapida, sed tio estas verŝajne familiara sintakson nun. 284 00:11:14,390 --> 00:11:17,030 >> Kaj nun, tiu estis pli freŝa. 285 00:11:17,030 --> 00:11:22,890 Se mi volas meti en la i-a studenta nomo, mi kredas ke mi faros. 286 00:11:22,890 --> 00:11:26,480 Kaj tiam, ne nomoj sed domoj heligas i. 287 00:11:26,480 --> 00:11:29,930 Mi faros tion, GetString kaj lasu mi reiri kaj korekti tiun linion. 288 00:11:29,930 --> 00:11:30,430 Konsentas? 289 00:11:30,430 --> 00:11:31,200 Malkonsentas? 290 00:11:31,200 --> 00:11:32,366 Ne tre uzantamika. 291 00:11:32,366 --> 00:11:33,890 Mi ne diris al la uzanto kion fari. 292 00:11:33,890 --> 00:11:36,520 >> Sed nun, se mi ankaŭ volis poste, ni 293 00:11:36,520 --> 00:11:40,060 diru, presi tion out-- tiom FARENDAĴOJ poste. 294 00:11:40,060 --> 00:11:42,330 Mi iras fari pli kun this-- ĉi defendeble IS 295 00:11:42,330 --> 00:11:45,970 ĝusta apliko de ricevas nomojn kaj domoj, tri 296 00:11:45,970 --> 00:11:48,870 ili entute de ĉiu, de uzanto. 297 00:11:48,870 --> 00:11:51,280 >> Sed tio ne estas tre bona dezajno, dekstra? 298 00:11:51,280 --> 00:11:55,220 Kio se lernanto havas ne nur nomo kaj domo, sed ankaŭ ID nombro, 299 00:11:55,220 --> 00:11:57,770 kaj telefonan numeron, kaj retadreson, 300 00:11:57,770 --> 00:12:00,280 kaj eble ĉefpaĝon kaj eble Twitter tenilo, 301 00:12:00,280 --> 00:12:03,730 kaj ajna numero de aliaj detaloj asociita kun studento aŭ persono, 302 00:12:03,730 --> 00:12:04,610 pli ĝenerale. 303 00:12:04,610 --> 00:12:07,720 Kiel ni komencos aldonu funcionalidad al tiu programo? 304 00:12:07,720 --> 00:12:14,080 >> Nu, mi sentas min kiel la plej simpla maniero multobligita esti fari ion kiel, diru, 305 00:12:14,080 --> 00:12:16,490 int ids studentoj. 306 00:12:16,490 --> 00:12:18,380 Do mi povas meti ĉiujn liajn IDs tie. 307 00:12:18,380 --> 00:12:22,240 Kaj tiam, por io kiel telefonnumerojn, 308 00:12:22,240 --> 00:12:24,400 Mi ne certas kiel reprezenti ke ĝuste nun. 309 00:12:24,400 --> 00:12:30,280 Do ni iru antaŭen kaj nur alvoko ĉi pepado lernantoj, kiuj 310 00:12:30,280 --> 00:12:33,550 estas iom stranga, but-- kaj faskon pli kampoj. 311 00:12:33,550 --> 00:12:36,360 >> Mi komencis efike kopii kaj alglui ĉi tie. 312 00:12:36,360 --> 00:12:39,416 Kaj tio tuj kreskos bela _unwieldy_ bela rapide, ĉu ne? 313 00:12:39,416 --> 00:12:42,290 Ĉu ne estus bele se ekzistus en la mondo datumstrukturo konata 314 00:12:42,290 --> 00:12:45,600 Ne kiel int aŭ ŝnuro, sed io alta nivelo, abstraktaĵo, do 315 00:12:45,600 --> 00:12:47,570 paroli, konata kiel studento? 316 00:12:47,570 --> 00:12:50,220 C ne venis kun konstruita-en funcionalidad por studentoj, 317 00:12:50,220 --> 00:12:52,260 sed kio se mi volis doni ĝin tia? 318 00:12:52,260 --> 00:12:55,640 >> Nu, verŝajne, mi tuj malfermi dosieron nomatan structs.h tie, 319 00:12:55,640 --> 00:12:57,090 kaj vi povas fari ĝuste tion. 320 00:12:57,090 --> 00:12:58,290 Kaj ni tuj komenci fari ĉi nun. 321 00:12:58,290 --> 00:13:01,490 Kaj sub la kapuĉo de P Ara Tri, vi jam faras tion nun. 322 00:13:01,490 --> 00:13:05,920 Ne ekzistas tia aĵo kiel g rect aŭ g ovalo en la programlingvo C. 323 00:13:05,920 --> 00:13:10,570 >> Folks Stanford implementado tiuj datumtipoj uzante tiu alproksimiĝo tie, 324 00:13:10,570 --> 00:13:13,900 deklarante sian propran novan datumoj tipoj uzante nova ŝlosilvorto 325 00:13:13,900 --> 00:13:16,744 nomata struct kaj alia nomata typedef. 326 00:13:16,744 --> 00:13:19,660 Kaj efektive, kvankam la sintakso aspektas iom malsama stuff 327 00:13:19,660 --> 00:13:23,550 ni vidis antaŭe, en principo, estas súper simpla. 328 00:13:23,550 --> 00:13:25,297 >> Tiu nur signifas "difini tipo." 329 00:13:25,297 --> 00:13:27,255 Tio tuj estos strukturo kaj strukturo 330 00:13:27,255 --> 00:13:29,400 Estas ĝuste kiel ujo por multnombraj aĵoj. 331 00:13:29,400 --> 00:13:31,780 Kaj tiu strukturo tuj havi ĉenon vokis nomon 332 00:13:31,780 --> 00:13:33,210 kaj ŝnuro nomita domo. 333 00:13:33,210 --> 00:13:37,520 Kaj ni vokos, simple por oportuneco, tiu tuta datumstrukturo studento. 334 00:13:37,520 --> 00:13:40,320 >> Do la momento vi alvenas al la punktokomo, vi havas nun 335 00:13:40,320 --> 00:13:43,280 kreis vian propran datumoj tipo nomita studento 336 00:13:43,280 --> 00:13:46,420 kiuj nun staras apud int, kaj kaleŝego, kaj char, kaj kordo, 337 00:13:46,420 --> 00:13:50,270 kaj g rect, kaj g ovala, kaj ajna numero aliajn aferojn oni inventis. 338 00:13:50,270 --> 00:13:53,340 >> Do kio estas utila pri tiu nun estas ke se mi reirus 339 00:13:53,340 --> 00:13:57,430 al struct 0 kaj fini ĉi efektivigo, kiun mi verkis 340 00:13:57,430 --> 00:14:02,080 anticipe tie, rimarki ke ĉiuj la nepra messiness ke 341 00:14:02,080 --> 00:14:05,490 estis ekironta okazas kiel mi aldonis telefonnumerojn kaj pepado kaj ĉiuj 342 00:14:05,490 --> 00:14:07,370 tiuj aliaj aferoj studento difino, 343 00:14:07,370 --> 00:14:11,810 nun ĝi estas konciza enpakis kiel nur unu tabelo de studentoj. 344 00:14:11,810 --> 00:14:15,500 >> Kaj ĉiu el tiuj studentoj nun havas plurajn aferojn ene de ĝi. 345 00:14:15,500 --> 00:14:16,930 Tiel ke nur lasas unu demandon. 346 00:14:16,930 --> 00:14:19,700 Kiel vi akiras la nomon, kaj la domo, kaj la ID, 347 00:14:19,700 --> 00:14:21,640 kaj ĉion, kion estas ene de la lernanto? 348 00:14:21,640 --> 00:14:22,930 Super simpla, tiel. 349 00:14:22,930 --> 00:14:25,730 Nova sintakso, sed simpla ideo. 350 00:14:25,730 --> 00:14:29,239 >> Vi simple indekson en la tabelo, kiel ni faris lasta semajno kaj ĉi. 351 00:14:29,239 --> 00:14:31,030 Kaj kio estas klare la nova peco de sintakso? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 Ĝuste., Kion signifas "iri ene la strukturo kaj akiri la kampo nomata 354 00:14:35,880 --> 00:14:39,030 nomo, akiri la kampo nomata domo akiri la kampo nomita studento. " 355 00:14:39,030 --> 00:14:41,940 >> Do en P Ara Tri, se vi daŭre laboras en tio, 356 00:14:41,940 --> 00:14:44,020 kaj plej uloj ankoraŭ estas, rimarkas ke kiel vi 357 00:14:44,020 --> 00:14:46,130 ekuzi aĵojn kiel g rects kaj g ovaloj 358 00:14:46,130 --> 00:14:50,201 kaj aliaj aferoj kiuj ne ŝajnas devenas Semajno Zero, Unu aŭ Du, 359 00:14:50,201 --> 00:14:52,950 rimarkas ke tio estas ĉar Stanford deklaris iujn novajn datumtipoj. 360 00:14:52,950 --> 00:14:56,160 >> Kaj efektive, jen ĝuste kion ni do, tiel, en P Ara Kvar, kiam 361 00:14:56,160 --> 00:14:59,880 ni komencos trakti aferojn kiel bildoj, bitmaps, kaj pli. 362 00:14:59,880 --> 00:15:02,882 Do tio estas nur teaser kaj mensa modelo por kio estas por veni. 363 00:15:02,882 --> 00:15:04,590 Nun, mi procrastinated iom ĉimatene. 364 00:15:04,590 --> 00:15:09,560 Mi estis afabla de stranga por vidi kion Microsoft fonbildo reale 365 00:15:09,560 --> 00:15:10,310 aspektas kiel hodiaŭ. 366 00:15:10,310 --> 00:15:15,200 Kaj ĝi rezultas ke iu en 2006 fakte iris al preskaŭ precize 367 00:15:15,200 --> 00:15:19,210 samloke foti reale kio similas ke ĉi tiuj tagoj. 368 00:15:19,210 --> 00:15:21,380 La kampo estas nun iom kovrita. 369 00:15:21,380 --> 00:15:24,850 >> Tiel parolante nun de bildoj, ni revenigos Daven tie 370 00:15:24,850 --> 00:15:26,890 sur la ekrano kaj Nikolao, kaj simple memorigi vin 371 00:15:26,890 --> 00:15:30,540 ke se vi ŝatus aliĝi nin por tagmanĝo ĉi tiu vendredo, la kapo al nia kutima retadreso 372 00:15:30,540 --> 00:15:31,440 tie. 373 00:15:31,440 --> 00:15:33,530 >> Do kie ni chesos lunde? 374 00:15:33,530 --> 00:15:35,140 Ni enkondukis tiu problemo, ĉu ne? 375 00:15:35,140 --> 00:15:37,610 Tio estis ŝajne ĝentilan efektivigo de swap, 376 00:15:37,610 --> 00:15:40,460 per vi prenante du ints, oni nomas, oni nomas b, 377 00:15:40,460 --> 00:15:44,130 interŝanĝi ilin, ĝuste kiel Laura faris tie sur scenejo kun la lakto kaj la akvo, 378 00:15:44,130 --> 00:15:46,820 uzante provizoran variablon, aŭ malplena taso, 379 00:15:46,820 --> 00:15:50,540 tiel ke ni povus meti b en kaj en b sen fari salaton de aĵoj. 380 00:15:50,540 --> 00:15:51,560 Ni uzas variablon. 381 00:15:51,560 --> 00:15:52,870 Ĝi nomiĝas temp. 382 00:15:52,870 --> 00:15:55,520 >> Sed kio estis la fundamenta problemo kun tiu kodo en lundo? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 Kio estis la problemo ĉi tie? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Yeah. 387 00:16:00,605 --> 00:16:01,970 >> Publiko: Ĝi okupas pli da spaco. 388 00:16:01,970 --> 00:16:04,719 >> DAVID J. Malan: Takes ĝis pli spaco, ĉar mi uzas variablon, 389 00:16:04,719 --> 00:16:05,400 kaj tio estas okej. 390 00:16:05,400 --> 00:16:07,300 Tio estas vera, sed mi dironta tio OK. 391 00:16:07,300 --> 00:16:10,030 Estas nur 32 bitoj en la grandioza skemo de aferoj, do ne estas granda interkonsento. 392 00:16:10,030 --> 00:16:10,655 Aliaj pensoj? 393 00:16:10,655 --> 00:16:12,572 Publikon: ĝi nur interŝanĝas variablojn loke. 394 00:16:12,572 --> 00:16:13,571 DAVID J. Malan: Ĝuste. 395 00:16:13,571 --> 00:16:15,090 Nur interŝanĝas la variabloj loke. 396 00:16:15,090 --> 00:16:18,173 Ĉar ajna tempo vi nomas function-- Kiam mi havis la pletoj de Annenberg 397 00:16:18,173 --> 00:16:19,840 lasta tempo vi havas ĉefan sur la fundo. 398 00:16:19,840 --> 00:16:23,560 Kiam vi nomas funkcio nomita swap, swap ne ricevas x kaj y, 399 00:16:23,560 --> 00:16:24,400 la originalaj valoroj. 400 00:16:24,400 --> 00:16:26,392 Kion faras swap get, ni asertas? 401 00:16:26,392 --> 00:16:27,100 Publiko: Kopioj. 402 00:16:27,100 --> 00:16:28,090 DAVID J. Malan: Do kopiojn de ili. 403 00:16:28,090 --> 00:16:31,120 Do metas unu kaj du, se vi memori la ekzemplo de la lasta fojo, 404 00:16:31,120 --> 00:16:34,730 sed kopio de unu kaj du kiuj sukcese interŝanĝis. 405 00:16:34,730 --> 00:16:38,550 Sed bedaŭrinde la fino, tiuj valoroj estas ankoraŭ la sama. 406 00:16:38,550 --> 00:16:41,880 Do ni povas vidi per niaj nova amiko, mi esperas GDB, 407 00:16:41,880 --> 00:16:45,180 ke vi aŭ la TFS kaj Ca informoj havas estis gvidante vin al jene. 408 00:16:45,180 --> 00:16:51,210 >> Do neniu swap recall aspektas like-- ni malfermi this-- rigardojn kiel ĉi. 409 00:16:51,210 --> 00:16:54,160 Ni inicializado x al unu, y al du. 410 00:16:54,160 --> 00:16:55,620 Havis aron da print f-aj jaroj. 411 00:16:55,620 --> 00:16:58,080 Sed tiam, la ŝlosilo alvoko tie estis interŝanĝi, kiu 412 00:16:58,080 --> 00:17:00,260 Estas ĝuste la kodo ni nur vidis antaŭ momento. 413 00:17:00,260 --> 00:17:03,180 Kiu estas korekta unue rigardo, sed funkcie, 414 00:17:03,180 --> 00:17:06,800 tiu programo ne funkcias, ĉar ne konstante interŝanĝas x kaj y. 415 00:17:06,800 --> 00:17:10,190 >> Do ni vidas tiun, rapida varma supren tie kun GDB, oni ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 Faskon da blindiga informoj Mi forigi per Kontrolo L nun. 418 00:17:15,200 --> 00:17:17,516 Kaj nun, mi tuj antaŭeniri kaj ruli ĝin. 419 00:17:17,516 --> 00:17:19,349 Kaj bedaŭrinde, ke ne estis tiom utila. 420 00:17:19,349 --> 00:17:22,355 Ĝi kuris la programon ene de tiu programo nomata GDB, erarserĉilo, 421 00:17:22,355 --> 00:17:23,730 sed ne lasu min Poke ĉirkaŭe. 422 00:17:23,730 --> 00:17:26,229 >> Do kiel mi povas reale paŭzi ekzekuto ene ĉi programo? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 Do rompi. 425 00:17:28,329 --> 00:17:32,340 Kaj mi povus rompi neniun linio numeron, unu, 10, 15. 426 00:17:32,340 --> 00:17:35,530 Sed mi povas same rompi simbole dirante rompo ĉefa. 427 00:17:35,530 --> 00:17:38,980 Kaj ke tuj starigis ripozon punkton, ŝajne ĉe linio 16 en ĉefa. 428 00:17:38,980 --> 00:17:40,050 Kaj kie estas la linio 16? 429 00:17:40,050 --> 00:17:42,960 Ni iru al la kodo kaj aliru noswap. 430 00:17:42,960 --> 00:17:46,930 Kaj efektive, linio 16 estas la unua en la programo. 431 00:17:46,930 --> 00:17:52,130 >> Do nun, se mi iru antaŭen kaj tipon kuri ĉi tempo, Enter, ĝi paŭzis. 432 00:17:52,130 --> 00:17:53,080 Do ni poke ĉirkaŭe. 433 00:17:53,080 --> 00:17:55,716 Printi x-- kial estas x nulo? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 Kaj ignori la dolaro signo. 436 00:17:57,830 --> 00:17:59,725 Tio estas nur por amatoro uzado de la programo. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 Kial estas x nulo je la momento? 439 00:18:03,140 --> 00:18:03,640 Yeah. 440 00:18:03,640 --> 00:18:07,061 >> Publikon: ĝi paŭzis tuj antaŭ linio 16, ne vere en linio 16. 441 00:18:07,061 --> 00:18:08,060 DAVID J. Malan: Ĝuste. 442 00:18:08,060 --> 00:18:11,630 GDB, implicite, ĝi paŭzis ekzekuto ĝuste antaŭ linio 16. 443 00:18:11,630 --> 00:18:14,820 Do ĝi ne ekzekutitaj, kiu signifas x estas de iu nekonata valoro. 444 00:18:14,820 --> 00:18:17,150 Kaj ni akiris bonŝanca ke ĝi estas ion pura kiel nulo. 445 00:18:17,150 --> 00:18:20,310 Do nun, se mi tajpas proksima, nun ĝi ekzekutis 16. 446 00:18:20,310 --> 00:18:22,000 Ĝi atendis min ekzekuti 17. 447 00:18:22,000 --> 00:18:23,400 Lasu min kaj presi x. 448 00:18:23,400 --> 00:18:24,094 Ĝi estas unu. 449 00:18:24,094 --> 00:18:25,260 Lasu min kaj presitaj kaj. 450 00:18:25,260 --> 00:18:26,176 Kion mi vidas nun? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> Publiko: [inaudible] 453 00:18:28,560 --> 00:18:29,165 >> DAVID J. Malan: Iom pli laŭte. 454 00:18:29,165 --> 00:18:30,040 >> Publiko: [inaudible] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 DAVID J. Malan: Ne tute konsenton. 457 00:18:32,120 --> 00:18:34,760 Do jes, ni vidas iom rubo valoro. 458 00:18:34,760 --> 00:18:37,862 Nun, y estas 134514064 tie. 459 00:18:37,862 --> 00:18:39,320 Nu, estas nur kelkaj rubo valoro. 460 00:18:39,320 --> 00:18:41,350 Mia programo uzas RAM por malsamaj celoj. 461 00:18:41,350 --> 00:18:42,350 Ekzistas aliaj funkcioj. 462 00:18:42,350 --> 00:18:44,040 Aliaj homoj skribis en mia komputilo. 463 00:18:44,040 --> 00:18:46,789 Do tiuj bitoj uziĝis por aliajn valorojn, kaj kion mi vidas 464 00:18:46,789 --> 00:18:49,470 estas la restaĵoj de kelkaj antaŭan uzon de tiu memoro. 465 00:18:49,470 --> 00:18:53,350 >> Do ne estas granda interkonsento, ĉar tiel frue dum mi tajpas proksima kaj tiam presi y, 466 00:18:53,350 --> 00:18:55,640 ĝi estas inicializado al La valoro kiun mi volas. 467 00:18:55,640 --> 00:18:57,400 Do nun, ni iru antaŭen iom rapida. 468 00:18:57,400 --> 00:18:58,540 N por proksima. 469 00:18:58,540 --> 00:18:59,570 Ni faru ĝin denove. 470 00:18:59,570 --> 00:19:00,530 Ni faru ĝin denove. 471 00:19:00,530 --> 00:19:02,404 Sed mi ne volas trafi ĝin ĉi tie, ĉar se mi 472 00:19:02,404 --> 00:19:05,110 volas vidi kio okazas interne de swap, kio estas la komando? 473 00:19:05,110 --> 00:19:05,520 >> Publiko: paŝoj. 474 00:19:05,520 --> 00:19:06,436 >> DAVID J. Malan: paŝoj. 475 00:19:06,436 --> 00:19:09,800 Do tiu paŝas min en funkcio, prefere ol pri tio. 476 00:19:09,800 --> 00:19:12,270 Kaj nun, estas iom kamufla Honeste, sed ĉi tio estas nur 477 00:19:12,270 --> 00:19:14,581 diri al mi Mi estas en linio 33 nun. 478 00:19:14,581 --> 00:19:15,580 Kaj ni faru tion denove. 479 00:19:15,580 --> 00:19:16,080 Print temp. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 Garbage valoro, negativa tiu fojo, sed tio estas nur ankoraŭ rubo valoro. 482 00:19:20,170 --> 00:19:22,810 Do ni faru, print temp. 483 00:19:22,810 --> 00:19:27,130 Ĝi inicializado al 1, kiu estis la valoro de x, alias al. 484 00:19:27,130 --> 00:19:29,110 >> Nun, kie estas niaj a kaj x devenante? 485 00:19:29,110 --> 00:19:32,510 Nu, rimarkis en ĉefa, ni nomis tiujn valorojn x kaj y. 486 00:19:32,510 --> 00:19:34,740 Ni tiam preterpasis ilin interŝanĝi kiel sekvas. 487 00:19:34,740 --> 00:19:37,010 X venis unue, komo y. 488 00:19:37,010 --> 00:19:40,020 Kaj tiam, swap povis nomi ilin x kaj y. 489 00:19:40,020 --> 00:19:42,630 Sed por klareco, estas nomante ilin a kaj b. 490 00:19:42,630 --> 00:19:45,970 Sed a kaj b estas nun tuj estos kopioj de x kaj y, respektive. 491 00:19:45,970 --> 00:19:50,660 >> Do se mi reirus al GDB, temp estas nun unu kaj nun estas unu. 492 00:19:50,660 --> 00:19:56,130 Sed se mi faras apud nun fari print a, a jam movis super. 493 00:19:56,130 --> 00:20:00,030 La lakto estis verŝita en la iama oranĝa suko de vitro, aŭ inverse. 494 00:20:00,030 --> 00:20:04,750 >> Kaj se mi faras apud denove, kaj nun se mi presi kiel prudento ĉeko, 495 00:20:04,750 --> 00:20:07,687 a estas ankoraŭ du, sed b estas nun unu. 496 00:20:07,687 --> 00:20:08,770 Sincere, estas ankoraŭ tie. 497 00:20:08,770 --> 00:20:10,670 Mi ne zorgas kion temp estas. 498 00:20:10,670 --> 00:20:16,850 Sed kiam mi nun tajpas, diru, daŭrigi iri reen, nun mi estas ĉe la fino 499 00:20:16,850 --> 00:20:17,480 la programo. 500 00:20:17,480 --> 00:20:20,730 Kaj bedaŭrinde, x estas ankoraŭ unu kaj y estas ankoraŭ du. 501 00:20:20,730 --> 00:20:22,272 >> Do kio estas la utileco de GDB tie? 502 00:20:22,272 --> 00:20:23,980 Ĝi ne helpis min ripari la problemo per, 503 00:20:23,980 --> 00:20:26,265 sed espereble helpos min kompreni gxin rimarki 504 00:20:26,265 --> 00:20:30,000 ke jes, mia logiko pravas, sed mia kodo ne estas finfine havanta 505 00:20:30,000 --> 00:20:31,450 permanentan trafon. 506 00:20:31,450 --> 00:20:34,570 Do tio estas problemo ni tuj nun solvi hodiaŭ. 507 00:20:34,570 --> 00:20:37,870 >> Sed ni atingos tien tra tiu. 508 00:20:37,870 --> 00:20:39,230 Kordo estas mensogo. 509 00:20:39,230 --> 00:20:41,860 Ĝi ankaŭ ne datumtipo kiu ekzistas en C. Estas 510 00:20:41,860 --> 00:20:44,750 estis sinonimo por iu tempo por io alia, 511 00:20:44,750 --> 00:20:47,300 kaj ni povas malkaŝi ke jene. 512 00:20:47,300 --> 00:20:53,282 >> Lasu min kaj malfermu programo nomita komparu-0. 513 00:20:53,282 --> 00:20:56,240 Kaj anstataŭ entajpi tiu unu ekstere, ni komencu marŝi tra la kodo 514 00:20:56,240 --> 00:20:58,040 Mi jam skribis, sed ĝi estas nur kelkaj linioj. 515 00:20:58,040 --> 00:20:59,570 Do tio estas kompari-0. 516 00:20:59,570 --> 00:21:02,380 Kaj la unua afero mi faras estas prenanta linio de teksto. 517 00:21:02,380 --> 00:21:05,610 >> Sed rimarki kion mi faras unuafoje. 518 00:21:05,610 --> 00:21:07,910 Kio malsamas klare pri linio 21? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 Efektive, atendu minuton. 521 00:21:11,402 --> 00:21:12,110 Jen kopio du. 522 00:21:12,110 --> 00:21:13,568 Tio estas eĉ ne la rajton programo. 523 00:21:13,568 --> 00:21:14,780 Bone, spoiler garde. 524 00:21:14,780 --> 00:21:16,890 Bone, do ne gravas kiu. 525 00:21:16,890 --> 00:21:18,520 Tio estas la respondo al estonteco demando. 526 00:21:18,520 --> 00:21:21,450 >> Jen estas kompari-0, kaj mi proksimume akiri linion de teksto. 527 00:21:21,450 --> 00:21:22,435 Programo multe pli simpla. 528 00:21:22,435 --> 00:21:23,560 Do tio estas simpla. 529 00:21:23,560 --> 00:21:28,070 Ĉi tio estas kiel Semajno Unu, Semajno Du stuff nuntempe. string s = GetString. 530 00:21:28,070 --> 00:21:29,700 Nun, mi diras ĝin denove malsupren tie. 531 00:21:29,700 --> 00:21:31,830 kordo t = GetString. 532 00:21:31,830 --> 00:21:35,300 Kaj tiam, la lasta afero en tiu programo, kiel ĝia nomo sugestas, 533 00:21:35,300 --> 00:21:37,090 Estas mi tuj provos kompari ilin. 534 00:21:37,090 --> 00:21:40,709 >> Do se s, la unua linio, egalas = t, tiam mi estas 535 00:21:40,709 --> 00:21:42,250 dironta vi tajpi la samon. 536 00:21:42,250 --> 00:21:44,291 Alie, mi intencis diri entajpas malsamaj aĵoj. 537 00:21:44,291 --> 00:21:45,880 Do ni kompilos kaj kuri ĉi programo. 538 00:21:45,880 --> 00:21:48,481 Do fari kompari nulo. 539 00:21:48,481 --> 00:21:48,980 Aspektas bona. 540 00:21:48,980 --> 00:21:50,490 Neniu kompilita eraroj. 541 00:21:50,490 --> 00:21:52,386 >> Lasu min nun kaj tajpu ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Lasu min kaj diru ion : Daven kaj io: Rob. 544 00:21:59,220 --> 00:22:00,450 Kaj mi tajpas malsamaj aĵoj. 545 00:22:00,450 --> 00:22:01,250 Ĝis nun tiel bona. 546 00:22:01,250 --> 00:22:02,680 Programo ŝajnas esti ĝusta. 547 00:22:02,680 --> 00:22:03,880 >> Sed ni ruli ĝin denove. 548 00:22:03,880 --> 00:22:05,800 Diru ion: Gabe. 549 00:22:05,800 --> 00:22:07,140 Diru ion: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 Bone. 552 00:22:09,020 --> 00:22:10,851 Eble mi batis spaco trinkejo aŭ io funky. 553 00:22:10,851 --> 00:22:11,600 Ni faru ĝin denove. 554 00:22:11,600 --> 00:22:13,020 Do Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 Malsamaj aferoj. 559 00:22:17,330 --> 00:22:19,430 Do, kio okazas? 560 00:22:19,430 --> 00:22:23,200 >> Do ni havas tiujn du liniojn de kodo, GetString vokite dufoje. 561 00:22:23,200 --> 00:22:25,760 Kaj poste, mi simple provas kompari s kaj t. 562 00:22:25,760 --> 00:22:28,370 Sed kio vere poste okazas? 563 00:22:28,370 --> 00:22:31,180 Nu, mia manskribo estas estonta tranĉa ĉi ekzemplon tiel. 564 00:22:31,180 --> 00:22:34,630 Kaj ni vere ĵeti tiu super ĉi tie, ankaŭ. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> Do ni havas linion kiel string s = GetString. 567 00:22:45,712 --> 00:22:48,295 Do tio estas simple la unua interesa linio de tiu programo. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 Sed kion ĉiu ĉi tiu tempo estis irante sur sub la kapuĉo? 570 00:22:52,974 --> 00:22:55,890 Nu, sur la maldekstra flanko estas ŝnuro, kiu estas iu tipo de variablo, 571 00:22:55,890 --> 00:22:56,785 kaj ĝi nomiĝas s. 572 00:22:56,785 --> 00:23:00,019 Do mi scias, ke ĉi tiu estas uzanta memoro, aŭ RAM, en mia komputilo iel. 573 00:23:00,019 --> 00:23:02,060 Do mi tuj abstrakte desegni ke kiel kvadrato. 574 00:23:02,060 --> 00:23:04,820 32 bitoj, ĝi rezultas, sed pli en kiuj en la estonteco. 575 00:23:04,820 --> 00:23:06,410 Kaj poste, kio okazas ĉi tie? 576 00:23:06,410 --> 00:23:08,700 >> Nu, GetString evidente ricevas ĉenon de la uzanto. 577 00:23:08,700 --> 00:23:11,360 Kaj GetString akiris Zamyla aŭ Gabe aŭ Daven. 578 00:23:11,360 --> 00:23:14,640 Do ni elektos la unuan de tiuj, kiuj estis Daven. 579 00:23:14,640 --> 00:23:19,174 Do efektive, kion GetString akiris mi en tiu unua kazo estis D-al-v-e-n. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 Kaj tiam, kion alia faris Ĝi donas al mi kasxe? 582 00:23:25,045 --> 00:23:25,920 Publiko: [inaudible] 583 00:23:25,920 --> 00:23:28,720 DAVID J. Malan: Jes, la / 0 aŭ nula karaktero. 584 00:23:28,720 --> 00:23:30,550 Do efektive donis min kordo. 585 00:23:30,550 --> 00:23:34,550 Sed ni jam scias per antaŭa aspektas tiu ĉeno estas nur tabelo 586 00:23:34,550 --> 00:23:37,895 de karakteroj, kaj ĝi estas eksigita de tiu speciala gardostaranto karaktero, / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> Sed se tio estas vera kaj tio estas kvadrato, 589 00:23:42,310 --> 00:23:44,160 tio estas klare multe pli granda ortangulo. 590 00:23:44,160 --> 00:23:46,830 Kaj efektive, tio estas, Mi asertas, nur 32 bitoj. 591 00:23:46,830 --> 00:23:49,500 Kaj tio estas klare pli ol 32 bitoj, ĉar tiu estas probable 592 00:23:49,500 --> 00:23:51,583 ok plus ok plus ok plus ok plus ok, 593 00:23:51,583 --> 00:23:53,320 ĝuste pro bajtoj en ASCII. 594 00:23:53,320 --> 00:23:57,030 Kiel la heck ni sidus Daven en tiu malgranda skatolo tie? 595 00:23:57,030 --> 00:23:59,880 >> Nu, kio estas GetString reale fari? 596 00:23:59,880 --> 00:24:03,680 Nu, tiu krado tie reprezentas mia komputilo memoro aŭ RAM. 597 00:24:03,680 --> 00:24:07,564 Do ni arbitre diri ke se ĉiu el tiuj reprezentas bajto, 598 00:24:07,564 --> 00:24:09,730 tiam ni povas elpensi ĉiun bajto kiel havanta adreso, 599 00:24:09,730 --> 00:24:13,830 kiel 33 Oxford Street, aŭ 34 Oxford Street, aŭ 35 Oksfordostrato. 600 00:24:13,830 --> 00:24:16,700 >> Do ĝuste kiel hejmoj havas adresoj kaj konstruaĵoj havas adresojn, 601 00:24:16,700 --> 00:24:19,810 tiel faru individuaj bajtoj de memoro havas adresojn aŭ nombroj 602 00:24:19,810 --> 00:24:21,042 ke unike identigi ilin. 603 00:24:21,042 --> 00:24:22,000 Nu, temas arbitra. 604 00:24:22,000 --> 00:24:25,370 Sed teni ĝin simpla, mi tuj uzi deksesuman nur konvencio, 605 00:24:25,370 --> 00:24:28,200 sed la 0x signifas nenion alian ol "tiu estas deksesuma." 606 00:24:28,200 --> 00:24:31,030 kaj mi tuj asertas, ke la "D" finas ĉe Bajto Unu en memoro. 607 00:24:31,030 --> 00:24:34,210 >> Mi ja nenion alian okazas en memoro, tiel Daven atingis la unuan lokon 608 00:24:34,210 --> 00:24:35,509 ĉe Bajto Unu. 609 00:24:35,509 --> 00:24:36,800 Jen, do, tuj estos 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 Tiu tuj 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 Ĉi tuj estos 0x4. 614 00:24:41,800 --> 00:24:43,025 Tiu tuj 0x5. 615 00:24:43,025 --> 00:24:44,025 Ĉi tuj estos 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> Sed unufoje vi komencas pensi pri kio la komputilo afero 618 00:24:48,290 --> 00:24:50,710 sub la kapuĉo, Vi povas komenci konkludi 619 00:24:50,710 --> 00:24:54,960 kiel vi, antaŭ kelkaj jaroj, cxu implementado C mem. 620 00:24:54,960 --> 00:24:58,360 Kio estas GetString probable returning-- ĉar 621 00:24:58,360 --> 00:25:00,946 sentas ŝatas ĝin ne reveni Daven, per, 622 00:25:00,946 --> 00:25:03,320 ĉar li certe ne tuj persvadi en tiu malgranda box-- 623 00:25:03,320 --> 00:25:05,090 do kio GetString probable reveni? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> Publiko: [inaudible] 626 00:25:08,920 --> 00:25:10,540 >> DAVID J. Malan: La situo de Daven. 627 00:25:10,540 --> 00:25:12,770 Kaj ĝi estas estinta farante ĉi ekde Week One. 628 00:25:12,770 --> 00:25:16,150 Kio GetString estas vere reveni ne ĉenon, por se. 629 00:25:16,150 --> 00:25:17,780 Tio estas unu el la malgrandaj blankaj mensogoj. 630 00:25:17,780 --> 00:25:22,520 Ĝi revenas la adreso de la kordo en memoro, la sola adreso. 631 00:25:22,520 --> 00:25:24,820 Daven vivas 33 Oksfordostrato. 632 00:25:24,820 --> 00:25:29,310 Sed pli koncize, Gavin vivas je 0x1, Nomo Numero Unu. 633 00:25:29,310 --> 00:25:32,280 >> Do kio akiras metita en tiu kesteton do esti klara, 634 00:25:32,280 --> 00:25:35,930 estas nur la adreson de tiu ĉeno. 635 00:25:35,930 --> 00:25:38,110 Do ĉiu ĉi tiu tempo, tiu estis okazanta. 636 00:25:38,110 --> 00:25:41,650 Sed kion tio sugestas, je nun estas ke se ĉiu s 637 00:25:41,650 --> 00:25:44,710 Estas nombro ene de ĝi, kiuj estas halti vi, la programisto, 638 00:25:44,710 --> 00:25:47,970 el metante ajna nombro en ajna variablo kaj simple saltante 639 00:25:47,970 --> 00:25:49,080 tiun eron de memoro? 640 00:25:49,080 --> 00:25:51,320 Kaj efektive, ni jam vidos tio minaco venontfoje. 641 00:25:51,320 --> 00:25:53,500 >> Sed nuntempe, tiu sentas nesufiĉa. 642 00:25:53,500 --> 00:25:55,630 Se mi diras, min oni kordo, vi donos al mi Daven. 643 00:25:55,630 --> 00:25:57,230 Sed vi ne vere donas min Daven. 644 00:25:57,230 --> 00:25:59,310 Ĉiuj vi donos al mi estas Daven la adreso. 645 00:25:59,310 --> 00:26:04,310 Kjel mi tiam scias al scienco kie Daven komencas kaj ends-- 646 00:26:04,310 --> 00:26:07,140 la rakonto iĝas weird-- kie Daven komencas kaj finas, 647 00:26:07,140 --> 00:26:10,435 kaj tiam, la sekvantan kordo memore komenciĝas? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> Nu, se vi disdonado mi la komenco de Daven, 650 00:26:13,620 --> 00:26:17,230 esence, kiom mi scias kie la fino de lia nomo estas? 651 00:26:17,230 --> 00:26:20,550 Ke speciala nula karaktero, kiu Estas des pli grava nun 652 00:26:20,550 --> 00:26:23,040 se ŝnuroj sub la kapuĉo simple identigi 653 00:26:23,040 --> 00:26:25,820 unike per sia situo en la memoro. 654 00:26:25,820 --> 00:26:28,130 Do ĉiu ĉi tiu tempo, tio kio estis okazanta. 655 00:26:28,130 --> 00:26:32,470 >> Do kiam ni rigardas nun la kodo tie klarigi 656 00:26:32,470 --> 00:26:35,790 se vi farus la cimon en linio 26. 657 00:26:35,790 --> 00:26:39,560 Kial Zamyla kaj Zamyla malsamaj? 658 00:26:39,560 --> 00:26:41,330 Kial Gabe kaj Gabe malsamaj? 659 00:26:41,330 --> 00:26:42,154 Jes, en dorso. 660 00:26:42,154 --> 00:26:43,390 >> Publiko: Ili havas malsamajn direktojn. 661 00:26:43,390 --> 00:26:45,931 >> DAVID J. Malan: Simple ĉar Ili havas malsamajn direktojn. 662 00:26:45,931 --> 00:26:48,820 Ĉar kiam vi vokas GetString denove, kion mi faru rapide tie, 663 00:26:48,820 --> 00:26:52,870 Se ĉi estas la dua linio, ŝnuro t, kiel mi faris en tiu programo, 664 00:26:52,870 --> 00:26:55,030 egalas alian alvokon al GetString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 La proksima fojo mi vokas GetString, mi tuj 667 00:26:58,670 --> 00:27:00,190 por akiri malsaman parton de memoro. 668 00:27:00,190 --> 00:27:02,220 >> GetString estas permesita demandi la mastruma 669 00:27:02,220 --> 00:27:03,800 sistemo por pli kaj pli memoro. 670 00:27:03,800 --> 00:27:07,894 Ĝi ne tuj reuzi la saman ses bitokoj ĉiu ununura tempo. 671 00:27:07,894 --> 00:27:09,810 Ĝi tuj akiri novajn eron de memoro, kiu 672 00:27:09,810 --> 00:27:12,780 signifas t tuj akiri iu alia valoro super tie. 673 00:27:12,780 --> 00:27:15,380 >> Do kiam mi faras s egalas = t, vi ne komparante 674 00:27:15,380 --> 00:27:17,880 D kontraŭ ĉi kaj A kontraŭ ĉi kaj V kontraŭ tio. 675 00:27:17,880 --> 00:27:19,588 Vi komparas ĉi kontraŭ tiu, kiu 676 00:27:19,588 --> 00:27:24,020 sincere estas bela useful-- useless-- estas sufiĉe netaŭga, ĉar kiu vere 677 00:27:24,020 --> 00:27:25,830 zorgas kie la kordoj estas en memoro? 678 00:27:25,830 --> 00:27:26,850 >> Kaj efektive, ni ne havas. 679 00:27:26,850 --> 00:27:28,980 Kaj ni ne tuj komenci aparte zorgado. 680 00:27:28,980 --> 00:27:34,180 Nur al la punkto ke cimoj povas ŝpruci kaj sekureco minacoj povas ekesti volo 681 00:27:34,180 --> 00:27:36,100 ni fakte komencas zorgi pri tio. 682 00:27:36,100 --> 00:27:37,230 Do ni ripari tiun problemon. 683 00:27:37,230 --> 00:27:39,650 Rezultas, vi riparu ĝin super simple. 684 00:27:39,650 --> 00:27:42,600 >> Kaj ni efektive, antaŭ mi malkaŝi tion denove, kion farus 685 00:27:42,600 --> 00:27:47,170 vi farus se en CS50 klaso, kaj vi devis implementar 686 00:27:47,170 --> 00:27:48,600 komparo kontraŭ du ŝnuroj. 687 00:27:48,600 --> 00:27:51,440 Vi klare ne povas simple uzi s egalas = t. 688 00:27:51,440 --> 00:27:54,090 Sed nur logike, kiom vi komparas ĉi kordo 689 00:27:54,090 --> 00:27:56,370 kontraŭ ĉi ŝnuro uzante C kodo? 690 00:27:56,370 --> 00:27:56,880 Yeah. 691 00:27:56,880 --> 00:27:58,780 >> Aŭdienco: Nur faru la por buklo [inaudible] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 DAVID J. Malan: Perfekta. 694 00:28:01,670 --> 00:28:02,900 Publiko: [inaudible] 695 00:28:02,900 --> 00:28:03,310 DAVID J. Malan: Jes. 696 00:28:03,310 --> 00:28:05,390 Simple por buklo aŭ dum buklo aŭ kion ajn. 697 00:28:05,390 --> 00:28:08,710 Sed ĝuste apliki la bazan ideon ke se tio eron de memoro aŭ tabelo 698 00:28:08,710 --> 00:28:11,590 kaj tio estas, persisti super ambaŭ samtempe. 699 00:28:11,590 --> 00:28:12,960 Kaj simple kompari la literoj. 700 00:28:12,960 --> 00:28:14,260 >> Kaj vi havas esti iom zorgema, ĉar vi 701 00:28:14,260 --> 00:28:16,247 ne volas unu fingro iri preter la aliaj 702 00:28:16,247 --> 00:28:18,080 ĉar unu cxeno estas longa ol la alia. 703 00:28:18,080 --> 00:28:21,380 Do vi tuj volas kontroli tiu speciala valoro fine, nula. 704 00:28:21,380 --> 00:28:24,017 Sed ĝi vere estas, la fino, tiel simpla kiel tiu. 705 00:28:24,017 --> 00:28:26,100 Kaj sincere, ni ne bezonas reinventar ke rado. 706 00:28:26,100 --> 00:28:27,960 Jen Version Two. 707 00:28:27,960 --> 00:28:32,910 Kaj kion mi tuj diros ĉi tie estas ke anstataŭ komparante s egalas = t, 708 00:28:32,910 --> 00:28:38,964 Mi anstataŭe dironta, se kordo komparo de s komo t egalas = 0. 709 00:28:38,964 --> 00:28:40,130 Nun, kio kordo kompari? 710 00:28:40,130 --> 00:28:43,046 >> Rezultas, estas funkcio kiu venas kun C, kies celo en la vivo 711 00:28:43,046 --> 00:28:44,650 estas kompari du ŝnuroj. 712 00:28:44,650 --> 00:28:48,300 Kaj stir kompari, se ni legas liajn viro paĝo aŭ dokumentaron aŭ CS50 713 00:28:48,300 --> 00:28:50,630 aludo, gxi simple diri al vi ke ekscitigxo 714 00:28:50,630 --> 00:28:55,730 kompari revenoj ĉu negativa numeron aŭ pozitiva nombro aŭ nulo, 715 00:28:55,730 --> 00:28:57,660 kie nulo signifas ke ili estas egalaj. 716 00:28:57,660 --> 00:28:58,570 >> Do nur konjekto. 717 00:28:58,570 --> 00:29:00,390 Kion povus signifi se instigi kompari revenoj 718 00:29:00,390 --> 00:29:02,110 negativa valoro aŭ pozitiva valoro? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 Publiko: Plej granda ol aŭ malpli ol. 721 00:29:04,285 --> 00:29:05,570 DAVID J. Malan: Jes, pli granda ol aŭ malpli ol. 722 00:29:05,570 --> 00:29:08,640 Do se vi volas ordigi tutan faskon da kordoj en dictionary-- 723 00:29:08,640 --> 00:29:12,975 kiel ni volas eventuale malsupren la road-- perfektan funkcion uzi potenciale, 724 00:29:12,975 --> 00:29:15,850 ĉar ĝi faros ke komparo de ŝnuroj por vi, kaj diru 725 00:29:15,850 --> 00:29:20,060 vi faras venas antaŭ B, aŭ faras b veni antaŭ alfabete. 726 00:29:20,060 --> 00:29:21,490 Ni povas fari ĝuste tion. 727 00:29:21,490 --> 00:29:23,620 >> Kaj avizo Mi faris unu alia en ĉi tiu ekzemplo. 728 00:29:23,620 --> 00:29:26,870 Kio alia ŝanĝis pli altaj en tiu ĉefa funkcio? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 Char *. 731 00:29:29,350 --> 00:29:31,150 Kaj cxi tiu estas alia blanka mensogo. 732 00:29:31,150 --> 00:29:33,750 Ĉiuj ĉi tiu tempo, kiam vi havas estis skribante kordo, 733 00:29:33,750 --> 00:29:38,350 ni sekrete reskribi ĉeno kiel char * tiel ke tin reale 734 00:29:38,350 --> 00:29:39,270 komprenas vin. 735 00:29:39,270 --> 00:29:42,450 >> En aliaj vortoj, en CS50.h kaj kiel ni fine vidos, 736 00:29:42,450 --> 00:29:45,950 Ni faris sinonimo nomita kordo tio estas la sama afero kiel char *. 737 00:29:45,950 --> 00:29:49,910 Kaj nun, scias nur, ke la *, En tiu kunteksto, almenaŭ, 738 00:29:49,910 --> 00:29:51,286 signifas la adreso. 739 00:29:51,286 --> 00:29:52,210 >> La adreso de kio? 740 00:29:52,210 --> 00:29:56,390 Nu, la fakto, ke mi diris char *, kaj ne int * aŭ flosi *, 741 00:29:56,390 --> 00:30:00,820 signifas ke char * estas la adreso de char. 742 00:30:00,820 --> 00:30:06,770 Do tiu malgranda skatolo tie, alias kordo, estas vere de tipo char *, 743 00:30:06,770 --> 00:30:10,490 kio estas simple fantazio maniero diri, en tiu skatolo iros adreson. 744 00:30:10,490 --> 00:30:12,430 Kaj kion signifas tiu adreso aludas al? 745 00:30:12,430 --> 00:30:13,780 Ŝajne, char. 746 00:30:13,780 --> 00:30:16,410 >> Sed ni povis absolute havi int * kaj aliaj aĵoj. 747 00:30:16,410 --> 00:30:20,790 Sed nuntempe, char * estas vere la plej simpla kaj de intereso. 748 00:30:20,790 --> 00:30:23,310 Do tiu problemo tuj levi, kvankam, denove. 749 00:30:23,310 --> 00:30:24,830 >> Supozi Mi malfermu tiun programon. 750 00:30:24,830 --> 00:30:27,670 Vidu se nun ni povas antaŭdiri kio estas malĝusta kun tiu kodo. 751 00:30:27,670 --> 00:30:31,140 Do en tiu programo, kopii-0, mi tuj iros antaŭen kaj denove vokas 752 00:30:31,140 --> 00:30:34,190 GetString kaj stoki la valoro en s. 753 00:30:34,190 --> 00:30:38,800 >> Kaj tiam, kial mi faras tion, kiel recordatorio de semajnoj pasinteco? 754 00:30:38,800 --> 00:30:40,960 Ni faris diri ke GetString kelkfoje revenas nula. 755 00:30:40,960 --> 00:30:42,793 Kion tio signifas, se GetString revenas nula? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 Io misokazis. 758 00:30:46,034 --> 00:30:48,950 Ĝi probable signifas la kordo estas tro granda, la komputilo el memoro. 759 00:30:48,950 --> 00:30:51,724 Okazas super, super, super malofte, sed povus okazi. 760 00:30:51,724 --> 00:30:53,890 Ni volas kontroli ĝin, kaj tio estas kion ni faras. 761 00:30:53,890 --> 00:30:57,910 >> Ĉar ni vidos nun, se vi ne komenci kontrolanta kutime por aĵoj 762 00:30:57,910 --> 00:31:00,870 kiel nulan, vi povus efektive komencos iri 763 00:31:00,870 --> 00:31:03,106 al adresoj en memoro kiu estas nevalida. 764 00:31:03,106 --> 00:31:05,980 Kaj vi tuj komencu indukti pli kaj pli segmentación faŭltoj. 765 00:31:05,980 --> 00:31:08,360 Aŭ en Mac aŭ PC, nur kaŭzante komputilo pendigu 766 00:31:08,360 --> 00:31:10,340 aŭ programo frosti, potenciale. 767 00:31:10,340 --> 00:31:14,930 >> Do nun, mi asertas en kopio-0.c, ke mi Tuj kopii tiujn ŝnurojn per vojo 768 00:31:14,930 --> 00:31:15,685 de la linio 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 Kaj poste mi iros pretendi je la malsupro 771 00:31:18,750 --> 00:31:21,430 ke mi iras ŝanĝi unu el ili. 772 00:31:21,430 --> 00:31:22,330 >> Do rimarki ĉi. 773 00:31:22,330 --> 00:31:24,370 Mi vokas nian malnovan amikon strlen. 774 00:31:24,370 --> 00:31:28,960 Kaj ĝuste ekspliki en Esperanto kion ĉi linio 34 estas faranta? 775 00:31:28,960 --> 00:31:32,480 Kion faras t krampo 0 reprezenti maldekstre. 776 00:31:32,480 --> 00:31:32,980 Yeah. 777 00:31:32,980 --> 00:31:34,339 >> Publiko: Unua karaktero de t? 778 00:31:34,339 --> 00:31:35,880 DAVID J. Malan: Unua karaktero de t. 779 00:31:35,880 --> 00:31:36,379 Estas tio. 780 00:31:36,379 --> 00:31:40,024 Unua karaktero de t, mi volas atribui la majuskla versio 781 00:31:40,024 --> 00:31:41,190 de la unua signo en t. 782 00:31:41,190 --> 00:31:43,200 Do tiu estas kapitaligi la unua litero. 783 00:31:43,200 --> 00:31:46,340 Kaj tiam, la lasta afero mi faras en ĉi tiu programo estas mi asertas jen 784 00:31:46,340 --> 00:31:50,340 la originalo, s, kaj jen la kopio, t. 785 00:31:50,340 --> 00:31:54,610 >> Sed bazita sur la rakonto ni ĵus raportis pri kio kordoj vere estas, 786 00:31:54,610 --> 00:31:57,520 kio estas linio 28 vere faras, kaj kio estas 787 00:31:57,520 --> 00:31:59,405 la rezultan cimon iri esti sur la ekrano? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> Do unue, la unua demando, 28. 790 00:32:03,500 --> 00:32:09,040 Kio kordo t = s vere faras? 791 00:32:09,040 --> 00:32:16,430 Se ni havas sur la maldekstra mano flanko tie kordo t = s; 792 00:32:16,430 --> 00:32:19,400 kiu donas al mi unu skatolo tie kaj unu skatolon ĉi tie. 793 00:32:19,400 --> 00:32:25,530 Kaj supozu ĉi adreso estas 0x, diru, 50 tiu tempo, arbitre. 794 00:32:25,530 --> 00:32:28,847 Kion faras ĉenon t = s faru sub la kapuĉo? 795 00:32:28,847 --> 00:32:30,340 >> Publiko: [inaudible] 796 00:32:30,340 --> 00:32:34,100 >> DAVID J. Malan: ĝi stokas la memoro alparoli tie, tiel 0x50 iras tien. 797 00:32:34,100 --> 00:32:37,980 Do se nun mi iras al la unua karaktero en t kaj majuskloj ĝi, 798 00:32:37,980 --> 00:32:39,535 kion mi efektive faris al s? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 Mi vere fari la samon, dekstra? 801 00:32:43,450 --> 00:32:47,680 Ĉar se Adreso 0x50-- kaj justa, mi malmuta ĉambro sur la tabulo tien, 802 00:32:47,680 --> 00:32:51,750 sed supozas ke tio estas 0x50 malsupren tie, ie en mia komputilo la memoro. 803 00:32:51,750 --> 00:32:55,825 >> Mi, ekzemple, Gabe en minuskla tie, kiel tiu. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 Kaj mi diris t krampo 0 prenas majusklon. 806 00:33:01,980 --> 00:33:04,860 Nu, t krampo 0 estas la unua letero en t. 807 00:33:04,860 --> 00:33:07,840 Do eta g tuj fariĝi granda G. Sed la problemo 808 00:33:07,840 --> 00:33:09,410 estas, kion tio s ankaŭ notas al? 809 00:33:09,410 --> 00:33:10,300 >> Aŭdienco: La sama. 810 00:33:10,300 --> 00:33:11,841 >> DAVID J. Malan: La sama ĝusta afero. 811 00:33:11,841 --> 00:33:16,342 Tiel simpla klarigo eble, eĉ se la sintakso estas iom stranga. 812 00:33:16,342 --> 00:33:17,050 Do ni faros. 813 00:33:17,050 --> 00:33:20,210 Faru kopion-0 kaj tiam ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 Diru ion: Gabe. 816 00:33:24,110 --> 00:33:26,760 Kaj bedaŭrinde, ambaŭ ili nun estis majuskle, 817 00:33:26,760 --> 00:33:29,500 sed por ke subkuŝanta tial ke ni estas simple 818 00:33:29,500 --> 00:33:32,350 nun kontraktanta kun adresoj. 819 00:33:32,350 --> 00:33:36,470 >> Do kiel ni komencas address-- neniu pun intended-- 820 00:33:36,470 --> 00:33:39,270 Kiel do ni komencos trakti tiu aparta problemo? 821 00:33:39,270 --> 00:33:44,400 Nu, en copy1.c, aferoj iras akiri iom pli komplika. 822 00:33:44,400 --> 00:33:49,310 Sed mi asertas, ke ekzistas koncepte simplan solvon. 823 00:33:49,310 --> 00:33:50,852 >> Tiel malfacile akiri unuavide. 824 00:33:50,852 --> 00:33:53,560 Ne tuj estos facila por la unua tempo vi tajpas ĝin, eble, 825 00:33:53,560 --> 00:33:57,440 sed se la problemo estas ke simple faranta t = s simple 826 00:33:57,440 --> 00:33:59,694 kopioj la adreson, kio, denove se mi povas preni sur vin, 827 00:33:59,694 --> 00:34:02,110 tuj estos la solvo por vere kopiado ĉeno? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> Publiko: Ni probable uzi buklo denove. 830 00:34:06,770 --> 00:34:06,890 >> DAVID J. Malan: Jes. 831 00:34:06,890 --> 00:34:08,390 Do ni tuj bezonas buklo denove. 832 00:34:08,390 --> 00:34:11,800 Kaj ĉar se ni volas kopii ŝnuro s en alian ĉenon, 833 00:34:11,800 --> 00:34:14,120 ni probable volas fari ĝin karaktero de karaktero. 834 00:34:14,120 --> 00:34:17,199 Sed la problemo estas, se tio estas origine s, 835 00:34:17,199 --> 00:34:22,159 Nun ni bezonas komenci eksplicite atribuante memoro por t. 836 00:34:22,159 --> 00:34:24,320 >> En aliaj vortoj, ni redesegni ĉi tiu lasta tempo. 837 00:34:24,320 --> 00:34:28,659 Se tiu estas kordoj s = GetString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 Kaj ni metu ĉi tien, tiel. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 Jen GetString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 Kaj poste, la bildo de iu kiel kiu tuj estos kiel antaŭe, 844 00:34:43,860 --> 00:34:44,360 g-a-b-e- / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 Tio aspektas iom io tiamaniere. 847 00:34:48,960 --> 00:34:53,650 Kaj s do ni nomas tiun 0x50, kaj ke tuj estos 51, 52. 848 00:34:53,650 --> 00:34:54,409 >> Do tiu estas 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 Kaj poste, mi faras ĉenon t. 851 00:34:59,690 --> 00:35:02,450 En memoro, tio simple tuj donu al mi iom kvadrata ŝatas ĉi. 852 00:35:02,450 --> 00:35:04,080 Do kio estas la ŝlosilo paŝo nun? 853 00:35:04,080 --> 00:35:09,870 Se mi volas kopii s en t, kio blank Kion ni bezonas plenigi ĉi tie? 854 00:35:09,870 --> 00:35:12,050 Aux kion ni bezonas faru al alta nivelo? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 Yeah? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 Iu? 859 00:35:17,020 --> 00:35:17,690 Yeah. 860 00:35:17,690 --> 00:35:19,214 >> Publiko: Ni bezonas [inaudible]. 861 00:35:19,214 --> 00:35:21,380 DAVID J. Malan: Jes, ni bezonas plenigi tion malplena. 862 00:35:21,380 --> 00:35:24,340 Mi ne povas kopii kaj tiam capitalizar Gabe nomon 863 00:35:24,340 --> 00:35:28,120 ĝis mi petos la mastruma sistemo alian eron de memoro 864 00:35:28,120 --> 00:35:30,640 tio estas almenaŭ same granda kiel la originala. 865 00:35:30,640 --> 00:35:32,130 Por ke nin lasas kun demando. 866 00:35:32,130 --> 00:35:36,080 >> Kjel mi petos la mastruma sistemo ne nur por simpla iom pointer-- 867 00:35:36,080 --> 00:35:38,530 kiel tio nomiĝas, estas adreso, oni pointer-- ne 868 00:35:38,530 --> 00:35:40,980 por simpla malgranda skatolo kiel tiu nomita ĉeno? 869 00:35:40,980 --> 00:35:44,200 Kjel mi petos la mastruma sistemo por granda bloko de memoro? 870 00:35:44,200 --> 00:35:48,430 Tiel nun, mi nur alvenis ke reen malrekte nomante GetString. 871 00:35:48,430 --> 00:35:50,740 Do kial GetString inkluzive alvenante lia memoro? 872 00:35:50,740 --> 00:35:53,430 >> Nu, ĝi rezultas ke ne estas tiu alia funkcio ĉi tie 873 00:35:53,430 --> 00:35:55,160 ke ni nun komencu uzi. 874 00:35:55,160 --> 00:35:59,780 Nun, tio aspektas vojon pli kamufla than-- kaj mi estas la sola kiu povas vidi it-- 875 00:35:59,780 --> 00:36:03,150 tiu linio aspektas vojon pli kamufla tiam devus unuavide. 876 00:36:03,150 --> 00:36:04,650 Sed ni turmentus ĝin aparte. 877 00:36:04,650 --> 00:36:07,950 >> Sur la maldekstra flanko, mi havas char * t. 878 00:36:07,950 --> 00:36:13,280 Do en angla, ni komencu formuli taŭga frazoj en teknika ĵargono. 879 00:36:13,280 --> 00:36:19,757 Do tiu estas atribuo de variablon de tipo char * nomas t. 880 00:36:19,757 --> 00:36:21,090 Nun, kion signifas tio vere signifas? 881 00:36:21,090 --> 00:36:23,881 >> Nu, tio signifas, kion mi tuj meti en tiu variablo nomita t? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 Adreso de char. 884 00:36:26,402 --> 00:36:28,360 Do tio estas nur la simpla, pli racia maniero 885 00:36:28,360 --> 00:36:29,930 priskribi la maldekstra flanko. 886 00:36:29,930 --> 00:36:32,890 Do kiu kreas ĉi skatolon tie nur. 887 00:36:32,890 --> 00:36:34,760 Do la dekstra flanko supozeble, tuj 888 00:36:34,760 --> 00:36:37,170 destini ke granda eron de memoro kiel? 889 00:36:37,170 --> 00:36:38,340 Do ni turmentus tiu aparte. 890 00:36:38,340 --> 00:36:41,131 >> Ĝi estas abrumadora unuavide, sed kio okazas interne tie? 891 00:36:41,131 --> 00:36:43,740 Unue, ekzistas malloc, kiu estas ŝajne nia nova amiko, 892 00:36:43,740 --> 00:36:45,450 "Memoro destini." 893 00:36:45,450 --> 00:36:49,560 Do tio estas la argumento aprobotaj en ĝin, do ĝi estas iom granda argumento. 894 00:36:49,560 --> 00:36:50,970 Do ni turmentus tiu aparte. 895 00:36:50,970 --> 00:36:53,410 >> strlen de s kompreneble reprezentas the-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 Aŭdienco: La nombro de karakteroj. 898 00:36:55,600 --> 00:36:56,710 DAVID J. Malan: Ĝuste la nombro de signoj en s. 899 00:36:56,710 --> 00:36:59,040 Do la longeco de s, la originalo kordo. 900 00:36:59,040 --> 00:37:00,350 Do G-a-b-e. 901 00:37:00,350 --> 00:37:02,320 Do estas probable kvar en tiu kazo. 902 00:37:02,320 --> 00:37:05,485 Kial mi faras +1 post nomante strlen de s? 903 00:37:05,485 --> 00:37:06,360 Publiko: [inaudible] 904 00:37:06,360 --> 00:37:07,590 DAVID J. Malan: Por speciala nula karaktero. 905 00:37:07,590 --> 00:37:11,260 Se vi demandas min kio estas la longo de Gabe nomon, mi tuj diros kvar. 906 00:37:11,260 --> 00:37:14,480 Sub la kastris, kvankam mi bezonos ke kvina bajton por la nula karaktero. 907 00:37:14,480 --> 00:37:16,100 Tial do mi faras la +1. 908 00:37:16,100 --> 00:37:21,730 >> Nun ĉiaokaze vi kuras ĉi programo en komputilo escepte, diru, 909 00:37:21,730 --> 00:37:24,610 la CS50 aparaton, kie la grandeco de char 910 00:37:24,610 --> 00:37:26,350 povus esti malsama de miaj propraj computer-- 911 00:37:26,350 --> 00:37:30,590 Rezultas ke mi povas nomi ĉi operatoro sizeof, simple peti la komputilon, 912 00:37:30,590 --> 00:37:32,870 kio estas la grandeco de char en tiu komputilo? 913 00:37:32,870 --> 00:37:37,400 >> Kaj multiplikante kvin en tiu Ekzemple per la grandeco de char, kiu 914 00:37:37,400 --> 00:37:40,440 en plej komputiloj nur unu, malloc 915 00:37:40,440 --> 00:37:44,830 tuj rezervu por mi tiu granda eron de memoro super tie dekstre. 916 00:37:44,830 --> 00:37:47,140 Kaj tuj return-- estas function-- do estas 917 00:37:47,140 --> 00:37:48,265 tuj revenos mi, kio? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 Aŭdienco: La adreso? 920 00:37:51,830 --> 00:37:53,709 DAVID J. Malan: La adreso de kio? 921 00:37:53,709 --> 00:37:55,250 Publiko: De la memoro ĝi destinis? 922 00:37:55,250 --> 00:37:56,450 DAVID J. Malan: De la memoro gxin destinis. 923 00:37:56,450 --> 00:37:59,189 Do mi ne havas ideon, sincere, kie tiu tuj finos. 924 00:37:59,189 --> 00:38:01,480 Mi tuj proponas ke ĝi tuj finos en 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Tute arbitra, sed ie escepte 0x50, 927 00:38:06,009 --> 00:38:08,800 ĉar la mastruma sistemo, kio Windows kaj Mac VIN fari por mi, 928 00:38:08,800 --> 00:38:11,230 certiĝu ke ĝi estas donante Min malsamaj pecoj de memoro RAM. 929 00:38:11,230 --> 00:38:14,210 >> Do ĉi tio estas la valoro kie ĉi eron de memoro povus fini. 930 00:38:14,210 --> 00:38:16,060 Do jen kion finas ĉi tie, 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 Do nun klare, mi povas kompreni ke tio ne estas la sama kiel tiu, 933 00:38:21,570 --> 00:38:23,960 ĉar ili fingromontrante malsamaj blokoj de memoro. 934 00:38:23,960 --> 00:38:29,980 Do se mi nun vere volas kopii ĉi en, ni faru viajn proponis solvon. 935 00:38:29,980 --> 00:38:36,870 >> Ni simple iru, krei por buklo, kaj fari t krampo i akiras s krampo i. 936 00:38:36,870 --> 00:38:39,760 Ĉar mi nun povas uzi tiu tabelo simila skribmaniero, 937 00:38:39,760 --> 00:38:43,390 ĉar kvankam malloc tre genéricamente atribuas al mi memoro, 938 00:38:43,390 --> 00:38:45,290 memoro estas nur apudan bajtoj. 939 00:38:45,290 --> 00:38:47,240 Bajto, bitoko, bajto, malantaŭo al malantaŭo al dorso. 940 00:38:47,240 --> 00:38:50,030 >> Mi povas certe kiel programisto trakti ĝin kiel tabelo, kiu 941 00:38:50,030 --> 00:38:55,090 signifas mi povas uzi tiun fine familiara skribmaniero de nur kelkaj kvadrataj krampoj. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> Do lasu min paŭzi tie, ĉar tio estas multa ĉiuj samtempe, eĉ 944 00:39:00,020 --> 00:39:03,530 kvankam la baza ideo recap estas tiu linio, ĉiu ĉi tiu tempo, 945 00:39:03,530 --> 00:39:05,550 ne estas nova datumtipo mem. 946 00:39:05,550 --> 00:39:10,150 Estas nur tiel nomataj montrilo, adreso de gravulo, 947 00:39:10,150 --> 00:39:12,650 kiu signifas nur estas nombro ke per homa konvencio 948 00:39:12,650 --> 00:39:15,350 Ni emas skribi kiel 0x ion. 949 00:39:15,350 --> 00:39:18,590 >> Sed estas nur nombro, kiel 33 Oxford Street, 950 00:39:18,590 --> 00:39:20,530 kio okazas al esti la CS konstruaĵa adreso. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 Demandojn pri tiuj detaloj? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 Yeah? 955 00:39:25,289 --> 00:39:28,530 >> Publiko: Kial ni kontrolu por t egalas Nula? 956 00:39:28,530 --> 00:39:30,740 >> DAVID J. Malan: Kial ni kontroli t egalas Nula? 957 00:39:30,740 --> 00:39:33,250 Se ni legas la documentation-- grandan question-- por malloc, 958 00:39:33,250 --> 00:39:37,020 ĝi tuj diros en fajna print, kelkfoje malloc povus reveni nula, 959 00:39:37,020 --> 00:39:38,080 ĝuste kiel GetString. 960 00:39:38,080 --> 00:39:41,820 Kaj efektive, GetString revenas nula se, laŭvice, malloc revenas nula, 961 00:39:41,820 --> 00:39:43,130 ĉar GetString uzas malloc. 962 00:39:43,130 --> 00:39:46,400 >> Kaj tio eble okazus se la VIN, Mac OS, Vindozo, kio ajn, simple 963 00:39:46,400 --> 00:39:48,130 el memoro por vi. 964 00:39:48,130 --> 00:39:49,820 Do jen kio okazis tie. 965 00:39:49,820 --> 00:39:52,910 >> Kaj lasu min malkaŝi unu alia afero kiuj povus simple forblovi menso 966 00:39:52,910 --> 00:39:55,100 aŭ plene estos malproksima super la linio. 967 00:39:55,100 --> 00:39:59,770 Sed lasu min eltiri supren la sama por buklo por kopiado, 968 00:39:59,770 --> 00:40:05,480 kiuj antaŭ momento, recall estis ĉi. t krampo i akiras s krampo i. 969 00:40:05,480 --> 00:40:06,740 >> Nice kaj uzanto-amika. 970 00:40:06,740 --> 00:40:09,330 Sentas Semajno Du denove. 971 00:40:09,330 --> 00:40:14,920 Sed tiu versio efektive povas esti reskribita kiel tiu, kiu aspektas kamufla. 972 00:40:14,920 --> 00:40:18,280 Estas tekniko nomita montrilo aritmetiko, adreso aritmetiko. 973 00:40:18,280 --> 00:40:19,600 Sed kial tio funkcias? 974 00:40:19,600 --> 00:40:22,220 >> Nun annoyingly, La aŭtoroj de C decidis uzi 975 00:40:22,220 --> 00:40:25,070 la * simbolo por malsamaj celoj. 976 00:40:25,070 --> 00:40:29,020 Ni vidis gxin uzata fojon jam, char *, kiu signifas "doni al mi variablo 977 00:40:29,020 --> 00:40:31,210 ke tuj enhavos la adreso de char ". 978 00:40:31,210 --> 00:40:33,990 Do char * en tiu kunteksto signifas "doni al mi variablo." 979 00:40:33,990 --> 00:40:40,050 >> Bedaŭrinde, se vi uzas la * sen vorto antaŭ ĝi, kiel signo, 980 00:40:40,050 --> 00:40:41,905 ĝi nun nomata la dereference operatoro. 981 00:40:41,905 --> 00:40:43,530 Kaj ni vidos pli de ĉi antaux longe. 982 00:40:43,530 --> 00:40:44,930 Sed ĝi nur signifas "iri tien." 983 00:40:44,930 --> 00:40:49,070 Estas kiel diri: se iu enmanigis al mi sur peco de papero "33 Oxford Street" 984 00:40:49,070 --> 00:40:53,830 se mi faras "* 33 Oxford Street," kiu signifas "Iru laŭ la vojo al la CS konstruaĵo." 985 00:40:53,830 --> 00:40:57,220 >> Do * simple signifas iri tien se ne estas vorto antaŭ ĝi. 986 00:40:57,220 --> 00:40:59,100 Do kio estas t, esti klara? 987 00:40:59,100 --> 00:41:03,250 t estas la adreso de la eron de memoro kiu estis redonita al mi. 988 00:41:03,250 --> 00:41:06,650 s estas la adreso de kio, por esti klara, en la ekzemplo ni estis diskutante, 989 00:41:06,650 --> 00:41:07,500 de minuskla Gabe? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 s estas la adreso of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 Aŭdienco: La ŝnuro. 994 00:41:12,460 --> 00:41:14,126 DAVID J. Malan: De Gabe originala nomo. 995 00:41:14,126 --> 00:41:16,660 Do estas la adreso de tio eron de memoro. 996 00:41:16,660 --> 00:41:22,220 Do se mi diras t + i-- i, avizo, Estas nur nia malnova amiko. 997 00:41:22,220 --> 00:41:24,770 Estas nur indekso variablo ke estas ripetanta el nulo sur supren 998 00:41:24,770 --> 00:41:26,960 la longo de la kordo s. 999 00:41:26,960 --> 00:41:30,367 Do tuj estos nulo, tiam, poste du, poste tri, kvar. 1000 00:41:30,367 --> 00:41:33,200 Do ni invitu tiujn novajn Scratch-kiel puzlo pecoj, se vi volas, 1001 00:41:33,200 --> 00:41:36,140 kvankam, denove, la sintakso Estas multe pli arcano ol Scratch. 1002 00:41:36,140 --> 00:41:39,522 Do t estas adreso + i tuj donas al mi 1003 00:41:39,522 --> 00:41:42,480 numero, ĉar tiuj estas ĉiuj numeroj kiuj ni estis desegno kiel deksesuma. 1004 00:41:42,480 --> 00:41:43,560 Sed ili estas nur ciferoj. 1005 00:41:43,560 --> 00:41:49,960 >> Do se la adreso de t ni diris Estis 0x88, kio estas 0x88 plus nulo. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Eĉ se vi ne estas komforta kun hex tamen prenu diveno. 1008 00:41:53,980 --> 00:41:54,410 >> Aŭdienco: La originala. 1009 00:41:54,410 --> 00:41:55,850 >> DAVID J. Malan: Ankoraŭ 0x88. 1010 00:41:55,850 --> 00:41:58,910 Do kion signifas * 0x88 signifas? 1011 00:41:58,910 --> 00:42:02,670 Ĝi signifas, "iru tie" signifas efektive, "metu vian fingron tien." 1012 00:42:02,670 --> 00:42:06,930 Kaj nun en la dekstra flanko de tiu esprimo, * kaj tiam en parens, 1013 00:42:06,930 --> 00:42:11,586 s + i signifas s, kiu estas la alparoli tien la malgranda g. 1014 00:42:11,586 --> 00:42:16,220 s + 0 estas, kompreneble, s ajn s. 1015 00:42:16,220 --> 00:42:21,230 >> Do nun, estas * s, kiu same kiel * 33 Oxford Street signifas iri al la adreso 1016 00:42:21,230 --> 00:42:22,010 ejon. 1017 00:42:22,010 --> 00:42:24,170 Do jen tiu fingro, dekstra mano. 1018 00:42:24,170 --> 00:42:26,050 Do kion mi povos kopii en kio? 1019 00:42:26,050 --> 00:42:30,260 La afero sur la dekstra, kiu estas Gabe, iom g tie, en ĉi tie. 1020 00:42:30,260 --> 00:42:32,750 >> Kaj tial la efiko de tiu unua ripeto de la ciklo, 1021 00:42:32,750 --> 00:42:36,200 kiel vi proponis, kvankam ĝi aspektas freneza pli komplika ol nenio 1022 00:42:36,200 --> 00:42:42,110 ni vidis antaŭe, estas simple diri iri tie kaj kopii tiun karakteron tie. 1023 00:42:42,110 --> 00:42:44,700 Ĝi donas al vi mapon al ambaŭ lokoj. 1024 00:42:44,700 --> 00:42:46,130 >> Kaj ni vidos multe pli de tio. 1025 00:42:46,130 --> 00:42:50,600 Sed nuntempe, la espero estas nur enkonduki iujn de tiujn bazajn ideojn. 1026 00:42:50,600 --> 00:42:53,550 Kaj efektive, ni rigardu unu fina programo tie ĉi, 1027 00:42:53,550 --> 00:42:57,480 kaj tiam la promesita Claymation, kiu faros ĉiu ordo. 1028 00:42:57,480 --> 00:42:57,980 Bone. 1029 00:42:57,980 --> 00:43:01,680 Do lasu min malfermi up-- tie ni iros. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 Do lasu me-- ni revenos al ĉi foton antaŭ longe. 1032 00:43:05,440 --> 00:43:08,360 Lasu min malfermi tiu fina ekzemplo tie. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> Do tie estas super, super Programo kiu plenumas 1035 00:43:12,710 --> 00:43:15,050 nenio en la vivo kiu faras la sekvan. 1036 00:43:15,050 --> 00:43:18,740 Ĝi unue deklaras du variabloj x kaj y, kiuj ne estas nombroj tiu fojo, 1037 00:43:18,740 --> 00:43:19,240 mem. 1038 00:43:19,240 --> 00:43:20,448 Ili ne estas entjeroj mem. 1039 00:43:20,448 --> 00:43:22,899 Ili estas ŝajne int *. 1040 00:43:22,899 --> 00:43:25,690 Do nur iu, kion ĝi signifas se via datumtipo, vian variablon, 1041 00:43:25,690 --> 00:43:26,860 estas de tipo int * stelo? 1042 00:43:26,860 --> 00:43:30,240 Jen la adreso de int. 1043 00:43:30,240 --> 00:43:31,990 >> Do mi havas neniun ideon kie ankoraŭ. 1044 00:43:31,990 --> 00:43:35,150 Ĝi simple signifas "meti, eventuale, la adreso de int tie. " 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, kie ajn ĝi estas en memoro, adreso iras tien. 1046 00:43:38,340 --> 00:43:40,200 Kaj tio estas kion y estas tuj estos, kiel bone. 1047 00:43:40,200 --> 00:43:44,920 >> Se mi nun diras x = malloc (sizeof (int)) tio estas fantazio maniero diri, 1048 00:43:44,920 --> 00:43:49,000 hey mastruma sistemo, pere malloc, donu al mi sufiĉan memoron por la grandeco 1049 00:43:49,000 --> 00:43:52,370 de int, kiu estas probable tuj estos 32 bitoj aŭ kvar bitokoj. 1050 00:43:52,370 --> 00:43:53,680 >> Do kion signifas malloc reveni? 1051 00:43:53,680 --> 00:43:55,250 Malloc revenas adreson. 1052 00:43:55,250 --> 00:43:57,020 Do kio okazas al get stokitaj en x? 1053 00:43:57,020 --> 00:44:00,600 La adreso de la eron de memoro, la kvar bajtoj, kiuj malloc 1054 00:44:00,600 --> 00:44:03,360 nur trovis min demandante la mastruma sistemo. 1055 00:44:03,360 --> 00:44:08,240 >> Nun dume, linio kvar tie, la * x = 42. 1056 00:44:08,240 --> 00:44:09,990 Nur por esti klara, kio okazas tie? 1057 00:44:09,990 --> 00:44:11,530 Sur la maldekstra flanko, * x. 1058 00:44:11,530 --> 00:44:13,610 jen kiel * 33 Oksfordostrato. 1059 00:44:13,610 --> 00:44:15,523 Do * x signifas kion? 1060 00:44:15,523 --> 00:44:16,450 >> Publiko: Iru. 1061 00:44:16,450 --> 00:44:17,908 >> DAVID J. Malan: Iru al tiu adreso. 1062 00:44:17,908 --> 00:44:20,466 Kien tiu bloko de memoro estas, iru al ĝi. 1063 00:44:20,466 --> 00:44:21,979 Kaj metu kio, evidente? 1064 00:44:21,979 --> 00:44:22,520 Publiko: 42. 1065 00:44:22,520 --> 00:44:23,580 DAVID J. Malan: 42. 1066 00:44:23,580 --> 00:44:25,650 Bone, * y, sama ideo. 1067 00:44:25,650 --> 00:44:26,860 Iru al la adreso en y. 1068 00:44:26,860 --> 00:44:31,740 Metu la numero 13 tie, sed kio estas y en la momento? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 Publiko: Ne estas memoro por y. 1071 00:44:34,630 --> 00:44:35,710 DAVID J. Malan: Tie Estas neniu memoro por y. 1072 00:44:35,710 --> 00:44:38,215 Do kio faras y probable enhavas, kiel ni estis dirante? 1073 00:44:38,215 --> 00:44:38,520 >> Publiko: Garbage. 1074 00:44:38,520 --> 00:44:39,480 >> DAVID J. Malan: Kelkaj rubo valoro. 1075 00:44:39,480 --> 00:44:41,320 Nun, rubo valoro ankoraŭ estas numero. 1076 00:44:41,320 --> 00:44:43,160 Ĝi povas ankoraŭ esti konfuzita adreson. 1077 00:44:43,160 --> 00:44:45,160 Estas kvazaŭ iu haste ion malsupren, 1078 00:44:45,160 --> 00:44:48,002 kaj mi malinterpretado kiel signifo iu konstruaĵo laŭ la strato. 1079 00:44:48,002 --> 00:44:50,460 Kaj se vi simple provu iri en iu konstruaĵo vi ne posedas, 1080 00:44:50,460 --> 00:44:53,710 aŭ iun eron de memoro vi havas ne estis donita, malbonaj aferoj povus okazi. 1081 00:44:53,710 --> 00:44:57,740 Komputila povus frakasi, aŭ iuj aliaj nedifinitaj konduto povus okazi. 1082 00:44:57,740 --> 00:45:01,310 >> Do la intro do al Binky estas tiu. 1083 00:45:01,310 --> 00:45:04,290 Mi ankoraŭ memoras, 20 iuj neparaj jaroj poste, 1084 00:45:04,290 --> 00:45:07,200 kie mi estis kiam mi fine komprenis punteros. 1085 00:45:07,200 --> 00:45:09,520 >> Kio estas, se vi lasi tie en tri minutoj 1086 00:45:09,520 --> 00:45:12,170 kaj ke mi ne faras kompreni punteros, realigi 1087 00:45:12,170 --> 00:45:14,410 Mi memoris 20 jaroj por iu freneza kialo 1088 00:45:14,410 --> 00:45:17,140 Kiam kaj kial ĝi fine enprofundigita en, sidis kun mia instruado 1089 00:45:17,140 --> 00:45:19,501 ulo, Nishat Mehta en la dorso de Eliot Dining Hall. 1090 00:45:19,501 --> 00:45:21,250 Nun, mi memoris ĉar tio estis 1091 00:45:21,250 --> 00:45:23,920 unu el la temoj mi, aparta, baraktis kun. 1092 00:45:23,920 --> 00:45:26,470 Kaj tiam, ĝi fine klakis, kiel mi kuraĝas diri multajn temojn 1093 00:45:26,470 --> 00:45:27,460 eventuale volos. 1094 00:45:27,460 --> 00:45:32,590 Kaj nun, por ke senti ĉiuj feliĉaj kaj ĉiuj pli konvinka, 1095 00:45:32,590 --> 00:45:35,360 ni prenu lastan rigardon en nia lastaj tri minutoj tie ĉe Binky, 1096 00:45:35,360 --> 00:45:37,675 de nia amiko, Nick Parlante de Stanford. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [VIDEO Playback] 1099 00:45:41,580 --> 00:45:42,750 >> -Hey, Binky. 1100 00:45:42,750 --> 00:45:43,500 Vekiĝu! 1101 00:45:43,500 --> 00:45:45,960 Estas tempo por montrilo amuza. 1102 00:45:45,960 --> 00:45:47,012 >> -Kio Estas tio? 1103 00:45:47,012 --> 00:45:48,723 Lernu pri punteros? 1104 00:45:48,723 --> 00:45:50,580 Ho, Goody! 1105 00:45:50,580 --> 00:45:53,563 >> -Well, Por komenci, mi supozas ke ni estas tuj bezonos paron punteros. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 Tiu kodo atribuas du punteros, kiu povas noti al entjeroj. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 Nu, mi vidas la du punteros, sed Ne ŝajnas esti indikante nenion. 1110 00:46:02,140 --> 00:46:02,980 >> -Tio Pravas. 1111 00:46:02,980 --> 00:46:05,100 Komence, punteros ne indikas ion. 1112 00:46:05,100 --> 00:46:08,030 Tion notas al nomiĝas pointees kaj fiksante ilin la 1113 00:46:08,030 --> 00:46:09,370 aparta paŝo. 1114 00:46:09,370 --> 00:46:10,220 >> -Oh, Dekstra, rajto. 1115 00:46:10,220 --> 00:46:10,950 Mi sciis tion. 1116 00:46:10,950 --> 00:46:12,385 La pointees estas apartaj. 1117 00:46:12,385 --> 00:46:14,315 Er, do kiel vi rezervu pointee? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 Nu, tiu kodo atribuas nova entjero pointee, 1121 00:46:18,970 --> 00:46:20,950 kaj tiu parto aroj x atentigi al tio. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> -Hey, Kiuj aspektas bona. 1124 00:46:23,230 --> 00:46:25,060 Do fari ion fari. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 Mi timige dereference la montrilo x stoki la numero 42 en ĝian pointee. 1127 00:46:30,455 --> 00:46:32,830 Por tiu lertaĵo, mi bezonas mian Magia Sceptro de Dereferencing. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> -Your Magic Wand de Dereferencing? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 That-- tio granda. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -tio Estas kion la kodo aspektas. 1134 00:46:41,080 --> 00:46:44,110 Mi ĵus starigis la numeron, kaj [POP] 1135 00:46:44,110 --> 00:46:44,700 >> -Hey Rigardu. 1136 00:46:44,700 --> 00:46:46,140 Tie iras. 1137 00:46:46,140 --> 00:46:50,980 >> -So Faras dereference sur x sekvas la sago por aliri lia pointee. 1138 00:46:50,980 --> 00:46:53,160 En tiu kazo, oni tendencas 42 en tie. 1139 00:46:53,160 --> 00:46:57,710 Hej provos uzi ĝin por stoki la nombro 13 tra la alia puntero, y. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 Mi simple iri tien al y, kaj ricevi la numeron 13 aro supren. 1142 00:47:03,270 --> 00:47:07,930 Kaj tiam prenu la Sceptro de Dereferencing kaj ĝuste [Buzz] 1143 00:47:07,930 --> 00:47:08,960 >> -Oh! 1144 00:47:08,960 --> 00:47:09,500 >> -Oh, Hey! 1145 00:47:09,500 --> 00:47:11,090 Tio ne funkcios. 1146 00:47:11,090 --> 00:47:15,630 Diru, Binky, mi ne kredas dereferencing y estas bona ideo, ĉar vi scias, 1147 00:47:15,630 --> 00:47:17,850 starigadon de la pointee estas aparta paŝo. 1148 00:47:17,850 --> 00:47:20,450 Kaj mi ne kredas ke ni iam faris. 1149 00:47:20,450 --> 00:47:21,480 >> -Good Punkto. 1150 00:47:21,480 --> 00:47:21,980 -Yeah. 1151 00:47:21,980 --> 00:47:25,680 Ni asignitaj la montrilo y, sed ni neniam starigis ŝin atentigi al pointee. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -Very Observanto. 1154 00:47:28,616 --> 00:47:30,240 -Hey, Vi serĉas bonon tie, Binky. 1155 00:47:30,240 --> 00:47:33,400 Ĉu vi povas ripari ĝin tiel ke y punktoj al la sama pointee kiel x? 1156 00:47:33,400 --> 00:47:34,000 >> -Sure. 1157 00:47:34,000 --> 00:47:36,780 Mi uzas mian Magian Wand de Pointer Assignment. 1158 00:47:36,780 --> 00:47:38,740 >> -is Ke tuj estos problemo kiel antaŭe? 1159 00:47:38,740 --> 00:47:39,240 -No. 1160 00:47:39,240 --> 00:47:40,660 Ĉi tio ne tuŝas la pointees. 1161 00:47:40,660 --> 00:47:44,450 Ĝi nur ŝanĝas unu puntero al notas al la sama aĵo kiel la alia. 1162 00:47:44,450 --> 00:47:45,450 >> -Oh, Mi vidas. 1163 00:47:45,450 --> 00:47:48,200 Nun y punktoj al la sama loko kiel x. 1164 00:47:48,200 --> 00:47:48,910 Do atendu. 1165 00:47:48,910 --> 00:47:49,950 Nun, y estas fiksita. 1166 00:47:49,950 --> 00:47:51,120 Ĝi havas pointee. 1167 00:47:51,120 --> 00:47:54,510 Do vi povas provi la Sceptro de Dereferencing denove sendi la 13 pli. 1168 00:47:54,510 --> 00:47:56,510 >> -Uh, OK. 1169 00:47:56,510 --> 00:47:58,160 Tie iras. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> -Hey, Rigardu tiun. 1171 00:47:59,340 --> 00:48:00,750 Nun dereferencing verkoj pri y. 1172 00:48:00,750 --> 00:48:04,991 Kaj ĉar la punteros estas dividi ke oni pointee, ili ambaŭ vidas la 13. 1173 00:48:04,991 --> 00:48:05,490 -Yeah. 1174 00:48:05,490 --> 00:48:06,870 Dividi ajn. 1175 00:48:06,870 --> 00:48:08,820 Do ni tuj ŝanĝi lokojn nun? 1176 00:48:08,820 --> 00:48:09,440 >> Ho, rigardu. 1177 00:48:09,440 --> 00:48:10,830 Ni estas el la tempo. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> -Just Memoras la tri montrilo reguloj. 1180 00:48:13,530 --> 00:48:16,560 Number One, la baza strukturo estas ke vi havas puntero, 1181 00:48:16,560 --> 00:48:18,680 kaj antaŭ ol al pointee. 1182 00:48:18,680 --> 00:48:20,640 Sed la puntero kaj pointee estas apartaj, 1183 00:48:20,640 --> 00:48:22,610 kaj la komuna eraro estas starigi montrilo, 1184 00:48:22,610 --> 00:48:25,000 sed forgesi doni pointee. 1185 00:48:25,000 --> 00:48:28,170 >> Numero Du, puntero dereferencing komenciĝas ĉe la montrilo 1186 00:48:28,170 --> 00:48:31,050 kaj sekvas lian sagon super aliri lia pointee. 1187 00:48:31,050 --> 00:48:33,400 Kiel ni ĉiuj scias, tiu nur funkcias se estas 1188 00:48:33,400 --> 00:48:36,270 oni pointee, kiu speco de ricevas reen al Rule Number One. 1189 00:48:36,270 --> 00:48:39,000 >> Nombro Tri, montrilo asigno prenas unu montrilo 1190 00:48:39,000 --> 00:48:42,320 kaj ŝanĝas ĝin al punkto al la sama pointee kiel alia puntero. 1191 00:48:42,320 --> 00:48:44,160 Do post la farita, la du montriloj 1192 00:48:44,160 --> 00:48:45,910 notos al la sama pointee. 1193 00:48:45,910 --> 00:48:47,990 Foje, kiuj nomiĝas dividi. 1194 00:48:47,990 --> 00:48:49,740 Kaj jen ĉio estas al ĝi, vere. 1195 00:48:49,740 --> 00:48:50,277 Bye-bye nun. 1196 00:48:50,277 --> 00:48:51,110 [FINO VIDEO Playback] 1197 00:48:51,110 --> 00:48:52,568 DAVID J. Malan: Estas tio por CS50. 1198 00:48:52,568 --> 00:48:55,110 Ni vidos vin proksima semajno. 1199 00:48:55,110 --> 00:48:56,064