1 00:00:00,000 --> 00:00:06,030 >> [Muzikos grojimo] 2 00:00:06,030 --> 00:00:08,390 >> Doug LLOYD: Pointeriai, čia mes. 3 00:00:08,390 --> 00:00:11,080 Tai tikriausiai būti sunkiausia temą 4 00:00:11,080 --> 00:00:12,840 kad mes kalbėti apie CS50. 5 00:00:12,840 --> 00:00:15,060 O jei jūs skaitėte nieko apie rodykles 6 00:00:15,060 --> 00:00:19,080 Prieš jums gali būti šiek tiek bauginanti vyksta į šį vaizdo įrašą. 7 00:00:19,080 --> 00:00:21,260 Tai tiesa, kad patarimų Leidžiame jums galimybę 8 00:00:21,260 --> 00:00:23,740 kad galbūt susukti gana blogai, kai esate 9 00:00:23,740 --> 00:00:27,450 dirbant su kintamųjų ir duomenų, ir sukelia jūsų programa į avariją. 10 00:00:27,450 --> 00:00:30,490 Bet jie tikrai tikrai naudinga ir jie leidžia mums tikrai puikus būdas 11 00:00:30,490 --> 00:00:33,340 perduoti duomenis atgal ir atgal tarp funkcijų, 12 00:00:33,340 --> 00:00:35,490 kad mes kitaip negalime daryti. 13 00:00:35,490 --> 00:00:37,750 >> Ir taip, ko mes iš tikrųjų noriu padaryti čia yra traukinys 14 00:00:37,750 --> 00:00:41,060 jums turėti gerą rodyklė drausmę, todėl kad jūs galite naudoti patarimų efektyviai 15 00:00:41,060 --> 00:00:43,850 padaryti savo programas, kad daug geriau. 16 00:00:43,850 --> 00:00:48,220 Kaip jau sakiau patarimų mums kitoks būdas perduoti duomenis tarp funkcijų. 17 00:00:48,220 --> 00:00:50,270 Dabar, jei jūs prisimenate iš ankstesnė vaizdo, kai 18 00:00:50,270 --> 00:00:53,720 mes kalbame apie kintamasis apimtis, jau minėjau, 19 00:00:53,720 --> 00:01:00,610 kad visi duomenų, kad mes praeiti tarp funkcijos C yra perduodama pagal vertę. 20 00:01:00,610 --> 00:01:03,070 Ir aš negali būti naudojama, kad draugyste, ką aš ten reiškė 21 00:01:03,070 --> 00:01:07,170 buvo tai, kad mes perduodame kopijas duomenų. 22 00:01:07,170 --> 00:01:12,252 Kai mes pereiname kintamąjį funkcija, mes ne nevaikštant kintamąjį 23 00:01:12,252 --> 00:01:13,210 su funkcija, tiesa? 24 00:01:13,210 --> 00:01:17,670 Mes artimųjų kopiją , kad duomenys, su funkcija. 25 00:01:17,670 --> 00:01:20,760 Funkcija ką ji bus ir jis apskaičiuoja tam tikrą vertę, 26 00:01:20,760 --> 00:01:23,180 o gal mes naudojame šią vertę kai ji suteikia jį atgal. 27 00:01:23,180 --> 00:01:26,700 >> Ten buvo viena išimtis Ši taisyklė pravažiuojančių pagal vertę, 28 00:01:26,700 --> 00:01:31,210 ir mes grįžti į tai, kas, kad yra šiek tiek vėliau šį vaizdo įrašą. 29 00:01:31,210 --> 00:01:34,880 Jei mes naudojame patarimų, o ne naudojant kintamuosius, 30 00:01:34,880 --> 00:01:38,180 arba, o ne naudojant kintamuosius patys ar jų kopijas kintamųjų, 31 00:01:38,180 --> 00:01:43,790 dabar mes galime perduoti kintamuosius aplink tarp funkcijų kitokiu būdu. 32 00:01:43,790 --> 00:01:46,550 Tai reiškia, kad jei mes darome vienų funkcijos pokyčiai, 33 00:01:46,550 --> 00:01:49,827 kad pokyčiai bus iš tikrųjų imtis nesukeliantį kitokia funkcija. 34 00:01:49,827 --> 00:01:52,160 Vėlgi, tai yra kažkas, kad mes negalėjome padaryti anksčiau, 35 00:01:52,160 --> 00:01:56,979 ir jei jūs kada nors bandė apsikeitimo vertės dviejų kintamųjų funkcijos, 36 00:01:56,979 --> 00:01:59,270 jūs pastebėjote šią problemą rūšiuoti šliaužti aukštyn, tiesa? 37 00:01:59,270 --> 00:02:04,340 >> Jei norime apsikeitimo X ir Y, ir mes perduoti juos į funkciją, vadinamą apsikeitimo, 38 00:02:04,340 --> 00:02:08,680 viduje funkcija apsikeitimo kintamieji padaryti keitimo vertybes. 39 00:02:08,680 --> 00:02:12,600 Vienas tampa du, du tampa vienas, bet mes ne iš tikrųjų 40 00:02:12,600 --> 00:02:16,890 nieko keisti originalo funkcija, į skambintojui. 41 00:02:16,890 --> 00:02:19,550 Nes mes negalime, mes tik dirbti su jų kopijas. 42 00:02:19,550 --> 00:02:24,760 Su rodyklėmis, nors mes galime iš tikrųjų perduoti X ir Y yra funkcija. 43 00:02:24,760 --> 00:02:26,960 Ši funkcija gali padaryti kažkas su jais. 44 00:02:26,960 --> 00:02:29,250 Ir tie kintamieji dydžiai realiai gali pasikeisti. 45 00:02:29,250 --> 00:02:33,710 Taigi, kad gana pasikeitimas Mūsų gebėjimas dirbti su duomenimis. 46 00:02:33,710 --> 00:02:36,100 >> Prieš mes pasinerti į patarimų, aš manau, kad verta 47 00:02:36,100 --> 00:02:38,580 atsižvelgiant keletą minučių grįžti prie pagrindai čia. 48 00:02:38,580 --> 00:02:41,000 Ir turėti ne kaip atrodo kompiuterio atmintyje darbai 49 00:02:41,000 --> 00:02:45,340 nes šie du dalykai vyksta kad iš tikrųjų gana tarpusavyje. 50 00:02:45,340 --> 00:02:48,480 Kaip Jūs tikriausiai žinote, Jūsų kompiuterinės sistemos 51 00:02:48,480 --> 00:02:51,310 turite kietąjį diską arba gal kietojo disko, 52 00:02:51,310 --> 00:02:54,430 kai byla saugojimo vietą rūšiuoti. 53 00:02:54,430 --> 00:02:57,950 Tai paprastai kažkur kaimynystės 250 gigabaitų 54 00:02:57,950 --> 00:02:59,810 kad gal iš terabaitų pora dabar. 55 00:02:59,810 --> 00:03:02,270 Ir tai kur visi jūsų failai galiausiai gyventi, 56 00:03:02,270 --> 00:03:04,870 net tada, kai kompiuteris yra išjungtas išjungti, galite pasukti jį atgal 57 00:03:04,870 --> 00:03:09,190 ir jūs rasite savo failus ten vėl, kai jūs iš naujo paleisti sistemą. 58 00:03:09,190 --> 00:03:14,820 Bet diskai, pavyzdžiui, kietajame diske HDD arba kietojo disko, SSD, 59 00:03:14,820 --> 00:03:16,050 yra tik sandėliavimo patalpas. 60 00:03:16,050 --> 00:03:20,400 >> Mes negalime iš tikrųjų nieko daryti su duomenys, kurie yra kietajame diske, 61 00:03:20,400 --> 00:03:22,080 arba kietojo disko. 62 00:03:22,080 --> 00:03:24,950 Tam, kad iš tikrųjų pakeisti duomenys arba perkelti jį aplink, 63 00:03:24,950 --> 00:03:28,800 mes turime perkelti jį į RAM, laisvosios kreipties atminties. 64 00:03:28,800 --> 00:03:31,170 Dabar RAM, jūs turite daug mažiau jūsų kompiuteryje. 65 00:03:31,170 --> 00:03:34,185 Jums gali tekti kažkur kaimynystės 512 megabaitų 66 00:03:34,185 --> 00:03:38,850 jei turite seną kompiuterį, į gal dviejų, keturių, aštuonių, 16, 67 00:03:38,850 --> 00:03:41,820 galbūt net šiek tiek daugiau, GB RAM. 68 00:03:41,820 --> 00:03:46,390 Taigi, kad daug mažesnė, bet tai kur visi iš lakiųjų duomenų egzistuoja. 69 00:03:46,390 --> 00:03:48,270 Štai kur mes galime pakeisti dalykus. 70 00:03:48,270 --> 00:03:53,350 Bet kai mes savo ruožtu mūsų kompiuterį išjungti, visi RAM duomenimis yra sunaikinta. 71 00:03:53,350 --> 00:03:57,150 >> Štai kodėl mes turime turėti kietąjį diską už daugiau nuolatinę vietą jo, 72 00:03:57,150 --> 00:03:59,720 taip, kad jis exists- jis būtų tikrai blogai, jei kiekvieną kartą mes 73 00:03:59,720 --> 00:04:03,310 Paaiškėjo mūsų kompiuterį išjungti, kiekvienas failas mūsų sistemoje buvo atšauktas. 74 00:04:03,310 --> 00:04:05,600 Taigi mes dirbame viduje RAM. 75 00:04:05,600 --> 00:04:09,210 Ir kiekvieną kartą, kai mes kalbame apie atmintis, gana daug, kad CS50, 76 00:04:09,210 --> 00:04:15,080 mes kalbame apie RAM, o ne kietajame diske. 77 00:04:15,080 --> 00:04:18,657 >> Taigi, kai mes perkelti daiktus į atmintį, ji užima tam tikrą erdvę. 78 00:04:18,657 --> 00:04:20,740 Visi duomenų tipų, kad mes dirbame su 79 00:04:20,740 --> 00:04:23,480 imtis skiriasi sumos erdvės RAM. 80 00:04:23,480 --> 00:04:27,600 Taigi kiekvieną kartą, kai kuriate sveikasis skaičius kintamasis keturių baitų atminties 81 00:04:27,600 --> 00:04:30,750 yra atidėta RAM todėl jūs gali dirbti su tuo sveikojo skaičiaus. 82 00:04:30,750 --> 00:04:34,260 Jūs galite paskelbti sveikasis skaičius, jį pakeisti, ją priskirti 83 00:04:34,260 --> 00:04:36,700 kad vertė 10 tingų viena, taip toliau ir taip toliau. 84 00:04:36,700 --> 00:04:39,440 Visa tai turi atsitikti RAM ir gausite keturi baitai 85 00:04:39,440 --> 00:04:42,550 dirbti su už kiekvieną sveikasis skaičius, kad jūs sukuriate. 86 00:04:42,550 --> 00:04:45,410 >> Kiekvienas simbolis sukurti gauna vieną baitą. 87 00:04:45,410 --> 00:04:48,160 Tai tiesiog, kiek vietos yra reikia saugoti charakterį. 88 00:04:48,160 --> 00:04:51,310 Kiekvienas plūdė, nekilnojamojo skaičius, gauna keturi baitai 89 00:04:51,310 --> 00:04:53,390 nebent tai dvigubas tikslumo slankaus kablelio 90 00:04:53,390 --> 00:04:56,510 skaičius, kuris leidžia jums tikslesnes ar daugiau skaitmenų 91 00:04:56,510 --> 00:04:59,300 po kablelio neprarandant tikslumo, 92 00:04:59,300 --> 00:05:01,820 kuri užima aštuonis baitųatminties. 93 00:05:01,820 --> 00:05:06,730 Long long, tikrai dideli sveikieji skaičiai, Taip pat užtrukti iki aštuonių baitų atminties. 94 00:05:06,730 --> 00:05:09,000 Kiek baitų atminties do įsipareigojimų imtis? 95 00:05:09,000 --> 00:05:12,990 Na tegul įdėti kaištį šį klausimą dabar, bet mes grįžti į ją. 96 00:05:12,990 --> 00:05:17,350 >> Taigi, atgal į šį atminties idėja kaip didelis masyvas baitų dydžio ląsteles. 97 00:05:17,350 --> 00:05:20,871 Tai tikrai viskas yra, tai tik didžiulis masyvas ląstelių, 98 00:05:20,871 --> 00:05:23,370 kaip bet kuris kitas masyvo, kad esate susipažinę su ir pamatyti, 99 00:05:23,370 --> 00:05:26,430 išskyrus kiekvieną elementą yra vienas baitas pločio. 100 00:05:26,430 --> 00:05:30,030 Ir kaip masyvą, kiekvienas elementas turi adresą. 101 00:05:30,030 --> 00:05:32,120 Kiekvienas elementas masyve turi indeksą, ir mes 102 00:05:32,120 --> 00:05:36,302 galima naudoti šio indekso padaryti vadinamieji laisvosios kreipties į masyvą. 103 00:05:36,302 --> 00:05:38,510 Neturime pradėti nuo masyvo pradžioje, 104 00:05:38,510 --> 00:05:40,569 kartoti per kiekvieną jo vienas elementas, 105 00:05:40,569 --> 00:05:41,860 rasti tai, ko mes ieškome. 106 00:05:41,860 --> 00:05:45,790 Galime tik pasakyti, noriu patekti į 15. elementas arba 100. elementas. 107 00:05:45,790 --> 00:05:49,930 Ir jūs galite tiesiog pereiti į šio skaičiaus ir gauti naudą jūs ieškote. 108 00:05:49,930 --> 00:05:54,460 >> Panašiai kiekvieną vietą atmintyje turi adresą. 109 00:05:54,460 --> 00:05:57,320 Taigi jūsų atminties galia atrodo kažkas panašaus į tai. 110 00:05:57,320 --> 00:06:01,420 Štai labai maža riekė atminties, tai yra 20 baitųatminties. 111 00:06:01,420 --> 00:06:04,060 Pirmieji 20 baitų, nes mano kreipiasi ten apačioje 112 00:06:04,060 --> 00:06:08,890 yra 0, 1, 2, 3, ir taip apie visą kelią iki 19. 113 00:06:08,890 --> 00:06:13,190 Ir kai aš pareiškiu rodiklius ir kai aš pradedu dirbti su jais, 114 00:06:13,190 --> 00:06:15,470 sistema vyksta nustatyti panaikinti kai man erdvė 115 00:06:15,470 --> 00:06:17,595 Šiame atminties dirbti su mano kintamųjų. 116 00:06:17,595 --> 00:06:21,610 Taigi, aš gali pasakyti, char c lygus kapitalą H. Ir kas nutiks? 117 00:06:21,610 --> 00:06:23,880 Na sistema ketina atidėta man vieną baitą. 118 00:06:23,880 --> 00:06:27,870 Šiuo atveju ji nusprendė baitų skaičių keturių, The adresu keturių baitų, 119 00:06:27,870 --> 00:06:31,310 ir jis ketina laikyti laiškas kapitalas O ten man. 120 00:06:31,310 --> 00:06:34,350 Jei aš tada sako int greitį riba lygi 65, tai 121 00:06:34,350 --> 00:06:36,806 ketina atidėti keturių baitųatminties už mane. 122 00:06:36,806 --> 00:06:39,180 Ir tai vyksta gydyti tiems keturių baitų kaip vieną vienetą 123 00:06:39,180 --> 00:06:41,305 nes tai, ką mes dirbame su yra sveikas skaičius, čia. 124 00:06:41,305 --> 00:06:44,350 Ir tai vyksta iki 65 laikyti ten. 125 00:06:44,350 --> 00:06:47,000 >> Dabar jau aš rūšies sakau jums melą tiek, 126 00:06:47,000 --> 00:06:50,150 teisus, nes mes žinome, kad Kompiuteriai dirbti dvejetainiu. 127 00:06:50,150 --> 00:06:53,100 Jie nesupranta, nebūtinai ką kapitalo H 128 00:06:53,100 --> 00:06:57,110 arba kas 65 yra, jie tik suprasti dvejetainius, nulių ir. 129 00:06:57,110 --> 00:06:59,000 Ir taip faktiškai ką mes laikyti ten 130 00:06:59,000 --> 00:07:03,450 yra ne raidė H ir numeris 65, o veikiau dvejetainiai atstovybės 131 00:07:03,450 --> 00:07:06,980 dalį, kuri atrodo šiek tiek kažką panašaus į tai. 132 00:07:06,980 --> 00:07:10,360 Ir visų pirma kontekstas kintamąjį, 133 00:07:10,360 --> 00:07:13,559 jis nesiruošia tiesiog spjauti jį į, jis nesiruošia gydyti jį kaip vieną keturių 134 00:07:13,559 --> 00:07:15,350 baitas riekė nebūtinai, tai tikrai vyksta 135 00:07:15,350 --> 00:07:19,570 gydyti jį kaip keturis vienas baitas gabaliukus, kurios gali atrodyti kažką panašaus į tai. 136 00:07:19,570 --> 00:07:22,424 Ir net tai ne visiškai teisinga arba, 137 00:07:22,424 --> 00:07:24,840 nes kažkas vadinamas Baitų eiliškumas, kurį mes nesame 138 00:07:24,840 --> 00:07:26,965 ketina patekti į dabar, bet Jei įdomu apie, 139 00:07:26,965 --> 00:07:29,030 galite perskaityti apie mažai ir didelis Baitų eiliškumas. 140 00:07:29,030 --> 00:07:31,640 Tačiau dėl šio argumento dėlei, už šio vaizdo sumetimais, 141 00:07:31,640 --> 00:07:34,860 galime tik prielaidą, kad yra Faktas, kaip numeris 65 būtų 142 00:07:34,860 --> 00:07:36,970 būti atstovaujama atminties kiekvieną sistemą, 143 00:07:36,970 --> 00:07:38,850 nors tai nėra visiškai tiesa. 144 00:07:38,850 --> 00:07:41,700 >> Bet tegul iš tikrųjų tiesiog gauti visiškai atsikratyti visų dvejetainės, 145 00:07:41,700 --> 00:07:44,460 ir tiesiog galvoti apie kaip H ir 65, tai daug lengviau 146 00:07:44,460 --> 00:07:47,900 galvoti apie tai, kaip kad kaip žmogus. 147 00:07:47,900 --> 00:07:51,420 Visos teisės, todėl ji taip pat atrodo gal tiek atsitiktinai, kad I've- mano sistema 148 00:07:51,420 --> 00:07:55,130 nedavė man baitų 5, 6, 7, ir 8 saugoti sveiką skaičių. 149 00:07:55,130 --> 00:07:58,580 Yra Dėl šios priežasties, taip pat, kuris mes ne gauti į dabar, bet pakanka 150 00:07:58,580 --> 00:08:00,496 pasakyti, kad tai, ką kompiuteris yra čia darai 151 00:08:00,496 --> 00:08:02,810 tikriausiai geras žingsnis jos dalis. 152 00:08:02,810 --> 00:08:06,020 Norėdami nesuteikia man atmintį, kad yra nebūtinai nugara prie nugaros. 153 00:08:06,020 --> 00:08:10,490 Nors jis ketina tai padaryti dabar jei aš noriu gauti kitą eilutę, 154 00:08:10,490 --> 00:08:13,080 vadinamas pavardė, ir aš noriu įdėti Lloyd ten. 155 00:08:13,080 --> 00:08:18,360 Aš ruošiuosi reikia, kad tilptų vienas personažas, kiekvienas, kad laiškas yra 156 00:08:18,360 --> 00:08:21,330 ketina reikalauti vieną simbolių, vienas baitas atmintį. 157 00:08:21,330 --> 00:08:26,230 Taigi, jei galėčiau įdėti Lloyd į mano masyvo kaip tai aš esu gana gera eiti, tiesa? 158 00:08:26,230 --> 00:08:28,870 Ko trūksta? 159 00:08:28,870 --> 00:08:31,840 >> Atminkite, kad kiekvienas styginių mes dirbame In C baigiasi backslash nulis, 160 00:08:31,840 --> 00:08:33,339 ir mes negalime praleisti, kad čia, arba. 161 00:08:33,339 --> 00:08:36,090 Mums reikia atidėti vieną baitą atminties konstatuotina, kad todėl mes 162 00:08:36,090 --> 00:08:39,130 žinoti, kada mūsų styginių baigėsi. 163 00:08:39,130 --> 00:08:41,049 Taigi dar kartą ši tvarka kelio dalykų 164 00:08:41,049 --> 00:08:42,799 atsiras atminties galia būti šiek tiek atsitiktinai, 165 00:08:42,799 --> 00:08:44,870 bet ji iš tikrųjų yra, kaip Dauguma sistemų yra sukurta. 166 00:08:44,870 --> 00:08:48,330 Norėdami juos išsirikiuoti kartotiniai iš keturių, dėl priežasčių, vėl 167 00:08:48,330 --> 00:08:50,080 kad mes nereikia patekti į dabar. 168 00:08:50,080 --> 00:08:53,060 Bet tai, todėl pakanka pasakyti, kad Po šių trijų eilučių kodo, 169 00:08:53,060 --> 00:08:54,810 tai, kas atminties gali atrodyti. 170 00:08:54,810 --> 00:08:58,930 Jei man reikia atminties vietas 4, 8, 12 ir laikyti savo duomenis, 171 00:08:58,930 --> 00:09:01,100 Tai yra tai, ką mano atmintis gali atrodyti. 172 00:09:01,100 --> 00:09:04,062 >> Ir tik būti ypač pedantiškas čia, kai 173 00:09:04,062 --> 00:09:06,020 mes kalbame apie atminties adresai mes paprastai 174 00:09:06,020 --> 00:09:08,390 padaryti naudojant šešioliktainius pastabomis. 175 00:09:08,390 --> 00:09:12,030 Taigi, kodėl ne mes konvertuoti visus šiuos iš dešimtainės į šešioliktainį 176 00:09:12,030 --> 00:09:15,010 tik todėl, kad yra visuotinai kaip mes vadiname atmintį. 177 00:09:15,010 --> 00:09:17,880 Taigi užuot 0 per 19, ką mes turime, yra lygus nuliui 178 00:09:17,880 --> 00:09:20,340 x nulio nulio x1 trys. 179 00:09:20,340 --> 00:09:23,790 Tai yra 20 baitų atminties, kad mes yra ar mes ieškome šioje paveikslėlio 180 00:09:23,790 --> 00:09:25,540 Štai čia. 181 00:09:25,540 --> 00:09:29,310 >> Taigi visa tai, kas pasakyta, tegul žingsnį nuo atminties sekundę 182 00:09:29,310 --> 00:09:30,490 ir atgal į rodykles. 183 00:09:30,490 --> 00:09:32,420 Čia yra svarbiausia prisiminti 184 00:09:32,420 --> 00:09:34,070 kaip mes pradėti dirbti su rodyklėmis. 185 00:09:34,070 --> 00:09:36,314 Rodyklė nieko daugiau nei adresą. 186 00:09:36,314 --> 00:09:38,230 Pasakysiu dar kartą, nes tai, kad svarbu, 187 00:09:38,230 --> 00:09:42,730 rodyklė nieko daugiau nei adresą. 188 00:09:42,730 --> 00:09:47,760 Pointeriai yra adresai į vietas atmintyje, kur kintamieji gyventi. 189 00:09:47,760 --> 00:09:52,590 Žinant, kad jis tampa tikiuosi šiek tiek lengviau dirbti su jais. 190 00:09:52,590 --> 00:09:54,550 Kitas dalykas, man patinka reikia padaryti, tai turi rūšiuoti 191 00:09:54,550 --> 00:09:58,510 diagramas vizualiai atstovaujanti kas vyksta su įvairių linijų kodą. 192 00:09:58,510 --> 00:10:00,660 Ir mes tai pora daryti kartų į rodykles, 193 00:10:00,660 --> 00:10:03,354 ir kai mes kalbame apie dinamiška atminties paskirstymas, taip pat. 194 00:10:03,354 --> 00:10:06,020 Nes manau, kad šie diagramos gali būti ypač naudinga. 195 00:10:06,020 --> 00:10:09,540 >> Taigi, jei aš sakau, pavyzdžiui, int k mano kodas, kas vyksta? 196 00:10:09,540 --> 00:10:12,524 Na ką iš esmės vyksta yra Gaunu atidėtos man atmintį, 197 00:10:12,524 --> 00:10:14,690 bet nemanau net patinka galvoti apie tai, kaip, kad aš 198 00:10:14,690 --> 00:10:16,300 patinka galvoti apie tai, kaip dėžutėje. 199 00:10:16,300 --> 00:10:20,090 Turiu langelį ir tai spalvos žalia, nes aš 200 00:10:20,090 --> 00:10:21,750 galite įdėti sveikieji žalios dėžės. 201 00:10:21,750 --> 00:10:23,666 Jei tai buvo personažas man gali turėti mėlynas langelį. 202 00:10:23,666 --> 00:10:27,290 Bet aš visada sakau, jei aš sukurti dėžutė, kuri gali turėti skaičiais 203 00:10:27,290 --> 00:10:28,950 kad langelis spalvos žalia. 204 00:10:28,950 --> 00:10:33,020 Ir aš nuolatinį žymeklis ir aš rašyti k ant jo pusės. 205 00:10:33,020 --> 00:10:37,590 Taigi turiu langelį, pavadintą k į kurį galiu įdėti sveikieji skaičiai. 206 00:10:37,590 --> 00:10:41,070 Taigi, kai aš sakau, int k, tai tai, kas vyksta mano galvoje. 207 00:10:41,070 --> 00:10:43,140 Jei aš sakau K lygu penki, ką aš darau? 208 00:10:43,140 --> 00:10:45,110 Na, aš išleisti penki langelyje, į dešinę. 209 00:10:45,110 --> 00:10:48,670 Tai gana paprasta, jei Sakau int k sukurti langelį, pavadintą k. 210 00:10:48,670 --> 00:10:52,040 Jei aš sakau k yra lygus 5, įdėti penkių į baudos aikštelę. 211 00:10:52,040 --> 00:10:53,865 Tikimės, kad ne per daug šuolis. 212 00:10:53,865 --> 00:10:55,990 Štai kur viskas eiti šiek mažai įdomi, nors. 213 00:10:55,990 --> 00:11:02,590 Jei aš sakau int * pk, gerai, net jei aš neturiu žinote, kas tai būtinai reiškia, 214 00:11:02,590 --> 00:11:06,150 tai aiškiai kažką daryti su sveikojo skaičiaus. 215 00:11:06,150 --> 00:11:08,211 Taigi, aš ruošiuosi spalva šis langelis žalios ish, 216 00:11:08,211 --> 00:11:10,210 Aš žinau, tai turiu kažką daryti su sveikasis skaičius, 217 00:11:10,210 --> 00:11:13,400 bet tai ne pati sveikasis skaičius, nes tai int žvaigždė. 218 00:11:13,400 --> 00:11:15,390 Yra kažkas šiek tiek skiriasi apie tai. 219 00:11:15,390 --> 00:11:17,620 Taigi sveikas s dalyvauti, bet kitaip tai 220 00:11:17,620 --> 00:11:19,830 ne per daug skiriasi nuo ką mes kalbame apie. 221 00:11:19,830 --> 00:11:24,240 Tai dėžutė, jos gavo etiketę, jis dėvi etikečių PK, 222 00:11:24,240 --> 00:11:27,280 ir tai galima laikyti int žvaigždės, kokia tai yra. 223 00:11:27,280 --> 00:11:29,894 Jie turi kažką daryti su skaičiais, aiškiai. 224 00:11:29,894 --> 00:11:31,060 Štai paskutinė eilutė nors. 225 00:11:31,060 --> 00:11:37,650 Jei aš sakau PK = & K, Whoa, kas atsitiko, tiesa? 226 00:11:37,650 --> 00:11:41,820 Taigi, šis atsitiktinių skaičių, atrodytų, atsitiktinė skaičius, gauna išmesti į baudos aikštelę ten. 227 00:11:41,820 --> 00:11:44,930 Visa tai yra, yra Pk gauna K adresą. 228 00:11:44,930 --> 00:11:52,867 Taigi, aš klijuoti kur k gyvena atmintyje, jos adresas, jos baitų adresas. 229 00:11:52,867 --> 00:11:55,200 Viskas, ką aš darau yra aš sakau ši vertė yra tai, ką aš ruošiuosi 230 00:11:55,200 --> 00:11:59,430 įdėti viduje mano dėžutė vadinamas pk. 231 00:11:59,430 --> 00:12:02,080 Ir todėl, kad šie dalykai yra rodykles, ir todėl ieško 232 00:12:02,080 --> 00:12:04,955 ne kaip nulinės x eilutę aštuoni nulis c septyni keturi aštuonių 233 00:12:04,955 --> 00:12:07,790 du nulis tikriausiai nėra labai reikšmingas. 234 00:12:07,790 --> 00:12:12,390 Kai mes paprastai įsivaizduoti patarimų, mes iš tikrųjų taip rodykles. 235 00:12:12,390 --> 00:12:17,000 Pk suteikia mums informaciją turime rasti k atmintyje. 236 00:12:17,000 --> 00:12:19,120 Taigi, iš esmės PK turi jame rodyklę. 237 00:12:19,120 --> 00:12:21,670 Ir jei mes vaikščioti ilgis tos rodyklės, įsivaizduokite, 238 00:12:21,670 --> 00:12:25,280 tai ką jūs galite vaikščioti, jei mes vaikščioti palei rodyklės ilgį, 239 00:12:25,280 --> 00:12:29,490 pačiame Patarimas tos rodyklės, mes rasite atmintyje vietą 240 00:12:29,490 --> 00:12:31,390 kur k gyvena. 241 00:12:31,390 --> 00:12:34,360 Ir tai tikrai svarbu nes kai mes žinome, kur k gyvena, 242 00:12:34,360 --> 00:12:37,870 mes galime pradėti dirbti su duomenų viduje, kad atminties vietoje. 243 00:12:37,870 --> 00:12:40,780 Nors mes vis smulkutis šiek tiek prieš save dabar. 244 00:12:40,780 --> 00:12:42,240 >> Taigi, kas yra žymeklis? 245 00:12:42,240 --> 00:12:45,590 Rodyklė yra duomuo, kurio vertė yra atminties adresas. 246 00:12:45,590 --> 00:12:49,740 Tai buvo, kad nulio x aštuoni nulis stuff vyksta, tai buvo atminties adresas. 247 00:12:49,740 --> 00:12:52,060 Tai buvo atmintyje vietą. 248 00:12:52,060 --> 00:12:55,080 Ir rodyklė tipas aprašoma natūra 249 00:12:55,080 --> 00:12:56,930 Duomenų rasite kad atminties adresas. 250 00:12:56,930 --> 00:12:58,810 Taigi ten INT žvaigždutė dalis dešinę. 251 00:12:58,810 --> 00:13:03,690 Jei aš sekti, kad rodyklę, tai ketina veda mane į vietą. 252 00:13:03,690 --> 00:13:06,980 Ir tai vieta, ką aš ras ten mano Pavyzdžiui, 253 00:13:06,980 --> 00:13:08,240 yra žalia spalvos dėžutę. 254 00:13:08,240 --> 00:13:12,650 Tai sveikas, tai ką aš ras, jei aš einu į tą adresą. 255 00:13:12,650 --> 00:13:14,830 Duomenų tipas Kurių rodyklė aprašoma, kas 256 00:13:14,830 --> 00:13:17,936 rasite tuo atminties adresą. 257 00:13:17,936 --> 00:13:19,560 Taigi čia tikrai cool dalykas, nors. 258 00:13:19,560 --> 00:13:25,090 Pointeriai leidžia mums perduoti kintamieji tarp funkcijų. 259 00:13:25,090 --> 00:13:28,520 Ir iš tikrųjų perduoti kintamuosius ir neperduoda jų kopijas. 260 00:13:28,520 --> 00:13:32,879 Nes jei mes tiksliai žinoti, kur atmintyje rasti kintamąjį, 261 00:13:32,879 --> 00:13:35,670 mums nereikia padaryti kopiją tai, mes galime tiesiog eiti į tą vietą 262 00:13:35,670 --> 00:13:37,844 ir dirbti su šiuo kintamuoju. 263 00:13:37,844 --> 00:13:40,260 Taigi iš esmės rodyklės Rūšiuoti Make kompiuterinę aplinką 264 00:13:40,260 --> 00:13:42,360 daug kaip ir realiame pasaulyje, į dešinę. 265 00:13:42,360 --> 00:13:44,640 >> Taigi čia analogija. 266 00:13:44,640 --> 00:13:48,080 Tarkime, kad turiu nešiojamąjį kompiuterį, teisė, ir tai visiškai pastabose. 267 00:13:48,080 --> 00:13:50,230 Ir aš norėčiau, kad jūs ją atnaujinti. 268 00:13:50,230 --> 00:13:53,960 Jūs esate funkcija, kuri Atnaujinimai pastabos, į dešinę. 269 00:13:53,960 --> 00:13:56,390 Be to, kaip mes buvome darbo iki šiol, ką 270 00:13:56,390 --> 00:14:02,370 atsitinka, yra jums imtis savo nešiojamojo kompiuterio, jums eiti į kopijavimo parduotuvėje, 271 00:14:02,370 --> 00:14:06,410 jums padaryti Xerox kopiją kiekvienas Notepad puslapis. 272 00:14:06,410 --> 00:14:09,790 Jūs palikti savo nešiojamą kompiuterį atgal ant mano stalo, kai baigsite, 273 00:14:09,790 --> 00:14:14,600 jums eiti ir užbraukti dalykų mano Notepad, kad yra pasenę ar neteisinga, 274 00:14:14,600 --> 00:14:19,280 ir tada jums perduoti atgal į man Xerox puslapiuose kamino 275 00:14:19,280 --> 00:14:22,850 tai yra mano nešiojamojo kompiuterio replika su pakeitimai, kad jūs padaryti jį. 276 00:14:22,850 --> 00:14:27,040 Ir tuo momentu, tai pas mane taip vizitine funkcija, kaip skambinančiojo, 277 00:14:27,040 --> 00:14:30,582 nuspręsti imtis savo pastabas ir integruoti juos atgal į mano nešiojamojo kompiuterio. 278 00:14:30,582 --> 00:14:32,540 Taigi ten yra daug žingsnių čia dalyvauja, į dešinę. 279 00:14:32,540 --> 00:14:34,850 Kaip ar nebūtų geriau jei aš tiesiog pasakyti, ei, jūs galite 280 00:14:34,850 --> 00:14:38,370 atnaujinti savo Notepad man ranka jums mano nešiojamojo kompiuterio, 281 00:14:38,370 --> 00:14:40,440 ir jūs imtis dalykų ir tiesiog kirsti juos 282 00:14:40,440 --> 00:14:42,810 ir atnaujinti savo pastabas mano nešiojamojo kompiuterio. 283 00:14:42,810 --> 00:14:45,140 Ir tada man mano nešiojamojo kompiuterio atgal. 284 00:14:45,140 --> 00:14:47,320 Tai tipo kas rodyklės leidžia mums daryti, 285 00:14:47,320 --> 00:14:51,320 jie ši aplinka daug daugiau patinka, kaip mes dirbame iš tikrųjų. 286 00:14:51,320 --> 00:14:54,640 >> Visos teisės taip, kad tai, ką rodyklė yra, pakalbėkime 287 00:14:54,640 --> 00:14:58,040 apie tai, kaip patarimų dirbti C, o kaip mes galime pradėti su jais dirbti. 288 00:14:58,040 --> 00:15:02,550 Taigi ten labai paprasta žymeklis C vadinamas null žymeklį. 289 00:15:02,550 --> 00:15:04,830 Null rodyklė taškai nieko. 290 00:15:04,830 --> 00:15:08,310 Tai tikriausiai atrodo, kad tai iš tikrųjų nėra labai naudingas dalykas, 291 00:15:08,310 --> 00:15:10,500 bet kaip mes matome tiek vėliau, tai 292 00:15:10,500 --> 00:15:15,410 kad tai niekinis žymeklis egzistuoja tikrai tikrai gali praversti. 293 00:15:15,410 --> 00:15:19,090 Ir kiekvieną kartą, kai jums sukurti rodyklę ir jums nereikia nustatyti jo vertės immediately- 294 00:15:19,090 --> 00:15:21,060 AN nustatymo pavyzdys jo vertė iš karto 295 00:15:21,060 --> 00:15:25,401 bus pora skaidres atgal kur sakiau PK lygus & K, 296 00:15:25,401 --> 00:15:28,740 PK gauna K adresą, kaip matysime, ką tai reiškia, 297 00:15:28,740 --> 00:15:32,990 matysime, kaip kodas, kuris shortly- jei mes neturime nustatyti jo vertę kažką 298 00:15:32,990 --> 00:15:35,380 prasmingas iš karto, Jūs visada turėtų 299 00:15:35,380 --> 00:15:37,480 nustatyti savo žymiklį, kad rodytų į NULL. 300 00:15:37,480 --> 00:15:40,260 Turėtumėte nustatyti, kad jis rodytų į nieką. 301 00:15:40,260 --> 00:15:43,614 >> Tai labai skiriasi nuo tiesiog paliekant vertę, nes ji yra 302 00:15:43,614 --> 00:15:45,530 ir tada pareiškimu, žymeklis, ir tik darant prielaidą, 303 00:15:45,530 --> 00:15:48,042 tai niekinis, nes tai retai tiesa. 304 00:15:48,042 --> 00:15:50,000 Taigi jūs visada turėtų nustatyti iš rodyklė vertė 305 00:15:50,000 --> 00:15:55,690 nuliui, jei jūs neturite nustatyti jo vertę į kažką prasmingo nedelsiant. 306 00:15:55,690 --> 00:15:59,090 Galite patikrinti, ar rodyklė vertės yra niekinis naudojant lygybės operatorius 307 00:15:59,090 --> 00:16:05,450 (==), Kaip jūs palyginkite bet koks sveikasis skaičius vertės arba simbolių reikšmes (==) 308 00:16:05,450 --> 00:16:06,320 taip pat. 309 00:16:06,320 --> 00:16:10,994 Tai specialus tarsi konstanta Vertė, kurią galite naudoti norėdami išbandyti. 310 00:16:10,994 --> 00:16:13,160 Taigi, tai buvo labai paprastas žymeklis, null žymeklis. 311 00:16:13,160 --> 00:16:15,320 Kitas būdas sukurti rodyklė yra išgauti 312 00:16:15,320 --> 00:16:18,240 kintamosios adresas Jūs jau sukurta, 313 00:16:18,240 --> 00:16:22,330 ir tai padaryti naudojant ir operatorius adresas gavyba. 314 00:16:22,330 --> 00:16:26,720 Kuris mes jau matėme anksčiau pirmoje schema pavyzdyje parodžiau. 315 00:16:26,720 --> 00:16:31,450 Taigi, jei x yra kintamasis, kuriuo mes jau sukurta tipo sveikasis skaičius, 316 00:16:31,450 --> 00:16:35,110 tada ir x yra rodyklė į sveikojo skaičiaus. 317 00:16:35,110 --> 00:16:39,810 & x klausimus: pa- prisiminti, ir ketina išgauti iš dešinėje dalykas adresas. 318 00:16:39,810 --> 00:16:45,350 O kadangi rodyklė yra tik adresas, nei & x yra rodyklė į sveikasis skaičius 319 00:16:45,350 --> 00:16:48,560 kurių vertė yra kur atminties x gyvenimą. 320 00:16:48,560 --> 00:16:50,460 Tai x adresas. 321 00:16:50,460 --> 00:16:53,296 Taigi, & x yra x adresas. 322 00:16:53,296 --> 00:16:55,670 Paimkime vieną žingsnį toliau ir prisijungti prie kažko 323 00:16:55,670 --> 00:16:58,380 Aš užsiminiau ankstesniame vaizdo. 324 00:16:58,380 --> 00:17:06,730 Jei aranžuotė yra dviviečiai masyvas, tada & aranž kvadratinių laikiklis i rodyklė 325 00:17:06,730 --> 00:17:08,109 dvigubo. 326 00:17:08,109 --> 00:17:08,970 GERAI. 327 00:17:08,970 --> 00:17:12,160 ARR kvadratinių laikiklį Aš, kai ARR yra dviviečiai masyvas, 328 00:17:12,160 --> 00:17:19,069 tada ARR kvadratinių laikiklis i i-asis elementas tą masyvą, 329 00:17:19,069 --> 00:17:29,270 ir & ARR kvadratinių laikiklis i kur atminties i-tojo elemento ARR egzistuoja. 330 00:17:29,270 --> 00:17:31,790 >> Taigi, kas yra iškyla čia? 331 00:17:31,790 --> 00:17:34,570 Matricas pavadinimas, POVEIKIS visos šios dalykas, 332 00:17:34,570 --> 00:17:39,290 yra tai, kad masyvo vardas iš tikrųjų pati rodyklė. 333 00:17:39,290 --> 00:17:41,170 Jūs dirbu su rodyklėmis visi kartu 334 00:17:41,170 --> 00:17:45,290 kiekvieną kartą, kai jūs naudojote masyvą. 335 00:17:45,290 --> 00:17:49,090 Įsiminti iš Pavyzdžiui kintamojo taikymo sritį, 336 00:17:49,090 --> 00:17:53,420 netoli vaizdo aš pateikti pabaigos pavyzdys, kai mes turime funkciją 337 00:17:53,420 --> 00:17:56,890 vadinamas rinkinys int ir funkcija vadinama rinkinys masyvo. 338 00:17:56,890 --> 00:18:00,490 Ir jūsų uždavinys nustatyti, ar ne, arba, kas 339 00:18:00,490 --> 00:18:03,220 vertybės, kurias išspausdinti iš funkcijos pabaiga, 340 00:18:03,220 --> 00:18:05,960 ties pagrindinės programos pabaigoje. 341 00:18:05,960 --> 00:18:08,740 >> Jei prisimenate iš to Pavyzdžiui arba jei jūs stebėjo vaizdo įrašą, 342 00:18:08,740 --> 00:18:13,080 žinote, kad kai jums-į skambutį rinkinys int efektyviai nieko nedaro. 343 00:18:13,080 --> 00:18:16,390 Tačiau skambutis nustatyti masyvo daro. 344 00:18:16,390 --> 00:18:19,280 Ir aš tarsi glossed kodėl tai buvo tuo metu, atveju. 345 00:18:19,280 --> 00:18:22,363 Aš ką tik pasakė, gerai tai masyvas, tai ypatinga, žinote, ten yra priežastis. 346 00:18:22,363 --> 00:18:25,020 Taip yra todėl, kad matrica s vardas tikrai tik rodyklė, 347 00:18:25,020 --> 00:18:28,740 ir ten šis specialus kvadratinių laikiklis sintaksė, kad 348 00:18:28,740 --> 00:18:30,510 kad viskas daug gražiau dirbti. 349 00:18:30,510 --> 00:18:34,410 Ir jie ā idėją žymiklį daug mažiau bauginanti, 350 00:18:34,410 --> 00:18:36,800 ir tai, kodėl jie tarsi iš pateiktos tokiu būdu. 351 00:18:36,800 --> 00:18:38,600 Bet iš tikrųjų matricos yra tik rodyklės. 352 00:18:38,600 --> 00:18:41,580 Ir štai kodėl kai mes padarė Array kaita, 353 00:18:41,580 --> 00:18:44,880 kai mes išlaikė masyvą kaip parametras prie funkcijos arba kaip argumentas 354 00:18:44,880 --> 00:18:50,110 prie funkcijos, masyvo turinys iš tikrųjų pasikeitė tiek callee 355 00:18:50,110 --> 00:18:51,160 ir skambintojui. 356 00:18:51,160 --> 00:18:55,846 Kuris kiekvienam kitos rūšies kintamasis matėme buvo ne tas atvejis. 357 00:18:55,846 --> 00:18:58,970 Taigi, kad tiesiog kažkas palaikyti galvą, kai jūs dirbate su rodyklėmis, 358 00:18:58,970 --> 00:19:01,610 yra tai, kad vardas masyvas iš tikrųjų rodyklė 359 00:19:01,610 --> 00:19:04,750 į pirmojo elemento tos masyvo. 360 00:19:04,750 --> 00:19:08,930 >> Gerai, kad dabar mes turime visa tai faktai, tegul nesustoti, tiesa. 361 00:19:08,930 --> 00:19:11,370 Kodėl mums rūpi kur kažkas gyvena. 362 00:19:11,370 --> 00:19:14,120 Na kaip ir sakiau, tai gana Naudinga žinoti, jei kažkas gyvena 363 00:19:14,120 --> 00:19:17,240 todėl jūs galite eiti ten ir pakeiskite jį. 364 00:19:17,240 --> 00:19:19,390 Su juo dirbti ir faktiškai turi dalykas, kad jūs 365 00:19:19,390 --> 00:19:23,710 noriu padaryti, kad kintamasis įsigaliotų, o ne įsigalioti tam tikrą jo kopiją. 366 00:19:23,710 --> 00:19:26,150 Tai vadinama dereferencing. 367 00:19:26,150 --> 00:19:28,690 Mes einame į nuorodą ir mes pakeisti reikšmę ten. 368 00:19:28,690 --> 00:19:32,660 Taigi, jei mes turime žymeklį ir ji vadinama PC, ir ji nurodo pobūdžio, 369 00:19:32,660 --> 00:19:40,610 tada mes galime pasakyti * PC ir * PC yra pavadinimas, ką mes rasti, jei mes einame 370 00:19:40,610 --> 00:19:42,910 į adresų vnt. 371 00:19:42,910 --> 00:19:47,860 Ką mes surasime yra simbolis ir * PC, kaip mes vadiname tuos duomenis, kad 372 00:19:47,860 --> 00:19:48,880 Location. 373 00:19:48,880 --> 00:19:54,150 Taigi, mes galime pasakyti kažką panašaus * PC = D arba kažkas panašaus, 374 00:19:54,150 --> 00:19:59,280 ir tai reiškia, kad bet kokia buvo atminties adresą kompiuterio, 375 00:19:59,280 --> 00:20:07,040 kokia pobūdis anksčiau buvo ten, dabar D Jei sakytume * pc = D. 376 00:20:07,040 --> 00:20:10,090 >> Taigi čia mes einame vėl su kai keistai C dalykai, į dešinę. 377 00:20:10,090 --> 00:20:14,560 Taigi mes matėme * anksčiau kaip nors dalis duomenų tipą, 378 00:20:14,560 --> 00:20:17,160 ir dabar jis naudojamas šiek tiek kitoks kontekstas 379 00:20:17,160 --> 00:20:19,605 prieiti prie duomenų, esant vietą. 380 00:20:19,605 --> 00:20:22,480 Žinau, kad tai šiek tiek klaidina ir kad iš tikrųjų dalis šios visumos 381 00:20:22,480 --> 00:20:25,740 kaip, kodėl patarimų šią mitologiją aplink juos, kaip yra taip sudėtinga, 382 00:20:25,740 --> 00:20:28,250 rūšies sintaksės problemą, sąžiningai. 383 00:20:28,250 --> 00:20:31,810 Bet * yra naudojamas abiejų kontekste, tiek kaip dalis tipo pavadinimu, 384 00:20:31,810 --> 00:20:34,100 ir mes pamatyti šiek tiek vėliau kažkas, taip pat. 385 00:20:34,100 --> 00:20:36,490 Ir dabar yra dereference operatorius. 386 00:20:36,490 --> 00:20:38,760 Taigi jis eina į nuorodą, jis pasiekia duomenis 387 00:20:38,760 --> 00:20:43,000 tuo rodyklės vietą, ir leidžia manipuliuoti savo valia. 388 00:20:43,000 --> 00:20:45,900 >> Dabar tai yra labai panašios į apsilankymą savo artimą, į dešinę. 389 00:20:45,900 --> 00:20:48,710 Jei žinote, ką jūsų kaimynas gyvena, jūs 390 00:20:48,710 --> 00:20:50,730 ne hanging out su savo kaimyne. 391 00:20:50,730 --> 00:20:53,510 Jūs žinote, jūs atsitikti žinoti, kur jie gyvena, 392 00:20:53,510 --> 00:20:56,870 bet tai nereiškia, kad, kad iki dorybė turėti šias žinias 393 00:20:56,870 --> 00:20:59,170 Jūs bendrauja su jais. 394 00:20:59,170 --> 00:21:01,920 Jei norite bendrauti su jais, jūs turite eiti į savo namus, 395 00:21:01,920 --> 00:21:03,760 jūs turite eiti ten, kur jie gyvena. 396 00:21:03,760 --> 00:21:07,440 Ir, kai jūs padaryti, kad galite bendrauti 397 00:21:07,440 --> 00:21:09,420 su jais kaip jūs norėtumėte. 398 00:21:09,420 --> 00:21:12,730 Ir panašiai su kintamųjų, Jums reikia eiti į savo adresą 399 00:21:12,730 --> 00:21:15,320 jei norite bendrauti juos, galite ne tik žinoti adresą. 400 00:21:15,320 --> 00:21:21,495 Ir kaip jūs einate į adresą yra naudoti *, The dereference operatorių. 401 00:21:21,495 --> 00:21:23,620 Ką manote atsitinka jei mes pabandyti ir dereference 402 00:21:23,620 --> 00:21:25,260 rodyklė kurio vertė yra niekinis? 403 00:21:25,260 --> 00:21:28,470 Prisiminkite, kad null rodyklė nurodo nieko. 404 00:21:28,470 --> 00:21:34,110 Taigi, jei jūs bandote ir dereference nieko arba eikite į adresų nieką, 405 00:21:34,110 --> 00:21:36,800 Ką manote atsitiks? 406 00:21:36,800 --> 00:21:39,630 Na, jei jūs atspėjote segmentavimas kaltės, norite būti teisus. 407 00:21:39,630 --> 00:21:41,390 Jei bandysite ir dereference null žymeklis, 408 00:21:41,390 --> 00:21:43,140 sergate segmentaciją kaltės. Bet palaukite, 409 00:21:43,140 --> 00:21:45,820 Argi aš sakau, kad Jei esate nesiruošia 410 00:21:45,820 --> 00:21:49,220 nustatyti savo vertę jūsų žymiklį į kažką prasmingo, 411 00:21:49,220 --> 00:21:51,000 turėtumėte nustatytas nulis? 412 00:21:51,000 --> 00:21:55,290 Aš ir iš tikrųjų segmentavimas kaltė yra rūšies gerą elgesį. 413 00:21:55,290 --> 00:21:58,680 >> Ar jūs kada nors paskelbta kintamų ir nepriskirta savo vertę iš karto? 414 00:21:58,680 --> 00:22:02,680 Taigi jūs tiesiog pasakyti int x; jūs neturite iš tikrųjų ją priskirti prie nieko 415 00:22:02,680 --> 00:22:05,340 o vėliau ant jūsų kodas, atsispausdinti X vertę, 416 00:22:05,340 --> 00:22:07,650 turintys dar nėra priskirti ją prie nieko. 417 00:22:07,650 --> 00:22:10,370 Dažnai gausite nulis, bet kartais 418 00:22:10,370 --> 00:22:15,000 gali kažkiek atsitiktinių skaičių ir Jūs neturite idėjos, kur ji atėjo iš. 419 00:22:15,000 --> 00:22:16,750 Panašiai gali dalykus atsitikti su rodyklėmis. 420 00:22:16,750 --> 00:22:20,110 Kai paskelbti rodyklę tarpinis junginys * Pk pavyzdžiui, 421 00:22:20,110 --> 00:22:23,490 ir jums nereikia priskirti jį prie vertės, gausite keturi baitai atminties. 422 00:22:23,490 --> 00:22:25,950 Nepriklausomai nuo keturių baitų atminties sistema gali 423 00:22:25,950 --> 00:22:28,970 kad turi tam tikrą prasmingą reikšmę. 424 00:22:28,970 --> 00:22:31,760 Ir ten galėjo būti kažkas jau ten, kad 425 00:22:31,760 --> 00:22:34,190 nebereikalingas kita funkciją, todėl jums tereikia 426 00:22:34,190 --> 00:22:35,900 išlikusius duomenis ten buvo. 427 00:22:35,900 --> 00:22:40,570 >> Ką daryti, jei jūs bandėte daryti dereference kai adresą, kurį don't- ten buvo 428 00:22:40,570 --> 00:22:43,410 jau baitų ir informacija ten, tai dabar yra jūsų rodyklę. 429 00:22:43,410 --> 00:22:47,470 Jei bandysite ir dereference tą rodyklę, jums gali būti Messing su kai atminties 430 00:22:47,470 --> 00:22:49,390 kad jūs neketino kad netvarka su juo visus. 431 00:22:49,390 --> 00:22:51,639 Ir iš tiesų, galite tai padaryti kažkas tikrai sukrečiantys, 432 00:22:51,639 --> 00:22:54,880 kaip sulaužyti kitą programą, arba nutraukti kitą funkciją, 433 00:22:54,880 --> 00:22:58,289 ar kažką daryti kenksmingą kad Jūs neketino daryti ne visi. 434 00:22:58,289 --> 00:23:00,080 Ir taip, tai kodėl tai tikrai gera idėja 435 00:23:00,080 --> 00:23:04,030 nustatyti savo patarimų nuliui, jei jums nenustato juos kažką prasmingo. 436 00:23:04,030 --> 00:23:06,760 Tai turbūt geriau ne pabaigos šios dienos savo programą 437 00:23:06,760 --> 00:23:09,840 į avariją, tada ji daryti Kažkas, kad varžtai up 438 00:23:09,840 --> 00:23:12,400 kita programa ar kita funkcija. 439 00:23:12,400 --> 00:23:15,207 Tai elgesys yra turbūt net mažiau idealus ne tik kritimo. 440 00:23:15,207 --> 00:23:17,040 Ir taip, tai kodėl tai tikrai geras įprotis 441 00:23:17,040 --> 00:23:20,920 patekti į nustatyti savo patarimų nuliui, jei jūs neturite nustatyti juos 442 00:23:20,920 --> 00:23:24,540 į prasmingą vertės iš karto, tai yra, vertės, kad jūs žinote, 443 00:23:24,540 --> 00:23:27,260 ir kad jūs galite saugiai dereference. 444 00:23:27,260 --> 00:23:32,240 >> Taigi leiskite grįžti dabar ir pažvelgti į bendrą sintaksė situaciją. 445 00:23:32,240 --> 00:23:37,400 Jei aš sakau int * p ;, ką aš ką tik padariau? 446 00:23:37,400 --> 00:23:38,530 Ką aš padariau tai. 447 00:23:38,530 --> 00:23:43,290 Aš žinau, kad p reikšmė yra adresas nes visi rodyklės yra tik 448 00:23:43,290 --> 00:23:44,660 adresai. 449 00:23:44,660 --> 00:23:47,750 Galiu dereference p naudojant * operatorių. 450 00:23:47,750 --> 00:23:51,250 Šiame kontekste Čia, labai Top prisiminti ir * yra dalis tipo. 451 00:23:51,250 --> 00:23:53,510 Žiniasklaida * yra duomenų tipas. 452 00:23:53,510 --> 00:23:56,150 Bet galiu dereference p naudojant * operatorių, 453 00:23:56,150 --> 00:24:01,897 ir jei aš tai padaryti, jei aš einu į tą adresą, kas bus rasti šiuo adresu? 454 00:24:01,897 --> 00:24:02,855 Aš rasite sveikasis skaičius. 455 00:24:02,855 --> 00:24:05,910 Taigi int * p yra iš esmės sakydamas, p yra adresas. 456 00:24:05,910 --> 00:24:09,500 Galiu dereference p ir jei Darau, rasite sveikasis skaičius 457 00:24:09,500 --> 00:24:11,920 tuo atminties vietoje. 458 00:24:11,920 --> 00:24:14,260 >> Gerai, kad aš pasakiau buvo dar vienas erzina dalykas žvaigždės 459 00:24:14,260 --> 00:24:17,060 o čia kur, kad erzina dalykas, žvaigždės yra. 460 00:24:17,060 --> 00:24:21,640 Ar jūs kada nors bandė deklaruoti keli kintamieji tos pačios rūšies 461 00:24:21,640 --> 00:24:24,409 ant tos pačios eilutę kodo? 462 00:24:24,409 --> 00:24:27,700 Taigi per sekundę, apsimesti, kad linija, kodas Aš iš tikrųjų turi ten žalia 463 00:24:27,700 --> 00:24:29,366 ten nėra ir ji tiesiog teigia tarpinis junginys x, y, z ;. 464 00:24:29,366 --> 00:24:31,634 465 00:24:31,634 --> 00:24:34,550 Ką tai galėtų padaryti, tai iš tikrųjų sukurti trys sveikieji kintamieji už jus, 466 00:24:34,550 --> 00:24:36,930 vienas vadinamas X, vienas vadinamas y ir vienas vadinamas z. 467 00:24:36,930 --> 00:24:41,510 Tai būdas tai padaryti be turintys padalinti į tris eilutes. 468 00:24:41,510 --> 00:24:43,890 >> Štai kur žvaigždės gauti erzina vėl, nors, 469 00:24:43,890 --> 00:24:49,200 nes * yra iš tikrųjų dalis Abu tipo pavadinimas ir dalis 470 00:24:49,200 --> 00:24:50,320 Kintamosios vardu. 471 00:24:50,320 --> 00:24:56,430 Ir todėl, jei aš sakau, int * px, py, pz, ką aš faktiškai gauti yra rodyklė į sveikojo skaičiaus 472 00:24:56,430 --> 00:25:01,650 vadinamas px ir du sveikieji skaičiai, PY ir pz. 473 00:25:01,650 --> 00:25:04,950 Ir tai turbūt ne ką mes norime, kad tai nėra gerai. 474 00:25:04,950 --> 00:25:09,290 >> Taigi, jei aš noriu sukurti keletą patarimų ant tos pačios linijos, tos pačios rūšies, 475 00:25:09,290 --> 00:25:12,140 ir žvaigždės, kas man iš tikrųjų reikia reikia padaryti, tai pasakyti int * PA, PB * * vnt. 476 00:25:12,140 --> 00:25:17,330 477 00:25:17,330 --> 00:25:20,300 Dabar ką tik sakė, kad ir dabar sakau jums šį, 478 00:25:20,300 --> 00:25:22,170 jūs tikriausiai niekada tai padaryti. 479 00:25:22,170 --> 00:25:25,170 Ir tai tikriausiai geras dalykas sąžiningai, nes galite netyčia 480 00:25:25,170 --> 00:25:26,544 praleisti žvaigždė, kažką panašaus. 481 00:25:26,544 --> 00:25:29,290 Tai turbūt geriausia gal deklaruoti patarimų dėl atskirų linijų, 482 00:25:29,290 --> 00:25:31,373 bet tai tik dar vienas iš tų erzinančių sintaksę 483 00:25:31,373 --> 00:25:35,310 ką su žvaigždėmis, kad padaryti rodykles taip sunku dirbti. 484 00:25:35,310 --> 00:25:39,480 Nes tai kaip tik tai sintaksinis netvarka turite dirbti per. 485 00:25:39,480 --> 00:25:41,600 Su praktika ji tikrai tampa antra pobūdžio. 486 00:25:41,600 --> 00:25:45,410 Aš vis dar klystame su juo dar po programavimo 10 metų, 487 00:25:45,410 --> 00:25:49,630 todėl neturi būti nusiminusi, jei kas nors atsitiks jums, tai gana dažnas sąžiningai. 488 00:25:49,630 --> 00:25:52,850 Tai tikrai rūšies iš sintaksę trūkumas. 489 00:25:52,850 --> 00:25:54,900 >> Gerai, kad aš tipo pažadėjo kad mes naujo 490 00:25:54,900 --> 00:25:59,370 klausimas, kaip didelis sąvoka yra eilutė. 491 00:25:59,370 --> 00:26:02,750 Na, jei aš sakiau jums, kad eilutė, mes tikrai natūra 492 00:26:02,750 --> 00:26:04,140 buvo melas jums visą laiką. 493 00:26:04,140 --> 00:26:06,181 Nėra duomenų tipas vadinamas eilutė, ir iš tikrųjų aš 494 00:26:06,181 --> 00:26:09,730 minėta tai vienas iš mūsų Ankstyviausi video apie duomenų tipus, 495 00:26:09,730 --> 00:26:13,820 kad eilutė buvo duomenų tipas, buvo sukurta už jus CS50.h. 496 00:26:13,820 --> 00:26:17,050 Turite #include CS50.h siekiant jį naudoti. 497 00:26:17,050 --> 00:26:19,250 >> Na eilutė yra tikrai tik Prašymas kažką slapyvardis 498 00:26:19,250 --> 00:26:23,600 vadinamas char * A Rodyklė pobūdžio. 499 00:26:23,600 --> 00:26:26,010 Na patarimų, prisiminti, yra tik adresus. 500 00:26:26,010 --> 00:26:28,780 Taigi, kas yra dydis baitais eilutę? 501 00:26:28,780 --> 00:26:29,796 Na tai keturių arba aštuonių. 502 00:26:29,796 --> 00:26:32,170 Ir priežastis sakau keturis ar aštuoni, nes ji iš tikrųjų 503 00:26:32,170 --> 00:26:36,730 priklauso nuo sistemos, Jei naudojate CS50 IDE, char * yra char dydis 504 00:26:36,730 --> 00:26:39,340 * Yra aštuoni, tai 64 bitų sistemos. 505 00:26:39,340 --> 00:26:43,850 Kiekvienas atmintyje adresas yra 64 bitų ilgio. 506 00:26:43,850 --> 00:26:48,270 Jei naudojate prietaisą CS50 arba naudojant 32 bitų mašina, 507 00:26:48,270 --> 00:26:51,640 ir jūs girdėjote, kad terminas: 32-bitų mašina, kas yra 32 bitų mašina? 508 00:26:51,640 --> 00:26:56,090 Na tai tiesiog reiškia, kad kiekvienas adresas atmintyje yra 32 bitų ilgio. 509 00:26:56,090 --> 00:26:59,140 Ir taip 32 bitai yra keturi baitai. 510 00:26:59,140 --> 00:27:02,710 Taigi char * yra keturios ar aštuonios baitų, priklausomai nuo jūsų sistemos. 511 00:27:02,710 --> 00:27:06,100 Ir iš tiesų visi duomenų tipai, ir rodyklė į bet duomenų 512 00:27:06,100 --> 00:27:12,030 įrašykite, nes visi rodyklės yra tik adresai, keturi ar aštuoni baitai. 513 00:27:12,030 --> 00:27:14,030 Taigi leiskite peržiūrėti šį diagrama ir tegul sudaryti 514 00:27:14,030 --> 00:27:18,130 Šis vaizdo įrašas su truputį pasimankštinti čia. 515 00:27:18,130 --> 00:27:21,600 Taigi čia diagrama mes palikome ne su pačioje pradžioje vaizdo įrašo. 516 00:27:21,600 --> 00:27:23,110 Taigi, kas vyksta dabar, jei aš sakau * PK = 35? 517 00:27:23,110 --> 00:27:26,370 518 00:27:26,370 --> 00:27:30,530 Taigi, ką tai reiškia, kai aš sakau, * PK = 35? 519 00:27:30,530 --> 00:27:32,420 Paimkite sekundę. 520 00:27:32,420 --> 00:27:34,990 * pk. 521 00:27:34,990 --> 00:27:39,890 Be konteksto čia * yra dereference operatorius. 522 00:27:39,890 --> 00:27:42,110 Taigi, kai dereference operatorius yra naudojamas, 523 00:27:42,110 --> 00:27:48,520 mes einame į adresų atkreipė dėmesį į PK, ir mes pakeisti tai, ką mes matome. 524 00:27:48,520 --> 00:27:55,270 Taigi * PK = 35 efektyviai daro tai paveikslėlyje. 525 00:27:55,270 --> 00:27:58,110 Taigi tai iš esmės sintaksiškai identiška pasakęs k = 35. 526 00:27:58,110 --> 00:28:00,740 527 00:28:00,740 --> 00:28:01,930 >> Dar vienas. 528 00:28:01,930 --> 00:28:05,510 Jei aš sakau int m, sukurti naujas kintamasis vadinamas m. 529 00:28:05,510 --> 00:28:08,260 Nauja dėžutė, tai žalia dėžutė, nes jis ketina surengti sveikasis skaičius, 530 00:28:08,260 --> 00:28:09,840 ir jis ženklinamas m. 531 00:28:09,840 --> 00:28:14,960 Jei aš sakau m = 4, aš įdėti sveikasis skaičius į tą dėžutę. 532 00:28:14,960 --> 00:28:20,290 Jei tarkim PK = & M, kaip veikia Ši diagrama pokyčiai? 533 00:28:20,290 --> 00:28:28,760 PK = & M, tai jūs prisimenate ką & Operatorius daro arba yra vadinama? 534 00:28:28,760 --> 00:28:34,430 Atminkite, kad ir keletas kintamojo pavadinimą yra kintamojo vardas adresą. 535 00:28:34,430 --> 00:28:38,740 Taigi, ką mes pasakyti, PK gauna M adresą. 536 00:28:38,740 --> 00:28:42,010 Ir taip efektyviai, kas atsitiks Diagramoje yra tai, kad PK nebegalėsite taškų 537 00:28:42,010 --> 00:28:46,420 k, bet pažymi M. 538 00:28:46,420 --> 00:28:48,470 >> Vėlgi patarimų yra labai sudėtinga dirbti su 539 00:28:48,470 --> 00:28:50,620 ir jie imasi daug praktika, bet todėl, 540 00:28:50,620 --> 00:28:54,150 jų gebėjimas leidžia perduoti duomenis tarp funkcijų 541 00:28:54,150 --> 00:28:56,945 ir iš tikrųjų turi tie, pakeitimai įsigalios, 542 00:28:56,945 --> 00:28:58,820 gauti savo galvą aplink yra tikrai svarbu. 543 00:28:58,820 --> 00:29:02,590 Tai tikriausiai yra pats sudėtingiausias temą, mes aptarti CS50, 544 00:29:02,590 --> 00:29:05,910 bet vertė, kuri jus gauti iš naudojant rodykles 545 00:29:05,910 --> 00:29:09,200 gerokai viršija komplikacijų kad iš jų mokymasis. 546 00:29:09,200 --> 00:29:12,690 Taigi linkiu jums geriausias Sėkmės sužinoti apie rodykles. 547 00:29:12,690 --> 00:29:15,760 Aš Doug Lloyd, tai CS50. 548 00:29:15,760 --> 00:29:17,447