1 00:00:00,000 --> 00:00:06,030 >> [Muusika mängib] 2 00:00:06,030 --> 00:00:08,390 >> DOUG LLOYD: lähtekohad, siin me oleme. 3 00:00:08,390 --> 00:00:11,080 See on ilmselt läheb kõige raskem teema 4 00:00:11,080 --> 00:00:12,840 et me räägime in CS50. 5 00:00:12,840 --> 00:00:15,060 Ja kui olete lugenud midagi viiteid 6 00:00:15,060 --> 00:00:19,080 Enne võiks natuke hirmutada läheb see video. 7 00:00:19,080 --> 00:00:21,260 See on tõsi viiteid ei võimalda sulle võimalust 8 00:00:21,260 --> 00:00:23,740 võibolla keera päris halvasti, kui sa oled 9 00:00:23,740 --> 00:00:27,450 töötamisel muutujate ja andmed ja põhjustades oma programmi krahhi. 10 00:00:27,450 --> 00:00:30,490 Aga nad on tegelikult väga kasulik ja nad võimaldavad meil tõesti suurepärane võimalus 11 00:00:30,490 --> 00:00:33,340 läbida andmed tagasi ja vahel edasi funktsioone, 12 00:00:33,340 --> 00:00:35,490 et me muidu ei suuda seda teha. 13 00:00:35,490 --> 00:00:37,750 >> Ja nii me tegelikult tahan teha siin on rong 14 00:00:37,750 --> 00:00:41,060 Teil on hea pointer distsipliini, nii mida saab kasutada viiteid tõhusalt 15 00:00:41,060 --> 00:00:43,850 teha oma programme, et palju parem. 16 00:00:43,850 --> 00:00:48,220 Nagu ma ütlesin vihjeid anda meile eri võimalus edastada andmeid funktsioonide vahel. 17 00:00:48,220 --> 00:00:50,270 Nüüd, kui te mäletate alates varem video, kui 18 00:00:50,270 --> 00:00:53,720 me rääkisime Muutuva ulatusega, mainisin 19 00:00:53,720 --> 00:01:00,610 et kõik andmed, mida me vahelt funktsioonide C on vastu võetud väärtus. 20 00:01:00,610 --> 00:01:03,070 Ja ma ei kasutanud, et Mõiste, mida ma mõtlesin seal 21 00:01:03,070 --> 00:01:07,170 oli see, et me oleme läbinud koopiaid andmetest. 22 00:01:07,170 --> 00:01:12,252 Kui võtame muutuja funktsioon, me tegelikult ei sooritades muutuja 23 00:01:12,252 --> 00:01:13,210 funktsioonile, eks? 24 00:01:13,210 --> 00:01:17,670 Me kulgeb koopia nimetatud andmed funktsiooni. 25 00:01:17,670 --> 00:01:20,760 Funktsioon teeb mida see ja see arvutab mingi väärtus, 26 00:01:20,760 --> 00:01:23,180 ja äkki me kasutame, et väärtus kui ta annab selle tagasi. 27 00:01:23,180 --> 00:01:26,700 >> Seal oli üks erand Selle reegli läbimise väärtusest, 28 00:01:26,700 --> 00:01:31,210 ja me tuleme tagasi, mida see on veidi hiljem selle video. 29 00:01:31,210 --> 00:01:34,880 Kui me kasutame vihjeid asemel kasutades muutujaid, 30 00:01:34,880 --> 00:01:38,180 või selle asemel kasutades muutujate ise või koopiad muutujad, 31 00:01:38,180 --> 00:01:43,790 saame nüüd edasi muutujad ümber funktsioonide vahel teistmoodi. 32 00:01:43,790 --> 00:01:46,550 See tähendab, et kui me teeme üks muudatus funktsiooni, 33 00:01:46,550 --> 00:01:49,827 et muudatus tegelikult võtta efekti tekitamiseks erinevad funktsioonid. 34 00:01:49,827 --> 00:01:52,160 Jällegi, see on midagi, me ei saanud seda teha varem, 35 00:01:52,160 --> 00:01:56,979 ja kui sa oled kunagi proovinud vahetada väärtus kahe muutuja funktsioonis, 36 00:01:56,979 --> 00:01:59,270 olete märganud seda probleemi omamoodi hiiliva üles, eks? 37 00:01:59,270 --> 00:02:04,340 >> Kui me tahame, et vahetada X ja Y, ja me edasi neid funktsioon nimega swap, 38 00:02:04,340 --> 00:02:08,680 sees funktsiooni vahetada muutujad teha vahetust väärtusi. 39 00:02:08,680 --> 00:02:12,600 Üks saab kaks, kaks muutub üks, kuid meil ei ole tegelikult 40 00:02:12,600 --> 00:02:16,890 muuda midagi originaal funktsioon, helistaja. 41 00:02:16,890 --> 00:02:19,550 Kuna me ei saa, me oleme ainult koostööd nende koopiaid. 42 00:02:19,550 --> 00:02:24,760 Mis vihjeid küll, saame tegelikult läbida X ja Y funktsioon. 43 00:02:24,760 --> 00:02:26,960 See funktsioon on võimalik teha midagi nendega. 44 00:02:26,960 --> 00:02:29,250 Ja need muutujad väärtusi võib tegelikult muuta. 45 00:02:29,250 --> 00:02:33,710 Nii et on üsna muutus Meie võime töötada andmeid. 46 00:02:33,710 --> 00:02:36,100 >> Enne kui me sukelduda suunanäitajaks, ma arvan, et see on seda väärt 47 00:02:36,100 --> 00:02:38,580 võttes paar minutit minna tagasi põhitõdesid siin. 48 00:02:38,580 --> 00:02:41,000 Ja on vaadata, kuidas Arvuti mälu tööd 49 00:02:41,000 --> 00:02:45,340 sest need kaks teemat ei kavatse tegelikult päris omavahel. 50 00:02:45,340 --> 00:02:48,480 Nagu te ilmselt teate, arvuti süsteemi 51 00:02:48,480 --> 00:02:51,310 teil on kõvaketas või ehk tahkes olekus autot, 52 00:02:51,310 --> 00:02:54,430 mingi faili salvestamise asukoht. 53 00:02:54,430 --> 00:02:57,950 See on tavaliselt kusagil naabruses 250 gigabaiti 54 00:02:57,950 --> 00:02:59,810 võibolla paar terabaiti nüüd. 55 00:02:59,810 --> 00:03:02,270 Ja see on koht, kus kõik oma Failide lõppkokkuvõttes elada, 56 00:03:02,270 --> 00:03:04,870 isegi siis, kui arvuti on välja lülitatud off, siis saad selle tagasi 57 00:03:04,870 --> 00:03:09,190 ja leiad failid on olemas uuesti, kui süsteem taaskäivitada. 58 00:03:09,190 --> 00:03:14,820 Aga kettaseadmed, nagu kõvaketas, HDD, või tahkes olekus autot, SSD, 59 00:03:14,820 --> 00:03:16,050 on lihtsalt ruumi. 60 00:03:16,050 --> 00:03:20,400 >> Me ei saa tegelikult midagi teha andmeid, mis on kõvaketta 61 00:03:20,400 --> 00:03:22,080 või tahkes olekus autot. 62 00:03:22,080 --> 00:03:24,950 Et tegelikult muuta andmete või seda liigutatakse, 63 00:03:24,950 --> 00:03:28,800 peame liikuma selle RAM, muutmälu. 64 00:03:28,800 --> 00:03:31,170 Nüüd RAM, sul on palju vähem arvutis. 65 00:03:31,170 --> 00:03:34,185 Te võib-olla kuskil naabruses 512 megabaiti 66 00:03:34,185 --> 00:03:38,850 Kui teil on vanem arvuti, et võib-olla kaks, neli, kaheksa, 16, 67 00:03:38,850 --> 00:03:41,820 võib-olla isegi veidi rohkem, gigabaiti mälu. 68 00:03:41,820 --> 00:03:46,390 Nii et palju väiksem, kuid see on kus kõik lenduvad andmete olemasolu. 69 00:03:46,390 --> 00:03:48,270 See, kui saame asju muuta. 70 00:03:48,270 --> 00:03:53,350 Aga kui me pöördume meie arvuti välja, kõik andmed RAM on hävinud. 71 00:03:53,350 --> 00:03:57,150 >> Nii et miks me peame olema kõvaketas jaoks rohkem püsiva asukohaga sellest, 72 00:03:57,150 --> 00:03:59,720 nii, et see exists- see oleks tõesti halb, kui iga kord kui me 73 00:03:59,720 --> 00:04:03,310 pöördus meie arvuti välja, iga file meie süsteem pühitud. 74 00:04:03,310 --> 00:04:05,600 Nii me töötame sees RAM. 75 00:04:05,600 --> 00:04:09,210 Ja iga kord, kui me räägime mälu, päris palju, on CS50, 76 00:04:09,210 --> 00:04:15,080 me räägime RAM, mitte kõvakettale. 77 00:04:15,080 --> 00:04:18,657 >> Nii et kui me liigume asju mällu, kulub teatud hulk ruumi. 78 00:04:18,657 --> 00:04:20,740 Kõik andmetüüpe, et oleme töötanud koos 79 00:04:20,740 --> 00:04:23,480 on eri koguses ruumi RAM. 80 00:04:23,480 --> 00:04:27,600 Nii et iga kord, kui loote täisarv varieeruv, neli baiti mälu 81 00:04:27,600 --> 00:04:30,750 on kõrvale RAM siis saab tööd, et täisarv. 82 00:04:30,750 --> 00:04:34,260 Võite tunnistada täisarv, muuta, määrata selle 83 00:04:34,260 --> 00:04:36,700 väärtus 10 ühiku võrra ühe, nii edasi ja nii edasi. 84 00:04:36,700 --> 00:04:39,440 Kõik, mis peab juhtuma RAM, ja sa saad neli baiti 85 00:04:39,440 --> 00:04:42,550 töötada iga täisarv, et loote. 86 00:04:42,550 --> 00:04:45,410 >> Iga täht luua saab ühe baidi. 87 00:04:45,410 --> 00:04:48,160 See on lihtsalt, kui palju ruumi on vaja salvestada iseloomu. 88 00:04:48,160 --> 00:04:51,310 Iga float, tõeline number, saab nelja baiti 89 00:04:51,310 --> 00:04:53,390 kui see on kahekordne täpsusega ujukoma 90 00:04:53,390 --> 00:04:56,510 number, mis võimaldab on täpsemate või numbrit 91 00:04:56,510 --> 00:04:59,300 pärast koma kaotamata täpsusega, 92 00:04:59,300 --> 00:05:01,820 mis võtavad kaheksa baiti mälu. 93 00:05:01,820 --> 00:05:06,730 Pikad pikad, tõesti suur täisarvud, Samuti võtavad kaheksa baiti mälu. 94 00:05:06,730 --> 00:05:09,000 Mitu baiti mälu ei stringe alustada? 95 00:05:09,000 --> 00:05:12,990 Noh olgem panna pin selles küsimuses nüüd, kuid me tuleme tagasi selle. 96 00:05:12,990 --> 00:05:17,350 >> Nii tagasi idee mälu suur massiiv baidi suurusega rakud. 97 00:05:17,350 --> 00:05:20,871 See on tõesti kõik see on, see on lihtsalt tohutu hulga rakkude, 98 00:05:20,871 --> 00:05:23,370 nagu iga teine ​​massiivi te olete juba tuttav ja vaata, 99 00:05:23,370 --> 00:05:26,430 välja arvatud iga element on üks bait lai. 100 00:05:26,430 --> 00:05:30,030 Ja nagu massiivi, Iga element on aadress. 101 00:05:30,030 --> 00:05:32,120 Iga element massiivi on indeks, ja me 102 00:05:32,120 --> 00:05:36,302 saab kasutada, et indeks teha nn juhusliku juurdepääsu massiivi. 103 00:05:36,302 --> 00:05:38,510 Me ei pea algama alguses massiiv, 104 00:05:38,510 --> 00:05:40,569 itereerima läbi iga ühe elemendi selle, 105 00:05:40,569 --> 00:05:41,860 leida, mida me otsime. 106 00:05:41,860 --> 00:05:45,790 Me saame vaid öelda, ma tahan saada 15. element või 100. element. 107 00:05:45,790 --> 00:05:49,930 Ja sa võid läbida, et number ja saada väärtus, mida otsite. 108 00:05:49,930 --> 00:05:54,460 >> Samamoodi iga asukohta mälu on aadress. 109 00:05:54,460 --> 00:05:57,320 Nii et teie mälu võiks välja midagi sellist. 110 00:05:57,320 --> 00:06:01,420 Siin on väga väike patakas mälu, see on 20 baiti mälu. 111 00:06:01,420 --> 00:06:04,060 Esimesed 20 baiti, sest minu käsitletakse seal allosas 112 00:06:04,060 --> 00:06:08,890 on 0, 1, 2, 3, ja nii kõik viis kuni 19. 113 00:06:08,890 --> 00:06:13,190 Ja kui ma kuulutada muutujate ja kui ma hakkan nendega koostööd tegema, 114 00:06:13,190 --> 00:06:15,470 Süsteemi saab seadistada kõrvale ruumi minu jaoks 115 00:06:15,470 --> 00:06:17,595 Selles mälu tööd minu muutujaid. 116 00:06:17,595 --> 00:06:21,610 Nii et ma võiks öelda, char c võrdub kapitali H. Ja mis juhtub? 117 00:06:21,610 --> 00:06:23,880 Noh süsteem läheb kõrvale minu jaoks üks bait. 118 00:06:23,880 --> 00:06:27,870 Sel juhul valis baidist neli, bait aadressil neli, 119 00:06:27,870 --> 00:06:31,310 ja see läheb salvestada kirja kapitali H seal minu jaoks. 120 00:06:31,310 --> 00:06:34,350 Kui ma siis ütlen int kiirus limiit võrdub 65, siis on 121 00:06:34,350 --> 00:06:36,806 läheb kõrvale neli baiti mälu mind. 122 00:06:36,806 --> 00:06:39,180 Ja see läheb kohelda neid nelja baiti ühtse üksusena 123 00:06:39,180 --> 00:06:41,305 sest mida me töötame koos on täisarv siin. 124 00:06:41,305 --> 00:06:44,350 Ja see läheb salvestada 65 seal. 125 00:06:44,350 --> 00:06:47,000 >> Nüüd juba ma olen selline ütlen sulle natuke vale, 126 00:06:47,000 --> 00:06:50,150 õige, sest me teame, et arvutite tööd kahendsüsteemis. 127 00:06:50,150 --> 00:06:53,100 Nad ei saa aru, tingimata, mida kapitali H on 128 00:06:53,100 --> 00:06:57,110 või mida 65 on nad ainult mõista binaarne, ühtede ja nullide. 129 00:06:57,110 --> 00:06:59,000 Ja nii tegelikult, mida me säilitamine on 130 00:06:59,000 --> 00:07:03,450 ei ole kirja H ja number 65, vaid pigem binaarse esindused 131 00:07:03,450 --> 00:07:06,980 selle, mida vaadata natuke midagi sellist. 132 00:07:06,980 --> 00:07:10,360 Ja eriti kontekstis täisarv muutuja 133 00:07:10,360 --> 00:07:13,559 see ei lähe lihtsalt sülitada see, ta ei kavatse seda ravida ühe neljast 134 00:07:13,559 --> 00:07:15,350 bait patakas tingimata, see on tegelikult läheb 135 00:07:15,350 --> 00:07:19,570 pidada seda neli üks bait tükkideks, mis võib välja midagi sellist. 136 00:07:19,570 --> 00:07:22,424 Ja isegi see ei ole täiesti õige kas, 137 00:07:22,424 --> 00:07:24,840 sest midagi, mida nimetatakse endianness, mis meil ei ole 138 00:07:24,840 --> 00:07:26,965 hakka nüüd, kuid kui sa oled uudishimulik, 139 00:07:26,965 --> 00:07:29,030 võite lugeda üles vähe ja suur endianness. 140 00:07:29,030 --> 00:07:31,640 Aga pärast seda argumenti, huvides see video, 141 00:07:31,640 --> 00:07:34,860 olgem lihtsalt eeldada, et on Tegelikult, kui number 65 oleks 142 00:07:34,860 --> 00:07:36,970 olema esindatud mälu iga süsteem, 143 00:07:36,970 --> 00:07:38,850 kuigi see ei ole päris tõsi. 144 00:07:38,850 --> 00:07:41,700 >> Aga olgem tegelikult lihtsalt saada lahti kõik binaarsed täielikult, 145 00:07:41,700 --> 00:07:44,460 ja mõelge, kui H ja 65, see on palju lihtsam 146 00:07:44,460 --> 00:07:47,900 mõelda nagu et kui inimene. 147 00:07:47,900 --> 00:07:51,420 Olgu, nii tundub ka võibolla natuke juhuslik, et I've- minu süsteemi 148 00:07:51,420 --> 00:07:55,130 ei andnud mulle baiti 5, 6, 7, ja 8 salvestada täisarv. 149 00:07:55,130 --> 00:07:58,580 Seal on põhjus, et liiga, mis me ei hakka kohe, vaid piisab 150 00:07:58,580 --> 00:08:00,496 see tähendab, et mida arvuti teeb siin 151 00:08:00,496 --> 00:08:02,810 Ilmselt on hea liikuda oma osa. 152 00:08:02,810 --> 00:08:06,020 Et anna mulle mälu, mis on tingimata seljad. 153 00:08:06,020 --> 00:08:10,490 Kuigi see läheb seda teha nüüd kui ma tahan saada teise string, 154 00:08:10,490 --> 00:08:13,080 nimetatakse perekonnanimi, ja ma tahan panna Lloyd seal. 155 00:08:13,080 --> 00:08:18,360 Ma lähen vaja, et üks iseloomu, iga tähe, mis on 156 00:08:18,360 --> 00:08:21,330 läheb vaja ühte iseloomu, üks bait mälu. 157 00:08:21,330 --> 00:08:26,230 Nii et kui ma saaks panna Lloyd minu rida niimoodi ma olen päris hea minna, eks? 158 00:08:26,230 --> 00:08:28,870 Mis puudu? 159 00:08:28,870 --> 00:08:31,840 >> Pea meeles, et iga string me töötame koos C lõpeb kurakriips null, 160 00:08:31,840 --> 00:08:33,339 ja me ei saa jätta, et siin, kas. 161 00:08:33,339 --> 00:08:36,090 Me peame jätma ühe baidi mälu hoida, et nii me 162 00:08:36,090 --> 00:08:39,130 tea, millal meie string on lõppenud. 163 00:08:39,130 --> 00:08:41,049 Nii jälle see kord sellest, kuidas asjad 164 00:08:41,049 --> 00:08:42,799 ilmuvad mälu võiks olla natuke juhuslik, 165 00:08:42,799 --> 00:08:44,870 kuid tegelikult on see, kuidas Kõige süsteemid on loodud. 166 00:08:44,870 --> 00:08:48,330 Et rida neid korduvaladel nelja põhjustel jälle 167 00:08:48,330 --> 00:08:50,080 et me ei pea sattuda just nüüd. 168 00:08:50,080 --> 00:08:53,060 Aga see, et piisab, kui öelda, et Pärast neid kolme rida koodi, 169 00:08:53,060 --> 00:08:54,810 see on see, mida mälu tunduda. 170 00:08:54,810 --> 00:08:58,930 Kui mul on vaja mälukohtades 4, 8 ja 12, et hoida oma andmed, 171 00:08:58,930 --> 00:09:01,100 see on see, mida minu mälu tunduda. 172 00:09:01,100 --> 00:09:04,062 >> Ja just eriti pedantne siin, kui 173 00:09:04,062 --> 00:09:06,020 me räägime mälu aadressid me tavaliselt 174 00:09:06,020 --> 00:09:08,390 kasutab selleks kuueteistkümnendsüsteemis salakoodi. 175 00:09:08,390 --> 00:09:12,030 Miks me ei teisendada kõik need alates koma et heksadesimaalilukua 176 00:09:12,030 --> 00:09:15,010 lihtsalt sellepärast, et see on üldiselt kuidas me nimetame mälu. 177 00:09:15,010 --> 00:09:17,880 Nii et selle asemel on 0 kuni 19, mis meil on null 178 00:09:17,880 --> 00:09:20,340 x nullist null x1 kolm. 179 00:09:20,340 --> 00:09:23,790 Need on 20 baiti mälu, et me on või me vaatleme seda pilti 180 00:09:23,790 --> 00:09:25,540 siin samas. 181 00:09:25,540 --> 00:09:29,310 >> Nii et kõik mis öeldud, olgem sammu kaugusel mälu teist 182 00:09:29,310 --> 00:09:30,490 ja tagasi suunanäitajaks. 183 00:09:30,490 --> 00:09:32,420 Siin on kõige olulisem meeles pidada 184 00:09:32,420 --> 00:09:34,070 kui me alustame koos suunanäitajaks. 185 00:09:34,070 --> 00:09:36,314 Pointer on midagi rohkem kui aadress. 186 00:09:36,314 --> 00:09:38,230 Ma ütlen veelkord, sest see on nii oluline, 187 00:09:38,230 --> 00:09:42,730 osuti on midagi rohkem kui aadress. 188 00:09:42,730 --> 00:09:47,760 Lähtekohad on aadressid kohad mälu, kus muutujad elada. 189 00:09:47,760 --> 00:09:52,590 Teades, et see muutub loodetavasti natuke lihtsam töötada koos nendega. 190 00:09:52,590 --> 00:09:54,550 Teine asi, mulle meeldib mida teha, on olla omamoodi 191 00:09:54,550 --> 00:09:58,510 diagrammide visuaalselt esindavad, milline on toimub erinevate rida koodi. 192 00:09:58,510 --> 00:10:00,660 Ja me teeme seda paar kordi suunanäitajaks, 193 00:10:00,660 --> 00:10:03,354 ja kui me räägime dünaamiline mälu eraldamise samuti. 194 00:10:03,354 --> 00:10:06,020 Sest ma arvan, et need diagrammid võib olla eriti kasulik. 195 00:10:06,020 --> 00:10:09,540 >> Nii et kui ma ütlen näiteks int k minu kood, mis toimub? 196 00:10:09,540 --> 00:10:12,524 Noh, mis on põhimõtteliselt toimuvast Ma saan mälu kõrvale minu, 197 00:10:12,524 --> 00:10:14,690 aga ma isegi ei meeldi mõtle selle peale niimoodi, ma 198 00:10:14,690 --> 00:10:16,300 meeldib mõelda nagu karp. 199 00:10:16,300 --> 00:10:20,090 Mul on kast ja see on värviline roheline, sest ma 200 00:10:20,090 --> 00:10:21,750 panna täisarvud roheline kaste. 201 00:10:21,750 --> 00:10:23,666 Kui see oli märk ma võib olla sinise kasti. 202 00:10:23,666 --> 00:10:27,290 Aga ma olen alati öelnud, kui ma loon kast, mis mahub täisarvud 203 00:10:27,290 --> 00:10:28,950 et kast on värvitud roheliseks. 204 00:10:28,950 --> 00:10:33,020 Ja ma võtan püsiva marker mu kirjutada k küljel seda. 205 00:10:33,020 --> 00:10:37,590 Nii et mul on kasti nimetatakse k, kuhu võin panna täisarvud. 206 00:10:37,590 --> 00:10:41,070 Nii et kui ma ütlen, int k, mis on Mis juhtub mu peas. 207 00:10:41,070 --> 00:10:43,140 Kui ma ütlen, k võrdub viis, mida ma teen? 208 00:10:43,140 --> 00:10:45,110 Noh, ma panen viie kasti, eks. 209 00:10:45,110 --> 00:10:48,670 See on üsna lihtne, kui Ma ütlen int k, luua kasti nimetatakse k. 210 00:10:48,670 --> 00:10:52,040 Kui ma ütlen, k võrdub 5, pane viis kasti. 211 00:10:52,040 --> 00:10:53,865 Loodetavasti ei ole liiga palju hüpe. 212 00:10:53,865 --> 00:10:55,990 Siin, kus asjad lähevad natuke huvitav küll. 213 00:10:55,990 --> 00:11:02,590 Kui ma ütlen, int * pk, samuti ka siis, kui ma seda ei tee tea, mida see tähendab tingimata, 214 00:11:02,590 --> 00:11:06,150 see on selgelt saanud midagi pistmist täisarv. 215 00:11:06,150 --> 00:11:08,211 Nii et ma lähen värvi Selle kasti roheline-ish, 216 00:11:08,211 --> 00:11:10,210 Ma tean, et see on midagi pistmist täisarv, 217 00:11:10,210 --> 00:11:13,400 kuid see ei ole täisarv ise, sest see on int star. 218 00:11:13,400 --> 00:11:15,390 Midagi veidi erinevat infot. 219 00:11:15,390 --> 00:11:17,620 Nii täisarv on kaasatud, aga muidu see on 220 00:11:17,620 --> 00:11:19,830 ei erine liiga palju mida me räägime. 221 00:11:19,830 --> 00:11:24,240 See kast, selle sain silt, see on seljas sildi pk, 222 00:11:24,240 --> 00:11:27,280 ja see mahub int tähte, olenemata need on. 223 00:11:27,280 --> 00:11:29,894 Nad on midagi teha täisarve, selgelt. 224 00:11:29,894 --> 00:11:31,060 Siin on viimane küll. 225 00:11:31,060 --> 00:11:37,650 Kui ma ütlen, pk = & k, oot, Mis juhtus, eks? 226 00:11:37,650 --> 00:11:41,820 Nii et see juhuslik number, näiliselt juhuslik number, saab visatud kasti juures. 227 00:11:41,820 --> 00:11:44,930 Kõik, mis on, on pk Jääb aadress k. 228 00:11:44,930 --> 00:11:52,867 Nii et ma olen kinni, kus k elab mälu aadressi, aadressi oma baiti. 229 00:11:52,867 --> 00:11:55,200 Kõik, mida ma teen on ma räägin et väärtus on see, mida ma lähen 230 00:11:55,200 --> 00:11:59,430 panna sees minu kasti nimega pk. 231 00:11:59,430 --> 00:12:02,080 Ja kuna need asjad on viiteid ja seetõttu otsin 232 00:12:02,080 --> 00:12:04,955 kell string nagu null x kaheksa null c seitse neli kaheksa 233 00:12:04,955 --> 00:12:07,790 kaks null on ilmselt ei ole väga sisukas. 234 00:12:07,790 --> 00:12:12,390 Kui me tavaliselt visualiseerida suunanäitajaks, me tegelikult teeme nii suunanäitajaks. 235 00:12:12,390 --> 00:12:17,000 Pk annab meile infot peame leidma k mälestuseks. 236 00:12:17,000 --> 00:12:19,120 Nii et põhimõtteliselt pk on nool ta. 237 00:12:19,120 --> 00:12:21,670 Ja kui me kõnnime pikkus Selle nool, kujutage ette, 238 00:12:21,670 --> 00:12:25,280 see on midagi, mida saab kõndida, kui me kõndida piki noolt 239 00:12:25,280 --> 00:12:29,490 päris otsa, et nool, me leiad asukohta mälus 240 00:12:29,490 --> 00:12:31,390 kus k elab. 241 00:12:31,390 --> 00:12:34,360 Ja see on tõesti oluline sest kui me teame, kus k elab, 242 00:12:34,360 --> 00:12:37,870 saame alustada tööd andmeid sees, et mälu asukohta. 243 00:12:37,870 --> 00:12:40,780 Kuigi me saada Teeny Veidi enne endale praegu. 244 00:12:40,780 --> 00:12:42,240 >> Mis on osuti? 245 00:12:42,240 --> 00:12:45,590 Pointer on andmeühiku kelle väärtus on mälu aadress. 246 00:12:45,590 --> 00:12:49,740 See oli see, et null x kaheksa null kraami toimub, see oli mälu aadress. 247 00:12:49,740 --> 00:12:52,060 See oli asukohta mälus. 248 00:12:52,060 --> 00:12:55,080 Ja tüüpi pointer kirjeldab, millist 249 00:12:55,080 --> 00:12:56,930 andmete leiad juures et mälu aadress. 250 00:12:56,930 --> 00:12:58,810 Nii et int star osa paremale. 251 00:12:58,810 --> 00:13:03,690 Kui ma jälgin, et nool, see on kõik viib mind asukohta. 252 00:13:03,690 --> 00:13:06,980 Ja selles kohas, mida ma leiad seal minu näide, 253 00:13:06,980 --> 00:13:08,240 on roheline värvi kasti. 254 00:13:08,240 --> 00:13:12,650 See on täisarv, mis on see, mida ma leiad, kui ma lähen, et aadress. 255 00:13:12,650 --> 00:13:14,830 Andmed tüübi kohta pointer kirjeldab 256 00:13:14,830 --> 00:13:17,936 leiad sel mälu aadress. 257 00:13:17,936 --> 00:13:19,560 Nii et siin on väga lahe asi küll. 258 00:13:19,560 --> 00:13:25,090 Osuti võimaldab meil edasi muutujate funktsioonide vahel. 259 00:13:25,090 --> 00:13:28,520 Ja tegelikult edasi muutujad ja ei liigu neist koopiaid. 260 00:13:28,520 --> 00:13:32,879 Sest kui me teame täpselt, kus mälu leida muutuja, 261 00:13:32,879 --> 00:13:35,670 me ei pea tegema koopia siis me ei saa lihtsalt minna selles kohas 262 00:13:35,670 --> 00:13:37,844 ja töötada, et muutuja. 263 00:13:37,844 --> 00:13:40,260 Nii sisuliselt vihjeid omamoodi ning teeb arvuti keskkond 264 00:13:40,260 --> 00:13:42,360 palju nagu reaalses maailmas, eks. 265 00:13:42,360 --> 00:13:44,640 >> Nii et siin on analoogia. 266 00:13:44,640 --> 00:13:48,080 Ütleme, et mul on sülearvuti, õige, ja see on täis märkmeid. 267 00:13:48,080 --> 00:13:50,230 Ja ma tahaksin, et te seda uuendada. 268 00:13:50,230 --> 00:13:53,960 Olete funktsioon, mis uuendused märgib õige. 269 00:13:53,960 --> 00:13:56,390 Kuidas me oleme olnud töötab siiani, mida 270 00:13:56,390 --> 00:14:02,370 juhtub on siis võtan sülearvuti, lähete koopia salvestada, 271 00:14:02,370 --> 00:14:06,410 saate teha Xerox koopia iga lehekülje sülearvuti. 272 00:14:06,410 --> 00:14:09,790 Sa jäta mu sülearvuti tagasi minu laual, kui sa oled teinud, 273 00:14:09,790 --> 00:14:14,600 lähete ja kriipsutama asjad minu sülearvuti, mis on aegunud või valesti, 274 00:14:14,600 --> 00:14:19,280 ja siis saad edasi tagasi minu pakk Xerox lehekülge 275 00:14:19,280 --> 00:14:22,850 mis on replica minu sülearvuti muutusi, mis sa oled teinud seda. 276 00:14:22,850 --> 00:14:27,040 Ja sel hetkel, et see on kuni mind helistaja funktsiooni, kuna helistaja, 277 00:14:27,040 --> 00:14:30,582 otsustada võtta oma märkmeid ja integreerida neid tagasi oma sülearvuti. 278 00:14:30,582 --> 00:14:32,540 Nii et palju samme osalenud siin, eks. 279 00:14:32,540 --> 00:14:34,850 Nagu kas ei oleks parem kui ma ütlen, Hei, kas sa 280 00:14:34,850 --> 00:14:38,370 uuendada oma sülearvuti mulle käe minu sülearvuti, 281 00:14:38,370 --> 00:14:40,440 ja te võtate asju ja sõna otseses mõttes risti neid 282 00:14:40,440 --> 00:14:42,810 ja uuendada oma märkmeid minu sülearvuti. 283 00:14:42,810 --> 00:14:45,140 Ja siis anna mulle minu sülearvuti tagasi. 284 00:14:45,140 --> 00:14:47,320 See on selline, mida viiteid võimaldab meil teha, 285 00:14:47,320 --> 00:14:51,320 nad teevad seda keskkonda palju rohkem meeldib, kuidas me tegutseme reaalsus. 286 00:14:51,320 --> 00:14:54,640 >> Olgu siis nii, osuti on, räägime 287 00:14:54,640 --> 00:14:58,040 kuidas osuti tööle C ja kuidas saame alustada nendega koostööd tegema. 288 00:14:58,040 --> 00:15:02,550 Nii et väga lihtne pointer C nimetatakse nullviida. 289 00:15:02,550 --> 00:15:04,830 Null pointer punktid midagi. 290 00:15:04,830 --> 00:15:08,310 See ilmselt tundub see tegelikult ei ole väga kasulik asi, 291 00:15:08,310 --> 00:15:10,500 aga nagu me näha natuke hiljem, asjaolu, 292 00:15:10,500 --> 00:15:15,410 et see nullviida olemas tegelikult tõesti võib tulla mugav. 293 00:15:15,410 --> 00:15:19,090 Ja alati, kui loote pointer, ja sa ei määra selle väärtuseks immediately- 294 00:15:19,090 --> 00:15:21,060 näide, millega selle väärtus kohe 295 00:15:21,060 --> 00:15:25,401 on paar slaidi tagasi kus ma ütlesin pk võrdub & k, 296 00:15:25,401 --> 00:15:28,740 pk saab k aadress, kui me näeme, mida see tähendab, 297 00:15:28,740 --> 00:15:32,990 Me näeme, kuidas koodi shortly- kui me ei määra selle väärtuseks midagi 298 00:15:32,990 --> 00:15:35,380 mõtestatud kohe, Alati tuleb 299 00:15:35,380 --> 00:15:37,480 seada kursor punkti tühjaks. 300 00:15:37,480 --> 00:15:40,260 Sa peaksid kehtestama see käsk midagi. 301 00:15:40,260 --> 00:15:43,614 >> See on väga erinev just lahkumas väärtus, kui see on 302 00:15:43,614 --> 00:15:45,530 ja siis kuulutab pointer ja lihtsalt eeldades 303 00:15:45,530 --> 00:15:48,042 see on null, sest see on harva tõsi. 304 00:15:48,042 --> 00:15:50,000 Nii et sa peaksid alati seatud väärtus osuti 305 00:15:50,000 --> 00:15:55,690 tühjaks, kui sa ei määra selle väärtuseks et midagi olulist kohe. 306 00:15:55,690 --> 00:15:59,090 Te saate vaadata, kas osuti väärtus on null abil võrdõiguslikkuse operaator 307 00:15:59,090 --> 00:16:05,450 (==), Just nagu sina võrrelda tahes täisarv väärtuste või sümboli väärtus kasutades (==) 308 00:16:05,450 --> 00:16:06,320 samuti. 309 00:16:06,320 --> 00:16:10,994 See on eriline omamoodi pidev väärtus, mida saab kasutada, et testida. 310 00:16:10,994 --> 00:16:13,160 Nii et oli väga lihtne pointer, null pointer. 311 00:16:13,160 --> 00:16:15,320 Teine võimalus luua osuti on eraldada 312 00:16:15,320 --> 00:16:18,240 aadressi muutuva olete juba loonud, 313 00:16:18,240 --> 00:16:22,330 ja sa seda kasutada & operaator aadress kaevandamine. 314 00:16:22,330 --> 00:16:26,720 Mis me oleme juba näinud varem esimeses skeem Näiteks ma näitasin. 315 00:16:26,720 --> 00:16:31,450 Nii et kui x on muutuja, mis me oleme juba loodud tüüpi täisarv, 316 00:16:31,450 --> 00:16:35,110 Seejärel & x on viit täisarv. 317 00:16:35,110 --> 00:16:39,810 ja x on- mäletan, ja läheb ekstrakti aadress asi õige. 318 00:16:39,810 --> 00:16:45,350 Ja kuna osuti on lihtsalt aadressi, kui & x on viit täisarv 319 00:16:45,350 --> 00:16:48,560 mille väärtus on kui mälu x elus. 320 00:16:48,560 --> 00:16:50,460 See on x aadressi. 321 00:16:50,460 --> 00:16:53,296 Nii ja x on aadress x. 322 00:16:53,296 --> 00:16:55,670 Võtame selle ühe sammu edasi ja ühendada midagi 323 00:16:55,670 --> 00:16:58,380 Ma vihjas eelneva video. 324 00:16:58,380 --> 00:17:06,730 Kui arr on hulgaliselt paarismängus siis & arr nurksulg i on pointer 325 00:17:06,730 --> 00:17:08,109 kahekordse. 326 00:17:08,109 --> 00:17:08,970 OKEI. 327 00:17:08,970 --> 00:17:12,160 Arr nurksulg i, kui arr on hulgaliselt paarismängus 328 00:17:12,160 --> 00:17:19,069 siis Arr nurksulg i on i-nda elemendi, et massiiv, 329 00:17:19,069 --> 00:17:29,270 ja & arr nurksulg i on koht, kus on Mälu i-nda elemendi arr olemas. 330 00:17:29,270 --> 00:17:31,790 >> Mis siis kaudselt siin? 331 00:17:31,790 --> 00:17:34,570 Massiivid nimi, tähendas kogu see asi, 332 00:17:34,570 --> 00:17:39,290 on see, et massiivi nimi on tegelikult ise osuti. 333 00:17:39,290 --> 00:17:41,170 Olete töötanud koos suunanäitajaks kogu aeg 334 00:17:41,170 --> 00:17:45,290 iga kord, kui olete kasutanud massiivi. 335 00:17:45,290 --> 00:17:49,090 Pea meeles, alates näiteks muutuva ulatusega, 336 00:17:49,090 --> 00:17:53,420 lähedal lõpuks video esitlen ma näide, kus meil on funktsioon 337 00:17:53,420 --> 00:17:56,890 nimetatakse komplekt int ja funktsiooni nimetatakse array. 338 00:17:56,890 --> 00:18:00,490 Ja teie ülesanne teha kindlaks, kas või mida 339 00:18:00,490 --> 00:18:03,220 väärtused, mida me välja printida lõppu funktsiooni, 340 00:18:03,220 --> 00:18:05,960 lõpus põhiprogrammi. 341 00:18:05,960 --> 00:18:08,740 >> Kui te mäletate, et näiteks või kui te olete vaatasin video, 342 00:18:08,740 --> 00:18:13,080 sa tead, et kui teile-kõne komplekt int efektiivselt ei tee midagi. 343 00:18:13,080 --> 00:18:16,390 Aga kõnet, et massiivi teeb. 344 00:18:16,390 --> 00:18:19,280 Ja ma justkui ilustatud, miks mis juhtus ajal. 345 00:18:19,280 --> 00:18:22,363 Ma lihtsalt ütlesin, ka see on massiivi, see on eriline, sa tead, seal on põhjus. 346 00:18:22,363 --> 00:18:25,020 Põhjuseks on see, et massiivi poolt nimi on tõesti ainult pointer, 347 00:18:25,020 --> 00:18:28,740 ja seal on see eriline nurksulg süntaksit 348 00:18:28,740 --> 00:18:30,510 Et asi palju mõnusam töötada. 349 00:18:30,510 --> 00:18:34,410 Ja nad teevad ideed pointer palju vähem hirmutada, 350 00:18:34,410 --> 00:18:36,800 ja sellepärast nad omamoodi on esitatud nii. 351 00:18:36,800 --> 00:18:38,600 Aga tõesti massiivid on vaid suunanäitajaks. 352 00:18:38,600 --> 00:18:41,580 Ja sellepärast, kui me tehtud muudatus massiivi, 353 00:18:41,580 --> 00:18:44,880 Kui me möödunud massiivi parameetriks funktsioonile või argumendina 354 00:18:44,880 --> 00:18:50,110 funktsioonile, sisu massiivi tegelikult muutunud nii Väljakutsutu 355 00:18:50,110 --> 00:18:51,160 ja helistaja. 356 00:18:51,160 --> 00:18:55,846 Milline iga muud liiki muutuja nägime ei olnud. 357 00:18:55,846 --> 00:18:58,970 Nii et on lihtsalt midagi, mida meeles pahanda, kui te töötate suunanäitajaks, 358 00:18:58,970 --> 00:19:01,610 on see, et selle nime massiivi tegelikult osuti 359 00:19:01,610 --> 00:19:04,750 esimesele element, et massiivi. 360 00:19:04,750 --> 00:19:08,930 >> OK, nii nüüd on meil kõik need faktid, olgem hoida läheb, eks. 361 00:19:08,930 --> 00:19:11,370 Miks me hoolime kus midagi elab. 362 00:19:11,370 --> 00:19:14,120 Noh, nagu ma ütlesin, see on päris kasulik teada, kus midagi elab 363 00:19:14,120 --> 00:19:17,240 nii et võid minna sinna ja seda muuta. 364 00:19:17,240 --> 00:19:19,390 Töö on ja tegelikult on asi, mida 365 00:19:19,390 --> 00:19:23,710 tahad teha, et muutuja jõustuvad, ja ei jõustu mõned koopia. 366 00:19:23,710 --> 00:19:26,150 Seda nimetatakse dereferencing. 367 00:19:26,150 --> 00:19:28,690 Läheme viide ja muudame väärtus on. 368 00:19:28,690 --> 00:19:32,660 Nii et kui meil on osuti ja seda nimetatakse pc, ja see viitab märk, 369 00:19:32,660 --> 00:19:40,610 siis saame öelda * pc ja * pc on nimi, mida me leiame, kui me läheme 370 00:19:40,610 --> 00:19:42,910 aadressile tk. 371 00:19:42,910 --> 00:19:47,860 Mida me leiame seal on iseloomu ja * pc on, kuidas me viidata andmete juures, et 372 00:19:47,860 --> 00:19:48,880 asukoht. 373 00:19:48,880 --> 00:19:54,150 Nii võime öelda midagi * pc = D või midagi sellist, 374 00:19:54,150 --> 00:19:59,280 ja see tähendab, et mis iganes oli mälu aadress pc, 375 00:19:59,280 --> 00:20:07,040 mis tahes laadi varem seal on nüüd D, kui me ütleme, * pc = D. 376 00:20:07,040 --> 00:20:10,090 >> Nii et siin me läheme uuesti imelikke C värk, eks. 377 00:20:10,090 --> 00:20:14,560 Nii oleme näinud * varem kui on kuidagi osa andmete liiki, 378 00:20:14,560 --> 00:20:17,160 ja nüüd on see kasutusel veidi teises kontekstis 379 00:20:17,160 --> 00:20:19,605 juurdepääsu andmetele kohas. 380 00:20:19,605 --> 00:20:22,480 Ma tean, et see on natuke segane ja see on tegelikult osa kogu 381 00:20:22,480 --> 00:20:25,740 nagu, miks suunanäitajaks on see mütoloogia ümber, kuna on nii keeruline, 382 00:20:25,740 --> 00:20:28,250 on selline süntaks probleem, ausalt. 383 00:20:28,250 --> 00:20:31,810 Aga * kasutatakse mõlemas kontekstis, nii osana tüübist nimi 384 00:20:31,810 --> 00:20:34,100 ja me näeme vähe hiljem midagi muud ka. 385 00:20:34,100 --> 00:20:36,490 Ja praegu on apparent operaator. 386 00:20:36,490 --> 00:20:38,760 Nii see läheb viide see pöördub andmeid 387 00:20:38,760 --> 00:20:43,000 kohas osuti ja võimaldab teil manipuleerida ta soovid. 388 00:20:43,000 --> 00:20:45,900 >> Nüüd on see väga sarnane külastavad oma naabri, eks. 389 00:20:45,900 --> 00:20:48,710 Kui sa tead, mida teie naaber elab, sa oled 390 00:20:48,710 --> 00:20:50,730 ei poomise läbi oma ligimest. 391 00:20:50,730 --> 00:20:53,510 Sa tead juhtumisi tea, kus nad elavad, 392 00:20:53,510 --> 00:20:56,870 kuid see ei tähenda, et alusel, millel see teadmine 393 00:20:56,870 --> 00:20:59,170 sa nendega suhtlemisel. 394 00:20:59,170 --> 00:21:01,920 Kui soovite suhelda nendega, sa pead minema oma maja, 395 00:21:01,920 --> 00:21:03,760 sa pead minema sinna, kus nad elavad. 396 00:21:03,760 --> 00:21:07,440 Ja kui sa seda teha, siis saab suhelda 397 00:21:07,440 --> 00:21:09,420 nendega just nagu sina tahaks. 398 00:21:09,420 --> 00:21:12,730 Ja sarnaselt muutujad, sa pead minema oma aadress 399 00:21:12,730 --> 00:21:15,320 kui sa tahad suhelda nendega, sa ei saa lihtsalt tean aadressi. 400 00:21:15,320 --> 00:21:21,495 Ja kuidas sa minna aadress on kasutada * on apparent operaator. 401 00:21:21,495 --> 00:21:23,620 Mis sa arvad juhtub Kui me püüame apparent 402 00:21:23,620 --> 00:21:25,260 osuti, mille väärtus on null? 403 00:21:25,260 --> 00:21:28,470 Tuletame meelde, et null pointer viitab midagi. 404 00:21:28,470 --> 00:21:34,110 Nii et kui sa püüad ja apparent midagi või minna aadressi midagi, 405 00:21:34,110 --> 00:21:36,800 Mis sa arvad juhtub? 406 00:21:36,800 --> 00:21:39,630 Noh, kui sa arvasid segmenteerimine süü, et sa tahaks olla õige. 407 00:21:39,630 --> 00:21:41,390 Kui püüad ja apparent nullviida, 408 00:21:41,390 --> 00:21:43,140 teil laevastikuosi süü. Aga oota, 409 00:21:43,140 --> 00:21:45,820 ei, ma ütlen teile, et Kui sa ei kavatse 410 00:21:45,820 --> 00:21:49,220 seada oma väärtust oma kursor midagi olulist, 411 00:21:49,220 --> 00:21:51,000 sa peaksid seadma tühjaks? 412 00:21:51,000 --> 00:21:55,290 Ma tegin ja tegelikult killustatust Viga on selline hea käitumise eest. 413 00:21:55,290 --> 00:21:58,680 >> Kas olete kunagi deklareeritud muutuja ja ei määratud selle väärtus kohe? 414 00:21:58,680 --> 00:22:02,680 Nii et sa lihtsalt öelda, int x; sa ei tegelikult määrata selle midagi 415 00:22:02,680 --> 00:22:05,340 ja siis hiljem oma kood, sa välja printida väärtus x, 416 00:22:05,340 --> 00:22:07,650 võttes veel määratud see midagi. 417 00:22:07,650 --> 00:22:10,370 Sageli saad null, kuid mõnikord 418 00:22:10,370 --> 00:22:15,000 võib saada mõne juhusliku arvu ja sa ei tea, kust see tuli. 419 00:22:15,000 --> 00:22:16,750 Samamoodi saab asju juhtuda suunanäitajaks. 420 00:22:16,750 --> 00:22:20,110 Kui kuulutada osuti int * pk näiteks 421 00:22:20,110 --> 00:22:23,490 ja sa ei anna see väärtus, sa saad neli baiti mälu. 422 00:22:23,490 --> 00:22:25,950 Ükskõik neljabaidilist mälu saab süsteemi 423 00:22:25,950 --> 00:22:28,970 leiavad, et on mõned mõtestatud väärtus. 424 00:22:28,970 --> 00:22:31,760 Ja oleks võinud olla midagi juba olemas, et 425 00:22:31,760 --> 00:22:34,190 enam ei vajata teine funktsioon, nii et sa pead lihtsalt 426 00:22:34,190 --> 00:22:35,900 mida iganes andmed olid olemas. 427 00:22:35,900 --> 00:22:40,570 >> Mida teha, kui oled proovinud teha apparent Mõnes aadress, mida don't- oli 428 00:22:40,570 --> 00:22:43,410 juba baiti ja info seal, see on nüüd teie kursor. 429 00:22:43,410 --> 00:22:47,470 Kui püüad ja apparent et pointer, siis võib jama mõned mälu 430 00:22:47,470 --> 00:22:49,390 et te ei kavatse jama see kõik. 431 00:22:49,390 --> 00:22:51,639 Ja tegelikult, mida võiks teha midagi tõeliselt masendav, 432 00:22:51,639 --> 00:22:54,880 nagu murda teise programmi, või murda teise funktsiooni, 433 00:22:54,880 --> 00:22:58,289 või midagi pahatahtlikku, et sa ei kavatse seda teha üldse. 434 00:22:58,289 --> 00:23:00,080 Ja nii see on põhjus, miks see tegelikult hea mõte 435 00:23:00,080 --> 00:23:04,030 seada oma suunanäitajaks tühjaks, kui sa ei lasta neil midagi olulist. 436 00:23:04,030 --> 00:23:06,760 See on ilmselt parem juures Päeva lõpuks oma programmi 437 00:23:06,760 --> 00:23:09,840 crash siis seda teha midagi, mis ajab 438 00:23:09,840 --> 00:23:12,400 teise programmi või mõne muu funktsiooni. 439 00:23:12,400 --> 00:23:15,207 See käitumine on ilmselt isegi vähem ideaalne kui lihtsalt krahh. 440 00:23:15,207 --> 00:23:17,040 Ja nii see on põhjus, miks see tegelikult hea harjumus 441 00:23:17,040 --> 00:23:20,920 sattuda, et määrata oma suunanäitajaks tühjaks, kui sa ei seatud neid 442 00:23:20,920 --> 00:23:24,540 mõtestatud väärtus kohe, väärtus, et sa tead 443 00:23:24,540 --> 00:23:27,260 ja et saate turvaliselt apparent. 444 00:23:27,260 --> 00:23:32,240 >> Nii saab tagasi tulla nüüd ja tutvu kell üldine süntaks olukorda. 445 00:23:32,240 --> 00:23:37,400 Kui ma ütlen, int * p ;, mida ma olen lihtsalt teinud? 446 00:23:37,400 --> 00:23:38,530 Mida ma olen teinud on see. 447 00:23:38,530 --> 00:23:43,290 Ma tean, et väärtus p on aadress sest kõik osuti on vaid 448 00:23:43,290 --> 00:23:44,660 aadressid. 449 00:23:44,660 --> 00:23:47,750 Ma ei apparent p abil * operaator. 450 00:23:47,750 --> 00:23:51,250 Selles kontekstis Siit võivad hetkel väga top meenutada * on osa liigist. 451 00:23:51,250 --> 00:23:53,510 Int * on andmetüüp. 452 00:23:53,510 --> 00:23:56,150 Aga ma ei apparent p abil * operaator, 453 00:23:56,150 --> 00:24:01,897 ja kui ma seda teha, kui ma lähen, et aadress, mida ma leida sellele aadressile? 454 00:24:01,897 --> 00:24:02,855 Ma leiad täisarv. 455 00:24:02,855 --> 00:24:05,910 Nii int * p on põhimõtteliselt öeldes, p on aadress. 456 00:24:05,910 --> 00:24:09,500 Ma ei apparent p ja kui Ma teen, ma leida täisarv 457 00:24:09,500 --> 00:24:11,920 sel mälu asukohta. 458 00:24:11,920 --> 00:24:14,260 >> OK, nii ma ütlesin seal oli veel tüütu asi tähed 459 00:24:14,260 --> 00:24:17,060 ja siin on, kui see tüütu asi tähed on. 460 00:24:17,060 --> 00:24:21,640 Kas olete kunagi proovinud kuulutada Mitme muutuja sama tüüpi 461 00:24:21,640 --> 00:24:24,409 Sama rida koodi? 462 00:24:24,409 --> 00:24:27,700 Nii teist, teeselda, et joon, koodi ma tegelikult on seal roheline 463 00:24:27,700 --> 00:24:29,366 ei ole olemas ja see lihtsalt ütleb int x, y, z ;. 464 00:24:29,366 --> 00:24:31,634 465 00:24:31,634 --> 00:24:34,550 Mis see teeks on tegelikult luua kolm täisarvu muutujad teile, 466 00:24:34,550 --> 00:24:36,930 üks nn x, üks nn y ja üks nn z. 467 00:24:36,930 --> 00:24:41,510 See on viis, kuidas seda teha ilma võttes jagada peale kolm rida. 468 00:24:41,510 --> 00:24:43,890 >> Siin, kus tähed saavad tüütu jälle küll, 469 00:24:43,890 --> 00:24:49,200 sest * on tegelikult osa Mõlema tüübi nimi ja osa 470 00:24:49,200 --> 00:24:50,320 muutuja nime. 471 00:24:50,320 --> 00:24:56,430 Ja kui ma ütlen, int * px, py, PZ, mida ma tegelikult saada on viit täisarv 472 00:24:56,430 --> 00:25:01,650 nimetatakse px ja kaks täisarvu, py ja PZ. 473 00:25:01,650 --> 00:25:04,950 Ja see on ilmselt pole see, mida Me tahame, et see ei ole hea. 474 00:25:04,950 --> 00:25:09,290 >> Nii et kui ma tahan luua mitu viiteid Samal real, sama tüüpi, 475 00:25:09,290 --> 00:25:12,140 ja tähed, mida ma tegelikult vaja mida teha, on öelda, int * pa * pb, * pc. 476 00:25:12,140 --> 00:25:17,330 477 00:25:17,330 --> 00:25:20,300 Nüüd olles just ütles, et ja nüüd ütlen teile seda, 478 00:25:20,300 --> 00:25:22,170 sa ilmselt ei tee seda. 479 00:25:22,170 --> 00:25:25,170 Ja see on ilmselt hea ausalt, sest te võite kogemata 480 00:25:25,170 --> 00:25:26,544 jätta täht, midagi sellist. 481 00:25:26,544 --> 00:25:29,290 See on ilmselt kõige parem olla kuulutada näpunäiteid konkreetsete liinide, 482 00:25:29,290 --> 00:25:31,373 aga see on lihtsalt veel üks need tüütud süntaks 483 00:25:31,373 --> 00:25:35,310 asju tähte, mis muudavad suunanäitajaks nii raske töötada. 484 00:25:35,310 --> 00:25:39,480 Sest see on lihtsalt selle süntaktilise jama teil niita. 485 00:25:39,480 --> 00:25:41,600 Mis praktikas see ei tõesti läbiv. 486 00:25:41,600 --> 00:25:45,410 Ma ikka teevad vigu sellega veel pärast programmeerimine 10 aastat, 487 00:25:45,410 --> 00:25:49,630 nii et ärge pahaseks, kui midagi juhtub teile, see on päris levinud ausalt. 488 00:25:49,630 --> 00:25:52,850 See on tõesti selline viga süntaksi. 489 00:25:52,850 --> 00:25:54,900 >> OK, et ma mingi lubasin et meil oleks vaadata 490 00:25:54,900 --> 00:25:59,370 mõiste kui suur on string. 491 00:25:59,370 --> 00:26:02,750 Noh, kui ma ütlesin, et string, me oleme tõesti selline 492 00:26:02,750 --> 00:26:04,140 lebanud teile kogu aeg. 493 00:26:04,140 --> 00:26:06,181 Pole andmete tüübi nimega string, ja tegelikult ma 494 00:26:06,181 --> 00:26:09,730 mainisid seda ühele meie varem videoid andmetüüpe 495 00:26:09,730 --> 00:26:13,820 et string oli andmete tüüp, mis loodi teile CS50.h. 496 00:26:13,820 --> 00:26:17,050 Sa pead # include CS50.h, et seda kasutada. 497 00:26:17,050 --> 00:26:19,250 >> Noh string on tõesti ainult alias midagi 498 00:26:19,250 --> 00:26:23,600 nimetatakse char *, et kursor iseloomu. 499 00:26:23,600 --> 00:26:26,010 Noh suunanäitajaks, mäletate, on vaid tegeleb. 500 00:26:26,010 --> 00:26:28,780 Mis on suurus baitides string? 501 00:26:28,780 --> 00:26:29,796 Noh see on neli või kaheksa. 502 00:26:29,796 --> 00:26:32,170 Ja põhjus, miks ma öelda nelja või Kaheksa on, sest see tegelikult 503 00:26:32,170 --> 00:26:36,730 sõltub süsteemi, kui te kasutate CS50 ide, char * on suurus char 504 00:26:36,730 --> 00:26:39,340 * On kaheksa, see on 64-bitine süsteem. 505 00:26:39,340 --> 00:26:43,850 Iga aadressi mälus on 64 bitti pikk. 506 00:26:43,850 --> 00:26:48,270 Kui te kasutate CS50 seadme või kasutades mis tahes 32-bit masin, 507 00:26:48,270 --> 00:26:51,640 ja sa oled kuulnud, et aja jooksul 32-bit masin, mis on 32-bitine masin? 508 00:26:51,640 --> 00:26:56,090 Aga see lihtsalt tähendab, et iga aadressi mälus on 32 bitti pikk. 509 00:26:56,090 --> 00:26:59,140 Ja nii 32 bitti on neli baiti. 510 00:26:59,140 --> 00:27:02,710 Nii char * on neli või kaheksa baiti sõltuvalt teie süsteemi. 511 00:27:02,710 --> 00:27:06,100 Ja tõepoolest mingit tüüpi andmeid, ja viit andmeid 512 00:27:06,100 --> 00:27:12,030 kirjuta, sest kõik osuti on vaid aadressid on kokku neli või kaheksa baiti. 513 00:27:12,030 --> 00:27:14,030 Nii saab vaadata seda Skeem ja olgem sõlmida 514 00:27:14,030 --> 00:27:18,130 Selle video väike harjutus siin. 515 00:27:18,130 --> 00:27:21,600 Nii et siin on diagramm jätsime maha alguses video. 516 00:27:21,600 --> 00:27:23,110 Mis juhtub nüüd, kui ma ütlen * pk = 35? 517 00:27:23,110 --> 00:27:26,370 518 00:27:26,370 --> 00:27:30,530 Mida see tähendab, kui ma ütlen, * pk = 35? 519 00:27:30,530 --> 00:27:32,420 Võtke teine. 520 00:27:32,420 --> 00:27:34,990 * pk. 521 00:27:34,990 --> 00:27:39,890 Kontekstis siin, * on apparent operaator. 522 00:27:39,890 --> 00:27:42,110 Nii et kui apparent operaatori kasutamisel 523 00:27:42,110 --> 00:27:48,520 läheme aadress osutas PK ja muudame me leiame. 524 00:27:48,520 --> 00:27:55,270 Nii * pk = 35 tõhusamalt kas see pildile. 525 00:27:55,270 --> 00:27:58,110 Nii et see on põhimõtteliselt süntaktiliselt identne võttes ütles k = 35. 526 00:27:58,110 --> 00:28:00,740 527 00:28:00,740 --> 00:28:01,930 >> Veel üks. 528 00:28:01,930 --> 00:28:05,510 Kui ma ütlen, int m, ma loon uus muutuja nimega m. 529 00:28:05,510 --> 00:28:08,260 Uus kast, see on roheline kast, sest see saab korraldada täisarv, 530 00:28:08,260 --> 00:28:09,840 ja see on märgistatud m. 531 00:28:09,840 --> 00:28:14,960 Kui ma ütlen, m = 4, panin täisarv sellesse kasti. 532 00:28:14,960 --> 00:28:20,290 Kui ütleme pk = & m, kuidas Selle skeemi muutus? 533 00:28:20,290 --> 00:28:28,760 Pk = & m, teha te mäletate, milline & Operaator ei või nimetatakse? 534 00:28:28,760 --> 00:28:34,430 Pea meeles, et & mõned muutuja nimi on aadress muutuja nime. 535 00:28:34,430 --> 00:28:38,740 Mida me tahame öelda, pk saab aadress m. 536 00:28:38,740 --> 00:28:42,010 Ja nii tõhusalt mis juhtub skeem on, et pk enam punkte 537 00:28:42,010 --> 00:28:46,420 k, kuid punkte m. 538 00:28:46,420 --> 00:28:48,470 >> Jällegi viiteid on väga keeruline tööd 539 00:28:48,470 --> 00:28:50,620 ja nad võtavad palju Praktikas aga kuna 540 00:28:50,620 --> 00:28:54,150 nende võime võimaldab teil andmete edastamiseks funktsioonide vahel 541 00:28:54,150 --> 00:28:56,945 ja tegelikult on need Muudatused jõustuvad, 542 00:28:56,945 --> 00:28:58,820 saada oma peas ümber On väga oluline. 543 00:28:58,820 --> 00:29:02,590 Tõenäoliselt on kõige keerulisem teema me käsitleme CS50, 544 00:29:02,590 --> 00:29:05,910 kuid väärtus, et sa saada kasutades viiteid 545 00:29:05,910 --> 00:29:09,200 palju suurem tüsistuste mis on pärit nende õppimise. 546 00:29:09,200 --> 00:29:12,690 Nii et ma soovin teile parimat õnne õppida suunanäitajaks. 547 00:29:12,690 --> 00:29:15,760 Ma olen Doug Lloyd, see on CS50. 548 00:29:15,760 --> 00:29:17,447