1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> SPEAKER 1: Ahoj všetci. 3 00:00:05,680 --> 00:00:07,530 Chystáme sa začať. 4 00:00:07,530 --> 00:00:09,330 Myslím si, že ľudia sú stále pokračuje byť filtrovanie. 5 00:00:09,330 --> 00:00:12,840 Ale v záujme času, takže môžeme dostať Vy odtiaľto včas, 6 00:00:12,840 --> 00:00:14,110 ideme na štart. 7 00:00:14,110 --> 00:00:18,780 Takže vitajte na CS50 Kvíz 0 hodnotení. 8 00:00:18,780 --> 00:00:23,020 Pre tých z vás, ktorí si neuvedomil Ešte máte otázku týkajúcu sa stredu. 9 00:00:23,020 --> 00:00:25,700 Woo-hoo. 10 00:00:25,700 --> 00:00:29,780 >> Ak ste nezačali študovať alebo si neuvedomil, že to ešte existuje, 11 00:00:29,780 --> 00:00:34,070 minulé kvízy a všetky informácie o Váš kvíz je na cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Je tu nejaký celkom dobrá vec tam, Posledných kvízy z posledných 10 13 00:00:38,090 --> 00:00:43,760 rokov, rovnako ako informácie o tento kvíz a témy 14 00:00:43,760 --> 00:00:46,250 ktoré sa bude vzťahovať. 15 00:00:46,250 --> 00:00:48,980 Takže začnime. 16 00:00:48,980 --> 00:00:54,240 >> Takže vy si možno spomenú, prvý deň triedneho David mal tie svetlá. 17 00:00:54,240 --> 00:00:59,650 Takže v podstate všetko, čo ide na pod kapotou počítača je 18 00:00:59,650 --> 00:01:00,860 vykonáva v binárnej. 19 00:01:00,860 --> 00:01:04,080 Binárne znamená, že to, čo znie ako, 0 je a jeden je. 20 00:01:04,080 --> 00:01:09,290 To má dve hodnoty, ktoré môže byť reprezentovaný. 21 00:01:09,290 --> 00:01:14,675 >> Tak ako v prvý deň oddielu keď Dávid sa obrátil na svetlo 22 00:01:14,675 --> 00:01:21,990 žiarovka reprezentovať na, alebo 1, náš počítač chápe ako binárne 0 a je 23 00:01:21,990 --> 00:01:24,110 1 je, zapnúť alebo vypnúť. 24 00:01:24,110 --> 00:01:25,360 Základy binárne. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Každé miesto je zastúpená v základni dva. 27 00:01:32,470 --> 00:01:36,260 Takže si pridať 2 do 0 do 1 až 2 úplne hore. 28 00:01:36,260 --> 00:01:41,970 >> Ak chcete vypočítať, aké sú vaše binárne je decimal, stačí nasledovať túto rovnicu 29 00:01:41,970 --> 00:01:42,840 Typ vec. 30 00:01:42,840 --> 00:01:49,510 Ak máte jeden v niektorom z týchto miest, to vynásobiť čokoľvek 31 00:01:49,510 --> 00:01:53,820 založiť, že je to in, pridajte ju, a dostanete desatinné miesto. 32 00:01:53,820 --> 00:01:57,930 Takže to je to, ako môžete spoľahnúť do 5 v binárnej. 33 00:01:57,930 --> 00:02:01,400 Rovnako ako to, čo sme robili na Posledná snímka, to je to, ako by ste 34 00:02:01,400 --> 00:02:02,650 predstavujú 1 až 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Podobne, rovnako ako môžete pridávať a odčítanie v desiatkovej sústave alebo založiť 10, alebo 37 00:02:09,660 --> 00:02:13,040 naozaj žiadny základ, na môžete pridať a odčítanie v binárnej. 38 00:02:13,040 --> 00:02:18,400 Presne to, čo by ste čakali, keď ste pridajte dve až, keď sa rovná väčšia 39 00:02:18,400 --> 00:02:24,220 ako 1, nesiete 1, aby bolo 0, a to ďalej, že cesta, len 40 00:02:24,220 --> 00:02:29,910 ako by ste očakávať, že s pravidelným desiatkovej alebo akýkoľvek iný základ. 41 00:02:29,910 --> 00:02:30,970 V pohode. 42 00:02:30,970 --> 00:02:35,140 >> Takže ako som povedal predtým, všetko, čo pokračuje pod kapotou nášho počítača 43 00:02:35,140 --> 00:02:37,560 sa vykonáva v 0 je a 1 je, alebo binárny. 44 00:02:37,560 --> 00:02:43,470 Tak ako sme sa vyjadriť, napríklad, písmená alebo čísla, alebo znaky? 45 00:02:43,470 --> 00:02:45,560 A odpoveď na to je ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII je mapovanie medzi znakmi , Ktoré by sme za normálnych okolností vidieť 47 00:02:49,380 --> 00:02:53,360 Anglický jazyk ako to, B je, C je, podčiarknutia, pomlčky a 48 00:02:53,360 --> 00:02:54,910 niečo také. 49 00:02:54,910 --> 00:02:57,260 A to, že mapuje na hodnotu ASCII. 50 00:02:57,260 --> 00:03:03,080 ASCII hodnota je len číslo, ktoré možno chápať počítačom. 51 00:03:03,080 --> 00:03:07,430 A rovnako ako vy môžete robiť sčítanie a odčítanie s číslami, môžete to urobiť 52 00:03:07,430 --> 00:03:10,890 je s hodnotami ASCII. 53 00:03:10,890 --> 00:03:14,050 >> Takže v tomto príklade, čo bude tlačiť? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Jo, tak len priestor C space space B D. Kde si moja myš ísť? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Všimnite si môžete definovať int na 65 rokov. 58 00:03:43,380 --> 00:03:47,080 A pri tlači, že s použitím percent C, bude to interpretovať ako 59 00:03:47,080 --> 00:03:49,330 charakter a vytlačí A. 60 00:03:49,330 --> 00:03:52,800 >> Podobne môžete deklarovať to ako char. 61 00:03:52,800 --> 00:03:56,860 A keď si ju vytlačiť pomocou percent C, bude to interpretovať ako 62 00:03:56,860 --> 00:04:05,240 percent D. A rovnako ako si môžete pridať číslo, môžete pridať znaky sú 63 00:04:05,240 --> 00:04:06,878 Hodnoty ASCII, v tomto prípade. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> Tak trochu ukazovateľ pre každého. 66 00:04:16,130 --> 00:04:19,610 5, ako reťazec, nie je v skutočnosti rovná 5. 67 00:04:19,610 --> 00:04:26,610 Tak ako môžeme previesť Reťazec 5 do celé číslo 5? 68 00:04:26,610 --> 00:04:28,930 Nejaké nápady? 69 00:04:28,930 --> 00:04:31,630 Jo. 70 00:04:31,630 --> 00:04:36,720 >> Takže ak máme 5 ako reťazec, môžeme odpočítať 0. 71 00:04:36,720 --> 00:04:37,820 A to budeme mať päť. 72 00:04:37,820 --> 00:04:41,670 A podobne, ak máme 5 as integer, dodať, že na reťazec 0. 73 00:04:41,670 --> 00:04:43,112 A to nám dáva reťazec 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 V pohode. 76 00:04:48,350 --> 00:04:52,940 >> Teraz si pripomeňme, späť k prednáške v ktorom sme sa rozprávali o algoritmoch. 77 00:04:52,940 --> 00:04:57,260 Tak ako to vlastne chceme počítač robiť zaujímavé veci? 78 00:04:57,260 --> 00:05:00,460 Vieš, len sčítanie a odčítanie čísla a tlač veci nie je 79 00:05:00,460 --> 00:05:01,730 to vzrušujúce. 80 00:05:01,730 --> 00:05:04,620 Obvykle chceme naše počítače k vykonať nejaký algoritmus. 81 00:05:04,620 --> 00:05:07,820 Niečo trochu zložitejšie než len prosté aritmetiky. 82 00:05:07,820 --> 00:05:11,930 >> Algoritmus je len krok za krokom sady pokynov pre spôsob vykonania 83 00:05:11,930 --> 00:05:14,640 určitý task-- 84 00:05:14,640 --> 00:05:15,660 rovnako ako recept. 85 00:05:15,660 --> 00:05:19,990 Možno si ešte spomínate na prvý deň trieda, kde David sa nám počítať izbu 86 00:05:19,990 --> 00:05:22,550 ľudí, a koľko ľudí boli v miestnosti. 87 00:05:22,550 --> 00:05:24,480 Tie by mohli byť použité na počítanie jeden po druhom. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 V tomto prípade, lineárny algoritmus. 90 00:05:28,010 --> 00:05:31,710 >> Ale Dávid predstavený algoritmus pre môžete počítať ľudí v miestnosti 91 00:05:31,710 --> 00:05:37,340 kde všetci stoja, vy, že vaše číslo na inú osobu, dodať, že 92 00:05:37,340 --> 00:05:39,200 číslo nahor, a jedna osoba sa posadí. 93 00:05:39,200 --> 00:05:40,410 A to zopakovať. 94 00:05:40,410 --> 00:05:42,910 To je jeden druh algoritmu. 95 00:05:42,910 --> 00:05:47,520 Môžeme analyzovať, ako účinne An algoritmus je založený na to spustenie. 96 00:05:47,520 --> 00:05:49,680 Ale budeme hovoriť trochu viac o tom neskôr. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> Takže všetky algoritmy možno tiež byť zapísaný v pseudokódu. 99 00:05:57,090 --> 00:06:01,120 Pseudokód je len angličtina ako syntaxe používa na reprezentáciu 100 00:06:01,120 --> 00:06:02,420 programovací jazyk. 101 00:06:02,420 --> 00:06:06,070 Napríklad, ak by sme chceli požiadať užívateľa uhádnuť moje obľúbené číslo, my 102 00:06:06,070 --> 00:06:08,390 môže mať pseudokódu ako také. 103 00:06:08,390 --> 00:06:09,850 >> Kúpte si používatelia hádať. 104 00:06:09,850 --> 00:06:13,570 V prípade, že odhad je správny, povedzte im, sú správne, inak povedz im 105 00:06:13,570 --> 00:06:15,560 že to nie je správne. 106 00:06:15,560 --> 00:06:22,530 A pseudokód je spôsob, ako ľahko predstavuje myšlienku alebo algoritmus. 107 00:06:22,530 --> 00:06:26,910 Takže teraz by sme mohli chcieť, aby skutočne napísať to v jazyku, ktorý počítač 108 00:06:26,910 --> 00:06:27,980 Možno pochopenie. 109 00:06:27,980 --> 00:06:35,660 Takže by sme mohli napísať naše pseudokód a interpretovať, že do zdrojového kódu. 110 00:06:35,660 --> 00:06:41,320 >> Zatiaľ zdrojový kód musí dodržiavať do určitej syntax 111 00:06:41,320 --> 00:06:42,490 programovací jazyk. 112 00:06:42,490 --> 00:06:45,430 A tak ďaleko, v CS50, máme Používam väčšinou c. 113 00:06:45,430 --> 00:06:48,320 Takže to môže byť zdrojový kód pre C. 114 00:06:48,320 --> 00:06:51,440 Neskôr v priebehu, budete v noci prišiel do styku s inou programovania 115 00:06:51,440 --> 00:06:52,480 jazyky ako PHP. 116 00:06:52,480 --> 00:06:57,540 Alebo ak dokonca vziať iných tried, tí mohli robiť Java, Python, alebo dokonca OCML. 117 00:06:57,540 --> 00:07:01,570 Ale v našom c programovací jazyk, je to ako by sme mohli písať zdrojový kód pre 118 00:07:01,570 --> 00:07:04,760 pseudokód algoritmu, ktorý Len som opísal skôr. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Tak ako sa váš počítač skutočne Rozumieš tomu? 121 00:07:11,430 --> 00:07:14,490 Ako som už hovoril, je to naozaj len chápe núl a jednotiek. 122 00:07:14,490 --> 00:07:17,880 Tak ako to dostať zo zdroja Kód na niečo, čo môže byť 123 00:07:17,880 --> 00:07:18,960 Rozumel ste? 124 00:07:18,960 --> 00:07:22,920 No, máme niečo volal kompilátor. 125 00:07:22,920 --> 00:07:28,450 >> Ak si spomeniete, späť väčšinu svojho psets, mal si nejaký druh programu 126 00:07:28,450 --> 00:07:30,370 napísaný v dot c súbore. 127 00:07:30,370 --> 00:07:32,550 A potom by ste zadať značku. 128 00:07:32,550 --> 00:07:35,970 Takže to, čo je, aby robil? 129 00:07:35,970 --> 00:07:39,970 >> Môžete zadať make kompilovať Program preto someone-- 130 00:07:39,970 --> 00:07:42,730 kto napísal svoje p sadu; Pravdepodobne David-- 131 00:07:42,730 --> 00:07:44,190 vytvoril make súbor. 132 00:07:44,190 --> 00:07:51,320 A to hovorí, aby vedieť, na spustenie kompilátor, volal rinčať, že bude 133 00:07:51,320 --> 00:07:55,560 potom kompilovať zdrojový kód k objektu kód, ktorý je núl a jednotiek 134 00:07:55,560 --> 00:07:57,720 že váš počítač rozumie. 135 00:07:57,720 --> 00:08:01,610 Ale trochu neskôr, pôjdeme viac do hĺbky asi prekladačov. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> Tak spomínam pset 0, tam-- áno, máte nejakú otázku? 138 00:08:10,800 --> 00:08:11,620 >> Divákov: [nepočuteľné]? 139 00:08:11,620 --> 00:08:12,490 >> SPEAKER 1: Áno. 140 00:08:12,490 --> 00:08:14,960 Myslím, že v skutočnosti by mala byť on-line. 141 00:08:14,960 --> 00:08:15,120 Jo. 142 00:08:15,120 --> 00:08:16,572 >> Divákov: Je to ako [nepočuteľné]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> Reproduktor 1: Nie je. 145 00:08:20,830 --> 00:08:25,810 Sú na cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> DIVÁKOV: Slash kvízy, lomítko 2013, lomítko 0, a len preklikať 147 00:08:32,900 --> 00:08:35,956 kvízy 2013 a kvíz 0, skontrolovať v sekcii snímok. 148 00:08:35,956 --> 00:08:40,380 >> SPEAKER 1: Jo, takže ak ste chcel vytiahnite ju hore a pozrieť sa na to na vašom 149 00:08:40,380 --> 00:08:42,740 vlastný počítač, to je tiež v pohode. 150 00:08:42,740 --> 00:08:43,130 Povedz to ešte raz. 151 00:08:43,130 --> 00:08:44,546 >> Divákov: [nepočuteľné]. 152 00:08:44,546 --> 00:08:48,780 >> SPEAKER 1: Jo, [nepočuteľné] je dummy premenná. 153 00:08:48,780 --> 00:08:49,644 Oh, áno? 154 00:08:49,644 --> 00:08:51,372 >> Divákov: [nepočuteľné]? 155 00:08:51,372 --> 00:08:54,300 >> Reproduktor 1: No, štrajku nie sú na skúšku. 156 00:08:54,300 --> 00:08:55,950 Ospravedlňujeme sa, ale jej otázka bola, bola štrajku na skúšku. 157 00:08:55,950 --> 00:08:59,530 A to nie je. 158 00:08:59,530 --> 00:09:05,780 Takže pset 0, mali ste mať všetky realizované niečo, pomocou scratch. 159 00:09:05,780 --> 00:09:13,100 A my sme sa naučili niektoré základné programovania stavebné bloky pomocou scratch. 160 00:09:13,100 --> 00:09:15,590 >> Takže poďme sa pozrieť na niektoré z týchto stavebných blokov 161 00:09:15,590 --> 00:09:18,170 , Ktoré tvoria program. 162 00:09:18,170 --> 00:09:20,570 Prvý z nich je logický výraz. 163 00:09:20,570 --> 00:09:24,540 Booleovské výrazy, sú tie, a 0, alebo niečo, čo má 164 00:09:24,540 --> 00:09:25,700 dve možné hodnoty. 165 00:09:25,700 --> 00:09:30,320 V tomto prípade je pravdivé alebo nepravdivé, zapnúť alebo vypnúť, a áno alebo nie. 166 00:09:30,320 --> 00:09:35,390 Príkladom jednoduché, veľmi jednoduché, program, ktorý používa Boolean 167 00:09:35,390 --> 00:09:39,140 Výraz sa tu. 168 00:09:39,140 --> 00:09:43,220 >> Tak, aby pre boolovských výrazov na byť užitočné, máme logických operátorov. 169 00:09:43,220 --> 00:09:48,920 Jedná sa o subjekty, ktoré môžu byť použité porovnať určité hodnoty. 170 00:09:48,920 --> 00:09:52,820 Takže tu máme a alebo nie je rovné menej než alebo sa rovná, alebo väčšia ako 171 00:09:52,820 --> 00:09:55,130 rovná, a menej ako alebo väčšia ako. 172 00:09:55,130 --> 00:09:59,060 Ale títo operátori nie sú príliš užitočné, ak môžeme spojiť ich do 173 00:09:59,060 --> 00:10:00,320 podmienky. 174 00:10:00,320 --> 00:10:04,370 >> Takže ste si možno spomenú na zelenej lúke a od p určuje, že my 175 00:10:04,370 --> 00:10:05,400 mal podmienok. 176 00:10:05,400 --> 00:10:09,710 Sú to v podstate ako vidličkami, v logika programu, ktorý 177 00:10:09,710 --> 00:10:12,670 vykonáva v závislosti na tom, či podmienka je splnená. 178 00:10:12,670 --> 00:10:18,150 Takže jedna z podmienok, ktoré sme mali používa mnohokrát v tomto kurze je 179 00:10:18,150 --> 00:10:21,470 if, else, ak a inde podmienok. 180 00:10:21,470 --> 00:10:24,060 >> Tu je príklad toho, ako môžete použiť. 181 00:10:24,060 --> 00:10:28,430 Vie niekto, aký je rozdiel medzi len pomocou if všetkých 182 00:10:28,430 --> 00:10:32,530 Cesta dole verše if, else, vtedy a ešte v kombinácii? 183 00:10:32,530 --> 00:10:33,013 Áno? 184 00:10:33,013 --> 00:10:34,263 >> Divákov: [nepočuteľné]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> SPEAKER 1: Presne tak. 187 00:10:42,160 --> 00:10:50,210 Takže ak by som mal, pokiaľ celú cestu dole tento spôsobom, aj keď táto podmienka priznania 188 00:10:50,210 --> 00:10:52,800 pravda, to bude ešte pokračovať testovanie ďalšie dva. 189 00:10:52,800 --> 00:11:00,120 Vzhľadom k tomu, s iným-li, else vyhlásenie, v prípade, že jeden vráti hodnotu true, 190 00:11:00,120 --> 00:11:02,640 ostatné nie sú testované. 191 00:11:02,640 --> 00:11:05,955 Akékoľvek otázky o tom? 192 00:11:05,955 --> 00:11:06,890 V pohode. 193 00:11:06,890 --> 00:11:12,240 >> Takže použiť if-else z else vyhlásenie, ak viete, že je to len možné 194 00:11:12,240 --> 00:11:14,470 byť jeden z týchto prípadov. 195 00:11:14,470 --> 00:11:21,550 Takže vieme, že ak je x menšie ako 0, je to rozhodne nebude 196 00:11:21,550 --> 00:11:22,890 väčšie ako 0. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Ďalšie, ďalšie stavebné blok že sme sa dozvedeli, sú slučky. 199 00:11:31,480 --> 00:11:33,310 Máme tri typy slučiek. 200 00:11:33,310 --> 00:11:35,830 U slučky, while, a to while. 201 00:11:35,830 --> 00:11:38,730 A všeobecne, ak si sadnete do niečo písať, musíte sa rozhodnúť, 202 00:11:38,730 --> 00:11:40,060 ktorý z troch, ktorý chcete použiť. 203 00:11:40,060 --> 00:11:41,900 Tak ako sme sa rozhodnúť, ktorý z nich? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Všeobecne používame pre sláčiky, ak vieme, koľkokrát chceme opakovať 206 00:11:48,790 --> 00:11:53,650 cez niečo alebo koľkokrát Ak chceme vykonať úlohu. 207 00:11:53,650 --> 00:11:58,830 Používame while ak budeme potrebovať nejaké podmienka, aby to bola pravda, aby v prevádzke. 208 00:11:58,830 --> 00:12:03,730 A používame to pri veľmi podobné zatiaľ čo, ale chceme, aby naši spustenie kódu na 209 00:12:03,730 --> 00:12:04,880 aspoň raz. 210 00:12:04,880 --> 00:12:09,410 >> Takže robiť, keď to, čo je v úlohe bude vždy prebiehať najmenej raz. 211 00:12:09,410 --> 00:12:13,120 Vzhľadom k tomu, s chvíľu ju nemusí spustiť vôbec, ak 212 00:12:13,120 --> 00:12:15,490 podmienka nie je splnená. 213 00:12:15,490 --> 00:12:16,740 Akékoľvek otázky s tým? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> Takže štruktúra slučky for. 216 00:12:22,860 --> 00:12:23,620 Vy ste všetci videli to. 217 00:12:23,620 --> 00:12:25,320 Môžete inicializovať. 218 00:12:25,320 --> 00:12:26,600 Máte nejaký stavu. 219 00:12:26,600 --> 00:12:32,340 Tak, napríklad, môžeme inicializovať ako aj rovná 0. 220 00:12:32,340 --> 00:12:34,040 i je menšia ako 10. 221 00:12:34,040 --> 00:12:35,442 A aj ++. 222 00:12:35,442 --> 00:12:39,010 Veľmi jednoduchá, že sme urobili. 223 00:12:39,010 --> 00:12:42,210 >> Na slučke while, podobne, máte mať nejaký druh inicializácia, 224 00:12:42,210 --> 00:12:44,980 nejaký stavu, a nejaká aktualizácia. 225 00:12:44,980 --> 00:12:51,990 Takže môžeme realizovať naše pre sláčiky tiež ako while pomocou tohto. 226 00:12:51,990 --> 00:12:56,000 A podobne sa robiť, zatiaľ čo slučky, by sme mohli mať nejakú inicializáciu, 227 00:12:56,000 --> 00:12:58,640 vykonať niečo, aktualizujte ju a skontrolujte stav. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> Takže teraz funguje. 230 00:13:05,140 --> 00:13:06,460 My sme dali všetko dohromady. 231 00:13:06,460 --> 00:13:10,140 Mohli by sme napísať nejaký druh funkcie. 232 00:13:10,140 --> 00:13:12,790 Spoločné funkcie, ktoré vám môžu Videl už je hlavné. 233 00:13:12,790 --> 00:13:13,770 Hlavné je funkcia. 234 00:13:13,770 --> 00:13:16,160 To má návratový typ, int. 235 00:13:16,160 --> 00:13:18,470 Má názov funkcie, hlavné. 236 00:13:18,470 --> 00:13:20,810 A to má argumenty, argc a argv. 237 00:13:20,810 --> 00:13:24,040 Takže hlavné je len funkcia. 238 00:13:24,040 --> 00:13:27,230 >> Ďalšie funkcie, ktoré môžu byť použité, printf-- printf je function-- 239 00:13:27,230 --> 00:13:29,330 Vezmi_int, toupper. 240 00:13:29,330 --> 00:13:32,010 Ale to sa stalo, že bol zavedený pre nás 241 00:13:32,010 --> 00:13:33,270 nejaký knižnice. 242 00:13:33,270 --> 00:13:37,400 Ak ste pamätám, vrátane Táto knižnica CS50.h alebo 243 00:13:37,400 --> 00:13:38,510 Štandardné I / O knižnice. 244 00:13:38,510 --> 00:13:39,200 Áno, otázka? 245 00:13:39,200 --> 00:13:41,610 >> Divákov: Je hlavnou len vlastné, c? 246 00:13:41,610 --> 00:13:44,740 Má to tak nejako [nepočuteľné]? 247 00:13:44,740 --> 00:13:47,370 >> SPEAKER 1: Otázkou je, ak hlavné je vlastný cca. 248 00:13:47,370 --> 00:13:51,460 A áno, všetky funkcie majú hlavnú funkciu. 249 00:13:51,460 --> 00:13:55,290 Je to tak trochu nevyhnutné pre počítač vedieť, kde začať 250 00:13:55,290 --> 00:13:55,993 spustenie kódu. 251 00:13:55,993 --> 00:13:58,108 >> Divákov: Takže nie [nepočuteľné]? 252 00:13:58,108 --> 00:13:59,480 >> SPEAKER 1: Nie 253 00:13:59,480 --> 00:14:00,760 Nejaké ďalšie otázky? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 V pohode. 256 00:14:04,770 --> 00:14:08,050 Tak ako môžete využiť funkciu ktorá je napísaná pre vás, môžete tiež 257 00:14:08,050 --> 00:14:10,380 napísať vlastnú funkciu. 258 00:14:10,380 --> 00:14:17,050 To je funkcia, ktorá by sa niekto mohol písali pre výpočet objemu 259 00:14:17,050 --> 00:14:18,395 o q, napríklad. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 K dispozícii je návratový typ tu, v tomto prípade int, naše meno funkcie q a naše 262 00:14:29,500 --> 00:14:31,360 Zoznam parametrov. 263 00:14:31,360 --> 00:14:34,550 >> A všimnite si, že budete musieť zapisovať dáta typ parametra, ktorý chcete 264 00:14:34,550 --> 00:14:38,660 použiť inak funkcia nie je vedieť, aký druh 265 00:14:38,660 --> 00:14:41,650 Parameter by som mal prijať. 266 00:14:41,650 --> 00:14:48,110 Takže, v tomto prípade, chceme číslo ako náš vstup. 267 00:14:48,110 --> 00:14:50,390 Tak prečo by sme mohli chcieť použiť funkcie? 268 00:14:50,390 --> 00:14:52,800 >> Po prvé, ideálny pre organizáciu. 269 00:14:52,800 --> 00:14:56,350 Pomáhajú rozbiť svoj kód do viac organizovanej kusy a aby 270 00:14:56,350 --> 00:14:57,960 to čitateľnejšie. 271 00:14:57,960 --> 00:14:59,760 Zjednodušenie. 272 00:14:59,760 --> 00:15:01,740 To je dobré pre dizajn. 273 00:15:01,740 --> 00:15:04,570 Keď čítate kus kódu a hlavnou funkciou je naozaj, 274 00:15:04,570 --> 00:15:07,750 naozaj dlho, mohlo by to byť ťažšie dôvod o tom, čo sa deje. 275 00:15:07,750 --> 00:15:11,710 Takže ak ste vyraziť do funkcie, to by mohlo byť čitateľnejší. 276 00:15:11,710 --> 00:15:12,750 A znovu-schopnosti. 277 00:15:12,750 --> 00:15:16,940 Ak máte kus kódu, ktorý je bytia volal alebo spustiť niekoľkokrát, 278 00:15:16,940 --> 00:15:20,690 namiesto prepisovania, ktoré kódujú 10 krát vo svojej hlavnej funkcie, môžete 279 00:15:20,690 --> 00:15:21,440 chcete ho znova použiť. 280 00:15:21,440 --> 00:15:25,740 A potom zakaždým, keď budete potrebovať, aby kus kódu, volanie funkcie. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> Takže teraz, keď si spomenieme späť do nuly, sme hovorili o niekoľkých pojmy, 283 00:15:35,380 --> 00:15:37,680 z ktorých jeden je rezanie závitov. 284 00:15:37,680 --> 00:15:41,120 Téma je predstava o násobok sekvencie kódu 285 00:15:41,120 --> 00:15:43,040 vykonávajúci súčasne. 286 00:15:43,040 --> 00:15:47,490 Takže myslíte, že späť do prvého dňa, kedy mal David vy počítať z počtu 287 00:15:47,490 --> 00:15:48,440 ľudia v miestnosti. 288 00:15:48,440 --> 00:15:50,550 >> V podstate to, čo sa deje na všetko je z vás boli 289 00:15:50,550 --> 00:15:52,370 beží oddelené vlákna. 290 00:15:52,370 --> 00:15:55,540 A tie nite prichádzali spoločne dostať nejakú odpoveď. 291 00:15:55,540 --> 00:15:58,890 Podobne, v Scratch, keď máte viac škriatkovia, môžete 292 00:15:58,890 --> 00:16:01,070 mačku a psa. 293 00:16:01,070 --> 00:16:08,770 A oni by boli súčasne vedú svoje vlastné skripty. 294 00:16:08,770 --> 00:16:10,020 To je príklad rezanie závitov. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> A ten druhý koncept, ktorý bol predstavený v začiatku bola akcia. 297 00:16:18,000 --> 00:16:22,550 A udalosti, kedy viac častí kódu spolu vzájomne komunikujú. 298 00:16:22,550 --> 00:16:26,840 V Scratch, to bolo, keď ste použili riadenie a vysielanie Keď som 299 00:16:26,840 --> 00:16:29,500 Príjem bloky. 300 00:16:29,500 --> 00:16:35,170 >> A tiež, v problémových Sada 4, videli sme trochu udalostí rovnako. 301 00:16:35,170 --> 00:16:38,250 Vy ste mohol použiť Knižnica Gevent. 302 00:16:38,250 --> 00:16:42,450 A bol tam funkcie waitForClick , V ktorom ste čakali 303 00:16:42,450 --> 00:16:44,300 pre používateľov ku kliknutie. 304 00:16:44,300 --> 00:16:47,870 A vaše kliknutie, v tomto prípade by bolo akcie a čakať na kliknutie je váš 305 00:16:47,870 --> 00:16:49,120 obslužnú rutinu udalosti. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> A tiež v priebehu zobrazovania vašich psets a pracuje na svojich psets, môžete 308 00:16:58,630 --> 00:17:01,920 mohla prísť do styku s niektoré z týchto príkazov. 309 00:17:01,920 --> 00:17:05,579 To je to, čo ste napísali do svojej okno terminálu alebo čokoľvek okno 310 00:17:05,579 --> 00:17:12,119 ktoré sa objavia na vašom g úpravy na, v podstate, prechádzať váš počítač. 311 00:17:12,119 --> 00:17:19,440 >> Tak napríklad, LS uvádza Obsah adresára. 312 00:17:19,440 --> 00:17:22,510 Uistite sa adresár vytvorí novú zložku. 313 00:17:22,510 --> 00:17:24,819 CD, zmena adresára. 314 00:17:24,819 --> 00:17:28,400 RM, odstrániť, odstráni súbor alebo nejaký adresár. 315 00:17:28,400 --> 00:17:31,050 A potom odstráňte adresár odstráni adresár. 316 00:17:31,050 --> 00:17:32,300 >> Divákov: [nepočuteľné]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> SPEAKER 1: Áno, jasné. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 Ospravedlňujeme sa, ale otázka bola, či vás by naznačovali uvedenie tejto 321 00:17:46,040 --> 00:17:48,840 na ťahák. 322 00:17:48,840 --> 00:17:49,440 Mohlo by to pomôcť. 323 00:17:49,440 --> 00:17:51,490 Ak máte priestor, môžete si ju na. 324 00:17:51,490 --> 00:17:56,170 Je to tiež len všeobecne dosť dobrý mať na pamäti, pretože keď ju použijete 325 00:17:56,170 --> 00:17:59,060 budete chcieť len si to zapamätal. 326 00:17:59,060 --> 00:18:02,750 To bude váš život oveľa jednoduchší. 327 00:18:02,750 --> 00:18:04,000 Už som odpovedal na vašu otázku? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> Takže teraz, hovorili sme trochu Krátko o knižniciach. 330 00:18:14,290 --> 00:18:18,570 Ale dva hlavné tie, ktoré sme boli použitie doteraz v kurze sú 331 00:18:18,570 --> 00:18:20,860 Štandardné I / O a CS50. 332 00:18:20,860 --> 00:18:25,410 Aké veci sú zahrnuté v štandardnom I / O knižnice? 333 00:18:25,410 --> 00:18:28,410 >> Jo, zatiaľ sme použili printf. 334 00:18:28,410 --> 00:18:31,150 V CS50, sme použili vezmi_int a GetString. 335 00:18:31,150 --> 00:18:37,200 A dátový typ string je zhodou okolností tiež musia byť deklarované v tomto CS50 knižnici. 336 00:18:37,200 --> 00:18:40,250 Porozprávame si o trochu viac do hĺbky o Ako knižnice fungujú a ako sa 337 00:18:40,250 --> 00:18:41,870 komunikovať so zvyškom vášho kódu. 338 00:18:41,870 --> 00:18:46,220 Ale to sú dva hlavné tie, ktoré sme prišli do kontaktu s tak ďaleko 339 00:18:46,220 --> 00:18:48,430 samozrejme. 340 00:18:48,430 --> 00:18:50,050 >> Typy. 341 00:18:50,050 --> 00:18:58,120 Jedná sa o dobré si uvedomiť, ako veľmi každý druh je zastúpený, alebo ako 342 00:18:58,120 --> 00:19:02,840 počtu bytov každá typu requires-- 343 00:19:02,840 --> 00:19:04,990 int, 4 bajtov; char, 1 bajt. 344 00:19:04,990 --> 00:19:06,550 Float je 4 bajty. 345 00:19:06,550 --> 00:19:07,782 Čo je to double? 346 00:19:07,782 --> 00:19:09,032 >> Divákov: [nepočuteľné]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> SPEAKER 1: Jo, takže plavák ale dvojnásobok veľkosti. 349 00:19:16,240 --> 00:19:17,150 Čo je dlho? 350 00:19:17,150 --> 00:19:18,400 >> Divákov: [nepočuteľné]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> SPEAKER 1: OK. 353 00:19:24,680 --> 00:19:25,410 Čo je to dlho? 354 00:19:25,410 --> 00:19:26,660 >> Divákov: [nepočuteľné]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> SPEAKER 1: Jo, dvakrát int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Áno. 359 00:19:34,705 --> 00:19:36,100 >> Divákov: [nepočuteľné]. 360 00:19:36,100 --> 00:19:38,030 >> SPEAKER 1: Long [nepočuteľné]. 361 00:19:38,030 --> 00:19:41,860 A potom dlho dlho dvojnásobný. 362 00:19:41,860 --> 00:19:42,814 >> DIVÁKOV: Nie, nie. 363 00:19:42,814 --> 00:19:47,107 Dlho len int. 364 00:19:47,107 --> 00:19:50,910 Záleží na architektúre pred [nepočuteľné] 365 00:19:50,910 --> 00:19:52,922 a int majú rovnakú veľkosť. 366 00:19:52,922 --> 00:19:54,172 [Nepočuteľné]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> SPEAKER 1: Tak dlhý a int sú rovnaké. 369 00:20:00,920 --> 00:20:02,943 A potom dlho dlho je dvojnásobok int. 370 00:20:02,943 --> 00:20:03,910 V pohode. 371 00:20:03,910 --> 00:20:05,550 A potom to, čo je posledný typ? 372 00:20:05,550 --> 00:20:06,510 >> DIVÁKOV: Pointer. 373 00:20:06,510 --> 00:20:10,350 >> SPEAKER 1: Jo, tak sme sa dozvedeli, niečo málo o ukazovatele. 374 00:20:10,350 --> 00:20:14,015 A to bez ohľadu na to, čo je ukazovateľ ukazuje na-- by to mohlo byť char hviezda 375 00:20:14,015 --> 00:20:15,880 alebo int star-- 376 00:20:15,880 --> 00:20:20,530 je to vždy 4 bajty pre ukazovateľ. 377 00:20:20,530 --> 00:20:21,633 Otázky o tom? 378 00:20:21,633 --> 00:20:22,116 Áno? 379 00:20:22,116 --> 00:20:24,531 >> Divákov: [nepočuteľné]? 380 00:20:24,531 --> 00:20:29,530 >> SPEAKER 1: Tak dlhý a int sú To isté v tomto CS50 spotrebiča. 381 00:20:29,530 --> 00:20:32,302 >> Divákov: Prístroj je úplne zameniteľné. 382 00:20:32,302 --> 00:20:33,510 >> SPEAKER 1: Jo. 383 00:20:33,510 --> 00:20:36,610 Tak dlho, dokiaľ je dvakrát int. 384 00:20:36,610 --> 00:20:39,250 >> Divákov: Toto je 32 bit? 385 00:20:39,250 --> 00:20:40,620 >> SPEAKER 1: 32 bit, jo. 386 00:20:40,620 --> 00:20:43,572 >> Divákov: Tak [nepočuteľné]? 387 00:20:43,572 --> 00:20:46,790 >> SPEAKER 1: Áno, ak to nie je explicitne povedať, že 388 00:20:46,790 --> 00:20:47,870 by mala prevziať 32 bit. 389 00:20:47,870 --> 00:20:50,040 >> Divákov: Bolo by niečo povedať ako predpokladu 390 00:20:50,040 --> 00:20:51,498 Architektúra ako spotrebiče. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 Pre 64 bit, jediné veci, ktoré zmena sa túži a ukazovatele. 393 00:21:01,710 --> 00:21:05,614 Obaja [nepočuteľné]. 394 00:21:05,614 --> 00:21:06,590 >> SPEAKER 1: Áno? 395 00:21:06,590 --> 00:21:07,566 >> DIVÁKOV: Otázka. 396 00:21:07,566 --> 00:21:10,982 Takže na jednej z praxe kvízov, požiada o unsigned int. 397 00:21:10,982 --> 00:21:15,374 Tak, ako by to byť stanovený z int [nepočuteľné]? 398 00:21:15,374 --> 00:21:18,140 >> SPEAKER 1: unsigned v je tiež 4 bajty. 399 00:21:18,140 --> 00:21:21,172 Ale to, čo je odlišné o podpísané int a unsigned int? 400 00:21:21,172 --> 00:21:22,422 >> Divákov: [nepočuteľné]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> Reproduktor 1: Správne. 403 00:21:25,630 --> 00:21:27,570 Jeden môže reprezentovať záporné hodnoty. 404 00:21:27,570 --> 00:21:28,580 Ale ako to urobiť? 405 00:21:28,580 --> 00:21:30,536 >> Divákov: [nepočuteľné]. 406 00:21:30,536 --> 00:21:36,370 >> SPEAKER 1: Jo, to ušetrí 1 bit reprezentovať značku. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Podpísala má jeden bit, ktorý predstavuje znak. 409 00:21:45,040 --> 00:21:48,886 A unsigned proste všetkých pozitívnych výsledkov. 410 00:21:48,886 --> 00:21:50,365 >> DIVÁKOV: OK. 411 00:21:50,365 --> 00:21:54,230 Takže vravíte, že double je dvakrát väčšia plaváka? 412 00:21:54,230 --> 00:21:58,202 >> SPEAKER 1: Double je dvakrát veľkosť plaváka, áno. 413 00:21:58,202 --> 00:22:01,639 >> Divákov: Ako ukazovateľ na long long [nepočuteľné]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> SPEAKER 1: Takže otázka je, ako sa ukazovateľ na dlhú long-- 416 00:22:10,870 --> 00:22:13,800 ako je to len štyri bytov, long long jeho 8 bajtov. 417 00:22:13,800 --> 00:22:17,310 Takže pamätajte, čo je ukazovateľ, v podstate, na veľmi základné hodnoty. 418 00:22:17,310 --> 00:22:19,046 >> Divákov: [nepočuteľné]. 419 00:22:19,046 --> 00:22:22,670 >> SPEAKER 1: Jo, tak ukazovateľ je len pamäť. 420 00:22:22,670 --> 00:22:28,040 Takže nezáleží na tom, koľko miesta ktorý pointer ukazuje. 421 00:22:28,040 --> 00:22:32,060 Je len potrebné 4 bajty sledovať na tomto pamäťovom mieste. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Nejaké ďalšie otázky? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 V pohode. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> Takže posledná vec, ktorú som je štandardný výstup. 428 00:22:47,460 --> 00:22:51,020 Mali by ste ich používať často natoľko, že si spomeniete. 429 00:22:51,020 --> 00:22:54,800 Ale to je, keď použijeme printf, napríklad. 430 00:22:54,800 --> 00:22:59,260 A máme tieto zástupné symboly, ktoré boli povolaní formáte kódy. 431 00:22:59,260 --> 00:23:03,910 >> Takže percent c char, percenta aj pre int, a môžeme tiež použiť percent d. 432 00:23:03,910 --> 00:23:05,130 Je to to isté. 433 00:23:05,130 --> 00:23:08,200 Ale, všeobecne, v CS50 sme skúste použiť percent i. 434 00:23:08,200 --> 00:23:09,860 Percenta f pre plaváku. 435 00:23:09,860 --> 00:23:15,620 Percenta ld dlho dlho a percent s pre reťazec. 436 00:23:15,620 --> 00:23:18,550 >> Rovnako tak som použil niekoľko z týchto sekvencií escape. 437 00:23:18,550 --> 00:23:22,431 Napríklad spätné lomítko n pre nový riadok. 438 00:23:22,431 --> 00:23:26,910 To je len, keď ste formátovanie Váš kód pre tlač f. 439 00:23:26,910 --> 00:23:27,260 Áno? 440 00:23:27,260 --> 00:23:28,906 >> Divákov: Čo je to percent d pre? 441 00:23:28,906 --> 00:23:31,850 >> SPEAKER 1: Takže otázka je to, čo je percento d pre? 442 00:23:31,850 --> 00:23:33,270 Percento d je pre ints. 443 00:23:33,270 --> 00:23:37,392 Percent d a percento aj sú rovnaké. 444 00:23:37,392 --> 00:23:41,130 >> Divákov: Aký je rozdiel medzi spätné lomítko n a spätné lomítko r? 445 00:23:41,130 --> 00:23:45,300 >> SPEAKER 1: Takže otázka je, čo je Rozdiel medzi vôľou n a 446 00:23:45,300 --> 00:23:48,615 odpor r? 447 00:23:48,615 --> 00:23:50,906 Myslím si, že spätné lomítko r je-- 448 00:23:50,906 --> 00:23:54,340 >> Divákov: Tak spätné lomítko r jednoducho znamená, vracia na začiatok riadku 449 00:23:54,340 --> 00:23:56,670 bez skutočne ísť na nový riadok. 450 00:23:56,670 --> 00:24:01,000 Takže ak tlačíte spätné lomítko r a návrat na začiatok riadku 451 00:24:01,000 --> 00:24:04,005 potom tlačíte viac vecí, môžete prepísať veci, ktoré je už na 452 00:24:04,005 --> 00:24:04,390 [Nepočuteľné]. 453 00:24:04,390 --> 00:24:06,725 Vzhľadom k tomu, n v skutočnosti ide do nového linka a ide do [nepočuteľné]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> SPEAKER 1: No, nejaké ďalšie otázky? 456 00:24:13,915 --> 00:24:15,430 V poriadku. 457 00:24:15,430 --> 00:24:18,617 Chystám sa odovzdať ho Dan, ktorý bude pokračovať. 458 00:24:18,617 --> 00:24:25,078 >> [APPLAUSE] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: V poriadku. 461 00:25:09,720 --> 00:25:18,590 Takže budem hovoriť o ďalšej veľmi široký Rad myšlienok z triedy, ktoré sú 462 00:25:18,590 --> 00:25:23,220 zhruba zástupca dvoch týždňov a štart troch týždňov rozjazde 463 00:25:23,220 --> 00:25:28,690 s odlievaním, ktoré je len spôsob, ako liečenie hodnotu určitého typu ako 464 00:25:28,690 --> 00:25:30,830 hodnotu iného typu. 465 00:25:30,830 --> 00:25:34,110 Takže to môžeme robiť s znakov do ints, pláva ints a 466 00:25:34,110 --> 00:25:35,360 dlhé túži zdvojnásobiť. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Všetky tieto veci môžu byť použité ako spôsoby liečenie nejakú číselnú hodnotu 469 00:25:44,500 --> 00:25:48,370 mínus char ako iné číselná hodnota. 470 00:25:48,370 --> 00:25:54,480 Takže tam sú niektoré problémy s tým, ze kurz, ktorý prichádza, keď ste hádzať 471 00:25:54,480 --> 00:25:57,860 veci, ako je plavák ints. 472 00:25:57,860 --> 00:26:00,500 Tak toto je trochu divný. 473 00:26:00,500 --> 00:26:03,170 Máme plaváka, ktorý je 1.31. 474 00:26:03,170 --> 00:26:05,220 Vynásobíme ju 10000. 475 00:26:05,220 --> 00:26:08,380 A potom sme ju vytlačiť ako int. 476 00:26:08,380 --> 00:26:09,630 Čo robí tento výstup? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10000 krát 1.31. 479 00:26:14,020 --> 00:26:18,761 Takže 13000, je to, že to uhádol? 480 00:26:18,761 --> 00:26:20,685 >> Divákov: Myslím, že je to 10000. 481 00:26:20,685 --> 00:26:24,234 >> DAN: Tak som sa vynásobí 10000 predtým, než som ho casting. 482 00:26:24,234 --> 00:26:25,202 >> DIVÁKOV: Oh. 483 00:26:25,202 --> 00:26:27,622 Nebolo by tam byť jedna 9 a niektoré 0 počet? 484 00:26:27,622 --> 00:26:29,270 >> DAN: Môžete mať nejaké podivné znaky. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Tak jo, to je 1,3 krát 10.000. 487 00:26:37,670 --> 00:26:40,040 Tak to je 13000. 488 00:26:40,040 --> 00:26:41,313 A to navyše weird-- 489 00:26:41,313 --> 00:26:42,160 >> Divákov: 13100. 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13100. 491 00:26:42,650 --> 00:26:44,910 Ďakujem, Robe. 492 00:26:44,910 --> 00:26:46,610 A to navyše weirdness-- 493 00:26:46,610 --> 00:26:48,060 tento 9,9-- 494 00:26:48,060 --> 00:26:53,860 Jednoducho preto, že tento odlievanie skončil zaokrúhlení smerom nadol, kde 495 00:26:53,860 --> 00:26:55,394 to by nemalo mať. 496 00:26:55,394 --> 00:26:55,871 Jo. 497 00:26:55,871 --> 00:26:58,256 >> Divákov: liatie stane po čokoľvek iné? 498 00:26:58,256 --> 00:27:03,865 >> DAN: Takže, pretože som to v tlačenej podobe, ale Znamená to, násobenie pred ním 499 00:27:03,865 --> 00:27:05,230 Znamená to, liatie. 500 00:27:05,230 --> 00:27:06,140 >> Divákov: [nepočuteľné]. 501 00:27:06,140 --> 00:27:11,350 >> DAN: Myslím, že by obsadil prvé, jo, čo by bolo 10.000. 502 00:27:11,350 --> 00:27:12,610 Ešte niečo? 503 00:27:12,610 --> 00:27:13,330 V pohode. 504 00:27:13,330 --> 00:27:16,344 Tak toto je 13099. 505 00:27:16,344 --> 00:27:17,840 Prečo sa to stalo? 506 00:27:17,840 --> 00:27:18,900 Nepresnosť. 507 00:27:18,900 --> 00:27:21,020 >> Plaváky nie sú dokonalé. 508 00:27:21,020 --> 00:27:27,550 Môžu predstavovať iba číslice na určitý počet významných osobností. 509 00:27:27,550 --> 00:27:35,120 Takže keď sme sa vytlačí 8 Sig figy na to float, dostaneme akúsi 510 00:27:35,120 --> 00:27:36,800 škaredý vyzerajúce číslo. 511 00:27:36,800 --> 00:27:45,580 A to preto, že 1,31 nemôžu presne byť zastúpené jednoduché 512 00:27:45,580 --> 00:27:49,000 sily dva v stroji. 513 00:27:49,000 --> 00:27:53,530 Takže to skončí pri najbližšej hádať, ktorá končí 514 00:27:53,530 --> 00:27:55,710 je trochu málo. 515 00:27:55,710 --> 00:27:57,730 Zmysel? 516 00:27:57,730 --> 00:27:59,110 OK. 517 00:27:59,110 --> 00:28:05,840 >> Teraz prešiel sú iný spôsob robí podmienené príkazy, kde všetky 518 00:28:05,840 --> 00:28:09,900 staráme sa len o jednu premennú. 519 00:28:09,900 --> 00:28:16,570 Takže v tomto konkrétnom príklade, sme získanie celé číslo od užívateľa. 520 00:28:16,570 --> 00:28:21,070 A potom sa pozeráme na čo to číslo je. 521 00:28:21,070 --> 00:28:23,500 Možno predpokladať, že je to číslo od jedného do štyroch. 522 00:28:23,500 --> 00:28:24,800 To je to, čo žiadaš. 523 00:28:24,800 --> 00:28:28,450 >> Takže si urobiť spínač názov premennej. 524 00:28:28,450 --> 00:28:34,290 Potom môžete nastaviť prípadov možné Hodnoty by to mohlo byť. 525 00:28:34,290 --> 00:28:37,730 Takže v prípade, že jeden, hovoria, že je nízka. 526 00:28:37,730 --> 00:28:41,080 A potom zlomiť dostať von stavu spínača, takže 527 00:28:41,080 --> 00:28:43,270 nechcete ísť ďalej. 528 00:28:43,270 --> 00:28:44,830 >> V ďalšom case-- 529 00:28:44,830 --> 00:28:46,940 tak tomu dva a prípad tři-- 530 00:28:46,940 --> 00:28:51,920 či je to prípad dvoch to len klesne Prvý riadok kódu, ktoré považuje sa 531 00:28:51,920 --> 00:28:55,400 treťom prípade, kým nenarazí na prestávku. 532 00:28:55,400 --> 00:29:00,430 Takže dôvod, prečo ste si prípad jedného do iba tlač nízka preto, že som 533 00:29:00,430 --> 00:29:01,890 túto prestávku tu. 534 00:29:01,890 --> 00:29:05,360 Mám-li, povedzme, ignoroval break-- keď som hodil túto breakaway-- 535 00:29:05,360 --> 00:29:09,740 by to vytlačiť nízka, a potom by tlačiť stred, a potom by to zlomiť. 536 00:29:09,740 --> 00:29:12,200 >> Takže prestávky sú dôležitou súčasťou spínače podmienok a 537 00:29:12,200 --> 00:29:14,340 že by tam mala byť. 538 00:29:14,340 --> 00:29:20,070 Všetky prípady, ktoré nie sú výslovne uvedené sú spracované východiskové 539 00:29:20,070 --> 00:29:26,645 prípad v spínači a mali by byť hodené. 540 00:29:26,645 --> 00:29:31,363 >> Publikum: Tak 1, 2, 3, a 4 by n? 541 00:29:31,363 --> 00:29:33,310 >> DAN: Hodnoty, ktoré n môže byť. 542 00:29:33,310 --> 00:29:34,654 Áno. 543 00:29:34,654 --> 00:29:35,146 Jo? 544 00:29:35,146 --> 00:29:37,606 >> Divákov: Takže keď máte že [nepočuteľné]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> DAN: by ste vytlačiť nízka, a potom by to vytlačiť strednej a 547 00:29:46,830 --> 00:29:47,400 potom by to zlomiť. 548 00:29:47,400 --> 00:29:50,244 >> Divákov: Prečo by to vytlačiť Stredná Ak [nepočuteľné]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> DAN: Takže všetko v prípade, pred prestávka spadá. 551 00:30:00,550 --> 00:30:09,390 Takže prípad jedného tlače pod prípad tým, ako je to po tlači. 552 00:30:09,390 --> 00:30:09,890 Jo? 553 00:30:09,890 --> 00:30:11,140 >> Divákov: [nepočuteľné]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> DAN: Tak toto číslo je len zvláštne hodnota, ktorú táto premenná 556 00:30:22,170 --> 00:30:23,420 môže mať, že jo? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Má to zmysel? 559 00:30:28,490 --> 00:30:28,990 Jo. 560 00:30:28,990 --> 00:30:31,490 >> Divákov: [nepočuteľné]? 561 00:30:31,490 --> 00:30:34,130 >> DAN: Áno, prípad dvoch vytlačí strednej a potom zlomiť. 562 00:30:34,130 --> 00:30:35,380 >> Divákov: [nepočuteľné]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> DAN: Myslím si, že by? 565 00:30:40,050 --> 00:30:43,855 Aké ďalšie typy dát môžete prepínať? 566 00:30:43,855 --> 00:30:46,320 >> Divákov: Môžete prepínať pred všetkými dátovými typmi. 567 00:30:46,320 --> 00:30:50,905 Ale to len znamená, že niečo cez znakov a ints a podobné veci, pretože 568 00:30:50,905 --> 00:30:55,600 ak ste prepínanie ukazovatele že nie je naozaj zmysel, 569 00:30:55,600 --> 00:30:59,555 prepínanie zaťaženie, ak je to dokonca nech to to urobíte, pretože s plávajúcou desatinnou čiarkou 570 00:30:59,555 --> 00:31:02,840 presný by ste naozaj chcem to urobiť tak ako tak. 571 00:31:02,840 --> 00:31:07,320 Takže celkom veľa, len ints a znakov a tak podobne. 572 00:31:07,320 --> 00:31:12,360 >> DAN: Jo, to je, keď máte explicitné hodnoty, ktoré viete, myslím, že môže byť 573 00:31:12,360 --> 00:31:14,250 že spínač je vlastne užitočný. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Dobrý? 576 00:31:18,990 --> 00:31:21,370 OK. 577 00:31:21,370 --> 00:31:26,180 >> Rozsah je rozsah, ktorý vyhlásil, variabilný rozširuje. 578 00:31:26,180 --> 00:31:32,190 Takže v tomto malom kuse kódu mám, že by bolo plné chýb. 579 00:31:32,190 --> 00:31:41,450 A dôvod, prečo je vyhlásený som tento int aj v rámci tohto cyklu for. 580 00:31:41,450 --> 00:31:46,390 A potom som sa snažím vyplýva, že aj mimo, že pre rozsah slučky. 581 00:31:46,390 --> 00:31:50,330 >> Takže v podstate, môžete premýšľať o rozsahu ako niečo, keď deklarujete 582 00:31:50,330 --> 00:31:59,750 sa vnútri párom zložených zátvoriek iba existuje v týchto zložených zátvoriek. 583 00:31:59,750 --> 00:32:04,990 A ak sa pokúsite a použiť túto premennú mimo týchto zložených zátvorkách, budete 584 00:32:04,990 --> 00:32:08,356 dôjde k chybe z kompilátor. 585 00:32:08,356 --> 00:32:08,812 Jo? 586 00:32:08,812 --> 00:32:09,724 >> Divákov: Tak toto nefunguje? 587 00:32:09,724 --> 00:32:11,790 >> DAN: To nefunguje, áno. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Strings. 590 00:32:18,660 --> 00:32:19,780 String char *. 591 00:32:19,780 --> 00:32:22,250 Sú to presne to isté. 592 00:32:22,250 --> 00:32:25,540 Sú to len ukazovatele na znaky. 593 00:32:25,540 --> 00:32:33,000 A všetky reťazce, ktoré máte by mal skončiť so spätným lomítkom nulové, čo je práve 594 00:32:33,000 --> 00:32:34,410 c konvencie. 595 00:32:34,410 --> 00:32:36,680 >> To je nazývané NULL terminátor. 596 00:32:36,680 --> 00:32:39,050 A NULL-- 597 00:32:39,050 --> 00:32:41,670 kapitál N, kapitál U kapitál L, hlavné ja-- 598 00:32:41,670 --> 00:32:44,290 nie je to isté ako NULL terminátor. 599 00:32:44,290 --> 00:32:46,640 To je ukazovateľ. 600 00:32:46,640 --> 00:32:48,280 To je znak. 601 00:32:48,280 --> 00:32:49,530 Sú veľmi odlišné. 602 00:32:49,530 --> 00:32:50,200 Pamätaj si to. 603 00:32:50,200 --> 00:32:52,320 To bude na kvíz, pravdepodobne. 604 00:32:52,320 --> 00:32:54,040 Nevidel som kvíz. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Jo? 607 00:32:58,840 --> 00:33:01,232 >> Divákov: Tak NULL je, povedzme, ukazovateľ? 608 00:33:01,232 --> 00:33:01,995 >> DAN: Áno. 609 00:33:01,995 --> 00:33:05,170 >> Divákov: Čo [nepočuteľné]? 610 00:33:05,170 --> 00:33:10,050 >> DAN: Ak je, povedzme, malloc je volaná, keď vás nemajú dostatok pamäti, aby si 611 00:33:10,050 --> 00:33:14,400 bez ohľadu na veľkosť žiadaš, malloc vráti NULL. 612 00:33:14,400 --> 00:33:19,550 Je to v podstate vždy, keď je funkcia mal vrátiť ukazovateľ, môžete 613 00:33:19,550 --> 00:33:22,600 je potrebné skontrolovať pred NULL nasledujúcich dôvodov NULL je celkom good-- 614 00:33:22,600 --> 00:33:25,260 to je, tak nejako, hodnota odpadky. 615 00:33:25,260 --> 00:33:27,050 Je to, pokiaľ ide o ukazovatele ísť nula. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Kedykoľvek budete volať funkciu, ktorá vracia ukazovateľ. 618 00:33:32,250 --> 00:33:35,960 Budete chcieť skontrolovať, že je Uistite sa, že, že ukazovateľ nie je NULL 619 00:33:35,960 --> 00:33:37,760 pretože NULL je veľmi časté. 620 00:33:37,760 --> 00:33:40,160 Je to akýsi návrat na odpadky. 621 00:33:40,160 --> 00:33:44,902 Takže ak sa niečo sa nedarí, len vrátiť namiesto NULL. 622 00:33:44,902 --> 00:33:45,898 >> Divákov: [nepočuteľné]? 623 00:33:45,898 --> 00:33:48,922 >> DAN: Áno, a to je to. 624 00:33:48,922 --> 00:33:51,750 >> Divákov: [nepočuteľné]? 625 00:33:51,750 --> 00:33:52,800 >> DAN: kúzlo ako to. 626 00:33:52,800 --> 00:33:54,150 To je NULL terminátor. 627 00:33:54,150 --> 00:33:56,560 Je to malé písmená N-U-L-L, ak ste hláskovanie to. 628 00:33:56,560 --> 00:33:59,860 >> Divákov: A ja šiel späť a skúša to. 629 00:33:59,860 --> 00:34:03,010 A ak sa pokúsite dať plávajúcou desatinnou čiarkou hodnota na prepínači, bude to revať na teba 630 00:34:03,010 --> 00:34:05,916 hovorí, vyhlásenie vyžaduje výraz celočíselného typu. 631 00:34:05,916 --> 00:34:07,166 >> DAN: Tu to je. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Ale jo, to bola otázka znova? 634 00:34:12,246 --> 00:34:13,496 >> Divákov: [nepočuteľné]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> DAN: Tak kapitál N, kapitál U kapitál L, L kapitál je skutočný c vec. 637 00:34:23,679 --> 00:34:29,719 To je ukazovateľ NULL a bude byť liečené len ako taký. 638 00:34:29,719 --> 00:34:33,530 Nebudete niekedy skúsiť a kúzlo Znak NULL a neuvidím 639 00:34:33,530 --> 00:34:35,630 iný spôsob, ako toto. 640 00:34:35,630 --> 00:34:36,610 Jo? 641 00:34:36,610 --> 00:34:42,490 >> Divákov: Takže návrat do char max alebo niečo, čo v poznámkach by to 642 00:34:42,490 --> 00:34:43,960 stelesňujú rovnakú funkciu ako [nepočuteľné]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> Divákov: Takže máte na mysli vracia char max z getchar, alebo 645 00:34:54,949 --> 00:34:55,444 čo to je? 646 00:34:55,444 --> 00:34:55,940 >> Hľadisko: Áno. 647 00:34:55,940 --> 00:34:58,620 >> DIVÁKOV: Jo, tak všeobecne termín pre všetky tie veci, 648 00:34:58,620 --> 00:34:59,920 sú overovací hodnoty. 649 00:34:59,920 --> 00:35:03,640 Tak ako návrat int max od vezmi_int a char max z getchar, je to 650 00:35:03,640 --> 00:35:06,010 mal byť rád, v poriadku, ak je tieto veci sa vracajú k nám, 651 00:35:06,010 --> 00:35:07,210 sa niečo pokazilo. 652 00:35:07,210 --> 00:35:09,950 >> U ukazovateľov, len náhodou táto hodnota sentinel, že každý 653 00:35:09,950 --> 00:35:10,750 súhlasí s tým ,. 654 00:35:10,750 --> 00:35:13,210 A to je vec, ktorú sa vrátiť keď sa niečo pokazí. 655 00:35:13,210 --> 00:35:15,910 Takže char max je to, čo sme pomocou predstavujú niečo 656 00:35:15,910 --> 00:35:18,100 ako NULL alebo getchar. 657 00:35:18,100 --> 00:35:23,420 >> Divákov: Takže ak testujete getchar, mohol by si dať NULL? 658 00:35:23,420 --> 00:35:23,910 Bolo by to niečo zmeniť? 659 00:35:23,910 --> 00:35:25,400 >> DAN: Dalo by sa to len skontrolovať NULL. 660 00:35:25,400 --> 00:35:30,130 Musel by ste skontrolovať char max, pretože návratová hodnota funkcie je 661 00:35:30,130 --> 00:35:35,416 postava nie je ukazovateľ. 662 00:35:35,416 --> 00:35:35,888 Jo? 663 00:35:35,888 --> 00:35:38,248 >> Divákov: Táto otázka sa pýta pre dĺžku reťazca. 664 00:35:38,248 --> 00:35:40,136 Znamená to, že obsahujú znak NULL? 665 00:35:40,136 --> 00:35:41,000 >> DAN: Nie 666 00:35:41,000 --> 00:35:45,930 A to je skutočne, ako dĺžka reťazca vie, zastaviť, pretože prechádza 667 00:35:45,930 --> 00:35:49,070 vaše pole znakov do vidia znak NULL. 668 00:35:49,070 --> 00:35:51,030 A potom je to ako všetko Dobre, som urobil. 669 00:35:51,030 --> 00:35:52,130 >> Divákov: [nepočuteľné] päť? 670 00:35:52,130 --> 00:35:53,990 >> DAN: Dobrý deň bude päť. 671 00:35:53,990 --> 00:35:55,240 Jo. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 Takže polia sú spojité bloky pamäte. 674 00:36:02,880 --> 00:36:08,480 Majú okamžitý prístup tým, Názov poľa, a potom v zložených 675 00:36:08,480 --> 00:36:16,720 traky, čo index chceš ísť sa, že sú indexované od nuly, cez 676 00:36:16,720 --> 00:36:20,100 Dĺžka poľa mínus jedna. 677 00:36:20,100 --> 00:36:23,070 >> A oni to vyhlásil podľa typu vec, že ​​ste ukladanie do 678 00:36:23,070 --> 00:36:29,750 pole, názov poľa, a potom bez ohľadu na veľkosť, je z tohto poľa. 679 00:36:29,750 --> 00:36:36,660 Tak to je char pole dĺžky šesť, že má tieto hodnoty. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Jo? 682 00:36:42,700 --> 00:36:43,950 >> Divákov: [nepočuteľné]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> DAN: Jo. 685 00:36:48,460 --> 00:36:51,340 >> Divákov: [nepočuteľné]? 686 00:36:51,340 --> 00:36:56,700 >> DAN: Ak máte to, čo sa deje do poľa už. 687 00:36:56,700 --> 00:37:02,260 Takže by ste mohli zadať toto miesto as, povedzme, char, bez ohľadu na názov vášho 688 00:37:02,260 --> 00:37:12,200 pole je prázdne zátvorky rovná kučeravé rovnátka H čiarka čiarka E L L čiarkou čiarka 689 00:37:12,200 --> 00:37:16,290 O čiarka znak NULL a zložená zátvorka. 690 00:37:16,290 --> 00:37:18,180 To by tiež fungovať ako vyhlásenie. 691 00:37:18,180 --> 00:37:20,886 >> Divákov: [nepočuteľné]? 692 00:37:20,886 --> 00:37:23,110 >> DAN: Potom musíte mať veľkosť už. 693 00:37:23,110 --> 00:37:23,896 >> Divákov: [nepočuteľné]? 694 00:37:23,896 --> 00:37:25,146 >> DAN: Áno. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 V poriadku. 697 00:37:32,420 --> 00:37:36,430 Argumenty príkazového riadku sú spôsob, ako získanie vstup od užívateľa ako 698 00:37:36,430 --> 00:37:39,380 Argumenty hlavné. 699 00:37:39,380 --> 00:37:40,600 Hlavné prijíma dva argumenty. 700 00:37:40,600 --> 00:37:47,680 Počet argumentov, ktorý je prešiel pozdĺž príkazového riadka a a 701 00:37:47,680 --> 00:37:55,340 reťazec vektora alebo pole reťazcov zo všetkých argumentov. 702 00:37:55,340 --> 00:38:07,840 >> Takže keď, povedzme, sa nazýva funkcie, ako je bodka z 1 miesto, 2 priestor, tri, 703 00:38:07,840 --> 00:38:10,110 argc by 4. 704 00:38:10,110 --> 00:38:17,370 A argv 0 by bodka von. 705 00:38:17,370 --> 00:38:19,130 Argv1 by jeden. 706 00:38:19,130 --> 00:38:23,030 argv2 by 2. argv3 bude 3, v tomto konkrétnom prípade. 707 00:38:23,030 --> 00:38:23,310 Jo? 708 00:38:23,310 --> 00:38:25,400 >> Divákov: [nepočuteľné]? 709 00:38:25,400 --> 00:38:34,010 >> DAN: posledný prvok v poli pretože pole je dĺžka argc Plus 710 00:38:34,010 --> 00:38:41,050 jeden z argb, posledný prvok je ukazovateľ NULL. 711 00:38:41,050 --> 00:38:42,580 Je argc plus 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Takže v prípade, že som povedal, je to by argv 0 je bodka von. 714 00:38:52,150 --> 00:38:56,330 argv 1 je 1. argv2 je 2. argv 3 je 3. 715 00:38:56,330 --> 00:39:03,490 argv 4, čo je jedna väčšia než argc by mať hodnotu NULL. 716 00:39:03,490 --> 00:39:04,870 >> A to je NULL pointer. 717 00:39:04,870 --> 00:39:06,590 Áno. 718 00:39:06,590 --> 00:39:11,250 A to preto, že reťazec je char hviezda je ukazovateľ. 719 00:39:11,250 --> 00:39:14,102 Tak musí byť rovnakého typu. 720 00:39:14,102 --> 00:39:14,595 Jo? 721 00:39:14,595 --> 00:39:16,074 >> Divákov: Dve otázky. 722 00:39:16,074 --> 00:39:21,004 Takže človek, aký je rozdiel medzi to a GetString iný ako jeden typ 723 00:39:21,004 --> 00:39:22,483 v užívateľskej motore? 724 00:39:22,483 --> 00:39:25,934 A za druhé, to je uložená v vaša posledná spomienka? 725 00:39:25,934 --> 00:39:28,399 Tak ako, by GetString byť [nepočuteľné]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> DAN: Kde je uložené? 728 00:39:33,650 --> 00:39:34,905 Ja neviem, kde je uložený. 729 00:39:34,905 --> 00:39:40,000 >> DIVÁKOV: Takže, vlastne, viete, ako si fungovať hovoríte, že je to argumenty 730 00:39:40,000 --> 00:39:42,170 sú uložené v zásobníku? 731 00:39:42,170 --> 00:39:46,610 Takže argc a argv sú argumenty na hlavné a sú vo fronte, alebo naozaj 732 00:39:46,610 --> 00:39:49,131 tesne nad to, čo si myslíte, že ako začiatok zásobníka. 733 00:39:49,131 --> 00:39:53,490 Aká bola druhá časť otázky? 734 00:39:53,490 --> 00:39:56,821 >> Divákov: Tak čo je to [nepočuteľné]? 735 00:39:56,821 --> 00:40:00,990 >> DAN: Jo, je to len iný spôsob, ako ako sa dostať vstup od užívateľa. 736 00:40:00,990 --> 00:40:06,030 Tahle je o niečo účinnejší a to je šikovnejšie pre skripty, pretože vás 737 00:40:06,030 --> 00:40:10,070 stačí odovzdať argumenty k vašej hlavnej funkcie skôr než čakať 738 00:40:10,070 --> 00:40:13,400 pre používateľa v prípade, že nemáte žiadne používateľa. 739 00:40:13,400 --> 00:40:16,280 >> DIVÁKOV: A jo, dostať reťazca by [nepočuteľné]. 740 00:40:16,280 --> 00:40:17,922 To by ukladať veci, ktoré potrebujete. 741 00:40:17,922 --> 00:40:18,834 >> DAN: Jo? 742 00:40:18,834 --> 00:40:21,114 >> Divákov: [nepočuteľné]? 743 00:40:21,114 --> 00:40:27,545 >> DAN: Áno, argv 0 je vždy bodka lomítko z volanie funkcie. 744 00:40:27,545 --> 00:40:28,042 Jo? 745 00:40:28,042 --> 00:40:29,292 >> Divákov: [nepočuteľné]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN: Áno, každý z argumentov skončila znakom NULL, pretože 748 00:40:37,310 --> 00:40:38,310 sú reťazce. 749 00:40:38,310 --> 00:40:40,892 >> Divákov: [nepočuteľné]? 750 00:40:40,892 --> 00:40:44,116 >> DAN: Áno, argv argc je ukazovateľ NULL. 751 00:40:44,116 --> 00:40:45,112 >> Divákov: [nepočuteľné]? 752 00:40:45,112 --> 00:40:47,104 >> DAN: Ach jo. 753 00:40:47,104 --> 00:40:48,100 Jo, je mi ľúto. 754 00:40:48,100 --> 00:40:49,594 >> Divákov: Tak [nepočuteľné]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> DAN: Takže otázka je, ak ste mali príkazového riadku bodka lomítko bodku z 1, 2, 757 00:41:16,340 --> 00:41:20,410 by počet príkazového riadka Argumenty byť dva alebo by to bolo tri? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> Divákov: Myslím, že to nie je naozaj záleží. 760 00:41:28,240 --> 00:41:31,370 Mám vo zvyku hovoriť, oh, si neprešiel žiadne argumenty príkazového riadku, keď 761 00:41:31,370 --> 00:41:32,730 Je zrejmé, že ste zavolal funkciu. 762 00:41:32,730 --> 00:41:37,950 Takže mám tendenciu hlasno vylúčiť funkcie z príkazového riadka 763 00:41:37,950 --> 00:41:40,350 argumenty, aj keď je to zahrnuté v argv. 764 00:41:40,350 --> 00:41:42,600 >> DAN: Ale keby to bolo na test-- 765 00:41:42,600 --> 00:41:46,550 Jo-- aj keď poviete niečo ako argc rovná 3, 766 00:41:46,550 --> 00:41:48,512 ste v bezpečné postavenie. 767 00:41:48,512 --> 00:41:49,416 Jo? 768 00:41:49,416 --> 00:41:50,666 >> Divákov: [nepočuteľné]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> DAN: Myslím, že keby namiesto volania tejto v argc a sláčikové argv zátvorkách 771 00:42:09,510 --> 00:42:14,350 ale stále rovnaké typy a len volal je niečo iné, ako 772 00:42:14,350 --> 00:42:16,640 a b, to by ešte fungovať? 773 00:42:16,640 --> 00:42:18,790 A to by ešte fungovať, by ste len-- 774 00:42:18,790 --> 00:42:21,520 namiesto použitia argc-- by ste používať a b. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Jo? 777 00:42:25,408 --> 00:42:26,658 >> Divákov: [nepočuteľné]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> DAN: Takže otázka je GetString je bude ukladať pamäť haldy 780 00:42:38,850 --> 00:42:42,280 pretože GetString je char *. 781 00:42:42,280 --> 00:42:47,530 Ukladá pamäť haldy, pretože žiada, aby sa malloc v aktuálnej 782 00:42:47,530 --> 00:42:49,258 realizácia getString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 OK, ďalej. 785 00:42:55,090 --> 00:42:55,950 >> Zabezpečenia. 786 00:42:55,950 --> 00:43:01,090 Takže skutočne bezpečné, môžete spoľahnúť na žiadny jeden a nedovoľujú jeden prístup ku ktorejkoľvek 787 00:43:01,090 --> 00:43:04,540 vaše informácie, čo je dôvod, prečo všetci stavia svoje vlastné stroje, 788 00:43:04,540 --> 00:43:09,580 vlastné operačné systémy, všetky ich Programy od nuly, a samozrejme 789 00:43:09,580 --> 00:43:13,410 nepripájajte žiadne iné zariadenie cez internet. 790 00:43:13,410 --> 00:43:17,350 Takže počítače sú neisté. 791 00:43:17,350 --> 00:43:19,200 V skutočnosti sú. 792 00:43:19,200 --> 00:43:20,940 Musíme veriť ostatným ľuďom. 793 00:43:20,940 --> 00:43:26,500 >> A predstava bezpečnosti je, že ste sa snaží obmedziť množstvo 794 00:43:26,500 --> 00:43:27,540 verím, že budete potrebovať. 795 00:43:27,540 --> 00:43:32,080 A jedným z prostriedkov, môžete to urobiť je cez kryptografiu. 796 00:43:32,080 --> 00:43:34,950 Kryptografia je, v podstate, máme tajomstvo. 797 00:43:34,950 --> 00:43:38,880 >> Niekedy musíme prejsť naše tajomstvo spolu cez, povedzme, internet alebo 798 00:43:38,880 --> 00:43:39,980 ďalších vecí. 799 00:43:39,980 --> 00:43:43,180 A my nechceme ľudí spoznať táto tajomstvo. 800 00:43:43,180 --> 00:43:50,100 Tak sme zašifrovať naše tajomstvo na ceste že dúfame, že nikto nemôže prísť na to. 801 00:43:50,100 --> 00:43:51,600 >> Tak sme used-- 802 00:43:51,600 --> 00:43:54,340 cez priebehu tohto class-- 803 00:43:54,340 --> 00:44:00,750 veci, ako Caesara a [Nepočuteľné], ktoré sú veľmi oboje, veľmi 804 00:44:00,750 --> 00:44:03,200 nebezpečné spôsoby šifrovania veci. 805 00:44:03,200 --> 00:44:07,930 Sú ľahko zistiť, čo sa sú, a aké sú vaše tajomstvá sú. 806 00:44:07,930 --> 00:44:12,130 Skutočný svet používa oveľa viac zložité šifrovacie schémy. 807 00:44:12,130 --> 00:44:13,880 A my sa nesmie dostať do oveľa viac než to. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Ladenie. 810 00:44:19,430 --> 00:44:20,785 GDB je najlepšie. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Chystám sa zdôrazniť to znova. 813 00:44:25,810 --> 00:44:30,920 Použitie GDB celú dobu každý keď budete mať problém. 814 00:44:30,920 --> 00:44:36,030 Príkazy, ktoré sú užitočné v GDB sú zlomiť, ktorý odovzdáte buď linku 815 00:44:36,030 --> 00:44:41,330 číslo, názov funkcie, v podstate kde v kóde Ak chcete zastaviť, 816 00:44:41,330 --> 00:44:45,600 a musí byť schopný prevziať kontrolu. 817 00:44:45,600 --> 00:44:54,140 >> Tlač má premennú a vytlačí čo to je premenná na to 818 00:44:54,140 --> 00:44:55,990 bod vo svojom prevedení. 819 00:44:55,990 --> 00:45:00,130 Ďalšie presunie prevedenie po jednom kroku. 820 00:45:00,130 --> 00:45:05,050 A krok kroky vnútri funkcie v prevedení. 821 00:45:05,050 --> 00:45:10,480 >> Ostatné veci sú beh, čo je, ako ste skutočne spustiť kód. 822 00:45:10,480 --> 00:45:16,630 Continue všetky kroky potrebné sa dostať k ďalšiemu bodu zlomu. 823 00:45:16,630 --> 00:45:18,300 A existuje mnoho, mnoho ďalších. 824 00:45:18,300 --> 00:45:19,040 Nájdite si ich. 825 00:45:19,040 --> 00:45:19,901 Sú to skvelé. 826 00:45:19,901 --> 00:45:20,863 Jo? 827 00:45:20,863 --> 00:45:22,113 >> Divákov: [nepočuteľné]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: Áno, čo je debugger. 830 00:45:28,200 --> 00:45:34,230 Takže debugger je program, ktorý umožňuje ladiť svoj program. 831 00:45:34,230 --> 00:45:39,931 Nie je to program, ktorý nájde chyby pre vy, ale bolo by to skvelé. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> A posledný je pre mňa hľadanie. 834 00:45:46,040 --> 00:45:51,470 Takže typov hľadanie, ktoré sme si rozprávali o v tejto triede sú lineárne vyhľadávanie, 835 00:45:51,470 --> 00:45:55,960 čo je len, že sa pozriete do každého prvok vyhľadávacieho priestoru, jedna 836 00:45:55,960 --> 00:46:00,410 prvok v čase, kým nenájdete to, čo hľadáte, alebo kým sa nedostanete si 837 00:46:00,410 --> 00:46:03,350 koniec vašej hľadanie priestoru, v ktorom bod hovoríte, že ste nemohli nájsť 838 00:46:03,350 --> 00:46:06,360 prvok, ktorý ste hľadali. 839 00:46:06,360 --> 00:46:13,450 A to trvá v najlepšom prípade konštantný čas, čo je 0 1 a v najhoršom prípade lineárnej 840 00:46:13,450 --> 00:46:16,070 Doba, ktorá je 0 n. 841 00:46:16,070 --> 00:46:19,250 >> Binárne vyhľadávanie, ktoré je potrebné špinavé prvky. 842 00:46:19,250 --> 00:46:24,230 Idete do stredu svojich prvkov, zistiť, či prvok hľadáte 843 00:46:24,230 --> 00:46:30,120 je väčší alebo menší, ako je prvok že ste v stredu. 844 00:46:30,120 --> 00:46:36,510 Je to väčšia, hovoríte, že dno Vášho hľadania priestor je váš 845 00:46:36,510 --> 00:46:41,550 aktuálna poloha, stredná, a reštartovať proces. 846 00:46:41,550 --> 00:46:46,150 Ak je to menšie, vyzeráš hovorí že to-- jo, čo sa deje? 847 00:46:46,150 --> 00:46:47,400 >> Divákov: [nepočuteľné]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: Áno. 850 00:46:54,260 --> 00:46:58,360 Nejaký druh druhu, ktorý sa kedy učil v trieda je poctivá hra pre skúšku. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [SMIECH] 853 00:47:04,920 --> 00:47:10,260 >> DAN: A to, že ste nemali aby to pre problémové sady, je to fér 854 00:47:10,260 --> 00:47:12,420 hra pre test. 855 00:47:12,420 --> 00:47:15,186 >> Divákov: Môžeme ísť cez neho, ako na-- 856 00:47:15,186 --> 00:47:17,052 >> DAN: to bude preč cez. 857 00:47:17,052 --> 00:47:20,496 >> SPEAKER 2: Skutočný kód [Nepočuteľné] je nastavená na study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Takže, keď sa pozriete na problém praxe na stránke zlúčenie druhu 860 00:47:32,680 --> 00:47:35,880 study.cs50.net, je kód pre vykonávanie zlúčiť druh. 861 00:47:35,880 --> 00:47:38,550 Takže nemusíte vykonávať to sa dnes v noci. 862 00:47:38,550 --> 00:47:42,090 Ale uistite sa, že ste to pochopili, skôr než len memorovat to. 863 00:47:42,090 --> 00:47:45,035 >> Divákov: [nepočuteľné]? 864 00:47:45,035 --> 00:47:49,720 >> SPEAKER 2: stránky merge sort na study.cs50.net, je prax 865 00:47:49,720 --> 00:47:53,570 problém, ktorý, ak sa preklikať problém, na samom konci je 866 00:47:53,570 --> 00:47:56,280 riešenie, ktoré je zlúčenie implementácia triedenie. 867 00:47:56,280 --> 00:47:58,510 Ale uistite sa, že ste to pochopili skôr než len memorovat to 868 00:47:58,510 --> 00:47:59,760 alebo kopírovanie to. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> Divákov: A úplne v poriadku problém pre skúšku by 871 00:48:06,340 --> 00:48:07,990 niečo ako tu je zoznam. 872 00:48:07,990 --> 00:48:12,100 Čo to zoznam vyzerať po jeden krok voľby druhu alebo 873 00:48:12,100 --> 00:48:13,330 vloženie triedenie alebo čokoľvek iného. 874 00:48:13,330 --> 00:48:14,940 Jeden plný iterácie zoznamu. 875 00:48:14,940 --> 00:48:18,530 Takže aj keď nechcete skončiť museli Kód pre to, musíte to pochopiť 876 00:48:18,530 --> 00:48:20,440 Stačí vedieť, ako to bude je potrebné zmenu tohto poľa. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: Tak to je pre mňa. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [APPLAUSE] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Ahoj všetci. 883 00:49:07,410 --> 00:49:08,390 Moje meno je Lucas. 884 00:49:08,390 --> 00:49:16,840 Budem hovoriť o rekurziu, všetky že druhy, ktoré sme sa naučili, a 885 00:49:16,840 --> 00:49:18,050 Trochu všetkých ukazovateľov. 886 00:49:18,050 --> 00:49:18,740 OK? 887 00:49:18,740 --> 00:49:20,340 Takže v prvom rade, rekurzia. 888 00:49:20,340 --> 00:49:22,951 Čo to znamená povedať, že funkcia je rekurzívny? 889 00:49:22,951 --> 00:49:24,675 >> Divákov: Volanie sám. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: OK, volá sám, hej. 891 00:49:26,500 --> 00:49:27,700 Takže páči tento obrázok, napríklad. 892 00:49:27,700 --> 00:49:30,280 Je to ako na obrázku vnútri obrázku, a tak ďalej. 893 00:49:30,280 --> 00:49:35,740 Tak napríklad, môžete have-- ako Dan že hovoril o binárne vyhľadávanie. 894 00:49:35,740 --> 00:49:41,840 Jedným zo spôsobov, binárne vyhľadávanie rekurzívne je skutočnosť, že ste 895 00:49:41,840 --> 00:49:43,130 sa snaží nájsť číslo. 896 00:49:43,130 --> 00:49:44,250 Takže idete do stredu. 897 00:49:44,250 --> 00:49:47,130 A potom by ste skontrolovať, či čísla tam na ľavej strane a na pravej strane. 898 00:49:47,130 --> 00:49:49,650 >> A potom, keď zistíte, číslo bude na ľavej strane, je to to isté 899 00:49:49,650 --> 00:49:53,340 niečo ako znovu robiť hľadanie, ale len v ľavej časti zoznamu. 900 00:49:53,340 --> 00:49:57,350 Tak to je, ako to vyzerá ako je rekurzívny. 901 00:49:57,350 --> 00:50:01,870 Takže to je dôvod, prečo ste sa rekurzívne riešenie pre zlúčenie druhu. 902 00:50:01,870 --> 00:50:04,270 >> OK, tak tu je jeden príklad. 903 00:50:04,270 --> 00:50:07,280 Takže povedzme, že chcem vybrať všetky čísla od 1 po n. 904 00:50:07,280 --> 00:50:13,790 Môžem si uvedomiť, že súčet n číslo n a navyše n mínus 1 až 1. 905 00:50:13,790 --> 00:50:17,810 Ale potom, keď som sa na n mínus 1 Plus n mínus 2 plus 1, to je rovnaký 906 00:50:17,810 --> 00:50:20,680 niečo ako ako súhrn čísel až n mínus 1. 907 00:50:20,680 --> 00:50:25,890 Takže môžem povedať, súčet rovnaké čiastky sa rovná n plus súčet n mínus jedna. 908 00:50:25,890 --> 00:50:28,010 Má to zmysel? 909 00:50:28,010 --> 00:50:32,630 >> A tiež bude mať niečo iné nazýva base-case, čo je to, že 910 00:50:32,630 --> 00:50:37,440 súčet čísel hore na nulu by bol nula. 911 00:50:37,440 --> 00:50:42,770 Takže akonáhle som sa k číslu nula, som prestať počítať. 912 00:50:42,770 --> 00:50:45,330 Má to zmysel? 913 00:50:45,330 --> 00:50:48,120 >> Tak tu je príklad toho, ako Môžem realizovať to. 914 00:50:48,120 --> 00:50:49,860 Tak som si túto funkciu v niektorej z nich. 915 00:50:49,860 --> 00:50:51,700 To trvá celé číslo n. 916 00:50:51,700 --> 00:50:56,300 Tak som najprv skontrolovať, či je n menšia alebo rovná nule. 917 00:50:56,300 --> 00:51:00,310 Takže ak je to menší alebo rovný nule, I vrátiť sa na nulu, čo je náš základný scenár. 918 00:51:00,310 --> 00:51:05,690 Inak môžem len vrátiť n Plus súčet čísel z 919 00:51:05,690 --> 00:51:07,190 kto n mínus jedna. 920 00:51:07,190 --> 00:51:09,360 Zmysel? 921 00:51:09,360 --> 00:51:10,100 OK. 922 00:51:10,100 --> 00:51:11,610 >> Tak tu je to, ako to vyzerá. 923 00:51:11,610 --> 00:51:15,260 Máte súčet 2 sa rovná 2 plus súčet 1. 924 00:51:15,260 --> 00:51:18,930 A niektorí z 1 je 1 plus súčet 0, čo je 0. 925 00:51:18,930 --> 00:51:20,216 Zmysel? 926 00:51:20,216 --> 00:51:25,342 Takže ak sa pozrieme na hromadu svojho programu, to je to, čo to vyzerá. 927 00:51:25,342 --> 00:51:26,820 >> Po prvé, máme hlavnú funkciu. 928 00:51:26,820 --> 00:51:30,320 A potom hlavné funkcie volal súčet 2. 929 00:51:30,320 --> 00:51:36,690 A potom suma 2 sa chystá povedať, oh, sum 2 sa rovná 2 plus súčet jedného. 930 00:51:36,690 --> 00:51:39,460 Tak som sa pridať sumu 1 do zásobníka. 931 00:51:39,460 --> 00:51:43,860 A súčet 1 bude volať súčet 0, čo bude tiež byť pridaný 932 00:51:43,860 --> 00:51:44,630 do zásobníka. 933 00:51:44,630 --> 00:51:49,240 A potom sa každý z týchto tie, ktoré sú na druhú musieť vrátiť 934 00:51:49,240 --> 00:51:52,020 ako tie ostatné môžu pokračovať. 935 00:51:52,020 --> 00:51:56,240 >> Tak napríklad, tu, suma 0, Najprv sa chystá vrátiť 0. 936 00:51:56,240 --> 00:51:58,320 A potom zvoľte čiastku 1. 937 00:51:58,320 --> 00:52:00,850 Potom suma 1 bude vráti 1 súčtu 2. 938 00:52:00,850 --> 00:52:03,900 A konečne, súčet 2 sa deje vrátiť sa 3 na hlavnej. 939 00:52:03,900 --> 00:52:05,320 Má to zmysel? 940 00:52:05,320 --> 00:52:09,496 >> Je to naozaj dôležité, aby pochopili, ako zásobník funguje a snaží sa 941 00:52:09,496 --> 00:52:11,980 uvidíme, či to dáva zmysel. 942 00:52:11,980 --> 00:52:13,260 OK, tak triedenie. 943 00:52:13,260 --> 00:52:16,170 Tak prečo je triedenie dôležité, v prvom rade? 944 00:52:16,170 --> 00:52:18,260 Prečo by sme sa mali starať? 945 00:52:18,260 --> 00:52:20,310 Každý, kto? 946 00:52:20,310 --> 00:52:20,695 Daj mi nejaký príklad? 947 00:52:20,695 --> 00:52:21,040 Jo? 948 00:52:21,040 --> 00:52:22,968 >> Divákov: [nepočuteľné]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Jo, OK. 950 00:52:24,700 --> 00:52:26,090 Takže môžete vyhľadávať efektívnejšie. 951 00:52:26,090 --> 00:52:28,580 To je dobrý spôsob, ako. 952 00:52:28,580 --> 00:52:32,462 Tak, napríklad, máme veľa veci v skutočnosti, v našom živote, ktoré 953 00:52:32,462 --> 00:52:32,920 sú radené. 954 00:52:32,920 --> 00:52:34,830 Napríklad, slovníky. 955 00:52:34,830 --> 00:52:39,210 >> Je veľmi dôležité, aby všetky slová v nejakom poradí, ktoré sme 956 00:52:39,210 --> 00:52:41,970 prístup ľahko. 957 00:52:41,970 --> 00:52:43,280 Takže to je to, čo hovorí. 958 00:52:43,280 --> 00:52:45,530 Môžete vyhľadávať efektívnejšie. 959 00:52:45,530 --> 00:52:48,740 Premýšľajte o tom, ako ťažké to bude mať slovník, v ktorom slová sú v 960 00:52:48,740 --> 00:52:49,500 náhodnom poradí. 961 00:52:49,500 --> 00:52:53,120 Budete sa musieť pozrieť na, do značnej miery, každý slovo, kým nenájdete 962 00:52:53,120 --> 00:52:54,720 slovo, ktoré hľadáte. 963 00:52:54,720 --> 00:52:58,710 >> Ak používate Facebook tiež, keď pozeráte sa na svojich priateľov, že ste 964 00:52:58,710 --> 00:53:03,540 ide vidieť, že Facebook dať svoje bližšie priateľ je na vrchole tých 965 00:53:03,540 --> 00:53:05,470 že nemusíte hovoriť, že veľa. 966 00:53:05,470 --> 00:53:08,080 Ak sa vydáte celú cestu až na dno váš zoznam priateľovi, budete vidieť 967 00:53:08,080 --> 00:53:11,250 ľudia, ktorí pravdepodobne nemajú ani Pamätám si, že si priateľov. 968 00:53:11,250 --> 00:53:14,590 A to preto, že Facebook druhov vaši priatelia založené na tom, ako 969 00:53:14,590 --> 00:53:16,472 blízko ste k nim. 970 00:53:16,472 --> 00:53:17,930 >> Takže organizovanie dát. 971 00:53:17,930 --> 00:53:18,450 Tiež Pokemon. 972 00:53:18,450 --> 00:53:21,400 Takže vidíte, že všetkých Pokémonov majú čísla. 973 00:53:21,400 --> 00:53:27,210 A to je ako ľahko spôsob prístupu k dátam. 974 00:53:27,210 --> 00:53:29,050 >> Divákov: Prístup Pokemon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Jo. 976 00:53:29,890 --> 00:53:32,395 >> Divákov: [nepočuteľné]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Jo. 978 00:53:33,460 --> 00:53:35,140 OK, takže výber triediť. 979 00:53:35,140 --> 00:53:41,610 Výber radenia sa chystá vybrať Najmenší netriedený hodnota zo zoznamu každého 980 00:53:41,610 --> 00:53:43,300 čas v každom opakovaní. 981 00:53:43,300 --> 00:53:46,800 Je to niečo ako druh, ktorý robíte vo vašej hlave, keď sa snažíte, aby 982 00:53:46,800 --> 00:53:48,430 zoradiť zoznam po ruke. 983 00:53:48,430 --> 00:53:51,990 >> V podstate všetko, čo urobiť, je sa pozriete pre najmenším počtom. 984 00:53:51,990 --> 00:53:54,280 Môžete dať do triedeného zoznamu. 985 00:53:54,280 --> 00:53:56,230 A potom sa pozriete na ďalšie najmenšie číslo. 986 00:53:56,230 --> 00:54:00,080 A potom sa v tom budeš pokračovať že a tak ďalej. 987 00:54:00,080 --> 00:54:04,600 >> Takže výber druh je v podstate si vyberte zakaždým najmenší 988 00:54:04,600 --> 00:54:05,750 netriedeného hodnota. 989 00:54:05,750 --> 00:54:10,840 Dajte na konci radené súčasťou zoznamu. 990 00:54:10,840 --> 00:54:12,370 A to robiť. 991 00:54:12,370 --> 00:54:15,890 Takže poďme sa rýchlo pozrieť, čo to vyzerá. 992 00:54:15,890 --> 00:54:19,340 Tak tu je radené a netriedený zoznam. 993 00:54:19,340 --> 00:54:23,350 >> Takže radené zoznamu, je spočiatku prázdny. 994 00:54:23,350 --> 00:54:26,760 A potom budem výber Najmenšie číslo tu, čo je o 2. 995 00:54:26,760 --> 00:54:30,650 Tak som sa na číslo 2 a dal som v prednej časti zoznamu. 996 00:54:30,650 --> 00:54:34,910 A potom som sa pozrieť na ďalšie najmenší prvok, ktorý je 3. 997 00:54:34,910 --> 00:54:37,050 Tak som ju na konci triedeného zoznamu. 998 00:54:37,050 --> 00:54:38,140 A potom som to robiť. 999 00:54:38,140 --> 00:54:40,040 Zistil som, 4 a dať to na konci. 1000 00:54:40,040 --> 00:54:41,360 Nájdite 5 a dať to na konci. 1001 00:54:41,360 --> 00:54:44,830 >> A pozrite sa na to, ako všetky tie časy, ktoré Hovorím, že dať na koniec, 1002 00:54:44,830 --> 00:54:46,850 v podstate, vymieňať dve hodnoty. 1003 00:54:46,850 --> 00:54:48,100 OK? 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 A potom ten posledný, ktorý ste práve ešte jeden prvok. 1006 00:54:52,825 --> 00:54:55,870 Takže už je zoradený. 1007 00:54:55,870 --> 00:54:57,800 >> OK, takže vloženie triediť. 1008 00:54:57,800 --> 00:55:03,180 Vloženie druh budete mať tiež že vec z toho, že triedené a 1009 00:55:03,180 --> 00:55:04,690 netriedený zoznam. 1010 00:55:04,690 --> 00:55:14,540 Jediná vec je, že zakaždým, keď Pridávate prvok na radené 1011 00:55:14,540 --> 00:55:18,170 list, stačí vybrať prvok, ktorý je v prednej časti netriedeného zoznamu. 1012 00:55:18,170 --> 00:55:20,880 A potom budete nájsť to, čo pozícia by mala byť v zotriedené 1013 00:55:20,880 --> 00:55:22,300 súčasťou zoznamu. 1014 00:55:22,300 --> 00:55:25,840 >> Pozrime sa, čo to je, takže to dáva väčší zmysel. 1015 00:55:25,840 --> 00:55:29,360 Takže najprv, napríklad, snažím sa vložiť číslo tri v 1016 00:55:29,360 --> 00:55:30,680 triedený súčasťou zoznamu. 1017 00:55:30,680 --> 00:55:31,800 Takže zoznam nemá nič. 1018 00:55:31,800 --> 00:55:34,160 Tak som si len dať číslo 3. 1019 00:55:34,160 --> 00:55:37,480 >> Teraz chcem pridať číslo 5 na triedený súčasťou zoznamu. 1020 00:55:37,480 --> 00:55:38,900 Tak som sa pozrieť na čísla 5. 1021 00:55:38,900 --> 00:55:40,450 Všimol som si, že je väčší ako 3. 1022 00:55:40,450 --> 00:55:41,980 Takže viem, že to musí byť po 3. 1023 00:55:41,980 --> 00:55:44,100 Tak som dal 3 a 5. 1024 00:55:44,100 --> 00:55:45,940 >> Potom chcem vložiť číslo dva. 1025 00:55:45,940 --> 00:55:51,630 Všimol som si, že číslo 2 je v skutočnosti posledná potom aj 3 a 5. 1026 00:55:51,630 --> 00:55:54,580 Takže som vlastne dať to všetko spôsob, ako na začiatku zoznamu. 1027 00:55:54,580 --> 00:55:59,030 Tak som sa, druh, posunúť všetky prvky v triedenom zozname, takže môžem 1028 00:55:59,030 --> 00:56:01,970 vytvoriť priestor pre číslo 2. 1029 00:56:01,970 --> 00:56:03,160 >> Potom som vidieť číslo 6. 1030 00:56:03,160 --> 00:56:05,450 Vidím, že by to malo byť po 5. 1031 00:56:05,450 --> 00:56:06,240 Tak som to tam dal. 1032 00:56:06,240 --> 00:56:07,965 A nakoniec, keď sa pozriem na číslo 4. 1033 00:56:07,965 --> 00:56:11,030 A všimol som si, že by mala byť medzi 3 a 5. 1034 00:56:11,030 --> 00:56:14,870 A potom som to tam dal a posun všetky ostatné prvky. 1035 00:56:14,870 --> 00:56:16,120 Zmysel? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> Bubble Sort. 1038 00:56:19,150 --> 00:56:25,730 Takže bubble sort je v podstate to, čo ste bude do-- hovoríme bublina 1039 00:56:25,730 --> 00:56:30,113 druh, pretože sa prejsť list-- je to vlastne lepšie, keď som len ukázať 1040 00:56:30,113 --> 00:56:32,300 sa vám páči tohle-- 1041 00:56:32,300 --> 00:56:35,030 a budete porovnávať susediace čísla. 1042 00:56:35,030 --> 00:56:38,410 A vy budete vymieňať svoje pozície v prípade, že nie ste 1043 00:56:38,410 --> 00:56:39,190 v správnom poradí. 1044 00:56:39,190 --> 00:56:42,570 >> Takže v podstate, čo sa deje na stať, je tu napríklad, 1045 00:56:42,570 --> 00:56:44,160 Máte-8 a 6. 1046 00:56:44,160 --> 00:56:47,270 Viete, že triedený objednávka bude v skutočnosti 6 a 5, nie? 1047 00:56:47,270 --> 00:56:49,540 Takže sa chystáte vymeniť objednávky. 1048 00:56:49,540 --> 00:56:51,370 Potom vidím, 8 a 4 tu. 1049 00:56:51,370 --> 00:56:52,250 A ja som to isté. 1050 00:56:52,250 --> 00:56:53,400 Znovu som sa vymeniť. 1051 00:56:53,400 --> 00:56:55,070 A konečne, 2 a 8. 1052 00:56:55,070 --> 00:56:56,670 Tiež som ich vymeniť. 1053 00:56:56,670 --> 00:57:01,690 >> Hovorí sa tomu Bubble Sort, pretože po Každý z týchto iterácií, v skutočnosti, 1054 00:57:01,690 --> 00:57:05,910 najväčšie číslo v zozname dostane všetky cesta na koniec zoznamu. 1055 00:57:05,910 --> 00:57:06,940 Má to zmysel? 1056 00:57:06,940 --> 00:57:11,880 Vzhľadom k tomu, udržuje ju vymeniť a presunutím doprava. 1057 00:57:11,880 --> 00:57:14,440 >> OK, tak to je druhá iterácia. 1058 00:57:14,440 --> 00:57:17,200 Bolo by to to isté. 1059 00:57:17,200 --> 00:57:20,190 Urobím jednu výmenu a potom posledný. 1060 00:57:20,190 --> 00:57:23,290 Som si, že tam nie sú žiadne swapy a zoznam je usporiadaný. 1061 00:57:23,290 --> 00:57:27,460 Takže v Bubble Sort, sme v podstate udržať prechádza v zozname a vymieňať 1062 00:57:27,460 --> 00:57:32,310 veci, ako som si všimla, že som to neurobil každý swap robiť to opakovanie, ktoré 1063 00:57:32,310 --> 00:57:34,270 Znamená to, že zoznam už je zoradený. 1064 00:57:34,270 --> 00:57:35,520 Zmysel? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Poďme hovoriť trochu o prevádzke. 1067 00:57:40,870 --> 00:57:45,165 Tak si chlapci pamätať Big O, Omega, a Theta? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Jo? 1070 00:57:50,990 --> 00:57:53,070 OK, čo je Big O, v prvom rade? 1071 00:57:53,070 --> 00:57:54,315 >> Divákov: [nepočuteľné]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Jo, je to len v najhoršom prípade runtime, čo práve znamená, že je 1073 00:57:59,070 --> 00:58:03,470 koľko očakávate program aby sa do behu. 1074 00:58:03,470 --> 00:58:04,910 Rovnako ako v oblasti of-- 1075 00:58:04,910 --> 00:58:06,660 v tomto case-- n. 1076 00:58:06,660 --> 00:58:09,150 Počet prvkov v Zoznam v najhoršom prípade. 1077 00:58:09,150 --> 00:58:12,520 Rovnako ako v najhoršom možnom prípade. 1078 00:58:12,520 --> 00:58:17,100 >> Takže pre Bubble Sort, napríklad, máme veľký Ø n námestí. 1079 00:58:17,100 --> 00:58:20,580 Prečo máme, že? 1080 00:58:20,580 --> 00:58:24,716 Prečo je Bubble Sort Big O n štvorec? 1081 00:58:24,716 --> 00:58:27,614 >> Divákov: [nepočuteľné]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Jo, takže v najhoršom prípade bude že budem musieť robiť n iterácií. 1083 00:58:35,670 --> 00:58:39,260 Takže každý z iterácií bude prinesie najväčší prvok na koniec 1084 00:58:39,260 --> 00:58:40,290 zoznamu. 1085 00:58:40,290 --> 00:58:44,230 Takže najhoršie je, že som k tomu, že vec, n-krát. 1086 00:58:44,230 --> 00:58:48,550 A pre každý z týchto časov, musím do n swapy, pretože musím porovnať 1087 00:58:48,550 --> 00:58:49,870 každé dva prvky. 1088 00:58:49,870 --> 00:58:53,730 Takže to je dôvod, prečo je to n na druhú pretože to je n krát n. 1089 00:58:53,730 --> 00:59:00,120 >> Potom výber triedenia je tiež n námestie pretože pre každú iteráciu, musím 1090 00:59:00,120 --> 00:59:02,650 pozrite sa na každé jednotlivé súčasti v zozname. 1091 00:59:02,650 --> 00:59:04,980 A potom nájsť najmenší, čo znamená, že budem musieť 1092 00:59:04,980 --> 00:59:06,130 prehliadnuť n prvkov. 1093 00:59:06,130 --> 00:59:11,750 A čo musím urobiť, že N-krát, pretože Musím vybrať všetky n prvkov. 1094 00:59:11,750 --> 00:59:18,273 >> Vloženie druh je tiež n námestie preto, že najhorší scenár 1095 00:59:18,273 --> 00:59:20,950 byť jedno, musím vložiť n čísla, že? 1096 00:59:20,950 --> 00:59:22,765 Tak už viem, že budem mať n iterácií. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 Ale pre každý z týchto čísel, keď som mal pozrieť sa na všetky čísla v 1099 00:59:29,840 --> 00:59:34,380 radené zoznam a dať to všetko tak, ako v prednej časti, ktorý bude n námestí 1100 00:59:34,380 --> 00:59:36,230 , Pretože to bude n krát n znova. 1101 00:59:36,230 --> 00:59:38,280 Zmysel? 1102 00:59:38,280 --> 00:59:41,512 Čo omega? 1103 00:59:41,512 --> 00:59:42,886 >> Divákov: [nepočuteľné]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: Je to najlepší scenár. 1105 00:59:44,620 --> 00:59:48,810 Takže je to ako v mnohých časov pre triedenie, najlepší scenár je 1106 00:59:48,810 --> 00:59:50,660 keď je zoznam už zoradené. 1107 00:59:50,660 --> 00:59:52,670 Takže si naozaj nemajú nič robiť. 1108 00:59:52,670 --> 00:59:56,290 Bubble Sort má najlepšie scenár n. 1109 00:59:56,290 --> 00:59:58,820 Neviete prečo? 1110 00:59:58,820 --> 01:00:00,620 >> Divákov: [nepočuteľné]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Áno, ak budete mať prehľad o či sú údaje pomer nejaké swapy alebo 1112 01:00:05,640 --> 01:00:10,533 nie, ak máte niečo ako nastavený na platí v prípade, že bola iterácie, ak 1113 01:00:10,533 --> 01:00:15,140 Zoznam už je zoradený, v podstate, čo sa stane je, že budem 1114 01:00:15,140 --> 01:00:17,890 skúste vymeniť každé dva susedné prvky. 1115 01:00:17,890 --> 01:00:19,920 Budem vidieť, že nie sú tam žiadne swapy. 1116 01:00:19,920 --> 01:00:21,230 A ja som sa vrátiť hneď. 1117 01:00:21,230 --> 01:00:24,240 >> Takže to znamená, že som musel prejsť zoznam naraz. 1118 01:00:24,240 --> 01:00:28,990 Tak to je n preto, že vyzerám na n prvkov. 1119 01:00:28,990 --> 01:00:30,930 Prečo výberom Triediť n námestí? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Jo, a to aj v prípade, že zoznam je radený, pre každá iterácia výber druhu, I 1122 01:00:45,520 --> 01:00:47,590 musieť vybrať minimálny prvok. 1123 01:00:47,590 --> 01:00:49,980 Takže to znamená, že som sa pozrieť u všetkých prvkov v netriedeného 1124 01:00:49,980 --> 01:00:53,350 zoznam a nájsť minimum pre každú iteráciu. 1125 01:00:53,350 --> 01:00:54,600 Má to zmysel? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> A vloženie meč je N, pretože v prípad, že sa snažím vložiť 1128 01:01:04,690 --> 01:01:09,320 čísla a všetky čísla, keď som snaží sa ich vložiť, vidím, že sa 1129 01:01:09,320 --> 01:01:10,510 sú v správnej polohe. 1130 01:01:10,510 --> 01:01:15,120 Nemám ísť skontrolovať všetky ostatné čísla v netriedeného zoznamu. 1131 01:01:15,120 --> 01:01:17,170 Takže to je dôvod, prečo to bude n. 1132 01:01:17,170 --> 01:01:19,480 Zmysel? 1133 01:01:19,480 --> 01:01:21,035 A čo je theta? 1134 01:01:21,035 --> 01:01:23,410 >> Divákov: [nepočuteľné]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Čo prosím? 1136 01:01:24,380 --> 01:01:24,960 Povedz to znova. 1137 01:01:24,960 --> 01:01:25,666 >> Divákov: [nepočuteľné]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Presne tak. 1139 01:01:26,490 --> 01:01:31,280 Takže vidíte, že len výber uložené v Zlúčiť druh má thetas. 1140 01:01:31,280 --> 01:01:39,920 A to preto, že máte len theta ak obidva Big O a Omega sú rovnaké. 1141 01:01:39,920 --> 01:01:41,520 OK. 1142 01:01:41,520 --> 01:01:44,210 A konečne, zlúčiť druh je v log n. 1143 01:01:44,210 --> 01:01:48,910 >> A potom, keď Dan hovoril, Merge sort je niečo ako rovnakým spôsobom, ako 1144 01:01:48,910 --> 01:01:50,320 tie binárne vyhľadávanie. 1145 01:01:50,320 --> 01:01:53,530 Tak sa dostanete na zoznam. 1146 01:01:53,530 --> 01:01:55,170 A vy budete znížiť na polovicu. 1147 01:01:55,170 --> 01:02:00,580 A potom sa rezať v menších polovice. 1148 01:02:00,580 --> 01:02:01,730 A potom je zlúčiť. 1149 01:02:01,730 --> 01:02:02,960 Vy ste si uvedomiť, že, že jo? 1150 01:02:02,960 --> 01:02:04,960 OK, ako sa hovorí. 1151 01:02:04,960 --> 01:02:08,330 >> OK, ukazovatele. 1152 01:02:08,330 --> 01:02:11,078 Takže to, čo je ukazovateľ? 1153 01:02:11,078 --> 01:02:12,050 >> Divákov: [nepočuteľné]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: adresa. 1155 01:02:12,820 --> 01:02:13,720 OK. 1156 01:02:13,720 --> 01:02:18,530 Viem, že David ukazuje veľa videá Binkym a veci smerujúce 1157 01:02:18,530 --> 01:02:19,080 navzájom. 1158 01:02:19,080 --> 01:02:22,960 Ale ja by som si myslel, ukazovateľov ako obyčajnú adresu. 1159 01:02:22,960 --> 01:02:26,110 Takže je to premenná, ktorá sa deje uložiť adresu. 1160 01:02:26,110 --> 01:02:31,940 >> Takže je to práve táto špeciálna premenná , Že je dlhý štyri bajty. 1161 01:02:31,940 --> 01:02:36,550 Pamätajte si, že ukazovateľ na čokoľvek je vždy dlhý štyri bajty pre našu 32-bit 1162 01:02:36,550 --> 01:02:39,370 Stroj tak v prípade zariadení. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 A to len má miesto premenné vnútri neho. 1165 01:02:47,050 --> 01:02:50,240 >> OK, takže je to spomienka, v podstate. 1166 01:02:50,240 --> 01:02:57,420 Takže každý blok pamäte, v skutočnosti má štítok, ktorý je adresa 1167 01:02:57,420 --> 01:02:58,890 Slott pamäti. 1168 01:02:58,890 --> 01:03:02,370 Takže to znamená, že môžem mať ukazovateľ ukazujúci na 1169 01:03:02,370 --> 01:03:03,380 niektoré z týchto adries. 1170 01:03:03,380 --> 01:03:09,930 Takže dôvod, prečo budeme používať ukazovatele je keď budem musieť pamätať umiestnenie 1171 01:03:09,930 --> 01:03:12,300 , Že konkrétna premenná pamäť. 1172 01:03:12,300 --> 01:03:16,560 >> A vy ste si uvedomiť, že jeden z tých prípadov bolo, keď mám funkciu 1173 01:03:16,560 --> 01:03:20,820 či mám skutočne chcú, aby ste výmena za reálnych čísel, ja vlastne 1174 01:03:20,820 --> 01:03:22,110 majú poslať ukazovateľ. 1175 01:03:22,110 --> 01:03:23,460 Nie je variabilný. 1176 01:03:23,460 --> 01:03:25,200 Ešte ste si uvedomiť, že? 1177 01:03:25,200 --> 01:03:26,450 Rozdiel between-- 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 ako sa volá? 1180 01:03:34,120 --> 01:03:36,010 Volanie hodnotou a volanie s odkazom, že jo? 1181 01:03:36,010 --> 01:03:36,840 >> OK, jo. 1182 01:03:36,840 --> 01:03:38,330 Tak zavolaj hodnotou. 1183 01:03:38,330 --> 01:03:43,570 Keď pošlete premennú funkciu ste práve vysiela hodnotu. 1184 01:03:43,570 --> 01:03:45,610 Takže ste vlastne odosielanie kópie premenné. 1185 01:03:45,610 --> 01:03:49,720 A váš program je to úplne jedno o v prípade, že rovnaká premenná skutočne 1186 01:03:49,720 --> 01:03:51,650 vytvorí kópiu. 1187 01:03:51,650 --> 01:03:56,330 >> A volá odkaz znamená, že Ja som vlastne zaslaním kópie 1188 01:03:56,330 --> 01:03:57,550 Ukazovateľ na tejto premennej. 1189 01:03:57,550 --> 01:04:00,970 Takže to znamená, že pošlem umiestnenie tejto premennej. 1190 01:04:00,970 --> 01:04:04,440 Takže mám pocit, umiestnenie premenná, keď volám funkcie 1191 01:04:04,440 --> 01:04:09,700 s ukazovateľmi, som schopný skutočne Zmena dátumu, ktorá bola v hlavnom. 1192 01:04:09,700 --> 01:04:12,050 Zmysel? 1193 01:04:12,050 --> 01:04:17,560 >> Aj keď je ukazovateľ kopírovania, ukazovateľ má stále reálnu adresu 1194 01:04:17,560 --> 01:04:20,090 premenná, ktorá chcem zmeniť. 1195 01:04:20,090 --> 01:04:21,920 Zmysel? 1196 01:04:21,920 --> 01:04:24,290 >> Tak vytváranie ukazovateľov. 1197 01:04:24,290 --> 01:04:28,410 Pamätajte si, že ukazovateľ vždy typ, ktorý to ukazuje 1198 01:04:28,410 --> 01:04:29,890 , A potom sa hviezdy. 1199 01:04:29,890 --> 01:04:31,030 A potom si dať meno. 1200 01:04:31,030 --> 01:04:35,765 Takže pamätajte, že vždy, keď máte čo hviezda, je to ako ukazovateľ na 1201 01:04:35,765 --> 01:04:38,990 že bez ohľadu na variabilné typ, ktorý ste mali. 1202 01:04:38,990 --> 01:04:42,850 >> Tak tu na hviezdy, napríklad, že je to ukazovateľ a číslo. 1203 01:04:42,850 --> 01:04:47,680 A potom char hviezda je ukazovateľ char hviezda a tak ďalej. 1204 01:04:47,680 --> 01:04:47,960 Jo? 1205 01:04:47,960 --> 01:04:52,710 >> Divákov: Čo keď máme ukazovateľ na n hrať x. 1206 01:04:52,710 --> 01:04:55,255 Viem, že vytvorí ukazovateľ na x. 1207 01:04:55,255 --> 01:04:59,432 Znamená to tiež vyhlásiť x na celé číslo? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: OK, takže keď hovoríte, že n hviezda x, nie ste vytvoriť ukazovateľ na 1209 01:05:05,170 --> 01:05:06,000 premennej x. 1210 01:05:06,000 --> 01:05:08,170 Tie vytvoria ukazovateľ s názvom x. 1211 01:05:08,170 --> 01:05:09,396 >> Divákov: [nepočuteľné]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Takže keď poviem, že n hviezda x, som hovorí, hej, v pamäti, budem 1213 01:05:14,250 --> 01:05:16,390 získať jeden z týchto troch polí. 1214 01:05:16,390 --> 01:05:20,750 A ja poviem, že bude x, čo je 1215 01:05:20,750 --> 01:05:22,000 bude ukazovateľ. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 A niečo zaujímavé o ukazovatele je to, že hovoríme, že majú 1218 01:05:30,640 --> 01:05:32,620 4 bajty pre 32-bitové počítače. 1219 01:05:32,620 --> 01:05:36,320 A dôvod, prečo to je preto, 4 byty sú 32-bitov. 1220 01:05:36,320 --> 01:05:40,490 >> A stroje, ktoré sú 64 bitov skutočne majú ukazovatele adresy 1221 01:05:40,490 --> 01:05:43,480 ktoré sú dlhé 64 bitov. 1222 01:05:43,480 --> 01:05:49,820 Tak to jednoducho znamená, že veľkosť adresy v počítači sa líšia. 1223 01:05:49,820 --> 01:05:52,270 >> Takže Odkazovanie a Získavanie. 1224 01:05:52,270 --> 01:05:54,310 K dispozícii sú dva subjekty, ktoré Mali by ste pamätať. 1225 01:05:54,310 --> 01:05:55,450 Prvý z nich je ampersand. 1226 01:05:55,450 --> 01:05:56,810 Druhým je hviezda. 1227 01:05:56,810 --> 01:06:05,060 Nenechajte sa zmiasť tým, že hviezdy a to STAR, pretože nezabudnite, že v 1228 01:06:05,060 --> 01:06:06,950 tento prípad, budete musieť n hviezdu. 1229 01:06:06,950 --> 01:06:08,700 >> Je to ako celú vec dohromady. 1230 01:06:08,700 --> 01:06:10,720 Neexistuje n Space Star. 1231 01:06:10,720 --> 01:06:12,070 Takže to znamená, že je to typ. 1232 01:06:12,070 --> 01:06:14,870 Pamätajte si, že keď máte premenná hviezda, ty si 1233 01:06:14,870 --> 01:06:16,230 hovorí o type. 1234 01:06:16,230 --> 01:06:20,540 >> Keď máte len hviezdy a potom názov premennej, to znamená, že 1235 01:06:20,540 --> 01:06:24,100 ste dereferencing ukazovateľ, ktorý Znamená to, že sa pozeráte na 1236 01:06:24,100 --> 01:06:28,290 ukazovateľ, nájsť adresu, že je to ukázal na, bude na túto adresu, 1237 01:06:28,290 --> 01:06:30,850 a pri pohľade na, ak máte tam. 1238 01:06:30,850 --> 01:06:34,310 Takže hovorím svojim študentom, že keď máte hviezda, mal by si myslíte, že je to 1239 01:06:34,310 --> 01:06:36,850 skratka obsahu. 1240 01:06:36,850 --> 01:06:39,770 >> Takže ak máte ukazovateľ a to hviezda ukazovateľ, je to 1241 01:06:39,770 --> 01:06:41,720 Obsah ukazovatele. 1242 01:06:41,720 --> 01:06:44,580 Takže idete, čo to ukazuje na a pozrite sa na konštantný obsah. 1243 01:06:44,580 --> 01:06:47,730 A ampersand je rovnaký vec ako adresa. 1244 01:06:47,730 --> 01:06:52,560 >> Takže ak mám premennú A-- rád, poďme povedať, že som urobil int rovná 3-- 1245 01:06:52,560 --> 01:06:56,900 keď chcem nájsť adresu, ktorá variabilná pamäť, môžem len robiť 1246 01:06:56,900 --> 01:06:58,240 ampersand. 1247 01:06:58,240 --> 01:07:00,280 Takže je to adresa. 1248 01:07:00,280 --> 01:07:01,530 Zmysel? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Tak tu je príklad. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 Tento chýba int b a c int. 1253 01:07:11,530 --> 01:07:16,520 Takže int sa rovná 3 znamená, že Chystám sa ísť do pamäte. 1254 01:07:16,520 --> 01:07:19,870 A ja idem nájsť slot a dal číslo 3 tu. 1255 01:07:19,870 --> 01:07:22,200 >> A potom int b sa rovná 4. 1256 01:07:22,200 --> 01:07:23,100 Chystám sa urobiť to isté. 1257 01:07:23,100 --> 01:07:25,840 Prejsť na pamäti a dať číslo 4 v jednom z polí. 1258 01:07:25,840 --> 01:07:27,100 A int sa rovná 5. 1259 01:07:27,100 --> 01:07:29,740 Nájsť ďalšie krabicu a dať číslo päť. 1260 01:07:29,740 --> 01:07:36,160 >> Takže to, čo je táto položka robíš? n hviezda pa rovná ampersand a. 1261 01:07:36,160 --> 01:07:37,800 Takže v prvom rade, n hviezda pa. 1262 01:07:37,800 --> 01:07:39,050 Čo to robí? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> Divákov: [nepočuteľné]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Jo, takže n hviezda pa, prvý, deklaruje ukazovateľ s názvom pa. 1266 01:07:47,890 --> 01:07:53,720 A potom je to priradením hodnoty že ukazovateľ byť adresa. 1267 01:07:53,720 --> 01:07:55,790 Tak ampersand. 1268 01:07:55,790 --> 01:07:58,510 Potom, keď to urobím hviezdu PB, čo je to hviezda pb? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Oh, ospravedlňujem sa. 1271 01:08:03,150 --> 01:08:06,330 To je tiež chýba. n hviezda pb. 1272 01:08:06,330 --> 01:08:07,905 Myslím hviezda ks. 1273 01:08:07,905 --> 01:08:11,200 Je mi to tak ľúto. 1274 01:08:11,200 --> 01:08:11,940 Je to to isté. 1275 01:08:11,940 --> 01:08:16,408 Ale teraz som v pohode ar vytvorí ukazovateľ na B ​​a potom ukazovateľ na C. 1276 01:08:16,408 --> 01:08:16,886 Jo? 1277 01:08:16,886 --> 01:08:18,136 >> Divákov: [nepočuteľné]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Áno. 1280 01:08:26,670 --> 01:08:32,630 Takže ak idete do pamäti a prejdite k pole, ktoré je označenie pre pa 1281 01:08:32,630 --> 01:08:37,149 ste vlastne bude zobraziť adresu. 1282 01:08:37,149 --> 01:08:38,399 OK? 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 Jo? 1285 01:08:43,300 --> 01:08:45,605 >> Divákov: [nepočuteľné]? 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Jo, ukazovateľ je adresa. 1287 01:08:49,260 --> 01:08:50,120 Nikdy na to nezabudnem. 1288 01:08:50,120 --> 01:08:52,800 Je to ako najdôležitejší časť o ukazovatele. 1289 01:08:52,800 --> 01:08:56,180 K dispozícii je ukladanie a adresu do určitej premennej. 1290 01:08:56,180 --> 01:08:56,890 Ešte niečo? 1291 01:08:56,890 --> 01:08:58,370 Nejaké ďalšie otázky? 1292 01:08:58,370 --> 01:08:59,189 OK. 1293 01:08:59,189 --> 01:09:00,399 >> Takže ukazovatele a polia. 1294 01:09:00,399 --> 01:09:08,189 Pamätajte si, že keď som si int pole 3, v podstate to, čo robím, je, že som, druh 1295 01:09:08,189 --> 01:09:12,779 o, vyhlásil v ukazovateľom. 1296 01:09:12,779 --> 01:09:18,960 Takže pole je niečo ako ukazovateľ na konkrétne miesto v pamäti, v ktorej som 1297 01:09:18,960 --> 01:09:21,999 pridelené tri sloty pre celé čísla. 1298 01:09:21,999 --> 01:09:23,430 Má to zmysel? 1299 01:09:23,430 --> 01:09:30,250 >> Takže keď som si int pole 3, čo som tom, v podstate, vytvára tri 1300 01:09:30,250 --> 01:09:31,479 sloty na pamäť. 1301 01:09:31,479 --> 01:09:33,899 Tak som si tri sloty v pamäti. 1302 01:09:33,899 --> 01:09:38,810 Takže keď to urobím, potom hviezda poľa, je v podstate znamená, že obsah poľa, 1303 01:09:38,810 --> 01:09:46,180 čo znamená, že vymazať ukazovateľ, idem na tomto mieste, že to ukazuje na, 1304 01:09:46,180 --> 01:09:47,939 a dal som číslo jedna. 1305 01:09:47,939 --> 01:09:53,729 >> A potom, keď to urobím hviezdu poľa plus 1, To je to isté ako robiť rad 1306 01:09:53,729 --> 01:09:59,690 Veká jedna, čo znamená len chodím do miesto, že to ukazuje na. 1307 01:09:59,690 --> 01:10:03,000 A potom sa naviac 1 značky me posun o jednu pozíciu. 1308 01:10:03,000 --> 01:10:06,510 Tak som na túto pozíciu, v skutočnosti, a dal číslo dva. 1309 01:10:06,510 --> 01:10:10,900 >> A potom, konečne, keď som si poľa a navyše 2, idem tam, kde 1310 01:10:10,900 --> 01:10:11,825 polohovacie Array adrese. 1311 01:10:11,825 --> 01:10:14,690 A potom som sa presťahovať do blokov pamäte. 1312 01:10:14,690 --> 01:10:16,240 A potom som dal číslo tri tady. 1313 01:10:16,240 --> 01:10:16,600 Jo? 1314 01:10:16,600 --> 01:10:21,400 >> Divákov: Takže hviezda poľa je jednoducho hovorí úplne prvý bod. 1315 01:10:21,400 --> 01:10:25,090 A môžete pridať jeden, len preto, že Sme naozaj len 1316 01:10:25,090 --> 01:10:27,295 odkazovanie, že prvé adresu. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Jo. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Prečo, napríklad, povedzme polia 0, 1 pole a pole 2? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Ja hovorím, prečo to robíš 0, 1, 2, 3 miesto 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Jedným z dôvodov je, jedna, výpočtová programátori radšej začať 1323 01:10:46,550 --> 01:10:47,750 počítané od 0. 1324 01:10:47,750 --> 01:10:52,370 Dva preto, že keď robíte polia 0, je to to isté, ako robí polia 1325 01:10:52,370 --> 01:10:56,330 plus 0, čo znamená, že idem do tento postoj, a ja nie 1326 01:10:56,330 --> 01:10:59,320 preskočiť všetky pamäťové bloky. 1327 01:10:59,320 --> 01:11:01,750 Tak som sa nepohybujú všetky pamäťové bloky. 1328 01:11:01,750 --> 01:11:02,015 Jo? 1329 01:11:02,015 --> 01:11:03,265 >> Divákov: [nepočuteľné]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Tak ona sa pýta, čo je rozdiel medzi robí 1332 01:11:12,670 --> 01:11:14,000 tento alebo robiť malloc. 1333 01:11:14,000 --> 01:11:17,550 Jeden z rozdielov je to, že int array 3 je vytvorenie 1334 01:11:17,550 --> 01:11:19,260 poľa na stacku. 1335 01:11:19,260 --> 01:11:23,080 A keď sa mi to malloc to, vytvára na halde. 1336 01:11:23,080 --> 01:11:25,250 Má to zmysel? 1337 01:11:25,250 --> 01:11:28,870 >> Takže ako malloc vlastne funguje? 1338 01:11:28,870 --> 01:11:32,245 Tak prečo ešte musieť použiť malloc? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 Váš kompilátor druh postáv si všetko premenné, ktoré ste deklarované. 1341 01:11:39,700 --> 01:11:44,040 A vytvára priestor pre všetky Z nich v zásobníku. 1342 01:11:44,040 --> 01:11:47,180 Takže všetky vaše premenné sa deje byť niekde v stohu. 1343 01:11:47,180 --> 01:11:49,460 Takže tu je premenné prostredia. 1344 01:11:49,460 --> 01:11:53,850 >> Takže v podstate, priestor pre premenné, v pamäti je pridelené na 1345 01:11:53,850 --> 01:11:55,080 kompiláciu. 1346 01:11:55,080 --> 01:11:58,790 Takže to znamená, že váš počítač má poznať všetky tieto premenné 1347 01:11:58,790 --> 01:11:59,790 vopred. 1348 01:11:59,790 --> 01:12:02,500 Nie je potrebné vedieť, akú hodnotu budete dať do nich. 1349 01:12:02,500 --> 01:12:05,490 Ale je potrebné vedieť, ako koľko pamäte budete potrebovať. 1350 01:12:05,490 --> 01:12:09,380 >> Ale teraz povedzme, že, napríklad, budete vytvárať polia alebo pri 1351 01:12:09,380 --> 01:12:13,430 Reťazec, ktorý užívate od užívateľa. 1352 01:12:13,430 --> 01:12:17,300 Neviete, ako dlho reťazec bude, napríklad. 1353 01:12:17,300 --> 01:12:20,600 Takže neviete presne, koľko blokov pamäti pridelíte, že jo? 1354 01:12:20,600 --> 01:12:24,120 >> Takže to naozaj nie je zmysel pre môžete povedať, dať 100 znakov. 1355 01:12:24,120 --> 01:12:26,420 A potom to, čo v prípade, že používateľ píše 150? 1356 01:12:26,420 --> 01:12:27,670 Tie bude v háji. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Takže v podstate, nemôžete byť istí, ako koľko pamäte je potreba prideliť 1359 01:12:34,620 --> 01:12:35,960 pri kompilácii programu. 1360 01:12:35,960 --> 01:12:38,240 A tak jednoducho viete, že v dobe behu. 1361 01:12:38,240 --> 01:12:39,950 Takže to je dôvod, prečo máte hromadu. 1362 01:12:39,950 --> 01:12:47,610 Takže haldy bude mať pamäť že ste pri prideľovaní 1363 01:12:47,610 --> 01:12:50,810 Doba trvania behu programu. 1364 01:12:50,810 --> 01:12:55,780 >> Takže v podstate, keď to urobíte malloc, čo robíte je prideľovanie na pamäti 1365 01:12:55,780 --> 01:13:00,160 runtime, čo znamená, že ste rozhodovanie o tom, právo v tomto okamihu, že vás 1366 01:13:00,160 --> 01:13:02,670 by mal mať túto pamäť. 1367 01:13:02,670 --> 01:13:04,210 Tak to je, keď ste ju prideľovanie. 1368 01:13:04,210 --> 01:13:06,430 Má to zmysel? 1369 01:13:06,430 --> 01:13:11,690 >> Takže pamätajte, že zásobník má premenné , Ktoré sú vytvorené v čase kompilácie. 1370 01:13:11,690 --> 01:13:14,560 A potom hromada má premenné ktoré sú vytvorené as you go 1371 01:13:14,560 --> 01:13:15,600 s malloc, napríklad. 1372 01:13:15,600 --> 01:13:16,850 >> Divákov: [nepočuteľné]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: Tak GetString je bude volať malloc. 1375 01:13:24,340 --> 01:13:26,710 Dovoľte mi, aby som hovoriť o malloc a Vysvetlím ti to getString. 1376 01:13:26,710 --> 01:13:32,000 Takže malloc je to isté ako prideľovanie pamäte. 1377 01:13:32,000 --> 01:13:34,600 Tak to bude o pridelení pamäť na halde. 1378 01:13:34,600 --> 01:13:40,010 A to bude vracať ukazovateľ na kde bol, že pridelené pamäte na adrese. 1379 01:13:40,010 --> 01:13:43,090 >> Takže keď do-- 1380 01:13:43,090 --> 01:13:44,910 pre example-- tu 1381 01:13:44,910 --> 01:13:45,830 n hviezda ukazovateľ. 1382 01:13:45,830 --> 01:13:50,520 A potom sa ukazovateľ rovná malloc Veľkosť palca krát 10. 1383 01:13:50,520 --> 01:13:52,110 Som vytvoriť ukazovateľ. 1384 01:13:52,110 --> 01:13:59,020 A potom som priraďovanie, že ukazovateľ hodnota ukazovateľa, ktoré malloc 1385 01:13:59,020 --> 01:13:59,680 dáva mi to. 1386 01:13:59,680 --> 01:14:04,150 >> Takže sa pýtam malloc môžete prideliť priestor pre 10 celých čísel. 1387 01:14:04,150 --> 01:14:05,390 To je to, čo hovorí. 1388 01:14:05,390 --> 01:14:09,020 A malloc mi vracia ukazovateľ na toto miesto. 1389 01:14:09,020 --> 01:14:11,460 Zmysel? 1390 01:14:11,460 --> 01:14:12,270 OK. 1391 01:14:12,270 --> 01:14:17,940 Aj A GetString je v podstate robí volať malloc, takže si môžete prideliť 1392 01:14:17,940 --> 01:14:21,680 pamäte za behu. 1393 01:14:21,680 --> 01:14:26,460 >> Vždy nezabudnite skontrolovať NULL pretože malloc sa chystá vrátiť NULL 1394 01:14:26,460 --> 01:14:28,200 ak nemožno alokovať pamäť. 1395 01:14:28,200 --> 01:14:31,660 Povedzme, že budete žiadať o smiešny množstvo pamäti. 1396 01:14:31,660 --> 01:14:33,950 Váš počítač sa nebude schopný oveľa prideliť, že. 1397 01:14:33,950 --> 01:14:36,410 >> Takže malloc práve deje vrátiť null. 1398 01:14:36,410 --> 01:14:42,210 Takže nezabudnite vždy skontrolovať, či ukazovateľ, ktorý ste dostali od malloc je 1399 01:14:42,210 --> 01:14:45,640 null, alebo nie, pretože ak je to, môžete byť dereferencing ukazovateľ a 1400 01:14:45,640 --> 01:14:48,340 spôsobuje nežiadúce chyby. 1401 01:14:48,340 --> 01:14:50,930 A konečne, nezabudnite vaše voľnej pamäte. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc vytvára pamäť haldy. 1404 01:15:00,560 --> 01:15:03,436 A vy budete musieť uvoľniť pamäť pred ukončením programu. 1405 01:15:03,436 --> 01:15:05,370 OK, to je všetko pre mňa. 1406 01:15:05,370 --> 01:15:07,900 Je nám ľúto, Rob. 1407 01:15:07,900 --> 01:15:07,950 Vďaka. 1408 01:15:07,950 --> 01:15:09,878 >> [APPLAUSE] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Nejaká posledné otázky pred Rob príde? 1410 01:15:12,679 --> 01:15:13,138 Nie? 1411 01:15:13,138 --> 01:15:13,597 Jo? 1412 01:15:13,597 --> 01:15:15,892 >> Divákov: Nevidel som tento online. 1413 01:15:15,892 --> 01:15:17,269 Už ste ho nahrali ešte? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Myslím si, že Dave je to nahrať čoskoro. 1415 01:15:19,106 --> 01:15:19,880 >> DAVE: Bude to vedieť. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: Bude to on-line. 1417 01:15:20,310 --> 01:15:21,175 >> Divákov: To záleží. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: To sa deje? 1419 01:15:22,090 --> 01:15:23,157 OK. 1420 01:15:23,157 --> 01:15:23,644 Jo? 1421 01:15:23,644 --> 01:15:27,053 >> Divákov: [nepočuteľné]? 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Áno, mali by ste uvoľniť všetky pamäť, ktorá je vložená do haldy. 1423 01:15:30,285 --> 01:15:31,535 >> Divákov: [nepočuteľné]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Áno. 1426 01:15:36,160 --> 01:15:39,980 Kedykoľvek máte kultúry malloc, mali by ste mať kultúru zadarmo 1427 01:15:39,980 --> 01:15:42,640 Po zastavení používania tejto premennej. 1428 01:15:42,640 --> 01:15:44,800 Takže malloc a zadarmo sú vždy spoločne. 1429 01:15:44,800 --> 01:15:45,410 Ich najlepší priatelia. 1430 01:15:45,410 --> 01:15:46,720 Jo. 1431 01:15:46,720 --> 01:15:47,970 Rob? 1432 01:15:47,970 --> 01:15:55,595 1433 01:15:55,595 --> 01:15:56,850 >> ROB: Pôjdem rýchlo. 1434 01:15:56,850 --> 01:16:00,466 A tiež video sa zmieriť. 1435 01:16:00,466 --> 01:16:01,716 Mám MIC. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> OK, takže týždeň päť vecí. 1438 01:16:26,230 --> 01:16:27,970 Prvá vec, ktorú máme, je zásobník. 1439 01:16:27,970 --> 01:16:33,390 Takže nezabudnite, že je tu len jeden zásobník Rám na aktívne volanie funkcie. 1440 01:16:33,390 --> 01:16:34,710 Uvidíme, že v druhej. 1441 01:16:34,710 --> 01:16:37,850 A tiež si spomenúť, čo vlastne ide v každom zásobníku ráme sa bude 1442 01:16:37,850 --> 01:16:41,880 miestnej premenné našich funkcií, argumenty, ktoré sú odovzdané do našej 1443 01:16:41,880 --> 01:16:43,880 funkcie, spolu s niekoľkými iné veci, ktoré nemáte naozaj 1444 01:16:43,880 --> 01:16:45,260 treba obávať. 1445 01:16:45,260 --> 01:16:50,950 >> Tak tu je príklad programu, kde oznámenia, hlavné je printfing návrat 1446 01:16:50,950 --> 01:16:52,830 Hodnota foo 4. 1447 01:16:52,830 --> 01:16:57,930 foo sa práve chystá k návratu Hodnota bar 4 čiarkou 6. 1448 01:16:57,930 --> 01:17:02,380 A bar bude nastaviť niektoré miestne Premenná n rovné 4 krát 6. 1449 01:17:02,380 --> 01:17:03,920 A potom sa vrátiť n. 1450 01:17:03,920 --> 01:17:09,130 >> Takže poďme sa pozrieť na zásobníku v priebehu Skutočná iterácia tohto programu. 1451 01:17:09,130 --> 01:17:10,500 Takže tam je spodná časť nášho stacku. 1452 01:17:10,500 --> 01:17:12,620 Nezabudnite, že zásobník rastie. 1453 01:17:12,620 --> 01:17:15,370 Tak v dolnej časti našej stohu, sme majú zásobníka rámec pre hlavné. 1454 01:17:15,370 --> 01:17:17,000 Keď sa program spustí, hlavný vždy bude v 1455 01:17:17,000 --> 01:17:18,560 Spodná časť nášho stacku. 1456 01:17:18,560 --> 01:17:20,880 >> A to, čo je vo vnútri nášho stack frame za hlavnú? 1457 01:17:20,880 --> 01:17:23,810 Takže aj keď neexistujú miestne premenné na hlavnej, ako som povedal predtým, 1458 01:17:23,810 --> 01:17:29,670 sme argc a RGV zaberajú miesto vnútri hlavného rámu zásobníka. 1459 01:17:29,670 --> 01:17:33,260 Takže hlavné je teraz chystá volanie funkcie foo. 1460 01:17:33,260 --> 01:17:35,125 A to znamená, že foo bude si svoj vlastný zásobník rám. 1461 01:17:35,125 --> 01:17:36,970 >> Takže teraz sme vo vnútri Funkcie foo. 1462 01:17:36,970 --> 01:17:38,610 A to, čo musí ísť do Foo stack frame? 1463 01:17:38,610 --> 01:17:41,100 No, foo má argument n. 1464 01:17:41,100 --> 01:17:45,440 A n je rovné 4, pretože to je to, čo Hlavné je okolo ako parameter Foo. 1465 01:17:45,440 --> 01:17:48,490 >> Takže teraz foo bude volať bar. 1466 01:17:48,490 --> 01:17:52,070 Čo je bar bude mať vo vnútri jeho "zásobníka rámu? 1467 01:17:52,070 --> 01:17:55,610 Je x rovnajúcu sa 4 y sa rovná šiestimi. 1468 01:17:55,610 --> 01:17:58,540 A to nie je všetko, že budeme mať v zásobníku rámci nasledujúcich dôvodov bar 1469 01:17:58,540 --> 01:18:00,580 má tiež lokálne premenné n. 1470 01:18:00,580 --> 01:18:03,370 A n budeme rovná 24. 1471 01:18:03,370 --> 01:18:05,750 >> Takže teraz bar sa chystá k návratu n. 1472 01:18:05,750 --> 01:18:09,300 Takže tyč 24 sa vracia do stack frame foo. 1473 01:18:09,300 --> 01:18:12,560 A pretože bar je teraz vracia, že znamená, že sa objavujú zásobníka rám 1474 01:18:12,560 --> 01:18:14,250 na bare von zo zásobníka. 1475 01:18:14,250 --> 01:18:18,430 Takže všetko, pamäť, ktorá bar bol použitie je teraz z kôpky. 1476 01:18:18,430 --> 01:18:21,550 >> Teraz foo bude tiež vrátiť 24 na hlavnej. 1477 01:18:21,550 --> 01:18:25,470 Takže teraz, že foo sa vracia, pamäť že foo použil vo svojej ' 1478 01:18:25,470 --> 01:18:27,550 stack frame je tiež preč. 1479 01:18:27,550 --> 01:18:29,660 A teraz, hlavné bude volať printf. 1480 01:18:29,660 --> 01:18:31,660 Takže printf je len ďalšie funkcie. 1481 01:18:31,660 --> 01:18:35,320 Keď hovoríme printf, že to bude ďalší zásobník rámec pre printf 1482 01:18:35,320 --> 01:18:36,470 volanie funkcie. 1483 01:18:36,470 --> 01:18:37,990 >> Čo sme okolo printf? 1484 01:18:37,990 --> 01:18:40,090 To je to, čo sa deje ísť na jeho rámca zásobníka. 1485 01:18:40,090 --> 01:18:44,970 Prinajmenšom, sme okolo že percento aj spätné lomítko n a 1486 01:18:44,970 --> 01:18:47,180 Argument 24. 1487 01:18:47,180 --> 01:18:50,370 To by mohlo mať viac v jeho stack frame ak printf sa stane byť použitie niektorých 1488 01:18:50,370 --> 01:18:51,200 lokálne premenné. 1489 01:18:51,200 --> 01:18:51,920 Nevieme. 1490 01:18:51,920 --> 01:18:53,810 >> Ale všetko, čo v printf rokoch stack frame. 1491 01:18:53,810 --> 01:18:55,740 Bude to vykonať printf. 1492 01:18:55,740 --> 01:18:56,830 Potom printf to robí. 1493 01:18:56,830 --> 01:18:57,820 To sa vráti. 1494 01:18:57,820 --> 01:18:58,960 Konečne, hlavné je hotovo. 1495 01:18:58,960 --> 01:18:59,860 Hlavný vráti. 1496 01:18:59,860 --> 01:19:02,020 A potom náš program je hotovo. 1497 01:19:02,020 --> 01:19:02,480 Jo? 1498 01:19:02,480 --> 01:19:04,505 >> Divákov: Ste vidieť [nepočuteľné] 1499 01:19:04,505 --> 01:19:05,900 Argumenty [nepočuteľné] 1500 01:19:05,900 --> 01:19:06,830 parametre? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: Takže tam je malý rozdiel medzi argumenty a parametre. 1502 01:19:09,970 --> 01:19:14,400 A naozaj, v bežnej reči, ľudia majú tendenciu len miešať po celú dobu. 1503 01:19:14,400 --> 01:19:17,550 Ale parametre sú formálne Názov vecí. 1504 01:19:17,550 --> 01:19:20,180 >> Takže argc a argv sú parametre na hlavnej. 1505 01:19:20,180 --> 01:19:23,440 Argumenty sú to, čo v skutočnosti odovzdať ako tie parametre. 1506 01:19:23,440 --> 01:19:28,340 Takže, keď som zavolať foo o 4, 4 je argument som odovzdaním. 1507 01:19:28,340 --> 01:19:31,460 A parameter n, vnútri foo, má na hodnotu 4 1508 01:19:31,460 --> 01:19:32,880 od 4 bol argument. 1509 01:19:32,880 --> 01:19:35,826 >> Divákov: [nepočuteľné]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: n je lokálne premennú do baru. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 n je ešte miestna foo, ale Je to parameter foo. 1513 01:19:44,960 --> 01:19:48,190 Nie je to lokálna premenná. 1514 01:19:48,190 --> 01:19:48,546 Jo? 1515 01:19:48,546 --> 01:19:51,180 >> Divákov: [nepočuteľné]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: foo práve volá bar a návrate na akomkoľvek bar vráti. 1517 01:19:55,400 --> 01:19:56,786 >> Divákov: [nepočuteľné]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Jo, len aby videl viac zásobník rámy. 1519 01:19:59,591 --> 01:20:00,082 Jo? 1520 01:20:00,082 --> 01:20:03,519 >> Divákov: Prečo foo nazývaný pred printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Prečo foo volaná pred printf? 1522 01:20:05,920 --> 01:20:10,740 Takže som mohol mať, namiesto toho urobiť niečo ako int x rovná foo z 4 1523 01:20:10,740 --> 01:20:12,980 a potom vytlačiť x. 1524 01:20:12,980 --> 01:20:17,900 Miesto, ale v kombinácii som funkciu volania do printf argument. 1525 01:20:17,900 --> 01:20:23,670 >> Ale všimnite si, že nemôžeme v skutočnosti vykonať volanie printf, kým sa 1526 01:20:23,670 --> 01:20:25,610 zistiť, čo foo z 4 je. 1527 01:20:25,610 --> 01:20:27,480 Takže budeme hodnotiť to. 1528 01:20:27,480 --> 01:20:32,504 A len raz, že to urobil sa deje vrátiť a zhodnotiť to. 1529 01:20:32,504 --> 01:20:32,990 Jo? 1530 01:20:32,990 --> 01:20:37,364 >> Divákov: Vzhľadom k tomu, ako v bare [nepočuteľné] 1531 01:20:37,364 --> 01:20:41,738 Hodnota, prečo nemajú [nepočuteľné]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: Tie by mali byť úplne int. 1533 01:20:44,400 --> 01:20:46,260 Ktoré sa nechytilo viac ako viac priechodov. 1534 01:20:46,260 --> 01:20:49,010 Tak to by malo byť int bar a int foo pretože oba tieto 1535 01:20:49,010 --> 01:20:50,460 sa vracia celé čísla. 1536 01:20:50,460 --> 01:20:54,214 Void je len vtedy, ak to nebude vrátiť aktuálnej hodnoty. 1537 01:20:54,214 --> 01:20:54,692 Jo? 1538 01:20:54,692 --> 01:20:58,038 >> Divákov: Ak by ste mali linku vyššie návrat [nepočuteľné]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: čiara nad návratom? 1541 01:21:03,730 --> 01:21:04,410 >> Hľadisko: Áno. 1542 01:21:04,410 --> 01:21:10,780 Ako keď ste printf a [nepočuteľné] by to vytlačiť dvakrát? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Takže vnútri foo? 1544 01:21:12,992 --> 01:21:15,945 Keby sme mali printf tu? 1545 01:21:15,945 --> 01:21:16,750 >> Hľadisko: Áno. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Takže ak sme mali printf právo tu by to tlačiť raz. 1547 01:21:19,510 --> 01:21:23,400 Vzhľadom k tomu, voláme foo raz pravdu tú, potom budeme hit printf. 1548 01:21:23,400 --> 01:21:24,620 Potom zavoláme bar. 1549 01:21:24,620 --> 01:21:25,710 A potom foo vráti. 1550 01:21:25,710 --> 01:21:26,275 A to je všetko. 1551 01:21:26,275 --> 01:21:30,985 Vieme len, že sa vyskytnú printf raz. 1552 01:21:30,985 --> 01:21:31,482 Jo? 1553 01:21:31,482 --> 01:21:32,973 >> Divákov: [nepočuteľné] 1554 01:21:32,973 --> 01:21:37,950 printf volá foo, pretože sme prvý volanie printf a potom sme okolo 1555 01:21:37,950 --> 01:21:38,580 argumenty. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Takže teoreticky, nie je printf volá foo? 1557 01:21:40,960 --> 01:21:42,220 Takže nie. 1558 01:21:42,220 --> 01:21:47,360 Len aby to c sa chystá vykonať tieto veci je, ako budeme môcť 1559 01:21:47,360 --> 01:21:49,800 volanie funkcie, všetky argumenty funkciu musí 1560 01:21:49,800 --> 01:21:51,600 úplne vyhodnotené. 1561 01:21:51,600 --> 01:21:53,540 Takže je to úplne hodnotená? 1562 01:21:53,540 --> 01:21:54,610 Áno, je to len reťazec. 1563 01:21:54,610 --> 01:21:55,480 Je to len hodnota. 1564 01:21:55,480 --> 01:21:57,200 >> Potom musíme úplne hodnotiť to. 1565 01:21:57,200 --> 01:21:59,720 Akonáhle je to hotovo, teraz všetci jeho argumenty sú vyhodnotené. 1566 01:21:59,720 --> 01:22:01,982 A teraz môžeme volania printf. 1567 01:22:01,982 --> 01:22:02,478 Jo? 1568 01:22:02,478 --> 01:22:03,966 >> Divákov: Jedna otázka. 1569 01:22:03,966 --> 01:22:06,942 Ak máte funkciu void, musí Máte spiatočnej bodkočiarka? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: Nemáte návrat bodkočiarka ak máte funkciu void. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 OK. 1573 01:22:14,780 --> 01:22:15,830 Takže teraz nejaké haldy veci. 1574 01:22:15,830 --> 01:22:19,640 Tak haldy je, ako budeme riešiť s dynamickou správou pamäti. 1575 01:22:19,640 --> 01:22:23,100 A to priamo v rozpore s zásobník, ktorý by sme nazvali automatické 1576 01:22:23,100 --> 01:22:24,100 správa pamäte. 1577 01:22:24,100 --> 01:22:27,140 >> Takže v zásobníku, nikdy naozaj vysporiadať s tým, ako lokálnych premenných 1578 01:22:27,140 --> 01:22:30,400 sú tlačené a vyskočila vypnúť všetky Tieto zásobník rámy a všetky tie veci. 1579 01:22:30,400 --> 01:22:31,070 Nemusíte sa starať o to. 1580 01:22:31,070 --> 01:22:32,070 Je to automatické. 1581 01:22:32,070 --> 01:22:36,990 Takže haldy je ručné. 1582 01:22:36,990 --> 01:22:38,070 A [nepočuteľné] 1583 01:22:38,070 --> 01:22:41,260 pochádza z týchto funkcií malloc a zadarmo. 1584 01:22:41,260 --> 01:22:43,550 >> Tak tu je ďalší program. 1585 01:22:43,550 --> 01:22:47,145 Všetko, čo robíte, je mallocing číslo. 1586 01:22:47,145 --> 01:22:49,360 Sme ukladanie do hviezdy x. 1587 01:22:49,360 --> 01:22:52,520 Samozrejme, že musíme skontrolovať, aby zistil, či x je null. 1588 01:22:52,520 --> 01:22:56,400 Potom budeme len nastaviť to, čo x ukazuje na 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Vytlačiť čo x smeruje k, print x, a potom voľný x. 1591 01:23:03,260 --> 01:23:08,920 >> Tak, ako sa to vlastne bude vyzerať Ak sa pozrieme na našu zásobníka a haldy? 1592 01:23:08,920 --> 01:23:10,950 Takže začneme znova. 1593 01:23:10,950 --> 01:23:12,580 Spodná časť našej zásobníka ako predtým. 1594 01:23:12,580 --> 01:23:15,930 Pamätajte si, že ťa haldy priamo stavia stoh? 1595 01:23:15,930 --> 01:23:18,850 Takže budeme mať Vrchol našej haldy tam. 1596 01:23:18,850 --> 01:23:22,590 >> Takže dolnej časti nášho zásobníka, máme náš stack frame pre hlavné. 1597 01:23:22,590 --> 01:23:28,000 Má priestor pre argc, argv a my majú teraz miestnej premennú x, ktorá 1598 01:23:28,000 --> 01:23:30,030 je int hviezda. 1599 01:23:30,030 --> 01:23:32,240 Takže budeme iterovat v rámci tohto programu. 1600 01:23:32,240 --> 01:23:34,420 Prvá vec, ktorú máme, je volania malloc. 1601 01:23:34,420 --> 01:23:36,250 >> Takže robíme volania malloc. 1602 01:23:36,250 --> 01:23:37,100 Malloc je funkcia. 1603 01:23:37,100 --> 01:23:38,770 Je to dostane zásobníka rám. 1604 01:23:38,770 --> 01:23:40,180 Čo budeme prechádzať k malloc? 1605 01:23:40,180 --> 01:23:41,610 To bude ísť dovnútra zo zásobníka rámu. 1606 01:23:41,610 --> 01:23:45,130 Máme okolo veľkosti n, čo je o 4. 1607 01:23:45,130 --> 01:23:49,700 Tak, že je odovzdaný malloc. 1608 01:23:49,700 --> 01:23:50,910 >> Čo malloc robiť? 1609 01:23:50,910 --> 01:23:53,820 Je to pre nás chytí nejaký priestor na halde. 1610 01:23:53,820 --> 01:23:55,320 Tak budeme chodiť na haldy. 1611 01:23:55,320 --> 01:23:57,990 A ideme chytiť 4 bajtov z haldy. 1612 01:23:57,990 --> 01:24:01,500 Takže poďme sa len tak, že ľubovoľnú adresu. 1613 01:24:01,500 --> 01:24:06,680 0x123 Len predstierať, že je adresu, ktorá je na halde. 1614 01:24:06,680 --> 01:24:12,300 >> Takže to, čo je vlastne vo vnútri toho oblasť pamäte na adrese Ox123? 1615 01:24:12,300 --> 01:24:13,080 Garbage. 1616 01:24:13,080 --> 01:24:15,270 Takže sme sa neuloží nič v ňom. 1617 01:24:15,270 --> 01:24:18,830 Takže ak vieme, je Môže to byť čokoľvek. 1618 01:24:18,830 --> 01:24:20,560 Nemali by ste predpokladať, že je to nula. 1619 01:24:20,560 --> 01:24:23,870 Je to s najväčšou pravdepodobnosťou nie je nula. 1620 01:24:23,870 --> 01:24:26,260 >> Takže teraz malloc vráti. 1621 01:24:26,260 --> 01:24:28,020 A čo budeme robiť, keď sa vráti malloc? 1622 01:24:28,020 --> 01:24:29,800 Vydali sme, čo sa vráti. 1623 01:24:29,800 --> 01:24:32,290 Vydali sme sa x rovná tomu, čo sa vracia. 1624 01:24:32,290 --> 01:24:33,690 Takže to, čo sa to vracia? 1625 01:24:33,690 --> 01:24:38,150 Je to návrate 0x123, pretože to je adresa bloku pamäti, že to 1626 01:24:38,150 --> 01:24:40,850 len pridelené v halde. 1627 01:24:40,850 --> 01:24:47,160 >> Tak sa vrátiť 0x123 x je teraz bude nastavený rovná 0x123, ktoré obrazovo, 1628 01:24:47,160 --> 01:24:52,940 sme často kresliť ako x majúce skutočný šípka ukazuje k tomuto bloku. 1629 01:24:52,940 --> 01:24:55,820 Ale x je práve ukladanie túto adresu. 1630 01:24:55,820 --> 01:24:58,670 Takže teraz musíme skontrolovať, či x je null. 1631 01:24:58,670 --> 01:24:59,120 To nie je null. 1632 01:24:59,120 --> 01:25:02,170 Sme predstierať, že malloc podarilo. 1633 01:25:02,170 --> 01:25:04,950 >> Takže teraz hviezda x sa rovná 50. 1634 01:25:04,950 --> 01:25:08,450 Takže hviezda pamätá to znamená, prejsť na túto adresu. 1635 01:25:08,450 --> 01:25:12,700 Takže 0x123 Ideme do prejsť na túto adresu. 1636 01:25:12,700 --> 01:25:14,660 Takže to nás privádza tam. 1637 01:25:14,660 --> 01:25:16,310 Čo robíme na tejto adrese? 1638 01:25:16,310 --> 01:25:19,020 Sme skladovanie 50. 1639 01:25:19,020 --> 01:25:22,500 >> Takže po tejto línii, to je to, čo veci budú vyzerať. 1640 01:25:22,500 --> 01:25:24,640 Takže teraz už to nie je odpadky tam hore. 1641 01:25:24,640 --> 01:25:28,910 Teraz vieme, že 50 je v tom, že najmä preto, že adresa 1642 01:25:28,910 --> 01:25:32,410 sme ju nastavíte na to. 1643 01:25:32,410 --> 01:25:32,790 OK? 1644 01:25:32,790 --> 01:25:34,370 Takže teraz budeme tlačiť f. 1645 01:25:34,370 --> 01:25:38,490 >> Takže najprv budeme tlačiť hviezdy x. 1646 01:25:38,490 --> 01:25:39,640 Takže to, čo je hviezda x? 1647 01:25:39,640 --> 01:25:44,300 Opäť platí, že hviezda x znamená ísť do vec, ktorá x je ukazuje. 1648 01:25:44,300 --> 01:25:47,140 Takže x je ukladanie 0x123 Choď na to. 1649 01:25:47,140 --> 01:25:48,490 Dostaneme 50. 1650 01:25:48,490 --> 01:25:50,540 Takže vytlačiť f to. 1651 01:25:50,540 --> 01:25:54,900 A to znamená, že to bude tlačiť 50. 1652 01:25:54,900 --> 01:25:56,850 A potom, že sa vráti. 1653 01:25:56,850 --> 01:25:58,340 >> A potom máme druhý printf. 1654 01:25:58,340 --> 01:25:59,370 Teraz sme percent v. 1655 01:25:59,370 --> 01:26:01,680 Ak ste ho ešte nevideli, to je ako vytlačiť ukazovateľ. 1656 01:26:01,680 --> 01:26:04,960 Takže máme percent i, percent f, a všetky z nich už. 1657 01:26:04,960 --> 01:26:07,160 Takže percent p, vytlačte ukazovateľ. 1658 01:26:07,160 --> 01:26:08,920 >> Takže x je ukazovateľ. 1659 01:26:08,920 --> 01:26:13,440 Takže ak budeme tlačiť x sebe, budeme tlačiť to, čo je vlastne vo vnútri 1660 01:26:13,440 --> 01:26:19,220 x, ktorý je 0x123 Takže prvý print f bude tlačiť 50. 1661 01:26:19,220 --> 01:26:23,620 Druhá tlačová f sa deje vytlačiť 0x123 Jo? 1662 01:26:23,620 --> 01:26:27,460 >> Divákov: Používate percent x vytlačiť ukazovateľ? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Takže používaš percent x vytlačiť ukazovateľ? 1664 01:26:31,200 --> 01:26:38,350 Takže môžete, ale percento x je len, Všeobecne platí, že pre podobne, ak máte 1665 01:26:38,350 --> 01:26:40,325 číslo a chcete tlačiť to ako hexadecimálne. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 To je, ako to urobiť. 1668 01:26:44,880 --> 01:26:47,160 >> Vzhľadom k tomu, by percent d vytlačiť ako desatinné číslo. 1669 01:26:47,160 --> 01:26:50,310 To boli dostaneme percent d. i je len číslo. 1670 01:26:50,310 --> 01:26:52,690 percent p je špecificky pre ukazovatele. 1671 01:26:52,690 --> 01:26:54,060 >> Takže x je ukazovateľ. 1672 01:26:54,060 --> 01:26:56,360 Chceme využiť percent str. 1673 01:26:56,360 --> 01:26:57,937 Ale percento x by mohlo fungovať. 1674 01:26:57,937 --> 01:26:58,414 Jo? 1675 01:26:58,414 --> 01:26:59,664 >> Divákov: [nepočuteľné]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Jo. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Aspoň pre tento call--, tak som nezahŕňali to tu. 1680 01:27:13,440 --> 01:27:19,850 Ale tieto dva argumenty sú nevyhnutne vnútri tohto rámca zásobníka 1681 01:27:19,850 --> 01:27:23,040 spolu so všetkými lokálnymi premennými printf sa stane, že bude používať. 1682 01:27:23,040 --> 01:27:27,020 A potom ďalšie volania printf teraz vnútri printf stack frame je 1683 01:27:27,020 --> 01:27:33,960 percent p spätné lomítko n a to bez ohľadu na hodnotu x, čo je 0x123. 1684 01:27:33,960 --> 01:27:34,425 Jo? 1685 01:27:34,425 --> 01:27:35,675 >> Divákov: [nepočuteľné]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: To bude niečo vytlačiť že vyzerá takto. 1688 01:27:40,880 --> 01:27:41,846 >> Divákov: [nepočuteľné]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: Takže to vytlačí ho v adresnom formulári. 1690 01:27:44,510 --> 01:27:47,003 Vyzerá to, že adresu. 1691 01:27:47,003 --> 01:27:47,494 Jo? 1692 01:27:47,494 --> 01:27:49,458 >> Divákov: [nepočuteľné]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Prečo je to, čo? 1694 01:27:51,075 --> 01:27:52,920 >> Divákov: [nepočuteľné]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Prečo je tento ukazovateľ 4 bajty? 1696 01:27:55,240 --> 01:27:58,500 Takže existuje celá partia z 0 rokov pred týmto. 1697 01:27:58,500 --> 01:28:03,740 Takže je to naozaj 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 Na 64-bitovom systéme, tam by Celá partia viac núl. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Jo? 1701 01:28:11,900 --> 01:28:13,150 >> Divákov: [nepočuteľné]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Takže prvý printf bude print-- 1704 01:28:21,130 --> 01:28:21,980 >> Divákov: [nepočuteľné]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Áno, to bude tlačiť čo x ukazuje. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Hviezda hovorí, že to, čo je to čo ukazuje. 1708 01:28:29,070 --> 01:28:30,300 Chytiť ho. 1709 01:28:30,300 --> 01:28:31,455 Takže to, čo sa to ukazuje na? 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 Chytiť ho. 1712 01:28:32,410 --> 01:28:33,390 To je to, čo budeme tlačiť. 1713 01:28:33,390 --> 01:28:37,020 Vzhľadom k tomu, ďalší, že sme len tlač x samo o sebe. 1714 01:28:37,020 --> 01:28:38,850 Čo je vo vnútri f? 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 OK. 1717 01:28:44,500 --> 01:28:46,620 >> A potom, konečne, máme voľný. 1718 01:28:46,620 --> 01:28:48,040 Čo sme okolo oslobodiť? 1719 01:28:48,040 --> 01:28:49,470 Sme okolo x. 1720 01:28:49,470 --> 01:28:52,380 V tej dobe som vlastne zobrazené je v zásobníku ráme. 1721 01:28:52,380 --> 01:28:56,370 >> Takže sme okolo hodnoty 0x123 oslobodiť. 1722 01:28:56,370 --> 01:28:59,070 Takže teraz zadarmo vie, všetko v poriadku, Musím ísť do hromady 1723 01:28:59,070 --> 01:29:00,050 a voľné, že pamäť. 1724 01:29:00,050 --> 01:29:03,920 Je to už používate, čo je na adrese 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> Takže bez sa chystá na vydanie ktoré z haldy. 1726 01:29:07,010 --> 01:29:09,490 Teraz je naša haldy je opäť prázdny. 1727 01:29:09,490 --> 01:29:11,120 Nemáme žiadne pamäťové úniky. 1728 01:29:11,120 --> 01:29:12,940 Teraz zadarmo vráti. 1729 01:29:12,940 --> 01:29:16,130 Všimnite si, že x je stále 0x123. 1730 01:29:16,130 --> 01:29:18,240 Ale to už nie je platný pamäti. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 My už dereferencia x. 1733 01:29:23,986 --> 01:29:24,440 Jo? 1734 01:29:24,440 --> 01:29:27,240 >> Divákov: Je návrat 0 redundantné? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: Je returen 0 nadbytočný? 1736 01:29:28,290 --> 01:29:31,110 Áno. 1737 01:29:31,110 --> 01:29:33,950 Práve sme sa dať to tam, pretože máme vrátiť jednu pre vzduch. 1738 01:29:33,950 --> 01:29:36,830 Takže je to ako, jo, umožňuje patrí návrat 0. 1739 01:29:36,830 --> 01:29:37,310 Jo? 1740 01:29:37,310 --> 01:29:38,560 >> Divákov: [nepočuteľné]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: Takže po voľných x, čo sa stane v prípade, snažíme dereferencia ukazovateľ? 1743 01:29:45,580 --> 01:29:47,240 Je možné, že sa nič pokazí. 1744 01:29:47,240 --> 01:29:49,330 Je možné, že budeme ešte dostať 50. 1745 01:29:49,330 --> 01:29:53,590 >> Je to možné, aj to, že táto pamäť je v súčasnej dobe používa pre niečo iné. 1746 01:29:53,590 --> 01:29:57,140 Takže je to nedefinované chovanie. 1747 01:29:57,140 --> 01:30:00,772 A nedefinovaný niečo znamená sa môže stať. 1748 01:30:00,772 --> 01:30:01,250 Jo? 1749 01:30:01,250 --> 01:30:02,500 >> Divákov: [nepočuteľné]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: No, takže ak priradíte x na niečo iné. 1752 01:30:10,830 --> 01:30:15,870 Takže ak tu sme si povedali, x je rovná malloc niečo else-- 1753 01:30:15,870 --> 01:30:17,100 malloc veľkosť event-- 1754 01:30:17,100 --> 01:30:20,180 potom, že pôvodný blok pamäti nie je uvoľnené. 1755 01:30:20,180 --> 01:30:21,490 A my sme oficiálne stratil. 1756 01:30:21,490 --> 01:30:23,150 To je pretekanie pamäte. 1757 01:30:23,150 --> 01:30:25,090 Stratili sme všetky odkazy v tomto bloku pamäti. 1758 01:30:25,090 --> 01:30:26,827 Takže nie je žiadny spôsob, ako môžeme niekedy oslobodiť ju. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 OK, tak potom sa vráti 0 znamená urobiť. 1761 01:30:36,630 --> 01:30:37,900 >> Dobre, takže pretečenie zásobníka. 1762 01:30:37,900 --> 01:30:39,320 Čo je myšlienka tu? 1763 01:30:39,320 --> 01:30:41,210 Takže pamätajte, že haldy klesá. 1764 01:30:41,210 --> 01:30:43,480 Stack stúpa. 1765 01:30:43,480 --> 01:30:48,000 Tak toto bol príklad z prednášky, Myslím, že tam, kde hlavné je len tak 1766 01:30:48,000 --> 01:30:51,380 volať túto funkciu foo, ktorý sa deje volať seba rekurzívne znova a 1767 01:30:51,380 --> 01:30:52,320 znova. 1768 01:30:52,320 --> 01:30:55,370 >> Takže zásobník rámy budú pracujú úplne rovnako. 1769 01:30:55,370 --> 01:30:58,130 Takže budeme začať s hlavným ako spodná rámca zásobníka. 1770 01:30:58,130 --> 01:31:02,000 Potom hlavný bude volať foo, ktorý dostane zásobníka rám. 1771 01:31:02,000 --> 01:31:04,260 >> Potom foo bude volať foo opäť, ktorý sa dostane 1772 01:31:04,260 --> 01:31:05,500 ďalšie stack frame. 1773 01:31:05,500 --> 01:31:08,270 A potom znova a znova, a znova, a znovu, kým nakoniec sme sa spustiť 1774 01:31:08,270 --> 01:31:09,190 do haldy. 1775 01:31:09,190 --> 01:31:11,990 Tak to je, ako sa dostať pretečeniu zásobníka. 1776 01:31:11,990 --> 01:31:14,910 A v tomto okamihu seg chybu. 1777 01:31:14,910 --> 01:31:17,335 Alebo by ste naozaj seg chyba pred tento bod, ale jo. 1778 01:31:17,335 --> 01:31:19,660 >> Divákov: Je core dump rovnako ako poruchy seg? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Takže uvidíte segmentáciu Porucha core dumpingové. 1780 01:31:26,140 --> 01:31:28,760 Získate core dump keď ste seg chybu. 1781 01:31:28,760 --> 01:31:32,580 A je to ako výpise všetkých obsah aktuálnej pamäte, takže 1782 01:31:32,580 --> 01:31:36,670 ktoré si môžete vyskúšať a identifikovať prečo ste seg vyčítané. 1783 01:31:36,670 --> 01:31:37,135 Jo? 1784 01:31:37,135 --> 01:31:38,385 >> Divákov: [nepočuteľné]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Takže porucha segmentácie prostriedky tam je pretečeniu zásobníka. 1787 01:31:45,460 --> 01:31:47,060 Takže nemusí byť. 1788 01:31:47,060 --> 01:31:49,880 Porucha segmentácia znamená, že ste dojemné pamäti takým spôsobom, 1789 01:31:49,880 --> 01:31:50,880 nemali by ste byť. 1790 01:31:50,880 --> 01:31:54,750 Takže jeden spôsob, že sa tak stane, ak je môžete stack overflow, začneme dotýkať 1791 01:31:54,750 --> 01:31:58,736 pamäti tak, že by sme nemali byť. 1792 01:31:58,736 --> 01:31:59,208 Jo? 1793 01:31:59,208 --> 01:32:00,458 >> Divákov: [nepočuteľné]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Takže vnútri nekonečnej slučke. 1796 01:32:05,830 --> 01:32:08,770 Ako, je to ako rekurzívny nekonečna slučky, a tak sme si ďalšie 1797 01:32:08,770 --> 01:32:09,770 stack frame zakaždým. 1798 01:32:09,770 --> 01:32:13,540 Ale vnútri pravidelný nekonečný, kým one-- 1799 01:32:13,540 --> 01:32:16,390 dobre, nech to nie je ani tlačiť F-- 1800 01:32:16,390 --> 01:32:17,040 niečo urobiť. 1801 01:32:17,040 --> 01:32:18,390 To je fuk. 1802 01:32:18,390 --> 01:32:20,610 >> Nebudeme sa dostať ďalšie stack frame. 1803 01:32:20,610 --> 01:32:22,530 Sme len tak, aby smyčkování nad touto jedinou inštrukcií. 1804 01:32:22,530 --> 01:32:23,920 Zásobník sa nezvyšuje. 1805 01:32:23,920 --> 01:32:27,290 Je to skutočnosť, že každý rekurzívne hovor nám dáva zásobníka rám. 1806 01:32:27,290 --> 01:32:31,231 To je dôvod, prečo sme sa pretečeniu zásobníka. 1807 01:32:31,231 --> 01:32:31,728 Jo? 1808 01:32:31,728 --> 01:32:38,189 >> Divákov: Takže ak ste povedal, aby si while a potom [nepočuteľné]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Takže ak vnútri while tam bol printf, stále by 1810 01:32:42,000 --> 01:32:42,790 nie seg chyba. 1811 01:32:42,790 --> 01:32:46,090 Len som nechcel pliesť veci. 1812 01:32:46,090 --> 01:32:46,610 Bolo by slučka. 1813 01:32:46,610 --> 01:32:48,225 Vy by ste si jeden zásobník rám pre printf. 1814 01:32:48,225 --> 01:32:49,580 >> Potom printf vráti. 1815 01:32:49,580 --> 01:32:50,280 Potom by ste znova slučku. 1816 01:32:50,280 --> 01:32:51,460 Vy by ste si jeden zásobník rám pre printf. 1817 01:32:51,460 --> 01:32:52,850 To by sa vrátiť. 1818 01:32:52,850 --> 01:32:54,060 Single stack frame. 1819 01:32:54,060 --> 01:33:00,215 Takže nie ste dostať to nekonečný hromadia zásobníka rámy. 1820 01:33:00,215 --> 01:33:03,185 >> Divákov: [nepočuteľné]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Áno. 1822 01:33:04,040 --> 01:33:09,360 Takže to pretečeniu zásobníka dôjde pretože žiadny z nich 1823 01:33:09,360 --> 01:33:11,600 volanie foo sa vracajú. 1824 01:33:11,600 --> 01:33:15,250 Takže keď sa vrátime, potom by sme začnú strácať zásobníka rámy. 1825 01:33:15,250 --> 01:33:17,870 A potom by sme pretečeniu zásobníka. 1826 01:33:17,870 --> 01:33:20,070 A to je dôvod, prečo potrebujete základný prípad, pre svoje osobné funkcie. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Jo? 1829 01:33:23,479 --> 01:33:27,375 >> Divákov: Je možné veľkosti a zásobník na hromadu rovnaké pre 1830 01:33:27,375 --> 01:33:29,880 všetky programy? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Zhruba. 1832 01:33:31,910 --> 01:33:35,090 Je potenciálna veľkosť zásobníka a haldy rovnaké pre všetky programy? 1833 01:33:35,090 --> 01:33:37,180 Zhruba. 1834 01:33:37,180 --> 01:33:40,080 Existujú určité randomizácie do kde začína zásobník a 1835 01:33:40,080 --> 01:33:42,400 kde začína haldy. 1836 01:33:42,400 --> 01:33:45,870 Ak sa vám stalo, že máte veľa globálne premenné a veci, môžete 1837 01:33:45,870 --> 01:33:49,520 odniesť z nejakého priestoru pre vaše hromadu. 1838 01:33:49,520 --> 01:33:54,060 >> Na 64-bitovom systéme, môžete prakticky nekonečnú pamäť. 1839 01:33:54,060 --> 01:33:55,820 Je tu len toľko. 1840 01:33:55,820 --> 01:33:59,250 Medzi 32 bitov a 64 bitov, že je významný rozdiel. 1841 01:33:59,250 --> 01:34:02,350 >> Budeš sa dostať veľa viac stack a heap miesto na 64-bit 1842 01:34:02,350 --> 01:34:05,810 systém, pretože tam je len viac adries, ktoré sa môžu použiť. 1843 01:34:05,810 --> 01:34:09,360 Ale na individuálnom systéme, bude zhruba rovnaké množstvo stohu 1844 01:34:09,360 --> 01:34:10,785 a haldy priestor. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 V poriadku. 1847 01:34:15,530 --> 01:34:18,220 >> Takže posledná vec, ktorú je kompilácia. 1848 01:34:18,220 --> 01:34:19,810 Takže by ste mali poznať tento proces. 1849 01:34:19,810 --> 01:34:22,240 K dispozícii sú štyri veľké kroky. 1850 01:34:22,240 --> 01:34:24,400 Takže prvý by mal byť ľahko zapamätateľné. 1851 01:34:24,400 --> 01:34:25,085 Pre-processing. 1852 01:34:25,085 --> 01:34:28,390 To má predponu pre v ňom. 1853 01:34:28,390 --> 01:34:32,080 Tak to je pred všetkým ostatným. 1854 01:34:32,080 --> 01:34:34,000 >> Vec na zapamätanie je hash. 1855 01:34:34,000 --> 01:34:37,250 Takže hash definuje a hash obsahuje Vo všetkých týchto. 1856 01:34:37,250 --> 01:34:39,560 Tí, ktorí sú pre-procesor smernice. 1857 01:34:39,560 --> 01:34:42,030 To sú veci, ktoré sa pre-procesor sa postará o. 1858 01:34:42,030 --> 01:34:43,680 >> Takže čo to pre-procesor robiť? 1859 01:34:43,680 --> 01:34:44,850 Je to naozaj hlúposť. 1860 01:34:44,850 --> 01:34:49,380 Všetko, čo je schopný ich všetky z nich kopírovanie a strih a vkladanie operácie. 1861 01:34:49,380 --> 01:34:51,790 >> Takže hash obsahuje štandardné i0 dot hodín. 1862 01:34:51,790 --> 01:34:52,990 Čo je to robí? 1863 01:34:52,990 --> 01:34:56,610 Je to chytil štandardné I0 dot h súbor a vložiť ho do hornej 1864 01:34:56,610 --> 01:34:58,960 všade tam, kde sa hovorí, že hash obsahuje štandardné i0 bodka h. 1865 01:34:58,960 --> 01:35:02,480 >> A každý hash určiť, že máme videli, čo sa to robí? 1866 01:35:02,480 --> 01:35:06,730 Jeho kopírovanie hodnoty tohto hash definovanej je definovaný ako a vkladanie, ktoré 1867 01:35:06,730 --> 01:35:08,500 všade tam, kde používate hodnotu. 1868 01:35:08,500 --> 01:35:13,400 Takže preprocesor práve robí naozaj operácie na základe jednoduchý text. 1869 01:35:13,400 --> 01:35:15,870 Nerobí nič chytrého. 1870 01:35:15,870 --> 01:35:18,920 Takže všetko, čo je zložitejšie. 1871 01:35:18,920 --> 01:35:22,970 >> Takže teraz, že preprocesor je Hotovo, sme vlastne zostaviť. 1872 01:35:22,970 --> 01:35:24,320 Takže čo zostavovanie znamená? 1873 01:35:24,320 --> 01:35:27,310 Teraz bude z kódu C do assembleri. 1874 01:35:27,310 --> 01:35:27,570 Jo? 1875 01:35:27,570 --> 01:35:28,820 >> Divákov: [nepočuteľné]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Jo, sme chytili, že. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 Takže kompilácie. 1880 01:35:38,660 --> 01:35:40,310 Ideme od c do zostavy. 1881 01:35:40,310 --> 01:35:42,470 Tak toto je skutočná zmena jazyka. 1882 01:35:42,470 --> 01:35:45,240 Kompilácia sa znamená ísť od vyššej jazyk na úrovni 1883 01:35:45,240 --> 01:35:47,340 nižšiu úroveň jazyka. 1884 01:35:47,340 --> 01:35:50,720 >> A c je vysoká jazyková úroveň v porovnaní s montážou. 1885 01:35:50,720 --> 01:35:52,320 Čo je to montáž? 1886 01:35:52,320 --> 01:35:56,440 Jeho pokynmi, ktoré sú, dosť moc, robil pre váš procesor. 1887 01:35:56,440 --> 01:35:59,130 Ale váš počítač stále nechápem montáž. 1888 01:35:59,130 --> 01:36:01,570 To chápe len jednotky a nuly. 1889 01:36:01,570 --> 01:36:06,160 Takže ďalším krokom je montáž, ktorá prináša nám z týchto pokynov, ktoré 1890 01:36:06,160 --> 01:36:08,760 váš procesor rozumie a v skutočnosti prevádza ich, aby 1891 01:36:08,760 --> 01:36:10,820 tie jednotky a nuly. 1892 01:36:10,820 --> 01:36:13,570 >> Takže C montážou na binárne. 1893 01:36:13,570 --> 01:36:15,870 Ale nemám ešte spustiteľný súbor. 1894 01:36:15,870 --> 01:36:19,550 Takže myslíte, že knižnice CS50. 1895 01:36:19,550 --> 01:36:23,070 My sme pre vás pripravili binárne pre Táto CS50 knižnica, ktorá má getString 1896 01:36:23,070 --> 01:36:24,400 a vezmi_int a tak. 1897 01:36:24,400 --> 01:36:25,700 >> Ale CS50 library-- 1898 01:36:25,700 --> 01:36:27,650 va itself-- nie je spustiteľný. 1899 01:36:27,650 --> 01:36:29,570 To nemá hlavnú funkciu. 1900 01:36:29,570 --> 01:36:32,230 Je to len banda binárne ktoré môžete použiť. 1901 01:36:32,230 --> 01:36:41,730 Takže prepojenie je, ako sme sa dať dohromady všetky týchto rôznych binárnych súborov 1902 01:36:41,730 --> 01:36:43,110 do skutočnej spustiteľný súbor. 1903 01:36:43,110 --> 01:36:45,900 Jeden, ktorý môžete zadať bodka lomítko bodku von. 1904 01:36:45,900 --> 01:36:51,660 >> Takže to je ako súbor, ktorý ste písal, - bez ohľadu na váš program je-- 1905 01:36:51,660 --> 01:36:53,620 Ceaser dot c. 1906 01:36:53,620 --> 01:36:55,100 Ale teraz to bol zostavený dole na binárne. 1907 01:36:55,100 --> 01:36:56,480 Tak Ceaser bodka o. 1908 01:36:56,480 --> 01:36:59,620 A toto je náš CS50 knižnice binárne. 1909 01:36:59,620 --> 01:37:02,284 A oni sú kombinované do jedného spustiteľného súboru. 1910 01:37:02,284 --> 01:37:02,758 Jo? 1911 01:37:02,758 --> 01:37:04,008 >> Divákov: [nepočuteľné]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Takže prvá patrí, pamätajte, hash sú v skutočnosti 1914 01:37:12,710 --> 01:37:13,810 krok pre-procesor. 1915 01:37:13,810 --> 01:37:14,750 Ale to je oddelené. 1916 01:37:14,750 --> 01:37:20,730 Ak nepoužívate žiadne funkcie, ktoré sú mimo vašu jedného súboru a potom, 1917 01:37:20,730 --> 01:37:26,100 Nie, nemusíte prepojiť čokoľvek pretože máte všetko. 1918 01:37:26,100 --> 01:37:30,310 >> To znamená, že printf je spojený v. 1919 01:37:30,310 --> 01:37:32,820 Ak ste niekedy použiť printf, to je niečo, , Že musí byť spojené v 1920 01:37:32,820 --> 01:37:35,740 pretože si to nenapísal. 1921 01:37:35,740 --> 01:37:39,530 A, v skutočnosti, printf je automaticky spojené. 1922 01:37:39,530 --> 01:37:42,760 Viete, ako na príkazovom riadku, alebo ak Môžete zadať, aby, je vidieť, že majú 1923 01:37:42,760 --> 01:37:46,690 pomlčka l CS50, ktorý má odkaz v knižnici CS50? 1924 01:37:46,690 --> 01:37:49,070 Printf, a tak podobne, že sa deje byť spojené automaticky. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Nejaké ďalšie otázky týkajúce sa niečo? 1927 01:37:53,930 --> 01:37:56,280 >> Divákov: [nepočuteľné]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: Prepojenie? 1929 01:37:58,300 --> 01:38:03,450 Máme veľa rôzne binárne súbory. 1930 01:38:03,450 --> 01:38:06,410 Toto je kánonický príklad že používame je CS50 knižnica. 1931 01:38:06,410 --> 01:38:09,960 Zostavili sme a podávať na binárne tohto CS50 knižnice. 1932 01:38:09,960 --> 01:38:12,410 >> Ak chcete použiť getString vo vašom programe. 1933 01:38:12,410 --> 01:38:14,750 Takže idete a používať getString. 1934 01:38:14,750 --> 01:38:19,700 Ale bez môjho binárneho kódu pre GetString, pri kompilácii kódu 1935 01:38:19,700 --> 01:38:23,140 dole, nemôžete vlastne spustiť svoj Program pretože GetString String je 1936 01:38:23,140 --> 01:38:25,080 Zatiaľ nie je úplne definované. 1937 01:38:25,080 --> 01:38:29,220 >> Je to len pri prepojení v mojom binárnej ktorý obsahuje getString, že teraz všetko 1938 01:38:29,220 --> 01:38:31,130 Dobre, môžem vlastne spustiť getString. 1939 01:38:31,130 --> 01:38:32,330 Môj súbor je kompletný. 1940 01:38:32,330 --> 01:38:34,208 A môžem spustiť to. 1941 01:38:34,208 --> 01:38:34,697 Jo? 1942 01:38:34,697 --> 01:38:37,631 >> Divákov: Má prepájanie previesť binárne spustiteľný? 1943 01:38:37,631 --> 01:38:42,032 Takže aj keď nemáte iný knižnice, nebolo by to stále 1944 01:38:42,032 --> 01:38:44,477 potrebné prekladať [Nepočuteľné]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Takže spustiteľný je stále v binárnom formáte. 1946 01:38:48,640 --> 01:38:51,750 Je to len kombinujúci celok banda binárnych súborov. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> DIVÁKOV: Ďakujem moc. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Žiadny problém. 1950 01:38:58,560 --> 01:38:59,540 Nejaké ďalšie otázky? 1951 01:38:59,540 --> 01:39:02,001 Inak sme všetko nastavené. 1952 01:39:02,001 --> 01:39:02,690 V poriadku. 1953 01:39:02,690 --> 01:39:02,990 Vďaka. 1954 01:39:02,990 --> 01:39:03,590 >> [APPLAUSE] 1955 01:39:03,590 --> 01:39:04,490 >> DIVÁKOV: Ďakujem. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Jo. 1957 01:39:05,740 --> 01:39:06,582