1 00:00:00,000 --> 00:00:06,030 >> [Musiikkia] 2 00:00:06,030 --> 00:00:08,390 >> DOUG Lloyd: Osoittimet, tässä me olemme. 3 00:00:08,390 --> 00:00:11,080 Tämä on todennäköisesti aio olla vaikein aihe 4 00:00:11,080 --> 00:00:12,840 että puhumme CS50. 5 00:00:12,840 --> 00:00:15,060 Ja jos olet lukenut mitään viitteitä 6 00:00:15,060 --> 00:00:19,080 ennen saatat olla hieman uhkaava menee tämän videon. 7 00:00:19,080 --> 00:00:21,260 On totta viitteitä sallimme mahdollisuuden 8 00:00:21,260 --> 00:00:23,740 kenties tyriä aika pahasti kun olet 9 00:00:23,740 --> 00:00:27,450 kanssa muuttujia, ja tiedot, ja aiheuttaa ohjelman kaatumisen. 10 00:00:27,450 --> 00:00:30,490 Mutta he todella todella hyödyllinen ja ne auttavat meitä todella hyvä tapa 11 00:00:30,490 --> 00:00:33,340 siirtää tiedot takaisin ja edestakaisin välillä toimintoja, 12 00:00:33,340 --> 00:00:35,490 että emme muuten pysty tekemään. 13 00:00:35,490 --> 00:00:37,750 >> Ja niin mitä me todella halua tehdä tässä juna 14 00:00:37,750 --> 00:00:41,060 sinun on hyvä osoitin kuria, niin että voit käyttää osoittimia tehokkaasti 15 00:00:41,060 --> 00:00:43,850 tehdä ohjelmia niin paljon parempi. 16 00:00:43,850 --> 00:00:48,220 Kuten sanoin viitteitä antaa meille eri tapa siirtää dataa toimintoja. 17 00:00:48,220 --> 00:00:50,270 Nyt jos muistatte aikaisemmin video, kun 18 00:00:50,270 --> 00:00:53,720 puhuimme kiikaritähtäimellä, mainitsin 19 00:00:53,720 --> 00:01:00,610 että kaikki tiedot, jotka ohitamme välillä toiminnot C ohi arvo. 20 00:01:00,610 --> 00:01:03,070 Ja en ehkä ole käyttänyt, että termi, mitä tarkoitin siellä 21 00:01:03,070 --> 00:01:07,170 oli se, että olemme ohimennen kopioita tietojen. 22 00:01:07,170 --> 00:01:12,252 Kun välitämme muuttujan funktio, emme oikeastaan ​​kulkee muuttuja 23 00:01:12,252 --> 00:01:13,210 toiminnon, eikö? 24 00:01:13,210 --> 00:01:17,670 Olemme kulkee kopio että datan funktio. 25 00:01:17,670 --> 00:01:20,760 Toiminto tekee mitä se tulee ja se laskee jotain arvoa, 26 00:01:20,760 --> 00:01:23,180 ja ehkä käytämme että arvo kun se antaa sen takaisin. 27 00:01:23,180 --> 00:01:26,700 >> Siellä oli yksi poikkeus tämä sääntö ohi arvon, 28 00:01:26,700 --> 00:01:31,210 ja tulemme takaisin, mitä se on vähän myöhemmin tämän videon. 29 00:01:31,210 --> 00:01:34,880 Jos käytämme viitteitä sijaan käyttää muuttujia, 30 00:01:34,880 --> 00:01:38,180 tai sen sijasta käyttää muuttujien itse tai kopioita muuttujien, 31 00:01:38,180 --> 00:01:43,790 voimme nyt kulkea muuttujat ympärillä välillä toimii eri tavalla. 32 00:01:43,790 --> 00:01:46,550 Tämä tarkoittaa, että jos teemme muutos yksi toiminto, 33 00:01:46,550 --> 00:01:49,827 että muutos todella ottaa vaikutus eri toimintoa. 34 00:01:49,827 --> 00:01:52,160 Tämäkin on asia, emme voineet tehdä aikaisemmin, 35 00:01:52,160 --> 00:01:56,979 ja jos olet koskaan yrittänyt vaihtaa arvo kaksi muuttujaa funktion, 36 00:01:56,979 --> 00:01:59,270 olet huomannut tämän ongelman eräänlainen noususuunnassa, eikö? 37 00:01:59,270 --> 00:02:04,340 >> Jos haluamme vaihtaa X ja Y, ja me siirtää ne toiminto nimeltään swap, 38 00:02:04,340 --> 00:02:08,680 sisällä toiminto vaihtaa muuttujat tehdä vaihto arvot. 39 00:02:08,680 --> 00:02:12,600 Yksi tulee kaksi, kaksi tulee yksi, mutta emme oikeastaan 40 00:02:12,600 --> 00:02:16,890 muuttaa mitään alkuperäisessä toiminto, että soittaja. 41 00:02:16,890 --> 00:02:19,550 Koska emme voi, emme vain työskentelee jäljennökset. 42 00:02:19,550 --> 00:02:24,760 Osoittimet kuitenkin, voimme todella siirtää X ja Y funktio. 43 00:02:24,760 --> 00:02:26,960 Tämä toiminto voidaan tehdä jotain heidän kanssaan. 44 00:02:26,960 --> 00:02:29,250 Ja niitä muuttujia arvojen voi todella muuttaa. 45 00:02:29,250 --> 00:02:33,710 Joten se on aivan muutos kykymme työskennellä tiedot. 46 00:02:33,710 --> 00:02:36,100 >> Ennen kuin sukeltaa osoittimet, mielestäni se kannattaa 47 00:02:36,100 --> 00:02:38,580 kun muutaman minuutin palata perusasioihin täällä. 48 00:02:38,580 --> 00:02:41,000 Ja katsoa, ​​miten tietokoneen muistiin työt 49 00:02:41,000 --> 00:02:45,340 koska nämä kaksi aihetta ovat menossa todella olla melko toisiinsa. 50 00:02:45,340 --> 00:02:48,480 Kuten ehkä tiedätte, tietokoneen järjestelmässä 51 00:02:48,480 --> 00:02:51,310 sinulla on kovalevy tai ehkä Solid State Drive 52 00:02:51,310 --> 00:02:54,430 jonkinlainen tiedostojen tallennuspaikka. 53 00:02:54,430 --> 00:02:57,950 Se on yleensä jossain naapurustossa 250 gigatavua 54 00:02:57,950 --> 00:02:59,810 ja ehkä pari teratavua nyt. 55 00:02:59,810 --> 00:03:02,270 Ja se on silloin, kun kaikki tiedostoja lopulta elää, 56 00:03:02,270 --> 00:03:04,870 vaikka tietokone on pois pois, voit ottaa sen takaisin 57 00:03:04,870 --> 00:03:09,190 ja löydät tiedostot ovat siellä uudelleen, kun järjestelmä käynnistetään uudelleen. 58 00:03:09,190 --> 00:03:14,820 Mutta levyasemat, kuten kiintolevyn, HDD, tai Solid State Drive, SSD, 59 00:03:14,820 --> 00:03:16,050 ovat vain säilytystilaa. 60 00:03:16,050 --> 00:03:20,400 >> Emme voi oikeastaan ​​tehdä mitään datan, joka on kiintolevy, 61 00:03:20,400 --> 00:03:22,080 tai SSD-aseman. 62 00:03:22,080 --> 00:03:24,950 Jotta todella muuttaa tietoja tai siirtää sen ympärillä, 63 00:03:24,950 --> 00:03:28,800 meidän on siirtää sen RAM, random access memory. 64 00:03:28,800 --> 00:03:31,170 Nyt RAM, sinulla on paljon vähemmän tietokoneessa. 65 00:03:31,170 --> 00:03:34,185 Saatat olla jossain naapurustossa 512 megatavua 66 00:03:34,185 --> 00:03:38,850 jos sinulla on vanhempi tietokone, ja ehkä kaksi, neljä, kahdeksan, 16, 67 00:03:38,850 --> 00:03:41,820 mahdollisesti jopa hieman enemmän, gigatavua RAM-muistia. 68 00:03:41,820 --> 00:03:46,390 Niin, että on paljon pienempi, mutta se on jossa kaikki haihtuvat tietojen olemassa. 69 00:03:46,390 --> 00:03:48,270 Siellä voimme muuttaa asioita. 70 00:03:48,270 --> 00:03:53,350 Mutta kun me käännämme tietokoneesta virta, kaikki tiedot RAM tuhoutuu. 71 00:03:53,350 --> 00:03:57,150 >> Joten siksi meidän on kiintolevylle entistä pysyvää sijainnin se, 72 00:03:57,150 --> 00:03:59,720 niin, että se exists- se olisi todella huono, jos joka kerta 73 00:03:59,720 --> 00:04:03,310 käänsimme tietokoneesta virta, joka tiedosto järjestelmäämme on häivytetty. 74 00:04:03,310 --> 00:04:05,600 Joten teemme sisällä muistia. 75 00:04:05,600 --> 00:04:09,210 Ja joka kerta kun puhumme muisti, aika paljon, vuonna CS50, 76 00:04:09,210 --> 00:04:15,080 puhumme RAM, ei kiintolevyn. 77 00:04:15,080 --> 00:04:18,657 >> Joten kun siirrymme asiat muistiin, se vie jonkin verran tilaa. 78 00:04:18,657 --> 00:04:20,740 Kaikki tietotyyppejä että olemme työskennelleet 79 00:04:20,740 --> 00:04:23,480 ryhtyä eri määriä tilaa RAM. 80 00:04:23,480 --> 00:04:27,600 Joten aina luoda kokonaisluku muuttuja, neljä tavua muistia 81 00:04:27,600 --> 00:04:30,750 on varattu RAM joten sinun voi työskennellä että kokonaisluku. 82 00:04:30,750 --> 00:04:34,260 Voit julistaa kokonaisluku, muuttaa sitä, määrittää sen 83 00:04:34,260 --> 00:04:36,700 arvoon 10 kasvatetaan yhdellä, niin edelleen ja niin edelleen. 84 00:04:36,700 --> 00:04:39,440 Kaikki mitä tarvitsee tapahtua RAM, ja saat neljä tavua 85 00:04:39,440 --> 00:04:42,550 työskennellä jokaisen kokonaisluku, jonka luot. 86 00:04:42,550 --> 00:04:45,410 >> Jokainen merkki sinua luoda saa yhden tavun. 87 00:04:45,410 --> 00:04:48,160 Se on vain, kuinka paljon tilaa on varastointiin tarvitaan merkki. 88 00:04:48,160 --> 00:04:51,310 Jokainen kellua, todellinen numero, saa neljä tavua 89 00:04:51,310 --> 00:04:53,390 ellei se kaksinkertainen tarkkuuden liukuluku 90 00:04:53,390 --> 00:04:56,510 numero, jonka avulla voit on tarkempien ja numeroa 91 00:04:56,510 --> 00:04:59,300 desimaalipilkun jälkeen menettämättä tarkkuus, 92 00:04:59,300 --> 00:05:01,820 joka kestää jopa kahdeksan tavua muistia. 93 00:05:01,820 --> 00:05:06,730 Pitkä pitkät, todella iso kokonaislukuja, myös kahdeksan tavua muistia. 94 00:05:06,730 --> 00:05:09,000 Montako tavua muistia do jouset ryhtyä? 95 00:05:09,000 --> 00:05:12,990 No katsotaanpa laittaa tappi tähän kysymykseen nyt, mutta me palata siihen. 96 00:05:12,990 --> 00:05:17,350 >> Joten takaisin tämän ajatuksen muistia iso joukko tavun kokoinen soluja. 97 00:05:17,350 --> 00:05:20,871 Se on todella kaikki se on, se on vain valtava joukko soluja, 98 00:05:20,871 --> 00:05:23,370 kuten muutkin array, joka olet perehtynyt ja nähdä, 99 00:05:23,370 --> 00:05:26,430 paitsi jokainen elementti on yksi tavu leveä. 100 00:05:26,430 --> 00:05:30,030 Ja aivan kuten array, jokainen elementti on osoite. 101 00:05:30,030 --> 00:05:32,120 Jokainen elementti array on indeksi, ja me 102 00:05:32,120 --> 00:05:36,302 voi käyttää tätä indeksiä tehdä ns random access array. 103 00:05:36,302 --> 00:05:38,510 Meillä ei tarvitse aloittaa alussa array, 104 00:05:38,510 --> 00:05:40,569 kerrata läpi jokaisen yksittäinen tekijä sen, 105 00:05:40,569 --> 00:05:41,860 löytää mitä etsimme. 106 00:05:41,860 --> 00:05:45,790 Voimme vain sanoa, haluan päästä 15. elementti tai 100. elementti. 107 00:05:45,790 --> 00:05:49,930 Ja voit vain kulkea, että määrä ja saada arvon etsit. 108 00:05:49,930 --> 00:05:54,460 >> Samoin jokainen sijainti muistiin on osoite. 109 00:05:54,460 --> 00:05:57,320 Joten muisti saattaa näyttää suunnilleen tältä. 110 00:05:57,320 --> 00:06:01,420 Tässä hyvin pieni kimpale muisti, tämä on 20 tavua muistia. 111 00:06:01,420 --> 00:06:04,060 Ensimmäiset 20 tavua koska minun käsitellään siellä alareunassa 112 00:06:04,060 --> 00:06:08,890 ovat 0, 1, 2, 3, ja niin alusta loppuun jopa 19. 113 00:06:08,890 --> 00:06:13,190 Ja kun minä julistaa muuttujia ja kun käynnistän työskennellä heidän kanssaan, 114 00:06:13,190 --> 00:06:15,470 järjestelmä tulee asettaa syrjään tilaa minulle 115 00:06:15,470 --> 00:06:17,595 Tässä muistissa töihin minun muuttujia. 116 00:06:17,595 --> 00:06:21,610 Niin voisin sanoa, nieriää C vastaa pääoman H. Ja mitä tulee tapahtumaan? 117 00:06:21,610 --> 00:06:23,880 Hyvin järjestelmä on menossa varattu minulle yhden tavun. 118 00:06:23,880 --> 00:06:27,870 Tällöin se valitsi tavu numero neljä, tavun osoitteessa neljä, 119 00:06:27,870 --> 00:06:31,310 ja se tulee säilyttää kirjain pääoma H siellä minua. 120 00:06:31,310 --> 00:06:34,350 Jos siis minä sanon int nopeus raja vastaa 65, se on 121 00:06:34,350 --> 00:06:36,806 aikoo varata neljä tavua muistia minulle. 122 00:06:36,806 --> 00:06:39,180 Ja se tulee kohdella neljä tavua yhtenä yksikkönä 123 00:06:39,180 --> 00:06:41,305 koska mitä pyrimme jossa on kokonaisluku täällä. 124 00:06:41,305 --> 00:06:44,350 Ja se tulee säilyttää 65 siellä. 125 00:06:44,350 --> 00:06:47,000 >> Nyt jo olen sellainen kerron hieman valhe, 126 00:06:47,000 --> 00:06:50,150 oikea, koska tiedämme, että tietokoneet työ binary. 127 00:06:50,150 --> 00:06:53,100 He eivät ymmärrä, välttämättä mitä pääoma H on 128 00:06:53,100 --> 00:06:57,110 tai mitä 65 on, ne vain ymmärtää binary, nollia ja ykkösiä. 129 00:06:57,110 --> 00:06:59,000 Ja niin todella mitä olemme tallentaminen siellä 130 00:06:59,000 --> 00:07:03,450 ei ole kirjain H ja numero 65, vaan binääriesitykset 131 00:07:03,450 --> 00:07:06,980 sen, joka näyttää vähän jotain tällaista. 132 00:07:06,980 --> 00:07:10,360 Ja erityisesti yhteydessä kokonaisluku muuttujan, 133 00:07:10,360 --> 00:07:13,559 se ei tule vain sylkeä se, se ei tule kohdella sitä yhtenä neljästä 134 00:07:13,559 --> 00:07:15,350 tavu kimpale välttämättä, se todella tapahtuu 135 00:07:15,350 --> 00:07:19,570 kohdella sitä kuten neljä yhden tavun paloina, mikä saattaa näyttää tältä. 136 00:07:19,570 --> 00:07:22,424 Ja vaikka tämä ei ole täysin totta joko, 137 00:07:22,424 --> 00:07:24,840 koska jotain kutsutaan endianness, joka emme ole 138 00:07:24,840 --> 00:07:26,965 menossa päästä nyt, mutta jos olet utelias, 139 00:07:26,965 --> 00:07:29,030 voit lukea siitä pikku ja iso endianness. 140 00:07:29,030 --> 00:07:31,640 Mutta vuoksi tämän väitteen, vuoksi tämän videon, 141 00:07:31,640 --> 00:07:34,860 Haluan vain olettaa, että on, on Itse asiassa, miten numero 65 olisi 142 00:07:34,860 --> 00:07:36,970 oltava edustettuina muisti kaikissa järjestelmissä, 143 00:07:36,970 --> 00:07:38,850 vaikka se ei ole täysin totta. 144 00:07:38,850 --> 00:07:41,700 >> Mutta katsotaanpa oikeastaan ​​vain saada eroon kaikista binary kokonaan, 145 00:07:41,700 --> 00:07:44,460 ja ajattele kuin H ja 65, se on paljon helpompaa 146 00:07:44,460 --> 00:07:47,900 ajatella sitä kuten että ihmisenä. 147 00:07:47,900 --> 00:07:51,420 Selvä, joten se vaikuttaa myös ehkä vähän satunnainen että I've- minun järjestelmä 148 00:07:51,420 --> 00:07:55,130 ei antanut minulle tavua 5, 6, 7, ja 8 tallentaa kokonaisluku. 149 00:07:55,130 --> 00:07:58,580 On syytä, liian, joka emme pääse juuri nyt, mutta riittää 150 00:07:58,580 --> 00:08:00,496 todeta, että mitä tietokone tekee täällä 151 00:08:00,496 --> 00:08:02,810 on luultavasti hyvä liikkua sen osa. 152 00:08:02,810 --> 00:08:06,020 Ei anna minulle muisti, joka on välttämättä peräkkäin. 153 00:08:06,020 --> 00:08:10,490 Vaikka se aikoo tehdä sen nyt jos haluan saada toisen merkkijonon, 154 00:08:10,490 --> 00:08:13,080 nimeltään sukunimi, ja haluan laittaa Lloyd siellä. 155 00:08:13,080 --> 00:08:18,360 Aion täytyy sovittaa yhteen merkki, jokaisen kirjaimen, joka on 156 00:08:18,360 --> 00:08:21,330 menossa vaatia yhden merkki, yhden tavun muistia. 157 00:08:21,330 --> 00:08:26,230 Joten jos voisin laittaa Lloyd minun array näin olen melko hyvä mennä, eikö? 158 00:08:26,230 --> 00:08:28,870 Mitä puuttuu? 159 00:08:28,870 --> 00:08:31,840 >> Muista, että jokainen merkkijono työskentelemme jossa C päättyy kenoviivaan nolla, 160 00:08:31,840 --> 00:08:33,339 emmekä voi jättää että tässä joko. 161 00:08:33,339 --> 00:08:36,090 Meidän täytyy varata yhden tavun muistia pitää, että niin me 162 00:08:36,090 --> 00:08:39,130 tietää, milloin meidän merkkijono on päättynyt. 163 00:08:39,130 --> 00:08:41,049 Joten tämän järjestelyn siitä, miten asiat 164 00:08:41,049 --> 00:08:42,799 näkyvät muistissa voimin olla hieman satunnainen, 165 00:08:42,799 --> 00:08:44,870 mutta se todella on, miten useimmat järjestelmät on suunniteltu. 166 00:08:44,870 --> 00:08:48,330 Linja niitä ylös kerrannaisina neljän syistä uudelleen 167 00:08:48,330 --> 00:08:50,080 että meidän ei tarvitse päästä juuri nyt. 168 00:08:50,080 --> 00:08:53,060 Mutta tämä, niin riittää, kun todetaan, että Kun nämä kolme riviä koodia, 169 00:08:53,060 --> 00:08:54,810 tämä on mitä muisti voisi näyttää. 170 00:08:54,810 --> 00:08:58,930 Jos tarvitsen muistipaikkaa 4, 8, ja 12 pitää tietoni, 171 00:08:58,930 --> 00:09:01,100 tämä on mitä minun muisti voisi näyttää. 172 00:09:01,100 --> 00:09:04,062 >> Ja vain olla erityisen pikkutarkka täällä, kun 173 00:09:04,062 --> 00:09:06,020 puhumme muistia osoitteet me yleensä 174 00:09:06,020 --> 00:09:08,390 se käyttää heksadesimaali merkintöjä. 175 00:09:08,390 --> 00:09:12,030 Joten miksi emme muuntaa kaikki nämä alkaen desimaalin on heksadesimaalilukuja 176 00:09:12,030 --> 00:09:15,010 vain koska se on yleensä kuinka puhumme muistiin. 177 00:09:15,010 --> 00:09:17,880 Joten sen sijaan, että 0 kautta 19, mitä meillä on nolla 178 00:09:17,880 --> 00:09:20,340 X nollasta nolla x1 kolme. 179 00:09:20,340 --> 00:09:23,790 Ne ovat 20 tavua muistia että me ovat tai me tarkastelemme tässä kuvassa 180 00:09:23,790 --> 00:09:25,540 Juuri täällä. 181 00:09:25,540 --> 00:09:29,310 >> Joten kaikki tämä on sanottu, katsotaanpa askel poispäin muisti toisen 182 00:09:29,310 --> 00:09:30,490 ja takaisin viitteitä. 183 00:09:30,490 --> 00:09:32,420 Tässä on tärkein asia muistaa 184 00:09:32,420 --> 00:09:34,070 kuten me alkaa työskennellä viitteitä. 185 00:09:34,070 --> 00:09:36,314 Osoitin ei ole mitään enemmän kuin osoite. 186 00:09:36,314 --> 00:09:38,230 Minä sanon sen uudelleen, koska se on niin tärkeää, 187 00:09:38,230 --> 00:09:42,730 osoitin ei ole mitään enemmän kuin osoite. 188 00:09:42,730 --> 00:09:47,760 Osoittimet ovat osoitteet paikkoihin muistiin jossa muuttujat elää. 189 00:09:47,760 --> 00:09:52,590 Tietäen, että se tulee toivottavasti hieman helpompi työskennellä heidän kanssaan. 190 00:09:52,590 --> 00:09:54,550 Toinen asia, josta pidän tehdä, on olla eräänlainen 191 00:09:54,550 --> 00:09:58,510 kaavioita visuaalisesti edustavat mitä tapahtuu eri riviä koodia. 192 00:09:58,510 --> 00:10:00,660 Ja teemme tämän pari kertoja osoittimia, 193 00:10:00,660 --> 00:10:03,354 ja kun puhumme dynaaminen muistin jakamista samoin. 194 00:10:03,354 --> 00:10:06,020 Koska mielestäni nämä kaaviot voi olla erityisen hyödyllistä. 195 00:10:06,020 --> 00:10:09,540 >> Joten jos sanon esimerkiksi int k minun koodi, mitä tapahtuu? 196 00:10:09,540 --> 00:10:12,524 No mitä pohjimmiltaan tapahtuu on Saan muisti varattu minulle, 197 00:10:12,524 --> 00:10:14,690 mutta en edes pidä ajattele sitä niin, minä 198 00:10:14,690 --> 00:10:16,300 haluan ajatella sitä kuin laatikko. 199 00:10:16,300 --> 00:10:20,090 Minulla on laatikko ja se on värillinen vihreä koska olen 200 00:10:20,090 --> 00:10:21,750 voi laittaa kokonaislukuja vihreät laatikot. 201 00:10:21,750 --> 00:10:23,666 Jos se oli merkki I voi olla sininen laatikko. 202 00:10:23,666 --> 00:10:27,290 Mutta olen aina sanoa, jos Luon laatikko, johon mahtuu kokonaislukuja 203 00:10:27,290 --> 00:10:28,950 että laatikko on värillinen vihreä. 204 00:10:28,950 --> 00:10:33,020 Ja otan pysyvä merkki ja minä kirjoitan k puolella se. 205 00:10:33,020 --> 00:10:37,590 Joten minulla on laatikko nimeltä K, johon voin laittaa kokonaislukuja. 206 00:10:37,590 --> 00:10:41,070 Joten kun sanon int k, joka on mitä tapahtuu päähäni. 207 00:10:41,070 --> 00:10:43,140 Jos sanon k on viisi, mitä teen? 208 00:10:43,140 --> 00:10:45,110 No, Laitan viisi ruutuun, oikea. 209 00:10:45,110 --> 00:10:48,670 Tämä on melko yksinkertainen, jos Sanon int k, luo laatikko kutsutaan k. 210 00:10:48,670 --> 00:10:52,040 Jos sanon k on 5, laittaa viisi syöttöä. 211 00:10:52,040 --> 00:10:53,865 Toivottavasti se ei ole liian paljon harppaus. 212 00:10:53,865 --> 00:10:55,990 Tässä kun asiat menevät vähän mielenkiintoinen kuitenkin. 213 00:10:55,990 --> 00:11:02,590 Jos sanon int * PK, no vaikka en tiedä, mitä tämä merkitsee väistämättä, 214 00:11:02,590 --> 00:11:06,150 Se on selvästi jotain tekemistä kokonaisluku. 215 00:11:06,150 --> 00:11:08,211 Joten aion väri pienennä vihreä-ish, 216 00:11:08,211 --> 00:11:10,210 Tiedän, että se on jotain tehdä kokonaisluku, 217 00:11:10,210 --> 00:11:13,400 mutta se ei ole kokonaisluku itse, koska se on int tähden. 218 00:11:13,400 --> 00:11:15,390 Siinä on jotain hieman Eri siitä. 219 00:11:15,390 --> 00:11:17,620 Joten kokonaisluku on mukana, mutta muuten se on 220 00:11:17,620 --> 00:11:19,830 ei liian erilainen mitä puhuimme. 221 00:11:19,830 --> 00:11:24,240 Se on laatikko, sen sai etiketti, se on päällään etiketti PK, 222 00:11:24,240 --> 00:11:27,280 ja se on pystyttävä pitämään int tähdet, mitä ne ovat. 223 00:11:27,280 --> 00:11:29,894 Heillä on jotain tekemistä kanssa kokonaislukuja, selvästi. 224 00:11:29,894 --> 00:11:31,060 Tässä on viimeinen kuitenkin. 225 00:11:31,060 --> 00:11:37,650 Jos sanon PK = & K, huh, mitä juuri tapahtui, eikö? 226 00:11:37,650 --> 00:11:41,820 Joten tämä satunnaisluku, sattumanvaraiselta numero, saa heittää laatikkoon siellä. 227 00:11:41,820 --> 00:11:44,930 Kaikki tämä on, on pk saa osoite k. 228 00:11:44,930 --> 00:11:52,867 Joten olen kiinni missä k asuu muistissa, sen osoitteen, osoite sen tavua. 229 00:11:52,867 --> 00:11:55,200 Kaikki Mulla on sanon että arvo on mitä aion 230 00:11:55,200 --> 00:11:59,430 laittaa sisälle minun laatikko kutsutaan PK. 231 00:11:59,430 --> 00:12:02,080 Ja koska nämä asiat ovat osoittimia, ja koska etsivät 232 00:12:02,080 --> 00:12:04,955 klo merkkijono kuin nolla x kahdeksan nolla C seitsemän neljä kahdeksan 233 00:12:04,955 --> 00:12:07,790 kaksi nolla on luultavasti ei ole kovin mielekästä. 234 00:12:07,790 --> 00:12:12,390 Kun me yleensä visualisoida osoittimia, me todella tehdä niin osoittimia. 235 00:12:12,390 --> 00:12:17,000 Pk antaa meille tiedot Meidän täytyy löytää k muistiin. 236 00:12:17,000 --> 00:12:19,120 Joten periaatteessa PK on nuoli sen. 237 00:12:19,120 --> 00:12:21,670 Ja jos me kävelemään pituus Kyseisen nuoli, kuvitella 238 00:12:21,670 --> 00:12:25,280 se on jotain, voit kävellä, jos me kävellä pitkin nuolen, 239 00:12:25,280 --> 00:12:29,490 aivan kärjen että nuoli, me löytävät sijainti muistiin 240 00:12:29,490 --> 00:12:31,390 jossa k asuu. 241 00:12:31,390 --> 00:12:34,360 Ja se on todella tärkeää sillä kun tiedämme missä k asuu, 242 00:12:34,360 --> 00:12:37,870 voimme alkaa työskennellä tiedot sisällä että muistipaikka. 243 00:12:37,870 --> 00:12:40,780 Vaikka saamme pikkuinen bitti ennen itseämme nyt. 244 00:12:40,780 --> 00:12:42,240 >> Joten mikä on osoitin? 245 00:12:42,240 --> 00:12:45,590 Osoitin on tietoerä jonka arvo on muisti osoite. 246 00:12:45,590 --> 00:12:49,740 Se oli, että nolla x kahdeksan nolla jutut tekeillä, että oli muisti osoite. 247 00:12:49,740 --> 00:12:52,060 Se oli paikalla muistissa. 248 00:12:52,060 --> 00:12:55,080 Ja tyypin osoitin kuvaa sellaista 249 00:12:55,080 --> 00:12:56,930 Tietojen löydät että muisti osoite. 250 00:12:56,930 --> 00:12:58,810 Joten siellä int tähti osa oikealla. 251 00:12:58,810 --> 00:13:03,690 Jos seuraan että nuoli, se on menossa saavat minut sijainti. 252 00:13:03,690 --> 00:13:06,980 Ja että sijainti, mitä minä löytävät siellä minun esimerkki, 253 00:13:06,980 --> 00:13:08,240 on vihreitä laatikko. 254 00:13:08,240 --> 00:13:12,650 Se on kokonaisluku, se mitä minä löytävät jos menen kyseiseen osoitteeseen. 255 00:13:12,650 --> 00:13:14,830 Tietotyyppi osoitin kertoo, mitä 256 00:13:14,830 --> 00:13:17,936 löydät tuohon muisti osoite. 257 00:13:17,936 --> 00:13:19,560 Joten tässä on todella cool juttu kuitenkin. 258 00:13:19,560 --> 00:13:25,090 Osoittimet avulla voimme kulkea muuttujia välillä toimintoja. 259 00:13:25,090 --> 00:13:28,520 Ja todella siirtää muuttujia eikä siirtää niistä kopiot. 260 00:13:28,520 --> 00:13:32,879 Koska jos me tiedämme tarkalleen missä muistissa löytää muuttujan, 261 00:13:32,879 --> 00:13:35,670 meidän ei tarvitse tehdä kopion se, voimme vain mennä kyseiseen paikkaan 262 00:13:35,670 --> 00:13:37,844 ja työskennellä että vaihteleva. 263 00:13:37,844 --> 00:13:40,260 Joten pohjimmiltaan viitteitä järjestä Make tietokoneympäristössä 264 00:13:40,260 --> 00:13:42,360 paljon enemmän kuin todellisessa maailmassa, oikea. 265 00:13:42,360 --> 00:13:44,640 >> Joten tässä on analogisesti. 266 00:13:44,640 --> 00:13:48,080 Oletetaan, että minulla on muistikirja, oikealle, ja se on täynnä muistiinpanoja. 267 00:13:48,080 --> 00:13:50,230 Ja haluaisin voit päivittää sen. 268 00:13:50,230 --> 00:13:53,960 Olet toiminto päivitykset toteaa, oikea. 269 00:13:53,960 --> 00:13:56,390 Tavalla olemme olleet työskentelee toistaiseksi, mitä 270 00:13:56,390 --> 00:14:02,370 tapahtuu on otatte minun muistikirjan, siirryt kopion tallentaa, 271 00:14:02,370 --> 00:14:06,410 voit tehdä Xerox kopio jokaisen sivun muistikirjan. 272 00:14:06,410 --> 00:14:09,790 Sinun jättää minun kannettavan takaisin pöydälleni kun olet valmis, 273 00:14:09,790 --> 00:14:14,600 voit mennä ja yliviivaa asioita minun muistikirja, jotka ovat vanhentuneita tai väärin, 274 00:14:14,600 --> 00:14:19,280 ja sitten voit siirtää takaisin minua pino Xerox sivuja 275 00:14:19,280 --> 00:14:22,850 että on kopio minun muistikirjan muutokset että olet tehnyt sen. 276 00:14:22,850 --> 00:14:27,040 Ja siinä vaiheessa, se on jopa minua kutsuvan toiminto, kuten soittajan, 277 00:14:27,040 --> 00:14:30,582 päättää ottaa muistiinpanoja ja integroida ne takaisin kannettavassa. 278 00:14:30,582 --> 00:14:32,540 Joten siellä on paljon portaita mukana tässä, juuri. 279 00:14:32,540 --> 00:14:34,850 Kuten eikö olisi parempi jos minä vain sanoa, hei, voitko 280 00:14:34,850 --> 00:14:38,370 päivittää muistikirja minulle, käden minun notebook, 281 00:14:38,370 --> 00:14:40,440 ja otat asioita ja kirjaimellisesti ylittää ne pois 282 00:14:40,440 --> 00:14:42,810 ja päivitän muistiinpanoja kannettavassa. 283 00:14:42,810 --> 00:14:45,140 Ja sitten antaa minulle kannettavan takaisin. 284 00:14:45,140 --> 00:14:47,320 Sellainen mitä viitteitä jotta voisimme tehdä, 285 00:14:47,320 --> 00:14:51,320 he tekevät tässä ympäristössä paljon enemmän kuin miten toimimme todellisuudessa. 286 00:14:51,320 --> 00:14:54,640 >> Hyvä niin sitähän osoitin, Puhutaanpa 287 00:14:54,640 --> 00:14:58,040 miten viitteitä toimivat C, ja miten voimme alkaa työskennellä heidän kanssaan. 288 00:14:58,040 --> 00:15:02,550 Joten on hyvin yksinkertainen osoitin C kutsutaan nollaosoittimen. 289 00:15:02,550 --> 00:15:04,830 Null osoitin osoittaa mitään. 290 00:15:04,830 --> 00:15:08,310 Tämä todennäköisesti näyttää se on oikeastaan ​​ole kovin hyödyllinen asia, 291 00:15:08,310 --> 00:15:10,500 mutta kuten näemme vähän myöhemmin, siihen 292 00:15:10,500 --> 00:15:15,410 että tämä nollaosoittimen olemassa oikeastaan ​​todella voi tulla kätevä. 293 00:15:15,410 --> 00:15:19,090 Ja kun luot osoitin, ja et määritä sen arvo immediately- 294 00:15:19,090 --> 00:15:21,060 esimerkki, jossa sen arvo heti 295 00:15:21,060 --> 00:15:25,401 on pari liukuu takaisin jossa totesin, pk vastaa & K, 296 00:15:25,401 --> 00:15:28,740 PK saa K: n osoitteen, kuten näemme, mitä se tarkoittaa, 297 00:15:28,740 --> 00:15:32,990 näemme miten koodia että shortly- jos emme aseta sen arvoksi jotain 298 00:15:32,990 --> 00:15:35,380 mielekäs heti, sinun pitäisi aina 299 00:15:35,380 --> 00:15:37,480 aseta osoitin osoittamaan null. 300 00:15:37,480 --> 00:15:40,260 Sinun tulisi asettaa sen osoittamaan mitään. 301 00:15:40,260 --> 00:15:43,614 >> Se on hyvin erilainen kuin juuri lähdössä arvokas, koska 302 00:15:43,614 --> 00:15:45,530 ja sitten julistamisesta osoitin ja vain olettaen 303 00:15:45,530 --> 00:15:48,042 se null koska se on harvoin totta. 304 00:15:48,042 --> 00:15:50,000 Joten sinun tulisi aina asettaa arvon osoittimen 305 00:15:50,000 --> 00:15:55,690 null jos et aseta sen arvo jotain mielekästä välittömästi. 306 00:15:55,690 --> 00:15:59,090 Voit tarkistaa, onko osoittimen arvo on null käyttäen yhtäsuuruusoperaattorin 307 00:15:59,090 --> 00:16:05,450 (==), Kuten sinäkin vertailla tahansa kokonaisluku arvot tai merkki arvoja (==) 308 00:16:05,450 --> 00:16:06,320 yhtä hyvin. 309 00:16:06,320 --> 00:16:10,994 Se on erityinen eräänlainen jatkuva arvo, jota voit käyttää testata. 310 00:16:10,994 --> 00:16:13,160 Joten se oli hyvin yksinkertainen osoitin, nollaosoittimen. 311 00:16:13,160 --> 00:16:15,320 Toinen tapa luoda osoitin on purkaa 312 00:16:15,320 --> 00:16:18,240 osoitteen muuttujan olet jo luonut, 313 00:16:18,240 --> 00:16:22,330 ja voit tehdä tämän käyttäen & operaattori osoite louhinta. 314 00:16:22,330 --> 00:16:26,720 Joka olemme jo nähneet aiemmin Ensimmäisessä kaaviossa esimerkiksi näytin. 315 00:16:26,720 --> 00:16:31,450 Joten jos x on muuttuja, joka olemme jo luonut tyypin kokonaisluku, 316 00:16:31,450 --> 00:16:35,110 sitten ja x on osoitin kokonaisluku. 317 00:16:35,110 --> 00:16:39,810 & X is- muistaa, ja aikoo poimia osoite asia oikealla. 318 00:16:39,810 --> 00:16:45,350 Ja koska osoitin on vain osoite, kuin ja x on osoitin kokonaisluku 319 00:16:45,350 --> 00:16:48,560 joiden arvo on, jos muistissa X elämässään. 320 00:16:48,560 --> 00:16:50,460 Se on X: n osoite. 321 00:16:50,460 --> 00:16:53,296 Joten ja x on osoite x. 322 00:16:53,296 --> 00:16:55,670 Otetaanpa tämä yksi askel edelleen ja muodostaa jotain 323 00:16:55,670 --> 00:16:58,380 Viittasin vuonna ennen videon. 324 00:16:58,380 --> 00:17:06,730 Jos sov on joukko kaksinkertaistuu, sitten & Sov hakasulje i on osoitin 325 00:17:06,730 --> 00:17:08,109 kaksinkertainen. 326 00:17:08,109 --> 00:17:08,970 OK. 327 00:17:08,970 --> 00:17:12,160 sov hakasulje i, jos sov on joukko kaksinkertaistuu, 328 00:17:12,160 --> 00:17:19,069 sitten sov hakasulje i on i: nnen elementin, joka jono, 329 00:17:19,069 --> 00:17:29,270 ja & sov hakasulkeen i on missä muisti i: nnen elementin ARR olemassa. 330 00:17:29,270 --> 00:17:31,790 >> Niin mitä vaikutuksia täällä? 331 00:17:31,790 --> 00:17:34,570 Taulukot nimi, implisiittisesti Tämän koko juttu, 332 00:17:34,570 --> 00:17:39,290 on, että matriisi nimi on todella itse osoitin. 333 00:17:39,290 --> 00:17:41,170 Olet työstänyt osoittimilla koko ajan 334 00:17:41,170 --> 00:17:45,290 aina, kun olet käyttänyt erilaisia. 335 00:17:45,290 --> 00:17:49,090 Muista esimerkistä on kiikaritähtäimellä, 336 00:17:49,090 --> 00:17:53,420 loppupuolella videota esittämään Esimerkiksi jos meillä on funktio 337 00:17:53,420 --> 00:17:56,890 kutsutaan joukko int ja toiminto nimeltään joukko array. 338 00:17:56,890 --> 00:18:00,490 Ja haaste määrittää onko, tai mitä 339 00:18:00,490 --> 00:18:03,220 arvot, joita me tulostetaan loppuun toiminnon 340 00:18:03,220 --> 00:18:05,960 lopussa pääohjelma. 341 00:18:05,960 --> 00:18:08,740 >> Jos muistatte tästä esimerkki tai jos olet katsonut videon, 342 00:18:08,740 --> 00:18:13,080 te tiedätte, että kun teille-puhelun sarja int tehokkaasti ei tee mitään. 343 00:18:13,080 --> 00:18:16,390 Mutta asettamiseen array tekee. 344 00:18:16,390 --> 00:18:19,280 Ja minä tavallaan tasapaksuja miksi näin oli tuolloin. 345 00:18:19,280 --> 00:18:22,363 Sanoin vain, hyvin se on array, se on erityinen, tiedätte, on olemassa syy. 346 00:18:22,363 --> 00:18:25,020 Syynä on se, että matriisi: n nimi on oikeastaan ​​vain osoitin, 347 00:18:25,020 --> 00:18:28,740 ja on tämä erityinen hakasulje syntaksin 348 00:18:28,740 --> 00:18:30,510 tehdä asioita paljon mukavampi työskennellä. 349 00:18:30,510 --> 00:18:34,410 Ja he tekevät ajatus osoitin paljon vähemmän uhkaava, 350 00:18:34,410 --> 00:18:36,800 ja siksi ne ovat tavallaan on esitetty näin. 351 00:18:36,800 --> 00:18:38,600 Mutta oikeasti paneelit ovat vain viitteitä. 352 00:18:38,600 --> 00:18:41,580 Ja siksi kun me teki muutoksen array, 353 00:18:41,580 --> 00:18:44,880 kun ohitimme array parametri toiminnon tai argumenttina 354 00:18:44,880 --> 00:18:50,110 toiminnon, sisältö taulukon todella muuttunut molemmissa callee 355 00:18:50,110 --> 00:18:51,160 ja soittaja. 356 00:18:51,160 --> 00:18:55,846 Joka sillä kaikki muu muuttuja näimme ei tapahtunut. 357 00:18:55,846 --> 00:18:58,970 Niin, että on vain jotain pitää mielessä, kun olet työskennellyt osoittimia, 358 00:18:58,970 --> 00:19:01,610 on, että nimi array todella osoitin 359 00:19:01,610 --> 00:19:04,750 on ensimmäinen osa, joka array. 360 00:19:04,750 --> 00:19:08,930 >> OK joten nyt meillä on kaikki nämä tosiasiat, nyt pitää käynnissä, oikea. 361 00:19:08,930 --> 00:19:11,370 Miksi me välitämme jossa jotain asuu. 362 00:19:11,370 --> 00:19:14,120 No kuten sanoin, se on melko hyödyllistä tietää, missä jotain asuu 363 00:19:14,120 --> 00:19:17,240 niin voit mennä sinne ja muuttaa sitä. 364 00:19:17,240 --> 00:19:19,390 Työskennellä sen kanssa ja todella on asia, että te 365 00:19:19,390 --> 00:19:23,710 haluavat tehdä muuttujan tulevat voimaan, eikä päivästä joitakin kopio. 366 00:19:23,710 --> 00:19:26,150 Tätä kutsutaan dereferencing. 367 00:19:26,150 --> 00:19:28,690 Menemme viite ja muutamme arvoa siellä. 368 00:19:28,690 --> 00:19:32,660 Joten jos meillä on osoitin ja sitä kutsutaan PC, ja se osoittaa merkin, 369 00:19:32,660 --> 00:19:40,610 niin voimme sanoa * PC ja * PC on nimi mitä löydämme jos menemme 370 00:19:40,610 --> 00:19:42,910 osoitteeseen PC. 371 00:19:42,910 --> 00:19:47,860 Mitä me löydämme on luonteeltaan ja * PC on, miten puhumme tietojen että 372 00:19:47,860 --> 00:19:48,880 Sijainti. 373 00:19:48,880 --> 00:19:54,150 Jotta voisimme sanoa jotain * PC = D tai jotain, 374 00:19:54,150 --> 00:19:59,280 ja se tarkoittaa, että mitä tahansa oli muistiosoite PC, 375 00:19:59,280 --> 00:20:07,040 mitä hahmo oli aiemmin siellä on nyt D, jos sanomme * pc = D. 376 00:20:07,040 --> 00:20:10,090 >> Joten tässä sitä taas ollaan kanssa outoja C juttuja, oikea. 377 00:20:10,090 --> 00:20:14,560 Joten olemme nähneet * aiemmin olevan jotenkin osa tiedoista tyyppi, 378 00:20:14,560 --> 00:20:17,160 ja nyt se käytetään hieman eri asiayhteydessä 379 00:20:17,160 --> 00:20:19,605 käyttää tietoja paikassa. 380 00:20:19,605 --> 00:20:22,480 Tiedän, että se vähän sekava ja se on itse asiassa osa tätä koko 381 00:20:22,480 --> 00:20:25,740 kuten, miksi viitteet on tämä mytologia ympärillään olevan niin monimutkainen, 382 00:20:25,740 --> 00:20:28,250 on eräänlainen syntaksin ongelma, rehellisesti. 383 00:20:28,250 --> 00:20:31,810 Mutta * on käyttää molemmissa yhteyksissä, molemmat osana tyypin nimi, 384 00:20:31,810 --> 00:20:34,100 ja näemme hieman myöhemmin muutakin. 385 00:20:34,100 --> 00:20:36,490 Ja nyt on dereference operaattori. 386 00:20:36,490 --> 00:20:38,760 Niin se menee viittaus, se sisäänkäyntien tiedot 387 00:20:38,760 --> 00:20:43,000 paikassa osoittimen, ja voit manipuloida sitä mieleisekseen. 388 00:20:43,000 --> 00:20:45,900 >> Nyt tämä on hyvin samankaltainen vierailevat naapuri, oikea. 389 00:20:45,900 --> 00:20:48,710 Jos tiedät mitä naapuri asuu, olet 390 00:20:48,710 --> 00:20:50,730 ei hengailua lähimmäistäsi. 391 00:20:50,730 --> 00:20:53,510 Tiedät satut tiedä, missä he asuvat, 392 00:20:53,510 --> 00:20:56,870 mutta se ei tarkoita, että nojalla ottaa tätä tietoa 393 00:20:56,870 --> 00:20:59,170 olet vuorovaikutuksessa niiden kanssa. 394 00:20:59,170 --> 00:21:01,920 Jos haluat olla vuorovaikutuksessa niiden kanssa, sinun täytyy mennä heidän talonsa, 395 00:21:01,920 --> 00:21:03,760 sinun täytyy mennä missä he asuvat. 396 00:21:03,760 --> 00:21:07,440 Ja kun teette sen, niin voit olla vuorovaikutuksessa 397 00:21:07,440 --> 00:21:09,420 niitä aivan kuin haluat. 398 00:21:09,420 --> 00:21:12,730 Ja samalla tavoin muuttujia, sinun täytyy mennä heidän osoitteensa 399 00:21:12,730 --> 00:21:15,320 jos haluat vuorovaikutuksessa niitä, et voi vain tiedä osoitetta. 400 00:21:15,320 --> 00:21:21,495 Ja miten voit mennä osoitteeseen on käyttää *, dereference operaattori. 401 00:21:21,495 --> 00:21:23,620 Mitä mieltä olet tapahtuu jos yritämme ja dereference 402 00:21:23,620 --> 00:21:25,260 osoitin, jonka arvo on nolla? 403 00:21:25,260 --> 00:21:28,470 Muista, että null osoitin osoittaa mitään. 404 00:21:28,470 --> 00:21:34,110 Joten jos yrität ja dereference mitään tai mennä osoitteeseen mitään, 405 00:21:34,110 --> 00:21:36,800 mitä luulet tapahtuu? 406 00:21:36,800 --> 00:21:39,630 No jos arvasit segmentointi vika, olisit oikeassa. 407 00:21:39,630 --> 00:21:41,390 Jos yrität dereference nollaosoittimen, 408 00:21:41,390 --> 00:21:43,140 sinulla segmentointi vika. Mutta odota, 409 00:21:43,140 --> 00:21:45,820 ei minä sanon teille, että jos et tule 410 00:21:45,820 --> 00:21:49,220 asettaa arvoa Osoitin jotain merkityksellistä, 411 00:21:49,220 --> 00:21:51,000 sinun pitäisi asettaa nollaksi? 412 00:21:51,000 --> 00:21:55,290 Tein ja todella segmentointi vika on eräänlainen hyvän käytöksen. 413 00:21:55,290 --> 00:21:58,680 >> Oletko koskaan julistettu muuttuva ja ei määritetty sen arvo välittömästi? 414 00:21:58,680 --> 00:22:02,680 Joten sanoit int x; et todella antaa sen mitään 415 00:22:02,680 --> 00:22:05,340 ja sitten myöhemmin koodissa, tulostamaan x arvo, 416 00:22:05,340 --> 00:22:07,650 ottaa vielä liitetään se mitään. 417 00:22:07,650 --> 00:22:10,370 Usein saat nolla, mutta joskus 418 00:22:10,370 --> 00:22:15,000 saattaa saada joitakin satunnaisia ​​numero, ja sinulla ei ole aavistustakaan mistä se tuli. 419 00:22:15,000 --> 00:22:16,750 Samoin voi asiat tapahtua viitteitä. 420 00:22:16,750 --> 00:22:20,110 Kun julistaa osoitin int * PK esimerkiksi, 421 00:22:20,110 --> 00:22:23,490 ja et määritä sen arvo, saat neljä tavua muistia. 422 00:22:23,490 --> 00:22:25,950 Riippumatta neljä tavua muisti järjestelmä voi 423 00:22:25,950 --> 00:22:28,970 toteavat, että on joitakin mielekkäitä arvoa. 424 00:22:28,970 --> 00:22:31,760 Ja on saattanut olla jotain jo olemassa, että 425 00:22:31,760 --> 00:22:34,190 ei enää tarvita toisen toiminto, joten sinun täytyy vain 426 00:22:34,190 --> 00:22:35,900 mitä tietoja oli siellä. 427 00:22:35,900 --> 00:22:40,570 >> Mitä jos olet yrittänyt tehdä dereference jotkut osoite, että olet älä-oli 428 00:22:40,570 --> 00:22:43,410 jo tavua ja tietoa siellä, se on nyt teidän osoitin. 429 00:22:43,410 --> 00:22:47,470 Jos yrität dereference että osoitin, saatat olla Messing kanssa jonkin verran muistia 430 00:22:47,470 --> 00:22:49,390 että ette aio sotkea kaiken. 431 00:22:49,390 --> 00:22:51,639 Ja itse asiassa voisi tehdä jotain todella tuhoisia, 432 00:22:51,639 --> 00:22:54,880 kuten murtaa toinen ohjelma, tai rikkoa toinen toiminto, 433 00:22:54,880 --> 00:22:58,289 tai tehdä jotain ilkeä että et aio tehdä ollenkaan. 434 00:22:58,289 --> 00:23:00,080 Ja niin siksi se on todella hyvä idea 435 00:23:00,080 --> 00:23:04,030 asettaa viitteitä null jos älä aseta ne jotain merkityksellistä. 436 00:23:04,030 --> 00:23:06,760 Se on luultavasti parempi Päivän päätteeksi oman ohjelman 437 00:23:06,760 --> 00:23:09,840 kaatumisen sitten se tehdä jotain, joka mokaa 438 00:23:09,840 --> 00:23:12,400 toisesta ohjelmasta tai toiminnon. 439 00:23:12,400 --> 00:23:15,207 Tämä käyttäytyminen on todennäköisesti vielä vähemmän ihanteellinen kuin vain kaatuu. 440 00:23:15,207 --> 00:23:17,040 Ja niin siksi se on todella hyvä tapa 441 00:23:17,040 --> 00:23:20,920 päästä asettaa viitteitä null jos et aseta niitä 442 00:23:20,920 --> 00:23:24,540 mielekkääseen arvo heti, arvo että tiedät 443 00:23:24,540 --> 00:23:27,260 ja että voit turvallisesti dereference. 444 00:23:27,260 --> 00:23:32,240 >> Joten tulla takaisin nyt ja katsomaan klo yleinen syntaksi tilanteen. 445 00:23:32,240 --> 00:23:37,400 Jos sanon int * p ;, mitä minä olen juuri tehnyt? 446 00:23:37,400 --> 00:23:38,530 Mitä olen tehnyt on tämä. 447 00:23:38,530 --> 00:23:43,290 Tiedän arvo p on osoite koska kaikki osoittimet ovat vain 448 00:23:43,290 --> 00:23:44,660 osoitteet. 449 00:23:44,660 --> 00:23:47,750 Voin dereference p käyttäen * operaattori. 450 00:23:47,750 --> 00:23:51,250 Tässä yhteydessä tässä, aivan Top muistaa * on osa tyypin. 451 00:23:51,250 --> 00:23:53,510 Int * on tietotyyppi. 452 00:23:53,510 --> 00:23:56,150 Mutta voin dereference p käyttäen * operaattori, 453 00:23:56,150 --> 00:24:01,897 ja jos teen niin, jos menen kyseiseen osoitteeseen, mitä löydän tähän osoitteeseen? 454 00:24:01,897 --> 00:24:02,855 Löydän kokonaisluku. 455 00:24:02,855 --> 00:24:05,910 Joten int * p on pohjimmiltaan sanomalla, p on osoite. 456 00:24:05,910 --> 00:24:09,500 Voin dereference p ja jos En, aion löytää kokonaisluku 457 00:24:09,500 --> 00:24:11,920 klo että muistipaikka. 458 00:24:11,920 --> 00:24:14,260 >> OK joten sanoin oli toinen Harmillista tähdet 459 00:24:14,260 --> 00:24:17,060 ja täällä on, jos se Harmillista tähtien kanssa on. 460 00:24:17,060 --> 00:24:21,640 Oletko koskaan yrittänyt julistaa useita muuttujia samantyyppisiä 461 00:24:21,640 --> 00:24:24,409 samalla rivillä koodia? 462 00:24:24,409 --> 00:24:27,700 Niin toisen, teeskennellä, että linja, koodi Minulla on oikeastaan ​​siellä vihreä 463 00:24:27,700 --> 00:24:29,366 ei ole olemassa ja se vain kertoo int x, y, z ;. 464 00:24:29,366 --> 00:24:31,634 465 00:24:31,634 --> 00:24:34,550 Mitä se tehdä, on itse luoda kolme kokonaisluku muuttujat sinulle, 466 00:24:34,550 --> 00:24:36,930 yksi nimeltään X, yksi nimeltään y, ja yksi nimeltään z. 467 00:24:36,930 --> 00:24:41,510 Se on tapa tehdä se ilman ottaa jakaa päälle kolme riviä. 468 00:24:41,510 --> 00:24:43,890 >> Tässä missä tähteä saada ärsyttävää uudelleen vaikka, 469 00:24:43,890 --> 00:24:49,200 koska * on itse asiassa osa Sekä tyypin nimi ja osa 470 00:24:49,200 --> 00:24:50,320 muuttujan nimi. 471 00:24:50,320 --> 00:24:56,430 Joten jos sanon int * px, py, pz, mitä itse saada on osoitin kokonaisluku 472 00:24:56,430 --> 00:25:01,650 nimeltään px ja kaksi kokonaislukua, py ja pz. 473 00:25:01,650 --> 00:25:04,950 Ja se on luultavasti ole mitä Haluamme, että ei ole hyvä. 474 00:25:04,950 --> 00:25:09,290 >> Joten jos haluan luoda useita viitteitä samalla rivillä, samaa tyyppiä, 475 00:25:09,290 --> 00:25:12,140 ja tähdet, mitä todella tarvitsevat tehdä, on sanoa int * pa, * pb, * PC. 476 00:25:12,140 --> 00:25:17,330 477 00:25:17,330 --> 00:25:20,300 Nyt ottaa sanoi juuri, että ja nyt kerron tämän, 478 00:25:20,300 --> 00:25:22,170 luultavasti koskaan tee tätä. 479 00:25:22,170 --> 00:25:25,170 Ja se on luultavasti hyvä asia rehellisesti, sillä saatat vahingossa 480 00:25:25,170 --> 00:25:26,544 jättää tähti, jotain. 481 00:25:26,544 --> 00:25:29,290 Se on luultavasti parasta ehkä julistaa vinkin eri radoille, 482 00:25:29,290 --> 00:25:31,373 mutta se on vain toinen niitä harmittaa syntaksin 483 00:25:31,373 --> 00:25:35,310 asioita tähdet, jotka tekevät viitteitä niin vaikea työskennellä. 484 00:25:35,310 --> 00:25:39,480 Koska se on juuri tämä syntaktinen sotku sinun täytyy työskennellä kautta. 485 00:25:39,480 --> 00:25:41,600 Käytäntöä se todella tulee toinen luonto. 486 00:25:41,600 --> 00:25:45,410 Olen edelleen tehdä virheitä se silti ohjelmoinnin jälkeen 10 vuotta, 487 00:25:45,410 --> 00:25:49,630 joten älä hätäänny jos jotain tapahtuu teille, se on melko yleinen rehellisesti. 488 00:25:49,630 --> 00:25:52,850 Se on todella sellainen virhe on syntaksin. 489 00:25:52,850 --> 00:25:54,900 >> OK joten olen sellainen luvattujen että olisimme uudelleen 490 00:25:54,900 --> 00:25:59,370 käsite kuinka suuri on merkkijono. 491 00:25:59,370 --> 00:26:02,750 No jos olen kertonut sinulle, että string, olemme todella sellainen 492 00:26:02,750 --> 00:26:04,140 valehdellut sinulle koko ajan. 493 00:26:04,140 --> 00:26:06,181 Ei ole tietoa tyyppi nimeltään merkkijono, ja itse olen 494 00:26:06,181 --> 00:26:09,730 mainitsi tämän yksi meidän aikaisintaan videoita tietotyypit, 495 00:26:09,730 --> 00:26:13,820 merkkijonon oli tietotyyppi joka luotiin sinulle CS50.h. 496 00:26:13,820 --> 00:26:17,050 Sinun täytyy #include CS50.h voidakseen käyttää sitä. 497 00:26:17,050 --> 00:26:19,250 >> No merkkijono on oikeastaan ​​vain alias jotain 498 00:26:19,250 --> 00:26:23,600 nimeltään char *, Osoitin merkki. 499 00:26:23,600 --> 00:26:26,010 No osoittimia, muistaa, ovat vain osoitteet. 500 00:26:26,010 --> 00:26:28,780 Joten mikä on koko tavuina merkkijonon? 501 00:26:28,780 --> 00:26:29,796 No se on neljä tai kahdeksan. 502 00:26:29,796 --> 00:26:32,170 Ja syy sanon neljä tai kahdeksan johtuu siitä, että itse asiassa 503 00:26:32,170 --> 00:26:36,730 riippuu järjestelmän, jos käytät CS50 ide, char * on koko char 504 00:26:36,730 --> 00:26:39,340 * On kahdeksan, se on 64-bittinen järjestelmä. 505 00:26:39,340 --> 00:26:43,850 Jokainen osoite muistissa on 64 bittiä pitkä. 506 00:26:43,850 --> 00:26:48,270 Jos käytät CS50 laitetta tai millä tahansa 32-bittinen kone, 507 00:26:48,270 --> 00:26:51,640 ja olet kuullut että termi 32-bittinen kone, mikä on 32-bittinen kone? 508 00:26:51,640 --> 00:26:56,090 No se vain tarkoittaa, että jokainen osoite muistissa on 32 bittiä pitkä. 509 00:26:56,090 --> 00:26:59,140 Ja niin 32 bittiä on neljä tavua. 510 00:26:59,140 --> 00:27:02,710 Joten char * on neljä tai kahdeksan tavua riippuen järjestelmään. 511 00:27:02,710 --> 00:27:06,100 Ja todellakin kaikki tietotyypit, ja osoitin tietoja 512 00:27:06,100 --> 00:27:12,030 tyyppi, koska kaikki osoittimet ovat vain osoitteet, neljä tai kahdeksan tavua. 513 00:27:12,030 --> 00:27:14,030 Joten uudelleen tämän kaavio ja nyt tehdä 514 00:27:14,030 --> 00:27:18,130 tämä video vähän liikuntaa täällä. 515 00:27:18,130 --> 00:27:21,600 Joten tässä on kaavio lähdimme pois aivan alussa videon. 516 00:27:21,600 --> 00:27:23,110 Mitä tapahtuu nyt, jos sanon * pk = 35? 517 00:27:23,110 --> 00:27:26,370 518 00:27:26,370 --> 00:27:30,530 Mitä se tarkoittaa, kun sanon, * pk = 35? 519 00:27:30,530 --> 00:27:32,420 Ota toinen. 520 00:27:32,420 --> 00:27:34,990 * PK. 521 00:27:34,990 --> 00:27:39,890 Vuonna yhteydessä täällä, * on dereference operaattori. 522 00:27:39,890 --> 00:27:42,110 Joten kun dereference operaattori on käytetty, 523 00:27:42,110 --> 00:27:48,520 menemme osoite viittasivat PK, ja me muutumme mitä löydämme. 524 00:27:48,520 --> 00:27:55,270 Joten * PK = 35 tehokkaasti tekee tämän kuvan. 525 00:27:55,270 --> 00:27:58,110 Joten se on periaatteessa syntaktisesti identtinen ja ottaa sanoi k = 35. 526 00:27:58,110 --> 00:28:00,740 527 00:28:00,740 --> 00:28:01,930 >> Vielä yksi. 528 00:28:01,930 --> 00:28:05,510 Jos sanon int m, luon uusi muuttuja nimeltä m. 529 00:28:05,510 --> 00:28:08,260 Uusi laatikko, se on vihreän laatikon koska se tulee pitää kokonaisluku, 530 00:28:08,260 --> 00:28:09,840 ja se on merkitty m. 531 00:28:09,840 --> 00:28:14,960 Jos sanon m = 4, laitoin kokonaisluku tuohon laatikkoon. 532 00:28:14,960 --> 00:28:20,290 Jos vaikkapa PK = & m, miten Tässä kaaviossa muutos? 533 00:28:20,290 --> 00:28:28,760 Pk = & m, Muistatteko mitä & Operaattori tekee tai kutsutaan? 534 00:28:28,760 --> 00:28:34,430 Muista, että & jotkut muuttujan nimi on osoite muuttujan nimi. 535 00:28:34,430 --> 00:28:38,740 Joten mitä sanomme on PK saa osoitteen m. 536 00:28:38,740 --> 00:28:42,010 Ja niin tehokkaasti, mitä tapahtuu kaavio on, että PK ei enää viittaa 537 00:28:42,010 --> 00:28:46,420 k, mutta pistettä m. 538 00:28:46,420 --> 00:28:48,470 >> Jälleen osoittimet ovat hyvin hankala työskennellä 539 00:28:48,470 --> 00:28:50,620 ja he ottavat paljon käytäntö, mutta koska 540 00:28:50,620 --> 00:28:54,150 kykynsä avulla voit välittää dataa toimintojen 541 00:28:54,150 --> 00:28:56,945 ja todella on ne Muutokset tulevat voimaan, 542 00:28:56,945 --> 00:28:58,820 saada pään ympäri on todella tärkeää. 543 00:28:58,820 --> 00:29:02,590 Se todennäköisesti on kaikkein monimutkainen Uutta me keskustelemme CS50, 544 00:29:02,590 --> 00:29:05,910 mutta arvo, jota saada käyttämästä osoittimia 545 00:29:05,910 --> 00:29:09,200 paljon suurempi komplikaatioiden jotka tulevat opetteleminen. 546 00:29:09,200 --> 00:29:12,690 Joten toivotan teille parasta onni oppia viitteitä. 547 00:29:12,690 --> 00:29:15,760 Olen Doug Lloyd, tämä on CS50. 548 00:29:15,760 --> 00:29:17,447