[Muzikos grojimo] Doug LLOYD: Pointeriai, čia mes. Tai tikriausiai būti sunkiausia temą kad mes kalbėti apie CS50. O jei jūs skaitėte nieko apie rodykles Prieš jums gali būti šiek tiek bauginanti vyksta į šį vaizdo įrašą. Tai tiesa, kad patarimų Leidžiame jums galimybę kad galbūt susukti gana blogai, kai esate dirbant su kintamųjų ir duomenų, ir sukelia jūsų programa į avariją. Bet jie tikrai tikrai naudinga ir jie leidžia mums tikrai puikus būdas perduoti duomenis atgal ir atgal tarp funkcijų, kad mes kitaip negalime daryti. Ir taip, ko mes iš tikrųjų noriu padaryti čia yra traukinys jums turėti gerą rodyklė drausmę, todėl kad jūs galite naudoti patarimų efektyviai padaryti savo programas, kad daug geriau. Kaip jau sakiau patarimų mums kitoks būdas perduoti duomenis tarp funkcijų. Dabar, jei jūs prisimenate iš ankstesnė vaizdo, kai mes kalbame apie kintamasis apimtis, jau minėjau, kad visi duomenų, kad mes praeiti tarp funkcijos C yra perduodama pagal vertę. Ir aš negali būti naudojama, kad draugyste, ką aš ten reiškė buvo tai, kad mes perduodame kopijas duomenų. Kai mes pereiname kintamąjį funkcija, mes ne nevaikštant kintamąjį su funkcija, tiesa? Mes artimųjų kopiją , kad duomenys, su funkcija. Funkcija ką ji bus ir jis apskaičiuoja tam tikrą vertę, o gal mes naudojame šią vertę kai ji suteikia jį atgal. Ten buvo viena išimtis Ši taisyklė pravažiuojančių pagal vertę, ir mes grįžti į tai, kas, kad yra šiek tiek vėliau šį vaizdo įrašą. Jei mes naudojame patarimų, o ne naudojant kintamuosius, arba, o ne naudojant kintamuosius patys ar jų kopijas kintamųjų, dabar mes galime perduoti kintamuosius aplink tarp funkcijų kitokiu būdu. Tai reiškia, kad jei mes darome vienų funkcijos pokyčiai, kad pokyčiai bus iš tikrųjų imtis nesukeliantį kitokia funkcija. Vėlgi, tai yra kažkas, kad mes negalėjome padaryti anksčiau, ir jei jūs kada nors bandė apsikeitimo vertės dviejų kintamųjų funkcijos, jūs pastebėjote šią problemą rūšiuoti šliaužti aukštyn, tiesa? Jei norime apsikeitimo X ir Y, ir mes perduoti juos į funkciją, vadinamą apsikeitimo, viduje funkcija apsikeitimo kintamieji padaryti keitimo vertybes. Vienas tampa du, du tampa vienas, bet mes ne iš tikrųjų nieko keisti originalo funkcija, į skambintojui. Nes mes negalime, mes tik dirbti su jų kopijas. Su rodyklėmis, nors mes galime iš tikrųjų perduoti X ir Y yra funkcija. Ši funkcija gali padaryti kažkas su jais. Ir tie kintamieji dydžiai realiai gali pasikeisti. Taigi, kad gana pasikeitimas Mūsų gebėjimas dirbti su duomenimis. Prieš mes pasinerti į patarimų, aš manau, kad verta atsižvelgiant keletą minučių grįžti prie pagrindai čia. Ir turėti ne kaip atrodo kompiuterio atmintyje darbai nes šie du dalykai vyksta kad iš tikrųjų gana tarpusavyje. Kaip Jūs tikriausiai žinote, Jūsų kompiuterinės sistemos turite kietąjį diską arba gal kietojo disko, kai byla saugojimo vietą rūšiuoti. Tai paprastai kažkur kaimynystės 250 gigabaitų kad gal iš terabaitų pora dabar. Ir tai kur visi jūsų failai galiausiai gyventi, net tada, kai kompiuteris yra išjungtas išjungti, galite pasukti jį atgal ir jūs rasite savo failus ten vėl, kai jūs iš naujo paleisti sistemą. Bet diskai, pavyzdžiui, kietajame diske HDD arba kietojo disko, SSD, yra tik sandėliavimo patalpas. Mes negalime iš tikrųjų nieko daryti su duomenys, kurie yra kietajame diske, arba kietojo disko. Tam, kad iš tikrųjų pakeisti duomenys arba perkelti jį aplink, mes turime perkelti jį į RAM, laisvosios kreipties atminties. Dabar RAM, jūs turite daug mažiau jūsų kompiuteryje. Jums gali tekti kažkur kaimynystės 512 megabaitų jei turite seną kompiuterį, į gal dviejų, keturių, aštuonių, 16, galbūt net šiek tiek daugiau, GB RAM. Taigi, kad daug mažesnė, bet tai kur visi iš lakiųjų duomenų egzistuoja. Štai kur mes galime pakeisti dalykus. Bet kai mes savo ruožtu mūsų kompiuterį išjungti, visi RAM duomenimis yra sunaikinta. Štai kodėl mes turime turėti kietąjį diską už daugiau nuolatinę vietą jo, taip, kad jis exists- jis būtų tikrai blogai, jei kiekvieną kartą mes Paaiškėjo mūsų kompiuterį išjungti, kiekvienas failas mūsų sistemoje buvo atšauktas. Taigi mes dirbame viduje RAM. Ir kiekvieną kartą, kai mes kalbame apie atmintis, gana daug, kad CS50, mes kalbame apie RAM, o ne kietajame diske. Taigi, kai mes perkelti daiktus į atmintį, ji užima tam tikrą erdvę. Visi duomenų tipų, kad mes dirbame su imtis skiriasi sumos erdvės RAM. Taigi kiekvieną kartą, kai kuriate sveikasis skaičius kintamasis keturių baitų atminties yra atidėta RAM todėl jūs gali dirbti su tuo sveikojo skaičiaus. Jūs galite paskelbti sveikasis skaičius, jį pakeisti, ją priskirti kad vertė 10 tingų viena, taip toliau ir taip toliau. Visa tai turi atsitikti RAM ir gausite keturi baitai dirbti su už kiekvieną sveikasis skaičius, kad jūs sukuriate. Kiekvienas simbolis sukurti gauna vieną baitą. Tai tiesiog, kiek vietos yra reikia saugoti charakterį. Kiekvienas plūdė, nekilnojamojo skaičius, gauna keturi baitai nebent tai dvigubas tikslumo slankaus kablelio skaičius, kuris leidžia jums tikslesnes ar daugiau skaitmenų po kablelio neprarandant tikslumo, kuri užima aštuonis baitųatminties. Long long, tikrai dideli sveikieji skaičiai, Taip pat užtrukti iki aštuonių baitų atminties. Kiek baitų atminties do įsipareigojimų imtis? Na tegul įdėti kaištį šį klausimą dabar, bet mes grįžti į ją. Taigi, atgal į šį atminties idėja kaip didelis masyvas baitų dydžio ląsteles. Tai tikrai viskas yra, tai tik didžiulis masyvas ląstelių, kaip bet kuris kitas masyvo, kad esate susipažinę su ir pamatyti, išskyrus kiekvieną elementą yra vienas baitas pločio. Ir kaip masyvą, kiekvienas elementas turi adresą. Kiekvienas elementas masyve turi indeksą, ir mes galima naudoti šio indekso padaryti vadinamieji laisvosios kreipties į masyvą. Neturime pradėti nuo masyvo pradžioje, kartoti per kiekvieną jo vienas elementas, rasti tai, ko mes ieškome. Galime tik pasakyti, noriu patekti į 15. elementas arba 100. elementas. Ir jūs galite tiesiog pereiti į šio skaičiaus ir gauti naudą jūs ieškote. Panašiai kiekvieną vietą atmintyje turi adresą. Taigi jūsų atminties galia atrodo kažkas panašaus į tai. Štai labai maža riekė atminties, tai yra 20 baitųatminties. Pirmieji 20 baitų, nes mano kreipiasi ten apačioje yra 0, 1, 2, 3, ir taip apie visą kelią iki 19. Ir kai aš pareiškiu rodiklius ir kai aš pradedu dirbti su jais, sistema vyksta nustatyti panaikinti kai man erdvė Šiame atminties dirbti su mano kintamųjų. Taigi, aš gali pasakyti, char c lygus kapitalą H. Ir kas nutiks? Na sistema ketina atidėta man vieną baitą. Šiuo atveju ji nusprendė baitų skaičių keturių, The adresu keturių baitų, ir jis ketina laikyti laiškas kapitalas O ten man. Jei aš tada sako int greitį riba lygi 65, tai ketina atidėti keturių baitųatminties už mane. Ir tai vyksta gydyti tiems keturių baitų kaip vieną vienetą nes tai, ką mes dirbame su yra sveikas skaičius, čia. Ir tai vyksta iki 65 laikyti ten. Dabar jau aš rūšies sakau jums melą tiek, teisus, nes mes žinome, kad Kompiuteriai dirbti dvejetainiu. Jie nesupranta, nebūtinai ką kapitalo H arba kas 65 yra, jie tik suprasti dvejetainius, nulių ir. Ir taip faktiškai ką mes laikyti ten yra ne raidė H ir numeris 65, o veikiau dvejetainiai atstovybės dalį, kuri atrodo šiek tiek kažką panašaus į tai. Ir visų pirma kontekstas kintamąjį, jis nesiruošia tiesiog spjauti jį į, jis nesiruošia gydyti jį kaip vieną keturių baitas riekė nebūtinai, tai tikrai vyksta gydyti jį kaip keturis vienas baitas gabaliukus, kurios gali atrodyti kažką panašaus į tai. Ir net tai ne visiškai teisinga arba, nes kažkas vadinamas Baitų eiliškumas, kurį mes nesame ketina patekti į dabar, bet Jei įdomu apie, galite perskaityti apie mažai ir didelis Baitų eiliškumas. Tačiau dėl šio argumento dėlei, už šio vaizdo sumetimais, galime tik prielaidą, kad yra Faktas, kaip numeris 65 būtų būti atstovaujama atminties kiekvieną sistemą, nors tai nėra visiškai tiesa. Bet tegul iš tikrųjų tiesiog gauti visiškai atsikratyti visų dvejetainės, ir tiesiog galvoti apie kaip H ir 65, tai daug lengviau galvoti apie tai, kaip kad kaip žmogus. Visos teisės, todėl ji taip pat atrodo gal tiek atsitiktinai, kad I've- mano sistema nedavė man baitų 5, 6, 7, ir 8 saugoti sveiką skaičių. Yra Dėl šios priežasties, taip pat, kuris mes ne gauti į dabar, bet pakanka pasakyti, kad tai, ką kompiuteris yra čia darai tikriausiai geras žingsnis jos dalis. Norėdami nesuteikia man atmintį, kad yra nebūtinai nugara prie nugaros. Nors jis ketina tai padaryti dabar jei aš noriu gauti kitą eilutę, vadinamas pavardė, ir aš noriu įdėti Lloyd ten. Aš ruošiuosi reikia, kad tilptų vienas personažas, kiekvienas, kad laiškas yra ketina reikalauti vieną simbolių, vienas baitas atmintį. Taigi, jei galėčiau įdėti Lloyd į mano masyvo kaip tai aš esu gana gera eiti, tiesa? Ko trūksta? Atminkite, kad kiekvienas styginių mes dirbame In C baigiasi backslash nulis, ir mes negalime praleisti, kad čia, arba. Mums reikia atidėti vieną baitą atminties konstatuotina, kad todėl mes žinoti, kada mūsų styginių baigėsi. Taigi dar kartą ši tvarka kelio dalykų atsiras atminties galia būti šiek tiek atsitiktinai, bet ji iš tikrųjų yra, kaip Dauguma sistemų yra sukurta. Norėdami juos išsirikiuoti kartotiniai iš keturių, dėl priežasčių, vėl kad mes nereikia patekti į dabar. Bet tai, todėl pakanka pasakyti, kad Po šių trijų eilučių kodo, tai, kas atminties gali atrodyti. Jei man reikia atminties vietas 4, 8, 12 ir laikyti savo duomenis, Tai yra tai, ką mano atmintis gali atrodyti. Ir tik būti ypač pedantiškas čia, kai mes kalbame apie atminties adresai mes paprastai padaryti naudojant šešioliktainius pastabomis. Taigi, kodėl ne mes konvertuoti visus šiuos iš dešimtainės į šešioliktainį tik todėl, kad yra visuotinai kaip mes vadiname atmintį. Taigi užuot 0 per 19, ką mes turime, yra lygus nuliui x nulio nulio x1 trys. Tai yra 20 baitų atminties, kad mes yra ar mes ieškome šioje paveikslėlio Štai čia. Taigi visa tai, kas pasakyta, tegul žingsnį nuo atminties sekundę ir atgal į rodykles. Čia yra svarbiausia prisiminti kaip mes pradėti dirbti su rodyklėmis. Rodyklė nieko daugiau nei adresą. Pasakysiu dar kartą, nes tai, kad svarbu, rodyklė nieko daugiau nei adresą. Pointeriai yra adresai į vietas atmintyje, kur kintamieji gyventi. Žinant, kad jis tampa tikiuosi šiek tiek lengviau dirbti su jais. Kitas dalykas, man patinka reikia padaryti, tai turi rūšiuoti diagramas vizualiai atstovaujanti kas vyksta su įvairių linijų kodą. Ir mes tai pora daryti kartų į rodykles, ir kai mes kalbame apie dinamiška atminties paskirstymas, taip pat. Nes manau, kad šie diagramos gali būti ypač naudinga. Taigi, jei aš sakau, pavyzdžiui, int k mano kodas, kas vyksta? Na ką iš esmės vyksta yra Gaunu atidėtos man atmintį, bet nemanau net patinka galvoti apie tai, kaip, kad aš patinka galvoti apie tai, kaip dėžutėje. Turiu langelį ir tai spalvos žalia, nes aš galite įdėti sveikieji žalios dėžės. Jei tai buvo personažas man gali turėti mėlynas langelį. Bet aš visada sakau, jei aš sukurti dėžutė, kuri gali turėti skaičiais kad langelis spalvos žalia. Ir aš nuolatinį žymeklis ir aš rašyti k ant jo pusės. Taigi turiu langelį, pavadintą k į kurį galiu įdėti sveikieji skaičiai. Taigi, kai aš sakau, int k, tai tai, kas vyksta mano galvoje. Jei aš sakau K lygu penki, ką aš darau? Na, aš išleisti penki langelyje, į dešinę. Tai gana paprasta, jei Sakau int k sukurti langelį, pavadintą k. Jei aš sakau k yra lygus 5, įdėti penkių į baudos aikštelę. Tikimės, kad ne per daug šuolis. Štai kur viskas eiti šiek mažai įdomi, nors. Jei aš sakau int * pk, gerai, net jei aš neturiu žinote, kas tai būtinai reiškia, tai aiškiai kažką daryti su sveikojo skaičiaus. Taigi, aš ruošiuosi spalva šis langelis žalios ish, Aš žinau, tai turiu kažką daryti su sveikasis skaičius, bet tai ne pati sveikasis skaičius, nes tai int žvaigždė. Yra kažkas šiek tiek skiriasi apie tai. Taigi sveikas s dalyvauti, bet kitaip tai ne per daug skiriasi nuo ką mes kalbame apie. Tai dėžutė, jos gavo etiketę, jis dėvi etikečių PK, ir tai galima laikyti int žvaigždės, kokia tai yra. Jie turi kažką daryti su skaičiais, aiškiai. Štai paskutinė eilutė nors. Jei aš sakau PK = & K, Whoa, kas atsitiko, tiesa? Taigi, šis atsitiktinių skaičių, atrodytų, atsitiktinė skaičius, gauna išmesti į baudos aikštelę ten. Visa tai yra, yra Pk gauna K adresą. Taigi, aš klijuoti kur k gyvena atmintyje, jos adresas, jos baitų adresas. Viskas, ką aš darau yra aš sakau ši vertė yra tai, ką aš ruošiuosi įdėti viduje mano dėžutė vadinamas pk. Ir todėl, kad šie dalykai yra rodykles, ir todėl ieško ne kaip nulinės x eilutę aštuoni nulis c septyni keturi aštuonių du nulis tikriausiai nėra labai reikšmingas. Kai mes paprastai įsivaizduoti patarimų, mes iš tikrųjų taip rodykles. Pk suteikia mums informaciją turime rasti k atmintyje. Taigi, iš esmės PK turi jame rodyklę. Ir jei mes vaikščioti ilgis tos rodyklės, įsivaizduokite, tai ką jūs galite vaikščioti, jei mes vaikščioti palei rodyklės ilgį, pačiame Patarimas tos rodyklės, mes rasite atmintyje vietą kur k gyvena. Ir tai tikrai svarbu nes kai mes žinome, kur k gyvena, mes galime pradėti dirbti su duomenų viduje, kad atminties vietoje. Nors mes vis smulkutis šiek tiek prieš save dabar. Taigi, kas yra žymeklis? Rodyklė yra duomuo, kurio vertė yra atminties adresas. Tai buvo, kad nulio x aštuoni nulis stuff vyksta, tai buvo atminties adresas. Tai buvo atmintyje vietą. Ir rodyklė tipas aprašoma natūra Duomenų rasite kad atminties adresas. Taigi ten INT žvaigždutė dalis dešinę. Jei aš sekti, kad rodyklę, tai ketina veda mane į vietą. Ir tai vieta, ką aš ras ten mano Pavyzdžiui, yra žalia spalvos dėžutę. Tai sveikas, tai ką aš ras, jei aš einu į tą adresą. Duomenų tipas Kurių rodyklė aprašoma, kas rasite tuo atminties adresą. Taigi čia tikrai cool dalykas, nors. Pointeriai leidžia mums perduoti kintamieji tarp funkcijų. Ir iš tikrųjų perduoti kintamuosius ir neperduoda jų kopijas. Nes jei mes tiksliai žinoti, kur atmintyje rasti kintamąjį, mums nereikia padaryti kopiją tai, mes galime tiesiog eiti į tą vietą ir dirbti su šiuo kintamuoju. Taigi iš esmės rodyklės Rūšiuoti Make kompiuterinę aplinką daug kaip ir realiame pasaulyje, į dešinę. Taigi čia analogija. Tarkime, kad turiu nešiojamąjį kompiuterį, teisė, ir tai visiškai pastabose. Ir aš norėčiau, kad jūs ją atnaujinti. Jūs esate funkcija, kuri Atnaujinimai pastabos, į dešinę. Be to, kaip mes buvome darbo iki šiol, ką atsitinka, yra jums imtis savo nešiojamojo kompiuterio, jums eiti į kopijavimo parduotuvėje, jums padaryti Xerox kopiją kiekvienas Notepad puslapis. Jūs palikti savo nešiojamą kompiuterį atgal ant mano stalo, kai baigsite, jums eiti ir užbraukti dalykų mano Notepad, kad yra pasenę ar neteisinga, ir tada jums perduoti atgal į man Xerox puslapiuose kamino tai yra mano nešiojamojo kompiuterio replika su pakeitimai, kad jūs padaryti jį. Ir tuo momentu, tai pas mane taip vizitine funkcija, kaip skambinančiojo, nuspręsti imtis savo pastabas ir integruoti juos atgal į mano nešiojamojo kompiuterio. Taigi ten yra daug žingsnių čia dalyvauja, į dešinę. Kaip ar nebūtų geriau jei aš tiesiog pasakyti, ei, jūs galite atnaujinti savo Notepad man ranka jums mano nešiojamojo kompiuterio, ir jūs imtis dalykų ir tiesiog kirsti juos ir atnaujinti savo pastabas mano nešiojamojo kompiuterio. Ir tada man mano nešiojamojo kompiuterio atgal. Tai tipo kas rodyklės leidžia mums daryti, jie ši aplinka daug daugiau patinka, kaip mes dirbame iš tikrųjų. Visos teisės taip, kad tai, ką rodyklė yra, pakalbėkime apie tai, kaip patarimų dirbti C, o kaip mes galime pradėti su jais dirbti. Taigi ten labai paprasta žymeklis C vadinamas null žymeklį. Null rodyklė taškai nieko. Tai tikriausiai atrodo, kad tai iš tikrųjų nėra labai naudingas dalykas, bet kaip mes matome tiek vėliau, tai kad tai niekinis žymeklis egzistuoja tikrai tikrai gali praversti. Ir kiekvieną kartą, kai jums sukurti rodyklę ir jums nereikia nustatyti jo vertės immediately- AN nustatymo pavyzdys jo vertė iš karto bus pora skaidres atgal kur sakiau PK lygus & K, PK gauna K adresą, kaip matysime, ką tai reiškia, matysime, kaip kodas, kuris shortly- jei mes neturime nustatyti jo vertę kažką prasmingas iš karto, Jūs visada turėtų nustatyti savo žymiklį, kad rodytų į NULL. Turėtumėte nustatyti, kad jis rodytų į nieką. Tai labai skiriasi nuo tiesiog paliekant vertę, nes ji yra ir tada pareiškimu, žymeklis, ir tik darant prielaidą, tai niekinis, nes tai retai tiesa. Taigi jūs visada turėtų nustatyti iš rodyklė vertė nuliui, jei jūs neturite nustatyti jo vertę į kažką prasmingo nedelsiant. Galite patikrinti, ar rodyklė vertės yra niekinis naudojant lygybės operatorius (==), Kaip jūs palyginkite bet koks sveikasis skaičius vertės arba simbolių reikšmes (==) taip pat. Tai specialus tarsi konstanta Vertė, kurią galite naudoti norėdami išbandyti. Taigi, tai buvo labai paprastas žymeklis, null žymeklis. Kitas būdas sukurti rodyklė yra išgauti kintamosios adresas Jūs jau sukurta, ir tai padaryti naudojant ir operatorius adresas gavyba. Kuris mes jau matėme anksčiau pirmoje schema pavyzdyje parodžiau. Taigi, jei x yra kintamasis, kuriuo mes jau sukurta tipo sveikasis skaičius, tada ir x yra rodyklė į sveikojo skaičiaus. & x klausimus: pa- prisiminti, ir ketina išgauti iš dešinėje dalykas adresas. O kadangi rodyklė yra tik adresas, nei & x yra rodyklė į sveikasis skaičius kurių vertė yra kur atminties x gyvenimą. Tai x adresas. Taigi, & x yra x adresas. Paimkime vieną žingsnį toliau ir prisijungti prie kažko Aš užsiminiau ankstesniame vaizdo. Jei aranžuotė yra dviviečiai masyvas, tada & aranž kvadratinių laikiklis i rodyklė dvigubo. GERAI. ARR kvadratinių laikiklį Aš, kai ARR yra dviviečiai masyvas, tada ARR kvadratinių laikiklis i i-asis elementas tą masyvą, ir & ARR kvadratinių laikiklis i kur atminties i-tojo elemento ARR egzistuoja. Taigi, kas yra iškyla čia? Matricas pavadinimas, POVEIKIS visos šios dalykas, yra tai, kad masyvo vardas iš tikrųjų pati rodyklė. Jūs dirbu su rodyklėmis visi kartu kiekvieną kartą, kai jūs naudojote masyvą. Įsiminti iš Pavyzdžiui kintamojo taikymo sritį, netoli vaizdo aš pateikti pabaigos pavyzdys, kai mes turime funkciją vadinamas rinkinys int ir funkcija vadinama rinkinys masyvo. Ir jūsų uždavinys nustatyti, ar ne, arba, kas vertybės, kurias išspausdinti iš funkcijos pabaiga, ties pagrindinės programos pabaigoje. Jei prisimenate iš to Pavyzdžiui arba jei jūs stebėjo vaizdo įrašą, žinote, kad kai jums-į skambutį rinkinys int efektyviai nieko nedaro. Tačiau skambutis nustatyti masyvo daro. Ir aš tarsi glossed kodėl tai buvo tuo metu, atveju. Aš ką tik pasakė, gerai tai masyvas, tai ypatinga, žinote, ten yra priežastis. Taip yra todėl, kad matrica s vardas tikrai tik rodyklė, ir ten šis specialus kvadratinių laikiklis sintaksė, kad kad viskas daug gražiau dirbti. Ir jie ā idėją žymiklį daug mažiau bauginanti, ir tai, kodėl jie tarsi iš pateiktos tokiu būdu. Bet iš tikrųjų matricos yra tik rodyklės. Ir štai kodėl kai mes padarė Array kaita, kai mes išlaikė masyvą kaip parametras prie funkcijos arba kaip argumentas prie funkcijos, masyvo turinys iš tikrųjų pasikeitė tiek callee ir skambintojui. Kuris kiekvienam kitos rūšies kintamasis matėme buvo ne tas atvejis. Taigi, kad tiesiog kažkas palaikyti galvą, kai jūs dirbate su rodyklėmis, yra tai, kad vardas masyvas iš tikrųjų rodyklė į pirmojo elemento tos masyvo. Gerai, kad dabar mes turime visa tai faktai, tegul nesustoti, tiesa. Kodėl mums rūpi kur kažkas gyvena. Na kaip ir sakiau, tai gana Naudinga žinoti, jei kažkas gyvena todėl jūs galite eiti ten ir pakeiskite jį. Su juo dirbti ir faktiškai turi dalykas, kad jūs noriu padaryti, kad kintamasis įsigaliotų, o ne įsigalioti tam tikrą jo kopiją. Tai vadinama dereferencing. Mes einame į nuorodą ir mes pakeisti reikšmę ten. Taigi, jei mes turime žymeklį ir ji vadinama PC, ir ji nurodo pobūdžio, tada mes galime pasakyti * PC ir * PC yra pavadinimas, ką mes rasti, jei mes einame į adresų vnt. Ką mes surasime yra simbolis ir * PC, kaip mes vadiname tuos duomenis, kad Location. Taigi, mes galime pasakyti kažką panašaus * PC = D arba kažkas panašaus, ir tai reiškia, kad bet kokia buvo atminties adresą kompiuterio, kokia pobūdis anksčiau buvo ten, dabar D Jei sakytume * pc = D. Taigi čia mes einame vėl su kai keistai C dalykai, į dešinę. Taigi mes matėme * anksčiau kaip nors dalis duomenų tipą, ir dabar jis naudojamas šiek tiek kitoks kontekstas prieiti prie duomenų, esant vietą. Žinau, kad tai šiek tiek klaidina ir kad iš tikrųjų dalis šios visumos kaip, kodėl patarimų šią mitologiją aplink juos, kaip yra taip sudėtinga, rūšies sintaksės problemą, sąžiningai. Bet * yra naudojamas abiejų kontekste, tiek kaip dalis tipo pavadinimu, ir mes pamatyti šiek tiek vėliau kažkas, taip pat. Ir dabar yra dereference operatorius. Taigi jis eina į nuorodą, jis pasiekia duomenis tuo rodyklės vietą, ir leidžia manipuliuoti savo valia. Dabar tai yra labai panašios į apsilankymą savo artimą, į dešinę. Jei žinote, ką jūsų kaimynas gyvena, jūs ne hanging out su savo kaimyne. Jūs žinote, jūs atsitikti žinoti, kur jie gyvena, bet tai nereiškia, kad, kad iki dorybė turėti šias žinias Jūs bendrauja su jais. Jei norite bendrauti su jais, jūs turite eiti į savo namus, jūs turite eiti ten, kur jie gyvena. Ir, kai jūs padaryti, kad galite bendrauti su jais kaip jūs norėtumėte. Ir panašiai su kintamųjų, Jums reikia eiti į savo adresą jei norite bendrauti juos, galite ne tik žinoti adresą. Ir kaip jūs einate į adresą yra naudoti *, The dereference operatorių. Ką manote atsitinka jei mes pabandyti ir dereference rodyklė kurio vertė yra niekinis? Prisiminkite, kad null rodyklė nurodo nieko. Taigi, jei jūs bandote ir dereference nieko arba eikite į adresų nieką, Ką manote atsitiks? Na, jei jūs atspėjote segmentavimas kaltės, norite būti teisus. Jei bandysite ir dereference null žymeklis, sergate segmentaciją kaltės. Bet palaukite, Argi aš sakau, kad Jei esate nesiruošia nustatyti savo vertę jūsų žymiklį į kažką prasmingo, turėtumėte nustatytas nulis? Aš ir iš tikrųjų segmentavimas kaltė yra rūšies gerą elgesį. Ar jūs kada nors paskelbta kintamų ir nepriskirta savo vertę iš karto? Taigi jūs tiesiog pasakyti int x; jūs neturite iš tikrųjų ją priskirti prie nieko o vėliau ant jūsų kodas, atsispausdinti X vertę, turintys dar nėra priskirti ją prie nieko. Dažnai gausite nulis, bet kartais gali kažkiek atsitiktinių skaičių ir Jūs neturite idėjos, kur ji atėjo iš. Panašiai gali dalykus atsitikti su rodyklėmis. Kai paskelbti rodyklę tarpinis junginys * Pk pavyzdžiui, ir jums nereikia priskirti jį prie vertės, gausite keturi baitai atminties. Nepriklausomai nuo keturių baitų atminties sistema gali kad turi tam tikrą prasmingą reikšmę. Ir ten galėjo būti kažkas jau ten, kad nebereikalingas kita funkciją, todėl jums tereikia išlikusius duomenis ten buvo. Ką daryti, jei jūs bandėte daryti dereference kai adresą, kurį don't- ten buvo jau baitų ir informacija ten, tai dabar yra jūsų rodyklę. Jei bandysite ir dereference tą rodyklę, jums gali būti Messing su kai atminties kad jūs neketino kad netvarka su juo visus. Ir iš tiesų, galite tai padaryti kažkas tikrai sukrečiantys, kaip sulaužyti kitą programą, arba nutraukti kitą funkciją, ar kažką daryti kenksmingą kad Jūs neketino daryti ne visi. Ir taip, tai kodėl tai tikrai gera idėja nustatyti savo patarimų nuliui, jei jums nenustato juos kažką prasmingo. Tai turbūt geriau ne pabaigos šios dienos savo programą į avariją, tada ji daryti Kažkas, kad varžtai up kita programa ar kita funkcija. Tai elgesys yra turbūt net mažiau idealus ne tik kritimo. Ir taip, tai kodėl tai tikrai geras įprotis patekti į nustatyti savo patarimų nuliui, jei jūs neturite nustatyti juos į prasmingą vertės iš karto, tai yra, vertės, kad jūs žinote, ir kad jūs galite saugiai dereference. Taigi leiskite grįžti dabar ir pažvelgti į bendrą sintaksė situaciją. Jei aš sakau int * p ;, ką aš ką tik padariau? Ką aš padariau tai. Aš žinau, kad p reikšmė yra adresas nes visi rodyklės yra tik adresai. Galiu dereference p naudojant * operatorių. Šiame kontekste Čia, labai Top prisiminti ir * yra dalis tipo. Žiniasklaida * yra duomenų tipas. Bet galiu dereference p naudojant * operatorių, ir jei aš tai padaryti, jei aš einu į tą adresą, kas bus rasti šiuo adresu? Aš rasite sveikasis skaičius. Taigi int * p yra iš esmės sakydamas, p yra adresas. Galiu dereference p ir jei Darau, rasite sveikasis skaičius tuo atminties vietoje. Gerai, kad aš pasakiau buvo dar vienas erzina dalykas žvaigždės o čia kur, kad erzina dalykas, žvaigždės yra. Ar jūs kada nors bandė deklaruoti keli kintamieji tos pačios rūšies ant tos pačios eilutę kodo? Taigi per sekundę, apsimesti, kad linija, kodas Aš iš tikrųjų turi ten žalia ten nėra ir ji tiesiog teigia tarpinis junginys x, y, z ;. Ką tai galėtų padaryti, tai iš tikrųjų sukurti trys sveikieji kintamieji už jus, vienas vadinamas X, vienas vadinamas y ir vienas vadinamas z. Tai būdas tai padaryti be turintys padalinti į tris eilutes. Štai kur žvaigždės gauti erzina vėl, nors, nes * yra iš tikrųjų dalis Abu tipo pavadinimas ir dalis Kintamosios vardu. Ir todėl, jei aš sakau, int * px, py, pz, ką aš faktiškai gauti yra rodyklė į sveikojo skaičiaus vadinamas px ir du sveikieji skaičiai, PY ir pz. Ir tai turbūt ne ką mes norime, kad tai nėra gerai. Taigi, jei aš noriu sukurti keletą patarimų ant tos pačios linijos, tos pačios rūšies, ir žvaigždės, kas man iš tikrųjų reikia reikia padaryti, tai pasakyti int * PA, PB * * vnt. Dabar ką tik sakė, kad ir dabar sakau jums šį, jūs tikriausiai niekada tai padaryti. Ir tai tikriausiai geras dalykas sąžiningai, nes galite netyčia praleisti žvaigždė, kažką panašaus. Tai turbūt geriausia gal deklaruoti patarimų dėl atskirų linijų, bet tai tik dar vienas iš tų erzinančių sintaksę ką su žvaigždėmis, kad padaryti rodykles taip sunku dirbti. Nes tai kaip tik tai sintaksinis netvarka turite dirbti per. Su praktika ji tikrai tampa antra pobūdžio. Aš vis dar klystame su juo dar po programavimo 10 metų, todėl neturi būti nusiminusi, jei kas nors atsitiks jums, tai gana dažnas sąžiningai. Tai tikrai rūšies iš sintaksę trūkumas. Gerai, kad aš tipo pažadėjo kad mes naujo klausimas, kaip didelis sąvoka yra eilutė. Na, jei aš sakiau jums, kad eilutė, mes tikrai natūra buvo melas jums visą laiką. Nėra duomenų tipas vadinamas eilutė, ir iš tikrųjų aš minėta tai vienas iš mūsų Ankstyviausi video apie duomenų tipus, kad eilutė buvo duomenų tipas, buvo sukurta už jus CS50.h. Turite #include CS50.h siekiant jį naudoti. Na eilutė yra tikrai tik Prašymas kažką slapyvardis vadinamas char * A Rodyklė pobūdžio. Na patarimų, prisiminti, yra tik adresus. Taigi, kas yra dydis baitais eilutę? Na tai keturių arba aštuonių. Ir priežastis sakau keturis ar aštuoni, nes ji iš tikrųjų priklauso nuo sistemos, Jei naudojate CS50 IDE, char * yra char dydis * Yra aštuoni, tai 64 bitų sistemos. Kiekvienas atmintyje adresas yra 64 bitų ilgio. Jei naudojate prietaisą CS50 arba naudojant 32 bitų mašina, ir jūs girdėjote, kad terminas: 32-bitų mašina, kas yra 32 bitų mašina? Na tai tiesiog reiškia, kad kiekvienas adresas atmintyje yra 32 bitų ilgio. Ir taip 32 bitai yra keturi baitai. Taigi char * yra keturios ar aštuonios baitų, priklausomai nuo jūsų sistemos. Ir iš tiesų visi duomenų tipai, ir rodyklė į bet duomenų įrašykite, nes visi rodyklės yra tik adresai, keturi ar aštuoni baitai. Taigi leiskite peržiūrėti šį diagrama ir tegul sudaryti Šis vaizdo įrašas su truputį pasimankštinti čia. Taigi čia diagrama mes palikome ne su pačioje pradžioje vaizdo įrašo. Taigi, kas vyksta dabar, jei aš sakau * PK = 35? Taigi, ką tai reiškia, kai aš sakau, * PK = 35? Paimkite sekundę. * pk. Be konteksto čia * yra dereference operatorius. Taigi, kai dereference operatorius yra naudojamas, mes einame į adresų atkreipė dėmesį į PK, ir mes pakeisti tai, ką mes matome. Taigi * PK = 35 efektyviai daro tai paveikslėlyje. Taigi tai iš esmės sintaksiškai identiška pasakęs k = 35. Dar vienas. Jei aš sakau int m, sukurti naujas kintamasis vadinamas m. Nauja dėžutė, tai žalia dėžutė, nes jis ketina surengti sveikasis skaičius, ir jis ženklinamas m. Jei aš sakau m = 4, aš įdėti sveikasis skaičius į tą dėžutę. Jei tarkim PK = & M, kaip veikia Ši diagrama pokyčiai? PK = & M, tai jūs prisimenate ką & Operatorius daro arba yra vadinama? Atminkite, kad ir keletas kintamojo pavadinimą yra kintamojo vardas adresą. Taigi, ką mes pasakyti, PK gauna M adresą. Ir taip efektyviai, kas atsitiks Diagramoje yra tai, kad PK nebegalėsite taškų k, bet pažymi M. Vėlgi patarimų yra labai sudėtinga dirbti su ir jie imasi daug praktika, bet todėl, jų gebėjimas leidžia perduoti duomenis tarp funkcijų ir iš tikrųjų turi tie, pakeitimai įsigalios, gauti savo galvą aplink yra tikrai svarbu. Tai tikriausiai yra pats sudėtingiausias temą, mes aptarti CS50, bet vertė, kuri jus gauti iš naudojant rodykles gerokai viršija komplikacijų kad iš jų mokymasis. Taigi linkiu jums geriausias Sėkmės sužinoti apie rodykles. Aš Doug Lloyd, tai CS50.