1 00:00:00,000 --> 00:00:03,395 >> [MUZIKO Ludante] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 DAVID J. Malan: Ĉi tio estas kiel unuajarulo seminario hodiaŭ. 4 00:00:13,280 --> 00:00:14,060 BONE. 5 00:00:14,060 --> 00:00:15,024 Do pluva eksteren. 6 00:00:15,024 --> 00:00:17,690 Ĉi inklinas okazi merkrede, sed des pli ŝanco 7 00:00:17,690 --> 00:00:18,700 por demandoj hodiaŭ. 8 00:00:18,700 --> 00:00:22,210 Do ni dividi reale kun la filmo en nur momento. 9 00:00:22,210 --> 00:00:24,560 Sed ni komencu grandioze kiel ĉiam. 10 00:00:24,560 --> 00:00:28,000 >> Jen CS50, kaj ĉi tiu estas la fino de semajno 4. 11 00:00:28,000 --> 00:00:30,820 Do se vi iam spektis TV aŭ filmo en kiu 12 00:00:30,820 --> 00:00:34,690 ekzistas iuj komputilaj spertuloj kaj la polico, aŭ la FBI, aŭ iu agentejo 13 00:00:34,690 --> 00:00:36,930 provas kapti iun kontraŭulo, nu, vi havas 14 00:00:36,930 --> 00:00:40,850 probable aŭdis la esprimon "plibonigi" whereby ke teknikisto iel 15 00:00:40,850 --> 00:00:44,750 magie zooms en malfinie malproksime vidi la krimulojn 16 00:00:44,750 --> 00:00:48,640 identecon aŭ la numerplaton nombro en eĉ la brilanta spegulo 17 00:00:48,640 --> 00:00:50,390 aŭ la ekbrilon de ies okulo. 18 00:00:50,390 --> 00:00:55,196 Do ja, ni rigardu kelkaj tiaj scenoj de Hollywood. 19 00:00:55,196 --> 00:00:55,862 [VIDEO reprodukto] 20 00:00:55,862 --> 00:00:59,243 -OK, Nun ni akiri bonan rigardu. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Hold Ĝin. 23 00:01:07,415 --> 00:01:08,267 Kuru ke reen. 24 00:01:08,267 --> 00:01:09,121 >> -Atendu minuton. 25 00:01:09,121 --> 00:01:11,300 Iru dekstren. 26 00:01:11,300 --> 00:01:12,209 >> -There, Frosti tio. 27 00:01:12,209 --> 00:01:12,750 -Plenekrane. 28 00:01:12,750 --> 00:01:13,558 -OK, Frosti tio. 29 00:01:13,558 --> 00:01:14,820 -Tighten Sur tio, ĉu vi? 30 00:01:14,820 --> 00:01:16,530 -Vector Super tiu ulo de la rado trasera. 31 00:01:16,530 --> 00:01:19,400 -Zoom En ĝuste ĉi tie sur ĉi tiu loko. 32 00:01:19,400 --> 00:01:22,846 -Kun La dekstra teamo, la bildo povus esti pligrandigita kaj akraj. 33 00:01:22,846 --> 00:01:24,065 -Kio estas tio? 34 00:01:24,065 --> 00:01:25,600 -ĝi An plifirmigo programo. 35 00:01:25,600 --> 00:01:26,860 -Can Vi certe ke ĝis ajna? 36 00:01:26,860 --> 00:01:27,890 -Mi ne scias. 37 00:01:27,890 --> 00:01:29,050 Ni plibonigos gxin. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Sekcio Al6. 39 00:01:31,575 --> 00:01:33,642 >> -I Plibonigita detale, kaj-- Mi kredas, ke estas 40 00:01:33,642 --> 00:01:35,433 sufiĉas plibonigi, liberigas ĝin al mia ekrano. 41 00:01:35,433 --> 00:01:37,080 -I Plibonigita la reflekto en ŝia okulo. 42 00:01:37,080 --> 00:01:38,830 >> -Let Kuros ĉi tra video plibonigo. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Vi povas plibonigi ĉi? 44 00:01:40,100 --> 00:01:41,875 >> -Atendu. 45 00:01:41,875 --> 00:01:44,010 >> -Mi Laboris pri ĉi tiu interkonsiliĝo. 46 00:01:44,010 --> 00:01:44,995 >> -Someone Rebrilon. 47 00:01:44,995 --> 00:01:45,495 -Reflection. 48 00:01:45,495 --> 00:01:47,399 -There Estas reflektado de la homa vizaĝo. 49 00:01:47,399 --> 00:01:48,065 -La Reflekto. 50 00:01:48,065 --> 00:01:48,981 -There Estas reflekto. 51 00:01:48,981 --> 00:01:50,600 -Zoom En la spegulo. 52 00:01:50,600 --> 00:01:52,712 -Vi Povas vidi reflekto. 53 00:01:52,712 --> 00:01:54,350 -Can Vi plibonigas la bildon de ĉi tie? 54 00:01:54,350 --> 00:01:55,370 -Can Vi plibonigas lin ĝuste ĉi tie? 55 00:01:55,370 --> 00:01:56,210 -Can Vi plibonigi ĝin? 56 00:01:56,210 --> 00:01:56,900 Ĉu vi povas plibonigi ĝin? 57 00:01:56,900 --> 00:01:57,870 >> -Can Ni plibonigi ĉi? 58 00:01:57,870 --> 00:01:58,717 >> -Can Vi plibonigi ĝin? 59 00:01:58,717 --> 00:02:00,050 -Hold Sur dua, mi plibonigas. 60 00:02:00,050 --> 00:02:00,924 -Zoom En sur la pordo. 61 00:02:00,924 --> 00:02:01,700 -Times 10. 62 00:02:01,700 --> 00:02:02,586 -Zoom. 63 00:02:02,586 --> 00:02:03,490 -Move En. 64 00:02:03,490 --> 00:02:03,990 -More. 65 00:02:03,990 --> 00:02:04,690 -Wait, Ĉesi. 66 00:02:04,690 --> 00:02:05,190 -Stop. 67 00:02:05,190 --> 00:02:05,970 -Pause Ĝin. 68 00:02:05,970 --> 00:02:09,460 -Rotate Ni 75 gradoj ĉirkaŭ la vertikala, bonvolu. 69 00:02:09,460 --> 00:02:10,962 -Stop. 70 00:02:10,962 --> 00:02:14,040 Reiru al la parto pri la pordon denove. 71 00:02:14,040 --> 00:02:15,860 >> -Got Bildon enhancer kiu povas bitmap? 72 00:02:15,860 --> 00:02:18,776 >> -Hey, Eble ni povas uzi la Pradeep Sen metodo vidi en la fenestroj. 73 00:02:18,776 --> 00:02:20,372 -Ĉi Programaro estas stato de la arto. 74 00:02:20,372 --> 00:02:21,845 >> -La Ajgeno estas for. 75 00:02:21,845 --> 00:02:24,300 >> -Kun La dekstra kombino de algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> -Li Estas prenita elimino algoritmoj al la sekva nivelo, 77 00:02:26,755 --> 00:02:28,730 kaj mi povas uzi ilin Plibonigi tiu fotografaĵo. 78 00:02:28,730 --> 00:02:31,286 >> -Lock Sur kaj disvastigu la z-akso. 79 00:02:31,286 --> 00:02:32,560 >> -Enhance. 80 00:02:32,560 --> 00:02:33,100 >> -Enhance. 81 00:02:33,100 --> 00:02:33,600 >> -Enhance. 82 00:02:33,600 --> 00:02:34,960 -Freeze Kaj plibonigi. 83 00:02:34,960 --> 00:02:37,180 >> [FINO reprodukto] 84 00:02:37,180 --> 00:02:41,160 >> DAVID J. Malan: Bone, do ĉiuj el tiuj estas fakte vortojn. 85 00:02:41,160 --> 00:02:44,450 Ili ĵus laĉis kune en maniero kiu estas ne reale saĝa. 86 00:02:44,450 --> 00:02:48,400 Kaj, fakte, CS50 kaj kursoj kiel ĝi inklinas ruinigi multon de TV kaj filmoj 87 00:02:48,400 --> 00:02:48,900 por vi. 88 00:02:48,900 --> 00:02:52,330 Ĉar kiam tiuj komputilaj fakuloj klakas for terminoj kaj dirante 89 00:02:52,330 --> 00:02:56,860 fancy aĵojn kiel ajgenvektoroj, kaj la z-akso, 90 00:02:56,860 --> 00:02:59,572 kaj ajna nombro da aliaj reale pli teknikaj terminoj, 91 00:02:59,572 --> 00:03:02,030 ili estas vere nur petoladi vortoj kune ĉiuj tro ofte. 92 00:03:02,030 --> 00:03:05,020 Estas tiu de nia espero estas ke, kiel kromefikon de preno kursoj 93 00:03:05,020 --> 00:03:08,245 kiel tiu, volo pli personoj en la mondo fakte povos levar en 94 00:03:08,245 --> 00:03:12,040 kaj nur iam tiel iomete influi la kvalito kaj precizeco de tiuj filmoj? 95 00:03:12,040 --> 00:03:14,350 >> Fakte, ni rigardu realaĵo. 96 00:03:14,350 --> 00:03:18,070 Do jen estas la personaro foto de Mary, unu el niaj instruado uloj. 97 00:03:18,070 --> 00:03:20,050 Kaj supozu ŝi estas suspektis ion. 98 00:03:20,050 --> 00:03:23,730 Kaj tamen, ekzistas eklumo de iu peco de evidenteco en ŝia okulo, 99 00:03:23,730 --> 00:03:25,480 aŭ en la reflekto de ŝia anteojos. 100 00:03:25,480 --> 00:03:30,760 Nu, se ni faros ĝuste kiel la filmoj proponi, kiun ni zomi kaj "plibonigi", 101 00:03:30,760 --> 00:03:34,080 ĉi estas kiom informo Estas en Mary vizaĝo 102 00:03:34,080 --> 00:03:36,795 kiam vi kapti bildon kun tiu originala distingivo. 103 00:03:36,795 --> 00:03:39,120 >> Kaj, fakte, vi povas vidi ĉi tiujn punktojn. 104 00:03:39,120 --> 00:03:41,900 Kaj tiuj estas kio estas nomata rastrumeroj, P-mi-x-E-L-S, 105 00:03:41,900 --> 00:03:45,740 kio estas nur kvadrata tipe ke estas skalara kiu formas bildon. 106 00:03:45,740 --> 00:03:49,200 Kaj reen en la tago, kaj fakte eĉ hodiaŭ kun iuj el hodiaŭa LED TVs 107 00:03:49,200 --> 00:03:51,950 aŭ LCD TVs, se vi hvas unu en via ĉambro aŭ en la domo, 108 00:03:51,950 --> 00:03:55,100 se vi iros super proksime al ĝi, kaj speciale se ĝi estas iom pli malnovaj televido, 109 00:03:55,100 --> 00:03:58,760 vi versxajne povas eĉ vidi tiujn punktojn kaj tio komponi bildon. 110 00:03:58,760 --> 00:04:00,980 >> Kaj ne ekzistas pli informo ol ĉi tiu. 111 00:04:00,980 --> 00:04:05,400 Ni povis "Plibonigi", en la senco de alisado aĵoj super kaj ia 112 00:04:05,400 --> 00:04:09,040 infiriendo ia, ia kio koloro devus esti apud Maria okulo 113 00:04:09,040 --> 00:04:10,910 tiel ke ĝi ne estas vere tiel pixelated. 114 00:04:10,910 --> 00:04:14,510 Sed se Mi tenas zoom en, ekzistas estas la fiulo en ŝia okulo. 115 00:04:14,510 --> 00:04:16,600 Kiel tio estas des informo ni havas. 116 00:04:16,600 --> 00:04:18,920 Vi ne povas krei informo el nenio. 117 00:04:18,920 --> 00:04:20,790 Ekzistas nur finia numeron de bitoj tie. 118 00:04:20,790 --> 00:04:22,873 >> Do en Problemo Serio 4, kie vi havos ŝancon 119 00:04:22,873 --> 00:04:24,580 ludi kun tiu speco de mondo. 120 00:04:24,580 --> 00:04:27,610 En Problemo Serio 4, vi esplori la mondo de grafikaĵoj kaj jura, 121 00:04:27,610 --> 00:04:30,870 kaj fakte skribi kodon kiu rekuperas perdis bildoj. 122 00:04:30,870 --> 00:04:33,510 Vi skribos kodo ke Manipulas ekzistantaj bildoj 123 00:04:33,510 --> 00:04:36,120 kaj finfine kompreni kio estas daŭriganta sub la kapuĉo. 124 00:04:36,120 --> 00:04:38,540 >> Kaj, verŝajne, ĝi estas fakte Ne ĉiuj kiuj komplika. 125 00:04:38,540 --> 00:04:41,320 Ekzemple, se ni volis reprezenti smiley vizaĝo kie 126 00:04:41,320 --> 00:04:44,160 kun tiuj nigraj rastrumeroj, aŭ tiujn nigrajn punktojn, 127 00:04:44,160 --> 00:04:47,230 Nu, ni povus simple reprezenti ilin kiel vere bitmap. 128 00:04:47,230 --> 00:04:50,040 Kaj se vi iam aŭdis ke esprimo bitmap, eble 129 00:04:50,040 --> 00:04:52,330 ĝi nun komencas fari iom pli sentita hodiaŭ. 130 00:04:52,330 --> 00:04:53,580 >> Ni jam scias kio iom estas. 131 00:04:53,580 --> 00:04:54,160 Ĝi estas 0 aŭ 1. 132 00:04:54,160 --> 00:04:56,201 Kaj mapo estas nur io Kiel peco de papero 133 00:04:56,201 --> 00:04:59,180 kiu donas al vi direktoj kaj havas eble krado de x- kaj y-koordinatoj. 134 00:04:59,180 --> 00:05:00,540 Do tie estas bitmap. 135 00:05:00,540 --> 00:05:03,680 Estas mapo de bitoj per a 1 estas ŝajne 136 00:05:03,680 --> 00:05:07,857 tuj reprezenti blankan bildero, kaj 0 tuj reprezenti nigra pikselo. 137 00:05:07,857 --> 00:05:09,440 Sed ni certe povus klaki ĝin ĉirkaŭ. 138 00:05:09,440 --> 00:05:11,648 Fakte ne gravos longe kiel ni estas konsekvenca. 139 00:05:11,648 --> 00:05:15,570 Kaj tie estas kiel, en binary-- interne de komputila memoro, aŭ eĉ interne 140 00:05:15,570 --> 00:05:18,160 de dosiero sur via malfacila drive-- povis memori 141 00:05:18,160 --> 00:05:20,240 la plej simpla de smiley vizaĝo bildoj. 142 00:05:20,240 --> 00:05:23,990 Sed kio estas ni, kompreneble, mankas en tiu bildo? 143 00:05:23,990 --> 00:05:24,610 Koloro, dekstra? 144 00:05:24,610 --> 00:05:28,220 Ĝi estas evidenta sekva paŝo aŭ plifirmigo plibonigi tiun kun koloro. 145 00:05:28,220 --> 00:05:32,230 Do bedaŭrinde kun nur unu bita, 0 aŭ 1, ni povus reprezenti koloro. 146 00:05:32,230 --> 00:05:36,100 Tio povus esti ruĝa, aŭ blua, aŭ nigra, aŭ blanka, aŭ verdaj aŭ rozkoloraj, 147 00:05:36,100 --> 00:05:37,420 aŭ ajna paroj da koloroj. 148 00:05:37,420 --> 00:05:40,860 Sed por simpleco, kalkaj, ni nur supozi nigra kaj blanka. 149 00:05:40,860 --> 00:05:45,930 >> Do kio logike fari ni bezonas se ni volas apliki koloro en bildo? 150 00:05:45,930 --> 00:05:49,080 Kion ni devas fari? 151 00:05:49,080 --> 00:05:51,900 Kiel se la limiganta faktoro tie estas ke per unu bito vi povas nur 152 00:05:51,900 --> 00:05:55,977 reprezenti du statojn, 0 aŭ 1, blanka aŭ nigra, kion vi volas fari? 153 00:05:55,977 --> 00:05:56,810 Publiko: Pli datumoj. 154 00:05:56,810 --> 00:05:58,813 DAVID J. Malan: Pli bitoj, yeah pli datumoj, pli bitojn. 155 00:05:58,813 --> 00:06:01,440 Kaj, efektive, jen precize kiel koloro bildoj estas reprezentitaj. 156 00:06:01,440 --> 00:06:05,120 Anstataŭ uzi solan iom, oni 0 aŭ 1 por ĉiu bildero, ĉiu punkto, 157 00:06:05,120 --> 00:06:06,170 vi nur uzu multnombraj. 158 00:06:06,170 --> 00:06:09,660 Eble uzi 8, eble, pli komune uzi 24, kaj ja, en Problemo Ara 159 00:06:09,660 --> 00:06:13,300 4, ĉu vi ludas kun dosiero formato kiu uzas 24 bitojn tipe. 160 00:06:13,300 --> 00:06:15,430 >> Sed precipe oni verŝajne familiara kun JPEG-oj. 161 00:06:15,430 --> 00:06:17,460 Se vi iam prenita foton sur via telefono, 162 00:06:17,460 --> 00:06:20,360 aŭ alŝutis aŭ vidis ion sur Facebook, aŭ Flickr, ajna nombro 163 00:06:20,360 --> 00:06:24,882 de foto-bazitaj retejoj, vi havas verŝajne vidis JPEG bildo antaŭe. 164 00:06:24,882 --> 00:06:27,840 Kaj ĝi rezultas, tiu estas la dosieron formato ni tuj uzi en pset 4, 165 00:06:27,840 --> 00:06:30,340 whereby vi tuj devas rekuperi bildoj 166 00:06:30,340 --> 00:06:35,160 ke mi akcidente forigita de koruptita memoro karto en la ĉambron, 167 00:06:35,160 --> 00:06:35,800 se vi volas. 168 00:06:35,800 --> 00:06:38,490 >> Kaj ĝi rezultas ke eĉ se JPEG estas bela sophisticated-- 169 00:06:38,490 --> 00:06:40,906 ĝi estas multe pli malnaiva ol la nigraj kaj blankaj punktoj 170 00:06:40,906 --> 00:06:44,480 ni vidis antaŭ momento, ĉar estas fakte imago algoritmoj kiuj 171 00:06:44,480 --> 00:06:47,410 estas uzataj por kunpremi JPEG, do ke vi povas havi vere bela, 172 00:06:47,410 --> 00:06:49,832 kvalito bildon sed uzante relative malmultajn bitoj. 173 00:06:49,832 --> 00:06:51,790 Kaj ni revenos al kunpremado antaŭ longe. 174 00:06:51,790 --> 00:06:56,280 Ĝi rezultas ke la unua tri bajtoj en JPEG image-- 175 00:06:56,280 --> 00:07:02,750 negrave kion vi prenis foton of-- estas la valoroj 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Alivorte, se vi nur vidu ŝablono de bitoj, 177 00:07:05,990 --> 00:07:09,180 reprezentita tie kiel tri bajtoj, aŭ 24 bitoj entute, 178 00:07:09,180 --> 00:07:13,810 kun alta probablo povas konkludi ke vi rigardas ĝin ĉi unuaj tri 179 00:07:13,810 --> 00:07:15,230 bajtoj de JPEG. 180 00:07:15,230 --> 00:07:18,040 Kaj tiu estas kio estas konata kiel la signumo de JPEG. 181 00:07:18,040 --> 00:07:20,540 Multa dosiero formatojn tie ekstere emas komenci 182 00:07:20,540 --> 00:07:23,735 kun certaj ŝablonoj de _0s_ kaj _1s_, por ke Windows kaj Mac VIN kaj iOS, 183 00:07:23,735 --> 00:07:28,272 kaj Android scias kia dosiero ili Estas, aldone al la tn dosieron 184 00:07:28,272 --> 00:07:29,730 etendo ke multajn dosierojn havas. 185 00:07:29,730 --> 00:07:32,590 Se vi .jpg, jen Alia aŭtoveturejo al la komputilo. 186 00:07:32,590 --> 00:07:35,310 >> Do ni nun rigardas ĉi iom pli teknike. 187 00:07:35,310 --> 00:07:37,390 Ni scias la dekuma sistemo estas 0 tra 9. 188 00:07:37,390 --> 00:07:38,740 Ni scias duuma estas 0 kaj 1. 189 00:07:38,740 --> 00:07:41,842 Kaj se vi pensas reen al pset 0, ni devis lukti kun vi, 190 00:07:41,842 --> 00:07:43,800 por iomete, io nomata deksesuma, 191 00:07:43,800 --> 00:07:47,320 kie vi havas 16 ciferoj, anstataŭ 10 aŭ anstataŭ 2. 192 00:07:47,320 --> 00:07:50,405 Kaj tiuj ciferoj, per konvencio, Estas 0 tra 9 kaj tiam 193 00:07:50,405 --> 00:07:55,040 tra f, kie f reprezentas kio dekuma nombro, same rapidan prudento 194 00:07:55,040 --> 00:07:56,640 kontroli? 195 00:07:56,640 --> 00:07:57,610 Do, 15. 196 00:07:57,610 --> 00:08:01,390 Kaj devas reprezenti la 10, kun nur naturo de la ordenamiento ke mi donis. 197 00:08:01,390 --> 00:08:04,350 Estas nur arbitra konvencio, sed ĝi estas sufiĉe normo. 198 00:08:04,350 --> 00:08:06,870 >> Do se ni rigardas tiun skemon de tri bitokoj ni 199 00:08:06,870 --> 00:08:09,620 komencu rigardi ĝin en maniero kongrua kun kiel 200 00:08:09,620 --> 00:08:12,450 komputikistoj ĝenerale rigardi kaj pensi pri dosieroj. 201 00:08:12,450 --> 00:08:15,580 Vi certe povas pensi pri dosieroj en _0s_ kaj _1s_, kaj decimala, 202 00:08:15,580 --> 00:08:19,340 sed fakte, ni inklinas uzi duuma aŭ pli tipe hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 reen de pset 0. 204 00:08:20,760 --> 00:08:25,857 Do mi proponas ke 255, 216, kaj 255 estas nur tiuj ŝablonoj de _0s_ kaj _1s_. 205 00:08:25,857 --> 00:08:28,440 Kaj vi povas kontroli ĝin se vi deziras fari la math de Semajno 0. 206 00:08:28,440 --> 00:08:30,810 Sed, nuntempe, nur supozas ke cxi tiu estas vere ĝentilaj. 207 00:08:30,810 --> 00:08:33,850 Mi ĵus reskribita tri decimalaj numerojn kiel tri binarajn valorojn. 208 00:08:33,850 --> 00:08:36,100 Nun kio mi tuj faros estas nur aldoni iu blanka spaco, 209 00:08:36,100 --> 00:08:37,266 nur por legibilidad gajno. 210 00:08:37,266 --> 00:08:39,940 Kaj rimarki, mi simple tuj movi aferojn dise. 211 00:08:39,940 --> 00:08:43,090 Do antaŭ, post, antaŭ, post. 212 00:08:43,090 --> 00:08:46,180 Mi faras nenion interesan aliaj ol nur disvastigado aferojn tiel 213 00:08:46,180 --> 00:08:50,380 ke avizo ĉiu aro de ok bitoj estas nun du aroj de kvar bitoj. 214 00:08:50,380 --> 00:08:54,920 Tio estas utila ĉar deksesuma estas aparte modo 215 00:08:54,920 --> 00:09:00,930 ĉar ĉiu deksesuma cifero 0 tra f, aŭ pli specife 0 tra 15, 216 00:09:00,930 --> 00:09:03,430 povas esti prezentita kun precize kvar bitoj. 217 00:09:03,430 --> 00:09:07,960 En aliaj vortoj, en deksesuma se volas reprezentas 0, estas nur 0000, 218 00:09:07,960 --> 00:09:08,780 kvar nuloj. 219 00:09:08,780 --> 00:09:13,997 Kaj se vi volas reprezenti 15 ĝi estas 1111, kiu estas kvar bitoj. 220 00:09:13,997 --> 00:09:16,080 Kaj se vi faros la math, se tiu estas la ones loko, 221 00:09:16,080 --> 00:09:18,210 tiu estas la 16s loko, ke tuj doni you-- 222 00:09:18,210 --> 00:09:19,960 prefere ke tuj to-- bedaŭras, en duuma, 223 00:09:19,960 --> 00:09:23,660 ke tuj donos vin 15, tiuj loko, duope loko, kvarpiede kaj Eights loko. 224 00:09:23,660 --> 00:09:26,821 Do mi proponas ke tiu aro de kvar bitoj maldekstre 225 00:09:26,821 --> 00:09:28,070 estas kion ni tuj voki f. 226 00:09:28,070 --> 00:09:30,110 Ĝi estas la plej granda nombro vi povas reprezenti kun kvar bitoj. 227 00:09:30,110 --> 00:09:33,300 Kaj ni jam scias el deksesuma, f estas la plej granda cifero en deksesuma. 228 00:09:33,300 --> 00:09:36,020 Ni havas alian f tie, du pli tie. 229 00:09:36,020 --> 00:09:38,980 Kaj nuntempe, nur prenu sur fidon ke mi faris la math dekstra 230 00:09:38,980 --> 00:09:41,890 kaj ke la maldekstra duono de tiuj bitoj, 1101, 231 00:09:41,890 --> 00:09:43,980 Estas la sama afero kiel d en deksesuma. 232 00:09:43,980 --> 00:09:46,490 Kaj dekstre, 1000, estas nur 8. 233 00:09:46,490 --> 00:09:48,140 >> Kaj ke onia facile vidi, ĉu ne? 234 00:09:48,140 --> 00:09:51,670 La 8 represents-- pravas sub tiu Eights loko. 235 00:09:51,670 --> 00:09:56,040 Do ni havas unu en la Eights kolumno kaj nenio en la kvarpiede, duope aŭ ones. 236 00:09:56,040 --> 00:09:59,830 Do nun pli konvencie, homoj emas skribi deksesumaj ciferoj kiel tiu, 237 00:09:59,830 --> 00:10:03,000 vi nur squish ilin kune, kaj tiam vi prefiksu ilin kun 0x. 238 00:10:03,000 --> 00:10:05,920 Ĝi signifas nenion alian ol vida indico al human-- 239 00:10:05,920 --> 00:10:10,350 tie venas deksesuma value-- ĉar ĝi povus ne alie esti evidentaj. 240 00:10:10,350 --> 00:10:13,629 >> Kiu estas, finfine, ke desegnon de nuloj kaj, 241 00:10:13,629 --> 00:10:16,170 aŭ la bildon de deksesuma ciferoj ekvivalente ke vi estas 242 00:10:16,170 --> 00:10:18,990 tuj komenci serĉi en Problemo Serio 4 estas this-- 243 00:10:18,990 --> 00:10:22,120 kaj la Problemo Ara 4 spec piediros vin tra ĉi en pli detail-- 244 00:10:22,120 --> 00:10:25,344 sed konscias kiel ia arcano kiel ĉi povus rigardi unua rigardo, 245 00:10:25,344 --> 00:10:27,010 vi tuj komencu vidante tiun amason. 246 00:10:27,010 --> 00:10:30,320 Kaj fakte, eĉ en GDB, La erarserĉilo ni enkondukis lundon 247 00:10:30,320 --> 00:10:35,440 kaj Dan enkondukas en pset 3, tuj ofte montras vin deksesumaj valoroj 248 00:10:35,440 --> 00:10:39,910 nur ĉar ili inklinas esti pli konvencia ol dekuma aŭ duuma 249 00:10:39,910 --> 00:10:41,157 en la mondo de komputiloj. 250 00:10:41,157 --> 00:10:42,490 Nun ni kunigu ĉi en kunteksto. 251 00:10:42,490 --> 00:10:48,040 Multaj de vi eble memoras tiun bildigi tie, kiuj venis de kio? 252 00:10:48,040 --> 00:10:51,240 Vido, tiel eĉ pli frue ol ke, Vindozo XP faris ĉi debuto. 253 00:10:51,240 --> 00:10:52,620 Do tiu estas belega pejzaĝo. 254 00:10:52,620 --> 00:10:55,940 Kaj fakte, se vi poke ĉirkaŭ online-- Mi kredas ke estas Vikipedia artikolo, 255 00:10:55,940 --> 00:11:00,110 kien iu tre mirige eliris trovis tiun lokon en la mondo starigita 256 00:11:00,110 --> 00:11:02,240 sian ĉambron en precize la dekstra place-- 257 00:11:02,240 --> 00:11:06,510 kaj tio hodiaŭ aspektas like-- sed ĝi estas precize la sama scenaro. 258 00:11:06,510 --> 00:11:10,060 Ĉi tiu bildo, tamen, estas en dosiero formato nomata bitmap, b-m-p. 259 00:11:10,060 --> 00:11:12,910 Kaj ni iras preni la super fulman ekrigardon al kion tio signifas. 260 00:11:12,910 --> 00:11:17,770 >> Sed bitmap estas nur malsama maniero de reprezentanta bildoj ankoraŭ uzanta rastrumeroj 261 00:11:17,770 --> 00:11:19,580 en _0s_ kaj _1s_, finfine. 262 00:11:19,580 --> 00:11:23,282 Sed ĉe rapida ekrigardo, ĝi havas pli interesa subskribo 263 00:11:23,282 --> 00:11:24,490 komence de la dosiero. 264 00:11:24,490 --> 00:11:26,670 Ĝi estas ne nur tri bajtoj, prefere ekzistas 265 00:11:26,670 --> 00:11:30,770 tuta aro da ŝablonoj de bajtoj kiuj antaŭdeterminita signifon. 266 00:11:30,770 --> 00:11:34,490 Ekzemple, ie en la unuaj bajtoj de bitmap bildo 267 00:11:34,490 --> 00:11:37,440 tuj estos la grandeco de la bildo, la larĝo de la bildo, 268 00:11:37,440 --> 00:11:40,390 la alteco de la bildo, tiel utila metadatenojn, se vi volas. 269 00:11:40,390 --> 00:11:43,940 Utilaj informoj Photoshop aŭ ajna grafiko plani vi uzas 270 00:11:43,940 --> 00:11:45,180 efektive povus zorgi pri. 271 00:11:45,180 --> 00:11:47,170 >> Do pli en tiu en Problemo Ŝanĝu 4, sed ĉi 272 00:11:47,170 --> 00:11:49,220 Nur diri ke ĉe la fino de la tago 273 00:11:49,220 --> 00:11:52,390 ĉiuj dosierformojn vi estis uzante por years-- Microsoft Word dosierojn, 274 00:11:52,390 --> 00:11:55,820 Nombroj dosieroj, Excel dosierojn, ajna nombro de dosieraj formatoj 275 00:11:55,820 --> 00:11:57,770 ke havu iom konata dosiersufikso 276 00:11:57,770 --> 00:12:00,130 estas nur _0s_ kaj 1s sub la kapuĉo. 277 00:12:00,130 --> 00:12:02,970 Kaj homoj decidis kion la konvencioj estas, 278 00:12:02,970 --> 00:12:08,340 kion ŝablonoj de _0s_ kaj _1s_ reprezenti Vorto file kontre Excel dosiero, 279 00:12:08,340 --> 00:12:10,322 kontre ajnan numeron de aliaj dosieraj formatoj. 280 00:12:10,322 --> 00:12:12,780 Do en pset 4, vi havos ŝanco ludi kun tio. 281 00:12:12,780 --> 00:12:14,405 >> Sed kion ĝi signifas havi struct. 282 00:12:14,405 --> 00:12:18,012 Tiu estas fakte bela segue nun en C, kiu havas nur kelkajn 283 00:12:18,012 --> 00:12:20,220 de suplementaj ĉefaĵoj ke Ni ne rigardis ankoraŭ. 284 00:12:20,220 --> 00:12:24,230 Ĝi estas bela malgranda lingvo kaj unu el la agrablaj trajtoj pri C estas struct. 285 00:12:24,230 --> 00:12:27,300 Ekzemple, se vi volis represent-- ni 286 00:12:27,300 --> 00:12:33,690 diru vi volis havi variablo kiu reprezentas studento en iu programo. 287 00:12:33,690 --> 00:12:37,330 Eble vi skribis kurson registriĝo programon, aŭ kernon butikumado 288 00:12:37,330 --> 00:12:38,870 ilo, aŭ io simila. 289 00:12:38,870 --> 00:12:42,922 Kio estas pecoj de datumoj rilatigitaj al studento kiu venas al la menso? 290 00:12:42,922 --> 00:12:44,880 Kiel studento estas reprezentitaj kun kio valoroj? 291 00:12:44,880 --> 00:12:45,732 Yeah? 292 00:12:45,732 --> 00:12:46,940 Vi havas nomon kiel studento. 293 00:12:46,940 --> 00:12:48,900 Kion alian pruvas tipa studento havas? 294 00:12:48,900 --> 00:12:49,320 >> Spektantaro: [inaudible] 295 00:12:49,320 --> 00:12:50,200 >> DAVID J. Malan: Do, pardonon. 296 00:12:50,200 --> 00:12:50,660 >> Publiko: Aĝo. 297 00:12:50,660 --> 00:12:52,980 >> DAVID J. Malan: An o naskiĝtago ekvivalente, Yep. 298 00:12:52,980 --> 00:12:53,557 Kion alian? 299 00:12:53,557 --> 00:12:54,390 Publiko: ID numeron? 300 00:12:54,390 --> 00:12:57,460 DAVID J. Malan: Do IRU nombro, eble telefonnumero, eble dormejo, aŭ domo, 301 00:12:57,460 --> 00:12:58,670 aŭ altlernejo, aŭ io simila. 302 00:12:58,670 --> 00:13:01,820 Ajna numero de pecoj de datumoj kiuj vi havu en via kontaktolisto 303 00:13:01,820 --> 00:13:03,890 Estas kion povus difini studento. 304 00:13:03,890 --> 00:13:08,490 Do se ni volis fari tiun, en kodo, ni povus fari ion simplan kiel tiu. 305 00:13:08,490 --> 00:13:15,670 Ni povus havi programon por ke Havas ni diru, int main (void). 306 00:13:15,670 --> 00:13:18,920 Kaj se mi volas reprezenti studento mi havu, ekzemple, 307 00:13:18,920 --> 00:13:24,330 ŝnuro nomita nomo por tiu lernanto, ŝnuro nomita dormejo por tiu lernanto, 308 00:13:24,330 --> 00:13:26,900 eble int nomata ID por tiu studento. 309 00:13:26,900 --> 00:13:30,840 Kaj ĉar mi uzas ĉenon, mi bezonas iri returne, kaj starigu cs50.h. 310 00:13:30,840 --> 00:13:33,300 Eble mi tuj bezonas stdio.h. 311 00:13:33,300 --> 00:13:38,190 Do lasu min preemptively fari tiujn kaj mi estas tuj nomas tiun student.c nuntempe 312 00:13:38,190 --> 00:13:40,080 kaj savi tion. 313 00:13:40,080 --> 00:13:44,206 >> Kaj nun mi povas fari ion kun ĉi tiuj variabloj. 314 00:13:44,206 --> 00:13:46,830 Kaj ni ĵus tuj skribi ke kiel komento en pseŭdo kodo, 315 00:13:46,830 --> 00:13:48,829 ĉar ĝi ne estas interesa kion ni faru nun. 316 00:13:48,829 --> 00:13:51,242 Bone, do ĉi estas programo kiu iel stokas studento. 317 00:13:51,242 --> 00:13:53,450 Kion mi volas fari se mi volas konservi du studentoj? 318 00:13:53,450 --> 00:13:55,991 Do mia unua instinkto tuj esti bone, atendu minuton, 319 00:13:55,991 --> 00:14:01,920 se mi havas alian studenton kial ne mi nur faru ŝnuron nomo 2, kordoj dormejo 2, 320 00:14:01,920 --> 00:14:04,190 int id2. 321 00:14:04,190 --> 00:14:06,540 Kaj ni faris iritaj malsupren ĉi vojo antaŭ 322 00:14:06,540 --> 00:14:10,890 kaj kio estis nia solvo al kio ŝajnas esti afabla de hackish kopion pasto 323 00:14:10,890 --> 00:14:11,555 laboron tie? 324 00:14:11,555 --> 00:14:12,346 Publiko: Tabelo. 325 00:14:12,346 --> 00:14:13,830 DAVID J. Malan: Yeah, Ni povus uzi tabelo. 326 00:14:13,830 --> 00:14:15,620 Dekstra tiu tre rapide iĝas maloportunaj. 327 00:14:15,620 --> 00:14:18,453 Vi devas ordigi de arbitre komenci enoficigi ĉiuj de ĉi tiuj variabloj. 328 00:14:18,453 --> 00:14:22,190 Kaj vi, la homo, devas konservi spuri ke OK Nomo 2 respektivas 329 00:14:22,190 --> 00:14:25,060 kun dorm2 korespondas kun id2. 330 00:14:25,060 --> 00:14:26,200 Ĝi nur iĝas salaton. 331 00:14:26,200 --> 00:14:29,350 Do estas multe pli facile, memoras de antaŭ kelkaj semajnoj, 332 00:14:29,350 --> 00:14:34,300 nur devi nomita kordoj nomoj kaj eble doni nin tri el tiuj. 333 00:14:34,300 --> 00:14:36,940 Kaj tiam eble ni havas string dormejoj kaj havas 334 00:14:36,940 --> 00:14:41,900 tri el tiuj, aŭ kun konstanta, int ids kaj havas tri el tiuj. 335 00:14:41,900 --> 00:14:45,250 Sed eĉ nun tiu sentas iom fuŝa, dekstre. 336 00:14:45,250 --> 00:14:49,440 Ni parolas pri studentoj kaj tamen Mi vere logxado sur la malalta nivelo 337 00:14:49,440 --> 00:14:50,470 efektivigo detaloj. 338 00:14:50,470 --> 00:14:52,790 La studento estas nomo kaj dormejo kaj ID. 339 00:14:52,790 --> 00:14:59,814 >> Kial mi ne simple deklaras variablon nomita studento kaj nomas ĝin s. 340 00:14:59,814 --> 00:15:02,230 Kaj se mi volas alia studento, kial ne mi simple nomas ĝin t. 341 00:15:02,230 --> 00:15:05,260 Aŭ se mi volas tutan faskon de studentoj, kial ne mi simple 342 00:15:05,260 --> 00:15:09,740 diri mi havas tuta klaso de studentoj, kaj estas tri de ili. 343 00:15:09,740 --> 00:15:12,470 Alivorte, kial mi ne povas veni supren kun mia propra datumtipo, nomita 344 00:15:12,470 --> 00:15:15,641 Studentoj, interne de kiu estas nomo, estas IRU, estas dormejo, 345 00:15:15,641 --> 00:15:16,890 estas ajna nombro da aliaj kampoj. 346 00:15:16,890 --> 00:15:19,030 Kaj ĝi rezultas vin povas fari precize tion. 347 00:15:19,030 --> 00:15:21,850 >> Do C havas ĉi trajto nomita struct. 348 00:15:21,850 --> 00:15:24,700 Ke estas lingvo karakterizaĵo kiu nin permesas fari ĝuste tion. 349 00:15:24,700 --> 00:15:28,370 Mi tuj iros antaŭen kaj malfermu structs.h 350 00:15:28,370 --> 00:15:32,299 kien ni iras, por rigardi la sekvante difino de lernanto. 351 00:15:32,299 --> 00:15:35,215 Rezultas - kaj ĉi tiu estas eĉ simpla ol la unu implikante ID 352 00:15:35,215 --> 00:15:36,080 antaŭ momento. 353 00:15:36,080 --> 00:15:39,120 Se vi volas veni kun via homemade datumtipo, 354 00:15:39,120 --> 00:15:42,750 kaj krome al int, kaj char kaj flosi kaj ĉiuj tiuj aliaj kiuj ekzistas, 355 00:15:42,750 --> 00:15:45,810 vi povas fari tion per laŭvorte skribanta typedef struct, 356 00:15:45,810 --> 00:15:47,880 tiam iuj krispa krampoj, ene de kiu vi 357 00:15:47,880 --> 00:15:51,460 listigi la variabloj vi volas asocii kun ĉi tiu nova kutimo datumoj 358 00:15:51,460 --> 00:15:55,670 tajpas kiel nomo kaj dormejo, kaj tiam post la krispa krampoj 359 00:15:55,670 --> 00:15:57,860 vi doni nomon al la nova datumtipo. 360 00:15:57,860 --> 00:15:59,220 Do, ekzemple, studento. 361 00:15:59,220 --> 00:16:03,247 >> Kaj kio estas agrabla pri tio estas ke nun se ni rigardas la responda kodo, 362 00:16:03,247 --> 00:16:05,080 la kongreso, unua de ĉiuj, estas meti tiun 363 00:16:05,080 --> 00:16:08,230 en dosiero nomita ion skalara h, header dosiero, kiun ni havas ne 364 00:16:08,230 --> 00:16:09,780 komencis uzi mem tro multe. 365 00:16:09,780 --> 00:16:12,120 Sed ni tuj komencos uzante sufiĉe nun. 366 00:16:12,120 --> 00:16:18,650 Kaj kion ni povas fari kun tio, finfine, en tiuj malmultaj linioj de kodo 367 00:16:18,650 --> 00:16:22,130 estas deklari ĝuste ke datumtipo, studento. 368 00:16:22,130 --> 00:16:23,230 Kaj nun ni uzas ĝin. 369 00:16:23,230 --> 00:16:27,274 >> Mi tuj iros en dosiero nomata structs1.c. 370 00:16:27,274 --> 00:16:29,440 Kaj ni rigardu la kelkaj karakterizaĵoj tie. 371 00:16:29,440 --> 00:16:32,250 Do la aĵoj supren tie estas plejparte familiara, kaj ni 372 00:16:32,250 --> 00:16:35,040 revenu al kio ne familiara en nur momento. 373 00:16:35,040 --> 00:16:39,880 Tiu kompreneble estas inkludita mia propra kaplinio dosiero, kiu estas nova tiel, 374 00:16:39,880 --> 00:16:42,580 krom pset 3 kie, revokon, ni havas helpers.h. 375 00:16:42,580 --> 00:16:45,150 Do vi eble memoras #include helpers.h. 376 00:16:45,150 --> 00:16:49,381 >> Kial tamen mi uzas citilojn anstataŭ angulajn krampojn? 377 00:16:49,381 --> 00:16:50,630 Kiam mi elektas inter ili? 378 00:16:50,630 --> 00:16:52,310 Preskaŭ ĉiam mi ŝajnas uzi angulaj krampoj. 379 00:16:52,310 --> 00:16:55,040 Kaj tiam, subite sur linion ses Mi uzas citiloj. 380 00:16:55,040 --> 00:16:55,860 Kial povus esti? 381 00:16:55,860 --> 00:16:56,700 Yeah? 382 00:16:56,700 --> 00:16:57,725 >> Spektantaro: [inaudible] 383 00:16:57,725 --> 00:16:59,350 DAVID J. Malan: Tio fakta, kio? 384 00:16:59,350 --> 00:17:00,559 Publiko: Jen via IDE. 385 00:17:00,559 --> 00:17:02,475 DAVID J. Malan: Yeah, jen en mia fakta IDE. 386 00:17:02,475 --> 00:17:05,690 Kaj ni ne logxas en la IDE, ĉar tio estas nur ilo kiu mi uzas. 387 00:17:05,690 --> 00:17:08,119 Jen en mia nuna dosierujo, specife. 388 00:17:08,119 --> 00:17:11,647 Do structs.h estas mia propra dosiero ne instalita en la IDE, 389 00:17:11,647 --> 00:17:14,480 en la mastruma sistemo mem, prefere ĝi estas en mia aktuala dosierujo. 390 00:17:14,480 --> 00:17:16,910 Do la konvencio estas se vi volas inkluzivi vian propran kaplinio dosiero, 391 00:17:16,910 --> 00:17:18,200 vi simple uzi citiloj. 392 00:17:18,200 --> 00:17:23,290 >> Kion ni nomas tion en linio 8, ĝenerale parolanta? 393 00:17:23,290 --> 00:17:25,200 Jen kio? 394 00:17:25,200 --> 00:17:28,220 #define ion. 395 00:17:28,220 --> 00:17:31,040 Ĉi reprezentas konstantoj, dekstra? 396 00:17:31,040 --> 00:17:33,140 Se vi volas havi valoron en via programo 397 00:17:33,140 --> 00:17:35,110 ke vi uzas tutan faskon da fojoj, ĝi estas 398 00:17:35,110 --> 00:17:39,330 bona konvencio al faktoro ĝin, montros, kun la hash simbolo 399 00:17:39,330 --> 00:17:43,340 difini, tiam, per konvencio, en ĉiuj majuskle word-- kvankam ĝi ne estas 400 00:17:43,340 --> 00:17:45,320 strikte necesa, sed ĝi estas homa konvencio 401 00:17:45,320 --> 00:17:47,210 kapitaligi konstantoj por ke ili elsaltos 402 00:17:47,210 --> 00:17:50,380 ĉe vi visually-- spaco kaj tiam la valoro vi volas esti 403 00:17:50,380 --> 00:17:52,250 ekvivalenta al tiu konstanta nomo. 404 00:17:52,250 --> 00:17:56,110 Neniu punktokomo, sed vi simple sekvi tiun skemon tie. 405 00:17:56,110 --> 00:17:57,770 >> Do kion mi faras en ĉi fakta kodo. 406 00:17:57,770 --> 00:18:00,660 Do ni rigardu la ĉefa programo tie. 407 00:18:00,660 --> 00:18:04,080 En linio 12 ĉar mi inkluzivis structs.h, 408 00:18:04,080 --> 00:18:06,492 Mi nun havas magie ĉe mia dispono nova datumtipo. 409 00:18:06,492 --> 00:18:09,200 Mi ne nur havas aliron al int, kaj char, kaj kaleŝego, kaj ŝnuro, 410 00:18:09,200 --> 00:18:10,060 kaj blua kaj aliaj. 411 00:18:10,060 --> 00:18:12,470 Mi nun havas aliron al studento datumtipo. 412 00:18:12,470 --> 00:18:17,740 Do en linio 12, mi kombinante du ideas-- unu kutimo datumtipo kaj du, 413 00:18:17,740 --> 00:18:18,940 uzante tabelo. 414 00:18:18,940 --> 00:18:21,700 Kaj tiel en tiu programo se Mi volas reale apogi 415 00:18:21,700 --> 00:18:24,320 tri malsamaj studentoj en mia programo, mi 416 00:18:24,320 --> 00:18:30,480 povas simple diri al mi variablon nomata lernantoj, ĉiu el kiuj 417 00:18:30,480 --> 00:18:32,970 estas de tipo studentoj, kiuj Estas mia kutimo datumtipo. 418 00:18:32,970 --> 00:18:35,890 Kaj, specife, al mi tri el tiuj en mia tabelo. 419 00:18:35,890 --> 00:18:37,750 >> Do nun kion ni faras en ĉi tiu programo? 420 00:18:37,750 --> 00:18:40,670 Ĉi tie estas nur por buklo ripetanta de 0 al 3, ĉar tio estas 421 00:18:40,670 --> 00:18:42,110 kio la valoro de studentoj estas. 422 00:18:42,110 --> 00:18:44,420 Mi nur instigante la uzanto donu al mi la studenta nomo. 423 00:18:44,420 --> 00:18:48,090 Kaj poste en linio 17, ni havas plejparte familiara linio. 424 00:18:48,090 --> 00:18:50,370 Ni havas nian malnovan amikon GetString dekstre. 425 00:18:50,370 --> 00:18:52,345 Kaj kio peco de sintakso estas ŝajne nova, 426 00:18:52,345 --> 00:18:55,130 se vi neniam planita en C antaŭe, kaj neniam uzis la structs? 427 00:18:55,130 --> 00:18:55,510 Yeah? 428 00:18:55,510 --> 00:18:56,417 >> Publiko: La .name. 429 00:18:56,417 --> 00:18:57,500 DAVID J. Malan: La .name. 430 00:18:57,500 --> 00:19:01,220 Sed ĉi tio ne estas tro bona salto, ĉar nun studentoj heligas i 431 00:19:01,220 --> 00:19:02,590 donas vin la ia studento. 432 00:19:02,590 --> 00:19:04,730 Kaj se vi volas plonĝi ene de tiu strukturo, 433 00:19:04,730 --> 00:19:09,490 vi simple uzi ununuran periodo kaj tiam la nomo de la variablo interne, 434 00:19:09,490 --> 00:19:11,900 aŭ la proprieto ene ol vi deziras akiri aliron al. 435 00:19:11,900 --> 00:19:14,816 Simile do se mi tiam instigas la uzanto, donu al mi la studenta dormejo, 436 00:19:14,816 --> 00:19:18,390 Vi povas simile stoki ke ŝnuro en la dormejo variablo interne 437 00:19:18,390 --> 00:19:19,940 de tiu studento strukturo. 438 00:19:19,940 --> 00:19:21,410 >> Kaj nun aĵoj iom imago. 439 00:19:21,410 --> 00:19:24,420 Kaj tiu tuj serĉos ĉe eble multe tute baldaŭ. 440 00:19:24,420 --> 00:19:27,970 Sed vi vidos ĉi multe pli en pset 4, do ni nur rigardeto nun. 441 00:19:27,970 --> 00:19:33,364 Ĝi rezultas ke en linio 23 tra 38 Kion vi pensas ke mi eble faras? 442 00:19:33,364 --> 00:19:35,530 Mi forigis la komentojn por hodiaŭ, sed la versio 443 00:19:35,530 --> 00:19:38,660 de la kodo linio por referenco havas cxiujn komentojn. 444 00:19:38,660 --> 00:19:40,171 Kion mi ŝajnas esti faranta? 445 00:19:40,171 --> 00:19:42,530 >> Publiko: Savante la dosieron kun ĉiuj la informoj kiujn la uzanto eniris. 446 00:19:42,530 --> 00:19:44,530 >> DAVID J. Malan: Yeah, ĝuste, ĉi estas nova vojo 447 00:19:44,530 --> 00:19:46,370 ke ni vidas du, alia karakterizaĵo de C, 448 00:19:46,370 --> 00:19:48,700 per kiu mi povas krei mian propran dosierojn. 449 00:19:48,700 --> 00:19:51,580 Tiel ege, preskaŭ ĉiu programo vi skribis estas sennacia. 450 00:19:51,580 --> 00:19:53,334 Apenaŭ ĝi estas farita kuri, tio estas ĝi. 451 00:19:53,334 --> 00:19:55,000 Mankas memoro aŭ rememoro de ĝi. 452 00:19:55,000 --> 00:19:56,110 Mankas dosiero savita. 453 00:19:56,110 --> 00:19:58,120 Sed se vi volas savi eniga kiu havas 454 00:19:58,120 --> 00:20:02,100 okazis, kiel en ludo aŭ programo tiel, ĝi rezultas ni povas fari tion. 455 00:20:02,100 --> 00:20:04,360 Kaj vi vidos tion pli en pset 4 kaj sur Sekcio. 456 00:20:04,360 --> 00:20:08,661 Sed ĉi tiu linio 23 esence kreas dosiero nomata students.csv. 457 00:20:08,661 --> 00:20:10,160 Kaj vi eble vidis tion antaŭe. 458 00:20:10,160 --> 00:20:14,250 Eĉ se vi neniam studis CS antaŭe, CSV estas komo-disigita variabloj. 459 00:20:14,250 --> 00:20:19,000 Estas kiel tre povrulon versio de Excel dosiero, 460 00:20:19,000 --> 00:20:22,270 kio signifas, ke ĝi povis esti malfermita en Excel kaj en Apple Nombroj, 461 00:20:22,270 --> 00:20:23,830 kaj ĝi havas vicoj kaj kolumnoj. 462 00:20:23,830 --> 00:20:26,485 Sed ĝi ne estas mallibera formato kiel Microsoft aŭ Apple. 463 00:20:26,485 --> 00:20:29,840 Estas nur komoj disigante la valoroj kiujn ni vidos en momento. 464 00:20:29,840 --> 00:20:31,010 >> Kaj nur preni diveni. 465 00:20:31,010 --> 00:20:33,480 En linio 23, je la tre Fine, mia dua argumento 466 00:20:33,480 --> 00:20:37,700 al tiu nova funkcio nomita f malfermita por dosiero malferma estas w. 467 00:20:37,700 --> 00:20:39,430 Kio povus w signifi? 468 00:20:39,430 --> 00:20:40,022 Yeah? 469 00:20:40,022 --> 00:20:41,260 >> Spektantaro: Ĝi ebligas verki al la dosiero? 470 00:20:41,260 --> 00:20:42,630 >> DAVID J. Malan: ĝi ebligas vi skribas al la dosiero. 471 00:20:42,630 --> 00:20:44,810 Do ekzistas kelkaj variantoj ke ni povas konekti ĉi tie. 472 00:20:44,810 --> 00:20:47,184 Sed se vi nur volas legi la dosieron, kiuj estas rigardi ĝin 473 00:20:47,184 --> 00:20:50,010 kaj legis ĝin en memoro, vi nur uzu citaĵon unquote "r". 474 00:20:50,010 --> 00:20:53,110 Se vi volas skribi al la dosiero, vi uzu citaĵon unquote "w". 475 00:20:53,110 --> 00:20:55,190 Ekzistas ankaux append kaj paro de aliaj aĵoj 476 00:20:55,190 --> 00:20:57,356 se vi volas modifi ekzistantajn dosierojn. 477 00:20:57,356 --> 00:21:00,480 Nun ni tuj daŭre vidas ĉi aferon, tiam ni revenos al linio 24. 478 00:21:00,480 --> 00:21:02,640 NULL, tio rezultas, estas speciala valoro kiu 479 00:21:02,640 --> 00:21:06,070 povas esti resendita fare certaj funkcioj se iu iris wrong-- 480 00:21:06,070 --> 00:21:08,490 se la dosiero ne ekzistas, se vi elĉerpas de memoro, 481 00:21:08,490 --> 00:21:09,620 aŭ aro da aliaj eraroj. 482 00:21:09,620 --> 00:21:13,470 Sed nuntempe, ni nur supozas ke ĉi estas nur konvencia eraro kontrolanta. 483 00:21:13,470 --> 00:21:17,090 Tie en linio 26, mi ripetanta de 0 al 3 super ĉiuj miaj studentoj. 484 00:21:17,090 --> 00:21:20,470 Kaj jen estas ia speco de nova funkcio, fprintf, 485 00:21:20,470 --> 00:21:21,460 sed nur preni diveni. 486 00:21:21,460 --> 00:21:24,370 Se printf estas ĵus presita formatan kordoj, 487 00:21:24,370 --> 00:21:26,507 kion fprintf probable signifas? 488 00:21:26,507 --> 00:21:27,590 Publiko: Printu al dosiero. 489 00:21:27,590 --> 00:21:29,290 DAVID J. Malan: presi formatitan kordoj al dosiero. 490 00:21:29,290 --> 00:21:31,180 Tion la aldonaj f rimedoj estas dosiero. 491 00:21:31,180 --> 00:21:36,420 Kaj la nova unua argumento devas esti la variablo kiu reprezentas vian dosieron. 492 00:21:36,420 --> 00:21:38,866 Tiam ni simple havi formaton ŝnuro simple kiel printf. 493 00:21:38,866 --> 00:21:40,740 Kaj eĉ se tiu sintakso estas nova, tiu simple 494 00:21:40,740 --> 00:21:44,610 signifas ŝtopi en la studenta nomo, plug-in la studenta dormejo, kaj tiam 495 00:21:44,610 --> 00:21:47,160 kun fclose, fermi la dosieron. 496 00:21:47,160 --> 00:21:49,730 Kaj tiam lastly-- ĉi novas kaj ni revenos al tiu 497 00:21:49,730 --> 00:21:53,240 antaŭ long-- Mi liberigante la studento por kialoj 498 00:21:53,240 --> 00:21:54,860 kiu okazis super tie. 499 00:21:54,860 --> 00:21:56,820 Sed ni revenos por ke antaŭ long-- 500 00:21:56,820 --> 00:21:59,820 jen pro kiel GetString estas fakte laboras sub la kapuĉo. 501 00:21:59,820 --> 00:22:01,280 >> Do ni prenu rapidan rigardon tie. 502 00:22:01,280 --> 00:22:04,380 Se mi tajpas ls en mia dosierujo, rimarkos ke mi ne faras 503 00:22:04,380 --> 00:22:09,360 havi dosiero nomata students.csv, nur ne ekzistas, ne ekzistas. 504 00:22:09,360 --> 00:22:14,965 Do se mi nun kompili tiun programon, fari structs-1,. / structs-1, 505 00:22:14,965 --> 00:22:20,570 kaj mi tuj iros antaŭen kaj entajpu Andi, kiu loĝas en Berkeley ĉe Yale. 506 00:22:20,570 --> 00:22:26,350 Ni tuj devas Rob kiuj vivas en Thayer tiuj tagoj. 507 00:22:26,350 --> 00:22:33,760 Kaj ni venis supre kun kie estas, mi pensas, Maria estas en Mather, 508 00:22:33,760 --> 00:22:35,100 se mi memoris korekte. 509 00:22:35,100 --> 00:22:36,460 >> Do nenio ŝajnas okazi. 510 00:22:36,460 --> 00:22:40,680 Sed se mi tajpas ls nun, ekzistas students.csv. 511 00:22:40,680 --> 00:22:43,080 Ni iru antaŭen kaj malfermita students.csv. 512 00:22:43,080 --> 00:22:46,050 CXi tiun jam tre malpeza dosierformato. 513 00:22:46,050 --> 00:22:49,570 Sed mi simple adoptis konvencio ke mi havas du vicoj kaj kolumnoj tie. 514 00:22:49,570 --> 00:22:52,020 La unua kolumno estas popola unua nomoj. 515 00:22:52,020 --> 00:22:55,740 La dua kolumno estas la studenta dormejo, aŭ kolegio, aŭ domo, aŭ whatnot. 516 00:22:55,740 --> 00:22:57,900 Kaj nun mi savis tiun konstante en dosiero. 517 00:22:57,900 --> 00:22:59,280 >> Do estas ne cxiuj interesaj. 518 00:22:59,280 --> 00:23:02,980 Sed tio estas nur ŝtupo nun por povi persisti informo 519 00:23:02,980 --> 00:23:04,040 konstante. 520 00:23:04,040 --> 00:23:08,340 Do ni vidu, kion diras pli ni povas fari kun tiuj kaj aliaj karakterizaĵoj. 521 00:23:08,340 --> 00:23:10,729 Sed unue, demandojn? 522 00:23:10,729 --> 00:23:12,145 Tio estis multe, kaj tio estis rapida. 523 00:23:12,145 --> 00:23:16,131 Sed vi vidos multe pli en pset 4, ankaŭ. 524 00:23:16,131 --> 00:23:16,630 Yeah? 525 00:23:16,630 --> 00:23:19,360 >> Spektantaro: Ĉu ekzistas maniero daŭrigi aldonante nomoj al tiu dosiero? 526 00:23:19,360 --> 00:23:19,880 >> DAVID J. Malan: Bona demando. 527 00:23:19,880 --> 00:23:21,800 Ĉu ekzistas maniero por daŭrigi aldonante nomoj al tiu dosiero? 528 00:23:21,800 --> 00:23:22,340 Jes. 529 00:23:22,340 --> 00:23:24,630 Kaj, fakte, se vi finas supren remalfermo la dosiero, 530 00:23:24,630 --> 00:23:26,780 vi uzus citaĵo unquote "al" por append, 531 00:23:26,780 --> 00:23:31,090 kiu ĵus aldonas nova linio, nova linio denove kaj denove, precize. 532 00:23:31,090 --> 00:23:32,010 Bona demando. 533 00:23:32,010 --> 00:23:32,950 Aliaj demandoj? 534 00:23:32,950 --> 00:23:33,450 Yeah? 535 00:23:33,450 --> 00:23:35,580 Publiko: Se vi kuris la programo denove nun, 536 00:23:35,580 --> 00:23:38,000 ĉu teni aldonante nomoj al la dosiero aŭ ĝi estus malfermi novan dosieron? 537 00:23:38,000 --> 00:23:38,740 >> DAVID J. Malan: Ha, bona demando. 538 00:23:38,740 --> 00:23:41,448 Se vi kuris la programo denove pravas nun, eble entajpis novajn nomojn, 539 00:23:41,448 --> 00:23:44,820 ĉu aldoni al la dosiero aŭ anstataŭigi la dosieron? 540 00:23:44,820 --> 00:23:47,420 La lasta, ĉar mi estas Ne uzante append modo. 541 00:23:47,420 --> 00:23:49,930 Kaj ĉar mi estas nur blinde malfermante la dosieron por skribado, 542 00:23:49,930 --> 00:23:51,310 Ĝi simple tuj anstataŭigi la dosieron. 543 00:23:51,310 --> 00:23:54,570 Do mi ja devas fari estas append, se mi volas vere havas longdaŭran 544 00:23:54,570 --> 00:23:55,350 datumbazo. 545 00:23:55,350 --> 00:23:58,220 >> Nun CSV estas utila, sincere, eĉ cxar kiel se vi estas writing-- 546 00:23:58,220 --> 00:24:00,100 kaj ni eventuale vidi ĉi poste en la semestro kiam 547 00:24:00,100 --> 00:24:01,455 ni uzu CSVs por aliaj celoj. 548 00:24:01,455 --> 00:24:04,920 Se vi volas konservi ĉiujn la homoj kiuj registris por iu evento, 549 00:24:04,920 --> 00:24:07,420 aŭ subskribis supre por via studento grupo, aŭ io simila, 550 00:24:07,420 --> 00:24:10,330 stokante la datumoj en tiu speco de formato estas super oportuna. 551 00:24:10,330 --> 00:24:12,580 Ĉar laŭvorte, se mi estis elŝuti tiun dosieron. 552 00:24:12,580 --> 00:24:14,540 Mi povus double-- kaj ni vere provi tion 553 00:24:14,540 --> 00:24:16,720 se mi havas Excel aŭ Nombroj tie. 554 00:24:16,720 --> 00:24:19,130 >> Mi tuj dekstra-klako aŭ kontrolo alklaku mia dosiero. 555 00:24:19,130 --> 00:24:20,020 Whoops. 556 00:24:20,020 --> 00:24:21,830 Dekstra-klaki aŭ kontrolo alklaku mia dosiero. 557 00:24:21,830 --> 00:24:24,960 Venu, mia muso ne kunlaboranta. 558 00:24:24,960 --> 00:24:32,694 Download-- mi tuj elŝuti ĉiujn dosierojn tie tiel 559 00:24:32,694 --> 00:24:33,860 nur do mi povas ekpreni ĉi tiu. 560 00:24:33,860 --> 00:24:37,850 Kaj ni vidos se ĉi verkoj students.csv-- unuafoje 561 00:24:37,850 --> 00:24:39,310 Mi jam aktivigita. 562 00:24:39,310 --> 00:24:41,360 Nun ili volas vidi miajn kontaktojn. 563 00:24:41,360 --> 00:24:44,310 Nun, mi devas enregistri. 564 00:24:44,310 --> 00:24:47,620 Vidu kiel facile estas uzi CSVs? 565 00:24:47,620 --> 00:24:50,840 Jes, gardu ĝin ĝis dato. 566 00:24:50,840 --> 00:24:52,375 OK, Nun ni estas pretaj por klaso. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 OK, ho, kio novas? 569 00:25:00,370 --> 00:25:02,920 OK, proksima. 570 00:25:02,920 --> 00:25:04,750 Tio estis magia. 571 00:25:04,750 --> 00:25:07,280 OK, nun ni devas ĝisdatigi. 572 00:25:07,280 --> 00:25:10,890 Kaj nun, ĝi forgesis kion file Mi origine malfermiĝis, 573 00:25:10,890 --> 00:25:13,090 sed kion a-- tie ni iras. 574 00:25:13,090 --> 00:25:16,341 Bone, do nun ni havas Excel dosiero. 575 00:25:16,341 --> 00:25:18,290 Dankon. 576 00:25:18,290 --> 00:25:20,764 >> Bone, do kion mi faris estis la facila parto. 577 00:25:20,764 --> 00:25:23,930 Kompreneble mi povus havas pre-instalita Excel aŭ Nombroj, aŭ kion ajn programo. 578 00:25:23,930 --> 00:25:25,846 Sed tio estas agrabla, ĉar nun mi povas manipuli 579 00:25:25,846 --> 00:25:28,090 la datumojn en norma formato. 580 00:25:28,090 --> 00:25:30,294 >> Do nun ni kunteksto ŝanĝi al kie ni cxesis 581 00:25:30,294 --> 00:25:32,710 lasta tempo, kiu estis funkciigi demeti trejnado radoj. 582 00:25:32,710 --> 00:25:34,543 Sed unue, Vi ne vidu ĉi frua tagmanĝo 583 00:25:34,543 --> 00:25:38,150 Ankaux estas okazanta ĉi tie ĉe la fajro kaj Glacio en Kembriĝo, sitar en New Haven. 584 00:25:38,150 --> 00:25:43,150 Registriĝi sur CS50s retejo ASAP aliĝi CS50 studentoj kaj personaro. 585 00:25:43,150 --> 00:25:46,090 >> Do ni prenis trejnado radoj ekstere lunde kiel follows-- 586 00:25:46,090 --> 00:25:49,120 ŝnuro estis deklarita en CS50s biblioteko por iu tempo. 587 00:25:49,120 --> 00:25:52,650 Kaj ĝi estas bela, ĉar ĝi permesas nin paroli pri variabloj kiel estante 588 00:25:52,650 --> 00:25:54,660 kompletaj vortoj kaj frazoj kaj pli. 589 00:25:54,660 --> 00:25:56,710 Sed rezultu kordo ne ekzistas. 590 00:25:56,710 --> 00:26:00,200 Tio estas simple sinonimo, aŭ alias, ke ni kreis por iu kiu 591 00:26:00,200 --> 00:26:03,780 fakte estas iom pli teknika nomita char *. 592 00:26:03,780 --> 00:26:07,900 >> Kaj efektive, ni vidis ekzemplon de programo lunde 593 00:26:07,900 --> 00:26:11,200 kiu ne kondutas tute kiel ni atendis. 594 00:26:11,200 --> 00:26:13,630 Tio estis la dosieron, komparu-0. 595 00:26:13,630 --> 00:26:17,910 Kaj memoras ke kompari-0, se Mi rekompili lundo la programo 596 00:26:17,910 --> 00:26:22,670 kaj kuri kompari-0 kaj entajpu panjon en minuskle, kaj panjo en minuskla denove. 597 00:26:22,670 --> 00:26:25,320 La programo insistis mi tajpu malsamajn aferojn, 598 00:26:25,320 --> 00:26:29,210 kvankam panjo, ĉiuj en minuskle, estas identa vide. 599 00:26:29,210 --> 00:26:31,990 Do kio estis la mallonga respondo Kial la komputilo pensas 600 00:26:31,990 --> 00:26:34,500 tiuj du kordoj estas malsamaj? 601 00:26:34,500 --> 00:26:35,250 Yeah? 602 00:26:35,250 --> 00:26:36,534 >> Spektantaro: [inaudible] 603 00:26:36,534 --> 00:26:37,450 DAVID J. Malan: Ĝuste. 604 00:26:37,450 --> 00:26:39,600 Do, panjo, unuafoje Mi tajpu ĝin en, Estas estanta 605 00:26:39,600 --> 00:26:42,710 stokis ie en mia komputilo memoro sed en malsama loko 606 00:26:42,710 --> 00:26:44,690 ol la dua fojo mi tajpas en panjo. 607 00:26:44,690 --> 00:26:46,580 Nun certe povus esti optimumigita. 608 00:26:46,580 --> 00:26:49,205 La komputilo povis esti inteligenta kaj realigi tiujn du kordojn, hej, 609 00:26:49,205 --> 00:26:49,954 ili estas identaj. 610 00:26:49,954 --> 00:26:51,520 Nur mi ne redunde stoki ĝin. 611 00:26:51,520 --> 00:26:54,229 Sed komputiloj ne faros tion optimumigo se vi ne diros al ili. 612 00:26:54,229 --> 00:26:56,061 Do, implicite, ili estas nur tuj finos 613 00:26:56,061 --> 00:26:57,670 en du malsamaj lokoj en memoro. 614 00:26:57,670 --> 00:27:01,570 Kaj tiel esti pli klara, kiam ni komparas la du kordoj, 615 00:27:01,570 --> 00:27:03,950 la unua estis nomita s, la dua estis nomata 616 00:27:03,950 --> 00:27:08,530 t, kio specife estis mi komparante tie sur linio 13? 617 00:27:08,530 --> 00:27:09,494 Yeah. 618 00:27:09,494 --> 00:27:12,390 >> Spektantaro: Ĝi estas la loko en memoro ke la variablo indikos al. 619 00:27:12,390 --> 00:27:14,900 >> DAVID J. Malan: Ĝuste, mi trovis komparante la loko en memoro 620 00:27:14,900 --> 00:27:16,300 ke tiuj variabloj indikis. 621 00:27:16,300 --> 00:27:20,560 Do konkrete, se panjo estis ĉe bajto numeron 1, kaj 2, kaj 3, 622 00:27:20,560 --> 00:27:24,020 kaj 4-- ĉar memori la backslash 0 bezonas esti tute fine. 623 00:27:24,020 --> 00:27:29,420 Kaj la alia petskribo de panjo, E-o-m, Estis ĉe Adreso 10, 11, 12, kaj 13. 624 00:27:29,420 --> 00:27:33,100 Mi komparis 1, tiu adreso, ke loko en memoro, 625 00:27:33,100 --> 00:27:35,160 kontraŭ 10, kio estas evidente ne la samaj. 626 00:27:35,160 --> 00:27:36,260 1 ne 10. 627 00:27:36,260 --> 00:27:39,620 >> Do tiu estas bela en tiu ĝi estas bela simpla. 628 00:27:39,620 --> 00:27:42,870 Sed estas problema mezuro ni ne povas ŝajni kompari kordoj. 629 00:27:42,870 --> 00:27:44,930 Do fundamentally-- kaj je tiu malalta nivelo, 630 00:27:44,930 --> 00:27:47,300 se vi volis implementar programon por kompari 631 00:27:47,300 --> 00:27:50,270 du apartajn vortojn, ke la uzanto entajpis por kvalito, 632 00:27:50,270 --> 00:27:53,944 do ili laŭliniigi char por char, nur en ĝeneralaj terminoj, 633 00:27:53,944 --> 00:27:55,360 kion ni devas fari, ŝajne? 634 00:27:55,360 --> 00:27:57,940 Ĝi ne estas sufiĉa nur por rigardi tiujn du adresojn. 635 00:27:57,940 --> 00:27:58,860 Kion ni devas fari? 636 00:27:58,860 --> 00:27:59,360 Yeah? 637 00:27:59,360 --> 00:28:01,120 >> Publiko: persisti tra la kordoj [inaudible]. 638 00:28:01,120 --> 00:28:02,600 >> DAVID J. Malan: Yeah, ni persisti tra la kordoj. 639 00:28:02,600 --> 00:28:05,808 Ni uzos por ciklo, momenton buklo, aŭ ajn vi estas plej komforta kun. 640 00:28:05,808 --> 00:28:08,840 Kaj se ni havas du kordojn ie en memoro, ni rigardu ĉiu la 641 00:28:08,840 --> 00:28:11,770 unua signo, do ĉiu estas dua karaktero, tiam tria kaj kvara, 642 00:28:11,770 --> 00:28:15,206 kaj kvina, ĝis ni trafis kio specialaj sentinelo valoron? 643 00:28:15,206 --> 00:28:16,080 Spektantaro: [inaudible] 644 00:28:16,080 --> 00:28:18,800 DAVID J. Malan: Yeah, la backslash nulo, ĉe kiu punkto en ĉu kordo 645 00:28:18,800 --> 00:28:20,100 ni povas decidi kiuj estas ĝi. 646 00:28:20,100 --> 00:28:21,970 Ĉu ni kongruis ĉiu ununura karaktero? 647 00:28:21,970 --> 00:28:22,990 Se ne, reveni falsaj. 648 00:28:22,990 --> 00:28:24,770 Se jes, revenu vera. 649 00:28:24,770 --> 00:28:28,800 Kaj tiel tio estas ĝuste kio ĉi versio de la programo komparas-1.c faras. 650 00:28:28,800 --> 00:28:31,677 Estas identa al kion ni rigardis lundo krom ke mi 651 00:28:31,677 --> 00:28:34,760 liveris de la vorto ĉenon kvankam kiu havas neniun funkcian impact-- ĉiuj 652 00:28:34,760 --> 00:28:37,450 Mi faras nun forigado iuj vida trejnado radoj, 653 00:28:37,450 --> 00:28:40,880 sed vidi klare ke s kaj t estas adresoj. 654 00:28:40,880 --> 00:28:43,020 Kaj tio estas kion la stelo, la asterisko, ĝi reprezentas 655 00:28:43,020 --> 00:28:46,690 estas adreso, alie konata pli teknike kiel puntero. 656 00:28:46,690 --> 00:28:49,880 >> Do kiam mi deklaras s sur linio 9 kaj diri char * s, 657 00:28:49,880 --> 00:28:52,160 tio ne signifas al mi ŝnuro. 658 00:28:52,160 --> 00:28:56,360 Tio signifas doni al mi variablo kies celo en la vivo estas por stoki adreson. 659 00:28:56,360 --> 00:29:00,400 Ĉar mi intencas meti la Adreso de kordo en ĝin. 660 00:29:00,400 --> 00:29:03,500 Kaj efektive, GetString, esti klara, ne revenas kordo. 661 00:29:03,500 --> 00:29:06,110 Ĝi ne revenas panjon backslash nulo, por se. 662 00:29:06,110 --> 00:29:10,005 Kion GetString specife kaj precize reveni? 663 00:29:10,005 --> 00:29:10,880 Spektantaro: [inaudible] 664 00:29:10,880 --> 00:29:14,080 DAVID J. Malan: An adreson, la Adreso de la unua karaktero 665 00:29:14,080 --> 00:29:16,070 en iu kordo ĝi alvenis. 666 00:29:16,070 --> 00:29:19,250 Kaj tial nun ni vidas speciala ŝlosilvorto denove. 667 00:29:19,250 --> 00:29:20,640 Kaj, mi aludis al tiu pli frua. 668 00:29:20,640 --> 00:29:23,620 Ĉi tuj estos bona konvencio ke ni vidos denove kaj denove nun. 669 00:29:23,620 --> 00:29:27,540 Mi kontrolanta por certigi ke s ne nula kaj t estas ne nula. 670 00:29:27,540 --> 00:29:30,100 Ĉar bazita sur mia vere rapida mencio antaŭe, 671 00:29:30,100 --> 00:29:35,510 kio povus signifi se GetString revenas ne adreson sed N-U-L-L, kiu estas denove, 672 00:29:35,510 --> 00:29:36,990 iuj specialaj valoron? 673 00:29:36,990 --> 00:29:37,890 >> Publiko: Eraro. 674 00:29:37,890 --> 00:29:38,600 >> DAVID J. Malan: Estas eraro. 675 00:29:38,600 --> 00:29:39,550 Io misokazis. 676 00:29:39,550 --> 00:29:41,341 Kaj kio tipe povus okazi, speciale 677 00:29:41,341 --> 00:29:45,162 kun strings-- kiu povus esti de nekonata longo en advance-- 678 00:29:45,162 --> 00:29:46,870 eble la komputiloj ' el memoro, eble 679 00:29:46,870 --> 00:29:49,280 vi entajpis tia longa vorto aŭ frazo 680 00:29:49,280 --> 00:29:51,880 aŭ almetita tia grandega eseo tie estas nur ne sufiĉe memoro. 681 00:29:51,880 --> 00:29:55,340 Kaj tiel GetString ne povas reveni la adreso de la tuta afero, 682 00:29:55,340 --> 00:29:56,620 do ĝi nur redonas nenion. 683 00:29:56,620 --> 00:30:00,580 Kaj ĝi diras eraro okazis per reveno la specialan nulan valoron. 684 00:30:00,580 --> 00:30:02,890 Ĝi estas la nula adreso, por tiel diri. 685 00:30:02,890 --> 00:30:06,157 >> Nun ĝi rezultas C venas kun funkcio kiu faras ke ripeto. 686 00:30:06,157 --> 00:30:09,240 Ni ne devas apliki tion kun por buklo aŭ momenton buklo mem. 687 00:30:09,240 --> 00:30:11,150 Ni povas uzi funkcio, vokis koncize, 688 00:30:11,150 --> 00:30:15,400 moveti comp, aŭ ŝnuro kompari, kies celo en la vivo estas fari ĝuste tion. 689 00:30:15,400 --> 00:30:19,990 Vi donas al ĝi du punteros, du adresojn, kaj ĝi iros al tiuj adresoj 690 00:30:19,990 --> 00:30:23,130 kaj poste kompari literon por letero por letero por kvalito, 691 00:30:23,130 --> 00:30:26,610 haltante nur kiam kio estas vera? 692 00:30:26,610 --> 00:30:31,540 Kiam intuicie reekbruligu comp ĉesas ripetanta, nur por esti klara? 693 00:30:31,540 --> 00:30:35,400 Kiam kolizias backslash 0 en ĉu kordo, ĉe kiu punkto ĝi povas decidi 694 00:30:35,400 --> 00:30:38,910 havas ĉiu parigitaj, aŭ jam tie estis discrepancia? 695 00:30:38,910 --> 00:30:42,740 >> Do, se ni kuras ĉi nun kaj provu nia malgranda capitalización ludo, 696 00:30:42,740 --> 00:30:49,260 Tiel faro kompari-1, ./compare-1, kaj tajpu panjo en minuskla ambaŭ fojojn. 697 00:30:49,260 --> 00:30:50,560 Nun estas la sama afero. 698 00:30:50,560 --> 00:30:54,080 Kaj se mi faros ĝin denove kun minuskle kaj tiam eble majuskle. 699 00:30:54,080 --> 00:30:56,720 Nun ĝi ja distingas inter majuskloj kaj minuskla. 700 00:30:56,720 --> 00:31:00,440 Do finfine ne malmoligu magiaj, sed tio nun klarigi 701 00:31:00,440 --> 00:31:03,140 kio okazas sub la kapuĉo. 702 00:31:03,140 --> 00:31:07,640 >> Do kio pli povas ĉerpas el tiu speco de lecionon? 703 00:31:07,640 --> 00:31:08,980 Do ni rigardu tiun. 704 00:31:08,980 --> 00:31:15,380 Mi tuj iros antaŭen kaj skribi rapida programo tie nomita kopio-0. 705 00:31:15,380 --> 00:31:21,594 Kaj nun ni iru antaŭen kaj reale ni faru this-- kun kopio-0, 706 00:31:21,594 --> 00:31:23,010 rigardu kion mi havas ĉi tie. 707 00:31:23,010 --> 00:31:24,712 Mi unue diri al la uzanto, diru ion. 708 00:31:24,712 --> 00:31:26,420 Tiam mi ricevas cxeno kaj mi gardis ŝin en s. 709 00:31:26,420 --> 00:31:29,810 Tiam mi kontrolu se s egalas egalas NULL, simple reveni 1. 710 00:31:29,810 --> 00:31:31,590 Do tio estas nur norma eraro kontrolanta. 711 00:31:31,590 --> 00:31:33,112 Nenio interesa okazis. 712 00:31:33,112 --> 00:31:36,320 Kaj fakte, se ni forigi la eraran kontrolanta, tio aspektas kiel semajno 1 kodo 713 00:31:36,320 --> 00:31:36,985 nuntempe. 714 00:31:36,985 --> 00:31:39,110 Sed mi komencis ricevi iom pli bone pri tio. 715 00:31:39,110 --> 00:31:43,340 >> Nun en linio 16, antaŭ unu semajno, eble eĉ paron tagoj aŭ minutoj, 716 00:31:43,340 --> 00:31:46,720 vi eble dirus linio 16 estas kreante variablo nomita t 717 00:31:46,720 --> 00:31:48,219 kaj kopiado s en ĝin. 718 00:31:48,219 --> 00:31:50,010 Kaj tio estas perfekte racia takeaway. 719 00:31:50,010 --> 00:31:51,560 Sed esti pli preciza nun. 720 00:31:51,560 --> 00:31:54,190 Kio okazas en linio 16? 721 00:31:54,190 --> 00:31:56,170 Kio estas akiranta kopiita de dekstre maldekstren? 722 00:31:56,170 --> 00:31:56,669 Yeah? 723 00:31:56,669 --> 00:31:58,490 Spektantaro: Ĉu t ricevi adreson de s? 724 00:31:58,490 --> 00:32:01,220 >> DAVID J. Malan: Ĝuste, t estas akiranta la adreso de s. 725 00:32:01,220 --> 00:32:05,170 Do esti klara nun, se mi iros revenigu frua ekzemplo 726 00:32:05,170 --> 00:32:08,520 kaj Mi nudigos afero mi jam tajpis en. 727 00:32:08,520 --> 00:32:11,640 Kaj kion mi tajpis in-- jen s, kaj tie 728 00:32:11,640 --> 00:32:15,830 Tion mi jam tajpis en ie en memoro, panjo kaj tiam backslash 729 00:32:15,830 --> 00:32:17,840 0 kiu estas aldonita por mi. 730 00:32:17,840 --> 00:32:23,060 Kion mi stokitaj en tie, memoras, ĉi estas ĉe situo 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 tiu estas kio estas nuntempe en s. 732 00:32:24,655 --> 00:32:29,220 Do se sur linio 16, mi diras al mi alia variablo nomas t kaj vendejo 733 00:32:29,220 --> 00:32:33,590 tra la valoro de s, kio gets stokita tie ne faros panjon 734 00:32:33,590 --> 00:32:35,480 sed prefere nur la numeron 1. 735 00:32:35,480 --> 00:32:38,520 >> Do se ni rigardas antaŭen en tiu programo nun, kio okazos? 736 00:32:38,520 --> 00:32:40,690 Do rimarki ke ekzistas tiu funkcio vi eble 737 00:32:40,690 --> 00:32:44,410 uzis tiun antaŭ kelka tempo Cezaro, aŭ Vigenère, aŭ eble ne. 738 00:32:44,410 --> 00:32:48,170 Mi asertas per mia printf, mi estas tuj kapitaligi la kopion t. 739 00:32:48,170 --> 00:32:51,616 Unue en linio 19, rapida prudento kontrolu, strlen ĉekojn la longo de t. 740 00:32:51,616 --> 00:32:53,740 Ĉar mi ne volas provu kapitaligi ion 741 00:32:53,740 --> 00:32:55,104 se estas neniu kordo tie. 742 00:32:55,104 --> 00:32:57,520 Se la uzanto nur batis Enter, nenio estas kapitaligi. 743 00:32:57,520 --> 00:33:01,100 Do mi ne volas fari linion 21. 744 00:33:01,100 --> 00:33:05,758 Do linio 21 estas kapitaligado kiu litero, ŝajne, en t? 745 00:33:05,758 --> 00:33:06,514 >> Publiko: m? 746 00:33:06,514 --> 00:33:08,722 DAVID J. Malan: Aspektas kiel ĝi estas kopiado kiu unu? 747 00:33:08,722 --> 00:33:09,486 Publiko: m. 748 00:33:09,486 --> 00:33:10,450 DAVID J. Malan: Uh, m. 749 00:33:10,450 --> 00:33:12,685 Bone, do la unua m, ĉar rimarkos ke mi 750 00:33:12,685 --> 00:33:14,935 pasante al toupper, kiu se vi neniam vidis ĝin estas 751 00:33:14,935 --> 00:33:16,980 nur funkcio por kapitaligi kiel ĝia enigo. 752 00:33:16,980 --> 00:33:20,240 t krampo nulo signifas doni mi la nul karaktero de t. 753 00:33:20,240 --> 00:33:22,550 Kaj tiel kiel faras tiu bildo ŝanĝo, esti klara? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Kio bezonas get reskribita aŭ ŝanĝita kun respekto al s kaj t kaj panjo 756 00:33:29,160 --> 00:33:30,097 backslash nula. 757 00:33:30,097 --> 00:33:31,470 >> Spektantaro: [inaudible] 758 00:33:31,470 --> 00:33:34,030 >> DAVID J. Malan: Yeah, do ĉi tiu tie simple 759 00:33:34,030 --> 00:33:40,860 bezonas get ŝanĝis to-- ripari this-- bezonas get ŝanĝis al ĉefurbo m. 760 00:33:40,860 --> 00:33:44,330 Sed rigardu poste en la programo, se mi presi 761 00:33:44,330 --> 00:33:49,800 s kaj t kiel mi purigas tie, spekti kio estas okazos presi el s kaj t. 762 00:33:49,800 --> 00:33:54,310 Do fari kopion-0, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Lasu min kaj tajpu en panjo en ĉiuj minuskla. 764 00:33:57,140 --> 00:34:00,140 Rimarku kaj la originalan kaj la kopio estis kapitaligita. 765 00:34:00,140 --> 00:34:00,850 Kial? 766 00:34:00,850 --> 00:34:04,431 Nu, s kaj t estas ambaŭ montrante, se vi volas, la sama bloko de memoro. 767 00:34:04,431 --> 00:34:06,930 Kaj sincere, tiu fariĝas vere uninteresting-- la fakto 768 00:34:06,930 --> 00:34:09,150 ke ni uzas adreson nulo tie. 769 00:34:09,150 --> 00:34:11,719 Mi volas diri, mi ne vere zorgas kie aĵoj estas en memoro. 770 00:34:11,719 --> 00:34:13,550 Pardonu min viŝante iom tro multe. 771 00:34:13,550 --> 00:34:15,674 Sed mi ne vere zorgas kie ajn estas en memoro. 772 00:34:15,674 --> 00:34:18,510 Kaj do, ĝuste kion programistoj emas pensi pri 773 00:34:18,510 --> 00:34:21,080 estas ke kiam oni parolas pri adreson, aŭ puntero, 774 00:34:21,080 --> 00:34:22,679 kiu zorgas kie ĝi estas en memoro. 775 00:34:22,679 --> 00:34:24,989 Ne gravas se ĝi estas je bajto aŭ unu miliardo. 776 00:34:24,989 --> 00:34:27,920 Mi nur zorgas ke ĉi variablo estas efike 777 00:34:27,920 --> 00:34:29,620 montrante ke bloko de memoro. 778 00:34:29,620 --> 00:34:33,350 Do, de nun, anstataŭ quibble super arbitra memoro adresojn, ni 779 00:34:33,350 --> 00:34:36,710 nur komenci desegni punteros kiel punteros, kiel sagoj. 780 00:34:36,710 --> 00:34:39,340 Do kion s kaj t vere estas, laŭ tiu ĉi programo, 781 00:34:39,340 --> 00:34:42,130 pro kiel mi kreis t, estas nur du apartaj variabloj 782 00:34:42,130 --> 00:34:43,840 fingromontrante la sama bloko de memoro. 783 00:34:43,840 --> 00:34:45,215 Kaj ni ne zorgas kie ili estas. 784 00:34:45,215 --> 00:34:47,130 Do ni povas abstraktajn for tiun detalon. 785 00:34:47,130 --> 00:34:48,780 >> Do kiel mi riparos tion? 786 00:34:48,780 --> 00:34:54,120 Se mi volas skribi version de la kopio programo kiu fakte kopias la kordo 787 00:34:54,120 --> 00:34:56,840 kaj capitalizes nur la Kopio, ĝuste intuicie, 788 00:34:56,840 --> 00:34:59,766 kio estas alvenis al esti Ingredienco por nia solvo? 789 00:34:59,766 --> 00:35:00,640 Spektantaro: [inaudible] 790 00:35:00,640 --> 00:35:01,420 DAVID J. Malan: Ni bezonas kion? 791 00:35:01,420 --> 00:35:01,820 Publiko: Bloko de memoro. 792 00:35:01,820 --> 00:35:03,280 DAVID J. Malan: Ni bezonas alia bloko de memoro, ĉu ne? 793 00:35:03,280 --> 00:35:05,360 Ni ne scias kiel fari ĝin ankoraŭ, nepre. 794 00:35:05,360 --> 00:35:11,330 Sed mi specon de bezonos tio okazu tiel ke la originala panjo en minusklo 795 00:35:11,330 --> 00:35:14,170 finas en tiu ekstra eron de memoro. 796 00:35:14,170 --> 00:35:19,770 Kaj poste kiam mi ŝanĝas la kopion, mi ne volas ŝanĝi tiun kopion tie. 797 00:35:19,770 --> 00:35:26,020 Mi anstataŭe volas ŝanĝi nur tiun Kopio tiel ke la originala estas neŝanĝita. 798 00:35:26,020 --> 00:35:27,980 >> Do, ni vidu kiel ni povus fari tion. 799 00:35:27,980 --> 00:35:31,800 En kopio-1, kiu havas jam estis senvestigita de komento, 800 00:35:31,800 --> 00:35:33,250 sed estas diritaj en linio. 801 00:35:33,250 --> 00:35:36,710 Ni anstataŭe fari la following-- tiuj linioj estas identaj, Akiri min kordo 802 00:35:36,710 --> 00:35:38,340 kaj nomas ĝin s. 803 00:35:38,340 --> 00:35:43,500 Sed nun ni rigardu unu el niaj plej kompleksaj sed la lasta de la komplekseco 804 00:35:43,500 --> 00:35:47,340 dum kelka tempo, linio 16 faras ĝuste tion. 805 00:35:47,340 --> 00:35:49,400 Do se via comfy kun la bildo ni nur drew-- 806 00:35:49,400 --> 00:35:51,790 donu al mi novan eron de memoro, kopii ĉion en ĝi, 807 00:35:51,790 --> 00:35:53,730 ni vidu kiel ni tradukas ke al kodo. 808 00:35:53,730 --> 00:35:59,400 >> Do linio 16, sur la maldekstra flanko, char * t donas mi ĉi skatolon tien. 809 00:35:59,400 --> 00:36:00,230 Tio estas ĉio faras. 810 00:36:00,230 --> 00:36:03,240 Sur la dekstra flanko, m alloc, aŭ malloc, 811 00:36:03,240 --> 00:36:06,480 estas memoro atribuo, súper eleganta, kamufla vojo simple dirante 812 00:36:06,480 --> 00:36:07,640 donu al mi eron de memoro. 813 00:36:07,640 --> 00:36:09,290 Kiom memoro ni bezonas? 814 00:36:09,290 --> 00:36:10,910 Nu, estas speco de granda esprimo. 815 00:36:10,910 --> 00:36:12,570 Sed ni vidu kion diras tie. 816 00:36:12,570 --> 00:36:15,940 Do tiu, kompreneble, estas doni min la kordo longo de s. 817 00:36:15,940 --> 00:36:19,094 Do, panjo ĝi devus esti kio? 818 00:36:19,094 --> 00:36:21,010 Do nur tri, ĉu ne? panjo estas tri karakteroj. 819 00:36:21,010 --> 00:36:22,830 Vi ne kalkulu la backslash nulo kiam 820 00:36:22,830 --> 00:36:25,960 paroli pri la longo de kordo estas fakte la homa videblaj literoj. 821 00:36:25,960 --> 00:36:28,020 Do panjo, do tio donas al mi 3. 822 00:36:28,020 --> 00:36:31,170 Sed atendu momenton, mi nun aldonas 1. 823 00:36:31,170 --> 00:36:34,861 Kial mi fakte volas asigni 4 bajtoj kaj ne nur 3? 824 00:36:34,861 --> 00:36:35,360 Yeah? 825 00:36:35,360 --> 00:36:36,910 >> Publiko: Por la sentinelo valoron? 826 00:36:36,910 --> 00:36:38,951 >> DAVID J. Malan: Ĝuste, por ke sentinelo valoro. 827 00:36:38,951 --> 00:36:40,840 Por la backslash nulo, Mi bezonas 4 bajtoj entute. 828 00:36:40,840 --> 00:36:42,870 Do mi bezonas la longo de la kordo plus 1. 829 00:36:42,870 --> 00:36:45,400 Kaj tiam simple por bono measure-- kvankam en ĉi tiu sistemo, 830 00:36:45,400 --> 00:36:49,390 ĝi estas ĉiam tuj estos 1-- mi dirante multobligi tion per la grandeco de char. 831 00:36:49,390 --> 00:36:51,552 Rezultas sizeof estas operatoro en C kiu 832 00:36:51,552 --> 00:36:53,260 nur informas vin la nombro de bitokoj tio 833 00:36:53,260 --> 00:36:54,700 postulata por certa datumtipo. 834 00:36:54,700 --> 00:36:57,740 Ĝi ne funkcias por arrays, tipe, kelkfoje faras. 835 00:36:57,740 --> 00:36:59,210 Sed en la ĝenerala kazo, ne. 836 00:36:59,210 --> 00:37:02,330 Sed ĝi diras min kiom da bajtoj oni char estas, kio rezultas estas ĉiam 1. 837 00:37:02,330 --> 00:37:04,080 Do tiu estas kiel multiplikante per 1. 838 00:37:04,080 --> 00:37:05,900 >> Do súper kripta rigardas linio de kodo. 839 00:37:05,900 --> 00:37:09,320 Sed ĉiuj ĝi faras estas donas mi eron de memoro. 840 00:37:09,320 --> 00:37:13,590 Sed sxajnas esti kopianta ion en tiu memoro? 841 00:37:13,590 --> 00:37:14,560 Ankoraŭ ne. 842 00:37:14,560 --> 00:37:22,040 Kaj tiel kion mi sur linio 22, kaj 23, 24, 25, nu, mi simple fari tion. 843 00:37:22,040 --> 00:37:23,760 Kaj ĉi tiu estas speco de malnova lernejo havajxoj nun. 844 00:37:23,760 --> 00:37:26,010 Jen kiel pset 2, kie vi nur rampajxoj 845 00:37:26,010 --> 00:37:28,620 ĉirkaŭe en memoro, aŭ prefere en kordoj. 846 00:37:28,620 --> 00:37:31,920 >> Do mi ripetanta de 0 al la longo de la kordo s. 847 00:37:31,920 --> 00:37:37,820 Kaj mi kopiante la ia karaktero en s en la ia karaktero en t. 848 00:37:37,820 --> 00:37:41,820 Kaj ĉar mi, la programisto, faris Nepre rezervu precize kiel multaj bitokoj 849 00:37:41,820 --> 00:37:44,600 kiel mi bezonas, estas perfekta unu-al-unu rilato. 850 00:37:44,600 --> 00:37:47,060 Kaj mi kopiu panjon en minuskla al la nova. 851 00:37:47,060 --> 00:37:50,170 Kaj poste persiste, mi faras tiun linion. 852 00:37:50,170 --> 00:37:54,637 Kaj tiel la efiko estas nur kapitaligi ĉi t tie. 853 00:37:54,637 --> 00:37:56,470 Do multe sorbi, sed se vi nur pripensu 854 00:37:56,470 --> 00:37:58,220 kio vere okazas sur sub la kapuĉo 855 00:37:58,220 --> 00:38:00,880 estas nur movanta tiujn bajtoj ĉirkaŭe, ĉiuj kiuj 856 00:38:00,880 --> 00:38:06,617 bezonas solvi ĉi tiun problemon estas Nur donu al ni tiun eron de memoro. 857 00:38:06,617 --> 00:38:08,450 Nun riskante blindiga, lasu min montri 858 00:38:08,450 --> 00:38:13,200 unu alia ekzemplo, ke estas preskaŭ identa, krom ĉi tiu 859 00:38:13,200 --> 00:38:14,350 linio de kodo. 860 00:38:14,350 --> 00:38:18,870 Do tiu estas la hacker versio de tiu programo, se vi volas. 861 00:38:18,870 --> 00:38:21,050 Sed ni nur distili ĝin kio okazas. 862 00:38:21,050 --> 00:38:28,920 Linio 24 kutimis esti ĉi t krampo i ricevas s krampo i. 863 00:38:28,920 --> 00:38:33,370 Nun, mi ŝanĝas tiun al la multe pli kripta stelo t 864 00:38:33,370 --> 00:38:36,280 plus 1 egalas stelon s plus 1. 865 00:38:36,280 --> 00:38:38,702 >> Do kio okazas kaj kial ni havas stelon karaktero? 866 00:38:38,702 --> 00:38:41,410 Ni vidis la stelon antaŭ kaj ĝi estas uzata alimaniere tie. 867 00:38:41,410 --> 00:38:45,490 Ni antaŭe vidis char *, nun mi vidas stelo komence, kaj tio estas okej. 868 00:38:45,490 --> 00:38:48,190 Ĉar ĝi rezultas nin povas ia konkludi nur 869 00:38:48,190 --> 00:38:50,280 de tiuj unuaj principoj kio okazas. 870 00:38:50,280 --> 00:38:53,860 Do nur por esti klara, kio estas s? 871 00:38:53,860 --> 00:38:55,052 Pasintsemajne, estis ŝnuro. 872 00:38:55,052 --> 00:38:56,260 Tio ne sufiĉas plu. 873 00:38:56,260 --> 00:38:57,690 Kio estas s, specife? 874 00:38:57,690 --> 00:38:58,590 >> Spektantaro: [inaudible] 875 00:38:58,590 --> 00:38:59,881 >> DAVID J. Malan: ĝi estas puntero. 876 00:38:59,881 --> 00:39:02,610 Ĝi estas la adreso de la unua karaktero ni entajpis. 877 00:39:02,610 --> 00:39:04,780 OK, kio estas t? 878 00:39:04,780 --> 00:39:05,660 >> Spektantaro: [inaudible] 879 00:39:05,660 --> 00:39:07,950 >> DAVID J. Malan: La Adreso de la unua bajto 880 00:39:07,950 --> 00:39:10,490 en t, tiu bloko de memoro reallocated. 881 00:39:10,490 --> 00:39:14,720 Do rezultas ke kiam ni persisti de 0 sur ĝis la kordo 882 00:39:14,720 --> 00:39:17,424 length-- unue, mi dividu je 0, ĉar 883 00:39:17,424 --> 00:39:18,840 de tiu malnova lernejo por buklo afero. 884 00:39:18,840 --> 00:39:22,400 Do simple por simpleco, ni supozi ke la unua linio de kodo 885 00:39:22,400 --> 00:39:23,760 Estas vere nur tiu, dekstre. 886 00:39:23,760 --> 00:39:26,080 Se i estas nulo, aldonante nulo al io supozeble 887 00:39:26,080 --> 00:39:27,540 ne tuj havos efikon. 888 00:39:27,540 --> 00:39:28,560 >> Do kio estas tiu parolo? 889 00:39:28,560 --> 00:39:31,600 Ĝi rezultas ke la stelo operatoro en tiu kunteksto 890 00:39:31,600 --> 00:39:33,700 estas la dereference operatoro, kiu estas nur 891 00:39:33,700 --> 00:39:37,530 fantazio maniero diri iri al la jena adreso. 892 00:39:37,530 --> 00:39:42,080 Do se s estas la adreso de la unua karaktero en tiu bloko de memoro, 893 00:39:42,080 --> 00:39:43,630 * s signifas iri tien. 894 00:39:43,630 --> 00:39:45,630 Kaj ĉar ni tiris la bildo en ĉi tiu maniero, 895 00:39:45,630 --> 00:39:47,430 vi povas adopti la sekvante mensa modelo. 896 00:39:47,430 --> 00:39:51,030 Se tiu estas s, kaj vi diras * s, * s ia kiel chutes kaj ŝtupetarojn, 897 00:39:51,030 --> 00:39:54,540 se vi memoras la ludo de infanaĝo, estas kiel sekvas ke sagon kaj iru 898 00:39:54,540 --> 00:39:55,570 al la adreso. 899 00:39:55,570 --> 00:39:57,080 >> * t estas la sama afero. 900 00:39:57,080 --> 00:39:59,855 Do komencu tie, iri al lia bloko. 901 00:39:59,855 --> 00:40:03,350 Mi ne povas simple desegni sur tiu ekrano tiel. 902 00:40:03,350 --> 00:40:05,560 * t signifas iri tien. 903 00:40:05,560 --> 00:40:08,830 Kaj tiam, la por buklo estas ĝuste dirante movas tiu karaktero tie, 904 00:40:08,830 --> 00:40:11,330 movi ĉi karaktero tie, movi ĉi karaktero tie. 905 00:40:11,330 --> 00:40:12,890 Sed kiel mi faras tion incrementation? 906 00:40:12,890 --> 00:40:15,430 Mi bezonas malfari kion mi ĵus forigita. 907 00:40:15,430 --> 00:40:18,140 Tiu estas kio ĝenerale nomis puntero aritmetiko, kiu 908 00:40:18,140 --> 00:40:20,040 signifas math kun adresoj. 909 00:40:20,040 --> 00:40:22,460 >> Se, en ĉi por buklo, Mi tenas pliigante i, 910 00:40:22,460 --> 00:40:26,880 kaj s estas adreso kaj t estas adreso, se mi daŭre aldonante 1, 911 00:40:26,880 --> 00:40:31,406 ke nur signifas teni movas antaŭen, kaj plue kaj plue en la memoro. 912 00:40:31,406 --> 00:40:34,030 Estas kiel Oxford Street, la strato ke la CS konstruaĵo estas sur. 913 00:40:34,030 --> 00:40:36,490 La CS konstruaĵoj estas ĉe 33 Oxford Street. 914 00:40:36,490 --> 00:40:39,870 Do se vi estus fari 33 Oksfordostrato plus 1, 915 00:40:39,870 --> 00:40:42,870 kiu alportas vin al 34 Oxford Strato, tiam 35 Oksfordostrato, 916 00:40:42,870 --> 00:40:46,380 tiam 36 Oksfordostrato, kion ajn tiuj konstruaĵoj vere estas - se ili ekzistas. 917 00:40:46,380 --> 00:40:50,540 Kaj do, jen ĉio ni faras tie kun puntero aritmetiko. 918 00:40:50,540 --> 00:40:53,820 >> Do estas súper arcano vojo de esprimi nin. 919 00:40:53,820 --> 00:40:56,160 Sed cxio, kio estas okazanta sub la kapuĉo 920 00:40:56,160 --> 00:40:59,330 estas nur sekvante tiujn adresojn, kiel sekva mapon, se vi volas, 921 00:40:59,330 --> 00:41:02,692 aŭ sekvante sagojn kiel ni tirita sur la ekrano. 922 00:41:02,692 --> 00:41:04,910 OK, multe digesti. 923 00:41:04,910 --> 00:41:10,410 Ajna demando sur sintakso, konceptoj, punteros, malloc, aŭ simile. 924 00:41:10,410 --> 00:41:11,480 Yeah, ĉi tie unue. 925 00:41:11,480 --> 00:41:13,755 >> Publiko: Do ​​kie tiu diras * t egalas toupper * t, 926 00:41:13,755 --> 00:41:15,575 estas ke tuj kapitaligi ĉiuj leteroj aŭ just-- 927 00:41:15,575 --> 00:41:17,283 >> DAVID J. Malan: Ha, vere bona demando. 928 00:41:17,283 --> 00:41:19,805 Do en ĉi tiu linio tie, 31 estas tiu iranta kapitaligi 929 00:41:19,805 --> 00:41:21,430 la unua litero aŭ ĉiuj de la literoj. 930 00:41:21,430 --> 00:41:23,460 Do ni respondu ke irante reen al unuaj principoj. 931 00:41:23,460 --> 00:41:26,168 Kaj komencaj elementoj tie mi signifas nur iri al la bazaj difinoj 932 00:41:26,168 --> 00:41:27,000 de kio implikita. 933 00:41:27,000 --> 00:41:29,770 Do toupper estas funkcio ke capitalizes char. 934 00:41:29,770 --> 00:41:30,530 Tio estas ĉio. 935 00:41:30,530 --> 00:41:36,740 * t signifas iri al la first-- iri al la adreso en t. 936 00:41:36,740 --> 00:41:40,350 Do, en la bildo, se tiu estas la statu de memoro ni asignitaj kun malloc, 937 00:41:40,350 --> 00:41:43,310 kaj tio estas t, * t signifas iri tien. 938 00:41:43,310 --> 00:41:46,710 >> Dume, vi pasanta ke valoro, minuskla m 939 00:41:46,710 --> 00:41:50,040 al toupper, vi fariĝas reen ĉefurbo M, kie vi incitas ĝin? 940 00:41:50,040 --> 00:41:52,410 Vi metas ŝin en tiu sama loko. 941 00:41:52,410 --> 00:41:55,540 Kaj tiel per tiu logiko de tiuj bazaj difinoj estas nur 942 00:41:55,540 --> 00:41:58,792 kapitaligi la unuan literon krom se vi persisti kun i aŭ 943 00:41:58,792 --> 00:42:02,000 por buklo aŭ momenton buklo, ĝi ne tuj fari ion pli ol vi demandas lin. 944 00:42:02,000 --> 00:42:02,583 Bona demando. 945 00:42:02,583 --> 00:42:03,237 Yeah? 946 00:42:03,237 --> 00:42:05,369 >> Publiko: Kial vi uzas la dereference metodo prefere ol 947 00:42:05,369 --> 00:42:05,979 la tabelo? 948 00:42:05,979 --> 00:42:07,395 >> DAVID J. Malan: Ha, bona demando. 949 00:42:07,395 --> 00:42:10,672 Kial vi uzas la dereference metodo anstataŭ la tabelo metodo? 950 00:42:10,672 --> 00:42:12,130 Neniu aparta kialo, por esti honesta. 951 00:42:12,130 --> 00:42:15,290 Kaj, fakte, por tio speco de ekzemplo, dekstra, 952 00:42:15,290 --> 00:42:17,556 Mi nur argumentante farante la programo pli komplika, 953 00:42:17,556 --> 00:42:19,680 pli okuloj glazing super, homoj estas kontrolanta 954 00:42:19,680 --> 00:42:22,830 ĉar tio aspektas súper arcano, sed kvankam ĝi estas faranta la saman aferon. 955 00:42:22,830 --> 00:42:26,695 Do, sincere, tiu estas nenecese vide kompleksa solvo 956 00:42:26,695 --> 00:42:27,320 al la problemo. 957 00:42:27,320 --> 00:42:29,580 >> Ĝi estas ankoraŭ bona dezajno, kvin el kvin por dezajno, 958 00:42:29,580 --> 00:42:33,140 ĉu ĝi estas en la krampo skribmaniero aŭ la montrilon skribmaniero. 959 00:42:33,140 --> 00:42:36,299 Sed- speciale kiam ni atingos poste en la kurso en pset 5 960 00:42:36,299 --> 00:42:39,340 kiam ni planas akcepti vortaro ke Mi jam menciis kelkajn times-- 961 00:42:39,340 --> 00:42:42,300 ni vere zorgas pri la malalta nivelo memoro adresoj 962 00:42:42,300 --> 00:42:44,140 ke ni vere komprenu Kio okazas. 963 00:42:44,140 --> 00:42:48,300 >> Sed, nuntempe, ĝi rezultas ke ĉi linio de kodo tie rektaj krampoj 964 00:42:48,300 --> 00:42:49,900 ne vere ekzistas. 965 00:42:49,900 --> 00:42:52,230 Ili estas kio nomiĝas sintaksa sukero, kiu 966 00:42:52,230 --> 00:42:58,390 estas nur strange malvarmeta maniero diri la tradukilo konvertas kvadrataj krampoj esti 967 00:42:58,390 --> 00:43:00,420 ke matematika esprimo. 968 00:43:00,420 --> 00:43:02,660 Do estas homa konvencio por povi ĝuste skribi 969 00:43:02,660 --> 00:43:04,220 tiuj tre uzantamika krampoj. 970 00:43:04,220 --> 00:43:06,850 Sed kion la tradukilo, Clang, estas vere faranta ajna tempo 971 00:43:06,850 --> 00:43:10,970 vi skribas kion oni reliefigis en linio 24, sub la kapuĉo estas vere 972 00:43:10,970 --> 00:43:12,330 konvertado al tiu. 973 00:43:12,330 --> 00:43:16,200 Estas nur pli plezura kiel homa legi kaj skribi kodon kiel linio 24. 974 00:43:16,200 --> 00:43:18,530 Sed fine tiuj trejnado radoj tro elspezas 975 00:43:18,530 --> 00:43:21,780 kiam onia propra komforto ricevas pli forta. 976 00:43:21,780 --> 00:43:27,240 >> Bone, do memoras tiam ke tiu estis la speco de plej granda problemo 977 00:43:27,240 --> 00:43:27,807 ni eniris. 978 00:43:27,807 --> 00:43:30,640 Kaj tio estas kio ekfunkciigis tiun tutan malbenita konversacio pri punteros, 979 00:43:30,640 --> 00:43:32,340 kaj adresojn, kaj kopiado aferojn. 980 00:43:32,340 --> 00:43:35,410 Ĝi estis ĉar ni stumblis ĉi stulta, stulta demando, per kiu 981 00:43:35,410 --> 00:43:38,830 Mi implementado logically-- kun Lauren tie supre en la demo kaj la oranĝa suko 982 00:43:38,830 --> 00:43:43,770 en la milk-- perfekte algorítmicamente korektan funkcion 983 00:43:43,770 --> 00:43:47,010 por interŝanĝi du variabloj ' valorojn, sed la malbenita afero 984 00:43:47,010 --> 00:43:50,550 ne havis ajnan persista, aŭ permanenta, efekto sur mia kodo. 985 00:43:50,550 --> 00:43:51,820 >> Kaj kial tio okazis? 986 00:43:51,820 --> 00:43:54,650 Unuvorte, kial ĉi efektivigo de interŝanĝo 987 00:43:54,650 --> 00:43:58,740 logike ĝusta, sed havas neniun efikon sur la variabloj kiuj estas pasitaj al ĝi, 988 00:43:58,740 --> 00:44:01,119 kiel x kaj y por ĉefa? 989 00:44:01,119 --> 00:44:02,410 Kio estis la esencon de la afero? 990 00:44:02,410 --> 00:44:02,909 Yeah? 991 00:44:02,909 --> 00:44:05,532 Publiko: Ĉar variablo faris kopioj de variablo en la enirpermesilo 992 00:44:05,532 --> 00:44:06,240 tra funkcio. 993 00:44:06,240 --> 00:44:09,060 >> DAVID J. Malan: Ĝuste, kiam vi pasos variablojn en funkcio, aŭ argumentoj 994 00:44:09,060 --> 00:44:11,030 en funkcio, ili estas preteriris kopion, kiu 995 00:44:11,030 --> 00:44:14,770 signifas vi ricevas identan rigardanta mastro de bitoj por ambaŭ x kaj y, 996 00:44:14,770 --> 00:44:15,955 nomata tie a kaj b. 997 00:44:15,955 --> 00:44:18,080 Kaj vi povas fari ion vi volas kun tiujn kopiojn, 998 00:44:18,080 --> 00:44:20,657 sed ili tuj devas ne efikon sur la voko funkcio. 999 00:44:20,657 --> 00:44:22,990 Kaj, fakte, ni tiris ke bildo en la ekrano, revoko 1000 00:44:22,990 --> 00:44:25,520 lasta tempo, per kiu se vi vere pensas pri kio estas 1001 00:44:25,520 --> 00:44:28,570 daŭriganta sub la hood-- se tiu estas via komputilo memoro, 1002 00:44:28,570 --> 00:44:31,650 kaj cxi tie estas la eron de memoro uzata por ĉefaj, 1003 00:44:31,650 --> 00:44:34,020 tiu estas la eron de memoro uzata por interŝanĝi, 1004 00:44:34,020 --> 00:44:37,090 kaj tiel eĉ se ĉefa havas du variabloj, x kaj y, 1005 00:44:37,090 --> 00:44:41,840 interŝanĝa havu identaj rigardanta valoroj, kiuj ambaŭ estas 1 kaj 2, 1006 00:44:41,840 --> 00:44:44,520 sed ili estas tute malsamaj pecoj de memoro. 1007 00:44:44,520 --> 00:44:46,130 >> Do ni bezonas solvon al tiu. 1008 00:44:46,130 --> 00:44:51,580 Kaj sincere, ĝi similus ke ni nun havas solvon al tiu problemo, dekstre. 1009 00:44:51,580 --> 00:44:55,760 Se ni nun havas la kapablon manipuli aferojn pere de adresoj 1010 00:44:55,760 --> 00:44:59,310 kaj, ia chutes kaj ŝtupetarojn stilo, sekvu tiujn sagoj 1011 00:44:59,310 --> 00:45:02,820 kaj iri ie ni volas en memoro, ni ne povis 1012 00:45:02,820 --> 00:45:06,220 solvi tiun problemon pasante de ĉefa interŝanĝi 1013 00:45:06,220 --> 00:45:09,650 Ne la valorojn ni deziras interŝanĝa, sed nur intuicie 1014 00:45:09,650 --> 00:45:11,630 kion ni povus pasi por interŝanĝi anstataŭe? 1015 00:45:11,630 --> 00:45:12,620 >> [Intermetante VOĈOJ] 1016 00:45:12,620 --> 00:45:15,244 >> DAVID J. Malan: Kial ni ne simple fordoni la adresoj, ĉu ne? 1017 00:45:15,244 --> 00:45:17,470 Kial ni ne donu interŝanĝa a trezoro mapo, se vi volas, 1018 00:45:17,470 --> 00:45:20,950 kiu kondukas lin al la efektivaj valoroj x kaj y. 1019 00:45:20,950 --> 00:45:24,340 Ni swap, fakte ŝanĝi tiuj originalaj bitoj, prefere ol 1020 00:45:24,340 --> 00:45:26,797 nur pasanta kopiojn de la bitoj. 1021 00:45:26,797 --> 00:45:29,130 Kaj do, fakte, tio kio estas tuj estos la solvo. 1022 00:45:29,130 --> 00:45:31,899 Tiu versio estas ĉi tie klare malbona kaj misa. 1023 00:45:31,899 --> 00:45:35,190 Kaj nun, unuavide, ĝi nur aspektas kiel ni aldonis aron da steloj hazarde 1024 00:45:35,190 --> 00:45:37,106 kaj transiris nia fingroj ke estus kompili. 1025 00:45:37,106 --> 00:45:38,460 Sed, estus nun kompili. 1026 00:45:38,460 --> 00:45:40,090 >> Sed ni vidu kion tio signifas. 1027 00:45:40,090 --> 00:45:43,990 Kaj, bedaŭrinde, la aŭtoroj de C povus esti elektinta alian simbolon 1028 00:45:43,990 --> 00:45:46,380 fari ĉi iom pli klara, sed la stelo operatoro 1029 00:45:46,380 --> 00:45:48,610 havas malsamajn signifojn en du malsamaj kuntekstoj. 1030 00:45:48,610 --> 00:45:50,890 Kaj ni jam vidis ambaŭ, sed ni distingi. 1031 00:45:50,890 --> 00:45:55,310 >> Do supren al la supro tie, kiam mi ŝanĝis al kaj b 1032 00:45:55,310 --> 00:46:00,470 plu int a en la malbona versio por int steloj, a kaj b, 1033 00:46:00,470 --> 00:46:01,740 antaŭe, estis entjeroj. 1034 00:46:01,740 --> 00:46:05,752 Kio estas a kaj b nun en la bona, verdaj versio? 1035 00:46:05,752 --> 00:46:06,900 Ili estas adresoj. 1036 00:46:06,900 --> 00:46:09,610 Adresoj de kio, esti klara? 1037 00:46:09,610 --> 00:46:10,770 Adresoj de entjeroj. 1038 00:46:10,770 --> 00:46:12,520 Do la fakto ke mi estas dirante int stelo rimedoj 1039 00:46:12,520 --> 00:46:15,440 tiu estas la adreso de entjero, specife. 1040 00:46:15,440 --> 00:46:19,120 >> Do nun rimarkas en la linioj de kodo, io alia ŝanĝis tro. 1041 00:46:19,120 --> 00:46:22,770 tmp restas la sama, ĉar ĝi estas nur la intertempa entjero, 1042 00:46:22,770 --> 00:46:24,110 neniu memoro magio tie. 1043 00:46:24,110 --> 00:46:26,370 Sed nun bezonas stelon. 1044 00:46:26,370 --> 00:46:28,560 Kaj, fakte, ĉiu alia mencio de a kaj b, 1045 00:46:28,560 --> 00:46:31,780 rimarki ke ĉiuj tio ŝanĝante de ruĝa al verdo 1046 00:46:31,780 --> 00:46:34,209 estas ke mi prefiksi tiuj variabloj kun steloj. 1047 00:46:34,209 --> 00:46:35,750 Ĉar mi ne volas kopii kaj b. 1048 00:46:35,750 --> 00:46:40,350 Ĉar se mi nur kopii kaj b kaj swap a kaj b, kion mi fakte interŝanĝante? 1049 00:46:40,350 --> 00:46:43,760 Nur adresoj, mi volas interŝanĝi kio estas ĉe tiuj adresoj. 1050 00:46:43,760 --> 00:46:44,860 Mi volas iri tien. 1051 00:46:44,860 --> 00:46:48,000 Kaj tial la stelo operatoro interne de mia funkcio, 1052 00:46:48,000 --> 00:46:51,700 Ne interne de la parametro listo, signifas vin iri al tiuj adresoj 1053 00:46:51,700 --> 00:46:54,490 kaj reale ŝanĝi tiujn valorojn. 1054 00:46:54,490 --> 00:46:56,500 >> Do kio faras la foton aspekti anstataŭe. 1055 00:46:56,500 --> 00:47:03,250 Nu, se anstataŭ mi pasante enen por A kaj B ne 1 kaj 2-- 1056 00:47:03,250 --> 00:47:05,790 Mi vere bezonas aldoni unu alia difino tie. 1057 00:47:05,790 --> 00:47:09,030 Do supozu ke tiu bloko de memoro estas je loko 10. 1058 00:47:09,030 --> 00:47:12,960 >> Jen ĉe situo 11, sed ĉi estas iom de simplificación, 1059 00:47:12,960 --> 00:47:18,900 Mi nun havas du elektojn mi pasas x kaj y aŭ ĉu mi pasas iliajn adresojn? 1060 00:47:18,900 --> 00:47:22,500 Se mi pasas iliajn adresojn ŝatas tion, mi nur 1061 00:47:22,500 --> 00:47:25,390 nun bezonas implementar interŝanĝa po verdan kodo 1062 00:47:25,390 --> 00:47:29,080 tiel ke kiam ĝi vidas kaj kiam vidas b, ne nur kopii kaj b 1063 00:47:29,080 --> 00:47:30,540 kaj movi la lakto kaj oranĝa suko. 1064 00:47:30,540 --> 00:47:32,664 La lakto kaj oranĝsuko metaforo nun rompiĝas, 1065 00:47:32,664 --> 00:47:35,060 ĉar tiuj estas tasoj de likva kaj ne mapojn. 1066 00:47:35,060 --> 00:47:37,750 Ni anstataŭe bezonas iri alparoli 10 kaj ni 1067 00:47:37,750 --> 00:47:42,420 bezonas iri alparoli 11, kaj tiam elfaro swapping logiko. 1068 00:47:42,420 --> 00:47:45,580 >> Do la logiko estas la sama, sed ni bezonas iomete malsaman vojon 1069 00:47:45,580 --> 00:47:47,160 de aliranta tiuj variabloj. 1070 00:47:47,160 --> 00:47:52,400 Kaj tiel en la fino, kion la programo devas aspekti estas tiu. 1071 00:47:52,400 --> 00:47:56,610 En swap.c laŭvorte kopiita kaj almetita verdan versio. 1072 00:47:56,610 --> 00:47:58,450 Sed mi bezonas fari unu ŝanĝo. 1073 00:47:58,450 --> 00:48:00,180 Ĝi ne estas sufiĉa nur por ŝanĝi interŝanĝa. 1074 00:48:00,180 --> 00:48:03,830 Kio alia linio de kodo do mi devas ŝanĝi? 1075 00:48:03,830 --> 00:48:04,330 Yeah? 1076 00:48:04,330 --> 00:48:05,770 >> Spektantaro: Kie faras la argumentoj. 1077 00:48:05,770 --> 00:48:07,603 >> DAVID J. Malan: Kie ĝi prenas lian argumenton. 1078 00:48:07,603 --> 00:48:09,985 Do se mi rulumu supren al ĉefa, mi ne povas simple pasas en x kaj y, 1079 00:48:09,985 --> 00:48:12,820 kaj mi promesas, la lasta peco de nova sintakso hodiaŭ. 1080 00:48:12,820 --> 00:48:17,200 Mi bezonas Iam en ne x kaj y sed la adreso de x kaj y. 1081 00:48:17,200 --> 00:48:20,400 Kaj ĝi rezultas, la simbolo ke la aŭtoroj de C elektis 1082 00:48:20,400 --> 00:48:23,860 estas se vi uzas simbolo tie, ne esti konfuzita kun la bitlarĝa ampersand, 1083 00:48:23,860 --> 00:48:27,130 se vi uzas simbolo tie kaj-simbolo tie, 1084 00:48:27,130 --> 00:48:29,570 ĉi ciferojn por vi, kio estas la adreso de x, 1085 00:48:29,570 --> 00:48:31,740 Eble estas 10, kio estas la Adreso de y, eble estas 1086 00:48:31,740 --> 00:48:35,400 11, kaj pasas tiujn en anstataŭe. 1087 00:48:35,400 --> 00:48:37,210 >> Do multe sorbi ĉiuj samtempe. 1088 00:48:37,210 --> 00:48:40,190 Sed ni vidu nun rapide en niaj ceteraj kvar minutoj 1089 00:48:40,190 --> 00:48:42,150 kie aferoj povas iri malbone. 1090 00:48:42,150 --> 00:48:45,120 Kaj kiel flanken, reale Mi prenis tiun bildon, 1091 00:48:45,120 --> 00:48:46,920 TF prenis tiun foton jaro aŭ du antaŭe. 1092 00:48:46,920 --> 00:48:49,190 Do tiu estas la malantaŭa angulo de Eliot Dining Hall. 1093 00:48:49,190 --> 00:48:52,310 Montriloj estas eble la plej malfacila temo kiun ni kovros en CS50. 1094 00:48:52,310 --> 00:48:54,810 Do se vi maltrankvilas la speco de deklivo estas kiel eble estas 1095 00:48:54,810 --> 00:48:56,770 pli de hockey bastono kiel tiu, realigi 1096 00:48:56,770 --> 00:49:00,160 ni ia proksimiĝas pinto en laŭ la koncepta komplekseco. 1097 00:49:00,160 --> 00:49:02,300 >> Tiam mi suprenirigis ĉi foto, ĉar mi ĵuras 1098 00:49:02,300 --> 00:49:05,920 al dio, en aŭtuno 1996, kiam Mi prenis CS50 kun mia instruado ulo, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, li sidigis min en la angulo de la Eliot D. Hall super lunĉo, 1100 00:49:09,620 --> 00:49:12,330 aŭ vespermanĝo, aŭ io por provi helpi min kompreni punteros. 1101 00:49:12,330 --> 00:49:16,520 Kaj tiu estas kie mi estis semajnojn post ĝi estis enkondukita en prelego kiam 1102 00:49:16,520 --> 00:49:18,170 Mi fine komprenis punteros. 1103 00:49:18,170 --> 00:49:20,590 Kaj mi estas esperema ke ĉi klakos multe pli frue por vi. 1104 00:49:20,590 --> 00:49:23,540 Sed realigi ĉi absolute inter la pli kompleksaj temoj 1105 00:49:23,540 --> 00:49:24,420 ni rigardis. 1106 00:49:24,420 --> 00:49:25,819 Sed estas inter la plej potencaj. 1107 00:49:25,819 --> 00:49:28,860 Kaj kiam vi ricevas ĝin, ĝi estas vere ĉiuj nur tuj fine kunfluas. 1108 00:49:28,860 --> 00:49:31,460 Do estu certaj ĝi ne bezonas ĉiuj profundiĝi en hodiaŭ. 1109 00:49:31,460 --> 00:49:32,980 >> Do jen la lasta programo ni tuj rigardi. 1110 00:49:32,980 --> 00:49:35,605 Kaj ni tuj finos kun rapida tri minutoj de Claymation 1111 00:49:35,605 --> 00:49:37,030 farita de nia amiko, Nick Parlante. 1112 00:49:37,030 --> 00:49:41,440 Jen programo, ke sur la supraj du linioj deklaras variablon x kaj y. 1113 00:49:41,440 --> 00:49:44,780 Ambaŭ estas adresoj de entjeroj, AKA punteros. 1114 00:49:44,780 --> 00:49:48,125 Ni tiam asigni sufiĉan memoro por stoki int 1115 00:49:48,125 --> 00:49:51,344 kaj stoki la adreson de tiu memoro en x. 1116 00:49:51,344 --> 00:49:53,260 Do, estas eĉ pli simpla ol la ekzemplo antaŭe. 1117 00:49:53,260 --> 00:49:56,100 Donu al mi kvar bajtoj de memoro, tio estas la grandeco de int, 1118 00:49:56,100 --> 00:49:58,000 kaj metis tiun adreson en x. 1119 00:49:58,000 --> 00:50:01,070 Tiu linio tie signifas iri al la adreso en x 1120 00:50:01,070 --> 00:50:05,270 kaj metis la signifon de vivo, la numero 42 tie. 1121 00:50:05,270 --> 00:50:07,710 Sed tiu linio maltrankviligas min. 1122 00:50:07,710 --> 00:50:12,620 Star y signifas iri al la adreso en y, kaj metis la malbonŝanca numero 13 tie. 1123 00:50:12,620 --> 00:50:15,780 Kial estas danĝera, ĉe tiu punkto en la story-- kvankam rapide rakontis 1124 00:50:15,780 --> 00:50:17,980 en nia velkantan minutoj here-- kial malbona 1125 00:50:17,980 --> 00:50:19,660 por mi diri, iru al la adreso en y? 1126 00:50:19,660 --> 00:50:21,077 >> Spektantaro: Vi ne havas [inaudible]. 1127 00:50:21,077 --> 00:50:22,910 DAVID J. Malan: Mi ne meti ion en y. 1128 00:50:22,910 --> 00:50:25,520 Do kio estas la valoro de y, ĉe tiu punkto en la rakonto? 1129 00:50:25,520 --> 00:50:26,570 Ni ne havas ideon. 1130 00:50:26,570 --> 00:50:29,190 Estas iuj rubo valoro kaj nek Binky scias. 1131 00:50:29,190 --> 00:50:32,532 Se ni povus fini sur tiu noto. 1132 00:50:32,532 --> 00:50:34,832 >> [VIDEO reprodukto] 1133 00:50:34,832 --> 00:50:36,500 >> -Hey, Binky, veki. 1134 00:50:36,500 --> 00:50:39,140 Estas tempo por montrilo amuza. 1135 00:50:39,140 --> 00:50:40,210 >> -Kio estas tio? 1136 00:50:40,210 --> 00:50:41,690 Lernu pri punteros? 1137 00:50:41,690 --> 00:50:43,570 Ho, Goody. 1138 00:50:43,570 --> 00:50:46,600 >> -Well, Por komenci, mi supozas ke ni estas tuj bezonas paron punteros. 1139 00:50:46,600 --> 00:50:47,380 >> -BONE. 1140 00:50:47,380 --> 00:50:51,120 Tiu kodo allocates du punteros Kiu povas indiki al entjeroj. 1141 00:50:51,120 --> 00:50:53,557 >> -OK, Bone mi vidas la du punteros, sed ili 1142 00:50:53,557 --> 00:50:55,140 ne ŝajnas esti indikante nenion. 1143 00:50:55,140 --> 00:50:55,970 >> -Tio Pravas. 1144 00:50:55,970 --> 00:50:58,100 Komence Pointers ne indikas ion ajn. 1145 00:50:58,100 --> 00:51:00,950 La aferoj oni indikas estas nomata pointees kaj fiksante ilin 1146 00:51:00,950 --> 00:51:02,330 estas aparta paŝo. 1147 00:51:02,330 --> 00:51:03,210 >> -Ho, Dekstra, rajto. 1148 00:51:03,210 --> 00:51:03,940 Mi sciis tion. 1149 00:51:03,940 --> 00:51:05,730 La pointees estas apartaj. 1150 00:51:05,730 --> 00:51:08,310 Do kiel vi rezervu pointee? 1151 00:51:08,310 --> 00:51:11,960 >> -OK, Bone ĉi kodo allocates nova entjero pointee, 1152 00:51:11,960 --> 00:51:15,050 kaj tiu parto aroj x atentigi al tio. 1153 00:51:15,050 --> 00:51:16,240 >> -Hey, Kiu aspektas pli bone. 1154 00:51:16,240 --> 00:51:17,743 Do fari ion. 1155 00:51:17,743 --> 00:51:23,580 >> -OK, Mi dereference la puntero x por stoki la numero 42 en ĝian pointee. 1156 00:51:23,580 --> 00:51:27,130 Por tiu lertaĵo, mi bezonas mian magian bastonon de dereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> -Your Magian bastonon de dereferencing? 1158 00:51:30,200 --> 00:51:32,310 Uh, ke, tio estas granda. 1159 00:51:32,310 --> 00:51:34,270 >> -Ĉi Tio estas kion la kodo aspektas. 1160 00:51:34,270 --> 00:51:35,970 Mi ĵus instalis la nombro kaj-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> -Hey, Rigardu tien iras. 1163 00:51:39,140 --> 00:51:43,980 Do, farante dereference sur x sekvas la sago por aliri lia pointee. 1164 00:51:43,980 --> 00:51:46,150 En tiu kazo, por stoki 42 en tie. 1165 00:51:46,150 --> 00:51:50,700 Hej, provu uzi ĝin stoki la nombro 13 tra la alia puntero, y. 1166 00:51:50,700 --> 00:51:51,840 >> -BONE. 1167 00:51:51,840 --> 00:51:56,270 Mi simple iri tien al y, kaj akiri la numero 13 aro supren. 1168 00:51:56,270 --> 00:52:00,380 Kaj tiam preni la sceptron de dereferencing kaj just-- 1169 00:52:00,380 --> 00:52:01,646 >> [Zumilo SOUND] 1170 00:52:01,646 --> 00:52:04,080 >> -Ho, Hey ke ne funkciis. 1171 00:52:04,080 --> 00:52:06,470 Diru, uh, Binky, mi ne faras pensas dereferencing 1172 00:52:06,470 --> 00:52:10,850 y estas bona ideo, ĉar opcio ĝis la pointee estas aparta paŝo. 1173 00:52:10,850 --> 00:52:12,480 Kaj mi ne kredas ke ni iam faris. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Bona punkto. 1175 00:52:14,620 --> 00:52:19,810 >> -Yeah, Ni asignitaj la puntero, y, sed ni neniam starigis ŝin atentigi al pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Tre observema. 1177 00:52:21,590 --> 00:52:23,215 -Hey, Vi serĉas bonan tie, Binky. 1178 00:52:23,215 --> 00:52:26,390 Ĉu vi povas ripari ĝin tiel ke y punktoj al la sama pointee kiel x. 1179 00:52:26,390 --> 00:52:29,290 >> -Sure, Mi uzas mian magian bastonon de puntero farita. 1180 00:52:29,290 --> 00:52:31,970 >> -is Ke tuj estos problemo, kiel antaŭe? 1181 00:52:31,970 --> 00:52:33,790 >> -No, Ĉi tio ne tuŝas la pointees. 1182 00:52:33,790 --> 00:52:35,840 Ĝi nur ŝanĝas unu montrilon atentigi al la sama thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [Krevanta SOUND] 1184 00:52:36,465 --> 00:52:37,450 --as alia. 1185 00:52:37,450 --> 00:52:38,440 >> -Ho mi vidas. 1186 00:52:38,440 --> 00:52:41,200 Nun y punktoj al la sama loko kiel x. 1187 00:52:41,200 --> 00:52:42,950 Do, atendu, nun y estas fiksita. 1188 00:52:42,950 --> 00:52:44,110 Ĝi havas pointee. 1189 00:52:44,110 --> 00:52:47,779 Do vi povas provi la sceptron de dereferencing denove sendi la 13 pli. 1190 00:52:47,779 --> 00:52:51,110 >> -Ho, Bone, ĉi tie iras. 1191 00:52:51,110 --> 00:52:52,330 >> -Hey, Rigardu tion. 1192 00:52:52,330 --> 00:52:53,570 Nun dereferencing verkoj sur y. 1193 00:52:53,570 --> 00:52:57,900 Kaj ĉar la punteros dividas ke oni pointee, ili ambaŭ vidas la 13. 1194 00:52:57,900 --> 00:52:59,952 >> -Yeah, Interŝanĝado, uh, ajn. 1195 00:52:59,952 --> 00:53:01,535 Do, ni tuj ŝanĝos lokojn nun? 1196 00:53:01,535 --> 00:53:03,730 >> -Ho, Cxu ni estas el la tempo. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -por Trovi memoras la tri montrilo reguloj. 1199 00:53:06,520 --> 00:53:09,550 Nombro 1, la baza strukturo estas ke vi havas puntero, 1200 00:53:09,550 --> 00:53:11,630 kaj notas super al pointee. 1201 00:53:11,630 --> 00:53:13,740 Sed la montrilo kaj pointee estas apartaj. 1202 00:53:13,740 --> 00:53:15,620 Kaj la komuna eraro estas starigi puntero 1203 00:53:15,620 --> 00:53:18,000 sed forgesi doni ĝin pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Numero 2, pointer dereferencing komenciĝas je la montrilon 1205 00:53:21,170 --> 00:53:24,020 kaj sekvas lian sagon super aliri lia pointee. 1206 00:53:24,020 --> 00:53:27,815 Kiel ĉiuj scias, ĉi nur funkcias se Estas pointee, kiu ia ricevas reen 1207 00:53:27,815 --> 00:53:29,260 regi numero 1. 1208 00:53:29,260 --> 00:53:31,990 >> Numero 3, pointer asigno prenas unu puntero 1209 00:53:31,990 --> 00:53:35,330 kaj ŝanĝas ĝin al punkto al la sama pointee kiel alia puntero. 1210 00:53:35,330 --> 00:53:37,150 Do post la farita, la du montriloj 1211 00:53:37,150 --> 00:53:40,927 indikos al la sama pointee, kelkfoje ke nomiĝas interŝanĝo. 1212 00:53:40,927 --> 00:53:42,510 Kaj jen ĉio estas al ĝi, vere. 1213 00:53:42,510 --> 00:53:43,130 Bye-bye nun. 1214 00:53:43,130 --> 00:53:43,475 >> [FINO reprodukto] 1215 00:53:43,475 --> 00:53:44,830 >> DAVID J. Malan: Estas tio por CS50. 1216 00:53:44,830 --> 00:53:46,246 Danke al profesoro Nick Parlante. 1217 00:53:46,246 --> 00:53:47,730 Ni vidos vin proksima semajno. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [ELECTRONIC MUSIC Ludante] 1220 00:53:56,435 --> 00:57:22,775