[00:00:00] [Prehrávanie hudby] [00:00:11] DAVIN: Tak jo, chlapi. Tak toto je recenzia pre prvý kvíz. Sú všetci pripravení na kvíz v stredu? ALLISON: Woo! STUDENT: Woo! DAVIN: Jo. ALLISON: Yeah! DAVIN: Ten chlap je pripravený. Ten chlap, dve ruky, pekný. Takže kvíz recenzia dnes, bude to byť asi hodinu a pol. Chystáme sa ísť cez všetky hlavné koncepty, mali by ste vedieť, na kvíz. Chystáme sa ísť cez nejaké kódovanie podľa príklady ručné, ktoré sú na každom teste. A ak budete mať otázky, neváhajte sa zdvihnúť ruku a všetko takhle. No, logistika o kvíz online. Tak ideme ľudí rozdeliť do rôznych miestností. Je založený na ich mená. Takže ak máte nejaké otázky o tom, kde ísť, alebo o tom, čo je materiál, ako, oficiálne slovo o tom, čo sa deje byť na teste, skontrolujte online. A to je všetko aktuálne. Takže v prípade, že nie sú žiadne otázky na začiatok, ideme na štart. A tu je Allison. [00:00:56] [Tlieska] [00:00:57] ALLISON: OK, vďaka, Rob. Vážim. Davin mal prevrátený na to. Toto je neúplný zoznam témy, ako vždy, ako Davin práve povedal. Obráťte sa na dokumentáciu on-line informácie o teste nulové. Ale to je celkom much-- to je na sylabu je všetko, čo sme doteraz prebrali. Všetko je tu fér hra, rovnako ako čokoľvek iné , Ktoré môžu byť uvedené v prednáške. [00:01:21] Môj oddiel, tu je len veľa preskúmania. Existuje niekoľko cvičení že vy ste mohol pracovať. Ale z väčšej časti, naozaj sa chcú dostať do Davin s tými kódom ručnými cvičenia. [00:01:31] Takže ja budem lietať cez to. Ak máte nejaké otázky, zastaviť ma. Zdvihnite ruku. Sľubujem, že budem asi vidieť. Ak nie, tak mávať okolo. Budem sa rýchlo hovoriť. Dúfam, že všetci v poriadku s tým. [00:01:43] OK, špeciálne slovo, Davin samozrejme zabudli listovať týchto snímok. [Smeje sa] Ste v průšvih, človeče. Takže tipy na kvíz nula, prax kódovanie na papieri. Vy sa chystáte zohnať prax sa, že teraz sa Davin, takže nebudete úplne sami. Myslím si, že sme vlastne deje prostredníctvom týchto dvoch funkcií. Tak budete dobre pripravení tam. [00:02:04] Zoznámte sa s vašimi problémovými sád. Tam boli otázky Na základe predchádzajúcich kvízy že sa vás opýta, napríklad pre kód niečo veľmi podobného Mario. Takže byť veľmi dobre oboznámení s váš problém sady, ako aj ako otázky, žiadame vás, na začiatku na formulári že vyplníte, bude poslúži vám veľmi dobre. [00:02:20] Vykonajte predchádzajúce kvíz pod časové obmedzenia. Tieto kvízy sú dlhé. Čas beží veľmi rýchlo. A často si ani neuvedomujú, ako rýchlo to pôjde, kým sa skutočne Vžite sa do týchto obmedzení. Takže ak môžete len vybojovať, viete, 75 minút, a to buď dnes večer alebo zajtra vziať jednu z týchto kvízov pod to, že budete v oveľa lepšej kondícii. [00:02:41] A tiež, vytváranie referenčnú listinu. Pamätajte si, že dostanete jeden strana predné a zadné ako referenčná pre váš kvíz v stredu. Vytvorenie, že je skvelý spôsob, ako študovať. Čokoľvek, čo máte problémy s Ak chcete zahrnúť tam. Čokoľvek, čo vaše TFS boli, ako, je to naozaj dôležité. Mali by ste vedieť, sú možno veci, ktoré ste tam ak nemáte ich do pamäte. Aj keď viete, je naozaj dobre, niekedy s to tam je len trochu pohodlia pre vás, o ktorom viem, kvízy sú stresujúce. Takže akýkoľvek komfort vám môže pomôcť. V poriadku, tiež si spánok a jesť a rád normálne veci že sme vám na kvízy. [00:03:16] Takže rozjazdu ľahké, dátové typy a veľkosti. Ako som povedal, je to len tak sa mi hodil veľa vecí tu, ktoré by ste mali vedieť. Takže máme znakov že sú jeden byte, ints že sú štyri byty, dlhá dlhá, čo je osem bajtov. V podstate je to len vy chcú držať väčší celé čísla. Plaváky, ktoré sú štyri, dvojlôžkové, ktoré sú osem. Opäť platí, že práve vám dáva viac priestor pre vaše plaváky. A potom zadajte hviezdu, takže každý ukazovateľ na 32-bitovom strojmi, čo je všetko, čo chlapi potrebujú vedieť, je štyri bajty. [00:03:44] Takže všetky veci, ktoré by Vieš, možno veci Ak chcete mať na Vaša referenčný list. OK, binárne konverzie na binárne, konverzie na šestnástkovej tam a späť, všetky veci, ktoré by ste mali vedieť. Tak z binárnej do desiatkovej sústavy. Vy chcete, aby sa rýchlo minútu a pokúsiť sa prísť na to, každý z nich a potom mi povedz, čo sú zač? [00:04:06] Mám tiež sladkosti v taške, takže každý kto odpovie dostane cukroví, mimochodom. A ja mám veľa. Nechaj ma chytiť to. Chystám sa dať to Gabe. Takže môžete rozdávať cukrovinky ten, kto to pekné a kooperatívne. [00:04:21] OK, videl som ruku tam vzadu. [00:04:26] STUDENT: Jo, prvá z nich je 42. [00:04:28] ALLISON: Áno, prvá z nich je 42, v poriadku. STUDENT: [nepočuteľné]. [SMIECH] ALLISON: druhá, tam späť v žltej? STUDENT: 110.010. ALLISON: Správne, a to posledný, tu dole? Tiež, jo, viete chcete? Len vyhodil cukroví. Ako sa o cukroví pre každého? [00:04:46] STUDENT: [nepočuteľné], keď sme hotoví. [00:04:47] ALLISON: SSS. A potom ten posledný. Kto chce odpovedať? Priamo tam. [00:04:52] STUDENT: 11100. [00:04:54] ALLISON: 11100, pozri sa na to. Gratulujeme, skvelá práca, všetci. OK, každý druh pochopiť, proces, ako to dosiahnuť? Ste, bude z binárnej do desiatkovej sústavy ako som tendenciu robiť to, píše sa sily 2. Tak hovorím, OK, 0 krát 2-0, takže to je 0, 1 x 2 na prvý, je 2 ísť ďalej týmto spôsobom. Niekto chce, aby som sa explicitne prejsť príklad binárne? OK, v pohode. [00:05:28] Decimal do dvojkovej sústavy je veľmi podobná. Mám vo zvyku písať sa právomoci 2. Začnite s tým, že je najväčší, ale nejde okolo desatinnej čiarky ktoré hľadáte. A potom druh práce si cestu dozadu sčítaním veci podľa potreby. [00:05:42] A potom sa toho, že je to rovnako ako normálne naviac. Ak budete mať prípad, kam pridaním dvoch 1s, to samozrejme bude 2. 2 v binárnej je teraz 1 0, takže budete potrebovať niesť svoje 1 do ďalšieho stĺpca. V pohode. [00:05:59] Hexadecimálne, by to mohlo byť niečo ktorá je o niečo menej známe. Tak ako Rob mi len hovorím dopredu, jeho trik na to je len rozdeliť ju do štyroch bajtov kúsky, OK? Bity, sorry. Vidíš? Vďaka Rob. To je dôvod, prečo ste tu. [NOISE] OK, tak sme len s tým skonči do štyroch bitov kúsky. Tak s binárky hexadecimálne, sa pozrieme na prvé 4, ktorý je, ak máme štyri 1s v riadok, aké číslo to má symbolizovať? [00:06:25] STUDENT: F. [00:06:26] ALLISON: Takže v tomto prípade, čo je 11111111 nebo-- áno? STUDENT: FF. ALLISON: Perfektné, FF. Tak veľký, cukrovinky pre vás. Teraz, ako hexadecimálne do binárne sme Len si myslím o tom trochu opačne. Pre každé číslo alebo písmeno, ktoré máme v šestnástkovej sústave, len previesť ho do svojej štyri bit [Smiech] a jeho štyri bitové konverziu. Takže 5, v tomto prípade, čo je 5, ak sme to predstavuje štyri bity? [00:06:58] STUDENT: 010? Mm-hm. A potom, čo je v skutočnosti 10, by? 1010. Takže máme to tu. Takže prevod medzi hexadecimálne a binárne vlastne nie je tak zlé. Ak sa pozriete na to v štyroch bitov kusy, bude zlatá. Everyone-- áno? [00:07:19] ROB: To je hlúpe, ale ja vždy pamätať A, pretože to má byť 10. A binárny je len 10 10, tak-- [00:07:26] ALLISON: Á, tu to máme. [00:07:27] ROB: Ahoj. [00:07:28] ALLISON: Hele, cukrovinky pre Rob. K dispozícii je non-čokoládové veci tam. Takže môžete mať niektoré z nich. Tak ASCII matematika. Správať. Takže ASCII matematika, ako vy asi dobre pamätať p sada 2 s Visioneer a Caesar, ste veľa to. Pamätajte si, že znaky sú Fundamentally len čísla. Takže môžeme robiť matematiku s nimi, rovnako ako my matematiku s ints. [00:07:54] Takže máme len trochu jednoduchá vec tu. Máme niektorí v to inicializované na 65 rokov. A B rovná hodnote ASCII A plus 1, char C rovná D mínus 1, a Char D rovný 68. Takže sa budeme tlače všetky z nich, ako vidíme tu. A môže mi niekto povedať, Čo to bude tlačiť? STUDENT: [nepočuteľné]. ALLISON: Presne tak, jedna vec k správe je že sme z tlače znaky zakaždým, tu. Sme označenie, aj keď A a B sú ints keď sme deklarovali ich výšky. Sme tlačou ako charaktery percent C a naše printf vyhlásenie, tak budú všetky tlačiť ako znaky. A samozrejme, je hodnota ASCII 65, vytlačiť ako A. ASCII hodnotu A plus 1 by bolo 66, čo by hrdý na to, B. Takže v skutočnosti sme sa tam dostať B C D Každý dobrý? Nejaké otázky? Úžasné. [00:08:52] OK, rozsah. Takže priestor je samozrejme veľmi dôležité pochopiť, tu. Mnoho z vás, ak vás majú kompiláciu chyby, a hovorí, že nemáte prístup k nejakej premennej, je to pravdepodobne preto, že ste definoval v slučke a potom sa pokúsil k nemu prístup z nej, alebo naopak. [00:09:12] Takže priestor vo svojom jadre, to jednoducho určuje, kde hovoríme premenná existuje, kde sme môže zmeniť, kde môžeme pristupovať. Je to tak nejako hovoriť nich sú jediné miesta, kde máte prístup k k tejto premennej. [00:09:26] Takže tieto dva odbory, ktoré sme hovoriť o počas vyučovania sú globálne a lokálne. Tak globálne premenné hovoríme o pri definovaní je nad hlavnou. To znamená, že vaše nekastrovaných Program má k nemu prístup, a existuje tak dlho Pri behu programu, OK? Miestne znamená, že je viac obmedzené na oblasti. Takže kedykoľvek budete mať špecifické funkcie ako odkladací priestor, vždy hovoriť. Vždy sme hovoriť o swapu s A a B. A a B existujú v tejto funkcii. Neexistujú nikde inde. [00:09:56] Rovnako tak, keď máte v prípade, vyhlásenie alebo pre slučky. Vždy, keď sa, napríklad, v pre sláčiky máme int I = 0. Máme nejakú podmienku, a my ju aktualizovať. Aj existuje iba v rámci traky o tom, pre sláčiky. Ak sa pokúsite o prístup inam, váš kompilátor by kričať na vás. Bolo by to, ako to, čo sa snažíte robiť? To neexistuje. Tak to je dva rôzne typy rozsahu. Znamená to, že zmysel pre každého? [00:10:23] Tak napríklad tu, tento je len niekoľko jednoduchých programov. Čo si vy myslíte, že je bude diať v každom bode že sa snažíme tlačiť? Tak toto tu, čo sa bude diať? Študent: To bude tlačiť tri. ALLISON: Správne. Bude vytlačiť tri. Čo je tu? Študent: To nebude fungovať. ALLISON: Nebude to fungovať. Ste z odboru, že jo? Lokálna premenná neexistuje mimo tieto zátvorky v poriadku? A čo potom tu? [00:10:56] STUDENT: [nepočuteľné]. [00:10:57] ALLISON: Čo je? Rob, ísť. [00:10:59] ROB: som práve povedal. Globálne premenné by mali byť globálne premenné podčiarkovník. [00:11:04] ALLISON: Ach, áno, je mi ľúto. Vďaka, Rob. Rob je ako náš rezidentný kompilátor. Bude len kričať na nás, keď sme potrebovať. [Smeje sa] Áno, by mala byť globálne premenné podčiarkovník. Za predpokladu, že tak, že bol globálny podčiarkovník variabilná, čo sa bude diať tu? STUDENT: To bude fungovať. ALLISON: Bude to fungovať. Takže to bude tlačiť, tak len veľmi jednoduchý príklad. OK, prototypy. Tak samozrejme, naozaj zdôrazniť pre vás aby funkcie, ak zmysel vo svojich programoch. Ale samozrejme, keď vás vytvoriť vlastné funkcie, obvykle budete ich definovať po hlavnej. A vy, pokúsim sa ich zavolať hlavné. A ak nechcete použiť prototyp, váš kompilátor bude kričať na vás. [00:11:46] Prototyp je v podstate len hovorím kompilátora že som túto funkciu pod hlavnou. Budem hovoriť predtým, než som ju definovať. Len vydrž. Sľubujem, že je to definované, a bude mať všetko, čo potrebujete. [00:12:00] Takže spôsob, ako to urobiť, je len váš návrat typ, Vaše meno funkcie, váš vstup zoznam. Je to v podstate prvý riadok zo svojej deklarácii funkcie. Je to naozaj všetko, čo je. Ale to je len Všeobecne druh formátu. [00:12:14] Takže v našom príklade, ktoré ste chlapci mali videli v kapitole na nejakom mieste, máme niektoré int kocka, ktorá trvá nejakú int vstupu. A máme náš hlavný funkcia, ktorá volá kocky. A kocky je definovaný po faktu. [00:12:28] Takže ak sme nemali int kocka vstup na vrchole, keď sme hovorili kocka v rámci hlavného, ​​náš prekladač by sa hnevať na nás. Bolo by to ako to, čo to hovoríš? Cube neexistuje. Neviem, na čo sa pýtate na. A ja som jednoducho ísť zastaviť. [00:12:43] Ale pretože sme náš prototyp na vrchole, sme povedali, Viete, keď vidíte kocky, nebojte sa o tom. Sľubujem, že je to definované neskôr. A to vás nechám robiť, čo chcete. Takže ak budete mať funkciu ktorý je vyhlásený po tom, čo tomu hovoríte prvýkrát, budete musieť sú to prototyp hore. [00:13:01] Áno? [00:13:02] ROB: Je to na druhú, nie cubing. [00:13:04] ALLISON: Oh môj bože. Nechcel som have-- Gabe, myslel som, ste náš korektor. OK chalani, majte so mnou, tu. Dúfam, že všetci sa dostať nápad. OK, takže by to malo mať bol štvorcový, nie kocky. Ale myšlienka zostáva rovnaká. Akejkoľvek funkcie, ktoré sme volanie po skutočnosť by mala mať prototyp. Všetci dobre s tým? Akékoľvek iné preklepy? OK. Všetky tu preklepy, než začneme, Robe? [Smiech] OK, tak structs. V podstate, structs vám umožňujú vytvoriť svoj vlastný dátový typ. Toľko ako int alebo char alebo float, je to len iný typ. Páči sa mi, že na to, ako, ako, vytvoriť svoj vlastný dátový typ. Tak to môžete urobiť. A to platí rôznych typov dát. [00:13:56] Takže ak si spomínate, v poli sme môže mať iba veci podobného typu. Štruktúry nám umožňujú držať viac veci rôznych typov. Takže v tomto prípade tu máme majú struct názvom Študent, tu menovaný na dne. A máme nejaké int id a niektoré string name. Takže je to len iný typ dát. Teraz máme dátový typ s názvom Student. [00:14:20] Preto, že my môžeme myslieť na to len ako iný typ dát, môžeme deklarovať premenné ako sme každý iný. Takže namiesto toho, len mať, ako, int študent, len musíme študenta, Študent 1. Oh, pozri. Je to Rob. Tak tu sme vyhlásenia struct, alebo variabilné volal študentka 1 typu študenta. Takže to bude mať id a názov s ním spojené. [00:14:45] A spôsob, ako k nim pristupovať prvky v našej struct je s operátorom bodka, tu. Takže v tomto prípade sme vyhlásil niektorých študentov 1. Pridelený sme ID na 1. A my priradený názov ako Rob. OK, všetci dobre s tým? Použite ho iba like-- áno? [00:15:06] STUDENT: Jo, keď typedef-- robiť, musíme použiť typedef? [00:15:09] ALLISON: Takže typedef len hovorí that-- Rob, môžete ma opravte na to, či som wrong-- ale typedef je proste skutočne vyhlásil to ako druh, ktorý môžete použiť, že? [00:15:19] ROB: Jo, je to v podstate, takže je to len vytváranie alias alebo prezývka pre určitý typ. Takže môžete písať, že [nepočuteľné]. Takže [nepočuteľné] existuje, a teraz len musíme [Nepočuteľné] znamená presne to isté. A tak tu máme napísaný, myslím, niektoré struct typ 2 [nepočuteľné]. Takže je to len prezývka pre daný typ. [00:15:40] STUDENT: String [nepočuteľné] knižnica bolo napísané sa ako char hviezdy. [00:15:51] ALLISON: Pre naše účely tu, ak ste vyhlásil struct, proste typedef struct. OK, takže dopredu, to je len normálne premenná tu. Sme pristupovať s bodkou. ak máme ukazovateľ na struct, môžeme v skutočnosti použiť šípku, ktorá je celkom v pohode. [00:16:10] Takže v tomto prípade máme ukazovateľ na študent 1, ktorý je typu študenta. Pamätajte si, že so svojím ukazovateľ konštrukcie, Chcete bez ohľadu na typ ukazovateľ ukazuje sa, že je na začiatku. Takže máme nejaký študent, 1, tu. A od tej študenta 1 je teraz špicatý, skutočne môžeme ísť študentov názvu 1 arrow miesto bodky, pretože je to ukazovateľ, a priradiť Rob. A teraz, ak chceme zmeniť Rob na Davin, je to len, že vám ukazuje iný spôsob, ako to urobiť. [00:16:43] Takže namiesto toho, pomocou šípky, môžete môže also-- budem dokončiť a potom vziať question-- by ste mohli tiež vykonať referenčné študenta 1. To hovorí, ako ísť do čo je na študenta 1, ktorá by naša študentka struct. Pristupovať s bodkou a prvkom ktoré chcete, a potom ho priradiť. Tam bola otázka. Žiak: Áno, tak ako to máte používať [nepočuteľné], keď ste robí študentov hviezda bez [Nepočuteľné] študentka? ALLISON: Pretože tento vytvára ukazovateľ. ROB: Budeme o tom hovoriť. ALLISON: Budeme hovoriť o tom neskôr v recenzii. Takže stačí sa držať tej myšlienke. Ak sa vám stále vadí na koniec, prišiel hovoriť s niekým z nás. [00:17:20] Tak to robiť presne to isté. Sme len zobrazujúci dva rôzne spôsoby, ako to urobiť. Študent 1 je teraz ukazovateľ tak, môžete pristupovať k názvu prvku v struct s šípkou. Alebo môžete dereferencia ukazovateľom, a k nemu pristupovať ako obvykle. Má to zmysel každého? Ak je celá ukazovateľ veci sú trochu mätúce, Gabe bude hovoriť o tom, a potom možno to bude dávať väčší zmysel. Áno? [00:17:46] Žiak: Áno, tak ako je odlišné od? ALLISON: predchádzajúca? Takže študent 1 v tomto prípad nie je ukazovateľ. Je to len vaša aktuálna struct. [00:17:54] STUDENT: OK. [00:17:55] ALLISON: vzhľadom k tomu, je tento je ukazovateľ na struct. [00:17:58] STUDENT: OK, ale robí to druh skončiť pracovný rovnaký [nepočuteľné]. [00:18:02] ALLISON: Účinne funguje rovnako. Váš syntax je proste iný. STUDENT: OK. [00:18:05] ALLISON: Jo, sú fakticky rovnaké. Je to len v závislosti od kontextu, budete chcieť jeden cez druhého. Áno? [00:18:11] STUDENT: Keď to urobíte odkazy na 1-- ALLISON: Mm-hm? STUDENT: Prečo vás majú zátvorky? ALLISON: Vzhľadom k tomu, študentka 1 je ukazovateľ. Takže je potrebné, aby sa ubezpečil, že ste len dereferencing ukazovateľ. [00:18:22] STUDENT: OK. [00:18:23] ALLISON: Takže v tomto prípade tu, Zátvorky okolo neho znamená, že ste dereferencing študenta 1. Takže ak budete žiak 1 bod, čo je vaša struct. Takže teraz si môžete myslieť to ako, že struct, takže môžeme použiť náš normálnu prevádzku dot. Nejaké ďalšie otázky? Cool, úžasné. [00:18:48] Tak to posledné, čo si myslím, že je môj posledný záber, woo! OK, tak s plávajúcou desatinnou čiarkou nepresnosť. Bavili sme sa krátko o to počas prednášky. V podstate, máme nekonečne veľa reálnych čísel. A ak niekto z vás chlapci rád matematiku, je tu všetky druhy super veci u nás. [00:19:05] Ale existuje nekonečne veľa reálnych čísel. Ale sú to len konečný počet bitov, ktoré máme. Takže ste vždy majú nepresnosti, to je všetko. A to je to len trochu ako niečo, čo by ste mali vedieť. Že rovnako ako my, môže vás požiadať, prečo s plávajúcou desatinnou čiarkou nepresnosť existujú? Takže len niečo, čo by ste mali vedieť. A s tým som sústruženie to sa k ukazovateľmi. [00:19:27] Binky: Ahoj, chlapci. Volám Binky. Budem hovoriť o ukazovateli. Jo, takže ukazovateľa je v skutočnosti moja obľúbená časť v tomto kurze. Takže len aby bolo jasné, Allison bol tu hovorí, tak z dôvodu, why-- jediný rozdiel, veľký rozdiel bol spôsob, prehlasujeme veci. Takže študent, hviezda znamená, že tento je ukazovateľ na študenta. Vzhľadom k tomu snímke pred, študent Skutočná struct, ako skutočný študent, obsahujúce niektoré z týchto vecí. [00:19:54] A dôvod, prečo sme Ak to-- áno, Davin? [00:19:57] DAVIN: Čo šípka znamená? [00:19:58] Binky: Prostriedky šípkami presne rovnaké ako to. Takže nemáte naozaj potrebujú šípku. Rovnako ako, keď ste jediný program v C, stačí použiť to. Ospravedlňujeme sa, ale ja nie, čo to je. Stačí použiť túto syntax. [00:20:14] Ale niektorí ľudia, keď boli projektovanie C, sa prišlo, že ľudia používa túto syntax tak, že sa bude páčiť len prísť s konštrukciou syntaxe pre to. A to sa konalo v forma tohto šípky. A je to naozaj pekné, pretože symbolizuje niečo ako by sme vlastne po tento šíp, tento ukazovateľ, k nejaké miesto v pamäti. A keď sa tam dostaneme, chceme pozrite sa na názov tohto študenta, ak to dáva zmysel. OK? [00:20:43] Tak to je presne to isté. To je presne to isté, ako to. Dostanú zostavený presne rovnaký, OK? A dôvod, prečo sme tu malloc niečo, to preto, že v tomto prípade, naša premenná je vlastne len ukazovateľ premenná. Takže máme len nejaký priestor v pamäti, že drží ukazovateľ. Sme naozaj nemajú žiadne miesto že má skutočné Struct. [00:21:06] Takže to musí byť vykonané v dvoch krokoch. Musíme vytvoriť Pamäť dať struct v. A musíme vytvoriť pamäti, aby ukazovateľ v. Takže sú v podstate dve rôzne premenné, tu. Jedným z nich je typ študenta, okrem neho nie je naozaj mať názov. A druhý je typu študenta hviezdy. A potom študentské 1 bodov tam, ak to zmysel. OK? [00:21:28] Takže dôvod, prečo používame ukazovateľa je skutočnosť, že všetko v počítači, každá premenná v počítači, má dve veci. To má svoju hodnotu. A to je jeho adresu. A dobrý spôsob, ako ponímať je tu veľa problémov, keď sa skúste použiť funkcie. A budeme sa snažiť, aby pozrite sa do jednej z nich. Konkrétne to bude premýšľať o pamäti ako pole. [00:21:50] Vždy si myslel, premenných keď hovoríte, že na rovná 5. Myslíte si, že uvedenie 5 do krabice. Takže čo keď chcete odovzdať že int do funkcie? Práve ste pass-- vôbec sa mi nepáči víš-- x do funkcie. Ale čo sa stane, je normálne ako ľudia, si by si myslel niečo ako, že som odovzdaním pole človeka. A to naozaj nie je stane v počítačoch. Čo sa stane, je, skopírovať hodnotu krabice na krabicu osoby. [00:22:17] Takže to, čo sa snažím povedať je, že v prípade, Máte function-- tu sorry--, ak máme funkciu ako na päť až tam, ak sa pokúsite odovzdať premennú, je to len bude kopírovať. Ak initialize nx sa rovná 3, to sa deje kopírovať túto hodnotu do premennej A tam hore. OK, a to je dôvod, druh Preto chceme používať ukazovatele. Vzhľadom k tomu, namiesto toho, dávať len hodnotu, nie len okolo len hodnota funkcie, chceme odovzdať odkazom. To, čo nazývame prihrávku odkazom je druh dať políčko na funkciu, tak, aby funkcie možno tiež zmeniť hodnoty v tomto poli. [00:22:53] OK, takže len niektoré základné ukazovatele veci je vytvoriť ukazovatele, stačí deklarovať to typ, a si dať hviezdu hneď po ňom. A typ je len čo ste ukázal na. Takže ak je to int hviezda, ste ukázal na int. Ak je to char hviezda, ste ukázal na grafe. A ak je to študent hviezda, ste ukázal na študenta. OK? [00:23:08] A sú všetky 4 bajty. Pretože táto premenná to nie je v skutočnosti je potrebné držať char, int, alebo študent. Chce to len držať adresu. To je dôvod, prečo sú všetky 4 bajty dlho v normálnom 32-bitové stroje. OK? Tak tu, x je premenná, ktorá poukazuje int. Y ukazuje na char. z bodov na plaváku. Akékoľvek otázky tu? V pohode. A sú tam dva rôzne symboly, ktoré majú mať na mysli, keď prichádza na ukazovateľ. Tak odkazov a dereferencing sú tie veľké. Takže ampersand z názov premennej vám dáva? STUDENT: adresa. Binky: adresa. Takže ak ste deklarovať INT rovná 5, potom ampersand zo bude vám adresu. A môžete skutočne vyskúšať vytlačiť to a vidieť akú adresu v pamäti vaše premenná má. A potom dereferencing-- tak, aby bolo odkazovanie, získanie address-- dereferencing je presný opak. OK, rovnako ako doby je opak divízie, hviezda je opakom ampersand. Takže dereferencing prostriedky tam. Takže ak dáte star-- I nie víš-- 50, to je pokúsim sa ísť na adresu číslo 50 vo vnútri počítača. OK, a prečo vidíme že sa protiklady? Pretože to, čo sa stane, keď robíte niečo ako hviezda ampersand? No, ampersand vám adresu premenné, adresa. Ale hviezda znamená ísť tam. [00:24:35] Takže to, čo sa stane, keď vás prejdite na adresu? Práve ste dostať, nie? Tak bude na adresu je to isté ako. To je dôvod, prečo oni sú zvyčajne uvedené same-- tejto a to sa odkazuje ako opak operátori. OK? Tak v pohode. [00:24:53] Pod kapotou, napríklad, ak budeme deklarovať int x sa rovná 5, máme premennú. A pamätajte si, že som povedal, každý proměnná-- a to je dobrá vec aby v mind-- má dva rôzne veci spojené s. Má prejednaná, ako aj hodnotu. OK? [00:25:07] Takže hodnota je v tomto prípade 5. A adresa je-- povedzme, že som aby sa niečo up-- je to 0x04. A jediný dôvod, prečo sme sa zvyčajne predstavujú adresy v šestnástkovej sústave je, pretože je to ako dobro. Hodí sa binárne. Je to ľahké previesť do az binárne. A to nie je príliš veľký, ak máte veľmi veľké číslo. Tak sme chceli použiť hexadecimálny v tlači adries. Ale ja som mohol predstavovať to ako celé číslo. To je v poriadku. [00:25:32] A tak to má adresu 4 a hodnota 5. A potom som si povedal, int hviezda ukazovateľ. Tak toto je iný typ, oznámenia. Int hviezda ukazovateľ sa rovná adresa x. Takže to, čo sa bude hodnota PTR? To bude adresa x, tu dole. OK, takže hodnota bude byť rovnaká ako adresa. To je úloha pracovať robím. A potom ptr bude mať vlastné adresu, ktoré ukázalo, v tomto prípade 8, OK? [00:26:03] A potom som sa vytvoriť novú kópiu celé číslo. A ja hovorím, int kópie rovná ísť tam. Takže choďte do toho, čo je ptr ukazuje. No, čo to ptr mať? PTR je 0x04. Čo sa stane, keď sa pokúsim tam? Nájdem chlapa, ktorý má Adresa x a kto má adresu 4. A kto má riešiť štyri je x. Dáva to zmysel? Áno? [00:26:28] STUDENT: V tomto prípade je ukazovateľ v zásobníku? [00:26:32] Binky: V tomto prípade, it's-- dobrá otázka. Nechcel som naozaj myslíte, že o tom pri zostavovaní týchto adries. Ale ak je to, ako, všetko sa jedná o lokálne premenné, potom x je žiť in-- všetko bude žiť v zásobníku. Takže všetko, čo sa deje aby ukázal na seba. Dostanete len haldy, keď začnete používať malloc, že ​​jo? [00:26:52] Takže ak si spomínate stack je zakaždým volanie funkcie v programe, ako je, napríklad hlavná, alebo akékoľvek ďalšie funkcie, ako je printf. Všetky lokálne premenné sú bude si dať do rámca zásobníka. A oni dostanú ako nahromadili v zásobníku. To je to, čo sa hovorí stack. A všetky tie lokálne premenné sú tam bude. A heap-- a budeme hovoriť viac o tom later-- haldy je miesto, kde všetky dynamicky alokovanej pamäte životy. V pohode? [00:27:20] Ideme k tomuto snímku. Áno? [00:27:22] Žiak: Prečo nie je pravý kópie návrate 0x04? [00:27:27] Binky: Prečo nie je pravý kópie návrate 0x04? [00:27:30] Žiak: Prečo nie je to, že [nepočuteľné]? [00:27:32] Binky: Vzhľadom k tomu, aká je hodnota PTR? [00:27:37] STUDENT: 0x04. [00:27:38] Binky: 0x04. Čo sa stane, keď idete na 0x04? Čo získate? [00:27:41] STUDENT: Oh, OK. Binky: Vidíte? Študent: Áno. Binky: Takže ste si 5. Takže kópia bude mať 5, ak to dáva zmysel. Áno? [00:27:49] STUDENT: Mohli by sme sa dostali 5 V poli Hodnota [nepočuteľné] Dáme Ak kopírovať int [nepočuteľné]. [00:27:55] Binky: Int-- by sme, jo. To by urobil skoro to isté. Ale týmto spôsobom, môžeme prejsť riešenie k funkciám. A to je super vec budeme robiť práve teraz. [00:28:06] Takže tento druh cvičenia vždy príde on-- veľmi zvyčajne príde na kvízy. Takže je to naozaj dobré, aby sa pokúsili robiť také veci sami. A tak sa snaží sledovať, čo na adresu je, a chcete, aby hodnoty premenných sú v každom bode. Tak toto je presne to, čo budeme robiť. Tu máme kroky, jeden, dva, tri, štyri, päť. Jedna, dve, tri, štyri, päť. A budeme sledovať z hodnoty x a. [00:28:34] Takže, čo to robí, ak je to buggy kód, snažíme sa robiť na päť. Takže sa snažíme dostať do variabilný a zmeňte jej hodnotu na 5. A spomínam na svoju analógiu s krabice a podal krabicu s niekým? Takže hlavné je toto políčko s názvom x. A obsahuje hodnotu 3. A ja sa snažím odovzdať Tento box sa na päť. [00:28:58] A ja chcem, aby päť zmeniť Hodnota tohto poľa 5. A potom som len vytlačiť hodnotu x. To je to, čo môj function-- To je to, čo sa snažím robiť. Len sa snažím aktualizovať hodnota x až 5. Je to jasné, čo funkcia robí? [00:29:16] OK, takže to, čo sa bude hodnoty x a tu, prvý riadok, tesne pred prvou line-- by som say-- programu? [00:29:27] STUDENT: Pravdepodobne odpadky. [00:29:28] Binky: Len odpadky veci. Tak som dal N / A. Tak sme naozaj neviem. Rovnako ako ani ešte neexistuje, pretože sme povolaní k piatim. Int nie je deklarovaný. A x bude existovať tu, ale máme naozaj priradená žiadnu hodnotu, takže v poriadku? [00:29:46] A potom, čo sa bude hodnoty x a A v počte dvoch? [00:29:54] STUDENT: [nepočuteľné]. [00:29:55] Binky: Takže x bude 3. Je to jednoduché, pretože sme priradenie k nej 3. A ešte neexistuje pretože len žije v päť. Takže budem mať 3 a nič. alebo ako smeti, čokoľvek, v skutočnosti definovaný. A teraz, toto je dôležitý riadok. Tu sa budeme vlastne volania na päť. A pamätajte si, čo som povedal. Nikdy sme sa prejsť v krabici. Práve sme skopírovať hodnotu box na iné pole. To je všetko, počítače vykonať, skopírujte veci z jedného miesta na druhé. [00:30:27] Tak na päť, čo to vlastne robí je skopíruje hodnota x sa. Takže to, čo sa tu bude? Hodnoty x a. 3 a 3, budeme len kopírovať sa cez od x. V pohode. [00:30:45] Teraz sme tu. A teraz ideme aktualizovať rovná 5. Čo sa bude diať v súlade štyri? [00:30:55] STUDENT: [nepočuteľné]. [00:30:56] Binky: sa aktualizuje, ale x nedostal aktualizované. Pretože x stále žije v hlavnom, je to úplne iný blok pamäte. Je to iná premenná. je ďalšia premenná. Oni sa stalo, že rovnaká hodnota, pretože ja skopírované hodnoty x. Ale teraz keď som si rovná 5, je nie je naozaj vplyv x v žiadnom prípade. To je zložitejšia časť. Má zmysel, aby všetky? Áno? STUDENT: Ešte jedna otázka, máte 3. Prečo already-- oh, nie, to je 3. Ospravedlňujeme sa, ale nevadí. Čítal som 5. [00:31:29] Binky: Jo, 3, 3. [00:31:30] STUDENT: [nepočuteľné], jo. Binky: A potom sme priradiť 5 až , Ale naozaj nemení x. Dobré? Študent: Áno. Binky: Áno? Môžete mi vysvetliť, ako znovu dostane kopírovať [nepočuteľné]? [00:31:42] Binky: OK, takže keď zavoláte do piatich x, takže tento riadok kódu tu. na päť x, čo je x? x je len 3 v tomto bode, že jo? Takže si mohol myslieť na umiestnenie 3 sem a zabudnúť x. Stačí dať 3 tu. Rovnako ako, že budeme kopírovať cez hodnota x na int a, že je tam hore. OK? [00:32:13] Takže hodnota x je 3. Budeme kopírovať 3 sa k. A to všetko ďalší blok pamäti, to iné premenné tzv bude mať 3, rovnako. Dáva to zmysel? Áno? [00:32:25] STUDENT: Dáte Ak do piatich, ako majú to ako celé číslo x miesto, by to opraviť všetko? [00:32:32] Binky: Ak je to integer-- nie, že by sa opraviť všetko. Tak to je veľmi dobrá otázka. To nie je naozaj jedno, čo zavoláte tieto premenné. Opäť platí, že to bude otázka rozsahu, pretože nie sme rovnakí x. Sú úplne rôzne medzery v pamäti. STUDENT: [nepočuteľné]. Binky: Takže to naozaj nie je na tom, čo im hovoríte. To nevyrieši veci, OK? Ďalšie otázky? Áno? [00:32:55] Žiak: Ako je to späť do číslo päť [nepočuteľné]? Binky: OK, sme to ešte neurobili. Poďme na číslo päť, potom. [00:33:03] STUDENT: [nepočuteľné]? [00:33:04] Binky: Čo je? [00:33:05] STUDENT: Máte návrat vôbec? Binky: Nemáme návrat, nie hlavné. Ale hlavné vrací0 automaticky ak sa nič nevracia. Áno? [00:33:15] STUDENT: Mohli by ste, aby main-- alebo môžete vykonať päť vrátiť? [00:33:24] Binky: Mohli by sme mať päť vrátiť, áno. Ale potom by sme museli priradiť x rovná návratovú hodnotu na päť, ktoré by boli mierne iný program. Že to bude fungovať. Ale to, čo chceme urobiť, je to, čo je volal niečo zmeniť na svojom mieste. Takže chceme, aby skutočne zmeniť tento box a nestarať sa o nutnosti vrátiť sa hodnoty alebo tak niečo. OK? [00:33:46] To je rovnako ako funkcia odkladací David ukázal v prednáške, s výnimkou, že som obchoduje iba s jednou premennou. A použil dve, takže int a, b a potom dočasné premenné a ktovie čo ešte. OK? Takže to, čo je na poslednom riadku? Po piatich vráti, je to jednoducho pôjde preč. Nebudeme mať už, a iba x bude stále žiť. [00:34:10] A hádajte, čo? x nezmenil jeho hodnotu, po tom všetkom, pretože sme iba zmenou hodnoty. To je dôvod, prečo bola 3 x v celom texte. OK? Dobre. Takže tento program nie je dosiahnuť to, čo sme chceli. Teraz sa poďme opraviť. [00:34:24] A oprava programu je pomocou ukazovateľov. Čo robíme, je, máme tri linky, ktoré sú odlišné. Prvý z nich je, že nie sme okolo x. Sme absolvovaní adresu x. Takže namiesto toho, skopírovanie hodnota poľa Som stále hodláte kopírovať nad niečím. Ale ja som skopírovanie adresa z krabice. [00:34:45] Takže keď som sa prejsť adresu poľa sa na päť, a potom na päť bude schopný zistiť, že v pamäte a zmeniť jeho hodnotu. [00:34:53] Tak a potom tam mám že už nie je int. je int hviezda. Je to ukazovateľ na celé číslo. A potom, pretože som okolo riešiť tu, a potom to, čo mám robiť nie je rovná 5, pretože drží adresu. Takže to, čo chcem urobiť, je ísť tam a aktualizáciu obsahu tejto adrese s 5. [00:35:18] OK, tak sa poďme prejsť všetky linky po jednom. Takže keď začnem tu, som ešte N / A, N / N / za všetko, čo v prvej line, pretože som naozaj vyhlásil ešte veci. A potom riadok dva, mám x rovná 3. Int hviezda neexistujú, to isté ako predtým. [00:35:39] Teraz to začína byť zaujímavé. Takže idem prejsť. A predpokladajme, že adresa x je 12 v šestnástkovej sústave. Jednoducho predpokladajú, že táto. Urobil som to. Takže to, čo mám okolo tu je päť. Mám okolo 12. [00:35:56] Takže to, čo hodnota sa má? [00:36:04] STUDENT: [nepočuteľné]. [00:36:06] Binky: Čože? [00:36:06] STUDENT: [nepočuteľné]. Binky: Jo, ako, sa poďme Predpokladajme, že sme tu a teraz. Pýtam sa. [00:36:12] STUDENT: [nepočuteľné]. [00:36:13] Binky: Začalo. [00:36:14] STUDENT: [nepočuteľné]. Binky: Pretože sme prešli niečo, čo sa funkcie. Áno? [00:36:19] STUDENT: Adresa x. Binky: Bude to majú adresu x. A adresa x 12, dobrá. Takže x bude 3, pretože sme sa naozaj zmenil x doteraz. A potom bude 0x12, tak adresu x, pretože to je to, čo sme míňali na päť. [00:36:38] A čo sa potom stane keď sa budeme snažiť, aby tam ísť? Čo budeme hľadať? Takže ak sa pokúsite tlačiť hrať, budeme sledovať túto adresu a získať hodnotu vnútri. A hodnota je len Hodnota, ktorú x má, pretože to je adresa x, ktorý bude 3. Sme dobre? [00:36:56] OK, a potom už sme vlastne tam. A my aktualizovať čokoľvek je v tejto adrese 12. Robíme to 5. Takže teraz obaja x a hviezda sú 5. [00:37:13] Prečo tomu tak je? Vzhľadom k tomu, adresa x je 12. A má tiež 12 ako jeho hodnotu. Takže ak budeme nasledovať 12, my sme len tak nájsť x. Takže bez ohľadu robíme s hviezda sa stane x, pretože obsahuje adresa x. OK? [00:37:34] A to je ako jadru opravy. Takže teraz sme schopní, z piatich, v skutočnosti prístup k pamäti, ktorá žila v main. Takže to pamäť nežije do päť, rovnako ako predtým, táto adresa 12. A my sme boli schopní ísť tam a zmeňte jej hodnotu na 5. [00:37:50] A potom, keď sa vrátime, zabúdame. Máme zabudnúť na hviezdy a. A x je stále päť. Takže ak chcete, aby implementovať funkciu swap by ste jednoducho presne to isté, okrem musíte tu int hviezdy, a tak ďalej a tak ďalej. OK? Sme dobre? V pohode. [00:38:10] Takže ukazovateľ aritmetiku. To je trochu zložité tému. Tak to dopadá, že ukazovatele sú len celé čísla. Môžete si ich predstaviť ako celé čísla. Vzhľadom k tomu, v pamäti máte, ako adresa pamäti nula, jedna, dva, tri, štyri, päť. Takže môžeme zhrnúť adresy pamäti. [00:38:23] A to je zvyčajne to, čo robíte, keď ste v poli a, napr. Pole je rovnako ako susediace blok pamäti, hŕbu znakov, napríklad kopa ints. Takže ak chcete ísť do Druhý int alebo tretej int, stačí sčítať niečo ako prvý adresu, a budete sa tam dostať. Tak toto je naozaj užitočné pre to. [00:38:39] A to, aby na pamäti, aj keď je že to nie je len rád normálne aritmetika v tom zmysle, že ak máte čo do činenia s, povedzme, int hviezda, a pridáte 1 na to, potom nebudeš pridať 1 na adresu, budete sa pridajú 4 na adresu. Vzhľadom k tomu, int je 4 bajty. [00:38:57] Tak to je rovnako ako chôdzi na pole. Ak máme rad množstvom ints a potom sa snažíme ísť do druhej, je to v podstate len ako súčet adresa prvého plus 1. Ale to nebude be-- len povedzme, že adresa prvého je 4. Tu, v tomto prípade. A ak by sme zhrnúť, tak to je to, čo sa deje. Máme int. Int x sa rovná 5. X má hodnotu 5. A my inicializovať ukazovateľ, int y int hviezda y sa rovná adresu x. [00:39:31] Predpokladajme, že adresa x 4. Čo sa bude diať Teraz, keď súčet pridať 1 k y? Bude to vlastne súčet 4, nie len 1. Tak pridám 1, ale v skutočnosti pridané 4, pretože počítač je šikovný. Takže to bude naozaj sčítať aj časy veľkosť typu ukazovatele. OK? [00:39:58] Takže ak to bolo znak, napríklad, ak by sa jednalo o char hviezda y, a keď sme pridali 1, potom by byť 5, pretože znak je 1 bajt. Dobré? [00:40:10] A konečne sme sa dostali do ukazovatele a polia. Ukazuje sa, že zakaždým, keď máte čo do činenia s radom, ste vlastne do činenia s ukazovateľom. Veľmi pekné koncepčné dôvod pre je to, že polia sú veľmi veľké. Takže pamätajte, že som povedal, že zakaždým, keď sa prejsť veci okolo seba, kopírovanie všetko. Takže ak máte pole To je naozaj, ale naozaj veľký, nemáte naozaj chcete kopírovať všetko zakaždým ho prejsť okolo druhého funkcie, pretože to je jednoducho obrovské množstvo práce. Takže to, čo robíte, je hneď za adresa prvého bajtu. A potom funkcia bude mať prístup na všetky prvky v tomto poli. Takže si prešiel rad jeho adresy, takže adresa prvého bajtu. [00:40:48] Takže ak budeme deklarovať int pole 3, tu vieme, Ako získať prístup k prvej prvok pomocou držiaka notácie. Ak si pamätáte na držiak notácie, pole držiak 0 sa rovná 1. No, bolo by to presne rovnako ako práve tam a dal 1. OK, je presne to isté. Takže držiaku zápisu v tu bude rovnaký ako tomto riadku. [00:41:13] A hádajte, čo sa držiak zápisnicu pre pole držiaku 1 bude? To bude len to isté, ako to. Takže pridať jeden na pole. Presunúť jeden po pamäti. Choďte tam, a dať 2. OK? A táto linka je to isté. Chceme ísť do tretej box, takže polia a 2. Choďte tam, a dal 3. Tak v pamäti, čo je sa stane, je, že sme bude mať 1, 2, a 3, tri prvky tohto poľa. [00:41:44] Mohli sme to urobili pomocou naše zoznámiť držiak notácie. Chcem len vy vedieť že sú to isté. OK, otázky týkajúce sa tohto? Nice. Teraz idem do ruky to sa k Hannah, [00:41:59] HANNAH: Yay, Yee-haw. [00:42:00] Binky: Rozprávanie o pamäte a článok veci. [APPLAUSE] [00:42:06] HANNAH: Ahoj, v pohode, takže sme hovoriť trochu viac o pamäti, ktoré sme práve riešiť pomocou ukazovateľov. Takže tam sú dve hlavné časti pamäti, že sme zaoberá. Máme hromadu, ktorá rastie up v spodnej a haldy, ktoré ide dole z vrcholu. A zásobník bude držať všetky naše inštančný premenné. Tak každý volanie funkcie dostane vlastný malý rámik na zásobníku. Tak ako Gabe už bolo spomenuté, ak sa znovu a znovu volanie funkcie, budeme na seba veci na zásobníku. [00:42:35] A podobne, haldy, ktorý začína na vrchole bude držať všetky pamäte že sme dynamicky prideliť. A tak ako my dynamicky alokovať pamäť, to príde dole smerom ku dnu. Pár vecí, byť vedomí, ak sme pomocou zásobníka a haldy, s komínom, ak máme príliš many-- poďme say-- rekurzívne volanie, a my sme volaní funkcie znova, a znova a znova a znova, a to je stohovanie up, stohovanie up, stohovanie up. A to bude naraziť do haldy. Chystáme sa spustiť z pamäte. To bude spôsobovať Problémom pre počítač. A to nazýva pretečenie zásobníka. Tak to je určite niečo, čo vás mali byť vedomí a snažia sa vyhnúť. A haldy, mať na pamäti, nie náhodou úniku pamäte. Kedykoľvek budete používať malloc, nie zabudol uvoľniť túto pamäť. Inak to bude len byť na halde premárnené, a počítač nebude vedieť, že je zadarmo na použitie, že pamäť. To sú len pár vecí byť veľmi opatrní pri máte čo do činenia s zásobníka a haldy. Akékoľvek otázky s tým? Úžasné. [00:43:31] OK, v pohode. Takže tento druh má rovnaké nápad, pretože pretečeniu zásobníka, kde ideme nad rámec rámec toho, čo pamäť Je by sme mali byť schopní používať. Tak sa napríklad vyrovnávacia pamäť, alebo mohol len myslieť na to ako pole. A my sme povedali OK, ideme na vytvoriť tento pekný malý poľa. Bude to byť reťazec. Alebo to bude ukladať znaky. A to len tak pozdraviť. A je to neurčité. To je všetko. [00:43:53] Ale keby som bol niekto zlý a chcel niečo zlého s týmto poľom, čo Čo som mohol urobiť, je pokúsiť sa napísať za koncom reťazca. A ako uvidíte, ak je Píšem dosť ďaleko, Ja si skutočne ovplyvniť spiatočná adresa. A ak začnem mať vplyv na spiatočná adresa, Aj vplyv ako program v skutočnosti beží. A miesto návratu, tie Viete, šťastný reťazec ako ahoj, som mohol urobiť niečo zlé, ako ísť do niekde inde v počítači, stále pamäť, zmeňte ho, čo chcem robiť. Takže to je to, čo by to vyzerať je, keď som sa trochu naplnil ju až s náhodnou hodnotou odpadkov, V tomto prípade, len. A potom, keď som sa v skutočnosti dostal na adresu v pamäti, Začal som ju naplníte niečím že urobil to, čo som chcel, aby to robiť. Akékoľvek otázky sa pretečeniu vyrovnávacej pamäti? Úžasné, lietanie vpravo prostredníctvom tejto veci. [00:44:40] OK, takže sme veľa hovorili o o ukazovatele s Gabe. Ako sa vlastne dostať ukazovateľ? Ako sa dostaneme adresu v pamäti? No, môžeme použiť tento pekný volanie funkcie malloc, ktoré dostane kúsok pamäti, konkrétne haldy, ako sme sa bavili, a to bude vám späť ukazovateľ na túto adresu v pamäti. A argument, že sme dať na malloc je, koľko miesta v pamäti chceme. [00:45:04] Takže vidíte, veľkosť v byte. Povedzme, napríklad, alebo v skutočnosti, v tomto príklade, sme sa umiestňuje dostatočne priestor pre 10 celé čísla. Takže asi to, čo budeme chcieť aby tu je pole 10 celých čísel. Tak sme sa dať veľkosť ints, ktorý sme sa dozvedeli, bolo, koľko bajtov? STUDENT: 4. HANNAH: 4, krásny, a my Chcete 10 z nich v rade, takže máme dostatok priestoru pre uložiť všetky 10 celé čísla, v tomto prípade. Niečo extra dôležité, kedykoľvek budete volať malloc, budete sa musieť pozrieť null. Ak nemáte kontrolu null, dobre, malloc, ak dôjde k zaplneniu a vám už dá akýkoľvek viac pamäte, vráti null. Takže ak nechcete zistiť, malloc môže vrátiť hodnotu null. A potom keď sa snažíme dereferencia null ukazovateľ, budeme mať poruchu segmentácie, ktoré budeme hovoriť práve teraz. Úžasné. [00:45:56] OK, otázky s malloc? Áno? [00:46:00] STUDENT: Má kontrolu null [Nepočuteľné] nerobte to na teste? [00:46:05] HANNAH: Jasne, bola otázka to matter-- na kvíz, dostanete body, keby nezaškrtnete NULL? Áno, dostanete body off ak nemáte kontrolu null. Kedykoľvek budete volať malloc, a to ako na kvíz a vaše psets a v reálnom živote, budete sa musieť pozrieť null. Dobrá otázka. [00:46:18] Gabe: Čo keď nemám oslobodiť? HANNAH: Gabe chce vedieť, čo keď nie zadarmo. Potom budeme mať pretečeniu pamäte v našom haldy. Nejaké ďalšie otázky? Áno? [00:46:27] STUDENT: Môže you-- ísť cez buffer overflow real znova rýchlo? [00:46:30] HANNAH: Jasne. Otázkou bolo, môžeme ísť cez buffer overflow naozaj rýchlo. Vráťme sa k tým snímok. Tak vyrovnávaciu pamäť, môžete len myslieť na to ako pole, nie? Máte nejaké miesto v pamäti. A keď sme sa prvýkrát vytvoriť našu ponuku, vieme, že polia majú pevnú veľkosť, alebo naši pufer má pevnú veľkosť. [00:46:45] Takže povedzme, že v tomto prípade máme len dostatok priestoru na napísanie reťazec ahoj. Ak pôjdeme okolo, že hranica, keď pôjdeme okolo čo naše pole sme si povedali, by to mohlo mať, by sme mohli skutočne začať zápisu do pamäte že počítač nie je Chcete nám napísať na. A najmä, keď sme hit niečo ako návrat riešenie funkcie, ktoré, ako každý iný kus pamäti, je len niekde v počítač, môžete skutočne zmeniť a začať robiť zlé veci. Odpoveď na vašu otázku? Super, niečo iné? Áno? [00:47:17] Žiak: Takže stack [nepočuteľné] sa sa tým, že idú od dna stúpa. V zásobníku rozsahu, robí pamäť ísť z, rovnako ako, hore dole vzťahujúce sa ku každej prestávke? [00:47:28] HANNAH: Ako you-- odložiť na Rob na tento jeden. [00:47:35] ROB: To bude rast v rovnakom smer ako zásobník rastie. HANNAH: OK. ROB: Tak som sa zmiasť. To bude abstrakcie. HANNAH: OK. ROB: To je v poriadku. Takže v prípade, že zásobník rastie up, potom ju generally-- nemusí byť takto. ale môžete deklarovať int x. Potom môžete deklarovať int y. Potom int x bude všeobecne nižšia vo fronte, ako int y. Ale to je proste fakt. To nie je ako dôležitú osiva vec. [00:48:02] ROB: Takže otázka znovu bolo len čo sa deje každý snímok buduje. Takže každá funkcia dostane Kúsok zásobníka. A ako idete hore, v rámci ktorej kúsok, v tomto rámci, budeme hovoriť, že premenné v tomto rámci takisto pohybovať nahor. Otázka? [00:48:17] ROB: Len aby sa na mikrofónu. HANNAH: Oh, yeah. ROB: Budem hovoriť do vás. HANNAH: Oh, jo, OK. ROB: Výnimkou je pre pole a structs, kde polia, nižšia index v poli, a structs na vyššiu polia v structs je zaručené, že pri nižších adresách neskorší ako hodnota v poli. Tak tie sú zaručené. Ale nejaké konkrétne premenné vo vnútri, ako int x, int y vo funkcii, nie je nutné vzťah medzi ich adresy. HANNAH: Ďalšia otázka tu? Žiak: Takže v pufri toku, iba pretečeniu vyrovnávacej pamäti došlo iba vtedy, keď sa, ako, pridelené množstvo polia že potom je väčšia? Rovnako ako, že? Takže ak sa pýtate na niečo z user-- [00:49:05] HANNAH: Mm-hm. STUDENT: Môže sa násilne dať niečo späť to je väčšia než čokoľvek ste pridelené pre nich? HANNAH: Jasne, takže otázka bola v podstate, Užívateľ môže dať viac, ako ste chceli? STUDENT: Jo. HANNAH: No, mohli by ste zabrániť používateľ v tom, že. Dalo by sa konkrétne povedať nie daj mi viac než x počet bajtov od Len som vám dal priestor pre x počet bytov, x počet znakov. Tak to je niečo, čo chcete, aby sa zabránilo. Áno? Aký je rozdiel medzi stack overflow a pretečeniu vyrovnávacej pamäti? [00:49:30] HANNAH: OK, takže zásobník overflow-- oh, čo je rozdiel medzi stoh overflow a buffer overflow? Takže chceme myslieť na pretečenie zásobníka deje, keď sme v skutočnosti stohovanie do týchto volanie funkcie. Povedzme, že máte rekurzívne funkciu, pretože vieme, že zakaždým, keď sa volanie funkcie, je to dostane vlastný rám v zásobníku. [00:49:45] Tak sme sa vyrovnať príliš vysoká, a potom začneme pretečeniu. A my používať príliš veľa pamäte, a Nemáme nikde odišiel. Sme si, že chyba. [00:49:51] Pretečeniu vyrovnávacej pamäte je v rámci programu. Chceme nemusia nutne mať nedostatok pamäte rovnakým spôsobom že by sme mohli, pokiaľ sme stohovanie až tak veľa volanie funkcií, ale píšeme okolo pamäti že vieme, že môžeme použiť. A to nám umožňuje robiť zlé veci. Jo? [00:50:08] ROB: Áno, možno budete chcieť, len zopakovať to, ale môžete si tiež myslí, o pretečeniu zásobníka ako ako určitý typ z pretečeniu vyrovnávacej pamäti. Alebo si len myslíte, že vaše zásobník ako naozaj veľký vyrovnávacej pamäti. Potom, keď ste pretečeniu ste zásobník, je to niečo ako pretečeniu vyrovnávacej pamäti. Ale pretečeniu zásobníka je len špecifický termín používa, keď zásobník sám pretečeniu. [00:50:24] HANNAH: Jo, tak opakujte pre video, to si môžete myslieť pretečenie zásobníka ako špecifický typ pretečeniu vyrovnávacej pamäte. V pohode? Akékoľvek ďalšie otázky, ako budeme pokračovať? Úžasné. [00:50:37] OK, v pohode, tak sa poďme hovoriť o Niektoré bežné chybové správy. To je niečo, čo má ukázali na viacerých kvízy, tak niečo, čo stojí za to pričom druhý pohľad na. Som si istý, že ste sa stretli aspoň niektoré z nich ako robíte váš problém sady. Takže uistite sa, že môžete hovoriť o nich na kvíz. [00:50:50] Takže prvá z nich je poruchy segmentácie. A to kedykoľvek sme pokuse o prístup k pamäti že nie sme povolený prístup. Takže ste migh videli to, Napríklad, v úteku. Ak detekovať kolíziu vráti hodnotu NULL, a potom vás sa snažil urobiť niečo s touto hodnotou null, počítač by dal Ste chyba segmentácie. Takže človek, dôležitá vec urobiť, aby sa pokúsili vyhnúť sa tejto je vždy skontrolovať null. [00:51:13] Možno ste tiež vidieť implicitné deklarácie funkcie. Tak toto je to, čo sa stane, keď vás Allison ukázal ako urobiť prototyp, nie? Takže povedzme, že máme nejaké funkcie, ktoré sme definovať. Povedzme kocky. A, ktorá ide na dne našej funkcie, pod hlavnou. [00:51:27] Ak by sme zabudli povedať počítač o kocky, kedy hlavný pokúsi volať kocky, počítač bude, rovnako ako, ach môj bože. Nemám potuchy, čo to znamená. Neviem, čo mám robiť, tu. Takže prototyp hovorí, nebojte sa. Ja som ti to povedať. [00:51:42] To príde. Nekrič na mňa. Nedávaj mi implicitné Vyhlásenie o funkcie. Takže ak sa táto chyba, jeden vec, ktorú budete chcieť urobiť, je uistite sa, že máte prototyp. OK? [00:51:53] A v neposlednom rade, nedeklarovaný identifikátor je v podstate, keď sa pokúsite použiť variabilný, že ste vyhlásil. Takže zrazu začnete hovorí, ako n a naviac plus. A počítač hovorí, že to, čo je n? Nikdy si mi nepovedala n bola vec. [00:52:06] Takže jedna vec, ktorú musíte sa uistiť, že urobil, je povedať počítaču, čo je n. Tak napríklad, n môže byť celé číslo. A potom sa vyhnúť tejto chybe. Akékoľvek otázky týkajúce sa bežných chýb? Áno? [00:52:17] STUDENT: Pre implicitné vyhlásenie o funkcii, by tiež mohlo byť, že ste zabudli na jednu knižníc ste mali zahrnúť, skôr ako prototyp? [00:52:24] HANNAH: Jasne, takže Otázkou bolo, mohol by ste tiež získať túto chybu, ak si zabudli napríklad: knižnica. [00:52:28] Študent: Áno. [00:52:29] HANNAH: Určite, preto, že rovnakým spôsobom že chceme, aby naše prototypy pred hlavnú funkciu, ak budeme mať knižnicu, tie idú v podstate zahŕňajú prototypy, zahŕňajú definície funkcií. Veľká otázka. [00:52:40] STUDENT: Pre členenie poruchy, by to tiež sa stalo, keby sme, ako sa snažil o prístup k premennej, ako v inom [nepočuteľné] ako bola vyhlásená v roku? HANNAH: Jasne, takže by sme sa dostať chybu segmentácie ak sme sa snažili pristupovať premenná z pôsobnosti tejto smernice? Bola to otázka? Študent: Áno. HANNAH: Beautiful. Takže pravdepodobne budete dostať undeclared chyba namiesto identifikátor. Takže to len tak povedať, Neviem, čo to je. Cool, niečo iné? Jo, OK, prekrásna. [00:53:10] V poriadku, takže rekurzia. Tak som sa zmienil párkrát že by sme mohli dostať pretečeniu zásobníka preto, že sme volaní našich rekurzívne funkcie toľkokrát. Dostávame všetky tieto stoh rámy, bla, bla, bla. Čo ešte je rekurzívne funkcie? No, rekurzívne funkcie nejaká funkcia, ktorá volá sama seba. [00:53:26] Niektoré veci mať na pamäti, keď vás vykonávajú rekurzívne funkcie, nezabudnite zahrnúť základné veci. Referenčný prípad, je bod, v ktorom sme sa nakoniec. Tak, napríklad, keď sme kódovanie, Povedzme, Fibonacci rekurzívne, chceme, aby sa uistil, že až sa dostaneme na 0 alebo prvé číslo Fibonacciho, tieto dve čísla majú tieto prípady, pretože tie nie sú závislé na veci, ktoré bolo predtým. Tí, ktorí majú svoje vlastné hodnoty. [00:53:51] Niektorí profesionáli na rekurziu, čo je otázka, ktorú sme videli v minulých kvízy. Tie môžu viesť k stručné, elegantný kód. A mnoho funkcií, veľa rôznych algoritmov, v skutočnosti samy o sebe k rekurzia. Ich definícia by mohla byť rekurzívne a sama o sebe. Takže Fibonacci je jedna. Faktoriál je jeden. Triedenie zlučovaním znamená one-- všetky veci, ktoré si môžete pozrieť. OK, nejaké otázky? Áno? [00:54:15] STUDENT: Je rohový prípad podobne ako základný prípad? Alebo je to, že pre niektoré ďalšie druh [nepočuteľné]? [00:54:22] HANNAH: Jasne, takže roh prípad je any-- tak rohová prípade rovnaká ako základné veci? Rohový prípad je niečo, že vaša kód môže trochu správať inak. Základný prípad je trochu súvisí, v že sú ako zvláštne prípady že budete chcieť pozrieť na. Ale predstava, že základné veci je to, že chcete, aby váš rekurzívne funkcie zastaviť na nejakom mieste. To nemôže držať volať seba navždy. Je potrebné sa zastaviť na nejakom mieste. [00:54:49] ROB: Áno, často, vaše základné prípady môžu byť príklady rohových základní. [00:54:53] HANNAH: Jasne, v pohode, nič? [00:54:55] STUDENT: Mohli by ste vysvetliť, zakladá trochu viac? Nemám úplne pochopiť [Nepočuteľné] základné prípady. [00:55:01] HANNAH: zo všeobecných prípadoch? [00:55:02] STUDENT: prípady Základné, jo. [00:55:03] HANNAH: Jo, určite. Poďme sa pozrieť. Máme kriedou tu? Áno, máme. OK, tak veľmi rýchlo, budem skúste napísať dosť veľký takže môžete vidieť na obrazovke. Poďme sa baviť o naozaj rýchlo, Fibonacci. Tak ti dám Fibonacciho postupnosť. Môžete sa pozrieť na definíciu. [00:55:17] V podstate každé číslo v poradí je súčtom dvoch predchádzajúcich čísel. OK, tak tak, že som práve popísal Fibonacci, ste mohli počuť rekurziu, že jo? Keď som povedal, každé číslo je súčet dvoch predchádzajúcich čísel, Dalo by sa povedať OK. No, nth Fibonacci number-- tak poďme že máme túto funkciu volal fib-- fib n sa bude rovnať fib n mínus 1 plus-- ľúto, budeme ísť na ďalší riadok cez here-- fib n mínus 2. [00:55:52] OK, tak to funguje skvele, ak ste pri pohľade na, napríklad, nula, jedna, dva, tri, štyri, piate číslo Fibonacci, kde si možno povedať, že 5 je rovné 2 + 3. Ale čo keď ste na začiatku? Čo keď ste len biť Tieto prvé dve hodnoty? [00:56:08] Ak chcete získať tento jeden, nemôžete hovoria pridať predchádzajúce dva, preto, že nula a- neviem. Takže v určitom bode, musíme zastaviť. V určitom okamihu, je treba povedať, že tieto dvaja jednoducho majú svoje vlastné definície. Číslo 0 Fibonacci je 0. A prvé číslo Fibonacci je 1. [00:56:26] Takže spôsob, ako by som mohol tento kód, I by sa povedať, či n je menšia ako dva, potom už len vrátiť n. A to by bola moja referenčný prípad. To je, ako viem, že prestať s rekurzívne funkcie. Je to jasné? Úžasné. Niečo ďalšie o rekurziu? Krásne. [00:56:45] Poďme rýchlo hovoriť o vyhľadávanie a triedenie beží čas. A potom dám Davin niektorých čas hovoriť o kódovaní príklady. Tak tu sú hlavným vyhľadávacím a druhy, ktoré by ste mali vedieť. Guarantee-- nemôžem zaručiť, pretože som nevidel quiz-- ale to príde kvíz po teste po ukončení programu. Takže určite použiť tento graf. Rovnako ako tento graf. Daj si to na svoj ťahák. Budete mať šťastný človek. [00:57:09] To nám hovorí, dobu chodu každého týchto triediť a hľadať algoritmy. Takže lineárne vyhľadávanie, môžete vidieť beh čas, a to isté s binárne vyhľadávanie. Ísť nad tým, čo tieto algoritmy robiť, všeobecnú predstavu. Pozrite sa na nejaké pseudokódu, ak nie kód sám. [00:57:25] Uvidíte, že bublina druh má hornú viazané v najhoršom prípade n na druhú. Takže ak naše poľa bol úplne späť predtým, ako sme chceli, aby to triediť, by sme povedať, že je to bude trvať n štvorcov kroky. Ale v najlepšom prípade, takže dolný odhad pre najlepší prípad ak to bude už dokonale radené. Potom všetko, čo musíte urobiť, je skontrolujte, či je triediť. Je tu otázka, tu? [00:57:47] Študent: Keď by Ak chcete používať typ? Sort. Som len zvedavý. [00:57:52] HANNAH: Ak by ste ktorý chcete použiť pre výber druhu? To z nich? Ten, ktorý je n na druhú v oboch prípadoch? [00:57:55] STUDENT: [nepočuteľné]. [00:57:56] HANNAH: Takže je to veľmi odlišné. Ak máte špecifické požiadavky programu, ako veci, ako keby sme práve povedal realizovať search-- sorry-- zaviesť akési, budete pravdepodobne chcieť ísť pre jeden z tých, ktoré má najlepšie prípad n, alebo dolná medza v najlepšom prípade n. Ale tam by mohlo byť niektoré veci, ako, povedzme, swapy sú naozaj drahé z nejakého dôvodu. Potom by ste chceli robiť bubble sort, pretože vás musíte urobiť toľko swapy, podobné veci. Akékoľvek other-- áno? [00:58:23] STUDENT: Bolo by [nepočuteľné] povedať, že [nepočuteľné]? HANNAH: To je jedna vec, že by sa povedať, ak hľadáte na implementáciu. Ako by som vlastne premýšľať o tom, prečo je n squared je, že máme bežať cez naše pole dĺžky n, zakaždým, takže vo väčšine, n swapov. A musíme urobiť tento proces n krát. [00:58:46] Takže keď budete musieť vykonať najviac n swapy a pre n beží cez pole, tam to bude n na druhú. Ale áno, to bude odhalené prostredníctvom tohto dvojakého pre sláčiky, ako otázka asked-- alebo vnorené slučky for, povedal by som. OK? [00:59:00] A potom zlúčiť druh, ktorý je najrýchlejší druh teraz, alebo že sme prebrali v CS50, vedia, že hlavný algoritmus je Táto myšlienka vlámaniu do triedené kusy a potom Zlúčením týchto triedené bitov. A dostane nás log n log n. Akékoľvek otázky týkajúce sa vyhľadávania a druhy, ako som ju preniesť na? Poďme sa pozrieť. [00:59:21] Oh, spojových zoznamov. Ospravedlňujeme sa, ale mám ešte jednu tému. OK, super, spojových zoznamov. Problém s poľami, majú pevnú veľkosť. Takže ak neviete, aký veľký váš vstup bude, nechcete vytvoriť pole. Pretože ak budeme vytvárať matice, ktorá je príliš malá, môžeme naraziť na pretečenie vyrovnávacej pamäti. [00:59:35] Takže namiesto toho, mohli by sme urobiť niečo s spojových zoznamov, ktoré nám umožňuje dynamicky veľké dátové štruktúry ktoré nám umožnia uložiť pružnejšie množstva dát. Takže v každom uzle v našom spájať zoznam, máme dva kusy. Máme skutočnú hodnotu, ktorá sa ukladajú. Tak to je práve vec, ktorú by pozri v poli, napr. A potom sme tiež sledovať ukazovateľ na ďalšie veci v pamäti. [01:00:04] Na rozdiel od poľa, ktoré vieme, že sú všetky deje na be-- prvky poľa sú jedným po sebe v memory-- súvisí Zoznam môže byť kdekoľvek v pamäti. Sú ľubovoľné umiestnenie. Takže ak by sme mali skutočne ísť nájsť, sme je potrebné sledovať Ďalšia vec, ktorú v našom zozname. [01:00:19] A potom, aby sa vedieť kde tento zoznam ako celok, všetko, čo máme sledovať je Prvý element v našom prepojenom zoznamu. A že to nám umožní dotiahnuť do konca. [01:00:31] Takže to je to, ako môžete definovať režim. To je skvelá príležitosť využiť structs. Pretože máte túto myšlienku, dobre, pre daný uzol, mám dva kusy. Mám skutočnú hodnotu sám. A potom som sa ukazovateľ ďalší prvok v pripojenom zozname. Tak vidíte, máme celé číslo n, ktorý bude skutočná hodnota, a potom sa ukazovateľ na uzol, nazvaný ďalšie. Tak, že to bude ďalší prvok v našom prepojenom zoznamu. STUDENT: Áno? Máte určiť, že hviezda je ako struct? [01:01:01] HANNAH: Áno, tak od tej doby to je skoro ako druh, vyzerá to, že rekurzívne Definície v tomto my Potrebujeme vedieť, čo je uzol dovnútra k nájdeniu uzla. Vzhľadom k tomu, že nie je v skutočnosti vedieť, čo je uzol je kompletne až sa dostaneme na koniec tohle-- a potom, čo to sa môžeme len hovoriť node-- vnútri tejto definície, musíme hovoriť uzol struct. Veľká otázka. Ešte niečo? Áno? [01:01:26] Žiak: Prečo my majú dvakrát hovoriť uzol? Vzhľadom k tomu, keď sme boli v [nepočuteľné] proste sme to urobiť v bodkočiarkou, ale teraz musíme zistiť, že struct node? [Nepočuteľné]. HANNAH: Ja sa domnievam, V poslednom príklade, sme len vytvoriť, kedykoľvek budete chceli použiť študenta po to, že ste musel použiť struct node-- Som sorry-- struct študenta. To nám umožnené, po faktu, práve Použitie uzol pridať nový typ, v podstate. To zmysel? Takže budeme musieť vrátiť a pozrite sa na kód pred. Ale ja by som, že sme nepoužili typedef. A my sme sa pýtal, Prečo musíme použiť typedef? Typedef nám umožňuje, aby sa zabránilo slovo struct na začiatku. Áno? Študent: Aký druh otázky by prísť v podmienkach, pokiaľ ide o uzly a spojové zoznamy? [01:02:10] HANNAH: Takže jedna vec je, že sme mohli povedať, ako môžete vyhľadávať prostredníctvom prepojeného zoznamu? OK, pretože je to trochu zložitejšie ako keby sme hľadáte cez pole. Môžeme sa len pozrieť na element nula, prvok jeden, prvok dva, bla, bla, bla. Ak chceme hľadať prostredníctvom prepojeného zoznamu by sme skutočne nasledovať tento malý bludisko ukazovateľov. Takže poďme skutočne ísť cez to naozaj rýchlo. To, čo sme mohli urobiť v objednať to-- Povedzme, že chcete len iterovat naša úplne spájať zoznam. Chceli by sme začať u hlavy. A potom, aby sa presun na ďalší prvok, namiesto toho len zvyšovanie jedným ako by sme mohli pri prechode cez pole, sme vlastne bude sledovať ďalšie ukazovatele, tak môžeme zistiť, kde v pamäti ďalší prvok. Takže viem, že to nie je dosť vziať to všetko práve teraz, ale budete mať tieto snímky. Takže sa môžete prejsť Táto pomalšie. Ale v podstate to, čo chceme, urobiť, je sledovať tieto ukazovatele cez celé prepojeného zoznamu. Tak to je otázka, môžete byť požiadaní. [01:03:01] Niečo všímať s vloženie, povedzme, Chceli sme, aby nový prvok na pred naším spojené zoznamu. Musíme byť veľmi opatrní, o poradí, v ktorom preradený ukazovatele. Vzhľadom k tomu, povedzme, že som práve povedal, OK. Urobiť hlavy prejdite na tento nový prvok. Len uistite sa, že poukazujú na 1, potom sme v podstate stratil zvyšok nášho zoznamu, pretože si nepamätám kde 2 životy. [01:03:25] Takže musíme urobiť veľmi špecifické objednávky. Po prvé, sme sa vytvoriť nový prvok prejdite na hlave. A potom urobíme hlavu poukazujú na nový prvok. Takže poďme sa pozrieť, ako to vyzerá s arrows-- len tak. Takže musíte najskôr nový prvok prejdite na starej hlave. A teraz máme hlavu prejdite na nový prvý prvok. Akékoľvek otázky s tým? [01:03:49] OK tu je nejaký kód opäť niečo sa pozrieť na trochu neskôr. A teraz sa otočte na Davin pre GDB a trochou praxe kódovanie na papieri. Krásne. [01:04:01] ROB: A Rob. [01:04:01] HANNAH: Oh, Davin a Rob. Je mi to ľúto. [01:04:03] STUDENT: Woo! [01:04:08] ROB: Vďaka. [01:04:09] DAVIN: Chceš povedať, všetko naozaj rýchlo? ROB: Jo, jo. DAVIN: Potom, čo som sa. OK, zatiaľ čo Rob dáva mikrofón na, takže to, čo je GDB? Každý by mal vidieť v GDB triedy a tiež na pracovnú dobu. A vy by ste mali byť jeho použitie. Takže to, čo je GDB? Niekto? [01:04:28] Študent: To je debugger. [01:04:29] DAVIN: Je to debugger. A čo to vám umožní robiť? Rovnako ako, prečo sa máme radi GDB? STUDENT: Ak chcete spomaliť program. DAVIN: Dobre, takže môžete chodiť cez to ako človek tempo. A tak to, čo sú niektoré Príkazy môžete urobiť? No, prestávka je pravdepodobne váš obľúbený príkaz. Vzhľadom k tomu, že umožňuje rozdeliť Program a vlastne ísť cez neho riadok po riadku. [01:04:44] Run umožňuje spustiť. Ďalšie, ako krokovanie. Aký je medzi ďalšie a krok? Počkaj, to nahlas. To bolo správne. [01:04:54] STUDENT: [nepočuteľné]. [01:04:55] DAVIN: Áno, úžasné. Tak ako vedľa a krok, ak you're-- Povedzme, že máte funkciu, ktorú definovať. Povedzme, že niektoré v hlavnej funkcie, a vy ste len biť ďalej, ďalej, ďalšie. Ty vlastne bude vykonávať túto funkciu, ale budete skákať cez neho. Ak stlačíte krok, alebo s alebo čo, ty si bude vlastne skočiť do tejto funkcie, a potom môžete zasiahnuť ďalšie vidieť rôzne hovory v tejto konkrétnej funkcie. Jo? [01:05:16] STUDENT: Existuje spôsob, ako skočiť, ako, vycúvať? DAVIN: Finish, jo, skončiť sa skákať von. Tak to bude až do konca, že funkcie, a potom ste bude späť v hlavnom, napríklad. Print vytlačí ju raz. Niečo, čo som vždy použiť, je na displeji. Na displeji sa ju vytlačiť neustále v celom rozsahu vášho programu. [01:05:32] Napríklad, ak ste v cykle for, a Chcete vidieť, ako sa niečo mení, a nechcete, aby, rovnako ako neustále robiť ako tlače, tlač, tlač, zobrazenie Zobrazí sa tejto premennej neustále, zakaždým, keď stlačíte Ďalej. A pokračovať. Tak GBD, to je GDB. [01:05:47] STUDENT: Čo je to jedno kde ste [nepočuteľné]? DAVIN: Čo je to? [01:05:52] STUDENT: Čo je the-- miestnej premenné. ROB: Existuje niečo, čo v skutočnosti rovnako ako miestni obyvatelia, alebo tak niečo. Aj can't-- [01:05:58] DAVIN: Mohlo by to byť niečo také, jo. [01:05:59] HANNAH: V miestnych obyvateľov? [01:06:00] DAVIN: To je ono. To je jedno. ROB: Beautiful. [01:06:03] DAVIN: Jo. [01:06:04] Študent: Čo robiť aj naďalej? [01:06:06] DAVIN: Je continues--, takže je to len bude pokračovať vaše programy. Takže ak sa zlomí a hit pokračovať, bude to len spustiť tento program, kým zasiahne, že prestávku znova. Tak napríklad, ak zlomil vo funkcii, a budeš robiť, ako pre slučka alebo niečo také, a stlačíte pokračovať, bude to pokračovať a vrátiť sa k tejto prestávke. Alebo je to bez prerušenia, bude to pokračovať a dokončiť program. [01:06:22] ROB: Takže len rád zastaví, v prvom zlomu narazí Ak vás, potom hit pokračovať, bude to držať bude, až je to ďalší bod zlomu. A potom pokračovať pôjde na ďalšie zarážky. DAVIN: Nejaké ďalšie otázky týkajúce sa GDB? Takže myslím, že v minulosti, Požiadali sme vás, čo GDB je a dať Príklad niektorých vecí, ktoré môžete robiť s GDB, tak real jednoduché, ale jo. Tu to je. A uzly? [01:06:43] ROB: Áno, áno, aký smer to bolo? Študent: Tak to bolo. DAVIN: Počkajte. ROB: Ten chlap? DAVIN: Ten. ROB: Ten chlap, oh, som si neuvedomil. Takže sme neboli jasné, na to, čo the-- vôbec sa mi nepáči vedieť, kto to was-- ale otázka. Nevieme presne, čo si žiadali o to, aby práve objasniť niečo. Takže najprv, ako som povedal predtým, typedef budete vždy používať len vytvorenie názvu pre typ. Tak tu je prezývka sme tvorba je pre tento typ struct uzol. [01:07:13] Takže najprv, ak to nebude uzol typedef, takže to struct node kučeravé obrnil sa na ďalšiu kučeravý Ortéza je typu struct node. A musíme do tohto uzla tam, pretože sme treba referenčný uzol tu. Tak s týmto druhom rekurzívne struct, je potrebné dať to struct meno, inak by ste nemohli hovoria struct uzol tu. Zatiaľ čo predtým sa študentom keď sme napísali, myslím, sme nemali hovoriť Študent tam hore, pretože sme Nemusel hovoriť struct Študent vnútri struct sám. Tak to je rekurzívny, že nás núti povedať uzol tam. [01:07:43] Tento uzol je len názov sme dávať uzol pre typedef. Tak, že uzol nie je rovnako ako tento uzol. Tento struct uzol, ale je rovnaký ako ten struct uzol. DAVIN: Takže kedykoľvek budete volať, ako uzol v hlavnej funkcie, nebudeš sa musím povedať struct uzol. Stačí si len povedať, uzol, pretože Uzol je different-- je v podstate hovoríš, OK. Namiesto toho, aby volania struct uzol v mojom kóde, Ja len chcem, aby to premenovať ako uzol, aby bolo ľahšie. [01:08:04] ROB: Ak ste vždy použitie typedef, potom tento je jediným miestom, kde budete mať deklarovať premennú s struct uzol hviezda, jo. [01:08:14] DAVIN: OK, takže posledná časť Je ťažké naučiť protože-- ROB: Čo je? [01:08:24] DAVIN: Vzhľadom k tomu, že to kódovanie na papieri. Takže každý rok máme Kód na papierových otázky. Takže myslím, že v minulom roku, 12 z 80 bodov sa kód na papieri. Rok pred tým, 10 z 80, pred rokom, že 20 zo 100, tak pomerne málo z nich. Takže budete musieť byť schopní kódovať týchto funkcií rúk. [01:08:40] Tak som si myslel by sme mohli prejsť niekoľko z nich, a vidieť, ako ľudia, druh prejsť je pomaly s ľuďmi. Takže všeobecne, strlen a atoi boli veľmi populárne. V minulom roku, myslím, že by sme mali GetPositiveInt a RandomInt. Ale pow, tak moc, aj pozitívnu moc. Poďme sa len prejsť možná jeden alebo dvaja z nich spoločne. Čo ľudia chcú vidieť? [01:09:05] STUDENT: atoi. STUDENT: Jo. DAVIN: atoi? STUDENT: [nepočuteľné]. DAVIN: OK, ja idem na to na doske. Máte prednosť keď som to tu alebo tam? Tam, Gabe hovorí, že existuje. [01:09:16] ROB: A to je všeobecné myšlienky na tieto otázky kódovanie. Skúste niečo napísať. Nenechávajte prázdne. [01:09:22] DAVIN: Áno. ROB: Ak sa môžete dostať vráti typ správne, alebo možno by sme mohli dať to vy, ale ak je to možné, rovnako ako, napísať všeobecnú funkciu podpisu, Ak sa môžete dostať na základné veci v poriadku, alebo rohové prípady, alebo pamätať šek na null, ak máte nejaké veci, potom možno budeme vám môže dať pár upozorňuje na problém. Nepoužívajte len nechať prázdne. [01:09:36] DAVIN: Áno, a ak máte sú len celkom agitoval na to, ako v skutočnosti premení kódu. Ak napíšete pseudokódu, to je celkom dobrý taky. Takže je to ako, že je to šesť bodom otázka, a píšete správne pseudokódu, budete mať aspoň dva body. Takže to nie je len nechať prázdne. Skúste si dať niečo. [01:09:50] ROB: To musí byť správne pseudocode, hoci. [01:09:51] DAVIN: Áno. ROB: Takže sme všeobecne menej zhovievavý chyby v pseudokódu. Davin: OK, tak vy chcel vidieť atoi. OK, tak len really-- takže to, čo chcete robiť, ich budete mať vzhľadom k tomu nejaké čísla. Ale toto číslo nie je bude int, nie? Aké to bude? [01:10:08] STUDENT: [nepočuteľné]. [01:10:09] DAVIN: Bude to byť reťazec, nie? Takže ak ste dostali string-- poďme say-- [01:10:13] ROB: Mám vytiahnuť editor? Nemôžem vytiahnuť up-- [01:10:16] DAVIN: Oh, chceš to urobiť on-- [01:10:16] ROB: Chceli by ste radšej dosku? [01:10:17] DAVIN: Čo chcete robiť? Myslím, že to chcete urobiť ručne? Alebo si chcete urobiť na počítači? [01:10:21] ROB: Urob to po ruke. [01:10:22] DAVIN: [smeje sa] ROB: Urob to po ruke. [01:10:23] DAVIN: OK, takže to bude atoi. Takže to, čo je to-- Myslím, že budeme pravdepodobne dať to na vás. Ale čo to ide vrátiť? [01:10:29] STUDENT: Int. [01:10:29] DAVIN: Bude to návrat int, nie? Takže-- Nechcem, aby to tam. Urobím to tu. [01:10:34] ROB: môžete vytiahnuť ho dole a zatlačte až na to. [01:10:38] DAVIN: jo. [Smiech] zmena Game. OK, takže to bude int atoi, a to, čo to bude trvať? Char hviezda, tak len string, hviezda s, rovnako ako to. [01:10:57] ROB: Pekný hviezda, pekný. DAVIN: To nemusí byť tam, OK. ROB: Jo. DAVIN: OK, takže prvé vec, ktorú chcete do-- I neviem, či niekto pozrel v praxi solutions-- ale to, čo sa chystáte chcieť urobiť, je, že ste bude chcieť mať slučka, pretože si bude chcieť skutočne krokovať tohto reťazca. Tak helpful-- takže povedzme, že budeme pre sláčiky, a budeme krokovať každý prvok reťazca. Ako dlho to je? Koľkokrát budeme iterovat v tom, že pre sláčiky? STUDENT: Sterln? DAVIN: Sterln, jo. Takže povedzme, že dĺžka sa rovná int sterln s. A len zvedavý, prečo je to vždy trochu lepšie to urobiť mimo slučiek? Rovnako ako, prečo je lepšie zavolať Táto funkcia mimo slučky? Stačí skontrolovať rýchly zdravý rozum? Jo? Žiak: Takže vy nie musí udržať kontrolu. Stačí si len [nepočuteľné]. [01:11:59] DAVIN: Presne tak, tak jo, presne to, čo povedala. Takže sme nemuseli udržať kontrolu. Tak napríklad, ak volám Táto funkcia vnútri slučky, potom budem mať volania Táto funkcia viackrát. A že to bude klesať účinnosť vášho programu. Takže je to vždy užitočné vyhlásiť ju von. [01:12:12] ROB: To je povedal, na niektorú z týchto problémov, skoro tak dlho, ako vám pracovného roztoku, dostanete plné uznanie. Tak to ak váš návrh nebojte je úplne strašný. Mohlo by nás naštvaný čítať váš kód. Ale tak dlho, ako to funguje, dostanete body. [01:12:28] DAVIN: Áno. OK, tak potom budem vyhlásiť nejakú premennú. Je to len tak zavolať int čiastku. A ja idem nastaviť tento rovný nule, ako je, že. A to len tak ako zástupný symbol. Tak, že to bude čo budem vracať. Takže idem nakoniec vrátiť sumu z tohto programu. Takže mám tieto dve premenné. Mám dĺžku. Mám čiastku. A teraz poďme skočiť do nášho reťazca. [01:12:48] Tak umožňuje máme pre slučke. Takže štyri int I = 0 w, zatiaľ čo Aj je menšia ako dĺžka Aj s plus. A now-- ROB: Nice. DAVIN: OK, a teraz tu pochádza mäso z nášho kódu. Takže sa môžete skutočne robiť to v podstate v jednej línii. Takže nemá niekto nejaký nápad o tom, čo budeme robiť ďalej? OK, tak to je v poriadku. Takže robíme povedať sumu equals-- dovoľte mi, aby som uháňať tento over-- súčet sa rovná súčtu časov 10 plus-- sme bude trvať S i mínus jedna quote 0 jeden citát urobil, takto. ROB: Veľmi intuitívne. [01:13:56] DAVIN: Drvený to. OK, takže someone-- som to, mám to. OK, tak je to jednoznačne stúpa. Čo to znamená? Takže Vie niekto, čo to znamená? Môže každý vidieť? Nie, nikto nemôže vidieť, OK. Idem to-- [01:14:18] ROB: Chystám sa napísať vzorec práve tu. DAVIN: OK, Rob to bude robiť na počítači, čo je zábava. ROB: Oh môj bože. Alebo nebudem. DAVIN: Stand by. STUDENT: Mám dotaz. DAVIN: Jo, jasne. STUDENT: [nepočuteľné]? DAVIN: OK, tak to v skutočnosti, podobne, len všeobecne, ak ste mali dať, ako, v tomto vyhlásení int Aj rovná dĺžke 0 čiarkou rovná sterln, that-- [01:14:59] STUDENT: [nepočuteľné]. [01:15:01] DAVIN: To je v poriadku, pretože that-- Žiak: Prečo by ste dokonca nutné použiť dĺžku? Prečo by nie len [nepočuteľné] sterln s, rovnako ako po celý čas [nepočuteľné]? [01:15:08] DAVIN: Myslíš tu? [01:15:09] Študent: Áno. DAVIN: Pretože každý čas to pre sláčiky beží, to bude hodnotiť túto podmienku. STUDENT: Správne. DAVIN: A ak máte sterln tam, potom je to bude mať skutočne volať že funkcia každý čas. Takže namiesto toho len porovnajte ju s int, budete volať Funkcie a potom porovnaním na návratovú hodnotu. Jo, tak je to jednoducho, jo. [01:15:28] Nice, OK, takže teraz môže každý vidieť. Čo does-- je to ako, to je ono. Jedná sa o jám, priamo tu. Čo to znamená? Čo to robím? Jo, nápad? Jo? [01:15:43] STUDENT: Dobre, takže keď ste zadaní poľa, budete ísť zľava doprava, takže budete ísť do Desatinné z baní [nepočuteľné]. DAVIN: Presne tak. Žiak: Takže každý musíte násobiť čo ste videli, ako hodnoty int strany keď sa dostanete k pohybu, že viac ako jeden. [01:15:59] DAVIN: Perfektné, perfektné, tak napríklad, poďme povedať, dal som you-- som napíšem sem. Nie, nie som. Chystám sa napísať sem. Povedzme, že som ti dal 76, že jo? Povedzme, že vám 76. Je to reťazec začína, OK? [01:16:15] Takže dĺžka je čo? 2, že jo? Súčet je 0. Potom skočíme v našom cykle for. OK, prvá iterácia to, čo je to bude? Je to bude suma je 0. Aby súčet krát 10 0. To je nezmyselné. Tak čo to robí? STUDENT: [nepočuteľné]. [01:16:33] DAVIN: to bude zase, že znak na celé číslo, nie? Je to trochu ako s vaším Problém set-- tejto light-- je to niečo ako s problém nastaviť na Visioneer. Máte čo do činenia s hodnotami ASCII. Takže keď dám vám, ako, sedem, ale je to postava, a chcete vedieť, OK, čo číslica je to? Jo, mohol, jo. Takže to, čo je číslica, že? Dalo by sa odpočítať 0 z neho, ale musí odpočítať 0, znak. [01:16:59] A tam, kde niektorí ľudia si zakopol, sú ako, OK, dobre, musím vedieť, hodnoty ASCII pre tento kvíz? Nie, určite nie potrebujete vedieť ASCII hodnoty, ako, malá , Veľké písmená, nula. [01:17:09] ROB: Nie je žiadny dôvod, aby vôbec dať to na ťahák. [01:17:12] DAVIN: Rozhodne nie strácať priestor s tým. Môžete literally-- len miesto hovoriť 48, rovnako ako až tú, ktorá je ekvivalentná hovorí jeden, jeden apostrof, ako to, že presne rovnaký. [01:17:27] ROB: Dalo by sa skoro, že o tom, ako if-- Boha, potrebujem, oops-- si skoro myslieť na to, ako ak máme niečo také hash definovať 0 ako 48. To nebude fungovať. Ale myslieť na to, ako jednoduchú úvodzovky 0 jednoduché úvodzovky, a pre všetky znaky. Ber to ako konštanta, ktorá predstavuje túto hodnotu ASCII. [01:17:47] DAVIN: Áno. OK, tak prvýkrát po tak s 76-- tak prvýkrát po, je to len znak 7 mínus znak 0, a tie, ktoré sú sedem integers-- dobre, tí, sedem priestory od seba ďalší na ASCII tabuľky, alebo čokoľvek iného. Tak, že to bude vrátiť INT 7. Takže teraz, suma sa rovná 7. [01:18:08] OK, dobre, poďme skočiť do tejto slučky for znova. OK, teraz je to suma krát 10. Takže si skutočne presunutie 7 doľava. Dáva to zmysel? Ste efektívne Pohybom doľava. [01:18:19] A potom sa to add-- bude 6 mínus 0. To je 6. Takže to bude 70 a 6. 76, to je vaše číslo. Takže bez ohľadu na to, čo čísla Dal som vám, že je to pomaly len bude posunúť väčšie hodnoty doľava, 1 faktor 10 Zakaždým, keď v cykle for, a potom pridať ako nutné. [01:18:37] V zadnej? STUDENT: Nemáme robiť akákoľvek kontrola v programe? [01:18:41] ROB: Takže, pokiaľ ide o kontrolu ide o program, by sme vám povedať dosť veľa, čo je potrebné skontrolovať. Ak sa nám nepodarí povedať niečo, potom všeobecne Predpokladám, že máte skontrolovať väčšinu vecí. Rovnako ako môžete, len pre istotu, tie by pravdepodobne kontrolovať hej, je to null? Potom som tušenie, čo sa vrátite. Ale my vám povie niečo také. 0, neviem. [01:18:59] DAVIN: A prečo by ste mali chcieť prekontrolovať, či je rovná null? STUDENT: [nepočuteľné]. DAVIN: Kvôli char hviezdy. Je to ukazovateľ. Takže úplne prijateľné vyhlásenie, mohol by som povedať, OK, s presne null, pretože to môže byť ukazovateľ na hodnotu null. Takže kedykoľvek budete mať ukazovatele v ceste v takto, asi by ste mali skontrolovať. Pretože ak nechcete skontrolovať, či, a potom by ste potom ísť do slučky for, a vy ste doing-- uháňať dolu. Uháňať dolu. [01:19:22] ROB: Ospravedlňujeme sa, ale to je všetko. [01:19:23] DAVIN: A tak, rovnako ako v prípade je null, a potom vás urobiť to, čo chybu sa chceš dostať? STUDENT: Budeš mať nastavenú poruchu. DAVIN: Budeš nastavenie chyba, že jo, pretože si snaží sa index do null. Takže sa pokúsim index do pamäti, že nemáte vlastný. Takže to, ak je to null a tak urobíte, budete cyklus vám. [01:19:39] ROB: tiež si myslím, na skúšku, v ktorej Opýtali sme sa na túto otázku, môžeme vám povedať, ktoré možno len predpokladať, je kladné číslo. Vzhľadom k tomu sa tiež očakáva, že atoi zvládnuť záporné čísla, takže budete musieť zvláštny prípad. Hej, je prvý znak pomlčka, v tomto prípade, OK, teraz je záporné celé číslo. Povieme vám tieto druhy vecí. My vám poviem, čo je potrebné zvládnuť. DAVIN: Áno. Takže som si istý, že niektorí ľudia môžu have-- ak ste začali pri pohľade na staré skúšky, Videli ste sterln. To je populárne. A myslím, že v sterln, museli ste túto kontrolu na null, návrat 0 alebo niečo také. Rovnako ako by ste mali skontrolovať null. A ak to tak nie je, že mieril preč na kvíz. Tak ako tak, robí všetkým pocit, OK s atoi? Chce niekto prejsť častí znova? ROB: Jo, myslím, že vám tiež povie, Možno predpokladať, že všetko je-- že oni sú vlastne zadanie čísla, že nemusíte mať obavy, ako, písmená sú v reťazci, a tak. DAVIN: Jo. Áno? STUDENT: Môžeš ísť v priebehu ešte raz, keď použiť dvojité úvodzovky a jednoduché úvodzovky? [01:20:37] DAVIN: Jasne, takže dvojité úvodzovky, veľmi Jednoducho povedané, je dvojité úvodzovky sú reťazce. Takže ak ste dvojité úvodzovky nič, to je reťazec. Tak, ako keby som mal tento 0 sem, a ja som to urobil, to je reťazec. To už nie je znak. Takže nemôžem nájsť túto hodnotu na mojom ASCII graf, pretože je to string, jo. [01:20:57] OK, nejaké ďalšie otázky? Áno? [01:21:00] STUDENT: Takže ste už odpovedal tento, ale ako, keď sme v skutočnosti písanie na teste to, chcete, aby sme písať lomítka nuly [nepočuteľné]? DAVIN: Nie Otázkou bolo, mali by ste dať lomítko cez nulami aby uviedli, či sú nuly? Nie, budeme na to prísť. Jo, vďaka, že sú dobré. OK, niečo iné? Chce niekto to-- tak si myslím, Urobili sme trochu v čase. Chceš vidieť ďalšie, alebo? STUDENT: RandomInt. [01:21:29] DAVIN: RandomInt, OK, presne tak. Takže poďme robiť RandomInt. Urobím to tu. Takže RandomInt je v skutočnosti oveľa jednoduchšie. Myslím si, že atoi je asi najťažšie jeden že sme sa pýtal v minulých rokoch. STUDENT: [nepočuteľné]. [01:21:46] DAVIN: Čo je? ROB: Vidím, či je to druh z zobraziteľná sem. DAVIN: Je to tak? ROB: Nemyslím si, že je to going-- myslím, to bude bežať napravo. DAVIN: OK, tak ja to urobím toto. A potom stačí dať ju na obrazovke. [01:21:56] ROB: Dobre. [01:21:57] DAVIN: Chceš byť môj pisár? [01:21:58] ROB: Jo. [01:21:58] DAVIN: Nice. OK, môžem vymazať to? [01:22:02] STUDENT: Jo. [01:22:04] DAVIN: To je tak ťažké. (Spieva) Robíš čo robíte. A to, čo nemáte. Dobrá. [01:22:19] OK, ak si dobre spomínam, na kvíz RandomInt bol rád, OK, budem vám dva čísla, ako je A a b. A ja chcem, aby si mi RandomInt medzi týmito číslami. Takže RandomInt sa deje aby sa dva numbers-- tak RandomInt-- a je to chystá vrátiť int. [01:22:41] Takže to, čo je návratová hodnota? Len som ti to povedal. Int, že jo? Rovnako ako tento, a potom je to bude trvať dva celých čísel. Takže to bude trvať int a int b, takhle. Takže to, čo je RandomInt chystá urobiť, je, že to bude vrátiť nejakú náhodnú hodnotu medzi týmito dvoma hodnotami. Takže to bude väčšia ako, menšie ako b. Takže myslím, že môžete pravdepodobne predpokladať, že je menšia z týchto dvoch hodnôt. Takže ak máme čo do činenia s náhodnosť, akú funkciu sme videli, že nám dáva náhodné veci? STUDENT: drandí. DAVIN: drandí, presne tak. Takže budete pravdepodobne chcete používať drandí. Takže môžete povedať, int náhodný, a my len povedať, že sa rovná 0, práve teraz. A oni budeme hovoriť, OK, náhodné rovní drandí 48. A čo to vrátiť? Čo táto funkcia vám? [01:23:43] STUDENT: medzi 0 a 1. [01:23:45] DAVIN: Jo, medzi 0 a 1. Takže to bude be-- [01:23:48] ROB: A to je-- myslím, by sme ti toto. Rovnako ako môžete použiť drandí 48. To si môžete overiť na minulé skúške. Ale pravdepodobne, že ste možno použiť drandí 48, ktorý vráti plavák medzi 0 a 1. [01:23:58] DAVIN: Áno, áno, ja som si istý, že na skúšku to vám hovorí, že pravdepodobne chcete použiť drandí, jo. Takže to bude návrat nejakú hodnotu medzi 0 a 1. A čo potom ste bude chcieť robiť? No, chcete násobiť by-- počkaj, ja si myslím, že je to takto, je mi ľúto. Budem robiť. Neviem. [01:24:19] Takže b mínus. Tak prečo b mínus? Takže povedzme, že drandí vám dáva späť int-- OK, budem proste robiť zvyšok, tak plus. Takže to, čo does-- y je b mínus. Takže povedzme, že drandí vám dáva späť Maximálna hodnota by to mohlo dať. Čo to bude? STUDENT: 1. [01:24:43] DAVIN: 1, nie? Takže ak je to 1, a vy ste vynásobením b mínus, No, to je práve Rozdiel medzi mínus A. A ak si pridajte, že späť na, to je čo? Je to v podstate b. Dáva to zmysel? [01:24:57] Študent: Áno. [01:24:59] DAVIN: Takže ak je to maximum cení by to mohlo byť, to bude jedno. A potom je to len Rozdiel medzi týmito dvoma. Pridať na, takže to je chystá sa vrátiť náhodné. A v prípade, že rohové drandí vám vracia 1, náhodný bude len účinne b. Ale to je maximum to môže byť. Takže ak to bude menej ako že, takže povedzme, že je to ako 0,9, tak potom 0,9 násobok b mínus bude menej ako rozdiel medzi b mínus. [01:25:33] A potom, ak ste dodať, že na, táto hodnota je bude väčšia než, pretože pridávate niečo na neho, ale to bude menšie ako b. Takže budete mať náhodné číslo, pretože voláte drandí. A to rand, že náhodné číslo je bude niekde medzi a b. Dáva to zmysel? [01:25:50] ROB: Stačí, aby ju v konkrétne čísla, takže povedzme, že chceme vybrať náhodné číslo medzi 7 a 10. Takže b mínus je náš sortiment. Takže tam je rad troch Čísla chceme vybrať. A potom vynásobením že medzi 0 a 1 1, li, že potom nám dáva some-- povedzme, že nám dáva 1.5. [01:26:07] Potom 1.5, chceme ísť od 7 do 10. Takže 1.5 a 7 nás privádza späť do našej 7 až 10 rozsah. A potom sme uložením vnútri celé číslo, takže je skrátený až na 8. A potom sme sa jednoducho vrátiť, že. Takže b mínus je náš sortiment. posunie ju do čísel že chceme v tomto rozsahu. Tak medzi 7 a 10, a potom sme môžete vrátiť, čo sme skončili s. [01:26:30] DAVIN: Jo, pekný. [01:26:32] ROB: Ďakujem. [01:26:34] DAVIN: Jo, čo sa deje? [01:26:35] STUDENT: Mali by sme ho spustiť na akejkoľvek Chyby ASCII keď we're-- ak drandí je vrátenie plavák [nepočuteľné]. [01:26:42] ROB: Takže rovnako ako povedal Rob, pretože nie je náhodný int, tak drandí bude float. Tak a potom násobí von. A môžete získať niektoré druh čísel float. A potom, že to bude skrátiť. [01:26:51] STUDENT: OK. DAVIN: Jo. ROB: A v prípade, že kompilátor mal varovať ste asi, ako, strata presnosti, len hodený int v tam, a potom je to dobré. DAVIN: Áno? [01:27:02] STUDENT: Mal by Rovnaká pravdepodobnosť získania, ako, b alebo [nepočuteľné]? [01:27:08] ROB: Takže je-- som vlastne wondering-- je RandomInt predpokladaný byť číslo od menej ako b? Rovnako ako, keď je to medzi 7 a 10, aké sú možnosti? 7, 8, a 9, alebo 7, 8, 9, 10? DAVIN: Zabudol som. Na problém set-- [01:27:19] ROB: Myslím, že je to 7, 8, 9. [01:27:20] DAVIN: Konkrétne hovorí One vrátane a jeden je exkluzívny. [01:27:22] ROB: Jo. [01:27:23] DAVIN: Ale ja ne-- som ne-- [01:27:23] ROB: Takže myslím, že to je nie je v cene, v takom prípade, tam je rovné pravdepodobnosť, 7, 8, a 9. Neexistuje žiadna pravdepodobnosť 10. DAVIN: Áno? STUDENT: Mám dotaz. Chceme definovať funkciu vráti nie jednu hodnotu, ale pole. Potom, čo by bolo syntax po návrate? [01:27:41] DAVIN: OK, tak potom would-- po návrate? Takže povedzme, že ste vyhlásili, polia niekde tam hore. Potom by ste práve návrat názov poľa. [01:27:49] STUDENT: OK, ďakujem. Potom už stačí len vrátiť s je-- DAVIN: Ale počkajte, to tak ľúto. Otázkou bolo, ako sa vrátite poľa. [01:27:54] ROB: Aj keď to nešlo byť vyhlásená pole na zásobníku alebo niečo podobné. Muselo by to byť niečo, čo malloced, pretože malloc je, ako sa dostať okolo automatické prideľovanie pamäti. [01:28:01] DAVIN: Áno. ROB: Ako sa dostať okolo miestneho rozsahu. [01:28:09] DAVIN: Ale ty by len vrátiť jeho name-- [01:28:11] STUDENT: [nepočuteľné], že to nie je jeden hodnota, napríklad, dve čísla, tak [Nepočuteľné]. [01:28:18] DAVIN: Nemôžete sa vrátiť mnohonásobné telefónne číslo. Nemôžeš, ako, return-- [01:28:20] STUDENT: Hovoril som o návrate pole, alebo niečo také. [01:28:23] DAVIN: Jo, to je otázka môžem vrátiť viac hodnôt. Môžete sa vrátiť viac hodnôt. Nemôžete niečo ako návrat potom vrátiť B alebo niečo také. Vzhľadom k tomu, po návrate, tie návrat z funkcie. A potom je táto funkcia vykonaná, a ako povedal Rob, je na stacku. [01:28:35] Takže všetko, čo pamäť jednoducho dostane sa vrátil k počítaču. Všetko, čo dostane zabudnutá, v podstate. Takže ak sa chcete vrátiť viac hodnoty, budete musieť vrátiť pole, A spôsob, ako to urobiť, je mallocing. A potom sa vráti x takhle. V podstate stačí vrátiť názov. A až sa vrátite niečo také, že ste v skutočnosti vracia hodnotu. [01:28:53] Takže povedzme, že ste uložili hodnoty v poli. Nie si v skutočnosti návrat týchto hodnôt. Rovnako ako, keď som sa vrátil int, som Naozaj vrátenie kópie hodnôt. Ale keby som si mal vrátiť niečo také, Vraciam odkaz na tieto hodnoty. Tak som sa vraciam, v podstate, adresa pamäte na hodnoty. Dáva to zmysel? Študent: Áno. DAVIN: Nice. Áno? [01:29:13] STUDENT: Keď ste pomocou drandí sem, máte dať srand pred tým? [01:29:17] DAVIN: Nie, nie, ja si to nemyslím. [01:29:20] ROB: Jo, tak to máte povedať niečo o srand? Predvolené vás nikdy hovoriť srand vôbec je jednoducho srand null. Takže drandí na vlastné bude fungovať. A to bude automaticky osivo aktuálny čas, je to, čo používa. DAVIN: Áno? STUDENT: Myslíte si, [nepočuteľné] s číslami? DAVIN: Áno, môžete. Žiak: Takže by ste mohli hovoria, ako, 4x 2. Ide o to, nemôžete predpokladať, potom int je štyri bajty. Only-- [01:29:51] DAVIN: Myslím, že pre kvíz môžete. [Smiech] [01:29:54] ROB: Mm, no. DAVIN: Áno, áno, môžete. Ak sa opýtať, aký veľký je int, nemôžete byť, ako, štyri alebo osem. ROB: Aha, takže v prípade, že Otázkou je najmä, podobne, ak sa jedná o problém kódovanie, by ste mali povedať veľkosť int. Pokiaľ sa jedná o stôl, alebo hovorí, koľko bajtov, nemali by ste vyplniť veľkosti ints. [01:30:08] ŠTUDENTI: [smeje sa] [01:30:18] DAVIN: Dobre, tak prečo je veľkosť int tu dôležitý? Tak ako, ak ideme na 32-bit procesor alebo niečo také, potom to bude štyri bajty. Ale na niektoré z novších veci, by to mohlo byť, čo? Mohlo by to byť osem, nie? Takže tohle-- ak ste práve tvrdo kód štyri, potom na niektorých počítačoch, bude to fungovať. Niektoré stroje, nebude to fungovať. Ale ak na kvíz ktorom sme ako aký veľký je int? Dajte štyri. ROB: Správne. DAVIN: Jo? Žiak: Takže, pretože sme vyhlásenie [Nepočuteľné] vnútri funkcie, Mali by sme dať 3 v tejto funkcii? Alebo to môžeme používať vonku? DAVIN: Môžete ju použiť mimo túto funkciu. Takže on sa pýta zadarmo. [01:30:49] STUDENT: stratiť prehľad kde [nepočuteľné]. [01:30:51] ROB: Oh, voľný nie happen-- to je časť kúzla malloc je to, že nie ste obmedzená na miestnej pôsobnosti. Máte plnú kontrolu nad ako dlho premenné žiť. Takže hovoríme malloc tu, to by mohlo byť úplne oddelené funkcie. To by mohlo byť 10 hodín neskôr že sme sa konečne volať zadarmo. [01:31:08] DAVIN: Tak napríklad, ako, pár týždňov od teraz, keď sa konečne robiť svoju slovníka pravopisu psets, budete mať nejakú funkciu, ktorá vytvára ton uzlov. Takže mallocing ton uzlov v tejto funkcii. A neskôr v samostatná funkcia, ty si bude chcieť oslobodiť všetky tie uzly. Takže si môžete doslova odovzdať uvoľniť ukazovateľ, takže adresa pamäti na to, čo malloced. A to bude v poriadku. Nemusíte sa oslobodiť, ako, v rovnakej funkcii. Áno? [01:31:30] Žiak: Takže malloc premenná [nepočuteľné] vonku? Je to to, čo hovoríš? DAVIN: Počkaj, hovoríš? Prepáčte. [01:31:38] STUDENT: Ak malloc premenná môže byť voľný kdekoľvek v kóde, potom môžu byť prístupné kdekoľvek v kóde? Dokážete udržať je miestna? [01:31:45] DAVIN: Oh, spýtala sa: ako premenná, like-- [01:31:51] ROB: Takže je potrebné ešte mať nejaký odkaz na bloku malloc v pamäti. Tak tu, vraciame x. STUDENT: Oh. ROB: Ak by sme sa nevrátili x tu, a to bolo len neplatné, potom by sme nemajú prístup k ukazovateľ, ktorý bol malloced, a to úniku pamäte. [01:32:05] STUDENT: OK. [01:32:06] DAVIN: Tak ako, povedzme, že vám majú to, ako, tu. ROB: Nie DAVIN: V mojej hlavnej funkcie, nemôžem stačí zavolať túto x a je, rovnako ako, OK, V tejto funkcii som to urobil. [01:32:14] ROB: Správne. [01:32:14] DAVIN: Takže budem volať x v, ako, hlavná alebo niečo také. Môžete to urobiť. Budeš niečo vracať. Ale to, čo chceš vrátiť? Budeš vráti adresu pamäte. A pretože sa vrátite pamäť adresy, ktoré môžu byť prístupné aj inde. Nejaké ďalšie otázky? Áno? [01:32:28] Študent: Je funkcia vyššie je šek na [nepočuteľné]? [01:32:33] DAVIN: Prečo nie je potrebné robiť, že? STUDENT: [nepočuteľné]. DAVIN: Vzhľadom k tomu, že ste nie mallocing nič. Takže to ne-- jo, je to nie ako reťazec s. Je to ukazovateľ niekde. To sú len hodnoty. STUDENT: OK. DAVIN: Jo. Ešte niečo? ROB: Jo? STUDENT: Ale keď [nepočuteľné]? [01:32:55] ROB: Takže, aby sa uvoľnilo pamäti, povedali by sme tu. Takže x je náš ukazovateľ blok pamäte. Máme voľné, že ukazovateľ. A my by sme nutne urobiť tu. Môžeme to urobiť kdekoľvek. Ale ty si len volať zadarmo na niečo, čo malloc vráti. Tak malloc, tu, sa vrátil čo sa uloží do x. Takže môžeme volať zadarmo na x. Nejaká posledné otázky? [01:33:20] DAVIN: Nejaká posledné otázky? Jo? [01:33:22] STUDENT: Je nám ľúto, môžete znovu vysvetliť Prečo by ste oslobodiť tam? Prečo [nepočuteľné]? [01:33:26] DAVIN: Pre tú? [01:33:27] STUDENT: Jo, ako hneď po. DAVIN: Pravdepodobne Nechceme tu zadarmo. ROB: Pravdepodobne nie. DAVIN: Jo, to by to nič robiť. To by sa, rovnako ako, vytvoriť pamäť, robiť veci na to, a potom sa okamžite zabudnúť na to, jo. [01:33:37] ROB: Ale my sme mohli robiť, ako, z nejakého dôvodu tu. Mohli by sme povedať, int hviezdu y sa rovná spiatočnej rad. Urobiť nejaké veci s y, Možno vytlačiť obsah. A potom, konečne, sme hotoví. Môžeme oslobodiť y. STUDENT: [nepočuteľné]. DAVIN: Mám prejdite nadol? Vďaka. ROB: Nice. [01:34:02] DAVIN: OK, to je ono. ROB: Dobre, dobre. Veľa šťastia. [01:34:05] DAVIN: Ak máte otázky, napíšte nám. Veľa šťastia.