1 00:00:00,000 --> 00:00:03,395 >> [Přehrávání hudby] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 DAVID J. Malan: To je jako nováček seminář dnes. 4 00:00:13,280 --> 00:00:14,060 DOBŘE. 5 00:00:14,060 --> 00:00:15,024 Takže velmi deštivé ven. 6 00:00:15,024 --> 00:00:17,690 To má tendenci stát se ve středu, ale o to více příležitostí 7 00:00:17,690 --> 00:00:18,700 pro dotazy dnes. 8 00:00:18,700 --> 00:00:22,210 Takže pojďme začít skutečně s filmem za chvíli. 9 00:00:22,210 --> 00:00:24,560 Ale začneme vznešeně jako vždy. 10 00:00:24,560 --> 00:00:28,000 >> To je CS50, a to je konec týdne 4. 11 00:00:28,000 --> 00:00:30,820 Takže pokud jste někdy sledovali Televize nebo filmu, kde 12 00:00:30,820 --> 00:00:34,690 tam je nějaký počítačoví experti a policie, nebo FBI, nebo nějaká agentura 13 00:00:34,690 --> 00:00:36,930 se snaží chytit nějaké protivník, no, jsem 14 00:00:36,930 --> 00:00:40,850 pravděpodobně slyšeli výraz "posílit," čímž že technik jaksi 15 00:00:40,850 --> 00:00:44,750 magicky zvětší nekonečně daleko vidět zločince 16 00:00:44,750 --> 00:00:48,640 totožnosti nebo SPZ i v tom třpytu zrcadla 17 00:00:48,640 --> 00:00:50,390 nebo záblesk něčí oko. 18 00:00:50,390 --> 00:00:55,196 Takže opravdu, pojďme se podívat na jen pár takových scén z Hollywoodu. 19 00:00:55,196 --> 00:00:55,862 [VIDEOPŘEHRÁVÁNÍ] 20 00:00:55,862 --> 00:00:59,243 -OK, Teď pojďme dobré podívat se na vás. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Držet to. 23 00:01:07,415 --> 00:01:08,267 Spustit to zpátky. 24 00:01:08,267 --> 00:01:09,121 >> -Počkej chvíli. 25 00:01:09,121 --> 00:01:11,300 Jděte doprava. 26 00:01:11,300 --> 00:01:12,209 >> -Je, Zmrazit, že. 27 00:01:12,209 --> 00:01:12,750 -Celá obrazovka. 28 00:01:12,750 --> 00:01:13,558 -OK, Zmrazit, že. 29 00:01:13,558 --> 00:01:14,820 Zpřísnění při současném se na to, že budete? 30 00:01:14,820 --> 00:01:16,530 -Vector V na to člověk od zadního kola. 31 00:01:16,530 --> 00:01:19,400 -zvětšení Přímo tady na tomto místě. 32 00:01:19,400 --> 00:01:22,846 -S Pravé zařízení, obrázek by mohl být rozšířen a naostřené. 33 00:01:22,846 --> 00:01:24,065 -Co je to? 34 00:01:24,065 --> 00:01:25,600 -To Je program vylepšení. 35 00:01:25,600 --> 00:01:26,860 Umíš jasné, že se nějaké? 36 00:01:26,860 --> 00:01:27,890 Já nevím. 37 00:01:27,890 --> 00:01:29,050 Pojďme zvýšení. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Část A6. 39 00:01:31,575 --> 00:01:33,642 >> -I Lepší detail, a-- Myslím, že je 40 00:01:33,642 --> 00:01:35,433 dostatečně zvýšit, uvolněte ji na mé obrazovce. 41 00:01:35,433 --> 00:01:37,080 -I Lepší odraz v očích. 42 00:01:37,080 --> 00:01:38,830 >> -Nech To běh toto přes vylepšení videa. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Můžete zvýšit tohle? 44 00:01:40,100 --> 00:01:41,875 >> -Vydrž. 45 00:01:41,875 --> 00:01:44,010 >> -I've Pracuje na této ú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žova obličeje. 49 00:01:47,399 --> 00:01:48,065 -The Reflexe. 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 zrcadlo. 52 00:01:50,600 --> 00:01:52,712 -Můžete Vidět odraz. 53 00:01:52,712 --> 00:01:54,350 Umíš zlepšit obraz odsud? 54 00:01:54,350 --> 00:01:55,370 Umíš ho zlepšit tady? 55 00:01:55,370 --> 00:01:56,210 Umíš to zlepšit? 56 00:01:56,210 --> 00:01:56,900 Můžeš to zlepšit? 57 00:01:56,900 --> 00:01:57,870 >> -Lze Zvyšujeme to? 58 00:01:57,870 --> 00:01:58,717 >> Umíš to zlepšit? 59 00:01:58,717 --> 00:02:00,050 -Hold Na vteřinu, budu zvýšit. 60 00:02:00,050 --> 00:02:00,924 -zvětšení Na dveře. 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 -Nastěhování. 64 00:02:03,490 --> 00:02:03,990 -Více. 65 00:02:03,990 --> 00:02:04,690 Počkat, zastavit. 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ňů kolem vertikální, prosím. 69 00:02:09,460 --> 00:02:10,962 -Stop. 70 00:02:10,962 --> 00:02:14,040 Vraťte se do části o dveře, znovu. 71 00:02:14,040 --> 00:02:15,860 >> -Máš S Image Enhancer, která může rastrový obrázek? 72 00:02:15,860 --> 00:02:18,776 >> Hej, možná můžeme použít Pradeep Metoda Sen vidět do oken. 73 00:02:18,776 --> 00:02:20,372 Tohle software 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 Kombinace algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> Přijata eliminace -Je algoritmy na další úroveň, 77 00:02:26,755 --> 00:02:28,730 a já se je použít k zlepšit tuto fotografii. 78 00:02:28,730 --> 00:02:31,286 >> Blok dál a rozšířit osu z. 79 00:02:31,286 --> 00:02:32,560 >> -Zlepšit. 80 00:02:32,560 --> 00:02:33,100 >> -Zlepšit. 81 00:02:33,100 --> 00:02:33,600 >> -Zlepšit. 82 00:02:33,600 --> 00:02:34,960 -Freeze A zlepšit. 83 00:02:34,960 --> 00:02:37,180 >> [END Přehrávání] 84 00:02:37,180 --> 00:02:41,160 >> DAVID J. Malan: Dobře, tak všechny z nich jsou ve skutečnosti slova. 85 00:02:41,160 --> 00:02:44,450 Jsou to jen navlečené dohromady v tak, že to ve skutečnosti není rozumné. 86 00:02:44,450 --> 00:02:48,400 A ve skutečnosti, CS50 a kurzy líbí inklinuje zničit hodně televizi a filmy 87 00:02:48,400 --> 00:02:48,900 pro tebe. 88 00:02:48,900 --> 00:02:52,330 Vzhledem k tomu, když ty počítačové odborníky jsou drnčení off termíny a říkat 89 00:02:52,330 --> 00:02:56,860 efektní věci, jako je vlastní vektory, a z osy, 90 00:02:56,860 --> 00:02:59,572 a jakýkoliv počet jiné ve skutečnosti více technické termíny, 91 00:02:59,572 --> 00:03:02,030 jsou to opravdu jen navléci Slova spolu příliš často. 92 00:03:02,030 --> 00:03:05,020 Je to jeden z našich nadějí je, jako vedlejší účinek přijetí kurzů 93 00:03:05,020 --> 00:03:08,245 jako je tato, bude více lidí do world skutečně schopna vážit 94 00:03:08,245 --> 00:03:12,040 a jen někdy tak trochu ovlivnit kvalita a přesnost těchto filmů? 95 00:03:12,040 --> 00:03:14,350 >> Ve skutečnosti, pojďme se podívat na realitu. 96 00:03:14,350 --> 00:03:18,070 Takže tady je zaměstnanci foto Marie, jeden z našich výukových chlapi. 97 00:03:18,070 --> 00:03:20,050 A předpokládám, že ona je podezřelý z něčeho. 98 00:03:20,050 --> 00:03:23,730 A přesto, je tu jiskřička někteří důkaz v oku, 99 00:03:23,730 --> 00:03:25,480 nebo v odrazu jejích brýlí. 100 00:03:25,480 --> 00:03:30,760 No, pokud budeme dělat přesně to, co filmy navrhovat, kde jsme se přiblížit a "zvýšit", 101 00:03:30,760 --> 00:03:34,080 To je, kolik informací je v Mariině tváři 102 00:03:34,080 --> 00:03:36,795 Při pořizování snímku s původním rozlišení. 103 00:03:36,795 --> 00:03:39,120 >> A ve skutečnosti, můžete vidět tyto body. 104 00:03:39,120 --> 00:03:41,900 A to jsou jaké jsou tzv pixelů, P-I-X-E-L-S, 105 00:03:41,900 --> 00:03:45,740 což je jen čtverec typicky to je bod, který komponuje snímek. 106 00:03:45,740 --> 00:03:49,200 A zpět v den, a vlastně i dnes s některými z dnešních LED televizory 107 00:03:49,200 --> 00:03:51,950 nebo LCD televizory, pokud máte člověk ve svém pokoji, nebo doma, 108 00:03:51,950 --> 00:03:55,100 pokud jste jít až velmi blízko k ní, a zvláště pokud je to poněkud starší TV, 109 00:03:55,100 --> 00:03:58,760 můžete pravděpodobně ještě vidět tyto tečky a to je to, co kompozici snímku. 110 00:03:58,760 --> 00:04:00,980 >> A není tam žádný další informace, než je tato. 111 00:04:00,980 --> 00:04:05,400 Mohli bychom "zvýšit", v tom smyslu, vyhlazení věci znovu a druh 112 00:04:05,400 --> 00:04:09,040 vyvozování druh, tak nějak to, co Barva by měla být vedle Marie oko 113 00:04:09,040 --> 00:04:10,910 takže to není vlastně tak pixelated. 114 00:04:10,910 --> 00:04:14,510 Ale když jsem pořád přiblížení, tam je špatný člověk v oku. 115 00:04:14,510 --> 00:04:16,600 Stejně jako, že je o informace, které máme. 116 00:04:16,600 --> 00:04:18,920 Nemůžete vytvořit Informace z ničeho. 117 00:04:18,920 --> 00:04:20,790 Je tu jen konečný počet bitů tam. 118 00:04:20,790 --> 00:04:22,873 >> Takže Zadání problému 4, kde máte možnost 119 00:04:22,873 --> 00:04:24,580 hrát si s tímto druhem světa. 120 00:04:24,580 --> 00:04:27,610 V Zadání problému 4, budete prozkoumat svět grafiky a forenzní, 121 00:04:27,610 --> 00:04:30,870 a vlastně psát kód že obnovuje ztracená obrázky. 122 00:04:30,870 --> 00:04:33,510 Budete psát kód, který manipuluje existujících snímků 123 00:04:33,510 --> 00:04:36,120 a nakonec pochopit, co je to děje pod kapotou. 124 00:04:36,120 --> 00:04:38,540 >> A to dopadá, je to vlastně není všechno tak složité. 125 00:04:38,540 --> 00:04:41,320 Například, pokud chceme představují smajlíky kde 126 00:04:41,320 --> 00:04:44,160 s těmito černé pixely, nebo jsou tyto černé tečky, 127 00:04:44,160 --> 00:04:47,230 dobře, mohli bychom jednoduše představovat je jako opravdu bitmapy. 128 00:04:47,230 --> 00:04:50,040 A pokud jste měli někdy slyšeli, že výraz bitmap, snad 129 00:04:50,040 --> 00:04:52,330 Nyní začne, aby se trochu větší smysl dnes. 130 00:04:52,330 --> 00:04:53,580 >> Už víme, co je to trochu je. 131 00:04:53,580 --> 00:04:54,160 To je 0 nebo 1. 132 00:04:54,160 --> 00:04:56,201 A Mapa je prostě něco, jako kus papíru 133 00:04:56,201 --> 00:04:59,180 která vám dává pokyny a má možná mřížka X a Y souřadnic. 134 00:04:59,180 --> 00:05:00,540 Takže tady je bitmapový. 135 00:05:00,540 --> 00:05:03,680 Je to mapa bitů přičemž 1 je zřejmě 136 00:05:03,680 --> 00:05:07,857 bude reprezentovat bílé pixelu, a 0 bude reprezentovat černou pixelu. 137 00:05:07,857 --> 00:05:09,440 Ale my jsme mohli jistě hodit kolem. 138 00:05:09,440 --> 00:05:11,648 To není opravdu jedno, tak Dokud jsme důslední. 139 00:05:11,648 --> 00:05:15,570 A tady je, jak, v binary-- uvnitř z paměti počítače, nebo dokonce i uvnitř 140 00:05:15,570 --> 00:05:18,160 na soubor na pevném drive-- byste mohli uložit 141 00:05:18,160 --> 00:05:20,240 nejjednodušší smajlíkem obrazů. 142 00:05:20,240 --> 00:05:23,990 Ale to, co jsme, samozřejmě, chybí 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é, další krok, nebo Vylepšení zlepšit to s barvou. 145 00:05:28,220 --> 00:05:32,230 Takže bohužel se jen jeden bit, 0 nebo 1, můžeme znázornění barev. 146 00:05:32,230 --> 00:05:36,100 To by mohlo být červené, nebo modré černá, nebo bílá, nebo zelená, nebo růžové, 147 00:05:36,100 --> 00:05:37,420 nebo jakékoliv párů barev. 148 00:05:37,420 --> 00:05:40,860 Ale pro jednoduchost, budeme jen předpokládat, černé a bílé. 149 00:05:40,860 --> 00:05:45,930 >> Takže to, co logicky potřebujeme, kdybychom chtějí zavést barvy v obraze? 150 00:05:45,930 --> 00:05:49,080 Co musíme udělat? 151 00:05:49,080 --> 00:05:51,900 Stejně jako v případě, že limitujícím faktorem je zde je, že s jedním bitem můžete pouze 152 00:05:51,900 --> 00:05:55,977 představují dva státy, 0 nebo 1, bílý nebo černý, co chceš dělat? 153 00:05:55,977 --> 00:05:56,810 Diváků: další data. 154 00:05:56,810 --> 00:05:58,813 DAVID J. Malan: Více bitů, jo více dat, více bitů. 155 00:05:58,813 --> 00:06:01,440 A opravdu, to je přesně to, jak barevné obrazy jsou zastoupeny. 156 00:06:01,440 --> 00:06:05,120 Spíše než používat jeden bit, je 0 nebo 1 pro každý obrazový bod, každá tečka, 157 00:06:05,120 --> 00:06:06,170 stačí použít násobek. 158 00:06:06,170 --> 00:06:09,660 Možná použití 8, možná více obyčejně použití 24, a opravdu, v Zadání problému 159 00:06:09,660 --> 00:06:13,300 4, budete hrát se souborem formát, který používá 24 bitů obvykle. 160 00:06:13,300 --> 00:06:15,430 >> Ale většina z vás pravděpodobně obeznámeni s JPEG. 161 00:06:15,430 --> 00:06:17,460 Pokud jste někdy vzít Fotografie na vašem telefonu, 162 00:06:17,460 --> 00:06:20,360 nebo uložit nebo něco vidět na Facebook, Flickr nebo libovolný počet 163 00:06:20,360 --> 00:06:24,882 webových stránek foto-based, nemáš Před pravděpodobně viděli obrázek JPEG. 164 00:06:24,882 --> 00:06:27,840 A ukázalo se, je to soubor formát budeme používat v pset 4, 165 00:06:27,840 --> 00:06:30,340 kdy budete muset obnovit obrázky 166 00:06:30,340 --> 00:06:35,160 že jsem omylem smazané od A poškozené paměťové karty ve fotoaparátu, 167 00:06:35,160 --> 00:06:35,800 chcete-li. 168 00:06:35,800 --> 00:06:38,490 >> A ukázalo se, že i když JPEG je docela sophisticated-- 169 00:06:38,490 --> 00:06:40,906 je to mnohem složitější než černých a bílých teček 170 00:06:40,906 --> 00:06:44,480 jsme viděli před chvílí, protože tam je skutečně efektní algoritmy, které 171 00:06:44,480 --> 00:06:47,410 se používá ke kompresi JPEG, takže že můžete mít opravdu pěkné, 172 00:06:47,410 --> 00:06:49,832 kvalita obrazu, ale s použitím relativně málo kousků. 173 00:06:49,832 --> 00:06:51,790 A vrátíme se do komprese zanedlouho. 174 00:06:51,790 --> 00:06:56,280 Ukazuje se, že první tři byty v image-- JPEG 175 00:06:56,280 --> 00:07:02,750 bez ohledu na to, co jste si vzal fotografii of-- jsou hodnoty 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Jinými slovy, pokud jste právě vidět, že vzorek bitů, 177 00:07:05,990 --> 00:07:09,180 zde zastoupeny jak tři bajtů nebo 24 bitů celkem, 178 00:07:09,180 --> 00:07:13,810 s vysokou pravděpodobností lze usuzovat, že hledáte se na to první tři 179 00:07:13,810 --> 00:07:15,230 bajtů JPEG. 180 00:07:15,230 --> 00:07:18,040 A to je to, co je známo jako podpis ve formátu JPEG. 181 00:07:18,040 --> 00:07:20,540 Mnoho formátů souborů tam obvykle začínají 182 00:07:20,540 --> 00:07:23,735 s některými vzory 0s a 1s, tak, že systém Windows a Mac OS a iOS, 183 00:07:23,735 --> 00:07:28,272 a Android vědět, jaký druh souboru, který jsou, kromě tzv souboru 184 00:07:28,272 --> 00:07:29,730 rozšíření, které velké množství souborů má. 185 00:07:29,730 --> 00:07:32,590 Pokud jste .jpg, to je další vodítko k počítači. 186 00:07:32,590 --> 00:07:35,310 >> Takže pojďme se nyní podívat na to trochu více technicky. 187 00:07:35,310 --> 00:07:37,390 Známe desetinné systém je 0 až 9. 188 00:07:37,390 --> 00:07:38,740 Víme, že binární je 0 a 1. 189 00:07:38,740 --> 00:07:41,842 A pokud si myslíte, zpět do pset 0, měli jsme vás zápasit s, 190 00:07:41,842 --> 00:07:43,800 pro trochu, něco volal hexadecimální, 191 00:07:43,800 --> 00:07:47,320 kde budete mít 16 číslic, místo 10, nebo místo 2. 192 00:07:47,320 --> 00:07:50,405 A ty číslice, podle konvence, jsou od 0 do 9 a poté 193 00:07:50,405 --> 00:07:55,040 až f, kde f představuje to, co desetinné číslo, stejně jako rychlý zdravý rozum 194 00:07:55,040 --> 00:07:56,640 zkontrolovat? 195 00:07:56,640 --> 00:07:57,610 Tak, 15. 196 00:07:57,610 --> 00:08:01,390 A musí představovat 10, jen tím, povaze uspořádání, které jsem dané. 197 00:08:01,390 --> 00:08:04,350 Je to jen svévolnými konvencemi, ale je to docela běžná. 198 00:08:04,350 --> 00:08:06,870 >> Takže pokud se podíváme na tohoto vzoru ze tří bytes-- pojďme 199 00:08:06,870 --> 00:08:09,620 jen začít se na to podívat v souladu s tím, jak 200 00:08:09,620 --> 00:08:12,450 počítačoví odborníci obecně podívat se na a přemýšlet o souborech. 201 00:08:12,450 --> 00:08:15,580 Určitě můžete přemýšlet o tom, soubory v 0s a 1s, a desetinná, 202 00:08:15,580 --> 00:08:19,340 ale ve skutečnosti, máme tendenci používat binární nebo více typicky hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 zpět z pset 0. 204 00:08:20,760 --> 00:08:25,857 Dovolte mi tedy navrhnout, aby 255, 216 a 255 jsou právě tyto vzory 0s a 1s. 205 00:08:25,857 --> 00:08:28,440 A můžete to zkontrolovat, zda jste Chcete si to spočítejte od týdne 0. 206 00:08:28,440 --> 00:08:30,810 Ale teď, jen předpokládat, že toto je opravdu správné. 207 00:08:30,810 --> 00:08:33,850 Právě jsem přepsat tři desetinná Čísla jako tři binární hodnoty. 208 00:08:33,850 --> 00:08:36,100 A teď, co budu dělat, je stačí přidat nějaký bílý prostor, 209 00:08:36,100 --> 00:08:37,266 jen pro Čitelnost příčinu. 210 00:08:37,266 --> 00:08:39,940 A upozornění, já jsem prostě jít přesunout věci od sebe. 211 00:08:39,940 --> 00:08:43,090 Tak před, po, před, po. 212 00:08:43,090 --> 00:08:46,180 Dělám nic zajímavého ostatní než jen šíří věci tak, 213 00:08:46,180 --> 00:08:50,380 že oznámení každá sada osmi bitů je nyní dvě sady čtyř bitů. 214 00:08:50,380 --> 00:08:54,920 To je užitečné, protože hexadecimální je obzvláště v módě 215 00:08:54,920 --> 00:09:00,930 protože každý hexadecimální znak 0 až f, nebo konkrétněji 0 až 15, 216 00:09:00,930 --> 00:09:03,430 mohou být reprezentovány s přesně čtyři bity. 217 00:09:03,430 --> 00:09:07,960 Jinými slovy, pokud jste v šestnáctkové soustavě chtějí reprezentovat 0, je to jen 0000, 218 00:09:07,960 --> 00:09:08,780 čtyři nuly. 219 00:09:08,780 --> 00:09:13,997 A pokud chcete reprezentovat 15, to je 1111, což je čtyři bity. 220 00:09:13,997 --> 00:09:16,080 A pokud si to spočítejte, pokud se jedná o ty, místo, 221 00:09:16,080 --> 00:09:18,210 To je místo, 16S, že se chystá dát vás-- 222 00:09:18,210 --> 00:09:19,960 spíše, co se děje to-- líto, v binární, 223 00:09:19,960 --> 00:09:23,660 , co se děje, aby vám 15, ty místa, Dvojky místo, čtyři a osmičky místo. 224 00:09:23,660 --> 00:09:26,821 Dovolte mi tedy, že navrhne, aby Sada čtyř bitů, na levé straně 225 00:09:26,821 --> 00:09:28,070 je to, co budeme říkat f. 226 00:09:28,070 --> 00:09:30,110 Je to největší číslo může představovat čtyři bity. 227 00:09:30,110 --> 00:09:33,300 A my už víme z šestnáctkové, f je největší číslice v šestnáctkové soustavě. 228 00:09:33,300 --> 00:09:36,020 Máme další f tam, další dva támhle. 229 00:09:36,020 --> 00:09:38,980 A teď, jen se na víru že jsem udělal matematický právo 230 00:09:38,980 --> 00:09:41,890 a že levá polovina z těchto bitů, 1101, 231 00:09:41,890 --> 00:09:43,980 je totéž jako D v hexadecimální soustavě. 232 00:09:43,980 --> 00:09:46,490 A pravá ruka, 1000, se nachází pouhých 8. 233 00:09:46,490 --> 00:09:48,140 >> A ten člověk je snadné vidět, že jo? 234 00:09:48,140 --> 00:09:51,670 8 represents-- má pravdu pod tímto osmý místě. 235 00:09:51,670 --> 00:09:56,040 Takže máme jeden ve sloupci osmý a nic ve čtyřech, dvojky nebo ty. 236 00:09:56,040 --> 00:09:59,830 Takže nyní více konvenčně, lidé mají tendenci zapisovat hexadecimální číslice, jako je tato, 237 00:09:59,830 --> 00:10:03,000 stačí přebít dohromady, a pak je prefix 0x. 238 00:10:03,000 --> 00:10:05,920 To znamená, že nic jiného než vizuální vodítko k human-- 239 00:10:05,920 --> 00:10:10,350 přichází hexadecimální value--, protože to by mohlo jinak být zřejmé. 240 00:10:10,350 --> 00:10:13,629 >> Což znamená, že v konečném důsledku, že vzor nul a jedniček, 241 00:10:13,629 --> 00:10:16,170 nebo vzor hexadecimální Číslice ekvivalentně, že jste 242 00:10:16,170 --> 00:10:18,990 začnou hledat v Zadání problému 4 tohle-- 243 00:10:18,990 --> 00:10:22,120 a problém Set 4 spec bude chodit jste přes to ve více detail-- 244 00:10:22,120 --> 00:10:25,344 ale uvědomit si, jak druh Arcane as to může vypadat na první pohled, 245 00:10:25,344 --> 00:10:27,010 se chystáte začít vidět to hodně. 246 00:10:27,010 --> 00:10:30,320 A ve skutečnosti, dokonce i v GDB se debugger jsme představili v pondělí 247 00:10:30,320 --> 00:10:35,440 a Dan představí v pset 3, se děje často ukáže hexadecimální hodnoty 248 00:10:35,440 --> 00:10:39,910 jen proto, že mají tendenci být více konvenční než desítkové nebo binární 249 00:10:39,910 --> 00:10:41,157 ve světě počítačů. 250 00:10:41,157 --> 00:10:42,490 A teď pojďme dát to do kontextu. 251 00:10:42,490 --> 00:10:48,040 Mnozí z vás by mohl pamatovat Fotografie: tady, který přišel z čeho? 252 00:10:48,040 --> 00:10:51,240 Vista, takže ještě dříve, než to, že systém Windows XP to udělal debut. 253 00:10:51,240 --> 00:10:52,620 Takže tohle je krásná krajina. 254 00:10:52,620 --> 00:10:55,940 A ve skutečnosti, pokud se v kurzu porozhlédnout online-- Myslím, že je to článek Wikipedie, 255 00:10:55,940 --> 00:11:00,110 kde někdo velmi překvapivě vyšel našel místo na světě, nastavit 256 00:11:00,110 --> 00:11:02,240 jeho nebo její kamera ve přesně pravý place-- 257 00:11:02,240 --> 00:11:06,510 a to dnes vypadá, ale jako-- je to přesně stejné nastavení. 258 00:11:06,510 --> 00:11:10,060 Tento obraz, i když je v souboru formát nazvaný bitmap, b-m-p. 259 00:11:10,060 --> 00:11:12,910 A budeme brát super Rychlý pohled na to, co to znamená. 260 00:11:12,910 --> 00:11:17,770 >> Ale bitmapa je jen jiný způsob, jak představující obrazy stále používáte pixelů 261 00:11:17,770 --> 00:11:19,580 na 0s a 1s, nakonec. 262 00:11:19,580 --> 00:11:23,282 Ale v letmém pohledu, to má zajímavější podpis 263 00:11:23,282 --> 00:11:24,490 Na začátku souboru. 264 00:11:24,490 --> 00:11:26,670 Není to jen tři bajtů, spíše je tu 265 00:11:26,670 --> 00:11:30,770 celá parta vzorců bytů že mít předem stanovená význam. 266 00:11:30,770 --> 00:11:34,490 Například, někde v Prvních pár bajtů bitmapový obraz 267 00:11:34,490 --> 00:11:37,440 bude velikost z obrazu, šířka obrázku, 268 00:11:37,440 --> 00:11:40,390 výška obrazu, takže užitečné metadata, chcete-li. 269 00:11:40,390 --> 00:11:43,940 Užitečné informace, které Photoshop nebo jakékoliv grafický program, který používáte 270 00:11:43,940 --> 00:11:45,180 by ve skutečnosti mohly záleží. 271 00:11:45,180 --> 00:11:47,170 >> Takže o tom více v Zadání problému 4, ale to 272 00:11:47,170 --> 00:11:49,220 je pouze říci, že na konci dne 273 00:11:49,220 --> 00:11:52,390 všechny formáty soubor, který jste používali pro years-- soubory Microsoft Word, 274 00:11:52,390 --> 00:11:55,820 Čísla soubory, soubory Excel, Libovolný počet formátů souborů 275 00:11:55,820 --> 00:11:57,770 které by mohly mít některé známa přípona souboru 276 00:11:57,770 --> 00:12:00,130 jsou jen 0 a 1 pod pokličku. 277 00:12:00,130 --> 00:12:02,970 A lidé se rozhodli, co konvence jsou, 278 00:12:02,970 --> 00:12:08,340 jaké vzory 0s a 1s představují Word soubor oproti souboru Excel, 279 00:12:08,340 --> 00:12:10,322 proti libovolným počtem jiných formátů souborů. 280 00:12:10,322 --> 00:12:12,780 Takže pset 4, budete mít možnost hrát s tím. 281 00:12:12,780 --> 00:12:14,405 >> Ale co to znamená, že mají struct. 282 00:12:14,405 --> 00:12:18,012 To je vlastně hezký segue nyní do C, který má jen pár 283 00:12:18,012 --> 00:12:20,220 o další funkce, které jsme se podíval na dosud. 284 00:12:20,220 --> 00:12:24,230 Je to docela malý jazyk a jeden z pěkných vlastností o C, je struct. 285 00:12:24,230 --> 00:12:27,300 Například, pokud jste chtěl represent-- pojďme 286 00:12:27,300 --> 00:12:33,690 že jste chtěli mít proměnné představuje student v nějakém programu. 287 00:12:33,690 --> 00:12:37,330 Možná jste psali kurz registrace programu, nebo jádro nákupy 288 00:12:37,330 --> 00:12:38,870 nástroj, nebo něco takového. 289 00:12:38,870 --> 00:12:42,922 Jaké jsou kusy dat souvisejících studentovi, které přicházejí na mysl? 290 00:12:42,922 --> 00:12:44,880 Stejně jako student reprezentován se, jaké hodnoty? 291 00:12:44,880 --> 00:12:45,732 To jo? 292 00:12:45,732 --> 00:12:46,940 Máte jméno jako student. 293 00:12:46,940 --> 00:12:48,900 Co ještě typický studentka mít? 294 00:12:48,900 --> 00:12:49,320 >> Diváků: [Neslyšitelné] 295 00:12:49,320 --> 00:12:50,200 >> DAVID J. Malan: Takže, je mi líto. 296 00:12:50,200 --> 00:12:50,660 >> Diváků: Age. 297 00:12:50,660 --> 00:12:52,980 >> DAVID J. Malan: věku, nebo narozeniny ekvivalentně, jo. 298 00:12:52,980 --> 00:12:53,557 Co dalšího? 299 00:12:53,557 --> 00:12:54,390 Diváků: ID číslo? 300 00:12:54,390 --> 00:12:57,460 DAVID J. Malan: Takže ID číslo, možná telefonní číslo, možná koleji nebo dům, 301 00:12:57,460 --> 00:12:58,670 nebo vysoká škola, nebo něco takového. 302 00:12:58,670 --> 00:13:01,820 Jakýkoli počet kusů dat, které můžete mít v seznamu kontaktů 303 00:13:01,820 --> 00:13:03,890 je to, co by mohlo definovat studenta. 304 00:13:03,890 --> 00:13:08,490 Takže pokud jsme chtěli, aby to, v kódu, bychom mohli udělat něco jednoduchého, jako to. 305 00:13:08,490 --> 00:13:15,670 My bychom mohli mít tak, aby program má řekněme, int main (void). 306 00:13:15,670 --> 00:13:18,920 A když chci představovat studentka bych mohl mít, například, 307 00:13:18,920 --> 00:13:24,330 řetězec s názvem název pro tento student, řetězec s názvem koleji pro tuto studenta, 308 00:13:24,330 --> 00:13:26,900 Možná int nazývá ID pro tento studenta. 309 00:13:26,900 --> 00:13:30,840 A protože jsem pomocí řetězce, já je třeba se vrátit a postavit CS50.h. 310 00:13:30,840 --> 00:13:33,300 Možná budu potřebovat stdio.h. 311 00:13:33,300 --> 00:13:38,190 Dovolte mi tedy preventivně udělat ty a já bude volat tento student.c teď 312 00:13:38,190 --> 00:13:40,080 a uložit to. 313 00:13:40,080 --> 00:13:44,206 >> A teď můžu něco udělat s těmito proměnnými. 314 00:13:44,206 --> 00:13:46,830 A my jsme jen tak psát že jako komentář v pseudo kódu, 315 00:13:46,830 --> 00:13:48,829 protože to není zajímavé, to, co děláme teď. 316 00:13:48,829 --> 00:13:51,242 OK, takže to je program, který nějak ukládá studenta. 317 00:13:51,242 --> 00:13:53,450 Co chci dělat, když jsem chcete uložit dva studenty? 318 00:13:53,450 --> 00:13:55,991 Takže můj první instinkt se děje v pořádku, počkejte chvíli, 319 00:13:55,991 --> 00:14:01,920 když mám dalšího studenta, proč ne já prostě Název řetězce 2, string kolej 2, 320 00:14:01,920 --> 00:14:04,190 int id2. 321 00:14:04,190 --> 00:14:06,540 A udělali jsme pryč touto cestou před 322 00:14:06,540 --> 00:14:10,890 a to, co bylo naše řešení, co se zdá být druh hackish Kopírovat Vložit 323 00:14:10,890 --> 00:14:11,555 práce tady? 324 00:14:11,555 --> 00:14:12,346 Diváků: Pole. 325 00:14:12,346 --> 00:14:13,830 DAVID J. Malan: Jo, bychom mohli použít pole. 326 00:14:13,830 --> 00:14:15,620 Hned to velmi rychle se stává nepraktické. 327 00:14:15,620 --> 00:14:18,453 Musíte se seřadit libovolně začátek jmenovat všechny tyto proměnné. 328 00:14:18,453 --> 00:14:22,190 A vy, člověk, mít na dráha, která OK jméno2 odpovídá 329 00:14:22,190 --> 00:14:25,060 s dorm2 odpovídá ID2. 330 00:14:25,060 --> 00:14:26,200 Prostě se stane nepořádek. 331 00:14:26,200 --> 00:14:29,350 Takže je to mnohem jednodušší, vyvolat z před několika týdny, 332 00:14:29,350 --> 00:14:34,300 jen museli nadávali řetězcových a možná nám tři z nich. 333 00:14:34,300 --> 00:14:36,940 A pak možná máme řetězec dorms a mají 334 00:14:36,940 --> 00:14:41,900 Tři z těchto, nebo s konstantní, int ID a mají tři z nich. 335 00:14:41,900 --> 00:14:45,250 Ale i teď to cítí trochu nedbalý, že jo. 336 00:14:45,250 --> 00:14:49,440 Mluvíme o studenty a ještě Jsem opravdu bydlí na nízké úrovni 337 00:14:49,440 --> 00:14:50,470 detaily implementace. 338 00:14:50,470 --> 00:14:52,790 Student je název a koleji a ID. 339 00:14:52,790 --> 00:14:59,814 >> Proč nemohu jen deklarovat proměnnou volal student a říkají to. 340 00:14:59,814 --> 00:15:02,230 A když chci dalšího studenta, proč ne já jen říkám t. 341 00:15:02,230 --> 00:15:05,260 Nebo když chci spoustu studentů, proč ne já jen 342 00:15:05,260 --> 00:15:09,740 říct, že jsem celou třídu studentů, a to tři z nich. 343 00:15:09,740 --> 00:15:12,470 Jinými slovy, proč nemůžu přijít up s mou vlastní datový typ, nazvaný 344 00:15:12,470 --> 00:15:15,641 Studenti, uvnitř které je název, je ID, je koleji, 345 00:15:15,641 --> 00:15:16,890 je jakékoli číslo z jiných oborů. 346 00:15:16,890 --> 00:15:19,030 A ukázalo se, že může dělat přesně to. 347 00:15:19,030 --> 00:15:21,850 >> Takže C má tuto funkci nazvanou struct. 348 00:15:21,850 --> 00:15:24,700 To je funkce, jazyk, který nám umožňuje dělat přesně to. 349 00:15:24,700 --> 00:15:28,370 Chystám se pokračovat a otevřít structs.h 350 00:15:28,370 --> 00:15:32,299 kde budeme vidět Následující definice studenta. 351 00:15:32,299 --> 00:15:35,215 Ukazuje se, že - a tohle je ještě jednodušší než jeden zahrnující ID 352 00:15:35,215 --> 00:15:36,080 před chvílí. 353 00:15:36,080 --> 00:15:39,120 Chcete-li přijít s vaše domácí typ dat, 354 00:15:39,120 --> 00:15:42,750 a navíc na int a char a float a všechny tyto další, které existují, 355 00:15:42,750 --> 00:15:45,810 můžete tak učinit doslova psaní typedef struct, 356 00:15:45,810 --> 00:15:47,880 pak některé složené závorky, uvnitř které jste 357 00:15:47,880 --> 00:15:51,460 seznam proměnných, které chcete stýkat se s touto novou vlastní data 358 00:15:51,460 --> 00:15:55,670 zadejte jako jméno a koleji, a pak po složených závorkách 359 00:15:55,670 --> 00:15:57,860 dáváte jména do nového datového typu. 360 00:15:57,860 --> 00:15:59,220 Tak například, studentka. 361 00:15:59,220 --> 00:16:03,247 >> A co je hezké o tom nyní je, že Podíváme-li se na příslušný kód, 362 00:16:03,247 --> 00:16:05,080 konvence, jako první ze všech, je, aby to 363 00:16:05,080 --> 00:16:08,230 v souboru s názvem něco dot h, soubor záhlaví, které my ne 364 00:16:08,230 --> 00:16:09,780 začali používat sami sebe příliš mnoho. 365 00:16:09,780 --> 00:16:12,120 Ale my se chystáte začít použitím docela dost nyní. 366 00:16:12,120 --> 00:16:18,650 A co můžeme dělat s tím, nakonec, v těchto několika řádků kódu 367 00:16:18,650 --> 00:16:22,130 je prohlásit, že přesně typ dat, student. 368 00:16:22,130 --> 00:16:23,230 A teď pojďme používat. 369 00:16:23,230 --> 00:16:27,274 >> Chystám se nyní jít do soubor s názvem structs1.c. 370 00:16:27,274 --> 00:16:29,440 A pojďme se podívat na Několik charakteristiky zde. 371 00:16:29,440 --> 00:16:32,250 Takže věci, tady nahoře je většinou znají, a my 372 00:16:32,250 --> 00:16:35,040 vrátit se k tomu, co není obeznámeni za chvíli. 373 00:16:35,040 --> 00:16:39,880 To samozřejmě je, včetně mé vlastní hlavičkový soubor, který je nové, stejně, 374 00:16:39,880 --> 00:16:42,580 s výjimkou pset 3, jestliže Připomeňme, máme helpers.h. 375 00:16:42,580 --> 00:16:45,150 Takže si možná pamatujete #include helpers.h. 376 00:16:45,150 --> 00:16:49,381 >> Proč i když mám používat citace místo úhlových konzol? 377 00:16:49,381 --> 00:16:50,630 Když si mám vybrat mezi nimi? 378 00:16:50,630 --> 00:16:52,310 Téměř vždy jsem se zdají používat špičaté závorky. 379 00:16:52,310 --> 00:16:55,040 A pak, najednou na linka šesti Jsem pomocí dvojité uvozovky. 380 00:16:55,040 --> 00:16:55,860 Proč by to mohlo být? 381 00:16:55,860 --> 00:16:56,700 To jo? 382 00:16:56,700 --> 00:16:57,725 >> Diváků: [Neslyšitelné] 383 00:16:57,725 --> 00:16:59,350 DAVID J. Malan: To je skutečný, co? 384 00:16:59,350 --> 00:17:00,559 Diváků: To je v IDE. 385 00:17:00,559 --> 00:17:02,475 DAVID J. Malan: Jo, že je v mém skutečném IDE. 386 00:17:02,475 --> 00:17:05,690 A nesmíme bydlí na IDE, protože to je jen nástroj, který jsem pomocí. 387 00:17:05,690 --> 00:17:08,119 To je v mém proudu adresář, konkrétně. 388 00:17:08,119 --> 00:17:11,647 Takže structs.h je můj vlastní soubor není nainstalován v IDE, 389 00:17:11,647 --> 00:17:14,480 v operačním systému samotném, spíš to v mé aktuálním adresáři. 390 00:17:14,480 --> 00:17:16,910 Takže úmluva je, pokud chcete, uvést své vlastní záhlaví souboru, 391 00:17:16,910 --> 00:17:18,200 stačí použít dvojité uvozovky. 392 00:17:18,200 --> 00:17:23,290 >> Co nazýváme tuto věc linka 8, obecně řečeno? 393 00:17:23,290 --> 00:17:25,200 Tohle je co? 394 00:17:25,200 --> 00:17:28,220 #define něco. 395 00:17:28,220 --> 00:17:31,040 To představuje konstanty, že jo? 396 00:17:31,040 --> 00:17:33,140 Chcete-li mít Hodnota ve vašem programu 397 00:17:33,140 --> 00:17:35,110 že používáte celé banda z časů, to je 398 00:17:35,110 --> 00:17:39,330 dobrý konvence faktor na to, deklarovat to, symbolem hash 399 00:17:39,330 --> 00:17:43,340 definovat, pak se podle konvence, ve všech velká písmena word-- když to není 400 00:17:43,340 --> 00:17:45,320 nezbytně nutné, ale Je to lidská konvence 401 00:17:45,320 --> 00:17:47,210 vydělat konstanty tak, aby se vyskočit 402 00:17:47,210 --> 00:17:50,380 na vás visually-- prostor a pak hodnota chcete být 403 00:17:50,380 --> 00:17:52,250 což odpovídá jménu tato konstanta je. 404 00:17:52,250 --> 00:17:56,110 Ne středník, ale prostě vyplývalo, že vzor tam. 405 00:17:56,110 --> 00:17:57,770 >> Takže to, co jsem dělal v tomto skutečném kódu. 406 00:17:57,770 --> 00:18:00,660 Takže pojďme se podívat na hlavní program zde. 407 00:18:00,660 --> 00:18:04,080 V souladu 12, protože jsem zahrnovaly structs.h, 408 00:18:04,080 --> 00:18:06,492 Nyní mám jako mávnutím kouzelného proutku v mé Likvidace nový datový typ. 409 00:18:06,492 --> 00:18:09,200 Nemám prostě mít přístup k int, a char, a float a string, 410 00:18:09,200 --> 00:18:10,060 a modré a další. 411 00:18:10,060 --> 00:18:12,470 I nyní mají přístup k typ studenta dat. 412 00:18:12,470 --> 00:18:17,740 Takže v řadě 12, jsem kombinací dvou ideas-- jeden vlastní datový typ a dva, 413 00:18:17,740 --> 00:18:18,940 pomocí pole. 414 00:18:18,940 --> 00:18:21,700 A tak v tomto programu, pokud Chci skutečně podpořit 415 00:18:21,700 --> 00:18:24,320 tři různé studenti v mém programu, já 416 00:18:24,320 --> 00:18:30,480 lze jednoduše říci, dej mi proměnnou tzv studentů, z nichž každá 417 00:18:30,480 --> 00:18:32,970 je studentů typu, které je můj vlastní datový typ. 418 00:18:32,970 --> 00:18:35,890 A konkrétně, dej mi tři z těch, v mém poli. 419 00:18:35,890 --> 00:18:37,750 >> Tak co teď budeme dělat v tomto programu? 420 00:18:37,750 --> 00:18:40,670 Zde je jen pro smyčky iterace od 0 do 3, protože to je 421 00:18:40,670 --> 00:18:42,110 co je hodnota studentů. 422 00:18:42,110 --> 00:18:44,420 Jen jsem vyzvání uživatele dej mi jméno studenta. 423 00:18:44,420 --> 00:18:48,090 A pak v řádku 17, jsme mají většinou známou linku. 424 00:18:48,090 --> 00:18:50,370 Máme starého přítele GetString na pravé straně. 425 00:18:50,370 --> 00:18:52,345 A co kus syntaxe je zřejmě nový, 426 00:18:52,345 --> 00:18:55,130 pokud jste nikdy naprogramován v C předtím, a nikdy nepoužilo structs? 427 00:18:55,130 --> 00:18:55,510 To jo? 428 00:18:55,510 --> 00:18:56,417 >> Diváků: .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 není příliš velký skok, protože nyní studenti i bracketing 431 00:19:01,220 --> 00:19:02,590 dává vám i-tého studenta. 432 00:19:02,590 --> 00:19:04,730 A pokud chcete potápět uvnitř této struktury, 433 00:19:04,730 --> 00:19:09,490 stačí použít jedno období a pak název proměnné uvnitř, 434 00:19:09,490 --> 00:19:11,900 nebo vlastnost, že uvnitř Chcete-li získat přístup k. 435 00:19:11,900 --> 00:19:14,816 Podobně pak, když jsem pak přiměje Uživatel, dej mi studenta koleji, 436 00:19:14,816 --> 00:19:18,390 Podobně můžete uložit, že řetězec v proměnné koleji uvnitř 437 00:19:18,390 --> 00:19:19,940 tohoto studenta struktury. 438 00:19:19,940 --> 00:19:21,410 >> A teď se věci trochu fantazie. 439 00:19:21,410 --> 00:19:24,420 A to bude vypadat na možná hodně docela brzy. 440 00:19:24,420 --> 00:19:27,970 Ale budete vidět daleko více v pset 4, tak ať to prostě pohled na to teď. 441 00:19:27,970 --> 00:19:33,364 Ukazuje se, že v potrubí 23 prostřednictvím 38, co si myslíte, že jsem snad děláš? 442 00:19:33,364 --> 00:19:35,530 Odstranil jsem připomínky dnes, ale verze 443 00:19:35,530 --> 00:19:38,660 kódu online reference má všechny komentáře. 444 00:19:38,660 --> 00:19:40,171 Co mi zdá, že dělat? 445 00:19:40,171 --> 00:19:42,530 >> Diváků: uložení souboru se všemi informace, které uživatel zadal. 446 00:19:42,530 --> 00:19:44,530 >> DAVID J. Malan: Jo, přesně, to je nový způsob 447 00:19:44,530 --> 00:19:46,370 že vidíme dvě, Dalším znakem C, 448 00:19:46,370 --> 00:19:48,700 čímž jsem si vytvářet své vlastní soubory. 449 00:19:48,700 --> 00:19:51,580 Doposud, téměř každý program, co jste napsali, je bez státní příslušnosti. 450 00:19:51,580 --> 00:19:53,334 Jakmile je to hotovo běh, to je vše. 451 00:19:53,334 --> 00:19:55,000 Není paměti nebo vzpomínka na něj. 452 00:19:55,000 --> 00:19:56,110 Neexistuje žádný soubor uložen. 453 00:19:56,110 --> 00:19:58,120 Ale pokud si chcete uložit vstup, který má 454 00:19:58,120 --> 00:20:02,100 se stalo, stejně jako ve hře nebo programu takhle to dopadá, můžeme tak učinit. 455 00:20:02,100 --> 00:20:04,360 A budete vidět více v pset 4 av §. 456 00:20:04,360 --> 00:20:08,661 Ale tato linka 23 v podstatě vytvoří soubor s názvem students.csv. 457 00:20:08,661 --> 00:20:10,160 A možná jste předtím viděl. 458 00:20:10,160 --> 00:20:14,250 Dokonce i když jste nikdy studoval CS předtím, CSV je oddělené čárkou proměnné. 459 00:20:14,250 --> 00:20:19,000 Je to jako velmi špatný muže verze souboru aplikace Excel, 460 00:20:19,000 --> 00:20:22,270 což znamená, že by mohl být otevřen v Excelu a v číslech Apple, 461 00:20:22,270 --> 00:20:23,830 a má řádků a sloupců. 462 00:20:23,830 --> 00:20:26,485 Ale není to proprietární formát jako Microsoft nebo Apple. 463 00:20:26,485 --> 00:20:29,840 Je to jen čárky oddělující hodnoty, které uvidíme za chvíli. 464 00:20:29,840 --> 00:20:31,010 >> A stačí se hádat. 465 00:20:31,010 --> 00:20:33,480 V souladu 23, na samém konec, můj druhý argument, 466 00:20:33,480 --> 00:20:37,700 na tuto novou funkci nazvanou f otevřena pro otevřeném souboru je w. 467 00:20:37,700 --> 00:20:39,430 Co by mohlo naznačovat w? 468 00:20:39,430 --> 00:20:40,022 To jo? 469 00:20:40,022 --> 00:20:41,260 >> Diváků: To vám umožní zapsat do souboru? 470 00:20:41,260 --> 00:20:42,630 >> DAVID J. Malan: To vám umožní napíšete do souboru. 471 00:20:42,630 --> 00:20:44,810 Takže je tu několik variant že se můžeme připojit zde. 472 00:20:44,810 --> 00:20:47,184 Ale pokud si jen chcete přečíst Soubor, který se na to podívat 473 00:20:47,184 --> 00:20:50,010 a přečtěte si ji do paměti, vám stačí použít citace unquote "r". 474 00:20:50,010 --> 00:20:53,110 Pokud chcete psát na soubor, můžete použít nabídku konec citátu "w". 475 00:20:53,110 --> 00:20:55,190 K dispozici je také připojit a několik dalších věcí 476 00:20:55,190 --> 00:20:57,356 Chcete-li upravit existující soubory. 477 00:20:57,356 --> 00:21:00,480 Teď budeme držet vidět toto věc, pak se vrátíme na linku 24. 478 00:21:00,480 --> 00:21:02,640 NULL, to dopadá, je speciální hodnota, která 479 00:21:02,640 --> 00:21:06,070 může být vrácen určitých funkcí pokud něco wrong-- 480 00:21:06,070 --> 00:21:08,490 v případě, že soubor neexistuje, pokud jste spustit z paměti, 481 00:21:08,490 --> 00:21:09,620 nebo spoustu dalších chyb. 482 00:21:09,620 --> 00:21:13,470 Ale teď, pojďme jen předpokládat, že tento je kontrola jen konvenční chybě. 483 00:21:13,470 --> 00:21:17,090 Tady v řadě 26, jsem iterace od 0 do 3 nad všemi mých studentů. 484 00:21:17,090 --> 00:21:20,470 A to je druh druh nové funkce, fprintf, 485 00:21:20,470 --> 00:21:21,460 ale stačí se hádat. 486 00:21:21,460 --> 00:21:24,370 Pokud printf je jen pro tisk formátovaný řetězec, 487 00:21:24,370 --> 00:21:26,507 Co fprintf pravděpodobně znamená? 488 00:21:26,507 --> 00:21:27,590 Diváků: Tisk do souboru. 489 00:21:27,590 --> 00:21:29,290 DAVID J. Malan: Vytiskněte formátovaný řetězec do souboru. 490 00:21:29,290 --> 00:21:31,180 To je to, co to další f prostředkem je soubor. 491 00:21:31,180 --> 00:21:36,420 A nový první argument musí být proměnná, která představuje soubor. 492 00:21:36,420 --> 00:21:38,866 Pak jsme prostě formát string stejně jako printf. 493 00:21:38,866 --> 00:21:40,740 A i když to syntax je nové, to jen 494 00:21:40,740 --> 00:21:44,610 znamená připojit jméno studenta, plug-in studentské koleji, a poté 495 00:21:44,610 --> 00:21:47,160 s fclose, zavřete soubor. 496 00:21:47,160 --> 00:21:49,730 A pak je to nový lastly-- a vrátíme se k tomu 497 00:21:49,730 --> 00:21:53,240 Před long-- Jsem uvolnění student z důvodů, 498 00:21:53,240 --> 00:21:54,860 že se stalo tam nahoře. 499 00:21:54,860 --> 00:21:56,820 Ale my se vrátíme se, že před long-- 500 00:21:56,820 --> 00:21:59,820 že je to kvůli tomu, jak je GetString skutečně pracuje pod kapotou. 501 00:21:59,820 --> 00:22:01,280 >> Takže pojďme se rychle podívat zde. 502 00:22:01,280 --> 00:22:04,380 Kdybych zadejte ls ve svém adresáři, Všimněte si, že nemám 503 00:22:04,380 --> 00:22:09,360 mít soubor s názvem students.csv, jen ne tam, neexistuje. 504 00:22:09,360 --> 00:22:14,965 Takže když jsem se zkompilovat tento program, aby structs-1. / structs-1, 505 00:22:14,965 --> 00:22:20,570 a budu pokračovat a napište Andi, který žije v Berkeley v Yale. 506 00:22:20,570 --> 00:22:26,350 Budeme mít Rob, kdo žije v Thayer v těchto dnech. 507 00:22:26,350 --> 00:22:33,760 A pojďme přijít s tím, kde je, myslím, Maria je v Mather, 508 00:22:33,760 --> 00:22:35,100 pokud jsem si pamatoval. 509 00:22:35,100 --> 00:22:36,460 >> Takže se zdánlivě nic neděje. 510 00:22:36,460 --> 00:22:40,680 Ale když jsem typ ls teď, je students.csv. 511 00:22:40,680 --> 00:22:43,080 Pojďme dál a otevřená students.csv. 512 00:22:43,080 --> 00:22:46,050 Jedná se opět o velmi lehký formát souboru. 513 00:22:46,050 --> 00:22:49,570 Ale já jsem prostě přijala konvenci že mám dvě řádky a sloupce zde. 514 00:22:49,570 --> 00:22:52,020 V prvním sloupci je křestní jména lidí. 515 00:22:52,020 --> 00:22:55,740 Druhý sloupec je studenta koleji, nebo vysoká škola, nebo dům, nebo kdoví co ještě. 516 00:22:55,740 --> 00:22:57,900 A teď jsem zachránil to trvale v souboru. 517 00:22:57,900 --> 00:22:59,280 >> Takže to není všechno tak zajímavé. 518 00:22:59,280 --> 00:23:02,980 Ale to je jen odrazovým můstkem nyní ke schopnosti přetrvávat informací 519 00:23:02,980 --> 00:23:04,040 natrvalo. 520 00:23:04,040 --> 00:23:08,340 Tak uvidíme, teď co víc můžeme dělat s těmito a dalšími funkcemi. 521 00:23:08,340 --> 00:23:10,729 Ale nejdřív, nějaké otázky? 522 00:23:10,729 --> 00:23:12,145 To bylo hodně, a to bylo rychlé. 523 00:23:12,145 --> 00:23:16,131 Ale uvidíte mnoho více pset 4, stejně. 524 00:23:16,131 --> 00:23:16,630 To jo? 525 00:23:16,630 --> 00:23:19,360 >> Diváků: Existuje způsob, jak pokračovat v přidávání jmen do tohoto souboru? 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 způsob, jak pokračovat přidávání jmen do tohoto souboru? 528 00:23:21,800 --> 00:23:22,340 Ano. 529 00:23:22,340 --> 00:23:24,630 A ve skutečnosti, pokud jste skončili up re-otevření souboru, 530 00:23:24,630 --> 00:23:26,780 byste použili citaci konec citátu "A" pro append, 531 00:23:26,780 --> 00:23:31,090 což by jen přidat nový řádek, je Nová linka znovu a znovu, přesně tak. 532 00:23:31,090 --> 00:23:32,010 Dobrá otázka. 533 00:23:32,010 --> 00:23:32,950 Další otázky? 534 00:23:32,950 --> 00:23:33,450 To jo? 535 00:23:33,450 --> 00:23:35,580 Diváků: Pokud jste spustili Program znovu právě teď, 536 00:23:35,580 --> 00:23:38,000 to by držet přidání jmen do souboru nebo by to otevřít nový soubor? 537 00:23:38,000 --> 00:23:38,740 >> DAVID J. Malan: Á, dobrá otázka. 538 00:23:38,740 --> 00:23:41,448 Pokud znovu hned běžel program Nyní, možná zadali novými jmény, 539 00:23:41,448 --> 00:23:44,820 by bylo přidat do souboru nebo přepsat soubor? 540 00:23:44,820 --> 00:23:47,420 Ten, protože jsem nepoužívají přidávacího režimu. 541 00:23:47,420 --> 00:23:49,930 A protože já jsem jen slepě otevření souboru pro zápis, 542 00:23:49,930 --> 00:23:51,310 je to jen bude soubor přepsat. 543 00:23:51,310 --> 00:23:54,570 Takže bych opravdu musíte udělat, je připojit, když chci skutečně dlouhodobý 544 00:23:54,570 --> 00:23:55,350 databází. 545 00:23:55,350 --> 00:23:58,220 >> Nyní CSV je užitečný, upřímně řečeno, ani pro obdobné pokud jste writing-- 546 00:23:58,220 --> 00:24:00,100 a my budeme nakonec vidět později v semestru, kdy 547 00:24:00,100 --> 00:24:01,455 využíváme Csvs pro jiné účely. 548 00:24:01,455 --> 00:24:04,920 Chcete-li uložit všechny lidi kteří se registrovali na nějakou událost, 549 00:24:04,920 --> 00:24:07,420 nebo se přihlásili pro studenta skupina, nebo něco takového, 550 00:24:07,420 --> 00:24:10,330 ukládání dat v tomto druhu formátu je super pohodlné. 551 00:24:10,330 --> 00:24:12,580 Vzhledem k tomu, doslova, pokud I měli stáhnout tento soubor. 552 00:24:12,580 --> 00:24:14,540 Mohl bych double-- a pojďme se skutečně snaží tento 553 00:24:14,540 --> 00:24:16,720 když mám Excel nebo čísla tady. 554 00:24:16,720 --> 00:24:19,130 >> Budu pravým tlačítkem nebo s klávesou Ctrl můj soubor. 555 00:24:19,130 --> 00:24:20,020 Jejda. 556 00:24:20,020 --> 00:24:21,830 Klepněte pravým tlačítkem nebo s klávesou Ctrl můj soubor. 557 00:24:21,830 --> 00:24:24,960 No, moje myš nespolupracuje. 558 00:24:24,960 --> 00:24:32,694 Download-- Jdu stáhnout všechny soubory, takže zde 559 00:24:32,694 --> 00:24:33,860 Jen tak můžu chytit tento jeden. 560 00:24:33,860 --> 00:24:37,850 A uvidíme, jestli to funguje students.csv-- poprvé 561 00:24:37,850 --> 00:24:39,310 Já jsem aktivován. 562 00:24:39,310 --> 00:24:41,360 Teď chtějí vidět své kontakty. 563 00:24:41,360 --> 00:24:44,310 Teď jsem třeba se zaregistrovat. 564 00:24:44,310 --> 00:24:47,620 Podívejte se, jak snadné je používat Csvs? 565 00:24:47,620 --> 00:24:50,840 Ano, udržovat ji v aktuálním stavu. 566 00:24:50,840 --> 00:24:52,375 OK, teď jsme připraveni na třídu. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 OK, oh, co je nového? 569 00:25:00,370 --> 00:25:02,920 OK, úzkým. 570 00:25:02,920 --> 00:25:04,750 To bylo kouzelné. 571 00:25:04,750 --> 00:25:07,280 OK, teď musíme aktualizovat. 572 00:25:07,280 --> 00:25:10,890 A teď, je to zapomněl, co soubor Původně jsem otevřel, 573 00:25:10,890 --> 00:25:13,090 ale to, co tam je-- jdeme. 574 00:25:13,090 --> 00:25:16,341 OK, takže teď máme soubor aplikace Excel. 575 00:25:16,341 --> 00:25:18,290 Děkuji. 576 00:25:18,290 --> 00:25:20,764 >> OK, takže to, co jsem udělal, bylo snadné. 577 00:25:20,764 --> 00:25:23,930 Samozřejmě, že jsem mohl již nainstalovány Excel, nebo čísla, nebo cokoliv jiného programu. 578 00:25:23,930 --> 00:25:25,846 Ale to je pěkné, protože teď mohu manipulovat 579 00:25:25,846 --> 00:25:28,090 údaje ve standardním formátu. 580 00:25:28,090 --> 00:25:30,294 >> Takže teď pojďme kontext přejít na místo, kde jsme přestali 581 00:25:30,294 --> 00:25:32,710 Naposled, který měl začít vzlétnout kolečka. 582 00:25:32,710 --> 00:25:34,543 Ale nejdřív, to ne vidět tento dřívější oběd 583 00:25:34,543 --> 00:25:38,150 se opět děje na Fire a Ice v Cambridge, sitar v New Havenu. 584 00:25:38,150 --> 00:25:43,150 Zaregistrujte se na stránkách CS50s ASAP vstoupit CS50 studenty a zaměstnance. 585 00:25:43,150 --> 00:25:46,090 >> Tak jsme vzali kolečka off v pondělí follows-- 586 00:25:46,090 --> 00:25:49,120 string byla vyhlášena v CS50s knihovna pro určitou dobu. 587 00:25:49,120 --> 00:25:52,650 A je to hezké, protože umožňuje nás mluvit o proměnné jako 588 00:25:52,650 --> 00:25:54,660 kompletní slova a věty a další. 589 00:25:54,660 --> 00:25:56,710 Ale ukazuje se řetězec neexistuje. 590 00:25:56,710 --> 00:26:00,200 To je jen synonymem, nebo alias, že jsme vytvořili něco, co 591 00:26:00,200 --> 00:26:03,780 ve skutečnosti je trochu více technické volal char *. 592 00:26:03,780 --> 00:26:07,900 >> A skutečně, viděli jsme příklad programu v pondělí 593 00:26:07,900 --> 00:26:11,200 že nechoval úplně, jak jsme očekávali. 594 00:26:11,200 --> 00:26:13,630 Jednalo se o soubor, porovnávat-0. 595 00:26:13,630 --> 00:26:17,910 A připomínají, že porovnávat-0, pokud Pondělního programu jsem překompilovat 596 00:26:17,910 --> 00:26:22,670 a spustit porovnávat-0 a zadejte meziměsíčně v malá písmena, a maminka malými písmeny znovu. 597 00:26:22,670 --> 00:26:25,320 Program trval na tom, I typ různé věci, 598 00:26:25,320 --> 00:26:29,210 i když máma, vše v malá, je totožný vizuálně. 599 00:26:29,210 --> 00:26:31,990 Takže to, co bylo krátká odpověď proč si myslí, že počítač 600 00:26:31,990 --> 00:26:34,500 tyto dva řetězce se liší? 601 00:26:34,500 --> 00:26:35,250 To jo? 602 00:26:35,250 --> 00:26:36,534 >> Diváků: [Neslyšitelné] 603 00:26:36,534 --> 00:26:37,450 DAVID J. Malan: Správně. 604 00:26:37,450 --> 00:26:39,600 Takže, mámu, poprvé Píšu ho, je být 605 00:26:39,600 --> 00:26:42,710 uloženy někde v mém počítači paměti, ale na jiném místě 606 00:26:42,710 --> 00:26:44,690 než druhá, kdy jsem psát matkou. 607 00:26:44,690 --> 00:26:46,580 Nyní je určitě by mohl být optimalizován. 608 00:26:46,580 --> 00:26:49,205 Počítač by mohl být chytrý a realizaci těchto dva řetězce, hej, 609 00:26:49,205 --> 00:26:49,954 jsou identické. 610 00:26:49,954 --> 00:26:51,520 Dovolte mi, abych to nadbytečně uložit. 611 00:26:51,520 --> 00:26:54,229 Ale počítače nedělají, že Optimalizace pokud řeknete jim. 612 00:26:54,229 --> 00:26:56,061 Takže, ve výchozím nastavení, jsou to právě chystá skončit 613 00:26:56,061 --> 00:26:57,670 ve dvou různých místech v paměti. 614 00:26:57,670 --> 00:27:01,570 A tak, aby se více zřejmé, když jsme porovnali dva řetězce, 615 00:27:01,570 --> 00:27:03,950 První byl tzv s, druhý byl nazýván 616 00:27:03,950 --> 00:27:08,530 t, co konkrétně jsem byl porovnání tady na řádku 13? 617 00:27:08,530 --> 00:27:09,494 To jo. 618 00:27:09,494 --> 00:27:12,390 >> Diváků: Je to místo v paměti že proměnná bude ukazovat. 619 00:27:12,390 --> 00:27:14,900 >> DAVID J. Malan: Přesně tak, jsem byl porovnání místo v paměti 620 00:27:14,900 --> 00:27:16,300 že tyto proměnné ukázal. 621 00:27:16,300 --> 00:27:20,560 Tak konkrétně v případě, matka byla na byte číslo 1, a 2, a 3, 622 00:27:20,560 --> 00:27:24,020 a 4-- proto, že si na zpětné lomítko 0 musí být úplně na konci. 623 00:27:24,020 --> 00:27:29,420 A ta druhá instance meziměsíčně, m-o-m, byl na adrese 10, 11, 12, a 13. 624 00:27:29,420 --> 00:27:33,100 Byl jsem porovnávání 1, že adresa, že umístění v paměti, 625 00:27:33,100 --> 00:27:35,160 proti 10, který je samozřejmě není stejný. 626 00:27:35,160 --> 00:27:36,260 1 není 10. 627 00:27:36,260 --> 00:27:39,620 >> Tak to je hezké, že v je to docela jednoduché. 628 00:27:39,620 --> 00:27:42,870 Ale je to problematické, pokud můžeme se zdá, porovnání řetězců. 629 00:27:42,870 --> 00:27:44,930 Tak fundamentally-- a na této nízké úrovni, 630 00:27:44,930 --> 00:27:47,300 pokud byste chtěli realizovat program pro porovnání 631 00:27:47,300 --> 00:27:50,270 dvě jednotlivá slova, že uživatel zadal na kvalitu, 632 00:27:50,270 --> 00:27:53,944 se jim line up pro char char, jen v obecné rovině, 633 00:27:53,944 --> 00:27:55,360 co musíme udělat, zřejmě? 634 00:27:55,360 --> 00:27:57,940 Nestačí jen podívejte se na ty dvě adresy. 635 00:27:57,940 --> 00:27:58,860 Co musíme udělat? 636 00:27:58,860 --> 00:27:59,360 To jo? 637 00:27:59,360 --> 00:28:01,120 >> Publikum: Iterovat řetězec [neslyšitelné]. 638 00:28:01,120 --> 00:28:02,600 >> DAVID J. Malan: Jo, pojďme iterovat řetězce. 639 00:28:02,600 --> 00:28:05,808 Pojďme použít pro smyčce, smyčce while, nebo co jste nejvíce vyhovuje. 640 00:28:05,808 --> 00:28:08,840 A pokud máme dva řetězce kdesi v paměti, pojďme se podívat na každý let 641 00:28:08,840 --> 00:28:11,770 první znak, pak každý druhý znak, pak třetí a čtvrté, 642 00:28:11,770 --> 00:28:15,206 a pátý, až jsme narazili Jaké speciální Sentinel hodnota? 643 00:28:15,206 --> 00:28:16,080 Diváků: [Neslyšitelné] 644 00:28:16,080 --> 00:28:18,800 DAVID J. Malan: Jo, zpětné lomítko nula, na kterém místě v jednom řetězci 645 00:28:18,800 --> 00:28:20,100 Můžeme se rozhodnout, že to je všechno. 646 00:28:20,100 --> 00:28:21,970 Už jsme uzavřeno každý znak? 647 00:28:21,970 --> 00:28:22,990 Pokud tomu tak není, vrátí false. 648 00:28:22,990 --> 00:28:24,770 Pokud ano, vrátí true. 649 00:28:24,770 --> 00:28:28,800 A tak to je přesně to, co tato verze programu porovnat-1.c dělá. 650 00:28:28,800 --> 00:28:31,677 To je totožné s tím, co jsme Podíval se na pondělí kromě toho, že jsem 651 00:28:31,677 --> 00:28:34,760 zbavili slova string-- ačkoli že nemá žádný funkční impact-- all 652 00:28:34,760 --> 00:28:37,450 Dělám teď je odstranění některé vizuální školení kola, 653 00:28:37,450 --> 00:28:40,880 ale jasně vidět, že s a t jsou adresy. 654 00:28:40,880 --> 00:28:43,020 A to je to, co je hvězda, hvězdička, představuje 655 00:28:43,020 --> 00:28:46,690 je adresa, jinak známý technicky jako ukazovátko. 656 00:28:46,690 --> 00:28:49,880 >> Takže když Prohlašuji ů na linka 9 a říkají, char * s, 657 00:28:49,880 --> 00:28:52,160 to neznamená, že mi dát řetězec. 658 00:28:52,160 --> 00:28:56,360 To znamená, že dej mi proměnné, jejíž Smyslem života je uložit adresu. 659 00:28:56,360 --> 00:29:00,400 Protože jsem chtěl dát adresa řetězce do něj. 660 00:29:00,400 --> 00:29:03,500 A skutečně, GetString, být jasné, nevrací řetězec. 661 00:29:03,500 --> 00:29:06,110 To nevrací mámu zpětné lomítko nula, samy o sobě. 662 00:29:06,110 --> 00:29:10,005 Co getString specificky a přesně vrátit? 663 00:29:10,005 --> 00:29:10,880 Diváků: [Neslyšitelné] 664 00:29:10,880 --> 00:29:14,080 DAVID J. Malan: adresa zadána, adresa prvního znaku 665 00:29:14,080 --> 00:29:16,070 v nějakém řetězci to dostal. 666 00:29:16,070 --> 00:29:19,250 A tak teď vidíme opět speciální klíčové slovo. 667 00:29:19,250 --> 00:29:20,640 A, zmiňoval jsem se dřív. 668 00:29:20,640 --> 00:29:23,620 To bude dobré konvence že uvidíme znovu a znovu teď. 669 00:29:23,620 --> 00:29:27,540 Já jsem kontrolu, aby se ujistil, že s není null, a t není null. 670 00:29:27,540 --> 00:29:30,100 Vzhledem k tomu, na základě mých opravdu rychlá zmínka dříve, 671 00:29:30,100 --> 00:29:35,510 co by mohlo znamenat, pokud GetString vrátí ne adresa, ale N-U-L-L, který je opět, 672 00:29:35,510 --> 00:29:36,990 nějaký zvláštní hodnota? 673 00:29:36,990 --> 00:29:37,890 >> Diváků: 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 Něco se pokazilo. 676 00:29:39,550 --> 00:29:41,341 A to, co typicky Může se stát, zejména 677 00:29:41,341 --> 00:29:45,162 s strings--, které by mohly být neznámé délky v advance-- 678 00:29:45,162 --> 00:29:46,870 Možná, že počítače " nedostatek paměti, možná 679 00:29:46,870 --> 00:29:49,280 jste zadali v takovém dlouhé slovo nebo větu 680 00:29:49,280 --> 00:29:51,880 nebo vložit takové obrovské esej tam prostě není dostatek paměti. 681 00:29:51,880 --> 00:29:55,340 A tak GetString nemůže vrátit adresa celé věci, 682 00:29:55,340 --> 00:29:56,620 tak to prostě vrátí nic. 683 00:29:56,620 --> 00:30:00,580 A to říká, že chyba se stalo vrácením speciální hodnotu NULL. 684 00:30:00,580 --> 00:30:02,890 Je to nulová adresa, abych tak řekl. 685 00:30:02,890 --> 00:30:06,157 >> Nyní se ukazuje, C je dodáván s Funkce, která dělá tuto iteraci. 686 00:30:06,157 --> 00:30:09,240 Nemáme to provést s cyklus for nebo while sami. 687 00:30:09,240 --> 00:30:11,150 Můžeme použít funkci, volal stručně, 688 00:30:11,150 --> 00:30:15,400 míchejte Comp, nebo řetězec porovnat, jehož Smyslem života je udělat přesně to. 689 00:30:15,400 --> 00:30:19,990 Můžete dát dva ukazatele, dvě adresy, a půjde na tyto adresy 690 00:30:19,990 --> 00:30:23,130 a pak porovnat dopis pro dopis pro dopis pro kvalitu, 691 00:30:23,130 --> 00:30:26,610 zastavení pouze tehdy, když to, co je pravda? 692 00:30:26,610 --> 00:30:31,540 Kdy by měl intuitivně míchat comp přestanou Iterace, jen aby bylo jasno? 693 00:30:31,540 --> 00:30:35,400 Když narazí na zpětné lomítko 0 buď řetězec, na kterém místě se může rozhodnout 694 00:30:35,400 --> 00:30:38,910 má všechno uzavřeno, nebo došlo na rozdíl? 695 00:30:38,910 --> 00:30:42,740 >> Takže, když narazíme to teď a zkuste náš malý kapitalizace hra, 696 00:30:42,740 --> 00:30:49,260 takže se porovnávat-1, ./compare-1, a zadejte máma malými písmeny v obou případech. 697 00:30:49,260 --> 00:30:50,560 Teď je to totéž. 698 00:30:50,560 --> 00:30:54,080 A pokud bych to znovu s malá písmena, a pak možná velká písmena. 699 00:30:54,080 --> 00:30:56,720 Teď to opravdu odlišuje mezi velkými a malými písmeny. 700 00:30:56,720 --> 00:31:00,440 Takže není tak těžké, nebo magický, ale to teď vysvětlit 701 00:31:00,440 --> 00:31:03,140 co se děje pod kapotou. 702 00:31:03,140 --> 00:31:07,640 >> Takže co víc můžeme extrahovat z tohoto druhu lekce? 703 00:31:07,640 --> 00:31:08,980 Takže pojďme se podívat na to. 704 00:31:08,980 --> 00:31:15,380 Chystám se jít dopředu a napsat rychlý program, zde nazvaný copy-0. 705 00:31:15,380 --> 00:31:21,594 A teď pojďme do toho a vlastně pojďme dělat tohle-- s kopií-0, 706 00:31:21,594 --> 00:31:23,010 se podívat na to, co jsem se sem dostal. 707 00:31:23,010 --> 00:31:24,712 Poprvé jsem říci uživateli, řekni něco. 708 00:31:24,712 --> 00:31:26,420 Pak jsem si řetězec a já jsem uložil je v s. 709 00:31:26,420 --> 00:31:29,810 Pak jsem se zkontrolovat, zda je rovná rovná NULL, prostě vrátí 1. 710 00:31:29,810 --> 00:31:31,590 Tak to je jen kontrola směrodatná chyba. 711 00:31:31,590 --> 00:31:33,112 Nic zajímavého nestalo. 712 00:31:33,112 --> 00:31:36,320 A ve skutečnosti, pokud bychom se zbavit chyby kontrola, to vypadá jako týden 1 kód 713 00:31:36,320 --> 00:31:36,985 v tomto okamžiku. 714 00:31:36,985 --> 00:31:39,110 Ale já jsem začal dostat trochu lepší o tom. 715 00:31:39,110 --> 00:31:43,340 >> Nyní v řadě 16, před týdnem, možná dokonce pár dní nebo minutami, 716 00:31:43,340 --> 00:31:46,720 dalo by se říct linka 16 vytvoření proměnné nazvané t 717 00:31:46,720 --> 00:31:48,219 a kopírování to do něj. 718 00:31:48,219 --> 00:31:50,010 A to je naprosto rozumné stánek s jídlem. 719 00:31:50,010 --> 00:31:51,560 Ale buďte teď přesnější. 720 00:31:51,560 --> 00:31:54,190 Co se děje v řadě 16? 721 00:31:54,190 --> 00:31:56,170 To, co je stále zkopírován zprava doleva? 722 00:31:56,170 --> 00:31:56,669 To jo? 723 00:31:56,669 --> 00:31:58,490 Diváků: Je t dostat adresy s? 724 00:31:58,490 --> 00:32:01,220 >> DAVID J. Malan: Přesně tak, t je stále adresu s. 725 00:32:01,220 --> 00:32:05,170 Tak aby bylo jasno hned, když půjdu zpět k té předchozí příklad 726 00:32:05,170 --> 00:32:08,520 a já jsem upozornit na věc, kterou jsem zadali. 727 00:32:08,520 --> 00:32:11,640 A to, co jsem napsal in-- tady je s, a zde 728 00:32:11,640 --> 00:32:15,830 je to, co jsem napsal v někde v paměť, máma a pak zpětné lomítko 729 00:32:15,830 --> 00:32:17,840 0, která je přidána pro mě. 730 00:32:17,840 --> 00:32:23,060 To, co jsem uložené v tady, připomínají, To je v místě 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 To je to, co je v současné době v s. 732 00:32:24,655 --> 00:32:29,220 Takže pokud na lince 16, říkám, dej mi další proměnnou s názvem t a obchod 733 00:32:29,220 --> 00:32:33,590 v na hodnotu s, co dostane uloženy zde nebude maminka 734 00:32:33,590 --> 00:32:35,480 ale spíše jen číslo 1. 735 00:32:35,480 --> 00:32:38,520 >> Takže pokud se podíváme dopředu v tomto programu teď, co se bude dít? 736 00:32:38,520 --> 00:32:40,690 Takže si všimnout, že tam je Tato funkce vám mohlo 737 00:32:40,690 --> 00:32:44,410 využili to již před časem pro Caesara, nebo Vigenere, nebo možná vůbec ne. 738 00:32:44,410 --> 00:32:48,170 Tvrdím s mým printf, já jsem bude kapitalizovat kopírování t. 739 00:32:48,170 --> 00:32:51,616 Nejprve v řádku 19, rychlé zdravého rozumu zkontrolujte, strlen zkontroluje délku t. 740 00:32:51,616 --> 00:32:53,740 Protože nechci, aby se snaží vydělat něco 741 00:32:53,740 --> 00:32:55,104 v případě, že to není žádná řetězec. 742 00:32:55,104 --> 00:32:57,520 V případě, že uživatel jednoduše stisknout Enter, nic vydělat. 743 00:32:57,520 --> 00:33:01,100 Takže nechci dělat řádku 21. 744 00:33:01,100 --> 00:33:05,758 Takže linka 21 je vydělávat které písmeno, zdá se, ž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: Vypadá to, jako by to kopírování, který z nich? 747 00:33:08,722 --> 00:33:09,486 Diváků: 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 první m, protože oznámení, že jsem 750 00:33:12,685 --> 00:33:14,935 přechodem na toupper, který pokud jste nikdy neviděl, že je to 751 00:33:14,935 --> 00:33:16,980 jen funkce využít jako vstup. 752 00:33:16,980 --> 00:33:20,240 t držák nula znamená dát me znak nula t. 753 00:33:20,240 --> 00:33:22,550 A tak jak to Změnit obrázek, aby bylo jasné? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Co je potřeba, aby se přepisují nebo změnit s ohledem na S a T a máma 756 00:33:29,160 --> 00:33:30,097 zpětné lomítko nula. 757 00:33:30,097 --> 00:33:31,470 >> Diváků: [Neslyšitelné] 758 00:33:31,470 --> 00:33:34,030 >> DAVID J. Malan: Jo, tak tohle tu prostě 759 00:33:34,030 --> 00:33:40,860 potřebuje získat změnil to-- opravit tohle-- je třeba, aby se změnil na kapitálové m. 760 00:33:40,860 --> 00:33:44,330 Ale teď, podívejte se později v Program, když jsem vytisknout 761 00:33:44,330 --> 00:33:49,800 s a t, jak jsem tady uklidit, sledujte, co je bude dít vytištění 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 Nech mě jít dopředu a zadejte V meziměsíčně v malými. 764 00:33:57,140 --> 00:34:00,140 Všimněte si, jak původní a kopie byly aktivovány. 765 00:34:00,140 --> 00:34:00,850 Proč? 766 00:34:00,850 --> 00:34:04,431 No, s a t jsou oba směřující k, chcete-li, stejný kus paměti. 767 00:34:04,431 --> 00:34:06,930 A upřímně řečeno, to už je Opravdu uninteresting-- skutečnost 768 00:34:06,930 --> 00:34:09,150 že jsme pomocí adresy nula zde. 769 00:34:09,150 --> 00:34:11,719 Chci říct, že to opravdu jedno, kde věci jsou v paměti. 770 00:34:11,719 --> 00:34:13,550 Omlouvám se, že jsem mazání trochu moc. 771 00:34:13,550 --> 00:34:15,674 Ale já opravdu nestarám kde věci jsou v paměti. 772 00:34:15,674 --> 00:34:18,510 A tak, opravdu to, co programátoři mají tendenci přemýšlet o tom, 773 00:34:18,510 --> 00:34:21,080 je, že když mluvíte o adresu, nebo ukazatel, 774 00:34:21,080 --> 00:34:22,679 koho to zajímá, kde je v paměti. 775 00:34:22,679 --> 00:34:24,989 Je mi jedno, jestli je to na byte jeden nebo miliarda. 776 00:34:24,989 --> 00:34:27,920 Jen mě to zajímá, že to proměnná je účinně 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 od nynějška, spíše než slovíčkaření nad svévolným adresy paměti, pojďme 779 00:34:33,350 --> 00:34:36,710 jen začít kreslit ukazatele jako ukazatele, jako šipky. 780 00:34:36,710 --> 00:34:39,340 Takže to, co s a t opravdu jsou, Podle tohoto programu, 781 00:34:39,340 --> 00:34:42,130 kvůli tomu, jak jsem vytvořil t, je to jen dva samostatné proměnné 782 00:34:42,130 --> 00:34:43,840 ukázal na stejném kusu paměti. 783 00:34:43,840 --> 00:34:45,215 A je nám jedno, kde jsou. 784 00:34:45,215 --> 00:34:47,130 Takže můžeme abstraktní pryč tohoto detailu. 785 00:34:47,130 --> 00:34:48,780 >> Tak jak to mám opravit? 786 00:34:48,780 --> 00:34:54,120 Pokud chci napsat verzi kopie program, který vlastně kopíruje řetězec 787 00:34:54,120 --> 00:34:56,840 a kapitalizuje pouze kopírování, jen intuitivně, 788 00:34:56,840 --> 00:34:59,766 co má být přísada do našeho řešení? 789 00:34:59,766 --> 00:35:00,640 Diváků: [Neslyšitelné] 790 00:35:00,640 --> 00:35:01,420 DAVID J. Malan: Potřebujeme co? 791 00:35:01,420 --> 00:35:01,820 Diváků: Chunk paměti. 792 00:35:01,820 --> 00:35:03,280 DAVID J. Malan: Potřebujeme další kus paměti, že jo? 793 00:35:03,280 --> 00:35:05,360 Nevíme, jak se to přesto, nutně. 794 00:35:05,360 --> 00:35:11,330 Ale nějak jsem Potřebuji se to stalo tak, že původní maminka malými písmeny 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 pak, když jsem se změnit kopii, já nechtějí změnit tuto kopii zde. 797 00:35:19,770 --> 00:35:26,020 Místo toho jsem chtěl změnit pouze tento kopie tak, že originál je nezměněn. 798 00:35:26,020 --> 00:35:27,980 >> Takže, pojďme se podívat, jak bychom mohli udělat. 799 00:35:27,980 --> 00:35:31,800 V copy-1, který má již byl zbaven komentář, 800 00:35:31,800 --> 00:35:33,250 ale je komentoval online. 801 00:35:33,250 --> 00:35:36,710 Místo toho jsme dělat following-- tito linky jsou identické, dej mi řetězec 802 00:35:36,710 --> 00:35:38,340 a říkají to. 803 00:35:38,340 --> 00:35:43,500 Ale teď se podívejme na jednom z našich nejvíce složitý, ale poslední složitosti 804 00:35:43,500 --> 00:35:47,340 na chvíli, řádek 16 dělá přesně to. 805 00:35:47,340 --> 00:35:49,400 Takže pokud vaše pohodlné s picture jsme právě drew-- 806 00:35:49,400 --> 00:35:51,790 dej mi nový kus paměti, kopírovat všechno do toho, 807 00:35:51,790 --> 00:35:53,730 podívejme se, jak přeložit do kódu. 808 00:35:53,730 --> 00:35:59,400 >> Takže linka 16, na levé straně, char * t mi dává toto políčko tady. 809 00:35:59,400 --> 00:36:00,230 To je vše, co dělá. 810 00:36:00,230 --> 00:36:03,240 Na pravé straně, m Alloc, nebo malloc, 811 00:36:03,240 --> 00:36:06,480 je alokace paměti, super fantazie, mystický způsob, jak jen říkám 812 00:36:06,480 --> 00:36:07,640 dej mi kus paměti. 813 00:36:07,640 --> 00:36:09,290 Kolik paměti potřebujeme? 814 00:36:09,290 --> 00:36:10,910 No, je druh velkého výrazu. 815 00:36:10,910 --> 00:36:12,570 Ale pojďme se podívat, co to říká tady. 816 00:36:12,570 --> 00:36:15,940 Takže to, samozřejmě, je dát me délka řetězec s. 817 00:36:15,940 --> 00:36:19,094 Takže, máma by to mělo být, co? 818 00:36:19,094 --> 00:36:21,010 Takže jen tři, ne? máma je tři znaky. 819 00:36:21,010 --> 00:36:22,830 Nemusíte počítat zpětné lomítko nulu, když vás 820 00:36:22,830 --> 00:36:25,960 mluví o délce řetězce je to Vlastně lidské viditelné dopisy. 821 00:36:25,960 --> 00:36:28,020 Takže máma, takže to mi dává 3. 822 00:36:28,020 --> 00:36:31,170 Ale počkejte, já jsem teď přidáním 1. 823 00:36:31,170 --> 00:36:34,861 Proč vlastně chtějí, aby přidělit 4 bajty a ne jen 3? 824 00:36:34,861 --> 00:36:35,360 To jo? 825 00:36:35,360 --> 00:36:36,910 >> Diváků: Pro hodnotu sentinel? 826 00:36:36,910 --> 00:36:38,951 >> DAVID J. Malan: Přesně tak, pro tento sentinelové hodnotu. 827 00:36:38,951 --> 00:36:40,840 Pro zpětné lomítko nula, Potřebuji celkem 4 byty. 828 00:36:40,840 --> 00:36:42,870 Tak jsem třeba délka řetězce plus 1. 829 00:36:42,870 --> 00:36:45,400 A pak už jen pro dobrý measure-- , i když v tomto systému, 830 00:36:45,400 --> 00:36:49,390 vždycky to bude 1-- říkám vynásobte to podle velikosti char. 831 00:36:49,390 --> 00:36:51,552 Ukázalo se, že je sizeof operátor v C, který 832 00:36:51,552 --> 00:36:53,260 Jen vám řekne počet bajtů, které je 833 00:36:53,260 --> 00:36:54,700 potřebný pro určitý typ dat. 834 00:36:54,700 --> 00:36:57,740 Nefunguje pro pole, typicky, někdy to dělá. 835 00:36:57,740 --> 00:36:59,210 Ale v obecném případě, no. 836 00:36:59,210 --> 00:37:02,330 Ale to mi říci, kolik bajtů char je, který dopadá je vždy 1. 837 00:37:02,330 --> 00:37:04,080 Takže tohle je jako násobením 1. 838 00:37:04,080 --> 00:37:05,900 >> Tak výborný mystický hledá řádek kódu. 839 00:37:05,900 --> 00:37:09,320 Ale vše, co dělá, je dává mi kus paměti. 840 00:37:09,320 --> 00:37:13,590 Ale to se zdá, že kopírování něco do té paměti? 841 00:37:13,590 --> 00:37:14,560 Ještě ne. 842 00:37:14,560 --> 00:37:22,040 A tak co mám na lince 22 a 23, 24, 25, no, jsem prostě udělat. 843 00:37:22,040 --> 00:37:23,760 A to je druh old school teď věci. 844 00:37:23,760 --> 00:37:26,010 To je jako pset 2, kde jste jen v pohybu věci 845 00:37:26,010 --> 00:37:28,620 kolem v paměti, nebo spíše v řetězcích. 846 00:37:28,620 --> 00:37:31,920 >> Takže jsem iterace od 0 do délka řetězce s. 847 00:37:31,920 --> 00:37:37,820 A já kopírování i-tý znak v S do i-tého znaku v t. 848 00:37:37,820 --> 00:37:41,820 A protože jsem programátor, dělal Ujistěte se, že přidělit přesně tolik bajtů 849 00:37:41,820 --> 00:37:44,600 jak potřebuju, je to perfektní one-to-one vztah. 850 00:37:44,600 --> 00:37:47,060 A já kopírovat meziměsíčně v malá písmena na nový. 851 00:37:47,060 --> 00:37:50,170 A pak konečně, mám tento řádek. 852 00:37:50,170 --> 00:37:54,637 A tak je účinek je jen zúročit tento t zde. 853 00:37:54,637 --> 00:37:56,470 Takže hodně absorbovat, ale pokud jste právě v úvahu 854 00:37:56,470 --> 00:37:58,220 co se opravdu děje Na pod pokličku 855 00:37:58,220 --> 00:38:00,880 je jen pohybující se tyto bajtů kolem, vše, co 856 00:38:00,880 --> 00:38:06,617 je zapotřebí k vyřešení tohoto problému je jen proto, aby nám tento kus paměti. 857 00:38:06,617 --> 00:38:08,450 Nyní na riziko ohromující, dovolte mi ukázat 858 00:38:08,450 --> 00:38:13,200 jeden další příklad, který je téměř identické, s výjimkou pro tento jeden 859 00:38:13,200 --> 00:38:14,350 řádek kódu. 860 00:38:14,350 --> 00:38:18,870 Tak tohle je verze hacker tohoto programu, chcete-li. 861 00:38:18,870 --> 00:38:21,050 Ale ať to jen destilovat že do toho, co se děje. 862 00:38:21,050 --> 00:38:28,920 Linka 24 slouží k být tímto t držák i dostane y držák i. 863 00:38:28,920 --> 00:38:33,370 Teď, já se měním to mnohem více mystický hvězda t 864 00:38:33,370 --> 00:38:36,280 plus 1 se rovná hvězda s plus 1. 865 00:38:36,280 --> 00:38:38,702 >> Takže to, co se děje a proč máme hvězdy postavu? 866 00:38:38,702 --> 00:38:41,410 Už jsme neviděl hvězdu, a je to být používány odlišně zde. 867 00:38:41,410 --> 00:38:45,490 Již dříve jsme viděli char *, teď jsem viděl hvězda na začátku, a to je v pořádku. 868 00:38:45,490 --> 00:38:48,190 Vzhledem k tomu, to dopadá jsme může druh odvodit jen 869 00:38:48,190 --> 00:38:50,280 od těch, které nejprve zásady, co se děje. 870 00:38:50,280 --> 00:38:53,860 Jen aby bylo jasné, co je to? 871 00:38:53,860 --> 00:38:55,052 Minulý týden to byl řetězec. 872 00:38:55,052 --> 00:38:56,260 To nestačí už ne. 873 00:38:56,260 --> 00:38:57,690 Co je s, konkrétně? 874 00:38:57,690 --> 00:38:58,590 >> Diváků: [Neslyšitelné] 875 00:38:58,590 --> 00:38:59,881 >> DAVID J. Malan: Je to ukazatel. 876 00:38:59,881 --> 00:39:02,610 Je to adresu První znak jsme zadali. 877 00:39:02,610 --> 00:39:04,780 OK, co je t? 878 00:39:04,780 --> 00:39:05,660 >> Diváků: [Neslyšitelné] 879 00:39:05,660 --> 00:39:07,950 >> DAVID J. Malan: The adresa prvního bajtu 880 00:39:07,950 --> 00:39:10,490 v t, že kus paměti přidělena. 881 00:39:10,490 --> 00:39:14,720 Tak to dopadá, že když jsme se opakovat od 0 až na řetězec 882 00:39:14,720 --> 00:39:17,424 length-- v první řadě, i začíná na 0, protože 883 00:39:17,424 --> 00:39:18,840 z této staré školy pro smyčky věc. 884 00:39:18,840 --> 00:39:22,400 Tak právě pro jednoduchost, pojďme Předpokládejme, že první řádek kódu 885 00:39:22,400 --> 00:39:23,760 je opravdu jen to, že jo. 886 00:39:23,760 --> 00:39:26,080 Kdybych je nula, nula sčítání k něčemu pravděpodobně 887 00:39:26,080 --> 00:39:27,540 nebude mít vliv. 888 00:39:27,540 --> 00:39:28,560 >> Takže to, co je to říká? 889 00:39:28,560 --> 00:39:31,600 Ukazuje se, že hvězdy Operátor se v této souvislosti 890 00:39:31,600 --> 00:39:33,700 je dereference operátor, což je jen 891 00:39:33,700 --> 00:39:37,530 ozdobný způsob, jak říkat jít na následující adresu. 892 00:39:37,530 --> 00:39:42,080 Takže pokud s je adresa první charakter v tomto kusu paměti, 893 00:39:42,080 --> 00:39:43,630 * s prostředky tam. 894 00:39:43,630 --> 00:39:45,630 A protože jsme tažené obraz tímto způsobem, 895 00:39:45,630 --> 00:39:47,430 můžete přijmout po mentální model. 896 00:39:47,430 --> 00:39:51,030 Pokud je to s, a vy říkáte: * S *, s něco jako skluzavek a žebříky, 897 00:39:51,030 --> 00:39:54,540 pokud si vzpomenete hry z dětství, je jako sledovat tuto šipku a jít 898 00:39:54,540 --> 00:39:55,570 na adresu. 899 00:39:55,570 --> 00:39:57,080 >> * t je totéž. 900 00:39:57,080 --> 00:39:59,855 Takže začít tady, jděte na jeho bloku. 901 00:39:59,855 --> 00:40:03,350 Nemůžu jen tak čerpat z tato obrazovka, že tak. 902 00:40:03,350 --> 00:40:05,560 * t znamená jít sem. 903 00:40:05,560 --> 00:40:08,830 A pak je pro smyčka je jen rčení přesunout tento znak zde, 904 00:40:08,830 --> 00:40:11,330 přesunout tento znak zde, přesunout tento znak zde. 905 00:40:11,330 --> 00:40:12,890 Ale jak to mám udělat inkrementaci? 906 00:40:12,890 --> 00:40:15,430 Musím se vrátit zpět to, co jsem právě smazal. 907 00:40:15,430 --> 00:40:18,140 To je to, co se obecně nazývá ukazatel aritmetický, který 908 00:40:18,140 --> 00:40:20,040 znamená, že matematiku s adresami. 909 00:40:20,040 --> 00:40:22,460 >> Pokud se v tomto pro smyčce, Pořád postupně i, 910 00:40:22,460 --> 00:40:26,880 a s je adresa a t je adresa, když jsem jen držet přídavkem 1, 911 00:40:26,880 --> 00:40:31,406 to jen znamená, že neustále v pohybu vpřed, a dopředu, a předat do paměti. 912 00:40:31,406 --> 00:40:34,030 Je to jako Oxford Street se ulice, že budova je na CS. 913 00:40:34,030 --> 00:40:36,490 CS budovy je 33 Oxford Street. 914 00:40:36,490 --> 00:40:39,870 Takže pokud byste měli dělat 33 Oxford Street plus 1, 915 00:40:39,870 --> 00:40:42,870 která vás přivede na 34 Oxfordu Street, pak 35 Oxford Street, 916 00:40:42,870 --> 00:40:46,380 pak 36 Oxford Street, bez ohledu na ty, budovy ve skutečnosti jsou - v případě, že existují. 917 00:40:46,380 --> 00:40:50,540 A tak to je všechno děláme zde s ukazatelem aritmetiky. 918 00:40:50,540 --> 00:40:53,820 >> Takže je to super tajemný cesta vyjádřit sami. 919 00:40:53,820 --> 00:40:56,160 Ale to všechno se děje pod pokličku 920 00:40:56,160 --> 00:40:59,330 právě po tyto adresy, jako po mapu, chcete-li, 921 00:40:59,330 --> 00:41:02,692 nebo po šipky, jako je jsme vykreslen na obrazovku. 922 00:41:02,692 --> 00:41:04,910 OK, hodně stravitelné. 923 00:41:04,910 --> 00:41:10,410 Jakýkoliv dotaz na syntaxi, koncepty, ukazatele, malloc, nebo podobně. 924 00:41:10,410 --> 00:41:11,480 Jo, tady jako první. 925 00:41:11,480 --> 00:41:13,755 >> Diváků: Tak kde to říká * t rovná toupper * t, 926 00:41:13,755 --> 00:41:15,575 je to, že bude těžit všechna písmena nebo jenom-- 927 00:41:15,575 --> 00:41:17,283 >> DAVID J. Malan: Ah, opravdu dobrá otázka. 928 00:41:17,283 --> 00:41:19,805 Takže v tomto řádku tady, 31, to bude vydělávat 929 00:41:19,805 --> 00:41:21,430 první písmeno nebo všechna písmena. 930 00:41:21,430 --> 00:41:23,460 Takže pojďme odpovědět tím, že jde zpět do prvních principů. 931 00:41:23,460 --> 00:41:26,168 A první pravidla tady mám na mysli stačí jít do základní definice 932 00:41:26,168 --> 00:41:27,000 , co se jedná. 933 00:41:27,000 --> 00:41:29,770 Takže toupper je funkce těžící char. 934 00:41:29,770 --> 00:41:30,530 To je vše. 935 00:41:30,530 --> 00:41:36,740 * t znamená jít do first-- přejít na adresu v t. 936 00:41:36,740 --> 00:41:40,350 Takže, v obraze, pokud se jedná o blok paměti přidělené jsme s malloc, 937 00:41:40,350 --> 00:41:43,310 a to je t, * t znamená naleznete zde. 938 00:41:43,310 --> 00:41:46,710 >> Mezitím jste absolvování že hodnota, malá písmena m 939 00:41:46,710 --> 00:41:50,040 na toupper, jste stále zpět kapitál M, kde jste ho dávat? 940 00:41:50,040 --> 00:41:52,410 Ty uvedení v tomtéž místě. 941 00:41:52,410 --> 00:41:55,540 A tak touto logikou těch, základní definice je to jen 942 00:41:55,540 --> 00:41:58,792 kapitalizace první písmeno pokud iteraci s I nebo 943 00:41:58,792 --> 00:42:02,000 cyklus for nebo while, že to nebude dělat nic víc, než si to zeptat. 944 00:42:02,000 --> 00:42:02,583 Dobrá otázka. 945 00:42:02,583 --> 00:42:03,237 To jo? 946 00:42:03,237 --> 00:42:05,369 >> Diváků: Proč jste použít dereference způsobu spíše než 947 00:42:05,369 --> 00:42:05,979 pole? 948 00:42:05,979 --> 00:42:07,395 >> DAVID J. Malan: Á, dobrá otázka. 949 00:42:07,395 --> 00:42:10,672 Proč byste používat dereference Způsob namísto metody pole? 950 00:42:10,672 --> 00:42:12,130 Žádný zvláštní důvod, abych byl upřímný. 951 00:42:12,130 --> 00:42:15,290 A ve skutečnosti, pro toto druh například doprava, 952 00:42:15,290 --> 00:42:17,556 Já jsem jen dohadovat učinit Program složitější, 953 00:42:17,556 --> 00:42:19,680 více oči jsou zasklení nad, lidé jsou mimo kontrolu 954 00:42:19,680 --> 00:42:22,830 protože to vypadá mimořádně tajemný, ale i když to dělá to samé. 955 00:42:22,830 --> 00:42:26,695 A tak, upřímně řečeno, je to zbytečně vizuálně komplexní řešení 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ý design, pět z pěti pro návrh, 958 00:42:29,580 --> 00:42:33,140 ať už je to v držáku notace nebo se kurzor notace. 959 00:42:33,140 --> 00:42:36,299 Ale-- zvláště když se dostaneme Později v průběhu v pset 5 960 00:42:36,299 --> 00:42:39,340 když jsme se realizovat tento slovník, který Zmínil jsem se o pár times-- 961 00:42:39,340 --> 00:42:42,300 budeme vlastně starat o paměťové adresy nízkoúrovňové 962 00:42:42,300 --> 00:42:44,140 že jsme opravdu pochopili co se děje. 963 00:42:44,140 --> 00:42:48,300 >> Ale teď se ukazuje, že tato řádek kódu tady hranatých závorek 964 00:42:48,300 --> 00:42:49,900 ve skutečnosti neexistují. 965 00:42:49,900 --> 00:42:52,230 Oni jsou to, co se nazývá syntaktický cukr, který 966 00:42:52,230 --> 00:42:58,390 je jen podivně chladný způsob, jak říkat kompilátor převede hranaté závorky být 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 lidské konvence aby bylo možné jen psát 969 00:43:02,660 --> 00:43:04,220 Tyto velmi uživatelsky příjemný závorkách. 970 00:43:04,220 --> 00:43:06,850 Ale to, co překladač, zvonění, Je opravdu dělají kdykoliv 971 00:43:06,850 --> 00:43:10,970 napíšete, co je zdůrazněno v řadě 24, pod kapotou je to opravdu 972 00:43:10,970 --> 00:43:12,330 přeměňovat to na to. 973 00:43:12,330 --> 00:43:16,200 Je to prostě mnohem příjemnější jako člověk číst a psát kód, jako je potrubí 24. 974 00:43:16,200 --> 00:43:18,530 Ale nakonec ti, koleček příliš sundat 975 00:43:18,530 --> 00:43:21,780 když něčí vlastní pohodlí dostane silnější. 976 00:43:21,780 --> 00:43:27,240 >> Dobře, takže připomínají pak, že to byl druh největším problémem 977 00:43:27,240 --> 00:43:27,807 jsme narazili na. 978 00:43:27,807 --> 00:43:30,640 A to je to, co zažehlo tento celek zatraceně rozhovor o ukazatele, 979 00:43:30,640 --> 00:43:32,340 a adresy a kopírování věci. 980 00:43:32,340 --> 00:43:35,410 Bylo to proto, že jsme zakopnout to hloupá, hloupá otázka, přičemž 981 00:43:35,410 --> 00:43:38,830 Jsem implementoval logically-- s Lauren tady na demo a pomerančového džusu 982 00:43:38,830 --> 00:43:43,770 V milk-- dokonale algoritmicky správnou funkci 983 00:43:43,770 --> 00:43:47,010 pro přečerpání dvě proměnné " hodnoty, ale ta zatracená věc 984 00:43:47,010 --> 00:43:50,550 neměl žádné perzistentní, nebo trvalý, vliv na mém kódu. 985 00:43:50,550 --> 00:43:51,820 >> A proč to bylo? 986 00:43:51,820 --> 00:43:54,650 Stručně řečeno, proč je to implementace swapu 987 00:43:54,650 --> 00:43:58,740 logicky správné, ale nemá žádný vliv o proměnné, které jsou předány k němu, 988 00:43:58,740 --> 00:44:01,119 jako x a y na hlavní? 989 00:44:01,119 --> 00:44:02,410 Jaká byla podstata problému? 990 00:44:02,410 --> 00:44:02,909 To jo? 991 00:44:02,909 --> 00:44:05,532 Diváků: Vzhledem k tomu, variabilní vyrobené kopie proměnné v průsmyku 992 00:44:05,532 --> 00:44:06,240 prostřednictvím funkce. 993 00:44:06,240 --> 00:44:09,060 >> DAVID J. Malan: Přesně tak, když minete proměnné do funkce, nebo argumenty, 994 00:44:09,060 --> 00:44:11,030 do funkce, oni jsou prošel exempláři, který 995 00:44:11,030 --> 00:44:14,770 znamená, že dostanete identický hledá vzorek bitů pro obě x a y, 996 00:44:14,770 --> 00:44:15,955 zde nazývá a b. 997 00:44:15,955 --> 00:44:18,080 A můžete dělat cokoliv Chcete se těchto kopií, 998 00:44:18,080 --> 00:44:20,657 ale oni budou mít žádný Vliv na volající funkci. 999 00:44:20,657 --> 00:44:22,990 A ve skutečnosti, že jsme vylosovali obraz na obrazovce, odvolání 1000 00:44:22,990 --> 00:44:25,520 naposledy, přičemž pokud jste opravdu myslíte, že o tom, co je to 1001 00:44:25,520 --> 00:44:28,570 děje Vespod hood-- pokud To je paměť počítače, 1002 00:44:28,570 --> 00:44:31,650 a sem je kus Paměť se používá pro hlavní, 1003 00:44:31,650 --> 00:44:34,020 to je kus Paměť se používá jako odkládací prostor, 1004 00:44:34,020 --> 00:44:37,090 a tak i když má hlavní dvě proměnné, x a y, 1005 00:44:37,090 --> 00:44:41,840 odkládací mohou mít totožný hledá hodnoty, které jsou oba 1 a 2, 1006 00:44:41,840 --> 00:44:44,520 ale jsou zcela různé kousky paměti. 1007 00:44:44,520 --> 00:44:46,130 >> Takže potřebujeme řešení pro toto. 1008 00:44:46,130 --> 00:44:51,580 A upřímně řečeno, zdá se, že nyní mají řešení tohoto problému, vpravo. 1009 00:44:51,580 --> 00:44:55,760 Pokud bychom nyní mají schopnost manipulovat věci prostřednictvím adres 1010 00:44:55,760 --> 00:44:59,310 a, něco skluzavky a žebříky styl, postupujte podle následujících šipek 1011 00:44:59,310 --> 00:45:02,820 a jít kamkoliv chceme v paměti, nemohli jsme 1012 00:45:02,820 --> 00:45:06,220 vyřešit tento problém přechodu z hlavní vyměnit 1013 00:45:06,220 --> 00:45:09,650 ne hodnoty chceme Swap, ale jen intuitivně 1014 00:45:09,650 --> 00:45:11,630 to, co bychom mohli přejít na místo vyměnit? 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: Proč ne my jen projít to adresy, je to tak? 1017 00:45:15,244 --> 00:45:17,470 Proč dáváme swap mapu pokladu, chcete-li, 1018 00:45:17,470 --> 00:45:20,950 který vede ji do Skutečné hodnoty x a y. 1019 00:45:20,950 --> 00:45:24,340 Pojďme swapu, skutečně změní tyto originální kousky, spíše než 1020 00:45:24,340 --> 00:45:26,797 právě procházející kopie bitů. 1021 00:45:26,797 --> 00:45:29,130 A tak, ve skutečnosti, to je to, co je bude řešení. 1022 00:45:29,130 --> 00:45:31,899 Tato verze je zde jasně špatné a chybné. 1023 00:45:31,899 --> 00:45:35,190 A teď, na první pohled, to prostě vypadá jako jsme přidali spoustu hvězd náhodně 1024 00:45:35,190 --> 00:45:37,106 a přešel naše prsty že by to sestavit. 1025 00:45:37,106 --> 00:45:38,460 Ale to by teď sestavit. 1026 00:45:38,460 --> 00:45:40,090 >> Ale pojďme se podívat, co tyto věci znamenají. 1027 00:45:40,090 --> 00:45:43,990 A bohužel autoři C mohl zvolit další symbol 1028 00:45:43,990 --> 00:45:46,380 aby se tento malý jasnější, ale operátor hvězda 1029 00:45:46,380 --> 00:45:48,610 má jiný význam v dva různé kontexty. 1030 00:45:48,610 --> 00:45:50,890 A viděli jsme oba, ale pojďme rozlišovat. 1031 00:45:50,890 --> 00:45:55,310 >> Tak se na tam nahoře, když jsem se změnil a a b 1032 00:45:55,310 --> 00:46:00,470 od bytí INT ve špatné Verze pro int hvězdy, A a B, 1033 00:46:00,470 --> 00:46:01,740 dříve, byly celá čísla. 1034 00:46:01,740 --> 00:46:05,752 Jaké jsou a a b nyní v dobrý, zelené verze? 1035 00:46:05,752 --> 00:46:06,900 Jsou adresy. 1036 00:46:06,900 --> 00:46:09,610 Adresy z toho, co, aby bylo 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 jsem řka: int hvězdička znamená, 1039 00:46:12,520 --> 00:46:15,440 to je adresa celé číslo, konkrétně. 1040 00:46:15,440 --> 00:46:19,120 >> Takže teď oznámení v řádky kódu, něco jiného změnilo taky. 1041 00:46:19,120 --> 00:46:22,770 tmp zůstává stejný, protože je to jen dočasná celé číslo, 1042 00:46:22,770 --> 00:46:24,110 paměťová kouzlo tam. 1043 00:46:24,110 --> 00:46:26,370 Ale teď potřebuje hvězdu. 1044 00:46:26,370 --> 00:46:28,560 A ve skutečnosti, v každém další zmínka o a a b, 1045 00:46:28,560 --> 00:46:31,780 Všimněte si, že všechno, co je změna z červené na zelenou 1046 00:46:31,780 --> 00:46:34,209 je to, že jsem prefixing tyto proměnné s hvězdami. 1047 00:46:34,209 --> 00:46:35,750 Protože nechci kopírovat a a b. 1048 00:46:35,750 --> 00:46:40,350 Protože když jsem jen zkopírovat a a b a odkládací a a b, co mám vlastně vyměňovat? 1049 00:46:40,350 --> 00:46:43,760 Jen adresy, chci vyměnit co je v těchto adres. 1050 00:46:43,760 --> 00:46:44,860 Chci tam jít. 1051 00:46:44,860 --> 00:46:48,000 A tak se operátor hvězda uvnitř mé funkce, 1052 00:46:48,000 --> 00:46:51,700 ne uvnitř seznamu parametrů, znamená, že jít na tyto adresy 1053 00:46:51,700 --> 00:46:54,490 a skutečně změnit tyto hodnoty. 1054 00:46:54,490 --> 00:46:56,500 >> Takže to, co dělá obrázek nyní vypadat místo. 1055 00:46:56,500 --> 00:47:03,250 No, když místo toho jsem kolem in pro A a B ne 1 a 2-- 1056 00:47:03,250 --> 00:47:05,790 Vlastně jsem třeba přidat jeden další definice zde. 1057 00:47:05,790 --> 00:47:09,030 Takže předpokládám, že tento kus paměti je na místě 10. 1058 00:47:09,030 --> 00:47:12,960 >> To je v místě 11, ale toto je kousek zjednodušení, 1059 00:47:12,960 --> 00:47:18,900 Nyní mám dvě možnosti mám projít x a y nebo mohu projít jejich adresy? 1060 00:47:18,900 --> 00:47:22,500 Kdybych projít jejich adresy takhle, jen jsem 1061 00:47:22,500 --> 00:47:25,390 Nyní je třeba realizovat swapu na zelené kódem 1062 00:47:25,390 --> 00:47:29,080 tak, že když je to vidí a kdy ji b vidí, že nejde jen kopírovat a a b 1063 00:47:29,080 --> 00:47:30,540 a přesunout mléko a pomerančový džus. 1064 00:47:30,540 --> 00:47:32,664 Mléko a pomerančový džus metafora se porouchá, 1065 00:47:32,664 --> 00:47:35,060 protože ti jsou poháry kapalných a ne map. 1066 00:47:35,060 --> 00:47:37,750 Místo toho musíme jít oslovit 10 a my 1067 00:47:37,750 --> 00:47:42,420 muset jít řešit 11, a poté proveďte tuto odkládání logiku. 1068 00:47:42,420 --> 00:47:45,580 >> Takže logika je stejná, ale potřebujeme trochu jiný způsob, jak 1069 00:47:45,580 --> 00:47:47,160 přístupu k tyto proměnné. 1070 00:47:47,160 --> 00:47:52,400 A tak na konci, to, co Program má vypadat jako je tohle. 1071 00:47:52,400 --> 00:47:56,610 V swap.c doslovně zkopírován a vložili zelenou verzi. 1072 00:47:56,610 --> 00:47:58,450 Ale musím udělat jednu změnu. 1073 00:47:58,450 --> 00:48:00,180 Nestačí jen měnit swapu. 1074 00:48:00,180 --> 00:48:03,830 Jaké další řádek kódu musím změnit? 1075 00:48:03,830 --> 00:48:04,330 To jo? 1076 00:48:04,330 --> 00:48:05,770 >> Diváků: 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 když jsem se posunout až na hlavní, I Nemůžete jen předat x a y, 1079 00:48:09,985 --> 00:48:12,820 a slibuji, poslední kus novou syntaxí dnes. 1080 00:48:12,820 --> 00:48:17,200 Musím předat ne x a y, ale adresa x a y. 1081 00:48:17,200 --> 00:48:20,400 A ukázalo se, symbol že autoři vybrali C 1082 00:48:20,400 --> 00:48:23,860 je, pokud používáte ampersand tady, ne být zaměňována s bitové ampersand, 1083 00:48:23,860 --> 00:48:27,130 pokud používáte ampersand tady a tady ampersand, 1084 00:48:27,130 --> 00:48:29,570 to vyřeší za vás, Co je adresa x, 1085 00:48:29,570 --> 00:48:31,740 možná je to 10, co je adresa y, možná je to 1086 00:48:31,740 --> 00:48:35,400 11, a ty, které přechází v místo. 1087 00:48:35,400 --> 00:48:37,210 >> Takže hodně absorbovat všechny najednou. 1088 00:48:37,210 --> 00:48:40,190 Ale podívejme se nyní rychle Naši zbývající čtyři minuty 1089 00:48:40,190 --> 00:48:42,150 kde se věci mohou jít nakřivo. 1090 00:48:42,150 --> 00:48:45,120 A jak stranou, ve skutečnosti Vzal jsem si tento obrázek, 1091 00:48:45,120 --> 00:48:46,920 TF vzal tento obrázek rok nebo dva lety. 1092 00:48:46,920 --> 00:48:49,190 Tak tohle je zadní roh Eliota jídelně. 1093 00:48:49,190 --> 00:48:52,310 Ukazatele jsou snad nejtěžší téma, které budeme povídat v CS50. 1094 00:48:52,310 --> 00:48:54,810 Takže pokud máte starosti ten typ svahu je jako možná je to 1095 00:48:54,810 --> 00:48:56,770 více hokejkou takhle, si uvědomit, 1096 00:48:56,770 --> 00:49:00,160 jsme trochu blíží vrcholu v Podmínky koncepčního složitosti. 1097 00:49:00,160 --> 00:49:02,300 >> A já vychovávat to foto, protože přísahám 1098 00:49:02,300 --> 00:49:05,920 bohu, na podzim roku 1996, když jsem se CS50 s mým výuky kolegy, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, posadil mě v roh Eliota D. sále u oběda, 1100 00:49:09,620 --> 00:49:12,330 nebo večeře, nebo něco se pokusit aby mi pomohl pochopit ukazatelů. 1101 00:49:12,330 --> 00:49:16,520 A to je místo, kde jsem byl týdny poté, to bylo představeno v přednášce, když 1102 00:49:16,520 --> 00:49:18,170 Konečně jsem pochopil odkazy. 1103 00:49:18,170 --> 00:49:20,590 A doufám, že to klikne mnohem dříve pro vás. 1104 00:49:20,590 --> 00:49:23,540 Ale si to uvědomují naprosto mezi Sofistikovanější témata 1105 00:49:23,540 --> 00:49:24,420 jsme se podíval na. 1106 00:49:24,420 --> 00:49:25,819 Ale je to mezi nejsilnější. 1107 00:49:25,819 --> 00:49:28,860 A když si to, je to opravdu všechno jen tak, aby konečně dohromady. 1108 00:49:28,860 --> 00:49:31,460 Takže buďte ujištěni, že není je třeba pro všechny umyvadlem dnes. 1109 00:49:31,460 --> 00:49:32,980 >> Tak tady je poslední program budeme dívat. 1110 00:49:32,980 --> 00:49:35,605 A budeme končit s rychlé tři minuty claymation 1111 00:49:35,605 --> 00:49:37,030 vyroben náš přítel, Nick Parlante. 1112 00:49:37,030 --> 00:49:41,440 Zde je program, který na dva nejvyšší linky deklaruje proměnnou x a y. 1113 00:49:41,440 --> 00:49:44,780 Které jsou obě adresy celých čísel, AKA ukazatele. 1114 00:49:44,780 --> 00:49:48,125 Pak jsme přidělit dost paměť pro uložení int 1115 00:49:48,125 --> 00:49:51,344 a uložit adresu této paměti v x. 1116 00:49:51,344 --> 00:49:53,260 Takže, je to ještě jednodušší než například před. 1117 00:49:53,260 --> 00:49:56,100 Dej mi čtyři bajtů paměti, to je velikost int, 1118 00:49:56,100 --> 00:49:58,000 a dát tuto adresu x. 1119 00:49:58,000 --> 00:50:01,070 Tato linka znamená, že zde přejít 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 řádek mi dělá starosti. 1122 00:50:07,710 --> 00:50:12,620 Hvězda y znamená jít na adresu v y, a dal nešťastné číslo 13 tam. 1123 00:50:12,620 --> 00:50:15,780 Proč je to nebezpečné, v tomto bodě v story-- byť rychle řekl 1124 00:50:15,780 --> 00:50:17,980 v naší smrštění minut here-- proč je to špatné 1125 00:50:17,980 --> 00:50:19,660 když řeknu, jděte na adresu v y? 1126 00:50:19,660 --> 00:50:21,077 >> Diváků: Nemáte [neslyšitelných]. 1127 00:50:21,077 --> 00:50:22,910 DAVID J. Malan: nemám dal cokoliv y. 1128 00:50:22,910 --> 00:50:25,520 Takže to, co je hodnota y, v tomto bodě příběhu? 1129 00:50:25,520 --> 00:50:26,570 Nemáme tušení. 1130 00:50:26,570 --> 00:50:29,190 Je to nějaký odpad hodnota a ani Binky vědět. 1131 00:50:29,190 --> 00:50:32,532 Pokud bychom mohli skončit v této poznámce. 1132 00:50:32,532 --> 00:50:34,832 >> [VIDEOPŘEHRÁVÁNÍ] 1133 00:50:34,832 --> 00:50:36,500 >> Hej, Binky, probudit. 1134 00:50:36,500 --> 00:50:39,140 Je čas na ukazatel zábavu. 1135 00:50:39,140 --> 00:50:40,210 >> -Co je to? 1136 00:50:40,210 --> 00:50:41,690 Další informace o ukazatele? 1137 00:50:41,690 --> 00:50:43,570 Oh, dobrota. 1138 00:50:43,570 --> 00:50:46,600 >> No, aby mohli začít, myslím, že jsme bude potřebovat pár rad. 1139 00:50:46,600 --> 00:50:47,380 >> -DOBŘE. 1140 00:50:47,380 --> 00:50:51,120 Tento kód přiděluje dva ukazatele který může poukázat na celá čísla. 1141 00:50:51,120 --> 00:50:53,557 >> -OK, Dobře vidím dva ukazatele, ale oni 1142 00:50:53,557 --> 00:50:55,140 nezdá se, že by ukazoval na cokoliv. 1143 00:50:55,140 --> 00:50:55,970 >> -To je pravda. 1144 00:50:55,970 --> 00:50:58,100 Zpočátku na ukazatele neukazují na nic. 1145 00:50:58,100 --> 00:51:00,950 Věci, které poukazují na jsou volal pointees a jejich nastavení 1146 00:51:00,950 --> 00:51:02,330 je samostatný krok. 1147 00:51:02,330 --> 00:51:03,210 >> Oh, jasně, jasně. 1148 00:51:03,210 --> 00:51:03,940 Věděl jsem to. 1149 00:51:03,940 --> 00:51:05,730 Tyto pointees jsou oddělené. 1150 00:51:05,730 --> 00:51:08,310 Tak jak se vám přidělit 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 Tato část stanoví x poukázat na to. 1153 00:51:15,050 --> 00:51:16,240 >> Hej, to vypadá lépe. 1154 00:51:16,240 --> 00:51:17,743 Tak, aby to něco udělat. 1155 00:51:17,743 --> 00:51:23,580 >> -OK, Budu dereference ukazatel x do uložit číslo 42 do jeho pointee. 1156 00:51:23,580 --> 00:51:27,130 Pro tento trik, budu potřebovat moje kouzelná hůlka dereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> -Váš Kouzelná hůlka dereferencing? 1158 00:51:30,200 --> 00:51:32,310 Uh, to, to je skvělé. 1159 00:51:32,310 --> 00:51:34,270 >> Tohle je to, co kód vypadá. 1160 00:51:34,270 --> 00:51:35,970 Já si jen nastavit číslo a-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> Hej, podívejte se tam to jde. 1163 00:51:39,140 --> 00:51:43,980 Takže, dělá dereference na x následuje šipka na přístup k jeho pointee. 1164 00:51:43,980 --> 00:51:46,150 V tomto případě, pro uložení 42 tam. 1165 00:51:46,150 --> 00:51:50,700 Hej, zkuste použít k ukládání číslo 13 prostřednictvím druhého ukazatele, y. 1166 00:51:50,700 --> 00:51:51,840 >> -DOBŘE. 1167 00:51:51,840 --> 00:51:56,270 Půjdu sem na y, a získat číslo 13 nastavit. 1168 00:51:56,270 --> 00:52:00,380 A pak se hůlku dereferencing a jen-- 1169 00:52:00,380 --> 00:52:01,646 >> [Bzučák] 1170 00:52:01,646 --> 00:52:04,080 >> Oh, hej to nefungovalo. 1171 00:52:04,080 --> 00:52:06,470 Řekněme, uh, Binky, vůbec se mi nelíbí myslíte dereferencing 1172 00:52:06,470 --> 00:52:10,850 y je to dobrý nápad, protože nastavení up na pointee je samostatný krok. 1173 00:52:10,850 --> 00:52:12,480 A nemyslím si, že jsme kdy udělali. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Dobrý postřeh. 1175 00:52:14,620 --> 00:52:19,810 >> Jo, máme přiděleno ukazatel, y, ale nikdy jsme ji nastavte na poukazují na pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Velmi pozorný. 1177 00:52:21,590 --> 00:52:23,215 Hej, vy hledáte dobře tam, Binky. 1178 00:52:23,215 --> 00:52:26,390 Můžete to opravit tak, aby y body na stejnou pointee jako x. 1179 00:52:26,390 --> 00:52:29,290 >> Jasně, jsem použít svůj kouzelnou hůlkou přiřazení ukazatele. 1180 00:52:29,290 --> 00:52:31,970 >> -Je Že Bude to Problém, jako předtím? 1181 00:52:31,970 --> 00:52:33,790 >> Ne, to ne dotýkat pointees. 1182 00:52:33,790 --> 00:52:35,840 Je to jen jeden ukazatel změní poukázat na stejné thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [Praskavý zvuk] 1184 00:52:36,465 --> 00:52:37,450 --as jiného. 1185 00:52:37,450 --> 00:52:38,440 >> -Aha, chápu. 1186 00:52:38,440 --> 00:52:41,200 Nyní y odkazuje na stejném místě jako x. 1187 00:52:41,200 --> 00:52:42,950 Takže, počkejte, teď 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 vyzkoušet hůlku dereferencing znovu odeslat 13 konce. 1190 00:52:47,779 --> 00:52:51,110 >> Oh, OK, tady jde. 1191 00:52:51,110 --> 00:52:52,330 >> Hej, podívej se na to. 1192 00:52:52,330 --> 00:52:53,570 Nyní dereferencing práce na y. 1193 00:52:53,570 --> 00:52:57,900 A protože ukazatele jsou sdílení že jeden pointee, oba viz 13. 1194 00:52:57,900 --> 00:52:59,952 >> Jo, sdílení, uh, cokoliv. 1195 00:52:59,952 --> 00:53:01,535 Takže, budeme přejít místa teď? 1196 00:53:01,535 --> 00:53:03,730 >> Oh, podívej jsme mimo čas. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -Jen Pamatujte na tři pravidla ukazatel. 1199 00:53:06,520 --> 00:53:09,550 Číslo 1, základní struktura je, že máte ukazatel, 1200 00:53:09,550 --> 00:53:11,630 a poukazuje přes k pointee. 1201 00:53:11,630 --> 00:53:13,740 Ale ukazatel a pointee jsou oddělené. 1202 00:53:13,740 --> 00:53:15,620 A Častou chybou je nastavit ukazatel 1203 00:53:15,620 --> 00:53:18,000 ale zapomenout, aby to pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Číslo 2, ukazatel dereferencing začíná na ukazatel 1205 00:53:21,170 --> 00:53:24,020 a sleduje jeho šipku nad pro přístup k pointee. 1206 00:53:24,020 --> 00:53:27,815 Jak všichni víme, to funguje pouze v případě, že je pointee, jaký druh dostane zpět 1207 00:53:27,815 --> 00:53:29,260 na pravidlo číslo 1. 1208 00:53:29,260 --> 00:53:31,990 >> Číslo 3, ukazatel Přiřazení trvá jeden ukazatel 1209 00:53:31,990 --> 00:53:35,330 a mění ho, aby ukazoval na Stejný pointee jako další ukazatel. 1210 00:53:35,330 --> 00:53:37,150 Takže po zadání, dva ukazatele 1211 00:53:37,150 --> 00:53:40,927 bude ukazovat na stejné pointee, Někdy se říká, že sdílení. 1212 00:53:40,927 --> 00:53:42,510 A to je všechno, co je k tomu, opravdu. 1213 00:53:42,510 --> 00:53:43,130 Sbohem teď. 1214 00:53:43,130 --> 00:53:43,475 >> [END Přehrávání] 1215 00:53:43,475 --> 00:53:44,830 >> DAVID J. Malan: To je pro CS50. 1216 00:53:44,830 --> 00:53:46,246 Díky profesoru Nick Parlante. 1217 00:53:46,246 --> 00:53:47,730 Uvidíme se příští týden. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [ELECTRONIC přehrávání hudby] 1220 00:53:56,435 --> 00:57:22,775