1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorn: Welcome až A5, všetci. 3 00:00:07,820 --> 00:00:11,270 Máme vzrušujúce týždeň pred nami, hlavne preto, že tam je tak veľa nových 4 00:00:11,270 --> 00:00:12,350 čelí v tejto miestnosti. 5 00:00:12,350 --> 00:00:12,920 Je to úžasné. 6 00:00:12,920 --> 00:00:15,740 Mnoho z vás sa tu náhodou, čo je ešte lepšie. 7 00:00:15,740 --> 00:00:18,220 Takže dúfajme, že budete držať k nám. 8 00:00:18,220 --> 00:00:20,220 >> Tento týždeň budeme tráviť Prevažná časť úseku 9 00:00:20,220 --> 00:00:21,870 príprava na kvíz. 10 00:00:21,870 --> 00:00:26,580 Takže na našom programe, budeme hovoriť niečo o zdrojoch pre triedu, 11 00:00:26,580 --> 00:00:30,350 ale aj pre testu, a potom znovu, trávi väčšinu triedy rozprávanie 12 00:00:30,350 --> 00:00:31,390 o otázkach. 13 00:00:31,390 --> 00:00:33,900 Akonáhle sme hotoví odpovede na vaše otázky, alebo ak vaše otázky 14 00:00:33,900 --> 00:00:39,010 prirodzene nás vedú k nejakej kódovanie, som majú vzorku problémy z midterms 15 00:00:39,010 --> 00:00:43,180 minulosť, že budeme kódovať žiť v sekcii dohromady, že tiež vychovávať iné 16 00:00:43,180 --> 00:00:45,420 dobré téma na pokrytie. 17 00:00:45,420 --> 00:00:48,280 >> Takže prvé, čo sme prešli za posledných pár týždňov, aby vám pripomenul, 18 00:00:48,280 --> 00:00:51,700 chlapi, tam sú tony zdrojov k dispozícii pre tento kurz. 19 00:00:51,700 --> 00:00:55,020 Mnoho z nich bude nesmierne užitočná na vás, ako si aj naďalej 20 00:00:55,020 --> 00:00:57,280 študovať kvíz 0, pretože je to v utorok popoludní. 21 00:00:57,280 --> 00:00:59,630 Takže vy všetci boli študuje na chvíľu. 22 00:00:59,630 --> 00:01:02,640 >> K dispozícii sú skriptá a zdroje kód, ktorý by mal 23 00:01:02,640 --> 00:01:04,050 určite vyskúšať. 24 00:01:04,050 --> 00:01:05,019 Pozrite sa na šortky. 25 00:01:05,019 --> 00:01:07,470 Pozrite sa na study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 A potom, sú uvedené nižšie, rad z iných zdrojov. 27 00:01:11,770 --> 00:01:14,020 >> Opäť platí, že kvíz 0 je zajtra pri 1 hodine. 28 00:01:14,020 --> 00:01:18,230 Ak ste tak ešte neurobili, skontrolujte, či von O Quiz 0 doklad o 29 00:01:18,230 --> 00:01:21,370 Domovská stránka ihrisko je prísť na to, kde berieš kvíz. 30 00:01:21,370 --> 00:01:25,770 Kvíz začína v 01:10 a končí 70 minút neskôr. 31 00:01:25,770 --> 00:01:29,610 Takže ak sa objavíš po 01:10, budete dostaneme, že mnoho menej minút 32 00:01:29,610 --> 00:01:30,940 ako 70, aby sa kvíz. 33 00:01:30,940 --> 00:01:33,570 Takže uistite sa, že ste tam včas. 34 00:01:33,570 --> 00:01:38,690 Ak ste rozšírenie študent alebo majú niektoré ďalšie testovanie úvahy, že 35 00:01:38,690 --> 00:01:40,400 nemusí byť na jedno hodín zajtra. 36 00:01:40,400 --> 00:01:43,540 Ale opäť, skontrolujte O kvíz 0 dokumentovať, aby sa ubezpečil, viete, kedy 37 00:01:43,540 --> 00:01:44,760 užívate kvíz. 38 00:01:44,760 --> 00:01:46,440 Napísal som 75 minút sem. 39 00:01:46,440 --> 00:01:48,580 Myslím, že je to v poriadku, nie 70. 40 00:01:48,580 --> 00:01:53,420 >> To sa vzťahuje na všetok materiál od jedného týždňa 0 sa minulý týždeň prednášky v stredu. 41 00:01:53,420 --> 00:01:59,350 A opäť, v tomto teste, na ktorý dokument, dostanete jeden obojstranný a 8 42 00:01:59,350 --> 00:02:03,770 1/2 do 11 listu papiera, ktoré dostanete použiť ako poznámky počas testu. 43 00:02:03,770 --> 00:02:08,570 Mnoho ľudí, ak nie väčšina ľudí, majú zistil, že jeden z najdôležitejších užitočný spôsob, 44 00:02:08,570 --> 00:02:11,970 k štúdiu na kvíz je vykonať štúdie list, 45 00:02:11,970 --> 00:02:13,730 jedno-Sider, ich vlastné. 46 00:02:13,730 --> 00:02:17,710 Tak sa pozrite na tie posledné, ak ste videli tie predchádzajúce. 47 00:02:17,710 --> 00:02:19,960 Osloviť priateľov, aby videli, čo oni sú umiestnení na ich. 48 00:02:19,960 --> 00:02:23,610 >> Ale hands-dole, najlepší spôsob, ako môžete Štúdia je prejsť všetko a 49 00:02:23,610 --> 00:02:26,530 orezávať ho na to, čo by mal alebo by mal nepatrí na tomto liste 50 00:02:26,530 --> 00:02:30,570 papier, pretože to je proste fakt užitočné ako pre vás, aby sa ubezpečil, 51 00:02:30,570 --> 00:02:33,620 idete cez všetko a mať nejaké znalosti s ním. 52 00:02:33,620 --> 00:02:36,690 Väčšina ľudí, nájdeme, aj keď sa list papiera sedí priamo 53 00:02:36,690 --> 00:02:39,840 vedľa nich na kvíz, neotáčajte na to, pretože, opäť, že veľmi 54 00:02:39,840 --> 00:02:43,290 Proces prechádza informácií pomohol im sa to naučiť. 55 00:02:43,290 --> 00:02:45,370 >> Má niekto nejaké otázky, o kvíz 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Má všetkým - 58 00:02:51,450 --> 00:02:53,230 Nebudem robiť show rúk. 59 00:02:53,230 --> 00:02:53,550 To nič. 60 00:02:53,550 --> 00:02:54,790 Chcel som sa opýtať, kto začal študovať. 61 00:02:54,790 --> 00:02:58,360 Ale ja nechcem, aby sa ti všetko nie je zdvihnite ruky. 62 00:02:58,360 --> 00:03:01,290 Takže ako som povedal - áno, Avi, choďte do toho. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Aký by mal byť užitočná vec aby na jednej pager? 64 00:03:04,205 --> 00:03:05,875 >> STUDENT: To záleží na vás. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirschhorn: Získate používať svoj úsudok. 66 00:03:08,210 --> 00:03:13,220 Užitočné veci, aby na jednej pager, ak ste zmätení o veľké O 67 00:03:13,220 --> 00:03:17,510 runtime rôznych typov vyhľadávania a druhy, daj to tam v 68 00:03:17,510 --> 00:03:18,760 šikovný dandy graf. 69 00:03:18,760 --> 00:03:22,250 Tak, ak ste požiadal, aby na kvíz, nemusíte sa snažiť a číslo 70 00:03:22,250 --> 00:03:23,560 to, alebo dôvod, prečo cez behu. 71 00:03:23,560 --> 00:03:24,730 Stačí si len skopírovať dole. 72 00:03:24,730 --> 00:03:28,320 Ak sa pozriete na kvízy minulosti, veľa časy, tam beží čas na otázky. 73 00:03:28,320 --> 00:03:34,150 Tak to by bolo príkladom dobré čo dať na jednu pager. 74 00:03:34,150 --> 00:03:37,450 >> Ďalšie dobré veci dať na, ak ste zmätená o tom, ako deklarovať 75 00:03:37,450 --> 00:03:40,570 funkcie, alebo to, čo rôzne časti deklarácie funkcie sú, napísať 76 00:03:40,570 --> 00:03:43,400 že tam, generické verzie a potom možno príkladom. 77 00:03:43,400 --> 00:03:47,290 Ak ste zmätení o ukazovatele, diagram, ako ukazovatele práce 78 00:03:47,290 --> 00:03:48,660 asi naozaj užitočné. 79 00:03:48,660 --> 00:03:52,440 Ak ste zmätení o rekurzia, ochutnať rekurzívne funkcie tam 80 00:03:52,440 --> 00:03:54,980 mohol tiež ukázať ako veľmi užitočné. 81 00:03:54,980 --> 00:03:57,290 Znamená to, že vám nejaké nápady? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Musíte pochopiť, Celá kompilácie proces, rovnako ako 83 00:04:01,820 --> 00:04:03,220 ako to všetko funguje? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorn: Všetko , Ktorá bola pokrytá mohol 85 00:04:06,620 --> 00:04:08,060 ukázať na kvíz. 86 00:04:08,060 --> 00:04:08,930 Otázky - 87 00:04:08,930 --> 00:04:11,300 ale opäť, niektoré veci bude vážené ťažko ako ostatné. 88 00:04:11,300 --> 00:04:14,330 Niektoré veci majú prísť znova až a znovu v triede, v 89 00:04:14,330 --> 00:04:15,590 prednáška a sekcie. 90 00:04:15,590 --> 00:04:17,220 Ostatné veci nemajú prísť tak často. 91 00:04:17,220 --> 00:04:22,900 >> Hovorili sme veľa o # include a -L niečo a čo ty na mysli v 92 00:04:22,900 --> 00:04:24,390 Proces kompilácie. 93 00:04:24,390 --> 00:04:29,120 Hovorili sme veľa o GDB, lepiť, tie rôzne príznaky, ktoré sa používajú pri 94 00:04:29,120 --> 00:04:33,100 sme sa zostaviť niečo, a to make15, napríklad, naozaj 95 00:04:33,100 --> 00:04:34,510 znamená, a naozaj. 96 00:04:34,510 --> 00:04:38,110 Sme nehovorili toľko o každý krok 97 00:04:38,110 --> 00:04:39,240 Proces kompilácie. 98 00:04:39,240 --> 00:04:40,410 Stále ešte sme o tom hovorili. 99 00:04:40,410 --> 00:04:42,550 Takže je to stále niečo, čo by mali byť oboznámení sa. 100 00:04:42,550 --> 00:04:44,610 Ale opäť, my nebude - 101 00:04:44,610 --> 00:04:49,140 veci, ktoré prichádzajú častejšie v triede sú viac pravdepodobné, že prísť viac 102 00:04:49,140 --> 00:04:52,495 často a byť prísnejšie vážené na kvíz. 103 00:04:52,495 --> 00:04:53,280 >> V pohode. 104 00:04:53,280 --> 00:04:54,580 Akékoľvek ďalšie otázky týkajúce sa kvízu 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, tak som dal zoznam témy na palube. 107 00:05:00,050 --> 00:05:01,550 Išiel som cez osnov. 108 00:05:01,550 --> 00:05:07,340 Prešiel som úseku recenzia od včera v noci a tie zábery prísť 109 00:05:07,340 --> 00:05:13,710 s non-vyčerpávajúci zoznam tém že sme sa zaoberali tak ďaleko CS50 110 00:05:13,710 --> 00:05:16,800 a veci, ktoré by mohli sa objaví na kvíz. 111 00:05:16,800 --> 00:05:19,900 Tak som to ísť cez každý jeden z nich. 112 00:05:19,900 --> 00:05:22,370 To by sa oveľa viac čas, než máme teraz. 113 00:05:22,370 --> 00:05:26,880 Ale dal som to sem, aby dúfajme jog pamäť ako k veciam, ktoré môžu byť 114 00:05:26,880 --> 00:05:28,420 alebo nemusia byť oboznámení s vami. 115 00:05:28,420 --> 00:05:32,850 >> A ja by som rád trávi väčšinu časť odpovede na vaše otázky o tom, 116 00:05:32,850 --> 00:05:35,130 Tieto témy, témy, ktorá tu nie sú zahrnuté. 117 00:05:35,130 --> 00:05:36,130 Môžeme písať pseudo kód. 118 00:05:36,130 --> 00:05:40,010 Môžeme napísať skutočný kód aby bolo zaistené, že - 119 00:05:40,010 --> 00:05:44,280 Môžem odpovedať na vašu otázku, a pomôcť všetci v podstate chápať 120 00:05:44,280 --> 00:05:48,330 Mnoho z týchto tém, takže sa budete cítiť pripravený a pohodlne ísť do 121 00:05:48,330 --> 00:05:50,150 zajtra kvíz. 122 00:05:50,150 --> 00:05:52,300 Tak si prečítajte na zoznam. 123 00:05:52,300 --> 00:05:54,780 Vy snáď prišli na úseku s niektorými otázkami rovnako. 124 00:05:54,780 --> 00:05:58,480 Až budete pripravení, zdvihni ruku a my sme sa mohli začať. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Majte na pamäti, že otázky, ktoré ste, neexistujú hlúpe otázky. 127 00:06:05,200 --> 00:06:06,250 Počuli sme, že veľa. 128 00:06:06,250 --> 00:06:09,490 A otázky, ktoré ste, som ochotný staviť, mnoho iných ľudí aj 129 00:06:09,490 --> 00:06:11,740 sedím a sledovanie on-line sú tiež. 130 00:06:11,740 --> 00:06:13,770 Takže môžete pomôcť len ľudí kladením otázok. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: Medzi zásobníka a haldy, je tu predbežne pridelené 133 00:06:18,040 --> 00:06:22,880 percento pamäti, ktorá je definovaná ako to je na zásobníku alebo haldy? 134 00:06:22,880 --> 00:06:25,010 Alebo ako to funguje, presne? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorn: Veľká otázka. 136 00:06:26,230 --> 00:06:28,640 Idem zistiť spätne trochu. 137 00:06:28,640 --> 00:06:30,910 Má všetkým - 138 00:06:30,910 --> 00:06:31,660 prosím tu úprimný. 139 00:06:31,660 --> 00:06:34,130 Viem, že žiadam vás, aby ste zvýšiť vaše ruka pred svojimi rovesníkmi. 140 00:06:34,130 --> 00:06:38,510 Ale sú tu ľudia, ktorí sa cítia nepríjemný zásobníka a haldy 141 00:06:38,510 --> 00:06:42,980 a chcel by som ísť cez ktoré a čo ty myslíš? 142 00:06:42,980 --> 00:06:43,880 Ak Zdvihnite ruku - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Ďakujem. 145 00:06:45,120 --> 00:06:48,420 Takže sme ísť stoh a haldy naozaj rýchlo a potom 146 00:06:48,420 --> 00:06:50,370 presunúť do odpovede na vašu otázku. 147 00:06:50,370 --> 00:06:58,250 >> Takže ak budeme čerpať z krabice, aby zastupoval pamäť na vašom počítači, aké sú niektoré 148 00:06:58,250 --> 00:07:02,160 veci, ktoré idú v tomto poli? 149 00:07:02,160 --> 00:07:03,630 Hlavné. 150 00:07:03,630 --> 00:07:04,020 Hlavnou funkciou. 151 00:07:04,020 --> 00:07:05,890 Tam, kde sa hlavná ísť? 152 00:07:05,890 --> 00:07:08,090 >> STUDENT: [nepočuteľné]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirschhorn: Takže budeme kladený hlavný sem. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Čo iného ide v tomto poli? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> STUDENT: Funkcie, ktoré voláte. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Funkcia ktoré nazývame. 159 00:07:19,020 --> 00:07:20,440 A kam idú? 160 00:07:20,440 --> 00:07:21,300 >> STUDENT: V zásobníku. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirschhorn: Oni ísť na stack. 162 00:07:22,380 --> 00:07:27,350 Takže budeme nazývať čo tu dole zásobník. 163 00:07:27,350 --> 00:07:31,880 A až hore, máme hromadu. 164 00:07:31,880 --> 00:07:35,450 Takže pamäť nie je box, rovnako ako to. 165 00:07:35,450 --> 00:07:37,330 Ale to je vlastne celkom podobné. 166 00:07:37,330 --> 00:07:40,840 Bude to mať veľa krabíc cez a viac, v závislosti na tom, aká veľká je vaša 167 00:07:40,840 --> 00:07:43,730 Počítač je alebo aká veľká je vaša pamäť. 168 00:07:43,730 --> 00:07:46,950 >> Na quote-koniec citátu "zdola" je zásobník. 169 00:07:46,950 --> 00:07:50,880 A existuje niekoľko vecí, že idú na stack. 170 00:07:50,880 --> 00:07:53,840 A tí, závisí od funkcií Máte vo vašom kóde. 171 00:07:53,840 --> 00:07:57,780 Vždy máte jednu funkciu vo vašej Kód tzv hlavné, takže je tu vždy 172 00:07:57,780 --> 00:08:00,480 Sekcia tu dole v zásobník venovaná hlavné. 173 00:08:00,480 --> 00:08:03,980 >> Tieto oddiely v zásobníku sa nazývajú zásobník rámy. 174 00:08:03,980 --> 00:08:09,580 Pri volaní iné funkcie, povedal hlavný volá binárne vyhľadávacie funkcie, 175 00:08:09,580 --> 00:08:11,075 dáme ďalší rám na zásobníku. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Presnejšie povedané, budeme darovať kus pamäte na našich 178 00:08:17,320 --> 00:08:22,960 počítač ukladať binárne vyhľadávanie je miestna premenné a spustiť binárny 179 00:08:22,960 --> 00:08:24,150 Hľadanie kód. 180 00:08:24,150 --> 00:08:26,810 >> Tak nazývame binárne vyhľadávanie. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 V tomto kusu pamäti, ideme ukladať svoje lokálne premenné. 183 00:08:33,340 --> 00:08:35,270 Budeme ukladať svoje printf volaní. 184 00:08:35,270 --> 00:08:38,159 Nech sa stane čokoľvek, že funkcia je bude uložený priamo tam. 185 00:08:38,159 --> 00:08:40,350 Binárne vyhľadávanie je bude vykonávať. 186 00:08:40,350 --> 00:08:42,210 To sa chystá dokončiť spustenie. 187 00:08:42,210 --> 00:08:47,450 Čo je to slovo v jazyku C, ktorý označuje že funkcia by mala 188 00:08:47,450 --> 00:08:49,306 dokončiť jeho výkon? 189 00:08:49,306 --> 00:08:50,040 >> STUDENT: Návrat. 190 00:08:50,040 --> 00:08:50,870 >> JASON Hirschhorn: Návrat. 191 00:08:50,870 --> 00:08:53,230 Takže keď vidíte, príkaz return, funkčné konca 192 00:08:53,230 --> 00:08:54,350 keď to udrie to. 193 00:08:54,350 --> 00:08:56,740 Takže binárne vyhľadávanie zasiahne jeho návrat. 194 00:08:56,740 --> 00:09:01,360 Táto časť pamäte bude v podstate sa uvoľnilo. 195 00:09:01,360 --> 00:09:03,510 A hlavné pôjdu späť do výkonu. 196 00:09:03,510 --> 00:09:07,240 Takže hlavné sa zastaví tam, kde bol, volanie binárne vyhľadávanie, trochu návratovú hodnotu, 197 00:09:07,240 --> 00:09:08,700 a pokračovať v realizácii. 198 00:09:08,700 --> 00:09:10,840 Tento stack frame pôjde preč. 199 00:09:10,840 --> 00:09:14,810 >> Ak hovoríme rekurzívne funkciu, ktorá je funkcia, ktorá volá sama seba cez 200 00:09:14,810 --> 00:09:18,480 a viac, mohli by sme dostať - povedať, že sme urobil binárne hľadanie rekurzívne. 201 00:09:18,480 --> 00:09:21,520 Mohli by sme sa binárne vyhľadávacie verzia jedného, binárne vyhľadávanie dvaja, binárne vyhľadávanie 202 00:09:21,520 --> 00:09:24,090 tri, štyri binárne vyhľadávanie, binárne vyhľadávanie päť. 203 00:09:24,090 --> 00:09:27,950 A potom je to konečná binárne vyhľadávanie päť zasiahne základné veci, a zásobník 204 00:09:27,950 --> 00:09:31,010 rámy sa vrátiť späť a udržať zatváranie až sa dostaneme späť do hlavného. 205 00:09:31,010 --> 00:09:32,530 Môžeme ísť na rekurziu v trochu. 206 00:09:32,530 --> 00:09:35,530 Ale to všetko znamená, že ak ste volanie viac funkcií naraz, 207 00:09:35,530 --> 00:09:39,250 tam bude viac stack rámy na zásobníku. 208 00:09:39,250 --> 00:09:42,900 >> Haldy, na druhej strane, a to až tu, nie je pre funkcie, 209 00:09:42,900 --> 00:09:44,380 nie pre lokálne premenné. 210 00:09:44,380 --> 00:09:48,920 Je to pre dynamicky prideľované premenné. 211 00:09:48,920 --> 00:09:57,210 To sú premenné, ktoré môžu byť inicializovaný buď hlavné alebo 212 00:09:57,210 --> 00:09:58,640 funkcia, ktorá hlavné hovory. 213 00:09:58,640 --> 00:10:00,790 Kdekoľvek v kóde, ktoré môžu byť inicializované. 214 00:10:00,790 --> 00:10:04,360 A inicializovať dynamicky pridelená premenné. 215 00:10:04,360 --> 00:10:06,970 Aké funkcie v jazyku C máme používať? 216 00:10:06,970 --> 00:10:07,600 >> STUDENT: malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirschhorn: malloc. 218 00:10:09,240 --> 00:10:10,800 Zavoláte malloc. 219 00:10:10,800 --> 00:10:12,260 Získate priestor pamäte. 220 00:10:12,260 --> 00:10:15,020 A to je priestor pamäti je na hromadu. 221 00:10:15,020 --> 00:10:18,840 A to je priestor pamäti zostane tam, kým budete volať zadarmo. 222 00:10:18,840 --> 00:10:22,670 >> Takže dynamicky alokované premenné haldy bude existovať tak dlho, ako ty 223 00:10:22,670 --> 00:10:25,250 chcete, aby existovať, a nebudú odísť, kým explicitne 224 00:10:25,250 --> 00:10:26,760 povedzte im, nech idú preč. 225 00:10:26,760 --> 00:10:29,670 Môžete ich vytvoriť v jednej funkcii. 226 00:10:29,670 --> 00:10:31,930 Táto funkcia je zásobník rámček zmizne. 227 00:10:31,930 --> 00:10:35,490 Ale, že premenná bude naďalej existovať v hromadu, kým nie je oslobodený, 228 00:10:35,490 --> 00:10:39,650 potenciálne funkcií, ktorý sa nazýva binárne vyhľadávanie alebo čokoľvek iného. 229 00:10:39,650 --> 00:10:42,580 >> Takže tie haldy premenné zostať tam tak dlho, ako budete chcieť 230 00:10:42,580 --> 00:10:43,490 im, aby zostali tam. 231 00:10:43,490 --> 00:10:46,090 A oni sa sem dostal. 232 00:10:46,090 --> 00:10:47,450 A potom ďalší, kto sa dostane tam dal. 233 00:10:47,450 --> 00:10:50,210 Udržujú sa plní do, a oni zostať tam, kým sa volanie zadarmo. 234 00:10:50,210 --> 00:10:52,870 >> A v podstate, haldy a zásobníka, dostať sa Marcus otázku, 235 00:10:52,870 --> 00:10:54,500 rastie smerom k sebe navzájom. 236 00:10:54,500 --> 00:10:57,730 A ak sa dostanete do seba, ste spotrebovať všetku pamäť vo vašom 237 00:10:57,730 --> 00:11:01,330 počítač, a váš program bude prestať pretože nemáte žiadnu ďalšiu pamäť 238 00:11:01,330 --> 00:11:02,420 doľava na použitie. 239 00:11:02,420 --> 00:11:07,290 Medzi nimi existuje prípadne ďalšie veci. 240 00:11:07,290 --> 00:11:10,980 Ale pre rozsah tohto kurzu, vám Nemusíte sa obávať, že. 241 00:11:10,980 --> 00:11:12,020 >> Takže to bola odpoveď na vašu otázku. 242 00:11:12,020 --> 00:11:13,520 Nerobte si starosti. 243 00:11:13,520 --> 00:11:15,550 Ale to bola dlhá odpoveď. 244 00:11:15,550 --> 00:11:17,800 Všetko, čo potrebujete vedieť, je haldy a zásobníka bude - 245 00:11:17,800 --> 00:11:18,900 jeden začína v dolnej časti. 246 00:11:18,900 --> 00:11:19,570 Stack robí. 247 00:11:19,570 --> 00:11:20,790 Haldy je tam hore. 248 00:11:20,790 --> 00:11:21,990 Budú rásť bližšie k sebe. 249 00:11:21,990 --> 00:11:23,110 >> A ak sa dotknú, to je problém. 250 00:11:23,110 --> 00:11:24,500 Utiekol si z pamäte. 251 00:11:24,500 --> 00:11:28,760 Ale tiež, okrem vedieť, kde sú to, čo je uložené v oboch 252 00:11:28,760 --> 00:11:30,512 stack a heap. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Keď sa zrazí, je, že pretečeniu zásobníka? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorn: Keď sa zrazí, to nie je pretečeniu zásobníka. 256 00:11:35,670 --> 00:11:38,340 Pretečenie zásobníka je iná oblasť že môžeme ísť na, ak chcete. 257 00:11:38,340 --> 00:11:40,020 OK, vrátime sa k tomu za chvíľu. 258 00:11:40,020 --> 00:11:42,730 >> STUDENT: Aké je to slovo s názvom keď hit navzájom, 259 00:11:42,730 --> 00:11:44,450 stack a heap? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorn: Pre túto chvíľu, nemusíte obávať. 261 00:11:46,640 --> 00:11:47,750 Len viem - 262 00:11:47,750 --> 00:11:50,530 Ja odpoviem na túto otázku po triede. 263 00:11:50,530 --> 00:11:52,680 Ak sa dostanete do seba, si vybehol pamäti, pretože tam je viac 264 00:11:52,680 --> 00:11:53,330 priestor tam. 265 00:11:53,330 --> 00:11:55,450 >> STUDENT: Je nám ľúto, čo je chyba seg? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorn: Segment Porucha môže byť volaný k - 267 00:11:58,710 --> 00:12:02,240 záleží prečo volal seg chyba je. 268 00:12:02,240 --> 00:12:06,260 Niekedy, váš stack overflow, bude to povedať seg chyba ako chyba. 269 00:12:06,260 --> 00:12:08,180 >> STUDENT: Čo dereferencing null premenné? 270 00:12:08,180 --> 00:12:10,040 Je to chyba seg? 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirschhorn: Získavanie null pointer - 272 00:12:11,480 --> 00:12:17,850 OK, takže ak máte ukazovateľ, ktorý vám rovná null, ukazovatele, odvolanie, 273 00:12:17,850 --> 00:12:20,270 Memory adresy ich hodnoty. 274 00:12:20,270 --> 00:12:23,660 A nulový ukazovateľ je v podstate skladovanie 0, 0-teho 275 00:12:23,660 --> 00:12:26,670 riešenie v tejto premennej. 276 00:12:26,670 --> 00:12:30,010 Takže 0x, 0, 0, 0, 0, a tak ďalej. 277 00:12:30,010 --> 00:12:35,030 Že 0-teho adresu v pamäti, že to nie je v našom obrázku, je to tam 278 00:12:35,030 --> 00:12:38,800 niekde, že je vyhradená pre počítač. 279 00:12:38,800 --> 00:12:40,130 Sme nesmie sa ho dotknúť. 280 00:12:40,130 --> 00:12:44,680 >> Takže keď váš program je realizovať, ak niečo, čo sa snaží ísť do pamäti 281 00:12:44,680 --> 00:12:48,990 adresa 0, vie, že že je prázdna hodnota. 282 00:12:48,990 --> 00:12:50,820 Vie, nič by tam mala byť. 283 00:12:50,820 --> 00:12:53,420 Takže ak sa pokúsite a použiť niečo, čo tam a liečiť niečo ako tam, alebo 284 00:12:53,420 --> 00:12:58,355 snažia sa prejsť do tohto umiestnenia, ste bude mať poruchu seg alebo chybu. 285 00:12:58,355 --> 00:13:00,520 Znamená to, že odpoveď na vašu otázku? 286 00:13:00,520 --> 00:13:03,170 >> A teraz pôjdeme naspäť k pretečeniu zásobníka. 287 00:13:03,170 --> 00:13:09,560 Veci v zásobníku, ako vy majú nevidel, v - poďme nakresliť blízko 288 00:13:09,560 --> 00:13:11,966 zo zásobníka rámu. 289 00:13:11,966 --> 00:13:15,050 Každý môže vidieť, že? 290 00:13:15,050 --> 00:13:16,650 Takže máme rámček zásobníka. 291 00:13:16,650 --> 00:13:23,260 Šetríme pole sa ako miestny premenná v tejto funkcii. 292 00:13:23,260 --> 00:13:29,510 Tak, že naša rada má päť miest. 293 00:13:29,510 --> 00:13:33,230 Všetkých päť z nich sa uloží v tomto zásobníku ráme. 294 00:13:33,230 --> 00:13:37,540 >> Ak začneme písať za hranice tohto poľa - 295 00:13:37,540 --> 00:13:43,990 takže ak začneme písať do, povedzme, že je 0. 296 00:13:43,990 --> 00:13:46,800 Tí, ktorí sú päť indexy naše pole. 297 00:13:46,800 --> 00:13:50,980 Ak začneme písať do indexu 5, ktorý nemáme, keď máme 298 00:13:50,980 --> 00:13:55,900 pole o veľkosti 5, začneme písať do index 6, 7, 8, 9, môžeme získať Stack 299 00:13:55,900 --> 00:13:57,960 Pretečeniu chyba. 300 00:13:57,960 --> 00:14:00,510 >> Všeobecne platí, že to nie je - 301 00:14:00,510 --> 00:14:04,910 budete pravdepodobne dostanete do ťažkostí ak pôjdete cez jeden. 302 00:14:04,910 --> 00:14:08,640 Ale všeobecne, dostanete do najväčšie ťažkosti, pokiaľ idete nad tým veľa 303 00:14:08,640 --> 00:14:12,770 a ísť tak ďaleko, cez ktorý môžete napísať na spiatočnú adresu, ktorá 304 00:14:12,770 --> 00:14:16,080 funkcie, ktoré sa nachádza na Dno zásobníka rámu. 305 00:14:16,080 --> 00:14:16,520 >> Vzhľadom k tomu, že jo? 306 00:14:16,520 --> 00:14:17,670 Vy - v - Ospravedlňujem sa. 307 00:14:17,670 --> 00:14:18,550 Nie ", pretože v poriadku." 308 00:14:18,550 --> 00:14:20,470 >> V zásobníku ráme, máte vaše lokálne premenné. 309 00:14:20,470 --> 00:14:27,090 Na samom dne zásobníka Rám je spiatočná adresa. 310 00:14:27,090 --> 00:14:28,790 To je miesto, kde funkcia ide, keď je po všetkom. 311 00:14:28,790 --> 00:14:33,750 A ak ste prepísať, že návratnosť adresa, potom keď to stack frame, 312 00:14:33,750 --> 00:14:36,680 keď idete cez zásobníka rám a realizáciu každého riadku, ty si 313 00:14:36,680 --> 00:14:40,350 ísť do svojho nového spiatočnú adresu že je tam napísané miesto 314 00:14:40,350 --> 00:14:40,910 Skutočný jeden. 315 00:14:40,910 --> 00:14:45,050 A to je, ako sme videli Niektoré narušenia bezpečnosti 316 00:14:45,050 --> 00:14:46,780 sa môže stať s počítačmi. 317 00:14:46,780 --> 00:14:52,760 >> Takže pretečeniu zásobníka, v krátkosti, ak je prepísať časť v zásobníku 318 00:14:52,760 --> 00:14:55,440 máš používať, miestne Premenná ste mal použiť, a 319 00:14:55,440 --> 00:14:58,070 najmä pri spustení prepisovaní dôležité veci, ako je 320 00:14:58,070 --> 00:14:59,100 spiatočnú adresu. 321 00:14:59,100 --> 00:15:00,090 A to je miesto, kde budete mať chybu. 322 00:15:00,090 --> 00:15:03,980 Alebo snáď dokonca by ste mohli začať dokonca aj zápis do - 323 00:15:03,980 --> 00:15:05,370 povedať, binárne vyhľadávanie bolo priamo nad hlavnou. 324 00:15:05,370 --> 00:15:07,790 Ak prepísal veľa, vám mohol napísať do hlavnej. 325 00:15:07,790 --> 00:15:10,230 Ale všeobecne, dostanete chybu pred potom, pretože vie, že počítač 326 00:15:10,230 --> 00:15:12,270 robíte niečo, čo vás nemali robiť. 327 00:15:12,270 --> 00:15:12,560 Jo. 328 00:15:12,560 --> 00:15:13,910 >> STUDENT: Aký je rozdiel medzi pretečeniu zásobníka 329 00:15:13,910 --> 00:15:16,940 a buffer overflow? 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirschhorn: Buffer overflow je všeobecnejší typ 331 00:15:19,420 --> 00:15:20,395 to, čo som práve opísal. 332 00:15:20,395 --> 00:15:22,610 >> Žiak: Takže pretečeniu zásobníka je Príkladom pretečeniu vyrovnávacej pamäti. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorn: Presne tak. 334 00:15:23,420 --> 00:15:28,700 To je pole si môžeme predstaviť ako vyrovnávacej pamäti, priestor pre veci, ísť dovnútra 335 00:15:28,700 --> 00:15:30,600 To je pretečeniu bufferu. 336 00:15:30,600 --> 00:15:33,210 Mohli by sme mať pretečenie bufferu v. 337 00:15:33,210 --> 00:15:36,870 Ak by došlo k vyrovnávacej pamäte, ktorá sa často je pole halda, a my 338 00:15:36,870 --> 00:15:40,600 prepísal tie hranice, potom by sme majú pretečeniu bufferu v. 339 00:15:40,600 --> 00:15:44,870 >> A nad rámec tohto kurzu, oni sú detekované trochu inak. 340 00:15:44,870 --> 00:15:48,040 Kompilátor má zvláštnu spôsoby detekcie každého. 341 00:15:48,040 --> 00:15:50,660 Ale buffer overflow je všeobecnejší typ, čo som popísal, 342 00:15:50,660 --> 00:15:54,090 ktorý bol pretečeniu bufferu. 343 00:15:54,090 --> 00:15:56,240 Vedeli, že odpoveď na vašu otázku? 344 00:15:56,240 --> 00:15:57,910 Sladké. 345 00:15:57,910 --> 00:16:01,850 >> Boli tam nejaké ďalšie otázky súvisiace na zásobníku alebo halde? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Jo. 348 00:16:05,510 --> 00:16:08,220 >> STUDENT: Viem, že máte na voľné reťazca pretože sú v halde 349 00:16:08,220 --> 00:16:09,305 a nechcete, aby k úniku pamäte. 350 00:16:09,305 --> 00:16:12,240 Ale máte oslobodiť globálne premenné a tak podobne? 351 00:16:12,240 --> 00:16:14,335 Alebo sú automaticky oslobodení? 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirschhorn: Dobrá otázka. 353 00:16:15,700 --> 00:16:22,340 Takže v CS50.H, tvoríme túto vec pre vás volal reťazec. 354 00:16:22,340 --> 00:16:23,800 Reťazec je naozaj to, čo? 355 00:16:23,800 --> 00:16:24,810 >> STUDENT: Char hviezda. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorn: char hviezda, ukazovateľ na znak, ukazovateľ na 357 00:16:29,180 --> 00:16:30,650 pole znakov. 358 00:16:30,650 --> 00:16:32,210 To je to, čo je reťazec. 359 00:16:32,210 --> 00:16:36,050 Takže ho musíme oslobodiť, pretože GetString, ktorý sme použili veľa - 360 00:16:36,050 --> 00:16:38,370 Názov reťazca sa rovná GetString - 361 00:16:38,370 --> 00:16:43,560 že mallocs pre nás nejakú spomienku na haldy a vráti ukazovateľ na 362 00:16:43,560 --> 00:16:47,230 Prvý znak, ktorý string, char hviezda. 363 00:16:47,230 --> 00:16:52,760 >> Takže zdanlivo, ak ste neboli písanie zadarmo založiť na niektorý z vašich reťazcov 364 00:16:52,760 --> 00:16:55,600 že ste volal tak ďaleko, budete mať uniká časť pamäte. 365 00:16:55,600 --> 00:16:57,430 Samozrejme sme nehovorili o to, aby nikto nedostal do 366 00:16:57,430 --> 00:16:58,520 problém pre to robí. 367 00:16:58,520 --> 00:16:59,980 Ale do budúcnosti, áno. 368 00:16:59,980 --> 00:17:03,990 Ak voláte GetString, že ste mallocing nejaký priestor na halde. 369 00:17:03,990 --> 00:17:07,640 A ak nechcete volať zadarmo neskôr, že reťazec, máte pretečeniu pamäte. 370 00:17:07,640 --> 00:17:09,440 To je odpoveď na vašu otázku? 371 00:17:09,440 --> 00:17:10,606 >> Jo 372 00:17:10,606 --> 00:17:15,020 >> Žiak: Takže k tomu, že budeme používať zadarmo priamo pred návratom? 373 00:17:15,020 --> 00:17:18,510 Rovnako ako v rámci, myslím, že v prípade, hovoríme, ako, int main, v rámci 374 00:17:18,510 --> 00:17:24,410 Rozsah kódu, ktorý je v tých zložené zátvorky, priamo pred - 375 00:17:24,410 --> 00:17:26,140 Viete, kde by ste zvyčajne dať návrate. 376 00:17:26,140 --> 00:17:27,950 Myslíte si, dať voľný pred tým? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorn: Takže si môžete dať zadarmo všade tam, kde chcete dať zadarmo. 378 00:17:31,000 --> 00:17:33,810 Pretože sa jedná o dynamicky prideľované premenné, pretože môžu 379 00:17:33,810 --> 00:17:39,170 žiť nad rámec najmä funkcie, ak budete volať malloc v 380 00:17:39,170 --> 00:17:44,140 samostatné funkcie, napríklad, GetString, môžete volať zadarmo do hlavnej. 381 00:17:44,140 --> 00:17:46,050 Nemusíte to hovoriť v konkrétnej funkcii 382 00:17:46,050 --> 00:17:47,570 kde je malloc nazýva. 383 00:17:47,570 --> 00:17:50,340 Ale vy potrebujete, aby to nazvať pred hlavnými vráti. 384 00:17:50,340 --> 00:17:51,120 >> A to naozaj záleží. 385 00:17:51,120 --> 00:17:54,960 Záleží na tom, prečo ste malloced, že priestor na prvom mieste. 386 00:17:54,960 --> 00:17:57,320 Niektorí ľudia budú volať oslobodiť celkom rýchlo. 387 00:17:57,320 --> 00:17:59,220 Niektorí ľudia budú volať zadarmo až do koniec svojho programu. 388 00:17:59,220 --> 00:18:00,660 A oni si prejsť a voľný všetko. 389 00:18:00,660 --> 00:18:03,597 Záleží na tom, prečo si volala malloc. 390 00:18:03,597 --> 00:18:11,270 >> STUDENT: A čo by ste povedal ak ste volali použitie GetString? 391 00:18:11,270 --> 00:18:13,320 Človek by povedal zadarmo, čo? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorn: Tak syntaxe zadarmo je jednoducho voľný, otvorené zátvorka, v blízkosti 393 00:18:20,040 --> 00:18:22,130 zátvorka, a názov ukazovatele. 394 00:18:22,130 --> 00:18:26,410 Takže ak napíšete názov reťazca rovná GetString, dáte meno tu. 395 00:18:26,410 --> 00:18:27,760 To je názov ukazovateľa. 396 00:18:27,760 --> 00:18:30,570 A vie, že k uvoľneniu, že pamäť. 397 00:18:30,570 --> 00:18:33,920 >> Žiak: Takže, keď sa uvoľní, že pamäť, ukazovateľ ukazuje stále na tomto mieste 398 00:18:33,920 --> 00:18:34,970 v pamäti? 399 00:18:34,970 --> 00:18:39,020 Alebo je ukazovateľ taktiež zbavená adresa, na ktorú odkazuje. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorn: Mali by sme to skúsiť. 401 00:18:40,290 --> 00:18:41,430 Mali by sme kód, ktorý. 402 00:18:41,430 --> 00:18:43,880 Poďme späť, keď sa dostaneme do kódovanie, a poďme kód, ktorý. 403 00:18:43,880 --> 00:18:46,000 A ak chcete zistiť odpoveď na to, že môžete tiež kód, ktorý 404 00:18:46,000 --> 00:18:46,690 do tej doby. 405 00:18:46,690 --> 00:18:49,100 Ale to je veľká otázka. 406 00:18:49,100 --> 00:18:53,480 >> STUDENT: Je možné, aby zadarmo niečo príliš skoro? 407 00:18:53,480 --> 00:18:58,530 Takže si ešte potrebovať pre váš program, a oslobodil túto pamäť? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorn: Áno. 409 00:18:59,200 --> 00:19:03,020 To je možné, ak sa niečo zadarmo a potom ju znova použiť, budete 410 00:19:03,020 --> 00:19:06,890 naraziť na chybu. 411 00:19:06,890 --> 00:19:10,810 Ale to je na vás, pretože ste oslobodení niečo, a potom zavolal neskôr. 412 00:19:10,810 --> 00:19:13,940 Takže to bol programátorský chyba. 413 00:19:13,940 --> 00:19:14,780 Ale áno. 414 00:19:14,780 --> 00:19:17,760 Dalo by sa napísať, že. 415 00:19:17,760 --> 00:19:19,240 >> Nejaké ďalšie otázky týkajúce sa - 416 00:19:19,240 --> 00:19:19,760 Áno. 417 00:19:19,760 --> 00:19:22,820 >> Žiak: Takže ak ste mali len uvoľniť, všeobecne pred 418 00:19:22,820 --> 00:19:25,490 program skončí, či to znamená, Program končí a nechcete ho uvoľniť, 419 00:19:25,490 --> 00:19:27,580 že pamäť je stále pridelené? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorn: Ak je váš program končí a zabudnete uvoľniť niečo, potom 421 00:19:31,330 --> 00:19:34,390 že pamäť bola pridelená v priebehu životnosť vášho programu. 422 00:19:34,390 --> 00:19:37,670 Keď váš program ukončí úplne, že pamäť nebude 423 00:19:37,670 --> 00:19:39,490 zostať tam navždy. 424 00:19:39,490 --> 00:19:42,080 Počítač je dosť chytrý, aby vedel , Že pri ukončení programu, je 425 00:19:42,080 --> 00:19:46,440 by sa zbaviť všetky pamäti, že bola spojená s týmto programom. 426 00:19:46,440 --> 00:19:51,240 >> Avšak, tam sú nástroje, ktoré môžete spustiť o programe pre detekciu v prípade, kedy 427 00:19:51,240 --> 00:19:54,720 Program skončil, si zabudol uvoľniť nejakú pamäť. 428 00:19:54,720 --> 00:19:57,960 A ďalší problém, v miestach, kde budete používať malloc a použitie 429 00:19:57,960 --> 00:20:02,610 ukazovatele, budete beží to program na vašom programe, aby zistili, či, 430 00:20:02,610 --> 00:20:06,530 keď hlavný vráti, ste mali nejaké veci, ktoré boli ponechané unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Takže to nebude zostať malloced navždy vo vašom počítači. 432 00:20:09,130 --> 00:20:11,720 To by bolo nehospodárne, pretože veľmi rýchlo, počítače 433 00:20:11,720 --> 00:20:12,960 by k vyčerpaniu pamäte. 434 00:20:12,960 --> 00:20:16,450 Ale v prípade, že beží až do konca vášho programovanie a oni nie sú oslobodení a vaše 435 00:20:16,450 --> 00:20:20,260 Program ukončí, je to stále problém že tento nástroj vám pomôže riešiť. 436 00:20:20,260 --> 00:20:21,520 >> STUDENT: Je to Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorn: Je to volal Valgrind. 438 00:20:22,910 --> 00:20:23,520 A budete - 439 00:20:23,520 --> 00:20:25,780 >> STUDENT: Ale my nemusíme vedieť že k testu, ale? 440 00:20:25,780 --> 00:20:27,600 Myslím, že to bol hovoril o trochu v prednáške. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorn: Tak Valgrind je názov tohto nástroja. 442 00:20:33,600 --> 00:20:37,180 Vedieť, čo to robí, je dosť pre kvíz. 443 00:20:37,180 --> 00:20:40,200 Ale vy ste ho nevyužili ešte na vašom problém nastaviť, pretože sme nemali 444 00:20:40,200 --> 00:20:43,520 Problém set, ktorý sa výslovne zaoberal s malloc alebo pomocou malloc. 445 00:20:43,520 --> 00:20:45,330 Takže ste nepoužili ešte Valgrind. 446 00:20:45,330 --> 00:20:47,760 Ale budete používať skôr skôr ako neskôr. 447 00:20:47,760 --> 00:20:48,710 >> STUDENT: Dokážete opakovať čo Valgrind je? 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirschhorn: Je nám ľúto? 449 00:20:49,190 --> 00:20:51,240 >> STUDENT: Dokážete opakovať to, čo Účelom Valgring je? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorn: Valgrind je názov - 451 00:20:53,100 --> 00:20:59,890 ako GDB pomáha pri ladení programu, Valgrind vám pomôže zistiť, či 452 00:20:59,890 --> 00:21:03,210 veci, ktoré neboli uvoľnené keď váš program ukončí. 453 00:21:03,210 --> 00:21:05,110 Takže budete spustiť na vašom programe. 454 00:21:05,110 --> 00:21:09,230 A váš program ukončí, a to poviem Váš program s názvom malloc to veľa 455 00:21:09,230 --> 00:21:13,670 krát k tomuto počtu bytov, a vy iba tzv voľný tento mnohokrát. 456 00:21:13,670 --> 00:21:16,520 A tak si odišiel týchto veľa bajtov bez toho, aby bol oslobodený. 457 00:21:16,520 --> 00:21:18,050 Alebo to poviem, že ste oslobodení všetko. 458 00:21:18,050 --> 00:21:19,070 Dobrá práca. 459 00:21:19,070 --> 00:21:19,480 >> STUDENT: OK. 460 00:21:19,480 --> 00:21:21,060 A volá sa Valgring? 461 00:21:21,060 --> 00:21:24,940 >> JASON Hirschhorn: V - L-G-R-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> STUDENT: otázka o ukazovatele. 463 00:21:25,970 --> 00:21:30,080 Takže povedať, že ste n hviezda x sa rovná niečo. 464 00:21:30,080 --> 00:21:33,330 To sa rovná, čo ste uvedenie tam, je to, že to, čo je dať dovnútra 465 00:21:33,330 --> 00:21:36,120 čo x smeruje k, alebo ukazovateľ x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorn: Môžeš zopakovať otázku? 467 00:21:37,690 --> 00:21:39,340 Môžeme kresliť, keď to hovoríte? 468 00:21:39,340 --> 00:21:42,710 >> STUDENT: V teste, v skutočnosti, ten, ktorý nám poslal, to bolo ako, char 469 00:21:42,710 --> 00:21:46,520 hviezda pravda rovná CS50 skaly, nie? 470 00:21:46,520 --> 00:21:52,190 Takže to znamená, že toto CS50 skaly je to, čo je pravda ukazuje na? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorn: Takže hovoríte o char hviezdy v reťazci, ako 472 00:21:55,810 --> 00:21:56,460 že funguje? 473 00:21:56,460 --> 00:21:56,890 Jo. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Poďme nakresliť to tu. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE konverzácie] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorn: Takže táto premenná bude typu char hviezdy. 478 00:22:11,130 --> 00:22:14,580 Aký veľký je variabilný z typu char hviezdy? 479 00:22:14,580 --> 00:22:15,510 Koľko bajtov? 480 00:22:15,510 --> 00:22:16,450 >> ŠTUDENTI: Štyri. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorn: Je to štyri bajty. 482 00:22:18,210 --> 00:22:21,420 Koľko práva je variabilný z typu int hviezdy? 483 00:22:21,420 --> 00:22:22,210 >> ŠTUDENTI: Štyri. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorn: štyri bajty. 485 00:22:24,910 --> 00:22:28,280 Ak je to ukazovateľ, potom je vždy štyri byty, pretože ukazovatele, ich 486 00:22:28,280 --> 00:22:30,070 hodnota je adresa pamäti. 487 00:22:30,070 --> 00:22:35,160 A pamäťové adresy na CS50 Zariadenia sú štyri bajty dlhé. 488 00:22:35,160 --> 00:22:42,900 Takže keď hovoríme GetString, alebo keď povedzme, jmeno_string rovná, a potom v 489 00:22:42,900 --> 00:22:46,140 dvojité úvodzovky dať reťazec, kladieme - 490 00:22:46,140 --> 00:22:46,920 dobre, že je to trochu inak. 491 00:22:46,920 --> 00:22:48,630 Budeme sa GetString ako príklad. 492 00:22:48,630 --> 00:22:52,150 Alebo char hviezda niečo rovná reťazec. 493 00:22:52,150 --> 00:22:54,360 Ospravedlňujeme sa, daj mi príklad že ste si prečítali? 494 00:22:54,360 --> 00:22:57,590 >> STUDENT: char hviezda pravda rovná "CS50 skaly" v úvodzovkách. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorn: Tak to hviezda, to zavoláme túto premennú x pre naše 496 00:23:02,260 --> 00:23:04,060 všeobecné účely. 497 00:23:04,060 --> 00:23:05,970 Vytvorili sme premennú s názvom x. 498 00:23:05,970 --> 00:23:07,610 Je to typ char hviezda. 499 00:23:07,610 --> 00:23:10,950 Je to ukazovateľ na rade znakov. 500 00:23:10,950 --> 00:23:12,200 Tak tu - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Tak to je, ako to by pracujú v pamäti. 503 00:23:25,890 --> 00:23:27,410 To by uloženie pamäťovej adresu. 504 00:23:27,410 --> 00:23:31,770 To by neskladujte pamäťovú adresu prvý znak v poli. 505 00:23:31,770 --> 00:23:33,830 A potom, keď ste postupovali ukazovateľ, by ste 506 00:23:33,830 --> 00:23:35,200 získať prvý znak. 507 00:23:35,200 --> 00:23:38,780 >> A ak čítate túto vec ako reťazec, počítač je šikovný 508 00:23:38,780 --> 00:23:42,930 stačí vedieť, prečítajte si celú túto vec až sa dostane k odporu 0.. 509 00:23:42,930 --> 00:23:45,530 Ale ak ste to čítal znak na čas, takže ste iterácie 510 00:23:45,530 --> 00:23:49,910 Tento reťazec, potom budete len čítať znak v čase, kým sa nedostanete na 511 00:23:49,910 --> 00:23:50,850 spätné lomítko 0. 512 00:23:50,850 --> 00:23:52,335 To nemusí zodpovedať vašej otázka, hoci. 513 00:23:52,335 --> 00:23:55,610 >> STUDENT: Jo, ale nemáte malloced, že priestor 514 00:23:55,610 --> 00:23:58,400 ale pre tento ukazovateľ. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorn: Takže si nie som celkom istý, presne to, čo hľadáte na, 516 00:24:02,510 --> 00:24:03,640 pretože som nemal robiť, že kvíz. 517 00:24:03,640 --> 00:24:06,370 To mal byť užitočné zdrojov z iného TF. 518 00:24:06,370 --> 00:24:11,380 Ak vytvárate reťazec na zásobník alebo ako lokálne premenné, bude to 519 00:24:11,380 --> 00:24:16,920 byť len rad poplatkov, skôr než všeobecne char hviezda ukazujúce na 520 00:24:16,920 --> 00:24:18,600 iný reťazec. 521 00:24:18,600 --> 00:24:20,550 Ale ja neviem. 522 00:24:20,550 --> 00:24:25,065 To by mohlo byť ukazovateľ na ďalšie reťazec na zásobníku rovnako. 523 00:24:25,065 --> 00:24:27,240 Jo. 524 00:24:27,240 --> 00:24:31,116 >> STUDENT: Ja viem, že je potrebné, aby alokovať pamäť v prípade, že ukazovateľ je 525 00:24:31,116 --> 00:24:33,360 ako sa deklarované vnútri iné funkcie. 526 00:24:33,360 --> 00:24:36,740 Potrebujete si urobiť to isté, ak je to boli vyhlásené vo vnútri hlavnej, 527 00:24:36,740 --> 00:24:39,570 budete používať vnútri hlavnej? 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirschhorn: Takže áno. 529 00:24:43,590 --> 00:24:46,670 Môžete deklarovať ukazovateľ na akýkoľvek adresa pamäte v pamäti. 530 00:24:46,670 --> 00:24:51,440 To môže byť pamäť adresa miestnej variabilný, aj keď často, 531 00:24:51,440 --> 00:24:55,760 ľudia nemajú vyhlásiť adresy pamäti do lokálnych premenných, pretože idú 532 00:24:55,760 --> 00:24:59,890 preč raz, že funkcia vracia, čo je dôvod, prečo sme sa všeobecne malloc veci. 533 00:24:59,890 --> 00:25:04,630 Ale áno, môžete deklarovať ukazovateľ iné lokálne premenné. 534 00:25:04,630 --> 00:25:06,360 Je to len všeobecne nerobí. 535 00:25:06,360 --> 00:25:09,480 Ale môžem sa na to pozrieť špecifická vec, ktorú po hodine. 536 00:25:09,480 --> 00:25:10,650 Jo. 537 00:25:10,650 --> 00:25:12,350 >> STUDENT: Myslím, že to je niečo čo je žiadaný. 538 00:25:12,350 --> 00:25:16,930 Zdá sa to divné, byť inicializácia nie ako ukazovateľ 539 00:25:16,930 --> 00:25:20,760 adresu, ale ako to, čo Vyzerá to, že hodnoty. 540 00:25:20,760 --> 00:25:25,970 Vyzerá to, že CS50 je to, čo je vo vnútri to je ukázal a 541 00:25:25,970 --> 00:25:28,820 nie je skutočná adresa, nie? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorn: Tak to je nie je tento prípad, hoci. 543 00:25:30,520 --> 00:25:32,470 To nie je to, čo sa deje. 544 00:25:32,470 --> 00:25:35,910 Keď deklarujete char hviezdu, to je adresa pamäti. 545 00:25:35,910 --> 00:25:38,860 Ukazovatele sú všetky pamäťové adresy ukazuje na niečo iné. 546 00:25:38,860 --> 00:25:41,480 To je niečo iné, môže byť na stack, ale takmer vždy je na 547 00:25:41,480 --> 00:25:43,440 haldy v spôsobe, akým budeme vidieť skôr. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Ale jmeno_string rovná dvojité úvodzovky "GetString," môžeme vidieť, že aj my 550 00:25:53,500 --> 00:25:55,010 môžete prehliadnuť, že aj kód, ktorý. 551 00:25:55,010 --> 00:26:01,190 GetString reťazec nie je uložený v že premenná, alebo čokoľvek reťazec 552 00:26:01,190 --> 00:26:04,580 názov nie ukladaný v tom, že variabilný, pretože to nie je ako 553 00:26:04,580 --> 00:26:06,070 ukazovatele pracovať. 554 00:26:06,070 --> 00:26:06,770 Má to zmysel? 555 00:26:06,770 --> 00:26:07,170 >> STUDENT: Jo. 556 00:26:07,170 --> 00:26:08,570 >> JASON Hirschhorn: OK. 557 00:26:08,570 --> 00:26:11,690 Dúfajme, že to nie je mätúce pre každého. 558 00:26:11,690 --> 00:26:15,732 Ale keby to bolo, môžeme sa na to pozrieť znova vo chvíli, pretože sme vlastne deje 559 00:26:15,732 --> 00:26:19,240 kódovať niečo, čo bude dúfajme, prácu s reťazcami a pomôže vám cítiť sa 560 00:26:19,240 --> 00:26:22,170 viac pohodlne s nimi. 561 00:26:22,170 --> 00:26:24,869 >> Akékoľvek ďalšie otázky týkajúce sa týchto témy a ďalšie témy, ktorá 562 00:26:24,869 --> 00:26:26,119 Dám späť? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 A - 565 00:26:34,840 --> 00:26:36,310 práve teraz. 566 00:26:36,310 --> 00:26:37,630 Áno, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Tak toto je absolútne nesúvisí, ale nemôžeme jednoducho ísť cez 568 00:26:39,860 --> 00:26:42,760 veľmi rýchlo, čo potrebujete vedieť o rozdiele medzi 32 a 569 00:26:42,760 --> 00:26:46,345 64-bit stroj? 570 00:26:46,345 --> 00:26:47,740 >> JASON Hirschhorn: Áno. 571 00:26:47,740 --> 00:26:52,111 Takže 32 bitov je, koľko bajtov? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Je to štyri bajty. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorn: Je to štyri bajty. 574 00:26:54,360 --> 00:26:58,420 A 64 bitov je, koľko bajtov? 575 00:26:58,420 --> 00:26:59,112 >> STUDENT: Osem. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorn: Osem bajtov. 577 00:27:00,610 --> 00:27:03,980 Takže znovu, osem bitov je jeden bajt. 578 00:27:03,980 --> 00:27:08,340 Váš CS50 spotrebič je 32-bitový stroj. 579 00:27:08,340 --> 00:27:13,650 Takže adresy pamäte sú štyri bajty dlhé. 580 00:27:13,650 --> 00:27:17,460 K dispozícii sú 2 až 32 adresy pamäti. 581 00:27:17,460 --> 00:27:21,310 0-2 až 32 mínus 1. 582 00:27:21,310 --> 00:27:27,630 A ja nie som pozitívny, ale to je Pravdepodobne rozsah toho, čo budete potrebovať, aby 583 00:27:27,630 --> 00:27:35,230 vedieť, pre 32-bitové stroje, ktoré pamäť adresy sú opäť štyri bajtov, 584 00:27:35,230 --> 00:27:39,620 a to je maximálna suma, pamäťových adries. 585 00:27:39,620 --> 00:27:41,680 >> Tiež, dátové typy - 586 00:27:41,680 --> 00:27:45,020 to by mohlo byť niečo ako dobre, že to stojí za zmienku. 587 00:27:45,020 --> 00:27:49,610 Veľkosť dátového typu závisí na stroj, s ktorým pracujete. 588 00:27:49,610 --> 00:27:56,760 Takže char, znak, je to, ako počtu bytov na našom CS50 zariadení? 589 00:27:56,760 --> 00:27:57,980 Jeden byte. 590 00:27:57,980 --> 00:28:02,310 A to je vlastne jeden bajt ako aj na 64-bitovom počítači. 591 00:28:02,310 --> 00:28:05,920 >> A väčšina dátové typy sú rovnaké číslo z bytov na oboch strojoch. 592 00:28:05,920 --> 00:28:11,620 Ale niektoré typy dát sa bude líšiť na oboch strojoch. 593 00:28:11,620 --> 00:28:14,590 Tak, že by sa mohli Jediná vec, ktorú potrebujete vedieť. 594 00:28:14,590 --> 00:28:16,710 >> Ale aj to, že si myslím, je za hranicami - 595 00:28:16,710 --> 00:28:20,990 Som si takmer istá, keď sa pozriete späť na staré kvízy, hovorí, prevziať za 596 00:28:20,990 --> 00:28:24,090 kódovanie problémy, ktoré používate 32-bitový stroj. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Ale tam sú, ísť spolu s tým v prípade, že máte záujem, tu sú 599 00:28:30,620 --> 00:28:35,920 dátové typy, ktoré sú rovnaké veľkosť na všetkých strojoch. 600 00:28:35,920 --> 00:28:42,670 >> Ak ste videli niečo také uint32_t, môže alebo môžu 601 00:28:42,670 --> 00:28:43,260 Nie je vidieť, že. 602 00:28:43,260 --> 00:28:44,290 To je typ dát. 603 00:28:44,290 --> 00:28:47,570 To sa hovorí, byť 32 bitov bez ohľadu na čo stroj je to na. 604 00:28:47,570 --> 00:28:50,350 Takže keď ľudia píšu prenosné Kód, že pravdepodobne nebude používať ints. 605 00:28:50,350 --> 00:28:53,260 Budú namiesto toho použiť tieto ďalšie údaje typy, ktoré vedia, bude rovnaký 606 00:28:53,260 --> 00:28:54,780 veľkosť na každom stroji. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> Madhu: Mal som otázku Proces kompilácie. 610 00:29:00,150 --> 00:29:04,110 Takže ak píšete program, ktorý používa knižnica ako CS50, alebo tak niečo 611 00:29:04,110 --> 00:29:06,840 rovnako ako to, že viem, že knižnica je, v určitom okamihu, bude 612 00:29:06,840 --> 00:29:08,590 zostavené a spojené palcov 613 00:29:08,590 --> 00:29:13,380 Ale ako veľmi sa to stane počas zostavenie vášho programu? 614 00:29:13,380 --> 00:29:15,880 Aká časť tejto knižnice procesu nastane, keď ste 615 00:29:15,880 --> 00:29:18,560 zostavovaní vlastného programu? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorn: Tak poďme na všeobecne kroky tohto procesu. 617 00:29:24,020 --> 00:29:26,280 Môžete napísať. C súboru. 618 00:29:26,280 --> 00:29:33,530 Vo svojej. C súboru, # include svoj knižnice záhlavie, napríklad, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Čo znamená, že ostrý patrí linka urobiť, aby váš program? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Dodáva prototypy funkcie z hlavičky 622 00:29:43,350 --> 00:29:45,120 súborov v knižniciach. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorn: Presne tak. 624 00:29:45,600 --> 00:29:49,870 Dodáva týchto funkčných prototypov do svojho kódu. 625 00:29:49,870 --> 00:29:55,230 Takže ak je váš kód je zostavený v včasné štádia, kompilátor vie, 626 00:29:55,230 --> 00:29:59,250 že tieto funkcie skutočne existujú, a že niekde boli definované. 627 00:29:59,250 --> 00:30:02,460 K. H súbory nezahŕňajú definície týchto funkcií, alebo ako 628 00:30:02,460 --> 00:30:03,950 skutočne pracujú. 629 00:30:03,950 --> 00:30:07,960 Cs50.h práve obsahuje niečo, čo sa hovorí, GetString je skutočná vec, ktorá 630 00:30:07,960 --> 00:30:09,270 sa môže stať. 631 00:30:09,270 --> 00:30:14,240 A standardio.h hovorí printf je skutočná vec, ktorá sa môže stať. 632 00:30:14,240 --> 00:30:23,190 >> Takže váš jazyk C s tým. Záhlavie súbor sa premenil v niektorých 633 00:30:23,190 --> 00:30:27,750 strojovo čitateľný kód, ktorý sa nakoniec dostane sa obrátil na binárne 634 00:30:27,750 --> 00:30:30,030 kód 0 a 1 je. 635 00:30:30,030 --> 00:30:33,590 A to je kód, ktorý nakoniec dostane popravený. 636 00:30:33,590 --> 00:30:38,550 -L CS50 linky - napríklad, keď píšete zvonenie - 637 00:30:38,550 --> 00:30:41,830 a potom sú-l CS50, píšete, že palcov 638 00:30:41,830 --> 00:30:42,180 A uvidíte, že. 639 00:30:42,180 --> 00:30:43,890 Keď napíšete robiť, budete si musieť vybrať pozri tento riadok tu. 640 00:30:43,890 --> 00:30:47,740 A uvidíme, že vo chvíli, keď my kód alebo neskôr, keď sme kódu. 641 00:30:47,740 --> 00:30:50,390 >> Ale to-l CS50 linka robí niečo trochu iný, než 642 00:30:50,390 --> 00:30:52,440 # Include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Čo to-l CS50 linka robiť? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Chcem povedať, že spája Knižnica pre funkciu 646 00:31:00,310 --> 00:31:02,710 volanie, ako Õ. súborov. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorn: Takže veľmi blízko, ak nie spot-on. 648 00:31:08,200 --> 00:31:16,220 -L CS50 má binárny súbor a spája ju s binárnym súboru. 649 00:31:16,220 --> 00:31:21,410 Takže cs50.h, že to nemá zmysel otáčania cs50.h z jazyka C v sústave binárne každý 650 00:31:21,410 --> 00:31:23,130 jeden čas sa to používa. 651 00:31:23,130 --> 00:31:26,650 To by bolo hlúpe, pretože to by odpad veľa času. 652 00:31:26,650 --> 00:31:30,420 Tak to už bol zostavený a obrátil sa do spustiteľného súboru. 653 00:31:30,420 --> 00:31:35,430 A teraz sa chystá byť zlúčené s súboru na konci. 654 00:31:35,430 --> 00:31:38,370 Takže tie 1 a 0 sa deje spojiť so svojimi tie 655 00:31:38,370 --> 00:31:39,150 a 0 je na konci. 656 00:31:39,150 --> 00:31:43,670 Takže teraz budete skutočne mať skutočný 1 a 0, ktoré definujú, ako GetString, 657 00:31:43,670 --> 00:31:47,890 napríklad funguje, alebo ako printf, napríklad funguje. 658 00:31:47,890 --> 00:31:52,750 >> A pre viac informácií, tam je krátke kompilátory, že Nate dáva, že 659 00:31:52,750 --> 00:31:55,410 by ste sa mali pozrieť na to, že ide prostredníctvom týchto krokov. 660 00:31:55,410 --> 00:31:56,050 Ale - 661 00:31:56,050 --> 00:31:56,560 Áno. 662 00:31:56,560 --> 00:32:01,700 >> STUDENT: Sú vždy o súbory. keď sú vo forme knižnice, 663 00:32:01,700 --> 00:32:06,764 pripravení byť zlúčené, súvisí - ako sú v binárnom kóde? 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirschhorn: OK. 665 00:32:07,600 --> 00:32:08,420 Čo - 666 00:32:08,420 --> 00:32:11,780 >> STUDENT: Je to vždy pre knižnice, keď je prepojiť? 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirschhorn: Áno. 668 00:32:12,500 --> 00:32:17,300 Takže tam je. S. súborov, ktoré budú strojový kód, ktorý bude tiež 669 00:32:17,300 --> 00:32:17,975 mystický pre vás. 670 00:32:17,975 --> 00:32:19,410 Nemusíte sa starať o tie. 671 00:32:19,410 --> 00:32:24,930 Ale všeobecne, jo, oni budú byť. o súbory pripravený ísť. 672 00:32:24,930 --> 00:32:27,170 >> Žiak: Takže, keď sa loď na knižnica, máte len loď 673 00:32:27,170 --> 00:32:28,880 . Ha. O? 674 00:32:28,880 --> 00:32:32,210 Nemusíte loď. C alebo. S.. 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirschhorn: So - 676 00:32:33,070 --> 00:32:36,260 a to je v tomto krátkom rovnako, ak táto informácia sa zdá, že prichádza 677 00:32:36,260 --> 00:32:36,700 trochu rýchlejšie. 678 00:32:36,700 --> 00:32:39,870 Ale krátky na prekladača hovorí o tom, to rovnako. 679 00:32:39,870 --> 00:32:43,290 Keď loď knižnicu, ak loď . H súbor hlavičky, ktoré 680 00:32:43,290 --> 00:32:46,290 funkčné prototypy, a 1, a 0 je, to je všetko, čo potrebujete dať. 681 00:32:46,290 --> 00:32:50,640 Nemusíte dať, ako Funkcia pracuje, c súbor .. 682 00:32:50,640 --> 00:32:56,360 Vzhľadom k tomu, miesto odberu, alebo bod API, bod v tomto SPL, 683 00:32:56,360 --> 00:32:59,650 prenosná knižnica Stanford, je to aby ste sa starať o tom, ako nová 684 00:32:59,650 --> 00:33:04,220 GRect funguje, alebo ako sa pohybovať práce, alebo, ako pridať diela. 685 00:33:04,220 --> 00:33:06,520 Všetko, čo potrebujete vedieť, je, že doplnok je funkcia, ktorá môžete 686 00:33:06,520 --> 00:33:08,880 použiť, a to robí to. 687 00:33:08,880 --> 00:33:12,760 Takže si naozaj nemusíte vedieť, ako je to napísaný v jazyku C. stačí 688 00:33:12,760 --> 00:33:15,460 Viete, tu sú funkcie, čo robiť, a tu sú ich 1 a 0 689 00:33:15,460 --> 00:33:18,870 keď budete naozaj chcieť použiť. 690 00:33:18,870 --> 00:33:19,530 >> V pohode. 691 00:33:19,530 --> 00:33:26,980 Nejaké ďalšie otázky týkajúce sa kompilátory alebo ďalšie témy na palube? 692 00:33:26,980 --> 00:33:30,300 >> STUDENT: Mám otázku , Ktorým sa vykonáva rekurzívne funkcie. 693 00:33:30,300 --> 00:33:31,170 Otázka o rekurziu. 694 00:33:31,170 --> 00:33:33,030 Mal som pocit, že by sa prísť. 695 00:33:33,030 --> 00:33:38,310 Takže poďme rýchlo prejsť rekurzia s konkrétnou 696 00:33:38,310 --> 00:33:40,690 Napríklad faktoriál funkcie. 697 00:33:40,690 --> 00:33:44,920 Vzhľadom k tomu, to je príklad, ktorý často prichádza, alebo sa používa 698 00:33:44,920 --> 00:33:46,170 pre ilustráciu rekurzia. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Takže "4!" je čítať ako 4 faktoriálu. 701 00:33:56,410 --> 00:33:59,120 A čo 4 faktoriál znamená? 702 00:33:59,120 --> 00:34:00,696 Čo to bolo? 703 00:34:00,696 --> 00:34:02,235 Ako si vypočítať 4 faktoriál? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 krát 3 krát 2 krát 1. 706 00:34:07,960 --> 00:34:11,889 >> Takže ďalší spôsob, ako napísať 4 faktoriálu je to napísať. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4x 3 faktoriál. 709 00:34:19,022 --> 00:34:22,080 Vzhľadom k tomu, 3 faktoriál je 3 krát 2 krát 1. 710 00:34:22,080 --> 00:34:27,580 Takže 4 krát 3 faktoriál je 4 krát 3 krát 2 krát 1. 711 00:34:27,580 --> 00:34:32,679 To je dôvod, prečo faktoriál je skvelý kandidát na rekurziu, pretože je to 712 00:34:32,679 --> 00:34:36,630 jasné, že tam je niečo, čo stane znova a znova a znova na 713 00:34:36,630 --> 00:34:39,820 menší počet vecí, kým sa dostanete na koniec. 714 00:34:39,820 --> 00:34:42,570 Keď sa dostanete na 1, 1 faktoriál je 1. 715 00:34:42,570 --> 00:34:43,719 Nemôžete ísť oveľa ďalej. 716 00:34:43,719 --> 00:34:47,219 0 faktoriál je tiež definovaná ako 1. 717 00:34:47,219 --> 00:34:50,679 Takže, keď sa dostanete na 1 alebo 0, ste na konci, a môžete 718 00:34:50,679 --> 00:34:53,219 začať chodiť hore. 719 00:34:53,219 --> 00:34:59,540 Takže ak by sme chceli napísať rekurzívne funkcie pre výpočet faktoriálu, 720 00:34:59,540 --> 00:35:02,170 budeme písať nejaké pseudokódu na to teraz. 721 00:35:02,170 --> 00:35:03,300 Než sme sa napísať tento pseudokódu - 722 00:35:03,300 --> 00:35:05,660 Dám si chalani pár minút písať pseudo kód alebo jednoducho myslím, 723 00:35:05,660 --> 00:35:09,600 o tom - tam sú dve veci, ktoré každý rekurzívne funkcie potrebuje. 724 00:35:09,600 --> 00:35:12,530 Aké sú tie dve veci? 725 00:35:12,530 --> 00:35:13,220 >> JACK: To má volať sám. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirschhorn: Noah? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Len do toho. 729 00:35:15,100 --> 00:35:16,640 >> JACK: To má volať sám. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorn: Tak rekurzívne funkcie potrebuje rekurzívne volanie, 731 00:35:19,220 --> 00:35:20,220 volať k sebe. 732 00:35:20,220 --> 00:35:20,770 To je jedna. 733 00:35:20,770 --> 00:35:21,510 A čo je tá druhá vec? 734 00:35:21,510 --> 00:35:22,250 >> JACK: base-case. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirschhorn: base-case. 736 00:35:23,780 --> 00:35:26,940 Základný scenár je, tu je, keď sme sa zastavili. 737 00:35:26,940 --> 00:35:29,510 Takže vaše funkcia volaná. 738 00:35:29,510 --> 00:35:31,410 Referenčný prípad nastane skôr. 739 00:35:31,410 --> 00:35:33,710 Chcete vedieť, či ste na konci. 740 00:35:33,710 --> 00:35:37,110 A ak nie ste na konci, budete Urob si svoj rekurzívne volanie. 741 00:35:37,110 --> 00:35:39,880 A idete cez túto funkciu znovu, skontrolujte znovu vaše základné prípad. 742 00:35:39,880 --> 00:35:42,575 Ak si nie ste koniec, urobíte ďalšie rekurzívne volanie, 743 00:35:42,575 --> 00:35:44,130 et cetera, et cetera. 744 00:35:44,130 --> 00:35:47,110 >> To je dôvod, prečo rekurzívne funkcie vždy Potrebujeme tie základné veci, a tie 745 00:35:47,110 --> 00:35:48,210 rekurzívne volanie. 746 00:35:48,210 --> 00:35:51,280 Ak nemáte rekurzívne volanie, je by nemal byť rekurzívne funkcie. 747 00:35:51,280 --> 00:35:53,210 Ak ste nemali základné veci, by ste ísť na veky 748 00:35:53,210 --> 00:35:54,780 tam by bol žiadny koniec. 749 00:35:54,780 --> 00:35:57,870 A referenčný prípad vždy na prvom mieste, pretože budete vždy chcieť skontrolovať 750 00:35:57,870 --> 00:36:00,420 ak ste na konci prvej. 751 00:36:00,420 --> 00:36:04,770 Takže ako sme sa urobiť nejaké pseudokódu, prečo nie sa chvíľu premýšľať o tom, 752 00:36:04,770 --> 00:36:09,360 ako rekurzívne funkcie pre výpočet faktoriálu by byť napísaná? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Tiež, ako veľa, ako robíte, písanie že sa na jeden list papiera 755 00:36:26,010 --> 00:36:27,960 to, čo budete mať na robiť na kvíz zajtra. 756 00:36:27,960 --> 00:36:32,160 Takže asi dobré praxe, aby Uistite sa, že kód píšete 757 00:36:32,160 --> 00:36:34,420 sa na list papiera - 758 00:36:34,420 --> 00:36:35,160 alebo si môžete urobiť, že. 759 00:36:35,160 --> 00:36:36,710 Viete, kde sú bodkočiarkami. 760 00:36:36,710 --> 00:36:37,660 Pamätáš si syntax. 761 00:36:37,660 --> 00:36:40,400 Vzhľadom k tomu, že ste neboli schopní mať Kompilátor ti urobili chybu. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Aj v tomto smere, zajtra, kedy ste kódovanie problémy, ak 764 00:37:07,240 --> 00:37:11,490 sa vrhli na čas, alebo ak ste veľmi zmätený, ako máš 765 00:37:11,490 --> 00:37:16,030 napísať konkrétnu vec C, by slušať vám písať pseudo-kódu 766 00:37:16,030 --> 00:37:18,160 alebo píšte svoje pripomienky, rovnako. 767 00:37:18,160 --> 00:37:21,940 Vzhľadom k tomu, že je čiastočný úver pre Veľa otázok, na kvíz. 768 00:37:21,940 --> 00:37:24,840 Takže môžete byť ponáhľal, alebo môže byť len zmätený. 769 00:37:24,840 --> 00:37:28,030 Písanie v komentároch alebo pseudo-kódu sú často spôsoby, ktoré 770 00:37:28,030 --> 00:37:29,360 Môžete získať čiastočnú úver. 771 00:37:29,360 --> 00:37:31,440 >> Takže nenechávajte niečo prázdne na kvíz. 772 00:37:31,440 --> 00:37:33,490 Je tu žiadne sankcie za uvedenie veci palcov 773 00:37:33,490 --> 00:37:37,650 V skutočnosti, uvedenie v pseudo-kódu alebo komentáre bude pomáhať porovnávač 774 00:37:37,650 --> 00:37:40,410 zistiť, či ste skutočne vedieť, čo hovoríte, a možno ocenenie 775 00:37:40,410 --> 00:37:42,030 si niektoré čiastkové ocenenie za to. 776 00:37:42,030 --> 00:37:44,510 >> Aj v tomto smere, písať jasne. 777 00:37:44,510 --> 00:37:47,650 Ak sa nám podarí naozaj to, čo píšete, nie sme ti zavolať 778 00:37:47,650 --> 00:37:49,900 o polnoci zajtra na obrázku z toho, čo ste napísal. 779 00:37:49,900 --> 00:37:51,520 Sme len tak zložiť body. 780 00:37:51,520 --> 00:37:56,570 Napíšte jasne, takže môžeme počuť, alebo skôr, môžeme prečítať, čo ste napísal. 781 00:37:56,570 --> 00:38:00,230 >> A keď sa hovorí, že dve vety, nepíšte odsek. 782 00:38:00,230 --> 00:38:02,280 Postupujte podľa pokynov. 783 00:38:02,280 --> 00:38:03,500 Jasne napísať. 784 00:38:03,500 --> 00:38:07,720 A napísať v týchto pripomienok alebo pseudokódu na otázky, ktoré by mohli 785 00:38:07,720 --> 00:38:10,270 ocenenie čiastočné úver. 786 00:38:10,270 --> 00:38:12,520 >> OK, poďme sa faktoriál. 787 00:38:12,520 --> 00:38:15,000 Takže máme funkciu faktoriál. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Ak by som mal vlastne píšem v C, to, čo potrebujem, aby pred menom 790 00:38:21,550 --> 00:38:22,800 funkcie? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Návratový typ, ktorý, v tomto prípad, dáme mu int. 793 00:38:30,060 --> 00:38:35,450 A potom vnútri zložených zátvoriek, je čo sa deje vo vnútri zložených zátvoriek za 794 00:38:35,450 --> 00:38:36,850 funkcie? 795 00:38:36,850 --> 00:38:37,950 >> ŠTUDENTI: Typ Argument. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirschhorn: Jej argumenty. 797 00:38:39,150 --> 00:38:42,680 Takže faktoriál bude pravdepodobne prijať argument. 798 00:38:42,680 --> 00:38:44,500 Je to pravdepodobne len mať jeden argument. 799 00:38:44,500 --> 00:38:49,450 A my, že to bude trvať celé číslo s názvom x. 800 00:38:49,450 --> 00:38:52,770 A opäť, pri písaní prototyp funkcie alebo písomne ​​funkciu 801 00:38:52,770 --> 00:38:57,110 v kóde pred jeho definíciu, vás napísať dátový typ a názov 802 00:38:57,110 --> 00:39:01,370 táto premenná iba pre túto funkciu. 803 00:39:01,370 --> 00:39:06,350 Takže si môžete prejsť nejaké číslo do tohto funkcie, bude to len x 804 00:39:06,350 --> 00:39:07,340 interne. 805 00:39:07,340 --> 00:39:08,755 >> Máme pre výpočet faktoriálu funkcie. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Potrebujeme dve veci, základné prípad a rekurzívne volanie. 808 00:39:15,850 --> 00:39:20,900 Aká je základný dôvod pre faktoriál? 809 00:39:20,900 --> 00:39:24,850 Niekto, kto to napísal a kto nemá ešte hovorí, čo je základom 810 00:39:24,850 --> 00:39:26,100 puzdro pre faktoriál? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> STUDENT: Ak n je menej ako 2, vráti 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirschhorn: Ak n je menej ako 2, vráti 1. 814 00:39:33,520 --> 00:39:37,216 Páči sa mi to, pretože to sa stará o 0 a 1. 815 00:39:37,216 --> 00:39:45,290 Takže budeme robiť x <2, vráti 1. 816 00:39:45,290 --> 00:39:47,870 Ak by sme si prešiel 0, ak dostaneme prešiel 1, bude táto funkcia 817 00:39:47,870 --> 00:39:49,790 okamžite vráti 1. 818 00:39:49,790 --> 00:39:54,020 Ak by sme si prešiel nejaké číslo väčšie než alebo rovná 2, ideme do 819 00:39:54,020 --> 00:39:55,370 máme rekurzívne volanie. 820 00:39:55,370 --> 00:39:57,855 >> A tak, ako je to, že bude fungovať? 821 00:39:57,855 --> 00:40:01,070 Môže niekto, kto pracoval na tejto ktorý doteraz neprehovoril mi 822 00:40:01,070 --> 00:40:07,380 rekurzívne volanie pre túto funkciu v pseudokódu? 823 00:40:07,380 --> 00:40:10,770 Ak by sme si prešiel v počte x a to je väčší ako 2, čo 824 00:40:10,770 --> 00:40:13,370 chceme robiť? 825 00:40:13,370 --> 00:40:17,930 Sme tiež príklad napísaný na strana, ktorá vám môže poskytnúť radu. 826 00:40:17,930 --> 00:40:20,770 >> STUDENT: Call x krát faktoriál x mínus 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirschhorn: Presne tak. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Budeme sa vracať x-krát faktoriál x mínus 1. 830 00:40:37,750 --> 00:40:41,810 A to, aj keď som spísal, v podstate to, čo ste povedal v angličtine, 831 00:40:41,810 --> 00:40:44,580 táto funkcia pre výpočet faktoriálu bude sa znovu zavolal. 832 00:40:44,580 --> 00:40:46,320 Bude vykonávať na x mínus 1. 833 00:40:46,320 --> 00:40:49,320 Je to vrátim s nejakým celé číslo, a potom to bude násobiť tieto dva 834 00:40:49,320 --> 00:40:52,050 spoločne, a táto hodnota bude vrátil sa na čokoľvek nazval 835 00:40:52,050 --> 00:40:55,010 faktoriál funkcie, ktoré by mohli byť iná inštancia 836 00:40:55,010 --> 00:40:58,420 táto funkcia pre výpočet faktoriálu. 837 00:40:58,420 --> 00:41:01,360 >> Takže to je príklad rekurzívny funkcie, čo je veľmi 838 00:41:01,360 --> 00:41:02,530 jednoduché rekurzívne funkcie. 839 00:41:02,530 --> 00:41:04,530 Ale väčšina z nich bude takto. 840 00:41:04,530 --> 00:41:11,170 Ak by ste chceli dobrý rekurzívne výzva pre kvízu, skúste kódovanie 841 00:41:11,170 --> 00:41:13,230 binárne vyhľadávanie rekurzívne. 842 00:41:13,230 --> 00:41:18,950 Pretože ak ste binárne vyhľadávanie problém nastaviť tri, pravdepodobne to urobil 843 00:41:18,950 --> 00:41:21,730 iteratívne v slučke while. 844 00:41:21,730 --> 00:41:23,700 >> Ale môže to byť tiež písomné rekurzívne. 845 00:41:23,700 --> 00:41:26,310 Budeš musieť napísať svoj vlastný samostatné funkcie, ktorá zoberie niektoré 846 00:41:26,310 --> 00:41:29,020 rôzne argumenty príkazového riadku - alebo nie argumenty príkazového riadku, z ktorých niektoré 847 00:41:29,020 --> 00:41:30,910 Rôzne len pravidelné argumenty. 848 00:41:30,910 --> 00:41:33,870 Ale vy ste mohol napísať binárne hľadanie rekurzívne rovnako. 849 00:41:33,870 --> 00:41:36,190 >> Žiak: Takže ste mohli tiež napísané, miesto x mínus 1, vy 850 00:41:36,190 --> 00:41:39,502 by tiež písali x mínus mínus, alebo by ste mohli mať 851 00:41:39,502 --> 00:41:40,830 napísal mínus mínus x. 852 00:41:40,830 --> 00:41:44,740 Môžete len vysvetliť, naozaj rýchlo, prečo tie by sa rôzne veci, 853 00:41:44,740 --> 00:41:49,510 ako to, čo je rozdiel medzi x mínus mínus a mínus mínus x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorn: Nie, nie som ísť do toho. 855 00:41:51,320 --> 00:41:55,500 Ale budem s vami hovoriť o tom po trieda. x mínus mínus mínus mínus x 856 00:41:55,500 --> 00:41:57,780 decrement x o 1. 857 00:41:57,780 --> 00:41:59,090 Ale robia to trochu inak. 858 00:41:59,090 --> 00:42:00,340 Ale ja nechcem ísť do toho. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Ostatné otázky týkajúce sa rekurzia alebo je táto funkcia? 861 00:42:09,090 --> 00:42:10,140 To naozaj nie je ani pseudokódu. 862 00:42:10,140 --> 00:42:15,060 To je v podstate kód C by ste písať pre to. 863 00:42:15,060 --> 00:42:19,393 >> OK, všetky ostatné otázky o témach tu? 864 00:42:19,393 --> 00:42:19,864 Jo. 865 00:42:19,864 --> 00:42:23,130 >> STUDENT: Mám rýchly prehľad s plávajúcou desatinnou čiarkou a presnosť. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorn: Plávajúce bod a presnosť. 867 00:42:24,260 --> 00:42:26,920 Môže niekto naozaj rýchlo daj mi námety 868 00:42:26,920 --> 00:42:28,210 s plávajúcou desatinnou čiarkou a presnosť? 869 00:42:28,210 --> 00:42:30,420 Všetci ste musel urobiť pre váš problém nastaviť, takže ste všetci 870 00:42:30,420 --> 00:42:31,700 oboznámení s tým. 871 00:42:31,700 --> 00:42:35,090 Alebo možno nie všetci z vás. 872 00:42:35,090 --> 00:42:36,602 Každý, kto? 873 00:42:36,602 --> 00:42:39,530 Daj mi začal miesto. 874 00:42:39,530 --> 00:42:40,750 S plávajúcou desatinnou čiarkou a presnosť. 875 00:42:40,750 --> 00:42:42,380 V čom je problém? 876 00:42:42,380 --> 00:42:42,960 Áno. 877 00:42:42,960 --> 00:42:43,680 Victoria? 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON Hirschhorn: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Prepáčte. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: K dispozícii je len obmedzené množstvo čísiel, ktoré môžu byť zastúpené 882 00:42:51,550 --> 00:42:57,930 pretože ste na, v našej púzdro, 32-bitový systém. 883 00:42:57,930 --> 00:43:03,080 Takže tak nejako si aby sa nejaké čísla. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorn: Tak to je Presne tak. 885 00:43:03,910 --> 00:43:08,110 K dispozícii sú len určité množstvo čísla, ktoré môžu byť zastúpené. 886 00:43:08,110 --> 00:43:11,770 Ak máte násobiť dve veľmi veľké čísla, môže pretiecť čiastku 887 00:43:11,770 --> 00:43:13,950 priestorov máte zastupovať celé číslo. 888 00:43:13,950 --> 00:43:17,930 To je dôvod, prečo niekedy používame long long namiesto int. 889 00:43:17,930 --> 00:43:19,210 To má viac medzier. 890 00:43:19,210 --> 00:43:21,210 To môže mať väčší počet. 891 00:43:21,210 --> 00:43:24,310 >> Plávajúce bod presnosť má čo do činenia s , Ale tiež má čo do činenia s 892 00:43:24,310 --> 00:43:29,300 Skutočnosť, že desatinné čísla nie vždy predstavoval. 893 00:43:29,300 --> 00:43:29,540 Prepáčte. 894 00:43:29,540 --> 00:43:31,280 Dovoľte mi, aby som to späť nahor. 895 00:43:31,280 --> 00:43:36,610 Desatinné číslo 1.0 nie je vždy predstavoval ako vy by sa dalo očakávať, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 To je niekedy reprezentovaný ako 1,000000001 alebo 0,999999999. 898 00:43:50,360 --> 00:43:52,780 To by mohlo byť dokonca 89 hodená tam niekde. 899 00:43:52,780 --> 00:43:56,560 Takže tie desatinné čísla nie sú zastúpené presne tak, ako by ste 900 00:43:56,560 --> 00:43:58,430 očakávať, že budú zastúpené. 901 00:43:58,430 --> 00:44:00,010 >> Takže problém nastaviť - 902 00:44:00,010 --> 00:44:00,860 to bolo dva? - 903 00:44:00,860 --> 00:44:05,290 problém nastaviť dva, kde sme sa zaoberali čísla s plávajúcou desatinnou čiarkou, keď sme chceli 904 00:44:05,290 --> 00:44:08,690 to, že predstavujú presne to, čo sme chceli to, že predstavujú, číslo 905 00:44:08,690 --> 00:44:12,860 o haliere, alebo počet centov, vynásobíme je 100.. 906 00:44:12,860 --> 00:44:14,750 Zaoblené sme ich. 907 00:44:14,750 --> 00:44:18,660 A potom sme odrezaní všetko za desatinnou čiarkou. 908 00:44:18,660 --> 00:44:22,020 To bolo zaistené, že by v skutočnosti rovná presne to, čo sme chceli 909 00:44:22,020 --> 00:44:22,410 im rovná. 910 00:44:22,410 --> 00:44:26,870 >> Pretože keď budete mať niečo, čo je float a otočte ho do int, môžete 911 00:44:26,870 --> 00:44:29,860 odrezať všetko na pravej strane desatinnej čiarky. 912 00:44:29,860 --> 00:44:33,900 Vzhľadom k tomu, že je nejaký plávajúcou desatinnou čiarkou nepresnosť, 100.000 mohlo byť 913 00:44:33,900 --> 00:44:37,440 reprezentovaný ako 99,999999999. 914 00:44:37,440 --> 00:44:40,350 A ak ste práve odrezať všetko vpravo hneď, budete 915 00:44:40,350 --> 00:44:41,600 dostať zlé číslo. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Jo. 918 00:44:44,180 --> 00:44:45,290 >> STUDENT: Mal som otázku o liatie. 919 00:44:45,290 --> 00:44:47,500 V akom poradí sa to objaviť v? 920 00:44:47,500 --> 00:44:54,480 Ak by som to plávať, držiaky, 1 rozdeliť o 10, to robí 1 delené 10, 921 00:44:54,480 --> 00:44:58,910 potom 0,1, potom zase je do plaváku? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorn: Ak tak urobíte float 1 delené 10 - 923 00:45:01,470 --> 00:45:02,550 >> STUDENT: Jo, a potom rovná - 924 00:45:02,550 --> 00:45:04,240 dobre, to by za normálnych okolností má to rovnaký v - 925 00:45:04,240 --> 00:45:04,690 Jo. 926 00:45:04,690 --> 00:45:06,760 Ak chcete, aby to plavák, nie? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorn: OK, tak ideme na použiť k segue do zisťuje, 928 00:45:12,790 --> 00:45:15,390 Odpovede na tieto otázky pomocou kódovania. 929 00:45:15,390 --> 00:45:18,180 Vzhľadom k tomu, budete pravdepodobne mať veľa Tieto minute otázky, a dobrý spôsob, 930 00:45:18,180 --> 00:45:19,100 na ich riešenie je cez kódovanie. 931 00:45:19,100 --> 00:45:21,320 Takže budeme kódovať práve teraz, a potom budeme vrátiť a 932 00:45:21,320 --> 00:45:24,020 kód na otázku, na ktorú mal. 933 00:45:24,020 --> 00:45:24,950 >> Takže prvý riadok - 934 00:45:24,950 --> 00:45:29,390 Nemal som napísal to - to, čo je Prvá vec, ktorú chcete urobiť, keď sme 935 00:45:29,390 --> 00:45:32,250 otvoriť nový súbor v gedit? 936 00:45:32,250 --> 00:45:34,190 >> STUDENT: Zahrnúť. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorn: Zahrnúť, čo? 938 00:45:35,920 --> 00:45:37,952 >> STUDENT: CS50 knižnica. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirschhorn: OK. 940 00:45:39,920 --> 00:45:42,590 Čo iné by sme mali zahrnúť? 941 00:45:42,590 --> 00:45:46,820 Sme jednoducho ísť skontrolovať čo sa deje keď obsadil niečo plaváku. 942 00:45:46,820 --> 00:45:48,605 Ale čo musíme zahrnúť, ak sme bude napísať program v jazyku C? 943 00:45:48,605 --> 00:45:49,300 >> STUDENT: Standard I / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON Hirschhorn: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Sme vlastne nepotrebujú, pretože to programu, cs50.h, aj keď je to 946 00:45:54,880 --> 00:45:55,920 vždy užitočné, aby ju zahrnúť. 947 00:45:55,920 --> 00:45:58,260 Ale my vždy potrebujeme stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> STUDENT: Pri kódovaní v C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorn: Pri kódovaní v C. 950 00:46:15,770 --> 00:46:17,090 >> Tak som ju uložiť ako tento c súboru .. 951 00:46:17,090 --> 00:46:18,590 Mám nejaké pekné zvýraznenie syntaxe. 952 00:46:18,590 --> 00:46:22,890 Napísal som prázdnotu vo vnútri hlavnej. 953 00:46:22,890 --> 00:46:24,792 Čo void znamená? 954 00:46:24,792 --> 00:46:26,740 >> STUDENT: nepreberá žiadnu argumenty príkazového riadku. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: odpadá prostriedky, v tomto prípad, hlavné neponesie 956 00:46:28,900 --> 00:46:29,700 argumenty príkazového riadku. 957 00:46:29,700 --> 00:46:32,720 V iných prípadoch, to znamená, že funkcia neberie argumenty príkazového riadku. 958 00:46:32,720 --> 00:46:36,560 Alebo funkcie, keby som písať prázdno main (void), ktorá by sa povedať sieťovom 959 00:46:36,560 --> 00:46:38,460 nevracia nič. 960 00:46:38,460 --> 00:46:39,960 Takže void proste nič neznamená. 961 00:46:39,960 --> 00:46:42,510 Čo by som napísať, keby som prijať argumenty príkazového riadku? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> STUDENT: int oblúk c string oblúk v. 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirschhorn: int argc reťazec argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Je to pravda? 967 00:46:55,572 --> 00:46:58,720 >> STUDENT: Je to char hviezda argv zátvorky. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorn: Takže ste mohol napísať string argv zátvorky alebo znak hviezda argv 969 00:47:01,730 --> 00:47:03,710 držiaky, ale budete potrebovať držiaky. 970 00:47:03,710 --> 00:47:06,290 Vzhľadom k tomu, argv je pole reťazcov, pamätať. 971 00:47:06,290 --> 00:47:07,360 Nie je to len jeden reťazec. 972 00:47:07,360 --> 00:47:10,350 Takže reťazec argv je, tu je jeden reťazec s názvom argv. 973 00:47:10,350 --> 00:47:13,630 String argv držiaky sa, tu je pole reťazcov. 974 00:47:13,630 --> 00:47:17,865 Takže int argc reťazec argv držiaky by bolo niečo, čo som 975 00:47:17,865 --> 00:47:18,810 pravdepodobne písať. 976 00:47:18,810 --> 00:47:23,050 >> Takže ste chceli uložiť do celé číslo? 977 00:47:23,050 --> 00:47:24,285 >> STUDENT: Jo, celé číslo. 978 00:47:24,285 --> 00:47:25,840 Alebo v plaváku. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorn: V plaváku? 980 00:47:26,710 --> 00:47:30,790 Rovnako ako float x sa rovná 1 delené 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON Hirschhorn: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Ako môžem vytlačiť plavák v printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Čo je? 986 00:47:46,714 --> 00:47:47,560 >> STUDENT:% f 987 00:47:47,560 --> 00:47:48,300 >> JASON Hirschhorn:% f 988 00:47:48,300 --> 00:47:50,810 Čo je to číslo? 989 00:47:50,810 --> 00:47:52,110 d alebo i 990 00:47:52,110 --> 00:47:53,000 Čo je to reťazec? 991 00:47:53,000 --> 00:47:54,240 >> STUDENT: s 992 00:47:54,240 --> 00:47:56,140 >> JASON Hirschhorn: s 993 00:47:56,140 --> 00:47:57,550 Ako môžem získať novú linku? 994 00:47:57,550 --> 00:47:58,800 >> STUDENT: Spätné lomítko n 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorn: Čo mám vrátiť ak hlavný beží správne? 997 00:48:07,100 --> 00:48:08,360 >> STUDENT: 0. 998 00:48:08,360 --> 00:48:09,430 Musím napísať, že línie, aj keď? 999 00:48:09,430 --> 00:48:10,170 >> STUDENT: Nie 1000 00:48:10,170 --> 00:48:11,513 OK, nebudeme písať, potom. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Každý môže prečítať, že? 1003 00:48:17,190 --> 00:48:18,485 Vyzerá to trochu malé. 1004 00:48:18,485 --> 00:48:20,160 Každý môže vidieť, alebo by Robím to väčšie? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Myslím, že pre kameru, urobíme je to trochu väčšie, hoci. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorn: Ak chcem zapnúť túto . C súbor do spustiteľného súboru, čo 1009 00:48:38,410 --> 00:48:39,260 mám napísať? 1010 00:48:39,260 --> 00:48:41,610 >> STUDENT: Urobiť test. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorn: Je nám ľúto? 1012 00:48:42,080 --> 00:48:42,790 >> STUDENT: Urobiť test. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorn: Urobiť test. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Rozprávali sme si o tento riadok predtým. 1016 00:48:48,410 --> 00:48:49,140 Zvonenie. 1017 00:48:49,140 --> 00:48:51,270 Čo je to zvonenie? 1018 00:48:51,270 --> 00:48:52,200 Názov prekladača. 1019 00:48:52,200 --> 00:48:53,920 Čo je to linka? 1020 00:48:53,920 --> 00:48:55,580 >> STUDENT: Nastaví to pre použitie GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Sady je pre použitie GDB. 1022 00:48:59,230 --> 00:49:02,338 Táto linka, čo je to? 1023 00:49:02,338 --> 00:49:03,290 >> STUDENT: Zdrojový kód. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirschhorn: To je zdrojový súbor, c súbor .. 1025 00:49:06,010 --> 00:49:08,150 Čo tieto dva riadky robiť? 1026 00:49:08,150 --> 00:49:10,245 Alebo tieto dve nie linky. 1027 00:49:10,245 --> 00:49:12,300 >> Žiak: Mená to vyskúšať. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorn: Tak pomlčka o hovorí, Pomenujte ju niečo inak. 1029 00:49:15,410 --> 00:49:16,790 A tu voláte ho testu. 1030 00:49:16,790 --> 00:49:18,900 Ak som nemal, že, čo by to pomenovať to? 1031 00:49:18,900 --> 00:49:20,260 >> STUDENT: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON Hirschhorn: a.out. 1033 00:49:22,340 --> 00:49:25,366 Čo je to? 1034 00:49:25,366 --> 00:49:27,670 >> STUDENT: Odkazy na matematickú knižnicu. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorn: Je odkazy v matematickej knižnici. 1036 00:49:29,550 --> 00:49:32,880 My neobsahoval matematickú knižnicu, ale pretože to je tak bežné, že som 1037 00:49:32,880 --> 00:49:35,780 napísal make vždy obsahovať matematická knižnica. 1038 00:49:35,780 --> 00:49:39,050 A podobne, to zahŕňa knižnica CS50. 1039 00:49:39,050 --> 00:49:43,010 >> OK, takže ak sme zoznam, teraz máme spustiteľný súbor s názvom Test. 1040 00:49:43,010 --> 00:49:45,150 Ak to chcete vykonať, skúšku som písať. 1041 00:49:45,150 --> 00:49:48,330 Vidím, že môj plávajúcou desatinnou čiarkou, , Ako sa očakávalo, rovná 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Znamená to, že - 1044 00:49:51,590 --> 00:49:52,060 takže - 1045 00:49:52,060 --> 00:49:55,210 >> Žiak: Takže keď dáte vznášať sa, ako by ste ju obsadil ako float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorn: Cast 1 až plaváku? 1047 00:49:56,870 --> 00:49:59,180 >> STUDENT: Nie, obsadenie plné vec - 1048 00:49:59,180 --> 00:49:59,500 jo. 1049 00:49:59,500 --> 00:50:02,460 Ak ste práve urobil, by že, aby bolo 0.1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorn: OK, tak naozaj rýchlo, 1 delené 10, ktoré sú 1051 00:50:07,170 --> 00:50:08,690 celé čísla je rozdelený. 1052 00:50:08,690 --> 00:50:13,580 Takže keď si rozdeliť celé čísla, sú 0, a šetríte, že 0 v 1053 00:50:13,580 --> 00:50:17,170 plávať, pretože lomka je len delení. 1054 00:50:17,170 --> 00:50:19,180 Takže teraz sme sústruženie niečo do plaváku. 1055 00:50:19,180 --> 00:50:21,650 >> Pozrime sa, čo sa stane. 1056 00:50:21,650 --> 00:50:22,900 Urobíme test. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Takže teraz vidíme, že lomítko nebolo číslo divízie, to bolo plávajúce 1059 00:50:31,090 --> 00:50:32,640 bod rozdelenia. 1060 00:50:32,640 --> 00:50:35,700 Vzhľadom k tomu, jeden z jeho argumentov bol obsadený do plaváku. 1061 00:50:35,700 --> 00:50:38,380 Takže teraz to bolo hovoril, zaobchádzať s týmto divízie, ako máme čo do činenia s 1062 00:50:38,380 --> 00:50:40,140 plávajúce body, nie s celými číslami. 1063 00:50:40,140 --> 00:50:42,760 A tak dostaneme odpoveď očakávame. 1064 00:50:42,760 --> 00:50:44,620 >> Pozrime sa, čo sa stane - 1065 00:50:44,620 --> 00:50:47,103 Oops. 1066 00:50:47,103 --> 00:50:51,646 Keby som chcel vytlačiť viac desatinné miesto škvrny, ako som to mohla urobiť? 1067 00:50:51,646 --> 00:50:55,550 >> STUDENT: Point bodka f, alebo ako mnoho desatinné miesta, ako chcete. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirschhorn: Tak som vytlačiť 10 desatinných miest. 1070 00:51:04,440 --> 00:51:06,610 A teraz vidíme dostávame nejaký divný veci. 1071 00:51:06,610 --> 00:51:09,650 A to ide späť k vašej otázke o plávajúcou desatinnou čiarkou nepresnosti. 1072 00:51:09,650 --> 00:51:10,950 K dispozícii je divné veci uložené v tu. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, to, že odpoveď na vašu otázku? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Čo iné chceš kódovať rýchlo? 1077 00:51:20,200 --> 00:51:25,470 >> STUDENT: Len som chcel vidieť, či nie, ak sa uvoľní nejaký ukazovateľ, 1078 00:51:25,470 --> 00:51:30,410 či je tento ukazovateľ ešte stále uložené v je adresa toho, čo bolo 1079 00:51:30,410 --> 00:51:32,170 ukázal skôr. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorn: OK, tak sa poďme to urobiť. 1081 00:51:34,100 --> 00:51:38,030 Char hviezda ptr, vytvára premennú tzv ptr typu char hviezdy. 1082 00:51:38,030 --> 00:51:39,280 Ako môžem písať malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Len malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Ale potom to musí byť veľkosť a v tomto prípade, myslím, že by som 1087 00:51:51,040 --> 00:51:52,465 smerovať k char. 1088 00:51:52,465 --> 00:51:54,450 Tak to by bolo char. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorn: OK, takže viac všeobecne, Inside - 1090 00:51:57,520 --> 00:51:58,770 poďme upravovať. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Vnútri malloc, chcete číslo z bytov na halde. 1093 00:52:09,260 --> 00:52:12,320 Všeobecne platí, že to, čo sme videli, že sme robí sa budeme malloc 1094 00:52:12,320 --> 00:52:14,940 reťazca, napríklad, alebo pole celých čísel. 1095 00:52:14,940 --> 00:52:21,600 Ak teda chceme 10 celých čísel, alebo 10 znaky, 10 nám dá 10. 1096 00:52:21,600 --> 00:52:24,370 A potom sa veľkosť znakov bude dať nám, že veľkosť znakov, ktoré 1097 00:52:24,370 --> 00:52:25,120 V tomto prípade je 1 byte. 1098 00:52:25,120 --> 00:52:26,250 Dostaneme 10 bajtov. 1099 00:52:26,250 --> 00:52:28,540 Ak by sme mali napísať veľkosť int, že by nám 40 bajtov. 1100 00:52:28,540 --> 00:52:31,520 >> Takže viac druhovo, vnútri malloc je počet bajtov chcete. 1101 00:52:31,520 --> 00:52:34,620 V tomto prípade sa dostávame 1 bajt. 1102 00:52:34,620 --> 00:52:36,900 Ktorý vyzerá ako podivný použitie malloc, ale pre naše 1103 00:52:36,900 --> 00:52:38,470 účely dáva zmysel. 1104 00:52:38,470 --> 00:52:40,420 Takže tam je to. 1105 00:52:40,420 --> 00:52:43,420 >> Budeme volať zadarmo. 1106 00:52:43,420 --> 00:52:47,040 My sa toho zbaviť a používame PTR znova. 1107 00:52:47,040 --> 00:52:48,750 A to, čo si chcel skontrolovať? 1108 00:52:48,750 --> 00:52:50,550 >> STUDENT: Len som chcel zistiť, či alebo tam bolo niečo 1109 00:52:50,550 --> 00:52:51,900 vnútri nej. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirschhorn: Takže nech už to ukázal na niečo? 1111 00:52:53,050 --> 00:52:57,740 >> STUDENT: Jo, presne, či stále mal adresu v pamäti. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorn: Takže ty chceš skontrolovať hodnotu PTR? 1113 00:53:02,220 --> 00:53:03,470 >> STUDENT: Jo, presne tak. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirschhorn: Čo mám napísať tu keď chcem skontrolovať hodnotu 1116 00:53:10,160 --> 00:53:11,880 bod - to, čo je, Jordan povedal, hodnota? 1117 00:53:11,880 --> 00:53:13,720 Alebo to, čo je uložené vnútri PTR? 1118 00:53:13,720 --> 00:53:14,620 >> STUDENT: adresa pamäti. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirschhorn: adresa pamäti. 1120 00:53:16,330 --> 00:53:20,520 Takže keď napíšem len to, že bude daj mi hodnotu PTR. 1121 00:53:20,520 --> 00:53:22,800 A ako môžem vytlačiť adresa pamäti? 1122 00:53:22,800 --> 00:53:26,470 Čo je formátovací reťazec na adresu pamäti? 1123 00:53:26,470 --> 00:53:27,430 >> STUDENT:% p 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirschhorn:% p 1125 00:53:28,050 --> 00:53:29,500 % S je reťazec. 1126 00:53:29,500 --> 00:53:30,750 % P na ukazovateľ. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Je to pravda? 1129 00:53:43,540 --> 00:53:44,790 To je v poriadku. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Takže ptr rovná - 1132 00:53:51,040 --> 00:53:53,350 to ešte má niečo v ňom. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 To je pravdepodobne viac zaujímavá otázka. 1135 00:53:57,645 --> 00:53:59,198 Čo to linka robiť? 1136 00:53:59,198 --> 00:54:00,830 >> STUDENT: seg chyby. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorn: Čo? 1138 00:54:01,310 --> 00:54:02,678 >> STUDENT: Myslím, že seg chyby. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirschhorn: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> STUDENT: Myslím, že to seg poruchu. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirschhorn: Tak tento riadok o kód, hviezda PTR, čo 1142 00:54:08,265 --> 00:54:10,152 sa hviezda znamená? 1143 00:54:10,152 --> 00:54:11,240 >> STUDENT: Obsah. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirschhorn: Jo. 1145 00:54:11,560 --> 00:54:13,910 Prejsť na ten obsah. 1146 00:54:13,910 --> 00:54:16,830 Tak to je ísť do pamäti riešiť tam a daj mi to. 1147 00:54:16,830 --> 00:54:21,030 Použil som% c tu, pretože tam sú znaky uložené. 1148 00:54:21,030 --> 00:54:23,390 Takže sme ísť na túto adresu my práve videli - alebo to bude pravdepodobne 1149 00:54:23,390 --> 00:54:25,190 trochu iný to keď sme sa spustiť program. 1150 00:54:25,190 --> 00:54:28,010 Ale pôjdeme na túto adresu ktoré vieme, že ešte existuje 1151 00:54:28,010 --> 00:54:29,260 a vidieť, čo tam je. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Takže to nebolo seg závadu. 1154 00:54:37,110 --> 00:54:38,970 Jednoducho nám nedal nič. 1155 00:54:38,970 --> 00:54:43,350 Mohlo by sa nám skutočne uvedený niečo, sme jednoducho nemôže vidieť. 1156 00:54:43,350 --> 00:54:45,110 A že ide späť do tohto nápadu - 1157 00:54:45,110 --> 00:54:47,270 a my nebudeme mať moc do to, pretože to je nad rámec 1158 00:54:47,270 --> 00:54:48,460 rozsah tohto kurzu. 1159 00:54:48,460 --> 00:54:51,260 Ale hovorili sme o tom tu, keď sme prekročil hranice poľa podľa 1160 00:54:51,260 --> 00:54:54,890 1, mohli by sme sa dostať do problémov. 1161 00:54:54,890 --> 00:54:58,550 >> Niekedy, keď si len tak vypnúť 1, robíte niečo zle, a vy 1162 00:54:58,550 --> 00:54:59,220 mohol dostať do problémov. 1163 00:54:59,220 --> 00:55:00,820 Ale nemusíte vždy dostať do problémov. 1164 00:55:00,820 --> 00:55:05,170 Záleží na tom, ako veľmi zlú vec, ktorú to, budete sa dostať do problémov. 1165 00:55:05,170 --> 00:55:07,790 Čo však neznamená, byť nedbanlivý s kódom. 1166 00:55:07,790 --> 00:55:12,080 Ale to znamená, že program nebude vždy skončiť, aj keď idete niekam 1167 00:55:12,080 --> 00:55:14,130 ste nemal ísť. 1168 00:55:14,130 --> 00:55:18,170 >> Dobrým príkladom toho je, veľa ľudia v ich problému nastavenia 3, ktoré 1169 00:55:18,170 --> 00:55:22,350 bolo 15, nekontroloval Hranice na palube. 1170 00:55:22,350 --> 00:55:25,860 Takže ste sa pozrel doľava, pozrel sa na právo, pozrel sa na vrchol, pozrel sa 1171 00:55:25,860 --> 00:55:27,000 až na dno. 1172 00:55:27,000 --> 00:55:31,540 Ale vy ste skontrolovať, či horná bol vlastne bude na palube. 1173 00:55:31,540 --> 00:55:35,220 A veľa ľudí, ktorí robili, že aj sa obrátil, že v ich programe pracoval 1174 00:55:35,220 --> 00:55:38,960 dokonale, pretože ak to doska bola uložená v pamäti, ak ste išiel jeden 1175 00:55:38,960 --> 00:55:42,300 nad ňou alebo skontrolovať, či je pamäťová adresa, nebolo nič 1176 00:55:42,300 --> 00:55:44,870 obzvlášť hrozné o tom, takže program nebol 1177 00:55:44,870 --> 00:55:45,970 bude kričať na vás. 1178 00:55:45,970 --> 00:55:48,870 >> Ale my by sme ešte zložiť body, ak ste si skontrolujte, či je, pretože vám 1179 00:55:48,870 --> 00:55:50,850 robili niečo, čo neboli robiť, a tie by mohli mať 1180 00:55:50,850 --> 00:55:51,860 dostal do ťažkostí. 1181 00:55:51,860 --> 00:55:54,040 Kurzy sú, aj keď pravdepodobne nie. 1182 00:55:54,040 --> 00:55:57,790 Tak toto je ukázať, že áno, stále ešte môžeme ísť na to. 1183 00:55:57,790 --> 00:55:59,010 A my nie sme dostať do Problém v tomto prípade. 1184 00:55:59,010 --> 00:56:04,000 Ak sme sa snažili urobiť si ďalších 100 znakov, by sme 1185 00:56:04,000 --> 00:56:06,000 pravdepodobne dostanete do problémov. 1186 00:56:06,000 --> 00:56:09,400 A môžete kódovať čítaní ďalšie 100 znaky, ak chcete, tým, že robí niektoré 1187 00:56:09,400 --> 00:56:10,110 druh slučky for. 1188 00:56:10,110 --> 00:56:10,850 Jo. 1189 00:56:10,850 --> 00:56:16,250 >> STUDENT: Pretože sme boli pridelení, že priestor skutočná hodnota, neboli by sme 1190 00:56:16,250 --> 00:56:17,050 v skutočnosti byť schopní vidieť nič. 1191 00:56:17,050 --> 00:56:21,740 Mali by sme to skúsiť s nastavením, ktoré rovná ako je C alebo tak niečo? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorn: Veľká otázka. 1193 00:56:22,640 --> 00:56:25,340 Ako môžem nastaviť túto hodnotu - 1194 00:56:25,340 --> 00:56:28,980 čo riadok kódu môžem napísať on-line sedem robiť to, čo si povedal? 1195 00:56:28,980 --> 00:56:34,040 >> STUDENT: Hviezda ptr rovná sa jeden quote c ukončiť jednu ponuku. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorn: Tak to je uvedenie charakter, c, na tomto mieste, 1197 00:56:36,970 --> 00:56:40,200 pretože opäť, že hviezda znamená ísť tam. 1198 00:56:40,200 --> 00:56:43,320 A ak je použitý na ľavej strane Operátor priradenia, ktorá sa rovná 1199 00:56:43,320 --> 00:56:47,270 podpísať, nebudeme sa dostať, že hodnotu tak, ako je uvedené, že hodnoty. 1200 00:56:47,270 --> 00:56:48,520 Teraz sa poďme pozrieť, čo sa stane. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Tam dáme niečo a bolo to tam. 1203 00:56:56,770 --> 00:56:58,000 Volali sme zadarmo. 1204 00:56:58,000 --> 00:57:00,100 Niektoré veci asi stalo na halde. 1205 00:57:00,100 --> 00:57:01,890 Takže to tam nie je. 1206 00:57:01,890 --> 00:57:07,440 Ale znova, nie sme stále problémy pre ísť tam. 1207 00:57:07,440 --> 00:57:10,260 >> Robím to v kóde pre ilustráciu že mnoho z nich 1208 00:57:10,260 --> 00:57:12,410 otázky, ktoré máte, sú naozaj zaujímavé 1209 00:57:12,410 --> 00:57:13,650 zodpovedá veľa času. 1210 00:57:13,650 --> 00:57:15,260 A sú naozaj dobré otázky. 1211 00:57:15,260 --> 00:57:19,010 A môžete prísť na ne na vlastné-li, napríklad, 1212 00:57:19,010 --> 00:57:19,990 nie sme v sekcii. 1213 00:57:19,990 --> 00:57:20,940 Jo. 1214 00:57:20,940 --> 00:57:24,430 >> STUDENT: Vzhľadom k tomu, že nie ste odoslanie ukazovateľ kdekoľvek, potrebujete, aby 1215 00:57:24,430 --> 00:57:26,530 používať malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirschhorn: Tak toto ide späť do pôvodného otázku. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Je to len lokálna premenná? 1219 00:57:29,980 --> 00:57:32,280 Malloc tu nie je tak presvedčivý. 1220 00:57:32,280 --> 00:57:35,260 Použitie malloc tu nie je že presvedčivé, pretože je to 1221 00:57:35,260 --> 00:57:36,500 len lokálna premenná. 1222 00:57:36,500 --> 00:57:40,970 >> Žiak: Takže si to mohol urobiť char hviezda ptr rovná ahoj? 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirschhorn: Oh. 1224 00:57:41,400 --> 00:57:43,300 Takže budeme teraz získať späť do pôvodného otázku. 1225 00:57:43,300 --> 00:57:46,885 Myslím, že ste neboli spokojní s mojou odpoveď. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Rovnako ako, že? 1228 00:57:49,226 --> 00:57:49,682 >> STUDENT: Jo. 1229 00:57:49,682 --> 00:57:50,932 Počkajte. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirschhorn: A kde chcete tlačiť? 1232 00:57:57,850 --> 00:58:00,026 Takže budeme tlačiť reťazec takého? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> STUDENT: Zaujímavé. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorn: Tak to hovorí, že to argument je typ znaku. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Tak by to malo byť znak. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> STUDENT: Len sa prvý. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorn: Tak toto je to, čo som povedal predtým. 1242 00:58:28,610 --> 00:58:34,240 Ako som povedal, že to nie je ukladanie reťazec v premennej ukazovateľ. 1243 00:58:34,240 --> 00:58:35,120 Je to skladovanie - 1244 00:58:35,120 --> 00:58:36,350 >> STUDENT: prvá hodnota reťazca. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorn: Adresa prvá hodnota reťazca. 1246 00:58:40,810 --> 00:58:46,940 Ak by sme mali vytlačiť tento, sme získanie hodnoty vnútri ukazovateľ. 1247 00:58:46,940 --> 00:58:51,005 A uvidíme, že je naozaj adresa pamäti. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Má to zmysel? 1250 00:58:56,440 --> 00:58:56,940 Prepáčte. 1251 00:58:56,940 --> 00:58:58,996 Počkajte, to, že odpoveď na vašu otázka, nie? 1252 00:58:58,996 --> 00:58:59,790 >> STUDENT: Jo. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorn: Tento riadok kódu je vytvoriť reťazec a potom ďalšie 1254 00:59:05,830 --> 00:59:09,115 variabilný ukazovateľ, ktorý sa ukázal tohto reťazca, ktoré polia. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Jo. 1257 00:59:14,980 --> 00:59:19,200 >> STUDENT: Takže keď sme išli jednu pamäť zaoberať ďalej, dostali by sme sa na h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 To bolo uložené ako reťazec? 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirschhorn: Rovnako ako sme urobili - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 tak to je cenná robiť. 1263 00:59:30,790 --> 00:59:33,780 To je bod, aritmetika, ktoré vy nevideli, a mali by byť 1264 00:59:33,780 --> 00:59:35,550 relatívne dobre. 1265 00:59:35,550 --> 00:59:36,905 To je podobné písanie - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 ak by sme mali napísať tento riadok kódu, sme predtým videli polia notáciu. 1268 00:59:46,350 --> 00:59:55,900 To by nám malo dať druhý Hodnota v tomto poli, h 1269 00:59:55,900 --> 01:00:05,010 >> Ak sme to urobili, malo by to tiež dať us druhá hodnota v tomto poli. 1270 01:00:05,010 --> 01:00:08,320 Vzhľadom k tomu, že sa bude, aby do pamäti adresa prvého vec, ale 1271 01:00:08,320 --> 01:00:10,530 pamäť adresa vec jeden cez. 1272 01:00:10,530 --> 01:00:14,360 A potom sa operátor hviezda dereferences že ukazovateľ. 1273 01:00:14,360 --> 01:00:16,940 A opäť, poďme sa pozrieť. 1274 01:00:16,940 --> 01:00:18,664 Dostaneme zase h. 1275 01:00:18,664 --> 01:00:20,980 >> STUDENT: Čo presne robí dereferencia znamená? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorn: Získavanie je fantázia slovo pre ísť. 1277 01:00:23,650 --> 01:00:26,390 Choďte na to a dostať to, čo je tam je dereferencia ukazovatele. 1278 01:00:26,390 --> 01:00:28,240 Je to len fantázia slovo pre to. 1279 01:00:28,240 --> 01:00:29,986 >> STUDENT: Ak by sme chceli k tlači celý reťazec, mohli by sme 1280 01:00:29,986 --> 01:00:31,930 to ampersand ukazovateľ? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorn: OK, sme ísť na tú pauzu. 1282 01:00:33,490 --> 01:00:35,480 Sme skončí tu. 1283 01:00:35,480 --> 01:00:41,760 Ampersand vám adresu umiestnenie, takže keď robíte ampersand z 1284 01:00:41,760 --> 01:00:44,080 premenná, to vám dáva adresu ak je táto premenná uložená. 1285 01:00:44,080 --> 01:00:48,580 Ampersand ukazovateľ vám adresa ptr kde ptr je v pamäti. 1286 01:00:48,580 --> 01:00:50,140 >> Nebudeme ísť na v tomto príklade. 1287 01:00:50,140 --> 01:00:52,640 Môžete zistiť, tieto veci na vlastnú päsť. 1288 01:00:52,640 --> 01:00:55,740 Ale znovu, to by mohlo byť dokonca hraničí bit rámec toho, čo potrebujete vedieť 1289 01:00:55,740 --> 01:00:58,000 Rozsah tejto polovici - 1290 01:00:58,000 --> 01:00:59,070 alebo to kvíz, skôr. 1291 01:00:59,070 --> 01:01:00,270 Prepáčte. 1292 01:01:00,270 --> 01:01:03,770 >> Budeme sa ďalej, pretože by som Páči sa mi urobiť jednu kódovanie problém 1293 01:01:03,770 --> 01:01:05,100 než čas vypršal. 1294 01:01:05,100 --> 01:01:09,340 A budeme kódovať, čo si myslím je najzávažnejšie z nich 1295 01:01:09,340 --> 01:01:11,020 príklady, atoi. 1296 01:01:11,020 --> 01:01:14,520 Tak toto bola otázka quiz pred dvoma rokmi. 1297 01:01:14,520 --> 01:01:17,810 A mám ho na doske tu. 1298 01:01:17,810 --> 01:01:20,680 >> Ľudia boli požiadaní o kvízu - 1299 01:01:20,680 --> 01:01:23,640 dostali trochu viac tesxt v otázka, ale ja eliminované 1300 01:01:23,640 --> 01:01:26,640 texte, pretože to bolo zbytočné pre naše účely teraz. 1301 01:01:26,640 --> 01:01:29,180 Bol to len nejaký pozadia na to, čo atoi urobil. 1302 01:01:29,180 --> 01:01:31,425 Ale vy všetci poznáme a sú veľmi oboznámení s atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Navrhujem, aby ste kód tejto na jeden list papiera. 1304 01:01:35,620 --> 01:01:39,310 Ja tiež odporúčam vám použiť stratégiu že sme prešli 1305 01:01:39,310 --> 01:01:41,040 veľa v našej sekcii. 1306 01:01:41,040 --> 01:01:44,130 Po prvé, uistite sa, že ste pochopili, čo atoi robí. 1307 01:01:44,130 --> 01:01:47,580 Nakreslite si obrázok alebo prísť s niektorými mentálny obraz o tom vo vašej hlave. 1308 01:01:47,580 --> 01:01:51,120 Ďalej vypíšte pseudokódu na to. 1309 01:01:51,120 --> 01:01:53,120 Na teste, keď všetko, čo dostanete, je pseudokódu, aspoň 1310 01:01:53,120 --> 01:01:54,550 dať niečo dole. 1311 01:01:54,550 --> 01:02:00,070 A potom sa mapa, ktorá pseudokódu na C. Ak máte kontrolu vo vašom 1312 01:02:00,070 --> 01:02:03,760 pseudokódu, rovnako ako zistiť, či niečo je 1, ktorá mapuje na ak 1313 01:02:03,760 --> 01:02:05,750 stav, a tak ďalej. 1314 01:02:05,750 --> 01:02:07,850 A konečne, kód programu v C. 1315 01:02:07,850 --> 01:02:15,000 >> Takže späť k atoi a päť minút kódovať to na jeden list 1316 01:02:15,000 --> 01:02:19,480 Papier, ktorý je asi o množstvo času by ste vziať na 1317 01:02:19,480 --> 01:02:21,260 kvíz kódu atoi. 1318 01:02:21,260 --> 01:02:27,060 Päť až 15 minút, päť až 12, päť až 10 minút, sa o výške 1319 01:02:27,060 --> 01:02:30,150 Doba by ste stráviť na to otázka v kvíze. 1320 01:02:30,150 --> 01:02:31,670 Takže päť minút, prosím. 1321 01:02:31,670 --> 01:02:35,957 A ak budete mať nejaké otázky, zvýšiť tvoja ruka a ja prídem okolo. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [SIDE Konverzácia] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorn: OK, tak to bolo päť minút. 1326 01:08:37,580 --> 01:08:39,880 To bolo asi o množstve Doba by ste stráviť na ktoré na kvíz, 1327 01:08:39,880 --> 01:08:42,120 Možno low-end v tej dobe. 1328 01:08:42,120 --> 01:08:44,010 Budeme zhrnúť v trochu. 1329 01:08:44,010 --> 01:08:45,740 Začnime kódovanie to. 1330 01:08:45,740 --> 01:08:49,479 A ak sa nám nepodarí získať celú cestu cez, Odpovede na túto a túto 1331 01:08:49,479 --> 01:08:54,189 Kontrolná otázka sú k dispozícii, znova, Jeseň 2011, ak je táto otázka 1332 01:08:54,189 --> 01:08:54,913 sa objavil na kvíz. 1333 01:08:54,913 --> 01:08:57,830 >> A stálo to za osem bodov na kvíz potom. 1334 01:08:57,830 --> 01:09:01,140 Osem bodov je na hornom konci množstvo bodov niečo stojí. 1335 01:09:01,140 --> 01:09:04,790 Väčšina otázok sa pohybuje v rozmedzí s jedným až šiestimi bodov. 1336 01:09:04,790 --> 01:09:08,500 Tak to je náročnejšie otázka, pre istotu. 1337 01:09:08,500 --> 01:09:09,750 Môže niekto, aby som začal? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Všeobecne platí, že to, čo sa nám deje chcieť robiť s tým 1340 01:09:15,380 --> 01:09:17,550 fungovať atoi, logicky? 1341 01:09:17,550 --> 01:09:19,569 Čo chceme robiť? 1342 01:09:19,569 --> 01:09:22,279 Takže budeme písať niektoré pseudokódu. 1343 01:09:22,279 --> 01:09:24,090 >> STUDENT: Prevod znakov na celé čísla. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorn: Prevod znakov na celé čísla. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Takže, koľko znakov sme bude musieť prejsť? 1347 01:09:30,870 --> 01:09:32,295 >> STUDENT: Všetci z nich. 1348 01:09:32,295 --> 01:09:34,100 >> STUDENT: Všetky postavy v reťazci. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorn: Všetky znaky v reťazci. 1350 01:09:35,540 --> 01:09:42,180 Takže ak by sme chceli prejsť každý znak v reťazci, to je vec 1351 01:09:42,180 --> 01:09:44,560 v C sme videli, že umožnila nám prejsť každý 1352 01:09:44,560 --> 01:09:45,939 znak v reťazci? 1353 01:09:45,939 --> 01:09:46,819 >> ŠTUDENTI: pre sláčiky. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorn: pre sláčiky. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Takže budeme prechádzať každá postava v s. 1357 01:09:55,330 --> 01:10:00,940 >> Tak čo budeme chcieť robiť keď dostaneme špecifický charakter? 1358 01:10:00,940 --> 01:10:02,480 Povedzme, že sme stále schválil 90. 1359 01:10:02,480 --> 01:10:03,460 Dostávame 9. 1360 01:10:03,460 --> 01:10:04,240 Je to postava. 1361 01:10:04,240 --> 01:10:07,440 Čo chceme urobiť s že postava 9? 1362 01:10:07,440 --> 01:10:10,082 >> STUDENT: odčítajte to z povahy 0? 1363 01:10:10,082 --> 01:10:11,860 >> STUDENT: Pridať 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorn: Odpočítať je z povahy 0? 1365 01:10:13,350 --> 01:10:13,800 >> STUDENT: Jo. 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirschhorn: Prečo Ak chcete robiť, že? 1367 01:10:15,573 --> 01:10:16,560 >> STUDENT: [nepočuteľné] 1368 01:10:16,560 --> 01:10:17,010 hodnota. 1369 01:10:17,010 --> 01:10:18,380 Jeho int hodnotu. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirschhorn: OK, takže sme sa znak 9, odpočítame od 1371 01:10:21,580 --> 01:10:25,820 znak 0, aby sa aktuálne číslo 9. 1372 01:10:25,820 --> 01:10:27,070 Sladké. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 A ako viete, že charakter 9 mínus 0 postava je 9? 1375 01:10:37,000 --> 01:10:39,222 Čo chart ste sa na? 1376 01:10:39,222 --> 01:10:43,130 >> STUDENT: K dispozícii sú logicky deväť miesta medzi 9 a 0.. 1377 01:10:43,130 --> 01:10:44,620 Alebo by ste sa mohli pozrieť na tabuľku ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorn: ASCII tabuľka. 1379 01:10:45,120 --> 01:10:46,490 Ale áno, máte pravdu rovnako. 1380 01:10:46,490 --> 01:10:47,780 Takže odpočítame 0. 1381 01:10:47,780 --> 01:10:49,010 Takže teraz máme číslo 9. 1382 01:10:49,010 --> 01:10:49,970 A to, čo chceme robiť, že? 1383 01:10:49,970 --> 01:10:54,970 Ak budeme mať 90, to je prvé číslo sme, čo chceme robiť? 1384 01:10:54,970 --> 01:10:58,180 >> STUDENT: ja by som dal do dočasného celé číslo pole, urobte matematiku na to 1385 01:10:58,180 --> 01:11:02,088 neskôr, aby to do konca. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirschhorn: OK. 1387 01:11:03,020 --> 01:11:06,990 >> STUDENT: Môžete začať na konci roka pole a potom sa presunúť dopredu tak, 1388 01:11:06,990 --> 01:11:10,350 že zakaždým, keď budete pohybovať vpred, to vynásobte 10. 1389 01:11:10,350 --> 01:11:10,830 >> JASON Hirschhorn: OK. 1390 01:11:10,830 --> 01:11:12,250 To znie ako celkom presvedčivý nápad. 1391 01:11:12,250 --> 01:11:16,040 Môžeme začať na konci nášho poľa, a môžeme použiť strleng. 1392 01:11:16,040 --> 01:11:17,030 Môžeme použiť strleng tu. 1393 01:11:17,030 --> 01:11:18,870 Dostaneme dĺžku nášho reťazca. 1394 01:11:18,870 --> 01:11:20,100 Začneme na konci. 1395 01:11:20,100 --> 01:11:29,170 A + prvé, len sme sa, že integer, a možno by sme vytvoriť ako 1396 01:11:29,170 --> 01:11:32,270 Nová integer premenná up top, kde sme ukladanie všetko. 1397 01:11:32,270 --> 01:11:37,340 Tak sme slučka cez všetky char v S z späť na prednej strane, odpočítame 0, a 1398 01:11:37,340 --> 01:11:42,790 potom sme si to, a v závislosti na tam, kde je, sme to násobiť 1399 01:11:42,790 --> 01:11:45,860 o sile 10. 1400 01:11:45,860 --> 01:11:50,644 Pretože prvé, čo máme násobiť krajné znak? 1401 01:11:50,644 --> 01:11:51,440 >> STUDENT: 10 na 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirschhorn: 10 na 0. 1403 01:11:53,170 --> 01:11:56,010 Čo sa množiť druhej najpravejšie znak by? 1404 01:11:56,010 --> 01:11:57,450 >> STUDENT: [nepočuteľné]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorn: Čo? 1406 01:11:57,960 --> 01:11:59,150 >> STUDENT: 10 na 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirschhorn: 10 na 1. 1408 01:12:00,420 --> 01:12:03,754 Tretia najviac vpravo znak? 1409 01:12:03,754 --> 01:12:04,580 >> STUDENT: 10 na 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirschhorn: 10 na 2. 1411 01:12:05,350 --> 01:12:07,200 >> STUDENT: Ospravedlňujem sa, ale nerozumiem to, čo tu robíme. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorn: OK, vráťme sa teda. 1413 01:12:08,640 --> 01:12:12,500 Takže budeme mať prešiel v reťazci. 1414 01:12:12,500 --> 01:12:14,470 Pretože sme písať atoi. 1415 01:12:14,470 --> 01:12:15,260 Tak sme si prešiel v reťazci. 1416 01:12:15,260 --> 01:12:17,640 Povedzme, že sme stále prešiel v reťazci 90. 1417 01:12:17,640 --> 01:12:19,930 >> Prvá vec, ktorú sa chystáte urobiť, je nastaviť nové číslo premenné, ktoré sme 1418 01:12:19,930 --> 01:12:22,150 len tak k vytvoreniu ako naše nové číslo. 1419 01:12:22,150 --> 01:12:24,630 To je to, čo budeme Pre návrat na konci. 1420 01:12:24,630 --> 01:12:30,110 Musíme prejsť každý znak v reťazec, pretože sme došli k záveru, 1421 01:12:30,110 --> 01:12:34,430 že sa musíme dotknúť každý z nich a potom ho pridajte do našej novej číslo. 1422 01:12:34,430 --> 01:12:36,330 >> Ale nemôžeme len pridať ako číslo. 1423 01:12:36,330 --> 01:12:38,270 Nemôžeme len tak 9 a pridať 9 do našej celé číslo. 1424 01:12:38,270 --> 01:12:40,560 Záleží na tom, aké miesto je v reťazci. 1425 01:12:40,560 --> 01:12:42,960 Budeme musieť násobiť je to o sile 10. 1426 01:12:42,960 --> 01:12:45,580 Vzhľadom k tomu, že to, ako základňa 10 diel. 1427 01:12:45,580 --> 01:12:49,050 >> Takže budeme mať skutočný znak, alebo skutočné číslo 1428 01:12:49,050 --> 01:12:53,860 číslo, odpočítaním znak 0 od znaku 9, ako sme to urobili s 1429 01:12:53,860 --> 01:12:57,560 odpočítaním znak kapitálu od bez ohľadu na charakter sme mali v jednom 1430 01:12:57,560 --> 01:12:58,120 tieto problémy. 1431 01:12:58,120 --> 01:13:04,190 Takže budeme vlastne mať číslo od 0 do 9 uložený ako reálne číslo, a my budeme 1432 01:13:04,190 --> 01:13:07,590 vynásobte to o sile 10 v závislosti na tom, kde sme v reťazci. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 A potom budeme pridať späť do našej novej celočíselné premenné. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Tak čo to bude vyzerať by byť - budeme čerpať tu. 1437 01:13:37,890 --> 01:13:40,086 Ak by sme si prešiel v reťazci 90 - 1438 01:13:40,086 --> 01:13:41,336 >> STUDENT: [nepočuteľné]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorn: Ale atoi vezme reťazec. 1441 01:13:45,540 --> 01:13:46,350 Takže ideme prejsť hospodárstva. 1442 01:13:46,350 --> 01:13:49,900 Budeme si prešiel v 90.. 1443 01:13:49,900 --> 01:13:51,540 Ideme zo zadnej na prednej strane. 1444 01:13:51,540 --> 01:13:53,920 Berieme 0. 1445 01:13:53,920 --> 01:13:55,080 >> STUDENT: Ospravedlňujem sa. 1446 01:13:55,080 --> 01:13:55,880 Možno je to hlúposť. 1447 01:13:55,880 --> 01:13:59,440 Ak budeme sa prešiel v reťazci, Prečo je 90, čo sme 1448 01:13:59,440 --> 01:14:00,260 ako prešiel v roku? 1449 01:14:00,260 --> 01:14:03,160 Pretože 90 je celé číslo. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorn: Vzhľadom k tomu, atoi sa string a zmení to na celé číslo 1451 01:14:06,820 --> 01:14:08,320 zastúpenie tohto reťazca. 1452 01:14:08,320 --> 01:14:13,650 Ale reťazec 90 nie je celé číslo 90 alebo číslo 90. 1453 01:14:13,650 --> 01:14:17,920 Reťazec 90 je pole z dvoch, alebo tri postavy, skôr, 9 1454 01:14:17,920 --> 01:14:22,740 znak, znak 0, a spätné lomítko 0 znak. 1455 01:14:22,740 --> 01:14:26,260 >> A budeme písať atoi, pretože pre Napríklad, keď budete mať príkaz 1456 01:14:26,260 --> 01:14:30,230 argument riadok, a to je uložené v argv, je to uložené ako reťazec. 1457 01:14:30,230 --> 01:14:32,940 Ale ak chcete, aby ju liečiť ako číslo, musíte ho previesť na 1458 01:14:32,940 --> 01:14:34,700 aktuálne číslo. 1459 01:14:34,700 --> 01:14:37,210 Čo sme urobili jeden z našich problémov sád. 1460 01:14:37,210 --> 01:14:38,800 Ktoré sme urobili v rade našich problémových sád. 1461 01:14:38,800 --> 01:14:41,690 Každý, kto sa celé číslo ako argument príkazového riadku. 1462 01:14:41,690 --> 01:14:46,490 Takže to je dôvod, prečo naše atoi funkcie berie reťazec. 1463 01:14:46,490 --> 01:14:51,910 >> Takže znovu, v našom príklade tu, sme bude trvať ten posledný. 1464 01:14:51,910 --> 01:14:55,050 Budeme odpočítať charakter 0 z toho, pretože znaky 0 1465 01:14:55,050 --> 01:14:58,810 odpočíta charakterom 0 vám Skutočný počet 0, v závislosti na 1466 01:14:58,810 --> 01:15:00,950 ASCII matematika, čo robíme. 1467 01:15:00,950 --> 01:15:04,870 >> Vzhľadom k tomu, znaky sú reprezentované ako iný ako ich skutočný - 1468 01:15:04,870 --> 01:15:08,830 charakter, napríklad, malá 97. 1469 01:15:08,830 --> 01:15:10,260 Nie je to - oops! 1470 01:15:10,260 --> 01:15:13,290 Nie je to, čo by ste čakali aby to bolo, 0, napríklad. 1471 01:15:13,290 --> 01:15:16,200 Takže budete musieť odpočítať charakter, aby sa 0.. 1472 01:15:16,200 --> 01:15:18,950 >> Takže ideme na to, že tu získať skutočný počet. 1473 01:15:18,950 --> 01:15:22,560 A potom budeme násobiť ju sila 10, v závislosti na tom, kde 1474 01:15:22,560 --> 01:15:27,030 je v reťazci, a potom, že a pridajte ju do našej držiaku miesto 1475 01:15:27,030 --> 01:15:32,520 variabilný, takže môžeme prísť s naše posledné nové číslo. 1476 01:15:32,520 --> 01:15:35,080 Znamená to, že má zmysel pre každého? 1477 01:15:35,080 --> 01:15:37,730 >> Takže nebudeme kódovať tento práve teraz, pretože sme 1478 01:15:37,730 --> 01:15:38,830 ako málo času. 1479 01:15:38,830 --> 01:15:40,860 Ospravedlňujem sa za načasovanie, že. 1480 01:15:40,860 --> 01:15:44,620 Ale je to to, čo, dúfajme, že by ste byť schopní to urobiť na kvíz - na 1481 01:15:44,620 --> 01:15:47,710 Prinajmenšom si to pseudokódu napísaný. 1482 01:15:47,710 --> 01:15:50,840 >> A potom, keď sme boli písať pseudokódu, v skutočnosti, môžeme to urobiť 1483 01:15:50,840 --> 01:15:51,490 celkom rýchlo. 1484 01:15:51,490 --> 01:15:55,230 Každý riadok komentárov sme napísali sme tu prekladá do asi 1485 01:15:55,230 --> 01:15:56,970 jeden riadok C kódu. 1486 01:15:56,970 --> 01:16:01,780 Vyhlásenie novej premennej, písanie slučky, niektoré odčítanie, niektoré 1487 01:16:01,780 --> 01:16:07,070 násobenie, a niektoré priradenie. 1488 01:16:07,070 --> 01:16:09,020 Mali by sme asi tiež chcieť, aby napísať vratné potrubie. 1489 01:16:09,020 --> 01:16:12,040 Tiež by sme mohli chcieť, aby niektoré kontroly v tu. 1490 01:16:12,040 --> 01:16:12,655 Jo. 1491 01:16:12,655 --> 01:16:15,720 >> Žiak: Takže môžeme liečiť s ako skutočné reťazca? 1492 01:16:15,720 --> 01:16:18,730 Pretože viem, že je to len adresa. 1493 01:16:18,730 --> 01:16:22,090 Rovnako ako, ako by ste si dĺžku reťazec je prešiel? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorn: Tak ako ste dĺžka reťazca? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> STUDENT: strlen, jo. 1497 01:16:26,660 --> 01:16:30,550 Ale môžete si dať s ako Argument, že? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorn: Tak strlen trvá char hviezdu. 1499 01:16:34,620 --> 01:16:38,090 A z toho vyplýva, že char hviezdu, a to udržuje v počítaní, kým sa dostane do 1500 01:16:38,090 --> 01:16:41,865 spätné lomítko 0. strlen bol vlastne jeden z ďalších programov sme 1501 01:16:41,865 --> 01:16:42,850 išli do kódu. 1502 01:16:42,850 --> 01:16:44,560 To je ďalší dobrý kódu. 1503 01:16:44,560 --> 01:16:47,270 To je jedna to trochu jednoduchšie, pretože ak budete premýšľať o tom, že 1504 01:16:47,270 --> 01:16:47,830 koncepčne - 1505 01:16:47,830 --> 01:16:51,620 Len som to povedal nahlas - strlen takto ukazovateľ a stále deje, a 1506 01:16:51,620 --> 01:16:54,210 počítanie a sledovanie, kým dostanete spätné lomítko 0. 1507 01:16:54,210 --> 01:16:56,530 >> STUDENT: OK, to mám. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirschhorn: Takže najlepšie šťastie na kvíz 0 zajtra. 1509 01:17:00,200 --> 01:17:03,170 Ak máte nejaké otázky, budem byť vonku po tomto. 1510 01:17:03,170 --> 01:17:05,610 Neváhajte a napíšte mi. 1511 01:17:05,610 --> 01:17:08,480 Osloviť svoje vlastné TF, ak ste Nie je v mojej časti, alebo sa my 1512 01:17:08,480 --> 01:17:10,005 e-mail, ak budete chcieť. 1513 01:17:10,005 --> 01:17:13,140 >> Ak chcete šalieť a pošlite mi e-mail, třeštění e-mail, budem 1514 01:17:13,140 --> 01:17:16,710 poslať ťa späť, ako, emotikony, alebo, ako, vtip alebo tak niečo. 1515 01:17:16,710 --> 01:17:18,190 Tak neváhajte to urobiť rovnako. 1516 01:17:18,190 --> 01:17:20,750 Veľa šťastia znova, a budem Uvidíme sa budúci týždeň. 1517 01:17:20,750 --> 01:17:23,435