1 00:00:00,000 --> 00:00:01,110 >> [Prehrávanie hudby] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 David J. Malan: Dobre. 4 00:00:11,650 --> 00:00:15,610 To je CS50, a to je na konci týždňa štyri. 5 00:00:15,610 --> 00:00:19,420 A jedným z tém dnešnej je, že digitálne forenznú, 6 00:00:19,420 --> 00:00:20,989 umenie obnovovať informácie. 7 00:00:20,989 --> 00:00:22,780 A skutočne, aj keď ste v stredu 8 00:00:22,780 --> 00:00:25,070 teraz mieri na troch a Breakout, budúci týždeň, 9 00:00:25,070 --> 00:00:27,880 Dôraz sa bude klásť na Práve táto doména. 10 00:00:27,880 --> 00:00:30,686 >> Takže jeden z najlepších miest, čo som kedy mal, bol späť v postgraduálnom štúdiu, 11 00:00:30,686 --> 00:00:33,560 keď som pracoval pre miestnu Middlesex County okresný prokurátor je 12 00:00:33,560 --> 00:00:34,950 kancelária, robí forenznú práce. 13 00:00:34,950 --> 00:00:37,450 Takže v podstate, Massachusetts Štátnej polície, príležitostne, 14 00:00:37,450 --> 00:00:40,100 Pri práci na prípadoch by priniesť veci, ako sú pevné disky 15 00:00:40,100 --> 00:00:42,185 a diskety a pamäťové karty a podobne. 16 00:00:42,185 --> 00:00:44,060 A oni by im ruky mne a mojim učiteľom, 17 00:00:44,060 --> 00:00:48,070 a naším cieľom bolo nájsť dôkazy, v prípade, že sa niektorý, na týchto médiách. 18 00:00:48,070 --> 00:00:50,700 Teraz, možno ste videli záblesky z tohto sveta forenznú 19 00:00:50,700 --> 00:00:53,000 v médiách, TV a filmy. 20 00:00:53,000 --> 00:00:55,730 Ale práca, ktorú som mal, a Trúfam si tvrdiť, že svet, 21 00:00:55,730 --> 00:00:57,550 nie je tak celkom, ako by ste ho vidieť. 22 00:00:57,550 --> 00:01:00,794 Poďme sa pozrieť na to, čo pravdepodobne ste videli. 23 00:01:00,794 --> 00:01:01,460 [PREHRÁVANIE] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 Teraz poďme dobré pozrieť sa na vás. 26 00:01:05,380 --> 00:01:06,850 >> [Prehrávanie hudby] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> Vydrž to. 29 00:01:12,932 --> 00:01:13,657 Spustiť to späť. 30 00:01:13,657 --> 00:01:14,733 >> -Počkajte Minútu. 31 00:01:14,733 --> 00:01:15,233 Choďte vpravo. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -Tu. 34 00:01:16,870 --> 00:01:17,369 Freeze to. 35 00:01:17,369 --> 00:01:17,930 -full Obrazovka. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 Freeze to. 38 00:01:18,875 --> 00:01:20,160 Utiahnuť sa na to, že jo? 39 00:01:20,160 --> 00:01:22,126 >> -vector V na to človek od zadného kolesa. 40 00:01:22,126 --> 00:01:24,435 >> -zvětšení Tu na tomto mieste. 41 00:01:24,435 --> 00:01:28,580 >> -s Pravé zariadení, Obraz je možné zväčšiť a brúsiť. 42 00:01:28,580 --> 00:01:29,330 >> Čo je to? 43 00:01:29,330 --> 00:01:30,780 >> -to Vylepšenia programu. 44 00:01:30,780 --> 00:01:32,170 >> Vieš jasné, že sa nejaké? 45 00:01:32,170 --> 00:01:33,070 >> Ja neviem. 46 00:01:33,070 --> 00:01:34,150 Poďme zvýšenie. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance § A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 Zvýšila som detail, a-- 50 00:01:38,562 --> 00:01:40,020 Ja myslím, že je dosť zlepšiť. 51 00:01:40,020 --> 00:01:40,976 Uvoľnite ho na mojej obrazovke. 52 00:01:40,976 --> 00:01:42,559 >> Ja lepší odraz v očiach. 53 00:01:42,559 --> 00:01:44,322 Nechaj to bežať tak prostredníctvom Vylepšenie videa. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, Môžete zlepšiť to? 55 00:01:45,210 --> 00:01:45,710 >> -Hang Na. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -Bol Som pracoval na tejto úvahy. 58 00:01:49,458 --> 00:01:50,402 >> -je Niečí odraz. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 -je Odraz tváre. 61 00:01:52,870 --> 00:01:53,694 >> -The Reflexia! 62 00:01:53,694 --> 00:01:54,610 -je Odraz. 63 00:01:54,610 --> 00:01:55,880 -zvětšení Na zrkadlo. 64 00:01:55,880 --> 00:01:57,860 Môžete vidieť odraz. 65 00:01:57,860 --> 00:01:59,630 >> Vieš zlepšiť obraz odtiaľto? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 Vieš to zlepšiť? 68 00:02:01,210 --> 00:02:02,190 Vieš to zlepšiť? 69 00:02:02,190 --> 00:02:03,066 -Môžeme Zlepšiť to? 70 00:02:03,066 --> 00:02:03,898 Vieš to zlepšiť? 71 00:02:03,898 --> 00:02:04,740 Vydrž chvíľku. 72 00:02:04,740 --> 00:02:05,281 Budem zvýšiť. 73 00:02:05,281 --> 00:02:06,470 -zvětšení Na dvere. 74 00:02:06,470 --> 00:02:06,970 -krát 10. 75 00:02:06,970 --> 00:02:08,009 -zoom. 76 00:02:08,009 --> 00:02:08,509 -Move V. 77 00:02:08,509 --> 00:02:09,340 Viac. 78 00:02:09,340 --> 00:02:10,094 Počkať, zastaviť. 79 00:02:10,094 --> 00:02:10,750 Prestaň. 80 00:02:10,750 --> 00:02:11,250 -Pause To. 81 00:02:11,250 --> 00:02:13,542 -Rotate Nás 75 stupňov okolo vertikálnej, prosím. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> Prestaň. 84 00:02:16,127 --> 00:02:19,330 Vráťte sa do časti o dverám. 85 00:02:19,330 --> 00:02:21,420 >> Rozumiem obrazový zosilňovač, ktorý môže rastrový obrázok? 86 00:02:21,420 --> 00:02:24,420 >> -Možno Môžeme použiť Pradeep Singh spôsob, ako vidieť do okien. 87 00:02:24,420 --> 00:02:25,902 >> -The Software je najmodernejšia. 88 00:02:25,902 --> 00:02:26,866 >> -The Vlastné číslo je vypnutý. 89 00:02:26,866 --> 00:02:29,758 >> -S Doprava Kombinácia algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> -je Prijatá na osvetlenie algoritmy na ďalšiu úroveň, 91 00:02:32,168 --> 00:02:34,110 a môžem ich použiť na zvýšiť túto fotografiu. 92 00:02:34,110 --> 00:02:36,840 >> -Lock Ďalej a rozšíriť osi z. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 Vylepšiť. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 -Freeze A vylepšiť. 97 00:02:40,070 --> 00:02:43,420 [END Videoprehrávanie] 98 00:02:43,420 --> 00:02:45,830 David J. Malan: Tak to sú všetky slová, ale neboli 99 00:02:45,830 --> 00:02:47,870 používa vo vetách správne. 100 00:02:47,870 --> 00:02:52,370 A skutočne v budúcnosti, kedykoľvek, prosím, počujete niekoho hovoriť slovo, 101 00:02:52,370 --> 00:02:54,250 "Posilniť," zasmial len trochu. 102 00:02:54,250 --> 00:02:57,190 Vzhľadom k tomu, keď sa pokúsite zvýšiť, Napríklad, to je to, čo sa stane. 103 00:02:57,190 --> 00:02:58,580 >> Tak tu je nádherná fotka. 104 00:02:58,580 --> 00:02:59,720 To je CS50 vlastné Daven. 105 00:02:59,720 --> 00:03:03,740 A predpokladám, že by sme chceli zamerať na iskrou v oku, 106 00:03:03,740 --> 00:03:05,870 alebo odraz zlý chlap, ktorý bol jasne 107 00:03:05,870 --> 00:03:07,820 zachytený bezpečnostnou kamerou. 108 00:03:07,820 --> 00:03:10,330 To je to, čo sa stane, keď môžete priblížiť na obrazu, ktorý 109 00:03:10,330 --> 00:03:14,060 má iba konečný počet bitov, s ním spojené. 110 00:03:14,060 --> 00:03:15,420 >> To je to, čo by ste si. 111 00:03:15,420 --> 00:03:19,190 A skutočne, v Daven oka je ale štyri, možno šesť bodov 112 00:03:19,190 --> 00:03:22,110 že skladať presne to, čo tam mihajú. 113 00:03:22,110 --> 00:03:25,890 Takže problém Set Four bude mať v konečnom dôsledku preskúmať tento svet, a to najmä 114 00:03:25,890 --> 00:03:28,090 podľa povahy niečo nazývame súbor I / O, kde 115 00:03:28,090 --> 00:03:31,000 I / O je len ozdobný spôsob, ako hovorí, vstup a výstup. 116 00:03:31,000 --> 00:03:34,280 >> Takže doteraz, všetky interakcie sme mali s počítačom 117 00:03:34,280 --> 00:03:36,770 boli do značnej miery s vaším klávesnica a displej, 118 00:03:36,770 --> 00:03:40,770 ale nie toľko, s pevným diskom, alebo ukladanie súborov mimo tie, ktoré 119 00:03:40,770 --> 00:03:41,620 sami napísať. 120 00:03:41,620 --> 00:03:44,570 Vaše programy tak ďaleko majú nie je vytváranie a ukladanie, 121 00:03:44,570 --> 00:03:46,270 a aktualizovať svoje vlastné súbory. 122 00:03:46,270 --> 00:03:47,150 >> No, čo je to súbor? 123 00:03:47,150 --> 00:03:48,105 No, niečo ako JPEG. 124 00:03:48,105 --> 00:03:50,520 To je obrázok, ktorý by mohol majú alebo nahrať na Facebook, 125 00:03:50,520 --> 00:03:51,690 alebo vidieť nikde na webe. 126 00:03:51,690 --> 00:03:54,460 V skutočnosti, že fotografie sme práve píla Daven bol JPEG. 127 00:03:54,460 --> 00:03:57,570 A čo je zaujímavé, o súborov, ako je JPEG 128 00:03:57,570 --> 00:04:02,170 je, že môžu byť identifikované, typicky, určitými vzormi bitov. 129 00:04:02,170 --> 00:04:05,200 >> Inými slovami, to, čo je možné, že rozlišuje JPEG z GIF 130 00:04:05,200 --> 00:04:08,109 od PING z Wordu Dokument zo súboru programu Excel? 131 00:04:08,109 --> 00:04:09,900 No, je to proste iný vzory bitov. 132 00:04:09,900 --> 00:04:12,820 A tie rôzne vzory zvyčajne na začiatku týchto súborov. 133 00:04:12,820 --> 00:04:18,200 >> Takže keď váš počítač otvorí Word doc, alebo ak počítač otvorí JPEG, 134 00:04:18,200 --> 00:04:20,940 to vyzerá typicky Prvých niekoľko bitov v súbore. 135 00:04:20,940 --> 00:04:24,059 A ak to uzná vzor, hovorí, oh, to je obraz. 136 00:04:24,059 --> 00:04:25,850 Dovoľte mi, aby som ju pre užívateľ ako grafiku. 137 00:04:25,850 --> 00:04:27,870 Alebo, oh, toto vyzerá ako Word doc. 138 00:04:27,870 --> 00:04:30,480 Dovoľte mi ukázať užívateľovi ako esej. 139 00:04:30,480 --> 00:04:33,020 >> Tak napríklad, JPEG, Ukazuje sa, že sú 140 00:04:33,020 --> 00:04:35,460 pomerne sofistikované pod kapotou. 141 00:04:35,460 --> 00:04:40,140 Ale prvé tri bajty najviac každý Kto JPEG s týmito tromi číslami. 142 00:04:40,140 --> 00:04:44,680 Tak bajt nula, jedna, a dve, v Najviac každý JPEG, 255, potom číslo 143 00:04:44,680 --> 00:04:46,675 216, potom číslo 255. 144 00:04:46,675 --> 00:04:48,990 >> A to, čo budete môcť začať robiť budúci týždeň 145 00:04:48,990 --> 00:04:52,920 je vlastne strkať pod kapucňa súborov ako JPEG 146 00:04:52,920 --> 00:04:57,210 a ako bitmapové súbory, a videl Čo je tam vždy tak dlho, 147 00:04:57,210 --> 00:04:58,650 ako ste boli pomocou počítača. 148 00:04:58,650 --> 00:05:01,860 >> Ale to, čo tam nie je zvyčajne písaný ako desatinné čísla, ako je tento. 149 00:05:01,860 --> 00:05:04,620 Počítačoví experti nie majú tendenciu hovoriť v desiatkovej sústave. 150 00:05:04,620 --> 00:05:06,139 Oni naozaj hovoria v binárnom formáte. 151 00:05:06,139 --> 00:05:07,930 Typicky, keď chceme vyjadriť čísla, 152 00:05:07,930 --> 00:05:10,710 sme vlastne používať hexadecimálne, ktoré môžu vyvolať 153 00:05:10,710 --> 00:05:13,027 z, povedzme, Problem Set Jeden, ktorý napádal 154 00:05:13,027 --> 00:05:14,610 môžete premýšľať o inom systéme. 155 00:05:14,610 --> 00:05:17,170 >> My, samozrejme, sú oboznámení s desatinné číslo, nula až deväť. 156 00:05:17,170 --> 00:05:18,215 Hovorili sme o binárne. 157 00:05:18,215 --> 00:05:20,710 A my naozaj nemáme používať, že veľa tu 158 00:05:20,710 --> 00:05:22,470 von, pretože počítače sa použiť. 159 00:05:22,470 --> 00:05:24,900 Ale programátori budú veľmi často, ale nie vždy, 160 00:05:24,900 --> 00:05:29,360 používať hexadecimálne, čo jednoducho znamená, budete mať 16 znakov do abecedy, 161 00:05:29,360 --> 00:05:31,330 na rozdiel od dvoch alebo 10. 162 00:05:31,330 --> 00:05:34,530 >> Tak ako sa vám počítať do vyššej ako deväť v hexadecimálnej sústave? 163 00:05:34,530 --> 00:05:41,120 Ty ísť 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, len konvencií. 164 00:05:41,120 --> 00:05:43,540 Ale čo je kľúčové je, že každý z nich je jeden symbol. 165 00:05:43,540 --> 00:05:44,340 Neexistuje žiadna 10. 166 00:05:44,340 --> 00:05:48,400 Neexistuje žiadna 11, sama o sebe, pretože každý vaše číslic, rovnako ako v desiatkovej sústave 167 00:05:48,400 --> 00:05:51,940 a rovnako ako v binárnej, by len byť jediný znak, konvencií. 168 00:05:51,940 --> 00:05:55,280 >> Tak to je teda abeceda máme ktoré máme k dispozícii na šestnástkové. 169 00:05:55,280 --> 00:05:58,600 Takže čo JPEG vyzerať, ak vás mal vypísať tie prvé tri 170 00:05:58,600 --> 00:06:01,980 bajty nie ako desatinné ale napríklad ako hexadecimálne? 171 00:06:01,980 --> 00:06:03,640 A prečo je hex aj všetko to užitočné? 172 00:06:03,640 --> 00:06:05,290 >> No, rýchly pohľad na príklad. 173 00:06:05,290 --> 00:06:09,030 Takže keď som sa vypísať bity, ktoré predstavujú tieto desatinné numbers-- 174 00:06:09,030 --> 00:06:12,450 to by mohlo byť trochu hrdzavý teraz od niekoľkých týždňov späť 175 00:06:12,450 --> 00:06:14,820 ale ľavý a pravá sú celkom jednoduché. 176 00:06:14,820 --> 00:06:17,990 255 bol najväčší počet sme môže predstavovať s ôsmich bitov. 177 00:06:17,990 --> 00:06:18,820 Bolo to všetky tie. 178 00:06:18,820 --> 00:06:21,320 Takže jediný, ktorý je mierne Zaujímavé je prostredný. 179 00:06:21,320 --> 00:06:24,700 A ak ste trochu mimo to matematika, budete vyvodiť, že skutočne 180 00:06:24,700 --> 00:06:27,949 že vzorka z jedného a nuly predstavuje 216. 181 00:06:27,949 --> 00:06:30,240 Takže povedzme, stanovuje pre teraz, že to je správne. 182 00:06:30,240 --> 00:06:31,730 Ale prečo je to zaujímavé? 183 00:06:31,730 --> 00:06:33,970 >> No, byte, samozrejme, je osem bitov. 184 00:06:33,970 --> 00:06:38,980 A ukázalo sa, že ak si myslíte, z bytu ako dva kusy štyroch bitov, 185 00:06:38,980 --> 00:06:39,500 takto. 186 00:06:39,500 --> 00:06:41,000 Dovoľte mi pridať trochu priestoru. 187 00:06:41,000 --> 00:06:42,550 Tak pred, po. 188 00:06:42,550 --> 00:06:46,520 Práve som pridal nejaké biele miesto Z dôvodu tu vizualizáciu je. 189 00:06:46,520 --> 00:06:51,840 Ako môžeme teraz predstavujú v, povedzme, hexadecimálne každý quad bitov, 190 00:06:51,840 --> 00:06:52,880 každá sada štyroch bitov? 191 00:06:52,880 --> 00:06:56,420 >> Tak napríklad, v ľavej Teraz máme 1111 v binárnej. 192 00:06:56,420 --> 00:07:00,420 Čo je to číslo v desiatkovej sústave, ak si z matematiky? 193 00:07:00,420 --> 00:07:03,780 Máte ones miesto, dvojky miesto, miesto štvorky a osmičky miesto. 194 00:07:03,780 --> 00:07:04,341 >> Divákov: 15. 195 00:07:04,341 --> 00:07:05,340 David J. Malan: Je to 15. 196 00:07:05,340 --> 00:07:08,340 Takže ak budeme robiť osem plus štyri plus dva plus jedna, dostaneme 15. 197 00:07:08,340 --> 00:07:11,790 Takže som sa mohol zapísať 15 pod 1111, ale celý vtip tu 198 00:07:11,790 --> 00:07:13,190 je hexadecimálny, nie desiatkovej. 199 00:07:13,190 --> 00:07:17,310 Takže namiesto písania o 15, 1-5, Chystám sa napísať, že v hexadecimálnom tvare, 200 00:07:17,310 --> 00:07:22,311 ktorá, ak si myslíte, že späť, ak máte nula až f, čo sa 15 bude? 201 00:07:22,311 --> 00:07:22,810 DIVÁKOV: f. 202 00:07:22,810 --> 00:07:24,434 David J. Malan: Tak to dopadá, že je to f. 203 00:07:24,434 --> 00:07:29,140 A môžete na to prišiel tým, že hovorí, No, či je 10, potom OK, f je 15. 204 00:07:29,140 --> 00:07:33,250 Takže v skutočnosti, môžeme prepísať tento rovnaký súbor čísel je f. 205 00:07:33,250 --> 00:07:35,750 A potom keď to urobíme trochu matematiky, budeme odvodiť, že to je d. 206 00:07:35,750 --> 00:07:38,650 Osem je celkom jednoduché, pretože sme mať jeden v mieste osmičky. 207 00:07:38,650 --> 00:07:40,620 A potom máme ešte pár f f je. 208 00:07:40,620 --> 00:07:44,669 >> Takže to, čo ľudia majú tendenciu robiť podľa konvencie pri použití v šestnástkovej sústave je jednoducho 209 00:07:44,669 --> 00:07:47,710 napísať to trochu stručnejšie, zbaviť väčšiny z toho prázdneho miesta. 210 00:07:47,710 --> 00:07:50,890 A len byť super jasné čitateľovi, že je v šestnástkovej sústave, 211 00:07:50,890 --> 00:07:54,670 jednoduché konvencie medzi ľudia sa píšete nula 212 00:07:54,670 --> 00:07:58,000 x, ktorý nemá žiadny iný význam ako vizuálny identifikátor, 213 00:07:58,000 --> 00:07:59,590 tu je hexadecimálne číslo. 214 00:07:59,590 --> 00:08:04,210 >> A potom si dal dve číslice, f f v tomto prípade, potom d, potom f f. 215 00:08:04,210 --> 00:08:06,700 Tak dlhý príbeh krátky, hexadecimálne len inklinuje 216 00:08:06,700 --> 00:08:11,990 , Že sú užitočné, pretože každý z jeho číslice, nula až f dokonale linky 217 00:08:11,990 --> 00:08:13,880 až sa vzorom štyroch bitov. 218 00:08:13,880 --> 00:08:18,080 >> Takže ak máte dve hexadecimálne číslice, nula až F, znova a znova, 219 00:08:18,080 --> 00:08:20,256 ktoré vám umožnia dokonale Osem bitov alebo jeden bajt. 220 00:08:20,256 --> 00:08:22,380 Takže to je dôvod, prečo má tendenciu byť konvenčne užitočná. 221 00:08:22,380 --> 00:08:24,990 Nie je k duševnému Obsah naozaj za to, 222 00:08:24,990 --> 00:08:27,010 iný ako jeho skutočné užitočnosti. 223 00:08:27,010 --> 00:08:29,310 >> Teraz JPEG nie sú jedinou formáty súborov pre grafiku. 224 00:08:29,310 --> 00:08:33,230 Môžete si pripomenúť, že existujú súbory, ako je to vo svete, 225 00:08:33,230 --> 00:08:34,830 aspoň z pár rokov späť. 226 00:08:34,830 --> 00:08:37,580 >> Takže to bolo vlastne nainštalovaný v systéme Windows XP 227 00:08:37,580 --> 00:08:39,960 na miliónoch počítačov po celom svete. 228 00:08:39,960 --> 00:08:43,000 A to bol súbor bitmapy BMP. 229 00:08:43,000 --> 00:08:47,690 A rastrový súbor, ako uvidíte ďalšie týždeň, len sa rozumie vzorka bodiek, 230 00:08:47,690 --> 00:08:51,710 pixelov, ako sa im hovorí, Mapa na kúsky, naozaj. 231 00:08:51,710 --> 00:08:55,160 >> Takže to, čo je zaujímavé, aj keď, o tomto formáte, BMP, je 232 00:08:55,160 --> 00:08:58,590 že pod kapotou, to má viac ako len tri byty 233 00:08:58,590 --> 00:09:01,020 ktoré tvoria jeho hlavičky, takže hovoriť, prvých pár súst. 234 00:09:01,020 --> 00:09:03,330 V skutočnosti to vyzerá trochu zložité na prvý pohľad. 235 00:09:03,330 --> 00:09:04,704 A uvidíte to v sade P. 236 00:09:04,704 --> 00:09:06,810 A ako sa niečo najmä z toho teraz 237 00:09:06,810 --> 00:09:10,720 nie je tak dôležité, ako len to, že na začiatku každej bitmapy 238 00:09:10,720 --> 00:09:13,823 súbor, grafický formát, je tu celá banda čísel. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> Teraz Microsoft, Autorom tohto formátu, 241 00:09:16,720 --> 00:09:18,820 tendenciu volať tým, Veci, ktoré ints a znaky 242 00:09:18,820 --> 00:09:22,259 , Pláva na hladine, ale slová a d slová a túži a byty. 243 00:09:22,259 --> 00:09:23,800 Takže sú to len rôzne dátové typy. 244 00:09:23,800 --> 00:09:25,170 Sú rôzne názvy pre rovnakú vec. 245 00:09:25,170 --> 00:09:26,740 Ale uvidíte, že v P stanovila štyri. 246 00:09:26,740 --> 00:09:31,450 >> To je ale iba povedať, že ak je človek poklepe nejaký súbor BMP na jeho 247 00:09:31,450 --> 00:09:35,015 alebo jej pevný disk, a otvorí sa okno sa ukazuje mu, že obraz, 248 00:09:35,015 --> 00:09:38,500 čo sa stalo, pretože operačný Systém pravdepodobne všimli nielen 249 00:09:38,500 --> 00:09:41,460 rozšírenie .BMP v názve súboru, 250 00:09:41,460 --> 00:09:45,010 ale aj skutočnosť, že tam je nejaký konvencie vzoru bitov 251 00:09:45,010 --> 00:09:47,490 na samom začiatku tohto bitmapového súboru. 252 00:09:47,490 --> 00:09:50,270 >> Ale poďme sa zamerať na také zložité súboru, 253 00:09:50,270 --> 00:09:52,120 ale na niečo také. 254 00:09:52,120 --> 00:09:55,190 Predpokladám, že tu v gedit, I proste začiatky 255 00:09:55,190 --> 00:09:57,070 programu, ktorý je veľmi jednoduchý. 256 00:09:57,070 --> 00:09:58,860 Mám nejaké zahŕňa až hore. 257 00:09:58,860 --> 00:10:02,120 Teraz mám # include "structs.h", ale Vrátim sa k tomu za chvíľu. 258 00:10:02,120 --> 00:10:03,974 Ale to je užitočné pre teraz. 259 00:10:03,974 --> 00:10:05,890 Tak toto je program že sa to realizovať 260 00:10:05,890 --> 00:10:07,335 ako databáza registrátora. 261 00:10:07,335 --> 00:10:09,710 Takže databázy študentov, a každý študent vo svete 262 00:10:09,710 --> 00:10:13,190 má svoje meno a dom a pravdepodobne niektoré ďalšie veci, ale budeme držať to jednoduchý. 263 00:10:13,190 --> 00:10:15,140 Každý študent má svoje meno a domu. 264 00:10:15,140 --> 00:10:17,700 >> Takže keď som chcel napísať program, ktorého zmyslom života 265 00:10:17,700 --> 00:10:19,860 práve iterovat od nulu až na tri, 266 00:10:19,860 --> 00:10:22,070 v prípade, že je tri študentmi na Harvardovej univerzite. 267 00:10:22,070 --> 00:10:25,350 A chcem, aby si pomocou getString, meno a house každého študenta, 268 00:10:25,350 --> 00:10:26,600 a potom už len vytlačiť tie von. 269 00:10:26,600 --> 00:10:28,630 >> To je niečo ako týždňa Jeden, týždeň Dve veci teraz, 270 00:10:28,630 --> 00:10:30,810 kde chcem len pre slučka alebo niečo také. 271 00:10:30,810 --> 00:10:34,500 A chcem volať getString niekoľko krát, a potom vytlačte f niekoľkokrát. 272 00:10:34,500 --> 00:10:37,340 Tak ako by som mohol urobiť, aj keď, keď obaja meno a dom 273 00:10:37,340 --> 00:10:39,070 sú zapojené pre každého študenta? 274 00:10:39,070 --> 00:10:42,830 >> Takže môj prvý inštinkt by mohli byť niečo také. 275 00:10:42,830 --> 00:10:49,620 Mohol by som najprv povedať, dobre, daj mi, povedať, pole reťazcov s názvom mena. 276 00:10:49,620 --> 00:10:51,530 A nechcem tu napevno tri. 277 00:10:51,530 --> 00:10:53,064 Čo chcem, aby tam dal? 278 00:10:53,064 --> 00:10:55,730 Takže študenti, pretože to je práve konštanta deklarovaná v hornej časti, 279 00:10:55,730 --> 00:10:57,860 len tak nemám natvrdo tri na viacerých miestach. 280 00:10:57,860 --> 00:11:00,859 Týmto spôsobom, môže sa mi to zmeniť na jednom mieste, a to má vplyv na zmenu všade. 281 00:11:00,859 --> 00:11:04,470 A potom, ja by som mohol robiť string domy študentov. 282 00:11:04,470 --> 00:11:10,250 >> A teraz, mohol by som niečo také for (int i = 0; i <študentov; i ++. 283 00:11:10,250 --> 00:11:14,390 Takže som písať rýchlo, ale je to teraz pravdepodobne oboznámení syntaxe. 284 00:11:14,390 --> 00:11:17,030 >> A teraz je to novší. 285 00:11:17,030 --> 00:11:22,890 Ak chcem, aby sa v i-tom Meno študenta, myslím, že som to urobiť. 286 00:11:22,890 --> 00:11:26,480 A potom, nie ako mená ale domy bracketing aj. 287 00:11:26,480 --> 00:11:29,930 Ja to urobiť, getString, a nechať me sa vrátiť a opraviť túto linku. 288 00:11:29,930 --> 00:11:30,430 Súhlasíte s tým? 289 00:11:30,430 --> 00:11:31,200 Nesúhlasíte? 290 00:11:31,200 --> 00:11:32,366 Nie je to ako veľmi užívateľsky príjemný. 291 00:11:32,366 --> 00:11:33,890 Nepovedal som na užívateľovi, čo má robiť. 292 00:11:33,890 --> 00:11:36,520 >> Ale teraz, keď som tiež chcel neskôr, poďme 293 00:11:36,520 --> 00:11:40,060 povedzme, vytlačte si tieto veci out-- tak TODO neskôr. 294 00:11:40,060 --> 00:11:42,330 Budem robiť viac s tohle-- to pravdepodobne znamená 295 00:11:42,330 --> 00:11:45,970 správne vykonávanie získanie mena a rodinných domov, tri 296 00:11:45,970 --> 00:11:48,870 z nich celkom každý, od užívateľa. 297 00:11:48,870 --> 00:11:51,280 >> Ale to nie je moc dobrý dizajn, nie? 298 00:11:51,280 --> 00:11:55,220 Čo keď študent nemá len meno a dom, ale aj identifikačné číslo, 299 00:11:55,220 --> 00:11:57,770 a telefónne číslo, a e-mailová adresa, 300 00:11:57,770 --> 00:12:00,280 a možno aj domovské stránky, a Možno Twitter rukoväť, 301 00:12:00,280 --> 00:12:03,730 a akýkoľvek počet ďalších detailov spojené s študenta alebo osoby, 302 00:12:03,730 --> 00:12:04,610 všeobecnejšie. 303 00:12:04,610 --> 00:12:07,720 Ako by sa začneme pridávať Funkcie tohto programu? 304 00:12:07,720 --> 00:12:14,080 >> No, mám pocit, že tým najjednoduchším spôsobom by mohol bolo to niečo ako, povedzme, 305 00:12:14,080 --> 00:12:16,490 int IDS študentov. 306 00:12:16,490 --> 00:12:18,380 Tak som si dal všetky svoje ID tam. 307 00:12:18,380 --> 00:12:22,240 A potom, o niečo ako sú telefónne čísla, 308 00:12:22,240 --> 00:12:24,400 Nie som si istý, ako sa Prehlasujem, že ešte nie. 309 00:12:24,400 --> 00:12:30,280 Tak poďme do toho a len volania tento twitters študenti, ktoré 310 00:12:30,280 --> 00:12:33,550 Je trochu zvláštne, ale-- a veľa ďalšie pole. 311 00:12:33,550 --> 00:12:36,360 >> Som začal efektívne skopírovať a vložiť sem. 312 00:12:36,360 --> 00:12:39,416 A to bude rast veľa nemotorné celkom rýchlo, nie? 313 00:12:39,416 --> 00:12:42,290 Nebolo by pekné, keby tam boli vo svete známa štruktúra dát 314 00:12:42,290 --> 00:12:45,600 nie ako int alebo reťazec, ale niečo vyššiu úroveň, abstrakcie, takže 315 00:12:45,600 --> 00:12:47,570 hovoriť, známy ako študent? 316 00:12:47,570 --> 00:12:50,220 C neprišiel s vstavaným Funkcie pre študentov, 317 00:12:50,220 --> 00:12:52,260 ale čo keď som chcel dať to ako? 318 00:12:52,260 --> 00:12:55,640 >> No, ukázalo sa, budem otvoriť súbor s názvom structs.h tu 319 00:12:55,640 --> 00:12:57,090 a môžete to urobiť presne to. 320 00:12:57,090 --> 00:12:58,290 A budeme začať robiť teraz. 321 00:12:58,290 --> 00:13:01,490 A pod kapotou P nastaviť tri, už ste to robím teraz. 322 00:13:01,490 --> 00:13:05,920 Nie je tam žiadna taká vec ako g obdĺžnika alebo g ovál v programovacom jazyku C. 323 00:13:05,920 --> 00:13:10,570 >> Ľudí v Stanford realizovaný tie dátové typy pomocou tohto prístupu tu, 324 00:13:10,570 --> 00:13:13,900 deklarovať svoje vlastné nové údaje typy s použitím novej kľúčové slovo 325 00:13:13,900 --> 00:13:16,744 nazýva struct a ďalšie jeden s názvom typedef. 326 00:13:16,744 --> 00:13:19,660 A skutočne, aj keď syntaxe vyzerá trochu líši od vecí 327 00:13:19,660 --> 00:13:23,550 sme videli skôr, princíp, že je to super jednoduché. 328 00:13:23,550 --> 00:13:25,297 >> To jednoducho znamená, že "definovať typ." 329 00:13:25,297 --> 00:13:27,255 Že to bude Štruktúra, a štruktúra 330 00:13:27,255 --> 00:13:29,400 je rovnako ako nádoby pre viac vecí. 331 00:13:29,400 --> 00:13:31,780 A táto štruktúra bude mať reťazec s názvom názov, 332 00:13:31,780 --> 00:13:33,210 a reťazec s názvom dom. 333 00:13:33,210 --> 00:13:37,520 A povedzme, len pre pohodlie, Celá táto štruktúra dát študentom. 334 00:13:37,520 --> 00:13:40,320 >> Takže v okamihu, keď sa dostanete do bodkočiarka, máte teraz 335 00:13:40,320 --> 00:13:43,280 vytvorili vlastné údaje Typ názvom Študent 336 00:13:43,280 --> 00:13:46,420 , Ktorá teraz stojí vedľa int, a float a char, a reťazec, 337 00:13:46,420 --> 00:13:50,270 a g rect, a g oválne, a ľubovoľný počet iných vecí, ktoré ľudia vymysleli. 338 00:13:50,270 --> 00:13:53,340 >> Takže to, čo je užitočné, o tom Teraz je, že keď sa vrátim 339 00:13:53,340 --> 00:13:57,430 na struct 0 a dokončiť implementácia, ktorý som napísal 340 00:13:57,430 --> 00:14:02,080 vopred tu, všimnite si, že všetky nevyhnutného neporiadok, ktorý 341 00:14:02,080 --> 00:14:05,490 bol asi na začiatku deja, ako som pridal telefónne čísla a twitters a všetky 342 00:14:05,490 --> 00:14:07,370 tieto iné veci Definície študenta, 343 00:14:07,370 --> 00:14:11,810 teraz je to stručne zhrnula ako jediného poľa študentov. 344 00:14:11,810 --> 00:14:15,500 >> A každý z týchto študentov sa má viac čo do nej. 345 00:14:15,500 --> 00:14:16,930 Takže zostáva len jednu otázku. 346 00:14:16,930 --> 00:14:19,700 Ako sa dostanete na meno, a dom a ID, 347 00:14:19,700 --> 00:14:21,640 a čokoľvek ďalšieho, čo je vnútri študenta? 348 00:14:21,640 --> 00:14:22,930 Super jednoduché, rovnako. 349 00:14:22,930 --> 00:14:25,730 Nová syntax, ale jednoduchá myšlienka. 350 00:14:25,730 --> 00:14:29,239 >> Jednoducho index do poľa, ako sme to urobili minulý týždeň, a to. 351 00:14:29,239 --> 00:14:31,030 A čo je jasne nový kus syntaxe? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 Len., Čo znamená "ísť dovnútra Štruktúra a získať pole s názvom 354 00:14:35,880 --> 00:14:39,030 meno, sa na pole s názvom dom, dostať na pole s názvom študentom. " 355 00:14:39,030 --> 00:14:41,940 >> Takže P nastaviť tri, ak ste stále pracuje na tom, 356 00:14:41,940 --> 00:14:44,020 a väčšina ľudí stále je, si uvedomiť, že ako vy 357 00:14:44,020 --> 00:14:46,130 začať používať veci, ako je g rects a g ovály 358 00:14:46,130 --> 00:14:50,201 a ďalšie veci, ktoré sa nezdajú pochádzajú z týždňa nula, jedna, alebo dve, 359 00:14:50,201 --> 00:14:52,950 Uvedomujem si, že to je preto, že Stanford vyhlásil niektoré nové dátové typy. 360 00:14:52,950 --> 00:14:56,160 >> A vskutku, to je presne to, čo budeme áno, aj v P stanovila štyri, keď 361 00:14:56,160 --> 00:14:59,880 začneme sa zaoberať vecami ako obrázky, rastrové obrázky a ďalšie. 362 00:14:59,880 --> 00:15:02,882 Tak to je len ukážka a mentálny model pre to, čo má prísť. 363 00:15:02,882 --> 00:15:04,590 Teraz som otáľal trochu dnes ráno. 364 00:15:04,590 --> 00:15:09,560 Bol som celkom zvedavý na to, čo Microsoft tapeta v skutočnosti 365 00:15:09,560 --> 00:15:10,310 vyzerá dnes. 366 00:15:10,310 --> 00:15:15,200 A ukázalo sa, niekto v roku 2006 vlastne išiel takmer presne 367 00:15:15,200 --> 00:15:19,210 na rovnakom mieste na fotografiu v skutočnosti čo vyzerá ako, že v týchto dňoch. 368 00:15:19,210 --> 00:15:21,380 Pole je teraz trochu zarastené. 369 00:15:21,380 --> 00:15:24,850 >> Takže hovoriť teraz obrazov, vráťme späť Daven tu 370 00:15:24,850 --> 00:15:26,890 na obrazovke a Mikuláša, a len vám pripomenúť, 371 00:15:26,890 --> 00:15:30,540 , Že ak by ste sa k nám pripojiť na obed tento piatok, vedúce k našej obvyklej adrese 372 00:15:30,540 --> 00:15:31,440 tu. 373 00:15:31,440 --> 00:15:33,530 >> Tak kde sme to vypnúť v pondelok? 374 00:15:33,530 --> 00:15:35,140 Tento problém sme zaviedli, že jo? 375 00:15:35,140 --> 00:15:37,610 Toto bolo zdanlivo správne realizácia odkladací priestor, 376 00:15:37,610 --> 00:15:40,460 kedy beriete dve ints, jeden volal, kto volal b, 377 00:15:40,460 --> 00:15:44,130 vymeniť je, rovnako ako tu urobila Laura na javisku s mliekom a vodou, 378 00:15:44,130 --> 00:15:46,820 pomocou dočasné premenná, alebo prázdny šálka, 379 00:15:46,820 --> 00:15:50,540 tak, že by sme mohli dať b do a A v b bez neporiadok vecí. 380 00:15:50,540 --> 00:15:51,560 Použili sme premennú. 381 00:15:51,560 --> 00:15:52,870 Hovorí sa tomu tepl. 382 00:15:52,870 --> 00:15:55,520 >> Ale čo bolo zásadné Problém s týmto kódom v pondelok? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 Čo to bolo za problém? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Jo. 387 00:16:00,605 --> 00:16:01,970 >> Divákov: Zaberá viac miesta. 388 00:16:01,970 --> 00:16:04,719 >> David J. Malan: Zaberá viac priestor, pretože som pomocou premennej, 389 00:16:04,719 --> 00:16:05,400 a to je v poriadku. 390 00:16:05,400 --> 00:16:07,300 To je pravda, ale ja som bude hovoriť, že je to OK. 391 00:16:07,300 --> 00:16:10,030 Je to len 32 bitov vo veľkom schéma vecí, takže nie je veľký problém. 392 00:16:10,030 --> 00:16:10,655 Iné myšlienky? 393 00:16:10,655 --> 00:16:12,572 Divákov: To len swapy premenné lokálne. 394 00:16:12,572 --> 00:16:13,571 David J. Malan: Presne tak. 395 00:16:13,571 --> 00:16:15,090 Je swapy iba premenné lokálne. 396 00:16:15,090 --> 00:16:18,173 Pretože zakaždým, keď volanie function-- keď som mal zásobníky z Annenberg 397 00:16:18,173 --> 00:16:19,840 naposledy, máte hlavné na dne. 398 00:16:19,840 --> 00:16:23,560 Akonáhle zavoláte funkciu nazvanú swap swap nevedie žiadne sa X a Y 399 00:16:23,560 --> 00:16:24,400 pôvodnej hodnoty. 400 00:16:24,400 --> 00:16:26,392 Čo odkladacia get, sme sa tvrdí? 401 00:16:26,392 --> 00:16:27,100 Divákov: Kópia. 402 00:16:27,100 --> 00:16:28,090 David J. Malan: Takže ich kópie. 403 00:16:28,090 --> 00:16:31,120 Takže to bude jedna a dve, ak máte pripomenúť si príklad z poslednej doby, 404 00:16:31,120 --> 00:16:34,730 ale kópia jedného a dvoch ktoré sú úspešne prehodené. 405 00:16:34,730 --> 00:16:38,550 Ale bohužiaľ na konci, tieto hodnoty sú stále rovnaké. 406 00:16:38,550 --> 00:16:41,880 Takže môžeme vidieť s našimi nový priateľ, dúfajme GDB, 407 00:16:41,880 --> 00:16:45,180 že vy alebo TFS a Ca majú sa vám vedie k takto. 408 00:16:45,180 --> 00:16:51,210 >> Takže žiadna výmena odvolanie vyzerá ako-- poďme otvoriť tohle-- vyzerá takto. 409 00:16:51,210 --> 00:16:54,160 Inicializovaný sme x na jednej, y na dva. 410 00:16:54,160 --> 00:16:55,620 Mal veľa tlače f je. 411 00:16:55,620 --> 00:16:58,080 Ale potom, tlačidlá Volať tu bol vymeniť, čo 412 00:16:58,080 --> 00:17:00,260 je presne ten kód sme práve videli pred chvíľou. 413 00:17:00,260 --> 00:17:03,180 Čo je správne v prvej pohľad, ale funkčne, 414 00:17:03,180 --> 00:17:06,800 tento program nefunguje, pretože nie je trvalo zameniť x a y. 415 00:17:06,800 --> 00:17:10,190 >> Takže poďme vidieť, rýchleho ohrevu sem s GDB, a ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 Banda ohromujúci informácie, ktoré Budem sa zbaviť s riadiacou L teraz. 418 00:17:15,200 --> 00:17:17,516 A teraz, budem pokračovať a spustite ho. 419 00:17:17,516 --> 00:17:19,349 A bohužiaľ, že Nebolo to tak užitočné. 420 00:17:19,349 --> 00:17:22,355 To bežalo program vnútri tejto program s názvom gdb debugger, 421 00:17:22,355 --> 00:17:23,730 ale to mi nedovolí hrabať okolo seba. 422 00:17:23,730 --> 00:17:26,229 >> Tak ako môžem skutočne pozastaviť prevedenie vnútri tohto programu? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 Tak zlomiť. 425 00:17:28,329 --> 00:17:32,340 A ja som mohol rozbiť na akýkoľvek číslo riadku, jeden, 10, 15. 426 00:17:32,340 --> 00:17:35,530 Ale ja si tiež rozdeliť symbolicky tým prerušenie main. 427 00:17:35,530 --> 00:17:38,980 A že sa to nastaviť pauzu bod, zrejme na riadku 16 v hlavnej. 428 00:17:38,980 --> 00:17:40,050 A kde je linka 16? 429 00:17:40,050 --> 00:17:42,960 Poďme do kódu a ísť až na noswap. 430 00:17:42,960 --> 00:17:46,930 A skutočne, riadok 16 je prvý v programe. 431 00:17:46,930 --> 00:17:52,130 >> Takže teraz, keď som sa do toho pustite a typ spustiť tento čas, Enter, je pozastavené. 432 00:17:52,130 --> 00:17:53,080 Takže poďme hrabať okolo seba. 433 00:17:53,080 --> 00:17:55,716 Vytlačiť x-- prečo je x nula? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 A ignorovať znak dolára. 436 00:17:57,830 --> 00:17:59,725 To je len pre milovník využitia programu. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 Prečo je x nula v súčasnej dobe? 439 00:18:03,140 --> 00:18:03,640 Jo. 440 00:18:03,640 --> 00:18:07,061 >> Divákov: Zastavil sa tesne pred linka 16, nie vlastne on-line 16 .. 441 00:18:07,061 --> 00:18:08,060 David J. Malan: Presne tak. 442 00:18:08,060 --> 00:18:11,630 GDB, v predvolenom nastavení sa odmlčal prevedenie tesne pred potrubím 16. 443 00:18:11,630 --> 00:18:14,820 Takže to nebol vykonaný, ktoré znamená, x je nejaké neznáme hodnoty. 444 00:18:14,820 --> 00:18:17,150 A mali sme šťastie, že je niečo čisté ako nula. 445 00:18:17,150 --> 00:18:20,310 Takže teraz, keď som písať ďalšie, teraz je prevedený 16. 446 00:18:20,310 --> 00:18:22,000 Čaká na mňa vykonať 17. 447 00:18:22,000 --> 00:18:23,400 Nechaj ma ísť napred a tlač x. 448 00:18:23,400 --> 00:18:24,094 Je to jedna. 449 00:18:24,094 --> 00:18:25,260 Nechaj ma ísť napred a tlač y. 450 00:18:25,260 --> 00:18:26,176 Čo by som mal teraz vidieť? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> Divákov: [nepočuteľné] 453 00:18:28,560 --> 00:18:29,165 >> David J. Malan: trochu hlasnejšie. 454 00:18:29,165 --> 00:18:30,040 >> Divákov: [nepočuteľné] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 David J. Malan: Nie tak celkom zhoda. 457 00:18:32,120 --> 00:18:34,760 Takže áno, vidíme nejaké odpadky hodnotu. 458 00:18:34,760 --> 00:18:37,862 Teraz, y je 134514064 tu. 459 00:18:37,862 --> 00:18:39,320 No, je to len nejaký odpad hodnota. 460 00:18:39,320 --> 00:18:41,350 Môj program používa RAM pre rôzne účely. 461 00:18:41,350 --> 00:18:42,350 Je tu ďalšie funkcie. 462 00:18:42,350 --> 00:18:44,040 Ostatní ľudia písali v mojom počítači. 463 00:18:44,040 --> 00:18:46,789 Takže tieto bity sú použité pre iné hodnoty, a to, čo som videl 464 00:18:46,789 --> 00:18:49,470 Je zvyšky niektorých Pred použití tejto pamäti. 465 00:18:49,470 --> 00:18:53,350 >> Takže žiadny veľký problém, pretože akonáhle ako píšem ďalšie a potom vytlačiť y, 466 00:18:53,350 --> 00:18:55,640 to je inicializovaný hodnota, ktorú chcem. 467 00:18:55,640 --> 00:18:57,400 Takže teraz, poďme do toho trochu rýchlejšie. 468 00:18:57,400 --> 00:18:58,540 N pre ďalšie. 469 00:18:58,540 --> 00:18:59,570 Urobme to znova. 470 00:18:59,570 --> 00:19:00,530 Urobme to znova. 471 00:19:00,530 --> 00:19:02,404 Ale ja nechcem hit je to tu, pretože keď som 472 00:19:02,404 --> 00:19:05,110 chcete vidieť, čo sa deje vo vnútri swap, čo je príkaz? 473 00:19:05,110 --> 00:19:05,520 >> DIVÁKOV: kroky. 474 00:19:05,520 --> 00:19:06,436 >> David J. Malan: kroky. 475 00:19:06,436 --> 00:19:09,800 Tak toto ma vstúpi do funkcie, skôr než nad ním. 476 00:19:09,800 --> 00:19:12,270 A teraz je to trochu záhadný úprimne, ale to je len 477 00:19:12,270 --> 00:19:14,581 hovoril mi, že som v rade 33 teraz. 478 00:19:14,581 --> 00:19:15,580 A ideme na to znova. 479 00:19:15,580 --> 00:19:16,080 Print temp. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 Garbage hodnota, negatívne tentoraz ale to je len stále hodnota odpadky. 482 00:19:20,170 --> 00:19:22,810 Tak poďme ďalej, tlače tepl. 483 00:19:22,810 --> 00:19:27,130 Je inicializovaný na hodnotu 1, čo bola hodnota x, aka. 484 00:19:27,130 --> 00:19:29,110 >> A teraz, kde sú naše a X prichádza? 485 00:19:29,110 --> 00:19:32,510 Dobre si všimnite, v hlavnej, my volal Tieto hodnoty x a y. 486 00:19:32,510 --> 00:19:34,740 Potom sme okolo nich vymeniť takto. 487 00:19:34,740 --> 00:19:37,010 X prišiel prvý, čiarka y. 488 00:19:37,010 --> 00:19:40,020 A potom, swap by im zavolať x a y. 489 00:19:40,020 --> 00:19:42,630 Ale pre prehľadnosť je to volať je a, b. 490 00:19:42,630 --> 00:19:45,970 Ale a a b sú teraz bude kópie x a y, resp. 491 00:19:45,970 --> 00:19:50,660 >> Takže keď som sa vrátiť do GDB, temp je teraz jednou a je teraz jedným. 492 00:19:50,660 --> 00:19:56,130 Ale keď to urobím ďalší a teraz si tlač , Už prešiel. 493 00:19:56,130 --> 00:20:00,030 Mlieko sa naleje do bývalej Pomarančová šťava je sklo, alebo naopak. 494 00:20:00,030 --> 00:20:04,750 >> A keď to urobím ďalší zase, a teraz keď som vytlačiť ako kontrola sanity, 495 00:20:04,750 --> 00:20:07,687 je ešte dvaja, ale b je teraz jedna. 496 00:20:07,687 --> 00:20:08,770 Úprimne povedané, je to tam stále. 497 00:20:08,770 --> 00:20:10,670 Nezaujíma ma, čo je teplota. 498 00:20:10,670 --> 00:20:16,850 Ale akonáhle som sa písať, povedzme, pokračovať sa vrátiť, teraz som na konci 499 00:20:16,850 --> 00:20:17,480 Program. 500 00:20:17,480 --> 00:20:20,730 A bohužiaľ, x je ešte raz a y je ešte dva. 501 00:20:20,730 --> 00:20:22,272 >> Takže to, čo bolo užitočnosť GDB tam? 502 00:20:22,272 --> 00:20:23,980 Nebolo mi pomohol opraviť problém sám o sebe, 503 00:20:23,980 --> 00:20:26,265 ale to mi snáď pomôže pochopiť realizáciou 504 00:20:26,265 --> 00:20:30,000 že áno, moja logika je v poriadku, ale môj kód nie je konečnom štádiu 505 00:20:30,000 --> 00:20:31,450 trvalý vplyv. 506 00:20:31,450 --> 00:20:34,570 Tak to je problém, že sme bude teraz riešiť dnes. 507 00:20:34,570 --> 00:20:37,870 >> Ale poďme sa tam dostať pomocou tohto. 508 00:20:37,870 --> 00:20:39,230 String je lož. 509 00:20:39,230 --> 00:20:41,860 To tiež nie je dátový typ ktorá existuje v C. Je to 510 00:20:41,860 --> 00:20:44,750 Bol synonymom pre niektoré čas na niečo iné, 511 00:20:44,750 --> 00:20:47,300 a môžeme prezradiť, že takto. 512 00:20:47,300 --> 00:20:53,282 >> Nechaj ma ísť napred a otvoriť program s názvom compare-0. 513 00:20:53,282 --> 00:20:56,240 A skôr než písať tento von, začneme prejsť kódu 514 00:20:56,240 --> 00:20:58,040 Už som písal, ale Je to len pár riadkov. 515 00:20:58,040 --> 00:20:59,570 To je tak porovnať-0. 516 00:20:59,570 --> 00:21:02,380 A prvá vec, ktorú robím je stále riadok textu. 517 00:21:02,380 --> 00:21:05,610 >> Ale všimnite, čo som robí prvýkrát. 518 00:21:05,610 --> 00:21:07,910 Aký je rozdiel jasne o riadku 21? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 Vlastne počkaj. 521 00:21:11,402 --> 00:21:12,110 Toto je kópia dvoch. 522 00:21:12,110 --> 00:21:13,568 To nie je ani ten správny program. 523 00:21:13,568 --> 00:21:14,780 Tak jo, spojler. 524 00:21:14,780 --> 00:21:16,890 Dobre, takže to nevadí. 525 00:21:16,890 --> 00:21:18,520 To je odpoveď na otázku budúcnosti. 526 00:21:18,520 --> 00:21:21,450 >> Tu je porovnanie-0, a ja som asi dostať riadok textu. 527 00:21:21,450 --> 00:21:22,435 Program je oveľa jednoduchšie. 528 00:21:22,435 --> 00:21:23,560 Tak to je jednoduché. 529 00:21:23,560 --> 00:21:28,070 To je ako prvý týždeň, týždeň Dve veci v súčasnej dobe. reťazci s = GetString. 530 00:21:28,070 --> 00:21:29,700 Teraz som to znova tu. 531 00:21:29,700 --> 00:21:31,830 string t = GetString. 532 00:21:31,830 --> 00:21:35,300 A potom posledná vec, ktorú v tomto programu, ako už názov napovedá, 533 00:21:35,300 --> 00:21:37,090 sa budem snažiť, aby ich porovnanie. 534 00:21:37,090 --> 00:21:40,709 >> Takže ak s prvou reťazec, rovná sa = T, potom som 535 00:21:40,709 --> 00:21:42,250 chcel povedať, zadajte to isté. 536 00:21:42,250 --> 00:21:44,291 Inak, ja som chcel povedať píšete niečo iné. 537 00:21:44,291 --> 00:21:45,880 Takže poďme zostaviť a spustiť tento program. 538 00:21:45,880 --> 00:21:48,481 Takže si porovnať nulu. 539 00:21:48,481 --> 00:21:48,980 Vyzerá to dobre. 540 00:21:48,980 --> 00:21:50,490 Žiadne chyby kompilácie. 541 00:21:50,490 --> 00:21:52,386 >> Nechaj ma ísť napred teraz a zadajte ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Nechaj ma ísť napred a niečo povedať : Daven a niečo: Rob. 544 00:21:59,220 --> 00:22:00,450 A píšem rôzne veci. 545 00:22:00,450 --> 00:22:01,250 Tak ďaleko, tak dobrý. 546 00:22:01,250 --> 00:22:02,680 Program sa zdá byť v poriadku. 547 00:22:02,680 --> 00:22:03,880 >> Ale poďme ho spustiť znova. 548 00:22:03,880 --> 00:22:05,800 Povedz niečo: Gabe. 549 00:22:05,800 --> 00:22:07,140 Povedz niečo: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 V poriadku. 552 00:22:09,020 --> 00:22:10,851 Možno, že som narazila medzerník alebo niečo funky. 553 00:22:10,851 --> 00:22:11,600 Urobme to znova. 554 00:22:11,600 --> 00:22:13,020 Tak Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 Rôzne veci. 559 00:22:17,330 --> 00:22:19,430 Takže to, čo sa deje? 560 00:22:19,430 --> 00:22:23,200 >> Takže máme tieto dva riadky kód, GetString volaná dvakrát. 561 00:22:23,200 --> 00:22:25,760 A potom, ja som proste snaží sa porovnať s a t. 562 00:22:25,760 --> 00:22:28,370 Ale to, čo naozaj potom sa to deje? 563 00:22:28,370 --> 00:22:31,180 No, môj rukopis je asi mäsiar tento príklad trochu. 564 00:22:31,180 --> 00:22:34,630 A poďme skutočne hodiť to sa sem, rovnako. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> Takže máme takýto riadok reťazci s = GetString. 567 00:22:45,712 --> 00:22:48,295 Tak to je jednoducho prvý zaujímavé línie z tohto programu. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 Ale to, čo celú tú dobu bol deje pod kapotou? 570 00:22:52,974 --> 00:22:55,890 No, na ľavej strane je reťazec, čo je nejaký typ premennej, 571 00:22:55,890 --> 00:22:56,785 a nazýva sa s. 572 00:22:56,785 --> 00:23:00,019 Takže viem, že je to s použitím pamäte alebo RAM v počítači nejako. 573 00:23:00,019 --> 00:23:02,060 Takže budem abstraktne kresliť, že ako štvorec. 574 00:23:02,060 --> 00:23:04,820 32 bitov, to dopadá, ale o tom viac v budúcnosti. 575 00:23:04,820 --> 00:23:06,410 A potom, čo sa deje tu? 576 00:23:06,410 --> 00:23:08,700 >> No, samozrejme getString dostane reťazec od užívateľa. 577 00:23:08,700 --> 00:23:11,360 A GetString dostal Zamyla alebo Gabe alebo Daven. 578 00:23:11,360 --> 00:23:14,640 Takže poďme si vybrať ako prvý z tých, ktorá bola Daven. 579 00:23:14,640 --> 00:23:19,174 Tak efektívne, čo GetString dostal mi v tomto prvom prípade bol D - v-e-n. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 A potom, čo ešte robil dať mi tajne? 582 00:23:25,045 --> 00:23:25,920 Divákov: [nepočuteľné] 583 00:23:25,920 --> 00:23:28,720 David J. Malan: Áno, / 0 alebo null znak. 584 00:23:28,720 --> 00:23:30,550 Tak to ma skutočne dal reťazec. 585 00:23:30,550 --> 00:23:34,550 Ale my už vieme z predchádzajúcej Vyzerá, že reťazec je len pole 586 00:23:34,550 --> 00:23:37,895 znakov, a je ukončená Táto špeciálna Sentinel znak, / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> Ale ak je to pravda a to je štvorec, 589 00:23:42,310 --> 00:23:44,160 to je samozrejme oveľa väčší obdĺžnik. 590 00:23:44,160 --> 00:23:46,830 A skutočne, to je, Tvrdím, iba 32 bitov. 591 00:23:46,830 --> 00:23:49,500 A to je samozrejme viac ako 32 bitov, pretože to je pravdepodobne 592 00:23:49,500 --> 00:23:51,583 osem plus osem plus osem navyše osem plus osem, 593 00:23:51,583 --> 00:23:53,320 len preto, že z bytov v ASCII. 594 00:23:53,320 --> 00:23:57,030 Ako sakra budeme, aby sa zmestili Daven do tejto malej krabičke tu? 595 00:23:57,030 --> 00:23:59,880 >> No, čo sa getString vlastne robí? 596 00:23:59,880 --> 00:24:03,680 No, to mriežka tu predstavuje pamäte alebo RAM môjho počítača. 597 00:24:03,680 --> 00:24:07,564 Takže poďme ľubovoľne povedať, že ak každý z nich predstavuje byte, 598 00:24:07,564 --> 00:24:09,730 potom môžeme myslieť na seba bajt ako majúce adresu, 599 00:24:09,730 --> 00:24:13,830 ako 33 Oxford Street alebo 34 Oxford Street alebo 35 Oxford Street. 600 00:24:13,830 --> 00:24:16,700 >> Tak ako domy majú adresy a budovy majú adresy, 601 00:24:16,700 --> 00:24:19,810 tak sa jednotlivé bajty Pamäť majú adresy alebo čísla 602 00:24:19,810 --> 00:24:21,042 , Ktorá jednoznačne identifikovať. 603 00:24:21,042 --> 00:24:22,000 Toto je ľubovoľná. 604 00:24:22,000 --> 00:24:25,370 Ale aby to jednoduché, budem používať hexadecimálne len konvencií, 605 00:24:25,370 --> 00:24:28,200 ale 0x znamená nič iné, ako "toto je hexadecimálne." 606 00:24:28,200 --> 00:24:31,030 a budem tvrdiť, že "D" končia Byte One v pamäti. 607 00:24:31,030 --> 00:24:34,210 >> Dostal som nič iné sa deje v pamäť, takže Daven dostal prvé miesto 608 00:24:34,210 --> 00:24:35,509 v byte One. 609 00:24:35,509 --> 00:24:36,800 To potom bude 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 To sa deje na 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 To bude 0x4. 614 00:24:41,800 --> 00:24:43,025 To sa deje na 0x5. 615 00:24:43,025 --> 00:24:44,025 To bude 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> Ale akonáhle začnete premýšľať o tom, čo robí počítače 618 00:24:48,290 --> 00:24:50,710 pod kapotou, môžete začať vyvodzovať 619 00:24:50,710 --> 00:24:54,960 ako vám, pred niekoľkými rokmi, by zaviedli C sám. 620 00:24:54,960 --> 00:24:58,360 Čo je GetString pravdepodobne returning-- preto, že 621 00:24:58,360 --> 00:25:00,946 pocit, že to nie je návrate Daven, sama o sebe, 622 00:25:00,946 --> 00:25:03,320 , Pretože to určite nebude aby sa zmestili do tejto malej box-- 623 00:25:03,320 --> 00:25:05,090 takže to, čo je GetString pravdepodobne vracia? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> Divákov: [nepočuteľné] 626 00:25:08,920 --> 00:25:10,540 >> David J. Malan: Umiestnenie Daven. 627 00:25:10,540 --> 00:25:12,770 A to robil to od chvíle, keď prvý týždeň. 628 00:25:12,770 --> 00:25:16,150 Čo GetString je naozaj návratu nie je reťazec, sama o sebe. 629 00:25:16,150 --> 00:25:17,780 To je jedna z tých malých bielych lží. 630 00:25:17,780 --> 00:25:22,520 Je to vracia adresu reťazec v pamäti, jedinečná adresa. 631 00:25:22,520 --> 00:25:24,820 Daven žije na 33 Oxford Street. 632 00:25:24,820 --> 00:25:29,310 Ale stručnejšie, Gavin žije na 0x1, Adresa číslo jedna. 633 00:25:29,310 --> 00:25:32,280 >> Takže to, čo dostane dať v tomto krabička potom, aby bolo jasné, 634 00:25:32,280 --> 00:25:35,930 je len adresa tohto reťazca. 635 00:25:35,930 --> 00:25:38,110 Takže celú tú dobu, to sa deje. 636 00:25:38,110 --> 00:25:41,650 Ale čo to naznačuje Teraz je, že ak všetko to má 637 00:25:41,650 --> 00:25:44,710 je číslo vnútri nej, ktorý je ťa zastaviť, programátor, 638 00:25:44,710 --> 00:25:47,970 od uvedenia akékoľvek číslo v všetky premenné a len na lyžiach 639 00:25:47,970 --> 00:25:49,080 k tomuto kusu pamäti? 640 00:25:49,080 --> 00:25:51,320 A skutočne, uvidíme že je to hrozba nabudúce. 641 00:25:51,320 --> 00:25:53,500 >> Ale teraz je to všetko nestačí. 642 00:25:53,500 --> 00:25:55,630 Keď poviem, aby som reťazec, môžete mi dať Daven. 643 00:25:55,630 --> 00:25:57,230 Ale nemáte naozaj, dajte mi Daven. 644 00:25:57,230 --> 00:25:59,310 Jediné, čo mi dal, je Daven je adresa. 645 00:25:59,310 --> 00:26:04,310 Ako mám potom vedieť, či kde Daven začína a ends-- 646 00:26:04,310 --> 00:26:07,140 príbeh je stále weird-- kde Daven začína a končí, 647 00:26:07,140 --> 00:26:10,435 a potom, ďalšie reťazec v pamäti začína? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> No, ak ste podal mi začiatok Daven, 650 00:26:13,620 --> 00:26:17,230 v podstate, ako to viem, kde je koniec jeho meno je? 651 00:26:17,230 --> 00:26:20,550 Že osobitný znak null, čo je to viac teraz dôležité 652 00:26:20,550 --> 00:26:23,040 ak reťazca pod kapucňa sú identifikované 653 00:26:23,040 --> 00:26:25,820 jednoznačne o ich umiestnení v pamäti. 654 00:26:25,820 --> 00:26:28,130 Takže celú tú dobu, že je to čo sa deje. 655 00:26:28,130 --> 00:26:32,470 >> Takže keď sa pozrieme hneď na Tu je kód, vysvetliť 656 00:26:32,470 --> 00:26:35,790 ak by chyba v riadku 26. 657 00:26:35,790 --> 00:26:39,560 Prečo je Zamyla a Zamyla líšia? 658 00:26:39,560 --> 00:26:41,330 Prečo je Gabe Gabe a iní? 659 00:26:41,330 --> 00:26:42,154 Jo, v chrbte. 660 00:26:42,154 --> 00:26:43,390 >> Divákov: Majú rôzne adresy. 661 00:26:43,390 --> 00:26:45,931 >> David J. Malan: Jednoducho preto, že majú rôzne adresy. 662 00:26:45,931 --> 00:26:48,820 Vzhľadom k tomu, keď zavoláte getString znova, čo urobím rýchlo sem, 663 00:26:48,820 --> 00:26:52,870 ak ide o druhý riadok, reťazec t, ako som v tomto programe, 664 00:26:52,870 --> 00:26:55,030 rovná sa ďalšie volanie getString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 Nabudúce zavolám GetString, idem 667 00:26:58,670 --> 00:27:00,190 ako získať iný kus pamäte. 668 00:27:00,190 --> 00:27:02,220 >> GetString je povolené požiadať prevádzkové 669 00:27:02,220 --> 00:27:03,800 systém viac a viac pamäte. 670 00:27:03,800 --> 00:27:07,894 To nebude znova rovnaký šesť bajtov každý čas. 671 00:27:07,894 --> 00:27:09,810 Je to dostane nový kus pamäti, ktorý 672 00:27:09,810 --> 00:27:12,780 znamená, že t dostane inú hodnotu ako tu. 673 00:27:12,780 --> 00:27:15,380 >> Takže keď som si s sa rovná = t, nie ste porovnanie 674 00:27:15,380 --> 00:27:17,880 D proti tomu a proti toto a V proti tomu. 675 00:27:17,880 --> 00:27:19,588 Ty nákupný tejto proti tomu, ktorý 676 00:27:19,588 --> 00:27:24,020 Úprimne povedané je celkom useful-- useless-- je k ničomu, pretože kto naozaj 677 00:27:24,020 --> 00:27:25,830 zaujíma, kde sú reťazce v pamäti? 678 00:27:25,830 --> 00:27:26,850 >> A skutočne, nemáme. 679 00:27:26,850 --> 00:27:28,980 A my nebudeme začať predovšetkým starostlivosť. 680 00:27:28,980 --> 00:27:34,180 Len do tej miery, že chyby môžu nastať a bezpečnostné hrozby môžu vzniknúť vôľa 681 00:27:34,180 --> 00:27:36,100 sme vlastne začať sa starať o to. 682 00:27:36,100 --> 00:27:37,230 Takže poďme sa tento problém vyriešiť. 683 00:27:37,230 --> 00:27:39,650 Ukázalo sa, že to opraviť Super jednoducho. 684 00:27:39,650 --> 00:27:42,600 >> A nech to vlastne predtým, než som ukazujú, že opäť, čo by 685 00:27:42,600 --> 00:27:47,170 robiť, keď v triede CS50, a vy ste museli vykonať 686 00:27:47,170 --> 00:27:48,600 porovnanie pred dvoma reťazcami. 687 00:27:48,600 --> 00:27:51,440 Zrejme je to len použiť s rovná = T. 688 00:27:51,440 --> 00:27:54,090 Ale logicky, ako by ste porovnať tento reťazec 689 00:27:54,090 --> 00:27:56,370 Proti tomuto reťazcu pomocou C kód? 690 00:27:56,370 --> 00:27:56,880 Jo. 691 00:27:56,880 --> 00:27:58,780 >> Divákov: Jednoducho to urob pre sláčiky [nepočuteľné] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 David J. Malan: Perfect. 694 00:28:01,670 --> 00:28:02,900 Divákov: [nepočuteľné] 695 00:28:02,900 --> 00:28:03,310 David J. Malan: Jo. 696 00:28:03,310 --> 00:28:05,390 Stačí použiť pre sláčiky, alebo zatiaľ čo slučky alebo čokoľvek iného. 697 00:28:05,390 --> 00:28:08,710 Ale len aplikovať základnú myšlienku, že v prípade, To je kus pamäte alebo poľa 698 00:28:08,710 --> 00:28:11,590 a to je, iterácii oboje súčasne. 699 00:28:11,590 --> 00:28:12,960 A práve tieto listy. 700 00:28:12,960 --> 00:28:14,260 >> A ty musíš byť trochu opatrní, pretože vás 701 00:28:14,260 --> 00:28:16,247 nechcem jeden prst ísť okolo druhej 702 00:28:16,247 --> 00:28:18,080 pretože jeden reťazec je dlhší ako druhý. 703 00:28:18,080 --> 00:28:21,380 Takže budete chcieť skontrolovať tento osobitný hodnota na konci null. 704 00:28:21,380 --> 00:28:24,017 Ale je to naozaj, v koniec, tak jednoduché to je. 705 00:28:24,017 --> 00:28:26,100 A úprimne povedané, nepotrebujeme znovu objavovať, že koleso. 706 00:28:26,100 --> 00:28:27,960 Tu je verzia Two. 707 00:28:27,960 --> 00:28:32,910 A to, čo som chcel povedať, je, že miesto porovnaní s sa rovná = T, 708 00:28:32,910 --> 00:28:38,964 Ja namiesto toho chcel povedať, ak je reťazec porovnaní s čiarkami t sa rovná = 0. 709 00:28:38,964 --> 00:28:40,130 A teraz, čo je reťazec porovnať? 710 00:28:40,130 --> 00:28:43,046 >> Ukazuje sa, že je to funkcia, ktorá Dodáva sa s C, ktorého zmysel života 711 00:28:43,046 --> 00:28:44,650 je porovnať dva reťazce. 712 00:28:44,650 --> 00:28:48,300 A miešajte porovnať, ak čítame jeho manuálovú stránku alebo dokumentáciu alebo CS50 713 00:28:48,300 --> 00:28:50,630 referencie, bude to jednoducho povedať, že rozruch 714 00:28:50,630 --> 00:28:55,730 porovnať výnosy buď negatívne číslo alebo kladné číslo alebo nula, 715 00:28:55,730 --> 00:28:57,660 kde nula znamená, že sú rovnaké. 716 00:28:57,660 --> 00:28:58,570 >> Tak len dohad. 717 00:28:58,570 --> 00:29:00,390 Čo by to znamenalo, keby miešajte porovnanie výnosov 718 00:29:00,390 --> 00:29:02,110 Záporná hodnota alebo kladnú hodnotu? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 Divákov: Väčší ako alebo menšie ako. 721 00:29:04,285 --> 00:29:05,570 David J. Malan: Áno, väčší alebo menší ako. 722 00:29:05,570 --> 00:29:08,640 Takže ak by ste chceli zoradiť celok banda reťazcov v dictionary-- 723 00:29:08,640 --> 00:29:12,975 ako bude nakoniec dole road-- perfektné funkcie potenciálne využívať, 724 00:29:12,975 --> 00:29:15,850 pretože to bude robiť, že Porovnanie reťazcov pre vás, a povedz 725 00:29:15,850 --> 00:29:20,060 si robí je pred b, alebo robí b prísť skôr, než podľa abecedy. 726 00:29:20,060 --> 00:29:21,490 Môžeme to urobiť presne to. 727 00:29:21,490 --> 00:29:23,620 >> A všimnite si som jeden ďalší vec, v tomto príklade. 728 00:29:23,620 --> 00:29:26,870 Čo iného sa zmenilo vyššia sa v tejto hlavnej funkcie? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 Char *. 731 00:29:29,350 --> 00:29:31,150 A to je to, že ďalšia lož. 732 00:29:31,150 --> 00:29:33,750 Celú tú dobu, keď som píše reťazec, 733 00:29:33,750 --> 00:29:38,350 sme boli tajne prepisovanie string ako char *, takže vlastne zvonenie 734 00:29:38,350 --> 00:29:39,270 chápe vás. 735 00:29:39,270 --> 00:29:42,450 >> Inými slovami, v CS50.h a ako budeme nakoniec vidieť, 736 00:29:42,450 --> 00:29:45,950 sme synoným nazýva reťazec to je to isté ako char *. 737 00:29:45,950 --> 00:29:49,910 A teraz, viem len to, že *, V tomto kontexte, aspoň, 738 00:29:49,910 --> 00:29:51,286 znamená adresu. 739 00:29:51,286 --> 00:29:52,210 >> Adresa, čo? 740 00:29:52,210 --> 00:29:56,390 No, to, že som povedal, char *, a *, alebo nie je pravý float *, 741 00:29:56,390 --> 00:30:00,820 Znamená to, že char * je adresa char. 742 00:30:00,820 --> 00:30:06,770 Takže tento malý box tu, aka reťazec, je naozaj typu char *, 743 00:30:06,770 --> 00:30:10,490 čo je jednoducho ozdobný spôsob, ako hovoriť, V tomto boxe pôjde adresu. 744 00:30:10,490 --> 00:30:12,430 A čo to adresa viď? 745 00:30:12,430 --> 00:30:13,780 Zdá sa, char. 746 00:30:13,780 --> 00:30:16,410 >> Ale mohli by sme úplne majú int * a ďalších vecí. 747 00:30:16,410 --> 00:30:20,790 Ale teraz, char * je naozaj veľmi jednoduché a jeden záujmu. 748 00:30:20,790 --> 00:30:23,310 Takže tento problém sa deje stúpať, aj keď, znovu. 749 00:30:23,310 --> 00:30:24,830 >> Dajme tomu, že tento program je otvorený. 750 00:30:24,830 --> 00:30:27,670 Uvidíme, či sa teraz môžeme predvídať čo je s týmto kódom v poriadku. 751 00:30:27,670 --> 00:30:31,140 Takže v tomto programe, copy-0, som ísť dopredu a zavolať znova 752 00:30:31,140 --> 00:30:34,190 GetString a uložiť hodnotu s. 753 00:30:34,190 --> 00:30:38,800 >> A potom, prečo to robím, rovnako ako spomienku týždňov minulosti? 754 00:30:38,800 --> 00:30:40,960 Urobili sme povedať, že getString niekedy vráti null. 755 00:30:40,960 --> 00:30:42,793 Čo to znamená, keď GetString vráti null? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 Niečo sa pokazilo. 758 00:30:46,034 --> 00:30:48,950 To pravdepodobne znamená, že reťazec je príliš veľký, počítače pamäť. 759 00:30:48,950 --> 00:30:51,724 Stáva sa, super, super, super zriedka, ale to by sa mohlo stať. 760 00:30:51,724 --> 00:30:53,890 Chceme kontrolovať ju, a to je všetko, čo robíme. 761 00:30:53,890 --> 00:30:57,910 >> Vzhľadom k tomu, uvidíme sa, ak nemáte spustiť kontrolu zvyčajne k veci 762 00:30:57,910 --> 00:31:00,870 ako null, môžete skutočne začať ísť 763 00:31:00,870 --> 00:31:03,106 na adresy v pamäti, ktoré sú neplatné. 764 00:31:03,106 --> 00:31:05,980 A vy budete začať vyvolanie stále viac a viac segmentácia chyby. 765 00:31:05,980 --> 00:31:08,360 Alebo v Mac alebo PC, len spôsobí, že počítač pre zavesenie 766 00:31:08,360 --> 00:31:10,340 alebo program pre zmrazenie, potenciálne. 767 00:31:10,340 --> 00:31:14,930 >> Takže teraz, tvrdím v kopírovaní 0.c, že ​​som Chystám sa kopírovať tieto reťazce prostredníctvom 768 00:31:14,930 --> 00:31:15,685 linky 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 A potom, ja idem nároku na dne 771 00:31:18,750 --> 00:31:21,430 tu, že idem zmeniť jeden z nich. 772 00:31:21,430 --> 00:31:22,330 >> Takže nevšimol. 773 00:31:22,330 --> 00:31:24,370 Volám náš starý priateľ strlen. 774 00:31:24,370 --> 00:31:28,960 A práve vysvetliť v angličtine čo tento riadok 34 je na tom? 775 00:31:28,960 --> 00:31:32,480 Čo t držiak 0 predstavujú na ľavej strane. 776 00:31:32,480 --> 00:31:32,980 Jo. 777 00:31:32,980 --> 00:31:34,339 >> Divákov: Prvý znak t? 778 00:31:34,339 --> 00:31:35,880 David J. Malan: Prvý znak t. 779 00:31:35,880 --> 00:31:36,379 To je všetko. 780 00:31:36,379 --> 00:31:40,024 Prvý znak t, chcem priradiť veľké písmená verzia 781 00:31:40,024 --> 00:31:41,190 prvého znaku v t. 782 00:31:41,190 --> 00:31:43,200 Takže to je zarábať Prvé písmeno. 783 00:31:43,200 --> 00:31:46,340 A potom, úplne posledná vec, ktorú urobím V rámci tohto programu je, že tvrdí, tu je 784 00:31:46,340 --> 00:31:50,340 originál, s, a tu je kópia, t. 785 00:31:50,340 --> 00:31:54,610 >> Ale na základe príbehu sme práve Povedal o tom, čo reťazce sú naozaj, 786 00:31:54,610 --> 00:31:57,520 čo je linka 28 v skutočnosti robí, a čo je 787 00:31:57,520 --> 00:31:59,405 výsledná chyba bude byť na obrazovke? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> Takže najprv, prvá otázka, 28. 790 00:32:03,500 --> 00:32:09,040 Čo je to string t = s naozaj robia? 791 00:32:09,040 --> 00:32:16,430 Ak máme na ľavej strane postranný reťazec tu t = y; 792 00:32:16,430 --> 00:32:19,400 že mi dáva jedno políčko tu a jedna škatuľa tu. 793 00:32:19,400 --> 00:32:25,530 A predpokladám, že táto adresa je 0x, povedzme, 50 tentoraz ľubovoľne. 794 00:32:25,530 --> 00:32:28,847 Čo string t = s to pod kapotou? 795 00:32:28,847 --> 00:32:30,340 >> Divákov: [nepočuteľné] 796 00:32:30,340 --> 00:32:34,100 >> David J. Malan: Ukladá pamäť riešiť tam, takže 0x50 je tam. 797 00:32:34,100 --> 00:32:37,980 Takže ak teraz pôjdem do prvej postava tá veľké písmená to, 798 00:32:37,980 --> 00:32:39,535 čo mám skutočne robí s? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 Som naozaj robia to isté, nie? 801 00:32:43,450 --> 00:32:47,680 Vzhľadom k tomu, či je adresa 0x50-- a len som nemajú veľa priestoru na doske tu 802 00:32:47,680 --> 00:32:51,750 ale predpokladám, že je to 0x50 tu dole, niekde v pamäti svojho počítača. 803 00:32:51,750 --> 00:32:55,825 >> A ja som sa napríklad, Gabe tu malé písmená, ako je tento. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 A ja som povedal: t držiak 0 dostane aktivované. 806 00:33:01,980 --> 00:33:04,860 No, t držiak je 0. prvé písmeno t. 807 00:33:04,860 --> 00:33:07,840 Tak málo g bude stať sa veľkým G. Ale problém 808 00:33:07,840 --> 00:33:09,410 je to, čo sa to tiež poukazujú na? 809 00:33:09,410 --> 00:33:10,300 >> Divákov: rovnaké. 810 00:33:10,300 --> 00:33:11,841 >> David J. Malan: presne rovnaký vec. 811 00:33:11,841 --> 00:33:16,342 Tak jednoduché vysvetlenie snáď aj keď syntax je trochu divný. 812 00:33:16,342 --> 00:33:17,050 Tak poďme na to. 813 00:33:17,050 --> 00:33:20,210 Urobiť kópiu-0 a potom ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 Povedz niečo: Gabe. 816 00:33:24,110 --> 00:33:26,760 A bohužiaľ, obaja im už boli aktivované, 817 00:33:26,760 --> 00:33:29,500 ale to, že za Dôvod, že sme jednoducho 818 00:33:29,500 --> 00:33:32,350 teraz rieši s adresami. 819 00:33:32,350 --> 00:33:36,470 >> Tak ako sme sa začať address-- žiadna slovná hračka intended-- 820 00:33:36,470 --> 00:33:39,270 ako sme sa začali zaoberať tento konkrétny problém? 821 00:33:39,270 --> 00:33:44,400 No, v copy1.c, čo sa deje byť trochu zložitejšie. 822 00:33:44,400 --> 00:33:49,310 Ale ja by som tvrdiť, koncepčne jednoduché riešenie. 823 00:33:49,310 --> 00:33:50,852 >> Tak ťažké sa dostať na prvý pohľad. 824 00:33:50,852 --> 00:33:53,560 Nebude ľahké pre prvý Doba napíšete to, snáď, 825 00:33:53,560 --> 00:33:57,440 ale v prípade, že problém je, že proste robí T = je len 826 00:33:57,440 --> 00:33:59,694 skopíruje adresu, čo, znova, ak mi môžete vyzdvihnúť na vás, 827 00:33:59,694 --> 00:34:02,110 bude riešenie pre kopíruje reťazec? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> Divákov: Budeme pravdepodobne znovu použiť slučku. 830 00:34:06,770 --> 00:34:06,890 >> David J. Malan: Jo. 831 00:34:06,890 --> 00:34:08,390 Takže budeme zase potrebovať slučku. 832 00:34:08,390 --> 00:34:11,800 A pretože ak chceme kopírovať reťazec s do iného reťazca, 833 00:34:11,800 --> 00:34:14,120 asi chceme, aby to znak po znaku. 834 00:34:14,120 --> 00:34:17,199 Ale problém je, ak To je pôvodne s, 835 00:34:17,199 --> 00:34:22,159 Teraz musíme začať výslovne prideľovanie pamäte pre t. 836 00:34:22,159 --> 00:34:24,320 >> Inými slovami, nech to prekresliť tento jeden posledný čas. 837 00:34:24,320 --> 00:34:28,659 Ak je tento reťazec s = GetString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 A poďme dať to sem, rovnako. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 To je GetString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 A potom sa obraz na niečo ako to bude ako predtým, 844 00:34:43,860 --> 00:34:44,360 g-a-b-e / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 To vyzerá na niečo také. 847 00:34:48,960 --> 00:34:53,650 A s preto nazývame 0x50, a že to bude 51, 52. 848 00:34:53,650 --> 00:34:54,409 >> Tak toto je 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 A potom, ja reťazec t. 851 00:34:59,690 --> 00:35:02,450 V pamäti, že to len tak daj mi trochu štvorec ako je tento. 852 00:35:02,450 --> 00:35:04,080 Takže to, čo je kľúčovým krokom teraz? 853 00:35:04,080 --> 00:35:09,870 Ak budem chcieť kopírovať s do t to, čo prázdne potrebujeme vyplniť tú? 854 00:35:09,870 --> 00:35:12,050 Alebo to, čo potrebujeme, aby sme robiť na vysokej úrovni? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 Jo? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 Niekto? 859 00:35:17,020 --> 00:35:17,690 Jo. 860 00:35:17,690 --> 00:35:19,214 >> Divákov: Musíme [nepočuteľné]. 861 00:35:19,214 --> 00:35:21,380 David J. Malan: Jo, to sme treba vyplniť toto pole prázdne. 862 00:35:21,380 --> 00:35:24,340 Nemôžem skopírovať a potom zarábať Gabe meno 863 00:35:24,340 --> 00:35:28,120 kým som sa opýtať operačný systém pre ďalší kus pamäte 864 00:35:28,120 --> 00:35:30,640 To je prinajmenšom rovnako veľký ako originál. 865 00:35:30,640 --> 00:35:32,130 Tak, že nás stavia otázku. 866 00:35:32,130 --> 00:35:36,080 >> Ako môžem požiadať o operačný systém nie je len jednoduchý malý pointer-- 867 00:35:36,080 --> 00:35:38,530 ako je to sa nazýva, adresa, pointer-- nie 868 00:35:38,530 --> 00:35:40,980 pre jednoduché krabičke takto nazýva reťazec? 869 00:35:40,980 --> 00:35:44,200 Ako môžem požiadať o prevádzkové systém pre veľký kus pamäti? 870 00:35:44,200 --> 00:35:48,430 Zatiaľ som sa len dostal to späť nepriamo volá getString. 871 00:35:48,430 --> 00:35:50,740 Tak ako je getString aj dostať svoju pamäť? 872 00:35:50,740 --> 00:35:53,430 >> No, ukázalo sa, že je tu Táto ďalšie funkcie tu 873 00:35:53,430 --> 00:35:55,160 že budeme teraz začať používať. 874 00:35:55,160 --> 00:35:59,780 Teraz to vyzerá oveľa viac mystický than-- a ja som jediný, kto môže vidieť to-- 875 00:35:59,780 --> 00:36:03,150 tento riadok vyzerá oveľa viac mystický potom by mal na prvý pohľad. 876 00:36:03,150 --> 00:36:04,650 Ale poďme podpichovať ju od seba. 877 00:36:04,650 --> 00:36:07,950 >> Na ľavej strane, mám char * t. 878 00:36:07,950 --> 00:36:13,280 Tak v angličtine, poďme začať formulovať správne vety v technickom žargóne. 879 00:36:13,280 --> 00:36:19,757 Tak toto je prideľovanie premenná typu char * s názvom t. 880 00:36:19,757 --> 00:36:21,090 A teraz, čo to vlastne znamená? 881 00:36:21,090 --> 00:36:23,881 >> No, to znamená, že to, čo mám robiť aby v tejto premennej s názvom t? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 Adresa char. 884 00:36:26,402 --> 00:36:28,360 Tak to je proste jednoduchšie, viac rozumný spôsob, 885 00:36:28,360 --> 00:36:29,930 popisovať ľavú stranu. 886 00:36:29,930 --> 00:36:32,890 Takže vytvára toto políčko tu len. 887 00:36:32,890 --> 00:36:34,760 Takže pravá strana, Možno predpokladať, že bude 888 00:36:34,760 --> 00:36:37,170 prideliť, že väčšie kus pamäti, ako na to? 889 00:36:37,170 --> 00:36:38,340 Takže poďme podpichovať to od seba. 890 00:36:38,340 --> 00:36:41,131 >> Je to ohromujúci na prvý pohľad, ale to, čo sa deje vo vnútri tu? 891 00:36:41,131 --> 00:36:43,740 Po prvé, je tu malloc, ktoré je zrejme náš nový priateľ, 892 00:36:43,740 --> 00:36:45,450 "Pamäť prideliť." 893 00:36:45,450 --> 00:36:49,560 Tak to je argument odovzdávaný do neho, takže je to celkom veľká hádka. 894 00:36:49,560 --> 00:36:50,970 Takže poďme podpichovať to od seba. 895 00:36:50,970 --> 00:36:53,410 >> strlen S, samozrejme, predstavuje to-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 Divákov: počet znakov. 898 00:36:55,600 --> 00:36:56,710 David J. Malan: Just počet znakov v s. 899 00:36:56,710 --> 00:36:59,040 Takže dĺžka s, pôvodný reťazec. 900 00:36:59,040 --> 00:37:00,350 Tak G-a-b-e. 901 00:37:00,350 --> 00:37:02,320 Takže je to asi štyri v tomto prípade. 902 00:37:02,320 --> 00:37:05,485 Prečo to robím jeden po volanie strlen na s? 903 00:37:05,485 --> 00:37:06,360 Divákov: [nepočuteľné] 904 00:37:06,360 --> 00:37:07,590 David J. Malan: Za to špeciálny znak null. 905 00:37:07,590 --> 00:37:11,260 Ak sa ma pýtate, čo je dĺžka Gabe meno, budem hovoriť štyri. 906 00:37:11,260 --> 00:37:14,480 Pod kapotou, aj keď, musím že piaty bajt na znak NULL. 907 00:37:14,480 --> 00:37:16,100 Takže to je dôvod, prečo robím 1. 908 00:37:16,100 --> 00:37:21,730 >> Teraz len v prípade, že používate tento Program na inom ako v počítači, povedzme, 909 00:37:21,730 --> 00:37:24,610 CS50 spotrebiče, kde je veľkosť znaku 910 00:37:24,610 --> 00:37:26,350 sa môže líšiť z mojej vlastnej computer-- 911 00:37:26,350 --> 00:37:30,590 Ukazuje sa, že môžem nazvať operátor sizeof, opýtajte sa počítač 912 00:37:30,590 --> 00:37:32,870 aká je veľkosť char na tomto počítači? 913 00:37:32,870 --> 00:37:37,400 >> A vynásobením päť v tomto napríklad podľa veľkosti char, ktorý 914 00:37:37,400 --> 00:37:40,440 Na väčšine počítačov bude byť len jeden, malloc 915 00:37:40,440 --> 00:37:44,830 sa chystá vyčleniť pre mňa to veľké kus pamäti, tu vpravo. 916 00:37:44,830 --> 00:37:47,140 A že to bude return-- je function--, takže je to 917 00:37:47,140 --> 00:37:48,265 chystá sa vrátiť so mnou, čo? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 Divákov: adresa? 920 00:37:51,830 --> 00:37:53,709 David J. Malan: Adresa, čo? 921 00:37:53,709 --> 00:37:55,250 Divákov: Z pamäte je pridelené? 922 00:37:55,250 --> 00:37:56,450 David J. Malan: Z pamäť je pridelené. 923 00:37:56,450 --> 00:37:59,189 Takže nemám tušenie, úprimne povedané, ak je to skončí. 924 00:37:59,189 --> 00:38:01,480 Chystám sa navrhnúť, aby bude to skončí na 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Úplne ľubovoľné, ale niekde inde ako 0x50, 927 00:38:06,009 --> 00:38:08,800 pretože v operačnom systéme, čo Windows a Mac OS pre mňa urobiť, je 928 00:38:08,800 --> 00:38:11,230 uistite sa, že ich dáva me rôzne kusy RAM. 929 00:38:11,230 --> 00:38:14,210 >> Tak to je hodnota, pokiaľ to kus pamäti, by mohol skončiť. 930 00:38:14,210 --> 00:38:16,060 Tak toto je to, čo skončí tu, 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 Takže jasne, chápem, , Že to nie je rovnaké ako to, 933 00:38:21,570 --> 00:38:23,960 pretože to ukazuje na rôzne kúsky pamäti. 934 00:38:23,960 --> 00:38:29,980 Takže keď som teraz vlastne chcete skopírovať tento v, poďme urobiť svoj návrh riešenia. 935 00:38:29,980 --> 00:38:36,870 >> Poďme vytvoriť pre sláčiky, a to t držiak aj dostane y držiak i. 936 00:38:36,870 --> 00:38:39,760 Pretože teraz môžem použiť Tieto polia podobné notácie, 937 00:38:39,760 --> 00:38:43,390 pretože aj keď malloc veľmi všeobecne mi prideľuje pamäť, 938 00:38:43,390 --> 00:38:45,290 pamäť je len súvislé bajtov. 939 00:38:45,290 --> 00:38:47,240 Byte, byte, byte, chrbtom k sebe k sebe. 940 00:38:47,240 --> 00:38:50,030 >> Môžem iste ako programátor zaobchádzať s ňou ako pole, ktoré 941 00:38:50,030 --> 00:38:55,090 znamená, že môžete použiť tento konečne zoznámiť zápis len niekoľko hranatých zátvorkách. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> Takže mi dovoľte pozastaviť tam, pretože to je veľa naraz, dokonca 944 00:39:00,020 --> 00:39:03,530 aj keď základná myšlienka zhrnúť je to, že reťazec, celú tú dobu, 945 00:39:03,530 --> 00:39:05,550 Nie je to nový dátový typ sebe. 946 00:39:05,550 --> 00:39:10,150 Je to takzvaný ukazovateľ, adresa charakteru, 947 00:39:10,150 --> 00:39:12,650 čo práve znamená, že je to číslo že ľudské konvencie 948 00:39:12,650 --> 00:39:15,350 máme tendenciu písať ako 0x niečo. 949 00:39:15,350 --> 00:39:18,590 >> Ale je to len číslo, ako 33 Oxford Street, 950 00:39:18,590 --> 00:39:20,530 ktorý sa stane byť Adresa ČS budovy. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 Akékoľvek otázky týkajúce sa týchto údajov? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 Jo? 955 00:39:25,289 --> 00:39:28,530 >> Divákov: Prečo sa pozrieme pre t sa rovná null? 956 00:39:28,530 --> 00:39:30,740 >> David J. Malan: Prečo skontrolujte t rovné null? 957 00:39:30,740 --> 00:39:33,250 Ak čítame documentation-- veľký question-- pre malloc, 958 00:39:33,250 --> 00:39:37,020 to povie v drobným písmom, niekedy malloc môže vrátiť null, 959 00:39:37,020 --> 00:39:38,080 rovnako ako getString. 960 00:39:38,080 --> 00:39:41,820 A skutočne, GetString vráti null v prípade, podľa poradia, sa vracia malloc null, 961 00:39:41,820 --> 00:39:43,130 pretože GetString používa malloc. 962 00:39:43,130 --> 00:39:46,400 >> A to by mohlo v prípade, že operačný systém stane, Mac OS, Windows, či už je jednoducho 963 00:39:46,400 --> 00:39:48,130 nedostatok pamäte pre vás. 964 00:39:48,130 --> 00:39:49,820 Takže to je to, čo sa tam stalo. 965 00:39:49,820 --> 00:39:52,910 >> A dovoľte mi odhaliť jednu vec ktoré by mohli len fúkať vašu myseľ 966 00:39:52,910 --> 00:39:55,100 alebo úplne byť príliš ďaleko cez linku. 967 00:39:55,100 --> 00:39:59,770 Ale dovoľte mi vytiahnuť rovnaké pre slučku pre kopírovanie, 968 00:39:59,770 --> 00:40:05,480 ktorý pred chvíľou, odvolanie bolo to. t držiak aj dostane y držiak i. 969 00:40:05,480 --> 00:40:06,740 >> Pekné a užívateľsky príjemný. 970 00:40:06,740 --> 00:40:09,330 Cítim sa ako týždeň dva znova. 971 00:40:09,330 --> 00:40:14,920 Ale táto verzia vlastne môže byť prepísať ako je tento, ktorý vyzerá záhadné. 972 00:40:14,920 --> 00:40:18,280 Je to technika s názvom ukazovateľ aritmetika, adresová aritmetika. 973 00:40:18,280 --> 00:40:19,600 Ale prečo to funguje? 974 00:40:19,600 --> 00:40:22,220 >> Teraz protivne, Autori C sa rozhodol použiť 975 00:40:22,220 --> 00:40:25,070 Symbol * pre rôzne účely. 976 00:40:25,070 --> 00:40:29,020 Videli sme, že používa už raz, char *, čo znamená "daj mi premennú 977 00:40:29,020 --> 00:40:31,210 že to bude obsahovať adresa char. " 978 00:40:31,210 --> 00:40:33,990 Takže char * v tejto súvislosti znamená "daj mi premennej." 979 00:40:33,990 --> 00:40:40,050 >> Bohužiaľ, ak budete používať * Bez slovo pred ním, ako char, 980 00:40:40,050 --> 00:40:41,905 to je teraz nazývané operátor dereferencia. 981 00:40:41,905 --> 00:40:43,530 A uvidíme, viac než to trvať dlho. 982 00:40:43,530 --> 00:40:44,930 Ale to len znamená, že "tam". 983 00:40:44,930 --> 00:40:49,070 Je to ako hovoriť, či ma niekto podal na kus papiera "33 Oxford Street," 984 00:40:49,070 --> 00:40:53,830 keď to urobím "* 33 Oxford Street," to znamená, že "Choď po ceste do budovy SK." 985 00:40:53,830 --> 00:40:57,220 >> Takže * jednoducho znamená, že tam, ak nie je slovo pred ním. 986 00:40:57,220 --> 00:40:59,100 Takže to, čo je t, aby bolo jasné ,? 987 00:40:59,100 --> 00:41:03,250 t je adresa kus pamäť, ktorá bola daná späť ku mne. 988 00:41:03,250 --> 00:41:06,650 s je adresa toho, čo, aby bolo jasné, V príklade sme diskutovali, 989 00:41:06,650 --> 00:41:07,500 z malým Gabe? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 s je adresa of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 Divákov: string. 994 00:41:12,460 --> 00:41:14,126 David J. Malan: Z Gabe je pôvodný názov. 995 00:41:14,126 --> 00:41:16,660 Takže je to adresa tento kus pamäte. 996 00:41:16,660 --> 00:41:22,220 Takže keď poviem, t + ja--, oznámenia, je len náš starý priateľ. 997 00:41:22,220 --> 00:41:24,770 Je to len premenná index to je iterácií od nuly hore 998 00:41:24,770 --> 00:41:26,960 na dĺžke reťazca s. 999 00:41:26,960 --> 00:41:30,367 Takže to bude nula, potom jeden, potom dve, potom tri, potom štyri. 1000 00:41:30,367 --> 00:41:33,200 Takže poďme zostaviť tieto nové Stieraciu-ako puzzle kúsky, ak chcete, 1001 00:41:33,200 --> 00:41:36,140 aj keď opäť, syntaxe je ďaleko viac, než tajomné Scratch. 1002 00:41:36,140 --> 00:41:39,522 Tak t je adresa + i sa chystá dať mi 1003 00:41:39,522 --> 00:41:42,480 číslo, pretože to sú všetko čísla, ktoré sme sa kreslenie v hexadecimálnom tvare. 1004 00:41:42,480 --> 00:41:43,560 Ale sú to len čísla. 1005 00:41:43,560 --> 00:41:49,960 >> Takže v prípade, že adresa t sme si povedali, Bol 0x88, 0x88, čo je plus nula. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Dokonca aj keď nie ste pohodlné s ešte hex hádať. 1008 00:41:53,980 --> 00:41:54,410 >> Divákov: originálne. 1009 00:41:54,410 --> 00:41:55,850 >> David J. Malan: Still 0x88. 1010 00:41:55,850 --> 00:41:58,910 Takže čo to * 0x88 znamená? 1011 00:41:58,910 --> 00:42:02,670 To znamená, že "tam", čo znamená, že efektívne, "dať prst tu." 1012 00:42:02,670 --> 00:42:06,930 A teraz na pravej strane tento výraz, * a potom parens, 1013 00:42:06,930 --> 00:42:11,586 y + i znamená s, ktorý je riešiť tu malého g. 1014 00:42:11,586 --> 00:42:16,220 y + 0, je, samozrejme, s, bez ohľadu na to, je. 1015 00:42:16,220 --> 00:42:21,230 >> Takže teraz je to * S, ktorý rovnako ako * 33 Oxford Street znamená ísť na adresu 1016 00:42:21,230 --> 00:42:22,010 s. 1017 00:42:22,010 --> 00:42:24,170 Tak tu je to prst, pravá ruka. 1018 00:42:24,170 --> 00:42:26,050 Takže to, čo budem kopírovať do čoho? 1019 00:42:26,050 --> 00:42:30,260 Tá vec na pravej strane, čo je Gabe, málo g tu, na tu. 1020 00:42:30,260 --> 00:42:32,750 >> A tak efekt, ktorý prvú iteráciu slučky, 1021 00:42:32,750 --> 00:42:36,200 ako sa to navrhuje, aj keď to vyzerá, blázon zložitejšie ako čokoľvek iné 1022 00:42:36,200 --> 00:42:42,110 sme videli predtým, je jednoducho hovorí, ísť sem a kopírovať postavu tu. 1023 00:42:42,110 --> 00:42:44,700 Je to dáva vám mapy na oboch miestach. 1024 00:42:44,700 --> 00:42:46,130 >> A uvidíme oveľa viac než to. 1025 00:42:46,130 --> 00:42:50,600 Ale teraz, nádej je len predstaviť niektoré z týchto základných myšlienok. 1026 00:42:50,600 --> 00:42:53,550 A skutočne, poďme sa pozrieť na jeden Konečný program tu 1027 00:42:53,550 --> 00:42:57,480 a potom sľúbil claymation, ktorá bude všetko v poriadku. 1028 00:42:57,480 --> 00:42:57,980 V poriadku. 1029 00:42:57,980 --> 00:43:01,680 Takže mi dovoľte otvoriť up-- tam ideme. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 Tak nech ja-- vrátime na obrázku pred dlho. 1032 00:43:05,440 --> 00:43:08,360 Dovoľte mi, aby som otvoriť túto záverečnú príklad tu. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> Takže tu je super, super program, ktorý dosiahne 1035 00:43:12,710 --> 00:43:15,050 nič v živote, ktorý robí nasledujúce. 1036 00:43:15,050 --> 00:43:18,740 Najprv deklaruje dve premenné x a y, ktoré nie sú čísla tentoraz, 1037 00:43:18,740 --> 00:43:19,240 sám o sebe. 1038 00:43:19,240 --> 00:43:20,448 Oni nie sú celé čísla, sám o sebe. 1039 00:43:20,448 --> 00:43:22,899 Sú to zrejme int *. 1040 00:43:22,899 --> 00:43:25,690 Takže len tak niekto, čo to znamená Ak váš dátový typ, váš variabilný, 1041 00:43:25,690 --> 00:43:26,860 je typu int * hviezda? 1042 00:43:26,860 --> 00:43:30,240 To je adresa int. 1043 00:43:30,240 --> 00:43:31,990 >> Tak som potuchy, kde je doteraz. 1044 00:43:31,990 --> 00:43:35,150 To jednoducho znamená "dať, nakoniec, adresa int tu. " 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, tam, kde je v pamäti, adresa sa deje tu. 1046 00:43:38,340 --> 00:43:40,200 A to je to, čo y je bude, ako je dobre. 1047 00:43:40,200 --> 00:43:44,920 >> Ak by som teraz povedať, x = malloc (sizeof (int)), To je ozdobný spôsob, ako hovoriť, 1048 00:43:44,920 --> 00:43:49,000 hej operačný systém, pomocou malloc, Daj mi dostatok pamäte pre veľkosť 1049 00:43:49,000 --> 00:43:52,370 z int, čo je pravdepodobne bude 32 bitov alebo štyri bajty. 1050 00:43:52,370 --> 00:43:53,680 >> Takže čo malloc vráti? 1051 00:43:53,680 --> 00:43:55,250 Malloc vráti adresu. 1052 00:43:55,250 --> 00:43:57,020 Takže, čo sa deje, aby sa uložené v X? 1053 00:43:57,020 --> 00:44:00,600 Adresa kus pamäti, štyri bajty, že malloc 1054 00:44:00,600 --> 00:44:03,360 práve našiel pre mňa otázkou: operačný systém. 1055 00:44:03,360 --> 00:44:08,240 >> Teraz medzitým linka štyri tu, * x = 42. 1056 00:44:08,240 --> 00:44:09,990 Len aby bolo jasno, čo sa deje tam dole? 1057 00:44:09,990 --> 00:44:11,530 Na ľavej strane, * x. 1058 00:44:11,530 --> 00:44:13,610 to je ako * 33 Oxford Street. 1059 00:44:13,610 --> 00:44:15,523 Takže * x znamená čo? 1060 00:44:15,523 --> 00:44:16,450 >> Divákov: Choď na. 1061 00:44:16,450 --> 00:44:17,908 >> David J. Malan: Prejdite na túto adresu. 1062 00:44:17,908 --> 00:44:20,466 Všade tam, kde to kus pamäť je, ísť na to. 1063 00:44:20,466 --> 00:44:21,979 A dal to, čo tam samozrejme? 1064 00:44:21,979 --> 00:44:22,520 Divákov: 42. 1065 00:44:22,520 --> 00:44:23,580 David J. Malan: 42. 1066 00:44:23,580 --> 00:44:25,650 Dobre, * y, rovnaký nápad. 1067 00:44:25,650 --> 00:44:26,860 Prejdite na adresu v y. 1068 00:44:26,860 --> 00:44:31,740 Vložte číslo 13 tam, ale to, čo je y v súčasnej dobe? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 Divákov: nie je pamäť pre y. 1071 00:44:34,630 --> 00:44:35,710 David J. Malan: V nie je pamäť pre y. 1072 00:44:35,710 --> 00:44:38,215 Takže to, čo y robí pravdepodobne obsahuje, ako sme hovorili? 1073 00:44:38,215 --> 00:44:38,520 >> DIVÁKOV: Garbage. 1074 00:44:38,520 --> 00:44:39,480 >> David J. Malan: Niektoré hodnoty odpadky. 1075 00:44:39,480 --> 00:44:41,320 Teraz, hodnota odpadky je stále číslo. 1076 00:44:41,320 --> 00:44:43,160 To môže ešte byť zamenená za adresu. 1077 00:44:43,160 --> 00:44:45,160 Je to, ako by niekto načmáral niečo dole, 1078 00:44:45,160 --> 00:44:48,002 a vyložil som si to v tom zmysle, niektoré budovy na ulici. 1079 00:44:48,002 --> 00:44:50,460 A ak ste jednoducho skúste ísť do niektoré stavebné nemáte vlastné, 1080 00:44:50,460 --> 00:44:53,710 alebo nejaký kus pamäti, že nie bola daná, zlé veci sa môže stať. 1081 00:44:53,710 --> 00:44:57,740 Počítač môže zlyhať, alebo nejaký iný Nie je určené správanie by sa mohlo stať. 1082 00:44:57,740 --> 00:45:01,310 >> Takže intro, potom, aby Binkym je to. 1083 00:45:01,310 --> 00:45:04,290 Stále si pamätám, 20 niektoré nepárne roky neskôr, 1084 00:45:04,290 --> 00:45:07,200 kde som bol, keď som sa konečne pochopil ukazovateľov. 1085 00:45:07,200 --> 00:45:09,520 >> Čo znamená, že ak nechať za tri minúty 1086 00:45:09,520 --> 00:45:12,170 a myslím, že nie pochopiť ukazovateľov, si uvedomujú, 1087 00:45:12,170 --> 00:45:14,410 Spomenul som si na 20 rokov na nejaké šialené dôvodu 1088 00:45:14,410 --> 00:45:17,140 kedy a prečo to nakoniec potopená v, sedí so svojím učením 1089 00:45:17,140 --> 00:45:19,501 kolega, Nishat Mehta v späť Eliota jedálni. 1090 00:45:19,501 --> 00:45:21,250 Teraz som si spomenul, , Pretože to bolo 1091 00:45:21,250 --> 00:45:23,920 jednou z tém, I, vo najmä bojoval s. 1092 00:45:23,920 --> 00:45:26,470 A potom, konečne kliknutí ako Trúfam si povedať, veľa tém 1093 00:45:26,470 --> 00:45:27,460 nakoniec bude. 1094 00:45:27,460 --> 00:45:32,590 A teraz, aby to cítili všetci šťastnejší a to viac presvedčivý, 1095 00:45:32,590 --> 00:45:35,360 poďme sa pozrieť do našej konečnej Posledné tri minúty tu na Binkym, 1096 00:45:35,360 --> 00:45:37,675 od nášho priateľa, Nick Parlante zo Stanforde. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [PREHRÁVANIE] 1099 00:45:41,580 --> 00:45:42,750 >> Hej, Binky. 1100 00:45:42,750 --> 00:45:43,500 Prebuďte sa! 1101 00:45:43,500 --> 00:45:45,960 Je čas na ukazovateľ zábavy. 1102 00:45:45,960 --> 00:45:47,012 >> Čo je to? 1103 00:45:47,012 --> 00:45:48,723 Ďalšie informácie o ukazovateli? 1104 00:45:48,723 --> 00:45:50,580 Oh, dobrota! 1105 00:45:50,580 --> 00:45:53,563 >> No, ako začať, myslím, že sme bude potrebovať pár rád. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 Kód prideľuje dva ukazovatele, ktoré môžu ukazovať na celé čísla. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 No, vidím dva ukazovatele, ale Nezdá sa, že by ukazoval na čokoľvek. 1110 00:46:02,140 --> 00:46:02,980 >> -Presne. 1111 00:46:02,980 --> 00:46:05,100 Spočiatku, ukazovatele neukazujú na nič. 1112 00:46:05,100 --> 00:46:08,030 Veci, ktoré ukazujú na, sa nazývajú pointees a ich nastavenie'S 1113 00:46:08,030 --> 00:46:09,370 samostatný krok. 1114 00:46:09,370 --> 00:46:10,220 >> Oh, dobre, dobre. 1115 00:46:10,220 --> 00:46:10,950 Vedel som, že. 1116 00:46:10,950 --> 00:46:12,385 V pointees sú oddelené. 1117 00:46:12,385 --> 00:46:14,315 Ehm, tak ako si prideliť pointee? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 No, kód prideľuje nové číslo pointee, 1121 00:46:18,970 --> 00:46:20,950 a táto časť obsahuje x poukázať na to. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> Hej, to vyzerá lepšie. 1124 00:46:23,230 --> 00:46:25,060 Tak, aby to niečo urobiť. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 Budem dereferencia ukazovateľom X uložiť číslo 42 na jeho pointee. 1127 00:46:30,455 --> 00:46:32,830 Pre tento trik, budem potrebovať moja Kúzelná palička z dereferencing. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> -Váš Kúzelná palička z Získavanie? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 To-- to je skvelé. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> Toto je to, čo kód vyzerá. 1134 00:46:41,080 --> 00:46:44,110 Ja si len nastaviť číslo a [POP] 1135 00:46:44,110 --> 00:46:44,700 >> Hej, pozri. 1136 00:46:44,700 --> 00:46:46,140 Tam to ide. 1137 00:46:46,140 --> 00:46:50,980 >> Takže robí Sleduje na x nasleduje šípky pre prístup k jeho pointee. 1138 00:46:50,980 --> 00:46:53,160 V tomto prípade, sklad 42 tam. 1139 00:46:53,160 --> 00:46:57,710 Hej, skúste ho uložíte číslo 13 cez druhú ukazovateľ, y. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 Pôjdem sem y, a dostať číslo 13 nastaviť. 1142 00:47:03,270 --> 00:47:07,930 A potom vziať prútik Získavanie a len [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> Oh! 1144 00:47:08,960 --> 00:47:09,500 >> Oh, hey! 1145 00:47:09,500 --> 00:47:11,090 To nefungovalo. 1146 00:47:11,090 --> 00:47:15,630 Povedz, Binky, nemyslím si, že dereferencing y je dobrý nápad, pretože viete, 1147 00:47:15,630 --> 00:47:17,850 nastavenie pointee je samostatný krok. 1148 00:47:17,850 --> 00:47:20,450 A nemyslím si, že sme kedy urobili. 1149 00:47:20,450 --> 00:47:21,480 >> Dobrú bod. 1150 00:47:21,480 --> 00:47:21,980 Jo. 1151 00:47:21,980 --> 00:47:25,680 Vložili sme ukazovateľ y, ale my Nikdy nastaviť, aby ukazoval na pointee. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -veľmi Pozorný. 1154 00:47:28,616 --> 00:47:30,240 Hej, vyzeráš dobre tam, Binky. 1155 00:47:30,240 --> 00:47:33,400 Môžete to opraviť tak, že y body na rovnakej pointee ako X? 1156 00:47:33,400 --> 00:47:34,000 >> -Iste. 1157 00:47:34,000 --> 00:47:36,780 Budem používať svoj kúzelná palička o Ukazovateľ priradenie. 1158 00:47:36,780 --> 00:47:38,740 >> -je To bude problém ako predtým? 1159 00:47:38,740 --> 00:47:39,240 Nie. 1160 00:47:39,240 --> 00:47:40,660 To sa nedotýkajte pointees. 1161 00:47:40,660 --> 00:47:44,450 Je to jednoducho zmení jeden ukazovateľ na poukazujú na to isté, ako iné. 1162 00:47:44,450 --> 00:47:45,450 >> Oh, ako vidím. 1163 00:47:45,450 --> 00:47:48,200 Teraz y body na rovnakom mieste ako x. 1164 00:47:48,200 --> 00:47:48,910 Tak počkať. 1165 00:47:48,910 --> 00:47:49,950 Teraz, y je pevná. 1166 00:47:49,950 --> 00:47:51,120 Má pointee. 1167 00:47:51,120 --> 00:47:54,510 Takže si môžete vyskúšať prútik Získavanie znova poslať 13 cez. 1168 00:47:54,510 --> 00:47:56,510 >> Uh, OK. 1169 00:47:56,510 --> 00:47:58,160 Tu to ide. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> Hej, pozri sa na to. 1171 00:47:59,340 --> 00:48:00,750 Teraz dereferencing práce na y. 1172 00:48:00,750 --> 00:48:04,991 A preto, že ukazovatele sú zdieľanie že jeden pointee, obaja viď 13. 1173 00:48:04,991 --> 00:48:05,490 Jo. 1174 00:48:05,490 --> 00:48:06,870 Zdieľanie, čokoľvek. 1175 00:48:06,870 --> 00:48:08,820 Takže budeme vymení teraz? 1176 00:48:08,820 --> 00:48:09,440 >> Oh, pozri. 1177 00:48:09,440 --> 00:48:10,830 Sme mimo čas. 1178 00:48:10,830 --> 00:48:11,570 >> -Ale 1179 00:48:11,570 --> 00:48:13,530 >> -len Pamätať tri pravidlá ukazovatele. 1180 00:48:13,530 --> 00:48:16,560 Number One, základná štruktúra je, že máte ukazovateľ, 1181 00:48:16,560 --> 00:48:18,680 a poukazuje na na pointee. 1182 00:48:18,680 --> 00:48:20,640 Ale ukazovateľ a pointee sú oddelené, 1183 00:48:20,640 --> 00:48:22,610 a častá chyba je nastaviť ukazovateľ, 1184 00:48:22,610 --> 00:48:25,000 ale zabudnúť, aby to pointee. 1185 00:48:25,000 --> 00:48:28,170 >> Číslo dve, ukazovateľ dereferencing začína na ukazovateľ 1186 00:48:28,170 --> 00:48:31,050 a sleduje šípku nad prístup k svojmu pointee. 1187 00:48:31,050 --> 00:48:33,400 Ako všetci vieme, to funguje iba v prípade, že je 1188 00:48:33,400 --> 00:48:36,270 pointee, ktorý druh dostane späť pravidlo číslo jedna. 1189 00:48:36,270 --> 00:48:39,000 >> Číslo tri, ukazovateľ Priradenie trvá jeden ukazovateľ 1190 00:48:39,000 --> 00:48:42,320 a mení ju, aby ukazoval na To isté pointee ako ďalší ukazovateľ. 1191 00:48:42,320 --> 00:48:44,160 Takže po zadaní, dva ukazovatele 1192 00:48:44,160 --> 00:48:45,910 bude ukazovať na rovnaký pointee. 1193 00:48:45,910 --> 00:48:47,990 Niekedy sa tomu hovorí zdieľanie. 1194 00:48:47,990 --> 00:48:49,740 A to je všetko, čo sa to, naozaj. 1195 00:48:49,740 --> 00:48:50,277 Bye-bye teraz. 1196 00:48:50,277 --> 00:48:51,110 [END Videoprehrávanie] 1197 00:48:51,110 --> 00:48:52,568 David J. Malan: To je pre CS50. 1198 00:48:52,568 --> 00:48:55,110 Uvidíme sa budúci týždeň. 1199 00:48:55,110 --> 00:48:56,064