DAVID Malan: Tere, ja tere tulemast tagasi CS50. Nii et see on nädala lõpuks neli. Lihtsalt üks teadaanne esimene. Nii niinimetatud viienda esmaspäev on tulemas tuleval esmaspäeval. See on võimalus muutuda SAT / UNSAT et kirja klassi, või kirja klassi SAT / UNSAT. Tüütult, et protsess ei nõua allkiri, sest sa pead täitma välja üks neist roosa add / drop vorme. Kuna tehniliselt, SAT / UNSAT versioon ja kirja klassi versioon on erinevad kataloogi numbrid. Aga pole hullu. Tule minu juurde või röövida või Lauren üheski kohas. Või saatke meile kui teil ei ole sellist paberimajandust vajate täna ja me on kindel, et aidata teil teha hoolt, et enne esmaspäeva. Olgu, täna - Tegelikult on natuke kaja. Kas me toon mind natuke? OK. Nii et täna tutvustame teema tuntud vihjeid. Ja ma tunnistan, et see on üks keerulisemad teemad, mis me kaldume katta selle klassi või tegelikult mis tahes sissejuhatav kursus, mis kasutab C. Aga võta minu sõna see, eriti kui meelt tunneb veidi rohkem painutatud Täna ja lähinädalatel. See ei ole esindaja Jäätkö halvemaks selles see lihtsalt tähendab, et see on eriti keeruline teema et ma luban, paar nädalat seega tundub kõik liiga silmatorkavalt lihtne tagantjärele. Mäletan veel, et sellel päeval. Istusin Elliott söögisaal, istub minu TF Nishat Mehta, kes oli resident Elliott maja. Ja mingil põhjusel, see teema lihtsalt klikke. Mis tähendab, et ka mina võitlesid koos ta mõnda aega, kuid ma annan endast parima, et aidata vältida sellise võitlevad teema, mis lõppkokkuvõttes on üsna võimas. Tegelikult üks teemadest saame arutada aastal lähinädalatel on see, et julgeoleku ja kuidas tegelikult võite kasutada masinaid viisil mis ei ole ette nähtud. Ja need exploitations on tavaliselt tulemusel vead, vead, mida me inimesed teevad, mida ei mõista mõned alusvara rakendamine detailid, mille kaudu programmid on tehtud. Nüüd, et muuta see tundub veelgi kasutajasõbralikumaks sõbralik, Ma arvasin, et mängida 10 Teine eelvaade vähe claymation näitaja nimega Binky kes toodi elu meie sõber Stanfordi, professor Nick parlante. Seega lubage mul anda teile selle teaser Binky siin. [VIDEO PLAYBACK] -Hei, Binky. Ärka üles. See on aeg, pointer lõbus. -Mis see on? Lugege vihjeid? Oh, goodie. [END VIDEO PLAYBACK] DAVID Malan: See on Stanford arvutiteadus. Seega rohkem, et tulla. [APLAUS] DAVID Malan: Vabandust, Nick. Nii meelde, et viimane kord, kui me lõppes see on tõesti põnev pinge kusjuures see funktsioon lihtsalt ei tööta. Vähemalt intuitiivselt, tundus nagu see peaks toimima. Lihtsalt Vahetatakse väärtused kahe täisarvu. Aga meelde tuletada, et kui me välja trükkida originaal väärtuste peamine üks ja kaks, nad olid ikka üks ja kaks ja mitte kaks ja üks. Nii et lubage mul tegelikult minna üle seadme. Ja ma kirjutasin natuke skeleti kood edasi siin, kus ma väita, et x on 1, y on 2. Ma siis välja printida nii nende väärtused print f. Ma siis väidavad siia et me ei kavatse vahetada neid. Jätsin tühi koht siin meid täitke täna vaid hetk. Siis ma lähen paluvad kahe muutuja on vahetatud. Siis ma lähen printida neid uuesti. Ja nii et loodetavasti ma nägema 1, 2. 2, 1. See on super lihtne eesmärk praegu. Niisiis, kuidas me läheme vahetada kahe muutuja? Noh, kui pakun siin, et need tassid võib esindada mälu arvutis. See on paar hammustab, see on veel mõned hammustused. Kas meil on vabatahtlike tule üles ja segada meile mõned joogid, kui tuttav? Tule üles. Mis su nimi on? JESS: Jess. DAVID Malan: Jess? Tule üles, Jess. Kui sa ei pahanda, me peame panema Google Klaas teile, et saaksime põlistama see. OK, klaas. Salvestada video. Ja OK, meil on hea minna Jess siin. Hea küll. Meeldiv kohtuda. Niisiis, mida ma tahan, et sa midagi teha - kui sa saaksid, üsna kiiresti - lihtsalt valab meie poole klaasi oranž mahla ja pool klaasi piima, esindab tõhusalt numbrid 1 aastal üks tass ja 2 teises voorus. See saab olema hea materjali. JESS: Vabandust. DAVID Malan: Ei, ei. See on OK. Nice. Olgu, meil on neli baiti väärt apelsinimahla. Me kutsus ta väärtus 1. Nüüd veel neli baiti väärt piima. Kutsume seda Maksumus 2. Nii x ja y vastavalt. Olgu, nüüd kui ülesanne käepärast - teid, Jess, ees kõik oma klassikaaslastega - on vahetustehingu väärtused x ja y sellised et me tahame, et apelsinimahla teiste tass ja piima karikast kuidas võib teile - enne seda tegelikult see - minna seda teed? OK, tark otsus. Nii et sa pead natuke rohkem mälu. Teeme osadele ajutise tassi, kui soovite. Ja nüüd suunduda vahetada x ja y. Suurepärane. Nii väga hästi tehtud. Tänan sind nii palju, Jess. Palun. Väike meene. OK, nii et ilmselt super lihtne idee. Täiesti arusaadav, et me peame natuke rohkem ruumi - sellisel kujul, tass - kui me tegelikult tahame swap nende kahe muutuja. Teeme just nii. Up siin vahel, kus ma väita, ma olen kavatse olla teeme mõned vahetada, ma minna ja kuulutada temp. Ja ma seadke see võrdub, ütleme, x. Siis ma lähen väärtuse muutmiseks x nagu Jess tegid siin piim ja apelsinimahl võrdne y. Ja ma lähen muuta y on võrdne mitte x, sest nüüd me oleks ummikus ring, vaid Temp. Kus ma ajutiselt - kui Jess ajutiselt panna apelsinimahl enne clobbering et tass piima. Nii et lubage mul minna nüüd ja teha see. Seda nimetatakse noswap.c. Ja nüüd andke mulle joosta ei swap. Ja tõesti ma näen, kui ma laiendada aken natuke, et x on 1, y 2. Ja siis x on 2, y on 1. Aga meelde, et esmaspäeval me tegime asjad natuke teistmoodi, kus ma selle asemel rakendada abistaja funktsiooni kui soovite, et oli tegelikult tühine. Ma kutsusin ta vahetada. Ma andsin talle kaks parameetrit, ja ma helistasin neid ja ma helistasin neile b. Ausalt, ma ei helista neile x ja y. Ei ole midagi peatusteta mul seda tehes. Aga ma väidan, et see on siis natuke ebamäärane. Kuna turult esmaspäeval, et me väitis, et need näitajad olid koopiad väärtused möödunud sisse Nii see lihtsalt jama oma meeles, ma arvan, et kui te kasutate täpselt samad muutujad. Nii et ma selle asemel kutsuda neid ja b, lihtsalt selguse huvides. Aga me võime neid kutsuda kõige midagi tahame. Ja ma lähen kopeeri ja kleebi tõhusalt seda koodi seal ette võtta siin. Sest ma nägin, et see toimib. Nii et päris heas seisus. Ja ma muudan x, mu x et, minu y b ja mu y b. Nii teisisõnu, täpselt sama loogika. Täpselt sama asi, et Jess tegi. Ja siis üks asi, mida ma pean tegema üles siin muidugi on nüüd tugineda käesoleva funktsioon või nimetame seda funktsiooni. Seega ma kutsun selle funktsiooni kaks sisendite, x ja y, ja vajuta Save. Olgu, põhimõtteliselt sama asi. Tegelikult, ma olen arvatavasti programmi tarbetult keerulisemaks kirjutamise funktsioon, mis on lihtsalt võttes umbes kuus rida koodi et ma varem on rakendanud see vaid kolm. Nii et lubage mul minna nüüd ja uusversioon seda teha ei swap. Olgu, ma silmamunad siin. See peaks olema viga, mida võib vaata üha sagedamini oma programme saada keerulisem. Aga seal on lihtne lahendus. Lubage mul kerida tagasi siin. Ja mis on esimene viga, et ma käin? Kaudsed deklaratsioon. Mis, mis tavaliselt näitavad? Oh, ma unustasin prototüüp. Ma unustasin, et õpetada koostaja et swap läheb endiselt, kuigi ta ei ole alguses programmi. Nii et ma olen lihtsalt kavatse öelda tühine, swap, int, int b, semikoolon. Nii, et ma ei kavatse implementeerid ta. Aga nüüd see sobib, mida on siin. Ja teate puudumisel semikoolon siin, mis ei ole vajalik, kui rakendamisel. Nii et lubage mul uusversioon see, ei tee swap. Palju parem. Jooks ei swap. Ja kurat. Nüüd oleme tagasi, kus me olime esmaspäeval, kui asi ei vaheta. Ja mis on intuitiivne seletus , miks see nii on? Jah? Õpilane: [kuuldamatu]. DAVID Malan: Täpselt. Seega a ja b on koopiad x ja y. Ja tegelikult, iga kord, kui sa oled olnud helistades funktsioon siiani, et möödub muutujad nagu ints - nagu swap ootab siin - kutid on möödaminnes koopiad. Nüüd, tähendab see võtab natuke aega, split teiseks kopeerimiseks arvuti bitid ühest muutuja arvesse bitti teise. Aga see pole nii suur asi. Aga nad on siiski koopia. Ja nüüd, seoses swap, Ma olen tegelikult edukalt muutuv ja b. Tegelikult, teeme kiire meelerahu vaadata. Prindi f on% i, uus liin. Ja olgem pistik. Nüüd teeme sama asja b. Ja teeme sama asja siin. Ja nüüd andke mulle kopeerida samad read jälle allosas funktsioon pärast minu kolm rida huvitavaid oleks täidetud, ning printida ja b taas. Nüüd teeme seda, ei tee swap. Lubage mul teha terminal window natuke kõrgemaks, nii et me näeme, rohkem seda korraga. Ja joosta ei swap. x on 1, y 2. 1, b on 2. Ja siis on 2, b = 1. Nii, et see töötab, nagu Jess tegin siin sees swap. Aga muidugi, see, millel ei ole mõju muutujate kohta peamistes. Nii nägime trikk, millega me võiks kinnitada seda, eks? Kui olete silmitsi selle kindlaksmääramisest küsimus, siis võiks lihtsalt punt ja teha x ja y milliseid muutujaid asemel? Sa võid teha neid maailma. Pane need ülaservas toimiku nagu tegime isegi mängu 15. Me kasutame globaalse muutuja. Aga kontekstis mäng 15 see on mõistlik luua ülemaailmne muutujale esindab juhatus, sest kogu 15. c on kõik kohta rakendatakse seda mängu. Seda see fail on olemas, et teha. Aga sel juhul, ma olen helistades funktsioon swap. Ma tahan, et vahetada kahe muutuja. Ja see peaks algama tunda lihtsalt lohakas kui lahendus kõigile meie probleeme, kui me joosta ulatus küsimused on teha seda maailma. Sest väga kiiresti meie programm on hakkab muutuma täiesti jama. Ja me tegime seda väga kokkuhoidlikult tulemusena on 15.c. Aga selgub, seal on paremini kokku. Lubage mul tegelikult tagasi minna ja kustutada prindi f on, just seda lihtsustada kood. Ja las ma ettepaneku, et see tõepoolest on halb. Aga kui ma selle asemel lisada mõned tärnid ja tähed, võin selle asemel muuta see funktsiooni ühte, mis on tegelikult toimib. Nii et lubage mul minna tagasi siin ja tunnistan, öeldes tärnid on alati raske, nii et ma ütlen tähte. Ma lihtsalt fess kuni selle. Hea küll. Ja nüüd, mida ma kavatsen teha selle asemel? Nii kõigepealt, ma lähen, et täpsustada et lähitulede asemel int sisse swap funktsiooni, ma olen selle asemel ning ütlen int star. Nüüd, mida see täht näidata? See on see, et mõistet pointer et Binky, claymation iseloomu, oli viidates hetk tagasi. Nii et kui me ütleme, int star, mõistes see nüüd on, et ei kavatse olla möödunud aastal oma väärtusest. See ei kavatse olla kopeeritud sisse Pigem aadress on saab olema möödunud sisse Nii meenutavad, et sees arvuti on terve hunnik mälu, muidu tuntud RAM. Ja et RAM on lihtsalt terve hunnik baiti. Seega, kui teie Mac või arvuti on kaks gigabaiti, siis on 2 miljard baiti mälu. Nüüd lihtsalt arvan, et just hoida asjad kena ja korrapärane, me anna aadress - number - iga bait RAM arvuti. Kõige esimene bait need 2 miljardit arvu nulli. Järgmise üks on bait number üks, number kaks, kogu tee peal üles, dot dot dot, et umbes 2 miljardit eurot. Nii saate mitu baiti mälu arvutisse. Nii oletame, et see on see, mida mean aadress. Nii et kui ma näen, int täht, mis toimub tuleb läinud swap nüüd on aadress. Ei oma väärtust, kuid mis iganes selle posti aadress on niiöelda - selle asukoht RAM. Ja samamoodi b, ma lähen öelda sama asja. Keskmine, star, b. Nagu kõrvale, tehniliselt star võiks minna mujal. Aga me standardiseerida täht on kõrval andmetüübi. Nii swap allkiri tähendab nüüd, anna mulle aadress int ja kõne et aadress. Ja anna mulle teine ​​aadress int ja helistada sellele aadressile b. Aga nüüd minu kood on siin muuta. Sest kui ma kuulutada int temp - mis on ikka tüübi int - kuid ma salvestada see, millist väärtust? Et oleks selge, ma olen Putting koos koodi kirjutada kohe? Panen asukohta. Aga ma ei hooli asukoht nüüd, eks? Temp olemas lihtsalt Jess kolmas tass olemas, mis eesmärgil? Salvestada raha. Piim või apelsinimahl. Ei tegelikult säilitada aadress kas need asjad, mis tundub natuke absurdne selles reaalne maailma kontekstis ikkagi. Nii et tõesti, mida ma tahan panna temp ei ole aadressi, kuid sisu. Nii et kui on number nagu 123, see on 123. baiti mälu, mis lihtsalt juhtub olema istuvad, et väärtus aastal juhtub olema istuvad. Kui ma tahan minna, et aadress, Ma pean ütlema, täht. Samamoodi, kui ma muuta seda, mis aadressil, muudan Selle käivitamiseks. Kui ma tahan salvestada mis kell asukoht, mida on kohas kell B täht b star. Nii lühike, isegi kui see ei ole päris hukku veel - ja ma ei oota et see oleks nii kiire - aru, et kõik, mida ma teen on prefixing need tähed mu muutujad, ütlus ei haara väärtused. Ärge muutke väärtusi. Aga pigem minge need aadressid ja saada raha. Mine sellele aadressile ja muutus väärtus olemas. Nüüd lubage mul kerida tagasi kuni top, lihtsalt määrata see joon siin, et muuta prototüüp sobitada. Aga ma nüüd vaja teha üks asi. Intuitiivselt kui ma olen muutunud tüüpi argumentide swap ootab, Mida ma veel vaja muuta oma koodi? Kui ma kutsun swap. Sest just nüüd, mida olen I tõmmatakse vahetada ikka? Väärtuse x ja y väärtus, või piim ja apelsinimahl. Aga ma ei taha seda teha. I asemel tahavad läbida mida? Asukoht x ja asukoht y. Mis on nende postiaadressid, nii rääkida. Niisiis, mida teha, et seal ampersand. Ampersand omamoodi kõlab aadress. nii n, ampersand, aadress x, ja aadress y. Nii et see on tahtlik, et me kasutame sümboliga, kui kutsutakse funktsioon, ja tähed deklareerimisel ja kui rakendamisel funktsioon. Ja mõelge ampersand kui aadress operaator ja staar minna operaator - või rohkem õigesti, dereference operaator. Nii et terve hulk sõnu lihtsalt öelda, et nüüd, loodetavasti, swap läheb õige. Lubage mul minna ja teha - olgem tegelikult failile, muidu Selle programmi veel nimetada ei swap. Väidan, et me nimetame seda swap.c nüüd. Seega veenduge, vahetada. Dot, slash, vahetada. Ja nüüd tõesti, x 1, y 2. Ja siis x on 2, y on üks. Noh vaatame, kas me ei saa seda teha natuke erinevalt sellest, mida on siin toimub. Esiteks lubage mul suumida meie joonistus ekraan siin. Ja las ma pakun hetkel - ja kui juhin siin kajastuma seal nüüd - las ma ettepaneku, et siin on terve hunnik mälu või RAM, sees minu arvuti. Ja see on hammustada number, oletame, 1. See saab olema baiti number 2. Ja ma teen terve hulga rohkem, ja siis hunnik dot dot ringile näitavad, et seal on 2 miljardit need asjad. 4, 5, ja nii edasi. Seega on esimese viie baiti minu arvuti mällu. Olgu? Väga vähesed välja 2 miljardit. Aga nüüd ma lähen ettepaneku järgmised. Ma lähen ettepaneku x läheb salvestada number 1 ja y läheb salvestada number 2. Ja lubage mul minna nüüd ja esindab need väärtused järgmiselt. Teeme seda järgmiselt. Anna mulle üks sekund. Üks hetk. OK. Ma tahan teha seda vähe - Teeme seda uuesti. Muidu ma lähen ja kasutades samad numbrid, tahtmatult mitu korda. Nii lihtsalt nii meil on erinevad numbrid rääkida, olgem nimetame seda bait number 123, 124, 125, 126, ja dot dot dot. Ja las ma väita, et nüüd, ma lähen pane väärtus 1 siin ja väärtus 2 siin, muidu tuntud x ja y. Nii see lihtsalt nii juhtub, see on x, see on y. Ja just mõned juhuslik kokkusattumus, arvuti, operatsioonisüsteem, juhtus panna x saabus number 123. Ja y sattus asukoht 124 - kurat. Ma oleks pidanud kindlaks seda. Oh, ma tõesti tahan seda teha? Jah, ma tahan, et määrata see ja b õige sellest täna. Vabandust, uus selles. 127, 131, ja ma ei taha olla see keeruline, kuid miks ma muuta numbrid on? Sest ma tahan ints kuni tegelikult on neli baiti. Niisiis olgem super anal sellest. Nii et kui 1. juhtub olema adresseeritud 123, 2 saab olema aadressil 127, kuna see on vaid 4 bye'dest kaugusel. See on kõik. Ja me unustame kõik muud aadressid kogu maailmas. Nii x on asukoht 123, y on asukohast 127. Ja nüüd, mida ma tegelikult tahad? Kui ma kutsun swap nüüd, mis on tegelikult toimub? Noh, kui ma kutsun swap, ma möödaminnes aadress x ja aadress y. Nii näiteks, kui need kaks tükki Paberist nüüd moodustavad kaks argumendid ja b vahetada, mida ma olen kavatse kirjutada Esimene neist, mis ma lähen helistada nimetame? Täpselt, 123. Nii et see Väidan on. See on parameeter. Panen aadress x sinna. Mis see on? Mis see on? Ei, ei. See on OK. Ikka hea, ikka hea. Nii et see on. Ja nüüd teisel paberile, see saab olema b, ja see, mida ma olen saab olema kirjalikult see tükk paberit? 127. Nii et ainus asi, mis on muutunud meie eelmine Ütlen seda lugu on, mitte sõna-sõnalt 1 ja 2, ma olen läheb läbida 123 ja 127. Ja ma nüüd panen need sees Selle kasti, eks? Nii et must kast moodustab nüüd swap funktsiooni. Vahepeal teeme nüüd on keegi rakendada swap funktsiooni. Kas keegi siin meeldib töötada vabatahtlikuna? Tule üles. Mis su nimi on? Charlie. Olgu, Charlie. Tule üles. Nii Charlie läheb mängima rolli meie must kast. Ja Charlie, mida ma tahan, et sa teeksid nüüd on rakendada swap selliselt , et arvestades nende kahe aadressid, sa olid tegelikult toimub Väärtuste muutmiseks. Ja ma sosistada kõrva kuidas juhtida teleri siin. Nii et laske käia, ja sa oled must kast. Jõuda sinna. Mis väärtused näete, ja mis väärtused näete b? Charlie on 123 ja b on 127. DAVID Malan: OK, täpselt. Nüüd peatume seal hetkeks. Esimene asi, mida sa nüüd tegema hakkad, vastavalt kood - mis Ma nüüd tõmba ekraanil - saab olema eraldada vähe natuke mälu nimega temp. Nii et ma lähen edasi minna ja teile, et mälu. Nii et see saab olema kolmanda muutuja et teil on kättesaadav helistasite temp. Ja mida te kavatsete kirjutada on temp paberile? CHARLIE: lähtekohad, eks? DAVID Malan: OK, hästi ei tingimata suunanäitajaks. Nii rida koodi, mis ma olen märgituna löögile, Alustame siis. Ta ütleb täht. Nii on praegu ladustamiseks number 123. Ja just intuitiivselt, mida ei star 123 tähendab? Aga just, kui on 123, star tähendab mida? Väärtus. Või rohkem juhuslikult, sinna minna. Nii et lubage mul ettepanek, et kellel on oma käsi, et edasi minna ja ravida, et nii nagu see on kaardil. Ja käige ise üle arvuti mälu ja leida meile, mis on Kohapeal 123. Täpselt. Nii näeme saabus 123 on see, mida ilmselt? OK, nii et mida väärtus nüüd on teil kavatse panna temp? Täpselt. Nii et laske käia ja teha. Ja kirjutage number 1 tükk paber, mis on praegu nimega temp. Ja nüüd järgmine samm, et sa lähed, et rakendada saab olema, mida. Noh, paremal küljel Järgmine rida koodi on täht b. b, ja Loomulikult salvestab aadress. See käsitleb 127. Star b tähendab mida, juhuslikult rääkida? Mine sellesse asukohta. Nii et laske käia ja leida meile, mida on Kohapeal 127. OK. Muidugi, asukoht 127, on ikka väärtus 2. Mida sa nüüd poe kõike, mis on asukohale? Nii star abil minge asukohta. Mis on asukoht? Täpselt. Nüüd, kui soovite muuta Mis selles kohas - Ma minna ja joosta kustutuskumm siin. Ja nüüd pane see tagasi pintsliga. Mis number sa lähed kirjutada selles tühi kast nüüd? Täpselt. Nii et see rida koodi, et oleks selge - las mind mõtlema, mida Charlie teed ja siinkohal tähelepanu, mida ta on teinud hiljuti on kirjuta sinna kasti asukohta 123 väärtust, mis oli varem kell b. Ja nii oleme nüüdseks küll see teine ​​rida koodi. Nüüd kahjuks pole veel üks rida jäänud. Nüüd sellest, mis on temp, sõna otseses mõttes? See on ilmselt number üks. See pole aadressi. See on lihtsalt number, omamoodi muutuja nädal üks. Ja nüüd, kui te ütlete täht b, mis tähendab, minge aadressile b, mis on Muidugi siin. Nii et kui teil seal - Ma lähen edasi ja kustutada, mis tegelikult seal - ja mida sa kavatsen kirjutada praegu asukohas 127? CHARLIE: Temp, mis on üks. DAVID Malan: Temp, mis on üks. Ja mis juhtub temp lõpuks? Noh, me tegelikult ei tea. Me tõesti ei hooli. Iga kord, kui me oleme rakendanud funktsioon Siiani kõik kohalikud muutujad, mida on tõepoolest kohalikud. Ja nad lihtsalt kaovad. Nad taastatud tegutsevalt süsteem lõpuks. Nii, et temp veel väärtus 1 on justkui fundamentaalselt ebahuvitav meile. Olgu, aplaus kui saaksime Charlie. Väga hästi tehtud. Olgu, mida enam ei see tähendab, et me saame teha? Nii selgub, et me oleme olnud ütlen mõne valge valesid juba mõnda aega. Tõepoolest, selgub, et string, kõik see aeg, ei ole tegelikult märgijada iseenesest. See liik on see, et intuitiivselt. Aga tehniliselt rääkides string andmetüüp, mis me kuulutasime sees CS50 raamatukogu lihtsustada maailma esimese paari nädala klassis. Mis string tõesti on aadress on märk kuskil RAM. String on tegelikult number, nagu 123 või 127, mis juhtub piiritlevad kus string algab arvuti mällu. Aga see ei esinda string iseenesest ise. Ja me näeme seda järgmiselt. Lubage mul minna ja avada mõned kood, mis on vahel Tänapäeva lähtekoodi näiteid. Ja ma lähen edasi minna ja avada up, oletame, võrrelda-0.c. See on lollakas programmi, mis läheb rakendatakse järgmiselt. Esimene. Ma lähen ütlen midagi. Siis ma lähen edasi minna ja saada string kasutaja aastal, et järgmisel real. Siis ma lähen ütlen seda uuesti. Siis ma lähen teise string kasutaja. Ja teate, ma olen näidates üks stringid muutuja nimega s ja teine ​​neist stringid aastal muutuja nimega t. Ja nüüd ma lähen väidavad, väga põhjendatult, et kui s võrdub võrdub t, stringid on ühesugused. Kirjutad sama asi. Else, stringid on ei ole sama asi. Lõppude lõpuks, kui me sisestada kaks ints kaks tähemärki, mõlemad ujukid, kaks kahekohalist, ükskõik andmetüübid oleme rääkinud seni kuni neid võrrelda - mäletan tegime väga selgeks aega tagasi et te ei saa seda teha, sest ühe võrdusmärk on muidugi omistamisoperaatorile. Nii et oleks viga. Me kasutame võrdne võrdusmärk, mis tõepoolest võrdleb asjad tõelise võrdsuse. Aga ma väita, et see on lollakas. Kui ma edasi minna ja teha võrrelda null, ja siis ei dot kaldkriipsuga võrrelda null. Ja ma kirjutada, ütleme tere. Ja siis ütleme tere jälle. Sõna-sõnalt sama asi, arvuti väidete ma kirjutada erinevaid asju. Nüüd võib-olla ma lihtsalt valesti kirjutatud midagi. Ma kirjuta mu nimi seekord. Ma mõtlen, tere. Tere. See on erinev iga kord. Noh, miks see nii on? Mis tegelikult toimub all kapuuts? Noh, mis tegelikult toimub all kapuuts on stringi siis Ma kirjutada, et esimest korda näiteks on sõna, tere, muidugi. Aga kui me esindame seda all kapuuts, meelde tuletada, et string on massiiv. Ja me oleme öelnud nii palju kui varem. Nii et kui ma joonistan selle massiivi nagu see, ma olen läheb esindama midagi täiesti sarnane sellele, mida me tegime hetk tagasi. Ja seal on tegelikult midagi eriline ka siin. Mida me teeme kindlaks, oli aasta lõpus iga string? Jah, see Kenoviiva null, mis on just nii, esindavad, sõna-sõnalt, 00000000. Kaheksa 0 bitti järjest. Ma ei tea, ausalt, Mis pärast seda. See on lihtsalt hunnik rohkem RAM sees minu arvuti. Aga see on massiiv. Rääkisime massiivid enne. Ja me tavaliselt räägime massiivid nagu oleks asukoha null, siis üks, siis kaks. Aga see on lihtsalt mugavamaks. Ja see on täiesti suhteline. Kui sa tegelikult saada mälu arvuti, see on muidugi iga 2000000000 mõned kummalised baite potentsiaalselt. Nii et tõesti alla kapuuts, Kogu selle aja, jah. See võib väga hästi olla sulg null. Aga kui sa kaevama veelgi sügavamale all kapuuts, mis on tõesti tegeleda number 123. See on aadress 124. See on aadress 125. Ja ma ei keera seekord. Need on nüüd üks baiti peale, mis põhjusel? Kui suur on char? Char on üks bait. Int on tavaliselt neli baiti. Nii et miks ma tegin seda 123, 127, 131 ja nii edasi. Nüüd ma saan hoida matemaatika lihtsam ja just seda pluss 1. Ja see on nüüd see, mis tegelikult toimub on alla kapuuts. Nii et kui te kuulutada midagi sellist, string s, see on tegelikult - Selgub - char star. Star muidugi tähendab, aadress, aka pointer. Nii et see on aadress, midagi. Mis on see aadress? Noh - Ma olen ainus, kes näeb väga Oluline Ma teen, või arvate, et Ma teen. Nii string - Kurb on see, et mul on monitor seal, kus ma oleks seda näinud. Olgu, nii string s on see, mida Kuulutasin ma varem. Aga selgub, tänu vähe magic CS50 raamatukogu, kõik see aeg string on sõna otseses mõttes olnud char star. Star jälle tähendab osuti või aadress. Asjaolu, et see on kõrval- sõna char tähendab see aadress iseloomu. Nii et kui saad string nimetatakse, ja writing H-E-L-L-O, ettepaneku nüüd see, mis on saada string sõna otseses mõttes on tagasi kõik Sel ajal, kuigi oleme üsna lihtsustatult maailmas? Mis saada string tegelikult tagastama selle tagastatav väärtus? 123 Käesolevas asjas, näiteks. Me oleme varem öelnud, et saada string lihtsalt tagastab stringi, jada tähemärki. Aga see on natuke valge vale. Viis saada string tõesti toimib all kapuuts on see läheb string kasutaja. See puudutab pinda märkide ta tüüpi mälu. See asetab längkriipsu null lõpus nende märgijada. Aga mida ei saa string sõna otseses mõttes tagasi? Ta sõna otseses mõttes tagastab aadress Kõige esimene baiti RAM, et seda kasutatakse, et jõudu. Ja selgub, et lihtsalt tagastades ühe aadressi esimene märk string, mis on piisav selleks, et kogu string. Teisisõnu, saada string ei ole tagasi 123 ja 124 ja 125. See ei ole mulle pikk nimekirja kõikide baitide et minu string kasutades. Sest üks, nad kõik tagasi tagasi. Ja kaks, mis põhineb esimesel aadress, ma saate aru saada, kus string lõpeb. Kuidas? Eriline null iseloomu, Längkriipsu null lõpus. Nii teisisõnu, kui te kaotate umbes - sees muutujate - aadress char ja sa endale et lõpus iga string, iga märgijada nagu meie, inimesed mõtle stringid, kui eeldada, et aasta lõpus selline string seal längkriipsu null, sa oled kuldne. Sest sa võid alati leida lõpuks string. Nüüd sellest, mis on tõesti siis läheb on see programm? Miks on see programm, võrrelda-0.c, lollakas? Mida on tegelikult võrreldes? Jah? Õpilane: [kuuldamatu]. DAVID Malan: Täpselt. See võrdleb asukohad on stringid. Nii et kui kasutaja on trükitud tere kord, nagu mina tegin, mälu sattuda niimoodi välja. Kui kasutaja seejärel liigid tere jälle, kuid helistades saada stringi, c on ei ole eriti tark, kui sa õpetada see oleks tark kirjutada koodi. C - ja arvutid üldisemalt - kui sa kirjutad sõna tere jälle, sa tead, mida sa hakka. Sa lihtsalt hakka teise massiivi mälu, et jah, juhtub olema ladustamiseks H-E-L-L-O ja nii edasi. Ta läheb otsima sama meile inimesi, kuid see aadress ei pruugi olla 123. See võib just nii juhtuda, et operatsioonisüsteem on mõned saadaval ruumi näiteks kell location - ütleme midagi meelevaldne, nagu see on asukohast 200. Ja see on asukohast 201. Ja see on asukohast 202. Me ei tea, kus see on saab olema mälus. Aga mida see tähendab, et see, mida on kavatse hoida lõppkokkuvõttes s? Number 123. Mis saab olema salvestatud t, selles meelevaldne näide? Number 200. Ja kõik see tähendab, siis on ilmselt 123 ei võrdu 200. Ja nii see, kui tingimus ei TRUE. Sest get string kasutades erinevaid tükkideks mälu iga kord. Nüüd me näeme seda jälle Teises näites. Lubage mul minna ja avada copy-0.c. Väidan, et see näide ei kavatse proovida - aga ei - teost kopeerida kaks stringi järgmiselt. Ma lähen midagi öelda kasutaja. Ma siis hakka string ja nimetame seda s. Ja nüüd, ma teen seda kontrolli siin. Me mainis seda aega tagasi. Aga kui võid saada string tagasi null, teine ​​eripära või spetsiaalsed sümbol oletame. Kui see on mälu. Näiteks, kui kasutaja ei ole tegelikult on raske ja liigid jõle märkide arv on klaviatuur ja hits Enter. Kui see arv märke lihtsalt ei saa mahtuda RAM mingil hull põhjus, samuti saada string võib väga hästi tagasi null. Või kui teie programm ise on teinud palju muid asju ja seal on lihtsalt ei piisa mälu get string õnnestub, võib see lõpuks üles tagasi null. Aga olgem täpsemad et mis see on. Mis on s andmete tüüp tõesti? Char star. Nii selgub nüüd saame koor tagasi kiht null. Selgub, null on - jah, loomulikult eriline sümbol. Aga milline on see tõesti? Tõesti, null on lihtsalt sümbol, mida me inimestel kasutada esindama null samuti. Nii autorite C ja arvutid üldisemalt otsustas aastat tagasi , et sa tead, mis. Miks me ei võiks tagada, et ükski kasutaja andmed on kunagi, kunagi, kunagi säilitatakse bye null? Isegi minu meelevaldne näide enne, ma ei hakanud numeratsiooni bytes null. Hakkasin üks. Sest ma teadsin, et inimesed maailmas on otsustanud endale null bait kellegi RAM midagi erilist. Põhjus on selles, millal soovite märku, et midagi on valesti läinud seoses aadresse, siis tagastatakse null - muidu tuntud zero - ja kuna sa tead, et ei ole legit andmed aadressil null, selgelt see tähendab, et viga. Ja sellepärast me, kokkuleppeliselt, kontrollige for null ja tagasi midagi nagu üks juhtudel. Nii et kui me keri nüüd, see on lihtsalt siis mõned vigade kontrolli igaks juhuks Midagi läks valesti [? päästmiseks?] kokku ja sulgege programm tagastades varakult. See rida nüüd saab ümber kui see, mis tähendab mida? Vasakul pool, anna mulle veel kursor iseloomu, ja nimetame seda t. Mida ma ladustamiseks sees t, mis põhineb see üks rida koodi? Ma ladustamiseks asukohta. Täpsemalt asukoha mis oli s. Nii et kui kasutaja on trükitud tere, ja et esimene tere juhtub lõpuks siin, siis number 123 on tulemas tagasi saada nöörid ja säilitatakse - nagu me varem ütles - s. Kui ma nüüd deklareerima teine ​​kursor char ja nimetame seda t, mis number on sõna otseses mõttes läheb sattuda t vastavalt lugu? Nii 123. Nii tehniliselt nüüd nii s ja t on suunatud täpset sama tükkideks mälu. Nii teate, mida ma lähen tegema nüüd tõestada, et see programm on vigane. Esiteks ma väita, koos print f, ära koopia string. Siis ma lähen teen natuke Vigade kontrollimine. Ma lähen veenduda. Teeme kindlaks, et string t on vähemalt on suurem kui null, mille pikkus nii on mingi tegelane seal tegelikult kasu. Ja siis võiks meenutada seda Eelmiste näidetega. 2 ülemine - mis on ctype.h faili. T sulg null annab mulle null iseloomu string t. Ja 2 ülemine sama väärtus, ning Muidugi muudab see suureks. Nii intuitiivselt, see esile rida kood on ära esimene kirja t. Aga see ei ole ära, intuitiivselt, Esimene täht s. Aga kui sa oled mõtlemine, mida ma olen kohta, et näha, kui ma saan selle programmi ja välja printida nii originaal, s ja nn koopia, t? Nad tegelikult saab olema sama. Ja miks nad saab olema sama? Nad mõlemad osutades täpselt sama asi. Teeme seda. Tee koopia null. Ta koostab OK. Lubage mul joosta koopia null. Las ma kirjuta midagi tere kõik väiketähed siis Enter. Ja ta väidab, et nii esialgne s ja koopia on tõepoolest identsed. Mis siis tegelikult juhtus? Lubage mul tõmmata see pilt lihtsalt öelda lugu veidi teistmoodi. Mis tegelikult toimub all hood, kui ma kuulutada midagi char start s või string s, Saan pointer - mis juhtub olema neli baiti aastal CS50 seade ja palju arvuteid. Ja ma lähen kutsun seda s. Ja see on praegu mõne tundmatu väärtus. Kui deklareerida muutuja, kui te ise panna raha sinna, kes teab, mis seal on. See võib olla mõne juhusliku jada bits eelmisest täitmine. Nii et kui ma, minu rida koodi ei saada string, ja siis hoidke tagasi väärtus s saada string kuidagi - ja me lõpuks koor tagasi kuidas saada string teoste kuidagi eraldab massiivi tõenäoliselt välja natuke nagu see. H-E-L-L-O, Kenoviiva null. Oletame, et see on aadress 123 lihtsalt esimene järjepidevus. Nii et saada string naaseb, on esile rida olemas, siis tagastab number ütlesime, 123. Mis siis tegelikult läheb sees on siin? Noh, mis tõesti läheb sees s on 123. Aga ausalt, ma saan veidi segaduses kõik need aadressid, kõik need meelevaldsed numbrid. 123, 124, 127. Teeme tegelikult lihtsustada maailma natuke. Kui me räägime suunanäitajaks, öeldes, et meile inimestele, kes kuradit see huvitab, kus asjad on mälu? See on täiesti meelevaldne. See läheb sõltub sellest, kuidas palju RAM'i kasutaja. See hakkab sõltuma kui päeval sa käivitada programmi ehk ja mida sisend kasutaja annab. Oleme eluruumi ebaolulised detailid. Niisiis olgem abstraktne ära ja öelda, et kui sa jooksed koodirida niimoodi, char täht s saab tagasi väärtus get string. Miks me ei võiks selle asemel lihtsalt teha, mida me hoida helistades osuti nii, nagu see on juhtides midagi? Nii et ma väita, et nüüd, s up seal on viit - all kapuuts see aadress. Aga see on lihtsalt osutades esimene bait string, mis on tagastatud. Kui ma nüüd naasta kood siia mis toimub selles rida? Noh, selles märgitud rea nüüd, Teatan ilmselt teine muutuja nimega t. Aga see on ka osuti, nii et ma lähen juhtida seda teoreetiliselt täpne sama suur kast. Ja ma lähen kutsun seda t. Ja nüüd, kui me tagasi minna kood uuesti kui ma salvestada s sees t, mida ma olen tehniliselt pannes sees t? Noh tehniliselt see oli number 123. Nii et tõesti ma tuleks kirjalikult number 123 seal. Aga võtame seda kõrgemal tasemel. t, kui see on lihtsalt pointer, intuitiivselt, on just nii. See on kõik, mis on salvestatakse sinna. Nüüd viimase huvitav read koodi, kui ma tegelikult minna ära null iseloomu t, mis toimub? Noh, t sulg null on nüüd suunatud mis märk, arvatavasti? See osutab, et h. Kuna t sulg null - mäletan, et see on vana süntaks. t sulg null tähendab lihtsalt, kui t on string, t sulg null tähendab saada null märk, et jõudu. Niisiis, mida see tegelikult tähendab on minna seda massiivi - ja jah, see võib olla 123, see võiks olla 124. Aga see kõik on suhteline, mäletan. Kui räägime array oleme ära räägi suhteline indekseid. Ja nüüd me lihtsalt eeldada, et t sulg null on h. Nii et kui ma kutsun 2 ülemine see, mis see on tegelikult teeme, on ära väiketähed h suureks H. Aga muidugi, mis on s? See osutab, et sama darn string. Nii et see on kõik, mis on juhtunud Selles kood siiani. Nii et mis siis tähendas? Kuidas me kindlaks need kaks probleemi? Kuidas võrrelda tegelik stringid? Noh intuitiivselt, kuidas oleks te lähete võrrelda kahe stringid tõelist võrdsust? Mis see tähendab, kui kaks stringid on võrdsed? Ilmselgelt ei ole, et nende aadressid on võrdne mälu, sest see on madal tasandil rakendamise üksikasju. Kõik tegelased on samad. Nii et lubage mul pakkuda, ja lubage mul tutvustada versioonis üks compare.c siin, nii et võrrelda-1.c. Lubage mul ettepanek, et me ikka pointer nimega s ning kaupluse see tagastatav väärtus get string. Teeme sama asja t. Seega ükski kood on erinev. Ma lähen lisada natuke rohkem veakontrollifunktsioon nüüd. Nüüd, et me oleme omamoodi koorimine tagasi see kihtidesse CS50 mida string tegelikult on, peame olema rohkem anal hoolitsedes me ei kuritarvita kehtetu väärtused nagu null. Nii et ma lähen lihtsalt kontrollida. Kui te ei ole võrdne null ja t ei võrdne null, mis tähendab, et me oleme OK. Hangi string ei kägardama saada kas neid stringe. Ja sa võid olla arvan nüüd, mida ei STR CMP arvatavasti teha? String võrrelda. Nii et kui olete programmi java enne, see on nagu võrdne meetodi string klass. Aga neile, kes ei ole programmeeritud enne, see on lihtsalt c funktsioon. See juhtub, et tulla fail nimega string. See, kui see on deklareeritud. Ja string võrrelda - Ma tegelikult unustada selle kasutamine, kuid ei ole kunagi meeles, et. Tuletame meelde, et me saame teha mees, sega võrrelda. Ja see läheb üles tuua Linux programmeerijad kasutusjuhendi. Ja see on ausalt öeldes veidi segasena. Aga ma näen siin, et jah. Mul on lisada string. Ja ta ütleb, et siin all kirjeldus, " string Võrdlusfunktsioon võrdleb kaks stringi S1 ja S2. "Ja S1 ja S2 on ilmselt kaks argumentide sisse Ma tõesti ei mäleta, mida const on, kuid nüüd teate - ja olete näinud seda juba siis, kui olete kasutada man kui te on see kõik - et char täht on lihtsalt sünonüüm nööriga. Seega võrdleb kahe strings, S1 ja S2 ja tagastab täisarvu vähem kui või võrdne või suurem kui null kui S1 on leitud vastavalt olema väiksem või segu või olema suurem kui S2. See on lihtsalt väga keeruline viis öelda et string võrrelda tulu null, kui kaks stringi on intuitiivselt identsed, hieroglüüf tegelane iseloomu. Ta naaseb negatiivne, kui s, tähestikulises järjekorras, mis peaks tulema enne t. Või naaseb positiivne number, kui s peaks tulema pärast t tähestikulises järjekorras. Nii et see lihtne ülesanne, võiks te, näiteks järjestada terve hunnik sõnu? Nii selle uue versiooni, ma lähen minna ja teha compare1. Dot kaldkriipsuga võrrelda ühe. Ma kirjuta tere kõik väiketähed. Ma lähen kirjuta tere kõik väiketähed uuesti. Ja õnneks nüüd ta mõistab, Ma sisestasin sama asja. Vahepeal, kui ma kirjutada tere madalama puhul ja tere suur ja võrrelda neid, ma kirjutada erinevaid asju. Sest mitte ainult ei aadressid erinevad, kuid me võrrelda erinevaid märke ja jälle. Noh lähme ja määrata üks Teine probleem nüüd. Lubage mul avada versiooni üks koopia, mis nüüd käsitleb seda küsimust järgmiselt. Ja see läheb otsima veidi keerulisem. Aga kui sa arvad, mida probleemi me vaja lahendada, loodetavasti see olema selge hetk nüüd. Nii et see esimene liin, char start t, on üldarusaadavat mõttes võiks keegi teha ettepaneku mida see joon siin tähendab? Char täht t, mis see teeb? Hea. Loo kursor mõnele koht mällu. Ja lubage mul täpsustada seda natuke. Tuvastada muutuja, mis salvestab aadress mõned char mälu, lihtsalt olema veidi rohkem õige. OK, nüüd paremal pool, ma olen kunagi näinud üks neist funktsioonidest enne, malloc. Aga mida võiks tähendada? Jaotamine mälu. Mälu jaotus. Nii selgub, siiani oleme ei ole tõesti olnud võimas paludes operatsioonisüsteemi, anna mulle mällu. Pigem on meil funktsioon nimega malloc et just selline. Kuigi see on natuke häireta praegu märgata, et Kahe Sulgudes on lihtsalt saab olema number. Kus ma olen kirjutatud küsimus märgid võib olla mitmeid. Ja see number tähendab, anna mulle 10 baiti. Anna mulle 20 baiti. Anna mulle 100 baiti. Ja malloc teeme oma parima, et küsida operatsioonisüsteemi - Linux, käesoleval juhul - hei, on oma 100 baiti RAM saadaval? Kui jah, siis tagastab need baidid mulle tagasi mille aadress on need baiti, ehk? Kõige esimene. Nii ka siin - ja see on peamine C, iga kord, kui sa oled tegelevad aadresse? Sa peaaegu alati tegemist Esimene selline aadress, ükskõik kui suur tüki mälu teid on kätega tagasi, nii rääkida. Niisiis olgem sukelduda siin. Püüan jaotada kuidas palju baite, täpselt? Noh. String pikkusega s - olgem teha konkreetne näide. Kui te ei tere, H-E-L-L-O, mis on string pikkusega s, ilmselt? Nii et see on viis. Aga ma teen pluss 1 on, et miks? Miks ma tahan kuus baiti asemel viis? Null iseloomu. Ma ei taha jätta välja käesoleva eriline null iseloomu. Sest kui ma teen koopia Tere ja lihtsalt teha H-E-L-L-O, aga ma ei pane et erimärgi arvuti ei pruugi olla juhus, längkriipsu null minu jaoks olemas. Ja nii kui ma üritan nuputada pikkus koopia, ma võiks arvata, et see on 20 tähemärki või miljon märki, kui ma just ei juhtu lüüa längkriipsu null. Seega on meil vaja kuus baiti salvestada H-E-L-L-O, Kenoviiva null. Ja siis on see lihtsalt olema super anal. Oletame, et ma unustan, mida suurus char on. Me ütleme, et on üks bait. Ja see tavaliselt on. Teoreetiliselt võiks see olla midagi erinevad, on erinevad või Mac erinevate PC. Nii selgub seal selle korraldaja nimetatakse sizeof et kui te kaotate seda nimi andmetüüp - nagu char või int või veepinnal - see ütleb teile, dünaamiliselt, kuidas paljud baiti char kulub selle konkreetse arvutiga. Nii et see on tegelikult lihtsalt nagu öelda korda 1 või korda midagi. Aga ma teen seda ainult selleks, et olla super anal, et igaks juhuks char erineb arvuti versus minu, nii matemaatika alati saab kontrollida. Lõpuks siia ma kontrollida null, mis on alati hea tava - jälle igal ajal me tegeleme suunanäitajaks. Kui malloc ei olnud võimeline andma mulle kuus bye'dest - mis on ebatõenäoline, kuid igaks juhuks - tagasi üks kohe. Ja nüüd, et edasi minna ja kopeerida string järgmiselt. Ja see on tuttav süntaks, kuigi erinev roll. Ma lähen edasi minna ja saada string pikkus s ja hoidke seda n. Ma siis lähen korrata alates i võrdub null kuni n, suurem või võrdne. Nii et iga iteratsiooni, panin nda iseloomu s-nda iseloomu t. Mis siis tegelikult toimub all kapuuts siin? Noh, kui see, näiteks, on s - ja mul on kirjutatud sõna H-E-L-L-O ja seal on längkriipsu null. Ja veel, see on s juhtides siin. Ja nüüd siin on t. Ja see on suunatud nüüd koopia mälu, eks? Malloc on andnud mulle terve tüki mälu. Ma ei tea, esialgu mis mõni neist kohtades. Nii et ma lähen mõtlema need on terve hunnik küsimärke. Aga niipea, kui ma hakkan silmukoiminen nullist püsti piki s, t sulg null ja t sulg 1 - ja ma panen selle nüüd on üldkulud - t sulg null ja s sulg null tähendab et ma lähen kopeerimine korduvalt h siin, E-L-L-O. Plus, sest ma tegin pluss 1 Kenoviiva null. Nüüd, kui tegemist on võrrelda-1.c, aasta lõpus, kui ma välja printida kapitaliseerimine t, me peaks näen, et te ei ole muutunud. Lubage mul minna nüüd ja seda teha. Nii et copy1. Dot kaldkriipsuga copy1. Ma lähen kirjuta tere, Enter. Ja nüüd teate, ainult koopia on kapitaliseeritud. Sest ma tõesti on kaks tükkideks mälu. Kahjuks saab teha päris halb ja päris ohtlik asjad siin. Las ma tõmba näiteks siin nüüd, mis annab meile näiteks mõne erinevates ridades. Nii lihtsalt intuitiivselt siin, esimene rida koodi, int täht x, kuulutab muutuja nimega x. Ja mis on andmetüüp Selle muutuja? Milline on andmete tüüpi muutuja? See ei olnud pinge. Andmetüüp on int star. Mida see tähendab? X hoidke aadress int. Nii lihtne see ongi. Y läheb hoidke aadress int. Mis on kolmas rida koodi seal teed? See eraldamise mitu baiti, kõige tõenäolisemalt? Neli. Kuna suurus int on tavaliselt neli malloc nelja annab mulle tagasi aadress tüki mälu, mis on esimene kelle baiti salvestatakse nüüd x. Nüüd liigume veidi kiiremini. Star x tähendab mida? See tähendab, minge sellele aadressile ja panna mida number on? Pane number 42 olemas. Star y tähendab minna mis on y ja pane number 13 olemas. Kuid oodake minut. Mis on y hetkel? Mis aadress on y ladustamiseks? Me ei tea, eks? Me ei ole kunagi kunagi kasutage loovutamine operaator kaasates y. Seega y deklareeritud teisel real kood on vaid mõned prügi väärtus, suur küsimärk nii rääkida. Võiks osutades juhuslikult midagi mällu, mis on üldiselt halb. Seega niipea, kui oleme tabanud, et liin on, star y võrdub 13, midagi halba, midagi väga halba on umbes juhtub Binky. Vaatame, mis läheb lõpuks juhtub binky siin minut või nii vaadata. [VIDEO PLAYBACK] -Hei, Binky. Ärka üles. See on aeg, pointer lõbus. -Mis see on? Lugege vihjeid? Oh, goodie. -Noh, alustada, ma arvan, et me oleme läheb vaja paar osuti. -OK. See kood eraldab kaks viiteid mis võib tuua täisarvud. -OK, hästi, ma näen kaks suunanäitajaks. Aga nad ei tundu olevat osutades midagi. -Just nii. Esialgu vihjeid ei käsk midagi. Asju, mida nad osutavad, nimetatakse pointees ja millega neid on eraldi samm. -Oh, jah, muidugi. Ma teadsin seda. Pointees eraldi. Niisiis, kuidas sa jaotada pointee? -OK. Noh, see kood eraldab uus täisarvud pointee ning see osa sätestatakse x juhtida seda. -Kuule, see tundub parem. Nii et see midagi. -OK. Ma endid kursor x salvestada number 42 sisse oma pointee. Sel trikk, ma vajan oma võlu võlukepp viite mahavõtmine. -Teie võlukeppi ning viite mahavõtmine? Uh, see on tore. -See on see kood välja näeb. Ma lihtsalt loodud number, ja - -Hei, vaata. Seal ta läheb. Seejuures endid on x järgmiselt nool juurdepääsu oma pointee. Sel juhul salvestada 42 sinna. Hei, proovige see salvestada number 13 läbi teise osuti, y. -OK. Ma lihtsalt minna üle siin y ja saada number 13 looma. Ja siis võtta võlukepp viite mahavõtmine ja lihtsalt - vau! -Oh, hei. See ei õnnestunud. Ütle, Binky, ma ei usu, viite mahavõtmine y on hea mõte, sest loomise pointee on eraldi samm. Ja ma ei usu, et me kunagi tegime seda. -Hmm. Hea punkt. -Jah, me eraldada kursor y. Aga me ei sea see osutada pointee. -Hmm. Väga tähelepanelik. -Hei, mida otsid hea on, Binky. Kas sa seda parandada nii, et y punktid sama pointee kui x? -Muidugi. Ma kasutan oma võlukeppi kohta pointer loovutamine. Kas see saab olema probleem nagu enne? -Ei. See ei puuduta pointees. See lihtsalt muudab üks pointer punkti sama asi nagu teine. -Oh, ma näen. Nüüd y osutab samas kohas kui x. Niisiis oota. Nüüd y on fikseeritud. See on pointee. Nii saad proovida võlukepp ning viite mahavõtmine uuesti saata 13 üle. -OK. Siin läheb. -Hei, vaata seda. Nüüd viite mahavõtmine töötab y. Ja kuna viiteid jagavad et üks pointee, nad nii näha 13. -Jah. Jagamine. Mida iganes. Nii me siis lüliti kohad nüüd? -Oh, vaata. Meil on aeg otsas. -Aga - -Pea meeles kolm pointer reegleid. Number üks, põhistruktuur on see, et teil on kursor. Ja see toob üle pointee. Aga osuti ja pointee eraldi. Ja ühine viga on loodud pointer, vaid unustage antud pointee. Number kaks, pointer viite mahavõtmine hakkab kell osuti ja järgib oma nool üle pääseda oma pointee. Nagu me kõik teame, see toimib ainult siis, kui on pointee, mis läheb tagasi reegel number üks. Number kolm, pointer loovutamine võtab üks osuti ja muutusi see käsk Samal pointee teise osuti. Nii pärast üleminekut, kaks lähtekohad viitavad samale pointee. Mõnikord nimetatakse jagamine. Ja see kõik on seda, tõesti. Bye bye nüüd. [END VIDEO PLAYBACK] DAVID Malan: Nii rohkem viiteid, rohkem Binky järgmisel nädalal. Näeme esmaspäeval.