1 00:00:00,000 --> 00:00:03,395 >> [Prehrávanie hudby] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 DAVID J. Malan: To je ako nováčik seminár dnes. 4 00:00:13,280 --> 00:00:14,060 OK. 5 00:00:14,060 --> 00:00:15,024 Takže veľmi daždivé von. 6 00:00:15,024 --> 00:00:17,690 To má tendenciu stať sa v stredu, ale o to viac príležitostí 7 00:00:17,690 --> 00:00:18,700 pre otázky dnes. 8 00:00:18,700 --> 00:00:22,210 Takže poďme začať skutočne s filmom za chvíľu. 9 00:00:22,210 --> 00:00:24,560 Ale začneme vznešene ako vždy. 10 00:00:24,560 --> 00:00:28,000 >> To je CS50, a to je koniec týždňa 4. 11 00:00:28,000 --> 00:00:30,820 Takže ak ste niekedy sledovali Televízie alebo filmu, kde 12 00:00:30,820 --> 00:00:34,690 tam je nejaký počítačoví experti a polícia, alebo FBI, alebo nejaká agentúra 13 00:00:34,690 --> 00:00:36,930 sa snaží chytiť nejaké protivník, no, som 14 00:00:36,930 --> 00:00:40,850 pravdepodobne počuli výraz "posilniť," čím že technik akosi 15 00:00:40,850 --> 00:00:44,750 magicky zväčší nekonečne ďaleko vidieť zločinca 16 00:00:44,750 --> 00:00:48,640 totožnosti alebo ŠPZ aj v tom trblietania zrkadla 17 00:00:48,640 --> 00:00:50,390 alebo záblesk niečí oko. 18 00:00:50,390 --> 00:00:55,196 Takže naozaj, poďme sa pozrieť na len pár takých scén z Hollywoodu. 19 00:00:55,196 --> 00:00:55,862 [Videoprehrávanie] 20 00:00:55,862 --> 00:00:59,243 -OK, Teraz poďme dobré pozrieť sa na vás. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Drž to. 23 00:01:07,415 --> 00:01:08,267 Spustiť to späť. 24 00:01:08,267 --> 00:01:09,121 >> -Počkaj minútu. 25 00:01:09,121 --> 00:01:11,300 Choďte doprava. 26 00:01:11,300 --> 00:01:12,209 >> -Je, Zmraziť, že. 27 00:01:12,209 --> 00:01:12,750 -Celá obrazovka. 28 00:01:12,750 --> 00:01:13,558 -OK, Zmraziť, že. 29 00:01:13,558 --> 00:01:14,820 Sprísnenie pri súčasnom sa na to, že budete? 30 00:01:14,820 --> 00:01:16,530 -Vector V na to človek od zadného kolesa. 31 00:01:16,530 --> 00:01:19,400 -zvětšení Priamo tu na tomto mieste. 32 00:01:19,400 --> 00:01:22,846 -S Pravé zariadenie, obrázok by mohol byť rozšírený a naostrené. 33 00:01:22,846 --> 00:01:24,065 -Čo je to? 34 00:01:24,065 --> 00:01:25,600 -To Je program vylepšenia. 35 00:01:25,600 --> 00:01:26,860 Vieš jasné, že sa nejaké? 36 00:01:26,860 --> 00:01:27,890 -Neviem. 37 00:01:27,890 --> 00:01:29,050 Poďme zvýšenie. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Časť A6. 39 00:01:31,575 --> 00:01:33,642 >> -I Lepšie detail, a-- Myslím, že je 40 00:01:33,642 --> 00:01:35,433 dostatočne zvýšiť, uvoľnite ju na mojej obrazovke. 41 00:01:35,433 --> 00:01:37,080 -I Lepšie odraz v očiach. 42 00:01:37,080 --> 00:01:38,830 >> -Nechaj To beh toto cez vylepšenia videa. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Môžete zvýšiť toto? 44 00:01:40,100 --> 00:01:41,875 >> -Počkaj. 45 00:01:41,875 --> 00:01:44,010 >> -I've Pracuje na tejto úvahy. 46 00:01:44,010 --> 00:01:44,995 >> -Someone Odraz. 47 00:01:44,995 --> 00:01:45,495 -Reflection. 48 00:01:45,495 --> 00:01:47,399 -Je To odraz mužovho tváre. 49 00:01:47,399 --> 00:01:48,065 -the Reflexia. 50 00:01:48,065 --> 00:01:48,981 -Je To odraz. 51 00:01:48,981 --> 00:01:50,600 -zvětšení Na zrkadlo. 52 00:01:50,600 --> 00:01:52,712 -Môžete Vidieť odraz. 53 00:01:52,712 --> 00:01:54,350 Vieš zlepšiť obraz odtiaľto? 54 00:01:54,350 --> 00:01:55,370 Vieš ho zlepšiť tu? 55 00:01:55,370 --> 00:01:56,210 Vieš to zlepšiť? 56 00:01:56,210 --> 00:01:56,900 Môžeš to zlepšiť? 57 00:01:56,900 --> 00:01:57,870 >> -Možno Zvyšujeme to? 58 00:01:57,870 --> 00:01:58,717 >> Vieš to zlepšiť? 59 00:01:58,717 --> 00:02:00,050 -Hold Na sekundu, budem zvýšiť. 60 00:02:00,050 --> 00:02:00,924 -zvětšení Na dvere. 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 -Nasťahovať sa. 64 00:02:03,490 --> 00:02:03,990 -viac. 65 00:02:03,990 --> 00:02:04,690 Počkať, zastaviť. 66 00:02:04,690 --> 00:02:05,190 -Stop. 67 00:02:05,190 --> 00:02:05,970 -Pause To. 68 00:02:05,970 --> 00:02:09,460 -Rotate Nám 75 stupňov okolo vertikálnej, prosím. 69 00:02:09,460 --> 00:02:10,962 -Stop. 70 00:02:10,962 --> 00:02:14,040 Vráťte sa do časti o dvere, znova. 71 00:02:14,040 --> 00:02:15,860 >> -Máš S Image Enhancer, ktorá môže bitová mapa? 72 00:02:15,860 --> 00:02:18,776 >> Hej, možno môžeme použiť Pradeep Metóda Sen vidieť do okien. 73 00:02:18,776 --> 00:02:20,372 Tohle softvér je stav techniky. 74 00:02:20,372 --> 00:02:21,845 >> -the Eigenvalue je vypnutý. 75 00:02:21,845 --> 00:02:24,300 >> -S Vpravo Kombinácia algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> Prijatá eliminácia -Je algoritmy na ďalšiu úroveň, 77 00:02:26,755 --> 00:02:28,730 a ja sa ich použiť na zlepšiť túto fotografiu. 78 00:02:28,730 --> 00:02:31,286 >> Blok ďalej a rozšíriť os z. 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 A zlepšiť. 83 00:02:34,960 --> 00:02:37,180 >> [END Prehrávanie] 84 00:02:37,180 --> 00:02:41,160 >> DAVID J. Malan: Dobre, tak všetky z nich sú v skutočnosti slová. 85 00:02:41,160 --> 00:02:44,450 Sú to len navlečené dohromady v tak, že to v skutočnosti nie je rozumné. 86 00:02:44,450 --> 00:02:48,400 A v skutočnosti, CS50 a kurzy páči inklinuje zničiť veľa televíziu a filmy 87 00:02:48,400 --> 00:02:48,900 pre teba. 88 00:02:48,900 --> 00:02:52,330 Vzhľadom k tomu, keď tie počítačové odborníkmi sú drnčanie off termíny a hovoriť 89 00:02:52,330 --> 00:02:56,860 efektné veci, ako je vlastné vektory, a z osi, 90 00:02:56,860 --> 00:02:59,572 a akýkoľvek počet iné v skutočnosti viac technické termíny, 91 00:02:59,572 --> 00:03:02,030 sú to naozaj len navliecť Slová spolu príliš často. 92 00:03:02,030 --> 00:03:05,020 Je to jeden z našich nádejí je, ako vedľajší účinok prijatia kurzov 93 00:03:05,020 --> 00:03:08,245 ako je táto, bude viac ľudí do world skutočne schopná vážiť 94 00:03:08,245 --> 00:03:12,040 a len niekedy tak trochu ovplyvniť kvalita a presnosť týchto filmov? 95 00:03:12,040 --> 00:03:14,350 >> V skutočnosti, poďme sa pozrieť na realitu. 96 00:03:14,350 --> 00:03:18,070 Takže tu je zamestnancovi foto Márie, jeden z našich výukových chlapi. 97 00:03:18,070 --> 00:03:20,050 A predpokladám, že ona je podozrivý z niečoho. 98 00:03:20,050 --> 00:03:23,730 A napriek tomu, je tu iskrička niektorí dôkaz v oku, 99 00:03:23,730 --> 00:03:25,480 alebo v odraze jej okuliarov. 100 00:03:25,480 --> 00:03:30,760 No, ak budeme robiť presne to, čo filmy navrhovať, kde sme sa priblížiť a "zvýšiť", 101 00:03:30,760 --> 00:03:34,080 To je, koľko informácií je v Máriinom tvári 102 00:03:34,080 --> 00:03:36,795 Pri robení snímky s pôvodným rozlíšenie. 103 00:03:36,795 --> 00:03:39,120 >> A v skutočnosti, môžete vidieť tieto body. 104 00:03:39,120 --> 00:03:41,900 A to sú aké sú tzv pixelov, P-I-X-E-L-S, 105 00:03:41,900 --> 00:03:45,740 čo je len štvorec typicky to je bod, ktorý komponuje snímku. 106 00:03:45,740 --> 00:03:49,200 A späť v deň, a vlastne aj dnes s niektorými z dnešných LED televízory 107 00:03:49,200 --> 00:03:51,950 alebo LCD televízory, ak máte človek vo svojej izbe, alebo doma, 108 00:03:51,950 --> 00:03:55,100 ak ste ísť až veľmi blízko k nej, a najmä ak je to trochu staršie TV, 109 00:03:55,100 --> 00:03:58,760 môžete pravdepodobne ešte vidieť tieto bodky a to je to, čo kompozíciu snímky. 110 00:03:58,760 --> 00:04:00,980 >> A nie je tam žiadny ďalší informácie, než je táto. 111 00:04:00,980 --> 00:04:05,400 Mohli by sme "zvýšiť", v tom zmysle, vyhladenie veci znovu a druh 112 00:04:05,400 --> 00:04:09,040 vyvodzovanie druh, tak nejako to, čo Farba by mala byť vedľa Marie oko 113 00:04:09,040 --> 00:04:10,910 takže to nie je vlastne tak pixelated. 114 00:04:10,910 --> 00:04:14,510 Ale keď som stále priblíženia, tam je zlý človek v oku. 115 00:04:14,510 --> 00:04:16,600 Rovnako ako, že je o informácie, ktoré máme. 116 00:04:16,600 --> 00:04:18,920 Nemôžete vytvoriť Informácie z ničoho. 117 00:04:18,920 --> 00:04:20,790 Je tu len konečný počet bitov tam. 118 00:04:20,790 --> 00:04:22,873 >> Takže Zadanie problému 4, kde máte možnosť 119 00:04:22,873 --> 00:04:24,580 hrať sa s týmto druhom sveta. 120 00:04:24,580 --> 00:04:27,610 V Zadanie problému 4, budete preskúmať svet grafiky a forenznej, 121 00:04:27,610 --> 00:04:30,870 a vlastne písať kód že obnovuje stratená obrázky. 122 00:04:30,870 --> 00:04:33,510 Budete písať kód, ktorý manipuluje existujúcich snímok 123 00:04:33,510 --> 00:04:36,120 a nakoniec pochopiť, čo je to deje pod kapotou. 124 00:04:36,120 --> 00:04:38,540 >> A to dopadá, je to vlastne nie je všetko tak zložité. 125 00:04:38,540 --> 00:04:41,320 Napríklad, ak chceme predstavujú smajlíky kde 126 00:04:41,320 --> 00:04:44,160 s týmito čierne pixely, alebo sú tieto čierne bodky, 127 00:04:44,160 --> 00:04:47,230 dobre, mohli by sme jednoducho predstavovať je ako naozaj bitmapy. 128 00:04:47,230 --> 00:04:50,040 A ak ste mali niekedy počuli, že výraz bitmap, snáď 129 00:04:50,040 --> 00:04:52,330 Teraz začne, aby sa trochu väčší zmysel dnes. 130 00:04:52,330 --> 00:04:53,580 >> Už vieme, čo je to trochu je. 131 00:04:53,580 --> 00:04:54,160 To je 0 alebo 1. 132 00:04:54,160 --> 00:04:56,201 A Mapa je proste niečo, ako kus papiera 133 00:04:56,201 --> 00:04:59,180 ktorá vám dáva pokyny a má možná mriežka X a Y súradníc. 134 00:04:59,180 --> 00:05:00,540 Takže tu je bitmapový. 135 00:05:00,540 --> 00:05:03,680 Je to mapa bitov pričom 1 je zrejme 136 00:05:03,680 --> 00:05:07,857 bude reprezentovať biele pixelu, a 0 bude reprezentovať čiernu pixelu. 137 00:05:07,857 --> 00:05:09,440 Ale my sme mohli určite hodiť okolo. 138 00:05:09,440 --> 00:05:11,648 To nie je naozaj jedno, tak Kým sme dôslední. 139 00:05:11,648 --> 00:05:15,570 A tu je, ako, v binary-- vnútri z pamäte počítača, alebo dokonca aj vnútri 140 00:05:15,570 --> 00:05:18,160 na súbor na pevnom drive-- by ste mohli uložiť 141 00:05:18,160 --> 00:05:20,240 najjednoduchšie smajlíkom obrazov. 142 00:05:20,240 --> 00:05:23,990 Ale to, čo sme, samozrejme, chýba v tomto obrázku? 143 00:05:23,990 --> 00:05:24,610 Color, že jo? 144 00:05:24,610 --> 00:05:28,220 Je to jasné, ďalší krok, alebo Vylepšenia zlepšiť to s farbou. 145 00:05:28,220 --> 00:05:32,230 Takže bohužiaľ sa len jeden bit, 0 alebo 1, môžeme znázornenie farieb. 146 00:05:32,230 --> 00:05:36,100 To by mohlo byť červené, alebo modré čierna, alebo biela, alebo zelená, alebo ružové, 147 00:05:36,100 --> 00:05:37,420 alebo akékoľvek párov farieb. 148 00:05:37,420 --> 00:05:40,860 Ale pre jednoduchosť, budeme len predpokladať, čiernej a bielej. 149 00:05:40,860 --> 00:05:45,930 >> Takže to, čo logicky potrebujeme, keby sme chcú zaviesť farby v obraze? 150 00:05:45,930 --> 00:05:49,080 Čo musíme urobiť? 151 00:05:49,080 --> 00:05:51,900 Rovnako ako v prípade, že limitujúcim faktorom je tu je, že s jedným bitom môžete iba 152 00:05:51,900 --> 00:05:55,977 predstavujú dva štáty, 0 alebo 1, biely alebo čierny, čo chceš robiť? 153 00:05:55,977 --> 00:05:56,810 Divákov: ďalšie dáta. 154 00:05:56,810 --> 00:05:58,813 DAVID J. Malan: Viac bitov, jo viac dát, viac bitov. 155 00:05:58,813 --> 00:06:01,440 A naozaj, to je presne to, ako farebné obrazy sú zastúpené. 156 00:06:01,440 --> 00:06:05,120 Skôr ako používať jeden bit, je 0 alebo 1 pre každý obrazový bod, každá bodka, 157 00:06:05,120 --> 00:06:06,170 stačí použiť násobok. 158 00:06:06,170 --> 00:06:09,660 Možno použitie 8, možno viac obyčajne použitie 24, a naozaj, v Zadanie problému 159 00:06:09,660 --> 00:06:13,300 4, budete hrať so súborom formát, ktorý používa 24 bitov obvykle. 160 00:06:13,300 --> 00:06:15,430 >> Ale väčšina z vás pravdepodobne oboznámení s JPEG. 161 00:06:15,430 --> 00:06:17,460 Ak ste niekedy vziať Fotografie na vašom telefóne, 162 00:06:17,460 --> 00:06:20,360 alebo uložiť alebo niečo vidieť na Facebook, Flickr alebo ľubovoľný počet 163 00:06:20,360 --> 00:06:24,882 webových stránok foto-based, nemáš Pred pravdepodobne videli obrázok JPEG. 164 00:06:24,882 --> 00:06:27,840 A ukázalo sa, je to súbor formát budeme používať v pset 4, 165 00:06:27,840 --> 00:06:30,340 kedy budete musieť obnoviť obrázky 166 00:06:30,340 --> 00:06:35,160 že som omylom zmazané od A poškodené pamäťové karty vo fotoaparáte, 167 00:06:35,160 --> 00:06:35,800 ak chcete. 168 00:06:35,800 --> 00:06:38,490 >> A ukázalo sa, že aj keď JPEG je celkom sophisticated-- 169 00:06:38,490 --> 00:06:40,906 je to oveľa zložitejšie než čiernych a bielych bodiek 170 00:06:40,906 --> 00:06:44,480 sme videli pred chvíľou, pretože tam je skutočne efektné algoritmy, ktoré 171 00:06:44,480 --> 00:06:47,410 sa používa ku kompresii JPEG, takže že môžete mať naozaj pekné, 172 00:06:47,410 --> 00:06:49,832 kvalita obrazu, ale s použitím relatívne málo kúskov. 173 00:06:49,832 --> 00:06:51,790 A vrátime sa do kompresie onedlho. 174 00:06:51,790 --> 00:06:56,280 Ukazuje sa, že prvé tri byty v image-- JPEG 175 00:06:56,280 --> 00:07:02,750 bez ohľadu na to, čo ste si vzal fotografiu of-- sú hodnoty 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Inými slovami, ak ste práve vidieť, že vzorka bitov, 177 00:07:05,990 --> 00:07:09,180 tu zastúpené ako tri bajtov alebo 24 bitov celkom, 178 00:07:09,180 --> 00:07:13,810 s vysokou pravdepodobnosťou možno usudzovať, že hľadáte sa na to prvé tri 179 00:07:13,810 --> 00:07:15,230 bajtov JPEG. 180 00:07:15,230 --> 00:07:18,040 A to je to, čo je známe ako podpis vo formáte JPEG. 181 00:07:18,040 --> 00:07:20,540 Mnoho formátov súborov tam zvyčajne začínajú 182 00:07:20,540 --> 00:07:23,735 s niektorými vzormi 0s a 1s, tak, že systém Windows a Mac OS a iOS, 183 00:07:23,735 --> 00:07:28,272 a Android vedieť, aký druh súboru, ktorý sú, okrem tzv súboru 184 00:07:28,272 --> 00:07:29,730 rozšírenie, ktoré veľké množstvo súborov má. 185 00:07:29,730 --> 00:07:32,590 Ak ste .jpg, to je ďalšie vodítko k počítaču. 186 00:07:32,590 --> 00:07:35,310 >> Takže poďme sa teraz pozrieť na to trochu viac technicky. 187 00:07:35,310 --> 00:07:37,390 Poznáme desatinné systém je 0 až 9. 188 00:07:37,390 --> 00:07:38,740 Vieme, že binárne je 0 a 1. 189 00:07:38,740 --> 00:07:41,842 A ak si myslíte, späť do pset 0, mali sme vás zápasiť s, 190 00:07:41,842 --> 00:07:43,800 pre trochu, niečo volal hexadecimálne, 191 00:07:43,800 --> 00:07:47,320 kde budete mať 16 číslic, miesto 10, alebo miesto 2. 192 00:07:47,320 --> 00:07:50,405 A tie číslice, podľa konvencie, sú od 0 do 9 a potom 193 00:07:50,405 --> 00:07:55,040 až f, kde f predstavuje to, čo desatinné číslo, rovnako ako rýchly zdravý rozum 194 00:07:55,040 --> 00:07:56,640 skontrolovať? 195 00:07:56,640 --> 00:07:57,610 Tak, 15. 196 00:07:57,610 --> 00:08:01,390 A musí predstavovať 10, len tým, povahe usporiadanie, ktoré som dané. 197 00:08:01,390 --> 00:08:04,350 Je to len svojvoľnými, ale je to celkom bežná. 198 00:08:04,350 --> 00:08:06,870 >> Takže ak sa pozrieme na tohto vzoru z troch bytes-- poďme 199 00:08:06,870 --> 00:08:09,620 len začať sa na to pozrieť v súlade s tým, ako 200 00:08:09,620 --> 00:08:12,450 počítačoví odborníci všeobecne pozrieť sa na a premýšľať o súboroch. 201 00:08:12,450 --> 00:08:15,580 Určite môžete premýšľať o tom, súbory v 0s a 1s, a desatinná, 202 00:08:15,580 --> 00:08:19,340 ale v skutočnosti, máme tendenciu používať binárne alebo viac typicky hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 späť z pset 0. 204 00:08:20,760 --> 00:08:25,857 Dovoľte mi teda navrhnúť, aby 255, 216 a 255 sú práve tieto vzory 0s a 1s. 205 00:08:25,857 --> 00:08:28,440 A môžete to skontrolovať, či ste Chcete si to spočítajte od týždňa 0. 206 00:08:28,440 --> 00:08:30,810 Ale teraz, len predpokladať, že toto je naozaj správne. 207 00:08:30,810 --> 00:08:33,850 Práve som prepísať tri desatinné Čísla ako tri binárne hodnoty. 208 00:08:33,850 --> 00:08:36,100 A teraz, čo budem robiť, je stačí pridať nejaký biely priestor, 209 00:08:36,100 --> 00:08:37,266 len pre Čitateľnosť príčinu. 210 00:08:37,266 --> 00:08:39,940 A upozornenie, ja som jednoducho ísť presunúť veci od seba. 211 00:08:39,940 --> 00:08:43,090 Tak pred, po, pred, po. 212 00:08:43,090 --> 00:08:46,180 Robím nič zaujímavého ostatné než len šíri veci tak, 213 00:08:46,180 --> 00:08:50,380 že oznámenie každá sada ôsmich bitov je teraz dve sady štyroch bitov. 214 00:08:50,380 --> 00:08:54,920 To je užitočné, pretože hexadecimálne je obzvlášť v móde 215 00:08:54,920 --> 00:09:00,930 pretože každý hexadecimálne znak 0 až f, alebo konkrétnejšie 0 až 15, 216 00:09:00,930 --> 00:09:03,430 môžu byť reprezentované s presne štyri bity. 217 00:09:03,430 --> 00:09:07,960 Inými slovami, ak ste v hexadecimálne chcú reprezentovať 0, je to len 0000, 218 00:09:07,960 --> 00:09:08,780 štyri nuly. 219 00:09:08,780 --> 00:09:13,997 A ak chcete reprezentovať 15, to je 1111, čo je štyri bity. 220 00:09:13,997 --> 00:09:16,080 A ak si to spočítajte, ak sa jedná o tie, miesto, 221 00:09:16,080 --> 00:09:18,210 To je miesto, 16S, že sa chystá dať vás-- 222 00:09:18,210 --> 00:09:19,960 skôr, čo sa deje to-- ľúto, v binárne, 223 00:09:19,960 --> 00:09:23,660 , Čo sa deje, aby vám 15, tie miesta, Dvojky miesto, štyri a osmičky miesto. 224 00:09:23,660 --> 00:09:26,821 Dovoľte mi teda, že navrhne, aby Sada štyroch bitov, na ľavej strane 225 00:09:26,821 --> 00:09:28,070 je to, čo budeme hovoriť f. 226 00:09:28,070 --> 00:09:30,110 Je to najväčšie číslo môže predstavovať štyri bity. 227 00:09:30,110 --> 00:09:33,300 A my už vieme z šestnástkovej, f je najväčší číslice v šestnástkovej sústave. 228 00:09:33,300 --> 00:09:36,020 Máme ďalšie f tam, ďalšie dva tamto. 229 00:09:36,020 --> 00:09:38,980 A teraz, len sa na vieru že som urobil matematický právo 230 00:09:38,980 --> 00:09:41,890 a že ľavá polovica z týchto bitov, 1101, 231 00:09:41,890 --> 00:09:43,980 je to isté ako D v hexadecimálne sústave. 232 00:09:43,980 --> 00:09:46,490 A pravá ruka, 1000, sa nachádza iba 8. 233 00:09:46,490 --> 00:09:48,140 >> A ten človek je ľahké vidieť, že jo? 234 00:09:48,140 --> 00:09:51,670 8 represents-- má pravdu pod týmto ôsmy mieste. 235 00:09:51,670 --> 00:09:56,040 Takže máme jeden v stĺpci ôsmy a nič v štyroch, dvojky alebo ty. 236 00:09:56,040 --> 00:09:59,830 Takže teraz viac konvenčne, ľudia majú tendenciu zapisovať hexadecimálne číslice, ako je táto, 237 00:09:59,830 --> 00:10:03,000 stačí prebiť dohromady, a potom je prefix 0x. 238 00:10:03,000 --> 00:10:05,920 To znamená, že nič iné ako vizuálne vodítko k human-- 239 00:10:05,920 --> 00:10:10,350 prichádza hexadecimálne value--, pretože to by mohlo inak byť zrejmé. 240 00:10:10,350 --> 00:10:13,629 >> Čo znamená, že v konečnom dôsledku, že vzor núl a jednotiek, 241 00:10:13,629 --> 00:10:16,170 alebo vzor hexadecimálne Číslice ekvivalentne, že ste 242 00:10:16,170 --> 00:10:18,990 začnú hľadať v Zadanie problému 4 tohle-- 243 00:10:18,990 --> 00:10:22,120 a problém Set 4 spec bude chodiť ste cez to vo viacerých detail-- 244 00:10:22,120 --> 00:10:25,344 ale uvedomiť si, ako druh Arcane as to môže vyzerať na prvý pohľad, 245 00:10:25,344 --> 00:10:27,010 sa chystáte začať vidieť to veľa. 246 00:10:27,010 --> 00:10:30,320 A v skutočnosti, dokonca aj v GDB sa debugger sme predstavili v pondelok 247 00:10:30,320 --> 00:10:35,440 a Dan predstaví v pset 3, sa deje často ukáže hexadecimálne hodnoty 248 00:10:35,440 --> 00:10:39,910 len preto, že majú tendenciu byť viac konvenčné než desiatkovej alebo binárne 249 00:10:39,910 --> 00:10:41,157 vo svete počítačov. 250 00:10:41,157 --> 00:10:42,490 A teraz poďme dať to do kontextu. 251 00:10:42,490 --> 00:10:48,040 Mnohí z vás by mohol pamätať Fotografie: tu, ktorý prišiel z čoho? 252 00:10:48,040 --> 00:10:51,240 Vista, takže ešte skôr, než to, že systém Windows XP to urobil debut. 253 00:10:51,240 --> 00:10:52,620 Takže toto je krásna krajina. 254 00:10:52,620 --> 00:10:55,940 A v skutočnosti, ak sa v kurze porozhliadnuť online-- Myslím, že je to článok Wikipédie, 255 00:10:55,940 --> 00:11:00,110 kde niekto veľmi prekvapivo vyšiel našiel miesto na svete, nastaviť 256 00:11:00,110 --> 00:11:02,240 jeho alebo jej kamera vo presne pravý place-- 257 00:11:02,240 --> 00:11:06,510 a to dnes vyzerá, ale jako-- je to presne rovnaké nastavenie. 258 00:11:06,510 --> 00:11:10,060 Tento obraz, aj keď je v súbore formát nazvaný bitmap, b-m-p. 259 00:11:10,060 --> 00:11:12,910 A budeme brať super Rýchly pohľad na to, čo to znamená. 260 00:11:12,910 --> 00:11:17,770 >> Ale bitmapa je len iný spôsob, ako predstavujúce obrazy stále používate pixelov 261 00:11:17,770 --> 00:11:19,580 na 0s a 1s, nakoniec. 262 00:11:19,580 --> 00:11:23,282 Ale v letmom pohľade, to má zaujímavejšie podpis 263 00:11:23,282 --> 00:11:24,490 Na začiatku súboru. 264 00:11:24,490 --> 00:11:26,670 Nie je to len tri bajtov, skôr je tu 265 00:11:26,670 --> 00:11:30,770 celá partia vzorcov bytov že mať vopred stanovené význam. 266 00:11:30,770 --> 00:11:34,490 Napríklad, niekde v Prvých pár bajtov bitmapový obraz 267 00:11:34,490 --> 00:11:37,440 bude veľkosť z obrazu, šírka obrázka, 268 00:11:37,440 --> 00:11:40,390 výška obrazu, takže užitočné metadáta, ak chcete. 269 00:11:40,390 --> 00:11:43,940 Užitočné informácie, ktoré Photoshop alebo akékoľvek grafický program, ktorý používate 270 00:11:43,940 --> 00:11:45,180 by v skutočnosti mohli záleží. 271 00:11:45,180 --> 00:11:47,170 >> Takže o tom viac v Zadanie problému 4, ale to 272 00:11:47,170 --> 00:11:49,220 je len povedať, že na konci dňa 273 00:11:49,220 --> 00:11:52,390 všetky formáty súbor, ktorý ste používali pre years-- súbory Microsoft Word, 274 00:11:52,390 --> 00:11:55,820 Čísla súbory, súbory Excel, Ľubovoľný počet formátov súborov 275 00:11:55,820 --> 00:11:57,770 ktoré by mohli mať niektoré známa prípona súboru 276 00:11:57,770 --> 00:12:00,130 sú len 0 a 1 pod pokrievku. 277 00:12:00,130 --> 00:12:02,970 A ľudia sa rozhodli, čo konvencie sú, 278 00:12:02,970 --> 00:12:08,340 aké vzory 0s a 1s predstavujú Word súbor oproti súboru Excel, 279 00:12:08,340 --> 00:12:10,322 proti ľubovoľným počtom iných formátov súborov. 280 00:12:10,322 --> 00:12:12,780 Takže pset 4, budete mať možnosť hrať s tým. 281 00:12:12,780 --> 00:12:14,405 >> Ale čo to znamená, že majú struct. 282 00:12:14,405 --> 00:12:18,012 To je vlastne pekný segue teraz do C, ktorý má len pár 283 00:12:18,012 --> 00:12:20,220 o ďalšie funkcie, ktoré sme sa pozrel na doteraz. 284 00:12:20,220 --> 00:12:24,230 Je to celkom malý jazyk a jeden z pekných vlastností o C, je struct. 285 00:12:24,230 --> 00:12:27,300 Napríklad, ak ste chcel represent-- poďme 286 00:12:27,300 --> 00:12:33,690 že ste chceli mať premenné predstavuje študent v nejakom programe. 287 00:12:33,690 --> 00:12:37,330 Možno ste písali kurz registrácia programu, alebo jadro nákupy 288 00:12:37,330 --> 00:12:38,870 nástroj, alebo niečo také. 289 00:12:38,870 --> 00:12:42,922 Aké sú kusy dát súvisiacich študentovi, ktoré prichádzajú na myseľ? 290 00:12:42,922 --> 00:12:44,880 Rovnako ako študent reprezentovaný sa, aké hodnoty? 291 00:12:44,880 --> 00:12:45,732 Jo? 292 00:12:45,732 --> 00:12:46,940 Máte meno ako študent. 293 00:12:46,940 --> 00:12:48,900 Čo ešte typický študentka mať? 294 00:12:48,900 --> 00:12:49,320 >> Divákov: [Nepočuteľné] 295 00:12:49,320 --> 00:12:50,200 >> DAVID J. Malan: Takže, je mi ľúto. 296 00:12:50,200 --> 00:12:50,660 >> Divákov: Age. 297 00:12:50,660 --> 00:12:52,980 >> DAVID J. Malan: veku, alebo narodeniny ekvivalentne, jo. 298 00:12:52,980 --> 00:12:53,557 Čo ešte? 299 00:12:53,557 --> 00:12:54,390 Divákov: ID číslo? 300 00:12:54,390 --> 00:12:57,460 DAVID J. Malan: Takže ID číslo, možno telefónne číslo, možno koľaji alebo dom, 301 00:12:57,460 --> 00:12:58,670 alebo vysoká škola, alebo niečo také. 302 00:12:58,670 --> 00:13:01,820 Akýkoľvek počet kusov dát, ktoré môžete mať v zozname kontaktov 303 00:13:01,820 --> 00:13:03,890 je to, čo by mohlo definovať študenta. 304 00:13:03,890 --> 00:13:08,490 Takže ak sme chceli, aby to, v kóde, by sme mohli urobiť niečo jednoduchého, ako to. 305 00:13:08,490 --> 00:13:15,670 My by sme mohli mať tak, aby program má povedzme, int main (void). 306 00:13:15,670 --> 00:13:18,920 A keď chcem predstavovať študentka by som mohol mať, napríklad, 307 00:13:18,920 --> 00:13:24,330 reťazec s názvom názov pre tento študent, reťazec s názvom koľaji pre túto študenta, 308 00:13:24,330 --> 00:13:26,900 Možno int nazýva ID pre tento študenta. 309 00:13:26,900 --> 00:13:30,840 A pretože som pomocou reťazca, ja je potrebné sa vrátiť a postaviť CS50.h. 310 00:13:30,840 --> 00:13:33,300 Možno budem potrebovať stdio.h. 311 00:13:33,300 --> 00:13:38,190 Dovoľte mi teda preventívne urobiť ty a ja bude volať tento student.c teraz 312 00:13:38,190 --> 00:13:40,080 a uložiť to. 313 00:13:40,080 --> 00:13:44,206 >> A teraz môžem niečo urobiť s týmito premennými. 314 00:13:44,206 --> 00:13:46,830 A my sme len tak písať že ako komentár v pseudo kódu, 315 00:13:46,830 --> 00:13:48,829 pretože to nie je zaujímavé, to, čo robíme teraz. 316 00:13:48,829 --> 00:13:51,242 OK, takže to je program, ktorý nejako ukladá študenta. 317 00:13:51,242 --> 00:13:53,450 Čo chcem robiť, keď som chcete uložiť dvoch študentov? 318 00:13:53,450 --> 00:13:55,991 Takže môj prvý inštinkt sa deje v poriadku, počkajte chvíľu, 319 00:13:55,991 --> 00:14:01,920 keď mám ďalšieho študenta, prečo nie ja proste Názov reťazca 2, string koľaj 2, 320 00:14:01,920 --> 00:14:04,190 int ID2. 321 00:14:04,190 --> 00:14:06,540 A urobili sme preč touto cestou pred 322 00:14:06,540 --> 00:14:10,890 a to, čo bolo naše riešenie, čo sa zdá byť druh hackish Kopírovať Vložiť 323 00:14:10,890 --> 00:14:11,555 práca tu? 324 00:14:11,555 --> 00:14:12,346 Divákov: Pole. 325 00:14:12,346 --> 00:14:13,830 DAVID J. Malan: Jo, by sme mohli použiť pole. 326 00:14:13,830 --> 00:14:15,620 Hneď to veľmi rýchlo sa stáva nepraktické. 327 00:14:15,620 --> 00:14:18,453 Musíte sa zoradiť ľubovoľne začiatok vymenovať všetky tieto premenné. 328 00:14:18,453 --> 00:14:22,190 A vy, človek, mať na dráha, ktorá OK meno2 zodpovedá 329 00:14:22,190 --> 00:14:25,060 s dorm2 zodpovedá ID2. 330 00:14:25,060 --> 00:14:26,200 Proste sa stane neporiadok. 331 00:14:26,200 --> 00:14:29,350 Takže je to oveľa jednoduchšie, vyvolať z pred niekoľkými týždňami, 332 00:14:29,350 --> 00:14:34,300 len museli nadávali reťazcových a možno nám tri z nich. 333 00:14:34,300 --> 00:14:36,940 A potom možno máme reťazec dorms a majú 334 00:14:36,940 --> 00:14:41,900 Tri z týchto, alebo s konštantnou, int ID a majú tri z nich. 335 00:14:41,900 --> 00:14:45,250 Ale aj teraz to cítia trochu nedbalý, že jo. 336 00:14:45,250 --> 00:14:49,440 Hovoríme o študentov a ešte Som naozaj býva na nízkej úrovni 337 00:14:49,440 --> 00:14:50,470 detaily implementácie. 338 00:14:50,470 --> 00:14:52,790 Študent je názov a koľaji a ID. 339 00:14:52,790 --> 00:14:59,814 >> Prečo nemôžem len deklarovať premennú volal študent a hovoria to. 340 00:14:59,814 --> 00:15:02,230 A keď chcem ďalšieho študenta, prečo nie ja len hovorím t. 341 00:15:02,230 --> 00:15:05,260 Alebo keď chcem veľa študentov, prečo nie ja len 342 00:15:05,260 --> 00:15:09,740 povedať, že som celú triedu študentov, a to tri z nich. 343 00:15:09,740 --> 00:15:12,470 Inými slovami, prečo nemôžem prísť up s mojou vlastnou dátový typ, nazvaný 344 00:15:12,470 --> 00:15:15,641 Študenti, vnútri ktorej je názov, je ID, je koľaji, 345 00:15:15,641 --> 00:15:16,890 je akékoľvek číslo z iných odborov. 346 00:15:16,890 --> 00:15:19,030 A ukázalo sa, že môže robiť presne to. 347 00:15:19,030 --> 00:15:21,850 >> Takže C má túto funkciu nazvanú struct. 348 00:15:21,850 --> 00:15:24,700 To je funkcia, jazyk, ktorý nám umožňuje robiť presne to. 349 00:15:24,700 --> 00:15:28,370 Chystám sa pokračovať a otvoriť structs.h 350 00:15:28,370 --> 00:15:32,299 kde budeme vidieť Nasledujúce definície študenta. 351 00:15:32,299 --> 00:15:35,215 Ukazuje sa, že - a toto je ešte jednoduchšie než jeden zahŕňajúce ID 352 00:15:35,215 --> 00:15:36,080 pred chvíľou. 353 00:15:36,080 --> 00:15:39,120 Ak chcete prísť s vaše domáce typ dát, 354 00:15:39,120 --> 00:15:42,750 a navyše na int a char a float a všetky tieto ďalšie, ktoré existujú, 355 00:15:42,750 --> 00:15:45,810 môžete tak urobiť doslova písanie typedef struct, 356 00:15:45,810 --> 00:15:47,880 potom niektoré zložené zátvorky, vnútri ktoré ste 357 00:15:47,880 --> 00:15:51,460 zoznam premenných, ktoré chcete stýkať sa s touto novou vlastné dáta 358 00:15:51,460 --> 00:15:55,670 zadajte ako meno a koľaji, a potom po zložených zátvorkách 359 00:15:55,670 --> 00:15:57,860 dávate mena do nového dátového typu. 360 00:15:57,860 --> 00:15:59,220 Tak napríklad, študentka. 361 00:15:59,220 --> 00:16:03,247 >> A čo je pekné o tom teraz je, že Ak sa pozrieme na príslušný kód, 362 00:16:03,247 --> 00:16:05,080 konvencie, ako prvý zo všetkých, je, aby to 363 00:16:05,080 --> 00:16:08,230 v súbore s názvom niečo dot h, súbor hlavičky, ktoré my nie 364 00:16:08,230 --> 00:16:09,780 začali používať sami seba príliš veľa. 365 00:16:09,780 --> 00:16:12,120 Ale my sa chystáte začať použitím celkom dosť teraz. 366 00:16:12,120 --> 00:16:18,650 A čo môžeme robiť s tým, nakoniec, v týchto niekoľkých riadkov kódu 367 00:16:18,650 --> 00:16:22,130 je vyhlásiť, že presne typ dát, študent. 368 00:16:22,130 --> 00:16:23,230 A teraz poďme používať. 369 00:16:23,230 --> 00:16:27,274 >> Chystám sa teraz ísť do súbor s názvom structs1.c. 370 00:16:27,274 --> 00:16:29,440 A poďme sa pozrieť na Niekoľko charakteristiky tu. 371 00:16:29,440 --> 00:16:32,250 Takže veci, tu hore je väčšinou poznajú, a my 372 00:16:32,250 --> 00:16:35,040 vrátiť sa k tomu, čo nie je oboznámení za chvíľu. 373 00:16:35,040 --> 00:16:39,880 To samozrejme je, vrátane mojej vlastnej hlavičkový súbor, ktorý je nové, rovnako, 374 00:16:39,880 --> 00:16:42,580 s výnimkou pset 3, ak Pripomeňme, máme helpers.h. 375 00:16:42,580 --> 00:16:45,150 Takže si možno pamätáte #include helpers.h. 376 00:16:45,150 --> 00:16:49,381 >> Prečo aj keď mám používať citácie miesto uhlových konzol? 377 00:16:49,381 --> 00:16:50,630 Keď si mám vybrať medzi nimi? 378 00:16:50,630 --> 00:16:52,310 Takmer vždy som sa zdajú používať špicaté zátvorky. 379 00:16:52,310 --> 00:16:55,040 A potom, zrazu na linka šiestich Som pomocou dvojitej úvodzovky. 380 00:16:55,040 --> 00:16:55,860 Prečo by to mohlo byť? 381 00:16:55,860 --> 00:16:56,700 Jo? 382 00:16:56,700 --> 00:16:57,725 >> Divákov: [Nepočuteľné] 383 00:16:57,725 --> 00:16:59,350 DAVID J. Malan: To je skutočný, čo? 384 00:16:59,350 --> 00:17:00,559 Divákov: To je v IDE. 385 00:17:00,559 --> 00:17:02,475 DAVID J. Malan: Jo, že je v mojom skutočnom IDE. 386 00:17:02,475 --> 00:17:05,690 A nesmieme býva na IDE, pretože to je len nástroj, ktorý som pomocou. 387 00:17:05,690 --> 00:17:08,119 To je v mojom prúde adresár, konkrétne. 388 00:17:08,119 --> 00:17:11,647 Takže structs.h je môj vlastný súbor nie je nainštalovaný v IDE, 389 00:17:11,647 --> 00:17:14,480 v operačnom systéme samotnom, skôr to v mojej aktuálnom adresári. 390 00:17:14,480 --> 00:17:16,910 Takže dohovor je, ak chcete, uviesť svoje vlastné záhlavie súboru, 391 00:17:16,910 --> 00:17:18,200 stačí použiť dvojité úvodzovky. 392 00:17:18,200 --> 00:17:23,290 >> Čo nazývame túto vec linka 8, všeobecne povedané? 393 00:17:23,290 --> 00:17:25,200 To je to, čo? 394 00:17:25,200 --> 00:17:28,220 #define niečo. 395 00:17:28,220 --> 00:17:31,040 To predstavuje konštanty, že jo? 396 00:17:31,040 --> 00:17:33,140 Ak chcete mať Hodnota vo vašom programe 397 00:17:33,140 --> 00:17:35,110 že používate celé banda z časov, to je 398 00:17:35,110 --> 00:17:39,330 dobrý konvencie faktor na to, deklarovať to, symbolom hash 399 00:17:39,330 --> 00:17:43,340 definovať, potom sa podľa konvencie, vo všetkých veľké písmená word-- keď to nie je 400 00:17:43,340 --> 00:17:45,320 nevyhnutne nutné, ale Je to ľudská konvencie 401 00:17:45,320 --> 00:17:47,210 zarobiť konštanty tak, aby sa vyskočiť 402 00:17:47,210 --> 00:17:50,380 na vás visually-- priestor a potom hodnota chcete byť 403 00:17:50,380 --> 00:17:52,250 čo zodpovedá menu táto konštanta je. 404 00:17:52,250 --> 00:17:56,110 Nie bodkočiarka, ale jednoducho vyplývalo, že vzor tam. 405 00:17:56,110 --> 00:17:57,770 >> Takže to, čo som robil v tomto skutočnom kóde. 406 00:17:57,770 --> 00:18:00,660 Takže poďme sa pozrieť na hlavný program tu. 407 00:18:00,660 --> 00:18:04,080 V súlade 12, pretože som zahŕňali structs.h, 408 00:18:04,080 --> 00:18:06,492 Teraz mám ako mávnutím čarovného prútika v mojej Likvidácia nový dátový typ. 409 00:18:06,492 --> 00:18:09,200 Nemám jednoducho mať prístup k int, a char, a float a string, 410 00:18:09,200 --> 00:18:10,060 a modrej a ďalšie. 411 00:18:10,060 --> 00:18:12,470 Aj teraz majú prístup k typ študenta dát. 412 00:18:12,470 --> 00:18:17,740 Takže v rade 12, som kombináciou dvoch ideas-- jeden vlastný dátový typ a dva, 413 00:18:17,740 --> 00:18:18,940 pomocou poľa. 414 00:18:18,940 --> 00:18:21,700 A tak v tomto programe, ak Chcem skutočne podporiť 415 00:18:21,700 --> 00:18:24,320 tri rôzne študenti v mojom programe, ja 416 00:18:24,320 --> 00:18:30,480 možno jednoducho povedať, daj mi premennú tzv študentov, z ktorých každá 417 00:18:30,480 --> 00:18:32,970 je študentov typu, ktoré je môj vlastný dátový typ. 418 00:18:32,970 --> 00:18:35,890 A konkrétne, daj mi tri z tých, v mojom poli. 419 00:18:35,890 --> 00:18:37,750 >> Tak čo teraz budeme robiť v tomto programe? 420 00:18:37,750 --> 00:18:40,670 Tu je len pre slučky iterácie od 0 do 3, pretože to je 421 00:18:40,670 --> 00:18:42,110 čo je hodnota študentov. 422 00:18:42,110 --> 00:18:44,420 Len som vyzvanie užívateľa daj mi meno študenta. 423 00:18:44,420 --> 00:18:48,090 A potom v riadku 17, sme majú väčšinou známu linku. 424 00:18:48,090 --> 00:18:50,370 Máme starého priateľa GetString na pravej strane. 425 00:18:50,370 --> 00:18:52,345 A čo kus syntaxe je zrejme nový, 426 00:18:52,345 --> 00:18:55,130 ak ste nikdy naprogramovaný v C predtým, a nikdy nepoužilo structs? 427 00:18:55,130 --> 00:18:55,510 Jo? 428 00:18:55,510 --> 00:18:56,417 >> Divákov: .name. 429 00:18:56,417 --> 00:18:57,500 DAVID J. Malan: The .name. 430 00:18:57,500 --> 00:19:01,220 Ale to nie je príliš veľký skok, pretože teraz študenti aj bracketing 431 00:19:01,220 --> 00:19:02,590 dáva vám i-teho študenta. 432 00:19:02,590 --> 00:19:04,730 A ak chcete potápať vnútri tejto štruktúry, 433 00:19:04,730 --> 00:19:09,490 stačí použiť jedno obdobie a potom názov premennej vo vnútri, 434 00:19:09,490 --> 00:19:11,900 alebo vlastnosť, že vo vnútri Ak chcete získať prístup k. 435 00:19:11,900 --> 00:19:14,816 Podobne potom, keď som potom prinúti Užívateľ, daj mi študenta koľaji, 436 00:19:14,816 --> 00:19:18,390 Podobne môžete uložiť, že reťazec v premennej koľaji vnútri 437 00:19:18,390 --> 00:19:19,940 tohto študenta štruktúry. 438 00:19:19,940 --> 00:19:21,410 >> A teraz sa veci trochu fantázie. 439 00:19:21,410 --> 00:19:24,420 A to bude vyzerať na možná veľa celkom skoro. 440 00:19:24,420 --> 00:19:27,970 Ale budete vidieť ďaleko viac v pset 4, tak nech to jednoducho pohľad na to teraz. 441 00:19:27,970 --> 00:19:33,364 Ukazuje sa, že v potrubí 23 prostredníctvom 38, čo si myslíte, že som snáď robíš? 442 00:19:33,364 --> 00:19:35,530 Odstránil som pripomienky dnes, ale verzia 443 00:19:35,530 --> 00:19:38,660 kódu online referencie má všetky komentáre. 444 00:19:38,660 --> 00:19:40,171 Čo mi zdá, že robiť? 445 00:19:40,171 --> 00:19:42,530 >> Divákov: uloženie súboru so všetkými informácie, ktoré užívateľ zadal. 446 00:19:42,530 --> 00:19:44,530 >> DAVID J. Malan: Jo, presne, to je nový spôsob 447 00:19:44,530 --> 00:19:46,370 že vidíme dve, Ďalším znakom C, 448 00:19:46,370 --> 00:19:48,700 čím som si vytvárať svoje vlastné súbory. 449 00:19:48,700 --> 00:19:51,580 Doteraz, takmer každý program, čo ste napísali, je bez štátnej príslušnosti. 450 00:19:51,580 --> 00:19:53,334 Akonáhle je to hotovo beh, to je všetko. 451 00:19:53,334 --> 00:19:55,000 Nie je pamäte alebo spomienka na neho. 452 00:19:55,000 --> 00:19:56,110 Neexistuje žiadny súbor uložený. 453 00:19:56,110 --> 00:19:58,120 Ale ak si chcete uložiť vstup, ktorý má 454 00:19:58,120 --> 00:20:02,100 sa stalo, rovnako ako v hre alebo programu takto to dopadá, môžeme tak urobiť. 455 00:20:02,100 --> 00:20:04,360 A budete vidieť viac v pset 4 av §. 456 00:20:04,360 --> 00:20:08,661 Ale táto linka 23 v podstate vytvorí súbor s názvom students.csv. 457 00:20:08,661 --> 00:20:10,160 A možno ste predtým videl. 458 00:20:10,160 --> 00:20:14,250 Dokonca aj keď ste nikdy študoval SK predtým, CSV je oddelené čiarkou premennej. 459 00:20:14,250 --> 00:20:19,000 Je to ako veľmi zlý muža verzia súboru programu Excel, 460 00:20:19,000 --> 00:20:22,270 čo znamená, že by mohol byť otvorený v Exceli a v číslach Apple, 461 00:20:22,270 --> 00:20:23,830 a má riadkov a stĺpcov. 462 00:20:23,830 --> 00:20:26,485 Ale nie je to proprietárnu formát ako Microsoft alebo Apple. 463 00:20:26,485 --> 00:20:29,840 Je to len čiarky oddeľujúcej hodnoty, ktoré uvidíme za chvíľu. 464 00:20:29,840 --> 00:20:31,010 >> A stačí sa hádať. 465 00:20:31,010 --> 00:20:33,480 V súlade 23, na samom koniec, môj druhý argument, 466 00:20:33,480 --> 00:20:37,700 na túto novú funkciu nazvanú f otvorená pre otvorenom súboru je w. 467 00:20:37,700 --> 00:20:39,430 Čo by mohlo naznačovať w? 468 00:20:39,430 --> 00:20:40,022 Jo? 469 00:20:40,022 --> 00:20:41,260 >> Divákov: To vám umožní zapísať do súboru? 470 00:20:41,260 --> 00:20:42,630 >> DAVID J. Malan: To vám umožní napíšete do súboru. 471 00:20:42,630 --> 00:20:44,810 Takže je tu niekoľko variantov že sa môžeme pripojiť tu. 472 00:20:44,810 --> 00:20:47,184 Ale ak si len chcete prečítať Súbor, ktorý sa na to pozrieť 473 00:20:47,184 --> 00:20:50,010 a prečítajte si ju do pamäti, vám stačí použiť citácie unquote "r". 474 00:20:50,010 --> 00:20:53,110 Ak chcete písať na súbor, môžete použiť ponuku koniec citátu "w". 475 00:20:53,110 --> 00:20:55,190 K dispozícii je tiež pripojiť a niekoľko ďalších vecí 476 00:20:55,190 --> 00:20:57,356 Ak chcete upraviť existujúce súbory. 477 00:20:57,356 --> 00:21:00,480 Teraz budeme držať vidieť toto vec, potom sa vrátime na linku 24. 478 00:21:00,480 --> 00:21:02,640 NULL, to dopadá, je špeciálna hodnota, ktorá 479 00:21:02,640 --> 00:21:06,070 môže byť vrátený určitých funkcií ak niečo wrong-- 480 00:21:06,070 --> 00:21:08,490 v prípade, že súbor neexistuje, ak ste spustiť z pamäte, 481 00:21:08,490 --> 00:21:09,620 alebo veľa ďalších chýb. 482 00:21:09,620 --> 00:21:13,470 Ale teraz, poďme len predpokladať, že tento je kontrola len konvenčné chybe. 483 00:21:13,470 --> 00:21:17,090 Tu v rade 26, som iterácie od 0 do 3 nad všetkými mojich študentov. 484 00:21:17,090 --> 00:21:20,470 A to je druh druh nové funkcie, fprintf, 485 00:21:20,470 --> 00:21:21,460 ale stačí sa hádať. 486 00:21:21,460 --> 00:21:24,370 Ak printf je len pre tlač formátovaný reťazec, 487 00:21:24,370 --> 00:21:26,507 Čo fprintf pravdepodobne znamená? 488 00:21:26,507 --> 00:21:27,590 Divákov: Tlač do súboru. 489 00:21:27,590 --> 00:21:29,290 DAVID J. Malan: Vytlačte formátovaný reťazec do súboru. 490 00:21:29,290 --> 00:21:31,180 To je to, čo to ďalší f prostriedkom je súbor. 491 00:21:31,180 --> 00:21:36,420 A nový prvý argument musí byť premenná, ktorá predstavuje súbor. 492 00:21:36,420 --> 00:21:38,866 Potom sme jednoducho formát string rovnako ako printf. 493 00:21:38,866 --> 00:21:40,740 A aj keď to syntax je nové, to len 494 00:21:40,740 --> 00:21:44,610 znamená pripojiť meno študenta, plug-in študentské koľaji, a potom 495 00:21:44,610 --> 00:21:47,160 s fclose, zatvorte súbor. 496 00:21:47,160 --> 00:21:49,730 A potom je to nový lastly-- a vrátime sa k tomu 497 00:21:49,730 --> 00:21:53,240 Pred long-- Som uvoľnenie študent z dôvodov, 498 00:21:53,240 --> 00:21:54,860 že sa stalo tam hore. 499 00:21:54,860 --> 00:21:56,820 Ale my sa vrátime sa, že pred long-- 500 00:21:56,820 --> 00:21:59,820 že je to kvôli tomu, ako je GetString skutočne pracuje pod kapotou. 501 00:21:59,820 --> 00:22:01,280 >> Takže poďme sa rýchlo pozrieť tu. 502 00:22:01,280 --> 00:22:04,380 Keby som zadajte ls vo svojom adresári, Všimnite si, že nemám 503 00:22:04,380 --> 00:22:09,360 mať súbor s názvom students.csv, len nie tam, neexistuje. 504 00:22:09,360 --> 00:22:14,965 Takže keď som sa skompilovať tento program, aby structs-1. / Structs-1, 505 00:22:14,965 --> 00:22:20,570 a budem pokračovať a napíšte Andi, ktorý žije v Berkeley v Yale. 506 00:22:20,570 --> 00:22:26,350 Budeme mať Rob, kto žije v Thayer v týchto dňoch. 507 00:22:26,350 --> 00:22:33,760 A poďme prísť s tým, kde je, myslím, Mária je v Mather, 508 00:22:33,760 --> 00:22:35,100 ak som si pamätal. 509 00:22:35,100 --> 00:22:36,460 >> Takže sa zdanlivo nič nedeje. 510 00:22:36,460 --> 00:22:40,680 Ale keď som typ ls teraz, je students.csv. 511 00:22:40,680 --> 00:22:43,080 Poďme ďalej a otvorená students.csv. 512 00:22:43,080 --> 00:22:46,050 Jedná sa opäť o veľmi ľahký formát súboru. 513 00:22:46,050 --> 00:22:49,570 Ale ja som proste prijala konvencii že mám dve riadky a stĺpce tu. 514 00:22:49,570 --> 00:22:52,020 V prvom stĺpci je krstné mená ľudí. 515 00:22:52,020 --> 00:22:55,740 Druhý stĺpec je študenta koľaji, alebo vysoká škola, alebo dom, alebo ktovie čo ešte. 516 00:22:55,740 --> 00:22:57,900 A teraz som zachránil to trvalo v súbore. 517 00:22:57,900 --> 00:22:59,280 >> Takže to nie je všetko tak zaujímavé. 518 00:22:59,280 --> 00:23:02,980 Ale to je len odrazovým mostíkom teraz k schopnosti pretrvávať informácií 519 00:23:02,980 --> 00:23:04,040 natrvalo. 520 00:23:04,040 --> 00:23:08,340 Tak uvidíme, teraz čo viac môžeme robiť s týmito a ďalšími funkciami. 521 00:23:08,340 --> 00:23:10,729 Ale najprv, nejaké otázky? 522 00:23:10,729 --> 00:23:12,145 To bolo veľa, a to bolo rýchle. 523 00:23:12,145 --> 00:23:16,131 Ale uvidíte mnoho viac pset 4, rovnako. 524 00:23:16,131 --> 00:23:16,630 Jo? 525 00:23:16,630 --> 00:23:19,360 >> Divákov: Existuje spôsob, ako pokračovať v pridávaní mien do tohto súboru? 526 00:23:19,360 --> 00:23:19,880 >> DAVID J. Malan: Dobrá otázka. 527 00:23:19,880 --> 00:23:21,800 Existuje spôsob, ako pokračovať pridávanie mien do tohto súboru? 528 00:23:21,800 --> 00:23:22,340 Áno. 529 00:23:22,340 --> 00:23:24,630 A v skutočnosti, ak ste skončili up re-otvorenie súboru, 530 00:23:24,630 --> 00:23:26,780 by ste použili citáciu koniec citátu "A" pre append, 531 00:23:26,780 --> 00:23:31,090 čo by len pridať nový riadok, je Nová linka znova a znova, presne tak. 532 00:23:31,090 --> 00:23:32,010 Dobrá otázka. 533 00:23:32,010 --> 00:23:32,950 Ďalšie otázky? 534 00:23:32,950 --> 00:23:33,450 Jo? 535 00:23:33,450 --> 00:23:35,580 Divákov: Ak ste spustili Program znovu práve teraz, 536 00:23:35,580 --> 00:23:38,000 to by držať pridanie mien do súboru alebo by to otvoriť nový súbor? 537 00:23:38,000 --> 00:23:38,740 >> DAVID J. Malan: Á, dobrá otázka. 538 00:23:38,740 --> 00:23:41,448 Ak znovu hneď bežal program Teraz, možno zadali novými menami, 539 00:23:41,448 --> 00:23:44,820 by bolo pridať do súboru alebo prepísať súbor? 540 00:23:44,820 --> 00:23:47,420 Ten, pretože som nepoužívajú pripájací režimu. 541 00:23:47,420 --> 00:23:49,930 A pretože ja som len slepo otvorenie súboru pre zápis, 542 00:23:49,930 --> 00:23:51,310 je to len bude súbor prepísať. 543 00:23:51,310 --> 00:23:54,570 Takže by som naozaj musíte urobiť, je pripojiť, keď chcem skutočne dlhodobý 544 00:23:54,570 --> 00:23:55,350 databáz. 545 00:23:55,350 --> 00:23:58,220 >> Teraz CSV je užitočný, úprimne povedané, ani pre obdobné ak ste writing-- 546 00:23:58,220 --> 00:24:00,100 a my budeme nakoniec vidieť neskôr v semestri, kedy 547 00:24:00,100 --> 00:24:01,455 využívame CSVŠ na iné účely. 548 00:24:01,455 --> 00:24:04,920 Ak chcete uložiť všetkých ľudí ktorí sa registrovali na nejakú udalosť, 549 00:24:04,920 --> 00:24:07,420 alebo sa prihlásili pre študenta skupina, alebo niečo také, 550 00:24:07,420 --> 00:24:10,330 ukladanie dát v tomto druhu formátu je super pohodlné. 551 00:24:10,330 --> 00:24:12,580 Vzhľadom k tomu, doslova, ak I mali stiahnuť tento súbor. 552 00:24:12,580 --> 00:24:14,540 Mohol by som double-- a poďme sa skutočne snaží tento 553 00:24:14,540 --> 00:24:16,720 keď mám Excel alebo čísla tu. 554 00:24:16,720 --> 00:24:19,130 >> Budem pravým tlačidlom alebo s klávesom Ctrl môj súbor. 555 00:24:19,130 --> 00:24:20,020 Jejda. 556 00:24:20,020 --> 00:24:21,830 Kliknite pravým tlačidlom alebo s klávesom Ctrl môj súbor. 557 00:24:21,830 --> 00:24:24,960 No, moja myš nespolupracuje. 558 00:24:24,960 --> 00:24:32,694 Download-- Idem stiahnuť všetky súbory, takže tu 559 00:24:32,694 --> 00:24:33,860 Len tak môžem chytiť tento jeden. 560 00:24:33,860 --> 00:24:37,850 A uvidíme, či to funguje students.csv-- prvýkrát 561 00:24:37,850 --> 00:24:39,310 Ja som aktivovaný. 562 00:24:39,310 --> 00:24:41,360 Teraz chcú vidieť svoje kontakty. 563 00:24:41,360 --> 00:24:44,310 Teraz som potrebné sa zaregistrovať. 564 00:24:44,310 --> 00:24:47,620 Pozrite sa, ako ľahké je používať CSVŠ? 565 00:24:47,620 --> 00:24:50,840 Áno, udržiavať ju v aktuálnom stave. 566 00:24:50,840 --> 00:24:52,375 OK, teraz sme pripravení na triedu. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 OK, oh, čo je nové? 569 00:25:00,370 --> 00:25:02,920 OK, úzkym. 570 00:25:02,920 --> 00:25:04,750 To bolo čarovné. 571 00:25:04,750 --> 00:25:07,280 OK, teraz musíme aktualizovať. 572 00:25:07,280 --> 00:25:10,890 A teraz, je to zabudol, čo súbor Pôvodne som otvoril, 573 00:25:10,890 --> 00:25:13,090 ale to, čo tam je-- ideme. 574 00:25:13,090 --> 00:25:16,341 OK, takže teraz máme súbor programu Excel. 575 00:25:16,341 --> 00:25:18,290 Ďakujem. 576 00:25:18,290 --> 00:25:20,764 >> OK, takže to, čo som urobil, bolo jednoduché. 577 00:25:20,764 --> 00:25:23,930 Samozrejme, že som mohol už nainštalované Excel, alebo čísla, alebo čokoľvek iného programu. 578 00:25:23,930 --> 00:25:25,846 Ale to je pekné, pretože teraz môžem manipulovať 579 00:25:25,846 --> 00:25:28,090 údaje v štandardnom formáte. 580 00:25:28,090 --> 00:25:30,294 >> Takže teraz poďme kontext prejsť na miesto, kde sme prestali 581 00:25:30,294 --> 00:25:32,710 Naposledy, ktorý mal začať vzlietnuť kolieska. 582 00:25:32,710 --> 00:25:34,543 Ale najprv, to nie vidieť tento skorší obed 583 00:25:34,543 --> 00:25:38,150 sa opäť deje na Fire a Ice v Cambridge, sitaru v New Havene. 584 00:25:38,150 --> 00:25:43,150 Zaregistrujte sa na stránkach CS50s ASAP vstúpiť CS50 študentov a zamestnancov. 585 00:25:43,150 --> 00:25:46,090 >> Tak sme vzali kolieska off v pondelok follows-- 586 00:25:46,090 --> 00:25:49,120 string bola vyhlásená v CS50s knižnica pre určitú dobu. 587 00:25:49,120 --> 00:25:52,650 A je to pekné, pretože umožňuje nás hovoriť o premenné ako 588 00:25:52,650 --> 00:25:54,660 kompletné slová a vety a ďalšie. 589 00:25:54,660 --> 00:25:56,710 Ale ukazuje sa reťazec neexistuje. 590 00:25:56,710 --> 00:26:00,200 To je len synonymom, alebo alias, že sme vytvorili niečo, čo 591 00:26:00,200 --> 00:26:03,780 v skutočnosti je trochu viac technické volal char *. 592 00:26:03,780 --> 00:26:07,900 >> A skutočne, videli sme príklad programu v pondelok 593 00:26:07,900 --> 00:26:11,200 že nesprával úplne, ako sme očakávali. 594 00:26:11,200 --> 00:26:13,630 Jednalo sa o súbor, porovnávať-0. 595 00:26:13,630 --> 00:26:17,910 A pripomínajú, že porovnávať-0, ak Pondelkového programu som překompilovat 596 00:26:17,910 --> 00:26:22,670 a spustiť porovnávať-0 a zadajte medzimesačne v malé písmená, a mamička malými písmenami znova. 597 00:26:22,670 --> 00:26:25,320 Program trval na tom, I typ rôzne veci, 598 00:26:25,320 --> 00:26:29,210 aj keď mama, všetko v malá, je totožný vizuálne. 599 00:26:29,210 --> 00:26:31,990 Takže to, čo bolo krátka odpoveď prečo si myslí, že počítač 600 00:26:31,990 --> 00:26:34,500 tieto dva reťazce sa líšia? 601 00:26:34,500 --> 00:26:35,250 Jo? 602 00:26:35,250 --> 00:26:36,534 >> Divákov: [Nepočuteľné] 603 00:26:36,534 --> 00:26:37,450 DAVID J. Malan: Správne. 604 00:26:37,450 --> 00:26:39,600 Takže, mamu, prvýkrát Píšem ho, je byť 605 00:26:39,600 --> 00:26:42,710 uložené niekde v mojom počítači pamäti, ale na inom mieste 606 00:26:42,710 --> 00:26:44,690 ako druhá, kedy som písať matkou. 607 00:26:44,690 --> 00:26:46,580 Teraz je určite by mohol byť optimalizovaný. 608 00:26:46,580 --> 00:26:49,205 Počítač by mohol byť šikovný a realizáciu týchto dva reťazce, hej, 609 00:26:49,205 --> 00:26:49,954 sú identické. 610 00:26:49,954 --> 00:26:51,520 Dovoľte mi, aby som to nadbytočne uložiť. 611 00:26:51,520 --> 00:26:54,229 Ale počítače nerobia, že Optimalizácia ak poviete im. 612 00:26:54,229 --> 00:26:56,061 Takže, v predvolenom nastavení, sú to práve chystá skončiť 613 00:26:56,061 --> 00:26:57,670 v dvoch rôznych miestach v pamäti. 614 00:26:57,670 --> 00:27:01,570 A tak, aby sa viac zrejmé, keď sme porovnali dva reťazce, 615 00:27:01,570 --> 00:27:03,950 Prvý bol tzv s, druhý bol nazývaný 616 00:27:03,950 --> 00:27:08,530 t, čo konkrétne som bol nákupný tu na riadku 13? 617 00:27:08,530 --> 00:27:09,494 Jo. 618 00:27:09,494 --> 00:27:12,390 >> Divákov: Je to miesto v pamäti že premenná bude ukazovať. 619 00:27:12,390 --> 00:27:14,900 >> DAVID J. Malan: Presne tak, som bol nákupný miesto v pamäti 620 00:27:14,900 --> 00:27:16,300 že tieto premenné ukázal. 621 00:27:16,300 --> 00:27:20,560 Tak konkrétne v prípade, matka bola na Byte číslo 1, a 2, a 3, 622 00:27:20,560 --> 00:27:24,020 a 4-- preto, že si na spätné lomítko 0 musí byť úplne na konci. 623 00:27:24,020 --> 00:27:29,420 A tá druhá inštancia medzimesačne, m-o-m, bol na adrese 10, 11, 12, a 13. 624 00:27:29,420 --> 00:27:33,100 Bol som porovnávanie 1, že adresa, že umiestnenie v pamäti, 625 00:27:33,100 --> 00:27:35,160 proti 10, ktorý je samozrejme nie je rovnaký. 626 00:27:35,160 --> 00:27:36,260 1 nie je 10. 627 00:27:36,260 --> 00:27:39,620 >> Tak to je pekné, že v je to celkom jednoduché. 628 00:27:39,620 --> 00:27:42,870 Ale je to problematické, ak môžeme sa zdá, porovnanie reťazcov. 629 00:27:42,870 --> 00:27:44,930 Tak fundamentally-- a na tejto nízkej úrovni, 630 00:27:44,930 --> 00:27:47,300 ak by ste chceli realizovať program pre porovnanie 631 00:27:47,300 --> 00:27:50,270 dve jednotlivé slová, že užívateľ zadal na kvalitu, 632 00:27:50,270 --> 00:27:53,944 sa im line up pre char char, len vo všeobecnej rovine, 633 00:27:53,944 --> 00:27:55,360 čo musíme urobiť, zrejme? 634 00:27:55,360 --> 00:27:57,940 Nestačí len pozrite sa na tie dve adresy. 635 00:27:57,940 --> 00:27:58,860 Čo musíme urobiť? 636 00:27:58,860 --> 00:27:59,360 Jo? 637 00:27:59,360 --> 00:28:01,120 >> Publikum: iterovat reťazec [nepočuteľné]. 638 00:28:01,120 --> 00:28:02,600 >> DAVID J. Malan: Jo, poďme iterovat reťazca. 639 00:28:02,600 --> 00:28:05,808 Poďme použiť pre sláčiky, sláčiky while, alebo čo ste najviac vyhovuje. 640 00:28:05,808 --> 00:28:08,840 A ak máme dva reťazce kdesi v pamäti, poďme sa pozrieť na každý let 641 00:28:08,840 --> 00:28:11,770 prvý znak, potom každý druhý znak, potom tretej a štvrtej, 642 00:28:11,770 --> 00:28:15,206 a piaty, až sme narazili Aké špeciálne Sentinel hodnota? 643 00:28:15,206 --> 00:28:16,080 Divákov: [Nepočuteľné] 644 00:28:16,080 --> 00:28:18,800 DAVID J. Malan: Jo, spätné lomítko nula, na ktorom mieste v jednom reťazci 645 00:28:18,800 --> 00:28:20,100 Môžeme sa rozhodnúť, že to je všetko. 646 00:28:20,100 --> 00:28:21,970 Už sme uzavreté každý znak? 647 00:28:21,970 --> 00:28:22,990 Ak tomu tak nie je, vráti false. 648 00:28:22,990 --> 00:28:24,770 Ak áno, vráti true. 649 00:28:24,770 --> 00:28:28,800 A tak to je presne to, čo táto verzia programu porovnať-1.c. robí. 650 00:28:28,800 --> 00:28:31,677 To je totožné s tým, čo sme Pozrel sa na pondelok okrem toho, že som 651 00:28:31,677 --> 00:28:34,760 zbavili slová string-- hoci že nemá žiadny funkčný impact-- all 652 00:28:34,760 --> 00:28:37,450 Robím teraz je odstránenie niektoré vizuálne školenia kolesá, 653 00:28:37,450 --> 00:28:40,880 ale jasne vidieť, že s a t sú adresy. 654 00:28:40,880 --> 00:28:43,020 A to je to, čo je hviezda, hviezdička, predstavuje 655 00:28:43,020 --> 00:28:46,690 je adresa, inak známy technicky ako ukazovátko. 656 00:28:46,690 --> 00:28:49,880 >> Takže keď Prehlasujem ov na linka 9 a hovoria, char * s, 657 00:28:49,880 --> 00:28:52,160 to neznamená, že mi dať reťazec. 658 00:28:52,160 --> 00:28:56,360 To znamená, že daj mi premenné, ktorej Zmyslom života je uložiť adresu. 659 00:28:56,360 --> 00:29:00,400 Pretože som chcel dať adresa reťazca do neho. 660 00:29:00,400 --> 00:29:03,500 A skutočne, GetString, byť jasné, nevracia reťazec. 661 00:29:03,500 --> 00:29:06,110 To nevracia mamu spätné lomítko nula, samy o sebe. 662 00:29:06,110 --> 00:29:10,005 Čo getString špecificky a presne vrátiť? 663 00:29:10,005 --> 00:29:10,880 Divákov: [Nepočuteľné] 664 00:29:10,880 --> 00:29:14,080 DAVID J. Malan: adresa zadaná, adresa prvého znaku 665 00:29:14,080 --> 00:29:16,070 v nejakom reťazci to dostal. 666 00:29:16,070 --> 00:29:19,250 A tak teraz vidíme opäť špeciálny kľúčové slovo. 667 00:29:19,250 --> 00:29:20,640 A, spomínal som sa skôr. 668 00:29:20,640 --> 00:29:23,620 To bude dobré konvencie že uvidíme znova a znova teraz. 669 00:29:23,620 --> 00:29:27,540 Ja som kontrolu, aby sa uistil, že s nie je null, a t nie je null. 670 00:29:27,540 --> 00:29:30,100 Vzhľadom k tomu, na základe mojich naozaj rýchla zmienka skôr, 671 00:29:30,100 --> 00:29:35,510 čo by mohlo znamenať, ak GetString vráti nie adresa, ale N-U-L-L, ktorý je opäť, 672 00:29:35,510 --> 00:29:36,990 nejaký zvláštny hodnota? 673 00:29:36,990 --> 00:29:37,890 >> Divákov: Chyba. 674 00:29:37,890 --> 00:29:38,600 >> DAVID J. Malan: Je to chyba. 675 00:29:38,600 --> 00:29:39,550 Niečo sa pokazilo. 676 00:29:39,550 --> 00:29:41,341 A to, čo typicky Môže sa stať, najmä 677 00:29:41,341 --> 00:29:45,162 s strings--, ktoré by mohli byť neznáme dĺžky v advance-- 678 00:29:45,162 --> 00:29:46,870 Možno, že počítače " nedostatok pamäti, možno 679 00:29:46,870 --> 00:29:49,280 ste zadali v takom dlhé slovo alebo vetu 680 00:29:49,280 --> 00:29:51,880 alebo vložiť také obrovské esej tam jednoducho nie je dostatok pamäte. 681 00:29:51,880 --> 00:29:55,340 A tak GetString nemôže vrátiť adresa celej veci, 682 00:29:55,340 --> 00:29:56,620 tak to proste vráti nič. 683 00:29:56,620 --> 00:30:00,580 A to hovorí, že chyba sa stalo vrátením špeciálnu hodnotu NULL. 684 00:30:00,580 --> 00:30:02,890 Je to nulová adresa, aby som tak povedal. 685 00:30:02,890 --> 00:30:06,157 >> Teraz sa ukazuje, C je dodávaný s Funkcia, ktorá robí túto iteráciu. 686 00:30:06,157 --> 00:30:09,240 Nemáme to vykonať s cyklus for alebo while sami. 687 00:30:09,240 --> 00:30:11,150 Môžeme použiť funkciu, volal stručne, 688 00:30:11,150 --> 00:30:15,400 miešajte Comp, alebo reťazec porovnať, ktorého Zmyslom života je urobiť presne to. 689 00:30:15,400 --> 00:30:19,990 Môžete dať dva ukazovatele, dve adresy, a pôjde na tieto adresy 690 00:30:19,990 --> 00:30:23,130 a potom porovnať list pre list pre list pre kvalitu, 691 00:30:23,130 --> 00:30:26,610 zastavenie iba vtedy, keď to, čo je pravda? 692 00:30:26,610 --> 00:30:31,540 Kedy by mal intuitívne miešať comp prestanú Iterácie, len aby bolo jasno? 693 00:30:31,540 --> 00:30:35,400 Keď narazí na spätné lomítko 0 buď reťazec, na ktorom mieste sa môže rozhodnúť 694 00:30:35,400 --> 00:30:38,910 má všetko uzavreté, alebo došlo na rozdiel? 695 00:30:38,910 --> 00:30:42,740 >> Takže, keď narazíme to teraz a skúste náš malý kapitalizácie hra, 696 00:30:42,740 --> 00:30:49,260 takže sa porovnávať-1, ./compare-1, a zadajte mama malými písmenami v oboch prípadoch. 697 00:30:49,260 --> 00:30:50,560 Teraz je to to isté. 698 00:30:50,560 --> 00:30:54,080 A ak by som to znovu s malé písmená, a potom možno veľké písmená. 699 00:30:54,080 --> 00:30:56,720 Teraz to naozaj odlišuje medzi veľkými a malými písmenami. 700 00:30:56,720 --> 00:31:00,440 Takže nie je tak ťažké, alebo magický, ale to teraz vysvetliť 701 00:31:00,440 --> 00:31:03,140 čo sa deje pod kapotou. 702 00:31:03,140 --> 00:31:07,640 >> Takže čo viac môžeme extrahovať z tohto druhu lekcie? 703 00:31:07,640 --> 00:31:08,980 Takže poďme sa pozrieť na to. 704 00:31:08,980 --> 00:31:15,380 Chystám sa ísť dopredu a napísať rýchly program, tu nazvaný copy-0. 705 00:31:15,380 --> 00:31:21,594 A teraz poďme do toho a vlastne poďme robiť tohle-- s kópiou-0, 706 00:31:21,594 --> 00:31:23,010 sa pozrieť na to, čo som sa sem dostal. 707 00:31:23,010 --> 00:31:24,712 Prvýkrát som povedať užívateľovi, povedz niečo. 708 00:31:24,712 --> 00:31:26,420 Potom som si reťazec a ja som uložil je v s. 709 00:31:26,420 --> 00:31:29,810 Potom som sa skontrolovať, či je rovná rovná NULL, jednoducho vráti 1. 710 00:31:29,810 --> 00:31:31,590 Tak to je len kontrola štandardná chyba. 711 00:31:31,590 --> 00:31:33,112 Nič zaujímavého nestalo. 712 00:31:33,112 --> 00:31:36,320 A v skutočnosti, ak by sme sa zbaviť chyby kontrola, to vyzerá ako týždeň 1 kód 713 00:31:36,320 --> 00:31:36,985 práve teraz. 714 00:31:36,985 --> 00:31:39,110 Ale ja som začal dostať trochu lepšie o tom. 715 00:31:39,110 --> 00:31:43,340 >> Teraz v rade 16, pred týždňom, možno dokonca pár dní alebo minútami, 716 00:31:43,340 --> 00:31:46,720 dalo by sa povedať linka 16 vytvorenie premennej nazvanej t 717 00:31:46,720 --> 00:31:48,219 a kopírovanie to do neho. 718 00:31:48,219 --> 00:31:50,010 A to je úplne rozumné stánok s jedlom. 719 00:31:50,010 --> 00:31:51,560 Ale buďte teraz presnejšie. 720 00:31:51,560 --> 00:31:54,190 Čo sa deje v rade 16? 721 00:31:54,190 --> 00:31:56,170 To, čo je stále skopírovaný sprava doľava? 722 00:31:56,170 --> 00:31:56,669 Jo? 723 00:31:56,669 --> 00:31:58,490 Divákov: Je t dostať adresy s? 724 00:31:58,490 --> 00:32:01,220 >> DAVID J. Malan: Presne tak, t je stále adresu s. 725 00:32:01,220 --> 00:32:05,170 Tak aby bolo jasno hneď, keď pôjdem späť k tej predchádzajúcej príklad 726 00:32:05,170 --> 00:32:08,520 a ja som upozorniť na vec, ktorú som zadali. 727 00:32:08,520 --> 00:32:11,640 A to, čo som napísal in-- tu je s, a tu 728 00:32:11,640 --> 00:32:15,830 je to, čo som napísal v niekde v pamäť, mama a potom spätné lomítko 729 00:32:15,830 --> 00:32:17,840 0, ktorá je pridaná pre mňa. 730 00:32:17,840 --> 00:32:23,060 To, čo som uložené v tu, pripomínajú, To je v mieste 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 To je to, čo je v súčasnej dobe v s. 732 00:32:24,655 --> 00:32:29,220 Takže ak na linke 16, hovorím, daj mi ďalšie premennú s názvom t a obchod 733 00:32:29,220 --> 00:32:33,590 v na hodnotu s, čo dostane uložené tu nebude mamička 734 00:32:33,590 --> 00:32:35,480 ale skôr len číslo 1. 735 00:32:35,480 --> 00:32:38,520 >> Takže ak sa pozrieme dopredu v tomto programe teraz, čo sa bude diať? 736 00:32:38,520 --> 00:32:40,690 Takže si všimnúť, že tam je Táto funkcia vám mohlo 737 00:32:40,690 --> 00:32:44,410 využili to už pred časom pre Caesara, alebo Vigener, alebo možno vôbec nie. 738 00:32:44,410 --> 00:32:48,170 Tvrdím s mojím printf, ja som bude kapitalizovať kopírovanie t. 739 00:32:48,170 --> 00:32:51,616 Najprv v riadku 19, rýchle zdravého rozumu skontrolujte, strlen skontroluje dĺžku t. 740 00:32:51,616 --> 00:32:53,740 Pretože nechcem, aby sa snažia zarobiť niečo 741 00:32:53,740 --> 00:32:55,104 v prípade, že to nie je žiadna reťazec. 742 00:32:55,104 --> 00:32:57,520 V prípade, že používateľ jednoducho stlačiť Enter, nič zarobiť. 743 00:32:57,520 --> 00:33:01,100 Takže nechcem robiť riadku 21. 744 00:33:01,100 --> 00:33:05,758 Takže linka 21 je zarábať ktoré písmeno, zdá sa, že vt? 745 00:33:05,758 --> 00:33:06,514 >> Publikum: m? 746 00:33:06,514 --> 00:33:08,722 DAVID J. Malan: Vyzerá to, ako by to kopírovanie, ktorý z nich? 747 00:33:08,722 --> 00:33:09,486 Divákov: 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, takže prvé m, pretože oznámenie, že som 750 00:33:12,685 --> 00:33:14,935 prechodom na toupper, ktorý ak ste nikdy nevidel, že je to 751 00:33:14,935 --> 00:33:16,980 len funkcie využiť ako vstup. 752 00:33:16,980 --> 00:33:20,240 t držiak nula znamená dať me znak nula t. 753 00:33:20,240 --> 00:33:22,550 A tak ako to Zmeniť obrázok, aby bolo jasné? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Čo je potrebné, aby sa prepisujú alebo zmeniť s ohľadom na S a T a mama 756 00:33:29,160 --> 00:33:30,097 spätné lomítko nula. 757 00:33:30,097 --> 00:33:31,470 >> Divákov: [Nepočuteľné] 758 00:33:31,470 --> 00:33:34,030 >> DAVID J. Malan: Jo, tak toto tu proste 759 00:33:34,030 --> 00:33:40,860 potrebuje získať zmenil to-- opraviť tohle-- je potrebné, aby sa zmenil na kapitálové m. 760 00:33:40,860 --> 00:33:44,330 Ale teraz, pozrite sa neskôr v Program, keď som vytlačiť 761 00:33:44,330 --> 00:33:49,800 s a t, ako som tu upratať, sledujte, čo je bude diať vytlačenie s a t. 762 00:33:49,800 --> 00:33:54,310 Tak, aby copy-0, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Nechaj ma ísť dopredu a zadajte V medzimesačne v malými. 764 00:33:57,140 --> 00:34:00,140 Všimnite si, ako pôvodné a kópie boli aktivované. 765 00:34:00,140 --> 00:34:00,850 Prečo? 766 00:34:00,850 --> 00:34:04,431 No, s a t sú oba smerujúce k, ak chcete, rovnaký kus pamäte. 767 00:34:04,431 --> 00:34:06,930 A úprimne povedané, to už je Naozaj uninteresting-- skutočnosť 768 00:34:06,930 --> 00:34:09,150 že sme pomocou adresy nula tu. 769 00:34:09,150 --> 00:34:11,719 Chcem povedať, že to naozaj jedno, kde veci sú v pamäti. 770 00:34:11,719 --> 00:34:13,550 Ospravedlňujem sa, že som mazanie trochu moc. 771 00:34:13,550 --> 00:34:15,674 Ale ja naozaj nestarám kde veci sú v pamäti. 772 00:34:15,674 --> 00:34:18,510 A tak, naozaj to, čo programátori majú tendenciu premýšľať o tom, 773 00:34:18,510 --> 00:34:21,080 je, že keď hovoríte o adresu, alebo ukazovateľ, 774 00:34:21,080 --> 00:34:22,679 koho to zaujíma, kde je v pamäti. 775 00:34:22,679 --> 00:34:24,989 Je mi jedno, či je to na byte jeden alebo miliarda. 776 00:34:24,989 --> 00:34:27,920 Len ma to zaujíma, že to premenná je účinne 777 00:34:27,920 --> 00:34:29,620 ukázal na tomto kusu pamäti. 778 00:34:29,620 --> 00:34:33,350 A tak odteraz, skôr než slovíčkaření nad svojvoľným adresy pamäti, poďme 779 00:34:33,350 --> 00:34:36,710 len začať kresliť ukazovatele ako ukazovatele, ako šípky. 780 00:34:36,710 --> 00:34:39,340 Takže to, čo s a t naozaj sú, Podľa tohto programu, 781 00:34:39,340 --> 00:34:42,130 kvôli tomu, ako som vytvoril t, je to len dva samostatné premenné 782 00:34:42,130 --> 00:34:43,840 ukázal na rovnakom kusu pamäti. 783 00:34:43,840 --> 00:34:45,215 A je nám jedno, kde sú. 784 00:34:45,215 --> 00:34:47,130 Takže môžeme abstraktné preč tohto detailu. 785 00:34:47,130 --> 00:34:48,780 >> Tak ako to mám opraviť? 786 00:34:48,780 --> 00:34:54,120 Ak chcem napísať verzii kópie program, ktorý vlastne kopíruje reťazec 787 00:34:54,120 --> 00:34:56,840 a kapitalizuje iba kopírovanie, len intuitívne, 788 00:34:56,840 --> 00:34:59,766 čo má byť prísada do nášho riešenia? 789 00:34:59,766 --> 00:35:00,640 Divákov: [Nepočuteľné] 790 00:35:00,640 --> 00:35:01,420 DAVID J. Malan: Potrebujeme čo? 791 00:35:01,420 --> 00:35:01,820 Divákov: Chunk pamäte. 792 00:35:01,820 --> 00:35:03,280 DAVID J. Malan: Potrebujeme ďalší kus pamäti, že jo? 793 00:35:03,280 --> 00:35:05,360 Nevieme, ako sa to napriek tomu, nutne. 794 00:35:05,360 --> 00:35:11,330 Ale nejako som Potrebujem sa to stalo tak, že pôvodný mamička malými písmenami 795 00:35:11,330 --> 00:35:14,170 skončí v extra kusu pamäti. 796 00:35:14,170 --> 00:35:19,770 A potom, keď som sa zmeniť kópiu, ja nechcú zmeniť túto kópiu tu. 797 00:35:19,770 --> 00:35:26,020 Namiesto toho som chcel zmeniť iba tento kópie tak, že originál je nezmenený. 798 00:35:26,020 --> 00:35:27,980 >> Takže, poďme sa pozrieť, ako by sme mohli urobiť. 799 00:35:27,980 --> 00:35:31,800 V copy-1, ktorý má už bol zbavený komentár, 800 00:35:31,800 --> 00:35:33,250 ale je komentoval online. 801 00:35:33,250 --> 00:35:36,710 Namiesto toho sme robiť following-- títo linky sú identické, daj mi reťazec 802 00:35:36,710 --> 00:35:38,340 a hovoria to. 803 00:35:38,340 --> 00:35:43,500 Ale teraz sa pozrime na jednom z našich najviac zložitý, ale posledný zložitosti 804 00:35:43,500 --> 00:35:47,340 na chvíľu, riadok 16 robí presne to. 805 00:35:47,340 --> 00:35:49,400 Takže ak vaše pohodlné s picture sme práve drew-- 806 00:35:49,400 --> 00:35:51,790 daj mi nový kus pamäti, kopírovať všetko do toho, 807 00:35:51,790 --> 00:35:53,730 pozrime sa, ako preložiť do kódu. 808 00:35:53,730 --> 00:35:59,400 >> Takže linka 16, na ľavej strane, char * t mi dáva toto políčko tu. 809 00:35:59,400 --> 00:36:00,230 To je všetko, čo robí. 810 00:36:00,230 --> 00:36:03,240 Na pravej strane, m Alloc, alebo malloc, 811 00:36:03,240 --> 00:36:06,480 je alokácia pamäte, super fantázie, mystický spôsob, ako len hovorím 812 00:36:06,480 --> 00:36:07,640 daj mi kus pamäte. 813 00:36:07,640 --> 00:36:09,290 Koľko pamäte potrebujeme? 814 00:36:09,290 --> 00:36:10,910 No, je druh veľkého výrazu. 815 00:36:10,910 --> 00:36:12,570 Ale poďme sa pozrieť, čo to hovorí tu. 816 00:36:12,570 --> 00:36:15,940 Takže to, samozrejme, je dať me dĺžka reťazec s. 817 00:36:15,940 --> 00:36:19,094 Takže, mama by to malo byť, čo? 818 00:36:19,094 --> 00:36:21,010 Takže len tri, nie? mama je tri znaky. 819 00:36:21,010 --> 00:36:22,830 Nemusíte počítať spätné lomítko nulu, keď vás 820 00:36:22,830 --> 00:36:25,960 hovorí o dĺžke reťazca je to Vlastne ľudskej viditeľné listy. 821 00:36:25,960 --> 00:36:28,020 Takže mama, takže to mi dáva 3. 822 00:36:28,020 --> 00:36:31,170 Ale počkajte, ja som teraz pridaním 1. 823 00:36:31,170 --> 00:36:34,861 Prečo vlastne chcú, aby prideliť 4 bajty a nie len 3? 824 00:36:34,861 --> 00:36:35,360 Jo? 825 00:36:35,360 --> 00:36:36,910 >> Divákov: Pre hodnotu sentinel? 826 00:36:36,910 --> 00:36:38,951 >> DAVID J. Malan: Presne tak, pre tento sentinelovej hodnotu. 827 00:36:38,951 --> 00:36:40,840 Pre spätné lomítko nula, Potrebujem celkom 4 byty. 828 00:36:40,840 --> 00:36:42,870 Tak som potrebné dĺžka reťazca plus 1. 829 00:36:42,870 --> 00:36:45,400 A potom už len pre dobrý measure-- , Aj keď v tomto systéme, 830 00:36:45,400 --> 00:36:49,390 vždy to bude 1-- hovorím vynásobte to podľa veľkosti char. 831 00:36:49,390 --> 00:36:51,552 Ukázalo sa, že je sizeof operátor v C, ktorý 832 00:36:51,552 --> 00:36:53,260 Len vám povie počet bajtov, ktoré je 833 00:36:53,260 --> 00:36:54,700 potrebný pre určitý typ dát. 834 00:36:54,700 --> 00:36:57,740 Nefunguje pre polia, typicky, niekedy to robí. 835 00:36:57,740 --> 00:36:59,210 Ale v všeobecnom prípade, no. 836 00:36:59,210 --> 00:37:02,330 Ale to mi povedať, koľko bajtov char je, ktorý dopadá je vždy 1. 837 00:37:02,330 --> 00:37:04,080 Takže toto je ako násobením 1. 838 00:37:04,080 --> 00:37:05,900 >> Tak výborný mystický hľadá riadok kódu. 839 00:37:05,900 --> 00:37:09,320 Ale všetko, čo robí, je dáva mi kus pamäte. 840 00:37:09,320 --> 00:37:13,590 Ale to sa zdá, že kopírovanie niečo do tej pamäti? 841 00:37:13,590 --> 00:37:14,560 Ešte nie. 842 00:37:14,560 --> 00:37:22,040 A tak čo mám na linke 22 a 23, 24, 25, no, som jednoducho urobiť. 843 00:37:22,040 --> 00:37:23,760 A to je druh old school teraz veci. 844 00:37:23,760 --> 00:37:26,010 To je ako pset 2, kde ste len v pohybe veci 845 00:37:26,010 --> 00:37:28,620 okolo v pamäti, alebo skôr v reťazcoch. 846 00:37:28,620 --> 00:37:31,920 >> Takže som iterácie od 0 do dĺžka reťazca s. 847 00:37:31,920 --> 00:37:37,820 A ja kopírovanie i-ty znak v S do i-tého znaku v t. 848 00:37:37,820 --> 00:37:41,820 A pretože som programátor, robil Uistite sa, že prideliť presne toľko bajtov 849 00:37:41,820 --> 00:37:44,600 ako potrebujem, je to perfektné one-to-one vzťah. 850 00:37:44,600 --> 00:37:47,060 A ja kopírovať medzimesačne v malé písmená na nový. 851 00:37:47,060 --> 00:37:50,170 A potom konečne, mám tento riadok. 852 00:37:50,170 --> 00:37:54,637 A tak je účinok je len zúročiť tento t tu. 853 00:37:54,637 --> 00:37:56,470 Takže veľa absorbovať, ale ak ste práve do úvahy 854 00:37:56,470 --> 00:37:58,220 čo sa naozaj deje Na pod pokrievku 855 00:37:58,220 --> 00:38:00,880 je len pohybujúce sa tieto bajtov okolo, všetko, čo 856 00:38:00,880 --> 00:38:06,617 je potrebné na vyriešenie tohto problému je len preto, aby nám tento kus pamäte. 857 00:38:06,617 --> 00:38:08,450 Teraz na riziko ohromujúci, dovoľte mi ukázať 858 00:38:08,450 --> 00:38:13,200 jeden ďalší príklad, ktorý je takmer identické, s výnimkou pre tento jeden 859 00:38:13,200 --> 00:38:14,350 riadok kódu. 860 00:38:14,350 --> 00:38:18,870 Tak toto je verzia hacker tohto programu, ak chcete. 861 00:38:18,870 --> 00:38:21,050 Ale nech to len destilovať že do toho, čo sa deje. 862 00:38:21,050 --> 00:38:28,920 Linka 24 slúži k byť týmto t držiak aj dostane y držiak i. 863 00:38:28,920 --> 00:38:33,370 Teraz, ja sa mením to oveľa viac mystický hviezda t 864 00:38:33,370 --> 00:38:36,280 plus 1 sa rovná hviezda s plus 1. 865 00:38:36,280 --> 00:38:38,702 >> Takže to, čo sa deje a prečo máme hviezdy postavu? 866 00:38:38,702 --> 00:38:41,410 Už sme nevidel hviezdu, a je to byť používané odlišne tu. 867 00:38:41,410 --> 00:38:45,490 Už skôr sme videli char *, teraz som videl hviezda na začiatku, a to je v poriadku. 868 00:38:45,490 --> 00:38:48,190 Vzhľadom k tomu, to dopadá sme môže druh odvodiť len 869 00:38:48,190 --> 00:38:50,280 od tých, ktoré najprv zásady, čo sa deje. 870 00:38:50,280 --> 00:38:53,860 Len aby bolo jasné, čo je to? 871 00:38:53,860 --> 00:38:55,052 Minulý týždeň to bol reťazec. 872 00:38:55,052 --> 00:38:56,260 To nestačí už nie. 873 00:38:56,260 --> 00:38:57,690 Čo je s, konkrétne? 874 00:38:57,690 --> 00:38:58,590 >> Divákov: [Nepočuteľné] 875 00:38:58,590 --> 00:38:59,881 >> DAVID J. Malan: Je to ukazovateľ. 876 00:38:59,881 --> 00:39:02,610 Je to adresu Prvý znak sme zadali. 877 00:39:02,610 --> 00:39:04,780 OK, čo je t? 878 00:39:04,780 --> 00:39:05,660 >> Divákov: [Nepočuteľné] 879 00:39:05,660 --> 00:39:07,950 >> DAVID J. Malan: The adresa prvého bajtu 880 00:39:07,950 --> 00:39:10,490 v t, že kus pamäte pridelená. 881 00:39:10,490 --> 00:39:14,720 Tak to dopadá, že keď sme sa opakovať od 0 až na reťazec 882 00:39:14,720 --> 00:39:17,424 length-- v prvom rade, aj začína na 0, pretože 883 00:39:17,424 --> 00:39:18,840 z tejto starej školy pre slučky vec. 884 00:39:18,840 --> 00:39:22,400 Tak práve pre jednoduchosť, poďme Predpokladajme, že prvý riadok kódu 885 00:39:22,400 --> 00:39:23,760 je naozaj len to, že jo. 886 00:39:23,760 --> 00:39:26,080 Keby som je nula, nula sčítanie k niečomu pravdepodobne 887 00:39:26,080 --> 00:39:27,540 nebude mať vplyv. 888 00:39:27,540 --> 00:39:28,560 >> Takže to, čo je to hovorí? 889 00:39:28,560 --> 00:39:31,600 Ukazuje sa, že hviezdy Operátor sa v tejto súvislosti 890 00:39:31,600 --> 00:39:33,700 je dereferencia operátor, čo je len 891 00:39:33,700 --> 00:39:37,530 ozdobný spôsob, ako hovoriť ísť na nasledujúcu adresu. 892 00:39:37,530 --> 00:39:42,080 Takže ak s je adresa prvou charakter v tomto kusu pamäti, 893 00:39:42,080 --> 00:39:43,630 * S prostriedkami tam. 894 00:39:43,630 --> 00:39:45,630 A pretože sme ťahané obraz týmto spôsobom, 895 00:39:45,630 --> 00:39:47,430 môžete prijať po mentálnej model. 896 00:39:47,430 --> 00:39:51,030 Ak je to s, a vy hovoríte: * S *, s niečo ako šmýkačiek a rebríky, 897 00:39:51,030 --> 00:39:54,540 ak si spomeniete hry z detstva, je ako sledovať túto šípku a ísť 898 00:39:54,540 --> 00:39:55,570 na adresu. 899 00:39:55,570 --> 00:39:57,080 >> * T je to isté. 900 00:39:57,080 --> 00:39:59,855 Takže začať tu, choďte na jeho bloku. 901 00:39:59,855 --> 00:40:03,350 Nemôžem len tak čerpať z táto obrazovka, že tak. 902 00:40:03,350 --> 00:40:05,560 * T znamená ísť sem. 903 00:40:05,560 --> 00:40:08,830 A potom je pre slučka je len porekadlá presunúť tento znak tu, 904 00:40:08,830 --> 00:40:11,330 presunúť tento znak tu, presunúť tento znak tu. 905 00:40:11,330 --> 00:40:12,890 Ale ako to mám urobiť inkrementácia? 906 00:40:12,890 --> 00:40:15,430 Musím sa vrátiť späť to, čo som práve zmazal. 907 00:40:15,430 --> 00:40:18,140 To je to, čo sa všeobecne nazýva ukazovateľ aritmetický, ktorý 908 00:40:18,140 --> 00:40:20,040 znamená, že matematiku s adresami. 909 00:40:20,040 --> 00:40:22,460 >> Ak sa v tomto pre sláčiky, Stále postupne i, 910 00:40:22,460 --> 00:40:26,880 a s je adresa a t je adresa, keď som len držať prídavkom 1, 911 00:40:26,880 --> 00:40:31,406 to len znamená, že neustále v pohybe vpred, a dopredu, a odovzdať do pamäte. 912 00:40:31,406 --> 00:40:34,030 Je to ako Oxford Street sa ulice, že budova je na SK. 913 00:40:34,030 --> 00:40:36,490 SK budovy je 33 Oxford Street. 914 00:40:36,490 --> 00:40:39,870 Takže ak by ste mali robiť 33 Oxford Street plus 1, 915 00:40:39,870 --> 00:40:42,870 ktorá vás privedie na 34 Oxforde Street, potom 35 Oxford Street, 916 00:40:42,870 --> 00:40:46,380 potom 36 Oxford Street, bez ohľadu na tých, budovy v skutočnosti sú - v prípade, že existujú. 917 00:40:46,380 --> 00:40:50,540 A tak to je všetko robíme tu s ukazovateľom aritmetiky. 918 00:40:50,540 --> 00:40:53,820 >> Takže je to super tajomný cesta vyjadriť sami. 919 00:40:53,820 --> 00:40:56,160 Ale to všetko sa deje pod pokrievku 920 00:40:56,160 --> 00:40:59,330 práve po tieto adresy, ako po mapu, ak chcete, 921 00:40:59,330 --> 00:41:02,692 alebo po šípky, ako je sme vykreslený na obrazovku. 922 00:41:02,692 --> 00:41:04,910 OK, veľa stráviteľné. 923 00:41:04,910 --> 00:41:10,410 Akýkoľvek dotaz na syntax, koncepty, ukazovatele, malloc, alebo podobne. 924 00:41:10,410 --> 00:41:11,480 Jo, tu ako prvý. 925 00:41:11,480 --> 00:41:13,755 >> Divákov: Tak kde to hovorí * t rovná toupper * t, 926 00:41:13,755 --> 00:41:15,575 je to, že bude ťažiť všetky písmená alebo jenom-- 927 00:41:15,575 --> 00:41:17,283 >> DAVID J. Malan: Ah, naozaj dobrá otázka. 928 00:41:17,283 --> 00:41:19,805 Takže v tomto riadku tu, 31, to bude zarábať 929 00:41:19,805 --> 00:41:21,430 prvé písmeno alebo všetky písmená. 930 00:41:21,430 --> 00:41:23,460 Takže poďme odpovedať tým, že ide späť do prvých princípov. 931 00:41:23,460 --> 00:41:26,168 A prvé pravidlá tu mám na mysli stačí ísť do základné definície 932 00:41:26,168 --> 00:41:27,000 , Čo sa jedná. 933 00:41:27,000 --> 00:41:29,770 Takže toupper je funkcia ťažiace char. 934 00:41:29,770 --> 00:41:30,530 To je všetko. 935 00:41:30,530 --> 00:41:36,740 * T znamená ísť do first-- prejsť na adresu v t. 936 00:41:36,740 --> 00:41:40,350 Takže, v obraze, pokiaľ sa jedná o blok pamäte pridelené sme s malloc, 937 00:41:40,350 --> 00:41:43,310 a to je t, * t znamená nájdete tu. 938 00:41:43,310 --> 00:41:46,710 >> Medzitým ste absolvovaní že hodnota, malé písmená m 939 00:41:46,710 --> 00:41:50,040 na toupper, ste stále späť kapitál M, kde ste ho dávať? 940 00:41:50,040 --> 00:41:52,410 Tie uvedení v tom istom mieste. 941 00:41:52,410 --> 00:41:55,540 A tak touto logikou tých, základné definície je to len 942 00:41:55,540 --> 00:41:58,792 kapitalizácie prvé písmeno ak iteráciu s I alebo 943 00:41:58,792 --> 00:42:02,000 cyklus for alebo while, že to nebude robiť nič viac, než si to opýtať. 944 00:42:02,000 --> 00:42:02,583 Dobrá otázka. 945 00:42:02,583 --> 00:42:03,237 Jo? 946 00:42:03,237 --> 00:42:05,369 >> Divákov: Prečo ste použiť dereferencia spôsobe skôr než 947 00:42:05,369 --> 00:42:05,979 poľa? 948 00:42:05,979 --> 00:42:07,395 >> DAVID J. Malan: Á, dobrá otázka. 949 00:42:07,395 --> 00:42:10,672 Prečo by ste používať dereferencia Spôsob namiesto metódy poľa? 950 00:42:10,672 --> 00:42:12,130 Žiadny osobitný dôvod, aby som bol úprimný. 951 00:42:12,130 --> 00:42:15,290 A v skutočnosti, pre toto druh napríklad doprava, 952 00:42:15,290 --> 00:42:17,556 Ja som len dohadovať urobiť Program zložitejšie, 953 00:42:17,556 --> 00:42:19,680 viac oči sú zasklenie nad, ľudia sú mimo kontroly 954 00:42:19,680 --> 00:42:22,830 pretože to vyzerá mimoriadne tajomný, ale aj keď to robí to isté. 955 00:42:22,830 --> 00:42:26,695 A tak, úprimne povedané, je to zbytočne vizuálne komplexné riešenie 956 00:42:26,695 --> 00:42:27,320 k problému. 957 00:42:27,320 --> 00:42:29,580 >> Je to stále dobrý dizajn, päť z piatich pre návrh, 958 00:42:29,580 --> 00:42:33,140 či už je to v držiaku notácie alebo sa kurzor notácie. 959 00:42:33,140 --> 00:42:36,299 Ale-- zvlášť keď sa dostaneme Neskôr v priebehu v pset 5 960 00:42:36,299 --> 00:42:39,340 keď sme sa realizovať tento slovník, ktorý Zmienil som sa o pár times-- 961 00:42:39,340 --> 00:42:42,300 budeme vlastne starať o pamäťové adresy nízkoúrovňové 962 00:42:42,300 --> 00:42:44,140 že sme naozaj pochopili čo sa deje. 963 00:42:44,140 --> 00:42:48,300 >> Ale teraz sa ukazuje, že táto riadok kódu tady hranatých zátvoriek 964 00:42:48,300 --> 00:42:49,900 v skutočnosti neexistujú. 965 00:42:49,900 --> 00:42:52,230 Oni sú to, čo sa nazýva syntaxe cukor, ktorý 966 00:42:52,230 --> 00:42:58,390 je len podivne chladný spôsob, ako hovoriť kompilátor prevedie hranaté zátvorky byť 967 00:42:58,390 --> 00:43:00,420 že matematický výraz. 968 00:43:00,420 --> 00:43:02,660 Takže je to ľudské konvencie aby bolo možné len písať 969 00:43:02,660 --> 00:43:04,220 Tieto veľmi užívateľsky príjemný zátvorkách. 970 00:43:04,220 --> 00:43:06,850 Ale to, čo prekladač, zvonenie, Je naozaj robia kedykoľvek 971 00:43:06,850 --> 00:43:10,970 napíšete, čo je zdôraznené v rade 24, pod kapotou je to naozaj 972 00:43:10,970 --> 00:43:12,330 premieňať to na to. 973 00:43:12,330 --> 00:43:16,200 Je to jednoducho oveľa príjemnejšie ako človek čítať a písať kód, ako je potrubie 24. 974 00:43:16,200 --> 00:43:18,530 Ale nakoniec tí, koliesok príliš zložiť 975 00:43:18,530 --> 00:43:21,780 keď niečí vlastné pohodlie dostane silnejší. 976 00:43:21,780 --> 00:43:27,240 >> Dobre, takže pripomínajú potom, že to bol druh najväčším problémom 977 00:43:27,240 --> 00:43:27,807 sme narazili na. 978 00:43:27,807 --> 00:43:30,640 A to je to, čo zapálilo tento celok sakramentsky rozhovor o ukazovatele, 979 00:43:30,640 --> 00:43:32,340 a adresy a kopírovanie veci. 980 00:43:32,340 --> 00:43:35,410 Bolo to preto, že sme zakopnúť to hlúpa, hlúpa otázka, pričom 981 00:43:35,410 --> 00:43:38,830 Som implementoval logically-- s Lauren tu na demo a pomarančového džúsu 982 00:43:38,830 --> 00:43:43,770 V milk-- dokonale algoritmickým správnu funkciu 983 00:43:43,770 --> 00:43:47,010 pre prečerpanie dve premenné " hodnoty, ale tá prekliata vec 984 00:43:47,010 --> 00:43:50,550 nemal žiadne perzistentné, alebo trvalý, vplyv na mojom kódu. 985 00:43:50,550 --> 00:43:51,820 >> A prečo to bolo? 986 00:43:51,820 --> 00:43:54,650 Stručne povedané, prečo je to implementácia swapu 987 00:43:54,650 --> 00:43:58,740 logicky správne, ale nemá žiadny vplyv o premenné, ktoré sú odovzdané k nemu, 988 00:43:58,740 --> 00:44:01,119 ako x a y na hlavnej? 989 00:44:01,119 --> 00:44:02,410 Aká bola podstata problému? 990 00:44:02,410 --> 00:44:02,909 Jo? 991 00:44:02,909 --> 00:44:05,532 Divákov: Vzhľadom k tomu, variabilný vyrobené kópia premenné v priesmyku 992 00:44:05,532 --> 00:44:06,240 prostredníctvom funkcie. 993 00:44:06,240 --> 00:44:09,060 >> DAVID J. Malan: Presne tak, keď miniete premenné do funkcie, alebo argumenty, 994 00:44:09,060 --> 00:44:11,030 do funkcie, oni sú prešiel exemplári, ktorý 995 00:44:11,030 --> 00:44:14,770 znamená, že dostanete identický hľadá vzorka bitov pre obe x a y, 996 00:44:14,770 --> 00:44:15,955 tu nazýva a b. 997 00:44:15,955 --> 00:44:18,080 A môžete robiť čokoľvek Chcete sa týchto kópií, 998 00:44:18,080 --> 00:44:20,657 ale oni budú mať žiadny Vplyv na volajúci funkciu. 999 00:44:20,657 --> 00:44:22,990 A v skutočnosti, že sme vyžrebovali obraz na obrazovke, odvolanie 1000 00:44:22,990 --> 00:44:25,520 naposledy, pričom ak ste naozaj myslíte, že o tom, čo je to 1001 00:44:25,520 --> 00:44:28,570 deje Naspodku hood-- pokiaľ To je pamäť počítača, 1002 00:44:28,570 --> 00:44:31,650 a sem je kus Pamäť sa používa pre hlavné, 1003 00:44:31,650 --> 00:44:34,020 to je kus Pamäť sa používa ako odkladací priestor, 1004 00:44:34,020 --> 00:44:37,090 a tak aj keď má hlavnú dve premenné, x a y, 1005 00:44:37,090 --> 00:44:41,840 odkladacia môžu mať totožný hľadá hodnoty, ktoré sú oba 1 a 2, 1006 00:44:41,840 --> 00:44:44,520 ale sú úplne rôzne kúsky pamäti. 1007 00:44:44,520 --> 00:44:46,130 >> Takže potrebujeme riešenie pre toto. 1008 00:44:46,130 --> 00:44:51,580 A úprimne povedané, zdá sa, že teraz majú riešenie tohto problému, vpravo. 1009 00:44:51,580 --> 00:44:55,760 Ak by sme teraz majú schopnosť manipulovať veci prostredníctvom adries 1010 00:44:55,760 --> 00:44:59,310 a, niečo šmýkačky a rebríky štýl, postupujte podľa nasledujúcich šípok 1011 00:44:59,310 --> 00:45:02,820 a ísť kamkoľvek chceme v pamäti, nemohli sme 1012 00:45:02,820 --> 00:45:06,220 vyriešiť tento problém prechodu z hlavnej vymeniť 1013 00:45:06,220 --> 00:45:09,650 nie hodnoty chceme Swap, ale len intuitívne 1014 00:45:09,650 --> 00:45:11,630 to, čo by sme mohli prejsť na miesto vymeniť? 1015 00:45:11,630 --> 00:45:12,620 >> [Vložením hlasy] 1016 00:45:12,620 --> 00:45:15,244 >> DAVID J. Malan: Prečo nie my len prejsť to adresy, je to tak? 1017 00:45:15,244 --> 00:45:17,470 Prečo dávame swap mapu pokladu, ak chcete, 1018 00:45:17,470 --> 00:45:20,950 ktorý vedie ju do Skutočné hodnoty x a y. 1019 00:45:20,950 --> 00:45:24,340 Poďme swapu, skutočne zmení tieto originálne kúsky, skôr než 1020 00:45:24,340 --> 00:45:26,797 práve prechádzajúcej kópie bitov. 1021 00:45:26,797 --> 00:45:29,130 A tak, v skutočnosti, to je to, čo je bude riešenie. 1022 00:45:29,130 --> 00:45:31,899 Táto verzia je tu jasne zlé a chybné. 1023 00:45:31,899 --> 00:45:35,190 A teraz, na prvý pohľad, to jednoducho vyzerá ako sme pridali veľa hviezd náhodne 1024 00:45:35,190 --> 00:45:37,106 a prešiel naše prsty že by to zostaviť. 1025 00:45:37,106 --> 00:45:38,460 Ale to by teraz zostaviť. 1026 00:45:38,460 --> 00:45:40,090 >> Ale poďme sa pozrieť, čo tieto veci znamenajú. 1027 00:45:40,090 --> 00:45:43,990 A bohužiaľ autori C mohol zvoliť ďalší symbol 1028 00:45:43,990 --> 00:45:46,380 aby sa tento malý jasnejšie, ale operátor hviezda 1029 00:45:46,380 --> 00:45:48,610 má iný význam v dva rôzne kontexty. 1030 00:45:48,610 --> 00:45:50,890 A videli sme obaja, ale poďme rozlišovať. 1031 00:45:50,890 --> 00:45:55,310 >> Tak sa na tam hore, keď som sa zmenil a a b 1032 00:45:55,310 --> 00:46:00,470 od bytia INT v zlej Verzia pre int hviezdy, A a B, 1033 00:46:00,470 --> 00:46:01,740 skôr, boli celé čísla. 1034 00:46:01,740 --> 00:46:05,752 Aké sú a a b teraz v dobrý, zelené verzie? 1035 00:46:05,752 --> 00:46:06,900 Sú adresy. 1036 00:46:06,900 --> 00:46:09,610 Adresy z toho, čo, aby bolo jasné? 1037 00:46:09,610 --> 00:46:10,770 Adresy celých čísel. 1038 00:46:10,770 --> 00:46:12,520 Takže k tomu, že som povediac: int hviezdička znamená, 1039 00:46:12,520 --> 00:46:15,440 to je adresa celé číslo, konkrétne. 1040 00:46:15,440 --> 00:46:19,120 >> Takže teraz oznámenia v riadky kódu, niečo iné zmenilo taky. 1041 00:46:19,120 --> 00:46:22,770 tmp zostáva rovnaký, pretože je to len dočasná celé číslo, 1042 00:46:22,770 --> 00:46:24,110 pamäťová kúzlo tam. 1043 00:46:24,110 --> 00:46:26,370 Ale teraz potrebuje hviezdu. 1044 00:46:26,370 --> 00:46:28,560 A v skutočnosti, v každom ďalšie zmienka o a a b, 1045 00:46:28,560 --> 00:46:31,780 Všimnite si, že všetko, čo je zmena z červenej na zelenú 1046 00:46:31,780 --> 00:46:34,209 je to, že som prefixing tieto premenné s hviezdami. 1047 00:46:34,209 --> 00:46:35,750 Pretože nechcem kopírovať a a b. 1048 00:46:35,750 --> 00:46:40,350 Pretože keď som len skopírovať a a b a odkladací a a b, čo mám vlastne vymieňať? 1049 00:46:40,350 --> 00:46:43,760 Len adresy, chcem vymeniť čo je v týchto adries. 1050 00:46:43,760 --> 00:46:44,860 Chcem tam ísť. 1051 00:46:44,860 --> 00:46:48,000 A tak sa operátor hviezda vnútri mojej funkcie, 1052 00:46:48,000 --> 00:46:51,700 nie vo vnútri zoznamu parametrov, znamená, že ísť na tieto adresy 1053 00:46:51,700 --> 00:46:54,490 a skutočne zmeniť tieto hodnoty. 1054 00:46:54,490 --> 00:46:56,500 >> Takže to, čo robí obrázok teraz vyzerať miesto. 1055 00:46:56,500 --> 00:47:03,250 No, keď namiesto toho som okolo in pre A a B nie 1 a 2-- 1056 00:47:03,250 --> 00:47:05,790 Vlastne som potrebné pridať jeden ďalší definície tu. 1057 00:47:05,790 --> 00:47:09,030 Takže predpokladám, že tento kus pamäte je na mieste 10. 1058 00:47:09,030 --> 00:47:12,960 >> To je v mieste 11, ale toto je kúsok zjednodušenie, 1059 00:47:12,960 --> 00:47:18,900 Teraz mám dve možnosti mám prejsť x a y alebo môžem prejsť ich adresy? 1060 00:47:18,900 --> 00:47:22,500 Keby som prejsť ich adresy takto, len som 1061 00:47:22,500 --> 00:47:25,390 Teraz je potrebné realizovať swapu na zelené kódom 1062 00:47:25,390 --> 00:47:29,080 tak, že keď je to vidia a kedy ju b vidí, že nejde len kopírovať a a b 1063 00:47:29,080 --> 00:47:30,540 a presunúť mlieko a pomarančový džús. 1064 00:47:30,540 --> 00:47:32,664 Mlieko a pomarančový džús metafora sa pokazí, 1065 00:47:32,664 --> 00:47:35,060 pretože tí sú poháre kvapalných a nie máp. 1066 00:47:35,060 --> 00:47:37,750 Namiesto toho musíme ísť osloviť 10 a my 1067 00:47:37,750 --> 00:47:42,420 musieť ísť riešiť 11, a vykonajte túto odkladanie logiku. 1068 00:47:42,420 --> 00:47:45,580 >> Takže logika je rovnaká, ale potrebujeme trochu iný spôsob, ako 1069 00:47:45,580 --> 00:47:47,160 prístupu k tieto premenné. 1070 00:47:47,160 --> 00:47:52,400 A tak na konci, to, čo Program má vyzerať ako je toto. 1071 00:47:52,400 --> 00:47:56,610 V swap.c doslovne skopírovaný a vložili zelenú verziu. 1072 00:47:56,610 --> 00:47:58,450 Ale musím urobiť jednu zmenu. 1073 00:47:58,450 --> 00:48:00,180 Nestačí len meniť swapu. 1074 00:48:00,180 --> 00:48:03,830 Aké ďalšie riadok kódu musím zmeniť? 1075 00:48:03,830 --> 00:48:04,330 Jo? 1076 00:48:04,330 --> 00:48:05,770 >> Divákov: Tam, kde to trvá argumenty. 1077 00:48:05,770 --> 00:48:07,603 >> DAVID J. Malan: Kde to vyžaduje jeho argument. 1078 00:48:07,603 --> 00:48:09,985 Takže keď som sa posunúť až na hlavné, I Nemôžete len odovzdať x a y, 1079 00:48:09,985 --> 00:48:12,820 a sľubujem, posledný kus novú syntaxou dnes. 1080 00:48:12,820 --> 00:48:17,200 Musím odovzdať nie x a y, ale adresa x a y. 1081 00:48:17,200 --> 00:48:20,400 A ukázalo sa, symbol že autori vybrali C 1082 00:48:20,400 --> 00:48:23,860 je, ak používate ampersand tu, nie byť zamieňať s bitové ampersand, 1083 00:48:23,860 --> 00:48:27,130 ak používate ampersand tu a tu ampersand, 1084 00:48:27,130 --> 00:48:29,570 to vyrieši za vás, Čo je adresa x, 1085 00:48:29,570 --> 00:48:31,740 možno je to 10, čo je adresa y, možno je to 1086 00:48:31,740 --> 00:48:35,400 11, a tie, ktoré prechádza v miesto. 1087 00:48:35,400 --> 00:48:37,210 >> Takže veľa absorbovať všetky naraz. 1088 00:48:37,210 --> 00:48:40,190 Ale pozrime sa teraz rýchlo Naši zostávajúce štyri minúty 1089 00:48:40,190 --> 00:48:42,150 kde sa veci môžu ísť nakrivo. 1090 00:48:42,150 --> 00:48:45,120 A ako stranou, v skutočnosti Vzal som si tento obrázok, 1091 00:48:45,120 --> 00:48:46,920 TF vzal tento obrázok rok alebo dva lety. 1092 00:48:46,920 --> 00:48:49,190 Tak toto je zadný roh Eliota jedálni. 1093 00:48:49,190 --> 00:48:52,310 Ukazovatele sú snáď najťažšie tému, ktoré budeme rozprávať v CS50. 1094 00:48:52,310 --> 00:48:54,810 Takže ak máte starosti ten typ svahu je ako možno je to 1095 00:48:54,810 --> 00:48:56,770 viac hokejkou takto, si uvedomiť, 1096 00:48:56,770 --> 00:49:00,160 sme trochu blíži vrchol v Podmienky koncepčného zložitosti. 1097 00:49:00,160 --> 00:49:02,300 >> A ja vychovávať to foto, pretože prisahám 1098 00:49:02,300 --> 00:49:05,920 bohu, na jeseň roku 1996, keď som sa CS50 s mojím výučby kolegami, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, posadil ma v roh Eliota D. sále pri obede, 1100 00:49:09,620 --> 00:49:12,330 alebo večera, alebo niečo sa pokúsiť aby mi pomohol pochopiť ukazovateľov. 1101 00:49:12,330 --> 00:49:16,520 A to je miesto, kde som bol týždne potom, to bolo predstavené v prednáške, keď 1102 00:49:16,520 --> 00:49:18,170 Konečne som pochopil odkazy. 1103 00:49:18,170 --> 00:49:20,590 A dúfam, že to klikne oveľa skôr pre vás. 1104 00:49:20,590 --> 00:49:23,540 Ale si to uvedomujú absolútne medzi Sofistikovanejšie témy 1105 00:49:23,540 --> 00:49:24,420 sme sa pozrel na. 1106 00:49:24,420 --> 00:49:25,819 Ale je to medzi najsilnejšie. 1107 00:49:25,819 --> 00:49:28,860 A keď si to, je to naozaj všetko len tak, aby konečne dohromady. 1108 00:49:28,860 --> 00:49:31,460 Takže buďte si istý, že nie je je potrebné pre všetkých umývadlom dnes. 1109 00:49:31,460 --> 00:49:32,980 >> Tak tu je posledný program budeme pozerať. 1110 00:49:32,980 --> 00:49:35,605 A budeme končiť s rýchle tri minúty claymation 1111 00:49:35,605 --> 00:49:37,030 vyrobený náš priateľ, Nick Parlante. 1112 00:49:37,030 --> 00:49:41,440 Tu je program, ktorý na dva najvyššie linky deklaruje premennú x a y. 1113 00:49:41,440 --> 00:49:44,780 Ktoré sú obe adresy celých čísel, AKA ukazovatele. 1114 00:49:44,780 --> 00:49:48,125 Potom sme prideliť dosť pamäť pre uloženie int 1115 00:49:48,125 --> 00:49:51,344 a uložiť adresu tejto pamäte v x. 1116 00:49:51,344 --> 00:49:53,260 Takže, je to ešte jednoduchšie než napríklad pred. 1117 00:49:53,260 --> 00:49:56,100 Daj mi štyri bajtov pamäti, to je veľkosť int, 1118 00:49:56,100 --> 00:49:58,000 a dať túto adresu x. 1119 00:49:58,000 --> 00:50:01,070 Táto linka znamená, že tu prejsť na adresu v x 1120 00:50:01,070 --> 00:50:05,270 a dal význam život, číslo 42 tam. 1121 00:50:05,270 --> 00:50:07,710 Ale tento riadok mi robí starosti. 1122 00:50:07,710 --> 00:50:12,620 Hviezda y znamená ísť na adresu v y, a dal nešťastné číslo 13 tam. 1123 00:50:12,620 --> 00:50:15,780 Prečo je to nebezpečné, v tomto bode v story-- hoci rýchlo povedal 1124 00:50:15,780 --> 00:50:17,980 v našej zmrštenie minút here-- prečo je to zlé 1125 00:50:17,980 --> 00:50:19,660 keď poviem, choďte na adresu v y? 1126 00:50:19,660 --> 00:50:21,077 >> Divákov: Nemáte [nepočuteľných]. 1127 00:50:21,077 --> 00:50:22,910 DAVID J. Malan: nemám dal čokoľvek y. 1128 00:50:22,910 --> 00:50:25,520 Takže to, čo je hodnota y, v tomto bode príbehu? 1129 00:50:25,520 --> 00:50:26,570 Nemáme tušenie. 1130 00:50:26,570 --> 00:50:29,190 Je to nejaký odpad hodnota a ani Binky vedieť. 1131 00:50:29,190 --> 00:50:32,532 Ak by sme mohli skončiť v tejto poznámke. 1132 00:50:32,532 --> 00:50:34,832 >> [Videoprehrávanie] 1133 00:50:34,832 --> 00:50:36,500 >> Hej, Binky, prebudiť. 1134 00:50:36,500 --> 00:50:39,140 Je čas na ukazovateľ zábavu. 1135 00:50:39,140 --> 00:50:40,210 >> -Čo je to? 1136 00:50:40,210 --> 00:50:41,690 Ďalšie informácie o ukazovatele? 1137 00:50:41,690 --> 00:50:43,570 Oh, dobrota. 1138 00:50:43,570 --> 00:50:46,600 >> No, aby mohli začať, myslím, že sme bude potrebovať pár rád. 1139 00:50:46,600 --> 00:50:47,380 >> -OK. 1140 00:50:47,380 --> 00:50:51,120 Tento kód prideľuje dva ukazovatele ktorý môže poukázať na celé čísla. 1141 00:50:51,120 --> 00:50:53,557 >> -OK, Dobre vidím dva ukazovatele, ale oni 1142 00:50:53,557 --> 00:50:55,140 nezdá sa, že by ukazoval na čokoľvek. 1143 00:50:55,140 --> 00:50:55,970 >> -To je správne. 1144 00:50:55,970 --> 00:50:58,100 Spočiatku na ukazovatele neukazujú na nič. 1145 00:50:58,100 --> 00:51:00,950 Veci, ktoré poukazujú na sú volal pointees a ich nastavenie 1146 00:51:00,950 --> 00:51:02,330 je samostatný krok. 1147 00:51:02,330 --> 00:51:03,210 >> Oh, jasne, jasne. 1148 00:51:03,210 --> 00:51:03,940 Vedel som to. 1149 00:51:03,940 --> 00:51:05,730 Tieto pointees sú oddelené. 1150 00:51:05,730 --> 00:51:08,310 Tak ako sa vám prideliť pointee? 1151 00:51:08,310 --> 00:51:11,960 >> -OK, No to kód alokuje nové číslo pointee, 1152 00:51:11,960 --> 00:51:15,050 a Táto časť stanovuje x poukázať na to. 1153 00:51:15,050 --> 00:51:16,240 >> Hej, to vyzerá lepšie. 1154 00:51:16,240 --> 00:51:17,743 Tak, aby to niečo urobiť. 1155 00:51:17,743 --> 00:51:23,580 >> -OK, Budem dereferencia ukazovateľ x do uložiť číslo 42 do jeho pointee. 1156 00:51:23,580 --> 00:51:27,130 Pre tento trik, budem potrebovať moje kúzelná palička dereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> -Váš Kúzelná palička dereferencing? 1158 00:51:30,200 --> 00:51:32,310 Uh, to, to je skvelé. 1159 00:51:32,310 --> 00:51:34,270 >> Toto je to, čo kód vyzerá. 1160 00:51:34,270 --> 00:51:35,970 Ja si len nastaviť číslo a-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> Hej, pozrite sa tam to ide. 1163 00:51:39,140 --> 00:51:43,980 Takže, robí dereferencia na x nasleduje šípka na prístup k jeho pointee. 1164 00:51:43,980 --> 00:51:46,150 V tomto prípade, na uloženie 42 tam. 1165 00:51:46,150 --> 00:51:50,700 Hej, skúste použiť na ukladanie číslo 13 prostredníctvom druhého ukazovatele, y. 1166 00:51:50,700 --> 00:51:51,840 >> -OK. 1167 00:51:51,840 --> 00:51:56,270 Pôjdem sem na y, a získať číslo 13 nastaviť. 1168 00:51:56,270 --> 00:52:00,380 A potom sa paličku dereferencing a jen-- 1169 00:52:00,380 --> 00:52:01,646 >> [Bzučiak] 1170 00:52:01,646 --> 00:52:04,080 >> Oh, hej to nefungovalo. 1171 00:52:04,080 --> 00:52:06,470 Povedzme, uh, Binky, vôbec sa mi nepáči myslíte dereferencing 1172 00:52:06,470 --> 00:52:10,850 y je to dobrý nápad, pretože nastavenie up na pointee je samostatný krok. 1173 00:52:10,850 --> 00:52:12,480 A nemyslím si, že sme kedy urobili. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Dobrý postreh. 1175 00:52:14,620 --> 00:52:19,810 >> Jo, máme pridelené ukazovateľ, y, ale nikdy sme ju nastavte na poukazujú na pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Veľmi pozorný. 1177 00:52:21,590 --> 00:52:23,215 Hej, vy hľadáte dobre tam, Binky. 1178 00:52:23,215 --> 00:52:26,390 Môžete to opraviť tak, aby y body na rovnakú pointee ako x. 1179 00:52:26,390 --> 00:52:29,290 >> Jasné, som použiť svoj čarovnou paličkou priradenie ukazovatele. 1180 00:52:29,290 --> 00:52:31,970 >> -Je Že Bude to Problém, ako predtým? 1181 00:52:31,970 --> 00:52:33,790 >> Nie, to nie dotýkať pointees. 1182 00:52:33,790 --> 00:52:35,840 Je to len jeden ukazovateľ zmení poukázať na rovnakej thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [Praskavý zvuk] 1184 00:52:36,465 --> 00:52:37,450 --as iného. 1185 00:52:37,450 --> 00:52:38,440 >> -OH vidím. 1186 00:52:38,440 --> 00:52:41,200 Teraz y odkazuje na rovnakom mieste ako x. 1187 00:52:41,200 --> 00:52:42,950 Takže, počkajte, teraz y je pevná. 1188 00:52:42,950 --> 00:52:44,110 To má pointee. 1189 00:52:44,110 --> 00:52:47,779 Takže si môžete vyskúšať prútik dereferencing znovu odoslať 13 konca. 1190 00:52:47,779 --> 00:52:51,110 >> Oh, OK, tu ide. 1191 00:52:51,110 --> 00:52:52,330 >> Hej, pozri sa na to. 1192 00:52:52,330 --> 00:52:53,570 Teraz dereferencing práce na y. 1193 00:52:53,570 --> 00:52:57,900 A pretože ukazovatele sú zdieľanie že jeden pointee, obaja viď 13. 1194 00:52:57,900 --> 00:52:59,952 >> Jo, zdieľanie, uh, čokoľvek. 1195 00:52:59,952 --> 00:53:01,535 Takže, budeme prejsť miesta teraz? 1196 00:53:01,535 --> 00:53:03,730 >> Oh, pozri sme mimo čas. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -Len Pamätajte na tri pravidlá ukazovateľ. 1199 00:53:06,520 --> 00:53:09,550 Číslo 1, základná štruktúra je, že máte ukazovateľ, 1200 00:53:09,550 --> 00:53:11,630 a poukazuje cez k pointee. 1201 00:53:11,630 --> 00:53:13,740 Ale ukazovateľ a pointee sú oddelené. 1202 00:53:13,740 --> 00:53:15,620 A Častou chybou je nastaviť ukazovateľ 1203 00:53:15,620 --> 00:53:18,000 ale zabudnúť, aby to pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Číslo 2, ukazovateľ dereferencing začína na ukazovateľ 1205 00:53:21,170 --> 00:53:24,020 a sleduje jeho šípku nad pre prístup k pointee. 1206 00:53:24,020 --> 00:53:27,815 Ako všetci vieme, to funguje iba v prípade, že je pointee, aký druh dostane späť 1207 00:53:27,815 --> 00:53:29,260 na pravidlo číslo 1. 1208 00:53:29,260 --> 00:53:31,990 >> Číslo 3, ukazovateľ Priradenie trvá jeden ukazovateľ 1209 00:53:31,990 --> 00:53:35,330 a menia ho, aby ukazoval na Rovnaký pointee ako ďalší ukazovateľ. 1210 00:53:35,330 --> 00:53:37,150 Takže po zadaní, dva ukazovatele 1211 00:53:37,150 --> 00:53:40,927 bude ukazovať na rovnakej pointee, Niekedy sa hovorí, že zdieľanie. 1212 00:53:40,927 --> 00:53:42,510 A to je všetko, čo je k tomu, naozaj. 1213 00:53:42,510 --> 00:53:43,130 Zbohom teraz. 1214 00:53:43,130 --> 00:53:43,475 >> [END Prehrávanie] 1215 00:53:43,475 --> 00:53:44,830 >> DAVID J. Malan: To je pre CS50. 1216 00:53:44,830 --> 00:53:46,246 Vďaka profesorovi Nick Parlante. 1217 00:53:46,246 --> 00:53:47,730 Uvidíme sa budúci týždeň. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [ELECTRONIC prehrávanie hudby] 1220 00:53:56,435 --> 00:57:22,775