1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [2. týždeň, pokračovanie] 2 00:00:02,270 --> 00:00:04,220 [David J. Malan, Harvard University] 3 00:00:04,220 --> 00:00:06,880 [To je CS50. - CS50.TV] 4 00:00:06,880 --> 00:00:10,990 Dobrá. To je CS50, a to je koniec 2. týždeň. 5 00:00:10,990 --> 00:00:14,410 Ak očakávate, že hlad po tejto dobe zajtra, 6 00:00:14,410 --> 00:00:18,620 viem, že budeme zvolávať ako malé skupiny zajtra, vo štvrtok, 13:15. 7 00:00:18,620 --> 00:00:21,360 Tam je to URL tu, ak chcete RSVP. 8 00:00:21,360 --> 00:00:26,740 Priestor je obmedzený, preto prosím ospravedlňte, ak bol formulár vyplnený až v čase, keď vyplníte na to. 9 00:00:26,740 --> 00:00:29,300 Ďalšie URL, ale, že by mohlo byť zaujímavé je to. 10 00:00:29,300 --> 00:00:32,369 V takmer za mesiac, kurz sa bude k dispozícii 11 00:00:32,369 --> 00:00:36,890 všetky všeobecnejšie cez EDX, cez ktoré ľudia na internete budú môcť sledovať spolu, 12 00:00:36,890 --> 00:00:39,380 zapojiť sa do kurzu pomerne aktívne, v skutočnosti. 13 00:00:39,380 --> 00:00:42,270 Budú používať CS50 Appliance a CS50 Diskutovať 14 00:00:42,270 --> 00:00:45,490 a väčšina z rôznych softvérových nástrojov, ktoré sme už používali tento semester. 15 00:00:45,490 --> 00:00:48,710 A jednou z iniciatív by sme chceli, aby sa na ako experiment v tomto roku 16 00:00:48,710 --> 00:00:51,930 je vidieť, koľko obsahu môžeme preložiť 17 00:00:51,930 --> 00:00:53,960 do iných hovorené a písané jazyky. 18 00:00:53,960 --> 00:00:57,500 Takže ak by ste mohli mať záujem o účasť v tomto projekte 19 00:00:57,500 --> 00:01:02,270 kedy budeme poskytovať anglické prepisy a titulky pre kurz je prednáškach 20 00:01:02,270 --> 00:01:05,450 a šortky a semináre a profily a podobne, 21 00:01:05,450 --> 00:01:08,200 ak hovoríte plynulo alebo písať plynně nejaký iný jazyk, 22 00:01:08,200 --> 00:01:12,290 radi by sme vtiahnuť vás do tohto projektu, kedy budete mať na jednom alebo viacerých videí, 23 00:01:12,290 --> 00:01:15,200 previesť ich do jazyka poznáte celkom dobre. 24 00:01:15,200 --> 00:01:18,700 >> Ak chcete dať vám pocit rozhranie, tam je to web-based užívateľské rozhranie 25 00:01:18,700 --> 00:01:22,090 že budeme používať, že vytvorí v podstate užívateľské rozhranie, ako je tento. 26 00:01:22,090 --> 00:01:24,290 Toto bolo mi učil niektoré Halloween pred, 27 00:01:24,290 --> 00:01:27,390 a na pravej strane tam v čiernom vedľa týchto časových pečiatok, 28 00:01:27,390 --> 00:01:31,210 uvidíte rôzne veci, ktoré vyšli z mojich úst, že deň, 29 00:01:31,210 --> 00:01:34,850 a potom pod ním budete môcť previesť do nejakého iného jazyka 30 00:01:34,850 --> 00:01:38,690 presne to, čo je mapovanie medzi, v tomto prípade, angličtina a, povedzme, španielsky. 31 00:01:38,690 --> 00:01:40,440 Takže je to vlastne veľmi užívateľsky príjemný nástroj. 32 00:01:40,440 --> 00:01:43,370 Môžete pretáčať vpred veľmi rýchlo pomocou klávesových skratiek. 33 00:01:43,370 --> 00:01:47,490 Takže ak by ste chceli zúčastniť tohto experimentu a mať vaše slová vidieť a čítať 34 00:01:47,490 --> 00:01:51,850 by potenciálne tisíce ľudí tam, prosím, neváhajte sa zúčastniť. 35 00:01:51,850 --> 00:01:54,350 Jedno slovo o mačiatko od pondelka. 36 00:01:54,350 --> 00:02:00,350 Lesť sme poslali príliš desivé správy, si uvedomiť, že ako úradné hodiny naznačujú 37 00:02:00,350 --> 00:02:03,300 a ako častí naznačujú, konštrukcia predmetu je veľmi 38 00:02:03,300 --> 00:02:07,360 k študenti spolupracovať a hovoriť do práce cez problémové súbory 39 00:02:07,360 --> 00:02:11,260 a problémy spoločne, a naozaj sa riadok práve prichádza do, 40 00:02:11,260 --> 00:02:16,010 znovu, mal prácu, ktorú nakoniec odoslať byť vaše vlastné. 41 00:02:16,010 --> 00:02:18,860 A tak celkom úprimne, v úradných hodinách, že je to úplne normálne, 42 00:02:18,860 --> 00:02:22,240 je to úplne očakávať ani, bude chatovanie s nejakým priateľom vedľa vás. 43 00:02:22,240 --> 00:02:24,370 >> Ak on alebo ona sa stretáva s nejakým témou a ste radi, 44 00:02:24,370 --> 00:02:27,940 "No, dobre, dovoľte mi, aby som vám pohľad niektorých riadok kódu, ktorý som napísal," to je v poriadku, 45 00:02:27,940 --> 00:02:31,250 že sa stane, a to je veľmi priaznivé, myslím, s procesom učenia. 46 00:02:31,250 --> 00:02:36,750 Ak je linka dostane prešiel je, keď hlava je trochu naklonená sem na príliš veľa sekúnd 47 00:02:36,750 --> 00:02:41,160 alebo min, ktoré naozaj boli práve odblokovanie príležitosť pre svojho priateľa, 48 00:02:41,160 --> 00:02:44,160 a iste, kedy sa veci vymieňajú prostredníctvom e-mailu a Dropbox a podobne, 49 00:02:44,160 --> 00:02:45,640 tam taky je čiara. 50 00:02:45,640 --> 00:02:48,620 Takže všetkými prostriedkami cítiť pohodlne a cíti sa vyzývajú, aby chatovať s priateľmi 51 00:02:48,620 --> 00:02:52,810 a spolužiaci o psets a viac a len si uvedomiť, že to, čo ste nakoniec predloží 52 00:02:52,810 --> 00:02:57,340 by mala byť skutočne produktom vašej tvorby a nie niekto iný. 53 00:02:57,340 --> 00:03:00,490 A tak jeden z domény špecifických problémov pre pset2, 54 00:03:00,490 --> 00:03:04,740 ktorý príde neskoro zajtra večer, je ponoriť sa do sveta kryptografie, 55 00:03:04,740 --> 00:03:08,970 ktorá je umenie šifrovanie alebo kódovanie informácie, 56 00:03:08,970 --> 00:03:12,600 a to nakoniec týka svete bezpečnosti. 57 00:03:12,600 --> 00:03:16,560 Teraz, bezpečnosť pre väčšinu z nás prichádza v podobe pomerne svetských mechanizmov. 58 00:03:16,560 --> 00:03:19,050 Každý z nás má používateľské mená a heslá, 59 00:03:19,050 --> 00:03:23,450 a každý z nás má veľmi zlé používateľské mená a heslá, s najväčšou pravdepodobnosťou. 60 00:03:23,450 --> 00:03:28,240 >> Ak je heslo rovnaké na niekoľkých webových stránkach, že to asi nie je najlepší nápad, 61 00:03:28,240 --> 00:03:30,070 ako budeme diskutovať na semester konci. 62 00:03:30,070 --> 00:03:34,720 Ak heslo je napísané na lepiacej poznámku - nie je vtip - na vašom monitore, 63 00:03:34,720 --> 00:03:38,350 To tiež nie je nevyhnutne najlepší dizajn, ale celkom bežným javom. 64 00:03:38,350 --> 00:03:42,470 A ak si nie ste s použitím kryptografie na šifrovanie hesiel, 65 00:03:42,470 --> 00:03:44,210 sú obzvlášť zraniteľné. 66 00:03:44,210 --> 00:03:47,270 Takže ak si myslíte, že ste bol výborný múdra majúci skrytú dokument programu Word 67 00:03:47,270 --> 00:03:49,910 niekde na pevnom disku, ktorý má všetky vaše heslá 68 00:03:49,910 --> 00:03:53,670 ale je to v priečinku, ktorá nikto to bude vyzerať v, že príliš nie je moc bezpečné mechanizmus. 69 00:03:53,670 --> 00:03:56,990 A tak to, čo pset2 predstaví je toto umenie kryptografie 70 00:03:56,990 --> 00:04:02,010 a miešať informácie tak, že veci ako heslá sú bezpečnejšie. 71 00:04:02,010 --> 00:04:05,790 Kontext je, že s nezabezpečenými údajov 72 00:04:05,790 --> 00:04:07,930 prichádza príležitosť na šifrovanie ho a škriabať ho. 73 00:04:07,930 --> 00:04:11,470 A tak to, napríklad, je príklad šifrované správe. 74 00:04:11,470 --> 00:04:14,700 To vlastne hovorí, že niečo v angličtine, ale to zjavne nie je celkom zrejmé. 75 00:04:14,700 --> 00:04:18,279 A my prídeme kruh dnes šprýmař oddelene, čo to tajný odkaz tu. 76 00:04:18,279 --> 00:04:23,490 Ale v reálnom svete počítačov, veci sa ani nepozrel, ako by mohli byť anglické vety. 77 00:04:23,490 --> 00:04:28,430 Napríklad, to je to, čo môžete nájsť na štandardného Linux alebo Mac alebo počítač so systémom UNIX 78 00:04:28,430 --> 00:04:32,070 v súbore, ktorý bol kedysi nazývaný súbor s heslami. 79 00:04:32,070 --> 00:04:34,200 >> V súčasnej dobe je to už sa sťahoval do iných miest. 80 00:04:34,200 --> 00:04:39,210 Ale keď sa pozriete na správnom mieste v systéme, uvidíte nielen svoje užívateľské meno 81 00:04:39,210 --> 00:04:43,400 alebo iných ľudí na systéme, ale uvidíte šifrované verzii svoje heslo. 82 00:04:43,400 --> 00:04:47,980 Naozaj, slovo krypta sa naznačuje, že nasledujúce veci sú šifrované, 83 00:04:47,980 --> 00:04:52,680 a táto séria zdanlivo náhodných písmen a znakov a čísiel a tak ďalej 84 00:04:52,680 --> 00:04:56,480 dá dešifrovať iba všeobecne poznať nejaké tajomstvo - 85 00:04:56,480 --> 00:04:58,840 Tajné slovo, tajné číslo - 86 00:04:58,840 --> 00:05:03,160 a tak naozaj, umenie kryptografia v konečnom dôsledku sa scvrkáva veriť nejakého druhu 87 00:05:03,160 --> 00:05:05,650 a vedel niečo, čo niekto iný nemá. 88 00:05:05,650 --> 00:05:10,090 Takže budeme skúmať to v trochu podrobnejšie dnes v PSet prísť. 89 00:05:10,090 --> 00:05:12,200 A teraz slovo na Pass / Fail. 90 00:05:12,200 --> 00:05:15,360 Zvlášť keď niektorí z vás sa ponorila do pset1, spotrebiče, 91 00:05:15,360 --> 00:05:19,080 a úplne nový svet pre seba, uvedomiť si, že frustrácia a zmätok 92 00:05:19,080 --> 00:05:21,700 a len technické problémy sú pomerne možno očakávať, 93 00:05:21,700 --> 00:05:24,180 najmä s prvým Pset, kde je to len toľko nové, 94 00:05:24,180 --> 00:05:27,730 len zoznámenie s ls a cd a všetky tieto tajomné príkazy 95 00:05:27,730 --> 00:05:33,050 a nové prostredie, a to je oddelená od skutočného materiálu a programovanie sám. 96 00:05:33,050 --> 00:05:36,940 Takže si uvedomiť, že aj tam sú určite úradné hodiny, ktoré existujú ako podporné štruktúry. 97 00:05:36,940 --> 00:05:38,880 >> Sekcia začať tento rok v nedeľu. 98 00:05:38,880 --> 00:05:42,960 Ale čo je najdôležitejšie, ak máte pocit, proste, že to nie je svet pre teba, 99 00:05:42,960 --> 00:05:44,710 si uvedomiť, že je to naozaj len nejakú dobu trvať. 100 00:05:44,710 --> 00:05:48,600 A bol to nie pre túto príležitosť pred rokmi pre mňa vezme triedy vyhovuje / nevyhovuje, 101 00:05:48,600 --> 00:05:50,990 úprimne, nikdy by som si dokonca nastaviť nohu v triede. 102 00:05:50,990 --> 00:05:53,690 A môžete zmeniť až do, povedzme, piaty pondelok kurzu, 103 00:05:53,690 --> 00:05:58,280 takže ak ste na okraji teraz si uvedomiť, že skôr ako hlava do niektorých iných vôd dohromady, 104 00:05:58,280 --> 00:06:01,260 si určite považovať len zmenou na prijatie / odmietnutie. 105 00:06:01,260 --> 00:06:04,570 Opäť platí, že to nie je naozaj to kultúra tu na Harvarde branie vecí vyhovuje / nevyhovuje 106 00:06:04,570 --> 00:06:08,670 pretože všetci naozaj chce dosiahnuť lepšie výsledky, alebo, 107 00:06:08,670 --> 00:06:11,130 ale úprimne povedané, je to skvelý spôsob, ako sa snaží niečo 108 00:06:11,130 --> 00:06:16,720 ktoré nemusia byť oboznámení s vami, a vy skončíte robiť, vo väčšine prípadov, celkom dobre, 109 00:06:16,720 --> 00:06:18,210 možno veľa k svojmu prekvapenie. 110 00:06:18,210 --> 00:06:20,980 A v Konkrétnejšie, čo si myslím, vyhovel / nevyhovel všeobecne robí, 111 00:06:20,980 --> 00:06:22,940 najmä ak ste si mohli skúsenosti s pset0, 112 00:06:22,940 --> 00:06:26,560 keď dáte v 10 hodín, 15 hodín, 25 hodín do nejakého PSet 113 00:06:26,560 --> 00:06:29,920 a ty si jednoducho búchanie hlavou proti múru a je to čím ďalej Super neskoro v noci 114 00:06:29,920 --> 00:06:33,950 ale vy ste vzali PSet 90% cesty a vy jednoducho nemôžete prísť na jednu vec, 115 00:06:33,950 --> 00:06:36,520 vyhovel / nevyhovel naozaj berie zmiernilo triedy, ako je táto, 116 00:06:36,520 --> 00:06:39,100 kde si môžete nejako šťastne hovorí: "Dobre, ja viem, že to nie je dokonalé, 117 00:06:39,100 --> 00:06:42,350 ale pracoval som prdel na to, som celkom spokojný s tým, kde to skončilo, " 118 00:06:42,350 --> 00:06:44,850 a že bude spĺňať očakávania vyhovuje / nevyhovuje. 119 00:06:44,850 --> 00:06:47,540 Takže sa majte na pamäti, že. Dobrá. 120 00:06:47,540 --> 00:06:50,520 >> Takže tí z vás, ktorí sa usilovne snažia využiť Harvardskú univerzitu Wi-Fi, 121 00:06:50,520 --> 00:06:54,780 viem, že je tu CS50 SSID, Wi-Fi pripojenie, vznášajúce sa okolo 122 00:06:54,780 --> 00:06:56,490 že by ste mohli mať väčšie šťastie pre. 123 00:06:56,490 --> 00:07:00,130 Je to trochu paradoxné, že heslo pre to, ak by ste chceli skúsiť pripojiť k tomuto 124 00:07:00,130 --> 00:07:08,350 pre lepšiu rýchlosti - a dajte nám vedieť, pokiaľ to nie je lepšie - je 12345, celú cestu až do 8 125 00:07:08,350 --> 00:07:10,910 pretože 8 je bezpečnejšie ako 5. 126 00:07:10,910 --> 00:07:16,910 Takže ak potrebujete Wi-Fi hesla, pripojiť sa k CS50 bezdrôtovo tu, 12345678, 127 00:07:16,910 --> 00:07:20,380 a príspevok na CS50 Diskutovať ak máte stále prerušované problémy s pripojením, 128 00:07:20,380 --> 00:07:25,420 a necháme právomoci, ktoré budú poznať pre tento priestor. Dobrá. 129 00:07:25,420 --> 00:07:32,230 Tak rýchly teaser, najmä pre tých z vás, ktorí sú ventilátor chlapcov a dievčat všetkých vecí Apple. 130 00:07:32,230 --> 00:07:37,460 To, čo som vyhrabal z niekoľko rokov späť bola tento súbor tu, iUnlock.c, 131 00:07:37,460 --> 00:07:39,930 len trochu, aby konkrétnejšie a zložitejšie 132 00:07:39,930 --> 00:07:42,560 niektoré z viac základných programov v jazyku C sme písali. 133 00:07:42,560 --> 00:07:46,910 Tak som otvoril tento súbor, iUnlock.c. Je k dispozícii na stránke prednášky pre dnešok. 134 00:07:46,910 --> 00:07:49,810 Na ľavej strane sa zobrazí dlhý zoznam funkcií. 135 00:07:49,810 --> 00:07:53,230 Takže ten chlapík, ktorý napísal tento spísal mnoho funkcií, viac ako len hlavná. 136 00:07:53,230 --> 00:07:57,340 Použil veľa knižníc tu, a ak začneme rolovanie, 137 00:07:57,340 --> 00:08:04,890 čo to vlastne je, je úplne prvá, verím, crack na pôvodnú iPhone. 138 00:08:04,890 --> 00:08:09,830 >> Ak by ste chceli, aby útek z väzenia pôvodnej iPhone, čo znamená, že untether to od AT & T 139 00:08:09,830 --> 00:08:13,710 a skutočne nainštalovať špeciálny softvér na to a robiť veci, ktoré Apple nechcel, aby ľudia urobili, 140 00:08:13,710 --> 00:08:18,480 niekto vzal čas, aby zistili, ako presne by mohol zneužiť softvérové ​​chyby, 141 00:08:18,480 --> 00:08:22,690 chyby, chyby v softvéri, Apple, a tak sa narodil iUnlock.c-- 142 00:08:22,690 --> 00:08:26,760 , Že ak ju zaobstaral do svojho počítača a nainštalovať ho na iPhone 143 00:08:26,760 --> 00:08:29,430 , Ktorý bol pripojený k počítaču prostredníctvom, povedzme, kábla USB, 144 00:08:29,430 --> 00:08:32,450 To by vám správca alebo užívateľ root oprávnenia na vašom iPhone 145 00:08:32,450 --> 00:08:34,620 a nechať si urobiť skoro čokoľvek chcete. 146 00:08:34,620 --> 00:08:36,400 A tak tam bolo to fascinujúce hra na mačku a myš 147 00:08:36,400 --> 00:08:39,340 medzi Apple a zvyškom sveta, najmä pokiaľ ide, rovnako ako mnoho firiem, 148 00:08:39,340 --> 00:08:43,350 v snahe zabezpečiť svoje veci stanovuje, takže môžete robiť len s tým, čo majú v úmysle. 149 00:08:43,350 --> 00:08:47,360 Ale vďaka ľuďom, ako je tento a porozumenie nízkoúrovňových detailov - 150 00:08:47,360 --> 00:08:50,830 a v tomto prípade C programovanie - a mnoho známych konštrukcií 151 00:08:50,830 --> 00:08:55,280 že sme začali hrať s, ste schopní skutočne využívajú hardvér 152 00:08:55,280 --> 00:08:59,250 spôsobom uznáte za vhodné, a nie nutne nejaký právnickej osoby. 153 00:08:59,250 --> 00:09:01,600 Tak napríklad, nemám tušenie, čo to všetko robí, 154 00:09:01,600 --> 00:09:03,580 ale getVersion znie celkom jednoduché, 155 00:09:03,580 --> 00:09:05,710 a vyzerá to, že je to funkcia, ktorá táto osoba napísala. 156 00:09:05,710 --> 00:09:09,250 To trvá nejakú integer ako argument, nič nevracia, 157 00:09:09,250 --> 00:09:13,710 ale zdá sa, slučky pre sláčiky tu a ak podmienka, ak stav prestávky, 158 00:09:13,710 --> 00:09:16,770 a nejako súvisí s číslami verzií, pokiaľ sme sa posunúť nadol, 159 00:09:16,770 --> 00:09:19,650 aj keď veľa z týchto kľúčových slov sa bude nové. 160 00:09:19,650 --> 00:09:22,590 A je tu veľa funkcií v tú sme nikdy nevideli a možno nikdy neuvidíš 161 00:09:22,590 --> 00:09:24,350 v priebehu semestra. 162 00:09:24,350 --> 00:09:29,160 >> Na konci dňa, to sa riadi rovnakými pravidlami a logiku, že sme hrali s tým ďaleko. 163 00:09:29,160 --> 00:09:34,340 Tak toto je príliš starý na to bezva váš iPhone 3s alebo 4s alebo 5s čoskoro tieto dni, 164 00:09:34,340 --> 00:09:38,830 ale viem, že je to všetko moc pochádza z tohto sveta, že sme sa ponorila do. 165 00:09:38,830 --> 00:09:42,280 Poďme sa pozrieť na trochu jednoduchý príklad: 166 00:09:42,280 --> 00:09:46,260 tento, len preto, aby si ohriať nejakú syntaxou a tiež niektoré ďalšie údaje typ 167 00:09:46,260 --> 00:09:48,910 že sme hovorili o ale naozaj nevidel v C. 168 00:09:48,910 --> 00:09:53,670 To je súbor s názvom positive1.c, a za pripomienky hore, 169 00:09:53,670 --> 00:09:56,070 to len požaduje, aby užívateľ zaistiť kladné číslo. 170 00:09:56,070 --> 00:09:59,910 Takže je to príklad do-while, čo je pekné programov užívateľských interaktívne 171 00:09:59,910 --> 00:10:02,070 kde je potrebné oznámiť užívateľovi robiť niečo, 172 00:10:02,070 --> 00:10:05,530 a ak nespolupracujú ste kričať na ne, alebo odmietnuť ich vstup. 173 00:10:05,530 --> 00:10:10,480 Vec v bode: budem robiť linky 19 až 24 174 00:10:10,480 --> 00:10:14,620 tak dlho, kým užívateľ mi nedala kladné číslo. 175 00:10:14,620 --> 00:10:21,340 Tento detail tu na riadku 18, prečo som určil n nad touto celou konštrukcia cyklu 176 00:10:21,340 --> 00:10:26,870 oproti hneď vedľa riadku 22, kde som vlastne jedno, dostať n? Jo. 177 00:10:26,870 --> 00:10:29,330 [Študent] Rozsah. >> Jo, tak to otázka rozsahu. 178 00:10:29,330 --> 00:10:31,770 A v Laicky povedané, čo sa rozsahu týka? 179 00:10:34,880 --> 00:10:41,560 Jo. >> [Nepočuteľné Študent odpoveď] >> Môžeš hovoriť trochu hlasnejšie? 180 00:10:41,560 --> 00:10:45,440 [Študent] Kde môžete pristupovať k tejto premennej. >> Perfect. 181 00:10:45,440 --> 00:10:47,610 Kde môžete získať prístup k danej premennej. 182 00:10:47,610 --> 00:10:50,990 A všeobecne, pravidlo bolo doteraz, že rozsah pôsobnosti niektorých premenné 183 00:10:50,990 --> 00:10:56,140 je definovaná najnovších zložených zátvoriek, ktoré ste videli. 184 00:10:56,140 --> 00:11:03,070 >> A tak v tomto prípade, keď som urobil chybu deklarovať n na linke 22, to by linka fungovať. 185 00:11:03,070 --> 00:11:10,840 Ja by som si int, a ja by som dal to do tej premennej n v riadku 22, 186 00:11:10,840 --> 00:11:17,060 ale riadok kódu by teraz netuším, čo hovorím? >> [Študent] 25. 187 00:11:17,060 --> 00:11:23,840 [Malan] 25, a to dopadá 24 aj preto, že v tomto prípade to padá mimo zložených zátvoriek. 188 00:11:23,840 --> 00:11:28,550 Takže len trochu na obtiaž, ale veľmi ľahko vyriešiť tým, že jednoducho vyhlásil premenná 189 00:11:28,550 --> 00:11:30,700 mimo funkciu samotnej. 190 00:11:30,700 --> 00:11:32,760 Uvidíme ešte dnes môžete ísť ešte o krok ďalej 191 00:11:32,760 --> 00:11:34,940 a môžete dokonca získať trochu lenivý. 192 00:11:34,940 --> 00:11:39,660 A to nie je možné odporučiť všeobecne, ale mohli ste dokonca leniví 193 00:11:39,660 --> 00:11:44,150 a dať premennú globálne, aby som tak povedal, a nie vo vnútri funkcie, nie vo vnútri slučky, 194 00:11:44,150 --> 00:11:49,800 ale v samotnom súbore, mimo všetky funkcie, ktoré ste napísal, ako som to urobil tu na linke 15. 195 00:11:49,800 --> 00:11:55,220 Toto je všeobecne odsudzovaná, ale uvedomiť je to riešenie niekedy ďalšie problémy, 196 00:11:55,220 --> 00:11:56,910 ako budeme nakoniec vidieť. 197 00:11:56,910 --> 00:11:59,500 Takže teraz necháme to takto, ale uvidíme, či môžeme prepísať toto 198 00:11:59,500 --> 00:12:02,360 len začať vyjadrovať sami seba trochu inak. 199 00:12:02,360 --> 00:12:05,550 Tento program, len aby bolo jasno, je positive1. 200 00:12:05,550 --> 00:12:11,980 Nechaj ma ísť napred tu a vo svojom terminálovom okne, aby positive1, Enter. 201 00:12:11,980 --> 00:12:15,080 Vybudovať v poriadku. Chystám sa spustiť positive1, stlačte klávesu Enter. 202 00:12:15,080 --> 00:12:19,250 Žiadam, aby ste mi celé kladné číslo. Poviem -1. To nefungovalo. 203 00:12:19,250 --> 00:12:22,340 0, 99. Zdá sa, že funguje. 204 00:12:22,340 --> 00:12:25,310 Možno nie najprísnejšie test, ale aspoň je to pekné sanity check 205 00:12:25,310 --> 00:12:27,100 že sme na správnej ceste. 206 00:12:27,100 --> 00:12:29,570 >> Takže teraz ma nechaj ísť dopredu a otvorte verzii 2 tohto, 207 00:12:29,570 --> 00:12:32,800 a čo je odlišné už? 208 00:12:32,800 --> 00:12:39,030 Vykonáva sa to isté, ale to, čo skáče tak, ako je zreteľne iný tentoraz? 209 00:12:40,790 --> 00:12:47,090 Tento bool zelene. To je zvýraznená zelene, to kľúčové slovo známe ako bool, ktorý je dátového typu. 210 00:12:47,090 --> 00:12:50,510 To nie je to, postavený v roku pre všetky verzie C. 211 00:12:50,510 --> 00:12:52,650 Musíte zahrnúť konkrétne knižnicu. 212 00:12:52,650 --> 00:12:56,460 V našom prípade, som zahrnul CS50 knižnicu tak, že máme prístup k bool. 213 00:12:56,460 --> 00:12:59,860 Ale v riadku 18, sa zdá, že majú logickú hodnotu tu nazýva vďačný. 214 00:12:59,860 --> 00:13:02,190 Mohol som volal to niečo, ale ja som to nazval vďačný 215 00:13:02,190 --> 00:13:04,750 len druh vysvetliť nejaký sémantický význam. 216 00:13:04,750 --> 00:13:07,700 Tak spočiatku na linke 18, nie som zrejme vďačný 217 00:13:07,700 --> 00:13:12,230 pretože Boolean hodnota vďačný je inicializovaný na hodnotu false v riadku 18. 218 00:13:12,230 --> 00:13:16,500 A potom sa zdá, to, čo som tu urobil v riadkoch 21 až 23 219 00:13:16,500 --> 00:13:19,200 je, že som to jednoducho prepísať môj logiku. 220 00:13:19,200 --> 00:13:26,100 Takže nie funkčne odlišná, ale v riadku 22 teraz či int používateľ poskytol 221 00:13:26,100 --> 00:13:31,360 je väčšie ako 0, potom som jednoducho zmeniť hodnotu vďačný true. 222 00:13:31,360 --> 00:13:35,590 A prečo som to urobil? Vzhľadom k tomu, v súlade 25, zrejme budem kontrolovať stav. 223 00:13:35,590 --> 00:13:39,760 Do tejto slučky, zatiaľ čo vďačná je false. 224 00:13:39,760 --> 00:13:42,960 Tak som navrhol ako alternatívu k verzii 1 225 00:13:42,960 --> 00:13:47,050 pretože je to aspoň trochu viac intuitívne možno, že je to trochu viac uzemnený v angličtine. 226 00:13:47,050 --> 00:13:51,980 Takže urobte nasledovné, keď si nie ste vďační, alebo keď vďačný je false. 227 00:13:51,980 --> 00:13:56,220 A aj tentoraz som zrejme nezaujíma spomenúť, čo užívateľ napísal v 228 00:13:56,220 --> 00:14:00,050 pretože oznámenie nie je premenná n, takže vlastne, malá biela lož tam. 229 00:14:00,050 --> 00:14:03,290 >> Funkčne je program trochu iný, akonáhle sa dostaneme na dno toho 230 00:14:03,290 --> 00:14:04,960 Pretože nie som si spomenul, čo n je. 231 00:14:04,960 --> 00:14:09,120 Ale ja som chcel ukázať aj tu, že aj keď sme videli GetInt 232 00:14:09,120 --> 00:14:13,780 a GetString sa používa na pravej strane rovná sa tak ďaleko 233 00:14:13,780 --> 00:14:17,310 tak, že si pamätáme hodnotu, technicky, to nie je nevyhnutne nutné. 234 00:14:17,310 --> 00:14:20,290 Ak z nejakého dôvodu jednoducho nezaujíma uložiť hodnotu, 235 00:14:20,290 --> 00:14:25,540 si len chcete skontrolovať hodnotu, zistíte, že môžeme jednoducho napísať toto ako GetInt, 236 00:14:25,540 --> 00:14:27,320 open parenie, close párenie. 237 00:14:27,320 --> 00:14:30,570 Táto funkcia bude vracať hodnotu, ako sme hovorili. 238 00:14:30,570 --> 00:14:32,220 Bude to vám späť int. 239 00:14:32,220 --> 00:14:34,460 A tak ak ste psychicky myslíte že sa to stáva, 240 00:14:34,460 --> 00:14:38,190 keď som zadajte 99, GetInt vráti číslo 99, 241 00:14:38,190 --> 00:14:41,840 a tak koncepčne, je to ako by môj kód bol v skutočnosti to. 242 00:14:41,840 --> 00:14:45,950 Takže ak 99 je naozaj väčší ako 0, potom vďačný stáva pravdou, 243 00:14:45,950 --> 00:14:50,810 potom sa zoradia 25 uvedomí ooh, už sme to urobili, lebo som teraz vďačná, 244 00:14:50,810 --> 00:14:53,970 a je v súlade 26, sme jednoducho povedať: "Vďaka za pozitívne celé číslo!" 245 00:14:53,970 --> 00:14:55,960 čo sa to stalo, že je. 246 00:14:55,960 --> 00:14:59,140 Teraz sa poďme urobiť mierny syntaktickú cukor tu, aby som tak povedal. 247 00:14:59,140 --> 00:15:04,670 Poďme sa pozrieť, či sa nám podarí vyčistiť tento riadok 25 s touto treťou a poslednou variante v positive3. 248 00:15:04,670 --> 00:15:13,600 >> Všimnite si, jediný rozdiel je, čo riadok kódu? >> [Študent] 25. >> [Malan] Jo, 25. 249 00:15:13,600 --> 00:15:17,680 A sme naozaj videli túto trik ešte nie, ale my sme to vidieť výkričník v pondelok, 250 00:15:17,680 --> 00:15:21,070 ktorý označuje, čo? >> [Študent] Not. Nie je >> alebo negácie. 251 00:15:21,070 --> 00:15:23,510 Tak sa boolovská a otočiť jeho hodnotu. 252 00:15:23,510 --> 00:15:25,810 Pravda sa stáva false, false sa stáva pravdou. 253 00:15:25,810 --> 00:15:30,420 Takže to, navrhujem, je ešte trochu viac intuitívne spôsob, ako písať kód 254 00:15:30,420 --> 00:15:33,430 pretože som stále ešte inicializovať vďačný false, stále to nasledujúce, 255 00:15:33,430 --> 00:15:36,010 Nastavil som vďačný na hodnotu true, keď príde čas, 256 00:15:36,010 --> 00:15:40,880 ale teraz môžete naozaj len preložiť tento kód slovne zľava doprava, 257 00:15:40,880 --> 00:15:45,630 while (vděčná!), pretože bang alebo výkričník označuje pojem nie je, 258 00:15:45,630 --> 00:15:47,580 takže aj keď nie je vďačná. 259 00:15:47,580 --> 00:15:49,900 Takže znova, sme nezaviedli žiadne nové koncepty na sebe. 260 00:15:49,900 --> 00:15:53,730 Hovorili sme o Booleans späť, keď sme hrali s Scratch, 261 00:15:53,730 --> 00:15:56,720 ale uvedomiť, teraz môžeme len začať písať náš kód v mnohých rôznymi spôsobmi. 262 00:15:56,720 --> 00:16:01,060 Takže najmä v pset1 ak ste trochu snaží prísť na to, ako písať nejaký program, 263 00:16:01,060 --> 00:16:04,340 Diskusné ste šťastie, pretože tam môže byť ľubovoľný počet riešení 264 00:16:04,340 --> 00:16:06,110 že sa môže stať na. 265 00:16:06,110 --> 00:16:10,500 Napríklad, je to len 3 ani pre najjednoduchšie programov. Dobrá. 266 00:16:10,500 --> 00:16:14,200 A teraz odvoláva na pondelok sme opustili na túto nôtu s návratových hodnôt. 267 00:16:14,200 --> 00:16:18,450 Takže prvýkrát sme napísali program, ktorý nie je len mať hlavné; 268 00:16:18,450 --> 00:16:22,550 má tiež svoju vlastnú funkciu, ktorá som napísal tu. 269 00:16:22,550 --> 00:16:26,810 Takže v súlade 31 až 34 som vykonala kocky funkciu. 270 00:16:26,810 --> 00:16:30,240 Nie je to zložité. Je to len * a * v tomto prípade. 271 00:16:30,240 --> 00:16:34,750 Ale čo je dôležité, na tom je, že som pri vstupe vo forme 272 00:16:34,750 --> 00:16:39,180 a ja sa vraciam výstup v podobe **. 273 00:16:39,180 --> 00:16:43,560 Takže teraz mám možnosť, rovnako ako som sa prinf osamotený, 274 00:16:43,560 --> 00:16:47,240 volanie tejto funkcie volaním kocky funkcie. 275 00:16:47,240 --> 00:16:51,970 >> A kocky funkcie má nejaký vstup, a kocky vráti funkcia nejaký výstup. 276 00:16:51,970 --> 00:16:56,960 Naopak, printf len niečo urobil. 277 00:16:56,960 --> 00:17:00,840 To sa nič nevracia, že sme záležalo, aj keď, ako zrušiť to vráti hodnotu; 278 00:17:00,840 --> 00:17:03,110 stačí zvyčajne ignorovať. 279 00:17:03,110 --> 00:17:06,510 Printf len niečo urobil. To malo vedľajší účinok tlače na obrazovke. 280 00:17:06,510 --> 00:17:11,770 Naopak tu, máme kocky funkciu, ktorá skutočne vráti niečo. 281 00:17:11,770 --> 00:17:15,520 Takže pre tých, ktorí poznajú toto, je to pomerne jednoduché nápad. 282 00:17:15,520 --> 00:17:19,640 Ale pre tých menej oboznámení s touto myšlienkou odovzdávanie na vstupoch a dostať späť výstupy, 283 00:17:19,640 --> 00:17:21,950 Skúsme len niečo super jednoduchý. 284 00:17:21,950 --> 00:17:25,490 Je niekto pohodlný prichádza na pódium krátko? 285 00:17:25,490 --> 00:17:28,040 Musíte byť pohodlné s kamerou na vás rovnako. Jo? Dobre. 286 00:17:28,040 --> 00:17:31,240 Ako sa voláte? >> [Študent] Ken. >> Ken. Dobrá. Ken, ísť hore. 287 00:17:31,240 --> 00:17:35,050 Ken bude funkcia druhov tu. 288 00:17:35,050 --> 00:17:38,720 Poďme ďalej a urobiť to. Poďme si trochu fantázie. 289 00:17:38,720 --> 00:17:42,260 Rád Vás vidím. Vitajte na stredu záujmu. Dobrá. 290 00:17:42,260 --> 00:17:46,640 Ideme na toto tlačidlo tady. Dobrá. 291 00:17:46,640 --> 00:17:49,820 Tak tu máte moderný tabuľu, 292 00:17:49,820 --> 00:17:53,470 a čo som ich hlavné funkcie, napríklad, 293 00:17:53,470 --> 00:17:56,460 a ja nemám iPad v ruke. 294 00:17:56,460 --> 00:17:59,710 >> Nemám naozaj spomenúť, ako sa - No, nemôžem povedať, že. 295 00:17:59,710 --> 00:18:02,480 Ja naozaj nemám dobrý rukopis, 296 00:18:02,480 --> 00:18:05,520 a tak preto chcem tlačiť niečo na obrazovke pre mňa. 297 00:18:05,520 --> 00:18:12,040 Som bol hlavný program, a ja budem musieť povedať to 298 00:18:12,040 --> 00:18:16,720 písomne ​​v mojom kuracím začiatku a potom odovzdá vám vstup. 299 00:18:16,720 --> 00:18:20,400 Takže hlúpe hoci toto cvičenie je, pojem funkcií a volanie funkcie 300 00:18:20,400 --> 00:18:22,400 a vrátenie funkciu naozaj scvrkáva na to. 301 00:18:22,400 --> 00:18:26,260 Ja som hlavné, som práve napísal printf, quote-koniec citátu niečo na obrazovke, 302 00:18:26,260 --> 00:18:29,110 Som spustenie tohto programu, a akonáhle printf volaná, 303 00:18:29,110 --> 00:18:32,880 trvá jeden argument, alebo jeden parameter niekedy medzi úvodzovkami. 304 00:18:32,880 --> 00:18:35,880 Tu je to, že argument. Ja odovzdaním do Ken. 305 00:18:35,880 --> 00:18:39,020 Je to čierna skrinka písomnej určitý počet rokov ago 306 00:18:39,020 --> 00:18:41,510 , Ktorý zrejme vie, ako tlačiť veci na obrazovke. 307 00:18:41,510 --> 00:18:43,150 Tak vykonať. 308 00:18:49,280 --> 00:18:51,280 To nie je zlé. Very good. 309 00:18:51,280 --> 00:18:55,510 Takže teraz Ken sa vykonáva spustením. Vie potrebné Podaj mi niečo späť? 310 00:18:55,510 --> 00:18:57,470 Nie, že sme videli doteraz. 311 00:18:57,470 --> 00:19:00,460 Opäť platí, že printf sa skutočne vráti číslo, ale budeme ignorovať, že pre túto chvíľu 312 00:19:00,460 --> 00:19:03,470 pretože sme nikdy používal to. Tak to je to pre Kena. 313 00:19:03,470 --> 00:19:08,580 A tak teraz hlavné preberá kontrolu programu znova 314 00:19:08,580 --> 00:19:11,060 preto, že riadok kódu, printf, sa vykonáva spustením. 315 00:19:11,060 --> 00:19:14,050 A ideme o našej ceste, ktorou sa vykonávajú bez ohľadu na iné linky sú tam. 316 00:19:14,050 --> 00:19:17,320 Takže teraz skúsme trochu iný príklad. 317 00:19:17,320 --> 00:19:24,940 Tentoraz tu poďme sa najprv vymazať obrazovku, a tentoraz budeme robiť Cubing funkciu, 318 00:19:24,940 --> 00:19:27,080 ale tentoraz som očakávať, že výstupné hodnoty. 319 00:19:27,080 --> 00:19:29,180 >> Tak poďme do toho a urobiť to. 320 00:19:29,180 --> 00:19:35,790 Teraz mám riadok kódu, ktorý hovorí, že x dostane kocku x. 321 00:19:41,370 --> 00:19:46,370 Riadok kódu, stiahnutie, vyzerá takto: x = kocka (x); 322 00:19:46,370 --> 00:19:50,930 Tak ako sa to bude fungovať? Poďme ďalej a dá vám bielu obrazovku znova. 323 00:19:50,930 --> 00:19:54,070 Chystám sa napísať teraz hodnotu x, 324 00:19:54,070 --> 00:20:01,400 ktoré v tejto chvíli sa stane, že je, povedzme, 2, aby to jednoduché. 325 00:20:01,400 --> 00:20:06,150 Napísal som na kus papiera hodnota 2, čo je moja hodnota x. 326 00:20:06,150 --> 00:20:10,920 Podal som ju Ken. >> A ja len napísať odpoveď? Jo >>, poďme stačí napísať odpoveď. 327 00:20:12,760 --> 00:20:18,940 Dobre. A teraz sa musí vrátiť mi niečo. Perfect. Pekný SEGUE. 328 00:20:18,940 --> 00:20:23,120 Takže teraz podá mi hodnotu 8 v tomto prípade, a čo s tým mám robiť? 329 00:20:23,120 --> 00:20:28,250 Vlastne - uvidíme, si toto právo. Čo mám robiť s tým? 330 00:20:28,250 --> 00:20:33,440 Teraz budem brať túto hodnotu a skutočne ukladať ho v rovnakých bitov v pamäti. 331 00:20:33,440 --> 00:20:35,170 Ale nevšimol som trochu zápasí tu. 332 00:20:35,170 --> 00:20:38,210 Som trochu zmätený, pretože kam som vlastne písať hodnotu x, 333 00:20:38,210 --> 00:20:43,150 pretože to, čo som práve urobil, je fyzicky ručne Ken kus papiera, ktorý mal hodnotu 2, 334 00:20:43,150 --> 00:20:46,590 ktorý bol x, a naozaj, to je presne to, čo sa stalo. 335 00:20:46,590 --> 00:20:50,210 Tak to dopadá, že pri volaní funkcie a odovzdáte v argumente 336 00:20:50,210 --> 00:20:53,290 ako hello, world alebo predáte argument ako 2, 337 00:20:53,290 --> 00:20:57,110 všeobecne, ste odovzdaním kópie tohto argumentu. 338 00:20:57,110 --> 00:21:00,730 A tak rovnako ako som napísal číslo 2 tu a podal ho Ken, 339 00:21:00,730 --> 00:21:04,720 že musí znamenať, že som ešte kópiu hodnoty 2 niekde 340 00:21:04,720 --> 00:21:08,890 pretože to naozaj, teraz, keď som sa dostal späť hodnotu 8, musím sa vrátiť do RAM 341 00:21:08,890 --> 00:21:12,130 a skutočne zapísať 8, kde som kedysi mal číslo 2. 342 00:21:12,130 --> 00:21:16,950 Takže vizuálne, zapamätať si túto predstavu odovzdaním, doslova, kópiu hodnoty. 343 00:21:16,950 --> 00:21:20,780 >> Ken robí to jeho vec, podá mi niečo - v tomto prípade hodnotu ako 8 - 344 00:21:20,780 --> 00:21:24,980 a potom som musel urobiť niečo s touto hodnotou, ak chcem, aby to okolo. 345 00:21:24,980 --> 00:21:29,650 Takže toto všetko vráti sa až príliš dobre, než dlhý. 346 00:21:29,650 --> 00:21:34,920 Mockrát vám ďakujem za túto demo tu, Kena. [Potlesk] 347 00:21:34,920 --> 00:21:36,920 Veľmi dobre. 348 00:21:36,920 --> 00:21:42,690 Poďme sa pozrieť, ako to nakoniec sa vzťahuje k niektorej z volania funkcií, ktoré sme už tu. 349 00:21:42,690 --> 00:21:47,910 Nechaj ma ísť napred a priviesť nás späť k Cubing napríklad tu. 350 00:21:47,910 --> 00:21:53,300 Všimnite si, že ak chceme, aby skutočne začať užívať to ďalej, 351 00:21:53,300 --> 00:21:57,570 budeme musieť byť si vedomý skutočnosti, že číslo x, ktorá je momentálne prešiel v tu 352 00:21:57,570 --> 00:22:01,530 sa líši od toho, čo je skutočne odovzdaný do funkcie. 353 00:22:01,530 --> 00:22:05,880 Takže znovu, je toto heslo by kópia sa stane celkom German za chvíľu. 354 00:22:05,880 --> 00:22:09,580 Poďme sa pozrieť na niečo, čo nie je úplne správne pracovať ešte. 355 00:22:09,580 --> 00:22:13,250 Chystám sa ísť dopredu a otvorte tretiny buggy príklad, ktorý je chybný povahy, 356 00:22:13,250 --> 00:22:18,550 a je to tzv buggy3 a implementuje vymieňať funkciu. 357 00:22:18,550 --> 00:22:25,110 Tu máme hlavnú funkciu, ktorá x a y ľubovoľne inicializovaný 1 a 2, resp. 358 00:22:25,110 --> 00:22:27,700 Mohli by sme použiť GetInt, ale my jednoducho potrebujeme jednoduché cvičenia, 359 00:22:27,700 --> 00:22:30,170 takže je to pevne ako 1 a 2. 360 00:22:30,170 --> 00:22:35,340 V riadkoch 21 a 22, my zrejme vytlačiť X a Y, 1 na riadok. 361 00:22:35,340 --> 00:22:39,720 Potom na linke 23, tvrdím ja vymieňať tieto hodnoty, bodka, bodka, bodka. 362 00:22:39,720 --> 00:22:44,170 Aj zdanlivo zavolať funkciu v súlade 24 tzv swap, ktorý trvá 2 argumenty. 363 00:22:44,170 --> 00:22:48,300 Je to úplne dôveryhodne pre funkcie, aby sa 2 argumenty. Videli sme printf to už. 364 00:22:48,300 --> 00:22:51,830 >> Takže výmena zrejme trvá x a y, a ako už názov napovedá, 365 00:22:51,830 --> 00:22:54,670 Dúfam, že to bude vymeniť tieto 2 hodnoty. 366 00:22:54,670 --> 00:23:00,090 Tak som tvrdiť, on-line 25 "vymenil!" a ja dotlač x a y 367 00:23:00,090 --> 00:23:03,070 za predpokladu, že som naozaj bol vymenil. 368 00:23:03,070 --> 00:23:06,080 Ale keď som vlastne tento program spustiť - dovoľte mi, aby som otvoriť okno terminálu, 369 00:23:06,080 --> 00:23:09,860 dovoľte mi, aby som buggy3 - ako už názov napovedá, je to neskončí dobre 370 00:23:09,860 --> 00:23:15,770 pretože keď som Enter, zistíte, že x je 1, y je 2, 371 00:23:15,770 --> 00:23:19,420 a napriek tomu na konci programu, sú stále ešte v skutočnosti, rovnaký. 372 00:23:19,420 --> 00:23:22,960 Takže na základe preukázania práve s Kenom, čo sa vlastne deje? 373 00:23:22,960 --> 00:23:28,710 Poďme sa ponoriť do tohto swapu funkcie. Je to super krátky. Je to len pár riadkov kódu dlho. 374 00:23:28,710 --> 00:23:34,520 Ale čo je to zásadný problém založený na jednoduchom príbehu povedal sem s Kenom? 375 00:23:34,520 --> 00:23:36,670 Prečo je výmena chybné? 376 00:23:36,670 --> 00:23:39,660 [Študent] Ste ukladanie na kópiu, nie premenné. 377 00:23:39,660 --> 00:23:43,980 Presne tak. Sme ukladanie na kópiu, nie je premenná sám. 378 00:23:43,980 --> 00:23:47,170 Inými slovami, swap zrejme trvá 2 argumenty, int, 379 00:23:47,170 --> 00:23:49,370 a to ľubovoľne nazýva a a b, 380 00:23:49,370 --> 00:23:54,420 a tu som prešiel v X a Y, ktoré sú príslušne 1 a 2, 381 00:23:54,420 --> 00:23:58,770 ale ja nie doslova okolo x, ja nie doslova prechádzať v y, 382 00:23:58,770 --> 00:24:01,450 Ja som okolo kópiu X a kópie y. 383 00:24:01,450 --> 00:24:04,510 Je to skoro, ako by si skopírovať a vložiť do swapu 384 00:24:04,510 --> 00:24:07,810 hodnoty, ktoré chcete, aby skutočne manipulovať. 385 00:24:07,810 --> 00:24:14,480 Takže ak je to ten prípad, kedy som sa štart programu vykonávajúci riadok 35 potom 36, 386 00:24:14,480 --> 00:24:18,650 keď som si na riadku 37, v tomto bode v príbehu, čo je hodnota? 387 00:24:21,040 --> 00:24:25,050 V tomto bode príbehu, linka 37, aká je hodnota v tomto bode? >> [Študent] 1. 388 00:24:25,050 --> 00:24:29,280 [Malan] To by malo byť len 1, vpravo, pretože x je odovzdaná ako prvý argument, 389 00:24:29,280 --> 00:24:33,080 a táto funkcia jednoducho svojvoľne volá svoju prvú argument je. 390 00:24:33,080 --> 00:24:38,200 Podobne je y druhý argument, a to je len svojvoľne volá druhý argument b 391 00:24:38,200 --> 00:24:40,990 >> Táto dichotómia je vlastne celkom jednoduché vysvetlenie. Premýšľajte o tom. 392 00:24:40,990 --> 00:24:43,320 Nikto z nás sa stretol osobu, ktorá napísal printf, 393 00:24:43,320 --> 00:24:50,770 tak isto, on alebo ona nemá tušenie, čo naše premenné o 30 rokov neskôr sa chystáte byť nazývaný. 394 00:24:50,770 --> 00:24:56,650 Takže tam musí byť rozdiel medzi tým, čo hovoríte premenné vo funkciách píšete 395 00:24:56,650 --> 00:25:02,080 a čo hovoríte premenné vo funkciách voláte alebo pomocou. 396 00:25:02,080 --> 00:25:05,340 Takže inými slovami, napísal som svoje premenné ako x a y, 397 00:25:05,340 --> 00:25:08,890 ale ak napísal niekto iný odkladací funkciu, on alebo ona určite nebude vedieť, 398 00:25:08,890 --> 00:25:10,690 čo moje premenné sa bude nazývaný, 399 00:25:10,690 --> 00:25:13,830 takže si uvedomiť, že to je dôvod, prečo ste túto dualitu mien. 400 00:25:13,830 --> 00:25:16,750 Technicky, som mohol robiť to náhodou, 401 00:25:16,750 --> 00:25:20,080 ale stále by byť predávané ako kópia. 402 00:25:20,080 --> 00:25:23,650 Bolo by to čisto náhoda, esteticky prípade, že osoba, ktorá napísala swapu 403 00:25:23,650 --> 00:25:26,150 použil rovnaké názvy. 404 00:25:26,150 --> 00:25:32,370 Takže v tomto bode príbehu, linka 37, je 1, b = 2, a teraz mám postupovať, aby swap. 405 00:25:32,370 --> 00:25:34,900 Najprv mi dovoľte, aby som vlastne robiť to oveľa jednoduchšie. 406 00:25:34,900 --> 00:25:36,690 Ja neviem, čo tie 3 riadky kódu robia. 407 00:25:36,690 --> 00:25:41,210 Dovoľte mi, aby som to: b =, = b; urobil. 408 00:25:41,210 --> 00:25:44,690 Prečo je tento zlomený, logicky? 409 00:25:46,490 --> 00:25:48,900 Je to druh intuitívne vec, nie? 410 00:25:48,900 --> 00:25:52,560 Tak sa stáva b a b stáva, 411 00:25:52,560 --> 00:25:57,730 ale problém je, že akonáhle linka 37 vykonáva, čo je hodnota a b? 412 00:25:57,730 --> 00:26:03,410 Rovnaký, 1, pretože ste clobbered, aby som tak povedal, ste zmenili b rovnať. 413 00:26:03,410 --> 00:26:08,890 Takže akonáhle linka 37 vykonal, to je skvelé, máte teraz 2 kópie číslom 1 414 00:26:08,890 --> 00:26:13,350 Vnútri tejto funkcie, takže potom, keď povieš v súlade 38 = b, 415 00:26:13,350 --> 00:26:17,640 ste trochu skrutkované, pretože ste práve priradenie 1-1. 416 00:26:17,640 --> 00:26:20,580 Ste trochu stratila hodnotu, ktorú záležalo. 417 00:26:20,580 --> 00:26:23,220 Takže v pôvodnej verzii tohto, zistíte, čo som urobil. 418 00:26:23,220 --> 00:26:26,850 Som miesto toho mala tretina riadok kódu, ktorý vyzeral ako toto. 419 00:26:26,850 --> 00:26:28,580 Prehlasujem, dočasnú premennú. 420 00:26:28,580 --> 00:26:32,170 >> Tmp je veľmi všeobecný názov pre dočasné premenné, a to int 421 00:26:32,170 --> 00:26:34,580 preto, že musí zodpovedať tomu, čo chcem urobiť kópiu. 422 00:26:34,580 --> 00:26:39,770 Aj uložiť kópiu vnútri tmp, tak raz linka 37 je vykonaný, 423 00:26:39,770 --> 00:26:45,860 hodnota je - rýchla príčetnosť kontrola - 1, hodnota b je 2, 424 00:26:45,860 --> 00:26:48,970 a hodnota tmp je tiež 1. 425 00:26:48,970 --> 00:26:52,060 Takže teraz som spustiť linku 38. 426 00:26:52,060 --> 00:27:00,540 Akonáhle linka 38 vykoná, má na hodnotu b A b je 2, takže je teraz 2. 427 00:27:00,540 --> 00:27:05,210 Takže v tomto bode príbehu, je 2, b je 2, a tmp je 1, 428 00:27:05,210 --> 00:27:11,060 takže teraz logicky, môžeme len PLOP TMP je hodnota do B a sme hotoví. 429 00:27:11,060 --> 00:27:12,800 Takže sme vyriešili tento problém. 430 00:27:12,800 --> 00:27:17,720 Bohužiaľ, keď som spustiť tento program v tejto podobe, to robí nie vlastne zameniť žiadne hodnoty. 431 00:27:17,720 --> 00:27:20,100 Ale aby bolo jasno, prečo? 432 00:27:23,660 --> 00:27:26,450 Opravil som logický problém z pred chvíľou, 433 00:27:26,450 --> 00:27:31,020 ale zase, keď som spustiť tento program, x a y sa nemení 434 00:27:31,020 --> 00:27:33,310 do konca programového poprave. 435 00:27:33,310 --> 00:27:37,220 [Nepočuteľné Študent komentár] >> sme vrátili nič, tak je to pravda. 436 00:27:37,220 --> 00:27:39,670 Ale ukazuje sa, že je tu trochu problém, pretože tu doteraz, 437 00:27:39,670 --> 00:27:44,170 Jediné, čo sme boli schopní sa vrátiť, je jedna vec, a to je obmedzenie C. 438 00:27:44,170 --> 00:27:49,070 Môžete vrátiť iba skutočne jednu hodnotu, v tom prípade som trochu trčať 439 00:27:49,070 --> 00:27:53,310 pretože som sa mohol vrátiť novú hodnotu x alebo by som mohol vrátiť novú hodnotu y, 440 00:27:53,310 --> 00:27:55,190 ale ja chcem obaja staré. 441 00:27:55,190 --> 00:27:58,650 Takže návratu nie je jednoduché riešenie tu. 442 00:27:58,650 --> 00:28:01,710 Ale problém zásadne je dôvod, prečo? Čo sme vlastne vymenili? 443 00:28:01,710 --> 00:28:04,190 [Študent] a, b >> A b 444 00:28:04,190 --> 00:28:08,230 Ale aj b sú kópie x a y, čo znamená, že sme práve urobili všetky tieto práce, 445 00:28:08,230 --> 00:28:11,650 sme trávili práve 3 minút hovoriť o virtuálnej funkciu a všetky 3 týchto premenných, 446 00:28:11,650 --> 00:28:15,420 a to je skvelé, úplne správny izoláciu, 447 00:28:15,420 --> 00:28:20,740 ale A a B je rozsah len je v týchto líniách tu. 448 00:28:20,740 --> 00:28:24,790 >> Tak ako pre sláčiky, ak ste deklarovať integer aj vnútri slučky for, 449 00:28:24,790 --> 00:28:28,760 podobne, ak ste sa prehlasuje, a b vnútri funkcie, ktoré ste napísal, 450 00:28:28,760 --> 00:28:33,320 sú platné iba vo vnútri tejto funkcie, čo znamená, že akonáhle swap je vykonané spustenie 451 00:28:33,320 --> 00:28:38,470 a pôjdeme r 24 až líniu 25, x a y sa nemení vôbec. 452 00:28:38,470 --> 00:28:42,790 Práve ste zbytočne veľa času vymieňať kópie premenných. 453 00:28:42,790 --> 00:28:47,010 Tak to dopadá, že riešenie je to vlastne non-zrejmé. 454 00:28:47,010 --> 00:28:50,670 To nie je úplne dostačujúce pre návrat hodnoty, pretože sa môžeme vrátiť iba 1 hodnotu, 455 00:28:50,670 --> 00:28:53,470 a ja naozaj chcem vymeniť oba X a Y súčasne dobe, 456 00:28:53,470 --> 00:28:55,210 takže budeme musieť vrátiť k tomu. 457 00:28:55,210 --> 00:29:01,020 Ale teraz si uvedomiť, že táto otázka zásadne odvodený od skutočnosti, že a a b sú kópie 458 00:29:01,020 --> 00:29:03,630 a sú vo svojom vlastnom rozsahu. 459 00:29:03,630 --> 00:29:05,050 Skúsme vyriešiť tento nejakým spôsobom. 460 00:29:05,050 --> 00:29:11,250 Dovoľte mi, aby som skutočne prejdite sem a otvoriť, povedzme, štvrtina variantu tohto, buggy4. 461 00:29:11,250 --> 00:29:13,370 Čo treba toto? 462 00:29:13,370 --> 00:29:17,810 To je podobný, ale jednoduchšie problém pozrieť sa na predtým, než sme sa stab na jeho vyriešenie. 463 00:29:17,810 --> 00:29:24,190 Tento program sa nazýva prírastok, a to zrejme inicializuje celé číslo x na 1 v riadku 18. 464 00:29:24,190 --> 00:29:28,150 Aj potom tvrdí, x je 1, potom som si tvrdiť, "Zvyšovanie ..." 465 00:29:28,150 --> 00:29:33,730 Potom som zavolať prírastok, ale potom v riadkoch 22 a 23, tvrdím, že to bolo zvýšené, 466 00:29:33,730 --> 00:29:40,220 Tvrdím x je teraz, čo to je - 2, pravdepodobne - ale tento program je buggy. 467 00:29:40,220 --> 00:29:42,610 V čom je problém? 468 00:29:43,440 --> 00:29:50,160 Jo. >> [Nepočuteľné Študent odpoveď] >> Presne tak. 469 00:29:50,160 --> 00:29:52,490 Takže x bol vyhlásený, samozrejme, na riadku 18. 470 00:29:52,490 --> 00:29:54,700 To je vnútri zložených zátvoriek hlavné je. 471 00:29:54,700 --> 00:29:58,440 Takže jednoduchá odpoveď je, že zatiaľ čo x existuje tu, 472 00:29:58,440 --> 00:30:03,930 neexistuje v súlade 32, takže tento program vlastne sa ani zostaviť. 473 00:30:03,930 --> 00:30:07,940 Kompilátor keď sa snažím zostavovaní tento kód bude na mňa kričať 474 00:30:07,940 --> 00:30:14,100 o nejakej nelegálnej identifikátora alebo niečo v tom zmysle. V skutočnosti, skúsme to. 475 00:30:14,100 --> 00:30:18,470 To je, aby buggy4. Tu to je. 476 00:30:18,470 --> 00:30:22,110 Použitie nedeklarovaný identifikátor "x" v súlade 32. 477 00:30:22,110 --> 00:30:25,580 A skutočne, buďme konkrétnejší tu dnes tak, že je to užitočné 478 00:30:25,580 --> 00:30:27,580 v úradných hodinách aj doma. 479 00:30:27,580 --> 00:30:29,300 >> Všimnite si, že je to trochu záhadne písomná. 480 00:30:29,300 --> 00:30:37,270 Ale skutočnosť, že zvonenie je na nás kričali, riekol buggy4.c: 32:5, je v skutočnosti užitočné. 481 00:30:37,270 --> 00:30:42,050 To znamená, že je chyba na riadku 32 na znaku 5. 482 00:30:42,050 --> 00:30:46,700 Takže 1, 2, 3, 4, 5. To je, v skutočnosti, kde je problém. 483 00:30:46,700 --> 00:30:49,790 A tiež, taky, majte na pamäti, úradné hodiny a doma, budem mať šťastie tu. 484 00:30:49,790 --> 00:30:52,990 Mám jednu chybu. Bude to pomerne ľahko opraviť. 485 00:30:52,990 --> 00:30:55,990 Ale ak sa dostanete celú obrazovku plnú ohromujúcich chybových správ, 486 00:30:55,990 --> 00:31:00,330 znovu si uvedomiť, že najspodnejšej jeden by mohol byť len prejavom vrchný jedného. 487 00:31:00,330 --> 00:31:03,450 Takže vždy naháňať svoje chyby zhora nadol 488 00:31:03,450 --> 00:31:05,820 pretože tam môže byť len reťaz sedmokráska efekt 489 00:31:05,820 --> 00:31:09,240 že navrhuje máte tak viac problémov, ako ste vlastne robiť. 490 00:31:09,240 --> 00:31:15,150 Tak ako by sme mohli opraviť, ak je mojím cieľom zvýšiť x? >> [Študent] Urobiť x globálne. 491 00:31:15,150 --> 00:31:17,060 Dobre, takže môžeme x globálne. 492 00:31:17,060 --> 00:31:20,480 Poďme sa na zástupcu, ktorého som varoval už skôr, ale sakra, my jednoducho potrebujeme rýchlu opravu, 493 00:31:20,480 --> 00:31:25,730 takže povedzme, že int x tu. To robí x globálne. 494 00:31:25,730 --> 00:31:31,800 Takže teraz hlavné má k nemu prístup a prírastok k nemu má prístup, 495 00:31:31,800 --> 00:31:34,110 a tak nechaj ma ísť napred a skompilovať to teraz. 496 00:31:34,110 --> 00:31:37,630 Urobte buggy4, Enter. Zdá sa, že zostavenie teraz. 497 00:31:37,630 --> 00:31:41,230 Poďme bežať buggy4. A zdá sa, že skutočne funguje. 498 00:31:41,230 --> 00:31:45,150 To je jedna z tých vecí, ktoré je robia, čo hovorím, nie ako ja, 499 00:31:45,150 --> 00:31:47,010 ako som práve urobil tu, pretože všeobecne 500 00:31:47,010 --> 00:31:50,440 naše programy sa dostaneme oveľa zaujímavejšie a oveľa dlhšie, než to, 501 00:31:50,440 --> 00:31:56,390 a ak vaše riešenie životných problémov je len dať všetky premenné v hornej časti súboru, 502 00:31:56,390 --> 00:31:59,690 veľmi rýchlo sa programy sa strašne ťažké riadiť. 503 00:31:59,690 --> 00:32:02,190 To je ťažšie vymyslieť nové názvy premenných, 504 00:32:02,190 --> 00:32:05,240 je stále ťažšie pochopiť, čo je premenná robí to, čo, 505 00:32:05,240 --> 00:32:08,460 a tak všeobecne, to nie je dobré riešenie. 506 00:32:08,460 --> 00:32:10,030 Takže ideme na to lepšie. 507 00:32:10,030 --> 00:32:12,160 Nechceme používať globálnu premennú tu. 508 00:32:12,160 --> 00:32:16,240 >> Ja chcem zvýšiť x, takže som mohol, samozrejme - 509 00:32:16,240 --> 00:32:18,670 na konci dňa, to je trochu hlúpe príbehu pretože práve to - 510 00:32:18,670 --> 00:32:24,450 ale keď som nevedel o tom prevádzkovateľa, alebo som nesmel zmeniť v main sám, 511 00:32:24,450 --> 00:32:30,730 ako inak by som mohol implementovať Ken tu tentoraz nie je kocka, ale môžete zvyšovať? 512 00:32:31,380 --> 00:32:33,190 Ako môžem zmeniť túto vec tu? Jo. 513 00:32:33,190 --> 00:32:38,480 [Študent] Pass v x a potom sa vrátiť [nepočuteľné] >> Dobre, dobre. 514 00:32:38,480 --> 00:32:41,900 Tak prečo by som prejsť v X a potom sa skôr než ju vráti 515 00:32:41,900 --> 00:32:44,870 prečo nie ja jednoducho vrátiť x + 1. 516 00:32:44,870 --> 00:32:47,710 Pár ďalších vecí, musieť zmeniť tu. Som na správnej ceste. 517 00:32:47,710 --> 00:32:49,770 Čo ešte musím trik? Niekto iný. Jo. 518 00:32:49,770 --> 00:32:51,740 [Nepočuteľné Študent odpoveď] 519 00:32:51,740 --> 00:32:54,730 Potrebujem zmeniť návratový typ prírastku, pretože to nie je neplatné. 520 00:32:54,730 --> 00:32:57,780 Void nič neznamená sa vrátil, ale teraz jasne, že je, 521 00:32:57,780 --> 00:32:59,830 tak to musí zmeniť - >> [študent] int. 522 00:32:59,830 --> 00:33:02,740 int musí byť v súlade s tým, čo som vlastne vracia. 523 00:33:02,740 --> 00:33:05,180 Teraz niečo iné je stále buggy tu. Jo. 524 00:33:05,180 --> 00:33:08,400 [Nepočuteľné Študent odpoveď] >> [Malan] Tak som potrebné zvýšiť x? 525 00:33:08,400 --> 00:33:12,080 [Nepočuteľné Študent odpoveď] >> [Malan] Aha, tak musím prejsť x. 526 00:33:12,080 --> 00:33:16,660 Tak som potrebné urobiť tu. >> [Nepočuteľné Študent komentár] 527 00:33:16,660 --> 00:33:20,050 [Malan] Tak prototyp, musím to zmeniť tu. 528 00:33:20,050 --> 00:33:22,930 Tak to má stať int, to sa musí stať - 529 00:33:22,930 --> 00:33:25,620 hmm, som skutočne chybu tu. Poďme opraviť tento prvý. 530 00:33:25,620 --> 00:33:29,590 Čo by to vlastne byť? Je to byť int niečo. 531 00:33:29,590 --> 00:33:32,700 Mohlo by to byť x, ale úprimne povedané, ak začnete volať všetky svoje premenné x, 532 00:33:32,700 --> 00:33:35,390 to dostane menej a menej jasné, ktorý je ktorý. 533 00:33:35,390 --> 00:33:39,560 >> Takže povedzme, ľubovoľne vybrať iný konvencie pre moje pomocné funkcie, 534 00:33:39,560 --> 00:33:41,940 funkcie píšem. Nazveme to, alebo by sme mohli nazvať - 535 00:33:41,940 --> 00:33:45,010 Hovorme tomu číslo ešte jasnejšie. 536 00:33:45,010 --> 00:33:47,560 Tak som sa musel vrátiť, čo je číslo plus 1, 537 00:33:47,560 --> 00:33:50,740 a teraz musím zmeniť 1 ďalšia vec, tu a ešte jedna vec tu. 538 00:33:50,740 --> 00:33:54,350 Čo mám zmeniť na riadku 21 ako prvý? >> [Nepočuteľné Študent odpoveď] 539 00:33:54,350 --> 00:33:57,610 [Malan] Mám priradiť ju k x. Nemôžem len tak zavolať prírastok (x). 540 00:33:57,610 --> 00:34:01,960 Musím si pamätať odpoveď zmenou hodnoty x na ľavej strane. 541 00:34:01,960 --> 00:34:04,680 A aj keď x je teraz na ľavej a pravej, že je úplne v poriadku 542 00:34:04,680 --> 00:34:08,860 pretože pravá strana sa vykoná, prvý potom dostane zvalil do ľavého vec - 543 00:34:08,860 --> 00:34:10,600 x v tomto prípade. 544 00:34:10,600 --> 00:34:12,159 A potom konečne, je to ľahké opraviť teraz. 545 00:34:12,159 --> 00:34:17,230 To by malo len odpovedať, čo je dole, int číslo. 546 00:34:17,230 --> 00:34:20,570 Takže celá partia zmien pre naozaj stupídny funkcie 547 00:34:20,570 --> 00:34:24,420 ale zástupca z vecí, ktoré budeme stále chcú robiť. 548 00:34:24,420 --> 00:34:27,090 Tak, aby buggy4. Ja som podelal niekde. 549 00:34:27,090 --> 00:34:30,139 Ach, môj Bože. Päť chýb v 6-line programu. 550 00:34:30,139 --> 00:34:35,690 Takže to, čo sa deje na linke 18, znak 5? 551 00:34:35,690 --> 00:34:39,610 Tak som si určil, že tento, int. 552 00:34:39,610 --> 00:34:41,920 Poďme sa pozrieť,. Existuje celá partia ďalších chýb. 553 00:34:41,920 --> 00:34:47,010 Ach, môj Bože - 19, 18, 21 - ale opäť, povedzme, vymazať obrazovku, Control L tu, 554 00:34:47,010 --> 00:34:49,380 a znovu zvoniť. 555 00:34:49,380 --> 00:34:51,340 Takže 5 problémov je vlastne len, že 1. 556 00:34:51,340 --> 00:34:57,520 Tak teraz poďme bežať buggy4, Enter. Páni, je x bol zvýšený správne. 557 00:34:57,520 --> 00:35:02,720 Dobrá. Akékoľvek otázky na to, ako zvýšiť počty? Jo. 558 00:35:02,720 --> 00:35:09,870 [Nepočuteľné Študent otázka] >> Dobrá otázka. 559 00:35:09,870 --> 00:35:14,220 Ako to, že som si len zmeniť x na číslo a program bude ihneď vedieť? 560 00:35:14,220 --> 00:35:16,200 >> Opäť, myslite na to, ako túto abstrakciu. 561 00:35:16,200 --> 00:35:21,600 Takže keď som hlavnej a Ken je prírastok, úprimne povedané, je mi jedno, čo Ken volá jeho iPad. 562 00:35:21,600 --> 00:35:26,570 Nezaujíma ma, čo hovorí niečo, čo má čo do činenia s jeho vykonávaním tejto funkcie. 563 00:35:26,570 --> 00:35:33,340 Toto je implementačné detail, že som, hlavné, nemusíte sa starať o 564 00:35:33,340 --> 00:35:38,250 A tak jednoducho mení dôsledne ju vnútri funkcie - číslo sem a číslo tu - 565 00:35:38,250 --> 00:35:40,960 je všetko, to trvá tak dlho, ako som prekompilovať. 566 00:35:40,960 --> 00:35:44,180 Je to niečo ako keď si myslíte, že o tom mnohí z nás, tých z vás, vodičských preukazov 567 00:35:44,180 --> 00:35:46,770 ktorí riadia, alebo ak ste dokonca riadený v aute, 568 00:35:46,770 --> 00:35:50,950 väčšina z nás nemá potuchy, ako auto funguje pod kapotou. 569 00:35:50,950 --> 00:35:54,970 A doslova, keď otvoríte kapotu, väčšina z nás - vrátane mňa - 570 00:35:54,970 --> 00:35:56,940 sa nebude naozaj vedieť, čo sa pozeráme na, 571 00:35:56,940 --> 00:35:59,220 niečo ako sa môžete cítiť s vecami, ako je toto teraz. 572 00:35:59,220 --> 00:36:01,480 Ale my naozaj nemáme starať, ako auto funguje, 573 00:36:01,480 --> 00:36:05,970 nemáme sa starať, čo všetko z tyčí a piestov a káblov vo vnútri vozidla 574 00:36:05,970 --> 00:36:08,160 vlastne robia. 575 00:36:08,160 --> 00:36:12,770 Takže niečo ako to, čo hovoríte piestu nezáleží tu v tomto prípade. Rovnaký nápad. 576 00:36:12,770 --> 00:36:25,300 Jo. >> [Nepočuteľné Študent otázka] 577 00:36:25,300 --> 00:36:29,180 Ak existuje viac použití variabilného chvíľu xa pred, 578 00:36:29,180 --> 00:36:32,150 vy, programátor, by museli zmeniť je všade. 579 00:36:32,150 --> 00:36:36,600 Alebo by ste mohli doslova robiť Súbor, Ponuka, a potom Nájsť, Nahradiť - niečo také - 580 00:36:36,600 --> 00:36:39,170 ale budete musieť urobiť týchto zmien sami. 581 00:36:39,170 --> 00:36:47,450 Musíte byť v súlade. >> [Študent] Ak existuje viac premenných [nepočuteľné] 582 00:36:47,450 --> 00:36:53,100 Najmä, aby ako tu, keby to bola int iné číslo? >> [Študent] Správne. 583 00:36:53,100 --> 00:36:56,590 [Malan] Jo. Objednajte záleží, keď voláte funkciu. 584 00:36:56,590 --> 00:37:00,050 >> Takže ak by som sa volať prírastok tu niečo niečo čiarka, 585 00:37:00,050 --> 00:37:01,680 je tu priame mapovanie. 586 00:37:01,680 --> 00:37:05,690 Prvá premenná, ako sa to volá, je vyrobený kópiu prvého argumentu sem. 587 00:37:05,690 --> 00:37:07,760 Prepáčte. To by nemalo byť zátvorka. 588 00:37:07,760 --> 00:37:11,490 Druhý argument sa zoradia s druhým. Takže poradí, áno, záleží. Dobrá. 589 00:37:11,490 --> 00:37:17,020 Prepáčte. Vzal som dlhú cestu, aby sa tam dostať. Ďalšie otázky? Dobrá. 590 00:37:17,020 --> 00:37:20,610 Tak uvidíme, či nemôžeme namaľovať obraz o tom, čo sa vlastne deje 591 00:37:20,610 --> 00:37:23,090 pod pokrievku, aby som tak povedal. 592 00:37:23,090 --> 00:37:26,640 To je obdĺžnik, ktorý by mohol predstavovať pamäte počítača. 593 00:37:26,640 --> 00:37:30,970 Aj keď nemáte tušenie, ako pamäť funguje a ako funguje RAM, 594 00:37:30,970 --> 00:37:33,940 aspoň predpokladať, že máte kytice z nej v týchto dňoch. 595 00:37:33,940 --> 00:37:36,280 Máš megabajtov to, máte gigabajty toho, 596 00:37:36,280 --> 00:37:40,870 a my vieme, týždeň od 0, že byte je práve to, čo? >> [Študent] 8 bitov. 597 00:37:40,870 --> 00:37:42,950 8 bitov, nie? Takže 8 nuly a 1. 598 00:37:42,950 --> 00:37:45,880 Takže ak váš počítač má koncert RAM, 2 giga RAM v týchto dňoch, 599 00:37:45,880 --> 00:37:55,030 máte miliárd 2000000000 bajtov pamäte alebo približne 8 miliárd alebo 16 miliárd bitov 600 00:37:55,030 --> 00:37:56,890 vo vnútri počítača. 601 00:37:56,890 --> 00:38:00,590 Na rozdiel od malého Chmýřitý napríklad Willy, to nie je magnetické častice obvykle už. 602 00:38:00,590 --> 00:38:04,450 Stále väčšej miere - v notebookoch najmenej - to je SSD disky, SSD 603 00:38:04,450 --> 00:38:08,580 že práve nemajú žiadne pohyblivé časti. Je to všetko elektronické. Je to všetko elektriny založené. 604 00:38:08,580 --> 00:38:14,060 Takže myslíte, že z tohto obdĺžnika, ako len zastupujúci 1 alebo 2 GB pamäte, ktoré máte. 605 00:38:14,060 --> 00:38:16,020 >> Takže je to kus pamäte. 606 00:38:16,020 --> 00:38:19,830 Svet počítačovej vede nejako rozdelený off 607 00:38:19,830 --> 00:38:22,950 kúsky pamäti robiť rôzne veci. 608 00:38:22,950 --> 00:38:27,190 Napríklad, ak je to vášho počítača RAM, ako navrhol obdĺžnika, 609 00:38:27,190 --> 00:38:31,130 ukazuje sa, že podľa konvencie, v hornej časti pamäte RAM, aby som tak povedal, 610 00:38:31,130 --> 00:38:33,660 je všeobecne to, čo sa nazýva textový segment. 611 00:38:33,660 --> 00:38:36,740 Tí sú 0s a 1s, ktoré ste zostavili. 612 00:38:36,740 --> 00:38:39,020 Takže keď sme sa pozrel pod pokrievku, čo a.out je, 613 00:38:39,020 --> 00:38:41,980 všetky tieto 0s a 1s, pri spustení programu, 614 00:38:41,980 --> 00:38:46,290 tie 0s a 1s sú načítané z vášho pevného disku do niečoho s názvom RAM, 615 00:38:46,290 --> 00:38:49,320 a v RAM to dali na vrchole. 616 00:38:49,320 --> 00:38:52,770 Medzitým, budete mať iné veci: inicializovať dát, inicializáciu dát. 617 00:38:52,770 --> 00:38:57,510 Tieto 2 riadky pamäti odkazujú na globálne premenné, ktoré nie sú často používajú 618 00:38:57,510 --> 00:39:00,760 ale niekedy, keď to urobíte, skončí tam rovnako. 619 00:39:00,760 --> 00:39:04,260 Potom je tu niektoré ďalšie veci: premenné prostredie, ktoré nebudeme tráviť toľko času na, 620 00:39:04,260 --> 00:39:06,860 ale potom 2 dôležité veci, ktoré sa vrátia v priebehu semestra, 621 00:39:06,860 --> 00:39:08,550 zásobník a halda. 622 00:39:08,550 --> 00:39:12,210 Takže väčšina pamäte počítača je vyhradený pri spustení programu 623 00:39:12,210 --> 00:39:15,370 pre takzvaný balíček, a niečo, čo nazýva haldy. 624 00:39:15,370 --> 00:39:18,840 Nebudeme hovoriť o haldy dnes, ale budeme hovoriť o zásobníka. 625 00:39:18,840 --> 00:39:24,600 Zásobník je určený na vykúzliť vizuálne z jedálne zásobníkov haly jedlo v Mather dome 626 00:39:24,600 --> 00:39:28,110 alebo tam, kde sa stalo, že tam, kde jedáleň pracovníci čistiť každý deň, 627 00:39:28,110 --> 00:39:30,180 oni vyskladať až od podlahy nahor, 628 00:39:30,180 --> 00:39:34,550 a podobne, v pamäti, že je to myšlienka na niečo na zásobníku, 629 00:39:34,550 --> 00:39:36,860 uvedenie niečo na stacku, uvedenie niečo na zásobníku. 630 00:39:36,860 --> 00:39:38,240 A čo máme na mysli toto? 631 00:39:38,240 --> 00:39:41,860 >> Poďme zväčšiť iba na dolnej polovici obrázku, pamäte RAM vášho počítača, 632 00:39:41,860 --> 00:39:44,330 navrhnúť nasledujúce. 633 00:39:44,330 --> 00:39:48,170 Ukazuje sa, že pri spustení programu, ako je a.out alebo Hello - 634 00:39:48,170 --> 00:39:50,100 bez ohľadu na program, je to, že ste napísali - 635 00:39:50,100 --> 00:39:54,020 znovu, 0s a 1s tie sú načítané z vášho pevného disku, ktorý je dlhodobé skladovanie, 636 00:39:54,020 --> 00:39:57,230 zostane tam, aj keď zatiahnite za konektor, vloženého do pamäte RAM. 637 00:39:57,230 --> 00:40:00,610 RAM je rýchlejší ako pevné disky - je to menšie, než pevné disky - 638 00:40:00,610 --> 00:40:03,300 ale to je miesto, kde žijú programy, zatiaľ čo vy používate je. 639 00:40:03,300 --> 00:40:08,230 Takže ste dvakrát kliknite na program, na Mac alebo PC, je načítaná z pevného disku do operačnej pamäte RAM. 640 00:40:08,230 --> 00:40:11,520 Akonáhle je načítaný do RAM, 0s a 1s go na ceste hore, 641 00:40:11,520 --> 00:40:16,610 tzv texte segment, ale potom, akonáhle váš program v skutočnosti spustí, 642 00:40:16,610 --> 00:40:21,360 hlavná funkcia je volaná, a hlavné, ako sme videli, často lokálne premenné, 643 00:40:21,360 --> 00:40:24,870 a to má ints a reťazce a pripaľuje a podobne. 644 00:40:24,870 --> 00:40:29,180 Takže ak váš program, ktorý ste napísali, alebo program, ktorý ste poklepanie 645 00:40:29,180 --> 00:40:32,970 používa niektoré premenné vnútri of main, 646 00:40:32,970 --> 00:40:37,240 skončí na dne svojho stacku pamäti, aby som tak povedal. 647 00:40:37,240 --> 00:40:39,410 Konkrétnejšie, čo to vlastne znamená? 648 00:40:39,410 --> 00:40:48,450 To jednoducho znamená, že ak sme sa chystali počet bajtov pamäte RAM v počítači, 649 00:40:48,450 --> 00:40:55,750 si všimnúť, že to môže byť bajt číslo 0, môže to byť byte číslo 1, 2, 3, 4, 5, 6, 650 00:40:55,750 --> 00:41:01,480 celú cestu až 2 miliardy by sa celú cestu tam hore. 651 00:41:01,480 --> 00:41:05,880 Takže inými slovami, keď hovoríme o pamäti RAM alebo pamäte, pokiaľ ide o bytoch, 652 00:41:05,880 --> 00:41:11,500 Znamená to, že sa niekto rozhodol, čo očíslovať každý z týchto blokov pamäte. 653 00:41:11,500 --> 00:41:16,650 Takže keď budete potrebovať 32 bitov na int alebo budete potrebovať 8 bitov pre char, 654 00:41:16,650 --> 00:41:18,840 kde sa im skončí v pamäti? 655 00:41:18,840 --> 00:41:22,350 >> Koncepčne, jednoducho skončí na konci tejto veci zvanej zásobník. 656 00:41:22,350 --> 00:41:25,870 Ale čo je zaujímavé, teraz je, keď hlavné volá funkcie - 657 00:41:25,870 --> 00:41:28,750 Predpokladám, že funkciu nazvanú foo, len ľubovoľný názov - 658 00:41:28,750 --> 00:41:32,330 čo sa stane, je hlavné je v dolnej časti tohto zásobníka pamäte; 659 00:41:32,330 --> 00:41:35,680 foo teraz je kladený na vrchole hlavnej pamäte. 660 00:41:35,680 --> 00:41:40,990 Takže nejaké lokálne premenné, ktoré foo má skončiť druh pojmovo vyššia než v hlavnom. 661 00:41:40,990 --> 00:41:47,070 Ak foo volá inú funkciu nazvanú bar, tieto premenné skončí tu. 662 00:41:47,070 --> 00:41:50,120 Ak bar volá niečo iné, tu, tu, tu. 663 00:41:50,120 --> 00:41:53,830 Takže to, čo je na tom zaujímavé spustenie programu je to, že ako volať funkcie 664 00:41:53,830 --> 00:41:57,750 a keďže tieto funkcie volať funkcie a ako tieto funkcie volať funkcie, 665 00:41:57,750 --> 00:42:01,470 si vybudovať tento balík funkcií v pamäti. 666 00:42:01,470 --> 00:42:06,890 A len raz za funkcie vráti sa môžete začať sa, že pamäť vrátiť. 667 00:42:06,890 --> 00:42:10,860 Takže jedným z najjednoduchších spôsobov, ako beží z pamäte v počítačovom programe 668 00:42:10,860 --> 00:42:14,360 je písať funkcie, ktoré sa nikdy nevráti. 669 00:42:14,360 --> 00:42:18,900 Tak napríklad, poďme preukázať až sa úmyselne buggy programu. 670 00:42:18,900 --> 00:42:22,230 Nechaj ma ísť napred a nenechám # include , 671 00:42:22,230 --> 00:42:25,000 int main (void), 672 00:42:25,000 --> 00:42:32,940 a budem robiť, keď (2> 1), ktorý pravdepodobne nebude nikdy meniť na nás, 673 00:42:32,940 --> 00:42:37,560 a nechaj ma ísť napred teraz a robiť printf. 674 00:42:37,560 --> 00:42:40,700 Vlastne, že to bude menej vizuálne zaujímavé. Poďme to. 675 00:42:40,700 --> 00:42:50,240 Pre int i = 0; i> 0 - poďme urobiť rovnakú chybu - i + +. 676 00:42:50,240 --> 00:42:52,720 A nech to nie je printf tu. Poďme praktizovať to, čo som kázal. 677 00:42:52,720 --> 00:43:00,190 Poďme mať metódu tu, void refrén, a povieme int i, 678 00:43:00,190 --> 00:43:06,830 a potom som chcel povedať printf - nie, poďme urobiť to zaujímavejšie. 679 00:43:06,830 --> 00:43:15,790 Poďme vlastne nevytlačí vôbec nič. Povedzme to: chorus (i). 680 00:43:15,790 --> 00:43:20,390 Dobrá. Tak to je buggy pretože prečo? 681 00:43:20,390 --> 00:43:23,380 Ja som to vymyslela, ako som ísť, pretože program nie je vlastne robiť niečo zaujímavé. 682 00:43:23,380 --> 00:43:25,320 >> Ale to nie je cieľom. 683 00:43:25,320 --> 00:43:29,630 Cieľom je napísať program, ktorého hlavnou funkciou je čo robí, očividne? 684 00:43:30,720 --> 00:43:32,860 Zavolajte sám. A skutočne, nepotrebujeme slučku. 685 00:43:32,860 --> 00:43:37,200 Poďme ešte zjednodušiť tým, len tak, aby sme nestratili zo zreteľa naozaj základné chybu. 686 00:43:37,200 --> 00:43:39,640 Hlavné vyzýva zbor spievať nejaký refrén, 687 00:43:39,640 --> 00:43:41,440 potom som urobil niečo hlúpe, a mal som refrén refrén volania 688 00:43:41,440 --> 00:43:43,760 pretože som predpokladal, niekto iný sa bude implementovať možná, 689 00:43:43,760 --> 00:43:47,210 a teraz to nebude zostavovať ešte. Musím urobiť, čo? 690 00:43:47,210 --> 00:43:49,970 Potrebujem prototyp, nezabudnite. 691 00:43:49,970 --> 00:43:56,110 Tak som potrebné mať tu void chór (int i); 692 00:43:56,110 --> 00:43:59,210 Takže teraz keď idem tu - v skutočnosti, poďme použite väčšie okno. 693 00:43:59,210 --> 00:44:01,980 Poďme ďalej a urobiť zbor. 694 00:44:01,980 --> 00:44:06,490 Poďme ďalej a urobiť zbor. 695 00:44:06,490 --> 00:44:08,370 Použitie nelegálnej identifikátor i 696 00:44:08,370 --> 00:44:12,500 Oh, to bolo hlúpe. Nepotrebujeme argument. Jednoducho to. 697 00:44:12,500 --> 00:44:16,370 Želám si, aby sme začali týmto spôsobom. Bolo by to oveľa jednoduchšie program písať. 698 00:44:16,370 --> 00:44:25,590 Tam. Teraz poďme na moju terminálovom okne, spustite rinčať, a ideme na to. 699 00:44:25,590 --> 00:44:28,460 To bol naozaj rýchly. 700 00:44:28,460 --> 00:44:31,150 Čo sa vlastne práve stalo, keď? 701 00:44:31,150 --> 00:44:33,730 No, teraz budem pridávať tlačovú linku, takže môžeme vidieť. 702 00:44:33,730 --> 00:44:43,490 Dovoľte mi, aby som printf ("Som tu") - žiadne premenné. Necháme to takto. 703 00:44:43,490 --> 00:44:47,480 Dovoľte mi, aby som znovu spustiť make. Dovoľte mi, aby som znova spustite refrén. 704 00:44:47,480 --> 00:44:57,380 A ... no. Len tak ďalej. 705 00:44:57,380 --> 00:44:59,930 Ako stranou, prečo sa nezrútil? 706 00:44:59,930 --> 00:45:02,080 Segmentation fault stalo super rýchly predtým. 707 00:45:02,080 --> 00:45:06,570 [Nepočuteľné Študent odpoveď] >> Presne tak. Tak to trvá dobu tlače, že jo? 708 00:45:06,570 --> 00:45:08,610 Je to len má viac práce na počítači v rámci. 709 00:45:08,610 --> 00:45:10,620 A je to tu: Segmentation fault. 710 00:45:10,620 --> 00:45:12,340 >> Tak zistíte, ako rýchlo programy beží. 711 00:45:12,340 --> 00:45:14,130 Ak si nie ste tlače nič, super rýchly. 712 00:45:14,130 --> 00:45:18,770 Ale my stále túto Segmentation fault, pretože to, čo sa deje? 713 00:45:18,770 --> 00:45:21,210 Ak si myslíte, že o tom, ako je váš počítač pamäť stanovený, 714 00:45:21,210 --> 00:45:28,740 to sa stane byť hlavnou, ale tu poďme nazývať refrén, a hovorme tejto chór. 715 00:45:28,740 --> 00:45:34,550 A teraz keď to urobím svoje estetiku právo, je to len povedať chorus, chorus, chorus, 716 00:45:34,550 --> 00:45:40,550 chorus, chorus, chorus, chorus, do najmenších podrobností, a nakoniec, čo sa bude diať? 717 00:45:40,550 --> 00:45:45,630 Ak veľký obrázok, doslova, je to, čo sa práve deje koncepčne? 718 00:45:46,520 --> 00:45:48,630 V zásobníku prekročení haldy. 719 00:45:48,630 --> 00:45:51,940 Alebo ešte horšie, stačí prekročení všetko, vrátane textového segmentu, 720 00:45:51,940 --> 00:45:54,590 ktorý je 0 a 1, ktoré predstavujú svoj program. 721 00:45:54,590 --> 00:45:57,080 Stručne povedané, je to proste super, super zlý. 722 00:45:57,080 --> 00:45:58,830 Váš program sa vymkla kontrole. 723 00:45:58,830 --> 00:46:01,220 Používate spôsobom viac pamäte, ako ste zamýšľali 724 00:46:01,220 --> 00:46:03,960 všetko kvôli hlúpe chyby v tomto prípade, 725 00:46:03,960 --> 00:46:08,040 alebo v tomto prípade veľmi zámerne vykonáva funkcie volať seba. 726 00:46:08,040 --> 00:46:09,500 Teraz, to nie je tak zlé. 727 00:46:09,500 --> 00:46:13,800 Funkcia volania sa vlastne má veľkú silu, keď ju použijete správne. 728 00:46:13,800 --> 00:46:15,800 Osobne som nepoužil správne tu. 729 00:46:15,800 --> 00:46:19,780 Takže to nie je zase tak zlé, ale fakt, že som vlastne nikdy prestať volať sám 730 00:46:19,780 --> 00:46:23,520 je základná slabina tu tohto programu. 731 00:46:23,520 --> 00:46:26,400 Tak kam ideme s tým všetkým? Čo sa vlastne deje? 732 00:46:26,400 --> 00:46:30,340 Keď hovorím prírastok funkcie, ako sme robili v tých príkladoch, 733 00:46:30,340 --> 00:46:33,420 Mám hodnotu ako 1, že som sa prejsť dovnútra 734 00:46:33,420 --> 00:46:37,570 Aj odovzdať kópiu čísla 1, tak sa stane nasledujúce. 735 00:46:37,570 --> 00:46:44,240 Poďme do prírastku príklade, ten chlap tamto. 736 00:46:44,240 --> 00:46:46,870 Tu je to, čo sa vlastne deje. 737 00:46:46,870 --> 00:46:53,400 Keď som sa zavolať prírastok a ja odovzdať x, obrazovo, čo sa deje tu, je to. 738 00:46:53,400 --> 00:46:59,520 >> Ak budem mať hodnotu 1 uloženú tu a ja som vlastne volať prírastok, 739 00:46:59,520 --> 00:47:04,330 ktorá sa teraz nazýva zbor - iPad hádže ma tu. 740 00:47:04,330 --> 00:47:09,760 Hovorme tejto prírastok, a my nevieme, čo to ďalšie funkcie bude. 741 00:47:09,760 --> 00:47:14,840 Takže čo sa vlastne deje, je tu niekde v hlavnej mám kus pamäte 742 00:47:14,840 --> 00:47:17,000 , Ktorý je ukladanie číslo 1. 743 00:47:17,000 --> 00:47:19,380 Keď hovorím, prírastok, ja som s použitím iného kus pamäte, 744 00:47:19,380 --> 00:47:21,230 ale teraz mám kópiu 1. 745 00:47:21,230 --> 00:47:26,660 Keď som zvýšte túto hodnotu, to sa stáva 2, 746 00:47:26,660 --> 00:47:30,560 ale čo sa stane potom, akonáhle prírastku vráti? 747 00:47:30,560 --> 00:47:33,630 Táto pamäť len dostane odovzdaný späť do operačného systému, 748 00:47:33,630 --> 00:47:37,450 čo znamená, že všetko, čo ste urobil, je nič užitočného. 749 00:47:37,450 --> 00:47:43,120 1, ktorá bola pôvodne obsiahnutá v main je stále v skutočnosti neexistujú. 750 00:47:43,120 --> 00:47:44,890 Tak kam pôjdeme s tým? 751 00:47:44,890 --> 00:47:49,770 Ukazuje sa, že v pamäti máte túto back-to-back postupnosť bajtov 752 00:47:49,770 --> 00:47:53,050 ktoré si môžete dať veci do, a ukázalo sa, že sme už videli niečo 753 00:47:53,050 --> 00:47:55,390 ktorá zahŕňa uvedenie veci späť k sebe k sebe dozadu. 754 00:47:55,390 --> 00:47:59,860 Čo je reťazec založený na týždeň 1 a teraz týždeň 2? 755 00:48:00,020 --> 00:48:01,980 Je to len zbierka postáv. 756 00:48:01,980 --> 00:48:04,310 Tak to dopadá, rovnako ako si môžete dať čísla v pamäti, 757 00:48:04,310 --> 00:48:06,990 podobne si môžete dať znaky v pamäti. 758 00:48:06,990 --> 00:48:10,530 A akonáhle začneme putting znaky v pamäti chrbtom k sebe k sebe na chrbát, 759 00:48:10,530 --> 00:48:13,620 ukazuje sa, že s najjednoduchšie veci, ako na vedenie alebo slučky while, 760 00:48:13,620 --> 00:48:17,170 môžeme určiť iteráciou zľava doprava cez znaky v reťazci 761 00:48:17,170 --> 00:48:20,600 a začať masírovať do rôznych postáv úplne - 762 00:48:20,600 --> 00:48:23,370 sa môže stať b, mohol b stať c - 763 00:48:23,370 --> 00:48:27,780 takže nakoniec môžeme mať anglickú vetu, ktorá skutočne dáva zmysel 764 00:48:27,780 --> 00:48:30,310 a previesť každý z týchto listov jeden po druhom 765 00:48:30,310 --> 00:48:34,400 pešo cez našej pamäti počítača zľava doprava skutočne zašifrovať. 766 00:48:34,400 --> 00:48:35,810 Takže poďme sa náš päťminútovú prestávku tu, 767 00:48:35,810 --> 00:48:40,730 a až sa vrátime, začneme tento proces zakódovania informácií. 768 00:48:42,020 --> 00:48:43,520 >> Dobrá. 769 00:48:43,520 --> 00:48:48,070 Než sme sa ponoriť do nejakého crypto a tieto veci tzv pole, 770 00:48:48,070 --> 00:48:51,470 dovoľte mi, aby som pauza pre prípadné otázky, pretože mám pocit, že som naozaj trochu zmätené 771 00:48:51,470 --> 00:48:54,080 niektoré z týchto tém. Takže poďme opraviť hneď, či môžeme. 772 00:48:54,080 --> 00:48:58,700 Práve sme hovorili o návratových hodnôt, sme hovorili o argumenty, 773 00:48:58,700 --> 00:49:03,250 a hovorili sme o tomto pojme, ktorý sa vrátime v najbližších týždňoch, 774 00:49:03,250 --> 00:49:08,720 nahliadnutie pamäte ako celú partiou týchto skladané zásobníkov, aby som tak povedal, 775 00:49:08,720 --> 00:49:12,660 zdola nahor, tak, že každý zásobník, ktorý sa dal na stack 776 00:49:12,660 --> 00:49:16,530 predstavuje funkciu, ktorá je v súčasnej dobe s názvom. 777 00:49:17,900 --> 00:49:20,260 Nejaké otázky? 778 00:49:20,260 --> 00:49:22,640 Dovoľte mi, aby som na niečo spýtať tu. 779 00:49:22,640 --> 00:49:27,890 Dovoľte mi, aby som zjednodušiť to späť k tomu, čo bolo predtým, než niektoré z našich predchádzajúcich Q & A. 780 00:49:27,890 --> 00:49:35,570 Skutočnosť, že prírastok má otvorené zátvorky, int číslo, uzavretá zátvorka - 781 00:49:35,570 --> 00:49:39,110 čo int číslo predstavuje? 782 00:49:39,110 --> 00:49:42,790 [Študent] argument. >> Argument. Dobre. Ale čo je to argument? 783 00:49:42,790 --> 00:49:46,370 [Nepočuteľné Študent odpoveď] >> Čo je to? >> [Študent] Niečo, čo vám prejsť dovnútra 784 00:49:46,370 --> 00:49:49,940 Dobre, tak niečo, čo vám prejsť dovnútra a všeobecnejšie, je to len vstup. 785 00:49:49,940 --> 00:49:52,450 Ak ste písali funkciu a túto funkciu je zmysel života 786 00:49:52,450 --> 00:49:55,770 je to niečo trochu iného každom použití ju, 787 00:49:55,770 --> 00:50:00,110 potom by jediný možný spôsob, ako k tomu môže dôjsť skutočne sa zdá byť, aby to so vstupom 788 00:50:00,110 --> 00:50:03,510 tak, že to môže urobiť niečo s tým vstupom zakaždým. 789 00:50:03,510 --> 00:50:06,650 >> Takže budete musieť zadať dve veci, keď funkcia má vstup. 790 00:50:06,650 --> 00:50:09,590 Musíte zadať meno, ktoré chcete, aby k tomuto vstupu 791 00:50:09,590 --> 00:50:12,700 čisto pre svoje vlastné pohodlie, takže môžete odkazovať sa na to 792 00:50:12,700 --> 00:50:16,540 vo funkcii, že vy sami píšete, ako som tu v súlade 32. 793 00:50:16,540 --> 00:50:20,800 Ale tiež je potrebné zadať jej typ, pretože C je programovací jazyk 794 00:50:20,800 --> 00:50:25,940 že len vyžaduje, že ak chcete premennú, budete musieť povedať počítači, čo dátový typ je, 795 00:50:25,940 --> 00:50:30,200 z veľkej časti tak, že to vie, koľko bitov sa prideliť pre uvedené premenné 796 00:50:30,200 --> 00:50:33,020 pretože by to mohlo byť 6 - sorry, to nebude 6. 797 00:50:33,020 --> 00:50:37,080 To môže byť 16, môže to byť 8, môže to byť 32, a to aj 64, 798 00:50:37,080 --> 00:50:39,130 ale počítač potrebuje vedieť. 799 00:50:39,130 --> 00:50:43,180 Teraz int na ľavej strane predstavuje to, čo naopak? 800 00:50:46,350 --> 00:50:48,850 [Nepočuteľné Študent odpoveď] >> Čo je to? >> [Študent] Typ funkcie. 801 00:50:48,850 --> 00:50:53,610 Typ funkcie, a konkrétnejšie, typ svojej produkcie. Právo. 802 00:50:53,610 --> 00:50:57,380 Takže vzhľadom k tomu, vec v zátvorke predstavuje jeho vklad, ak existujú, 803 00:50:57,380 --> 00:50:59,660 vec vľavo predstavuje jeho výstupu. 804 00:50:59,660 --> 00:51:03,530 A v tomto prípade, prírastok zrejme vráti int, 805 00:51:03,530 --> 00:51:07,690 a tak int je návratový typ tejto funkcie. 806 00:51:07,690 --> 00:51:09,340 Čo to znamená vrátiť? 807 00:51:09,340 --> 00:51:15,090 Doslova, môžete použiť kľúčové slovo návrat a potom, ak ste, čo ste vracia 808 00:51:15,090 --> 00:51:18,600 vpravo kľúčového slova je celé číslo, 809 00:51:18,600 --> 00:51:21,660 potom je to skutočne v súlade s tým, čo sme sľúbili. 810 00:51:21,660 --> 00:51:26,410 Dalo by sa to urobiť niečo také - ahoj, svet - pretože to je reťazec. 811 00:51:26,410 --> 00:51:28,860 >> Je zrejmé, že sa nejedná o celé číslo. 812 00:51:28,860 --> 00:51:33,140 Takže v skratke, záťaž je naozaj na nás, programátor, byť konkrétny 813 00:51:33,140 --> 00:51:37,770 na to, čo sa vraciame a potom vlastne ísť o vrátení. 814 00:51:37,770 --> 00:51:43,440 Kontext tu teraz je, že počítače pamäť je gigabyte, 2 GB - 815 00:51:43,440 --> 00:51:45,920 čokoľvek - možno je to viac, možno je to menej, 816 00:51:45,920 --> 00:51:49,050 ale počítač považuje to, že majú rôzne oddiely. 817 00:51:49,050 --> 00:51:51,200 Niečo ide tam, niečo ide tam, 818 00:51:51,200 --> 00:51:54,290 rôzne veci ide v stredu, a dnes sme jednoducho začať rozprávať príbeh, 819 00:51:54,290 --> 00:51:56,340 ale vrátime k tomuto v priebehu času. 820 00:51:56,340 --> 00:51:59,980 Pre túto chvíľu, len kúsok pamäte naozaj záleží, je text segmentu 821 00:51:59,980 --> 00:52:03,360 preto, že práve predstavuje 0s a 1s, že zvonenie je na výstupe. 822 00:52:03,360 --> 00:52:06,050 Takže pri spustení príkazu na klávesnici, ako a.out 823 00:52:06,050 --> 00:52:09,110 alebo poklepaním na ikonu na Mac OS alebo Windows, 824 00:52:09,110 --> 00:52:11,880 Váš program je nabitý z pevného disku do pamäte RAM 825 00:52:11,880 --> 00:52:16,330 a to zvalil na vrchole RAM počítača, aby som tak povedal. 826 00:52:16,330 --> 00:52:20,450 Medzitým, ako váš program spustí a hlavné volaná 827 00:52:20,450 --> 00:52:23,640 v programe, ktorý písal alebo program Microsoft alebo Apple napísal, 828 00:52:23,640 --> 00:52:27,860 ktorýkoľvek z jej lokálnych premenných skončí tam dole na dne pamäti vášho počítača. 829 00:52:27,860 --> 00:52:33,230 Ale ak hlavné vyzýva ďalšie funkcie, ktoré samo o sebe má premenné alebo argumenty, ktoré skončili nad ním. 830 00:52:33,230 --> 00:52:36,680 A ak táto funkcia volá niečo, oni skončia nad ním, nad ním, nad ním. 831 00:52:36,680 --> 00:52:41,460 >> A iba raz funkcií sa vykonáva spustením sa zásobník zásobníkov, aby som tak povedal, 832 00:52:41,460 --> 00:52:43,240 začať sa dostať nižšie a nižšie. 833 00:52:43,240 --> 00:52:48,250 A to je to, čo potom, v kocke, vysvetľuje, prečo pri volaní kocku 834 00:52:48,250 --> 00:52:51,550 alebo volajte prírastok, ste odovzdaním kópie hodnoty. 835 00:52:51,550 --> 00:52:55,520 A čo to znamená, obrazovo je to, že ste doslova písanie číslo 1 836 00:52:55,520 --> 00:53:00,460 v inej časti pamäte, meniace sa, že 1-2 v prípade prírastku 837 00:53:00,460 --> 00:53:04,820 alebo na 8 v prípade kocky a potom hádzanie, že pamäť preč 838 00:53:04,820 --> 00:53:09,140 akonáhle prírastku alebo vráti kocky funkcie. Otázka. 839 00:53:09,140 --> 00:53:12,900 [Študent] Kde sú globálne premenné uložené? 840 00:53:12,900 --> 00:53:18,100 Globálne premenné sú uložené v tom, čo sa v súčasnej dobe nazýva inicializovať dáta alebo neinicializovaný dát, 841 00:53:18,100 --> 00:53:21,920 Rozdiel je, ak máte globálne premennú a priradiť ju okamžite hodnotu 842 00:53:21,920 --> 00:53:24,640 s znakom rovnosti, že skončí na vrchole tam, 843 00:53:24,640 --> 00:53:29,200 a ak si len povedať, int x, bez hodnoty, skončí o niečo nižšia v pamäti RAM 844 00:53:29,200 --> 00:53:31,710 jednoducho konvencií. 845 00:53:31,710 --> 00:53:34,940 Ďalšie otázky? Dobrá. 846 00:53:34,940 --> 00:53:37,340 Takže tento obrázok vráti, ako sme si silnejší 847 00:53:37,340 --> 00:53:39,170 s tým, čo môžeme robiť s počítačom, 848 00:53:39,170 --> 00:53:42,720 ale teraz, poďme sa krátko intro na kryptografiu, 849 00:53:42,720 --> 00:53:46,080 špecifický typ kryptografie, ktorá nie je vyriešiť všetky problémy sveta 850 00:53:46,080 --> 00:53:47,720 ale vyriešiť niektoré z nich. 851 00:53:47,720 --> 00:53:51,700 V tomto prípade tu máme niečo, čo nazýva tajný kľúč kryptografie. 852 00:53:51,700 --> 00:53:56,410 Secret-kľúčové kryptografia, ako už názov napovedá, pochádza jeho zabezpečenia z tajomstiev. 853 00:53:56,410 --> 00:54:00,690 >> Napríklad, ak ste boli späť na základnej škole a ste míňali malú tajnú milostný list 854 00:54:00,690 --> 00:54:04,850 na chlapca alebo dievča ste drvili na, ak by ste chceli prejsť, aby na vedomie prostredníctvom publika, 855 00:54:04,850 --> 00:54:08,380 pravdepodobne by sa napísať taký poznámku v angličtine alebo aký je váš rodný jazyk je. 856 00:54:08,380 --> 00:54:13,340 Skôr, môžete zašifrovať, alebo môžete len poslať textovú správu v týchto dňoch. 857 00:54:13,340 --> 00:54:15,460 Ale možno v skutočnosti odovzdať im odkaz v celej triede. 858 00:54:15,460 --> 00:54:18,700 A k tomu bezpečne takým spôsobom, aby vaši priatelia a učiteľ 859 00:54:18,700 --> 00:54:22,650 Neviem, čo píšete, môžete prísť s pomerne jednoduchým algoritmom, 860 00:54:22,650 --> 00:54:25,920 mladý, že ste mohol byť, len ťahanice slová. 861 00:54:25,920 --> 00:54:28,130 Takže namiesto písania môžete písať b, 862 00:54:28,130 --> 00:54:30,220 miesto b môžete písať C, 863 00:54:30,220 --> 00:54:32,140 miesto c môžete napísať d, a tak ďalej. 864 00:54:32,140 --> 00:54:34,360 Alebo by ste mohli prísť s sofistikovanejšie preklade 865 00:54:34,360 --> 00:54:36,720 listov do rôznych písmen. 866 00:54:36,720 --> 00:54:39,740 Ale úlovok je chlapec alebo dievča, ktoré posielate na vedomie 867 00:54:39,740 --> 00:54:45,020 potrebuje niečo vedieť, čo je to, čo, samozrejme? >> [Študent] Co posielate. 868 00:54:45,020 --> 00:54:49,720 Aký je váš tajomstvo je, rovnako ako to, čo je, že mapovanie medzi tieto a B a C je a d's. 869 00:54:49,720 --> 00:54:54,650 Je to len pridáva 1 pre každý z listov ísť z bodu A do B, B na C? 870 00:54:54,650 --> 00:54:56,670 Je to zložitejšie, ako to? 871 00:54:56,670 --> 00:55:01,540 >> Takže vy a vaša rozdrviť potrebujete mať túto tajnú informáciu, 872 00:55:01,540 --> 00:55:03,190 ale je tu trochu catch-22 tu. 873 00:55:03,190 --> 00:55:06,830 Ak je to vôbec prvýkrát, posielate milostný list prostredníctvom triedy, 874 00:55:06,830 --> 00:55:10,720 Ako je to, že chlapec alebo dievča bude vedieť, čo je tajomstvo ešte je? 875 00:55:10,720 --> 00:55:13,930 Takže tajný šifrovací kľúč nie je vyriešiť všetky problémy sveta, 876 00:55:13,930 --> 00:55:16,320 a je to vlastne vzťah, tu sa vrátime k na semester konci. 877 00:55:16,320 --> 00:55:25,110 Podobne sa väčšina z nás nevie niekto, že pracuje, napríklad na Amazon.com, 878 00:55:25,110 --> 00:55:28,190 a napriek tomu mnohí z nás pravdepodobne kúpil veci na Amazon.com, 879 00:55:28,190 --> 00:55:31,990 a my sme sa učili predpokladať, že tieto e-commerce transakcie sú bezpečné. 880 00:55:31,990 --> 00:55:36,470 URL pravdepodobne hovorí https, je to možno hlúpa ikona visiaceho zámku niekde, 881 00:55:36,470 --> 00:55:39,930 tam je nejaký druh kryptografie zabezpečenie informácií o kreditnej karte 882 00:55:39,930 --> 00:55:42,160 medzi vami a Amazon.com. 883 00:55:42,160 --> 00:55:45,430 A napriek tomu, ak kryptografie znamená vedieť, nejaké tajomstvo, 884 00:55:45,430 --> 00:55:48,620 a napriek tomu som nikoho nepoznám na Amazon, a ja som rozhodne nie sú usporiadané akékoľvek tajomstvo 885 00:55:48,620 --> 00:55:52,710 s niekým na Amazon, ako je môj počítač, alebo môj prehliadač robiť toto? 886 00:55:52,710 --> 00:55:55,720 Ukazuje sa, že je to iné typy kryptografie celkom, že tento problém vyriešiť. 887 00:55:55,720 --> 00:55:57,670 Ale pre dnešok, budeme sústrediť na jednoduchá 888 00:55:57,670 --> 00:56:00,290 kde si môžete zariadiť v predstihu vedieť nejaké tajomstvo, 889 00:56:00,290 --> 00:56:03,760 ako 1 alebo nejaké mapovanie medzi tieto a b je. 890 00:56:03,760 --> 00:56:05,840 A proces kryptografie všeobecne zahŕňa to. 891 00:56:05,840 --> 00:56:08,620 Máte nejaký obyčajný text, je znázornené tu na ľavej strane, 892 00:56:08,620 --> 00:56:12,930 ho spustiť cez nejaký druh algoritmu alebo postupu pre šifrovanie ho - 893 00:56:12,930 --> 00:56:15,100 Možno, že to len stane b, b stáva c - 894 00:56:15,100 --> 00:56:17,490 a potom skončiť s ciphertext. 895 00:56:17,490 --> 00:56:20,380 Medzitým, akonáhle váš rozdrviť dostane túto tajnú poznámku, 896 00:56:20,380 --> 00:56:24,200 on alebo ona má potom dešifrovať to tým, že všeobecne zmeny tohto algoritmu 897 00:56:24,200 --> 00:56:27,190 tak, ako sa dostať späť obyčajný text. 898 00:56:27,190 --> 00:56:28,960 Tam sú fyzické inkarnácie tohto. 899 00:56:28,960 --> 00:56:31,680 >> Napríklad, to je malé tajomstvo dekodér krúžok, 900 00:56:31,680 --> 00:56:35,110 a to je krúžok v tom zmysle, že sú dva vytočí tu. 901 00:56:35,110 --> 00:56:38,490 Na vonkajšej okraji tejto veci, je tu písmená A až Z, 902 00:56:38,490 --> 00:56:40,340 aj keď to v náhodnom poradí, 903 00:56:40,340 --> 00:56:42,880 a na vnútornej strane, je to vlastne niektoré čísla 904 00:56:42,880 --> 00:56:46,620 tak, že sa tento prsteň môžete druh obrátiť zvonku, ale nie v 905 00:56:46,620 --> 00:56:49,140 aby sa zoradia čísla s písmenami. 906 00:56:49,140 --> 00:56:53,020 Z filmu s názvom Vianočný príbeh, budete vidieť, že malý Ralphie 907 00:56:53,020 --> 00:56:58,000 bol tak dychtivý zistiť, čo Little Orphan Annie tajný odkaz bol pre neho 908 00:56:58,000 --> 00:57:02,570 ktoré boli odovzdané, myslím, vo forme číselných správ na obilnín krabici 909 00:57:02,570 --> 00:57:07,220 a vy ste museli zhromažďovať všetky tie malé karty, ktoré boli dodané v krabici obilnín, 910 00:57:07,220 --> 00:57:09,770 ste mali na e-mail je v, museli ste sa vrátiť tajný dekodér krúžok 911 00:57:09,770 --> 00:57:13,910 takže si môžete konečne zistiť, čo je mapovanie medzi písmenami a číslicami 912 00:57:13,910 --> 00:57:15,550 alebo písmená a písmená. 913 00:57:15,550 --> 00:57:19,520 Ako v počítači môžeme ísť o zavádzanie alebo zastupujúce takéto veci? 914 00:57:19,520 --> 00:57:22,560 Potrebujeme spôsob, ako vyjadriť seba trochu pružnejšie 915 00:57:22,560 --> 00:57:25,080 ako naše premenné, doteraz dovolené. 916 00:57:25,080 --> 00:57:29,000 Sme mali Ints, sme mali znaky, mali sme plaváky a dvojlôžkových a niekoľkými ďalšími, 917 00:57:29,000 --> 00:57:34,200 ale tie sú jednotlivé kusy pamäte, ktoré nie sú naozaj nám umožňujú vyjadriť veci 918 00:57:34,200 --> 00:57:36,440 ako slov a viet a fráz. 919 00:57:36,440 --> 00:57:38,630 Naozaj, sme len také veci, reťazce, 920 00:57:38,630 --> 00:57:42,660 ale sľubujeme, že je to naozaj len zjednodušenie v CS50 knižnici 921 00:57:42,660 --> 00:57:45,540 že sme v úmysle šupkou späť. 922 00:57:45,540 --> 00:57:47,500 A tak poďme začať robiť, že tu. 923 00:57:47,500 --> 00:57:49,840 Nechaj ma ísť ďalej a otvoriť súbor - 924 00:57:49,840 --> 00:57:54,100 Všetky tieto súbory sú k dispozícii, ako obvykle, online - tzv array.c 925 00:57:54,100 --> 00:57:58,960 vyriešiť problém nesúvisí s reťazcami, ale že maľuje obrázok tu 926 00:57:58,960 --> 00:58:01,520 o tom, ako by sme mohli použiť niečo ako pole. 927 00:58:01,520 --> 00:58:04,050 >> Pole je dátový typ. 928 00:58:04,050 --> 00:58:10,730 Je to typ premennej druhov, ktorý má viac menších dátových typov vnútri nej 929 00:58:10,730 --> 00:58:12,680 chrbtom k sebe k sebe dozadu. 930 00:58:12,680 --> 00:58:16,980 Tak napríklad, ak by sme chceli napísať malý program, ktorý vám dáva váš kvíz priemer 931 00:58:16,980 --> 00:58:19,780 do kurzu ako 50, ktorý má 2 vypočúva, 932 00:58:19,780 --> 00:58:23,450 môžete veľmi ľahko napísať tento program založený aj na niektoré z minulého týždňa materiálu 933 00:58:23,450 --> 00:58:28,830 pomocou GetInt a pár premenných: int quiz1, int quiz2. 934 00:58:28,830 --> 00:58:30,550 A je to celkom jednoduché. 935 00:58:30,550 --> 00:58:33,500 Možno je to 10, 20 riadky kódu max vykonávať program 936 00:58:33,500 --> 00:58:38,940 že žiada užívateľa o 2 kvízov skóre a potom vypočíta ich priemer 937 00:58:38,940 --> 00:58:42,020 pridaním dohromady, delenie 2, a potom tlač výsledkov. 938 00:58:42,020 --> 00:58:46,400 By sme pravdepodobne mohli urobiť celkom ľahko sa po nejakom počte minút. 939 00:58:46,400 --> 00:58:49,450 Ale problém je, že predpokladám, že 50 mal 3 kvízy alebo 4. 940 00:58:49,450 --> 00:58:52,830 Predpokladajme, že ste chceli použiť rovnaký program pre triedu, ktorá mala týždenný kvízy. 941 00:58:52,830 --> 00:58:55,100 Premýšľajte o triedy, ktorá sa raz týždenne kvízy. 942 00:58:55,100 --> 00:58:58,840 Ak je 16 alebo tak týždňov v semestri, teraz máte 16 premenných: 943 00:58:58,840 --> 00:59:03,030 int quiz1, int quiz2, int quiz3, int quiz4. 944 00:59:03,030 --> 00:59:06,870 Akonáhle začnete vidieť túto redundanciu, tento kopírovanie a vkladanie kódu, 945 00:59:06,870 --> 00:59:09,810 by mala začať, aby sa vám, aby tu bolo lepšie spôsob. 946 00:59:09,810 --> 00:59:13,610 A našťastie, pretože z polí je. Takže ideme na to. 947 00:59:13,610 --> 00:59:16,700 Po prvé, dovoľte mi predstaviť veľmi jednoduchú vec, že ​​sme sa nepoužíva tak ďaleko, 948 00:59:16,700 --> 00:59:18,820 ale uvidíte to občas v kóde. 949 00:59:18,820 --> 00:59:21,270 >> To je to, čo sa všeobecne nazýva konštanta. 950 00:59:21,270 --> 00:59:24,410 Takže je to konštanta v tom zmysle, že táto hodnota nikdy sa mení. 951 00:59:24,410 --> 00:59:26,450 Ľudská konvencie pri vytváraní konštantný 952 00:59:26,450 --> 00:59:30,420 ich používajú všetky veľké písmená len preto, že to naozaj vyniká v kóde, 953 00:59:30,420 --> 00:59:34,270 a špeciálne kľúčové slovo, ktoré používate v C je # define. 954 00:59:34,270 --> 00:59:39,970 Takže hovoríme # define, potom medzeru, potom slovo, ktoré chcete použiť pre konštantné meno 955 00:59:39,970 --> 00:59:41,730 a potom je hodnota konštanty. 956 00:59:41,730 --> 00:59:44,710 Všimnite si, že sa líši od priradenia niečo premenné. 957 00:59:44,710 --> 00:59:46,430 Nie je znamienko rovnosti, nie je bodkočiarka. 958 00:59:46,430 --> 00:59:49,140 To je to, čo je všeobecne známe ako preprocesoru smernice, 959 00:59:49,140 --> 00:59:50,840 ale o tom až inokedy. 960 00:59:50,840 --> 00:59:56,350 Pre túto chvíľu, to vytvára nemenný hodnotu s názvom kvízy 961 00:59:56,350 --> 00:59:58,290 ktorého skutočná číselná hodnota je 2. 962 00:59:58,290 --> 01:00:02,180 Takže kdekoľvek vidíte kvízy, kvízy, kvízy v tomto súbore, 963 01:00:02,180 --> 01:00:04,230 že je to len číslo 2. 964 01:00:04,230 --> 01:00:06,550 Keď sa pozriem na hlavnú teraz, poďme sa pozrieť, ako to funguje. 965 01:00:06,550 --> 01:00:09,770 Najprv to vyzerá trochu záhadný, ale je to všetko veci od týždňa 1. 966 01:00:09,770 --> 01:00:12,210 Požiadajte užívateľa, pre stupne. Ako to urobíme? 967 01:00:12,210 --> 01:00:17,350 V riadku 22 - to je naozaj šťavnaté časť - Prehlasujem, plavák 968 01:00:17,350 --> 01:00:23,240 ale nie len jediný plavák. Som prehlasuje, skôr pole s plávajúcou desatinnou čiarkou. 969 01:00:23,240 --> 01:00:27,700 Že premenná bude nazývaný stupňa, ako vyplýva tu, 970 01:00:27,700 --> 01:00:31,420 ale jediný kus novej syntax potom sú tieto hranaté zátvorky. 971 01:00:31,420 --> 01:00:37,280 Skutočnosť, že som povedal, float stupňa a potom otvorte konzolu a potom rad - 972 01:00:37,280 --> 01:00:40,980 výpovednej lehoty, ak je to konštanta je to rovnako ako sme to urobili - 973 01:00:40,980 --> 01:00:46,840 to znamená, "Hey počítač, daj mi 2 plaváky a poďme spoločne nazývajú stupňa." 974 01:00:46,840 --> 01:00:51,780 >> Toto je v kontraste k oveľa nudnejšie procesu, ako je toto: float grade1; 975 01:00:51,780 --> 01:00:54,580 plávať grade2, a tak ďalej. 976 01:00:54,580 --> 01:00:58,310 Takže poľa nám umožňuje realizovať túto myšlienku, ale oveľa menej ledabolo, 977 01:00:58,310 --> 01:01:04,560 takým spôsobom, že môžeme napísať 1 riadok kódu miesto, povedať, 16 pre 16 týždňov semestra. 978 01:01:04,560 --> 01:01:09,060 Nechcel som, aby hard-kód 2, pretože ak si myslíte, že o tom teraz logicky, 979 01:01:09,060 --> 01:01:12,560 Predpokladám, že budúci rok CS50 zmeny 3 kvízy miesto 980 01:01:12,560 --> 01:01:15,010 a mal som číslo 2 tu, mal som číslo 2 tu, 981 01:01:15,010 --> 01:01:17,210 Mal som číslo 2 tu, číslo 2 tu. 982 01:01:17,210 --> 01:01:19,890 To sa stáva veľmi únavné a veľmi ľahko pokaziť 983 01:01:19,890 --> 01:01:26,550 a náhodne zmeniť hodnotu 1 až 3, a prichádza inú hodnotu 2. 984 01:01:26,550 --> 01:01:30,660 Takže budem miesto abstraktné toto preč a použiť táto konštanta, ktorá, 985 01:01:30,660 --> 01:01:32,520 ako už názov napovedá, sa nikdy nezmení. 986 01:01:32,520 --> 01:01:35,870 A teraz bez ohľadu na to, či máme rôzne kvízy Tento rok alebo budúci rok, 987 01:01:35,870 --> 01:01:39,380 Musím sa zmeniť v jednom mieste sa tu na vrchol. 988 01:01:39,380 --> 01:01:41,230 Takže to je všetko, konštanta je. 989 01:01:41,230 --> 01:01:47,100 Medzitým, nová pojmovým znakom je to, že z poľa. 990 01:01:47,100 --> 01:01:55,030 Takže hranaté zátvorky mi toľko plaváky a ma nechá spoločne nazývajú stupňa tu. 991 01:01:55,030 --> 01:01:56,720 Takže teraz sa pozrieme, čo budem robiť. 992 01:01:56,720 --> 01:01:59,220 Tu v súlade 24 je začiatok slučky for. 993 01:01:59,220 --> 01:02:03,380 >> To je naozaj nič vymysleného. Je to len pomocou kvízov miesto hard-kódované číslo. 994 01:02:03,380 --> 01:02:06,740 Ale nič intelektuálne inak, tam z minulého týždňa. 995 01:02:06,740 --> 01:02:11,650 To je len printf, takže printf ("Kvíz #% d% d:") 996 01:02:11,650 --> 01:02:16,670 pretože ja len chcem vytlačiť daj mi kvíz číslo 1 z 2 a potom 2 z 2. 997 01:02:16,670 --> 01:02:18,480 Tak toto je čisto estetického vec. 998 01:02:18,480 --> 01:02:21,000 Ale zaujímavá časť je teraz v súlade 27. 999 01:02:21,000 --> 01:02:27,840 Aby bolo možné vyplniť v jednom z dvoch zástupných symbolov s desatinnou hodnotou, 1000 01:02:27,840 --> 01:02:29,640 môžete znovu použiť hranaté zátvorky. 1001 01:02:29,640 --> 01:02:35,170 V tomto prípade, ja som s použitím aj preto, že to pre sláčiky začala s i rovná, akú hodnotu, zrejme? 1002 01:02:35,170 --> 01:02:36,670 [Študent] 0. >> [Malan] 0. 1003 01:02:36,670 --> 01:02:40,990 Tak na prvý iterácii tohto slučky, je to, ako som napísal v kóde, 1004 01:02:40,990 --> 01:02:46,310 ale na druhej iterácii tohto slučky, je to, ako som napísal vo svojom kóde. 1005 01:02:46,310 --> 01:02:49,970 Ale fakt, že som pomocou premennej je perfektný, pretože, ako už názov napovedá, 1006 01:02:49,970 --> 01:02:52,600 je to rôzne jej hodnotu na každej iterácii, 1007 01:02:52,600 --> 01:02:55,900 tak som vyplnenie tohto poľa jeden bod v čase. 1008 01:02:55,900 --> 01:02:57,380 Čo to pole vyzerá? 1009 01:02:57,380 --> 01:03:01,570 Dôvod, prečo som čerpal super jednoduchý obdĺžnik na obrazovke ešte pred Práve z tohto dôvodu. 1010 01:03:01,570 --> 01:03:05,590 Pole je len kus pamäte nasleduje ďalší kus pamäte 1011 01:03:05,590 --> 01:03:08,570 nasleduje ďalší kus pamäte, a tak ďalej. 1012 01:03:08,570 --> 01:03:13,120 Takže ak má pole je veľkosti 2 v tomto prípade tu, všetko, čo bude robiť 1013 01:03:13,120 --> 01:03:20,200 zadaním v mojich kvízov skóre ako tu - som 100 na toto a potom som dostal 99 na tento jeden - 1014 01:03:20,200 --> 01:03:24,970 potom táto pamäť nemusí byť použitý aj preto, že som sa len opýtal počítač 1015 01:03:24,970 --> 01:03:26,840 pre pole o veľkosti 2. 1016 01:03:26,840 --> 01:03:28,600 Tieto štvorce sú stále tam, že jo? 1017 01:03:28,600 --> 01:03:32,670 Stále máte 2 GB pamäte RAM, aj keď ste len otázkou na 2 plaváky. 1018 01:03:32,670 --> 01:03:36,840 Takže myšlienka polí je, že počítač jednoducho vezme kus pamäte 1019 01:03:36,840 --> 01:03:41,340 a potom rozdeľuje menšie kusy chrbtom k sebe k sebe dozadu. 1020 01:03:41,340 --> 01:03:43,310 A tak to je všetko, pole je. 1021 01:03:43,310 --> 01:03:47,350 >> Je to súvislá kus pamäte vnútri, ktoré si môžete dať veci. 1022 01:03:47,350 --> 01:03:50,700 To sa deje do tej doby predsa len trochu nudný aritmetiku. 1023 01:03:50,700 --> 01:03:54,640 Keby som prejdite tu, to je miesto, kde som sa potom určiť iteráciou cez pole. 1024 01:03:54,640 --> 01:03:58,020 Aj prichádzajú s súčtu všetkých hodnôt v poli, 1025 01:03:58,020 --> 01:04:02,470 a potom som používať koleso funkcie tu skutočne urobiť súčet deleno kvízy. 1026 01:04:02,470 --> 01:04:06,320 Ale dovoľte mi, aby som mávať ruku na to ako akýsi dosť aritmetiky pre teraz. 1027 01:04:06,320 --> 01:04:08,370 Ale všetko, čo robí pre mňa nakoniec je výpočet priemeru. 1028 01:04:08,370 --> 01:04:13,580 Takže prvý kvíz a druhý kvíz deleno 2 a potom tlač to ako int. 1029 01:04:13,580 --> 01:04:17,280 Ale poďme teraz prechod na iný príklad s názvom string1, 1030 01:04:17,280 --> 01:04:20,700 ktorý maľuje podobný obraz, ale pomocou reťazca. 1031 01:04:20,700 --> 01:04:23,940 Nechaj ma ísť napred a zjednodušiť tým, len na chvíľu. 1032 01:04:23,940 --> 01:04:27,090 Odpustite odsadenie pre teraz. 1033 01:04:27,090 --> 01:04:30,870 Oznámenie v súlade 19 tohto príkladu, mám reťazec od užívateľa. 1034 01:04:30,870 --> 01:04:34,640 Všimnime si ale to, čo som robil ďalší v radoch 22 vpred. 1035 01:04:34,640 --> 01:04:41,250 Ja som vlastne iterácie od i do - a to je nový trik - strlen, dĺžka reťazca. 1036 01:04:41,250 --> 01:04:44,880 To je funkcia, ktorá prichádza s C, že ak odovzdať reťazec, 1037 01:04:44,880 --> 01:04:47,730 to vám povie, koľko znakov v tomto reťazci. To je všetko. 1038 01:04:47,730 --> 01:04:51,550 A skutočnosť, že je to strlen miesto reťazca dĺžky je len preto, že je to stručnejší. 1039 01:04:51,550 --> 01:04:55,100 Pred tridsiatimi rokmi, sa páčila písať veci ako stručne, ako je to možné, 1040 01:04:55,100 --> 01:04:57,630 takže sme stále tento dohovor tu. 1041 01:04:57,630 --> 01:05:00,660 i + + znamená len zvyšovať aj v každej iterácii. 1042 01:05:00,660 --> 01:05:02,990 A teraz si toho všimnúť, čo je naozaj zaujímavé. 1043 01:05:02,990 --> 01:05:09,180 V súlade 24, hovorím, "Počítači, daj mi charakter, 8 bitov, a nazývať to c" 1044 01:05:09,180 --> 01:05:12,630 Ale čo je to na pravej strane hovorí? 1045 01:05:13,490 --> 01:05:16,530 V angličtine, čo to predstavuje? 1046 01:05:16,530 --> 01:05:18,730 [Študent] Prvý znak v poli. 1047 01:05:18,730 --> 01:05:20,790 Presne tak. Daj mi prvý znak v poli. 1048 01:05:20,790 --> 01:05:24,090 Alebo všeobecnejšie, daj mi-tej znak v poli. 1049 01:05:24,090 --> 01:05:26,100 A uvedomiť si, že je to dôležité dnes, ako počítačoví vedci, 1050 01:05:26,100 --> 01:05:27,890 sme vlastne počítať od 0. 1051 01:05:27,890 --> 01:05:29,720 >> Nemáte priestor na voľnú úvahu, teraz začať robiť to. 1052 01:05:29,720 --> 01:05:34,160 Teraz sa majú správať v súlade s počítačom očakávania a počítať z 0 1053 01:05:34,160 --> 01:05:38,180 pretože [0] bude prvý znak v reťazci, 1054 01:05:38,180 --> 01:05:42,150 [1] bude druhý, [2] bude tretí a tak ďalej. 1055 01:05:42,150 --> 01:05:49,720 Takže tento program, keď som ho skompilovať to je opäť string1, takže sa string1, 1056 01:05:49,720 --> 01:05:54,670 a teraz som bežať string1 v mojom terminálovom okne. 1057 01:05:54,670 --> 01:05:58,330 Je to čakanie na vstup, takže budem písať v Dávidovi, Enter, 1058 01:05:58,330 --> 01:06:02,540 a teraz sa vytlačí Dávidovi všetko na rôznych tratiach, pretože súpis toho, čo robím. 1059 01:06:02,540 --> 01:06:05,820 Ja tlače jeden znak v čase. 1060 01:06:05,820 --> 01:06:10,100 Nebudeme zachádzať do detailov dnes na to, ale som zmazal pred chvíľou tejto kontroly tu. 1061 01:06:10,100 --> 01:06:15,480 Ukazuje sa, že v prípade, že používateľ sa nechová, nepriateľský, alebo len zmätený, 1062 01:06:15,480 --> 01:06:20,210 môžete skutočne nedávajú reťazec obšírnejšie. 1063 01:06:20,210 --> 01:06:22,860 Ak stlačíte zlé tlačidlo na klávesnici, môžete dať žiadnu reťazec vôbec, 1064 01:06:22,860 --> 01:06:26,950 alebo ak ste škodlivý, môžete skúsiť vložiť do spoločnosti GIGABYTE, to stojí eseje 1065 01:06:26,950 --> 01:06:29,290 vyplniť tento reťazec, a v prípade, že počítač beží z pamäti, 1066 01:06:29,290 --> 01:06:32,710 ukazuje sa, že budeme dostať späť túto špeciálnu hodnotu s názvom NULL. 1067 01:06:32,710 --> 01:06:35,580 Takže teraz, len viem, že tam je to špeciálna hodnota zvaná NULL 1068 01:06:35,580 --> 01:06:39,580 že nám umožní skontrolovať, kedy sme z pamäte, okrem iného. 1069 01:06:39,580 --> 01:06:45,630 Ale keď otvorím sa teraz řetězec2, všimnete jeden rozdiel tu. 1070 01:06:45,630 --> 01:06:48,210 Všimnite si, jeden rozdiel tu s string2. 1071 01:06:48,210 --> 01:06:51,340 S string2, to pre sláčiky je trochu iný. 1072 01:06:51,340 --> 01:06:55,010 >> Dovoľte mi, aby som odstrániť NULL, takže môžeme hovoriť o tých niekedy inokedy. 1073 01:06:55,010 --> 01:06:57,800 Aký je rozdiel asi pre sláčiky tentokrát? 1074 01:06:59,620 --> 01:07:01,670 Môžem sa vrátiť k predchádzajúcemu príkladu. 1075 01:07:01,670 --> 01:07:08,580 Tak to je verzia 2, toto je verzia 1. 1, 2. 1076 01:07:08,580 --> 01:07:11,980 1, 2. 1077 01:07:13,520 --> 01:07:16,660 The strlen volanie je kde? 1078 01:07:16,660 --> 01:07:18,860 Je to v prvej časti slučky for. 1079 01:07:18,860 --> 01:07:21,830 Akékoľvek myšlienky, prečo to robím? Jo. 1080 01:07:21,830 --> 01:07:24,560 [Študent] Takže sa nemusíte volať funkcie zakaždým. 1081 01:07:24,560 --> 01:07:26,440 [Malan] Takže nemáme volanie funkcie zakaždým. Presne tak. 1082 01:07:26,440 --> 01:07:28,300 Spomeňte si na slučiek, ktoré sú super jednoduchý 1083 01:07:28,300 --> 01:07:31,770 akonáhle trochu pochopili, že to je inicializácia, podmienka, a aktualizácie. 1084 01:07:31,770 --> 01:07:34,750 Problémom je, že tento stav sa deje na každej iterácii slučky. 1085 01:07:34,750 --> 01:07:40,010 A tak v tomto príklade tu, čo je zlé na tom, že tento je moja podmienka? 1086 01:07:40,010 --> 01:07:41,830 [Študent] Voláš strlen. 1087 01:07:41,830 --> 01:07:44,340 [Malan] Voláš strlen znovu a znovu a znovu. 1088 01:07:44,340 --> 01:07:47,410 Ale potom, čo som napísal v Dávidovi, dĺžka tohto reťazca je 5, 1089 01:07:47,410 --> 01:07:49,650 a to nebude meniť na každej iterácii slučky 1090 01:07:49,650 --> 01:07:51,670 pretože reťazec je stále D - v-i-d. 1091 01:07:51,670 --> 01:07:55,320 Tak to je náznak, čo sa deje, aby sa stal čoraz dôležitejšie myšlienka 1092 01:07:55,320 --> 01:08:00,410 známy ako konštrukčný rozhodnutie, kde práve nedávajú počítač robiť zbytočnú prácu. 1093 01:08:00,410 --> 01:08:03,920 >> Rovnako ako plížiť náhľad pset2, pset2 v štandardnej edícii 1094 01:08:03,920 --> 01:08:07,030 bude výzvou, aby ste skutočne realizovať určitý počet šifier, 1095 01:08:07,030 --> 01:08:10,410 niektoré číslo šifrovacie algoritmy, takže je možné ako šifrovanie 1096 01:08:10,410 --> 01:08:13,840 a dešifrovať tajné správy veľa ako jednej Ralphie tam dekódovať. 1097 01:08:13,840 --> 01:08:16,810 V hackerské vydanie pset2, budeme ísť trochu ďalej. 1098 01:08:16,810 --> 01:08:19,649 Budeme vám odovzdá súbor od skutočného počítačového systému 1099 01:08:19,649 --> 01:08:23,479 , Ktorý obsahuje veľa užívateľských mien a skutočných zašifrovaných hesiel, 1100 01:08:23,479 --> 01:08:26,939 a výzvou pre hackera vydanie bude bezva týchto hesiel 1101 01:08:26,939 --> 01:08:33,200 a zistiť, čo kryptografie alebo čo tajné bola použitá skutočne generovanie týchto hesiel. 1102 01:08:33,200 --> 01:08:36,109 A ak budeme to urobiť pomocou novej funkcie tu o C 1103 01:08:36,109 --> 01:08:40,630 že ti dám len demo známy ako argumenty príkazového riadku. 1104 01:08:40,630 --> 01:08:44,229 Ukazuje sa, ako si niektorí z vás možno videli v oddiele alebo v učebniciach, 1105 01:08:44,229 --> 01:08:48,260 Hlavným nemusí vždy byť neplatné v zátvorkách. 1106 01:08:48,260 --> 01:08:52,430 Ukazuje sa, že hlavnou môže tiež byť písaný ako to, s dvoma argumentmi, 1107 01:08:52,430 --> 01:08:56,870 argc a ArGV, kde argc je počet slov 1108 01:08:56,870 --> 01:09:00,020 ktoré zadáte po programe menom na príkazovom riadku 1109 01:09:00,020 --> 01:09:03,420 a ArGV je skutočná slová. 1110 01:09:03,420 --> 01:09:07,540 A ako hranaté zátvorky tam naznačujú, ArGV je zrejme poľa. 1111 01:09:07,540 --> 01:09:12,210 Je to bude reťazec za reťazec po reťazec v pamäti. 1112 01:09:12,210 --> 01:09:16,010 >> Takže to, čo budeme môcť robiť počnúc PSet 2 je niečo ako toto. 1113 01:09:16,010 --> 01:09:21,350 Ak urobím argv1, čo je príklad vrátime do pondelka, a spustite ho, 1114 01:09:21,350 --> 01:09:23,370 Všimnite si, že to nevyzerá na nič zatiaľ. 1115 01:09:23,370 --> 01:09:25,490 Je to len vytlačí jeho vlastné meno. 1116 01:09:25,490 --> 01:09:31,479 Ale keď poviem zbohom triedy, všimnite si, že tento program zrejme opakuje 1117 01:09:31,479 --> 01:09:35,479 nad každým zo slov, ktoré boli zadané na príkazovom riadku. 1118 01:09:35,479 --> 01:09:41,630 A prostriedky, ktoré získame prístup k slovách, ktoré užívateľ zadal na príkazovom riadku 1119 01:09:41,630 --> 01:09:49,160 je zmenou Hlavným východiskom tento víkend od int main (void) int main (argc, ArGV) 1120 01:09:49,160 --> 01:09:52,050 a tak sa narodí argumenty príkazového riadku. 1121 01:09:52,050 --> 01:09:57,100 A akonáhle sa dostanete naozaj sofistikovaný na to, budete môcť písať naozaj Tripp programy 1122 01:09:57,100 --> 01:09:59,610 ako tento tu, ktorý ide nad rámec 1123 01:09:59,610 --> 01:10:03,940 niektoré funkcie, že sme urobili tak ďaleko, ale všetko celkom silný. 1124 01:10:03,940 --> 01:10:08,950 >> Takže necháme to s tým na obrazovke, a uvidíme sa v pondelok. 1125 01:10:17,570 --> 01:10:20,000 >> [CS50.TV]