1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorn: Welcome až A5, všichni. 3 00:00:07,820 --> 00:00:11,270 Máme vzrušující týden před námi, hlavně proto, že tam je tak mnoho nových 4 00:00:11,270 --> 00:00:12,350 čelí v této místnosti. 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 se zde náhodou, což je ještě lepší. 7 00:00:15,740 --> 00:00:18,220 Takže doufejme, že budete držet k nám. 8 00:00:18,220 --> 00:00:20,220 >> Tento týden budeme trávit Převážná část úseku 9 00:00:20,220 --> 00:00:21,870 příprava na kvíz. 10 00:00:21,870 --> 00:00:26,580 Takže na našem programu, budeme mluvit něco o zdrojích pro třídu, 11 00:00:26,580 --> 00:00:30,350 ale také pro testu, a pak znovu, tráví většinu třídy mluvení 12 00:00:30,350 --> 00:00:31,390 o otázkách. 13 00:00:31,390 --> 00:00:33,900 Jakmile jsme hotovi odpovědi na vaše otázky, nebo pokud vaše otázky 14 00:00:33,900 --> 00:00:39,010 přirozeně nás vedou k nějaké kódování, jsem mají vzorek problémy z midterms 15 00:00:39,010 --> 00:00:43,180 minulost, že budeme kódovat žít v sekci dohromady, že také vychovávat jiné 16 00:00:43,180 --> 00:00:45,420 dobré téma k pokrytí. 17 00:00:45,420 --> 00:00:48,280 >> Takže první, co jsme prošli za posledních pár týdnů, aby vám připomněl, 18 00:00:48,280 --> 00:00:51,700 chlapi, tam jsou tuny zdrojů k dispozici pro tento kurz. 19 00:00:51,700 --> 00:00:55,020 Mnoho z nich bude nesmírně užitečná na vás, jak si i nadále 20 00:00:55,020 --> 00:00:57,280 studovat kvíz 0, protože je to v úterý odpoledne. 21 00:00:57,280 --> 00:00:59,630 Takže vy všichni byli studuje na chvíli. 22 00:00:59,630 --> 00:01:02,640 >> K dispozici jsou skripta a zdroje kód, který by měl 23 00:01:02,640 --> 00:01:04,050 určitě vyzkoušet. 24 00:01:04,050 --> 00:01:05,019 Podívejte se na šortky. 25 00:01:05,019 --> 00:01:07,470 Podívejte se na study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 A pak, jsou uvedeny níže, řada z jiných zdrojů. 27 00:01:11,770 --> 00:01:14,020 >> Opět platí, že kvíz 0 je zítra při 1 hodině. 28 00:01:14,020 --> 00:01:18,230 Pokud jste tak ještě neučinili, zkontrolujte, zda ven O Quiz 0 doklad o 29 00:01:18,230 --> 00:01:21,370 Domovská stránka hřiště je přijít na to, kde bereš kvíz. 30 00:01:21,370 --> 00:01:25,770 Kvíz začíná v 01:10 a končí 70 minut později. 31 00:01:25,770 --> 00:01:29,610 Takže pokud se objevíš po 01:10, budete dostaneme, že mnoho méně minut 32 00:01:29,610 --> 00:01:30,940 než 70, aby se kvíz. 33 00:01:30,940 --> 00:01:33,570 Takže ujistěte se, že jste tam včas. 34 00:01:33,570 --> 00:01:38,690 Pokud jste rozšíření student nebo mají některé další testování úvahy, že 35 00:01:38,690 --> 00:01:40,400 nemusí být na jedno hodin zítra. 36 00:01:40,400 --> 00:01:43,540 Ale opět, zkontrolujte O kvíz 0 dokumentovat, aby se ujistil, víte, kdy 37 00:01:43,540 --> 00:01:44,760 užíváte kvíz. 38 00:01:44,760 --> 00:01:46,440 Napsal jsem 75 minut sem. 39 00:01:46,440 --> 00:01:48,580 Myslím, že je to v pořádku, ne 70. 40 00:01:48,580 --> 00:01:53,420 >> To se vztahuje na veškerý materiál od jednoho týdne 0 se minulý týden přednášky ve středu. 41 00:01:53,420 --> 00:01:59,350 A opět, v tomto testu, na který dokument, dostanete jeden oboustranný a 8 42 00:01:59,350 --> 00:02:03,770 1/2 do 11 listu papíru, které dostanete použít jako poznámky během testu. 43 00:02:03,770 --> 00:02:08,570 Mnoho lidí, pokud ne většina lidí, mají zjistil, že jeden z nejdůležitějších užitečný způsob, 44 00:02:08,570 --> 00:02:11,970 ke studiu na kvíz je provést studie list, 45 00:02:11,970 --> 00:02:13,730 jedno-Sider, jejich vlastní. 46 00:02:13,730 --> 00:02:17,710 Tak se podívejte na ty poslední, pokud jste viděli ty předchozí. 47 00:02:17,710 --> 00:02:19,960 Oslovit přátele, aby viděli, co oni jsou umístění na jejich. 48 00:02:19,960 --> 00:02:23,610 >> Ale hands-dolů, nejlepší způsob, jak můžete Studie je projít všechno a 49 00:02:23,610 --> 00:02:26,530 ořezávat ho na to, co by měl nebo by měl nepatří na tomto listu 50 00:02:26,530 --> 00:02:30,570 papír, protože to je prostě fakt užitečné jak pro vás, aby se ujistil, 51 00:02:30,570 --> 00:02:33,620 jdete přes všechno a mít nějaké znalosti s ním. 52 00:02:33,620 --> 00:02:36,690 Většina lidí, najdeme, i když se list papíru sedí přímo 53 00:02:36,690 --> 00:02:39,840 vedle nich na kvíz, neotáčejte na to, protože, opět, že velmi 54 00:02:39,840 --> 00:02:43,290 Proces prochází informací pomohl jim se to naučit. 55 00:02:43,290 --> 00:02:45,370 >> Má někdo nějaké 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šem - 58 00:02:51,450 --> 00:02:53,230 Nebudu dělat show rukou. 59 00:02:53,230 --> 00:02:53,550 To nic. 60 00:02:53,550 --> 00:02:54,790 Chtěl jsem se zeptat, kdo začal studovat. 61 00:02:54,790 --> 00:02:58,360 Ale já nechci, aby se ti vše není zvedněte ruce. 62 00:02:58,360 --> 00:03:01,290 Takže jak jsem řekl - ano, Avi, jděte do toho. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Jaký by měl být užitečná věc aby na jedné 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ískáte používat svůj úsudek. 66 00:03:08,210 --> 00:03:13,220 Užitečné věci, aby na jedné pager, pokud jste zmateni o velké O 67 00:03:13,220 --> 00:03:17,510 runtime různých typů vyhledávání a druhy, dej 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, pokud jste požádal, aby na kvíz, nemusíte se snažit a číslo 70 00:03:22,250 --> 00:03:23,560 to, nebo důvod, proč přes běhu. 71 00:03:23,560 --> 00:03:24,730 Stačí si jen zkopírovat dolů. 72 00:03:24,730 --> 00:03:28,320 Podíváte-li se na kvízy minulosti, hodně časy, tam běží čas na otázky. 73 00:03:28,320 --> 00:03:34,150 Tak to by bylo příkladem dobré co dát na jednu pager. 74 00:03:34,150 --> 00:03:37,450 >> Další dobré věci dát na, pokud jste zmatená o tom, jak deklarovat 75 00:03:37,450 --> 00:03:40,570 funkce, nebo to, co různé části deklarace funkce jsou, napsat 76 00:03:40,570 --> 00:03:43,400 že tam, generické verze a pak možná příkladem. 77 00:03:43,400 --> 00:03:47,290 Pokud jste zmateni o ukazatele, diagram, jak ukazatele práce 78 00:03:47,290 --> 00:03:48,660 asi opravdu užitečné. 79 00:03:48,660 --> 00:03:52,440 Pokud jste zmateni o rekurze, ochutnat rekurzivní funkce tam 80 00:03:52,440 --> 00:03:54,980 mohl také ukázat jako velmi užitečné. 81 00:03:54,980 --> 00:03:57,290 Znamená to, že vám nějaké nápady? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Musíte pochopit, Celá kompilace proces, stejně jako 83 00:04:01,820 --> 00:04:03,220 jak to všechno funguje? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorn: Vše , která byla pokryta mohl 85 00:04:06,620 --> 00:04:08,060 ukázat 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ět, některé věci bude vážené těžce než ostatní. 88 00:04:11,300 --> 00:04:14,330 Některé věci mají přijít znovu až a znovu ve třídě, v 89 00:04:14,330 --> 00:04:15,590 přednáška a sekce. 90 00:04:15,590 --> 00:04:17,220 Ostatní věci nemají přijít tak často. 91 00:04:17,220 --> 00:04:22,900 >> Mluvili jsme hodně o # include a -L něco a co ty na mysli v 92 00:04:22,900 --> 00:04:24,390 Proces kompilace. 93 00:04:24,390 --> 00:04:29,120 Mluvili jsme hodně o GDB, lepit, ty různé příznaky, které se používají při 94 00:04:29,120 --> 00:04:33,100 jsme se sestavit něco, a to make15, například, opravdu 95 00:04:33,100 --> 00:04:34,510 znamená, a opravdu. 96 00:04:34,510 --> 00:04:38,110 Jsme nemluvili tolik o každý krok 97 00:04:38,110 --> 00:04:39,240 Proces kompilace. 98 00:04:39,240 --> 00:04:40,410 Pořád ještě jsme o tom mluvili. 99 00:04:40,410 --> 00:04:42,550 Takže je to stále něco, co by měli být obeznámeni se. 100 00:04:42,550 --> 00:04:44,610 Ale opět, my nebude - 101 00:04:44,610 --> 00:04:49,140 věci, které přicházejí častěji ve třídě jsou více pravděpodobné, že přijít více 102 00:04:49,140 --> 00:04:52,495 často a být přísněji vážené na kvíz. 103 00:04:52,495 --> 00:04:53,280 >> V pohodě. 104 00:04:53,280 --> 00:04:54,580 Jakékoliv další otázky týkající se kvízu 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, tak jsem dal seznam témata na palubě. 107 00:05:00,050 --> 00:05:01,550 Šel jsem přes osnov. 108 00:05:01,550 --> 00:05:07,340 Prošel jsem úseku recenze od včera v noci a ty snímky přijít 109 00:05:07,340 --> 00:05:13,710 s non-vyčerpávající seznam témat že jsme se zabývali tak daleko CS50 110 00:05:13,710 --> 00:05:16,800 a věci, které by mohly se objeví na kvíz. 111 00:05:16,800 --> 00:05:19,900 Tak jsem to jít přes každý jeden z nich. 112 00:05:19,900 --> 00:05:22,370 To by se mnohem více čas, než máme nyní. 113 00:05:22,370 --> 00:05:26,880 Ale dal jsem to sem, aby doufejme jog paměť jako k věcem, které mohou být 114 00:05:26,880 --> 00:05:28,420 nebo nemusí být obeznámeni s vámi. 115 00:05:28,420 --> 00:05:32,850 >> A já bych rád tráví většinu část odpovědi na vaše otázky o tom, 116 00:05:32,850 --> 00:05:35,130 Tato témata, témata, která zde nejsou zahrnuty. 117 00:05:35,130 --> 00:05:36,130 Můžeme psát pseudo kód. 118 00:05:36,130 --> 00:05:40,010 Můžeme napsat skutečný kód aby bylo zajištěno, že - 119 00:05:40,010 --> 00:05:44,280 Mohu odpovědět na vaši otázku, a pomoci všichni v podstatě chápat 120 00:05:44,280 --> 00:05:48,330 Mnoho z těchto témat, takže se budete cítit připraven a pohodlně jít do 121 00:05:48,330 --> 00:05:50,150 zítra kvíz. 122 00:05:50,150 --> 00:05:52,300 Tak si přečtěte na seznam. 123 00:05:52,300 --> 00:05:54,780 Vy snad přišli na úseku s některými otázkami stejně. 124 00:05:54,780 --> 00:05:58,480 Až budete připraveni, zvedni ruku a my jsme se mohli začít. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Mějte na paměti, že otázky, které jste, neexistují hloupé otázky. 127 00:06:05,200 --> 00:06:06,250 Slyšeli jsme, že hodně. 128 00:06:06,250 --> 00:06:09,490 A otázky, které jste, jsem ochoten vsadit, mnoho jiných lidí i 129 00:06:09,490 --> 00:06:11,740 sedím a sledování on-line jsou také. 130 00:06:11,740 --> 00:06:13,770 Takže můžete pomoci jen lidi kladením otázek. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: Mezi zásobníku a haldy, je zde předběžně vyčleněná 133 00:06:18,040 --> 00:06:22,880 procento paměti, která je definována jako to je na zásobníku nebo haldy? 134 00:06:22,880 --> 00:06:25,010 Nebo jak to funguje, přesně? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorn: Velká otázka. 136 00:06:26,230 --> 00:06:28,640 Jdu zjistit zpětně trochu. 137 00:06:28,640 --> 00:06:30,910 Má všem - 138 00:06:30,910 --> 00:06:31,660 prosím zde upřímný. 139 00:06:31,660 --> 00:06:34,130 Vím, že žádám vás, abyste zvýšit vaše ruka před svými vrstevníky. 140 00:06:34,130 --> 00:06:38,510 Ale jsou tu lidé, kteří se cítí nepříjemný zásobníku a haldy 141 00:06:38,510 --> 00:06:42,980 a chtěl bych jít přes které a co ty myslíš? 142 00:06:42,980 --> 00:06:43,880 Pokud Zvedněte ruku - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Děkuju. 145 00:06:45,120 --> 00:06:48,420 Takže jsme jít stoh a haldy opravdu rychle a pak 146 00:06:48,420 --> 00:06:50,370 přesunout do odpovědi na vaši otázku. 147 00:06:50,370 --> 00:06:58,250 >> Takže pokud budeme čerpat z krabice, aby zastupoval paměť na vašem počítači, jaké jsou některé 148 00:06:58,250 --> 00:07:02,160 věci, které jdou v tomto poli? 149 00:07:02,160 --> 00:07:03,630 Hlavní. 150 00:07:03,630 --> 00:07:04,020 Hlavní funkcí. 151 00:07:04,020 --> 00:07:05,890 Tam, kde se hlavní jít? 152 00:07:05,890 --> 00:07:08,090 >> STUDENT: [neslyšitelné]. 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 Co jiného jde v tomto poli? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> STUDENT: Funkce, které voláte. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Funkce které nazýváme. 159 00:07:19,020 --> 00:07:20,440 A kam jdou? 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 jít na stack. 162 00:07:22,380 --> 00:07:27,350 Takže budeme nazývat co tady dole zásobník. 163 00:07:27,350 --> 00:07:31,880 A až nahoře, máme hromadu. 164 00:07:31,880 --> 00:07:35,450 Takže paměť není box, stejně jako to. 165 00:07:35,450 --> 00:07:37,330 Ale to je vlastně docela podobné. 166 00:07:37,330 --> 00:07:40,840 Bude to mít hodně krabic přes a více, v závislosti na tom, jak velká je vaše 167 00:07:40,840 --> 00:07:43,730 Počítač je nebo jak velká je vaše paměť. 168 00:07:43,730 --> 00:07:46,950 >> Na quote-konec citátu "zdola" je zásobník. 169 00:07:46,950 --> 00:07:50,880 A existuje několik věcí, že jdou na stack. 170 00:07:50,880 --> 00:07:53,840 A ti, závisí na funkcích Máte ve vašem kódu. 171 00:07:53,840 --> 00:07:57,780 Vždy máte jednu funkci ve vaší Kód tzv. hlavní, takže je tu vždy 172 00:07:57,780 --> 00:08:00,480 Sekce tady dole v zásobník věnována hlavní. 173 00:08:00,480 --> 00:08:03,980 >> Tyto oddíly v zásobníku se nazývají zásobník rámy. 174 00:08:03,980 --> 00:08:09,580 Při volání jiné funkce, řekl hlavní volá binární vyhledávací funkce, 175 00:08:09,580 --> 00:08:11,075 dáme další rámeček na zásobníku. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Přesněji řečeno, budeme darovat kus paměti na našich 178 00:08:17,320 --> 00:08:22,960 počítač ukládat binární vyhledávání je místní proměnné a spustit binární 179 00:08:22,960 --> 00:08:24,150 Vyhledávání kód. 180 00:08:24,150 --> 00:08:26,810 >> Tak nazýváme binární vyhledávání. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 V tomto kusu paměti, jedeme ukládat své lokální proměnné. 183 00:08:33,340 --> 00:08:35,270 Budeme ukládat své printf volání. 184 00:08:35,270 --> 00:08:38,159 Ať se stane cokoliv, že funkce je bude uložen přímo tam. 185 00:08:38,159 --> 00:08:40,350 Binární vyhledávání je bude provádět. 186 00:08:40,350 --> 00:08:42,210 To se chystá dokončit spuštění. 187 00:08:42,210 --> 00:08:47,450 Co je to slovo v jazyce C, který označuje že funkce by měla 188 00:08:47,450 --> 00:08:49,306 dokončit 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 když vidíte, příkaz return, funkční konce 192 00:08:53,230 --> 00:08:54,350 když to udeří to. 193 00:08:54,350 --> 00:08:56,740 Takže binární vyhledávání zasáhne jeho návrat. 194 00:08:56,740 --> 00:09:01,360 Tato část paměti bude v podstatě se uvolnilo. 195 00:09:01,360 --> 00:09:03,510 A hlavní půjdou zpět do výkonu. 196 00:09:03,510 --> 00:09:07,240 Takže hlavní se zastaví tam, kde byl, volání binární vyhledávání, trochu návratovou hodnotu, 197 00:09:07,240 --> 00:09:08,700 a pokračovat v realizaci. 198 00:09:08,700 --> 00:09:10,840 Tento stack frame půjde pryč. 199 00:09:10,840 --> 00:09:14,810 >> Pokud říkáme rekurzivní funkci, která je funkce, která volá sama sebe přes 200 00:09:14,810 --> 00:09:18,480 a více, mohli bychom dostat - říci, že jsme udělal binární hledání rekurzivně. 201 00:09:18,480 --> 00:09:21,520 Mohli bychom se binární vyhledávací verze jednoho, binární vyhledávání dva, binární vyhledávání 202 00:09:21,520 --> 00:09:24,090 tři, čtyři binární vyhledávání, binární vyhledávání pět. 203 00:09:24,090 --> 00:09:27,950 A pak je to konečná binární vyhledávání pět zasáhne základní věci, a zásobník 204 00:09:27,950 --> 00:09:31,010 rámy se vrátit zpět a udržet zavírání až se dostaneme zpět do hlavního. 205 00:09:31,010 --> 00:09:32,530 Můžeme jít na rekurzi v trochu. 206 00:09:32,530 --> 00:09:35,530 Ale to všechno znamená, že pokud jste volání více funkcí najednou, 207 00:09:35,530 --> 00:09:39,250 tam bude více stack rámy na zásobníku. 208 00:09:39,250 --> 00:09:42,900 >> Haldy, na druhé straně, a to až zde, není pro funkce, 209 00:09:42,900 --> 00:09:44,380 ne pro lokální proměnné. 210 00:09:44,380 --> 00:09:48,920 Je to pro dynamicky přidělovány proměnné. 211 00:09:48,920 --> 00:09:57,210 To jsou proměnné, které mohou být inicializován buď hlavní nebo 212 00:09:57,210 --> 00:09:58,640 funkce, která hlavní hovory. 213 00:09:58,640 --> 00:10:00,790 Kdekoli v kódu, které mohou být inicializovány. 214 00:10:00,790 --> 00:10:04,360 A inicializovat dynamicky přidělena proměnné. 215 00:10:04,360 --> 00:10:06,970 Jaké funkce v jazyce C máme používat? 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ískáte prostor paměti. 220 00:10:12,260 --> 00:10:15,020 A to je prostor paměti je na hromadu. 221 00:10:15,020 --> 00:10:18,840 A to je prostor paměti zůstane tam, dokud budete volat zdarma. 222 00:10:18,840 --> 00:10:22,670 >> Takže dynamicky alokované proměnné haldy bude existovat tak dlouho, jako ty 223 00:10:22,670 --> 00:10:25,250 chcete, aby existovat, a nebudou odejít, dokud explicitně 224 00:10:25,250 --> 00:10:26,760 řekněte jim, ať jdou pryč. 225 00:10:26,760 --> 00:10:29,670 Můžete je vytvořit v jedné funkci. 226 00:10:29,670 --> 00:10:31,930 Tato funkce je zásobník rámeček zmizí. 227 00:10:31,930 --> 00:10:35,490 Ale, že proměnná bude nadále existovat v hromadu, dokud není osvobozen, 228 00:10:35,490 --> 00:10:39,650 potenciálně funkcí, který se nazývá binární vyhledávání nebo cokoliv jiného. 229 00:10:39,650 --> 00:10:42,580 >> Takže ty haldy proměnné zůstat tam tak dlouho, jak budete chtít 230 00:10:42,580 --> 00:10:43,490 jim, aby zůstali tam. 231 00:10:43,490 --> 00:10:46,090 A oni se sem dostal. 232 00:10:46,090 --> 00:10:47,450 A pak další, kdo se dostane tam dal. 233 00:10:47,450 --> 00:10:50,210 Udržují se plní do, a oni zůstat tam, dokud se volání zdarma. 234 00:10:50,210 --> 00:10:52,870 >> A v podstatě, haldy a zásobníku, dostat se Marcus otázku, 235 00:10:52,870 --> 00:10:54,500 roste směrem k sobě navzájem. 236 00:10:54,500 --> 00:10:57,730 A pokud se dostanete do sebe, jste spotřebovat veškerou paměť ve vašem 237 00:10:57,730 --> 00:11:01,330 počítač, a váš program bude přestat protože nemáte žádnou další paměť 238 00:11:01,330 --> 00:11:02,420 doleva k použití. 239 00:11:02,420 --> 00:11:07,290 Mezi nimi existuje případně další věci. 240 00:11:07,290 --> 00:11:10,980 Ale pro rozsah tohoto kurzu, vám Nemusíte se obávat, že. 241 00:11:10,980 --> 00:11:12,020 >> Takže to byla odpověď na vaši otázku. 242 00:11:12,020 --> 00:11:13,520 Nedělejte si starosti. 243 00:11:13,520 --> 00:11:15,550 Ale to byla dlouhá odpověď. 244 00:11:15,550 --> 00:11:17,800 Vše, co potřebujete vědět, je haldy a zásobníku bude - 245 00:11:17,800 --> 00:11:18,900 jeden začíná v dolní části. 246 00:11:18,900 --> 00:11:19,570 Stack dělá. 247 00:11:19,570 --> 00:11:20,790 Haldy je tam nahoře. 248 00:11:20,790 --> 00:11:21,990 Budou růst blíže k sobě. 249 00:11:21,990 --> 00:11:23,110 >> A pokud se dotknou, to je problém. 250 00:11:23,110 --> 00:11:24,500 Utekl jsi z paměti. 251 00:11:24,500 --> 00:11:28,760 Ale také, kromě vědět, kde jsou to, co je uloženo v obou 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: Když se srazí, je, že přetečení zásobníku? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorn: Když se srazí, to není přetečení zásobníku. 256 00:11:35,670 --> 00:11:38,340 Přetečení zásobníku je jiná oblast že můžeme jít na, pokud chcete. 257 00:11:38,340 --> 00:11:40,020 OK, vrátíme se k tomu za chvíli. 258 00:11:40,020 --> 00:11:42,730 >> STUDENT: Jaké je to slovo s názvem když hit navzájem, 259 00:11:42,730 --> 00:11:44,450 stack a heap? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorn: Pro tuto chvíli, nemusíte obávat. 261 00:11:46,640 --> 00:11:47,750 Jen vím - 262 00:11:47,750 --> 00:11:50,530 Já odpovím na tuto otázku po třídě. 263 00:11:50,530 --> 00:11:52,680 Pokud se dostanete do sebe, si vyběhl paměti, protože tam je více 264 00:11:52,680 --> 00:11:53,330 prostor tam. 265 00:11:53,330 --> 00:11:55,450 >> STUDENT: Je nám líto, co je chyba seg? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorn: Segment Porucha může být volán k - 267 00:11:58,710 --> 00:12:02,240 záleží proč volal seg chyba je. 268 00:12:02,240 --> 00:12:06,260 Někdy, váš stack overflow, bude to říci seg chyba jako chyba. 269 00:12:06,260 --> 00:12:08,180 >> STUDENT: Co dereferencing null proměnné? 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ískávání null pointer - 272 00:12:11,480 --> 00:12:17,850 OK, takže pokud máte ukazatel, který vám rovna null, ukazatele, odvolání, 273 00:12:17,850 --> 00:12:20,270 Memory adresy jejich hodnoty. 274 00:12:20,270 --> 00:12:23,660 A nulový ukazatel je v podstatě skladování 0, 0-tého 275 00:12:23,660 --> 00:12:26,670 řešení v této proměnné. 276 00:12:26,670 --> 00:12:30,010 Takže 0x, 0, 0, 0, 0, a tak dále. 277 00:12:30,010 --> 00:12:35,030 Že 0-tého adresu v paměti, že to není v našem obrázku, je to tam 278 00:12:35,030 --> 00:12:38,800 někde, že je vyhrazena pro počítač. 279 00:12:38,800 --> 00:12:40,130 Jsme nesmí se ho dotknout. 280 00:12:40,130 --> 00:12:44,680 >> Takže když váš program je realizovat, pokud něco, co se snaží jít do paměti 281 00:12:44,680 --> 00:12:48,990 adresa 0, ví, že že je prázdná hodnota. 282 00:12:48,990 --> 00:12:50,820 Ví, nic by tam měla být. 283 00:12:50,820 --> 00:12:53,420 Takže pokud se pokusíte a použít něco, co tam a léčit něco jako tam, nebo 284 00:12:53,420 --> 00:12:58,355 snaží se přejít do tohoto umístění, jste bude mít poruchu seg nebo chybu. 285 00:12:58,355 --> 00:13:00,520 Znamená to, že odpověď na vaši otázku? 286 00:13:00,520 --> 00:13:03,170 >> A teď půjdeme zpátky k přetečení zásobníku. 287 00:13:03,170 --> 00:13:09,560 Věci v zásobníku, jako vy mají neviděl, v - pojďme nakreslit blízko 288 00:13:09,560 --> 00:13:11,966 ze zásobníku rámu. 289 00:13:11,966 --> 00:13:15,050 Každý může vidět, že? 290 00:13:15,050 --> 00:13:16,650 Takže máme rámeček zásobníku. 291 00:13:16,650 --> 00:13:23,260 Šetříme pole se jako místní proměnná v této funkci. 292 00:13:23,260 --> 00:13:29,510 Tak, že naše řada má pět míst. 293 00:13:29,510 --> 00:13:33,230 Všech pět z nich se uloží v tomto zásobníku rámu. 294 00:13:33,230 --> 00:13:37,540 >> Pokud začneme psát za hranice tohoto pole - 295 00:13:37,540 --> 00:13:43,990 takže pokud začneme psát do, řekněme, že je 0. 296 00:13:43,990 --> 00:13:46,800 Ti, kteří jsou pět indexy naše pole. 297 00:13:46,800 --> 00:13:50,980 Pokud začneme psát do indexu 5, který nemáme, když máme 298 00:13:50,980 --> 00:13:55,900 pole o velikosti 5, začneme psát do index 6, 7, 8, 9, můžeme získat Stack 299 00:13:55,900 --> 00:13:57,960 Přetečení chyba. 300 00:13:57,960 --> 00:14:00,510 >> Obecně platí, že to není - 301 00:14:00,510 --> 00:14:04,910 budete pravděpodobně dostanete do potíží pokud půjdete přes jeden. 302 00:14:04,910 --> 00:14:08,640 Ale obecně, dostanete do největší potíže, pokud jdete nad tím hodně 303 00:14:08,640 --> 00:14:12,770 a jít tak daleko, přes který můžete napsat na zpáteční adresu, která 304 00:14:12,770 --> 00:14:16,080 funkce, které se nachází na Dno zásobníku rámu. 305 00:14:16,080 --> 00:14:16,520 >> Vzhledem k tomu, že jo? 306 00:14:16,520 --> 00:14:17,670 Vy - v - Omlouvám se. 307 00:14:17,670 --> 00:14:18,550 Ne ", protože v pořádku." 308 00:14:18,550 --> 00:14:20,470 >> V zásobníku rámu, máte vaše lokální proměnné. 309 00:14:20,470 --> 00:14:27,090 Na samém dně zásobníku Rám je zpáteční adresa. 310 00:14:27,090 --> 00:14:28,790 To je místo, kde funkce jde, když je po všem. 311 00:14:28,790 --> 00:14:33,750 A pokud jste přepsat, že návratnost adresa, pak když to stack frame, 312 00:14:33,750 --> 00:14:36,680 když jdete přes zásobníku rám a provádění každého řádku, ty jsi 313 00:14:36,680 --> 00:14:40,350 jít do svého nového zpáteční adresu že je tam napsáno místo 314 00:14:40,350 --> 00:14:40,910 Skutečný jeden. 315 00:14:40,910 --> 00:14:45,050 A to je, jak jsme viděli Některé narušení bezpečnosti 316 00:14:45,050 --> 00:14:46,780 se může stát s počítači. 317 00:14:46,780 --> 00:14:52,760 >> Takže přetečení zásobníku, v krátkosti, je-li přepsat část v zásobníku 318 00:14:52,760 --> 00:14:55,440 máš používat, místní Proměnná jste měl použít, a 319 00:14:55,440 --> 00:14:58,070 zejména při spuštění přepisování důležité věci, jako je 320 00:14:58,070 --> 00:14:59,100 zpáteční adresu. 321 00:14:59,100 --> 00:15:00,090 A to je místo, kde budete mít chybu. 322 00:15:00,090 --> 00:15:03,980 Nebo snad dokonce byste mohli začít dokonce i zápis do - 323 00:15:03,980 --> 00:15:05,370 říci, binární vyhledávání bylo přímo nad hlavní. 324 00:15:05,370 --> 00:15:07,790 Pokud přepsal hodně, vám mohl napsat do hlavní. 325 00:15:07,790 --> 00:15:10,230 Ale obecně, dostanete chybu před pak, protože ví, že počítač 326 00:15:10,230 --> 00:15:12,270 děláte něco, co vás neměli dělat. 327 00:15:12,270 --> 00:15:12,560 Jo. 328 00:15:12,560 --> 00:15:13,910 >> STUDENT: Jaký je rozdíl mezi přetečení zásobníku 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 obecnější typ 331 00:15:19,420 --> 00:15:20,395 to, co jsem právě popsal. 332 00:15:20,395 --> 00:15:22,610 >> Žák: Takže přetečení zásobníku je Příkladem přetečení vyrovnávací paměti. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorn: Přesně tak. 334 00:15:23,420 --> 00:15:28,700 To je pole si můžeme představit jako vyrovnávací paměti, prostor pro věci, jít dovnitř 335 00:15:28,700 --> 00:15:30,600 To je přetečení bufferu. 336 00:15:30,600 --> 00:15:33,210 Mohli bychom mít přetečení bufferu v. 337 00:15:33,210 --> 00:15:36,870 Pokud by došlo k vyrovnávací paměti, která se často je pole halda, a my 338 00:15:36,870 --> 00:15:40,600 přepsal ty hranice, pak bychom mají přetečení bufferu v. 339 00:15:40,600 --> 00:15:44,870 >> A nad rámec tohoto kurzu, oni jsou detekovány trochu jinak. 340 00:15:44,870 --> 00:15:48,040 Kompilátor má zvláštní způsoby detekce každého. 341 00:15:48,040 --> 00:15:50,660 Ale buffer overflow je obecnější typ, co jsem popsal, 342 00:15:50,660 --> 00:15:54,090 který byl přetečení bufferu. 343 00:15:54,090 --> 00:15:56,240 Věděli, že odpověď na vaši otázku? 344 00:15:56,240 --> 00:15:57,910 Sladké. 345 00:15:57,910 --> 00:16:01,850 >> Byly tam nějaké další otázky související na zásobníku nebo haldě? 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: Vím, že máte na volné řetězce protože jsou v haldě 349 00:16:08,220 --> 00:16:09,305 a nechcete, aby k úniku paměti. 350 00:16:09,305 --> 00:16:12,240 Ale máte osvobodit globální proměnné a tak podobně? 351 00:16:12,240 --> 00:16:14,335 Nebo jsou automaticky osvobozeni? 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, tvoříme tuto věc pro vás volal řetězec. 354 00:16:22,340 --> 00:16:23,800 Řetězec je opravdu to, co? 355 00:16:23,800 --> 00:16:24,810 >> STUDENT: Char hvězda. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorn: char hvězda, ukazatel na znak, ukazatel na 357 00:16:29,180 --> 00:16:30,650 pole znaků. 358 00:16:30,650 --> 00:16:32,210 To je to, co je řetězec. 359 00:16:32,210 --> 00:16:36,050 Takže ho musíme osvobodit, protože GetString, který jsme použili hodně - 360 00:16:36,050 --> 00:16:38,370 Název řetězce se rovná GetString - 361 00:16:38,370 --> 00:16:43,560 že mallocs pro nás nějakou vzpomínku na haldy a vrátí ukazatel na 362 00:16:43,560 --> 00:16:47,230 První znak, který string, char hvězda. 363 00:16:47,230 --> 00:16:52,760 >> Takže zdánlivě, pokud jste nebyli psaní zdarma založit na některý z vašich řetězců 364 00:16:52,760 --> 00:16:55,600 že jste volal tak daleko, budete mít uniká část paměti. 365 00:16:55,600 --> 00:16:57,430 Samozřejmě jsme nemluvili o to, aby nikdo nedostal do 366 00:16:57,430 --> 00:16:58,520 problém pro to dělá. 367 00:16:58,520 --> 00:16:59,980 Ale do budoucna, ano. 368 00:16:59,980 --> 00:17:03,990 Voláte-li GetString, že jste mallocing nějaký prostor na haldě. 369 00:17:03,990 --> 00:17:07,640 A pokud nechcete volat zdarma později, že řetězec, máte nevracení paměti. 370 00:17:07,640 --> 00:17:09,440 To je odpověď na vaši otázku? 371 00:17:09,440 --> 00:17:10,606 >> Jo 372 00:17:10,606 --> 00:17:15,020 >> Žák: Takže k tomu, že budeme používat zdarma přímo před návratem? 373 00:17:15,020 --> 00:17:18,510 Stejně jako v rámci, myslím, že v případě, říkáme, jako, int main, v rámci 374 00:17:18,510 --> 00:17:24,410 Rozsah kódu, který je v těch složené závorky, přímo před - 375 00:17:24,410 --> 00:17:26,140 Víte, kde byste obvykle dát návratu. 376 00:17:26,140 --> 00:17:27,950 Myslíte si, dát volný před tím? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorn: Takže si můžete dát zdarma všude tam, kde chcete dát zadarmo. 378 00:17:31,000 --> 00:17:33,810 Protože se jedná o dynamicky přidělovány proměnné, protože mohou 379 00:17:33,810 --> 00:17:39,170 žít nad rámec zejména funkce, pokud budete volat malloc v 380 00:17:39,170 --> 00:17:44,140 samostatné funkce, například, GetString, můžete volat zdarma do hlavní. 381 00:17:44,140 --> 00:17:46,050 Nemusíte to říkat v konkrétní funkci 382 00:17:46,050 --> 00:17:47,570 kde je malloc nazývá. 383 00:17:47,570 --> 00:17:50,340 Ale vy potřebujete, aby to nazvat před hlavními vrátí. 384 00:17:50,340 --> 00:17:51,120 >> A to opravdu záleží. 385 00:17:51,120 --> 00:17:54,960 Záleží na tom, proč jste malloced, že prostor na prvním místě. 386 00:17:54,960 --> 00:17:57,320 Někteří lidé budou volat osvobodit docela rychle. 387 00:17:57,320 --> 00:17:59,220 Někteří lidé budou volat zdarma až do konec svého programu. 388 00:17:59,220 --> 00:18:00,660 A oni si projít a volný všechno. 389 00:18:00,660 --> 00:18:03,597 Záleží na tom, proč jsi volala malloc. 390 00:18:03,597 --> 00:18:11,270 >> STUDENT: A co byste řekl pokud jste volali použití GetString? 391 00:18:11,270 --> 00:18:13,320 Člověk by řekl zdarma, co? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorn: Tak syntaxe zdarma je prostě volný, otevřené závorka, v blízkosti 393 00:18:20,040 --> 00:18:22,130 závorka, a název ukazatele. 394 00:18:22,130 --> 00:18:26,410 Takže pokud napíšete název řetězce rovná GetString, dáte jméno zde. 395 00:18:26,410 --> 00:18:27,760 To je název ukazatele. 396 00:18:27,760 --> 00:18:30,570 A ví, že k uvolnění, že paměť. 397 00:18:30,570 --> 00:18:33,920 >> Žák: Takže, když se uvolní, že paměť, ukazatel ukazuje stále na tomto místě 398 00:18:33,920 --> 00:18:34,970 v paměti? 399 00:18:34,970 --> 00:18:39,020 Nebo je ukazatel rovněž zbavena adresa, na kterou odkazuje. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorn: Měli bychom to zkusit. 401 00:18:40,290 --> 00:18:41,430 Měli bychom kód, který. 402 00:18:41,430 --> 00:18:43,880 Pojďme zpátky, když se dostaneme do kódování, a pojďme kód, který. 403 00:18:43,880 --> 00:18:46,000 A pokud chcete zjistit odpověď na to, že můžete také kód, který 404 00:18:46,000 --> 00:18:46,690 do té doby. 405 00:18:46,690 --> 00:18:49,100 Ale to je velká otázka. 406 00:18:49,100 --> 00:18:53,480 >> STUDENT: Je možné, aby zdarma něco příliš brzy? 407 00:18:53,480 --> 00:18:58,530 Takže si ještě potřebovat pro váš program, a osvobodil tuto paměť? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorn: Ano. 409 00:18:59,200 --> 00:19:03,020 To je možné, pokud se něco zdarma a pak ji znovu použít, budete 410 00:19:03,020 --> 00:19:06,890 narazit na chybu. 411 00:19:06,890 --> 00:19:10,810 Ale to je na vás, protože jste osvobozeni něco, a pak zavolal později. 412 00:19:10,810 --> 00:19:13,940 Takže to byl programátorský chyba. 413 00:19:13,940 --> 00:19:14,780 Ale ano. 414 00:19:14,780 --> 00:19:17,760 Dalo by se napsat, že. 415 00:19:17,760 --> 00:19:19,240 >> Nějaké další otázky týkající se - 416 00:19:19,240 --> 00:19:19,760 Ano. 417 00:19:19,760 --> 00:19:22,820 >> Žák: Takže pokud jste měli jen uvolnit, obecně před 418 00:19:22,820 --> 00:19:25,490 program skončí, jestli to znamená, Program končí a nechcete ho uvolnit, 419 00:19:25,490 --> 00:19:27,580 že paměť je stále přiděleno? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorn: Je-li váš program končí a jste zapomněl uvolnit něco, pak 421 00:19:31,330 --> 00:19:34,390 že paměť byla přidělena v průběhu životnost vašeho programu. 422 00:19:34,390 --> 00:19:37,670 Když váš program ukončí zcela, že paměť nebude 423 00:19:37,670 --> 00:19:39,490 zůstat tam navždy. 424 00:19:39,490 --> 00:19:42,080 Počítač je dost chytrý, aby věděl , že při ukončení programu, je 425 00:19:42,080 --> 00:19:46,440 by se zbavit veškeré paměti, že byla spojena s tímto programem. 426 00:19:46,440 --> 00:19:51,240 >> Nicméně, tam jsou nástroje, které můžete spustit o programu pro detekci v případě, kdy 427 00:19:51,240 --> 00:19:54,720 Program skončil, jsi zapomněl uvolnit nějakou paměť. 428 00:19:54,720 --> 00:19:57,960 A další problém, v místech, kde budete používat malloc a použití 429 00:19:57,960 --> 00:20:02,610 ukazatele, budete běží to program na vašem programu, aby zjistili, zda, 430 00:20:02,610 --> 00:20:06,530 když hlavní vrátí, jste měli nějaké věci, které byly ponechány unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Takže to nebude zůstat malloced navždy ve vašem počítači. 432 00:20:09,130 --> 00:20:11,720 To by bylo nehospodárné, protože velmi rychle, počítače 433 00:20:11,720 --> 00:20:12,960 by k vyčerpání paměti. 434 00:20:12,960 --> 00:20:16,450 Ale v případě, že běží až do konce vašeho programování a oni nejsou osvobozeni 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 řešit. 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 vědět že k testu, ale? 440 00:20:25,780 --> 00:20:27,600 Myslím, že to byl mluvil o trochu v přednášce. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorn: Tak Valgrind je název tohoto nástroje. 442 00:20:33,600 --> 00:20:37,180 Vědět, co to dělá, je dost pro kvíz. 443 00:20:37,180 --> 00:20:40,200 Ale vy jste jej nevyužili ještě na vašem problém nastavit, protože jsme neměli 444 00:20:40,200 --> 00:20:43,520 Problém set, který se výslovně zabýval s malloc nebo pomocí malloc. 445 00:20:43,520 --> 00:20:45,330 Takže jste nepoužili ještě Valgrind. 446 00:20:45,330 --> 00:20:47,760 Ale budete používat dříve spíše než později. 447 00:20:47,760 --> 00:20:48,710 >> STUDENT: Dokážete opakovat co Valgrind je? 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirschhorn: Je nám líto? 449 00:20:49,190 --> 00:20:51,240 >> STUDENT: Dokážete opakovat to, co Účelem Valgring je? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorn: Valgrind je název - 451 00:20:53,100 --> 00:20:59,890 jako GDB pomáhá při ladění programu, Valgrind vám pomůže zjistit, zda 452 00:20:59,890 --> 00:21:03,210 věci, které nebyly uvolněny když váš program ukončí. 453 00:21:03,210 --> 00:21:05,110 Takže budete spustit na vašem programu. 454 00:21:05,110 --> 00:21:09,230 A váš program ukončí, a to řeknu Váš program s názvem malloc to mnoho 455 00:21:09,230 --> 00:21:13,670 krát k tomuto počtu bytů, a vy pouze tzv. volný tento mnohokrát. 456 00:21:13,670 --> 00:21:16,520 A tak jsi odešel těchto mnoho bajtů aniž by byl osvobozen. 457 00:21:16,520 --> 00:21:18,050 Nebo to řeknu, že jste osvobozeni všechno. 458 00:21:18,050 --> 00:21:19,070 Dobrá práce. 459 00:21:19,070 --> 00:21:19,480 >> STUDENT: OK. 460 00:21:19,480 --> 00:21:21,060 A jmenuje se 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 ukazatele. 463 00:21:25,970 --> 00:21:30,080 Takže říct, že jste n hvězda x se rovná něco. 464 00:21:30,080 --> 00:21:33,330 To se rovná, co jste uvedení tam, je to, že to, co je dát dovnitř 465 00:21:33,330 --> 00:21:36,120 co x směřuje k, nebo ukazatel x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorn: Můžeš zopakovat otázku? 467 00:21:37,690 --> 00:21:39,340 Můžeme kreslit, když to říkáte? 468 00:21:39,340 --> 00:21:42,710 >> STUDENT: V testu, ve skutečnosti, ten, který nám poslal, to bylo jako, char 469 00:21:42,710 --> 00:21:46,520 hvězda pravda rovná CS50 skály, ne? 470 00:21:46,520 --> 00:21:52,190 Takže to znamená, že toto CS50 skály je to, co je pravda ukazuje na? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorn: Takže mluvíte o char hvězdy v řetězci, jak 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 Pojďme nakreslit to tady. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE konverzace] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorn: Takže tato proměnná bude typu char hvězdy. 478 00:22:11,130 --> 00:22:14,580 Jak velký je variabilní z typu char hvězdy? 479 00:22:14,580 --> 00:22:15,510 Kolik bajtů? 480 00:22:15,510 --> 00:22:16,450 >> STUDENTI: Čtyři. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorn: Je to čtyři bajty. 482 00:22:18,210 --> 00:22:21,420 Kolik práva je variabilní z typu int hvězdy? 483 00:22:21,420 --> 00:22:22,210 >> STUDENTI: Čtyři. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorn: čtyři bajty. 485 00:22:24,910 --> 00:22:28,280 Pokud je to ukazatel, pak je vždy čtyři byty, protože ukazatele, jejich 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 Zařízení jsou čtyři bajty dlouhé. 488 00:22:35,160 --> 00:22:42,900 Takže když říkáme GetString, nebo když řekněme, jmeno_string rovná, a poté v 489 00:22:42,900 --> 00:22:46,140 dvojité uvozovky dát řetězec, klademe - 490 00:22:46,140 --> 00:22:46,920 dobře, že je to trochu jinak. 491 00:22:46,920 --> 00:22:48,630 Budeme se GetString jako příklad. 492 00:22:48,630 --> 00:22:52,150 Nebo char hvězda něco rovná řetězec. 493 00:22:52,150 --> 00:22:54,360 Omlouváme se, dej mi příklad že jste si přečetli? 494 00:22:54,360 --> 00:22:57,590 >> STUDENT: char hvězda pravda rovná "CS50 skály" v uvozovkách. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorn: Tak to hvězda, to zavoláme tuto proměnnou x pro naše 496 00:23:02,260 --> 00:23:04,060 obecné účely. 497 00:23:04,060 --> 00:23:05,970 Vytvořili jsme proměnnou s názvem x. 498 00:23:05,970 --> 00:23:07,610 Je to typ char hvězda. 499 00:23:07,610 --> 00:23:10,950 Je to ukazatel na řadě znaků. 500 00:23:10,950 --> 00:23:12,200 Tak sem - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Tak to je, jak to by pracují v paměti. 503 00:23:25,890 --> 00:23:27,410 To by uložení paměťové adresu. 504 00:23:27,410 --> 00:23:31,770 To by neskladujte paměťovou adresu první znak v poli. 505 00:23:31,770 --> 00:23:33,830 A pak, když jste postupovali ukazatel, byste 506 00:23:33,830 --> 00:23:35,200 získat první znak. 507 00:23:35,200 --> 00:23:38,780 >> A pokud čtete tuto věc jako řetězec, počítač je chytrý 508 00:23:38,780 --> 00:23:42,930 stačí vědět, přečtěte si celou tuto věc až se dostane k odporu 0.. 509 00:23:42,930 --> 00:23:45,530 Ale pokud jste to četl znak na čas, takže jste iterace 510 00:23:45,530 --> 00:23:49,910 Tento řetězec, pak budete jen číst znak v době, dokud se nedostanete na 511 00:23:49,910 --> 00:23:50,850 zpětné lomítko 0. 512 00:23:50,850 --> 00:23:52,335 To nemusí odpovídat vaší otázka, ačkoli. 513 00:23:52,335 --> 00:23:55,610 >> STUDENT: Jo, ale nemáte malloced, že prostor 514 00:23:55,610 --> 00:23:58,400 ale pro tento ukazatel. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorn: Takže si nejsem zcela jist, přesně to, co hledáte na, 516 00:24:02,510 --> 00:24:03,640 protože jsem neměl dělat, že kvíz. 517 00:24:03,640 --> 00:24:06,370 To měl být užitečné zdrojů z jiného TF. 518 00:24:06,370 --> 00:24:11,380 Pokud vytváříte řetězec na zásobník nebo jako lokální proměnné, bude to 519 00:24:11,380 --> 00:24:16,920 být jen řada poplatků, spíše než obecně char hvězda ukazující na 520 00:24:16,920 --> 00:24:18,600 jiný řetězec. 521 00:24:18,600 --> 00:24:20,550 Ale já nevím. 522 00:24:20,550 --> 00:24:25,065 To by mohlo být ukazatel na další řetězec na zásobníku stejně. 523 00:24:25,065 --> 00:24:27,240 Jo. 524 00:24:27,240 --> 00:24:31,116 >> STUDENT: Já vím, že je třeba, aby alokovat paměť v případě, že ukazatel je 525 00:24:31,116 --> 00:24:33,360 jak se deklarované uvnitř jiné funkce. 526 00:24:33,360 --> 00:24:36,740 Potřebujete si udělat totéž, pokud je to byly prohlášeny uvnitř hlavní, 527 00:24:36,740 --> 00:24:39,570 budete používat uvnitř hlavní? 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirschhorn: Takže ano. 529 00:24:43,590 --> 00:24:46,670 Můžete deklarovat ukazatel na jakýkoli adresa paměti v paměti. 530 00:24:46,670 --> 00:24:51,440 To může být paměť adresa místní variabilní, i když často, 531 00:24:51,440 --> 00:24:55,760 lidé nemají prohlásit adresy paměti do lokálních proměnných, protože jdou 532 00:24:55,760 --> 00:24:59,890 pryč jednou, že funkce vrací, což je důvod, proč jsme se obecně malloc věci. 533 00:24:59,890 --> 00:25:04,630 Ale ano, můžete deklarovat ukazatel jiné lokální proměnné. 534 00:25:04,630 --> 00:25:06,360 Je to jen obecně nedělá. 535 00:25:06,360 --> 00:25:09,480 Ale můžu se na to podívat specifická věc, kterou po hodině. 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 něco co je žádán. 538 00:25:12,350 --> 00:25:16,930 Zdá se to divné, být inicializace ne jako ukazatel 539 00:25:16,930 --> 00:25:20,760 adresu, ale jako to, co Vypadá to, že hodnoty. 540 00:25:20,760 --> 00:25:25,970 Vypadá to, že CS50 je to, co je uvnitř to je ukázal a 541 00:25:25,970 --> 00:25:28,820 není skutečná adresa, ne? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorn: Tak to je není tento případ, ačkoli. 543 00:25:30,520 --> 00:25:32,470 To není to, co se děje. 544 00:25:32,470 --> 00:25:35,910 Když deklarujete char hvězdu, to je adresa paměti. 545 00:25:35,910 --> 00:25:38,860 Ukazatele jsou všechny paměťové adresy ukazuje na něco jiného. 546 00:25:38,860 --> 00:25:41,480 To je něco jiného, ​​může být na stack, ale téměř vždy je na 547 00:25:41,480 --> 00:25:43,440 haldy ve způsobu, jakým budeme vidět dřív. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Ale jmeno_string rovná dvojité uvozovky "GetString," můžeme vidět, že i my 550 00:25:53,500 --> 00:25:55,010 můžete prohlédnout, že i kód, který. 551 00:25:55,010 --> 00:26:01,190 GetString řetězec není uložen v že proměnná, nebo cokoliv řetězec 552 00:26:01,190 --> 00:26:04,580 název není ukládán v tom, že variabilní, protože to není jak 553 00:26:04,580 --> 00:26:06,070 ukazatele pracovat. 554 00:26:06,070 --> 00:26:06,770 Má to smysl? 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 Doufejme, že to není matoucí pro každého. 558 00:26:11,690 --> 00:26:15,732 Ale kdyby to bylo, můžeme se na to podívat znovu ve chvíli, protože jsme vlastně děje 559 00:26:15,732 --> 00:26:19,240 kódovat něco, co bude doufejme, práci s řetězci a pomůže vám cítit se 560 00:26:19,240 --> 00:26:22,170 více pohodlně s nimi. 561 00:26:22,170 --> 00:26:24,869 >> Jakékoliv další dotazy týkající se těchto témata a další témata, která 562 00:26:24,869 --> 00:26:26,119 Dám zpátky? 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ávě teď. 566 00:26:36,310 --> 00:26:37,630 Ano, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Tak tohle je naprosto nesouvisí, ale nemůžeme prostě jít přes 568 00:26:39,860 --> 00:26:42,760 velmi rychle, co potřebujete vědět o rozdílu mezi 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: Ano. 571 00:26:47,740 --> 00:26:52,111 Takže 32 bitů je, kolik bajtů? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Je to čtyři bajty. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorn: Je to čtyři bajty. 574 00:26:54,360 --> 00:26:58,420 A 64 bitů je, kolik bajtů? 575 00:26:58,420 --> 00:26:59,112 >> STUDENT: Osm. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorn: Osm bajtů. 577 00:27:00,610 --> 00:27:03,980 Takže znovu, osm bitů je jeden bajt. 578 00:27:03,980 --> 00:27:08,340 Váš CS50 spotřebič je 32-bitový stroj. 579 00:27:08,340 --> 00:27:13,650 Takže adresy paměti jsou čtyři bajty dlouhé. 580 00:27:13,650 --> 00:27:17,460 K dispozici jsou 2 až 32 adresy paměti. 581 00:27:17,460 --> 00:27:21,310 0-2 až 32 minus 1. 582 00:27:21,310 --> 00:27:27,630 A já nejsem pozitivní, ale to je Pravděpodobně rozsah toho, co budete potřebovat, aby 583 00:27:27,630 --> 00:27:35,230 vědět, pro 32-bitové stroje, které paměť adresy jsou opět čtyři bajtů, 584 00:27:35,230 --> 00:27:39,620 a to je maximální částka, paměťových adres. 585 00:27:39,620 --> 00:27:41,680 >> Také, datové typy - 586 00:27:41,680 --> 00:27:45,020 to by mohlo být něco jako dobře, že to stojí za zmínku. 587 00:27:45,020 --> 00:27:49,610 Velikost datového typu závisí na stroj, se kterým pracujete. 588 00:27:49,610 --> 00:27:56,760 Takže char, znak, je to, jak počtu bytů na našem CS50 zařízení? 589 00:27:56,760 --> 00:27:57,980 Jeden byte. 590 00:27:57,980 --> 00:28:02,310 A to je vlastně jeden bajt jako i na 64-bitovém počítači. 591 00:28:02,310 --> 00:28:05,920 >> A většina datové typy jsou stejné číslo z bytů na obou strojích. 592 00:28:05,920 --> 00:28:11,620 Ale některé typy dat se bude lišit na obou strojích. 593 00:28:11,620 --> 00:28:14,590 Tak, že by se mohly Jediná věc, kterou potřebujete vědět. 594 00:28:14,590 --> 00:28:16,710 >> Ale i to, že si myslím, je za hranicemi - 595 00:28:16,710 --> 00:28:20,990 Jsem si téměř jistá, když se podíváte zpět na staré kvízy, říká, převzít za 596 00:28:20,990 --> 00:28:24,090 kódování problémy, které používáte 32-bitový stroj. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Ale tam jsou, jít spolu s tím v případě, že máte zájem, zde jsou 599 00:28:30,620 --> 00:28:35,920 datové typy, které jsou stejné velikost na všech strojích. 600 00:28:35,920 --> 00:28:42,670 >> Pokud jste viděli něco takového uint32_t, může nebo mohou 601 00:28:42,670 --> 00:28:43,260 Není vidět, že. 602 00:28:43,260 --> 00:28:44,290 To je typ dat. 603 00:28:44,290 --> 00:28:47,570 To se říká, být 32 bitů bez ohledu na co stroj je to na. 604 00:28:47,570 --> 00:28:50,350 Takže když lidé píší přenosné Kód, že pravděpodobně nebude používat ints. 605 00:28:50,350 --> 00:28:53,260 Budou místo toho použít tyto další údaje typy, které vědí, bude stejný 606 00:28:53,260 --> 00:28:54,780 velikost na každém 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: Měl jsem otázku Proces kompilace. 610 00:29:00,150 --> 00:29:04,110 Takže pokud píšete program, který používá knihovna jako CS50, nebo tak něco 611 00:29:04,110 --> 00:29:06,840 stejně jako to, že vím, že knihovna je, v určitém okamžiku, bude 612 00:29:06,840 --> 00:29:08,590 sestaveny a spojeny palců 613 00:29:08,590 --> 00:29:13,380 Ale jak moc se to stane během sestavení vašeho programu? 614 00:29:13,380 --> 00:29:15,880 Jaká část této knihovny procesu nastane, když jste 615 00:29:15,880 --> 00:29:18,560 sestavování vlastního programu? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorn: Tak pojďme na obecně kroky tohoto procesu. 617 00:29:24,020 --> 00:29:26,280 Můžete napsat. C souboru. 618 00:29:26,280 --> 00:29:33,530 Ve své. C souboru, # include svůj knihovny záhlaví, například, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Co znamená, že ostrý patří linka udělat, aby váš program? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Dodává prototypy funkce z hlavičky 622 00:29:43,350 --> 00:29:45,120 souborů v knihovnách. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorn: Přesně tak. 624 00:29:45,600 --> 00:29:49,870 Dodává těchto funkčních prototypů do svého kódu. 625 00:29:49,870 --> 00:29:55,230 Takže pokud je váš kód je sestaven v časná stadia, kompilátor ví, 626 00:29:55,230 --> 00:29:59,250 že tyto funkce skutečně existují, a že někde byly definovány. 627 00:29:59,250 --> 00:30:02,460 K. H soubory nezahrnují definice těchto funkcí, nebo jak 628 00:30:02,460 --> 00:30:03,950 skutečně pracují. 629 00:30:03,950 --> 00:30:07,960 Cs50.h právě obsahuje něco, co se říká, GetString je skutečná věc, která 630 00:30:07,960 --> 00:30:09,270 se může stát. 631 00:30:09,270 --> 00:30:14,240 A standardio.h říká printf je skutečná věc, která se může stát. 632 00:30:14,240 --> 00:30:23,190 >> Takže váš jazyk C s tím. Záhlaví soubor se proměnil v některých 633 00:30:23,190 --> 00:30:27,750 strojově čitelný kód, který se nakonec dostane se obrátil na binární 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, který nakonec dostane popraven. 636 00:30:33,590 --> 00:30:38,550 -L CS50 linky - například, když píšete zvonění - 637 00:30:38,550 --> 00:30:41,830 a pak jsou-l CS50, píšete, že palců 638 00:30:41,830 --> 00:30:42,180 A uvidíte, že. 639 00:30:42,180 --> 00:30:43,890 Když napíšete dělat, budete si muset vybrat viz tento řádek tady. 640 00:30:43,890 --> 00:30:47,740 A uvidíme, že ve chvíli, kdy my kód nebo později, když jsme kódu. 641 00:30:47,740 --> 00:30:50,390 >> Ale to-l CS50 linka dělá něco trochu jiný, než 642 00:30:50,390 --> 00:30:52,440 # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Co to-l CS50 linka dělat? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Chci říci, že spojuje Knihovna pro funkci 646 00:31:00,310 --> 00:31:02,710 volání, jako Õ. souborů. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorn: Takže velmi blízko, ne-li spot-on. 648 00:31:08,200 --> 00:31:16,220 -L CS50 má binární soubor a spojuje ji s binárním souboru. 649 00:31:16,220 --> 00:31:21,410 Takže cs50.h, že to nemá smysl otáčení cs50.h z jazyka C v soustavě binární každý 650 00:31:21,410 --> 00:31:23,130 jeden čas se to používá. 651 00:31:23,130 --> 00:31:26,650 To by bylo hloupé, protože to by odpad spoustu času. 652 00:31:26,650 --> 00:31:30,420 Tak to již byl sestaven a obrátil se do spustitelného souboru. 653 00:31:30,420 --> 00:31:35,430 A nyní se chystá být sloučeny s souboru na konci. 654 00:31:35,430 --> 00:31:38,370 Takže ty 1 a 0 se děje spojit se svými ty 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 teď budete skutečně mít skutečný 1 a 0, které definují, jak GetString, 657 00:31:43,670 --> 00:31:47,890 například funguje, nebo jak printf, například funguje. 658 00:31:47,890 --> 00:31:52,750 >> A pro více informací, tam je krátké kompilátory, že Nate dává, že 659 00:31:52,750 --> 00:31:55,410 byste se měli podívat na to, že jde prostřednictvím těchto kroků. 660 00:31:55,410 --> 00:31:56,050 Ale - 661 00:31:56,050 --> 00:31:56,560 Ano. 662 00:31:56,560 --> 00:32:01,700 >> STUDENT: Jsou vždy o soubory. když jsou ve formě knihovny, 663 00:32:01,700 --> 00:32:06,764 připraveni být sloučeny, souvisí - jako jsou v binárním kódu? 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirschhorn: OK. 665 00:32:07,600 --> 00:32:08,420 Co - 666 00:32:08,420 --> 00:32:11,780 >> STUDENT: Je to vždy pro knihovny, když je propojit? 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirschhorn: Ano. 668 00:32:12,500 --> 00:32:17,300 Takže tam je. S. souborů, které budou strojový kód, který bude rovněž 669 00:32:17,300 --> 00:32:17,975 mystický pro vás. 670 00:32:17,975 --> 00:32:19,410 Nemusíte se starat o ty. 671 00:32:19,410 --> 00:32:24,930 Ale obecně, jo, oni budou být. o soubory připraven jít. 672 00:32:24,930 --> 00:32:27,170 >> Žák: Takže, když se loď na knihovna, máte jen 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 nebo. 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átkém stejně, pokud tato informace se zdá, že přichází 677 00:32:36,260 --> 00:32:36,700 trochu rychleji. 678 00:32:36,700 --> 00:32:39,870 Ale krátký na překladače hovoří o tom, to stejně. 679 00:32:39,870 --> 00:32:43,290 Když loď knihovnu, pokud loď . h soubor záhlaví, které 680 00:32:43,290 --> 00:32:46,290 funkční prototypy, a 1, a 0 je, to je vše, co potřebujete dát. 681 00:32:46,290 --> 00:32:50,640 Nemusíte dát, jak Funkce pracuje, c soubor.. 682 00:32:50,640 --> 00:32:56,360 Vzhledem k tomu, místo odběru, nebo bod API, bod v tomto SPL, 683 00:32:56,360 --> 00:32:59,650 přenosná knihovna Stanford, je to abyste se starat o tom, jak nová 684 00:32:59,650 --> 00:33:04,220 GRect funguje, nebo jak se pohybovat práce, nebo, jak přidat díla. 685 00:33:04,220 --> 00:33:06,520 Vše, co potřebujete vědět, je, že doplněk je funkce, která můžete 686 00:33:06,520 --> 00:33:08,880 použít, a to dělá to. 687 00:33:08,880 --> 00:33:12,760 Takže si opravdu nemusíte vědět, jak je to napsaný v jazyce C. stačí 688 00:33:12,760 --> 00:33:15,460 Víte, tady jsou funkce, co dělat, a tady jsou je 1 a 0 689 00:33:15,460 --> 00:33:18,870 když budete opravdu chtít použít. 690 00:33:18,870 --> 00:33:19,530 >> V pohodě. 691 00:33:19,530 --> 00:33:26,980 Nějaké další otázky týkající se kompilátory nebo další témata na palubě? 692 00:33:26,980 --> 00:33:30,300 >> STUDENT: Mám otázku , kterým se provádí rekurzivní funkce. 693 00:33:30,300 --> 00:33:31,170 Otázka o rekurzi. 694 00:33:31,170 --> 00:33:33,030 Měl jsem pocit, že by se přijít. 695 00:33:33,030 --> 00:33:38,310 Takže pojďme rychle projít rekurze s konkrétní 696 00:33:38,310 --> 00:33:40,690 Například faktoriál funkce. 697 00:33:40,690 --> 00:33:44,920 Vzhledem k tomu, to je příklad, který často přichází, nebo se používá 698 00:33:44,920 --> 00:33:46,170 pro ilustraci rekurze. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Takže "4!" je číst jako 4 faktoriálu. 701 00:33:56,410 --> 00:33:59,120 A co 4 faktoriál znamená? 702 00:33:59,120 --> 00:34:00,696 Co to bylo? 703 00:34:00,696 --> 00:34:02,235 Jak si vypočítat 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 další způsob, jak napsat 4 faktoriálu je to napsat. 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 Vzhledem 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, proč faktoriál je skvělý kandidát na rekurzi, protože je to 712 00:34:32,679 --> 00:34:36,630 jasné, že tam je něco, co stane znovu a znovu a znovu na 713 00:34:36,630 --> 00:34:39,820 menší počet věcí, dokud se dostanete na konec. 714 00:34:39,820 --> 00:34:42,570 Když se dostanete na 1, 1 faktoriál je 1. 715 00:34:42,570 --> 00:34:43,719 Nemůžete jít mnohem dál. 716 00:34:43,719 --> 00:34:47,219 0 faktoriál je také definována jako 1. 717 00:34:47,219 --> 00:34:50,679 Takže, když se dostanete na 1 nebo 0, jste na konci, a můžete 718 00:34:50,679 --> 00:34:53,219 začít chodit nahoru. 719 00:34:53,219 --> 00:34:59,540 Takže pokud bychom chtěli napsat rekurzivní funkce pro výpočet faktoriálu, 720 00:34:59,540 --> 00:35:02,170 budeme psát nějaké pseudokódu na to teď. 721 00:35:02,170 --> 00:35:03,300 Než jsme se napsat tento pseudokódu - 722 00:35:03,300 --> 00:35:05,660 Dám si kluci pár minut psát pseudo kód nebo prostě myslím, 723 00:35:05,660 --> 00:35:09,600 o tom - tam jsou dvě věci, které každý rekurzivní funkce potřebuje. 724 00:35:09,600 --> 00:35:12,530 Jaké jsou ty dvě věci? 725 00:35:12,530 --> 00:35:13,220 >> JACK: To má volat sám. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirschhorn: Noah? 727 00:35:13,680 --> 00:35:14,460 Oh, Jacku. 728 00:35:14,460 --> 00:35:15,100 Jen do toho. 729 00:35:15,100 --> 00:35:16,640 >> JACK: To má volat sám. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorn: Tak rekurzivní funkce potřebuje rekurzivní volání, 731 00:35:19,220 --> 00:35:20,220 volat k sobě. 732 00:35:20,220 --> 00:35:20,770 To je jedna. 733 00:35:20,770 --> 00:35:21,510 A co je ta druhá věc? 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í scénář je, tady je, když jsme se zastavili. 737 00:35:26,940 --> 00:35:29,510 Takže vaše funkce volána. 738 00:35:29,510 --> 00:35:31,410 Referenční případ nastane dříve. 739 00:35:31,410 --> 00:35:33,710 Chcete vědět, jestli jste na konci. 740 00:35:33,710 --> 00:35:37,110 A pokud nejste na konci, budete Udělej si svůj rekurzivní volání. 741 00:35:37,110 --> 00:35:39,880 A jdete přes tuto funkci znovu, zkontrolujte znovu vaše základní případ. 742 00:35:39,880 --> 00:35:42,575 Pokud si nejste konec, uděláte další rekurzivní volání, 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, proč rekurzivní funkce vždy Potřebujeme ty základní věci, a ty 745 00:35:47,110 --> 00:35:48,210 rekurzivní volání. 746 00:35:48,210 --> 00:35:51,280 Pokud nemáte rekurzivní volání, je by neměl být rekurzivní funkce. 747 00:35:51,280 --> 00:35:53,210 Pokud jste neměli základní věci, byste jít na věky 748 00:35:53,210 --> 00:35:54,780 tam by byl žádný konec. 749 00:35:54,780 --> 00:35:57,870 A referenční případ vždy na prvním místě, protože budete vždy chtít zkontrolovat 750 00:35:57,870 --> 00:36:00,420 pokud jste na konci první. 751 00:36:00,420 --> 00:36:04,770 Takže než jsme se udělat nějaké pseudokódu, proč ne se chvíli přemýšlet o tom, 752 00:36:04,770 --> 00:36:09,360 jak rekurzivní funkce pro výpočet faktoriálu by být napsána? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Také, jako mnoho, jak děláte, psaní že se na jeden list papíru 755 00:36:26,010 --> 00:36:27,960 to, co budete mít na dělat na kvíz zítra. 756 00:36:27,960 --> 00:36:32,160 Takže asi dobré praxe, aby Ujistěte se, že kód píšete 757 00:36:32,160 --> 00:36:34,420 se na list papíru - 758 00:36:34,420 --> 00:36:35,160 nebo si můžete udělat, že. 759 00:36:35,160 --> 00:36:36,710 Víte, kde jsou středníky. 760 00:36:36,710 --> 00:36:37,660 Pamatuješ si syntaxi. 761 00:36:37,660 --> 00:36:40,400 Vzhledem k tomu, že jste nebyli schopni mít Kompilátor ti udělali chybu. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Také v tomto směru, zítra, kdy jste kódování problémy, pokud 764 00:37:07,240 --> 00:37:11,490 se vrhli na čas, nebo pokud jste velmi zmatený, jak máš 765 00:37:11,490 --> 00:37:16,030 napsat konkrétní věc C, by slušet vám psát pseudo-kódu 766 00:37:16,030 --> 00:37:18,160 nebo pište své připomínky, stejně. 767 00:37:18,160 --> 00:37:21,940 Vzhledem k tomu, že je částečný úvěr pro Spousta otázek, na kvíz. 768 00:37:21,940 --> 00:37:24,840 Takže můžete být spěchal, nebo může být jen zmatený. 769 00:37:24,840 --> 00:37:28,030 Psaní v komentářích nebo pseudo-kódu jsou často způsoby, které 770 00:37:28,030 --> 00:37:29,360 Můžete získat částečnou úvěr. 771 00:37:29,360 --> 00:37:31,440 >> Takže nenechávejte něco prázdné na kvíz. 772 00:37:31,440 --> 00:37:33,490 Je tu žádné sankce za uvedení věci palců 773 00:37:33,490 --> 00:37:37,650 Ve skutečnosti, uvedení v pseudo-kódu nebo komentáře bude pomáhat srovnávač 774 00:37:37,650 --> 00:37:40,410 zjistit, jestli jste skutečně vědět, co mluvíte, a možná ocenění 775 00:37:40,410 --> 00:37:42,030 si některé dílčí ocenění za to. 776 00:37:42,030 --> 00:37:44,510 >> Také v tomto směru, psát jasně. 777 00:37:44,510 --> 00:37:47,650 Pokud se nám podaří opravdu to, co píšete, nejsme ti zavolat 778 00:37:47,650 --> 00:37:49,900 o půlnoci zítra na obrázku z toho, co jste napsal. 779 00:37:49,900 --> 00:37:51,520 Jsme jen tak sundat body. 780 00:37:51,520 --> 00:37:56,570 Napište jasně, takže můžeme slyšet, nebo spíše, můžeme přečíst, co jste napsal. 781 00:37:56,570 --> 00:38:00,230 >> A když se říká, že dvě věty, nepište odstavec. 782 00:38:00,230 --> 00:38:02,280 Postupujte podle pokynů. 783 00:38:02,280 --> 00:38:03,500 Jasně napsat. 784 00:38:03,500 --> 00:38:07,720 A napsat v těchto připomínek nebo pseudokódu na otázky, které by mohly 785 00:38:07,720 --> 00:38:10,270 ocenění částečné úvěr. 786 00:38:10,270 --> 00:38:12,520 >> OK, pojďme se faktoriál. 787 00:38:12,520 --> 00:38:15,000 Takže máme funkci faktoriál. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Pokud bych měl vlastně píšu v C, to, co potřebuji, aby před jménem 790 00:38:21,550 --> 00:38:22,800 funkce? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Návratový typ, který, v tomto případ, dáme mu int. 793 00:38:30,060 --> 00:38:35,450 A pak uvnitř složených závorek, je co se děje uvnitř složených závorek za 794 00:38:35,450 --> 00:38:36,850 funkce? 795 00:38:36,850 --> 00:38:37,950 >> STUDENTI: 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 pravděpodobně přijmout argument. 798 00:38:42,680 --> 00:38:44,500 Je to pravděpodobně jen mít jeden argument. 799 00:38:44,500 --> 00:38:49,450 A my, že to bude trvat celé číslo s názvem x. 800 00:38:49,450 --> 00:38:52,770 A opět, při psaní prototyp funkce nebo písemně funkci 801 00:38:52,770 --> 00:38:57,110 v kódu před jeho definici, vás napsat datový typ a název 802 00:38:57,110 --> 00:39:01,370 tato proměnná pouze pro tuto funkci. 803 00:39:01,370 --> 00:39:06,350 Takže si můžete projít nějaké číslo do tohoto funkce, bude to jen x 804 00:39:06,350 --> 00:39:07,340 interně. 805 00:39:07,340 --> 00:39:08,755 >> Máme pro výpočet faktoriálu funkce. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Potřebujeme dvě věci, základní případ a rekurzivní volání. 808 00:39:15,850 --> 00:39:20,900 Jaká je základní důvod pro faktoriál? 809 00:39:20,900 --> 00:39:24,850 Někdo, kdo to napsal a kdo nemá ještě mluví, co je základem 810 00:39:24,850 --> 00:39:26,100 pouzdro pro faktoriál? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> STUDENT: Pokud n je méně než 2, vrátí 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirschhorn: Pokud n je méně než 2, vrátí 1. 814 00:39:33,520 --> 00:39:37,216 Líbí se mi to, protože to se stará o 0 a 1. 815 00:39:37,216 --> 00:39:45,290 Takže budeme dělat x <2, vrátí 1. 816 00:39:45,290 --> 00:39:47,870 Pokud bychom si prošel 0, pokud dostaneme prošel 1, bude tato funkce 817 00:39:47,870 --> 00:39:49,790 okamžitě vrátí 1. 818 00:39:49,790 --> 00:39:54,020 Pokud bychom si prošel nějaké číslo větší než nebo rovno 2, jedeme do 819 00:39:54,020 --> 00:39:55,370 máme rekurzivní volání. 820 00:39:55,370 --> 00:39:57,855 >> A tak, jak je to, že bude fungovat? 821 00:39:57,855 --> 00:40:01,070 Může někdo, kdo pracoval na této který dosud nepromluvil mi 822 00:40:01,070 --> 00:40:07,380 rekurzivní volání pro tuto funkci v pseudokódu? 823 00:40:07,380 --> 00:40:10,770 Pokud bychom si prošel v počtu x a to je větší než 2, což 824 00:40:10,770 --> 00:40:13,370 chceme dělat? 825 00:40:13,370 --> 00:40:17,930 Jsme také příklad napsán na strana, která vám může poskytnout 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: Přesně tak. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Budeme se vracet x-krát faktoriál x minus 1. 830 00:40:37,750 --> 00:40:41,810 A to, i když jsem sepsal, v podstatě to, co jste řekl v angličtině, 831 00:40:41,810 --> 00:40:44,580 tato funkce pro výpočet faktoriálu bude se znovu zavolal. 832 00:40:44,580 --> 00:40:46,320 Bude provádět na x minus 1. 833 00:40:46,320 --> 00:40:49,320 Je to vrátím s nějakým celé číslo, a pak to bude násobit tyto dva 834 00:40:49,320 --> 00:40:52,050 společně, a tato hodnota bude vrátil se na cokoliv nazval 835 00:40:52,050 --> 00:40:55,010 faktoriál funkce, které by mohly být jiná instance 836 00:40:55,010 --> 00:40:58,420 tato funkce pro výpočet faktoriálu. 837 00:40:58,420 --> 00:41:01,360 >> Takže to je příklad rekurzivní funkce, což je velmi 838 00:41:01,360 --> 00:41:02,530 jednoduché rekurzivní funkce. 839 00:41:02,530 --> 00:41:04,530 Ale většina z nich bude takhle. 840 00:41:04,530 --> 00:41:11,170 Pokud byste chtěli dobrý rekurzivní výzva pro kvízu, zkuste kódování 841 00:41:11,170 --> 00:41:13,230 binární vyhledávání rekurzivně. 842 00:41:13,230 --> 00:41:18,950 Protože pokud jste binární vyhledávání problém nastavit tři, pravděpodobně to udělal 843 00:41:18,950 --> 00:41:21,730 iterativně ve smyčce while. 844 00:41:21,730 --> 00:41:23,700 >> Ale může to být také písemné rekurzivně. 845 00:41:23,700 --> 00:41:26,310 Budeš muset napsat svůj vlastní samostatné funkce, která vezme některé 846 00:41:26,310 --> 00:41:29,020 různé argumenty příkazového řádku - nebo ne argumenty příkazového řádku, z nichž některé 847 00:41:29,020 --> 00:41:30,910 Různé jen pravidelné argumenty. 848 00:41:30,910 --> 00:41:33,870 Ale vy jste mohl napsat binární hledání rekurzivně stejně. 849 00:41:33,870 --> 00:41:36,190 >> Žák: Takže jste mohli také napsáno, místo x minus 1, vy 850 00:41:36,190 --> 00:41:39,502 by také psali x mínus minus, nebo byste mohli mít 851 00:41:39,502 --> 00:41:40,830 napsal mínus mínus x. 852 00:41:40,830 --> 00:41:44,740 Můžete jen vysvětlit, opravdu rychle, proč ty by se různé věci, 853 00:41:44,740 --> 00:41:49,510 jako to, co je rozdíl mezi x minus minus a minus minus x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorn: Ne, nejsem jít do toho. 855 00:41:51,320 --> 00:41:55,500 Ale budu s vámi mluvit o tom po třída. 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 dělají to trochu jinak. 858 00:41:59,090 --> 00:42:00,340 Ale já nechci jít 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ící se rekurze nebo je tato funkce? 861 00:42:09,090 --> 00:42:10,140 To opravdu není ani pseudokódu. 862 00:42:10,140 --> 00:42:15,060 To je v podstatě kód C byste psát pro to. 863 00:42:15,060 --> 00:42:19,393 >> OK, všechny ostatní otázky o tématech tady? 864 00:42:19,393 --> 00:42:19,864 Jo. 865 00:42:19,864 --> 00:42:23,130 >> STUDENT: Mám rychlý přehled s plovoucí desetinnou čárkou a přesnost. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorn: Plovoucí bod a přesnost. 867 00:42:24,260 --> 00:42:26,920 Může někdo opravdu rychle dej mi náměty 868 00:42:26,920 --> 00:42:28,210 s plovoucí desetinnou čárkou a přesnost? 869 00:42:28,210 --> 00:42:30,420 Všichni jste musel udělat pro váš problém nastavit, takže jste všichni 870 00:42:30,420 --> 00:42:31,700 obeznámeni s tím. 871 00:42:31,700 --> 00:42:35,090 Nebo možná ne všichni z vás. 872 00:42:35,090 --> 00:42:36,602 Každý, kdo? 873 00:42:36,602 --> 00:42:39,530 Dej mi začal místo. 874 00:42:39,530 --> 00:42:40,750 S plovoucí desetinnou čárkou a přesnost. 875 00:42:40,750 --> 00:42:42,380 V čem je problém? 876 00:42:42,380 --> 00:42:42,960 Ano. 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 Promiňte. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: K dispozici je pouze omezené množství čísel, které mohou být zastoupeny 882 00:42:51,550 --> 00:42:57,930 protože jste na, v naší pouzdro, 32-bitový systém. 883 00:42:57,930 --> 00:43:03,080 Takže tak nějak si aby se nějaká čísla. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorn: Tak to je Přesně tak. 885 00:43:03,910 --> 00:43:08,110 K dispozici jsou pouze určité množství čísla, která mohou být zastoupeny. 886 00:43:08,110 --> 00:43:11,770 Máte-li násobit dvě velmi velká čísla, může přetéct částku 887 00:43:11,770 --> 00:43:13,950 prostorů máte zastupovat celé číslo. 888 00:43:13,950 --> 00:43:17,930 To je důvod, proč někdy používáme long long namísto int. 889 00:43:17,930 --> 00:43:19,210 To má více mezer. 890 00:43:19,210 --> 00:43:21,210 To může mít větší počet. 891 00:43:21,210 --> 00:43:24,310 >> Plovoucí bod přesnost má co do činění s , ale také má co do činění s 892 00:43:24,310 --> 00:43:29,300 Skutečnost, že desetinná čísla ne vždy představoval. 893 00:43:29,300 --> 00:43:29,540 Promiňte. 894 00:43:29,540 --> 00:43:31,280 Dovolte mi, abych to zpátky nahoru. 895 00:43:31,280 --> 00:43:36,610 Desetinné číslo 1.0 není vždy představoval jako vy by se dalo očekávat, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 To je někdy reprezentován jako 1,000000001 nebo 0,999999999. 898 00:43:50,360 --> 00:43:52,780 To by mohlo být dokonce 89 hozen tam někde. 899 00:43:52,780 --> 00:43:56,560 Takže ty desetinná čísla nejsou zastoupeny přesně tak, jak byste 900 00:43:56,560 --> 00:43:58,430 očekávat, že budou zastoupeny. 901 00:43:58,430 --> 00:44:00,010 >> Takže problém nastavit - 902 00:44:00,010 --> 00:44:00,860 to bylo dva? - 903 00:44:00,860 --> 00:44:05,290 problém nastavit dva, kde jsme se zabývali čísla s plovoucí desetinnou čárkou, když jsme chtěli 904 00:44:05,290 --> 00:44:08,690 to, že představují přesně to, co jsme chtěli to, že představují, číslo 905 00:44:08,690 --> 00:44:12,860 o haléře, nebo počet centů, vynásobíme je 100.. 906 00:44:12,860 --> 00:44:14,750 Zaoblené jsme je. 907 00:44:14,750 --> 00:44:18,660 A pak jsme odříznuti vše za desetinnou čárkou. 908 00:44:18,660 --> 00:44:22,020 To bylo zajištěno, že by ve skutečnosti rovná přesně to, co jsme chtěli 909 00:44:22,020 --> 00:44:22,410 jim rovná. 910 00:44:22,410 --> 00:44:26,870 >> Protože když budete mít něco, co je float a otočte jej do int, můžete 911 00:44:26,870 --> 00:44:29,860 odříznout vše na pravé straně desetinné čárky. 912 00:44:29,860 --> 00:44:33,900 Vzhledem k tomu, že je nějaký plovoucí desetinnou čárkou nepřesnost, 100.000 mohlo být 913 00:44:33,900 --> 00:44:37,440 reprezentován jako 99,999999999. 914 00:44:37,440 --> 00:44:40,350 A pokud jste právě odříznout všechno vpravo hned, budete 915 00:44:40,350 --> 00:44:41,600 dostat špatné čí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: Měl jsem otázku o lití. 919 00:44:45,290 --> 00:44:47,500 V jakém pořadí se to objevit v? 920 00:44:47,500 --> 00:44:54,480 Pokud bych to plavat, držáky, 1 rozdělit o 10, to dělá 1 děleno 10, 921 00:44:54,480 --> 00:44:58,910 pak 0,1, pak zase je do plováku? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorn: Pokud tak učiníte float 1 děleno 10 - 923 00:45:01,470 --> 00:45:02,550 >> STUDENT: Jo, a pak rovná - 924 00:45:02,550 --> 00:45:04,240 dobře, to by za normálních okolností má to stejný v - 925 00:45:04,240 --> 00:45:04,690 Jo. 926 00:45:04,690 --> 00:45:06,760 Chcete-li, aby to plovák, ne? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorn: OK, tak jdeme na použít k segue do zjišťuje, 928 00:45:12,790 --> 00:45:15,390 Odpovědi na tyto otázky pomocí kódování. 929 00:45:15,390 --> 00:45:18,180 Vzhledem k tomu, budete pravděpodobně mít spoustu Tyto minute otázky, a dobrý způsob, 930 00:45:18,180 --> 00:45:19,100 k jejich řešení je přes kódování. 931 00:45:19,100 --> 00:45:21,320 Takže budeme kódovat právě teď, a pak budeme vrátit a 932 00:45:21,320 --> 00:45:24,020 kód na otázku, na kterou měl. 933 00:45:24,020 --> 00:45:24,950 >> Takže první řádek - 934 00:45:24,950 --> 00:45:29,390 Neměl jsem napsal to - to, co je První věc, kterou chcete udělat, když jsme 935 00:45:29,390 --> 00:45:32,250 otevřít nový soubor v gedit? 936 00:45:32,250 --> 00:45:34,190 >> STUDENT: Zahrnout. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorn: Zahrnout, co? 938 00:45:35,920 --> 00:45:37,952 >> STUDENT: CS50 knihovna. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirschhorn: OK. 940 00:45:39,920 --> 00:45:42,590 Co jiného bychom měli zahrnout? 941 00:45:42,590 --> 00:45:46,820 Jsme prostě jít zkontrolovat co se děje když obsadil něco plováku. 942 00:45:46,820 --> 00:45:48,605 Ale co musíme zahrnout, pokud jsme bude napsat program v jazyce 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 Jsme vlastně nepotřebují, protože to programu, cs50.h, i když je to 946 00:45:54,880 --> 00:45:55,920 vždy užitečné, aby ji zahrnout. 947 00:45:55,920 --> 00:45:58,260 Ale my vždy potřebujeme stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> STUDENT: Při kódování v C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorn: Při kódování v C. 950 00:46:15,770 --> 00:46:17,090 >> Tak jsem ji uložit jako tento c souboru.. 951 00:46:17,090 --> 00:46:18,590 Mám nějaké pěkné zvýraznění syntaxe. 952 00:46:18,590 --> 00:46:22,890 Napsal jsem prázdnotu uvnitř hlavní. 953 00:46:22,890 --> 00:46:24,792 Co void znamená? 954 00:46:24,792 --> 00:46:26,740 >> STUDENT: nepřebírá žádnou argumenty příkazového řádku. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: odpadá prostředky, v tomto případ, hlavní neponese 956 00:46:28,900 --> 00:46:29,700 argumenty příkazového řádku. 957 00:46:29,700 --> 00:46:32,720 V jiných případech, to znamená, že funkce nebere argumenty příkazového řádku. 958 00:46:32,720 --> 00:46:36,560 Nebo funkce, kdybych psát prázdno main (void), která by se říci síťovém 959 00:46:36,560 --> 00:46:38,460 nevrací nic. 960 00:46:38,460 --> 00:46:39,960 Takže void prostě nic neznamená. 961 00:46:39,960 --> 00:46:42,510 Co bych napsat, kdybych přijmout argumenty příkazového řádku? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> STUDENT: int oblouk c string oblouk v. 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirschhorn: int argc řetězec 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 hvězda argv závorky. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorn: Takže jste mohl napsat string argv závorky nebo znak hvězda argv 969 00:47:01,730 --> 00:47:03,710 držáky, ale budete potřebovat držáky. 970 00:47:03,710 --> 00:47:06,290 Vzhledem k tomu, argv je pole řetězců, pamatovat. 971 00:47:06,290 --> 00:47:07,360 Není to jen jeden řetězec. 972 00:47:07,360 --> 00:47:10,350 Takže řetězec argv je, tady je jeden řetězec s názvem argv. 973 00:47:10,350 --> 00:47:13,630 String argv držáky se, tady je pole řetězců. 974 00:47:13,630 --> 00:47:17,865 Takže int argc řetězec argv držáky by bylo něco, co jsem 975 00:47:17,865 --> 00:47:18,810 pravděpodobně psát. 976 00:47:18,810 --> 00:47:23,050 >> Takže jste chtěli uložit 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 Nebo v plováku. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorn: V plováku? 980 00:47:26,710 --> 00:47:30,790 Stejně jako float x se rovná 1 děleno 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 Jak mohu vytisknout plovák v printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Co 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 Co je to číslo? 989 00:47:50,810 --> 00:47:52,110 d nebo i. 990 00:47:52,110 --> 00:47:53,000 Co je to řetězec? 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 Jak mohu získat novou linku? 994 00:47:57,550 --> 00:47:58,800 >> STUDENT: Zpětné lomítko n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorn: Co mám vrátit pokud hlavní běží správně? 997 00:48:07,100 --> 00:48:08,360 >> STUDENT: 0. 998 00:48:08,360 --> 00:48:09,430 Musím napsat, že linie, i když? 999 00:48:09,430 --> 00:48:10,170 >> STUDENT: Ne 1000 00:48:10,170 --> 00:48:11,513 OK, nebudeme psát, pak. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Každý může přečíst, že? 1003 00:48:17,190 --> 00:48:18,485 Vypadá to trochu malé. 1004 00:48:18,485 --> 00:48:20,160 Každý může vidět, nebo by Dělám to větší? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Myslím, že pro kameru, uděláme je to trochu větší, ačkoli. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorn: Chci-li zapnout tuto . C soubor do spustitelného souboru, co 1009 00:48:38,410 --> 00:48:39,260 mám napsat? 1010 00:48:39,260 --> 00:48:41,610 >> STUDENT: Udělat test. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorn: Je nám líto? 1012 00:48:42,080 --> 00:48:42,790 >> STUDENT: Udělat test. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorn: Udělat test. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Povídali jsme si o tento řádek dříve. 1016 00:48:48,410 --> 00:48:49,140 Zvonění. 1017 00:48:49,140 --> 00:48:51,270 Co je to zvonění? 1018 00:48:51,270 --> 00:48:52,200 Název překladače. 1019 00:48:52,200 --> 00:48:53,920 Co je to linka? 1020 00:48:53,920 --> 00:48:55,580 >> STUDENT: Nastaví to pro použití GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Sady je pro použití GDB. 1022 00:48:59,230 --> 00:49:02,338 Tato linka, co 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ý soubor, c soubor.. 1025 00:49:06,010 --> 00:49:08,150 Co tyto dva řádky dělat? 1026 00:49:08,150 --> 00:49:10,245 Nebo tyto dvě ne linky. 1027 00:49:10,245 --> 00:49:12,300 >> Žák: Jména to vyzkoušet. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorn: Tak pomlčka o říká, Pojmenujte ji něco jinak. 1029 00:49:15,410 --> 00:49:16,790 A tady voláte ho testu. 1030 00:49:16,790 --> 00:49:18,900 Pokud jsem neměl, že, co by to pojmenovat 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 Co je to? 1034 00:49:25,366 --> 00:49:27,670 >> STUDENT: Odkazy na matematickou knihovnu. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorn: Je odkazy v matematické knihovně. 1036 00:49:29,550 --> 00:49:32,880 My neobsahoval matematickou knihovnu, ale protože to je tak běžné, že jsem 1037 00:49:32,880 --> 00:49:35,780 napsal make vždy obsahovat matematická knihovna. 1038 00:49:35,780 --> 00:49:39,050 A podobně, to zahrnuje knihovna CS50. 1039 00:49:39,050 --> 00:49:43,010 >> OK, takže pokud jsme seznam, nyní máme spustitelný soubor s názvem Test. 1040 00:49:43,010 --> 00:49:45,150 Chcete-li to provést, zkoušku jsem psát. 1041 00:49:45,150 --> 00:49:48,330 Vidím, že můj plovoucí desetinnou čárkou, , jak se očeká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 >> Žák: Takže když dáte vznášet se, jako byste ji obsadil jako float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorn: Cast 1 až plováku? 1047 00:49:56,870 --> 00:49:59,180 >> STUDENT: Ne, obsazení plné věc - 1048 00:49:59,180 --> 00:49:59,500 jo. 1049 00:49:59,500 --> 00:50:02,460 Pokud jste právě udělal, by že, aby bylo 0.1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorn: OK, tak opravdu rychle, 1 děleno 10, které jsou 1051 00:50:07,170 --> 00:50:08,690 celá čísla je rozdělen. 1052 00:50:08,690 --> 00:50:13,580 Takže když si rozdělit celá čísla, jsou 0, a šetříte, že 0 v 1053 00:50:13,580 --> 00:50:17,170 plavat, protože lomítko je jen celočíselném dělení. 1054 00:50:17,170 --> 00:50:19,180 Takže teď jsme soustružení něco do plováku. 1055 00:50:19,180 --> 00:50:21,650 >> Podívejme se, co se stane. 1056 00:50:21,650 --> 00:50:22,900 Uděláme test. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Takže teď vidíme, že lomítko nebylo číslo divize, to bylo plovoucí 1059 00:50:31,090 --> 00:50:32,640 bod rozdělení. 1060 00:50:32,640 --> 00:50:35,700 Vzhledem k tomu, jeden z jeho argumentů byl obsazen do plováku. 1061 00:50:35,700 --> 00:50:38,380 Takže teď to bylo říkal, zacházet s tímto divize, jako máme co do činění s 1062 00:50:38,380 --> 00:50:40,140 plovoucí body, ne s celými čísly. 1063 00:50:40,140 --> 00:50:42,760 A tak dostaneme odpověď očekáváme. 1064 00:50:42,760 --> 00:50:44,620 >> Podívejme se, co se stane - 1065 00:50:44,620 --> 00:50:47,103 Chybička se vloudila. 1066 00:50:47,103 --> 00:50:51,646 Kdybych chtěl vytisknout více desetinné místo skvrny, jak jsem to mohla udělat? 1067 00:50:51,646 --> 00:50:55,550 >> STUDENT: Point tečka f, nebo jako mnoho desetinná místa, jak chcete. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirschhorn: Tak jsem vytisknout 10 desetinných míst. 1070 00:51:04,440 --> 00:51:06,610 A nyní vidíme dostáváme nějaký divný věci. 1071 00:51:06,610 --> 00:51:09,650 A to jde zpět k vaší otázce o plovoucí desetinnou čárkou nepřesnosti. 1072 00:51:09,650 --> 00:51:10,950 K dispozici je divné věci uložené v zde. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, to, že odpověď na vaši otázku? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Co jiného chceš kódovat rychle? 1077 00:51:20,200 --> 00:51:25,470 >> STUDENT: Jen jsem chtěl vidět, zda ne, pokud se uvolní nějaký ukazatel, 1078 00:51:25,470 --> 00:51:30,410 zda je tento ukazatel stále ještě uloženy v je adresa toho, co bylo 1079 00:51:30,410 --> 00:51:32,170 ukázal dříve. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorn: OK, tak se pojďme to udělat. 1081 00:51:34,100 --> 00:51:38,030 Char hvězda ptr, vytváří proměnnou tzv. ptr typu char hvězdy. 1082 00:51:38,030 --> 00:51:39,280 Jak mohu psát malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Jen malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Ale pak to musí být velikost a v tomto případě, myslím, že bych 1087 00:51:51,040 --> 00:51:52,465 směřovat k char. 1088 00:51:52,465 --> 00:51:54,450 Tak to by bylo char. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorn: OK, takže více obecně, Inside - 1090 00:51:57,520 --> 00:51:58,770 pojďme upravovat. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Uvnitř malloc, chcete číslo z bytů na haldě. 1093 00:52:09,260 --> 00:52:12,320 Obecně platí, že to, co jsme viděli, že jsme dělá se budeme malloc 1094 00:52:12,320 --> 00:52:14,940 řetězce, například, nebo pole celých čísel. 1095 00:52:14,940 --> 00:52:21,600 Chceme-li tedy 10 celých čísel, nebo 10 znaky, 10 nám dá 10. 1096 00:52:21,600 --> 00:52:24,370 A pak se velikost znaků bude dát nám, že velikost znaků, které 1097 00:52:24,370 --> 00:52:25,120 V tomto případě je 1 byte. 1098 00:52:25,120 --> 00:52:26,250 Dostaneme 10 bajtů. 1099 00:52:26,250 --> 00:52:28,540 Pokud bychom měli napsat velikost int, že by nám 40 bajtů. 1100 00:52:28,540 --> 00:52:31,520 >> Takže více druhově, uvnitř malloc je počet bajtů chcete. 1101 00:52:31,520 --> 00:52:34,620 V tomto případě se dostáváme 1 bajt. 1102 00:52:34,620 --> 00:52:36,900 Který vypadá jako podivný použití malloc, ale pro naše 1103 00:52:36,900 --> 00:52:38,470 účely dává smysl. 1104 00:52:38,470 --> 00:52:40,420 Takže tam je to. 1105 00:52:40,420 --> 00:52:43,420 >> Budeme volat zdarma. 1106 00:52:43,420 --> 00:52:47,040 My se toho zbavit a používáme PTR znovu. 1107 00:52:47,040 --> 00:52:48,750 A to, co jsi chtěl zkontrolovat? 1108 00:52:48,750 --> 00:52:50,550 >> STUDENT: Jen jsem chtěl zjistit, zda nebo tam bylo něco 1109 00:52:50,550 --> 00:52:51,900 uvnitř ní. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirschhorn: Takže ať už to ukázal na něco? 1111 00:52:53,050 --> 00:52:57,740 >> STUDENT: Jo, přesně, zda stále měl adresu v paměti. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorn: Takže ty chceš zkontrolovat hodnotu PTR? 1113 00:53:02,220 --> 00:53:03,470 >> STUDENT: Jo, přesně tak. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirschhorn: Co mám napsat zde když chci zkontrolovat hodnotu 1116 00:53:10,160 --> 00:53:11,880 bod - to, co je, Jordan řekl, hodnota? 1117 00:53:11,880 --> 00:53:13,720 Nebo to, co je uloženo uvnitř 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 když napíšu jen to, že bude dej mi hodnotu PTR. 1121 00:53:20,520 --> 00:53:22,800 A jak mohu vytisknout adresa paměti? 1122 00:53:22,800 --> 00:53:26,470 Co je formátovací řetězec 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 řetězec. 1126 00:53:29,500 --> 00:53:30,750 % P na ukazatel. 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 pořádku. 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 ještě má něco v něm. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 To je pravděpodobně více zajímavá otázka. 1135 00:53:57,645 --> 00:53:59,198 Co to linka dělat? 1136 00:53:59,198 --> 00:54:00,830 >> STUDENT: seg chyby. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorn: Co? 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 řádek o kód, hvězda PTR, co 1142 00:54:08,265 --> 00:54:10,152 se hvězda 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 Přejít na ten obsah. 1146 00:54:13,910 --> 00:54:16,830 Tak to je jít do paměti řešit tam a dej mi to. 1147 00:54:16,830 --> 00:54:21,030 Použil jsem% c tady, protože tam jsou znaky uloženy. 1148 00:54:21,030 --> 00:54:23,390 Takže jsme jít na tuto adresu my právě viděli - nebo to bude pravděpodobně 1149 00:54:23,390 --> 00:54:25,190 trochu jiný to když jsme se spustit program. 1150 00:54:25,190 --> 00:54:28,010 Ale půjdeme na tuto adresu které víme, že ještě existuje 1151 00:54:28,010 --> 00:54:29,260 a vidět, co tam je. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Takže to nebylo seg závadu. 1154 00:54:37,110 --> 00:54:38,970 Prostě nám nedal nic. 1155 00:54:38,970 --> 00:54:43,350 Mohlo by se nám skutečně uveden něco, jsme prostě nemůže vidět. 1156 00:54:43,350 --> 00:54:45,110 A že jde zpátky do tohoto nápadu - 1157 00:54:45,110 --> 00:54:47,270 a my nebudeme mít moc do to, protože to je nad rámec 1158 00:54:47,270 --> 00:54:48,460 rozsah tohoto kurzu. 1159 00:54:48,460 --> 00:54:51,260 Ale mluvili jsme o tom tady, když jsme překročil hranice pole podle 1160 00:54:51,260 --> 00:54:54,890 1, mohli bychom se dostat do problémů. 1161 00:54:54,890 --> 00:54:58,550 >> Někdy, když si jen tak vypnout 1, děláte něco špatně, a vy 1162 00:54:58,550 --> 00:54:59,220 mohl dostat do problémů. 1163 00:54:59,220 --> 00:55:00,820 Ale nemusíte vždy dostat do problémů. 1164 00:55:00,820 --> 00:55:05,170 Záleží na tom, jak moc špatnou věc, kterou to, budete se dostat do problémů. 1165 00:55:05,170 --> 00:55:07,790 Což ovšem neznamená, být nedbalý s kódem. 1166 00:55:07,790 --> 00:55:12,080 Ale to znamená, že program nebude vždy skončit, i když jdete někam 1167 00:55:12,080 --> 00:55:14,130 jste neměl jít. 1168 00:55:14,130 --> 00:55:18,170 >> Dobrým příkladem toho je, hodně lidé v jejich problému nastavení 3, které 1169 00:55:18,170 --> 00:55:22,350 bylo 15, nekontroloval Hranice na palubě. 1170 00:55:22,350 --> 00:55:25,860 Takže jste se podíval doleva, podíval se na právo, podíval se na vrchol, podíval se 1171 00:55:25,860 --> 00:55:27,000 až na dno. 1172 00:55:27,000 --> 00:55:31,540 Ale vy jste zkontrolovat, zda horní byl vlastně bude na palubě. 1173 00:55:31,540 --> 00:55:35,220 A spousta lidí, kteří dělali, že i se obrátil, že v jejich programu pracoval 1174 00:55:35,220 --> 00:55:38,960 dokonale, protože pokud to deska byla uložena v paměti, pokud jste šel jeden 1175 00:55:38,960 --> 00:55:42,300 nad ní nebo zkontrolovat, zda je paměťová adresa, nebylo nic 1176 00:55:42,300 --> 00:55:44,870 zvláště hrozné o tom, takže program nebyl 1177 00:55:44,870 --> 00:55:45,970 bude křičet na vás. 1178 00:55:45,970 --> 00:55:48,870 >> Ale my bychom ještě sundat body, pokud jste si zkontrolujte, zda je, protože vám 1179 00:55:48,870 --> 00:55:50,850 dělali něco, co nebyli dělat, a ty by mohly mít 1180 00:55:50,850 --> 00:55:51,860 dostal do potíží. 1181 00:55:51,860 --> 00:55:54,040 Kurzy jsou, i když pravděpodobně ne. 1182 00:55:54,040 --> 00:55:57,790 Tak tohle je ukázat, že ano, stále ještě můžeme jít na to. 1183 00:55:57,790 --> 00:55:59,010 A my nejsme dostat do Problém v tomto případě. 1184 00:55:59,010 --> 00:56:04,000 Pokud jsme se snažili udělat si dalších 100 znaků, bychom 1185 00:56:04,000 --> 00:56:06,000 pravděpodobně dostanete do problémů. 1186 00:56:06,000 --> 00:56:09,400 A můžete kódovat čtení další 100 znaky, pokud chcete, tím, že dělá některé 1187 00:56:09,400 --> 00:56:10,110 druh smyčky for. 1188 00:56:10,110 --> 00:56:10,850 Jo. 1189 00:56:10,850 --> 00:56:16,250 >> STUDENT: Protože jsme byli přiděleni, že prostor skutečná hodnota, nebyli bychom 1190 00:56:16,250 --> 00:56:17,050 ve skutečnosti být schopni vidět nic. 1191 00:56:17,050 --> 00:56:21,740 Měli bychom to zkusit s nastavením, které rovná jako je C nebo tak něco? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorn: Velká otázka. 1193 00:56:22,640 --> 00:56:25,340 Jak mohu nastavit tuto hodnotu - 1194 00:56:25,340 --> 00:56:28,980 co řádek kódu mohu napsat on-line sedm dělat to, co jsi řekl? 1195 00:56:28,980 --> 00:56:34,040 >> STUDENT: Hvězda ptr rovná se jeden quote c ukončit jednu nabídku. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorn: Tak to je uvedení charakter, c, na tomto místě, 1197 00:56:36,970 --> 00:56:40,200 protože opět, že hvězda znamená jít tam. 1198 00:56:40,200 --> 00:56:43,320 A pokud je použit na levé straně Operátor přiřazení, která se rovná 1199 00:56:43,320 --> 00:56:47,270 podepsat, nebudeme se dostat, že hodnotu tak, jak je uvedeno, že hodnoty. 1200 00:56:47,270 --> 00:56:48,520 Nyní se pojďme podívat, co se stane. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Tam dáme něco a bylo to tam. 1203 00:56:56,770 --> 00:56:58,000 Volali jsme zdarma. 1204 00:56:58,000 --> 00:57:00,100 Některé věci asi stalo na haldě. 1205 00:57:00,100 --> 00:57:01,890 Takže to tam není. 1206 00:57:01,890 --> 00:57:07,440 Ale znovu, nejsme stále problémy pro jít tam. 1207 00:57:07,440 --> 00:57:10,260 >> Dělám to v kódu pro ilustraci že mnoho z nich 1208 00:57:10,260 --> 00:57:12,410 otázky, které máte, jsou opravdu zajímavé 1209 00:57:12,410 --> 00:57:13,650 odpovídá spoustu času. 1210 00:57:13,650 --> 00:57:15,260 A jsou opravdu dobré otázky. 1211 00:57:15,260 --> 00:57:19,010 A můžete přijít na ně na vlastní-li, například, 1212 00:57:19,010 --> 00:57:19,990 nejsme v sekci. 1213 00:57:19,990 --> 00:57:20,940 Jo. 1214 00:57:20,940 --> 00:57:24,430 >> STUDENT: Vzhledem k tomu, že nejste odeslání ukazatel kdekoliv, potřebujete, aby 1215 00:57:24,430 --> 00:57:26,530 používat malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirschhorn: Tak tohle jde zpět 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 jen lokální proměnná? 1219 00:57:29,980 --> 00:57:32,280 Malloc zde není tak přesvědčivý. 1220 00:57:32,280 --> 00:57:35,260 Použití malloc zde není že přesvědčivé, protože je to 1221 00:57:35,260 --> 00:57:36,500 jen lokální proměnná. 1222 00:57:36,500 --> 00:57:40,970 >> Žák: Takže jsi to mohl udělat char hvězda 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 nyní získat zpět do původního otázku. 1225 00:57:43,300 --> 00:57:46,885 Myslím, že jste nebyli spokojeni s mou odpověď. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Stejně jako, že? 1228 00:57:49,226 --> 00:57:49,682 >> STUDENT: Jo. 1229 00:57:49,682 --> 00:57:50,932 Počkejte. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirschhorn: A kde chcete vytisknout? 1232 00:57:57,850 --> 00:58:00,026 Takže budeme tisknout řetězec takového? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> STUDENT: Zajímavé. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorn: Tak to říká, ž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 mělo být znak. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> STUDENT: Jen se první. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorn: Tak tohle je to, co jsem řekl předtím. 1242 00:58:28,610 --> 00:58:34,240 Jak jsem řekl, že to není ukládání řetězec v proměnné ukazatel. 1243 00:58:34,240 --> 00:58:35,120 Je to skladování - 1244 00:58:35,120 --> 00:58:36,350 >> STUDENT: první hodnota řetězce. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorn: Adresa první hodnota řetězce. 1246 00:58:40,810 --> 00:58:46,940 Pokud bychom měli vytisknout tento, jsme získání hodnoty uvnitř ukazatel. 1247 00:58:46,940 --> 00:58:51,005 A uvidíme, že je opravdu adresa paměti. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Má to smysl? 1250 00:58:56,440 --> 00:58:56,940 Promiňte. 1251 00:58:56,940 --> 00:58:58,996 Počkejte, to, že odpověď na vaši otázka, ne? 1252 00:58:58,996 --> 00:58:59,790 >> STUDENT: Jo. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorn: Tento řádek kódu je vytvořit řetězec a pak další 1254 00:59:05,830 --> 00:59:09,115 variabilní ukazatel, který se ukázal tohoto řetězce, které pole. 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 když jsme šli jednu paměť zabývat dále, dostali bychom se na h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 To bylo uloženo jako řetězec? 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirschhorn: Stejně jako jsme udělali - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 tak to je cenná dělat. 1263 00:59:30,790 --> 00:59:33,780 To je bod, aritmetika, které vy neviděli, a měly by být 1264 00:59:33,780 --> 00:59:35,550 relativně dobře. 1265 00:59:35,550 --> 00:59:36,905 To je podobné psaní - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 pokud bychom měli napsat tento řádek kódu, jsme předtím viděli pole notaci. 1268 00:59:46,350 --> 00:59:55,900 To by nám mělo dát druhý Hodnota v tomto poli, h. 1269 00:59:55,900 --> 01:00:05,010 >> Pokud jsme to udělali, mělo by to také dát us druhá hodnota v tomto poli. 1270 01:00:05,010 --> 01:00:08,320 Vzhledem k tomu, že se bude, aby do paměti adresa prvního věc, ale 1271 01:00:08,320 --> 01:00:10,530 paměť adresa věc jeden přes. 1272 01:00:10,530 --> 01:00:14,360 A pak se operátor hvězda dereferences že ukazatel. 1273 01:00:14,360 --> 01:00:16,940 A opět, pojďme se podívat. 1274 01:00:16,940 --> 01:00:18,664 Dostaneme zase h.. 1275 01:00:18,664 --> 01:00:20,980 >> STUDENT: Co přesně dělá dereference znamená? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorn: Získávání je fantazie slovo pro jít. 1277 01:00:23,650 --> 01:00:26,390 Jděte na to a dostat to, co je tam je dereference ukazatele. 1278 01:00:26,390 --> 01:00:28,240 Je to jen fantazie slovo pro to. 1279 01:00:28,240 --> 01:00:29,986 >> STUDENT: Pokud bychom chtěli k tisku celý řetězec, mohli bychom 1280 01:00:29,986 --> 01:00:31,930 to ampersand ukazatel? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorn: OK, jsme jít na tu pauzu. 1282 01:00:33,490 --> 01:00:35,480 Jsme skončí tady. 1283 01:00:35,480 --> 01:00:41,760 Ampersand vám adresu umístění, takže když děláte ampersand z 1284 01:00:41,760 --> 01:00:44,080 proměnná, to vám dává adresu pokud je tato proměnná uložena. 1285 01:00:44,080 --> 01:00:48,580 Ampersand ukazatel vám adresa ptr kde ptr je v paměti. 1286 01:00:48,580 --> 01:00:50,140 >> Nebudeme jít na v tomto příkladu. 1287 01:00:50,140 --> 01:00:52,640 Můžete zjistit, tyto věci na vlastní pěst. 1288 01:00:52,640 --> 01:00:55,740 Ale znovu, to by mohlo být dokonce hraničí bit rámec toho, co potřebujete vědět 1289 01:00:55,740 --> 01:00:58,000 Rozsah této polovině - 1290 01:00:58,000 --> 01:00:59,070 nebo to kvíz, spíše. 1291 01:00:59,070 --> 01:01:00,270 Promiňte. 1292 01:01:00,270 --> 01:01:03,770 >> Budeme se dál, protože bych Líbí se mi udělat jednu kódování problém 1293 01:01:03,770 --> 01:01:05,100 než čas vypršel. 1294 01:01:05,100 --> 01:01:09,340 A budeme kódovat, co si myslím je nejzávažnější z nich 1295 01:01:09,340 --> 01:01:11,020 příklady, atoi. 1296 01:01:11,020 --> 01:01:14,520 Tak tohle byla otázka quiz před dvěma lety. 1297 01:01:14,520 --> 01:01:17,810 A mám ho na desce zde. 1298 01:01:17,810 --> 01:01:20,680 >> Lidé byli požádáni o kvízu - 1299 01:01:20,680 --> 01:01:23,640 dostali trochu více tesxt v otázka, ale já eliminovány 1300 01:01:23,640 --> 01:01:26,640 textu, protože to bylo zbytečné pro naše účely teď. 1301 01:01:26,640 --> 01:01:29,180 Byl to jen nějaký pozadí na to, co atoi udělal. 1302 01:01:29,180 --> 01:01:31,425 Ale vy všichni známe a jsou velmi obeznámeni s atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Navrhuji, abyste kód této na jeden list papíru. 1304 01:01:35,620 --> 01:01:39,310 Já také doporučuji vám použít strategii že jsme přešli 1305 01:01:39,310 --> 01:01:41,040 hodně v naší sekci. 1306 01:01:41,040 --> 01:01:44,130 Za prvé, ujistěte se, že jste pochopili, co atoi dělá. 1307 01:01:44,130 --> 01:01:47,580 Nakreslete si obrázek nebo přijít s některými mentální obraz o tom ve vaší hlavě. 1308 01:01:47,580 --> 01:01:51,120 Dále vypište pseudokódu na to. 1309 01:01:51,120 --> 01:01:53,120 Na testu, když vše, co dostanete, je pseudokódu, alespoň 1310 01:01:53,120 --> 01:01:54,550 dát něco dolů. 1311 01:01:54,550 --> 01:02:00,070 A pak se mapa, která pseudokódu na C. Pokud máte kontrolu ve vašem 1312 01:02:00,070 --> 01:02:03,760 pseudokódu, stejně jako zjistit, zda něco je 1, která mapuje na pokud 1313 01:02:03,760 --> 01:02:05,750 stav, a tak dále. 1314 01:02:05,750 --> 01:02:07,850 A konečně, kód programu v C. 1315 01:02:07,850 --> 01:02:15,000 >> Takže zpět k atoi a pět minut kódovat to na jeden list 1316 01:02:15,000 --> 01:02:19,480 Papír, který je asi o množství času byste vzít 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ět až 15 minut, pět až 12, pět až 10 minut, se o výši 1319 01:02:27,060 --> 01:02:30,150 Doba byste strávit na to otázka v kvízu. 1320 01:02:30,150 --> 01:02:31,670 Takže pět minut, prosím. 1321 01:02:31,670 --> 01:02:35,957 A pokud budete mít nějaké dotazy, zvýšit tvá ruka a já přijdu kolem. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [SIDE Konverzace] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorn: OK, tak to bylo pět minut. 1326 01:08:37,580 --> 01:08:39,880 To bylo asi o množství Doba byste strávit na které na kvíz, 1327 01:08:39,880 --> 01:08:42,120 Možná low-end v té době. 1328 01:08:42,120 --> 01:08:44,010 Budeme shrnout v trochu. 1329 01:08:44,010 --> 01:08:45,740 Začněme kódování to. 1330 01:08:45,740 --> 01:08:49,479 A pokud se nám nepodaří získat celou cestu přes, Odpovědi na tuto a tuto 1331 01:08:49,479 --> 01:08:54,189 Kontrolní otázka jsou k dispozici, znovu, Podzim 2011, je-li tato otázka 1332 01:08:54,189 --> 01:08:54,913 se objevil na kvíz. 1333 01:08:54,913 --> 01:08:57,830 >> A stálo to za osm bodů na kvíz poté. 1334 01:08:57,830 --> 01:09:01,140 Osm bodů je na horním konci množství bodů něco stojí. 1335 01:09:01,140 --> 01:09:04,790 Většina otázek se pohybuje v rozmezí s jedním až šesti bodů. 1336 01:09:04,790 --> 01:09:08,500 Tak to je náročnější otázka, pro jistotu. 1337 01:09:08,500 --> 01:09:09,750 Může někdo, abych začal? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Obecně platí, že to, co se nám děje chtít dělat s tím 1340 01:09:15,380 --> 01:09:17,550 fungovat atoi, logicky? 1341 01:09:17,550 --> 01:09:19,569 Co chceme dělat? 1342 01:09:19,569 --> 01:09:22,279 Takže budeme psát některé pseudokódu. 1343 01:09:22,279 --> 01:09:24,090 >> STUDENT: Převod znaků na celá čísla. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorn: Převod znaků na celá čísla. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Takže, kolik znaků jsme bude muset projít? 1347 01:09:30,870 --> 01:09:32,295 >> STUDENT: Všichni z nich. 1348 01:09:32,295 --> 01:09:34,100 >> STUDENT: Všechny postavy v řetězci. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorn: Všechny znaky v řetězci. 1350 01:09:35,540 --> 01:09:42,180 Takže pokud bychom chtěli projít každý znak v řetězci, to je věc 1351 01:09:42,180 --> 01:09:44,560 v C jsme viděli, že umožnila nám projít každý 1352 01:09:44,560 --> 01:09:45,939 znak v řetězci? 1353 01:09:45,939 --> 01:09:46,819 >> STUDENTI: pro smyčce. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorn: pro smyčce. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Takže budeme procházet každá postava v s.. 1357 01:09:55,330 --> 01:10:00,940 >> Tak co budeme chtít dělat když dostaneme specifický charakter? 1358 01:10:00,940 --> 01:10:02,480 Řekněme, že jsme stále schválil 90. 1359 01:10:02,480 --> 01:10:03,460 Dostáváme 9. 1360 01:10:03,460 --> 01:10:04,240 Je to postava. 1361 01:10:04,240 --> 01:10:07,440 Co chceme udělat s že postava 9? 1362 01:10:07,440 --> 01:10:10,082 >> STUDENT: Odečtěte to z povahy 0? 1363 01:10:10,082 --> 01:10:11,860 >> STUDENT: Přidat 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorn: Odečíst 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: Proč Chcete-li dělat, že? 1367 01:10:15,573 --> 01:10:16,560 >> STUDENT: [neslyšitelné] 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 jsme se znak 9, odečteme od 1371 01:10:21,580 --> 01:10:25,820 znak 0, aby se aktuální čí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 jak víte, že charakter 9 mínus 0 postava je 9? 1375 01:10:37,000 --> 01:10:39,222 Co chart jste se na? 1376 01:10:39,222 --> 01:10:43,130 >> STUDENT: K dispozici jsou logicky devět místa mezi 9 a 0.. 1377 01:10:43,130 --> 01:10:44,620 Nebo byste se mohli podívat na tabulku ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorn: ASCII tabulka. 1379 01:10:45,120 --> 01:10:46,490 Ale ano, máte pravdu stejně. 1380 01:10:46,490 --> 01:10:47,780 Takže odečteme 0. 1381 01:10:47,780 --> 01:10:49,010 Takže teď máme číslo 9. 1382 01:10:49,010 --> 01:10:49,970 A to, co chceme dělat, že? 1383 01:10:49,970 --> 01:10:54,970 Pokud budeme mít 90, to je první číslo jsme, co chceme dělat? 1384 01:10:54,970 --> 01:10:58,180 >> STUDENT: já bych dal do dočasného celé číslo pole, proveďte matematiku na to 1385 01:10:58,180 --> 01:11:02,088 později, aby to do konce. 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čít na konci roku pole a pak se přesunout dopředu tak, 1388 01:11:06,990 --> 01:11:10,350 že pokaždé, když budete pohybovat vpřed, 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 zní jako docela přesvědčivý nápad. 1391 01:11:12,250 --> 01:11:16,040 Můžeme začít na konci našeho pole, a můžeme použít strleng. 1392 01:11:16,040 --> 01:11:17,030 Můžeme použít strleng zde. 1393 01:11:17,030 --> 01:11:18,870 Dostaneme délku našeho řetězce. 1394 01:11:18,870 --> 01:11:20,100 Začneme na konci. 1395 01:11:20,100 --> 01:11:29,170 A + první, jen jsme se, že integer, a možná bychom vytvořit jako 1396 01:11:29,170 --> 01:11:32,270 Nová integer proměnná up top, kde jsme ukládání vše. 1397 01:11:32,270 --> 01:11:37,340 Tak jsme smyčka přes všechny char v S z zpět na přední straně, odečteme 0, a 1398 01:11:37,340 --> 01:11:42,790 pak jsme si to, a v závislosti na tam, kde je, jsme to násobit 1399 01:11:42,790 --> 01:11:45,860 o síle 10. 1400 01:11:45,860 --> 01:11:50,644 Protože první, co máme násobit 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 Co se množit druhé nejpravější znak by? 1404 01:11:56,010 --> 01:11:57,450 >> STUDENT: [neslyšitelné]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorn: Co? 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 Třetí nejvíce 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: Omlouvám se, ale nerozumím to, co tady děláme. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorn: OK, vraťme se tedy. 1413 01:12:08,640 --> 01:12:12,500 Takže budeme mít prošel v řetězci. 1414 01:12:12,500 --> 01:12:14,470 Protože jsme psát atoi. 1415 01:12:14,470 --> 01:12:15,260 Tak jsme si prošel v řetězci. 1416 01:12:15,260 --> 01:12:17,640 Řekněme, že jsme stále prošel v řetězci 90. 1417 01:12:17,640 --> 01:12:19,930 >> První věc, kterou se chystáte udělat, je nastavit nové číslo proměnné, které jsme 1418 01:12:19,930 --> 01:12:22,150 jen tak k vytvoření jako naše nové číslo. 1419 01:12:22,150 --> 01:12:24,630 To je to, co budeme Pro návrat na konci. 1420 01:12:24,630 --> 01:12:30,110 Musíme projít každý znak v řetězec, protože jsme došli k závěru, 1421 01:12:30,110 --> 01:12:34,430 že se musíme dotknout každý z nich a pak jej přidejte do naší nové číslo. 1422 01:12:34,430 --> 01:12:36,330 >> Ale nemůžeme jen přidat jako číslo. 1423 01:12:36,330 --> 01:12:38,270 Nemůžeme jen tak 9 a přidat 9 do naší celé číslo. 1424 01:12:38,270 --> 01:12:40,560 Záleží na tom, jaké místo je v řetězci. 1425 01:12:40,560 --> 01:12:42,960 Budeme muset násobit je to o síle 10. 1426 01:12:42,960 --> 01:12:45,580 Vzhledem k tomu, že to, jak základna 10 děl. 1427 01:12:45,580 --> 01:12:49,050 >> Takže budeme mít skutečný znak, nebo skutečné číslo 1428 01:12:49,050 --> 01:12:53,860 číslo, odečtením znak 0 od znaku 9, jako jsme to udělali s 1429 01:12:53,860 --> 01:12:57,560 odečtením znak kapitálu od bez ohledu na charakter jsme měli v jednom 1430 01:12:57,560 --> 01:12:58,120 tyto problémy. 1431 01:12:58,120 --> 01:13:04,190 Takže budeme vlastně mít číslo od 0 do 9 uložen jako reálné číslo, a my budeme 1432 01:13:04,190 --> 01:13:07,590 vynásobte to o síle 10 v závislosti na tom, kde jsme v řetězci. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 A pak budeme přidat zpět do naší nové celočíselné proměnné. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Tak co to bude vypadat by být - budeme čerpat tady. 1437 01:13:37,890 --> 01:13:40,086 Pokud bychom si prošel v řetězci 90 - 1438 01:13:40,086 --> 01:13:41,336 >> STUDENT: [neslyšitelné]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorn: Ale atoi vezme řetězec. 1441 01:13:45,540 --> 01:13:46,350 Takže jdeme projít hospodářství. 1442 01:13:46,350 --> 01:13:49,900 Budeme si prošel v 90.. 1443 01:13:49,900 --> 01:13:51,540 Jdeme ze zadní na přední straně. 1444 01:13:51,540 --> 01:13:53,920 Bereme 0. 1445 01:13:53,920 --> 01:13:55,080 >> STUDENT: Omlouvám se. 1446 01:13:55,080 --> 01:13:55,880 Možná je to hloupost. 1447 01:13:55,880 --> 01:13:59,440 Pokud budeme se prošel v řetězci, Proč je 90, co jsme 1448 01:13:59,440 --> 01:14:00,260 jak prošel v roce? 1449 01:14:00,260 --> 01:14:03,160 Protože 90 je celé číslo. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorn: Vzhledem k tomu, atoi se string a změní to na celé číslo 1451 01:14:06,820 --> 01:14:08,320 zastoupení tohoto řetězce. 1452 01:14:08,320 --> 01:14:13,650 Ale řetězec 90 není celé číslo 90 nebo číslo 90. 1453 01:14:13,650 --> 01:14:17,920 Řetězec 90 je pole ze dvou, nebo tři postavy, spíše, 9 1454 01:14:17,920 --> 01:14:22,740 znak, znak 0, a zpětné lomítko 0 znak. 1455 01:14:22,740 --> 01:14:26,260 >> A budeme psát atoi, protože pro Například, když budete mít příkaz 1456 01:14:26,260 --> 01:14:30,230 argument řádek, a to je uloženo v argv, je to uloženo jako řetězec. 1457 01:14:30,230 --> 01:14:32,940 Ale pokud chcete, aby ji léčit jako číslo, musíte jej převést na 1458 01:14:32,940 --> 01:14:34,700 aktuální číslo. 1459 01:14:34,700 --> 01:14:37,210 Což jsme udělali jeden z našich problémů sad. 1460 01:14:37,210 --> 01:14:38,800 Které jsme udělali v řadě našich problémových sad. 1461 01:14:38,800 --> 01:14:41,690 Každý, kdo se celé číslo jako argument příkazového řádku. 1462 01:14:41,690 --> 01:14:46,490 Takže to je důvod, proč naše atoi funkce bere řetězec. 1463 01:14:46,490 --> 01:14:51,910 >> Takže znovu, v našem příkladu zde, jsme bude trvat ten poslední. 1464 01:14:51,910 --> 01:14:55,050 Budeme odečíst charakter 0 z toho, protože znaky 0 1465 01:14:55,050 --> 01:14:58,810 odečte charakterem 0 vám Skutečný počet 0, v závislosti na 1466 01:14:58,810 --> 01:15:00,950 ASCII matematika, co děláme. 1467 01:15:00,950 --> 01:15:04,870 >> Vzhledem k tomu, znaky jsou reprezentovány jako jiný než jejich skutečný - 1468 01:15:04,870 --> 01:15:08,830 charakter, například, malá 97. 1469 01:15:08,830 --> 01:15:10,260 Není to - oops! 1470 01:15:10,260 --> 01:15:13,290 Není to, co byste čekali aby to bylo, 0, například. 1471 01:15:13,290 --> 01:15:16,200 Takže budete muset odečíst charakter, aby se 0.. 1472 01:15:16,200 --> 01:15:18,950 >> Takže jdeme na to, že zde získat skutečný počet. 1473 01:15:18,950 --> 01:15:22,560 A pak budeme násobit ji síla 10 v závislosti na tom, kde 1474 01:15:22,560 --> 01:15:27,030 je v řetězci, a pak, že a přidejte ji do naší držáku místo 1475 01:15:27,030 --> 01:15:32,520 variabilní, takže můžeme přijít s naše poslední nové číslo. 1476 01:15:32,520 --> 01:15:35,080 Znamená to, že má smysl pro každého? 1477 01:15:35,080 --> 01:15:37,730 >> Takže nebudeme kódovat tento právě teď, protože jsme 1478 01:15:37,730 --> 01:15:38,830 jak málo času. 1479 01:15:38,830 --> 01:15:40,860 Omlouvám se za načasování, že. 1480 01:15:40,860 --> 01:15:44,620 Ale je to to, co, doufejme, že byste být schopni to udělat na kvíz - na 1481 01:15:44,620 --> 01:15:47,710 Přinejmenším si to pseudokódu napsaný. 1482 01:15:47,710 --> 01:15:50,840 >> A pak, když jsme byli psát pseudokódu, ve skutečnosti, můžeme to udělat 1483 01:15:50,840 --> 01:15:51,490 docela rychle. 1484 01:15:51,490 --> 01:15:55,230 Každý řádek komentářů jsme napsali jsme zde překládá do asi 1485 01:15:55,230 --> 01:15:56,970 jeden řádek C kódu. 1486 01:15:56,970 --> 01:16:01,780 Vyhlášení nové proměnné, psaní smyčky, některé odčítání, některé 1487 01:16:01,780 --> 01:16:07,070 násobení, a některé přiřazení. 1488 01:16:07,070 --> 01:16:09,020 Měli bychom asi také chtít, aby napsat vratné potrubí. 1489 01:16:09,020 --> 01:16:12,040 Také bychom mohli chtít, aby některé kontroly v zde. 1490 01:16:12,040 --> 01:16:12,655 Jo. 1491 01:16:12,655 --> 01:16:15,720 >> Žák: Takže můžeme léčit s jako skutečné řetězce? 1492 01:16:15,720 --> 01:16:18,730 Protože vím, že je to jen adresa. 1493 01:16:18,730 --> 01:16:22,090 Stejně jako, jak byste si délku řetězec je prošel? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorn: Tak jak jste délka řetězce? 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 dát s jako Argument, že? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorn: Tak strlen trvá char hvězdu. 1499 01:16:34,620 --> 01:16:38,090 A z toho vyplývá, že char hvězdu, a to udržuje v počítání, dokud se dostane do 1500 01:16:38,090 --> 01:16:41,865 zpětné lomítko 0. strlen byl vlastně jeden z dalších programů jsme 1501 01:16:41,865 --> 01:16:42,850 šli do kódu. 1502 01:16:42,850 --> 01:16:44,560 To je další dobrý kódu. 1503 01:16:44,560 --> 01:16:47,270 To je jedna to trochu jednodušší, protože pokud budete přemýšlet o tom, že 1504 01:16:47,270 --> 01:16:47,830 koncepčně - 1505 01:16:47,830 --> 01:16:51,620 Jen jsem to řekl nahlas - strlen takto ukazatel a stále děje, a 1506 01:16:51,620 --> 01:16:54,210 počítání a sledování, dokud dostanete zpě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 nejlepší štěstí na kvíz 0 zítra. 1509 01:17:00,200 --> 01:17:03,170 Pokud máte nějaké dotazy, budu být venku po tomto. 1510 01:17:03,170 --> 01:17:05,610 Neváhejte a napište mi. 1511 01:17:05,610 --> 01:17:08,480 Oslovit své vlastní TF, pokud jste Není v mé části, nebo se my 1512 01:17:08,480 --> 01:17:10,005 e-mail, pokud budete chtít. 1513 01:17:10,005 --> 01:17:13,140 >> Pokud chcete šílet a pošlete mi e-mail, třeštění e-mail, budu 1514 01:17:13,140 --> 01:17:16,710 poslat tě zpátky, jako, emotikony, nebo, jako, vtip nebo tak něco. 1515 01:17:16,710 --> 01:17:18,190 Tak neváhejte to udělat stejně. 1516 01:17:18,190 --> 01:17:20,750 Hodně štěstí znovu, a budu Uvidíme se příští týden. 1517 01:17:20,750 --> 01:17:23,435