1 00:00:00,000 --> 00:00:03,395 >> [Predvaja glasba] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 DAVID J. Malan: To je všeč novinec seminar danes. 4 00:00:13,280 --> 00:00:14,060 V REDU. 5 00:00:14,060 --> 00:00:15,024 Tako zelo deževno ven. 6 00:00:15,024 --> 00:00:17,690 To kaže, da se zgodi ob sredah, vendar toliko bolj priložnost 7 00:00:17,690 --> 00:00:18,700 za vprašanja danes. 8 00:00:18,700 --> 00:00:22,210 Torej začnimo dejansko s filmom v samo trenutek. 9 00:00:22,210 --> 00:00:24,560 Ampak bomo začeti grandly kot vedno. 10 00:00:24,560 --> 00:00:28,000 >> To je CS50, in to je konec 4. tedna. 11 00:00:28,000 --> 00:00:30,820 Torej, če ste kdaj gledali TV ali film, kjer 12 00:00:30,820 --> 00:00:34,690 tam je nekaj računalniški strokovnjaki in policija, ali FBI, ali nekatere agencija 13 00:00:34,690 --> 00:00:36,930 poskuša ujeti nekaj Nasprotnik, no, ste 14 00:00:36,930 --> 00:00:40,850 verjetno slišali izraz "povečanje" s katerimi je ta tehnik nekako 15 00:00:40,850 --> 00:00:44,750 čudežno približa neskončno daleč videti kriminalci 16 00:00:44,750 --> 00:00:48,640 identitete ali številka registrske tablice v celo šimrom ogledalom 17 00:00:48,640 --> 00:00:50,390 ali lesket od nekoga oči. 18 00:00:50,390 --> 00:00:55,196 Torej res, dajmo si oglejte nekaj takih prizorov iz Hollywooda. 19 00:00:55,196 --> 00:00:55,862 [VIDEO PREDVAJANJE] 20 00:00:55,862 --> 00:00:59,243 -OK, Zdaj pa je dobil dober pogled na vas. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Drži. 23 00:01:07,415 --> 00:01:08,267 Run to nazaj. 24 00:01:08,267 --> 00:01:09,121 >> -Počakaj minuto. 25 00:01:09,121 --> 00:01:11,300 Pojdi desno. 26 00:01:11,300 --> 00:01:12,209 >> -Ni, Zamrzniti. 27 00:01:12,209 --> 00:01:12,750 -Celozaslonski način. 28 00:01:12,750 --> 00:01:13,558 -OK, Zamrzniti. 29 00:01:13,558 --> 00:01:14,820 Omejilo gor na tem, boste? 30 00:01:14,820 --> 00:01:16,530 -Vector V naprej, da tip z zadnjim kolesom. 31 00:01:16,530 --> 00:01:19,400 -Zoom V prav tukaj na tem mestu. 32 00:01:19,400 --> 00:01:22,846 -z Pravo opremo, slika bi se lahko razširil in oster. 33 00:01:22,846 --> 00:01:24,065 -Kaj je to? 34 00:01:24,065 --> 00:01:25,600 -To Program izboljšava. 35 00:01:25,600 --> 00:01:26,860 -Ali Ste jasno, da se vsaka? 36 00:01:26,860 --> 00:01:27,890 Ne vem. 37 00:01:27,890 --> 00:01:29,050 Naj ga izboljšali. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Oddelek A6. 39 00:01:31,575 --> 00:01:33,642 >> -I Okrepljeno podrobnosti, in-- Mislim, da je 40 00:01:33,642 --> 00:01:35,433 dovolj za izboljšanje, ga spustite na mojem zaslonu. 41 00:01:35,433 --> 00:01:37,080 -I Povečala odsev v očeh. 42 00:01:37,080 --> 00:01:38,830 >> -Naj Je ta teče skozi video opremo. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Lahko okrepi to? 44 00:01:40,100 --> 00:01:41,875 >> -Drži se. 45 00:01:41,875 --> 00:01:44,010 >> -Nikoli Delali na tem razmisleku. 46 00:01:44,010 --> 00:01:44,995 >> Odsev -Someone je. 47 00:01:44,995 --> 00:01:45,495 -Reflection. 48 00:01:45,495 --> 00:01:47,399 -Ni Je odsev moškega obraza. 49 00:01:47,399 --> 00:01:48,065 -V Refleksija. 50 00:01:48,065 --> 00:01:48,981 -Ni Je odsev. 51 00:01:48,981 --> 00:01:50,600 -Zoom V na ogledalu. 52 00:01:50,600 --> 00:01:52,712 Saj vidim odsev. 53 00:01:52,712 --> 00:01:54,350 -Ali Si izboljšati podobo od tu? 54 00:01:54,350 --> 00:01:55,370 Si ga -Ali povečati tukaj? 55 00:01:55,370 --> 00:01:56,210 -Ali Ga izboljšati? 56 00:01:56,210 --> 00:01:56,900 Lahko si ga povečati? 57 00:01:56,900 --> 00:01:57,870 >> -Ali Moramo okrepiti to? 58 00:01:57,870 --> 00:01:58,717 >> -Ali Ga izboljšati? 59 00:01:58,717 --> 00:02:00,050 -Drži Na sekundo, bom okrepila. 60 00:02:00,050 --> 00:02:00,924 -Zoom V na vratih. 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 -Vseliti se. 64 00:02:03,490 --> 00:02:03,990 -Več. 65 00:02:03,990 --> 00:02:04,690 -Wait, Stop. 66 00:02:04,690 --> 00:02:05,190 -Stop. 67 00:02:05,190 --> 00:02:05,970 Ga -Pause. 68 00:02:05,970 --> 00:02:09,460 -Rotate Nam 75 stopinj okoli navpičnice, prosim. 69 00:02:09,460 --> 00:02:10,962 -Stop. 70 00:02:10,962 --> 00:02:14,040 Pojdi nazaj na delu o vratih, spet. 71 00:02:14,040 --> 00:02:15,860 >> -Got Slikovno ojačevalec, ki lahko bitno sliko? 72 00:02:15,860 --> 00:02:18,776 >> Hej, morda bomo lahko uporabite Pradeep Sen metoda za prikaz v oknih. 73 00:02:18,776 --> 00:02:20,372 -To Programska oprema je stanje tehnike. 74 00:02:20,372 --> 00:02:21,845 >> -V Lastnih vrednosti je izklopljen. 75 00:02:21,845 --> 00:02:24,300 >> -z Desno Kombinacija algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> Sprejeti odprava -Je algoritmi na naslednjo stopnjo, 77 00:02:26,755 --> 00:02:28,730 in sem jih lahko uporabite za krepitev tega fotografijo. 78 00:02:28,730 --> 00:02:31,286 >> -Lock Na in povečavo Z-osi. 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 In okrepiti. 83 00:02:34,960 --> 00:02:37,180 >> [END PREDVAJANJE] 84 00:02:37,180 --> 00:02:41,160 >> DAVID J. Malan: V redu, tako da vsi od teh so dejansko besede. 85 00:02:41,160 --> 00:02:44,450 Oni samo nanizani združijo v Tako da je dejansko ni smiselna. 86 00:02:44,450 --> 00:02:48,400 In v resnici, CS50 in tečaji všeč skuša uničiti veliko TV in filmi 87 00:02:48,400 --> 00:02:48,900 zate. 88 00:02:48,900 --> 00:02:52,330 Ker če ti računalniški strokovnjaki so rožljanje off izrazov in rekel 89 00:02:52,330 --> 00:02:56,860 fancy stvari, kot lastni vektorji, in z-os, 90 00:02:56,860 --> 00:02:59,572 in poljubno število drugih dejansko bolj tehnični izrazi, 91 00:02:59,572 --> 00:03:02,030 oni so res samo zavezovanja Besede skupaj vse prepogosto. 92 00:03:02,030 --> 00:03:05,020 Je, da je eden od naših upanju, da kot stranski učinek jemanja tečajev 93 00:03:05,020 --> 00:03:08,245 kot je ta, bo več ljudi v svet dejansko lahko tehtajo v 94 00:03:08,245 --> 00:03:12,040 in samo vedno tako malo vplivajo na Kakovost in natančnost teh filmov? 95 00:03:12,040 --> 00:03:14,350 >> V resnici pa si oglejte realnosti. 96 00:03:14,350 --> 00:03:18,070 Torej, tukaj je fotografija osebje Mary, eden od naših učnih štipendistov. 97 00:03:18,070 --> 00:03:20,050 In domnevam, ona je sum nečesa. 98 00:03:20,050 --> 00:03:23,730 In vendar, tam je kanček nekatere dokaz v svojem očesu, 99 00:03:23,730 --> 00:03:25,480 ali v odsevu njenih očala. 100 00:03:25,480 --> 00:03:30,760 No, če smo storili natanko tako, kot v filmih predlaga, pri čemer smo zoom in "okrepi", 101 00:03:30,760 --> 00:03:34,080 to je, koliko informacij V Marijinega obraza 102 00:03:34,080 --> 00:03:36,795 ko posnamete sliko s tem originalni ločljivosti. 103 00:03:36,795 --> 00:03:39,120 >> In v resnici, si lahko ogledate te pike. 104 00:03:39,120 --> 00:03:41,900 In ti so, kaj so imenovane pik, P-I-X-E-L-S, 105 00:03:41,900 --> 00:03:45,740 ki je le kvadratni tipično da je pika, ki sestavlja sliko. 106 00:03:45,740 --> 00:03:49,200 In nazaj v dan, in dejansko tudi je danes z nekaterimi današnjega LED televizorji 107 00:03:49,200 --> 00:03:51,950 ali LCD televizorji, če imaš ena v svoji sobi ali doma, 108 00:03:51,950 --> 00:03:55,100 če greš gor zelo blizu njega, in še posebej, če je nekoliko starejši TV, 109 00:03:55,100 --> 00:03:58,760 si verjetno lahko celo videli te pike in to je tisto, sestavite sliko. 110 00:03:58,760 --> 00:04:00,980 >> In ni več informacij, kot to. 111 00:04:00,980 --> 00:04:05,400 Lahko bi "okrepi", v smislu glajenje stvari znova in nekako 112 00:04:05,400 --> 00:04:09,040 sklepalo vrste, nekako kar Barva mora biti zraven Marijine oči 113 00:04:09,040 --> 00:04:10,910 tako da je dejansko ni tako pixelated. 114 00:04:10,910 --> 00:04:14,510 Ampak, če sem vedno povečave, tam je slab človek v svojem očesu. 115 00:04:14,510 --> 00:04:16,600 Všeč, da je vse informacije, ki jih imajo. 116 00:04:16,600 --> 00:04:18,920 Ne morete ustvariti Podatki iz nič. 117 00:04:18,920 --> 00:04:20,790 Tam je samo končna število bitov tam. 118 00:04:20,790 --> 00:04:22,873 >> Torej Problem Set 4, kjer imate priložnost 119 00:04:22,873 --> 00:04:24,580 igral s tovrstno svetu. 120 00:04:24,580 --> 00:04:27,610 V problema Set 4, boste raziskati svet grafike in forenzike, 121 00:04:27,610 --> 00:04:30,870 in dejansko napisati kodo da povrne izgubljenih slik. 122 00:04:30,870 --> 00:04:33,510 Boste napisati kodo, ki manipulira obstoječih slik 123 00:04:33,510 --> 00:04:36,120 in končno razumem, kaj je dogaja pod pokrovom. 124 00:04:36,120 --> 00:04:38,540 >> In se izkaže, da je dejansko ni vse tako zapleteno. 125 00:04:38,540 --> 00:04:41,320 Na primer, če smo želeli predstavljajo smeška kjer 126 00:04:41,320 --> 00:04:44,160 teh črnih pik, ali pa te črne pike, 127 00:04:44,160 --> 00:04:47,230 dobro, smo lahko enostavno predstavljajo jim kot resnično bitmap. 128 00:04:47,230 --> 00:04:50,040 In če ste že kdaj slišali, da izraz bitmap, morda 129 00:04:50,040 --> 00:04:52,330 zdaj začne narediti danes malo več smisla. 130 00:04:52,330 --> 00:04:53,580 >> Mi že vemo, kaj malo je. 131 00:04:53,580 --> 00:04:54,160 To je 0 ali 1. 132 00:04:54,160 --> 00:04:56,201 In zemljevid je le nekaj kot kos papirja 133 00:04:56,201 --> 00:04:59,180 ki vam daje navodila in ima morda mrežo x in y koordinatah. 134 00:04:59,180 --> 00:05:00,540 Torej, tukaj je bitmap. 135 00:05:00,540 --> 00:05:03,680 To je zemljevid bitov katerim 1 je očitno 136 00:05:03,680 --> 00:05:07,857 tekoč predstavljata belo slikovno točko, in 0 se dogaja, da predstavlja črno piko. 137 00:05:07,857 --> 00:05:09,440 Vendar pa bi prav gotovo flip okoli. 138 00:05:09,440 --> 00:05:11,648 To pa res ni važno, tako Dokler smo dosledni. 139 00:05:11,648 --> 00:05:15,570 In tukaj je, kako v binary-- notranjosti pomnilnika računalnika, ali celo v notranjosti 140 00:05:15,570 --> 00:05:18,160 datoteke na trdem drive-- lahko shranite 141 00:05:18,160 --> 00:05:20,240 najpreprostejši smeška slik. 142 00:05:20,240 --> 00:05:23,990 Toda kaj smo, seveda, manjka v tej sliki? 143 00:05:23,990 --> 00:05:24,610 Color, kajne? 144 00:05:24,610 --> 00:05:28,220 To je očitno naslednji korak ali povečanje za izboljšanje tega z barvo. 145 00:05:28,220 --> 00:05:32,230 Torej, žal s samo en bit, 0 ali 1, smo lahko predstavljajo barvo. 146 00:05:32,230 --> 00:05:36,100 To je lahko rdeče ali modre ali črna ali bela ali zelena ali roza, 147 00:05:36,100 --> 00:05:37,420 ali kateri koli parov barv. 148 00:05:37,420 --> 00:05:40,860 Ampak zavoljo enostavnosti je, da bomo le domnevati, črni in beli barvi. 149 00:05:40,860 --> 00:05:45,930 >> Torej, kaj logično potrebujemo, če želimo želijo izvajati barvo v sliki? 150 00:05:45,930 --> 00:05:49,080 Kaj moramo storiti? 151 00:05:49,080 --> 00:05:51,900 Like, če je omejevalni dejavnik tukaj je, da z enega bita lahko samo 152 00:05:51,900 --> 00:05:55,977 predstavljata dve stanji, 0 ali 1, bel ali črn, kaj želiš, da storim? 153 00:05:55,977 --> 00:05:56,810 OBČINSTVO: Več podatkov. 154 00:05:56,810 --> 00:05:58,813 DAVID J. Malan: Več bitov, yeah več podatkov, več bitov. 155 00:05:58,813 --> 00:06:01,440 In, seveda, to je točno, kako barvne slike so zastopani. 156 00:06:01,440 --> 00:06:05,120 Namesto uporabo enotnega bit, A 0 ali 1 za vsak piksel, vsaka pika, 157 00:06:05,120 --> 00:06:06,170 ki ste jo pravkar uporabljate več. 158 00:06:06,170 --> 00:06:09,660 Morda uporabite 8, morda, bolj pogosto uporabite 24, in res, v Problem Set 159 00:06:09,660 --> 00:06:13,300 4, se igrate z datoteko format, ki uporablja 24 bitov običajno. 160 00:06:13,300 --> 00:06:15,430 >> Vendar je večina od vas verjetno seznanjeni z JPEG. 161 00:06:15,430 --> 00:06:17,460 Če ste kdaj sprejeti fotografija na vašem telefonu, 162 00:06:17,460 --> 00:06:20,360 ali naložili ali videla nekaj na Facebook ali Flickr, vsaka številka 163 00:06:20,360 --> 00:06:24,882 spletnih strani, foto osnovi, ki ste jih verjetno videl sliko JPEG prej. 164 00:06:24,882 --> 00:06:27,840 In se je izkazalo, da je to datoteka format bomo uporabili v PSet 4, 165 00:06:27,840 --> 00:06:30,340 s katerim boste morali obnoviti slike 166 00:06:30,340 --> 00:06:35,160 ki sem jih pomotoma izbrisali od A poškodovan pomnilniško kartico v fotoaparatu, 167 00:06:35,160 --> 00:06:35,800 če hočete. 168 00:06:35,800 --> 00:06:38,490 >> In se izkaže, da je, čeprav JPEG je precej sophisticated-- 169 00:06:38,490 --> 00:06:40,906 to je veliko bolj prefinjene od črnih in belih pik 170 00:06:40,906 --> 00:06:44,480 smo videli pred nekaj trenutki, kajti tam je dejansko fancy algoritmi, ki 171 00:06:44,480 --> 00:06:47,410 se uporabljajo za stiskanje JPEG, tako da lahko imajo res lepo, 172 00:06:47,410 --> 00:06:49,832 kakovost slike, vendar z uporabo relativno malo bitov. 173 00:06:49,832 --> 00:06:51,790 In bomo prišli nazaj stiskanje pred dolgo. 174 00:06:51,790 --> 00:06:56,280 Izkazalo se je, da je prvi trije bajti v image-- JPEG 175 00:06:56,280 --> 00:07:02,750 ne glede na to, kaj ste posneli fotografijo of-- so vrednosti 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Z drugimi besedami, če vas le glej, da se vzorec bitov, 177 00:07:05,990 --> 00:07:09,180 tukaj zastopali trije bajtov ali 24 bitov skupaj, 178 00:07:09,180 --> 00:07:13,810 z veliko verjetnostjo lahko sklepamo, da iščete na njem je to prva tri 179 00:07:13,810 --> 00:07:15,230 bajtov JPEG. 180 00:07:15,230 --> 00:07:18,040 In to je tisto, kar je znano kot podpisu JPEG. 181 00:07:18,040 --> 00:07:20,540 Veliko formatov tam ponavadi začnejo 182 00:07:20,540 --> 00:07:23,735 z določenimi vzorci 0s in 1s, tako da Windows in Mac OS, in iOS, 183 00:07:23,735 --> 00:07:28,272 in Android vem, kakšne datoteke, ki jih so poleg tako imenovanega spisa 184 00:07:28,272 --> 00:07:29,730 razširitev, ki imajo veliko datotek. 185 00:07:29,730 --> 00:07:32,590 Če ste .jpg, da je en namig na računalnik. 186 00:07:32,590 --> 00:07:35,310 >> Torej Dovolite zdaj poglej tole malo bolj tehnično. 187 00:07:35,310 --> 00:07:37,390 Vemo decimalko Sistem je 0 do 9. 188 00:07:37,390 --> 00:07:38,740 Vemo, binarna 0 in 1. 189 00:07:38,740 --> 00:07:41,842 In če mislite, da nazaj na PSet 0, smo imeli ste Rvati, 190 00:07:41,842 --> 00:07:43,800 za malo, nekaj imenuje šestnajstiški, 191 00:07:43,800 --> 00:07:47,320 kjer imate 16 številk, namesto 10 ali namesto 2. 192 00:07:47,320 --> 00:07:50,405 In te številke, po dogovoru, so številke od 0 do 9 in nato 193 00:07:50,405 --> 00:07:55,040 do f, kjer je f predstavlja, kaj decimalno število, prav tako hitro sanity 194 00:07:55,040 --> 00:07:56,640 ček? 195 00:07:56,640 --> 00:07:57,610 Torej, 15. 196 00:07:57,610 --> 00:08:01,390 In mora predstavljati 10, samo z narava naročanja, ki sem jih dal. 197 00:08:01,390 --> 00:08:04,350 To je samo poljubna konvencija, ampak to je precej standardno. 198 00:08:04,350 --> 00:08:06,870 >> Torej, če se ozremo na tem vzorcu treh bytes-- Dovolite 199 00:08:06,870 --> 00:08:09,620 Samo začeti gledati v skladno s tem, kako 200 00:08:09,620 --> 00:08:12,450 računalniški znanstveniki na splošno poglej in razmišljati o datotekah. 201 00:08:12,450 --> 00:08:15,580 Lahko zagotovo pomislite datoteke v 0s in 1s in desetiško, 202 00:08:15,580 --> 00:08:19,340 ampak v resnici, smo nagnjeni k uporabi binarno ali bolj običajno hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 nazaj od PSet 0. 204 00:08:20,760 --> 00:08:25,857 Torej mi predlagamo, da 255, 216 in 255 so le ti vzorci 0s in 1s. 205 00:08:25,857 --> 00:08:28,440 In to lahko preverite, če ste želite storiti math od 0 tedna. 206 00:08:28,440 --> 00:08:30,810 Ampak, za zdaj, le domnevati, da je to res drži. 207 00:08:30,810 --> 00:08:33,850 Pravkar sem prepisovati tri decimalna številke kot tri binarne vrednosti. 208 00:08:33,850 --> 00:08:36,100 Zdaj, kaj bom storiti, je preprosto dodajte nekaj belega prostora, 209 00:08:36,100 --> 00:08:37,266 samo zavoljo berljivost je. 210 00:08:37,266 --> 00:08:39,940 In obvestilo, da sem šele tekoč premakniti stvari narazen. 211 00:08:39,940 --> 00:08:43,090 Torej, pred, po, pred, po. 212 00:08:43,090 --> 00:08:46,180 Delam nič zanimivo drugo kot le širi stvari tako 213 00:08:46,180 --> 00:08:50,380 da obvestilo vsak niz osmih bitov je zdaj dva kompleta štirih bitov. 214 00:08:50,380 --> 00:08:54,920 To je koristno, ker heksadecimalno je še posebej v modi 215 00:08:54,920 --> 00:09:00,930 ker vsak šestnajstiški mestna 0 skozi f, ali natančneje 0 do 15, 216 00:09:00,930 --> 00:09:03,430 lahko predstavimo z natanko štiri bitov. 217 00:09:03,430 --> 00:09:07,960 Z drugimi besedami, v šestnajstiškem če vas želijo predstavlja 0, to je samo 0000, 218 00:09:07,960 --> 00:09:08,780 štiri ničle. 219 00:09:08,780 --> 00:09:13,997 In če želite, da predstavljajo 15, to je 1111, kar je štiri bitov. 220 00:09:13,997 --> 00:09:16,080 In če vam matematika, če je to tisti kraj, 221 00:09:16,080 --> 00:09:18,210 to je 16s mesto, da se dogaja, da you-- 222 00:09:18,210 --> 00:09:19,960 namesto da se dogaja to-- žal, v binarno, 223 00:09:19,960 --> 00:09:23,660 da se dogaja, da vam 15, tisti kraj, dvojke mestu, štiric in osmice mesto. 224 00:09:23,660 --> 00:09:26,821 Torej mi predlagamo, da se ta niz štirih bitov na levi 225 00:09:26,821 --> 00:09:28,070 je tisto, kar bomo, da pokličete f. 226 00:09:28,070 --> 00:09:30,110 To je največje število, ki ga lahko predstavlja s štirimi bitov. 227 00:09:30,110 --> 00:09:33,300 In smo že vedeli iz šestnajstiško, f je največja številka v šestnajstiški. 228 00:09:33,300 --> 00:09:36,020 Imava še eno f tam, dva več tam. 229 00:09:36,020 --> 00:09:38,980 In za zdaj, vzemite na veri da sem naredil math pravico 230 00:09:38,980 --> 00:09:41,890 in da levo polovico tistih bitov, 1101, 231 00:09:41,890 --> 00:09:43,980 je ista stvar kot d šestnajstiško. 232 00:09:43,980 --> 00:09:46,490 In desno roko, 1000, je le 8. 233 00:09:46,490 --> 00:09:48,140 >> In da je eden je težko videti, kajne? 234 00:09:48,140 --> 00:09:51,670 8 represents-- je prav pod tem osmice mestu. 235 00:09:51,670 --> 00:09:56,040 Torej imamo eno v stolpcu osmic in nič v štirih, dvojke in enice. 236 00:09:56,040 --> 00:09:59,830 Torej, zdaj bolj konvencionalno, ljudje se nagibajo pisati šestnajstiških števk, kot je ta, 237 00:09:59,830 --> 00:10:03,000 ste jih pravkar Mljackati skupaj, in potem jih predpono 0x. 238 00:10:03,000 --> 00:10:05,920 To ne pomeni nič drugega kot vizualni namig na human-- 239 00:10:05,920 --> 00:10:10,350 tukaj prihaja hexadecimal value-- ker morda drugače ne bo očitno. 240 00:10:10,350 --> 00:10:13,629 >> Kar pomeni, navsezadnje, da vzorec ničel in enic, 241 00:10:13,629 --> 00:10:16,170 ali vzorec heksadecimalno številke ekvivalentno, da ste 242 00:10:16,170 --> 00:10:18,990 bodo začeli iskati V Problem Set 4 this-- 243 00:10:18,990 --> 00:10:22,120 ter Problem Set 4 spec bodo hodili ste skozi to v več detail-- 244 00:10:22,120 --> 00:10:25,344 toda zavedati kot nekakšno skrivnostno, kot je to morda videti na prvi pogled, 245 00:10:25,344 --> 00:10:27,010 boste lahko videli to veliko. 246 00:10:27,010 --> 00:10:30,320 In v resnici tudi v GDB je razhroščevalnik smo uvedli v ponedeljek 247 00:10:30,320 --> 00:10:35,440 Dan uvaja v PSet 3, se dogaja vam pogosto kažejo šestnajstiških vrednosti 248 00:10:35,440 --> 00:10:39,910 samo zato, ker so bolj konvencionalne kot decimalno ali binarni 249 00:10:39,910 --> 00:10:41,157 V svetu računalnikov. 250 00:10:41,157 --> 00:10:42,490 Zdaj kaj je dal to v kontekst. 251 00:10:42,490 --> 00:10:48,040 Mnogi od vas bi to zapomniti slika tukaj, ki je prišel iz česa? 252 00:10:48,040 --> 00:10:51,240 Vista, tako da tudi prej, kot je da, Windows XP naredil to prvenec. 253 00:10:51,240 --> 00:10:52,620 Torej je to lepa pokrajina. 254 00:10:52,620 --> 00:10:55,940 In v resnici, če suniti okrog online-- Mislim, da je članek Wikipedia, 255 00:10:55,940 --> 00:11:00,110 kjer je nekdo zelo presenetljivo šel ven našel to mesto v svetu, ustanovljen 256 00:11:00,110 --> 00:11:02,240 njegov fotoaparat ravno prav place-- 257 00:11:02,240 --> 00:11:06,510 in ta danes izgleda like-- vendar to je točno isto nastavitev. 258 00:11:06,510 --> 00:11:10,060 Ta slika, čeprav je v datoteki format se imenuje bitna, b-m-p. 259 00:11:10,060 --> 00:11:12,910 In bomo vzeli super Bežen pogled na kaj to pomeni. 260 00:11:12,910 --> 00:11:17,770 >> Ampak bitmap je le drugačen način predstavljajo podobe še vedno uporabljajo pik 261 00:11:17,770 --> 00:11:19,580 v 0s in 1s, na koncu. 262 00:11:19,580 --> 00:11:23,282 Toda na hiter pogled, da ima bolj zanimivo podpis 263 00:11:23,282 --> 00:11:24,490 na začetku spisa. 264 00:11:24,490 --> 00:11:26,670 To ni samo tri bajtov, ne obstaja 265 00:11:26,670 --> 00:11:30,770 cel kup vzorcev bajtov ki so vnaprej določene pomene. 266 00:11:30,770 --> 00:11:34,490 Na primer, nekje v Prvih nekaj bajtov bitmap slike 267 00:11:34,490 --> 00:11:37,440 se bo z velikostjo slika, je širina slike, 268 00:11:37,440 --> 00:11:40,390 višina slike, zato uporabne metapodatke, če hočete. 269 00:11:40,390 --> 00:11:43,940 Koristne informacije, da je Photoshop ali katere koli grafičnem programu, ki ga uporabljate 270 00:11:43,940 --> 00:11:45,180 lahko dejansko skrbi. 271 00:11:45,180 --> 00:11:47,170 >> Torej, več o tem v Problem set 4, vendar je to 272 00:11:47,170 --> 00:11:49,220 Samo reči, da Na koncu dneva 273 00:11:49,220 --> 00:11:52,390 vsi formati datotek, ki jih že uporabljajo za years-- Microsoft Word datoteke, 274 00:11:52,390 --> 00:11:55,820 Številke datoteke, datoteke Excel, poljubno število datotečnih formatov 275 00:11:55,820 --> 00:11:57,770 da bi imeli nekateri znana končnica datoteke 276 00:11:57,770 --> 00:12:00,130 so le 0s in 1s pod njim pokrovom. 277 00:12:00,130 --> 00:12:02,970 In ljudje so se odločili, kaj konvencij, 278 00:12:02,970 --> 00:12:08,340 kaj vzorci 0s in 1s predstavljajo Word datoteka versus datoteko Excel, 279 00:12:08,340 --> 00:12:10,322 versus poljubno število drugih formatih. 280 00:12:10,322 --> 00:12:12,780 Torej, v PSet 4, boste imeli priložnost igrati s tem. 281 00:12:12,780 --> 00:12:14,405 >> Ampak kaj to pomeni, da imajo struct. 282 00:12:14,405 --> 00:12:18,012 To je pravzaprav lepo segue zdaj v C, ki je le nekaj 283 00:12:18,012 --> 00:12:20,220 za dodatne funkcije, ki Vam ni pogledal še. 284 00:12:20,220 --> 00:12:24,230 To je zelo majhen jezik in eden od lepo funkcije okoli C je struct. 285 00:12:24,230 --> 00:12:27,300 Na primer, če vas želel represent-- dovolimo 286 00:12:27,300 --> 00:12:33,690 da ste želeli, da imajo spremenljivke, ki predstavlja študent v nekem programu. 287 00:12:33,690 --> 00:12:37,330 Morda ste pisali tečaj Program za registracijo, ali jedro nakupovanje 288 00:12:37,330 --> 00:12:38,870 Orodje, ali nekaj takega. 289 00:12:38,870 --> 00:12:42,922 Kaj so koščki podatkov, povezanih študent, ki pride na misel? 290 00:12:42,922 --> 00:12:44,880 Tako kot študent je zastopana s katere vrednosti? 291 00:12:44,880 --> 00:12:45,732 Ja? 292 00:12:45,732 --> 00:12:46,940 Imate ime kot študenta. 293 00:12:46,940 --> 00:12:48,900 Kaj drugega tipični študent? 294 00:12:48,900 --> 00:12:49,320 >> OBČINSTVO: [neslišno] 295 00:12:49,320 --> 00:12:50,200 >> DAVID J. Malan: Torej, žal. 296 00:12:50,200 --> 00:12:50,660 >> OBČINSTVO: Age. 297 00:12:50,660 --> 00:12:52,980 >> DAVID J. Malan: An starost ali rojstni dan enakovredno, ja. 298 00:12:52,980 --> 00:12:53,557 Kaj drugega? 299 00:12:53,557 --> 00:12:54,390 OBČINSTVO: ID številka? 300 00:12:54,390 --> 00:12:57,460 DAVID J. Malan: Torej številke ID, morda telefonsko številko, morda domu ali hišo, 301 00:12:57,460 --> 00:12:58,670 ali višja šola, ali nekaj takega. 302 00:12:58,670 --> 00:13:01,820 Poljubno število kosov podatkov, morda imate v imeniku 303 00:13:01,820 --> 00:13:03,890 je tisto, kar bi lahko določite študenta. 304 00:13:03,890 --> 00:13:08,490 Torej, če smo želeli, da to stori, v kodi, bomo morda narediti nekaj preprostega, kot je ta. 305 00:13:08,490 --> 00:13:15,670 Morda bomo imeli program tako, da ima recimo, int main (praznino). 306 00:13:15,670 --> 00:13:18,920 In če želim predstavljata študent, da imam, na primer, 307 00:13:18,920 --> 00:13:24,330 niz se imenuje ime za tega študenta, niz pozval domu za tega študenta, 308 00:13:24,330 --> 00:13:26,900 Mogoče int imenuje ID za tega študenta. 309 00:13:26,900 --> 00:13:30,840 In ker sem z vrvico, I morali iti nazaj in dal gor CS50.h. 310 00:13:30,840 --> 00:13:33,300 Mogoče bom potreboval stdio.h. 311 00:13:33,300 --> 00:13:38,190 Zato mi dovolite, preemptively storiti tisti, in sem dogaja, da to imenujemo student.c za zdaj 312 00:13:38,190 --> 00:13:40,080 in shranite to. 313 00:13:40,080 --> 00:13:44,206 >> In zdaj ne morem narediti nekaj, s temi spremenljivkami. 314 00:13:44,206 --> 00:13:46,830 In smo le, da bo napisal da kot komentar v pseudo kodo, 315 00:13:46,830 --> 00:13:48,829 ker to ni zanimivo kaj storimo za zdaj. 316 00:13:48,829 --> 00:13:51,242 OK, tako da je to program, ki nekako shranjuje študenta. 317 00:13:51,242 --> 00:13:53,450 Kaj želim storiti, če sem želite shraniti dve študente? 318 00:13:53,450 --> 00:13:55,991 Torej, moj prvi instinkt se dogaja da bo vse v redu, počakaj malo, 319 00:13:55,991 --> 00:14:01,920 če imam še en študent, zakaj ne jaz pač niz ime 2, niz domu 2, 320 00:14:01,920 --> 00:14:04,190 int ID2. 321 00:14:04,190 --> 00:14:06,540 In smo naredili Gone po tej cesti pred 322 00:14:06,540 --> 00:14:10,890 in kaj je naša rešitev, kar se zdi biti nekakšen hekerske copy paste 323 00:14:10,890 --> 00:14:11,555 delo tu? 324 00:14:11,555 --> 00:14:12,346 OBČINSTVO: Matrika. 325 00:14:12,346 --> 00:14:13,830 DAVID J. Malan: Ja, bi lahko uporabili celo paleto. 326 00:14:13,830 --> 00:14:15,620 Right to zelo hitro postane okoren. 327 00:14:15,620 --> 00:14:18,453 Moraš nekako samovoljno začeti poimenovanje vseh teh spremenljivkah. 328 00:14:18,453 --> 00:14:22,190 In ti, človek, morali voditi skladbo, da OK NAME2 ustreza 329 00:14:22,190 --> 00:14:25,060 z dorm2 ustreza ID2. 330 00:14:25,060 --> 00:14:26,200 To samo postane nered. 331 00:14:26,200 --> 00:14:29,350 Torej, to je veliko lažje, odpokličejo od pred nekaj tedni, 332 00:14:29,350 --> 00:14:34,300 samo da bi zmerjali niz in nam morda dajejo trije izmed njih. 333 00:14:34,300 --> 00:14:36,940 In potem pa imamo niz dorms in imajo 334 00:14:36,940 --> 00:14:41,900 tri od tistih, ali s konstantno, int ids in imajo tri od teh. 335 00:14:41,900 --> 00:14:45,250 Ampak tudi zdaj ta občutek malo površen, kajne. 336 00:14:45,250 --> 00:14:49,440 Govorimo o študentov in še Res sem stanovanje na nizki ravni 337 00:14:49,440 --> 00:14:50,470 Podrobnosti o izvajanju. 338 00:14:50,470 --> 00:14:52,790 Študent je ime in domu in ID. 339 00:14:52,790 --> 00:14:59,814 >> Zakaj samo ne morem razglasi spremenljivko imenuje študent in poklicati to je to. 340 00:14:59,814 --> 00:15:02,230 In če želim še en študent, Zakaj ne bi samo call it t. 341 00:15:02,230 --> 00:15:05,260 Ali pa, če želim cel kup študentov, zakaj ne sem 342 00:15:05,260 --> 00:15:09,740 povedati, da sem imel cel razred študentov, in to je tri izmed njih. 343 00:15:09,740 --> 00:15:12,470 Z drugimi besedami, zakaj ne morem priti z mojo lastno vrsto podatkov, ki se imenuje 344 00:15:12,470 --> 00:15:15,641 Študenti, znotraj katerih je ime, je ID, ki je na domu, 345 00:15:15,641 --> 00:15:16,890 je poljubno število drugih področjih. 346 00:15:16,890 --> 00:15:19,030 In se izkaže, vas more storiti prav to. 347 00:15:19,030 --> 00:15:21,850 >> Torej C ima to funkcijo, imenovano struct. 348 00:15:21,850 --> 00:15:24,700 To je jezik, funkcija, ki nam omogoča, da naredite točno to. 349 00:15:24,700 --> 00:15:28,370 Grem, da gredo naprej in odpirajo structs.h 350 00:15:28,370 --> 00:15:32,299 kjer bomo videli po definiciji študenta. 351 00:15:32,299 --> 00:15:35,215 Izkazalo se je - in to je še enostavnejši od tistega, ki vključuje ID 352 00:15:35,215 --> 00:15:36,080 pred nekaj trenutki. 353 00:15:36,080 --> 00:15:39,120 Če želite, da bi prišli do vaša domača vrsta podatkov, 354 00:15:39,120 --> 00:15:42,750 in poleg ZU, in zoglenelega in float in vse te druge, ki obstajajo, 355 00:15:42,750 --> 00:15:45,810 lahko storite tako, da dobesedno pisanje typedef struct, 356 00:15:45,810 --> 00:15:47,880 potem nekateri zaviti oklepaji, znotraj katerega ste 357 00:15:47,880 --> 00:15:51,460 Seznam spremenljivk, ki jih želite povezujejo s tem novim podatkov po meri 358 00:15:51,460 --> 00:15:55,670 tip kot ime in domu, in nato po zavitih oklepajih 359 00:15:55,670 --> 00:15:57,860 daš ime za nov podatkovni tip. 360 00:15:57,860 --> 00:15:59,220 Tako, na primer, študent. 361 00:15:59,220 --> 00:16:03,247 >> In kaj je zdaj lepo o tem je, da če se ozremo na ustrezno oznako, 362 00:16:03,247 --> 00:16:05,080 konvencija, prvi od vseh, je, da to 363 00:16:05,080 --> 00:16:08,230 v datoteki imenovani nekaj dot h, datoteke glave, ki imamo ne 364 00:16:08,230 --> 00:16:09,780 začel uporabljati sebe preveč. 365 00:16:09,780 --> 00:16:12,120 Ampak bomo za začetek uporabljajo zelo malo zdaj. 366 00:16:12,120 --> 00:16:18,650 In kaj lahko storimo s tem, v končni fazi, v teh nekaj vrstic kode 367 00:16:18,650 --> 00:16:22,130 se razglasi točno to vrsta podatkov, študent. 368 00:16:22,130 --> 00:16:23,230 In zdaj pa si ga uporabljate. 369 00:16:23,230 --> 00:16:27,274 >> Bom zdaj šel v datoteka z imenom structs1.c. 370 00:16:27,274 --> 00:16:29,440 In vzemimo si na Nekaj ​​značilnosti tukaj. 371 00:16:29,440 --> 00:16:32,250 Torej stvari, tu je večinoma poznajo, in bomo 372 00:16:32,250 --> 00:16:35,040 prišel nazaj na to, kar se ne pozna vsak trenutek. 373 00:16:35,040 --> 00:16:39,880 To je seveda tudi moja header datoteke, ki je nov, kot tudi, 374 00:16:39,880 --> 00:16:42,580 razen PSet 3, kjer odpoklic, imamo helpers.h. 375 00:16:42,580 --> 00:16:45,150 Torej boste morda spomni #include helpers.h. 376 00:16:45,150 --> 00:16:49,381 >> Zakaj čeprav sem z uporabo narekovajev namesto kotnih oklepajih? 377 00:16:49,381 --> 00:16:50,630 Kdaj izbrati med njimi? 378 00:16:50,630 --> 00:16:52,310 Skoraj vedno sem se zdi, uporabljati kotne oklepaje. 379 00:16:52,310 --> 00:16:55,040 In potem, kar naenkrat na linija šestih Jaz sem z uporabo dvojne narekovaje. 380 00:16:55,040 --> 00:16:55,860 Zakaj bi to bilo? 381 00:16:55,860 --> 00:16:56,700 Ja? 382 00:16:56,700 --> 00:16:57,725 >> OBČINSTVO: [neslišno] 383 00:16:57,725 --> 00:16:59,350 DAVID J. Malan: To je dejansko, kaj? 384 00:16:59,350 --> 00:17:00,559 OBČINSTVO: To je v vašem IDE. 385 00:17:00,559 --> 00:17:02,475 DAVID J. Malan: Ja, da je v moji dejanski IDE. 386 00:17:02,475 --> 00:17:05,690 In naj ne živijo na IDE, saj da je samo orodje, ki sem uporabo. 387 00:17:05,690 --> 00:17:08,119 To je po mojem tok imenik, posebej. 388 00:17:08,119 --> 00:17:11,647 Torej structs.h je moja lastna datoteka ni nameščen v IDE, 389 00:17:11,647 --> 00:17:14,480 v sam operacijski sistem, namesto, da je v mojem trenutnem imeniku. 390 00:17:14,480 --> 00:17:16,910 Torej konvencija je, če želite vključiti svoj header datoteko, 391 00:17:16,910 --> 00:17:18,200 samo uporabite dvojne narekovaje. 392 00:17:18,200 --> 00:17:23,290 >> Kaj pravimo to stvar v vrstica 8, na splošno? 393 00:17:23,290 --> 00:17:25,200 To je kaj? 394 00:17:25,200 --> 00:17:28,220 #define nekaj. 395 00:17:28,220 --> 00:17:31,040 To predstavlja konstante, kajne? 396 00:17:31,040 --> 00:17:33,140 Če želite imeti vrednost v vašem programu 397 00:17:33,140 --> 00:17:35,110 da uporabljate celota kup časov, to je 398 00:17:35,110 --> 00:17:39,330 dober dogovor, da se faktor ven, jo razglasi, s simbolom sekljalni 399 00:17:39,330 --> 00:17:43,340 opredeliti, nato pa po dogovoru, v vseh velike črke word-- čeprav to ni 400 00:17:43,340 --> 00:17:45,320 nujno potrebno, vendar to je človeška konvencija 401 00:17:45,320 --> 00:17:47,210 izkoristiti konstante tako da skoči ven 402 00:17:47,210 --> 00:17:50,380 na vas visually-- prostor in potem je vrednost hočeš biti 403 00:17:50,380 --> 00:17:52,250 enakovredna nenehnega imenom. 404 00:17:52,250 --> 00:17:56,110 Ne podpičje, vendar si preprosto upoštevajte, da je vzorec tam. 405 00:17:56,110 --> 00:17:57,770 >> Torej, kaj sem počel v tem dejanskem kodo. 406 00:17:57,770 --> 00:18:00,660 Torej, dajmo si oglejte glavni program tukaj. 407 00:18:00,660 --> 00:18:04,080 V vrstico 12, ker sem so vključeni structs.h, 408 00:18:04,080 --> 00:18:06,492 Sedaj imam čudežno v mojih odstranjevanje nov podatkovni tip. 409 00:18:06,492 --> 00:18:09,200 Nimam samo dostopa do int, in char in float, in niz, 410 00:18:09,200 --> 00:18:10,060 in modre in drugi. 411 00:18:10,060 --> 00:18:12,470 Imam zdaj dostop do podatkovni tip študent. 412 00:18:12,470 --> 00:18:17,740 Torej, v vrstico 12, sem združevanje dveh ideas-- eno podatkovni tip po meri in dva, 413 00:18:17,740 --> 00:18:18,940 uporabo array. 414 00:18:18,940 --> 00:18:21,700 In tako v tem programu, če Hočem, da dejansko podpirajo 415 00:18:21,700 --> 00:18:24,320 trije različni študenti v mojem programu, sem 416 00:18:24,320 --> 00:18:30,480 lahko preprosto reči, da mi spremenljivko imenovane študentov, pri čemer vsaka 417 00:18:30,480 --> 00:18:32,970 je študentov tipa, ki je moj tip podatkov po meri. 418 00:18:32,970 --> 00:18:35,890 In, še posebej, daj mi tri od teh v moji array. 419 00:18:35,890 --> 00:18:37,750 >> Torej, zdaj, kaj naj storimo v tem programu? 420 00:18:37,750 --> 00:18:40,670 Tukaj je samo za zanko ponavljanjem od 0 do 3, ker je to 421 00:18:40,670 --> 00:18:42,110 kakšna je vrednost študentov. 422 00:18:42,110 --> 00:18:44,420 Jaz sem samo da bi od uporabnika Daj mi ime študenta. 423 00:18:44,420 --> 00:18:48,090 In nato v vrstici 17, smo imajo večinoma poznajo linijo. 424 00:18:48,090 --> 00:18:50,370 Imamo starega prijatelja GetString na desni strani. 425 00:18:50,370 --> 00:18:52,345 In kaj kos sintakse je očitno nov, 426 00:18:52,345 --> 00:18:55,130 če ste nikoli programirati v C pred, in nikoli niso uporabili konstruktov? 427 00:18:55,130 --> 00:18:55,510 Ja? 428 00:18:55,510 --> 00:18:56,417 >> OBČINSTVO: The .name. 429 00:18:56,417 --> 00:18:57,500 DAVID J. Malan: The .name. 430 00:18:57,500 --> 00:19:01,220 Toda to ni preveč preskok, ker zdaj študenti oklepati i 431 00:19:01,220 --> 00:19:02,590 vam daje študentu i-th. 432 00:19:02,590 --> 00:19:04,730 In če želite, da se potopite znotraj te strukture, 433 00:19:04,730 --> 00:19:09,490 ste pravkar uporabite eno obdobje in nato ime spremenljivke znotraj, 434 00:19:09,490 --> 00:19:11,900 ali premoženje v notranjosti, ki želite, da bi dobili dostop do. 435 00:19:11,900 --> 00:19:14,816 Podobno je potem, če sem potem morala spodbuditi uporabnik, daj mi študenta domu, 436 00:19:14,816 --> 00:19:18,390 lahko podobno shranite, da niz v spremenljivki domu notranjosti 437 00:19:18,390 --> 00:19:19,940 te študentske strukture. 438 00:19:19,940 --> 00:19:21,410 >> In zdaj se stvari malo izmišljeno. 439 00:19:21,410 --> 00:19:24,420 In to se dogaja, da poiščete na morda veliko dokaj kmalu. 440 00:19:24,420 --> 00:19:27,970 Ampak boste videli to veliko bolj v PSet 4, tako da je samo pogled na to zdaj. 441 00:19:27,970 --> 00:19:33,364 Izkazalo se je, da je v skladu s 23 38, kaj misliš, da sem morda delaš? 442 00:19:33,364 --> 00:19:35,530 Sem odstranili pripombe za danes, ampak različici 443 00:19:35,530 --> 00:19:38,660 kode na spletu za sklicevanje ima vse komentarje. 444 00:19:38,660 --> 00:19:40,171 Kaj mi zdi, da se delaš? 445 00:19:40,171 --> 00:19:42,530 >> OBČINSTVO: Shranjevanje datoteke z vsemi informacije, ki jih uporabnik vnese. 446 00:19:42,530 --> 00:19:44,530 >> DAVID J. Malan: Ja, točno, to je nov način 447 00:19:44,530 --> 00:19:46,370 da smo videli dva, Druga značilnost C, 448 00:19:46,370 --> 00:19:48,700 s katerim sem lahko ustvarite svoje lastne datoteke. 449 00:19:48,700 --> 00:19:51,580 Tako daleč, skoraj vsak program, ki ste jih napisal, je brez državljanstva. 450 00:19:51,580 --> 00:19:53,334 Takoj, ko je to storjeno teče, to je to. 451 00:19:53,334 --> 00:19:55,000 Ni spomin ali spomin nanj. 452 00:19:55,000 --> 00:19:56,110 Ni shranjene datoteke. 453 00:19:56,110 --> 00:19:58,120 Ampak, če bi želeli shranite vnos, ki ima 454 00:19:58,120 --> 00:20:02,100 se je zgodilo, tako kot v igri ali program kot je ta, se je izkazalo, da lahko to storijo. 455 00:20:02,100 --> 00:20:04,360 In boste videli to bolj v PSet 4 in v oddelku. 456 00:20:04,360 --> 00:20:08,661 Toda ta linija 23 v bistvu ustvari datoteko imenovano students.csv. 457 00:20:08,661 --> 00:20:10,160 In morda so to prej videl. 458 00:20:10,160 --> 00:20:14,250 Tudi če ste nikoli študiral CS prej, CSV je z vejico ločen spremenljivke. 459 00:20:14,250 --> 00:20:19,000 To je kot zelo slab človek je različica Excelove datoteke, 460 00:20:19,000 --> 00:20:22,270 kar pomeni, da ga je mogoče odpreti v Excelu in Apple številkah, 461 00:20:22,270 --> 00:20:23,830 in ima vrstice in stolpce. 462 00:20:23,830 --> 00:20:26,485 Ampak to ni lastniški format, kot so Microsoft ali Apple. 463 00:20:26,485 --> 00:20:29,840 To je le nekaj vejic ločuje vrednote, ki jih bomo videli v trenutku. 464 00:20:29,840 --> 00:20:31,010 >> In vzemite ugibati. 465 00:20:31,010 --> 00:20:33,480 V vrstici 23, v zelo konec, moj drugi argument 466 00:20:33,480 --> 00:20:37,700 s to novo funkcijo imenovano f odprta za odprto datoteko je w. 467 00:20:37,700 --> 00:20:39,430 Kaj bi w pomenijo? 468 00:20:39,430 --> 00:20:40,022 Ja? 469 00:20:40,022 --> 00:20:41,260 >> OBČINSTVO: To vam omogoča, da pišete v spis? 470 00:20:41,260 --> 00:20:42,630 >> DAVID J. Malan: Omogoča pišete na datoteko. 471 00:20:42,630 --> 00:20:44,810 Torej je nekaj variant da bomo lahko priključite tukaj. 472 00:20:44,810 --> 00:20:47,184 Ampak, če si želite prebrati datoteka, da je pogled na to 473 00:20:47,184 --> 00:20:50,010 in ga prebral v spominu, vas samo uporabo quote citata "r". 474 00:20:50,010 --> 00:20:53,110 Če želite napisati na datoteko, uporabite quote citata "w". 475 00:20:53,110 --> 00:20:55,190 Tam je tudi priložila in Nekaj ​​drugim 476 00:20:55,190 --> 00:20:57,356 Če želite spremeniti obstoječe datoteke. 477 00:20:57,356 --> 00:21:00,480 Zdaj bomo, da vidim to stvar, potem pa se bomo vrnili na linijo 24. 478 00:21:00,480 --> 00:21:02,640 NULL, se je izkazalo, je posebna vrednota, ki 479 00:21:02,640 --> 00:21:06,070 se lahko vrne z določenimi funkcijami če je nekaj šlo wrong-- 480 00:21:06,070 --> 00:21:08,490 če datoteka ne obstaja, če ste zmanjka pomnilnika, 481 00:21:08,490 --> 00:21:09,620 ali kup drugih napak. 482 00:21:09,620 --> 00:21:13,470 Ampak za zdaj, kaj je samo domnevati, da to je le konvencionalno preverjanje napak. 483 00:21:13,470 --> 00:21:17,090 Tu v vrstici 26, sem ponavljanjem od 0 do 3 nad vsemi mojimi študenti. 484 00:21:17,090 --> 00:21:20,470 In to je vrsta sortiranje nove funkcije, fprintf, 485 00:21:20,470 --> 00:21:21,460 ampak vzemite ugibati. 486 00:21:21,460 --> 00:21:24,370 Če printf je samo print formatirano niz, 487 00:21:24,370 --> 00:21:26,507 Kaj fprintf verjetno pomenilo? 488 00:21:26,507 --> 00:21:27,590 OBČINSTVO: Natisni v datoteko. 489 00:21:27,590 --> 00:21:29,290 DAVID J. Malan: Tiskanje formatiran niz v datoteko. 490 00:21:29,290 --> 00:21:31,180 To je tisto, kar dodatno f sredstvo je datoteka. 491 00:21:31,180 --> 00:21:36,420 In novi prvi argument mora biti spremenljivka, ki predstavlja datoteko. 492 00:21:36,420 --> 00:21:38,866 Potem smo samo še format Niz tako kot printf. 493 00:21:38,866 --> 00:21:40,740 In čeprav je to sintaksa je novo, je to samo 494 00:21:40,740 --> 00:21:44,610 pomeni priključite na ime študenta, plug-in v študentskem domu, nato pa 495 00:21:44,610 --> 00:21:47,160 z fclose, zaprite datoteko. 496 00:21:47,160 --> 00:21:49,730 In potem lastly-- to je novo in bomo prišli nazaj na to 497 00:21:49,730 --> 00:21:53,240 Pred long-- sem sprostitev študent iz razlogov, 498 00:21:53,240 --> 00:21:54,860 da se je zgodilo tam zgoraj obstaja. 499 00:21:54,860 --> 00:21:56,820 Vendar se bomo vrnili tistemu pred long-- 500 00:21:56,820 --> 00:21:59,820 to je zato, ker o tem, kako GetString je dejansko delajo pod pokrovom. 501 00:21:59,820 --> 00:22:01,280 >> Torej, kaj je na hitro pogledamo tukaj. 502 00:22:01,280 --> 00:22:04,380 Če sem tip ls v mojem telefonskem imeniku, opazili, da jaz ne 503 00:22:04,380 --> 00:22:09,360 imate datoteko imenovano students.csv, samo ne tam, ne obstaja. 504 00:22:09,360 --> 00:22:14,965 Torej, če sem zdaj zbrati ta program, da konstruktov-1. / konstruktov-1, 505 00:22:14,965 --> 00:22:20,570 in sem šel naprej in vnesite Andi, ki živi v Berkeley na univerzi Yale. 506 00:22:20,570 --> 00:22:26,350 Bomo imeli Rob, ki živi v Thayer v teh dneh. 507 00:22:26,350 --> 00:22:33,760 In kaj je prišel gor s tem, kje je, mislim, Maria je v Mather, 508 00:22:33,760 --> 00:22:35,100 če sem pravilno spomnil. 509 00:22:35,100 --> 00:22:36,460 >> Torej, nič ne kaže, da se zgodi. 510 00:22:36,460 --> 00:22:40,680 Ampak, če sem tip ls zdaj, obstaja students.csv. 511 00:22:40,680 --> 00:22:43,080 Pojdimo naprej in odprt students.csv. 512 00:22:43,080 --> 00:22:46,050 To je spet zelo lahek datotečni format. 513 00:22:46,050 --> 00:22:49,570 Ampak sem preprosto sprejel konvencijo da imam dve vrstice in stolpce tukaj. 514 00:22:49,570 --> 00:22:52,020 Prvi stolpec Prva imena ljudi. 515 00:22:52,020 --> 00:22:55,740 Drugi stolpec je študent je domu, ali višja šola, ali hišo, ali malenkosti. 516 00:22:55,740 --> 00:22:57,900 In zdaj sem to shranjeno trajno v datoteko. 517 00:22:57,900 --> 00:22:59,280 >> Torej, to ni vse, da je zanimivo. 518 00:22:59,280 --> 00:23:02,980 Ampak to je samo odskočna deska zdaj da bi bili lahko prisotni informacije 519 00:23:02,980 --> 00:23:04,040 trajno. 520 00:23:04,040 --> 00:23:08,340 Torej, kaj je zdaj vidim, kaj več bomo lahko storiti s temi in drugimi funkcijami. 521 00:23:08,340 --> 00:23:10,729 Ampak najprej, kakšna vprašanja? 522 00:23:10,729 --> 00:23:12,145 To je bilo veliko, in to je bilo pa hitro. 523 00:23:12,145 --> 00:23:16,131 Ampak boste videli veliko bolj PSet 4, kot tudi. 524 00:23:16,131 --> 00:23:16,630 Ja? 525 00:23:16,630 --> 00:23:19,360 >> OBČINSTVO: Ali obstaja način, da se Naprej dodajanje imen s to datoteko? 526 00:23:19,360 --> 00:23:19,880 >> DAVID J. Malan: Dobro vprašanje. 527 00:23:19,880 --> 00:23:21,800 Ali obstaja način, da se nadaljuje dodajanje imen s to datoteko? 528 00:23:21,800 --> 00:23:22,340 Da. 529 00:23:22,340 --> 00:23:24,630 In v resnici, če boste na koncu up ponovnem odprtju datoteke, 530 00:23:24,630 --> 00:23:26,780 bi jih uporabili citat konec citata "a" za append, 531 00:23:26,780 --> 00:23:31,090 ki bi samo dodati novo linijo, Nova linija znova in znova, točno. 532 00:23:31,090 --> 00:23:32,010 Dobro vprašanje. 533 00:23:32,010 --> 00:23:32,950 Druga vprašanja? 534 00:23:32,950 --> 00:23:33,450 Ja? 535 00:23:33,450 --> 00:23:35,580 OBČINSTVO: Če tekel Program še zdaj, 536 00:23:35,580 --> 00:23:38,000 bi bilo obdržati dodajanje imen na datoteko ali bi odprli novo datoteko? 537 00:23:38,000 --> 00:23:38,740 >> DAVID J. Malan: Ah, dobro vprašanje. 538 00:23:38,740 --> 00:23:41,448 Če ste še enkrat desno tekel program Zdaj, morda vnesli v novih imen, 539 00:23:41,448 --> 00:23:44,820 bi bilo dodati datoteko ali prepisati datoteko? 540 00:23:44,820 --> 00:23:47,420 Slednji, ker sem ne uporabljate append način. 541 00:23:47,420 --> 00:23:49,930 In ker sem le slepo odpiranju datoteke za pisanje, 542 00:23:49,930 --> 00:23:51,310 to je le, da bo prepisati datoteko. 543 00:23:51,310 --> 00:23:54,570 Torej, jaz bi res morate storiti je priložila, če želim dejansko imajo dolgoročno 544 00:23:54,570 --> 00:23:55,350 baze podatkov. 545 00:23:55,350 --> 00:23:58,220 >> Zdaj CSV je koristen, odkrito povedano, celo za kot če ste writing-- 546 00:23:58,220 --> 00:24:00,100 in bomo sčasoma videli to kasneje v semestru, ko 547 00:24:00,100 --> 00:24:01,455 bomo uporabili poročila CSV za druge namene. 548 00:24:01,455 --> 00:24:04,920 Če želite shraniti vse ljudi ki so registrirani za nek dogodek, 549 00:24:04,920 --> 00:24:07,420 ali se prijavili za vaš študent skupina, ali nekaj takega, 550 00:24:07,420 --> 00:24:10,330 shranjevanje podatkov v tovrstnih format je super priročno. 551 00:24:10,330 --> 00:24:12,580 Ker dobesedno, če I je bilo, da prenesete to datoteko. 552 00:24:12,580 --> 00:24:14,540 Jaz bi double-- in kaj je dejansko poskusite to 553 00:24:14,540 --> 00:24:16,720 če imam Excel ali številke tukaj. 554 00:24:16,720 --> 00:24:19,130 >> Bom desnim klikom ali nadzor kliknite mojo kartoteko. 555 00:24:19,130 --> 00:24:20,020 Ops. 556 00:24:20,020 --> 00:24:21,830 Z desno tipko miške kliknite ali nadzor kliknite mojo kartoteko. 557 00:24:21,830 --> 00:24:24,960 Daj no, moja miška ne sodeluje. 558 00:24:24,960 --> 00:24:32,694 Download-- bom prenesti vse datoteke tukaj, tako 559 00:24:32,694 --> 00:24:33,860 samo zato, da sem lahko zgrabi tole. 560 00:24:33,860 --> 00:24:37,850 In poglejmo, če to deluje students.csv-- prvič 561 00:24:37,850 --> 00:24:39,310 Sem aktivirana. 562 00:24:39,310 --> 00:24:41,360 Zdaj hočejo, da vidite svoje stike. 563 00:24:41,360 --> 00:24:44,310 Zdaj pa se moram registrirati. 564 00:24:44,310 --> 00:24:47,620 Oglejte si, kako enostavno je za uporabo poročila CSV? 565 00:24:47,620 --> 00:24:50,840 Ja, ga sproti dopolnjuje. 566 00:24:50,840 --> 00:24:52,375 OK, zdaj smo pripravljeni za razred. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 OK, oh, kaj je novega? 569 00:25:00,370 --> 00:25:02,920 OK, blizu. 570 00:25:02,920 --> 00:25:04,750 To je bilo čarobno. 571 00:25:04,750 --> 00:25:07,280 OK, zdaj pa moramo posodobiti. 572 00:25:07,280 --> 00:25:10,890 In zdaj, je pozabil, kaj datoteko sem sprva odprta, 573 00:25:10,890 --> 00:25:13,090 ampak kaj a-- tam gremo. 574 00:25:13,090 --> 00:25:16,341 OK, tako da zdaj imamo Excel datoteko. 575 00:25:16,341 --> 00:25:18,290 Hvala. 576 00:25:18,290 --> 00:25:20,764 >> OK, je bil lažji del, da tisto, kar sem storil. 577 00:25:20,764 --> 00:25:23,930 Seveda bi lahko vnaprej nameščen Excel, ali številke, ali ne glede na program. 578 00:25:23,930 --> 00:25:25,846 Ampak to je lepo, ker Zdaj sem lahko manipulira 579 00:25:25,846 --> 00:25:28,090 podatki v standardni obliki. 580 00:25:28,090 --> 00:25:30,294 >> Torej, zdaj, kaj je ozadje prehod, kjer smo končali 581 00:25:30,294 --> 00:25:32,710 zadnji čas, ki naj bi se začelo sneti kolesa usposabljanja. 582 00:25:32,710 --> 00:25:34,543 Najprej pa nisi glej to prej kosilo 583 00:25:34,543 --> 00:25:38,150 se spet dogaja tukaj na ogenj in Ice v Cambridgeu, Sitarja v New Haven. 584 00:25:38,150 --> 00:25:43,150 Prijavite se na spletni strani CS50s ASAP da se pridružijo CS50 študente in osebje. 585 00:25:43,150 --> 00:25:46,090 >> Torej smo kolesa usposabljanja off v ponedeljek kot follows-- 586 00:25:46,090 --> 00:25:49,120 Niz je bil razglašen leta CS50s knjižnica za nekaj časa. 587 00:25:49,120 --> 00:25:52,650 In to je lepo, saj omogoča nam govori o spremenljivkah kot 588 00:25:52,650 --> 00:25:54,660 popolne besede in stavke in še več. 589 00:25:54,660 --> 00:25:56,710 Vendar se izkaže, niz ne obstaja. 590 00:25:56,710 --> 00:26:00,200 To je le sinonim, ali alias, da smo ustvarili nekaj, kar 591 00:26:00,200 --> 00:26:03,780 v resnici je malo bolj Tehnična imenuje char *. 592 00:26:03,780 --> 00:26:07,900 >> In res smo videli zgled programa v ponedeljek 593 00:26:07,900 --> 00:26:11,200 da ni ravnala prav, kot smo pričakovali. 594 00:26:11,200 --> 00:26:13,630 To je bila datoteka, primerjajo-0. 595 00:26:13,630 --> 00:26:17,910 In opozarjajo, da primerjajo-0, če Jaz prevedem ponedeljkovem programu 596 00:26:17,910 --> 00:26:22,670 in vodijo primerjajo-0 in vpišite mamo v male in mama z malimi črkami znova. 597 00:26:22,670 --> 00:26:25,320 Program je vztrajal I tip različne stvari, 598 00:26:25,320 --> 00:26:29,210 čeprav mamo, vse v male, je enaka vizualno. 599 00:26:29,210 --> 00:26:31,990 Torej, kaj je bil kratek odgovor zakaj računalnik misli 600 00:26:31,990 --> 00:26:34,500 ti dve strune so drugačni? 601 00:26:34,500 --> 00:26:35,250 Ja? 602 00:26:35,250 --> 00:26:36,534 >> OBČINSTVO: [neslišno] 603 00:26:36,534 --> 00:26:37,450 DAVID J. Malan: Right. 604 00:26:37,450 --> 00:26:39,600 Torej, mama, prvič Jaz ga vnesite v, je pa 605 00:26:39,600 --> 00:26:42,710 nekje shranjeno v mojem računalniku pomnilnik vendar na drugi lokaciji 606 00:26:42,710 --> 00:26:44,690 kot drugo pa sem tip v mamo. 607 00:26:44,690 --> 00:26:46,580 Zdaj bi bilo vsekakor treba optimizirati. 608 00:26:46,580 --> 00:26:49,205 Računalnik je lahko biti pameten in uresničitev teh dveh nizov, hej, 609 00:26:49,205 --> 00:26:49,954 oni so enaki. 610 00:26:49,954 --> 00:26:51,520 Naj ne redundantly ga shranite. 611 00:26:51,520 --> 00:26:54,229 Ampak računalniki ne delajo, da Optimizacija če poveš jim. 612 00:26:54,229 --> 00:26:56,061 Torej, privzeto, oni le, da bo na koncu 613 00:26:56,061 --> 00:26:57,670 v dveh različnih mestih v pomnilniku. 614 00:26:57,670 --> 00:27:01,570 In tako, da je bolj jasna, če smo primerjali dveh nizov, 615 00:27:01,570 --> 00:27:03,950 Prva je bila imenovana s, drugi je bil imenovan 616 00:27:03,950 --> 00:27:08,530 t, kaj natančno sem primerjanje tukaj na liniji 13? 617 00:27:08,530 --> 00:27:09,494 Ja. 618 00:27:09,494 --> 00:27:12,390 >> OBČINSTVO: To je kraj, v spomin da je spremenljivka kažejo. 619 00:27:12,390 --> 00:27:14,900 >> DAVID J. Malan: Točno tako, sem bil primerjavo mesto v pomnilniku 620 00:27:14,900 --> 00:27:16,300 da te spremenljivke opozoril. 621 00:27:16,300 --> 00:27:20,560 Torej, še posebej, če je bila mama na bajt številka 1 in 2, in 3, 622 00:27:20,560 --> 00:27:24,020 in 4-- ker spomnite poševnico 0 mora biti vse tja konec. 623 00:27:24,020 --> 00:27:29,420 In drugi primerek mama, m-o-m, je na naslovu 10, 11, 12 in 13. 624 00:27:29,420 --> 00:27:33,100 Bil sem primerjavo 1, da naslov, da lokacije v pomnilniku, 625 00:27:33,100 --> 00:27:35,160 proti 10, ki je očitno ni enaka. 626 00:27:35,160 --> 00:27:36,260 1 ni 10. 627 00:27:36,260 --> 00:27:39,620 >> Torej, to je lepo, da to je precej preprosta. 628 00:27:39,620 --> 00:27:42,870 Ampak to je problematično, kolikor ne morem primerjati nize. 629 00:27:42,870 --> 00:27:44,930 Torej fundamentally-- in na tej nizki ravni, 630 00:27:44,930 --> 00:27:47,300 če bi želel izvajati program za primerjavo 631 00:27:47,300 --> 00:27:50,270 dve ločeni besedi, da je uporabnik vtipka za kakovost, 632 00:27:50,270 --> 00:27:53,944 storiti, da line up char za char, samo na splošno, 633 00:27:53,944 --> 00:27:55,360 Kaj moramo storiti, očitno? 634 00:27:55,360 --> 00:27:57,940 To ni dovolj, samo, da pogled na teh dveh naslovih. 635 00:27:57,940 --> 00:27:58,860 Kaj moramo storiti? 636 00:27:58,860 --> 00:27:59,360 Ja? 637 00:27:59,360 --> 00:28:01,120 >> OBČINSTVO: ponovitev prek string [neslišno]. 638 00:28:01,120 --> 00:28:02,600 >> DAVID J. Malan: Ja, dajmo Ponovil skozi niz. 639 00:28:02,600 --> 00:28:05,808 Oglejmo uporabiti za zanke, a while, ali karkoli ste najbolj všeč. 640 00:28:05,808 --> 00:28:08,840 In če imamo dva niza nekje v spomin, si oglejmo vsakega ih 641 00:28:08,840 --> 00:28:11,770 Prvi znak, nato pa vsak je drugi znak, nato tretji in četrti, 642 00:28:11,770 --> 00:28:15,206 in peti, dokler nismo zadeli kaj posebnega sentinel vrednost? 643 00:28:15,206 --> 00:28:16,080 OBČINSTVO: [neslišno] 644 00:28:16,080 --> 00:28:18,800 DAVID J. Malan: Ja, poševnica nazaj nič, na kateri točki v vsakem nizu 645 00:28:18,800 --> 00:28:20,100 se lahko odloči, da je to. 646 00:28:20,100 --> 00:28:21,970 Smo se ujema vsak znak? 647 00:28:21,970 --> 00:28:22,990 Če ne, se vrnite false. 648 00:28:22,990 --> 00:28:24,770 Če je tako, vrne true. 649 00:28:24,770 --> 00:28:28,800 In tako, da je točno to, kar ta različica programa primerjate-1.c počne. 650 00:28:28,800 --> 00:28:31,677 Je enaka, kar smo pogledal v ponedeljek, razen, da sem 651 00:28:31,677 --> 00:28:34,760 Znebila besedo string-- čeprav ki nima funkcionalnega impact-- vse 652 00:28:34,760 --> 00:28:37,450 Delam sedaj odstranjevanje nekateri vizualni kolesa za usposabljanje, 653 00:28:37,450 --> 00:28:40,880 vendar je jasno, da je videti s in t so naslovi. 654 00:28:40,880 --> 00:28:43,020 In to je tisto, zvezda, zvezdica, predstavlja 655 00:28:43,020 --> 00:28:46,690 je naslov, sicer znan bolj tehnično kot kazalec. 656 00:28:46,690 --> 00:28:49,880 >> Torej, ko izjavljam ov na vrstica 9 in pravijo, char * s, 657 00:28:49,880 --> 00:28:52,160 to ne pomeni, da mi niz. 658 00:28:52,160 --> 00:28:56,360 To pomeni, da mi je spremenljivka, katere namen v življenju je, da shranite naslov. 659 00:28:56,360 --> 00:29:00,400 Ker sem na tem, da dal naslov niz vanj. 660 00:29:00,400 --> 00:29:03,500 In res, GetString, da je Jasno, ne vrne niz. 661 00:29:03,500 --> 00:29:06,110 To ne vrne mamo Nagibnica nič, samo po sebi. 662 00:29:06,110 --> 00:29:10,005 Kaj GetString posebej in ravno vrnil? 663 00:29:10,005 --> 00:29:10,880 OBČINSTVO: [neslišno] 664 00:29:10,880 --> 00:29:14,080 DAVID J. Malan: An naslov je naslov prvega znaka 665 00:29:14,080 --> 00:29:16,070 V nekaterih niz je dobila. 666 00:29:16,070 --> 00:29:19,250 In zdaj smo videli spet posebna ključna beseda. 667 00:29:19,250 --> 00:29:20,640 In sem namiguje, da je to prej. 668 00:29:20,640 --> 00:29:23,620 To se dogaja, da je dobro konvencija da bomo znova videli zdaj. 669 00:29:23,620 --> 00:29:27,540 Jaz preverjanje prepričati, da s ni ničen in t ni nična. 670 00:29:27,540 --> 00:29:30,100 Ker temelji na mojem res Hitro omemba prej, 671 00:29:30,100 --> 00:29:35,510 kaj bi pomenilo, če GetString vrne ne naslov vendar N-U-L-L, ki je spet 672 00:29:35,510 --> 00:29:36,990 nekaj posebnega vrednost? 673 00:29:36,990 --> 00:29:37,890 >> OBČINSTVO: Napaka. 674 00:29:37,890 --> 00:29:38,600 >> DAVID J. Malan: To je napaka. 675 00:29:38,600 --> 00:29:39,550 Nekaj ​​je šlo narobe. 676 00:29:39,550 --> 00:29:41,341 In tisto, kar običajno se lahko zgodi, še posebej, 677 00:29:41,341 --> 00:29:45,162 z strings-- ki bi lahko neznanega dolžine v advance-- 678 00:29:45,162 --> 00:29:46,870 Mogoče računalniki " iz spomina, morda 679 00:29:46,870 --> 00:29:49,280 ste vnesli v takem dolgo besedo ali stavek 680 00:29:49,280 --> 00:29:51,880 ali prilepili tako veliko esej tam preprosto ni dovolj pomnilnika. 681 00:29:51,880 --> 00:29:55,340 In tako GetString ne more vrniti naslov celotno stvar, 682 00:29:55,340 --> 00:29:56,620 tako da samo vrne ničesar. 683 00:29:56,620 --> 00:30:00,580 In pravi, napaka se je zgodilo z vrnitvijo posebno NULL vrednost. 684 00:30:00,580 --> 00:30:02,890 To je naslov nič, tako rekoč. 685 00:30:02,890 --> 00:30:06,157 >> Zdaj se je izkazalo, C prihaja z funkcija, ki pa to ponovitev. 686 00:30:06,157 --> 00:30:09,240 Nimamo za izvajanje tega s za zanke ali while sebe. 687 00:30:09,240 --> 00:30:11,150 Mi lahko uporabite funkcijo, imenuje jedrnato, 688 00:30:11,150 --> 00:30:15,400 premešamo comp, ali niz primerjati, čigar namen v življenju je naredil točno to. 689 00:30:15,400 --> 00:30:19,990 Daš dva napotke, dva naslova, in bo šel na te naslove 690 00:30:19,990 --> 00:30:23,130 in nato primerjati pismo pismo za pismom za kakovost, 691 00:30:23,130 --> 00:30:26,610 ustavljanje le, če je kaj res? 692 00:30:26,610 --> 00:30:31,540 Kdaj naj intuitivno premešamo comp stop ponavljanjem, samo da bo jasno? 693 00:30:31,540 --> 00:30:35,400 Ko zadene poševnico 0 bodisi niz, nakar se lahko odloči 694 00:30:35,400 --> 00:30:38,910 je vse ujema, ali je prišlo neskladje? 695 00:30:38,910 --> 00:30:42,740 >> Torej, če smo teči to zdaj in poskusite naš mali kapitalizacija igre, 696 00:30:42,740 --> 00:30:49,260 tako da primerjajo-1, ./compare-1, in tip mamo z malimi črkami obakrat. 697 00:30:49,260 --> 00:30:50,560 Zdaj je ista stvar. 698 00:30:50,560 --> 00:30:54,080 In če sem še enkrat z male in nato morda z velikimi črkami. 699 00:30:54,080 --> 00:30:56,720 Zdaj je res razlikuje med velikimi in malimi črkami. 700 00:30:56,720 --> 00:31:00,440 Torej ni vse tako težko, ali čaroben, vendar pa zdaj pojasni 701 00:31:00,440 --> 00:31:03,140 kaj se dogaja pod pokrovom. 702 00:31:03,140 --> 00:31:07,640 >> Torej, kaj več bomo lahko citat od te vrste lekcijo? 703 00:31:07,640 --> 00:31:08,980 Torej, kaj je, da pogled na to. 704 00:31:08,980 --> 00:31:15,380 Grem, da gredo naprej in napisati hitri program, tu imenujejo copy-0. 705 00:31:15,380 --> 00:31:21,594 In zdaj gremo naprej in dejansko naredimo this-- s kopijo-0, 706 00:31:21,594 --> 00:31:23,010 poglejte, kaj sem tukaj dobil. 707 00:31:23,010 --> 00:31:24,712 Najprej sem povedal uporabnik, nekaj reči. 708 00:31:24,712 --> 00:31:26,420 Potem sem dobil niz in sem ga shrani v s. 709 00:31:26,420 --> 00:31:29,810 Potem sem preveriti, če je enaka enaka NULL, samo vrniti 1. 710 00:31:29,810 --> 00:31:31,590 Torej je to samo standardna preverjanje napak. 711 00:31:31,590 --> 00:31:33,112 Nič zanimivega se je zgodilo. 712 00:31:33,112 --> 00:31:36,320 In v bistvu, če se znebimo napake preverjanje, to izgleda kot teden 1 kode 713 00:31:36,320 --> 00:31:36,985 v tem trenutku. 714 00:31:36,985 --> 00:31:39,110 Ampak sem začel, da bi dobili malo bolje o tem. 715 00:31:39,110 --> 00:31:43,340 >> Zdaj je v skladu 16, pred tednom dni, morda celo nekaj dni ali minut nazaj, 716 00:31:43,340 --> 00:31:46,720 bi lahko rekli, linija 16 je ustvarja spremenljivo imenovano t 717 00:31:46,720 --> 00:31:48,219 in kopiranje S vanjo. 718 00:31:48,219 --> 00:31:50,010 In to je popolnoma razumna takeaway. 719 00:31:50,010 --> 00:31:51,560 Ampak zdaj bolj natančno. 720 00:31:51,560 --> 00:31:54,190 Kaj se dogaja v vrstici 16? 721 00:31:54,190 --> 00:31:56,170 Kaj je pridobivanje kopirajo od desne proti levi? 722 00:31:56,170 --> 00:31:56,669 Ja? 723 00:31:56,669 --> 00:31:58,490 OBČINSTVO: Je t dobili naslov s? 724 00:31:58,490 --> 00:32:01,220 >> DAVID J. Malan: Točno, t je pridobivanje naslov s. 725 00:32:01,220 --> 00:32:05,170 Torej, da bo jasno zdaj, če grem nazaj na prejšnje primer 726 00:32:05,170 --> 00:32:08,520 in sem potegnili stvar sem vnesli v. 727 00:32:08,520 --> 00:32:11,640 In kaj sem tipkal in-- tukaj je, in tu 728 00:32:11,640 --> 00:32:15,830 je tisto, kar sem tipkal v nekje v spomin, mama in nato poševnica nazaj 729 00:32:15,830 --> 00:32:17,840 0, ki je dodana za mene. 730 00:32:17,840 --> 00:32:23,060 Kaj sem shranjeni tukaj, se spomni, to je na mestu 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 To je tisto, kar je trenutno v s. 732 00:32:24,655 --> 00:32:29,220 Torej, če na liniji 16, sem rekel, daj mi druga spremenljivka imenuje t in trgovina 733 00:32:29,220 --> 00:32:33,590 ob vrednosti s, kar dobi shranjene tukaj ne bo mama 734 00:32:33,590 --> 00:32:35,480 ampak samo število 1. 735 00:32:35,480 --> 00:32:38,520 >> Torej, če gledamo naprej v tem programu Zdaj, kaj se bo zgodilo? 736 00:32:38,520 --> 00:32:40,690 Tako opazili, da je ta funkcija vam morda 737 00:32:40,690 --> 00:32:44,410 se ta uporablja nekaj časa nazaj za Cezarja, ali Vigenere, ali pa sploh ne. 738 00:32:44,410 --> 00:32:48,170 Trdim z mojo printf sem dogaja, da se izkoristijo izvod T. 739 00:32:48,170 --> 00:32:51,616 Prvi v vrstici 19, hitri duševno zdravje preverite, strlen preveri dolžino t. 740 00:32:51,616 --> 00:32:53,740 Ker ne želim, da poskusite izkoristiti nekaj 741 00:32:53,740 --> 00:32:55,104 če ni niz tam. 742 00:32:55,104 --> 00:32:57,520 Če uporabnik šele pritisnite tipko Enter, nič izkoristiti. 743 00:32:57,520 --> 00:33:01,100 Torej, ne želim narediti linijo 21. 744 00:33:01,100 --> 00:33:05,758 Torej linija 21 se kapitalizacijo katera črka, očitno, t? 745 00:33:05,758 --> 00:33:06,514 >> OBČINSTVO: m? 746 00:33:06,514 --> 00:33:08,722 DAVID J. Malan: Videti kot da je kopiranje, katera? 747 00:33:08,722 --> 00:33:09,486 OBČINSTVO: m. 748 00:33:09,486 --> 00:33:10,450 DAVID J. Malan: Uh, m. 749 00:33:10,450 --> 00:33:12,685 OK, tako da prvi m, zaradi obvestila, da sem 750 00:33:12,685 --> 00:33:14,935 prehodu na toupper, ki Če še nikoli niste videli, da je 751 00:33:14,935 --> 00:33:16,980 samo funkcijo izkoristiti kot svoj vložek. 752 00:33:16,980 --> 00:33:20,240 t bracket nič pomeni dati me ničelna značaj t. 753 00:33:20,240 --> 00:33:22,550 In tako kako to slika spremembe, da bo jasno? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Kaj je potrebno, da se predelajo ali spremeniti glede s in t in mama 756 00:33:29,160 --> 00:33:30,097 poševnica nazaj nič. 757 00:33:30,097 --> 00:33:31,470 >> OBČINSTVO: [neslišno] 758 00:33:31,470 --> 00:33:34,030 >> DAVID J. Malan: Ja, tako da je to ena tukaj preprosto 759 00:33:34,030 --> 00:33:40,860 potrebe, da bi dobili spremenila to-- popraviti this-- potrebuje, da se spremenijo v kapital m. 760 00:33:40,860 --> 00:33:44,330 Toda zdaj, poglej kasneje v Program, če natisnete 761 00:33:44,330 --> 00:33:49,800 s in t, kot sem čisto tukaj, pazi, kaj je bo zgodilo tiskanje s in t. 762 00:33:49,800 --> 00:33:54,310 Zato poskrbite, copy-0, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Naj gredo naprej in tip V mamo v vseh male. 764 00:33:57,140 --> 00:34:00,140 Opazili sta izvirnik in kopija so bili kapitalizirani. 765 00:34:00,140 --> 00:34:00,850 Zakaj? 766 00:34:00,850 --> 00:34:04,431 No, s in t sta obrnjena k, če hočete, isti kos pomnilnika. 767 00:34:04,431 --> 00:34:06,930 In odkrito povedano, to je pridobivanje Res uninteresting-- dejstvo 768 00:34:06,930 --> 00:34:09,150 da smo s pomočjo naslovov nič tukaj. 769 00:34:09,150 --> 00:34:11,719 Mislim, res ne briga kjer je stvari v pomnilniku. 770 00:34:11,719 --> 00:34:13,550 Žal sem brisanje malo preveč. 771 00:34:13,550 --> 00:34:15,674 Ampak jaz res ne skrbi kjer so stvari v spomin. 772 00:34:15,674 --> 00:34:18,510 In tako, seveda, kaj programerji mislijo o 773 00:34:18,510 --> 00:34:21,080 je, da ko govorimo o naslov, ali kazalec, 774 00:34:21,080 --> 00:34:22,679 koga briga, če je v spominu. 775 00:34:22,679 --> 00:34:24,989 Ni mi mar, če je na bajt eden ali ena milijarda. 776 00:34:24,989 --> 00:34:27,920 Pravkar sem skrbi, da se ta spremenljivka je učinkovito 777 00:34:27,920 --> 00:34:29,620 obrnjena ta kos pomnilnika. 778 00:34:29,620 --> 00:34:33,350 In tako, odslej namesto Izgovor preko poljubnih pomnilniških naslovov, dajmo 779 00:34:33,350 --> 00:34:36,710 šele začetek, da pripravi napotke kot kazalci, kot puščice. 780 00:34:36,710 --> 00:34:39,340 Torej, kaj je, in ne v resnici, po tem programu 781 00:34:39,340 --> 00:34:42,130 ker o tem, kako sem ustvaril t, to je le dve ločeni spremenljivke 782 00:34:42,130 --> 00:34:43,840 kaže na isti kos pomnilnika. 783 00:34:43,840 --> 00:34:45,215 In mi ni mar, kje so. 784 00:34:45,215 --> 00:34:47,130 Tako smo lahko abstraktno stran te podrobnosti. 785 00:34:47,130 --> 00:34:48,780 >> Torej, kako naj to popravim? 786 00:34:48,780 --> 00:34:54,120 Če hočem napisati različico kopijo Program, ki dejansko kopij godalnega 787 00:34:54,120 --> 00:34:56,840 in izkorišča le copy, samo intuitivno, 788 00:34:56,840 --> 00:34:59,766 kaj moram biti sestavine za naše rešitve? 789 00:34:59,766 --> 00:35:00,640 OBČINSTVO: [neslišno] 790 00:35:00,640 --> 00:35:01,420 DAVID J. Malan: Moramo kaj? 791 00:35:01,420 --> 00:35:01,820 OBČINSTVO: Chunk spomina. 792 00:35:01,820 --> 00:35:03,280 DAVID J. Malan: Potrebujemo en kos pomnilnika, kajne? 793 00:35:03,280 --> 00:35:05,360 Ne vemo, kako to še ni nujno. 794 00:35:05,360 --> 00:35:11,330 Ampak sem nekako morali to tako zgodi da prvotni mama v spodnjem primeru 795 00:35:11,330 --> 00:35:14,170 konča s tem, da dodatni kos pomnilnika. 796 00:35:14,170 --> 00:35:19,770 In potem, ko sem spremenite kopijo, sem ne želite spremeniti to kopijo tukaj. 797 00:35:19,770 --> 00:35:26,020 Jaz namesto želite spremeniti samo to Kopija tako da original je nespremenjena. 798 00:35:26,020 --> 00:35:27,980 >> Torej, da vidimo, kako lahko to storimo. 799 00:35:27,980 --> 00:35:31,800 V copy-1, ki ima že bila odvzeta komentarja, 800 00:35:31,800 --> 00:35:33,250 vendar je komentiral na spletu. 801 00:35:33,250 --> 00:35:36,710 Mi namesto storite following-- ti linije so enaki, prinesi mi niz 802 00:35:36,710 --> 00:35:38,340 in poklicati to je to. 803 00:35:38,340 --> 00:35:43,500 Zdaj pa si oglejmo eno izmed naših najbolj Kompleksna razen zadnjega kompleksnosti 804 00:35:43,500 --> 00:35:47,340 za nekaj časa, linija 16 počne točno to. 805 00:35:47,340 --> 00:35:49,400 Torej, če vaš udoben z picture smo pravkar drew-- 806 00:35:49,400 --> 00:35:51,790 daj mi nov kos pomnilnika, kopirajte vse v njej, 807 00:35:51,790 --> 00:35:53,730 Poglejmo, kako prevesti, da kodo. 808 00:35:53,730 --> 00:35:59,400 >> Torej linija 16, na levi strani, char * t mi daje to polje tukaj. 809 00:35:59,400 --> 00:36:00,230 To je vse, kar počne. 810 00:36:00,230 --> 00:36:03,240 Na desni strani, m Alloc ali malloc, 811 00:36:03,240 --> 00:36:06,480 je dodeljevanje pomnilnika, super fancy, Grobni način samo pravim 812 00:36:06,480 --> 00:36:07,640 dajte mi kos pomnilnika. 813 00:36:07,640 --> 00:36:09,290 Koliko pomnilnika potrebujemo? 814 00:36:09,290 --> 00:36:10,910 No, je nekako velik izražanja. 815 00:36:10,910 --> 00:36:12,570 Ampak poglejmo, kaj tukaj piše. 816 00:36:12,570 --> 00:36:15,940 Torej to, seveda, je dala me je dolžina niza s. 817 00:36:15,940 --> 00:36:19,094 Torej, mama naj bi bilo kaj? 818 00:36:19,094 --> 00:36:21,010 Torej le tri, kajne? mama je tri znake. 819 00:36:21,010 --> 00:36:22,830 Nimate count poševnica nazaj nič, če vas 820 00:36:22,830 --> 00:36:25,960 govorimo o dolžini niza pa je pravzaprav človekove vidne črke. 821 00:36:25,960 --> 00:36:28,020 Torej mama, tako da to mi daje 3. 822 00:36:28,020 --> 00:36:31,170 Toda počakaj malo, da sem zdaj dodal 1. 823 00:36:31,170 --> 00:36:34,861 Zakaj sem dejansko želijo dodeliti 4 bajte in ne samo 3? 824 00:36:34,861 --> 00:36:35,360 Ja? 825 00:36:35,360 --> 00:36:36,910 >> OBČINSTVO: Za divjega vrednosti? 826 00:36:36,910 --> 00:36:38,951 >> DAVID J. Malan: Točno, ta divjega vrednosti. 827 00:36:38,951 --> 00:36:40,840 Za poševnico nazaj ničlo, Rabim 4 bajte skupaj. 828 00:36:40,840 --> 00:36:42,870 Tako da moram dolžino vrvice plus 1. 829 00:36:42,870 --> 00:36:45,400 In potem samo za dobro measure-- čeprav na tem sistemu, 830 00:36:45,400 --> 00:36:49,390 to je vedno bo 1-- Pravim pomnožite to z velikostjo char. 831 00:36:49,390 --> 00:36:51,552 Izkazalo se je, sizeof je operater v C, ki 832 00:36:51,552 --> 00:36:53,260 samo ti se pove število bajtov, ki je 833 00:36:53,260 --> 00:36:54,700 potrebna za določene vrste podatkov. 834 00:36:54,700 --> 00:36:57,740 To ne deluje nizi, običajno, včasih pa ne. 835 00:36:57,740 --> 00:36:59,210 Toda v splošnem primeru ni. 836 00:36:59,210 --> 00:37:02,330 Vendar bo to povej mi, koliko bajtov char je, kar se izkaže, je vedno 1. 837 00:37:02,330 --> 00:37:04,080 Torej, to je kot, da se pomnoži z 1. 838 00:37:04,080 --> 00:37:05,900 >> Torej super Grobni išče vrstica kode. 839 00:37:05,900 --> 00:37:09,320 Ampak vse kar naredi je, daje mi kos pomnilnika. 840 00:37:09,320 --> 00:37:13,590 Vendar se zdi, da se kopiranje kaj v ta spomin? 841 00:37:13,590 --> 00:37:14,560 Ne še. 842 00:37:14,560 --> 00:37:22,040 In kaj storiti, I na liniji 22, in 23, 24, 25, dobro, sem preprosto to storite. 843 00:37:22,040 --> 00:37:23,760 In to je vrsta old school stvari zdaj. 844 00:37:23,760 --> 00:37:26,010 To je podobno PSet 2, pri čemer ste pravkar premikajo stvari 845 00:37:26,010 --> 00:37:28,620 okrog v spomin, oziroma v kito. 846 00:37:28,620 --> 00:37:31,920 >> Torej sem ponavljanjem od 0 do dolžina niza s. 847 00:37:31,920 --> 00:37:37,820 In jaz kopiranje značaj i-th vs v lik i-tega v t. 848 00:37:37,820 --> 00:37:41,820 In ker sem, programer, ki prepričani, da dodeli natanko toliko bajtov 849 00:37:41,820 --> 00:37:44,600 kot rabim, da je popolna ena-na-ena razmerje. 850 00:37:44,600 --> 00:37:47,060 In jaz kopirati mamo v male črke na novo. 851 00:37:47,060 --> 00:37:50,170 In potem končno, storim to vrstico. 852 00:37:50,170 --> 00:37:54,637 Tako je učinek le da izkoristijo to t tukaj. 853 00:37:54,637 --> 00:37:56,470 Tako veliko, da absorbira, vendar če ste jo pravkar obravnava 854 00:37:56,470 --> 00:37:58,220 kaj se v resnici dogaja na pod pokrovom 855 00:37:58,220 --> 00:38:00,880 se le premika ti bajti okoli, vse, 856 00:38:00,880 --> 00:38:06,617 je potrebno za rešitev tega problema je samo, da nam ta kos pomnilnika. 857 00:38:06,617 --> 00:38:08,450 Sedaj ob tveganju prepričljivo, naj pokažejo 858 00:38:08,450 --> 00:38:13,200 en drug primer, ki je skoraj identična, razen tega eno 859 00:38:13,200 --> 00:38:14,350 vrstica kode. 860 00:38:14,350 --> 00:38:18,870 Torej, to je različica hacker tega programa, če hočete. 861 00:38:18,870 --> 00:38:21,050 Ampak kaj je šele destilirati je v to, kaj se dogaja. 862 00:38:21,050 --> 00:38:28,920 Linija 24 se uporablja, da se to ne Nosilec sem dobil e nosilec i. 863 00:38:28,920 --> 00:38:33,370 Zdaj pa sem to spreminja na veliko bolj Grobni zvezda t 864 00:38:33,370 --> 00:38:36,280 plus 1 enako zvezda s plus 1. 865 00:38:36,280 --> 00:38:38,702 >> Torej, kaj se dogaja in zakaj imamo zvezda znak? 866 00:38:38,702 --> 00:38:41,410 Videli smo zvezdo pred in pri čemer je uporabljena različno tukaj. 867 00:38:41,410 --> 00:38:45,490 Smo že videli char *, zdaj vidim zvezda na začetku, in da je v redu. 868 00:38:45,490 --> 00:38:48,190 Ker se je izkazalo smo lahko nekako sklepamo le 869 00:38:48,190 --> 00:38:50,280 od tistih prvim Načela, kaj se dogaja. 870 00:38:50,280 --> 00:38:53,860 Torej, samo da bo jasno, kaj je s? 871 00:38:53,860 --> 00:38:55,052 Prejšnji teden je bil niz. 872 00:38:55,052 --> 00:38:56,260 Da ne zadostuje več. 873 00:38:56,260 --> 00:38:57,690 Kaj je y, posebej? 874 00:38:57,690 --> 00:38:58,590 >> OBČINSTVO: [neslišno] 875 00:38:58,590 --> 00:38:59,881 >> DAVID J. Malan: To je kazalec. 876 00:38:59,881 --> 00:39:02,610 To je naslov Prvi znak smo vnesli. 877 00:39:02,610 --> 00:39:04,780 OK, kaj je t? 878 00:39:04,780 --> 00:39:05,660 >> OBČINSTVO: [neslišno] 879 00:39:05,660 --> 00:39:07,950 >> DAVID J. Malan: The naslov prvega bajta 880 00:39:07,950 --> 00:39:10,490 t, da je kos pomnilnika prerazporedijo. 881 00:39:10,490 --> 00:39:14,720 Tako se izkaže, da je, ko smo ponovitev od 0 na do niza 882 00:39:14,720 --> 00:39:17,424 length-- najprej, i Začne se na 0, saj 883 00:39:17,424 --> 00:39:18,840 te stare šole za zanke stvar. 884 00:39:18,840 --> 00:39:22,400 Torej samo za preprostost, dajmo Predvidevam, da je prvo vrstico kode 885 00:39:22,400 --> 00:39:23,760 je res samo to, kajne. 886 00:39:23,760 --> 00:39:26,080 Če jaz nič, dodaja nič nečemu predvidoma 887 00:39:26,080 --> 00:39:27,540 ne bo imela učinka. 888 00:39:27,540 --> 00:39:28,560 >> Torej, kaj je ta beseda? 889 00:39:28,560 --> 00:39:31,600 Izkaže se, da je zvezda Operater v tem kontekstu 890 00:39:31,600 --> 00:39:33,700 je dereference operater, ki je le 891 00:39:33,700 --> 00:39:37,530 fancy način rekel go na naslov. 892 00:39:37,530 --> 00:39:42,080 Torej, če je s naslov prva lik v tej kos pomnilnika, 893 00:39:42,080 --> 00:39:43,630 * s sredstvi tja. 894 00:39:43,630 --> 00:39:45,630 In ker smo pripravljeni slika na ta način, 895 00:39:45,630 --> 00:39:47,430 lahko sprejme po duševno modela. 896 00:39:47,430 --> 00:39:51,030 Če je to s, in rečeš * s, * i nekako kot drč in lestve, 897 00:39:51,030 --> 00:39:54,540 če se spomnite igro iz otroštva, je kot slediti to puščico in pojdite 898 00:39:54,540 --> 00:39:55,570 na naslov. 899 00:39:55,570 --> 00:39:57,080 >> * t je ista stvar. 900 00:39:57,080 --> 00:39:59,855 Torej začeti tukaj, pojdite na njegovo kos. 901 00:39:59,855 --> 00:40:03,350 Ne morem pripraviti na ta zaslon na ta način. 902 00:40:03,350 --> 00:40:05,560 * t pomeni, da gredo tukaj. 903 00:40:05,560 --> 00:40:08,830 In potem je za zanke je samo rekoč premakniti ta znak tukaj, 904 00:40:08,830 --> 00:40:11,330 premakniti ta znak tukaj, premakniti ta znak tukaj. 905 00:40:11,330 --> 00:40:12,890 Ampak kako naj naredim, da stopnjevanja? 906 00:40:12,890 --> 00:40:15,430 Moram razveljavite kaj sem pravkar črta. 907 00:40:15,430 --> 00:40:18,140 To je tisto, kar na splošno imenujemo pointer aritmetika, ki 908 00:40:18,140 --> 00:40:20,040 pomeni matematike z naslovi. 909 00:40:20,040 --> 00:40:22,460 >> Če se v to zanko, Držim povečevanje i, 910 00:40:22,460 --> 00:40:26,880 in s je naslov in t naslov, če sem šele vztrajati dodal 1, 911 00:40:26,880 --> 00:40:31,406 to samo pomeni, da napreduje, in naprej, in naprej v spominu. 912 00:40:31,406 --> 00:40:34,030 To je kot Oxford Street, ulice, da je stavba CS naprej. 913 00:40:34,030 --> 00:40:36,490 CS zgradbe je na 33 Oxford Street. 914 00:40:36,490 --> 00:40:39,870 Torej, če ste bili, da naredite 33 Oxford Street plus 1, 915 00:40:39,870 --> 00:40:42,870 ki vas pripelje do 34 Oxford Ulica, nato 35 Oxford Street, 916 00:40:42,870 --> 00:40:46,380 nato 36 Oxford Street, glede na tiste, stavbe dejansko so - če ti obstajajo. 917 00:40:46,380 --> 00:40:50,540 In tako, da je vse, kar delamo tukaj s kazalcem aritmetiki. 918 00:40:50,540 --> 00:40:53,820 >> Torej, to je super Skrivnosten način izražanja sebe. 919 00:40:53,820 --> 00:40:56,160 Ampak vse, kar se dogaja Pod pokrovom 920 00:40:56,160 --> 00:40:59,330 je samo po teh naslovov, kot sledi zemljevid, če hočete, 921 00:40:59,330 --> 00:41:02,692 ali po puščic, kot smo pripravljeni na zaslonu. 922 00:41:02,692 --> 00:41:04,910 OK, veliko za prebaviti. 923 00:41:04,910 --> 00:41:10,410 Vsako vprašanje o skladnji, koncepti, kazalci, malloc ali podobno. 924 00:41:10,410 --> 00:41:11,480 Ja, sem prvi. 925 00:41:11,480 --> 00:41:13,755 >> OBČINSTVO: Torej, kje da pravi * t enaka toupper * t, 926 00:41:13,755 --> 00:41:15,575 je, da se dogaja, da se izkoristijo vse črke ali just-- 927 00:41:15,575 --> 00:41:17,283 >> DAVID J. Malan: Ah, Res dobro vprašanje. 928 00:41:17,283 --> 00:41:19,805 Torej, v tej vrstici tukaj, 31, se to dogaja, da se izkoristijo 929 00:41:19,805 --> 00:41:21,430 prva črka ali vse črkami. 930 00:41:21,430 --> 00:41:23,460 Torej, kaj je odgovoriti na to vprašanje, ki ga bo nazaj na prvih načel. 931 00:41:23,460 --> 00:41:26,168 In prva načela tu mislim pojdite z osnovnimi definicijami 932 00:41:26,168 --> 00:41:27,000 kaj se gre. 933 00:41:27,000 --> 00:41:29,770 Torej toupper je funkcija ki izkorišča char. 934 00:41:29,770 --> 00:41:30,530 To je vse. 935 00:41:30,530 --> 00:41:36,740 * t pomeni iti na first-- pojdite na naslov v t. 936 00:41:36,740 --> 00:41:40,350 Torej, na sliki, če je to kos spomina smo dodelijo knjižnične funkcije malloc, 937 00:41:40,350 --> 00:41:43,310 in to je, t * t pomeni iti tukaj. 938 00:41:43,310 --> 00:41:46,710 >> Medtem pa si mimo da vrednost, male črke m 939 00:41:46,710 --> 00:41:50,040 da toupper, ste dobili nazaj kapital M, kjer si ga je dala? 940 00:41:50,040 --> 00:41:52,410 Si ga je dala v tej isti lokaciji. 941 00:41:52,410 --> 00:41:55,540 In tako se ta logika tistih, osnovne definicije je le 942 00:41:55,540 --> 00:41:58,792 kapitalizacijo prvo črko razen če Ponovil z I ali 943 00:41:58,792 --> 00:42:02,000 za zanke ali while, to ne bo storiti kaj več, kot si ga vprašati. 944 00:42:02,000 --> 00:42:02,583 Dobro vprašanje. 945 00:42:02,583 --> 00:42:03,237 Ja? 946 00:42:03,237 --> 00:42:05,369 >> OBČINSTVO: Zakaj ste uporabljate dereference metodo namesto 947 00:42:05,369 --> 00:42:05,979 array? 948 00:42:05,979 --> 00:42:07,395 >> DAVID J. Malan: Ah, dobro vprašanje. 949 00:42:07,395 --> 00:42:10,672 Zakaj bi uporabili razrešimo Postopek namesto metode diod? 950 00:42:10,672 --> 00:42:12,130 Ni posebnega razloga, če sem iskren. 951 00:42:12,130 --> 00:42:15,290 In, v bistvu, za to vrsta primer, desno, 952 00:42:15,290 --> 00:42:17,556 Jaz sem samo trdil, zaradi česar je program bolj zapleten, 953 00:42:17,556 --> 00:42:19,680 več oči so zasteklitve več, ljudje preverjanje ven 954 00:42:19,680 --> 00:42:22,830 ker to izgleda super Skrivnosten, vendar čeprav to počne isto stvar. 955 00:42:22,830 --> 00:42:26,695 In tako, odkrito povedano, to je nepotrebnem vizualno kompleksna rešitev 956 00:42:26,695 --> 00:42:27,320 problema. 957 00:42:27,320 --> 00:42:29,580 >> To je še vedno dober design, pet od petih za projektiranje, 958 00:42:29,580 --> 00:42:33,140 ali je v razredu zapis ali kazalec zapis. 959 00:42:33,140 --> 00:42:36,299 Ampak-- posebej, ko smo dobili kasneje v teku v PSet 5 960 00:42:36,299 --> 00:42:39,340 ko smo izvajati ta slovar, ki Omenil sem nekaj times-- 961 00:42:39,340 --> 00:42:42,300 bomo dejansko skrbi pomnilniške naslove nizki ravni 962 00:42:42,300 --> 00:42:44,140 da bomo zares razumeli kaj se dogaja. 963 00:42:44,140 --> 00:42:48,300 >> Ampak, za zdaj, se izkaže, da je to vrstica kode tukaj oglatih oklepajih 964 00:42:48,300 --> 00:42:49,900 v resnici ne obstajajo. 965 00:42:49,900 --> 00:42:52,230 So tisto, kar se imenuje skladenjski sladkor, ki 966 00:42:52,230 --> 00:42:58,390 je le nenavadno kul način pravijo prevajalnik pretvori oglati oklepaji biti 967 00:42:58,390 --> 00:43:00,420 da je matematični izraz. 968 00:43:00,420 --> 00:43:02,660 Torej, to je človeška konvencija da se lahko samo napisati 969 00:43:02,660 --> 00:43:04,220 ti zelo uporabniku prijazen oklepajih. 970 00:43:04,220 --> 00:43:06,850 Toda kaj prevajalnik, Jek, je res počne kadarkoli 971 00:43:06,850 --> 00:43:10,970 pišeš, kaj je poudarjeno v skladu 24, pod pokrovom je res 972 00:43:10,970 --> 00:43:12,330 pretvorimo v to. 973 00:43:12,330 --> 00:43:16,200 To je samo bolj prijetno kot človek brati in pisati kodo, kot linijo 24. 974 00:43:16,200 --> 00:43:18,530 Ampak na koncu tisti, kolesa usposabljanje preveč odlepi 975 00:43:18,530 --> 00:43:21,780 Ko je eden lastno udobje postane močnejša. 976 00:43:21,780 --> 00:43:27,240 >> Vse je v redu, tako opozarjajo, nato pa, da je to je nekako največji problem 977 00:43:27,240 --> 00:43:27,807 sva srečala. 978 00:43:27,807 --> 00:43:30,640 In to je tisto, kar je sprožila to celoto damn pogovor o kazalci, 979 00:43:30,640 --> 00:43:32,340 in naslove ter kopiranje stvari. 980 00:43:32,340 --> 00:43:35,410 To je bilo zato, ker smo se spotikali to neumno, neumno vprašanje, s katerim 981 00:43:35,410 --> 00:43:38,830 Sem izvajal logically-- z Lauren tu gor na demo in pomarančnega soka 982 00:43:38,830 --> 00:43:43,770 v milk-- popolnoma algorithmically pravilna funkcija 983 00:43:43,770 --> 00:43:47,010 za zamenjavo dveh spremenljivk " vrednote, ampak prekleto stvar 984 00:43:47,010 --> 00:43:50,550 niso imeli kakršne koli obstojne, ali trajna, vpliv na mojo kodo. 985 00:43:50,550 --> 00:43:51,820 >> In zakaj je bilo to? 986 00:43:51,820 --> 00:43:54,650 Na kratko, zakaj je to Izvajanje zamenjave 987 00:43:54,650 --> 00:43:58,740 logično pravilna, vendar nima vpliva o spremenljivk, ki so opravili z njim, 988 00:43:58,740 --> 00:44:01,119 kot x in y za glavni? 989 00:44:01,119 --> 00:44:02,410 Kaj je bilo bistvo tega vprašanja? 990 00:44:02,410 --> 00:44:02,909 Ja? 991 00:44:02,909 --> 00:44:05,532 OBČINSTVO: Ker spremenljivka je kopije spremenljivke v glavo 992 00:44:05,532 --> 00:44:06,240 s funkcijo. 993 00:44:06,240 --> 00:44:09,060 >> DAVID J. Malan: Točno tako, ko se boste peljali spremenljivke v odvisnosti, ali trditve 994 00:44:09,060 --> 00:44:11,030 v funkciji, oni s kopijo, opravil, ki 995 00:44:11,030 --> 00:44:14,770 pomeni, da bi dobili enak iščejo Vzorec bitov za oba x in y, 996 00:44:14,770 --> 00:44:15,955 tu imenuje a in b. 997 00:44:15,955 --> 00:44:18,080 In lahko narediš karkoli hočeš s temi kopijami, 998 00:44:18,080 --> 00:44:20,657 ampak oni bodo morali ne Vpliv na funkcijo kliče. 999 00:44:20,657 --> 00:44:22,990 In v resnici, smo pripravili da Slika na zaslonu, odpoklic 1000 00:44:22,990 --> 00:44:25,520 zadnji čas, pri čemer se, če vas res misliš o tem, kaj je 1001 00:44:25,520 --> 00:44:28,570 dogaja pod hood-- če to je spomin računalnika, 1002 00:44:28,570 --> 00:44:31,650 in tukaj dol je kos pomnilnik, ki se uporablja za glavno, 1003 00:44:31,650 --> 00:44:34,020 to je kos pomnilnik, ki se uporablja za zamenjavo, 1004 00:44:34,020 --> 00:44:37,090 in tudi če je glavni dve spremenljivki, X in Y, 1005 00:44:37,090 --> 00:44:41,840 swap morda identična iščejo Vrednosti, ki sta 1 in 2, 1006 00:44:41,840 --> 00:44:44,520 ampak oni so popolnoma različne kose pomnilnika. 1007 00:44:44,520 --> 00:44:46,130 >> Zato moramo rešitev za to. 1008 00:44:46,130 --> 00:44:51,580 In odkrito povedano, se zdi, da imamo zdaj imamo rešitev za ta problem, kajne. 1009 00:44:51,580 --> 00:44:55,760 Če imamo zdaj možnost, da manipulira stvari s pomočjo naslovov 1010 00:44:55,760 --> 00:44:59,310 in, nekako drče in lestve slog, sledite puščice 1011 00:44:59,310 --> 00:45:02,820 in gremo nikamor želimo v spomin, ne bi mi 1012 00:45:02,820 --> 00:45:06,220 rešili ta problem s ki poteka od glavnega, da bi zamenjali 1013 00:45:06,220 --> 00:45:09,650 ne vrednote želimo swap, ampak samo intuitivno 1014 00:45:09,650 --> 00:45:11,630 kaj bi se peljemo, namesto da bi zamenjali? 1015 00:45:11,630 --> 00:45:12,620 >> [Interposing GLAS] 1016 00:45:12,620 --> 00:45:15,244 >> DAVID J. Malan: Zakaj ne bomo samo prenese naslovi, kajne? 1017 00:45:15,244 --> 00:45:17,470 Zakaj ne damo swap treasure map, če hočete, 1018 00:45:17,470 --> 00:45:20,950 ki vodi do trenutnih vrednosti x in y. 1019 00:45:20,950 --> 00:45:24,340 Oglejmo swap, dejansko spremeniti ti originalni bitov, namesto 1020 00:45:24,340 --> 00:45:26,797 pravkar poteka kopije bitov. 1021 00:45:26,797 --> 00:45:29,130 In tako, v resnici, da je tisto, kar je bo rešitev. 1022 00:45:29,130 --> 00:45:31,899 Ta različica je tu jasno slaba in pomanjkljiva. 1023 00:45:31,899 --> 00:45:35,190 In zdaj, na prvi pogled, je samo izgleda kot smo dodali kup zvezd naključno 1024 00:45:35,190 --> 00:45:37,106 in prečkala naše prste da bi bilo sestaviti. 1025 00:45:37,106 --> 00:45:38,460 Ampak, bi to zdaj zbere. 1026 00:45:38,460 --> 00:45:40,090 >> Ampak poglejmo, kaj to pomeni. 1027 00:45:40,090 --> 00:45:43,990 In, na žalost, so avtorji C bi izbrali drug simbol 1028 00:45:43,990 --> 00:45:46,380 da bi to malo jasnejši, toda operater zvezda 1029 00:45:46,380 --> 00:45:48,610 ima drugačen pomen v dveh različnih kontekstih. 1030 00:45:48,610 --> 00:45:50,890 In smo videli tako, ampak dajmo razlikovati. 1031 00:45:50,890 --> 00:45:55,310 >> Torej na vrhu tam, ko sem spremenil a in b 1032 00:45:55,310 --> 00:46:00,470 od tega, da INT v slabo Različica za int zvezdic, A in B, 1033 00:46:00,470 --> 00:46:01,740 prej so cela števila. 1034 00:46:01,740 --> 00:46:05,752 Kaj sta A in B je zdaj v dobro, zelena različica? 1035 00:46:05,752 --> 00:46:06,900 Oni naslove. 1036 00:46:06,900 --> 00:46:09,610 Naslovi kaj, da bo jasno? 1037 00:46:09,610 --> 00:46:10,770 Naslovi celih števil. 1038 00:46:10,770 --> 00:46:12,520 Torej dejstvo, da sem rekoč int zvezda sredstva 1039 00:46:12,520 --> 00:46:15,440 to je naslov celo število, posebej. 1040 00:46:15,440 --> 00:46:19,120 >> Torej, zdaj opazili v vrstic kode, nekaj drugega je preveč spremenila. 1041 00:46:19,120 --> 00:46:22,770 NTU ostaja enaka, saj to je samo začasna celo, 1042 00:46:22,770 --> 00:46:24,110 brez spominskega magija obstaja. 1043 00:46:24,110 --> 00:46:26,370 Toda zdaj potrebuje zvezdo. 1044 00:46:26,370 --> 00:46:28,560 In v bistvu vse druga omemba a in b, 1045 00:46:28,560 --> 00:46:31,780 opazili, da je vse, kar je spreminja iz rdeče v zeleno 1046 00:46:31,780 --> 00:46:34,209 je, da sem prefixing te spremenljivke z zvezdami. 1047 00:46:34,209 --> 00:46:35,750 Ker ne želim, da bi kopirali a in b. 1048 00:46:35,750 --> 00:46:40,350 Ker, če sem samo kopirate a in b in swap a in b, kaj sem dejansko zamenjavo? 1049 00:46:40,350 --> 00:46:43,760 Samo naslovi, želim, da bi zamenjali kaj je na teh naslovih. 1050 00:46:43,760 --> 00:46:44,860 Hočem iti tja. 1051 00:46:44,860 --> 00:46:48,000 In tako upravljavec zvezda notranjost moje funkcije, 1052 00:46:48,000 --> 00:46:51,700 ne znotraj seznama parametrov pomeni, da greš na te naslove 1053 00:46:51,700 --> 00:46:54,490 in dejansko spremembo te vrednosti. 1054 00:46:54,490 --> 00:46:56,500 >> Torej, kaj naredi sliko zdaj izgledal namesto. 1055 00:46:56,500 --> 00:47:03,250 No, če bi namesto sem mimo v za a in b ni 1 in 2-- 1056 00:47:03,250 --> 00:47:05,790 Pravzaprav moram dodati ena definicija tukaj. 1057 00:47:05,790 --> 00:47:09,030 Torej domnevam, da je ta kos pomnilnika je na mestu 10. 1058 00:47:09,030 --> 00:47:12,960 >> To je na mestu 11, vendar je to je malo poenostavitve, 1059 00:47:12,960 --> 00:47:18,900 Sedaj imam dve možnosti moram opraviti x in y, ali moram opraviti svoje naslove? 1060 00:47:18,900 --> 00:47:22,500 Če grem mimo njihove naslove kot je ta, pravkar sem 1061 00:47:22,500 --> 00:47:25,390 Zdaj je treba izvajati swap na zeleno kodo 1062 00:47:25,390 --> 00:47:29,080 tako da, ko se vidi, in ko jo vidi b, ne samo kopirati A in B 1063 00:47:29,080 --> 00:47:30,540 in premaknite mleko in pomarančni sok. 1064 00:47:30,540 --> 00:47:32,664 Mleko in pomarančni sok Metafora zdaj pokvari, 1065 00:47:32,664 --> 00:47:35,060 ker tisti so skodelice tekočih in ne kart. 1066 00:47:35,060 --> 00:47:37,750 Mi namesto tega morali iti za reševanje 10 in smo 1067 00:47:37,750 --> 00:47:42,420 morali iti za reševanje 11, in izvedite to swapping logiko. 1068 00:47:42,420 --> 00:47:45,580 >> Torej logika je enaka, vendar potrebujemo nekoliko drugačen način 1069 00:47:45,580 --> 00:47:47,160 dostopanja do teh spremenljivk. 1070 00:47:47,160 --> 00:47:52,400 In tako na koncu, kaj je Program mora izgledati, kot je to. 1071 00:47:52,400 --> 00:47:56,610 V swap.c dobesedno kopirajo in prilepili zeleno različico. 1072 00:47:56,610 --> 00:47:58,450 Ampak moram narediti eno spremembo. 1073 00:47:58,450 --> 00:48:00,180 To ni dovolj, samo, da spremenite swap. 1074 00:48:00,180 --> 00:48:03,830 Katera druga vrstica kode moram spremeniti? 1075 00:48:03,830 --> 00:48:04,330 Ja? 1076 00:48:04,330 --> 00:48:05,770 >> OBČINSTVO: Kjer je potrebno argumente. 1077 00:48:05,770 --> 00:48:07,603 >> DAVID J. Malan: Kje je potrebno njeno trditev. 1078 00:48:07,603 --> 00:48:09,985 Torej, če sem se pomaknete do glavne sem ne komaj gredo v x in y, 1079 00:48:09,985 --> 00:48:12,820 in obljubim, zadnji kos nove sintakse danes. 1080 00:48:12,820 --> 00:48:17,200 Moram se pa ne x in y vendar naslov x in y. 1081 00:48:17,200 --> 00:48:20,400 In se je izkazalo, simbol da so avtorji C izbral 1082 00:48:20,400 --> 00:48:23,860 je, če uporabljate 'znak tukaj, da ne smemo zamenjevati z bitno ampersand, 1083 00:48:23,860 --> 00:48:27,130 če uporabljate 'in' znak tu in ampersand tukaj, 1084 00:48:27,130 --> 00:48:29,570 to številke za vas, kaj je naslov x, 1085 00:48:29,570 --> 00:48:31,740 morda je 10, kar je naslov y, morda je 1086 00:48:31,740 --> 00:48:35,400 11, in prehaja tistih namesto. 1087 00:48:35,400 --> 00:48:37,210 >> Tako veliko, da absorbira vse naenkrat. 1088 00:48:37,210 --> 00:48:40,190 Ampak poglejmo zdaj hitro v naše preostale štiri minute 1089 00:48:40,190 --> 00:48:42,150 kjer lahko gredo stvari narobe. 1090 00:48:42,150 --> 00:48:45,120 In kot prahi, dejansko Vzel sem to sliko, 1091 00:48:45,120 --> 00:48:46,920 TF vzel to sliko leto ali dve nazaj. 1092 00:48:46,920 --> 00:48:49,190 To je torej spet vogal od Eliot Dining Hall. 1093 00:48:49,190 --> 00:48:52,310 Kazalci so morda najtežji tema, ki pokrivamo v CS50. 1094 00:48:52,310 --> 00:48:54,810 Torej, če vas skrbi neke po pobočju je kot morda je 1095 00:48:54,810 --> 00:48:56,770 bolj za hokejsko palico kot je ta, spoznali 1096 00:48:56,770 --> 00:49:00,160 smo nekako bliža vrhunec Pogoji konceptualne zahtevnosti. 1097 00:49:00,160 --> 00:49:02,300 >> In sem bruhati to fotografija, ker prisežem 1098 00:49:02,300 --> 00:49:05,920 za boga, v jeseni leta 1996, ko sem prevzel CS50 z mojim asistent, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, me je sedel v vogal Eliot D. Hall kosilu, 1100 00:49:09,620 --> 00:49:12,330 ali večerjo, ali kaj podobnega, da bi poskušali da mi pomaga razumeti napotke. 1101 00:49:12,330 --> 00:49:16,520 In to je, če sem bil tednov po je bil uveden v predavanju kadar 1102 00:49:16,520 --> 00:49:18,170 Končno sem razumel kazalce. 1103 00:49:18,170 --> 00:49:20,590 In jaz upam, da je to bo klik daleč prej za vas. 1104 00:49:20,590 --> 00:49:23,540 Vendar zavedaš tega absolutno med bolj sofisticirane teme 1105 00:49:23,540 --> 00:49:24,420 smo pogledal. 1106 00:49:24,420 --> 00:49:25,819 Vendar je med najbolj močna. 1107 00:49:25,819 --> 00:49:28,860 In ko si ga dobil, to je res vse le, da bo končno prišel skupaj. 1108 00:49:28,860 --> 00:49:31,460 Ostali tako prepričani, da ne morali vsi potonejo v danes. 1109 00:49:31,460 --> 00:49:32,980 >> Torej, tukaj je zadnja programa gremo pogledati. 1110 00:49:32,980 --> 00:49:35,605 In mi boš na koncu z Hitre treh minutah claymation 1111 00:49:35,605 --> 00:49:37,030 ki ga je naš prijatelj, Nick Parlante. 1112 00:49:37,030 --> 00:49:41,440 Tukaj je program, ki na vrhu dva linije izjavlja spremenljivo X in Y. 1113 00:49:41,440 --> 00:49:44,780 Ki sta naslovi celih števil, alias kazalci. 1114 00:49:44,780 --> 00:49:48,125 Nato smo dodeliti dovolj pomnilnik za shranjevanje int 1115 00:49:48,125 --> 00:49:51,344 in shranite naslov navedene spomina v x. 1116 00:49:51,344 --> 00:49:53,260 Torej, to je še enostavnejše kot primer poprej. 1117 00:49:53,260 --> 00:49:56,100 Daj mi štirih bajtov pomnilnika, da je velikost int, 1118 00:49:56,100 --> 00:49:58,000 in dal, da je naslov v x. 1119 00:49:58,000 --> 00:50:01,070 Ta linija tukaj pomeni pojdite na naslov v x 1120 00:50:01,070 --> 00:50:05,270 in dal pomen življenje, število 42 tam. 1121 00:50:05,270 --> 00:50:07,710 Toda ta linija me skrbi. 1122 00:50:07,710 --> 00:50:12,620 Star y pomeni, pojdite na naslov v y, in dal nesrečni številko 13 tam. 1123 00:50:12,620 --> 00:50:15,780 Zakaj je nevarno, da na tej točki v story-- čeprav hitro povedal 1124 00:50:15,780 --> 00:50:17,980 v naših pojema minutah here-- zakaj je to slabo 1125 00:50:17,980 --> 00:50:19,660 povem, pojdite na naslov v y? 1126 00:50:19,660 --> 00:50:21,077 >> OBČINSTVO: Niste [neslišno]. 1127 00:50:21,077 --> 00:50:22,910 DAVID J. Malan: Nimam dal ničesar v y. 1128 00:50:22,910 --> 00:50:25,520 Torej, kaj je vrednost y, na tej točki v zgodbi? 1129 00:50:25,520 --> 00:50:26,570 Nimamo pojma. 1130 00:50:26,570 --> 00:50:29,190 To je nekaj smeti vrednost in niti ne Binky vem. 1131 00:50:29,190 --> 00:50:32,532 Če bi lahko na koncu na tej opombi. 1132 00:50:32,532 --> 00:50:34,832 >> [VIDEO PREDVAJANJE] 1133 00:50:34,832 --> 00:50:36,500 >> Hej, Binky, zbudi se. 1134 00:50:36,500 --> 00:50:39,140 To je čas za kazalec zabave. 1135 00:50:39,140 --> 00:50:40,210 >> -Kaj je to? 1136 00:50:40,210 --> 00:50:41,690 Spoznajte kazalci? 1137 00:50:41,690 --> 00:50:43,570 Oh, vrlina. 1138 00:50:43,570 --> 00:50:46,600 >> No, za začetek, mislim, da smo bo potreboval par nasvetov. 1139 00:50:46,600 --> 00:50:47,380 >> -V REDU. 1140 00:50:47,380 --> 00:50:51,120 Ta koda namenja dve kazalce ki lahko kažejo na cela števila. 1141 00:50:51,120 --> 00:50:53,557 >> -OK, Dobro vidim dva kazalca, vendar pa 1142 00:50:53,557 --> 00:50:55,140 Ne zdi se, da kaže, da ničesar. 1143 00:50:55,140 --> 00:50:55,970 >> -Tako je. 1144 00:50:55,970 --> 00:50:58,100 Sprva ptičarji ne kažejo nič. 1145 00:50:58,100 --> 00:51:00,950 Stvari, ki jih kažejo, da so imenuje pointees in njihovo vzpostavitvijo 1146 00:51:00,950 --> 00:51:02,330 je ločen korak. 1147 00:51:02,330 --> 00:51:03,210 >> Oh, prav, prav. 1148 00:51:03,210 --> 00:51:03,940 Vedel sem, da je. 1149 00:51:03,940 --> 00:51:05,730 V pointees sta ločena. 1150 00:51:05,730 --> 00:51:08,310 Torej, kako si dodelijo pointee? 1151 00:51:08,310 --> 00:51:11,960 >> -OK, Tudi tega kodeksa dodeljuje nov celo pointee, 1152 00:51:11,960 --> 00:51:15,050 in tem delu so x, da kaže na to. 1153 00:51:15,050 --> 00:51:16,240 >> Hej, da izgleda bolje. 1154 00:51:16,240 --> 00:51:17,743 Torej bi bilo nekaj storiti. 1155 00:51:17,743 --> 00:51:23,580 >> -OK, Bom dereference kazalca x do shranite številko 42 v svojem pointee. 1156 00:51:23,580 --> 00:51:27,130 Za ta trik, bom morali my čarobno palico iz Dereferenciranje. 1157 00:51:27,130 --> 00:51:30,200 >> -vašo Čarobno palico iz Dereferenciranje? 1158 00:51:30,200 --> 00:51:32,310 Uh, to, da je super. 1159 00:51:32,310 --> 00:51:34,270 >> -To Je tisto koda izgleda. 1160 00:51:34,270 --> 00:51:35,970 Bom ustanovil številko in-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> Hej, poglej tam gre. 1163 00:51:39,140 --> 00:51:43,980 Torej, delaš razrešimo na x sledi puščica za dostop do svojega pointee. 1164 00:51:43,980 --> 00:51:46,150 V tem primeru, za shranjevanje 42 tam. 1165 00:51:46,150 --> 00:51:50,700 Hej, poskusite ga uporabljali za shranjevanje številko 13 skozi drugo kazalca, y. 1166 00:51:50,700 --> 00:51:51,840 >> -V REDU. 1167 00:51:51,840 --> 00:51:56,270 Bom šel tja na y, in dobil številko 13 ustanovi. 1168 00:51:56,270 --> 00:52:00,380 In nato vzemite palico Dereferenciranje in just-- 1169 00:52:00,380 --> 00:52:01,646 >> [BUZZER SOUND] 1170 00:52:01,646 --> 00:52:04,080 >> Oh, hej, da ni deloval. 1171 00:52:04,080 --> 00:52:06,470 Reci, uh, Binky, jaz ne mislim Dereferenciranje 1172 00:52:06,470 --> 00:52:10,850 y je dobra ideja, saj nastavitev up pointee je ločen korak. 1173 00:52:10,850 --> 00:52:12,480 In jaz ne mislim, da bomo kdaj naredili. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Dobro izhodišče. 1175 00:52:14,620 --> 00:52:19,810 >> Ja, smo se dodelijo kazalec, Y, vendar ne bomo nikoli nastavite tako, da kaže na pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Zelo pazljiv. 1177 00:52:21,590 --> 00:52:23,215 Hej, iščete dobro tam, Binky. 1178 00:52:23,215 --> 00:52:26,390 Lahko jo popraviti, tako da y točke z enakim pointee kot x. 1179 00:52:26,390 --> 00:52:29,290 >> -Sure, Uporabljam mojo čarobno palico razvrščanja kazalca. 1180 00:52:29,290 --> 00:52:31,970 >> -je Da dogaja, da se Problem, kot prej? 1181 00:52:31,970 --> 00:52:33,790 >> Ne, to ne dotikajte pointees. 1182 00:52:33,790 --> 00:52:35,840 Samo spremeni en kazalec da kaže na isto thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [Pokanje] 1184 00:52:36,465 --> 00:52:37,450 --as drugega. 1185 00:52:37,450 --> 00:52:38,440 >> -Vidim. 1186 00:52:38,440 --> 00:52:41,200 Zdaj y opozarja na istem mestu kot x. 1187 00:52:41,200 --> 00:52:42,950 Torej, čakaj, zdaj je y fiksna. 1188 00:52:42,950 --> 00:52:44,110 Ima pointee. 1189 00:52:44,110 --> 00:52:47,779 Torej, lahko poskusite palico spet Dereferenciranje poslati 13 preveliko. 1190 00:52:47,779 --> 00:52:51,110 >> Oh, OK, tukaj gre. 1191 00:52:51,110 --> 00:52:52,330 >> Hej, poglej to. 1192 00:52:52,330 --> 00:52:53,570 Zdaj Dereferenciranje dela na y. 1193 00:52:53,570 --> 00:52:57,900 In ker so kazalci v skupni rabi da eno pointee, oba glejte 13. 1194 00:52:57,900 --> 00:52:59,952 >> Ja, delitev, uh, karkoli. 1195 00:52:59,952 --> 00:53:01,535 Torej, bomo preklopiti krajev zdaj? 1196 00:53:01,535 --> 00:53:03,730 >> Oh, poglej smo zmanjkalo časa. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -Samo Zapomniti tri pravila kazalec. 1199 00:53:06,520 --> 00:53:09,550 Številka 1, osnovna struktura je, da imate kazalec, 1200 00:53:09,550 --> 00:53:11,630 in opozarja več na pointee. 1201 00:53:11,630 --> 00:53:13,740 Toda kazalec in pointee sta ločena. 1202 00:53:13,740 --> 00:53:15,620 In pogosta napaka je vzpostaviti kazalec 1203 00:53:15,620 --> 00:53:18,000 ampak, da bi pozabili, da ga pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Številka 2, kazalec Dereferenciranje začne na kazalec 1205 00:53:21,170 --> 00:53:24,020 in sledi svoji puščico nad za dostop do svojega pointee. 1206 00:53:24,020 --> 00:53:27,815 Kot vsi vemo, to deluje le, če obstaja je pointee, ki nekako pride nazaj 1207 00:53:27,815 --> 00:53:29,260 izreči številko 1. 1208 00:53:29,260 --> 00:53:31,990 >> Številka 3, kazalec Dodelitev traja en kazalec 1209 00:53:31,990 --> 00:53:35,330 in ga spremeni v točko na Enako pointee kot drugi kazalec. 1210 00:53:35,330 --> 00:53:37,150 Torej, po odstopu, oba kazalci 1211 00:53:37,150 --> 00:53:40,927 točko, da bo isti pointee, včasih, da se imenuje delitev. 1212 00:53:40,927 --> 00:53:42,510 In to je vse, kar je z njo, res. 1213 00:53:42,510 --> 00:53:43,130 Adijo zdaj. 1214 00:53:43,130 --> 00:53:43,475 >> [END PREDVAJANJE] 1215 00:53:43,475 --> 00:53:44,830 >> DAVID J. Malan: To je to za CS50. 1216 00:53:44,830 --> 00:53:46,246 Zahvaljujoč profesor Nick Parlante. 1217 00:53:46,246 --> 00:53:47,730 Se vidimo naslednji teden. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [ELECTRONIC MUSIC IGRANJE] 1220 00:53:56,435 --> 00:57:22,775