[00:00:00] [Predvajanje glasbe] [00:00:11] Davin: V redu, fantje. Torej je ta pregled za prve kviz. So vsi pripravljeni za kviz v sredo? ALLISON: Woo! ŠTUDENT: Woo! Davin: Ja. ALLISON: Ja! Davin: Ta tip je pripravljena. Da je fant, dve roki, lepo. Torej pregled kviz danes, da se bo da je približno eno uro in pol. Smo šli čez vse večji koncepti morate vedeti za kviz. Bomo šli čez nekaj kodiranja, ki jih rabljeni primeri, ki so na vsakem kvizu. In če imate vprašanja, vas prosimo, dvigniti roko in vse, kar je kot je ta. No, logistika okoli kviz online. Torej bova razdelila ljudi gor v različnih prostorih. Temelji na njihovo ime. Torej, če imate vprašanja o tem, kje iti, ali o tem, kaj je material, kot so, uradna beseda o tem, kaj se dogaja da se na kvizu, preverite na spletu. In to je vse do danes. Torej, če je do nobenih vprašanj Sprva bomo začeli. In tukaj je Allison. [00:00:56] [Zaploska] [00:00:57] ALLISON: OK, hvala, Rob. Cenim. Davin moral obrnil k temu. To je neizčrpen seznam teme, kot vedno, kot Davin pravkar rekel. Preglejte dokumentacijo spletni kviz o nični. Toda to je precej much-- je na predmetniku je vse do sedaj smo šli mimo. Tu je vse pošteno igro, kot karkoli drugega da so lahko bili že navedeni v predavanju. [00:01:21] Moj oddelek, tu je samo veliko pregleda. Obstaja nekaj vaje da vidva lahko delati. Vendar za večino del, smo res želijo priti do Davin s tistimi kodo z ročnimi vaj. [00:01:31] Torej bom za letenje skozi to. Če imate kakršnakoli vprašanja, stop me. Naj dvigne roko. Obljubim, da bom verjetno lahko videli. Če ne, samo val okoli. Grem se hitro govoriti. Upam, da so vsi v redu s tem. [00:01:43] OK, posebna beseda, Davin očitno pozabil, da flip skozi te diapozitive. [Smeh] Vi ste v težavah, človek. Nasveti za kviz ničelne tako, prakse kodiranja na papirju. Vidva se dogaja, da bi dobili nekaj vadite, da je zdaj z Davin, tako da vam ne bo v celoti sami. Mislim, da smo dejansko dogaja po teh dveh funkcij. Tako se boste dobro pripravimo. [00:02:04] Bodite seznanjeni s svojimi sklopih problematike. Obstajajo vprašanja na prejšnjih kvizov da vas bo, na primer, za kodiranje up nekaj zelo podobno Mario. Tako da se zelo pozna tvoj problem določa, kot tudi in vprašanja vas prosimo, v začetku o obliki ki jo izpolnite, bo vam služi zelo dobro. [00:02:20] Ali prejšnjo kviz pod časovne omejitve. Ti kvizi so dolge. Čas gre res hitro. In pogosto, se ne zavedate, kako hitro gre, dokler ne boste dejansko Postavi se v okviru teh omejitev. Torej, če si lahko samo izločijo, saj veš, 75 minut, in sicer nocoj ali jutri vzeti eno od teh kvizov pod da boste v veliko boljši formi. [00:02:41] In tudi, ustvarja svoj referenčni list. Ne pozabite, da bi dobili eno stran spredaj in zadaj kot referenco za vaš kviz v sredo. Ustvarjanje, ki je odličen način za študij. Karkoli, da imate težave z z želite vključiti tam. Karkoli, da so bili vaši TFS, podobno, to je zelo pomembno. To morate vedeti, so Mogoče stvari, ki jih imajo tam če nimate jih zapomnil. Tudi če jih poznate res No, včasih ga imajo tam je le nekako udobje za vas, ki vem, kvizi so stresno. Tako lahko vsak udobje dobiš pomoč. V redu, prav, dobil spanje in jedo in radi normalne stvari da vam povem za kvize. [00:03:16] Tako se začne off preprosto, podatkovnih tipov in velikosti. Kot sem rekel, to je le, da bo se mi metali veliko stvari tukaj, da bi morali vedeti. Torej imamo znakov da je eden bajti, Ints da so štiri bajte, dokler dolg, ki so osem bajtov. V bistvu, to je samo vas želeli imeti večje cela. Boje, ki so štiri, dvojice, ki so osem let. Še enkrat, samo ti daje več Prostor za vaše plovci. In nato vnesite zvezdo, tako da lahko vsak kazalec na 32-bitni delovni postaji, ki so vsi fantje potrebujejo vedeti, da so štiri bajte. [00:03:44] Tako da vse stvari, ki jih naj vem, morda stvari želite imeti na vaša referenčna lista. OK, binarna pretvorba na binarni, konverzijo za šestnajstiški, naprej in nazaj, vse stvari, ki jih morate vedeti. Torej od binarno do decimalke. Si fantje želijo, da bi na hitro minuto in poskusite ugotoviti, vsaka od teh in potem mi pa povej, kaj so? [00:04:06] Imam tudi sladkarije v moji torbi, tako da kdorkoli ki odgovarja dobi sladkarije, mimogrede. In imam veliko tega. Naj me zgrabi to. Bom dal to Gabe. Tako da boste lahko roko sladkarije kdor je lepo in zadruge. [00:04:21] OK, sem videl roko tam zadaj. [00:04:26] ŠTUDENT: Ja, prvi je 42. [00:04:28] ALLISON: Ja, prvi je 42, pravilna. ŠTUDENT: [neslišno]. [Smeh] ALLISON: Second ena, tam nazaj v rumeni barvi? ŠTUDENT: 110.010. ALLISON: Pravilno, in to Zadnji, tu dol na dnu? Prav, ja, vem, da želite? Samo vržejo ven sladkarije. Kako približno sladkarije za vsakogar? [00:04:46] ŠTUDENT: [neslišno], ko smo končali. [00:04:47] ALLISON: Pssst. In potem zadnja. Kdo želi odgovoriti? Točno tam. [00:04:52] ŠTUDENT: 11100. [00:04:54] ALLISON: 11100, poglej to. Čestitke, veliko delo, vsi. OK, vsi nekako razumem Postopek za tem? Ste se, da se iz binarno decimalno Tako sem se nagibajo, da to storite, je pisanje ven pooblastila 2. Torej sem rekel, OK, 0 krat 2-0, tako da to je 0, 1-krat do 2 prva, 2 gre naprej na tak način. Ali kdo rad, da izrecno iti skozi primer binarno? OK, v redu. [00:05:28] Decimalnega v binarno je zelo podoben. Jaz ponavadi napisali pooblastila 2. Začnite z eno, ki je največja, vendar ne gre mimo decimalne da iščeš. In potem nekako vaš način dela nazaj sešteva stvari, kot je potrebno. [00:05:42] In nato z dodatkom, da je tako kot normalni dodatkom. Če ste kdaj imeli primer, ko ste dodal dva 1s, to očitno postaja 2. 2 v dvojiškem je zdaj 1 0, tako da boste morali pri sebi 1 v naslednjem stolpcu. Cool. [00:05:59] Šestnajstiški, to je lahko nekaj da je nekoliko manj znana. Tako Rob mi je pravkar povedal, vnaprej, njegov trik za to je, da ga pravkar razšla v štiri byte koščkih, OK? Bits, žal. Vidiš? Hvala Rob. To je razlog, zakaj ste tukaj. [NOISE] OK, tako da smo pravkar razšla bitov na štiri kose. Torej z binarne do šestnajstiški, gledamo na prvi 4, ki je, če imamo štiri 1s v vrstica, kaj več ne da simbolizirajo? [00:06:25] STUDENT: F. [00:06:26] ALLISON: Torej, v tem primeru, kaj je 11111111 or-- ja? ŠTUDENT: FF. ALLISON: Popoln, FF. Tako velik, sladkarije za vas. Zdaj, kako šestnajstiški za binarno smo Samo pomislite nekako v obratnem vrstnem redu. Za vsako številko ali črko, ki imamo v našem šestnajstiški, samo pretvoriti v svojo štiribitna [Smeh] svoje štiri bitno pretvorbo. Torej 5, v tem primeru, kar je 5, če smo jo zastopa štiri bite? [00:06:58] ŠTUDENT: 010? Mm-hm. In potem, ki je dejansko 10, bi bilo? 1010. Torej imamo, da je tukaj. Torej pretvorbo med šestnajstiškem in binarni pravzaprav ni tako slabo. Če gledate na to v štirih bitov koščkih, bo zlato. Everyone-- ja? [00:07:19] ROB: To je neumno, vendar sem vedno spominjal Ker naj bi bilo 10. In binarna je samo 10 10, SO- [00:07:26] ALLISON: Ah, pa gremo. [00:07:27] ROB: Hej. [00:07:28] ALLISON: Hej, sladkorček za Robu. Je non-čokolada stvari tam. Tako da lahko imajo nekateri. Torej ASCII math. Obnašajo. Torej ASCII matematike, kot vidva verjetno tudi spomnite p nastavite 2 z VISIONEER in Caesar, si veliko tega. Ne pozabite, da so osebe temeljni ravni le številke. Tako da lahko naredimo matematike z njimi, tako kot počnemo matematike z ints. [00:07:54] Tako da imamo le malo preprosta stvar tukaj. Imamo nekaj v to inicializira do 65. In B enaka vrednosti ASCII plus 1, znak C enaka D minus 1, in znak D enaka 68. Torej bomo tisk vsi od njih, kot vidimo tukaj. In mi lahko kdo pove kaj bo to izpisal? ŠTUDENT: [neslišno]. ALLISON: Točno tako ena stvar, ki je opazil, da smo tiskanje znakov vsak čas tukaj. Smo imenovanje, čeprav A in B so Ints ko smo jih zgoraj navedeni. Mi smo jih natisnete kot znakov, ki jih odstotkov C in naše printf izjavo, tako da bodo vsi natisnete kot znaki. In seveda, vrednost ASCII 65 volja natisnete kot A. vrednost ASCII plus 1 bi bilo 66, kar bi Ponosen B. Torej v resnici smo dobili B C D. Vsakdo dobro tam? Vsa vprašanja? Super. [00:08:52] OK, obseg. Torej, obseg je očitno zelo Pomembno je razumeti, tukaj. Veliko vas, če vas imajo napake, ki pripravlja podatke, in pravi, nimate dostop do neke spremenljivke, to je verjetno zato, ker vas tako definiran v zanki in nato poskušal dostopati od tega, ali obratno. [00:09:12] Tako obseg v svojem jedru, to samo določa, kje pravimo spremenljivka obstaja, kje smo Spremenite jo lahko, kjer lahko dostopate do njega. To je samo nekako rekel to so edini kraji, kjer imate dostop te spremenljivke. [00:09:26] Torej ti dve področji, da govorimo o med poukom so globalni in lokalni ravni. Tako globalnih spremenljivk govorimo o ko so bili opredeljeni zgoraj glavna. To pomeni, da vaše celotno Program ima dostop do njega, in obstaja tako dolgo saj program teče, OK? Lokalni pomeni, da je več omejena na regijo. Torej, ko imate posebne funkcije kot zamenjavo, vedno govoriti. Vedno govorimo o zamenjavi z A in B. A in B obstaja v tej funkciji. Ne obstajajo nikjer drugje. [00:09:56] Kot je dobro, če imate, če izjave ali za zanke. Kadarkoli imamo, na primer, v zanko imamo int sem enak 0. Imamo neko stanje in ga posodobiti. I obstaja le znotraj oporniki za, da je za zanke. Če boste poskušali dostopati ga drugje, prevajalnik bi kričal na vas. To bi bilo podobno, kaj hočeš, da storim? To ne obstaja. Tako da je dva Različne vrste obsegu. Ali to smiselno za vsakogar? [00:10:23] Tako na primer tukaj, to je le nekaj preprost program. Kaj mislita, je se bo zgodilo na vsaki točki da bomo poskušali tiskati? Torej, tale tukaj, kaj se bo zgodilo? ŠTUDENT: To bo natisnil tri. ALLISON: Right. To bo natisniti tri. Kaj pa tukaj? ŠTUDENT: To ne bo delovalo. ALLISON: To ne bo delovalo. Ste iz področja, kajne? Lokalna spremenljivka ne obstaja izven teh naramnic, vse v redu? In potem kaj pa tukaj? [00:10:56] ŠTUDENT: [neslišno]. [00:10:57] ALLISON: Kaj? Rob, gremo. [00:10:59] ROB: sem rekel. Globalne spremenljivke mora biti Globalna spremenljivka podčrtaj. [00:11:04] ALLISON: Ah, ja, žal. Hvala, Rob. Rob je kot naš prevajalnik rezidenta. On bo samo kričati na nas, ko smo jo potrebujejo. [Smeh] Ja, to bi morala biti globalna podčrtaj spremenljivka. Torej, ob predpostavki, da je ta je globalna podčrtaj spremenljivka, kaj se bo zgodilo tukaj? ŠTUDENT: To bo delovalo. ALLISON: To bo delovalo. Tako da bomo natisniti, tako da samo zelo preprost primer. OK, prototipov. Torej, očitno smo res Poudariti za vas da bi funkcije, če smisla v svojih programih. Ampak seveda, ko vas da svoje funkcije, običajno jih boš opredeliti po glavni. In boste poskušali, da jih pokličete na glavni. In če jih ne uporabljate prototip, prevajalnik bo kričati na vas. [00:11:46] Prototip je v bistvu samo povem svoj prevajalnik da imam to funkcijo pod glavno. Jaz grem, da ga pokličete, preden sem ga določite. Samo počakaj. Obljubim, da je to določeno in si bo imel vse, kar potrebujete. [00:12:00] Torej način to počnemo, je samo vaša vrnitev Vrsta, ime funkcije, vaš vnos seznam. To je v bistvu prva vrstica vašega funkcijo izjave. To je res vse, kar je. Toda to je šele Splošna vrsta obliki. [00:12:14] Torej v našem primeru tukaj, ki vidva naj so videli v poglavju na neki točki, imamo nekateri int kocka, ki traja nekaj int vhodnih. In imamo naš glavni Funkcija, ki poziva kocko. In kocka je opredeljena po dejstvu. [00:12:28] Torej, če ne bi imeli vhod int kocka na vrhu, ko smo imenovani kocka v glavnem, naš prevajalnik bi dobili jezen na nas. To bi bilo podobno, kar O čem govoriš? Kocka ne obstaja. Ne vem, kaj prosi za. In jaz sem le, da bo postanek. [00:12:43] Ampak zato, ker smo naredili našo prototip Na vrhu smo povedal, veš, ko vidiš kocka, ne skrbi. Obljubim, da je definirana kasneje. In da bomo kaj počnete, kar želite. Torej, če ste kdaj imeli funkcijo ki je razglašena po tem, ko ga pokličete prvič, morate so ga izdelali prototip na vrhu. [00:13:01] Ja? [00:13:02] ROB: To je kvadrat, ne cubing. [00:13:04] ALLISON: Oh moj bog. Nisem have-- Gabe, mislil sem ste bili naš lektor. OK fantje, potrpite z mano, tukaj. Upam, da vsakdo je pridobivanje idejo. OK, tako da bi to moralo imeti je kvadrat, ne kubikov. Toda ideja ostaja enaka. Katero koli funkcijo, ki smo kliče po Dejstvo, mora imeti prototip. Vsakdo dobro s tem? Kakršne koli druge tipkarske napake? OK. Morebitne tipkarske napake tukaj, preden začnemo, Rob? [Smeh] OK, tako konstruktov. V bistvu, konstruktov vam omogočajo ustvariti svoj podatkovni tip. Toliko kot int ali char ali float, to je samo še en tip. Všeč mi je, da si o njej mislijo kot, kot, ustvarite svoj podatkovni tip. Vam tako omogoča, da to storim. In ima različne vrste podatkov. [00:13:56] Torej, če se spomnite, v matriki smo lahko imajo samo stvari podobne vrste. Konstruktov nam omogočajo, da imajo večkratni Stvari različnih tipov. Torej, v tem primeru tu, imajo struct imenovano Student, tukaj poimenovana na dnu. In imamo nekaj int id in nekateri ime niz. Torej je to samo še en podatkovni tip. Zdaj imamo vrsto podatkov, imenovano Student. [00:14:20] Zato, ker smo lahko zamislite je le kot drugega podatkovnega tipa, lahko razglasi spremenljivk saj smo vsak drug. Torej, namesto da le imajo, podobno, int študent, imamo samo študent, študent 1. Oh, poglej. To je Rob. Torej, tukaj smo razglasitvi struct, ali spremenljiva imenovano študentsko 1 tipa študenta. Tako se dogaja, da imajo id in ime povezano z njo. [00:14:45] In način dostopa do njih elemente v naši struct je z operaterjem dot tukaj. Torej v tem primeru smo razglašena za nekaj študenta 1. Dodeljena smo ID, da je 1. In mi dodeli ime, da je Rob. OK, vsi dobro s tem? Uporabljajte ga samo like-- ja? [00:15:06] ŠTUDENT: Ja, ko typedef-- storiti moramo uporabiti typedef? [00:15:09] ALLISON: Torej typedef samo pravi that-- Rob, si lahko popravite me na to, če sem wrong-- vendar typedef je le dejansko razglasitvi je kot tip, ki ga lahko uporabite, kajne? [00:15:19] ROB: Ja, to je v bistvu, tako da to je samo ustvarjanje vzdevek ali nadomestno ime za tip. Tako da lahko vnesete, da [neslišno]. Tako [neslišno] obstaja, in zdaj imamo samo [Neslišno] sredstva natanko ista stvar. In tako je tukaj, smo vnesli, mislim, nekateri struct tipa 2 [neslišno]. Torej, to je samo vzdevek za določen tip. [00:15:40] ŠTUDENT: String [neslišno] knjižnica je tipkal gor, kot char zvezda. [00:15:51] ALLISON: Za naše potrebe tukaj, če ste razglasitvi struct, pač typedef struct. OK, tako predhodno, to je Samo normalna spremenljivka tukaj. Dostop jo s piko. če imamo kazalec struct, lahko dejansko uporabite puščice, ki je precej kul. [00:16:10] Torej, v tem primeru imamo kazalec študent 1, ki je tipa študenta. Ne pozabite, da s svojim pointer gradnja, hočeš karkoli vnesite kazalec je poudaril, da bi bilo na začetku. Torej imamo nekaj študent 1, tukaj. In ker ta študent 1 je zdaj koničasta bomo lahko dejansko šel študentsko 1 puščico ime namesto pike, ker je kazalec, in določite Rob. In zdaj, če želimo spremenite Roba Davin, To je samo, da pokažejo, drugačen način, da to storite. [00:16:43] Torej, namesto da bi uporabljali puščico, boste Lahko also-- to bom končal, in nato sprejeti, da question-- si lahko tudi to referenčno študent 1. To je rekel, kot iti v kar je na študenta 1, ki je bi bilo naše študent struct. Nje dostopate s piko in elementa ki jo želite, in nato dodelite. Je bilo vprašanje. ŠTUDENT: Da, da, kako priti imate za uporabo [neslišno], ko ste početje študentsko zvezdo brez [Neslišno] študent? ALLISON: Ker je to ustvarja kazalec. ROB: Bomo govoriti o tem. ALLISON: bomo govorili o tem pozneje pri pregledu. Torej, samo držite to misel. Če še vedno moti pri end, daj se pogovorite z enim od nas. [00:17:20] Torej, to storite popolnoma enako stvar. Mi samo vam prikazuje dva različnih načinov, da to storite. Student 1 je sedaj kazalec, tako lahko dostopate do Name element znotraj struct s puščico. Ali lahko dereference vašega kazalca, in do nje dostopate kot ponavadi. Ali, da je smiselno, da se vsak od? Če so cele kazalec stvari malo zmedeno, bo Gabe govoriti o tem, in nato morda to bo bolj smiselno. Ja? [00:17:46] ŠTUDENT: Da, da, kako je To se razlikuje od? ALLISON: prejšnja? Tako študent 1 v tem Pri tem ne gre kazalec. To je samo vaša dejanska struct. [00:17:54] ŠTUDENT: OK. [00:17:55] ALLISON: ker je to ena je kazalec na struct. [00:17:58] ŠTUDENT: OK, ampak to počne nekako na koncu dela enako [neslišno]. [00:18:02] ALLISON: Učinkovito deluje enako. Skladnja je le drugačen. ŠTUDENT: OK. [00:18:05] ALLISON: Ja, so dejansko enaki. To je samo odvisno od konteksta, boste morda želeli drug na drugega. Ja? [00:18:11] UČENEC: Ko boste to storili sklicevanja na 1-- ALLISON: Mm-hm? ŠTUDENT: Zakaj ste storili imajo oklepaje? ALLISON: Ker študent 1 je kazalec. Tako da boste morali, da se prepričajte, da ste Samo Dereferenciranje kazalec. [00:18:22] ŠTUDENT: OK. [00:18:23] ALLISON: Torej, v tem primeru tukaj, oklepajem okoli njega pomeni, da ste Dereferenciranje študent 1. Torej boš, ko študent 1 točk, kar je vaša struct. Zdaj si lahko zamislite nje kot tisti struct, tako da bomo lahko uporabite naše normalno delovanje dot. Katera koli druga vprašanja? Kul, super. [00:18:48] Torej zadnja stvar, mislim, je moja zadnja slide, woo! OK, tako da s plavajočo vejico nenatančnosti. Smo se pogovarjali o tem na kratko To med predavanjem. V bistvu, imamo neskončno mnogo realnih števil. In, če kateri od vaju radi matematiko, tam je vse vrste kul stvari z nami. [00:19:05] Vendar obstaja neskončno veliko realne številke. Ampak oni so samo končna koliko bitov, ki jih imamo. Tako ste vedno tekoč, da imajo nenatančnosti, je vse. In to je, da je le nekako kot nekaj, kar bi morali vedeti. To je, kot smo vas lahko vprašam, zakaj ne plavajočo vejico nenatančnosti obstaja? Torej samo nekaj, kar bi moral vedeti. In s tem, sem obračanja se prenesejo ptičarji. [00:19:27] BINKY: Pozdravljeni, fantje. Moje ime je Binky. Jaz bom govoril o kazalca. Ja, tako je pravzaprav kazalci moj najljubši del tega predmeta. Torej, samo, da bi jasno kaj Allison je bila tu govoriš, da je razlog why-- edina razlika tu, velika razlika je bila pot izjavljamo stvari. Tako študent zvezda pomeni to je kazalec na študenta. Ker diapozitiva pred, študent Dejanska struct, kot dejansko študent, ki vsebujejo katerega koli od teh stvari. [00:19:54] In razlog, zakaj smo želijo to-- ja, Davin? [00:19:57] Davin: Kaj puščica pomeni? [00:19:58] BINKY: Puščica sredstva popolnoma enako kot ta. Tako da ne boste res potrebujejo puščico. Všeč mi je, če si edini program v C, lahko samo uporabljati. Oprostite, jaz ne, kaj to je. Saj lahko uporabiš to sintakso. [00:20:14] Ampak nekateri ljudje, ko so bili načrtovanju C, so ugotovili, da ljudje, uporablja to sintakso toliko, da bo všeč ti samo pridi gor s strukturo sintakso za to. In to se je dogajalo v oblika tega puščice. In to je res lepo, ker simbolizira nekaj kot smo dejansko po to puščica, kazalec this, proti neki prostor v pomnilniku. In ko smo prišli tja, smo želeli pogled na ime tega študenta, če je to smiselno. OK? [00:20:43] Torej, to je povsem enako. To je natanko ista stvar kot je ta. Oni se zbirajo popolnoma enako, OK? In razlog, zakaj smo tukaj funkcije malloc nekaj, je zato, ker v tem primeru, naša spremenljivka je dejansko samo spremenljivka kazalec. Tako imamo le nekaj prostora v pomnilnika, ki je drži kazalec. Mi dejansko nimajo nobenega prostora ki ima dejansko struct. [00:21:06] Torej, to je treba storiti v dveh korakih. Moramo ustvariti spomin postaviti struct v. In moramo ustvariti spomin postaviti kazalec v. Torej, oni so v bistvu dva različne spremenljivke, TUKAJ. Eden izmed njih je tipa študenta, razen njega sploh nima imena. In drugi je tipa študentskega zvezda. In nato 1 točk študentske obstaja, če je to smiselno. OK? [00:21:28] Torej je razlog, zakaj jih uporabljamo kazalci je zato, ker je vse v računalniku, vsaka spremenljivka v računalniku, ima dve stvari. Ima svojo vrednost. In ima svoj naslov. In dober način, da konceptualizirati to je tam veliko težav, ko boste poskusite uporabiti funkcije. In bomo poskušali poglej v eno od teh. In sicer, da se bo razmišljati o spominu kot škatle. [00:21:50] Vedno ste pomislili spremenljivk ko pravite na enak 5. Misliš, da dajanje 5 v polje. Pa kaj, če hočeš, da prenese da int v odvisnosti? Pravkar ste pass-- jaz ne know-- x v funkciji. Toda kaj se zgodi, je običajno kot ljudje, ki jih bi si mislil, kaj, kot da sem mimo polje za osebo. In to ni res zgodilo v računalnikih. Kaj se zgodi, je, da kopirate vrednost škatle do škatle osebe. [00:22:17] Torej, kaj sem hotel povedati je, da če imate function-- sorry-- tukaj, če imamo funkcijo, kot pet up tam, če ste poskušali prenesti spremenljivko, to je le, da bo za kopiranje. Če začetnih nx enak 3, to se dogaja kopirati to vrednost do variabilnega a tam gor. OK, in to je vrsta razloga Zato želimo uporabiti kazalce. Ker namesto daje le vrednost, namesto samo mimo le vrednost na funkcijo, želimo prenesti z referenco. Kar imenujemo sredino s sklicevanjem je nekako dajanja polje na funkcijo, tako da lahko tudi funkcijo spreminjanje vrednosti v tem polju. [00:22:53] OK, tako da samo nekateri osnovni kazalec stvar je, da ustvarite kazalci, ste ga pravkar razglasi vrsto, in si dal zvezdo desno po njej. In tip je pravkar kaj gledala. Torej, če je to int zvezda, ste kaže na int. Če je char zvezda, ste kaže na grafikonu. In če je študent zvezda, ste kaže na študenta. OK? [00:23:08] In oni so vse 4 bajte. Ker te spremenljivke to dejansko ne morajo imeti char, int, ali študent. Treba le, da imajo naslov. Da je, zakaj oni so vse 4 bajte dolgo pri normalnem 32-bitni stroj. OK? Torej tukaj, x je spremenljivka, ki kaže za notr. y kaže na char. Z točk s plovcem. Vsa vprašanja tukaj? Cool. In tam so dva različni simboli pa imajo imeti v mislih, ko prihaja na kazalec. Torej, navajanje in Dereferenciranje so pri velikih. Torej je znak pove o Ime spremenljivke vam daje? ŠTUDENT: Naslov. BINKY: Naslov. Torej, če ste razglasi int a enak 5, nato 'znak o se dogaja, da vam naslov. In lahko dejansko poskusite za tiskanje in videli, da je kaj naslov v pomnilniku vaša spremenljivka ima. In potem dereferencing-- tako, da je na to, pridobivanje address-- Dereferenciranje je ravno nasprotno. OK, tako kot včasih, je nasproti delitvi, zvezda je nasprotje 'znak. Torej Dereferenciranje sredstva tja. Torej, če daš star-- I ne know-- 50, ki je dogaja, da poskušajo iti na naslov Številka 50 v notranjosti računalnika. OK, in zakaj vidimo da so nasprotja? Ker, kaj se zgodi, če vam nekaj podobnega kot zvezda 'znak? No, znak pove vam naslov spremenljivke, naslov. Ampak zvezda pomeni iti tja. [00:24:35] Torej, kaj se zgodi, če vas pojdite na naslov? Pravkar ste dobili, kajne? Torej bo naslov je ista stvar kot. Da je, zakaj oni so ponavadi iz same-- ta in ta se iz kot nasprotna operaterjev. OK? Tako kul. [00:24:53] Pod pokrovom motorja, na primer, če izjavljamo int x enak 5, imamo spremenljivko. In ne pozabite, da sem rekel, vsak variable-- in to je dobra stvar da v mind-- ima dva različne stvari, povezane z. Ima obravnavati, in vrednost. OK? [00:25:07] Torej vrednost je v tem primeru 5. In naslov is-- recimo, da sem kar nekaj up-- To je 0x04. In edini razlog, zakaj smo ponavadi zastopanje naslove v šestnajstiškem je ena, ker je to, kot dobro. To gre tudi z binarno. To je enostavno pretvoriti v in iz binarno. In ne preveč velik, če imate zelo veliko število. Tako smo želeli uporabiti šestnajstiški pri tiskanju naslovov. Ampak jaz bi lahko predstavljala da je to število. To je v redu. [00:25:32] In zato ima naslov 4 in vrednost 5. In potem sem rekel int zvezda kazalec. Torej, to je drugačen tip obvestilo. Int zvezda pointer enaka naslov x. Torej, kaj se dogaja, da je vrednost PTR? To se dogaja, da naslov x, tu spodaj. OK, tako vrednost bo biti enak naslovu. To je naloga delovati delam. In potem ptr se dogaja, da imajo svoj naslov, ki se izkaže, V tem primeru, 8, OK? [00:26:03] In potem sem ustvariti novo VZOREC. In rečem int kopija enaka tja. Torej, pojdi na tisto, kar se kaže na ptr. No, kaj to ptr imate? Ptr ima 0x04. Kaj se zgodi, če sem poskusil, da bi šel tja? Bom našla moškega, ki ima naslov x in ki ima naslov 4. In ki je obravnavala štiri je x. Ali to smiselno? Ja? [00:26:28] ŠTUDENT: V tem primeru je kazalec v sklad? [00:26:32] BINKY: V tem primeru, it's-- dobro vprašanje. Nisem res misliš o tem ko bodo do te naslove. Toda, če je to, tako kot vsi to so lokalne spremenljivke, potem x bo živel in-- vse se dogaja, da živijo v plasteh. Torej, vse, kar se dogaja da se kaže na kup. Dobiš le kup kadar začnete uporabljati funkcije malloc, kajne? [00:26:52] Torej, če se spomnimo stack vsakič pokličete funkcijo v programu, kot, na primer glavni ali katerokoli drugo funkcijo, kot je printf. Vse lokalne spremenljivke dogaja se, da v dimnik okvirju. In oni bodo dobili kot je nakopičil v plasteh. To je tisto, kar se imenuje sveženj. In vse tiste lokalne spremenljivke se bo tam. In heap-- in gremo govoriti več o tem later-- kup je, če vse dinamično dodeljenega pomnilnika življenje. Cool? [00:27:20] Gremo na ta diapozitiv. Ja? [00:27:22] ŠTUDENT: Zakaj se ne int copy vrača 0x04? [00:27:27] BINKY: Zakaj se ne int copy vrača 0x04? [00:27:30] ŠTUDENT: Zakaj se ne da [neslišno]? [00:27:32] BINKY: Ker kaj je vrednost PTR? [00:27:37] ŠTUDENT: 0x04. [00:27:38] BINKY: 0x04. Kaj se zgodi, če greš na 0x04? Kaj dobite? [00:27:41] ŠTUDENT: Oh, OK. BINKY: Vidiš? ŠTUDENT: Da. BINKY: Tako boste dobili 5. Torej, en izvod se dogaja, da imajo 5, če je to smiselno. Ja? [00:27:49] ŠTUDENT: Lahko smo gotten 5 v polju vrednost [neslišno] če bomo dal int kopirati [neslišno]. [00:27:55] BINKY: Int-- mi bi, ja. Da bi naredil precej ista stvar. Ampak na ta način, se lahko prenese naslovi funkcij. In to je kul stvar bomo storili zdaj. [00:28:06] Tako da je ta vrsta vadbe vedno pride gor on-- zelo ponavadi pride gor na kvizih. Tako da je res dobro, da bi poskušali storiti, da se takšne stvari sami. Torej, poskusite, da bi spremljali kaj naslovu je, in želite, da se vrednosti spremenljivk so v vsaki točki. Torej, to je točno kaj bomo storili. Tu moramo korake, on, dva, tri, štiri, pet. Ena, dva, tri, štiri, pet. In bomo spremljali od vrednosti x in. [00:28:34] Torej, kaj to počne, če je to buggy kodo, skušamo narediti pet. Tako smo poskušali priti v spremenljiva in spremenite njeno vrednost 5. In ne pozabite, moje analogijo z polje in predajo polje z nekom? Torej glavna je to polje imenovano x. In vsebuje vrednost 3. In skušam predati to polje, da na pet. [00:28:58] In želim, da pet spremeniti vrednost tega polju 5. In potem sem samo tiskanje vrednost x. To je tisto, kar moj function-- To je tisto, kar sem poskušal narediti. Poskušam posodobiti vrednost x do 5. Je jasno, kaj funkcija počne? [00:29:16] OK, kaj se dogaja, da se Vrednosti x in prav tukaj, Prva vrstica, tik pred prvo line-- bi say-- programa? [00:29:27] ŠTUDENT: Verjetno smeti. [00:29:28] BINKY: Just smeti stvari. Zato sem dal N / A. Torej, ne vem. Všeč mi je, sploh ne obstaja, ker nismo poklicani, da pet. Int ni razglašena. In x bo obstajala tu, vendar imamo v resnici ne dodeljene nobene vrednosti do njega, tako v redu? [00:29:46] In potem, kaj se bo Vrednosti X in A v številka dve? [00:29:54] ŠTUDENT: [neslišno]. [00:29:55] BINKY: Torej x se bo 3. To je enostavno, saj smo dodeljevanje 3 nanj. In še vedno ne obstaja ker samo živi v pet. Torej bom imel 3 in nič. ali kot smeti, karkoli, ni res opredeljene. In zdaj, to je pomembna linija. Tukaj bomo pravzaprav klic na pet. In zapomnite si, kaj sem rekel. Mi nikoli ne preide v polje. Pravkar smo kopirati vrednost polje v drugo polje. To je vse, računalniki pa, kopiranje stvari iz enega kraja v drugega. [00:30:27] Torej do pet, kaj dejansko počne Ali je izvodi vrednost x na. Torej, kaj se dogaja, da je tukaj? Vrednosti x in. 3 in 3, bomo samo kopirajte je več od x. Cool. [00:30:45] Zdaj smo tukaj. In zdaj gremo posodobiti enak 5. Kaj se bo zgodilo v skladu s štirimi? [00:30:55] ŠTUDENT: [neslišno]. [00:30:56] BINKY: gets posodobljena, toda x ni dobil posodobljena. Ker x še vedno živi v glavnem, to je povsem drugačen blok pomnilnika. To je drugačna spremenljivka. je druga spremenljivka. Se zgodi, da imajo Enaka vrednost, ker I kopirana vrednosti x in. Toda zdaj, ko sem naredil enako 5, jo resnici ne vpliva x na kakršenkoli način. To je težje del. Ali je smiselno, da vse? Ja? ŠTUDENT: Še eno vprašanje, imate 3. Zakaj je already-- oh, ne, to je 3. Žal, ni važno. Prebral sem, 5. [00:31:29] BINKY: Ja, 3, 3. [00:31:30] ŠTUDENT: [neslišno], ja. BINKY: In potem smo dodeliti 5 do , vendar v resnici ne spremenijo x. Dobro? ŠTUDENT: Da. BINKY: Da? Ali lahko še enkrat pojasnite, kako dobi kopirati [neslišno]? [00:31:42] BINKY: OK, tako da, ko pokličete na pet x, tako da to vrstico kode tukaj. pet x, kaj je x? x je samo 3 na tej točki, kajne? Torej si lahko samo mislim, dajanja 3 v tukaj in pozabili na x. Le 3 dal tukaj. Všeč mi je, da bomo prekopirate vrednost x na int a, ki je tam gor. OK? [00:32:13] Torej, vrednost x je 3. Bomo izvodu 3 prenesejo. In vse to drugi blok spomin, ta druga spremenljivka imenovano bodo imeli 3, kot tudi. Ali to smiselno? Ja? [00:32:25] UČENEC: Če daš na pet kot ima kot celo število x, namesto, bi to popraviti vse? [00:32:32] BINKY: Če je integer-- ne, da ne bi vsega popraviti. Torej, to je zelo dobro vprašanje. To ni res pomembno, kaj pokličeš tiste spremenljivke. Again, bo to vprašanje obsega, ker oni niso enaka x. Oni so popolnoma različne prostore v spominu. ŠTUDENT: [neslišno]. BINKY: Tako da v resnici ne važno, kaj jim pravite. Da ne popraviti stvari, OK? Še vprašanja? Ja? [00:32:55] ŠTUDENT: Kako je nazaj številka pet [neslišno]? BINKY: OK, nismo storili še. Pojdimo številka pet, nato pa. [00:33:03] ŠTUDENT: [neslišno]? [00:33:04] BINKY: Kaj? [00:33:05] ŠTUDENT: Ali imate donos na vse? BINKY: Nimamo donos, ne glavni. Ampak glavni vrne 0 samodejno če ne vrne ničesar. Ja? [00:33:15] ŠTUDENT: Ali lahko naredite main-- ali lahko naredite do pet vrne? [00:33:24] BINKY: Lahko bi imeli pet vrne, ja. Ampak potem bi morali dodeliti x enaka vrednosti vrne na pet, ki bi bila nekoliko drugačna programa. To bi delovalo. Ampak, kaj hočemo storiti, je to, kar je imenovana sprememba nekaj v mestu. Zato želimo, da bi dejansko spremeniti to polje in ne skrbi približno ob vrniti vrednot ali česarkoli. OK? [00:33:46] To je tako kot funkcijo swap David je pokazala v predavanju, razen, da sem ukvarja le z eno spremenljivko. On pa dva, tako int a in b ter potem začasna spremenljivka in malenkosti. OK? Torej, kaj je zadnja vrstica? Po petih donose, to je preprosto se dogaja, da gredo stran. Ne bomo imeli več, in samo x še vedno živi. [00:34:10] In veš kaj? x ni spremenil svoje vrednosti, po vsem, ker smo samo zaradi spreminjanja vrednosti. Zato je bilo 3 x po vsej. OK? Dobro. Torej, ta program ne dosegli, kar smo želeli. Zdaj pa jo popraviti. [00:34:24] In program fix je s pomočjo kazalcev. Kaj moramo storiti, je, da smo imeli tri linije, ki so drugačni. Prvi, ki se mi ne gre x. Mi smo podajali naslov x. Torej, namesto kopiranja več vrednost golu, Jaz sem še vedno dogaja, da prekopirate nekaj. Vendar sem čez kopiranje naslov golu. [00:34:45] Torej, če sem mimo naslov škatla za pet, nato pa na pet bodo lahko ugotovili, da v spomin in spremeni svojo vrednost. [00:34:53] Torej, potem pa tam, imam da ni več int. je int zvezda. To je kazalec na celo število. In potem, ker sem mimo nagovorim tukaj, in potem, kaj naj storim ni enak 5, ker drži naslov. Torej, kaj želim storiti, je šel tja in posodobiti vsebino tega naslova s 5. [00:35:18] OK, tako da gremo skozi vse linije enega po enega. Torej, ko sem začela sem, Še vedno N / A, N / N / za vse, kar je v prvi črta, ker imam res ne razglašena še stvari. In potem liniji, imam x enak 3. Int zvezda ne obstajajo, Isto kot prej. [00:35:39] Zdaj postane zanimivo. Torej grem mimo. In predpostavimo, da je naslov x 12 v šestnajstiški. Naj samo prevzeti to. Izmislil sem si jo. Torej, kaj sem mimo, tukaj je pet. Jaz sem, ki poteka 12. [00:35:56] Torej, kakšno vrednost pa ima? [00:36:04] ŠTUDENT: [neslišno]. [00:36:06] BINKY: Žal mi je? [00:36:06] ŠTUDENT: [neslišno]. BINKY: Ja, kot, da Dovolite predpostavimo, da smo tukaj, zdaj. Sem vprašal. [00:36:12] ŠTUDENT: [neslišno]. [00:36:13] BINKY: To je bila sprožena. [00:36:14] ŠTUDENT: [neslišno]. BINKY: Ker smo opravili nekaj na funkcijo. Ja? [00:36:19] ŠTUDENT: Naslov x. BINKY: To se dogaja, je naslov x. In naslov x 12, dobro. Torej x se bo 3, saj nismo zares spremenilo x še ni. In potem se bo 0x12, tako naslov x, ker je to kaj smo opravili na pet. [00:36:38] In kaj se potem zgodi če skušamo iti tja? Kaj bomo našli? Torej, če poskušate tiskati zvezda, bomo sledili ta naslov in dobili vrednost v notranjosti. In vrednost, je le Vrednost, enaka tisti x ima zato, ker je to naslov x, ki bo 3. Smo dobri? [00:36:56] OK, potem pa zdaj, smo dejansko iti tja. In smo posodobili karkoli je v tem naslovu 12. Mi bi bilo 5. Tako da zdaj oba x in zvezda je 5. [00:37:13] Zakaj je tako? Ker naslov xa je 12. In ima prav tako 12 kot svojo vrednost. Torej, če sledimo 12, smo Samo boš našel x. Torej, karkoli storimo z zvezda se bo zgodilo X, ker vsebuje naslov x. OK? [00:37:34] In to je kot bistva popraviti. Torej, zdaj smo sposobni, od pet, dejansko dostop do pomnilnika, ki je živel v glavni. Torej, ta spomin ne živi v na pet, kot prej, ta naslov 12. In smo bili sposobni iti tja in spremenite njeno vrednost 5. [00:37:50] In potem, ko smo se vrnili, pozabimo. Pozabimo STAR. In x je še pet. Torej, če želite, da izvajati funkcijo swap, ti bi samo naredil točno isto stvar, razen morate int zvezde tukaj in tako naprej in tako naprej. OK? Smo dobri? Cool. [00:38:10] Torej kazalec aritmetiko. To je nekoliko zapletena tema. Tako se izkaže, da kazalci so le cela števila. Lahko si misliš o njih, kot cela števila. Ker je v spomin, imate kot pomnilniški naslov nič, ena, dva, tri, štiri, pet. Tako bomo lahko povzamemo pomnilniške naslove. [00:38:23] In to je ponavadi kaj storiti, ko ste v in paleto, na primer. Niz je tako kot sosednji blok pomnilnika, za veliko znakov, na primer, veliko ints. Torej, če želite iti na Drugi int ali tretje int, lahko samo povzamem kaj najprej naslov in boste dobili tam. Torej je to res koristno za to. [00:38:39] In stvar, ki vodijo v mislih, čeprav je da to ni ravno všeč normalna aritmetična v smislu da, če imate opravka z, recimo, int zvezda, in dodate 1 do njega, potem ne boš šel dodati 1 na naslov, boste dodali 4 na naslov. Ker int je 4 bajte. [00:38:57] Torej, to je tako kot hoja na paleto. Če imamo niz veliko ints in Nato smo poskušali iti v drugega, to je v bistvu samo seštevek naslov prvega izmed plus 1. Ampak to ne bo be-- samo recimo da je naslov prvega izmed 4. Tu, v tem primeru. In če povzamemo, da je to je tisto, kar se dogaja. Imamo int. Int x enak 5. X ima vrednost 5. In smo inicializirati to kazalec, int y int zvezda y enak naslov x. [00:39:31] Denimo naslov x 4. Kaj se bo zgodilo Zdaj, če sem vsoto dodati 1 y? To se dogaja, da dejansko Vsota 4 namesto samo 1. Torej dodam 1, vendar ga dejansko Dodana 4, ker računalnik je pameten. Tako se dogaja, da dejansko dodali z i-krat velikost tipa kazalca. OK? [00:39:58] Torej, če bi bila znak, na primer, če bi bila ta char zvezda y, in če bomo dodali 1, potem bi to je 5, ker znak je 1 bajt dolgo. Dobro? [00:40:10] In na koncu smo prišli do kazalci in nizi. Izkazalo se je, da vsakič, ko imate opravka z vrsto, ste dejansko ukvarjajo s kazalcem. Zelo lepo konceptualno razlog za to je, da so nizi zelo velika. Torej, ne pozabite, da sem rekel, da vsakič, ko se boste peljali stvari okoli, ste vse kopirati. Torej, če imate niz to je res, res velika, si v resnici ne želijo, da vse kopirati vsakič jo podajaš v drugo funkcija, ker je to ravno ogromne količine dela. Torej, kaj morate storiti, je le preteklost naslov prvega zloga. In potem bo funkcija dostop vseh elementov v tej matriki. Torej ste opravili paleto njegov naslov, tako naslov prvega zloga. [00:40:48] Torej, če izjavljamo int Niz 3, tu, vemo, kako priti do prvega elementa konzoli zapis. Če se spomnite nosilec Zapis, matrika bracket 0 enak 1. No, to bi bilo ravno Enako kot samo pojdi tja in dal 1. OK, je popolnoma ista stvar. Torej konzole zapis v tukaj bo enaka tej vrstici. [00:41:13] In veš kaj je nosilec zapisa za matrične nosilec 1 bo? To bo šele biti ista stvar kot je ta. Torej, dodamo eno na paleto. Premaknete eno skupaj v spomin. Pojdi tja in dal 2. OK? In ta je ista stvar. Želimo iti v tretji box, tako matrika plus 2. Pojdi tja in dal 3. Tako v spominu, kaj je se bo zgodilo, je, da smo dogaja, da imajo 1, 2 in 3, kakor trije elementi te matrike. [00:41:44] Lahko bi to storil s pomočjo naša seznanjeni nosilec zapis. Rad bi samo vidva vedeti da so ista stvar. OK, vprašanja o tem? Lepo. Zdaj bom roko je več kot Hannah, [00:41:59] HANNAH: Bravo, Yee-haw. [00:42:00] BINKY: Govorimo o spomin in članek stvari. [Ploskanje] [00:42:06] HANNAH: Živjo, cool, tako da smo bomo govorili malo bolj o spominu, ki smo ga pravkar lotiti s pomočjo kazalcev. Torej obstajata dve glavni deli spomin, da smo se ukvarjajo z. Imamo kup, ki raste v dnu, in kup, ki gre dol z vrha. In kup se dogaja, da imajo vsi naši stopnji spremenljivk. Tako da vsak zahteva, da funkcija dobi svoj lasten okvir na skladovnici. Tako kot Gabe že omenjeno, če bomo spet in spet poklical funkcijo, bomo kup stvari na kupu. [00:42:35] In podobno, heap, ki se začne na vrhu se dogaja, da imajo vse pomnilniku da smo dinamično dodeliti. In tako kot smo dinamično dodeliti pomnilnika, to bo prišel dol proti dnu. Nekaj ​​stvari, da se zavedajo, kdaj smo z kup in kup, s kupa, če imamo preveč many-- dajmo say-- rekurzivne klice, in smo spet kliče funkcijo, in še enkrat in še enkrat in še enkrat, in to je zlaganje up, zlaganje up, zlaganje up. In to se dogaja crash v kup. Bomo zmanjka pomnilnika. To bo povzročilo problem za računalnik. In da se imenuje kup overflow. Tako da je zagotovo nekaj, kar vas bi se morali zavedati in se skušajo izogniti. In kup, morali zapomniti se po nesreči ne pušča spomin. Vsakič, ko uporabljate funkcije malloc, ne pozabili sprostiti ta pomnilnik. V nasprotnem primeru bo to samo biti na kupu zapravlja, in računalnik ne bo vedel, da je prost za uporabo tega spomina. Torej tistih, ki so nekaj stvari biti zelo previdni, ko imate opravka z kup in kup. Vsa vprašanja s tem? Super. [00:43:31] OK, v redu. Torej ta vrsta ima isti Ideja kot dimnik, kjer se preliva gremo onkraj Meje, kaj spomina se bova naj bi mogli uporabljati. Tako da, na primer, pufer, ali ste lahko samo pomislite, da matrike. In smo rekli, v redu, bomo ustvarite to lepo malo array. To se dogaja, da se niz. Ali pa se dogaja, da shranite znakov. In to je samo reči zdravo. In to je nedoločena. To je to. [00:43:53] Ampak, če bi bil nekdo zlo in je želel, da storiti s tem polju nekaj slabega, kar Sem lahko naredil je začeti pisati mimo koncu niza. In kot boste videli, če Pišem dovolj daleč, Jaz lahko dejansko vpliva na povratni naslov. In če začnem vplivati povratni naslov, Jaz vpliva, kako program dejansko deluje. In namesto da se vračajo, vas veš, srečno niz, kot je zdravo, sem bi lahko naredil nekaj slabega, kot iti v nekje drugje v računalniku, še spomin, ga spremeniti, kar hočem narediti. Torej, to je, kaj bi to izgledal je, če sem nekako ga napolni z naključnim smeti vrednosti, v tem primeru, le. In potem, ko sem dejansko prišel do pomnilniškega naslova, Začel sem jo napolnite z nečim da je naredil, kar sem hotel storiti. Vsa vprašanja z buffer overflow? Super, ki plujejo pod desno skozi te stvari. [00:44:40] OK, tako da smo se veliko pogovarjali o okoli kazalca z Gabe. Kako smo dejansko dobili kazalec? Kako bomo dobili naslov v spomin? No, lahko uporabite to lepo klic funkcije funkcije malloc, ki bo dobil košček spomina, posebej v heap, kot smo omenili, in to se dogaja, da vam nazaj kazalec na ta naslov v pomnilniku. In argument, da smo dati na funkcije malloc je, koliko prostora v pomnilniku, kar si želimo. [00:45:04] Tako da lahko vidite velikost v bajt. Recimo, na primer, ali dejansko, v tem primeru, namenjamo dovolj prostor za 10 števil. Torej je verjetno tisto, kar smo si želeli postaviti tukaj je nabor 10 števil. Tako smo izročiti to velikost ints, ki smo se naučili je bilo, koliko bajtov? ŠTUDENT: 4. HANNAH: 4, lepa, in smo želijo 10 tistih v vrsti, tako da imamo dovolj prostora za shranjevanje vseh 10 celih števil, v tem primeru. Nekaj ​​super pomembna, kadarkoli pokličete funkcije malloc, boste morali preveriti null. Če se ne preveri null, no, funkcije malloc če zmanjka prostora in vam ne more več dati koli več pomnilnika, vrne null. Torej, če ne preveri, funkcije malloc lahko vrne null. In potem, če skušamo dereference null kazalec, bomo dobili napako segmentacije, katerih bomo govorili o sedaj. Super. [00:45:56] OK, vprašanja s funkcije malloc? Ja? [00:46:00] ŠTUDENT: Ali preverjanje null [Neslišno] ne stori na kvizu? [00:46:05] HANNAH: Seveda, je bilo vprašanje, tako ne matter-- na kvizu, boste dobili točke, če je off nimate preverite null? Ja, boste dobili točk off če ne preverite null. Vsak čas pokličete funkcije malloc, tako na kviz in vaše psets in v resničnem življenju, boste morali preveriti null. Dobro vprašanje. [00:46:18] Gabe: Kaj, če ne bom sprostila? HANNAH: Gabe želi vedeti Kaj pa, če ne bomo brezplačno. Potem bomo imeli pomnilnika v našem kup. Katera koli druga vprašanja? Ja? [00:46:27] ŠTUDENT: Ali lahko you-- iti čez buffer overflow real spet hitro? [00:46:30] HANNAH: Seveda. Vprašanje je bilo, lahko gremo čez buffer overflow res hitro. Vrniva se na tiste diapozitive. Torej buffer, lahko samo pomislite, da je niz, kajne? Imate nekaj prostora v pomnilniku. In ko smo najprej ustvariti našo zbirko, vemo, nizi so fiksne velikosti, ali naša buffer ima fiksno velikost. [00:46:45] Torej, recimo, v tem primeru imamo samo dovolj prostora za pisanje niz zdravo. Če gremo mimo, da je vezan, če gremo mimo kakšna je naša matrika smo rekli, da bi lahko držite, smo lahko dejansko začeli pisanje v pomnilnik da računalnik ne hočejo, da pisanje v. In še posebej, če smo zadeli nekaj podobnega vrnitev obravnava funkcije, ki kot katerikoli drugi kos pomnilnika, je ravno nekje v vašem računalnik, lahko dejansko spremeniti in začeti narediti zle stvari. Odgovor na vaše vprašanje? Super, kaj drugega? Ja? [00:47:17] ŠTUDENT: Torej kup [neslišno] se omenjeno gredo od dna gredo gor. V dosegu dimnik, ali spomin iti od, kot so, od zgoraj navzdol, ki se nanašajo na vsakem odmoru? [00:47:28] HANNAH: Kako narediti you-- nasloniti na Robu na to. [00:47:35] ROB: To se bo v enaki kot smer dimnika raste. HANNAH: OK. ROB: Torej, sem zmeden. To se dogaja, da je abstrakcija. HANNAH: OK. ROB: To je pravilna. Torej, če je kup raste navzgor, nato pa ga generally-- Ni nujno, da bo tako. lahko pa izjavi, int x. Potem si razglasi int y. Potem int x, bodo na splošno nižje na sklad kot int y. Ampak to je samo dejstvo. To ni tako, kot pomemben semena stvar. [00:48:02] ROB: Torej, vprašanje je samo še enkrat kaj se zgodi vsak okvir gradi. Tako da vsak dobi funkcija košček skladovnice. In kot greš gor, znotraj tega košček, v tem okviru, bomo rekli, da spremenljivke v tem okviru tudi premakniti navzgor. Vprašanje? [00:48:17] ROB: Samo, da se na mic. HANNAH: Oh, ja. ROB: Jaz bom govoril v vas. HANNAH: Oh, ja, OK. ROB: Izjema je Za nizi in konstruktov, kjer nizi, nižji indeks v matriki, in konstruktov na višje polje v konstruktov zagotovljeno, da se pri nižjih naslovov kot poznejše vrednosti v matriki. Torej tistih, ki so zagotovljeni. Ampak vse posebne spremenljivke znotraj, kot int x in y int v funkciji, ni potrebno razmerja med njihovimi naslovi. HANNAH: Še eno vprašanje tukaj? ŠTUDENT: Torej, v pufru tok, buffer overflow samo se je zgodilo šele, ko vas so, kot so, dodeljena Znesek array da je potem večja? Všeč mi je, kajne? Torej, če ste prosi za nekaj od user-- [00:49:05] HANNAH: Mm-hm. ŠTUDENT: Ali lahko na silo dam nekaj nazaj da je večji kot karkoli ki ste jih namenili za njih? HANNAH: Seveda, tako Vprašanje je bilo, v bistvu, uporabnik lahko dam več, kot ste zahtevali? ŠTUDENT: Ja. HANNAH: No, bi lahko preprečili Uporabnik s tem. Lahko bi rekli, še posebej ne mi je dal več kot x število s bajtov Sem ti dal samo prostor za x število bajtov, x število znakov. Torej, to je nekaj, kar želite preprečiti. Ja? Kakšna je razlika med kup overflow in buffer overflow? [00:49:30] HANNAH: OK, tako da se bo sveženj overflow-- oh, kaj je razlika med skladovnice overflow in buffer overflow? Zato smo želeli, da razmišljajo o prekoračitev dogaja, ko smo dejansko zlaganje up te funkcijske klice. Recimo, da imate rekurzivno funkcijo, ker vemo, da vsakič, ko pokličete funkcijo, je dobil sama okvir na skladovnici. [00:49:45] Tako smo stack previsoka, in Nato začnemo preliva. In mi porabi preveč pomnilnika, In mi ne bi nikamor odšel. Smo dobili to napako. [00:49:51] Buffer overflow je v okviru programa. Želimo, da morda ne bi bilo nujno, zmanjka pomnilnika enako da bi lahko, če smo zlaganje up toliko klici funkcij, vendar pišemo mimo spomin da vemo, da lahko uporabljate. In to nam omogoča, da naredite zle stvari. Ja? [00:50:08] ROB: Ja, boste morda želeli samo ponoviti to, lahko pa jih tudi meni, iz dimnika overflow si lahko predstavljamo kot posebno vrsto za buffer overflow. Ali pa si samo zamislite si kup kot res velik buffer. Potem ko ste se razlivala si kup, to je nekako kot buffer overflow. Ampak kup overflow je le poseben izraz uporablja, kadar sveženj sama preplavi. [00:50:24] HANNAH: Right, tako da ponovite za video, pa si lahko zamislite prekoračitev kot posebna vrsta buffer overflow. Cool? Več vprašanj, preden gremo naprej? Super. [00:50:37] OK, kul, tako da je govoriti o nekatera pogosta sporočila o napakah. To je nekaj, kar ima prikazala na več kvizov, tako nekaj, kar je vredno ob drugo poglej. Prepričan sem, da ste naleteli vsaj nekateri od teh kot delaš tvoj problem postavlja. Torej, poskrbite, da boste lahko govori o njih na kvizu. [00:50:50] Torej prva je Napaka segmentacija. In da je vsak čas smo poskusite za dostop do pomnilnika da si ne smemo dostop. Torej ste migh so to videli, na primer, v zlom. Če zaznajo trk vrne null, nato pa vas poskušali narediti nekaj s tem null vrednosti, Računalnik bi dal si kriv segmentacija. Torej ena, pomembna stvar, da storiti, da bi se izognila tem je, da vedno preverite null. [00:51:13] Morda ste tudi opazili implicitno izjavo funkcije. Torej, to je tisto, kar se zgodi, Ko vas Allison je pokazala Kako naredimo prototip, kajne? Torej, recimo, da imamo nekaj Funkcija, ki jih definira. Recimo kocko. In da gre na dnu našega delovanja, pod glavno. [00:51:27] Če pozabimo povedati računalnik o kocka, ko glavni poskuša poklicati kocko, Računalnik bo, kot, oh moj bog. Nimam pojma, kaj to pomeni. Ne vem, kaj naj naredim, tukaj. Tako pravi prototip, ne skrbite. Bom vam povedal. [00:51:42] Saj bo prišel. Ne vpij name. Ne daj mi implicitno Izjava funkcije. Torej, če ste dobili to napako, ena stvar, ki jo boste želeli storiti se prepričajte, da imate svoj prototip. OK? [00:51:53] In ne nazadnje, neprijavljeno identifikator je v bistvu, ko ga skušate uporabiti spremenljivka, ki ste jih ne deklarira. Torej, vse kar naenkrat začneš rekoč kot n plus plus. In računalnik pravi, kaj je n? Nikoli mi nisi povedal n bila stvar. [00:52:06] Torej, ena stvar, kar morate narediti, da boste storil, je povedal, računalnik, kaj je n. Tako na primer, lahko n je celo število. In potem se boste izognili to napako. Vsa vprašanja v zvezi pogostih napak? Ja? [00:52:17] ŠTUDENT: Za implicitni Izjava o funkciji, bi bilo tudi, da vam izpusti eno knjižnic si moral vključiti, namesto prototipa? [00:52:24] HANNAH: Right, zato Vprašanje je bilo, ali lahko tudi dobili to napako, če ste pozabil, da so knjižnice. [00:52:28] ŠTUDENT: Da. [00:52:29] HANNAH: Absolutno, ker enako da želimo, da bo naš prototipov pred glavno funkcijo, če imamo knjižnico, tisti, ki bo v bistvu vključujejo prototipe, vključujejo opredelitve funkcij. Great vprašanje. [00:52:40] ŠTUDENT: Za segmentacijo Napaka, da bi tudi zgodilo, če bi, kot so, poskusili priti do spremenljivke, podobno, v drugačnem [neslišno] kot je bil razglašen leta? HANNAH: Seveda, da bi mi dobili napako segmentacije če bomo poskušali dostopati spremenljivka izven področja? Je bil, da je vprašanje? ŠTUDENT: Da. HANNAH: Beautiful. Torej, verjetno, boste dobili neprijavljeno identifikator napaka namesto tega. Torej, to je samo reči Ne vem, kaj je to. Cool, kaj drugega? Ja, OK, lepo. [00:53:10] Vse Righty, da rekurzija. Zato sem omenil nekajkrat da bomo dobili prekoračitev ker smo kliče naše rekurzivna funkcija tolikokrat. Smo dobili vse te kup okvirji, bla, bla, bla. Kaj še je rekurzivna funkcija? No, rekurzivna funkcija vsaka funkcija, ki sebe imenuje. [00:53:26] Nekatere stvari, da se zavedajo, kdaj vas izvajamo rekurzivno funkcijo, Ne pozabite vključiti osnovni primer. Baza je primer Točka, na kateri smo na koncu. Tako, na primer, če smo kodiranje, , Pravijo, Fibonaccijevo rekurzivno, želimo zagotoviti, da ko pridemo na 0 ali prvim številom Fibonaccijeva, ti dve številki imajo te primere, ker to niso odvisni na stvari, ki je prišel prej. Tistih, ki imajo svoje lastne vrednosti. [00:53:51] Nekaj ​​prednosti za rekurzijo, kar je Vprašanje, ki smo jih videli v preteklih kvizov. Lahko vodijo do bolj jedrnato, elegantno kodo. In veliko funkcij, Veliko različnih algoritmov, se dejansko posojajo rekurzije. Njihova opredelitev morda rekurzivni in sama po sebi. Torej Fibonaccijevo je ena. Fakulteta je ena. Zlivanjem pomeni one-- vse stvari, ki jih lahko pogledate. OK, na vsa vprašanja? Ja? [00:54:15] ŠTUDENT: Je primer kotiček podobno kot pri osnovnem scenariju? Ali je to za nekatere druge vrsta [neslišno]? [00:54:22] HANNAH: Seveda, tako kotna primer je any-- tako je kotiček velja enako kot osnovni scenarij? Kotna primer je karkoli, da vaš koda lahko obnašajo malo drugače. Osnovna zadeva je nekako povezana, v da oni kot posebnih primerih ki ga želite gledati. Ampak ideja o osnovni scenarij je, da želite, da vaše rekurzivne funkcije ustaviti na neki točki. Ne sme imeti sama kliče vedno. To mora ustaviti na neki točki. [00:54:49] Rob: Da, pogosto pa tudi vaša osnovna primeri lahko primeri vogalne baz. [00:54:53] HANNAH: Right, kul, kaj? [00:54:55] ŠTUDENT: Ali lahko pojasnite utemeljuje malo več? Jaz ne razumem povsem, [Neslišno] baznih primeri. [00:55:01] HANNAH: Od osnovnih primerih? [00:55:02] ŠTUDENT: Navadne primeri, ja. [00:55:03] HANNAH: Oh, ja, seveda. Poglejmo. Ali smo krede tukaj? Ja, imamo. OK, tako da res hitro, bom poskusite pisati dovolj velika tako da lahko vidite na zaslonu. Pogovorimo se o tem, res hitro Fibonacci. Tako da vam bom dal Fibonaccijevo zaporedje. Lahko pogledate definicijo. [00:55:17] V bistvu, vsaka številka v zaporedju je vsota prejšnjih dveh številk. OK, tako da sem pravkar opisali Fibonacci, boste lahko slišali rekurzijo, kajne? Ko sem rekel, vsaka številka je vsota prejšnjih dveh številk, lahko bi rekli OK. No, n-to Fibonaccijevo number-- tako da je pravijo, da imamo to funkcijo imenovano fib-- Lagati n se bo enaka FIB n minus 1 plus-- žal, bomo šli na naslednjo vrstico več here-- FIB n minus 2. [00:55:52] OK, tako da ta deluje super, če ste videti na, na primer, nič, enega, dva, tri, štiri, Peta številka Fibonacci, kjer lahko rečemo, da 5 je enaka 2 plus 3. Toda kaj, če ste na začetku? Kaj pa, če ste pravkar udaril ti prvi dve vrednosti? [00:56:08] Da bi dobili ta 1, ne moreš pravijo, dodamo prejšnji dve, zaradi tega nič in-- Ne vem. Torej, na neki točki se moramo ustaviti. Na neki točki, moramo reči, da so ti imata samo svoje opredelitve. Število 0 Fibonaccijevo je 0. In prva številka Fibonacci je 1. [00:56:26] Torej tako, kot sem lahko to kodo, sem bi rekel, če je n manj kot dva, potem samo vrne n. In da bi bila moja osnovna. Tako vem, da ustavi z rekurzivno funkcijo. Je to jasno? Super. Karkoli drugega na rekurzije? Lepa. [00:56:45] Oglejmo hitro govoriti o Iskanje in razvrščanje vodijo krat. In potem bom dal Davin nekaterih Čas je, da govorimo o kodiranje primere. Torej, tukaj so glavni iskanje in vrste, ki jih morate poznati. Guarantee-- ne morem jamčiti, ker še nisem videl quiz-- ampak to prihaja kviz Po kvizu potem nehal. Torej vsekakor uporabite to tabelo. Kot, da to tabelo. Daj ga na vaš goljufija stanja. Boste srečna oseba. [00:57:09] To nam pove časov delovanja vsakega teh razvrščanja in iskanja algoritmov. Torej linearno iskanje, lahko vidite tek čas, in enako velja za binarno iskanje. Iti čez to, kar ti algoritmi storiti, splošno predstavo. Poglej neki Psevdokoda če se ne kodo. [00:57:25] Boste videli, da mehurček vrsta ima zgornji vezan v najslabšem primeru n kvadrat. Torej, če je bila naša matrika popolnoma nazaj preden smo želeli, da ga rešiti, bi rekli, da je to dogaja, da n na kvadrat korake. Toda v najboljšem primeru tako spodnja meja v najboljšem primeru se bo, če je to že popolnoma urejeno. Potem vse, kar moramo storiti, je, preveriti, da je to urejeno. Ali obstaja vprašanje tukaj? [00:57:47] UČENEC: Ko bi želite uporabiti vrste? Nekako. Jaz sem samo radoveden. [00:57:52] HANNAH: Ko bi vi želite uporabiti za izbiro vrste? Tale? Ena, ki je n kvadrat v obeh primerih? [00:57:55] ŠTUDENT: [neslišno]. [00:57:56] HANNAH: Torej je zelo različna. Če imate specifične Zahteve za program, kot stvari, kot če bi le dejal, izvajati search-- sorry-- izvajanje vrste, boste verjetno želeli, da gredo za eno od tistih, ki ima najboljši primer n, ali spodnjo mejo v najboljšem primeru n. Vendar pa lahko pride do nekatere stvari, kot so, recimo, Zamenjave so res drago za neznanega razloga. Potem bi si želeli narediti bubble vrste, saj vas narediti tako veliko zamenjave, take stvari. Koli other-- ja? [00:58:23] ŠTUDENT: Ali bi bilo [neslišno] reči, da [neslišno]? HANNAH: To je ena stvar, da bi vam povedal, Če iščete na izvajanje. Tako bi jaz zdaj razmišljati o tem, zakaj je n kvadrat je, da moramo teči skozi našo paleto dolžine n, vsakič kar največ, n zamenjav. In moramo narediti ta proces n-krat. [00:58:46] Torej, če imate, da se največ n zamenjave in za n teče skozi polja, tam se dogaja, da se n na kvadrat. Ampak ja, to bo pokazala s tem podvojila zanke, kot vprašanje asked-- ali ugnezdene zanke, naj rečem. OK? [00:59:00] In nato z zlivanjem, ki je najhitrejša vrsta zdaj, ali da smo zajeti v CS50, vedo, da je glavni algoritem ta ideja vdor Urejeni kosov in nato združitvijo teh razvrščenih bitov. In dobili smo log n log n. Vsa vprašanja v zvezi iskanjem in vrste, preden sem ga posredoval? Poglejmo. [00:59:21] Oh, povezane sezname. Žal mi je, imam še eno temo. OK, super, povezane sezname. Problem z nizi, imajo fiksno velikost. Torej, če ne veste, kako velik vaš prispevek se bo, ne želite ustvariti niz. Ker če bomo ustvarili matrika, ki je premajhna, bomo lahko vodijo v buffer overflow. [00:59:35] Torej, namesto da bi mi nekaj storiti povezanih s seznamov, ki nam omogoča dinamično velika struktura podatkov ki nam bo omogočilo, da shranite bolj prilagodljiva količina podatkov. Torej, v vsakem vozlišču v našem povezani seznam, imamo dva kosa. Imamo dejansko vrednost, da shranjuje. Torej, to je samo stvar, ki bi glej v matriki, npr. In potem smo tudi slediti kazalec na naslednjo stvar v spominu. [01:00:04] Za razliko nizi, ki vemo, se vse dogaja da be-- elementi matrike so vsi ena Po drugi v memory-- povezana Seznami lahko kjerkoli v pomnilniku. Oni so poljubne lokacije. Torej, če bi dejansko šel jih našli, smo morajo slediti Naslednja stvar, v našem seznamu. [01:00:19] In potem, da bi vedeli, če ta seznam kot celota je, vse, kar moramo slediti, je Prvi element v našem povezani seznam. In da bo nam omogočajo, da sledite s pomočjo. [01:00:31] Torej, to je, kako lahko določite način. To je odlična priložnost izkoristiti konstruktov. Ker imate to idejo, dobro, za dano vozlišče, imam dva kosa. Imam samo dejanske vrednosti. In potem imam kazalec Naslednji element v povezanem seznamu. Torej vidite, imamo celo število n, ki se bo dejanska vrednost, in nato kazalec vozlišče, ki se imenuje naslednji. Tako, da se dogaja, da bo naslednji element v našem povezani seznam. ŠTUDENT: Da? Ali imate se določi, da zvezda je kot struct? [01:01:01] HANNAH: Ja, zato, ker je to je skoraj kot neke vrste, se zdi, kot rekurzivnih opredelitev v tem, da morali vedeti, kaj vozlišče znotraj iskanju vozlišče. Saj dejansko ne vem, kaj vozlišče je popolnoma dokler ne pridemo do konca this-- in po tem lahko samo rečejo node-- znotraj te opredelitve, moramo, da ga pokličete struct vozlišče. Great vprašanje. Kaj drugega? Ja? [01:01:26] ŠTUDENT: Zakaj počnemo reči vozlišče dvakrat? Ker ko smo bili v [neslišno] smo imeli, da to storite v podpičjem, zdaj pa moramo ugotoviti, da struct vozlišče? [Neslišno]. HANNAH: Torej, sem prepričan, v zadnjem primeru, smo pravkar ustvarili kadarkoli želeli uporabiti študenta po tem, si moral uporabiti struct node-- Jaz sem sorry-- struct študenta. To nam je omogočilo, da se, po dejstvu, ravno Uporaba vozlišče dodati novo vrsto, v bistvu. Da je smiselno? Zato sva morala iti nazaj in poglej kodo prej. Ampak jaz mislim, da je nismo uporabljali typedef. In smo zastavili vprašanje, Zakaj moramo uporabiti typedef? Typedef nam omogoča, da bi se izognili Beseda struct na začetku. Ja? ŠTUDENT: Kakšne Vprašanja bi prišli do v smislu v smislu vozlišča in povezani seznami? [01:02:10] HANNAH: Torej, ena stvar je, bi lahko rekli, kako lahko poiščete prek povezanega seznama? OK, saj je malo bolj zapletena kot če iščete skozi matriko. Mi lahko samo pogled na ničelni element, en element, element dva, bla, bla, blah. Če želimo iskati skozi povezani seznam, mi bi dejansko morali slediti ta mali labirint kazalcev. Torej, kaj je dejansko šel skozi to res hitro. Kaj lahko storimo v naročite to-- recimo mi želim le ponovitev prek naš popolnoma povezani seznam. Radi bi začeli na čelu. In nato z namenom premaknete na naslednji element, ne le povečevanje ene kot da bi v skozi array, smo dejansko dogaja, da sledite naslednji kazalec, tako da bomo lahko ugotovili, kje v spomin Naslednji element je. Zato vem, da to ni dovolj, da bi vse to v tem trenutku, vendar boste morali te diapozitive. Tako da lahko greš skozi to malo počasneje. Ampak v bistvu, kaj želimo storiti je, da sledite tem nasvetov preko celotne povezanega seznama. Tako da je to vprašanje vas bo morda vprašal. [01:03:01] Nekaj ​​za obvestilo s vstavljanje, recimo, smo želeli postaviti nov element na prednjem delu našega povezani seznam. Moramo biti zelo previdni o vrstnem redu, v katerem smo prerazporejene kazalce. Ker recimo, da sem rekel OK. Naredite glavno točko na ta nov element. Samo poskrbite, da opozarjajo na 1. Nato smo jih v bistvu izgubil preostanek našega seznama, ker se ne spomnim, kjer je 2 življenj. [01:03:25] Zato moramo storiti zelo specifičen red. Najprej moramo narediti novo Element točka z glavo. In potem naredimo glavo kazale na novo elementa. Torej, da vidimo, kaj to izgleda z arrows-- kar tako. Torej, morate najprej novo element točka na stari glavi. In zdaj imamo glavo kazale na novo prvega elementa. Vsa vprašanja s tem? [01:03:49] OK, tukaj je nekaj code spet nekaj pogledati malo kasneje. In zdaj ga bom predati Davin za GDB in malo prakse kodiranje na papirju. Lepa. [01:04:01] ROB: In Rob. [01:04:01] HANNAH: Oh, Davin in Rob. Žal mi je. [01:04:03] ŠTUDENT: Woo! [01:04:08] ROB: Hvala. [01:04:09] Davin: Ali hočeš povedati vse, kar je resnično hitro? ROB: Ja, ja. Davin: Ko sem gor. OK, medtem ko je Rob postavlja mikrofon, tako da kaj je GDB? Vsakdo bi moral videti v GDB razred in tudi na uradnih ur. In morate biti njeno uporabo. Torej, kaj je GDB? Kdo? [01:04:28] ŠTUDENT: To je debugger. [01:04:29] Davin: To je debugger. In kaj vam omogočajo, da naredim? Všeč mi je, zakaj mi je všeč GDB? ŠTUDENT: Za upočasni program. Davin: desno, tako da boste lahko hodili skozi to všeč človeški tempo. In kaj so nekateri ukazi lahko storite? No, prelom je verjetno Vaše najljubše ukaz. Ker to omogoča razdelitev Program in pravzaprav sprehod skozi to po vrsticah. [01:04:44] Run vam omogoča, da bi sistem deloval. Dalje, kot odskočna skozi. Kaj je med drugo, in korak? Čakaj, pravijo, da naglas. To je bila pravilna. [01:04:54] ŠTUDENT: [neslišno]. [01:04:55] Davin: Ja, super. Torej podobno, naslednji korak in, če you're-- recimo, da imaš funkcijo, ki jo opredeliti. Recimo, da so nekateri v vašem glavno funkcijo, in ste pravkar udaril naslednji, naslednji, Naslednji. Ste dejansko dogaja, da izvršitev te funkcije, vendar boste skok čez njo. Če ste zadeli korak ali s ali karkoli, si bo dejansko skočiti v tej funkciji, in potem si lahko naslednji hit da vidite različne razpise znotraj te določene funkcije. Ja? [01:05:16] ŠTUDENT: Ali obstaja način, za skok, kot, nazaj ven? Davin: Finish, ja, konča s ti skoči ven. Tako da se bo končal, da funkcijo, in potem ste bo nazaj v glavno, npr. Bo Natisni natisnete en čas. Nekaj ​​sem vedno uporabljam, je zaslon. Bo zaslon izpisal nenehno vsej celoti vašega programa. [01:05:32] Na primer, če ste v zanko, in si želijo videti, kako se nekaj spreminja, in ne želite, da se, tako kot nenehno se delaš, kot so tisk, tisk, tiskanje, prikaz bo prikazal to spremenljivko neprekinjeno, vsakič, ko ste zadeli Naprej. In še naprej. Torej GBD, ki je GDB. [01:05:47] ŠTUDENT: Kaj je ena kjer si [neslišno]? Davin: Kaj je to? [01:05:52] ŠTUDENT: Kaj je the-- lokalne spremenljivke. ROB: Nekaj ​​je dejansko kot domačini ali kaj podobnega. I can't-- [01:05:58] Davin: Morda bi bilo nekaj takega, ja. [01:05:59] HANNAH: V domačini? [01:06:00] Davin: To je to. To je eno. ROB: Beautiful. [01:06:03] Davin: Ja. [01:06:04] ŠTUDENT: Kaj storiti naprej? [01:06:06] Davin: To continues-- tako, da je samo bo nadaljevala svoje programe. Torej, če ste odmor in hit naprej, da se bo samo zagnati program, dokler spet udari, da je odmor. Tako na primer, če izbruhnila v funkciji, in boš naredil tako kot za zanka ali nekaj takega, in ste zadeli še naprej, da se bo še naprej in iti nazaj v to premoru. Ali ni odmor, da se bo nadaljuje in konča program. [01:06:22] ROB: Torej samo radi tečejo postanke ob prvem mejnimi vrednostmi ste zadeli, če vas potem hit naprej, se bo naprej bo, dokler ne bo zraven Ustavljanje. In potem bo šel naprej na naslednjo mejnimi vrednostmi. Davin: Še kakšno vprašanje o GDB? Zato mislim, da je v preteklosti, smo vas vprašali, kaj GDB je in dati Primer nekaterih stvari, ki jih lahko storite z GDB, tako real preprosto, ampak ja. Tukaj imaš. In vozlišča? [01:06:43] ROB: Ja, tako, ki je bil to smer? ŠTUDENT: To je bilo to. Davin: Počakajte. ROB: Ta tip? Davin: To je ena. ROB: Ta tip, oh, nisem vedel, da. Tako da nismo bili jasni o tem, kaj the-- jaz ne vem, kdo je was-- ampak vprašanje. Ne vemo točno, kaj ste spraševali o tem, tako da samo pojasniti nekaj. Torej, najprej, kot sem rekel prej, typedef ste vedno uporabljate samo ustvarite vzdevek za tip. Torej tukaj, vzdevek smo ustvarjanje iz tega tipa struct vozlišče. [01:07:13] Torej, najprej, zanemarja to vozlišče typedef, tako da to struct node kodrasti naramnicami navzdol na naslednjo Curly brace je tip struct vozlišče. In moramo to vozlišče tam, ker smo morajo reference vozlišče tukaj. Torej s te vrste rekurzivno struct, morate dati to struct ime, ali pa ne bi mogli pravijo struct vozlišče tukaj. Ker je pred študentskimi Ko smo vnesli, mislim, nismo reči študent tam, ker smo ni treba reči STRUCT študent znotraj struct sama. Torej, to je, da je rekurzivni prisili nam povedati vozlišče tam. [01:07:43] To vozlišče je samo ime smo daje vozlišče za typedef. Torej, da vozlišče ni Enako kot vozlišča. Toda to struct vozlišče Enako kot ta struct vozlišče. Davin: Torej, ko vas pokliče, podobno, vozlišče v glavno funkcijo, ne boš šel k reči struct vozlišče. Lahko samo rečem vozlišče, saj vozlišče different-- je v bistvu praviš, OK. Namesto da bi klic struct vozlišče v moji kodi, Rad bi samo, da jo preimenujete kot vozlišče, da bi bilo lažje. [01:08:04] ROB: Če vas vedno uporabite typedef, potem je to je edini kraj, boste morali razglasiti za spremenljivko z struct vozlišče zvezda, ja. [01:08:14] Davin: OK, tako da zadnji del je težko naučiti because-- ROB: Kaj? [01:08:24] Davin: Ker je to kodiranje na papirju. Torej, vsako leto imamo Koda na papirju vprašanja. Zato mislim, da je lani za 12 od 80 točk je bila koda na papirju. Leto pred tem, da 10 od 80, leto pred tem pa 20 od 100, tako da kar nekaj od teh. Torej boš moral biti sposoben kodo do te funkcije z roko. [01:08:40] Tako da sem mislil, bomo morda šli skozi Nekaj ​​od njih in videli, kako se ljudje, nekakšen sprehod skozi jim počasi z ljudmi. Tako na splošno, strlen in atoi so bili zelo priljubljeni. Lansko leto, mislim, da smo imeli GetPositiveInt in RandomInt. Vendar pow, tako moč, prav tako pozitivna preveč. Naj samo skozi morda eden ali dva od teh skupaj. Kaj ljudje želijo videti? [01:09:05] ŠTUDENT: Atoi. ŠTUDENT: Ja. Davin: Atoi? ŠTUDENT: [neslišno]. Davin: OK, jaz grem da to storite na krovu. Ali imate prednost če to storim tukaj ali tam? Tam, Gabe pravi, da obstaja. [01:09:16] ROB: In to je splošna misli o teh vprašanjih, ki kodirajo. Poskusite napisati nekaj. Ga ne pusti prazno. [01:09:22] Davin: Da. ROB: Če lahko dobite vrnitev vrsta pravilna, ali pa smo ga lahko dam vi, ampak če lahko, podobno, napisati splošno funkcijo podpis, Če lahko dobite bazo primerov pravilna, ali primeri corner, ali spominjati ček null, tako dolgo, kot ste nekateri stvari, potem pa smo Lahko vam dam par opozarja na problem. Ne le pustite prazno. [01:09:36] Davin: Ja, in če vas so samo v celoti težavno vprašanje, kako dejansko spremeni v kodo. Če pišete psevdokod, to je zelo dobro. Torej, to je kot, da je šest točka vprašanje, in pišete pravilno Psevdokoda boste dobili vsaj dve točki. Zato jih ne pustite prazno. Poskusite dati nekaj. [01:09:50] ROB: To mora biti pravilna psevdokoda, čeprav. [01:09:51] Davin: Da. ROB: Torej, smo na splošno manj prizanesljivi z hroščev v psevdokoda. Davin: OK, fantje želel videti atoi. OK, tako da samo really-- kaj želite storiti se boš, da bo glede na nekatere vrste številko. Vendar ta številka ni bo int, kajne? Kaj se gre, da je? [01:10:08] ŠTUDENT: [neslišno]. [01:10:09] Davin: To se dogaja, da je niz, kajne? Tako da če je bila dana string-- dajmo say-- [01:10:13] ROB: Naj dvigni urednik? Lahko potegnite up-- [01:10:16] Davin: Oh, da želite to storiti on-- [01:10:16] ROB: Bi raje desko? [01:10:17] Davin: Kaj hočeš, da storim? Mislim, ali želite, da to storite z roko? Ali hočeš, da to storite z računalnikom? [01:10:21] ROB: Ali je z roko. [01:10:22] Davin: [smeh] ROB: Ali je z roko. [01:10:23] Davin: OK, tako da se bo lahko atoi. Torej, kaj je it-- Mislim, da bomo verjetno dal to za vas. Toda kaj se gre, da se vrnete? [01:10:29] ŠTUDENT: Int. [01:10:29] Davin: To se dogaja, da se vrne int, kajne? SO- ne želim, da to storite tam. Bom jaz tukaj. [01:10:34] ROB: Lahko potegnem dol in nato potisnite gor na njem. [01:10:38] Davin: yeah. [Smeh] sprememba Game. OK, tako da se dogaja, da int atoi, in kaj je to bo trajalo? Char zvezda, tako da samo Niz, zvezda s, kot je ta. [01:10:57] ROB: Lepo zvezda, lepo. Davin: To morda ne bo tam, OK. ROB: Ja. Davin: OK, tako da najprej stvar, ki jo želite do-- I Ne vem, če je kdo gledal v praksi solutions-- ampak kaj boste bi želeli storiti, je, da ste dogaja, da želijo imeti zanka, ker ste želeli, da dejansko stopite skozi ta niz. Torej helpful-- tako recimo bomo za zanke, in gremo na korak prek vsak element niza. Kako dolgo je to? Kolikokrat gremo Ponovil, da je za zanko? ŠTUDENT: Sterln? Davin: Sterln, ja. Torej, recimo, dolžina int enaka sterln s. In samo radoveden, zakaj je to vedno nekako je boljša, da to storijo zunaj zank? Všeč mi je, zakaj je bolje, da pokličete ta funkcija izven zanke? Samo poglejte hitro sanity? Ja? ŠTUDENT: Torej ne morali obdržati to preverjanje. Si lahko samo [neslišno]. [01:11:59] Davin: Točno tako ja, točno to, kar je rekla. Torej nimamo, da je preverjanje. Tako na primer, če kličem ta funkcija znotraj zanke, potem pa grem, da kliče ta funkcija večkrat. In da se bo zmanjšala učinkovitosti vašega programa. Tako da je vedno koristno da ga razglasi zunaj. [01:12:12] ROB: To je dejal, na Vsaka od teh težav, precej tako dolgo, kot ste dobili delovne raztopine, boste dobili polno kredit. Torej, ne skrbite, če vaš design je absolutno grozljiv. Morda bi nas razburjena branje kodo. Ampak tako dolgo, kot to deluje, boste dobili točk. [01:12:28] Davin: Da. OK, potem bom razglasi neko spremenljivko. To je le, da bo klic int vsota. In bom to nastavite enaka nič, kot je ta. In to je le, da bo biti ograda. Tako, da se dogaja, da se kaj bom vrnil. Tako da bom na koncu vrne vsoto iz tega programa. Tako da imam teh dveh spremenljivk. Imam dolžino. Imam vsoto. In zdaj, kaj je skok v našem nizu. [01:12:48] Torej omogoča imamo za zanko. Torej štiri int i enak 0 mas, medtem I je manjša od dolžine I plus plus. In now-- ROB: Lepo. Davin: OK, zdaj pa tukaj prihaja meso našega kodeksa. Torej si lahko dejansko narediti to v bistvu v eno vrstico. Torej, ali kdo ima idejo kaj bomo zdaj? OK, tako da je v redu. Torej delamo reči vsoto equals-- Naj scoot to over-- vsoto enak vsoti časov 10 plus-- sva bo trajalo -e I minus ena quote 0 eden quote storiti, kot je ta. ROB: Zelo intuitivno. [01:13:56] Davin: zdrobljen. OK, tako someone-- ga imam, ga imam. OK, tako da je to očitno dogaja gor. Kaj to pomeni? Torej, ali kdo ve, kaj to pomeni? Lahko vsi videli to? Ne, nihče ne more tega videti, OK. Grem to-- [01:14:18] ROB: bom napisati Formula ravno prav tukaj. Davin: OK, Rob se dogaja, da to storite na računalniku, ki je zabavno. ROB: Oh moj bog. Ali pa tudi ne bom. Davin: Stand by. ŠTUDENT: Imam vprašanje. Davin: Ja, seveda. ŠTUDENT: [neslišno]? Davin: OK, tako da je dejansko, podobno, samo na splošno, če bi dal, kot so, v tej deklaraciji int Jaz enako dolžino 0 vejicami enaka sterln, that-- [01:14:59] ŠTUDENT: [neslišno]. [01:15:01] Davin: To je v redu, ker that-- ŠTUDENT: Zakaj bi si celo morali uporabiti dolžino? Zakaj ne bi mogla smo samo [neslišno] sterln s, tako kot ves čas [neslišno]? [01:15:08] Davin: Misliš tukaj? [01:15:09] ŠTUDENT: Da. Davin: Ker vsak Čas ta zanka teče, se dogaja, da oceni to stanje. ŠTUDENT: Right. Davin: In če imate sterln tam, potem je to bodo morali dejansko klic ki delujejo vsak čas. Torej, namesto samo ter jih primerjali z int, boš se kliče Funkcija in nato primerjavo vrednosti vračanja. Ja, to je samo, ja. [01:15:28] Lepo, OK, tako da sedaj lahko vsi videli. Kaj does-- je to všeč, to je to. To je marmelada, tukaj. Kaj to pomeni? Kaj počnem? Ja, ideja? Ja? [01:15:43] ŠTUDENT: No, torej, ko vnašate vrsto, boš se dogaja od leve proti desni, tako da boš šel v decimalno iz navzdol [neslišno]. Davin: Točno tako. ŠTUDENT: Torej vsak moraš množijo kaj si videl kot vrednost int s ko boste dobili, da se premaknete, da več kot eno. [01:15:59] Davin: Popoln, popolna, tako, na primer, kaj je povedati, da sem dal you-- sem bom napisal tukaj. Ne, nisem. Bom napisal tukaj. Recimo, da sem ti dal 76, kajne? Recimo, da ti dam 76. To je niz na začetku, OK? [01:16:15] Torej dolžina je kaj? 2, kajne? Vsota 0. Potem skočimo v naši zanko. OK, prva ponovitev to, kaj se gre, da je? To se dogaja, da je vsota 0. Torej povzamem-krat 10 0. To je nesmiselno. Potem kaj to naredi? ŠTUDENT: [neslišno]. [01:16:33] Davin: To se dogaja, bi se to spremenilo lik v celo število, kajne? To je nekako tako kot s svojim problem set-- tem light-- to je nekako tako kot z problem naj bi VISIONEER. Imate opravka z vrednostmi ASCII. Torej, če sem vam, kot, sedem, ampak to je znak, in želite vedeti, OK, kaj znak je to? Ja, lahko, ja. Torej, kakšna številka je to? Lahko odštejemo 0 od nje, vendar si morali odšteti 0, značaj. [01:16:59] In kje nekateri ljudje se spotaknil, oni všeč, OK, no, moram vedeti vrednosti ASCII za ta kviz? Ne, zagotovo ne morate vedeti ASCII vrednote, kot so, z malimi črkami , velike črke, nič. [01:17:09] ROB: Ni razloga, da bi kdaj dal to na goljufija stanja. [01:17:12] Davin: Zagotovo ne zapravljajo svoj prostor s tem. Lahko literally-- samo namesto rekel 48, kot je pravica do tam, da je enakovredna rekoč enega, eden opuščaj, kot, da popolnoma enako. [01:17:27] ROB: Skoraj bi lahko misliš nje kot if-- Boga, rabim moj, oops-- si lahko skoraj pomislim kot če imamo nekaj podobnega tej hash opredeli 0 kot 48. Da ne bo delovalo. Vendar pomislite, da je enotni citatom 0 enojni narekovaj, in za vse znake. Misli, da je konstanta, ki je pomeni, da vrednost ASCII. [01:17:47] Davin: Da. OK, torej prvič skozi, tako z 76-- tako prvič skozi, to je samo znak 7 minus znak 0, in tistih, ki so sedem integers-- tudi tisti, sedem prostori oddaljena drug od drugi na grafikonu ASCII ali karkoli. Tako, da se dogaja, da se vrnete int od 7. Torej, zdaj, vsota enaka 7. [01:18:08] OK, no, kaj je skok v to zanko znova. OK, zdaj je vsota 10-krat. Torej si dejansko premikanje 7 levo. Ali to smiselno? Ti si dejansko pomikanjem proti levi. [01:18:19] In potem si add-- to se bo 6 minus 0. To je 6. Tako se dogaja, da je 70 plus 6. 76, to je vaša številka. Torej, ne glede na kakšnem številu Sem ti dal, je počasi le tekoč premik večje vrednosti levo, 1 faktor 10 vsakič v zanko, in nato dodamo na potrebi. [01:18:37] V zadnji? ŠTUDENT: Nimamo storiti koli preverjanje v programu? [01:18:41] ROB: Torej, kar zadeva preverjanje gre za program, mi bi vam povedal, kar toliko, kaj boste morali preveriti. Če vam ne povem, karkoli, potem na splošno Predvidevam, da ste morali preveriti večino stvari. Kot si lahko, samo, da je varna, vas Verjetno bi bilo preveriti, hej, je s null? Potem pa nimam pojma, kaj naj vrnejo. Vendar bi vam povedal, ta reč. 0, ne vem. [01:18:59] Davin: In zakaj bi si želeli ponovno preveriti, če je enaka null? ŠTUDENT: [neslišno]. Davin: Zaradi char zvezda. To je kazalec. Torej povsem sprejemljivo Izjava, da bi lahko rekli, v redu, je enak null, ker ji je lahko kazalec na ničlo. Torej, ko imate kazalci na vaši poti na tak način, verjetno bi jo morali preveriti. Ker če ne preveri, in potem si pa pojdi v svojo zanko, in ste doing-- scoot navzdol. Scoot navzdol. [01:19:22] ROB: Žal mi je, da je. [01:19:23] Davin: In tako, kot, če je nična, nato pa vas storiti to, kaj napako boš dobil? ŠTUDENT: boš dobil set napako. Davin: Greš nastaviti Napaka, desno, ker si poskuša indeksa v null. Torej boste poskušali indeks v spomin, da si ne lasti. Tako da to, če je ta nična, in to storite, bom cikel si. [01:19:39] ROB: Tudi jaz mislim na izpit, v kateri smo vprašali to vprašanje, vam povem, da lahko samo prevzeti to je pozitivno število. Ker se pričakuje tudi atoi obvladovati negativne številke, zato bi morali poseben primer. Hej, je prvi znak pomišljaj, v tem primeru, OK, zdaj je negativno število. Vam bom povedal, takšnih stvari. Mi vam bomo povedali, kaj morate ročaj. Davin: Da. Torej, prepričan sem, da so nekateri ljudje morda have-- Če ste začeli iskati starih izpitov, Videli ste sterln. To je priljubljen. In mislim, da v sterln, si moral storite to ček za nično, vrnitev 0 ali nekaj takega. Tako kot ste morali preveriti null. In če niste, da je bila točka off na kvizu. Tako nekako, ne vsi počutim v redu s atoi? Ali kdo želi iti čez dele spet? ROB: Oh, ja, mislim, smo tudi vam povem vam Domnevamo lahko, da je vse is-- da oni so dejansko vnosu številke, da vam ni treba skrbeti, podobno, pri čemer črke v nizu, tako da. Davin: Ja. Ja? ŠTUDENT: Ali lahko greš več kot eno več časa, kadar uporabite dvojnega ponudbo in enojni narekovaj? [01:20:37] Davin: Seveda, tako da dvojni narekovaji, zelo Preprosto povedano, je dvojni narekovaji so strune. Torej, če ste dvojni narekovaj karkoli, to je niz. Torej, kot, če bi to 0 imel tukaj, in to sem storil, to je niz. To ni več znakov. Tako da ne morem najti te vrednosti na mojem ASCII chart, saj je niz, ja. [01:20:57] OK, vsa druga vprašanja? Ja? [01:21:00] ŠTUDENT: Torej ste to že odgovoril, ampak kot, ko smo dejansko to pišem na kvizu, hočeš, da napišete s poševnice ničel [neslišno]? Davin: No. Vprašanje je bilo, naj si dal poševnica skozi ničel naj navedejo, če oni ničel? Ne bomo pogruntal. Ja, hvala, da si dober. OK, kaj drugega? Ali kdo rad to-- tako da mislim, smo teči malo daljšem časovnem obdobju. Ali želite, da vidite še eno, ali? ŠTUDENT: RandomInt. [01:21:29] Davin: RandomInt, OK, prav. Torej, kaj je storiti RandomInt. Bom jaz tukaj. Torej RandomInt je dejansko veliko enostavnejši. Mislim atoi je verjetno najtežje ki smo jih vprašal v preteklih letih. ŠTUDENT: [neslišno]. [01:21:46] Davin: Kaj? ROB: vidim, če je to nekako z vidno iz več kot tukaj. Davin: Je res? ROB: Ne verjamem, da je going-- mislim se dogaja, da med nogama na desno. Davin: OK, tako da bom naredil to. In potem si ga dal na zaslonu. [01:21:56] ROB: Dobro. [01:21:57] Davin: Hočeš biti moj pisar? [01:21:58] ROB: Ja. [01:21:58] Davin: Lepo. OK, mogoče sem izbrisati to? [01:22:02] ŠTUDENT: Ja. [01:22:04] Davin: To je tako težko. (PETJE) delaš kaj delaš. In to, kar ste storili, ne. Vse je v redu. [01:22:19] OK, če se prav spomnim, na kviz RandomInt bilo všeč, OK, bom dal dva številke, kot je a in b. In želim si, da bi me RandomInt med temi številkami. Torej RandomInt se dogaja vzeti dve numbers-- tako RandomInt-- in to je vrača int. [01:22:41] Torej, kaj je vrednost vrnitev? Pravkar sem ti povedal. Int, kajne? Kot je ta, in potem je bo trajalo dva ints. Tako da bo trajalo int in int b, kot je ta. Torej, kaj je RandomInt tekoč storiti, je, da se bo vrniti nekaj naključno vrednost med tema dvema vrednostma. Tako se dogaja, da je večja kot, manjši od b. Zato mislim, da si verjetno lahko predpostavimo, da je manjša od obeh vrednosti. Torej, če imamo opravka z naključnosti, kaj funkcija smo videli, da nam daje naključne stvari? ŠTUDENT: Drand. Davin: Drand, točno. Torej boš verjetno Želite uporabljati svoj drand. Torej lahko rečemo, int random, mi pa bomo samo rekel, da je enak 0 zdaj. In oni se bomo rekli, OK, naključni Rezultat drand 48. In kaj to vrniti? Kaj ta funkcija vam? [01:23:43] ŠTUDENT: med 0 in 1. [01:23:45] Davin:, Ja med 0 in 1. Tako se dogaja, da be-- [01:23:48] ROB: In to is-- mislim mi bi vam to povedal. Všeč, lahko uporabite drand 48. To lahko preverite na zadnjem izpitu. Vendar pa bi verjetno ti povedati Lahko uporabite drand 48, ki vrne plovec med 0 in 1. [01:23:58] Davin: Ja, ja, jaz sem Precej prepričan na izpit vam pravi, verjetno želite uporabljati drand, ja. Tako se dogaja, da se vrnete nekateri vrednost med 0 in 1. In kaj potem so ti dogaja, da želite narediti? Torej, želite pomnožiti by-- čakaj, mislim, da je tako, mi je žal. Jaz bom samo to. Ne vem. [01:24:19] Torej b minus. Torej, zakaj b minus? Torej, recimo, drand vam vrača int-- OK, bom naredil ostalo, tako plus. Torej, kaj does-- y je b minus. Torej, recimo, da drand vam vrača Najvišja vrednost, ki jo lahko morda daš. Kaj se, da bo? ŠTUDENT: 1. [01:24:43] Davin: 1, kajne? Torej, če je to 1, in ste da se pomnoži s b minus, dobro, da je samo Razlika med minus A. In če dodamo, da nazaj na, da je kaj? To je v bistvu b. Ali to smiselno? [01:24:57] ŠTUDENT: Da. [01:24:59] Davin: Torej, če je to najvišja cenite to bi lahko bilo, to se dogaja, da je 1. In potem je to le Razlika med obema. Dodaj na, tako da je ta vrača naključno. In v primeru, da je kota drand vam daje nazaj 1, random bo le učinkovito se b. Ampak to je največja je mogoče. Torej, če se dogaja, da je manj kot da, tako da recimo, da je njen kot 0,9, tako pa 0,9-krat b minus se bo manj od razlike med b minus a. [01:25:33] In potem, če dodamo, da na, nato pa, da je vrednost bo večja od, saj ste dodali nekaj na njej, ampak to se dogaja, da je manj kot b. Tako boste dobili naključno številko, ker kličeš drand. In da rand, da naključno število je bo nekje vmes in b. Ali to smiselno? [01:25:50] ROB: Samo, da ga v betonske številke, tako recimo, da želimo, da izberete naključno število med 7 in 10. Torej b minus je naša ponudba. Torej obstaja paleta treh številke želimo, da izberejo. In nato pomnoži da je med 0 in 1 1, Če da, potem nam daje some-- recimo, da nam 1.5. [01:26:07] Potem 1.5, želimo iti od 7. do 10.. Torej 1,5 plus 7 nas pripelje vračamo v 7 do 10 razponu. In potem smo jo shranite v notranjosti celo število, zato je obrezana navzdol do 8. In potem smo pravkar vrnil, da. Torej b minus je naša ponudba. Gre za premik navzgor v številkah da želimo na tem območju. Torej, med 7. in 10., nato pa smo lahko vrne, kar smo na koncu z. [01:26:30] Davin: Ja, lepo. [01:26:32] ROB: Hvala. [01:26:34] Davin: Ja, kaj se dogaja? [01:26:35] ŠTUDENT: Ali jo vodijo na vse vrste Napake ASCII ko we're-- če drand je vrnitvijo plovec [neslišno]. [01:26:42] ROB: Torej, tako kot je rekel Rob, ker random ni int, tako da bo drand biti float. Torej, potem pa množi ven. In boste morda dobili nekaj vrste float številk. In potem se dogaja, da skrajšajte. [01:26:51] ŠTUDENT: OK. Davin: Ja. ROB: In če bi prevajalnik za opozarjanje vam gre, kot, izguba natančnosti, pravkar vrgli int v tam, in potem je to dobro. Davin: Da? [01:27:02] ŠTUDENT: Ali bi morali Enako verjetnost za pridobivanje, podobno, b ali [neslišno]? [01:27:08] ROB: Torej is-- sem dejansko wondering-- je RandomInt domnevnih biti številke s do manj kot B? Všeč mi je, če je med 7. in 10, kakšne so možnosti? 7, 8 in 9, ali 7, 8, 9, 10? Davin: sem pozabil. Na problem set-- [01:27:19] ROB: Mislim, da je 7, 8, 9. [01:27:20] Davin: Izrecno pravi posameznikovega vključujoče in ena je izključna. [01:27:22] ROB: Ja. [01:27:23] Davin: Ampak jaz don't-- sem not-- [01:27:23] ROB: Torej, mislim, da je ni vključena, v tem primeru, tam je enaka Verjetnost, 7, 8 in 9. Ni verjetnost 10. Davin: Da? ŠTUDENT: Imam vprašanje. Želimo, da definiramo funkcijo ne vrne eno vrednost, temveč niz. Potem, kaj bi bilo sintakso potem vrnil? [01:27:41] Davin: OK, tako da potem vi would-- po vrnitvi? Torej, recimo, da je izjavil, Niz nekje tam gor. Potem bi samo vrnitev ime matrike. [01:27:49] ŠTUDENT: OK, hvala. Potem pa se vrnejo s a-- Davin: Oh, počakajte, da mi je žal. Vprašanje je bilo, kako vam vrne niz. [01:27:54] ROB: Čeprav to ni moglo je matrika razglašen na sklad ali kaj podobnega. To bi moral biti nekaj malloced, ker funkcije malloc je, kako priti okoli avtomatsko dodeljevanje pomnilnika. [01:28:01] Davin: Da. ROB: Kako ste dobili okrog lokalnega področja. [01:28:09] Davin: Ampak ti bi pravkar vrnil svojo name-- [01:28:11] ŠTUDENT: [neslišno] to ni ena vrednost, na primer, dve številki, tako [Neslišno]. [01:28:18] Davin: ne moreš vrniti multiple številko. Ne moreš, kot so, return-- [01:28:20] ŠTUDENT: Govoril sem o vrnitvi matrika ali nekaj takega. [01:28:23] Davin: Ja, to je vprašanje Lahko se vrnem več vrednosti. Ne morete vrniti več vrednosti. Ne moreš, kot so, vrnite potem vrnitev b ali kaj podobnega. Ker po tem, ko se boste vrnili, vas vrnitev iz funkcije. In potem je funkcija opravljeno, in kot je rekel Rob, je na kupu. [01:28:35] Tako da vse le spomin dobi vrne na računalnik. Vse, kar dobi pozabljena, v bistvu. Torej, če želite, da se vrnete multiple vrednosti, se morate vrniti niz, In način, kako to, da je mallocing. In potem bi se vrnili x tako. V bistvu, ste pravkar vrnila ime. In ko se vrnete kaj takega, si dejansko ne vrača vrednosti. [01:28:53] Torej, recimo, da ste shranili vrednosti v matriki. Niste dejansko vračanje teh vrednot. Všeč mi je, če sem se vrnil int sem res vrača kopije vrednosti. Ampak, če bi bil jaz, da se vrnete kaj takega, Jaz sem se vračajo sklicujejo s temi vrednotami. Tako da sem se vračajo, v bistvu, pomnilniški naslov na vrednosti. Ali to smiselno? ŠTUDENT: Da. Davin: Lepo. Ja? [01:29:13] UČENEC: Ko ste uporabo drand tukaj, moraš dati srand pred tem? [01:29:17] Davin: Ne, ne, jaz ne mislim tako. [01:29:20] ROB: Ja, to imaš reči ničesar o srand? Privzeta vas nikoli rekel srand sploh je pač srand o null. Torej drand na lastno bo delovala. In se bo samodejno seme z trenutni čas, je tisto, ki jih uporablja. Davin: Da? ŠTUDENT: Ali vam [neslišno] s številkami? Davin: Da, lahko. ŠTUDENT: Torej si lahko pravijo, podobno, 4 krat 2. Stvar je v tem, da ne more prevzeti potem int je štiri bajte. Only-- [01:29:51] Davin: Mislim, za kviza lahko. [Smeh] [01:29:54] ROB: Mm, no. Davin: Ja, ja lahko. Če vas vprašati, kako velik je int, ne moreš biti, kot, štiri ali osem. ROB:, tako da, če Oh Vprašanje je, natančneje, podobno, če je težava kodiranje, bi morali reči, velikost notr. Če je tabela, ali se pravi, koliko bajtov, ne smete izpolniti velikosti ints. [01:30:08] ŠTUDENTI: [smeh] [01:30:18] Davin: Right, zakaj je int velikost pomembna? Tako kot, če gremo na 32-bit procesor ali kaj podobnega, potem se dogaja, da se štiri bajte. Vendar na nekaterih novejših stvari, bi bilo kaj? Lahko bi bilo osem, kajne? Torej this-- če si hard code štiri, nato pa na nekaterih strojih, bo to delovalo. Nekateri stroji, to ne bo delovalo. Ampak, če na kvizu smo si všeč, kako velik je int? Dal štiri. ROB: Right. Davin: Ja? ŠTUDENT: Torej, ker smo o razglasitvi [Neslišno] znotraj funkcije, bi morali dati 3 v tej funkciji? Ali lahko uporabila zunaj? Davin: Lahko jo uporabite zunaj te funkcije. Torej on prosi za brezplačno. [01:30:49] ŠTUDENT: Lose skladbo kje [neslišno]. [01:30:51] ROB: Oh, prosto ne happen-- da je del čarobno funkcije malloc je, da niste omejen na lokalno področje. Imate popoln nadzor nad kako dolgo spremenljivke živeti. Zato pravimo funkcije malloc tukaj, bi bilo biti popolnoma ločena funkcija. Morda bi bilo 10 ur kasneje da smo končno pokličite brezplačno. [01:31:08] Davin: Tako, na primer, kot je, par tednov od zdaj, ko ste končno naredite svojo zbirko Speller psets, boste da so nekatere funkcije, ki ustvarja ton vozlišč. Torej ste mallocing ton vozlišč v tej funkciji. In kasneje v ločena funkcija, ste želeli, da osvobodi vse tiste vozlišč. Tako da lahko dobesedno samo preide sprostiti kazalec, tako da je pomnilniški naslov s tem, kar ste malloced. In da bo v redu. Nimate za osvoboditev, podobno, v isto funkcijo. Ja? [01:31:30] ŠTUDENT: Torej funkcije malloc spremenljivka [neslišno] zunaj? Je to kaj praviš? Davin: Čakaj, praviš? Žal mi je. [01:31:38] UČENEC: Če funkcije malloc spremenljivka lahko brezplačno kjerkoli v kodi, nato pa jih je mogoče dostopati kjerkoli v kodo? Lahko jih vodijo lokalni? [01:31:45] Davin: Oh, me je vprašala, podobno, spremenljivka, like-- [01:31:51] ROB: Torej, še vedno je treba imajo neke vrste referenca na bloku funkcije malloc je pomnilnika. Torej, tukaj, smo se vračajo x. ŠTUDENT: Oh. ROB: Če ni vrnil x tukaj, in to je bilo samo za nično, potem bi nimajo dostopa do kazalec, ki je bila malloced, in to je spomin razpoka. [01:32:05] ŠTUDENT: OK. [01:32:06] Davin: Torej, kot, recimo, vam rečem ima to, kot, tukaj. ROB: Ne Davin: V mojem glavno funkcijo, ne morem Samo to imenujemo x in se, kot, OK, v tej funkciji, sem to storil. [01:32:14] ROB: Right. [01:32:14] Davin: Torej, bom poklical v x, podobno, glavna ali nekaj takega. Ne moreš narediti. Boš vrnil nekaj. Ampak kaj boš vrnil? Boš vrnil pomnilniški naslov. In ker se vrnete spomin naslov, ki je na voljo drugje. Še kakšna vprašanja? Ja? [01:32:28] ŠTUDENT: Je funkcija zgoraj da je prijava za [neslišno]? [01:32:33] Davin: Zakaj mi ni treba storiti? ŠTUDENT: [neslišno]. Davin: Ker ste ne mallocing ničesar. Torej, to je not-- ja, to je ne kot niz s. To je kazalec nekje. To so le vrednosti. ŠTUDENT: OK. Davin: Ja. Kaj drugega? ROB: Ja? UČENEC: Ampak, ko [neslišno]? [01:32:55] ROB: Torej, da se osvobodi spomin, bi rekli tukaj. Torej x je naš kazalec blok pomnilnika. Mi sprostiti ta kazalec. In mi ne bi bilo nujno, da to storite tukaj. Mi lahko to storite kjerkoli. Ampak ti samo pokličite brezplačno nekaj, kar funkcije malloc donose. Torej funkcije malloc, tukaj, vrnil kaj se skladišči v x. Tako smo lahko pokličete brezplačno na x. Morebitne zadnje vprašanje? [01:33:20] Davin: Vse zadnje vprašanje? Ja? [01:33:22] ŠTUDENT: Oprostite, lahko ponovno razložiti zakaj bi si sprostil tam? Zakaj [neslišno]? [01:33:26] Davin: Za tukaj? [01:33:27] ŠTUDENT: Ja, kot prav po njem. Davin: Verjetno Ne želim tukaj brezplačno. ROB: Verjetno ne. Davin: Ja, da bi bilo to treba storiti nič. To bi, kot je, ustvariti spomin, naredi stvari z njim, in nato takoj pozabi, ja. [01:33:37] ROB: Ampak lahko bi to storili, kot so, Tukaj nekega razloga. Lahko bi rekli, int zvezdo y enaka povratni niz. Ali nekaj stvari z y, morda izpisal vsebino. In potem, končno, smo naredili. Mi lahko brezplačno y. ŠTUDENT: [neslišno]. Davin: Naj se pomaknite navzdol? Hvala. ROB: Lepo. [01:34:02] Davin: OK, to je to. ROB: Dobro, dobro. Srečno. [01:34:05] Davin: Če imate vprašanja, nam pišite. Srečno.