[00:00:00] [Musiikki soi] [00:00:11] DAVIN: Okei, kaverit. Joten tämä on tarkastelu ensimmäistä tietokilpailu. Onko kaikki valmiina tietokilpailu keskiviikkona? Allison: Woo! Opiskelija: Woo! DAVIN: Joo. Allison: Yeah! DAVIN: Tämä kaveri on valmis. Että kaveri, kaksi kättä, kiva. Joten tietokilpailu arvostelu tänään, se on menossa olevan noin puolitoista tuntia. Aiomme käydä läpi kaikki tärkeimmät käsitteitä sinun pitäisi tietää tietokilpailu. Aiomme käydä läpi joitakin koodaus käsi esimerkkejä, jotka ovat osa jokaista tietokilpailu. Ja jos sinulla on kysyttävää, ota vapaasti nostaa kätesi ja kaikki niin. No, logistiikka noin tietokilpailu online-tilassa. Joten aiomme jakaa ihmisiä jopa eri huoneissa. Se perustuu nimensä. Joten jos sinulla on kysyttävää, joissa mennä tai mitä materiaalia on, kuten, virallista sanaa siitä, mitä tapahtuu olla tietokilpailu, tarkistaa verkossa. Ja se on kaikki ajan tasalla. Joten jos ei ole kysymyksiä Ensinnäkin, me aiomme aloittaa. Ja tässä on Allison. [00:00:56] [Taputtaa] [00:00:57] ALLISON: OK, kiitos, Rob. Arvostan sitä. Davin olisi pitänyt kääntää tämän. Tämä on ei-tyhjentävä luettelo aiheita, kuten aina, kuten Davin juuri sanoi. Consult asiakirjat verkossa noin tietokilpailu nolla. Mutta tämä on melko much-- se opetusohjelmasta on kaikki olemme menneet yli toistaiseksi. Kaikki täällä on reilu peli, sekä jotain muuta jotka ovat saattaneet mainittu luento. [00:01:21] Oma osio, täällä on vain paljon tarkastelun. On pari harjoituksia että te voisi työskennellä. Mutta suurimmaksi osaksi, me todella haluavat päästä Davin kanssa koodi käsin harjoituksia. [00:01:31] Joten aion lentää läpi tämän. Jos sinulla on kysyttävää, pysäyttää minua. Nosta kätesi. Lupaan todennäköisesti nähdä sinua. Jos ei, vain aalto sen ympärille. Aion puhuvan nopeasti. Toivottavasti kaikki on OK kanssa. [00:01:43] OK, erityinen sana, Davin ilmeisesti Unohdin selata näitä dioja. [Nauraa] ​​Olet pulassa, mies. Joten vinkkejä tietokilpailu nolla, harjoitella koodaus paperilla. Te olette menossa hakemaan harjoitella, että nyt Davin, joten et kokonaan itse. Mielestäni olemme todella menossa läpi nämä kaksi tehtävää. Joten voit olla hyvin valmisteltu siellä. [00:02:04] Tuntee ongelman sarjaa. On ollut kysymyksiä aiempien tietokilpailuja joka kysyy, esimerkiksi koodaamaan ylös jotain hyvin samanlainen Mario. Joten on hyvin perehtynyt ongelma asetetaan, samoin koska kysymykset pyydämme teitä alussa lomakkeelle että täytät, tulee palvella sinua hyvin. [00:02:20] Tee edellinen tietokilpailu alle aikarajoitukset. Nämä tietokilpailut ovat pitkiä. Aika menee todella nopeasti. Ja usein, et ymmärrä, miten nopeasti se menee ennen kuin olet itse laita itsesi näissä rajoitteita. Joten jos voit vain raivata, tiedätte, 75 minuuttia, joko tänä iltana tai huomenna ottaa yksi näistä tietokilpailuja alle että sinulla on paljon paremmassa kunnossa. [00:02:41] Ja myös, luot viittaus arkki. Muista, saat yhden sivulla edessä ja takana referenssinä tietokilpailun keskiviikkona. Luominen, että on hyvä tapa opiskella. Mitään, että sinulla on ongelmia kanssa haluat sisällyttää siellä. Mitään, että TF: t ovat olleet, kuten, tämä on todella tärkeää. Sinun pitäisi tietää tämä, ovat Ehkä asiat sinulla on siellä jos sinulla ei ole niitä ulkoa. Vaikka et tiedä niitä todella hyvin, joskus ottaa se siellä on juuri sellainen mukavuutta sinulle, jonka tiedän tietokilpailuja ovat stressaavia. Joten kaikki mukavuutta saat auttaa. Okei, myös, saada unta ja syödä ja pidät normaaleja asioita että kerromme teille tietokilpailuja. [00:03:16] Niin alkaa helpolla, tietotyypit ja kokoja. Kuten sanoin, tämä on juuri menossa on minulle heittää paljon tavaraa täällä, että sinun pitäisi tietää. Joten meillä on merkkiä jotka ovat yhtä tavua, ints jotka ovat neljän tavun, pitkä pitkät, jotka ovat kahdeksan tavua. Periaatteessa se on vain sinä haluavat pitää suurempia kokonaislukuja. Kellukkeet, jotka ovat neljä, tuplaa, jotka ovat kahdeksan. Jälleen vain antaa sinulle enemmän tilaa kelluu. Ja kirjoita sitten tähden, niin mitään osoitin 32-bittinen kone, joka on kaikki te tarvitset tietää, on neljä tavua. [00:03:44] Joten kaikki asiat sinun pitäisi tiedä, ehkä asiat Haluatko olla sinun viittaus arkki. OK, binary muuntaminen binary, muuntaminen heksadesimaaliluvuksi, edestakaisin, kaikki mitä pitäisi tietää. Joten binary desimaaliluvuiksi. Te halua ottaa nopeasti hetken ja yrittää selvittää, jokainen näistä ja sitten kertoa minulle, mitä ne ovat? [00:04:06] Minulla on myös karkkia laukussani, joten kuka tahansa joka vastaa saa karkkia, muuten. Ja minulla on paljon se. Saanen tarttua tähän. Aion antaa tämän Gabe. Joten voit jakaa karkkia kuka on mukava ja yhteistyökykyinen. [00:04:21] OK, minä näin käsi siellä takana. [00:04:26] Opiskelija: Joo, ensimmäinen on 42. [00:04:28] ALLISON: Kyllä, ensimmäinen on 42, oikea. Opiskelija: [kuulumaton]. [Naurua] Allison: Toinen yksi, siellä taas keltainen? Opiskelija: 110010. ALLISON: oikea, ja tämä viimeinen, täällä alhaalla? Myös joo, tiedät haluat? Vain nakata pois karkkia. Entä karkkia kaikille? [00:04:46] Opiskelija: [kuulumaton], kun olemme tehneet. [00:04:47] Allison: Hys. Ja sitten viimeinen. Kuka haluaa vastata? Tuolla. [00:04:52] Opiskelija: 11100. [00:04:54] ALLISON: 11100, katso tuota. Onneksi olkoon, hienoa työtä, kaikille. OK, jokainen tavallaan ymmärtää Menetelmä tekee tämän? Olet menossa binary desimaaliluvuiksi Muuten minulla on tapana tehdä se, on kirjoittamisen toimivaltaa 2. Joten sanon, OK, 0 kertaa 2-0, niin se on 0, 1 kertaa 2 ensimmäiseen, on 2 menee eteenpäin sillä tavalla. Onko kukaan halua minua nimenomaisesti läpi esimerkki binary? OK, viileä. [00:05:28] Binäärikoo- on hyvin samankaltainen. Minulla on tapana kirjoittaa toimivaltaa 2. Aloita joka on suurin, mutta ei mene ohi desimaalin että etsit. Ja sitten sellainen työ tiesi taaksepäin laskemalla asioita tarpeen mukaan. [00:05:42] Ja sitten lisäksi se on aivan kuten normaali lisäksi. Jos joskus on tapaus, jossa olet lisäämällä kaksi 1s, se muuttuu tietysti 2. 2 binary on nyt 1 0 niin tarvitset kuljettaa 1 seuraavaan sarakkeeseen. Cool. [00:05:59] Heksadesimaalinen, tämä voisi olla jotain joka on hieman vähemmän tuttuja. Niin Rob oli juuri kertoi minulle etukäteen, hänen temppu tästä on vain jakaa sen ylös neljään tavun palasina, OK? Bittiä, sorry. Katso? Kiitos Rob. Siksi sinä olet täällä. [NOISE] OK, joten me vain rikkoa sen neljään bittiä paloina. Joten binäärit heksadesimaaliluvuksi, katsomme ensin 4, joka on, jos meillä on neljä 1S rivi, mikä numero ei se symboloi? [00:06:25] Opiskelija: F. [00:06:26] Allison: Joten tässä tapauksessa, mikä on 11111111 or-- kyllä? Opiskelija: FF. ALLISON: Perfect, FF. Niin suuri, karkkia sinulle. Nyt, kuinka heksadesimaali binääri, me vain ajatella sitä tavallaan taaksepäin. Kunkin numero tai kirjain, joka meillä on heksadesimaalina vain muuntaa sen neljän bitin [Nauraa] ​​sen neljä bittinen muunnos. Joten 5, tässä tapauksessa, mikä on 5, jos olemme sitä edustavien neljä bittiä? [00:06:58] Opiskelija: 010? Mm-hm. Ja sitten, mikä on oikeastaan ​​10, olisi? 1010. Meillä on siis, että täällä. Joten muuntamisessa heksadesimaaliluvuksi ja binary oikeastaan ​​ole niin paha. Jos katsot sitä neljäbittiseen paloina, olemaan kultainen. Everyone-- kyllä? [00:07:19] ROB: Tämä on typerä, mutta olen aina muistaa , Koska pitäisi olla 10. Ja binary on vain 10 10, so-- [00:07:26] ALLISON: Ah, siellä mennään. [00:07:27] ROB: Hei. [00:07:28] ALLISON: Hei, karkkia Rob. On kuin suklaa juttuja siellä. Joten voit olla. Niin ASCII matematiikka. Käyttäytyä. Joten ASCII matematiikka, kuten te luultavasti hyvin muistaa p asetettu 2 Visioneer ja Caesar, teit paljon tästä. Muista, hahmot ovat pohjimmiltaan vain numeroita. Joten voimme tehdä matematiikasta niiden kanssa, aivan kuten mekin matematiikkaa ints. [00:07:54] Joten meillä on vain vähän yksinkertainen juttu täällä. Meillä on joitakin vuonna se alustetaan 65. Ja B vastaa ASCII-arvon plus 1, nieriää C vastaa D miinus 1, ja nieriä D on 68. Niin aiomme Tulosta ne kaikki, kuten näemme täällä. Ja voi joku kertoa minulle, mitä se tulostaa? Opiskelija: [kuulumaton]. ALLISON: Aivan, niin yksi asia huomata on että olemme tulostukseen merkkiä kerta täällä. Olemme nimeämällä vaikka A ja B ovat ints kun julisti ne edellä. Olemme tulostus niitä merkkejä prosenttia C ja meidän printf selvitys, niin ne kaikki tulostuvat merkit. Ja tietenkin, ASCII-arvo 65 tahtoa tulostaa A. ASCII-arvo plus 1 olisi 66, mikä ylpeitä siitä, että B. Joten itse asiassa, me saada B C D Jokainen hyvä siellä? Kaikki kysymykset? Mahtava. [00:08:52] OK, soveltamisala. Joten soveltamisala on tietenkin hyvin Tärkeintä on ymmärtää, täällä. Monet teistä, jos on kokoamisessa virheet, ja se sanoo, et ei ole pääsy jonkin verran muuttuva, Se johtuu luultavasti siitä määritellyt sen sisällä silmukan ja yritti sitten käyttää sitä pois, tai päinvastoin. [00:09:12] Joten soveltamisala sen ydin, se vain määrittää, missä sanomme muuttuja on olemassa, jos me voi muuttaa sitä, missä voimme käyttää sitä. Se on vain sellainen sanonta nämä ovat ainoita paikkoja, joissa sinulla on pääsy tähän muuttujaan. [00:09:26] Joten kaksi putkilla että puhumme oppitunnilla ovat globaaleja ja paikallisia. Joten yleismuuttujat puhumme kun ne määriteltiin edellä main. Se tarkoittaa, että koko Ohjelma on pääsy siihen, ja se on olemassa niin kauan koska ohjelma toimii, OK? Paikallinen tarkoittaa, että se on lisää rajoittuu alueelle. Joten jos sinulla on tiettyjä toimintoja kuten swap, me aina puhutaan. Me puhumme aina swap kanssa ja B. A ja B ovat olemassa, että toiminto. Niitä ei ole olemassa missään muualla. [00:09:56] Kuten hyvin, kun sinulla on, jos lausuntoja tai silmukoita. Aina meillä on, esimerkiksi varten silmukka olemme int i on yhtä suuri kuin 0. Meillä on joitakin kunnossa ja päivitämme sitä. Olen olemassa vain sisällä henkselit on, että silmukka. Jos yrität käyttää sitä muualla, kääntäjä olisi huutaa sinulle. Se olisi kuin, mitä sinä yrität tehdä? Tämä ei ole olemassa. Niin, että kaksi erityyppisiä soveltamisalaa. Onko järkeä kaikille? [00:10:23] Joten esimerkiksi täällä, tämä on vain noin yksinkertainen ohjelma. Mitä olette mieltä on tapahtuu jokaisessa pisteessä että yritämme tulostaa? Joten tämä yksi täällä, mitä tulee tapahtumaan? Opiskelija: se tulostaa kolme. Allison: Oikea. Se tulee tulostaa kolme. Entä täällä? Opiskelija: Se ei toimi. Allison: Se ei toimi. Olet poissa laajuus, eikö? Paikallinen muuttuja ei ole olemassa näiden ulkopuolella henkselit, okei? Ja sitten entä täällä? [00:10:56] Opiskelija: [kuulumaton]. [00:10:57] Allison: Mitä? Rob, mene. [00:10:59] ROB: juuri sanoin. Globaalien muuttujien pitäisi olla globaali alaviiva muuttuja. [00:11:04] ALLISON: Ah, kyllä, anteeksi. Kiitos, Rob. Rob kuin meidän asuva kääntäjä. Hän vain huutaa kun me tarvitse sitä. [Nauraa] ​​Kyllä, että pitäisi olla maailmanlaajuista alaviiva muuttuja. Niin olettaen, että oli maailmanlaajuinen alleviivaus muuttuja, mitä tulee tapahtumaan täällä? Opiskelija: Se toimii. Allison: Se tulee toimimaan. Joten se tulostaa, joten vain hyvin yksinkertainen esimerkki. OK, prototyyppejä. Joten ilmeisesti, me todella korostaa teille kaverit tehdä tehtäviä, jos se järkeä ohjelmat. Mutta tietenkin, kun tehdä omia toimintoja, tyypillisesti voit määritellä ne kun tärkein. Ja voit yrittää soittaa niitä main. Ja jos et käytä prototyyppi, kääntäjä tulee huutaa sinulle. [00:11:46] Prototype on pohjimmiltaan vain kertoa kääntäjä että minulla on tämä toiminto alla tärkein. Aion kutsua sitä ennen minä määritellä se. Vain pitää kiinni. Lupaan, että se on määritellyt, ja te on kaikki, mitä tarvitset. [00:12:00] Joten miten teemme se on vain sinun palata tyyppi, sinun funktion nimi, syöte lista. Se on pohjimmiltaan ensimmäinen rivi oman toiminnon ilmoituksen. Se on oikeastaan ​​kaikki se on. Mutta tämä on vain yleinen sellainen muoto. [00:12:14] Joten meidän esimerkiksi täällä, jonka te pitäisi nähneet jaksossa jossain vaiheessa, meillä on jotkut int kuutio vie jonkin int tulo. Ja meillä on tärkein toiminto, jossa kehotetaan kuutio. Ja kuutio määritellään jälkikäteen. [00:12:28] Joten, jos meillä ei ole int kuutio tulo huipulla, kun soitimme kuutio sisällä tärkein, meidän kääntäjä olisi suuttua meille. Se olisi kuin, mitä sinä puhut? Kuutio ei ole olemassa. En tiedä, mitä olet pyytänyt. Ja olen juuri menossa pysäkki. [00:12:43] Mutta koska teimme prototyyppi huipulla, olemme sanoneet, Tiedätkö, kun näet kuutio, älä välitä siitä. Lupaan se määritellään myöhemmin. Ja se tulee avulla voit tehdä mitä haluat. Joten jos koskaan on funktio joka on julistettu sen jälkeen kun te kutsutte sitä ensimmäistä kertaa, sinun täytyy on se prototyyppi yläreunassa. [00:13:01] Kyllä? [00:13:02] ROB: Se potenssiin, ei cubing. [00:13:04] Allison: Voi luoja. En have-- Gabe, luulin olit meidän oikolukija. OK kaverit, vastaa minulle, täällä. Toivottavasti kaikki on tulossa idea. OK, joten tämän pitäisi olla on potenssiin, ei kuutioitu. Mutta ajatus pysyy samana. Jos jokin toiminto olemme soittamalla jälkeen Itse asiassa pitäisi olla prototyyppi. Jokainen hyvä, että? Muita kirjoitusvirheitä? OK. Kirjoitusvirheet tästä ennen kuin aloitamme, Rob? [Nauraa] ​​OK, niin structs. Periaatteessa structs voit luoda oman datatyypin. Niin paljon kuin int tai char tai float, se on vain yksi tyyppi. Haluan ajatella sitä, kuten, Luo oma tietotyyppi. Joten sen avulla voit tehdä niin. Ja sillä on erilaisia ​​tietoja. [00:13:56] Joten jos muistat, array, me voi vain pitää asioita samantyyppisiä. Structs jotta voimme olla useita asiat erityyppisiä. Joten tässä tapauksessa täällä, me on struct nimeltä Student, nimetty tässä alareunassa. Ja meillä on joitakin int id ja jotkut merkkijonon nimi. Joten tämä on vain yksi tietotyyppi. Meillä on nyt tietotyyppi nimeltä Student. [00:14:20] Joten koska voimme ajatella se vain yhtenä tietotyyppi, voimme julistaa muuttujia kuten minkä tahansa muunkin. Joten sen sijaan vain ottaa, kuten, int opiskelija, meidän on vain opiskelija, opiskelija 1. Oi, katso. Se on Rob. Joten tässä me julistamisesta struct tai muuttuja kutsutaan opiskelija 1 tyypin opiskelija. Niin se tulee olla tunnus ja nimi liittyy siihen. [00:14:45] Ja tapaamme käyttää näitä elementit meidän struct on kanssa dot toimijan, tässä. Joten tässä tapauksessa, me julisti joitakin opiskelija 1. Me määritetty tunnus on 1. Ja me annetaan nimi on Rob. OK, kaikki hyvä, että? Käytä sitä vain like-- kyllä? [00:15:06] Opiskelija: Joo, typedef-- kun meidän täytyy käyttää typedef? [00:15:09] Allison: Niin typedef juuri sanoo that-- Rob, et voi korjata minua tässä, jos olen wrong-- mutta typedef on vain todella julistamisesta se tyyppi, jota voit käyttää, eikö? [00:15:19] ROB: Joo, se on pohjimmiltaan, joten se on vain luoda alias, tai lempinimi tyyppi. Joten voit kirjoittaa, että [kuultavissa]. Joten [kuultavissa] olemassa, ja nyt meidän on vain [Äänetön] avulla täsmälleen sama asia. Ja niin täällä, me kirjoitetaan, luulen, Joissakin struct tyyppi 2 [kuultavissa]. Joten se on vain lempinimi tietylle. [00:15:40] Opiskelija: String [kuulumaton] kirjasto oli kirjoitettu ylös kuin char tähti. [00:15:51] Allison: Meidän tarkoituksiin täällä, jos olet julistamisesta struct, vain tehdä typedef struct. OK, joten etukäteen, tämä on vain normaali muuttuva täällä. Me käyttää sitä pisteellä. jos meillä on osoitin struct, voimme todella Käytä nuoli, joka on aika siistiä. [00:16:10] Joten tässä tapauksessa, meillä on osoitin opiskelija 1, joka on tyyppiä opiskelija. Muista, teidän osoitin rakentaminen, Haluatko Lajista osoitin on osoittaa olevan alussa. Joten meillä on joitakin opiskelija 1, täällä. Ja koska tämä opiskelija 1 on nyt terävä, voimme itse mennä opiskelija 1 nuoli nimi sijasta piste, koska se on osoitin, ja antaa Rob. Ja nyt, jos haluamme muuttaa Rob Davin, tämä on vain näyttää sinulle erilainen tapa tehdä se. [00:16:43] Joten sen sijaan käyttää nuoli, voit voi also-- Lopetan tähän ja sitten ottaa että question-- voisit myös tehdä viittaus opiskelija 1. Se on sanoa kuin mennä mikä on opiskelija 1, joka olisi meidän opiskelija struct. Käyttää sitä pisteellä ja elementin jonka haluat, ja sitten siirtää sitä. Oli kysymys. Opiskelija: Joo, niin miten ihmeessä olet käyttää [kuultavissa], kun olet tekee opiskelija tähti ilman [Äänetön] opiskelija? Allison: Koska tämä luo osoitin. ROB: Aiomme puhua siitä. Allison: Aiomme puhua siitä myöhemmin uudelleen. Joten pitää kiinni tuon ajatuksen. Jos se silti häiritsee sinua pää, tule puhumaan yksi meistä. [00:17:20] Joten nämä tehdä täsmälleen sama asia. Olemme vain näyttämällä kaksi erilaisia ​​tapoja tehdä se. Opiskelija 1 on nyt osoitin, niin voit käyttää nimi-elementin sisällä struct nuolella. Tai voit dereference osoitin, ja sitten käyttää sitä tavalliseen tapaan. Onko se järkevää jokainen? Jos koko osoitin asiat ovat hieman sekava, Gabe puhuu, että ja sitten ehkä tämä järkevämpää. Kyllä? [00:17:46] Opiskelija: Joo, niin miten on tämä eroaa? Allison: edellinen yksi? Joten opiskelija 1 tässä kyseessä ei ole osoitin. Se on vain todellinen struct. [00:17:54] Opiskelija: OK. [00:17:55] Allison: tämä yksi on osoitin struct. [00:17:58] Opiskelija: OK, mutta ei se sellainen päätyvät työskentelevät saman [kuultavissa]. [00:18:02] Allison: Se tehokkaasti toimii samalla. Syntaksi on aivan erilainen. Opiskelija: OK. [00:18:05] ALLISON: Joo, ne ovat käytännössä samaa. Se on vain riippuen yhteydessä, haluat ehkä yksi yli muiden. Kyllä? [00:18:11] Opiskelija: Kun teet viittaukset 1-- Allison: Mm-hm? Opiskelija: Miksi on suluissa? Allison: Koska opiskelija 1 on osoitin. Joten sinun täytyy varmistaa, että olet vain dereferencing osoitin. [00:18:22] Opiskelija: OK. [00:18:23] Allison: Joten tässä tapauksessa täällä, suluissa sen ympärillä tarkoittaa olet dereferencing opiskelija 1. Joten aiot jossa opiskelija 1 pistettä, mikä on teidän struct. Joten nyt voit ajatella on se, että struct, joten voimme käyttää normaalia dot toimintaa. Muita kysymyksiä? Cool, mahtava. [00:18:48] Niin viimeinen asia, luulen on viimeinen dia, woo! OK, joten liukuluku epätarkkuus. Puhuimme lyhyesti Tämän aikana luento. Periaatteessa meillä on äärettömän monta todelliset luvut. Ja jos joku teistä kaverit rakkaus matematiikka, siellä kaikenlaisia ​​hienoja juttuja meillä. [00:19:05] Mutta on äärettömän monet todelliset luvut. Mutta ne ovat vain äärellinen monta bittiä, että meillä on. Joten olet aina menossa on epätarkkuus, on kaikki. Ja se, joka on juuri sellainen jotain sinun pitäisi tietää. Että kuten saatamme kysyä miksi liukuluku epätäsmällisyys olemassa? Joten jotain sinun pitäisi tietää. Ja että, olen kääntämällä sen yli viitteitä. [00:19:27] Binky: Hei, kaverit. Nimeni on Binky. Aion puhua viitteitä. Joo, niin viitteitä on oikeastaan Oma suosikki osa tämän kurssin. Niin vain tehdä selväksi, mitä Allison puhui täällä, joten syy why-- ainoa ero tässä, suuri ero oli tapa me julistamme asioita. Joten opiskelija tähti tarkoittaa tätä on osoitin opiskelija. Ottaa huomioon, liukumäki ennen, opiskelija Varsinainen struct, kuin varsinainen opiskelija, sisältävät mitään näistä asioista. [00:19:54] Ja miksi me haluavat to-- kyllä, Davin? [00:19:57] DAVIN: Mitä nuoli tarkoittaa? [00:19:58] Binky: nuoli välineet täsmälleen sama kuin tämä. Joten et todellakaan tarvitse nuolta. Kuten, jos olet ainoa ohjelma C, voit vain käyttää tätä. Anteeksi, en ole sitä, mitä se on. Voit vain käyttää tätä syntaksia. [00:20:14] Mutta jotkut ihmiset, kun ne suunnittelussa C, ne tajunnut, että ihmiset käytetty että syntaksin niin paljon, että he pitävät vain keksiä kanssa syntaksi rakenne sitä. Ja tämä tapahtui muoto tästä nuoli. Ja se on todella mukavaa, koska se symboloi jotain siltä, ​​että olemme itse asiassa seuraavat tämä nuoli, tämä osoitin, kohti tilaa muistissa. Ja kun pääsemme sinne, haluamme etsiä nimen että opiskelija, jos se on järkevää. OK? [00:20:43] Joten tämä on täsmälleen sama. Tämä on täsmälleen sama asia kuin tämä. He saavat koottu täsmälleen sama, OK? Ja syy tähän miksi me malloc jotain, johtuu siitä, että tässä tapauksessa, Meidän muuttuja on todella vain osoitin muuttuja. Joten meillä on vain jonkin verran tilaa muisti, että pitelee osoitin. Meillä ei todellakaan ole mitään tilaa joka pitää todellisen struct. [00:21:06] Joten tämä on tehtävä kahdessa vaiheessa. Meidän on luotava muistin laittaa struct vuonna. Ja meidän on luotava muistin laittaa osoitinta. Joten he ovat pohjimmiltaan kaksi eri muuttujista, täällä. Yksi niistä on tyyppiä opiskelija, paitsi että se ei oikeastaan ​​ole nimeä. Ja toinen on Tyypin opiskelija tähti. Ja sitten opiskelija 1 pistettä siellä, jos järkeä. OK? [00:21:28] Joten miksi käytämme viitteitä on, koska kaikki tietokoneessa, joka muuttuja tietokoneessa on kaksi asiaa. Se on sen arvo. Ja sillä on osoite. Ja hyvä tapa käsitteellistää tämä on olemassa monia ongelmia, kun yritä käyttää toimintoja. Ja aiomme yrittää tutkia yksi niistä. Nimittäin, se tulee ajatella muistia kuin laatikot. [00:21:50] Aina ajatellut muuttujien kun sanot na on 5. Luuletko, että laittaisit 5 laatikkoon. Joten mitä jos haluat kulkea että int funktio? Sinä vain pass-- en know-- x osaksi toimintaa. Mutta mitä tapahtuu, on yleensä ihmisinä, te Luulisi jotain olen kulkee laatikko henkilö. Ja se ei ole oikeastaan tapahtua tietokoneita. Mitä tapahtuu, on kopioit arvo laatikon henkilön ruutuun. [00:22:17] Joten mitä yritän sanoa on, että jos sinulla function-- sorry-- täällä, jos meillä on toimivat kuin viisi ylös siellä, jos yrität siirtää muuttuja, se on juuri menossa kopioida. Jos Alusta NX yhtä kuin 3, se on menossa kopioida tämä arvo jopa muuttuja siellä. OK, ja tämä on sellainen syy miksi haluamme käyttää osoittimia. Koska sen sijaan, antaa vain arvo, eikä vain ohimennen vain arvon funktio, haluamme kulkea viitteeksi. Mitä kutsumme syötön viittaus on eräänlainen antaa laatikossa toiminto, jotta toiminto voidaan myös Muuta arvoja sisällä että laatikko. [00:22:53] OK, joten vain joitakin perustietoja osoitin tavaraa on luoda osoittimia, te vain julistaa, että se tyyppi, ja laitat tähti heti perään. Ja tyyppi on vain mitä olet osoittaen. Joten jos se on int tähti, olet osoittaen int. Jos se on char tähti, olet osoittaen kaavio. Ja jos se opiskelija tähti, olet osoittaen opiskelija. OK? [00:23:08] Ja he kaikki 4 tavua pitkä. Koska tämä muuttuja se ei oikeastaan tarvitse pitää char, int, tai opiskelija. Se tarvitsee vain pitää osoite. Siksi he ovat kaikki 4 tavua pitkä normaali 32-bittinen kone. OK? Joten tässä, x on muuttuja, joka osoittaa int. y pistettä merkkiä. z pistettä jotta kellua. Kysyttävää täällä? Cool. Ja siellä on kaksi erilaisia ​​symboleja heillä pitää mielessä, kun tulossa osoitin. Niin löytymistä ja dereferencing ovat isot. Joten et-merkki on muuttujan nimi antaa sinulle? Opiskelija: Osoite. Binky: Osoite. Joten jos julistaa int on yhtä kuin 5, niin et-merkki ja on aio antaa teille osoitteen. Ja voit itse kokeilla tulostaa tämän ja nähdä mikä osoite muistiin muuttuja on. Ja sitten dereferencing-- niin että oli löytymistä, saada address-- dereferencing on täysin päinvastainen. OK, aivan kuten kertaa on vastakohta jako, tähti on vastakohta & -merkki. Joten dereferencing keinoin sinne. Joten jos annat star-- I älä know-- 50, joka on yrittävät mennä osoite lukumäärä 50 tietokoneesi sisälle. OK, ja miksi me näemme että ne ovat toistensa vastakohtia? Se, mitä tapahtuu, jos teet jotain tähti ampersand? No, et-merkki antaa sinulle osoitteen muuttujan, osoite. Mutta tähti tarkoittaa mennä sinne. [00:24:35] Joten mitä tapahtuu, jos Siirry osoitteen? Sinä vain saada, eikö? Joten menossa osoite on sama asia kuin. Siksi he yleensä tarkoitetut same-- tämän ja tämä on tarkoitettu vastakohtana toimijoille. OK? Niin cool. [00:24:53] Konepellin alle, esimerkiksi, jos me julistamme int x on yhtä kuin 5, meillä on vaihteleva. Ja muista, että minä sanoin jokainen variable-- ja tämä on hyvä asia pitää mind-- sillä on kaksi eri asioita liittyy. Se on osoitettu ja arvo. OK? [00:25:07] Joten arvo on tässä tapauksessa 5. Ja osoite is-- sanotaanko, olen tehdä jotain up-- se on 0x04. Ja ainoa syy, miksi me yleensä edustavat osoitteet heksadesimaalisessa on yksi, koska se on kuin hyvä. Se menee hyvin binary. Se on helppo muuntaa ja binääri. Ja se ei saa liian suuria, jos sinulla on erittäin suuri määrä. Joten haluamme käyttää heksadesimaaliluvuksi painatuksessa osoitteet. Mutta voisin edustaa tämä kokonaisluku. Se on hieno. [00:25:32] Ja niin se on osoite 4 ja arvo 5. Ja sitten minä sanoin int tähti osoitin. Joten tämä on erilainen tyyppi, ilmoitusta. Int tähti osoitin on sama osoite x. Niin mitä tulee olemaan arvo PTR? Se tulee olemaan osoite X, tänne. OK, joten arvo on menossa olla sama kuin osoite. Se toimeksianto toimia mulla. Ja sitten PTR joutuu oma osoite, joka kääntyy pois, Tässä tapauksessa 8, OK? [00:26:03] Ja sitten luon uuden kokonaisluku kopio. Ja sanon int kopio on yhtä kuin mennä sinne. Niin mene mitä PTR on osoittaa. No, mitä tämä PTR on? PTR on 0x04. Mitä tapahtuu, jos yritän mennä sinne? Aion löytää kaveri, joka on osoite X ja jolla on osoite 4. Ja kuka on käsiteltävä neljä on x. Onko järkeä? Kyllä? [00:26:28] Opiskelija: Tässä tapauksessa on osoitin pinon? [00:26:32] Binky: Tässä tapauksessa, it's-- hyvä kysymys. En oikeastaan ​​ajattele tätä tehtäessä näitä osoitteita. Mutta jos tämä on, kuten kaikki nämä ovat paikallisia muuttujia, niin X on menossa elää in-- kaiken aiomme elää pinossa. Joten kaikki menee olla osoittaa pino. Saat vain kasaan kun alat käyttää malloc, eikö? [00:26:52] Joten jos muistatte pino on aina soitat toiminto oman ohjelman, kuten, tärkein tai esimerkiksi jokin muu toiminto, kuten printf. Kaikki paikalliset muuttujat ovat menossa laittaa pinokehys. Ja he aikovat saada kuten kasataan pinoon. Sitähän kutsutaan pino. Ja kaikki ne paikalliset muuttujat aiomme olla siellä. Ja heap-- ja olemme menossa puhua enemmän tästä later-- keko, jossa kaikki dynaamisesti varattu muisti elämää. Cool? [00:27:20] Käymme tämän dian. Kyllä? [00:27:22] Opiskelija: Miksei int kopioida palaavat 0x04? [00:27:27] Binky: Miksi ei int kopioida palaavat 0x04? [00:27:30] Opiskelija: Miksi ei ole, että [kuulumaton]? [00:27:32] Binky: Koska mikä on arvo PTR? [00:27:37] Opiskelija: 0x04. [00:27:38] Binky: 0x04. Mitä tapahtuu, jos menet 0x04? Mitä sinä saat? [00:27:41] Opiskelija: Ai, OK. Binky: Näetkö? Opiskelija: Joo. Binky: Joten saat 5. Joten kopio tulee olemaan 5, jos se on järkevää. Kyllä? [00:27:49] Opiskelija: Voisiko meillä on mennyt 5 arvon ruutuun [kuulumaton] jos laitamme int kopioi [kuultavissa]. [00:27:55] Binky: Int-- haluaisimme, joo. Että olisi tehnyt melko sama asia. Mutta tällä tavoin voimme kulkea osoitettavan toimintoja. Ja se on kova juttu aiomme tehdä juuri nyt. [00:28:06] Joten tällainen harjoitus nousee aina on-- hyvin tulee yleensä ylös tietokilpailuja. Joten se on todella hyvä yrittää tehdä, että sellainen asia itse. Joten yritä seurata, mitä osoitteeseen on ja haluavat muuttujien arvot ovat kussakin pisteessä. Niin tämä on juuri mitä me aiomme tehdä. Täällä meillä on vaiheita, yksi, kaksi, kolme, neljä, viisi. Yksi, kaksi, kolme, neljä, viisi. Ja aiomme seurata ja x: n arvot ja. [00:28:34] Joten mitä tämä tekee, jos tämä on buginen koodi, me yritämme tehdä viisi. Joten yritämme saada muuttuva ja muuttaa arvoksi 5. Ja muistan vastaavasti ottaa laatikkoon ja luovuttamalla laatikossa joku? Joten tärkein on tämä jos kutsutaan x. Ja se sisältää arvon 3. Yritän käsi tämä jos haluat viiteen. [00:28:58] Ja haluan viisi muuttaa arvo tämä jos haluat 5. Ja sitten minä vain tulostaa x: n arvon. Tämä on mitä minun function-- tämä on mitä yritän tehdä. Yritän vain päivittää arvo x 5. Onko selvää, mikä toiminto tekee? [00:29:16] OK, niin mitä aiotaan x: n arvot ja täällä, ensimmäinen rivi, juuri ennen ensimmäistä line-- Haluan say-- ohjelman? [00:29:27] Opiskelija: Luultavasti roskaa. [00:29:28] Binky: Vain roskat juttuja. Joten minä vain laittaa N / A. Joten emme todellakaan tiedä. Kuten, ei ole edes olemassa vielä, koska emme ole kutsuttu viisi. Int ei ole ilmoitettu. Ja x on menossa olemassa täällä, mutta meillä ei todellakaan määrittänyt mitään arvoa sille, niin ok? [00:29:46] Ja sitten, mitä aiotaan x: n arvot ja on numero kaksi? [00:29:54] Opiskelija: [kuulumaton]. [00:29:55] Binky: Niin X tulee olemaan 3. Se on helppoa, koska olemme osoitetaan 3 sitä. Ja vielä ei ole olemassa koska vain asuu viisi. Joten aion olla 3 ja mitään. tai kuten roskat, mitä tahansa, ei oikeastaan ​​määritelty. Ja nyt, tämä on tärkeä linja. Täällä aiomme todella soittaa viisi. Ja muista, mitä sanoin. Emme koskaan luovuta laatikossa. Olemme vain kopioida arvo laatikko toiseen ruutuun. Siinä kaikki tietokoneet eivät, kopioi asioita paikasta toiseen. [00:30:27] Joten viisi, mitä se käytännössä tekee on se kopioi arvo x. Niin mitä tulee olemaan täällä? X: n arvot ja. 3 ja 3, me vain kopioida se yli x. Cool. [00:30:45] Nyt olemme täällä. Ja nyt olemme menossa päivittää yhtä suuri kuin 5. Mitä tulee tapahtumaan linjassa neljä? [00:30:55] Opiskelija: [kuulumaton]. [00:30:56] Binky: päivittyvät, mutta X ei päivity. Koska X asuu edelleen tärkein, se on täysin eri lohko muistia. Se on eri muuttujaa. on toinen muuttuja. Niillä sattuu olemaan sama arvo, koska olen kopioitu arvo x. Mutta nyt kun teen on 5, se ei todellakaan vaikuta x millään tavalla. Tämä on hankalampi osa. Onko järkevää kaikille? Kyllä? Opiskelija: Vielä yksi kysymys, sinulla on 3. Miksi already-- Voi ei, se on 3. Anteeksi, puhumattakaan. Luin 5. [00:31:29] Binky: Joo, 3, 3. [00:31:30] Opiskelija: [kuulumaton], joo. Binky: Ja sitten antaa 5 , mutta ei oikeastaan ​​muuta x. Hyvä? Opiskelija: Joo. Binky: Kyllä? Voitko selittää jälleen, kuinka saa kopioitu [kuulumaton]? [00:31:42] Binky: OK, joten kun soitat viisi x, niin tämä rivi koodia täällä. viiteen x, mikä on X? X on vain 3 tässä vaiheessa, eikö? Joten voi vain ajatella, että laittaisit 3 tänne ja unohtaminen x. Laita 3 täällä. Kuten, aiomme kopioida arvo x int, joka on tuolla ylhäällä. OK? [00:32:13] Niin x: n arvo on 3. Aiomme kopioida 3 yli. Ja kaikki tämä muu lohko muisti, tämä muun muuttujan kutsutaan on 3, samoin. Onko järkeä? Kyllä? [00:32:25] Opiskelija: Jos annat viisi kuten on se kokonaisluku x sijaan, olisi joka korjaa kaiken? [00:32:32] Binky: Jos se on integer-- ole, että ei korjaa kaiken. Niin, että on erittäin hyvä kysymys. Se ei ole oikeastaan ​​väliä, mitä soitat niitä muuttujia. Jälleen, se on kysymys soveltamisalan, koska ne eivät ole sama x. He täysin Eri tilat muistiin. Opiskelija: [kuulumaton]. Binky: Joten se ei oikeastaan väliä mitä soitat heille. Tämä ei korjata asioita, OK? Lisää kysymyksiä? Kyllä? [00:32:55] Opiskelija: Miten se takaisin numero viisi [kuulumaton]? Binky: OK, emme ole tehneet sitä vielä. Mennään numero viisi, sitten. [00:33:03] Opiskelija: [kuulumaton]? [00:33:04] Binky: Mitä? [00:33:05] Opiskelija: Onko sinulla paluuta ollenkaan? Binky: Meillä ei ole Vastineeksi ole tärkein. Mutta tärkein palaa 0 automaattisesti jos et palauta mitään. Kyllä? [00:33:15] Opiskelija: Voisitko tehdä main-- tai voisitko tehdä vuorosta viiteen? [00:33:24] Binky: Meillä voisi olla viisi palaa, kyllä. Mutta sitten meillä olisi luovuttaa X on yhtä suuri kuin palauttaa arvon viisi, joka olisi hieman eri ohjelma. Se toimisi. Mutta mitä me haluamme tehdä, on mitä on nimeltään muutos jotain paikallaan. Joten haluamme todella muuttaa, että laatikko ja ei hätää noin ottaa palata arvoja tai mitään. OK? [00:33:46] Tämä on aivan kuten swap-toiminto David osoitti luento, paitsi olen käsittelemme ainoastaan ​​yksi muuttuja. Hän käytti kahta, joten int ja b ja sitten väliaikainen muuttuja, ja vaikka mitä. OK? Niin mitä viimeisellä rivillä? Jälkeen viisi palaa, se on yksinkertaisesti ei mene pois. Meillä ei ole enää, ja vain x edelleen elää. [00:34:10] Ja arvaa mitä? X ei muuta sen arvoa, Onhan sillä olemme vain muuttamalla arvoa. Siksi X oli 3 koko. OK? Hyvä. Niin tämä ohjelma ei saavuttaa mitä halusimme. Nyt korjata sen. [00:34:24] Ja fix-ohjelma käyttää osoittimia. Mitä teemme, on meillä on kolme linjat, jotka ovat erilaisia. Ensimmäinen niistä on emme kulkee x. Olemme kulkee osoitteeseen x. Joten sen sijaan kopioimalla yli arvo ruutuun Aion silti kopioida yli jotain. Mutta olen kopioinut yli osoite ruutuun. [00:34:45] Joten jos kuljen osoite laatikko on viisi, sitten viisi voi havaita, että muistin ja muuttaa sen arvoa. [00:34:53] Niin ja sitten siellä, minulla on joka ei ole int enää. on int tähden. Se on osoitin kokonaisluku. Ja sitten, koska olen ohimennen käsitellä täällä, ja sitten mitä teen ei ole yhtä kuin 5, koska on kädessään osoite. Joten mitä haluan tehdä, on mennä sinne ja päivittää sisältöä tähän osoitteeseen 5. [00:35:18] OK, joten mennään läpi kaikki rivit yksitellen. Joten kun aloitan täällä, edelleen N / A, N / A, N / kaiken ensimmäisessä line, koska en ole oikeastaan julisti juttuja vielä. Ja sitten linjalla kaksi, minulla on X vastaa 3. Int tähden ei ole olemassa, sama asia kuin ennen. [00:35:39] Nyt se saa mielenkiintoista. Joten aion kulkea. Ja oletetaan, että osoite x on 12 heksadesimaaleina. Toivotaan vain olettaa tätä. Tein sen. Mitä minä ohimennen tässä viisi. Olen ohimennen 12. [00:35:56] Joten mitä arvo ei ole? [00:36:04] Opiskelija: [kuulumaton]. [00:36:06] Binky: Anteeksi? [00:36:06] Opiskelija: [kuulumaton]. Binky: Joo, kuten esimerkiksi, että katsotaanpa olettaa, että olemme täällä, nyt. Pyydän. [00:36:12] Opiskelija: [kuulumaton]. [00:36:13] Binky: Se on aloitettu. [00:36:14] Opiskelija: [kuulumaton]. Binky: koska me siirsimme jotain toimintoa. Kyllä? [00:36:19] Opiskelija: Osoite x. Binky: Se tulee on osoite x. Ja osoite X on 12, hyvä. Joten X tulee olemaan 3, koska emme ole oikeastaan ​​muuttunut x vielä. Ja sitten tulee olemaan 0x12, niin osoite X, koska se on mitä me välitetään viisi. [00:36:38] Ja mitä sitten tapahtuu jos yritämme mennä sinne? Mitä aiomme löytää? Joten jos yrität tulostaa tähti, aiomme seurata tähän osoitteeseen ja saavat arvon sisällä. Ja arvo on vain saman arvon kuin x on, koska se on osoite, X, joka on 3. Olemmeko hyviä? [00:36:56] OK, ja sitten nyt, me itse mennä sinne. Ja päivitämme riippumatta on tämä osoite 12. Me teemme sen 5. Joten nyt sekä x tähden ovat 5. [00:37:13] Miksi näin? Koska osoite X on 12. Ja on myös 12 niin sen arvo. Joten jos seuraamme 12, olemme juuri menossa löytää x. Joten mitä me teemme tähti tulee tapahtumaan x, koska sisältää osoite x. OK? [00:37:34] Ja tämä on kuin ydin korjata. Joten nyt pystymme, alkaen viisi, oikeastaan access memory, jotka elivät tärkein. Joten tämä muisti ei asu sisään viisi, kuten ennen, tämä osoite 12. Ja pystyimme menemään sinne ja muuttaa arvoksi 5. [00:37:50] Ja sitten kun palaamme, unohdamme. Unohdamme tähden. Ja X on edelleen viisi. Joten jos haluat toteuttaa swap-toiminto, voisitte vain tehdä täsmälleen sama asia, paitsi sinun täytyy int tähtiä täällä, ja niin edelleen ja niin edelleen. OK? Olemmeko hyviä? Cool. [00:38:10] Joten osoitin aritmeettinen. Tämä on hieman hankala aihe. Joten käy ilmi, että osoittimet ovat vain kokonaislukuja. Voit ajatella niitä kokonaislukuja. Koska muistissa, olet kuin muistin osoite nolla, yksi, kaksi, kolme, neljä, viisi. Voimme siis todeta muisti osoitteita. [00:38:23] Ja se on yleensä mitä teet, kun olet ja array, esimerkiksi. Array on aivan vierekkäin lohko muistia, on paljon merkkiä, Esimerkiksi paljon ints. Joten jos haluat mennä Toinen int tai kolmanteen int, voit vain todeta jotain ensin osoitteen, ja olet menossa sinne. Joten tämä on todella hyödyllinen, että. [00:38:39] Ja asia pitää mielessä, vaikka on että se ei ole vain pidä normaali aritmeettinen siinä mielessä että jos olet tekemisissä, sanovat, int tähti, ja lisäät 1 siihen, niin et tule lisätä 1 osoitteeseen, aiot lisätä 4 osoitteeseen. Koska int on 4 tavua. [00:38:57] Joten tämä on aivan kuin kävely array. Jos meillä on joukko paljon ints ja Sitten yritämme mennä toinen, se on pohjimmiltaan vain yhteen osoitteen ensimmäinen plus 1. Mutta joka ei be-- vain sanokaamme että osoitteen ensimmäinen on 4. Täällä, tässä tapauksessa. Ja jos me todeta, joten tämä on mitä tapahtuu. Meillä on int. Int x on 5. X on arvo 5. Ja me alustaa tätä osoitinta, int y int tähti y on sama osoite x. [00:39:31] Oletetaan osoite X on 4. Mitä tulee tapahtumaan Jos minä summa lisätään 1 y? Se tulee todella summa 4 sijasta vain 1. Joten lisään 1, mutta se todella lisätään 4, koska tietokoneen fiksu. Niin se tulee itse lisätä mukaan i kertaa kokoa tyypin osoittimen. OK? [00:39:58] Joten jos se olisi char, esimerkiksi jos tämä olisi char tähti y, ja jos lisäsimme 1 tämä olisi olla 5, koska nieriä on 1 tavun pituinen. Hyvä? [00:40:10] Ja lopuksi, saimme osoittimet ja taulukot. On käynyt ilmi, että joka kerta olet tekemisissä array, olet todella tekemisissä osoitin. Erittäin mukava käsitteellinen syy tämä on, että paneelit ovat erittäin suuria. Niin muista, että minä sanoin, että joka kerta kun siirtää tavaraa ympärillä, kopioit kaiken. Joten jos sinulla on array se on todella, todella iso, et todellakaan halua kopioi aina kaikkea voit siirtää sen ympärillä toiseen toiminto, koska se on vain valtavia määriä työtä. Joten mitä tehdä, on vain ohi osoitteen ensimmäinen tavu. Ja sitten toiminto on pääsy kaikki elementit, jotka array. Joten olet läpäissyt array sen osoitteen, joten osoitteen ensimmäinen tavu. [00:40:48] Joten jos me julistamme int array 3, täällä, tiedämme miten päästä ensimmäisen elementin käyttäen kiinnike merkintää. Jos muistat kiinnike merkintätapa, array kiinnike 0 on 1. No, tämä olisi täsmälleen Sama kuin vain mennä sinne ja laittaa 1. OK, on ​​täsmälleen sama asia. Joten teline merkintä täällä on sama kuin tämän linjan. [00:41:13] Ja arvaa mitä kiinnike merkintätapa array kiinnike 1 on? Se vain on sama asia kuin tämä. Joten lisätä yksi jono. Siirrä yksi pitkin muistiin. Mene sinne, ja laittaa 2. OK? Ja tämä linja on sama asia. Haluamme mennä kolmanteen laatikko, joten array plus 2. Mene sinne, ja laittaa 3. Niin muistin, mitä tulee tapahtumaan on, että olemme menossa on 1, 2, ja 3 kuten kolme osia array. [00:41:44] Olisimme voineet tehdä tämän käyttämällä tutut kiinnike merkintätapa. Haluan vain te tietää että ne ovat sama asia. OK, kysyttävää tästä? Kiva. Nyt aion käsi sen yli Hannah, [00:41:59] Hannah: Jee, Yee-Haw. [00:42:00] Binky: Puhutaan muisti ja artikkeli kamaa. [APPLAUSE] [00:42:06] Hannah: Hei, viileä, joten olemme aio puhua vähän enemmän noin muisti, jota me juuri puututtava osoittimia. On siis olemassa kaksi pääasiallista osaa muisti, että olemme huolissaan. Meillä on pino, joka kasvaa pohja-, ja pino, joka menee alas ylhäältä. Ja pino aikoo järjestää Kaikki instanssimuuttujat. Joten jokainen puhelut toiminto saa oma pieni runko pinoon. Niin Gabe aiemmin mainittiin, jos me soita toiminto uudelleen ja uudelleen, aiomme pino asioita pinoon. [00:42:35] Ja samoin kasaan, joka alkaa ylhäältä aikoo järjestää kaikki muistissa että me dynaamisesti jakaa. Ja niin kuin me dynaamisesti Muistin, Tässä tulevat alas kohti pohjaa. Pari asiaa olla tietoinen, kun käytämme pino ja keko, kanssa pinon, jos meillä on liikaa many-- katsotaanpa say-- rekursiokutsua, ja me soitat taas toiminnassa, ja uudestaan, ja uudestaan, ja uudestaan, ja se on pinoaminen ylös, pinoaminen up, pinoaminen ylös. Ja se tulee törmää kasaan. Aiomme muisti loppuu. Joka tulee aiheuttamaan ongelma tietokoneen. Ja sitä kutsutaan pinon ylivuoto. Niin, että varmasti jotain pitäisi olla tietoinen ja yrittää välttää. Ja kasaan, täytyy muistaa ettet vahingossa vuotaa muistia. Tahansa käytät malloc, älä Muista vapauttaa että muistia. Muuten, se täytyy vain olla kasaan hukkaan, ja tietokone ei tiedä, että se on vapaasti käyttää, että muisti. Joten ne ovat pari asiaa olla hyvin varovainen, kun olet tekemisissä pino ja keko. Kysyttävää tähän? Mahtava. [00:43:31] OK, viileä. Joten tällainen on sama idea kuin pinon ylivuoto, jossa olemme menossa pidemmälle rajoja, mitä muistia on meidän pitäisi pystyä käyttämään. Joten ota, esimerkiksi puskuri, tai et voisi vain ajatella sitä array. Ja sanoimme, OK, me aiomme luoda tässä mukava pieni joukko. Se tulee olemaan merkkijono. Tai se tulee varastoida merkkiä. Ja se on juuri menossa tervehtimään. Ja se on määrittelemätön. Siinä kaikki. [00:43:53] Mutta jos minä olisin joku paha ja halusi tehdä jotain pahaa tällä array, mitä Voisin tehdä, on yrittää kirjoittaa ohi merkkijonon loppuun. Ja kuten näet, jos Kirjoitan tarpeeksi pitkälle, Voin itse vaikuttaa palautusosoite. Ja jos aloitan vaikuttaa palautusosoite, Olen vaikuttavat ohjelma todella toimii. Ja sen sijaan palaavat, voit tietää, onnellinen merkkijono kuten Hei, minä voisi tehdä jotain pahaa, kuin mennä muualla tietokoneessa, silti muisti, muuttaa sitä, mitä haluan tehdä. Niin, että mitä tämä voisi näyttää on jos vain sellainen on täytetty sen satunnaisella roskat arvo, Tässä tapauksessa vain. Ja sitten kun olen itse sai muistin osoitteen, Aloitin täyttämällä se jotain että teki sen, mitä halusin tehdä. Kysyttävää puskurin ylivuoto? Mahtavaa, lentävät oikeus kautta tätä kamaa. [00:44:40] OK, joten puhuimme paljon noin osoitinta Gabe. Miten voimme itse saada osoitin? Miten saamme osoitteen muistiin? No, voimme käyttää tätä mukavaa funktiokutsua malloc, joka on menossa pieni pala muistia, erityisesti kasaan, kun me keskustelimme, ja se tulee antaa sinulle takaisin Osoitin, että osoite muistiin. Ja väite, että me täytyy antaa malloc kuinka paljon tilaa muistissa haluamme. [00:45:04] Niin näet koko tavu. Sanotaan esimerkiksi, tai itse asiassa, tässä esimerkissä, me käyttää riittävästi tilaa 10 kokonaislukuja. Joten luultavasti mitä aiomme haluavat laittaa tässä joukko 10 kokonaislukuja. Niinpä me annamme sen koko ints, joka Opimme oli montako tavua? Opiskelija: 4. Hannah: 4, kaunis, ja me haluavat 10 näistä peräkkäin, jotta meillä on riittävästi tilaa tallentaa kaikki 10 kokonaisluvut, tässä tapauksessa. Jotain erittäin tärkeää, tahansa soitat malloc, sinun täytyy tarkistaa null. Jos et tarkista null, hyvin, malloc jos se loppuu tila ja voi enää anna sinulle mitään enemmän muistia, se palaa null. Joten jos et tarkista, malloc voi palauttaa null. Ja sitten jos yritämme dereference nollaosoittimen, aiomme saada segmentointi vika, josta puhumme nyt. Mahtava. [00:45:56] OK, kysymykset malloc? Kyllä? [00:46:00] Opiskelija: Onko tarkkailun null [Äänetön] eivät tee sitä tietovisa? [00:46:05] Hannah: Toki, kysymys oli se matter-- on tietokilpailu, aiotte saada pisteitä pois, jos et tarkista nolla? Kyllä, saat pisteitä pois jos et tarkista null. Aina kun soittaa malloc, sekä tietokilpailu ja psets ja tosielämässä, sinun täytyy tarkistaa null. Hyvä kysymys. [00:46:18] GABE: Mitä jos en tilaa? Hannah: Gabe haluaa tietää mitä jos emme ilmaiseksi. Silloin meillä muisti vuotaa meidän kasaan. Muita kysymyksiä? Kyllä? [00:46:27] Opiskelija: Voiko sinä-- mennä yli puskurin ylivuoto todella nopeasti uudestaan? [00:46:30] Hannah: Tottakai. Kysymys oli voimmeko mennä yli puskurin ylivuoto todella nopeasti. Mennään takaisin näitä dioja. Joten puskuri, voit vain ajattele sitä array, eikö? Sinulla on jonkin verran tilaa muistissa. Ja kun ensin luomme array, Tiedämme paneelit ovat kiinteitä koko, tai meidän puskuri on kiinteä koko. [00:46:45] Joten sanokaamme tässä tapauksessa meillä on vain tarpeeksi tilaa kirjoittaa merkkijonon Hei. Jos menemme ohi sidotusta, jos menemme ohi mitä meidän array sanoimme sitä voisi pitää, voisimme todella alkaa kirjoittaminen muistiin että tietokone ei haluavat meidän kirjoittaa osaksi. Ja erityisesti, jos me osuma jotain tuottoa osoite toiminto, joka, kuten mikä tahansa muu pala muistia, on vain jonnekin tietokone, voit itse muuttaa sitä ja alkaa tehdä pahoja asioita. Kysymykseesi? Mahtava, mitään muuta? Kyllä? [00:47:17] Opiskelija: Niin pino [kuultavissa], voit sanoi menevät alhaalta menossa ylös. Sisällä pino alue, ei muisti mennä, kuten, ylös alas liittyvät jokaisen tauon? [00:47:28] Hannah: Miten sinä-- lykätä Rob tässä yksi. [00:47:35] ROB: Se kasvaa samassa suuntaan kuin pino kasvaa. Hannah: OK. ROB: Olen siis hämmentyä. Tämä tulee olemaan abstraktio. Hannah: OK. ROB: Tämä on oikea. Joten jos pino kasvaa ylös, sitten generally-- se ei tarvitse olla näin. mutta voit julistaa int x. Sitten voit julistaa int y. Sitten int x on yleensä alempi pinoon kuin int y. Mutta se on vain tosiasia. Se ei pidä tärkeä siemen juttu. [00:48:02] ROB: Joten kysymys taas oli vain mitä tapahtuu kunkin kehyksen kerääntyy. Joten kunkin toiminnon saa pieni pala pino. Ja kuten mennä ylös, kyseisen pieni pala, kyseisessä kehyksessä, me sanomme, että muuttujat sisällä että runko myös liikkua. Kysymys? [00:48:17] ROB: vain olla mikrofoni. Hannah: Ai, joo. ROB: minä puhu sinulle. Hannah: Joo, OK. ROB: poikkeus on varten taulukot ja tietueet, missä paneelit, alempi indeksi array, ja structs suuremmilla kentän structs ovat taatusti alemmilla osoitteet kuin myöhemmin arvo pakassa. Joten ne on taattu. Mutta mitään erityisiä muuttujia, kuten int x ja int y funktion sisällä, ei ole välttämätön suhde välillä niiden osoitteet. Hannah: Toinen kysymys tänne? Opiskelija: Niin puskurissa virtaus, vain puskurin ylivuoto vain tapahtui, kun ovat, kuten osoitettu määrä array että silloin on suurempi? Kuten, voit? Joten jos olet pyytänyt jotain user-- [00:49:05] HANNAH: Mm-hm. Opiskelija: Voivatko he väkisin antaa sinulle jotain takaisin joka on suurempi kuin mitä olet varattu niille? Hannah: Toki, joten kysymys oli periaatteessa, voi käyttäjä antaa sinulle enemmän kuin toivoa? Opiskelija: Joo. Hannah: No, et voi estää käyttäjän tekemästä sitä. Voisit nimenomaan sanoa ei anna minulle enemmän kuin x määrä tavujen Olen vain antanut sinulle tilaa X numero tavujen, x määrä merkkejä. Niin, että on jotain haluat estää. Kyllä? Mitä eroa on pinon ylivuodon ja puskurin ylivuoto? [00:49:30] Hannah: OK, joten pinon overflow-- oh, mitä eroa on pino ylivuoto ja puskurin ylivuoto? Joten haluamme ajatella pinon ylivuoto tapahtuu, kun olemme todella pinoaminen näitä funktiokutsut. Sanotaan sinulla on rekursiivinen funktio, koska tiedämme, että joka kerta, kun soittaa toiminto, se saa oma runko pinoon. [00:49:45] Joten me pinota liian korkea, ja sitten alkaa vuotaa yli. Ja käytämme liikaa muistia ja emme ole missään jäljellä. Saamme tämän virheen. [00:49:51] Puskurin ylivuoto on ohjelman sisällä. Haluamme ei välttämättä ole muisti loppuu samalla tavalla että voisimme jos olemme pinoaminen jopa niin paljon funktiokutsut, mutta me kirjoittaa ohi muisti että me tiedämme, että voimme käyttää. Ja jonka avulla voimme tehdä pahaa. Joo? [00:50:08] ROB: Kyllä, saatat haluta vain toistaa, mutta voit myös ajatella pinon ylivuoto samankaltaisina tietyntyyppisiä puskurin ylivuoto. Tai et vain ajatella oman pino niin todella iso puskuri. Sitten kun ylivuoto pärjäät, se on ikään kuin puskurin ylivuoto. Mutta pinon ylivuoto on vain erityinen termi, jota käytetään, kun pino itse pursuaa. [00:50:24] Hannah: Aivan, niin toista videota, se voi ajatella pinon ylivuoto kuin tietyntyyppiset puskurin ylivuoto. Cool? Kysyttävää ennen kuin lähdemme? Mahtava. [00:50:37] OK, viileä, joten puhutaanpa joitakin yhteisiä virheilmoituksia. Tämä on jotain, joka on saapunut useita tietokilpailuja, joten jotain, joka kannattaa ottaa toisen tarkastella. Olen varma, että olet kohdannut ainakin jotkut näistä kuin teet ongelman asettaa. Joten varmista, että voit puhua niistä on tietokilpailu. [00:50:50] Joten ensimmäinen on segmentointi vika. Ja se on aina meidän yrität käyttää muistia että emme saa käyttää. Joten te mahti ovat nähneet tämän, Esimerkiksi purkautuminen. Jos havaitsee törmäyksen palata null, ja sitten yrittänyt tehdä jotain kanssa, että nolla, tietokone antaisi voit segmentointi vika. Niin yksi tärkeä asia tehdä, jotta yrittää välttää tätä on aina tarkistaa null. [00:51:13] Saatat myös nähnyt implisiittinen ilmoitus toiminto. Joten tämä on mitä tapahtuu kun Allison näytettiin miten voimme tehdä prototyyppi, eikö? Joten sanokaamme meillä on joitakin toiminto, että me määrittelemme. Sanotaan kuutio. Ja joka menee alareunassa meidän toiminto, alla tärkeimmät. [00:51:27] Jos unohdamme kertoa tietokoneen noin kuutio, kun tärkeimmät yrittää soittaa kuutio, tietokone on niinku Jestas. Minulla ei ole aavistustakaan, mitä se tarkoittaa. En tiedä mitä tehdä, täällä. Joten prototyyppi sanoo ei hätää. Aion kertoa teille. [00:51:42] Se tulen. Älä huuda minulle. Älä anna minulle implisiittinen vakuutus toiminto. Joten jos saat tämän virheen, yksi asia aiot halua tehdä on varmistaa, että sinulla on prototyyppi. OK? [00:51:53] Ja viimeisenä mutta ei vähäisimpänä, Pimeän tunniste olennaisesti, kun yrität käyttää muuttuja, jota et ole julistettu. Niin yhtäkkiä aloitat sanomalla, kuten n plus plus. Ja tietokone sanoo mitä n? Et kertonut n oli juttu. [00:52:06] Niin yksi asia sinun täytyy varmista, että olet teki on kertoa tietokoneen mitä n on. Joten esimerkiksi, n voi olla kokonaisluku. Ja sitten voit välttää tämän virheen. Kysyttävää yleisiä virheitä? Kyllä? [00:52:17] Opiskelija: For implisiittinen ilmoitus toiminto, se voisi myös olla, että olet pois yksi Kirjastojen sinun piti sisällyttää, pikemminkin kuin prototyyppi? [00:52:24] Hannah: Aivan, niin kysymys oli, voisitteko myös saada tämän virheen, jos unohdin kuuluu kirjasto. [00:52:28] Opiskelija: Joo. [00:52:29] Hannah: Ehdottomasti, koska samalla tavoin että haluamme laittaa prototyypeissämme ennen päätehtävä, jos meillä on kirjasto, ne ovat menossa olennaisesti kuuluvat prototyyppejä, sisältävät määritelmät toiminnoista. Suuri kysymys. [00:52:40] Opiskelija: segmenttijaotuksesta vika, sillä olisi myös tapahtuisi, jos me, kuten, yritti käyttää muuttujaa, vastaavien, eri [kuulumaton] kuin se oli ilmoitettu? Hannah: Toki, niin olisimmeko saada segmentointi vika jos Yritimme avata muuttuja pois soveltamisalasta? Oliko tuo kysymys? Opiskelija: Joo. Hannah: Kaunis. Niin luultavasti olet menossa Pimeän tunniste virhe sijaan. Niin se vain menee sanoa En tiedä mikä se on. Cool, mitään muuta? Joo, OK, kaunis. [00:53:10] Selvä, joten rekursio. Joten mainitsin pari kertaa että voisimme saada pinon ylivuoto koska me soittamalla rekursiivinen funktio niin monta kertaa. Saamme kaikki nämä pino kehyksiä, blaa, blaa, blaa. Mikä edes on rekursiivinen funktio? No, rekursiivinen funktio on mikä tahansa toiminto, joka kutsuu itseään. [00:53:26] Jotkut asiat olla tietoinen, kun Toteutamme rekursiivinen funktio, älä unohda mainita pohja tapaus. Perustapauksessa on piste, jossa päätämme. Niinpä esimerkiksi, jos olemme koodaus, , Sanovat, Fibonaccin rekursiivisesti, Haluamme varmistaa, että uusista on 0 tai ensimmäisen Fibonacci numero, nämä kaksi lukua on näitä tapauksia, koska ne eivät ole riippuvaisia asioita, jotka tulivat ennen. Niille on omat arvot. [00:53:51] Jotkut ammattilaiset rekursio, joka on kysymys olemme nähneet viimeisen tietokilpailuja. Ne voivat aiheuttaa enemmän tiivis, tyylikäs koodi. Ja paljon toimintoja, paljon erilaisia ​​algoritmeja, todella ajankäytön rekursio. Niiden määrittely saattaa olla rekursiivinen ja sinänsä. Joten Fibonacci on yksi. Kertoma on yksi. Lomituslajittelu IS one-- kaikki asioita, joita voit tarkastella. OK, kysyttävää? Kyllä? [00:54:15] Opiskelija: Onko kulman tapaus samanlainen pohja tapauksessa? Tai on, että joidenkin muiden Tällainen [äänetön]? [00:54:22] Hannah: Toki, joten corner tapaus on any-- niin on nurkassa tapauksessa sama kuin perusversion? Corner tapaus on jotain, joka sinun koodi saattaa käyttäytyä hieman eri tavalla. Base tapaus on tavallaan liittyvän, vuonna että he ovat kuin erityistapauksissa jonka haluat katsoa. Mutta ajatus pohja asia on, että haluat rekursiivinen funktio lopettaa jossain vaiheessa. Se ei voi pitää itseään kutsuva ikuisesti. Se tarvitsee pysähtyä jossain vaiheessa. [00:54:49] ROB: Kyllä, usein, pohja tapauksissa voisi olla esimerkkejä nurkassa emäksistä. [00:54:53] Hannah: Oikea, viileä, mitään? [00:54:55] Opiskelija: Voisitko selittää perustaa vähän enemmän? En oikein ymmärrä [Äänetön] pohja tapauksissa. [00:55:01] Hannah: epäjaloa tapauksissa? [00:55:02] Opiskelija: Base tapauksissa, joo. [00:55:03] Hannah: Ai joo, varmasti. Katsotaanpa. Onko meillä liitu tänne? Kyllä, me teemme. OK, joten todella nopeasti, minä yrittää kirjoittaa tarpeeksi iso joten voit nähdä ruudulla. Puhutaanpa, todella nopeasti, Fibonacci. Niin minä annan sinulle Fibonaccin. Voit etsiä määritelmää. [00:55:17] Pohjimmiltaan jokainen numero järjestyksessä on summa kahden edellisen numerot. OK, niin miten, että olen juuri kuvattu Fibonaccin, voit kuulla rekursio, eikö? Kun sanoin, kukin numero on summa kahden edellisen numerot, voisimme sanoa OK. No, n: nnen Fibonaccin number-- joten katsotaanpa sanoa, että olemme tämän toiminnon nimeltään fib-- FIB n: n tulee olemaan yhtä suuri kuin fib n: n miinus 1 plus-- pahoillani, me menossa seuraavalle riville Yli here-- FIB n: n miinus 2. [00:55:52] OK, joten tämä toimii hyvin, jos olet katsomalla, esimerkiksi, nolla, yksi, kaksi, kolme, neljä, viides Fibonaccin numero, jossa voit sanoa, että 5 on 2 + 3. Mutta entä jos olet alussa? Mitä jos olet vain kävi Näiden kahden ensimmäisen arvot? [00:56:08] Jotta saat tämän 1, et voi sanovat lisätä kahden edellisen, koska nolla and-- en tiedä. Joten jossain vaiheessa, meidän täytyy pysähtyä. Jossain vaiheessa meidän on sanottava, että nämä kaksi vain on omat määritelmät. 0 Fibonacci numero on 0. Ja ensimmäinen Fibonacci numero on 1. [00:56:26] Joten miten voisin koodata tämän, minä sanoisivat, jos n on pienempi kuin kaksi, sitten vain palata n. Ja että olisi minun pohja tapauksessa. Niin tiedän lopettaa kanssa rekursiivinen funktio. Onko selvä? Mahtava. Mitään muuta rekursio? Kaunis. [00:56:45] Katsotaanpa nopeasti puhua haku ja lajitella ajoajat. Ja niin minä annan Davin joitakin aika puhua koodausesimerkit. Joten tässä ovat tärkeimmät hakuun ja lajittelee, että sinun pitäisi tietää. Guarantee-- En voi taata, koska en ole nähnyt quiz-- mutta tämä tulee esiin tietokilpailu jälkeen tietokilpailu jälkeen lopettaa. Joten ehdottomasti käyttää tätä taulukkoa. Kuten, ota tämä kaavio. Laita se päälle lunttilappua. Sinulta onnellinen ihminen. [00:57:09] Tämä kertoo, ajoajat kunkin Näiden lajitella ja etsiä algoritmeja. Niin lineaarinen haku, voit nähdä ajaa aikaa, ja sama binäärihaku. Mennä yli, mitä nämä algoritmit tehdä, yleinen ajatus. Tarkastelemme joitakin pseudokoodina, jos ei itse koodissa. [00:57:25] Näet että Kuplalajittelu on ylempi sidottu pahimmassa tapauksessa n potenssiin. Joten jos meidän joukko oli täysin taaksepäin ennen halusimme järjestää sen, sanoisimme, että se on vie n potenssiin toimiin. Vaan parhaassa tapauksessa, joten alaraja parhaassa tapauksessa tulee olemaan, jos se on jo täydellisesti järjestetty. Sitten meidän täytyy tehdä, on tarkista, että se on järjestetty. Onko kysymys tänne? [00:57:47] Opiskelija: Milloin haluat käyttää järjestä? Lajitella. Olen vain utelias. [00:57:52] Hannah: Milloin haluat haluat käyttää valintaa lajitella? Tämä? Yksi, joka on n potenssiin molemmissa tapauksissa? [00:57:55] Opiskelija: [kuulumaton]. [00:57:56] Hannah: Joten on hyvin erilainen. Jos sinulla on erityisiä vaatimukset oman ohjelman, asioista kuten jos me vain sanoi toteuttaa search-- sorry-- toteuttaa Lajittele, luultavasti luultavasti halua mennä yksi niistä, jotka on paras asia N, tai alarajan parhaassa tapauksessa n. Mutta saattaa olla tiettyjä asioita, kuten vaikkapa swapit ovat todella kallis jostain syystä. Sitten mitä haluaisi tehdä kupla lajitella, koska olet täytyy tehdä niin paljon swap, tuollaista. Mitään other-- kyllä? [00:58:23] Opiskelija: Olisiko [äänetön] sanoa, että [kuulumaton]? Hannah: Se on yksi asia että olisi kertoa teille Jos etsit täytäntöönpanoa. Muuten olisin itse miettiä, miksi se on n potenssiin on, että meidän täytyy juosta kautta joukko pituus on n, joka kerta tehdä korkeintaan n swap. Ja meidän täytyy tehdä tämä prosessi n kertaa. [00:58:46] Joten kun sinulla on tehdä korkeintaan n swapit ja n kulkee array, siellä tulee olemaan n potenssiin. Mutta kyllä, tämä tulee ilmi kautta tämä kaksinkertainen varten silmukka, koska kysymys asked-- tai sisäkkäistä silmukkaa, minun pitäisi sanoa. OK? [00:59:00] Ja sitten Lomituslajittelu, joka on nopein järjestä nyt, tai että olemme katettu CS50, tietää, että tärkein algoritmi on tämä ajatus tunkeutumalla lajitellut kappaleet ja sitten sulautuvat yhteen nämä lajitellaan bittiä. Ja vie meidät log n log n. Kysyttävää hakuja ja lajittelee ennen en anna sitä? Katsotaanpa. [00:59:21] Voi liittyvät luettelot. Anteeksi, minulla on vielä yksi aihe. OK, mahtava, liittyvät luettelot. Ongelmana paneelit, heillä on kiinteä koko. Joten jos et tiedä, miten suuri oma panos tulee olemaan, et halua luoda array. Koska jos luomme ryhmän, joka on liian pieni, saatamme törmätä puskurin ylivuoto. [00:59:35] Joten sen sijaan, että voisimme tehdä jotain linkitettyjä listoja, jotka antaa meille mahdollisuuden dynaamisesti kokoinen tietorakenne että antaa meille mahdollisuuden tallentaa joustavampi datan määrä. Joten kussakin solmussa meidän linkitetty lista, meillä on kaksi kappaletta. Meillä on todellinen arvo että se tallentaa. Joten se on vain asia, sinun olisi katso pakassa, esimerkiksi. Ja sitten meillä on myös seurata osoitin seuraava asia muistiin. [01:00:04] Toisin kuin taulukot, jotka tiedämme kaikki menossa jotta be-- array elementit ovat kaikki yhtä peräjälkeen memory-- sidoksissa luettelot voivat olla missä tahansa muistissa. He mielivaltaisiin. Joten jos me itse mennä löytää ne, me täytyy seurata Seuraava asia listallamme. [01:00:19] Ja sitten, jotta tietää jos kyseinen luettelo on kokonaisuudessaan, meidän täytyy seurata on Ensimmäinen osatekijä linkitetty lista. Ja että saat avulla voimme seurata läpi. [01:00:31] Joten tämä on miten voit määritellä tilassa. Tämä on suuri mahdollisuus hyödyntää structs. Koska sinulla on tämä ajatus, hyvin, tietylle solmulle, minulla on kaksi kappaletta. Minulla on todellinen arvo itse. Ja sitten minulla on osoitin Seuraava osa linkitetty lista. Niin näet, meillä on kokonaisluku n, joka tulee olemaan todellinen arvo, ja sitten osoitin solmu, jota kutsutaan seuraavaksi. Niin että tulee olemaan seuraava elementti meidän linkitetty lista. Opiskelija: Joo? Onko sinulla täsmentää, että tähti on kuin struct? [01:01:01] Hannah: Kyllä, niin koska tämä on melkein kuin sellainen, se tuntuu rekursiivinen määritelmää, sillä me on tiedettävä, mitä solmu on sisältä löytää solmuun. Koska se ei oikeastaan tietää, mitä solmu on täysin kunnes saamme loppuun this-- ja tämän jälkeen voimme vain soittaa sitä node-- sisällä tämän määritelmän, meidän täytyy kutsua sitä struct solmu. Suuri kysymys. Entä muuta? Kyllä? [01:01:26] Opiskelija: Miksi täytyy sanoa solmu kahdesti? Koska kun olimme [kuulumaton] meidän oli pakko tehdä se puolipiste, mutta nyt meidän täytyy todeta, että struct solmu? [Äänetön]. Hannah: Joten uskon Viimeisessä esimerkissä, olimme juuri luomassa milloin halusi käyttää opiskelija jälkeen, sinua joutui käyttämään struct node-- Olen sorry-- struct opiskelija. Tämä antoi meille mahdollisuuden, kun asiassa juuri käyttö solmu lisätä uuden tyyppinen, lähinnä. Järkeä? Joten meidän täytyisi mennä takaisin ja katsokaa koodin ennen. Mutta arvelisin, että emme käytä typedef. Kysyimme kysymyksen, miksi meidän täytyy käyttää typedef? Typedef avulla voimme välttää sana struct alussa. Kyllä? Opiskelija: Minkälainen kysymyksiä voisi keksiä suhteen kannalta solmut ja liittyvät luettelot? [01:02:10] Hannah: Niin yksi asia on, että meillä voisi sanoa, kuinka voisit etsiä linkitetyn listan? OK, koska se on hieman monimutkaisempi kuin jos olemme etsimässä kautta array. Voimme vain katsoa elementin nolla, elementti yksi, osa kaksi, blaa, blaa, blah. Jos haluamme etsiä kautta linkitetty lista, olimme todellakin täytyy seurata tämä pieni sokkelo osoittimia. Joten itse mennä kautta tämä todella nopeasti. Mitä voisimme tehdä Tilauksen to-- Sanotaan haluavat vain kerrata kautta Meidän täysin linkitetty lista. Alkaisimme kärjessä. Ja sitten jotta siirtyä seuraavaan elementtiin, sijasta vain kasvamalla yhdessä kuten me ehkä menossa läpi array, olemme todella menossa Noudata seuraavaksi osoitin, jotta voimme löytää missä muisti seuraava elementti on. Joten tiedän, että se ei riitä toteutettava kaikki tätä juuri nyt, mutta sinulla on näitä dioja. Niin voit mennä läpi Tässä hieman hitaammin. Mutta pohjimmiltaan, mitä haluamme tehdä, on noudattaa näitä viitteitä läpi kokonaisuudessaan linkitetty lista. Joten tämä on kysymys saatat kysyä. [01:03:01] Jotain huomata kanssa lisäys, sanokaamme halusimme laittaa uuden elementin edessä meidän linkitetty lista. Meidän on oltava hyvin varovaisia noin järjestyksessä, jossa me antaa uudelleen viitteitä. Koska sanokaamme juuri sanoin OK. Tee pää kohta tähän uuteen elementtiin. Vain sen osoittamaan 1 jälkeen olemme olennaisesti menetti loputkin lista, koska en muista missä 2 elämää. [01:03:25] Joten meidän täytyy tehdä hyvin tietyssä järjestyksessä. Ensin teemme uuden elementti pisteen päähän. Ja sitten tehdä pää osoittamaan uuteen elementtiin. Katsotaanpa, mitä se näyttää kanssa arrows-- vain. Joten ensin on uusi elementti valitse vanha pää. Ja nyt meillä on pää osoittamaan uuteen ensimmäisen elementin. Kysyttävää tähän? [01:03:49] OK tässä on joitakin koodi uudestaan, jotain tarkastella hieman myöhemmin. Ja nyt minä käännän sen yli Davin GDB ja hieman käytäntö koodaus paperilla. Kaunis. [01:04:01] ROB: Ja Rob. [01:04:01] Hannah: Voi, Davin ja Rob. Olen pahoillani. [01:04:03] Opiskelija: Woo! [01:04:08] ROB: Kiitos. [01:04:09] DAVIN: Haluatko sanoa kaikki todella nopeasti? ROB: Joo, joo. DAVIN: Kerran olen ylös. OK, kun taas Rob laittaa mikrofoni, niin mitä GDB-? Jokaisella olisi nähnyt gdb luokan ja myös virka-aikana. Ja sinun pitäisi käyttää sitä. Joten mikä on GDB-? Kukaan? [01:04:28] Opiskelija: Se debugger. [01:04:29] DAVIN: Se debugger. Ja mitä se avulla voit tehdä? Kuten, miksi haluamme GDB-? Opiskelija: Jos haluat hidastaa ohjelman. DAVIN: Oikea, joten voit kävellä sen läpi kuin ihmisen tahtiin. Ja niin mitkä ovat komentoja voit tehdä? No, tauko on luultavasti suosikki komento. Koska että voit rikkoa ohjelma ja itse kävellä sen läpi rivi riviltä. [01:04:44] Suorita voit käyttää sitä. Seuraavaksi kuin lisäämällä kautta. Mikä on välillä seuraava ja askel? Odota, sanovat, että ääneen. Se oli oikea. [01:04:54] Opiskelija: [kuulumaton]. [01:04:55] DAVIN: Kyllä, mahtava. Joten kuten, seuraava ja askel, jos you're-- Sanotaan sinulla toiminnon avulla määritellä. Sanotaan joidenkin teidän päätehtävä, ja olet vain kävi ensi, seuraava, seuraava. Olet todella menossa suorittaa tämän tehtävän, mutta aiot hypätä sen yli. Jos osut vaiheessa, tai s tai mitä tahansa, olet menossa todella hypätä tuohon toiminto, ja sitten voit lyödä seuraavaksi nähdä eri puhelut sisällä kyseisen toiminnon. Joo? [01:05:16] Opiskelija: Onko tapa hypätä, kuten, takaisin ulos? DAVIN: Finish, joo, virkkaa hypätä sinua ulos. Joten se tulee valmiiksi, että toiminto, ja sitten olet menossa takaisin main, esimerkiksi. Tulosta tulostaa sen ulos yksi kerrallaan. Jotain olen aina on näyttö. Näyttö tulostaa sen jatkuvasti koko kokonaisuudessaan oman ohjelman. [01:05:32] Esimerkiksi, jos olet in for silmukka, ja te haluat nähdä, miten jotain on muuttumassa, ja et halua, kuten jatkuvasti tehdä kuten print, Tulosta, Tulosta, näyttöön näyttää, että muuttuja jatkuvasti, joka kerta osut Seuraava. Ja jatkuu. Niin GBD, se GDB. [01:05:47] Opiskelija: Mikä on yksi jossa [äänetön]? DAVIN: Mikä se on? [01:05:52] Opiskelija: Mikä the-- paikallisia muuttujia. ROB: On jotain todella kuten paikalliset tai jotain. I can't-- [01:05:58] DAVIN: Voisi olla jotain, joo. [01:05:59] Hannah: Vuonna paikalliset? [01:06:00] DAVIN: Siinäpä se. Se on yksi. ROB: Kaunis. [01:06:03] DAVIN: Joo. [01:06:04] Opiskelija: Mitä jatkossakin tehdä? [01:06:06] DAVIN: Se continues-- joten se on vain Jatkamme ohjelmia. Joten jos rikot ja osuma edelleen, se on menossa vain ajaa kyseisen ohjelman kunnes se iskee että tauko uudelleen. Niinpä esimerkiksi, jos katkesi toiminto, ja aiot tehdä kuin varten silmukka tai jotain, ja osut jatkaa, se tulee jatkaa ja palata tuohon tauko. Tai ei ole taukoa, se tulee jatkaa ja lopettaa ohjelman. [01:06:22] ROB: Eli aivan kuten ajaa pysäkin aivan ensimmäinen murtuessa osut, jos sitten osuma jatkaa, se tulee pitää menee, kunnes se seuraavan murtuessa. Ja jatka sitten menee seuraavaan murtuessa. DAVIN: Kaikki muut kysymykset GDB-? Joten mielestäni aiemmin, olemme kysyneet, mitä GDB on ja antaa Esimerkiksi joitakin asioita voi tehdä GDB, joten todella yksinkertainen, mutta joo. Siellä mennään. Ja solmut? [01:06:43] ROB: Kyllä, niin mihin suuntaan se oli? Opiskelija: Siinä se oli. DAVIN: Odota. ROB: Tämä kaveri? DAVIN: Tuo yksi. ROB: Tämä kaveri, oh, en tajunnut. Joten emme olleet selkeitä mitä the-- en tietää, kuka se was-- mutta kysymys. Emme tiedä tarkalleen, mitä kyselivät siitä, joten vain selventää jotain. Joten ensimmäinen, kuten aiemmin sanoin, typedef olet aina käyttää vain luoda lempinimen tyyppi. Joten täällä, lempinimi olemme luominen on tämän tyyppisen struct solmu. [01:07:13] Joten ensimmäinen, unohdetaan tämä solmu typedef, joten tämä struct solmu kihara ahdin alas seuraavalle kihara ahdin on struct solmu tyyppi. Ja meidän täytyy, että solmu sinne, koska me tarvitse viite solmuun täällä. Joten tällaista rekursiivinen struct, sinun täytyy antaa tämä struct nimi, tai muuten et voisi sanoa struct solmu täällä. Kun ennen opiskelijajärjestöjen kun olimme kirjoitettu, luulen, meillä ei ollut sanottavaa opiskelija siellä, koska me ei tarvitse sanoa struct Opiskelija sisällä struct itse. Joten se on rekursiivinen, että pakottaa meidät sanomaan solmuun siellä. [01:07:43] Tämä solmu on vain nimi olemme jolloin solmu typedef. Niin, että solmu ei ole sama kuin solmu. Mutta tämä struct solmu on sama kuin struct solmu. DAVIN: Joten jos soitat, kuten solmu teidän päätehtävä, et aio täytyy sanoa struct solmu. Voit vain sanoa solmu, koska solmu on different-- on pohjimmiltaan sanot, OK. Sen sijaan, että soittaa struct solmu minun koodi, Haluan vain sen nimeä koska solmu helpommin. [01:08:04] ROB: Jos aina käyttää typedef, niin tämä on ainoa paikka, olet menossa on julistaa muuttujan struct solmu Star, joo. [01:08:14] DAVIN: OK, joten viimeinen osa on vaikea opettaa because-- ROB: Mitä? [01:08:24] DAVIN: Koska se koodaus paperille. Joten joka vuosi meillä on koodi paperille kysymyksiä. Joten mielestäni viime vuonna, 12 ulos 80 pistettä olivat koodi paperille. Edellisenä vuonna 10 out of 80, Edellisenä vuonna 20 pois 100, niin melko paljon näistä. Niin olet menossa on voitava koodaamaan nämä toiminnot käsin. [01:08:40] Niin olen tajunnut voisimme käydä läpi pari niistä ja nähdä, miten ihmiset tekevät, sellainen kävelee ne hitaasti ihmisten kanssa. Niin yleisesti, strlen ja atoi ovat olleet hyvin suosittuja. Viime vuonna, mielestäni meillä oli GetPositiveInt ja RandomInt. Mutta pow, joten teho, myös myönteinen yksi liikaa. Mennään läpi ehkä yksi tai kaksi näistä yhdessä. Mitä ihmiset haluavat nähdä? [01:09:05] Opiskelija: atoi. Opiskelija: Joo. DAVIN: atoi? Opiskelija: [kuulumaton]. DAVIN: OK, olen menossa tehdä se taululle. Onko sinulla etusija jos teen sen täällä tai siellä? Siellä, Gabe sanoo siellä. [01:09:16] ROB: Ja tämä on yleinen ajatuksia Näiden koodaus kysymyksiä. Yritä kirjoittaa jotain. Älä jätä se tyhjäksi. [01:09:22] DAVIN: Kyllä. ROB: Jos saat palata tyyppi oikein, tai ehkä voisimme antaa sen teitä, mutta jos voit, kuten, kirjoittaa yleinen toiminto allekirjoitus, Jos saat pohjan tapauksissa oikea, tai nurkkaan tapauksissa, tai muistaa tarkistaa null, niin kauan kuin sinulla on asioita, niin ehkä me voi antaa sinulle pari Pistettä ongelma. Älä vain jätä se tyhjäksi. [01:09:36] DAVIN: Kyllä, ja jos ovat vain täysin ihmeissään, miten voitaisiin todella muuttua koodi. Jos kirjoitat pseudokoodina, että ihan hyvältä. Niin se on, se on kuusi pisteen kysymys, ja kirjoitat oikean pseudokoodina, saat vähintään kaksi pistettä. Joten älä jätä niitä tyhjäksi. Yritä laittaa jotain. [01:09:50] ROB: Sen on oltava oikea pseudokoodilla, vaikka. [01:09:51] DAVIN: Kyllä. ROB: Olemme siis yleensä vähemmän lievempi vikoja pseudokoodilla. DAVIN: OK, niin te halusi nähdä atoi. OK, joten vain really-- niin mitä haluat tehdä on aiot olla annetaan jonkinlainen numero. Mutta tämä numero ei ole olemaan int, eikö? Mitä se tulee olemaan? [01:10:08] Opiskelija: [kuulumaton]. [01:10:09] DAVIN: Se tulee olemaan merkkijono, eikö? Joten jos sait string-- katsotaanpa say-- [01:10:13] ROB: Pitäisikö minun vetää editori? Voin vetää up-- [01:10:16] DAVIN: Ai, haluat tehdä sen on-- [01:10:16] ROB: Haluaisitko hallituksessa? [01:10:17] DAVIN: Mitä haluat tehdä? Tarkoitan, haluatko tehdä sen käsin? Vai haluatko tehdä sen tietokoneella? [01:10:21] ROB: Tee se käsin. [01:10:22] DAVIN: [nauraa] ROB: Tee se käsin. [01:10:23] DAVIN: OK, joten se tulee olemaan atoi. Joten mitä it-- tarkoitan, me luultavasti antaa tämän sinulle. Mutta mitä se aio palata? [01:10:29] Opiskelija: Int. [01:10:29] DAVIN: Se tulee palauttaa int, eikö? So-- En halua tehdä sitä siellä. Teen sen täällä. [01:10:34] ROB: Voit vetää sen alas ja sitten nostaa sitä. [01:10:38] DAVIN: joo. [Nauraa] ​​Game muutos. OK, joten se tulee olemaan int atoi, ja mitä se aikoo ryhtyä? Char tähti, joten vain merkkijono, tähti s, niin. [01:10:57] ROB: Nice tähti, kiva. DAVIN: Tämä saattaa olla siellä, OK. ROB: Joo. DAVIN: OK, joten ensimmäinen asia, jonka haluat do-- I en tiedä, jos joku katseli klo käytäntö solutions-- mutta mitä aiot halua tehdä on että olet menossa haluavat olla silmukka, koska olet menossa haluavat todella astua tämä merkkijono. Joten helpful-- joten sanokaamme aiomme varten silmukka, ja aiomme astua jokainen osa merkkijono. Kuinka kauan se on? Kuinka monta kertaa olemme menossa kerrata, että for-silmukan? Opiskelija: Sterln? DAVIN: Sterln, joo. Joten sanokaamme int pituus on yhtä sterln s. Ja vain utelias, miksi se on aina eräänlainen on parempi tehdä tämän ulkopuolella silmukoita? Kuten, miksi se on parempi kutsua Tämän toiminnon ulkopuolella silmukan? Just a quick järki tarkistaa? Joo? Opiskelija: niin et täytyy pitää tarkkailun sen. Voit vain [kuultavissa]. [01:11:59] DAVIN: Aivan, niin joo, mitä hän sanoi. Joten meidän ei tarvitse pitää tarkistaa se. Niinpä esimerkiksi, jos soitan Tämän toiminnon sisällä silmukan, Sitten aion jatkaa katsomista Tämän toiminnon useita kertoja. Ja että menee vähenee tehokkuutta ohjelmaan. Niin se on aina hyödyllistä julistaa sen ulkopuolella. [01:12:12] ROB: Se sanoi, mitään näistä ongelmista, melko paljon niin kauan kuin saat työliuoksessa saat täyden hyvityksen. Joten älä huolestu, jos suunnittelu on aivan hirvittävää. Se saattaa tehdä meistä järkyttää lukee koodin. Mutta niin kauan kuin se toimii, saat pisteitä. [01:12:28] DAVIN: Kyllä. OK, niin sitten aion julistaa jokin muuttuja. Se on juuri menossa soittaa int summa. Ja aion asettaa tämän nolla, niin. Ja joka on juuri menossa olla paikanvaraajaan. Niin että tulee olemaan mitä aion palata. Joten aion lopulta palata summa tästä ohjelmasta. Joten minulla on nämä kaksi muuttujaa. Minulla on pitkä. Olen summa. Ja nyt Katsotaanpa hypätä meidän merkkijono. [01:12:48] Joten antaa olla meidän varten silmukka. Joten neljä int i on yhtä kuin 0 W, kun taas I on pienempi kuin pituus minä plus plus. Ja now-- ROB: Nice. DAVIN: OK, ja nyt täällä tulee lihaa meidän koodi. Joten voit itse tehdä tämä periaatteessa yhdellä rivillä. Joten ei kukaan ole idea mitä aiomme tehdä seuraavaksi? OK, niin se on OK. Joten teemme sanoa summa equals-- anna minun häipyä tästä over-- summa on yhtä suuri kuin summa kertaa 10 plus-- olemme vie s I miinus yksi quote 0 yhden tarjouksen tehnyt, niin. ROB: Erittäin intuitiivinen. [01:13:56] DAVIN: Murskattu sitä. OK, joten someone-- sain sen, sain sen. OK, joten tämä on selvästi nousussa. Mitä tämä tarkoittaa? Niin ei kukaan tiedä, mitä tämä tarkoittaa? Voivatko kaikki nähdä tämän? Ei, kukaan ei voi nähdä tämän, OK. Aion to-- [01:14:18] ROB: Aion kirjoittaa kaava juuri täällä. DAVIN: OK, Rob aikoo tehdä sen tietokoneeseen, joka on hauskaa. ROB: Voi luoja. Tai minä en. DAVIN: Valmiustila. Opiskelija: Minulla on kysymys. DAVIN: Joo, varmasti. Opiskelija: [kuulumaton]? DAVIN: OK, niin se todella, kuten, vain yleisesti, jos olisit laittaa, kuten, tässä julistuksessa int Olen yhtä kuin 0 pilkku pituus on yhtä suuri kuin sterln, that-- [01:14:59] Opiskelija: [kuulumaton]. [01:15:01] DAVIN: Se on hyvä, koska that-- Opiskelija: Miksi te edes tarvitse käyttää pituus? Miksei me vain [kuulumaton] sterln s, kuten koko ajan [kuulumaton]? [01:15:08] DAVIN: Tarkoitatko täällä? [01:15:09] Opiskelija: Joo. DAVIN: Koska jokainen aika tätä varten silmukka kulkee, se tulee arvioimaan tämän ehdon. Opiskelija: Oikea. DAVIN: Ja jos sinulla on sterln siellä, niin se on menossa on todella soittaa että toiminto joka ikinen kerta. Joten sen sijaan, että vain vertaamalla sitä int, aiot vaativatkin toiminto ja sitten verrataan sitä paluuseen arvoa. Joo, niin se on vain, joo. [01:15:28] Kiva, ok, joten nyt jokainen voi nähdä sen. Mikä does-- tämä on kuin, tämä on se. Tämä on tukos, täällä. Mitä tämä tarkoittaa? Mitä teen? Joo, idea? Joo? [01:15:43] Opiskelija: No niin, kun annat array, aiot olla menossa vasemmalta oikealle, niin olet menossa olevan menossa desimaalin alhaalta [kuultavissa]. DAVIN: Aivan. Opiskelija: Niin jokainen joudut moninkertaistaa mitä näit niin arvon int mukaan kun saat liikkua, että yli yksi. [01:15:59] DAVIN: Täydellinen, täydellinen, joten esimerkiksi katsotaanpa sanoa annoin sinä-- olen menossa kirjoittamaan tänne. Ei, en ole. Aion kirjoittaa tänne. Sanotaan annoin sinulle 76, eikö? Sanotaan annan teille 76. Se merkkijono aluksi, OK? [01:16:15] Joten pituus on mitä? 2, eikö? Summa on 0. Sitten me hypätä meidän varten silmukka. OK, ensimmäinen iterointia Tässä, mitä se tulee olemaan? Se tulee olemaan summa on 0. Joten yhteenvetona kertaa 10 0. Se on merkityksetön. Sitten mitä tämä tekee? Opiskelija: [kuulumaton]. [01:16:33] DAVIN: Se tulee kääntyä, että merkki tulee kokonaisluku, eikö? Se on ikään kuin teidän Ongelmana set-- tämä light-- se on ikään kuin kanssa ongelma asetettu Visioneer. Olet tekemisissä ASCII-arvot. Joten jos annan teille, kuten, seitsemän, mutta se on merkki, ja haluat tietää, OK, mitä numero on? Joo, voisit, joo. Joten mikä numero on? Voisit vähennä 0 siitä, mutta te on vähennettävä 0-merkki. [01:16:59] Ja jos jotkut ihmiset saada kompastumisen, he kuten, OK, no, minun täytyy tietää ASCII arvot tietovisa? Ei, et varmasti ole täytyy tietää ASCII arvot, kuten, pieniä , isot, nolla. [01:17:09] ROB: Ei ole mitään syytä koskaan laittaa tämä lunttilappua. [01:17:12] DAVIN: Ehdottomasti ei tuhlaa tilaa tätä. Voit literally-- juuri sen sijaan sanomalla 48, kuten aina siellä, joka vastaa sanoen yksi, yksi heittomerkki, niin, aivan sama. [01:17:27] ROB: Voisi melkein ajatella ja se if-- Jumala, minä tarvitsen, oops-- voisi melkein ajatella sitä koska jos meillä on jotain hash määritellä 0, kun 48. Se ei toimi. Mutta ajattele sitä heittomerkki 0 heittomerkki, ja kaikki merkit. Ajattele sitä jatkuvasti, että edustaa että ASCII-arvo. [01:17:47] DAVIN: Kyllä. OK, joten ensimmäistä kertaa läpi, joten kanssa 76-- joten ensimmäistä kertaa läpi, tämä on vain merkki 7 miinus merkki 0, ja ne ovat seitsemän integers-- hyvin, ne seitsemän tilat toisistaan ​​poispäin toinen ASCII kaavion tai mitä tahansa. Niin että menee palauttaa int 7. Joten nyt summa on 7. [01:18:08] OK, no, sanotaan hypätä osaksi tätä silmukka uudelleen. OK, nyt se summa kertaa 10. Joten olet tehokkaasti liikkuva 7 vasemmalle. Onko järkeä? Olet tehokkaasti siirtämällä sitä vasemmalle. [01:18:19] Ja sitten add-- tämän tulee olemaan 6 miinus 0. Se on 6. Joten se tulee olemaan 70 + 6. 76, se on teidän numero. Joten riippumatta siitä, kuinka monta Annoin teille, se on hitaasti vain on muuttumassa suurempia arvoja vasemmalle, 1 kertoimella 10 joka kerta for silmukka, ja asentaa tarvittaessa. [01:18:37] Takana? Opiskelija: Meillä ei ole tehdä mitään tarkkailun ohjelmaan? [01:18:41] ROB: Niin pitkälle kuin tarkkailun menee ohjelma, olisimme kertoa melko paljon mitä sinun täytyy tarkistaa. Jos emme kerro sinulle mitään, niin yleensä oletetaan, että olet tarkistaa useimmat asiat. Kuten ehkä, vain on turvallista, voit pitäisi varmaan tarkistaa hei, on s null? Sitten minulla ei ole aavistustakaan, mitä palata. Mutta haluamme kertoa teille tällainen asia. 0, en tiedä. [01:18:59] DAVIN: Ja miksi haluat uudelleentarkastamiseksi jos vertaistuki null? Opiskelija: [kuulumaton]. DAVIN: Koska char tähti. Se on osoitin. Joten täysin hyväksyttävä ilmoitus, voisin sanoa, OK, vertaistuki null, koska se voisi olla osoitin nollaamaan. Joten jos sinulla on viitteitä teidän polku näin, kannattaa varmaan tarkistaa. Koska jos et tarkista, että sekä niin voit sitten mennä omalle varten silmukka, ja olet doing-- häipyä alas. Häipyä alas. [01:19:22] ROB: Anteeksi, se on siinä. [01:19:23] DAVIN: Ja niin, kuten, jos se on nolla, ja sitten tehdä tämän, mitä virhe aiotte saada? Opiskelija: Olet menossa saada joukko vika. DAVIN: Aiotko asettaa vika, oikea, koska olet yrittää indeksinä null. Joten aiot yrittää indeksoida muistiin, että et omista. Joten tämä, jos tämä on tyhjä, ja teet tämän, sinun sykli. [01:19:39] ROB: Olen myös sitä mieltä, tentti, jossa me tämän kysymyksen, kerromme teille että voit vain olettaa se on positiivinen luku. Koska atoi odotetaan myös käsittelemään negatiivisia lukuja, joten sinun olisi erikoistapaus. Hei, on ensimmäinen merkki viiva, jolloin, OK, nyt se on negatiivinen kokonaisluku. Kerromme sinulle näitä puheita. Kerromme sinulle, mitä sinun tarvitsee käsitellä. DAVIN: Kyllä. Joten olen varma, että jotkut ihmiset saattavat have-- jos olet aloittanut katsomalla vanhoja kokeita, Olet nähnyt sterln. Se on suosittu yksi. Ja mielestäni sterln, sinun piti Tätä tarkistaa null, paluu 0 tai jotain sellaista. Like, sinun piti tarkistaa null. Ja jos et ole, että oli kohta pois päälle tietokilpailu. Niin joka tapauksessa, ei kaikki tuntuu OK atoi? Ei kukaan halua mennä yli osat uudestaan? ROB: Ai joo, luulen me myös kertoa sinulle voi olettaa, että kaikki is-- että he todellisuudessa saapuva numero, että sinun ei tarvitse murehtia, kuten kirjeiden merkkijonon, niin. DAVIN: Joo. Kyllä? Opiskelija: Voitko mennä Yli enemmän aikaa, kun käytät lainausmerkki ja heittomerkki? [01:20:37] DAVIN: Toki, niin lainausmerkit, hyvin yksinkertaisesti, on Lainausmerkkejä jouset. Joten jos lainausmerkki jotain, joka on merkkijono. Joten, kuten, jos minulla oli tämä 0 tänne, ja tein tämän, se on merkkijono. Se ei ole enää luonteeltaan. Joten en voi löytää tätä arvoa minun ASCII kaavio, koska se on merkkijono, joo. [01:20:57] OK, muita kysymyksiä? Kyllä? [01:21:00] Opiskelija: Niin olet jo vastannut tähän, mutta kuten, kun olemme todella Kirjoitan tätä on tietokilpailu, haluat meidän kirjoittamaan viiltää nollia [kuulumaton]? DAVIN: Ei. Kysymys oli sinun pitäisi laittaa kauttaviiva nollat ilmoittamaan, jos he nollaa? Ei, me tajuta se. Joo, kiitos, he ovat hyviä. OK, jotain muuta? Ei kukaan halua to-- niin luulen olemme ajaa hieman ajan mittaan. Haluatko nähdä toisen, tai? Opiskelija: RandomInt. [01:21:29] DAVIN: RandomInt, OK, tarkalleen. Tehdäänpä RandomInt. Teen sen tänne. Joten RandomInt on todella paljon yksinkertaisempi. Mielestäni atoi on luultavasti vaikein että olemme kysyneet aiempina vuosina. Opiskelija: [kuulumaton]. [01:21:46] DAVIN: Mitä? ROB: Näen, jos se on eräänlainen on katseltava tänne. DAVIN: Onko se? ROB: En usko, että se on going-- mielestäni se tulee ajaa pois oikealle. DAVIN: OK, joten teen tämän. Ja sitten vain laittaa sen ruudulla. [01:21:56] ROB: Okei. [01:21:57] DAVIN: Haluatko olla minun kirjanoppinut? [01:21:58] ROB: Joo. [01:21:58] DAVIN: Nice. OK, voin poistaa tämän? [01:22:02] Opiskelija: Joo. [01:22:04] DAVIN: Se on niin kova. (LAULU) Pärjäät mitä olet tekemässä. Ja tekee mitä et. Selvä. [01:22:19] OK, jos muistan oikein, on tietokilpailu RandomInt oli kuin, OK, minä aion antaa teille kaksi numerot, kuten ja b. Ja haluan sinun antaa minulle RandomInt välissä oleviin numeroihin. Joten RandomInt on menossa ottaa kaksi numbers-- niin RandomInt-- ja se on aio palata int. [01:22:41] Niin mitä paluuarvo? Olen juuri kertonut teille. Int, eikö? Kuten tämä, ja sitten se on vie kaksi ints. Joten se tulee ottaa int ja int b, niin. Niin mitä RandomInt on aikoo tehdä, on se menee palata joitakin satunnaisia ​​arvo in näiden kahden arvon välillä. Joten se tulee olemaan suurempi kuin, vähemmän kuin b. Joten mielestäni voit todennäköisesti olettaa, että on pienempi kahdesta arvosta. Joten jos olemme tekemisissä satunnaisuus, mikä toiminto olemme nähneet, että antaa meille satunnaisia ​​asioita? Opiskelija: Drand. DAVIN: Drand, tarkalleen. Joten aiot luultavasti haluat käyttää drand. Joten voit sanoa int satunnainen, ja me Sano se on yhtä kuin 0 juuri nyt. Ja he aiomme sanoa, OK, satunnainen tasavertaisten drand 48. Ja mitä se palauttaa? Mitä tämä toiminto antaa sinulle? [01:23:43] Opiskelija: 0 ja 1 välillä. [01:23:45] DAVIN: Joo, välillä 0 ja 1. Joten se tulee be-- [01:23:48] ROB: Ja tämä is-- luulen me kerromme teille tämän. Kuten, voit käyttää drand 48. Tästä voidaan varmistua siitä ohi tentti. Mutta me varmaan sanoa teille voidaan käyttää drand 48, joka palauttaa float välillä 0 ja 1. [01:23:58] DAVIN: Kyllä, kyllä, olen melko varma siitä, tentti se sanoo et luultavasti haluat käyttää drand, joo. Niin se tulee palauttaa Joissakin arvo välillä 0 ja 1. Ja sitten mitä olet menossa haluavat tehdä? No, haluat kertoa by-- odottaa, mielestäni se on näin, sorry. Otan vain tehdä tämän. En tiedä. [01:24:19] Joten b miinus. Joten miksi b miinus? Joten sanokaamme drand antaa sinulle takaisin int-- OK, minä vain tehdä loput, niin plus. Joten mitä does-- y on b miinus. Joten sanotaan, että drand antaa sinulle takaisin maksimiarvo se saattaisi antaa sinulle. Mitä tuo tulee olemaan? Opiskelija: 1. [01:24:43] DAVIN: 1, eikö? Joten jos tämä on 1, ja olet kertomalla se b miinus, No, se on vain erotus miinus A. Ja jos sitten vielä, että takaisin, joka on mitä? Se on pohjimmiltaan b. Onko järkeä? [01:24:57] Opiskelija: Joo. [01:24:59] DAVIN: Joten jos tämä on suurin Arvostamme se voisi olla, se tulee olemaan 1. Ja sitten tämä on vain Ero näiden kahden välillä. Lisättävää, niin tämä on aio palata satunnaisesti. Ja nurkassa tapauksessa, että drand antaa sinulle takaisin 1, satunnainen vain olla tehokkaasti b. Mutta se suurin se voi olla. Joten jos se tulee olemaan alle että, niin sanotaan, että se on kuin 0,9, niin sitten 0,9 kertaa b miinus tulee olemaan vähemmän kuin ero b miinus. [01:25:33] Ja sitten jos lisäät että päälle, niin että arvo on tulee olla suurempi kuin, koska lisäät jotain sen päälle, mutta se tulee olemaan pienempi kuin b. Joten aiot saada satunnainen numero, koska soitat drand. Ja että Rand, että satunnainen numero on olemaan jossain välissä ja b. Onko järkeä? [01:25:50] ROB: Vain laittaa se konkreettisia lukuja, joten sanokaamme haluamme valita satunnaisluku välillä 7 ja 10. Joten b miinus on valikoimassamme. On siis olemassa erilaisia ​​kolme numerot haluamme valita. Ja sitten kertomalla että välillä 0 ja 1 1, jos se sitten antaa meille some-- sanotaanko, että antaa meille 1.5. [01:26:07] Sitten 1.5, haluamme mennä 7-10. Joten 1,5 plus 7 tuo meille takaisin meidän 7-10 välillä. Ja sitten me varastointia sisällä kokonaisluku, niin se typistetään alas 8. Ja sitten me vain palata siihen. Joten b miinus on valikoimassamme. siirtyy sen ylös numerot että haluamme tällä alueella. Joten välillä 7 ja 10, ja sitten me voi palauttaa mihin päädymme. [01:26:30] DAVIN: Joo, kiva. [01:26:32] ROB: Kiitos. [01:26:34] DAVIN: Joo, mikä hätänä? [01:26:35] Opiskelija: Juoksemmeko sitä kaikenlaista ASCII virheitä we're-- jos drand on palaavat float [kuultavissa]. [01:26:42] ROB: Eli aivan kuten Rob sanoi, koska satunnainen ei ole int, joten drand tulee kellua. Niin ja sitten se moninkertaistaa ulos. Ja saatat saada joitakin Tällainen float numeroita. Ja sitten se tulee katkaista. [01:26:51] Opiskelija: OK. DAVIN: Joo. ROB: Ja jos kääntäjä olisi varoittaa teille, kuten menetys tarkkuus, vain heitetään INT siellä, ja sitten se on hyvä. DAVIN: Kyllä? [01:27:02] Opiskelija: Olisiko sama todennäköisyys tulla, kuten, b tai [kuulumaton]? [01:27:08] ROB: Niin is-- Olen oikeastaan wondering-- on RandomInt oletetusta olevan numeron alle b? Kuten, jos se on välillä 7 ja 10, mitkä ovat mahdollisuudet? 7, 8, ja 9, tai 7, 8, 9, 10? DAVIN: Unohdan. Ongelmasta set-- [01:27:19] ROB: Minusta se on 7, 8, 9. [01:27:20] DAVIN: Se nimenomaan kertoo oman osallistavan ja yksi yksinomainen. [01:27:22] ROB: Joo. [01:27:23] DAVIN: Mutta minä don't-- olen not-- [01:27:23] ROB: Minusta nämä on ei sisälly, jolloin, siellä on yhtä suuri todennäköisyys 7, 8, ja 9. Ei ole todennäköisyys 10. DAVIN: Kyllä? Opiskelija: Minulla on kysymys. Haluamme määritellä funktio palauttaa ei yksi arvo, mutta array. Niin mikä olisi syntaksin jälkeen palata? [01:27:41] DAVIN: OK, niin sitten would-- paluun jälkeen? Joten sanokaamme oli julistanut array jossain tuolla ylhäällä. Sitten voit vain palauttaa taulukon nimen. [01:27:49] Opiskelija: OK, kiitos. Sitten vain palata a-- DAVIN: Voi odottaa, niin pahoillani. Kysymys oli siitä, miten sinä palauttavat array. [01:27:54] ROB: Vaikka se ei voinut olla array julistetaan pinoon tai mitään sellaista. Sen pitäisi olla jotain malloced, koska malloc Näin voit kiertää automaattinen muistin jakamista. [01:28:01] DAVIN: Kyllä. ROB: Miten saat noin paikallista ulottuvuutta. [01:28:09] DAVIN: Mutta olisit vain palauttaa sen name-- [01:28:11] Opiskelija: [kuulumaton] se ei ole yhtä arvo, esimerkiksi, kaksi numeroa, niin [Äänetön]. [01:28:18] DAVIN: Et voi palauttaa useita numeroita. Et voi, kuten, return-- [01:28:20] Opiskelija: puhuin palaamassa array tai jotain sellaista. [01:28:23] DAVIN: Joo, niin kysymys on voin palauttaa useita arvoja. Et voi palata useita arvoja. Et voi niinku palata sitten palata b tai jotain sellaista. Koska sen jälkeen palaat, voit palata pois toiminto. Ja sitten toiminto on tehty, ja kuten Rob sanoi, on pinoon. [01:28:35] Niin kaikki muistiin vain saa palasi tietokoneeseen. Kaikki unohtuu, periaatteessa. Joten jos haluat palata useita arvot, sinun täytyy palauttaa array, Ja miten tässä on mallocing. Ja sitten palaisi x niin. Periaatteessa juuri palata nimi. Ja kun palaat jotain tällaista, olet ei oikeastaan ​​palaamassa arvon. [01:28:53] Joten sanokaamme tallennettu arvot array. Et ole oikeastaan palaavat näitä arvoja. Kuten, jos palasin int, olen todella palaamassa kopioita arvoja. Mutta jos olisin palata jotain tällaista, Olen palaamassa viite näitä arvoja. Joten olen palaamassa, periaatteessa, muistiosoitetta arvoja. Onko järkeä? Opiskelija: Joo. DAVIN: Nice. Kyllä? [01:29:13] Opiskelija: Kun olet käyttäen drand tänne, sinun täytyy laittaa SRAND ennen sitä? [01:29:17] DAVIN: Ei, ei, en usko niin. [01:29:20] ROB: Joo, niin onko sinulla sanoa mitään SRAND? Oletuksena teistä koskaan sano SRAND kaikilla on vain tehdä SRAND null. Niin drand omasta toimii. Ja se tulee automaattisesti siemen nykyinen aika, mitä se käyttää. DAVIN: Kyllä? Opiskelija: Oletko [kuulumaton] numerot? DAVIN: Kyllä voit. Opiskelija: Joten voi sanoa, kuten, 4 kertaa 2. Asia on, et voi olettaa, sitten int on neljä tavua. Only-- [01:29:51] DAVIN: Tarkoitan, että tietokilpailu voit. [Nauraa] [01:29:54] ROB: Mm, ei. DAVIN: Kyllä, kyllä ​​voit. Jos he kysyvät, kuinka suuri int on, et voi olla, kuten, neljä tai kahdeksan. ROB: Ai, niin jos Kysymys on nimenomaan, kuten, jos se on koodaus ongelma, sinun pitäisi sanoa koko int. Jos se on taulukko, tai se kertoo kuinka monta tavua, sinun ei pitäisi täyttää koko ints. [01:30:08] Opiskelijat: [nauraa] [01:30:18] DAVIN: Aivan, niin miksi koko int tärkeitä täällä? Joten kuten, jos aiomme 32-bittinen prosessori tai jotain, niin se tulee olemaan neljä tavua. Mutta joitakin uudempia kamaa, se voisi olla mitä? Se voisi olla kahdeksan, eikö? Joten this-- jos vain kovaa koodin neljä, Sitten joissakin koneissa, se toimii. Joissakin koneissa se ei toimi. Mutta jos on tietokilpailu olemme kuten kuinka suuri on int? Laita neljä. ROB: Oikea. DAVIN: Joo? Opiskelija: Eli koska me julistamisesta [Äänetön] sisällä toimintoa, meidän pitäisi laittaa 3 sisällä että funktio? Tai voimme käyttää sitä ulkona? DAVIN: Voit käyttää sitä ulkopuolella että toiminto. Niinpä hän kysyy ilmaiseksi. [01:30:49] Opiskelija: kadottaa missä [kuultavissa]. [01:30:51] ROB: Voi, vapaa ei happen-- se on osa taika malloc on se, että et ole rajoitettu paikalliseen soveltamisala. Sinulla on täysi määräysvalta kuinka kauan muuttujat elää. Joten me kutsumme malloc täällä, se voisi olla täysin erillinen toiminto. Se voi olla 10 tuntia myöhemmin että vihdoin soittaa ilmaiseksi. [01:31:08] DAVIN: Niinpä esimerkiksi, kuten, pari viikon päästä, kun vihdoin tee sanakirja aapinen psets, olet menossa olla jokin funktio, että luo tonnia solmuja. Joten olet mallocing tonnia solmuja tätä toimintoa. Ja sitten myöhemmin erillinen toiminto, olet menossa haluavat vapauttaa kaikki solmut. Voit siis kirjaimellisesti vain siirtää vapauttaa osoittimen, niin muistin osoitteen mitä te malloced. Ja se on hieno. Sinun ei tarvitse vapauttaa, kuten, on sama toiminto. Kyllä? [01:31:30] Opiskelija: Niin malloc muuttuja [äänetön] ulkopuolella? Onko se, mitä sanot? DAVIN: Odota, sanoa? Anteeksi. [01:31:38] Opiskelija: Jos malloc muuttuja voi olla vapaasti missä tahansa koodin, sitten he voivat päästä käsiksi kaikkialla koodin? Voit pitää ne paikallisia? [01:31:45] DAVIN: Voi, hän kysyi, kuten, muuttuja, like-- [01:31:51] ROB: Eli vielä on jonkinlainen viite jotta malloc lohko muistia. Joten tässä, olemme palaamassa x. Opiskelija: Oh. ROB: Jos emme palaa X täällä, ja tämä oli vain mitättömiä, Sitten meillä ei olisi pääsyä osoitin, joka oli malloced, ja se on vuotanut muistia. [01:32:05] Opiskelija: OK. [01:32:06] DAVIN: Niin kuin, sanokaamme on tämä, kuten täällä. ROB: Ei. DAVIN: Minun tärkein tehtävä, en voi vain soittaa tämä X ja olla, kuten, OK, Tämän toiminnon, tein tämän. [01:32:14] ROB: Oikea. [01:32:14] DAVIN: Joten aion soittaa x, kuten pää- tai jotain sellaista. Et voi tehdä sitä. Aiot palauttaa jotain. Mutta mitä aiotte palata? Aiot palauttaa muistiin osoite. Ja koska palaat muisti osoite, jota voi käyttää muualla. Kysyttävää? Kyllä? [01:32:28] Opiskelija: Onko funktio edellä on tarkistaa [kuulumaton]? [01:32:33] DAVIN: Miksi ei tarvitse tehdä niin? Opiskelija: [kuulumaton]. DAVIN: Koska olet ei mallocing mitään. Joten se not-- joo, se on pidä merkkijonon s. Se osoittimen jonnekin. Nämä ovat vain arvoja. Opiskelija: OK. DAVIN: Joo. Entä muuta? ROB: Jep? Opiskelija: Mutta kun [kuulumaton]? [01:32:55] ROB: Niin, jotta vapaa muisti, sanoisimme täällä. Niin x on meidän osoitin lohko muistia. Me vapautamme että osoitin. Ja me ei välttämättä tee se täällä. Me voimme tehdä sen missä tahansa. Mutta et vain soittaa ilmaiseksi jotain että malloc palaa. Joten malloc, täällä, palautetaan mitä on tallennettu x. Jotta voimme soittaa ilmaiseksi x. Viimeisiä kysymyksiä? [01:33:20] DAVIN: Viimeisiä kysymyksiä? Joo? [01:33:22] Opiskelija: Anteeksi, voitteko uudelleen selittää miksi sinun pitäisi vapauttaa siellä? Miksi [äänetön]? [01:33:26] DAVIN: Sillä täällä? [01:33:27] Opiskelija: Joo, kuten heti. DAVIN: Olet luultavasti eivät halua ilmaiseksi täältä. ROB: Luultavasti ei. DAVIN: Joo, että tämä tekisi mitään. Tämä, kuten, luoda muisti, tehdä juttuja siitä, ja sitten heti unohtaa sen, joo. [01:33:37] ROB: Mutta voisimme tehdä, kuten, täällä jostain syystä. Voisimme sanoa int tähti y on yhtä kuin paluu array. Tehdä joitakin juttuja y, ehkä tulostaa sisältöä. Ja sitten lopuksi, olemme mennyttä. Voimme vapauttaa y. Opiskelija: [kuulumaton]. DAVIN: Pitäisikö minun selaa alaspäin? Kiitos. ROB: Nice. [01:34:02] DAVIN: OK, se on siinä. ROB: Hyvä, hyvä. Onnea. [01:34:05] DAVIN: Jos sinulla on kysyttävää, lähetä meille sähköpostia. Onnea.