1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> DAVID MALAN: Hei, ja tervetuloa takaisin CS50. 3 00:00:13,260 --> 00:00:14,860 Joten tämä on viikon lopussa neljä. 4 00:00:14,860 --> 00:00:16,680 Vain yksi ilmoitus ensin. 5 00:00:16,680 --> 00:00:19,600 Joten niin sanottu viides maanantai on tulossa ensi maanantaina. 6 00:00:19,600 --> 00:00:22,800 Tämä on tilaisuus vaihtaa SAT / UNSAT kirjeen luokalla, tai 7 00:00:22,800 --> 00:00:24,130 kirjainarvosanan SAT / UNSAT. 8 00:00:24,130 --> 00:00:27,130 Ärsyttävän, että prosessi ei edellytä allekirjoitus, koska sinun täytyy täyttää 9 00:00:27,130 --> 00:00:28,770 ulos yksi niistä vaaleanpunainen add / drop muotoja. 10 00:00:28,770 --> 00:00:31,680 >> Koska teknisesti, SAT / UNSAT versio ja kirjainarvosanan versio 11 00:00:31,680 --> 00:00:33,320 ovat eri luettelo numeroita. 12 00:00:33,320 --> 00:00:34,240 Mutta no big deal. 13 00:00:34,240 --> 00:00:36,620 Tule luokseni tai ryöstää tai Lauren missään vaiheessa. 14 00:00:36,620 --> 00:00:39,550 Tai lähetä meille sähköpostia, jos sinulla ei ole sellaista paperityötä tarvitset tänään, ja me 15 00:00:39,550 --> 00:00:43,410 varmasti auttaa sinua ottamaan huolta, että ennen maanantaita. 16 00:00:43,410 --> 00:00:45,780 >> Okei, joten tänään - 17 00:00:45,780 --> 00:00:47,630 Oikeastaan ​​on olemassa vähän kaikua. 18 00:00:47,630 --> 00:00:51,070 Voimmeko sävy minua hieman? 19 00:00:51,070 --> 00:00:51,730 OK. 20 00:00:51,730 --> 00:00:54,850 Joten tänään, esittelemme aihe tunnetaan viitteitä. 21 00:00:54,850 --> 00:00:57,770 Ja minä myönnän, että tämä on yksi monimutkaisempia aiheita, että meillä on taipumus 22 00:00:57,770 --> 00:01:00,960 kattaa tässä luokassa, tai oikeastaan ​​mitään alkeiskurssi, joka käyttää C. 23 00:01:00,960 --> 00:01:05,510 >> Mutta ota minun sana se, erityisesti Jos mielesi tuntuu hieman vääntynyt 24 00:01:05,510 --> 00:01:07,100 tänään ja tulevina viikkoina. 25 00:01:07,100 --> 00:01:10,340 Se ei ole edustava Saatko mitään pahempaa tässä se tarkoittaa vain sitä, että 26 00:01:10,340 --> 00:01:13,360 se on erityisen kehittyneitä aihe että lupaan, muutaman viikon 27 00:01:13,360 --> 00:01:17,610 siten, tuntuvat aivan liian silmiinpistävän suoraviivainen jälkikäteen. 28 00:01:17,610 --> 00:01:18,720 >> Muistan vielä tänäkin päivänä. 29 00:01:18,720 --> 00:01:22,190 Istuin Elliott Dining Hall, istuu vieressä minun TF Nishat Mehta, 30 00:01:22,190 --> 00:01:24,070 joka asui Elliott talon. 31 00:01:24,070 --> 00:01:26,340 Ja jostain syystä, tämä aihe vain napsauttaa. 32 00:01:26,340 --> 00:01:29,430 Joka on sanoa, että minäkin kamppaillut sen kanssa jo jonkin aikaa, mutta en 33 00:01:29,430 --> 00:01:33,610 teen parhaani auttaa välttämään tällaista kamppailevat aihe, joka lopulta 34 00:01:33,610 --> 00:01:34,580 on melko voimakas. 35 00:01:34,580 --> 00:01:37,350 >> Itse asiassa, yksi aiheista kerromme mielellämme vuonna lähiviikkoina on, että 36 00:01:37,350 --> 00:01:41,130 turvallisuuden, ja miten voit itse hyödyntää koneiden tavoin 37 00:01:41,130 --> 00:01:42,320 joita ei ole tarkoitettu. 38 00:01:42,320 --> 00:01:45,850 Ja ne exploitations ovat tyypillisesti tulos vikoja, virheitä, että me 39 00:01:45,850 --> 00:01:49,740 ihmiset tekevät olemalla ymmärtämisen perustana olevien täytäntöönpanon 40 00:01:49,740 --> 00:01:52,250 tiedot, jonka kautta ohjelmia tehdään. 41 00:01:52,250 --> 00:01:55,410 >> Nyt, jotta tämä näyttää sitäkin käyttäjä ystävällinen, ajattelin pelata 10 42 00:01:55,410 --> 00:01:59,680 sekunnin näytteen hieman claymation hahmo nimeltä Binky joka tuotiin 43 00:01:59,680 --> 00:02:03,020 elämän ystävämme Stanfordin, professori Nick Parlante. 44 00:02:03,020 --> 00:02:06,753 Joten haluan antaa sinulle tämän teaser Binky täällä. 45 00:02:06,753 --> 00:02:09,520 >> [VIDEOTOISTOSTA] 46 00:02:09,520 --> 00:02:10,380 >> -Hei, Binky. 47 00:02:10,380 --> 00:02:11,050 Herää. 48 00:02:11,050 --> 00:02:13,610 On aika osoitin hauskaa. 49 00:02:13,610 --> 00:02:14,741 >> -Mikä tuo on? 50 00:02:14,741 --> 00:02:16,440 Lisätietoja viitteitä? 51 00:02:16,440 --> 00:02:17,928 Voi goodie. 52 00:02:17,928 --> 00:02:18,920 >> [END VIDEOTOISTOSTA] 53 00:02:18,920 --> 00:02:20,670 >> DAVID MALAN: Se on Stanford tietojenkäsittelytiede. 54 00:02:20,670 --> 00:02:23,194 Joten siitä lisää tulemaan. 55 00:02:23,194 --> 00:02:24,930 >> [APPLAUSE] 56 00:02:24,930 --> 00:02:26,660 >> DAVID MALAN: Anteeksi, Nick. 57 00:02:26,660 --> 00:02:30,680 >> Joten muistaa, että viimeinen kerta päättyi tämä todella jännittävä jännitysnäytelmä 58 00:02:30,680 --> 00:02:32,960 jolloin tämä toiminto ei vain toiminut. 59 00:02:32,960 --> 00:02:34,960 Ainakin intuitiivisesti, se tuntui kuin sen pitäisi toimia. 60 00:02:34,960 --> 00:02:37,600 Yksinkertaisesti vaihtamalla arvot Kahden kokonaislukuja. 61 00:02:37,600 --> 00:02:40,915 Mutta muistaa, että kun me tulostetaan alkuperäiset arvot main, yksi ja 62 00:02:40,915 --> 00:02:44,210 kaksi, he olivat vielä yhtä ja kaksi eikä kaksi ja yksi. 63 00:02:44,210 --> 00:02:46,070 >> Joten haluan todella vaihtaa yli laitteen. 64 00:02:46,070 --> 00:02:50,180 Ja minä kirjoitin ylös hieman luuston koodi etukäteen täällä, jos väitän, että x 65 00:02:50,180 --> 00:02:52,500 on 1, y on 2. 66 00:02:52,500 --> 00:02:54,810 Sitten tulostaa sekä niiden arvot print f. 67 00:02:54,810 --> 00:02:57,540 >> Sitten väittävät täällä, että aiomme vaihtaa niitä. 68 00:02:57,540 --> 00:03:00,800 Jätin tyhjä paikka tässä meille täyttää tänään vain hetken. 69 00:03:00,800 --> 00:03:03,380 Sitten aion vaatia, että kaksi muuttujaa ovat vaihtuneet. 70 00:03:03,380 --> 00:03:04,770 Sitten aion tulostaa ne sitten ulos. 71 00:03:04,770 --> 00:03:07,090 Ja niin toivottavasti minun pitäisi nähdä 1, 2. 72 00:03:07,090 --> 00:03:07,380 2, 1. 73 00:03:07,380 --> 00:03:09,830 Se on erittäin yksinkertainen Tavoitteena juuri nyt. 74 00:03:09,830 --> 00:03:12,430 >> Miten siis edetä vaihtava kaksi muuttujaa? 75 00:03:12,430 --> 00:03:17,220 No jos ehdotan tässä, että nämä kupit voisi edustaa muisti ja tietokone. 76 00:03:17,220 --> 00:03:19,070 Tämä on muutaman puree, tämä on toinen muutaman puree. 77 00:03:19,070 --> 00:03:23,260 Voisiko olemme vapaaehtoisena tulla ylös ja Sekoita meille juotavaa, jos tutulta? 78 00:03:23,260 --> 00:03:23,920 Tule ylös. 79 00:03:23,920 --> 00:03:24,815 Mikä sinun nimesi on? 80 00:03:24,815 --> 00:03:25,260 >> JESS: Jess. 81 00:03:25,260 --> 00:03:25,690 >> DAVID MALAN: Jess? 82 00:03:25,690 --> 00:03:26,540 Tule ylös, Jess. 83 00:03:26,540 --> 00:03:29,180 Jos sinulla ei ole mielessä, meidän täytyy laittaa Google Glass teitä, jotta voimme 84 00:03:29,180 --> 00:03:30,430 ikuistaa tätä. 85 00:03:30,430 --> 00:03:32,800 86 00:03:32,800 --> 00:03:34,670 OK, lasi. 87 00:03:34,670 --> 00:03:37,250 Tallentaa videon. 88 00:03:37,250 --> 00:03:43,103 Ja OK, olemme hyvä mennä Jess täällä. 89 00:03:43,103 --> 00:03:43,810 Selvä. 90 00:03:43,810 --> 00:03:45,120 Hauska tavata. 91 00:03:45,120 --> 00:03:47,720 >> Joten mitä haluaisin teet täällä - jos voisit, melko nopeasti - 92 00:03:47,720 --> 00:03:51,040 vain kaataa meidät puoli lasia oranssi mehu ja puoli lasia maitoa, 93 00:03:51,040 --> 00:03:55,710 edustaa tehokkaasti numerot 1 yhden kupin ja 2 muuta cup. 94 00:03:55,710 --> 00:04:01,380 95 00:04:01,380 --> 00:04:02,630 >> Tämä tulee olemaan hyvä kuvamateriaalia. 96 00:04:02,630 --> 00:04:04,910 97 00:04:04,910 --> 00:04:05,860 >> JESS: Anteeksi. 98 00:04:05,860 --> 00:04:06,330 >> DAVID MALAN: Ei, ei. 99 00:04:06,330 --> 00:04:08,703 Se on OK. 100 00:04:08,703 --> 00:04:10,120 Nice. 101 00:04:10,120 --> 00:04:12,950 Okei, joten meillä on neljä tavua arvoinen appelsiinimehua. 102 00:04:12,950 --> 00:04:14,460 Me kutsui sitä arvoa 1. 103 00:04:14,460 --> 00:04:16,579 Nyt vielä neljä tavua arvoinen maitoa. 104 00:04:16,579 --> 00:04:18,519 Kutsumme sitä arvostavat 2. 105 00:04:18,519 --> 00:04:20,440 Niin x ja y, vastaavasti. 106 00:04:20,440 --> 00:04:23,450 >> Okei, joten nyt jos käsillä olevaan tehtävään - sinulle, Jess, edessä kaikki 107 00:04:23,450 --> 00:04:24,270 luokkatoverit - 108 00:04:24,270 --> 00:04:28,510 on vaihtaa arvoista x ja y, että haluamme appelsiinimehua 109 00:04:28,510 --> 00:04:32,070 muut kuppi ja maitoa tässä turnauksessa, miten voisit - ennen kuin itse tehdä 110 00:04:32,070 --> 00:04:34,020 se - edetä näin? 111 00:04:34,020 --> 00:04:35,220 >> OK, viisas päätös. 112 00:04:35,220 --> 00:04:36,340 Joten tarvitset hieman enemmän muistia. 113 00:04:36,340 --> 00:04:38,190 Joten myöntää väliaikaisen cup, jos haluatte. 114 00:04:38,190 --> 00:04:40,540 Ja nyt edetä vaihtaa x ja y. 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> Erinomainen. 117 00:04:53,530 --> 00:04:54,420 Joten hyvin tehty. 118 00:04:54,420 --> 00:04:55,670 Kiitos paljon, Jess. 119 00:04:55,670 --> 00:04:59,520 120 00:04:59,520 --> 00:05:00,020 Ole hyvä. 121 00:05:00,020 --> 00:05:01,950 Pikku matkamuisto. 122 00:05:01,950 --> 00:05:04,350 >> OK, joten ilmeisesti, super yksinkertainen idea. 123 00:05:04,350 --> 00:05:07,500 Täysin intuitiivinen, että tarvitsemme hieman enemmän tallennustilaa - tässä muodossa, 124 00:05:07,500 --> 00:05:09,750 cup - jos me todella haluamme vaihtaa nämä kaksi muuttujaa. 125 00:05:09,750 --> 00:05:11,110 Joten tehdä juuri näin. 126 00:05:11,110 --> 00:05:14,330 Täällä välillä, jossa väitän minä olen aiotaan tehdä joitakin vaihtamalla, minä 127 00:05:14,330 --> 00:05:15,720 mennä eteenpäin ja julistaa temp. 128 00:05:15,720 --> 00:05:17,980 Ja minä asettaa sen yhtä vaikkapa x. 129 00:05:17,980 --> 00:05:21,110 >> Sitten aion muuttaa arvoa x kuten Jess teki täällä 130 00:05:21,110 --> 00:05:23,200 maitoa ja appelsiinimehua on yhtä suuri kuin y. 131 00:05:23,200 --> 00:05:27,460 Ja aion vaihtaa y on yhtä suuri olemaan x, koska nyt meillä olisi 132 00:05:27,460 --> 00:05:29,530 jumissa ympyrä, vaan Temp. 133 00:05:29,530 --> 00:05:33,170 Where I tilapäisesti - tai jos Jess tilapäisesti laittaa appelsiinimehua 134 00:05:33,170 --> 00:05:35,460 ennen clobbering että kuppi maitoa. 135 00:05:35,460 --> 00:05:37,250 >> Joten anna minun mennä eteenpäin nyt ja tässä. 136 00:05:37,250 --> 00:05:39,210 Sitä kutsutaan noswap.c. 137 00:05:39,210 --> 00:05:41,190 Ja nyt haluan ajaa ei swap. 138 00:05:41,190 --> 00:05:43,910 Ja todellakin näen, jos olen laajentaa ikkuna vähän, että 139 00:05:43,910 --> 00:05:45,160 x on 1, y on 2. 140 00:05:45,160 --> 00:05:47,230 Ja sitten x on 2, y on 1. 141 00:05:47,230 --> 00:05:51,910 >> Mutta muistuttaa, että maanantaina teimme asioita hieman eri tavalla, jossa I 142 00:05:51,910 --> 00:05:56,760 sen sijaan toteutetaan auttajafunktio, jos haluatte, että oli todella mitätön. 143 00:05:56,760 --> 00:05:58,010 Kutsuin sitä vaihtaa. 144 00:05:58,010 --> 00:06:01,600 Annoin sen kaksi parametrit, ja kutsuin heille ja pyysin heitä b. 145 00:06:01,600 --> 00:06:04,380 >> Suoraan sanottuna, voisin soittaa heille x ja y. 146 00:06:04,380 --> 00:06:06,040 Ei ole mitään pysäyttäminen minua tekemästä sitä. 147 00:06:06,040 --> 00:06:08,140 Väittäisin kuitenkin, se on sitten hieman epäselvä. 148 00:06:08,140 --> 00:06:11,910 Koska muistamista maanantaina, että me väitti, että nämä parametrit olivat 149 00:06:11,910 --> 00:06:13,650 kopioita arvojen kulunut sisään 150 00:06:13,650 --> 00:06:15,640 Niin se vain sotkee ​​kanssa mielessä, luulen, jos käytät 151 00:06:15,640 --> 00:06:17,370 täsmälleen samoja muuttujia. 152 00:06:17,370 --> 00:06:20,150 >> Niin minä sen sijaan soittaa heille ja b, vain selvyyden vuoksi. 153 00:06:20,150 --> 00:06:21,840 Mutta voisimme kutsua heitä eniten mitä haluamme. 154 00:06:21,840 --> 00:06:26,280 Ja aion kopioida ja liittää tehokkaasti tämä koodi sinne 155 00:06:26,280 --> 00:06:27,170 alas täällä. 156 00:06:27,170 --> 00:06:29,110 Koska olen juuri nähnyt, että se toimii. 157 00:06:29,110 --> 00:06:30,790 Niin, että hyvässä kunnossa. 158 00:06:30,790 --> 00:06:37,390 Ja minä vaihdan x, minun x to, minun y b ja minun y b. 159 00:06:37,390 --> 00:06:39,130 >> Eli toisin sanoen, täsmälleen samaa logiikkaa. 160 00:06:39,130 --> 00:06:40,850 Täsmälleen sama asia, että Jess teki. 161 00:06:40,850 --> 00:06:44,350 Ja sitten yksi asia minun täytyy tehdä ylös tässä on tietenkin, on nyt käyttää tätä 162 00:06:44,350 --> 00:06:45,990 toiminto tai soita tätä toimintoa. 163 00:06:45,990 --> 00:06:50,430 Joten aion kutsua tätä toimintoa kahdella tulot, x ja y, ja paina Tallenna. 164 00:06:50,430 --> 00:06:52,300 >> Okei, niin perusteellisesti sama asia. 165 00:06:52,300 --> 00:06:55,570 Itse olen varmaan tehnyt ohjelman tarpeettoman monimutkainen 166 00:06:55,570 --> 00:07:00,820 kirjallisesti toiminto, joka on vain ottamalla noin kuusi riviä koodia taas I 167 00:07:00,820 --> 00:07:02,970 aiemmin oli toteutettu Tässä vain kolme. 168 00:07:02,970 --> 00:07:06,230 >> Joten anna minun mennä eteenpäin nyt ja remake Tämän ei tehdä swap. 169 00:07:06,230 --> 00:07:07,920 Okei, minä mokasin täällä. 170 00:07:07,920 --> 00:07:11,290 Tämä olisi virhe, että saatat nähdä yhä yleisesti kuin 171 00:07:11,290 --> 00:07:12,380 ohjelmia saada monimutkaisempi. 172 00:07:12,380 --> 00:07:13,470 Mutta on helppo korjata. 173 00:07:13,470 --> 00:07:15,650 Saanen vierittää takaisin tänne. 174 00:07:15,650 --> 00:07:18,190 >> Ja mikä on ensimmäinen virhe näen? 175 00:07:18,190 --> 00:07:19,520 Implisiittinen ilmoitus. 176 00:07:19,520 --> 00:07:21,466 Mitä tämä merkitsee tavallisesti? 177 00:07:21,466 --> 00:07:22,830 Ai niin, unohdin prototyyppi. 178 00:07:22,830 --> 00:07:26,900 Unohdin opettaa kääntäjälle, että swap tulee olla olemassa, vaikka hän 179 00:07:26,900 --> 00:07:28,920 ei ole olemassa alusta ohjelman. 180 00:07:28,920 --> 00:07:35,780 Joten olen juuri menossa sanoa mitätön, swap, int, int b, puolipiste. 181 00:07:35,780 --> 00:07:37,280 >> Joten en aio reimplement sitä. 182 00:07:37,280 --> 00:07:39,140 Mutta nyt se vastaa mitä täällä alhaalla. 183 00:07:39,140 --> 00:07:42,530 Ja ilmoitus, ettei puolipiste täällä, joka ei ole välttämätön, kun 184 00:07:42,530 --> 00:07:43,200 täytäntöönpanosta. 185 00:07:43,200 --> 00:07:46,010 >> Joten anna minun remake tämän, tee mitään swap. 186 00:07:46,010 --> 00:07:46,910 Paremmassa kunnossa. 187 00:07:46,910 --> 00:07:48,130 Suorita mitään swap. 188 00:07:48,130 --> 00:07:48,740 Ja hitto vieköön. 189 00:07:48,740 --> 00:07:51,650 Nyt olemme takaisin missä olimme maanantaina jos asia ei vaihda. 190 00:07:51,650 --> 00:07:55,410 >> Ja mikä on intuitiivinen selitys miksi näin on? 191 00:07:55,410 --> 00:07:56,380 Niin? 192 00:07:56,380 --> 00:07:57,630 >> Opiskelija: [kuultavissa]. 193 00:07:57,630 --> 00:08:04,140 194 00:08:04,140 --> 00:08:05,230 >> DAVID MALAN: Aivan. 195 00:08:05,230 --> 00:08:07,330 Niin a ja b ovat kopioita x ja y. 196 00:08:07,330 --> 00:08:10,680 Ja itse asiassa, milloin olet ollut vaatii toimia näin pitkälle, että 197 00:08:10,680 --> 00:08:12,540 kulkee muuttujia kuin ints - 198 00:08:12,540 --> 00:08:14,470 aivan kuten swap odottaa täällä - 199 00:08:14,470 --> 00:08:16,270 te on ohimennen kopioita. 200 00:08:16,270 --> 00:08:19,150 >> Nyt se tarkoittaa, että se vie vähän ajan, sekunnin murto varten 201 00:08:19,150 --> 00:08:23,270 tietokone kopioida bittejä yhdestä muuttujan bittiä toiseen. 202 00:08:23,270 --> 00:08:24,610 Mutta se ei ole niin iso juttu. 203 00:08:24,610 --> 00:08:25,920 Mutta he kuitenkin kopio. 204 00:08:25,920 --> 00:08:30,020 >> Ja nyt, yhteydessä swap, Olen itse asiassa onnistuneesti 205 00:08:30,020 --> 00:08:31,180 muuttumassa ja b. 206 00:08:31,180 --> 00:08:33,000 Itse asiassa, nyt tehdä nopeasti järki tarkistaa. 207 00:08:33,000 --> 00:08:36,830 Tulosta f on% i, uusi rivi. 208 00:08:36,830 --> 00:08:38,770 Ja antaa plug in. 209 00:08:38,770 --> 00:08:41,830 Nyt tee sama juttu b. 210 00:08:41,830 --> 00:08:43,640 Ja nyt tehdä saman täällä. 211 00:08:43,640 --> 00:08:47,260 >> Ja nyt haluan kopioida nämä samat linjat jälleen alareunassa funktion 212 00:08:47,260 --> 00:08:51,250 kun minun kolme riviä mielenkiintoisia voinut suorittaa, ja 213 00:08:51,250 --> 00:08:53,270 tulostaa ja b jälleen. 214 00:08:53,270 --> 00:08:56,030 Joten nyt tehkäämme tähän, tee mitään swap. 215 00:08:56,030 --> 00:08:58,430 Haluan tehdä pääteikkunaan vähän pitempi, jotta voimme nähdä 216 00:08:58,430 --> 00:08:59,520 enemmän sitä kerralla. 217 00:08:59,520 --> 00:09:00,860 >> Ja suorita mitään swap. 218 00:09:00,860 --> 00:09:04,000 x on 1, y on 2. on 1, b on 2. 219 00:09:04,000 --> 00:09:06,070 Ja sitten, on 2, b on 1. 220 00:09:06,070 --> 00:09:09,390 Niin se toimii, aivan kuten Jess teki täällä sisällä swap. 221 00:09:09,390 --> 00:09:13,090 Mutta tietenkin se, jolla ei ole vaikutusta muuttujia pää. 222 00:09:13,090 --> 00:09:15,360 >> Joten näimme temppu jossa me voisi korjata tämän, eikö? 223 00:09:15,360 --> 00:09:19,560 Kun olet kohtaavat tämän rajauksen ongelma, voit vain punnan ja tehdä x 224 00:09:19,560 --> 00:09:22,400 ja y millaisia ​​muuttujia sijaan? 225 00:09:22,400 --> 00:09:23,390 >> Voisit tehdä niistä maailmanlaajuisia. 226 00:09:23,390 --> 00:09:27,560 Laita ne aivan tiedoston alkuun kuten teimme, vaikka peli 15. 227 00:09:27,560 --> 00:09:28,890 Käytämme globaali muuttuja. 228 00:09:28,890 --> 00:09:32,420 Mutta yhteydessä pelin 15, on järkevää olla maailmanlaajuinen 229 00:09:32,420 --> 00:09:37,170 muuttujaan edustavat hallituksen, koska kokonaisuudessaan 15.c ei 230 00:09:37,170 --> 00:09:38,650 noin täytäntöönpanossa että peli. 231 00:09:38,650 --> 00:09:41,470 Sitähän tiedosto on olemassa tehdä. 232 00:09:41,470 --> 00:09:44,170 >> Mutta tässä tapauksessa täällä, olen vaatii toimia swap. 233 00:09:44,170 --> 00:09:45,380 Haluan vaihtaa kaksi muuttujaa. 234 00:09:45,380 --> 00:09:48,950 Ja se pitäisi alkaa tuntea vain huolimaton jos ratkaisu kaikille 235 00:09:48,950 --> 00:09:51,300 ongelmia, kun me törmätä soveltamisala kysymyksiä on tehdä maailmanlaajuisia. 236 00:09:51,300 --> 00:09:54,730 Koska hyvin nopeasti meidän ohjelma on tulossa melkoinen sotku. 237 00:09:54,730 --> 00:09:57,760 Ja me teimme, että hyvin säästeliäästi mikä johtuu 15.c. 238 00:09:57,760 --> 00:10:00,470 >> Mutta näyttää siltä, ​​siellä parempi tapa kokonaan. 239 00:10:00,470 --> 00:10:05,600 Saanen itse mennä takaisin ja poistaa Tulosta f: n, vain yksinkertaistaa tätä koodia. 240 00:10:05,600 --> 00:10:09,160 Ja haluaisin ehdottaa, että Tämä todellakin on huono. 241 00:10:09,160 --> 00:10:15,990 Mutta jos sen sijaan lisätä joissakin tähdellä ja tähdet, voin sen sijaan kääntää tämän 242 00:10:15,990 --> 00:10:18,670 funktion, joka on itse toiminnassa. 243 00:10:18,670 --> 00:10:25,020 >> Joten anna minun mennä takaisin ja myöntää sanomalla tähdellä on aina vaikeaa, 244 00:10:25,020 --> 00:10:26,170 niin minä sanon tähteä. 245 00:10:26,170 --> 00:10:27,660 Otan vain fess jopa, että yksi. 246 00:10:27,660 --> 00:10:28,190 Selvä. 247 00:10:28,190 --> 00:10:30,190 Ja nyt, mitä aion tehdä sen sijaan? 248 00:10:30,190 --> 00:10:34,130 >> Joten ensinnäkin, aion määritellä että sen sijaan kulkee int: 249 00:10:34,130 --> 00:10:37,980 swap-toiminto, olen sen sijaan menossa sanoa int tähden. 250 00:10:37,980 --> 00:10:39,170 Nyt, mitä tähti osoittaa? 251 00:10:39,170 --> 00:10:41,970 Tämä on se, että käsite osoitin, että Binky, claymation hahmo oli 252 00:10:41,970 --> 00:10:43,465 viitataan hetki sitten. 253 00:10:43,465 --> 00:10:47,610 >> Joten jos sanomme int tähden, merkitys tämä nyt on, että ei tule olemaan 254 00:10:47,610 --> 00:10:49,110 hyväksyttiin sen arvon. 255 00:10:49,110 --> 00:10:50,350 Se ei tule kopioida sisään 256 00:10:50,350 --> 00:10:54,700 Pikemminkin, osoite on aiotaan siirtää sisään 257 00:10:54,700 --> 00:10:57,840 >> Joten muistaa, että tietokoneesi sisälle on koko joukko muistia, muuten 258 00:10:57,840 --> 00:10:58,760 tunnetaan RAM. 259 00:10:58,760 --> 00:11:00,520 Ja että RAM on vain koko joukko tavua. 260 00:11:00,520 --> 00:11:03,320 Joten jos Macin tai PC: ssä on kaksi gigatavua, sinulla on 2 261 00:11:03,320 --> 00:11:05,760 miljardia tavua muistia. 262 00:11:05,760 --> 00:11:08,440 >> Nyt vain olettaa, että vain pitää asiat mukava ja hallittu, me 263 00:11:08,440 --> 00:11:09,450 määrittää osoite - 264 00:11:09,450 --> 00:11:10,170 numero - 265 00:11:10,170 --> 00:11:12,270 jokaisen tavun RAM-muistia tietokoneessa. 266 00:11:12,270 --> 00:11:15,410 Aivan ensimmäinen tavu ne 2 miljardia on numero nolla. 267 00:11:15,410 --> 00:11:18,572 Seuraava on tavu numero yksi, numero kaksi, koko matkan ylös, dot dot 268 00:11:18,572 --> 00:11:20,530 dot, on noin 2 miljardia euroa. 269 00:11:20,530 --> 00:11:23,640 >> Joten voit määrä tavuja muistin tietokoneen. 270 00:11:23,640 --> 00:11:26,460 Joten Oletetaan, että niinhän me tarkoitamme osoite. 271 00:11:26,460 --> 00:11:31,360 Joten kun näen int tähden, mitä tapahtuu välittämisen swap nyt 272 00:11:31,360 --> 00:11:32,830 osoite. 273 00:11:32,830 --> 00:11:37,150 Ei sen arvo, mutta mitä sen postin osoite on, niin sanoakseni - 274 00:11:37,150 --> 00:11:38,810 sen sijainti RAM. 275 00:11:38,810 --> 00:11:41,250 >> Ja vastaavasti b, aion sanoa samaa. 276 00:11:41,250 --> 00:11:42,720 Int, tähti, b. 277 00:11:42,720 --> 00:11:46,350 Sivuhuomautuksena, teknisesti tähti voisi mennä muualla. 278 00:11:46,350 --> 00:11:50,140 Mutta me standardisoida tähti on aivan tietotyyppi. 279 00:11:50,140 --> 00:11:54,080 >> Joten vaihtaa allekirjoitus tarkoittaa nyt, anna minulle osoite int, ja puhelun 280 00:11:54,080 --> 00:11:55,400 että osoite. 281 00:11:55,400 --> 00:11:58,690 Ja antaa minulle toisen osoitteen int ja soittaa, että osoite b. 282 00:11:58,690 --> 00:12:01,120 >> Mutta nyt minun koodi täällä on muututtava. 283 00:12:01,120 --> 00:12:03,470 Koska jos Vakuutan int temp - 284 00:12:03,470 --> 00:12:05,580 joka on edelleen tyyppiä int - 285 00:12:05,580 --> 00:12:08,700 mutta tallentaa sen, millainen arvo? 286 00:12:08,700 --> 00:12:12,870 Olla selkeä, olen laskemisesta kanssa koodi kirjoitettu juuri nyt? 287 00:12:12,870 --> 00:12:14,360 >> Laitan paikalla. 288 00:12:14,360 --> 00:12:16,500 Mutta en välitä paikalla nyt, eikö? 289 00:12:16,500 --> 00:12:21,940 Lämpötila on olemassa vain Jess kolmannen cup olemassa, mihin tarkoitukseen? 290 00:12:21,940 --> 00:12:23,090 Arvo tallennetaan. 291 00:12:23,090 --> 00:12:24,830 Maitoa tai appelsiinimehua. 292 00:12:24,830 --> 00:12:28,520 Ei todella tallentaa osoite joko niistä asioista, joka tuntuu 293 00:12:28,520 --> 00:12:31,200 vähän järjetöntä tässä todellinen maailman yhteydessä muutenkin. 294 00:12:31,200 --> 00:12:34,990 >> Siis todella, mitä haluan laittaa temp ei-osoite, mutta 295 00:12:34,990 --> 00:12:36,180 sisällön. 296 00:12:36,180 --> 00:12:41,930 Joten, jos on useita, kuten 123, tämä on 123. tavu muistia vain 297 00:12:41,930 --> 00:12:45,090 sattuu olemaan miehittää, että arvo vuonna sattuu olemaan miehittää. 298 00:12:45,090 --> 00:12:49,040 >> Jos haluan mennä kyseiseen osoitteeseen, Minun täytyy sanoa tähden. 299 00:12:49,040 --> 00:12:52,610 Vastaavasti, jos olisin muuttaa mitä osoitteessa, muutan 300 00:12:52,610 --> 00:12:53,570 tämä alkaa. 301 00:12:53,570 --> 00:12:58,185 Jos haluan tallentaa mitä on sijainti mitä on paikassa 302 00:12:58,185 --> 00:13:02,180 klo b, tähti b tähden. 303 00:13:02,180 --> 00:13:05,340 >> Joten lyhyt, vaikka tämä ei ole aivan uppoamassa vielä - ja En odota 304 00:13:05,340 --> 00:13:06,560 että se olisi niin nopeasti - 305 00:13:06,560 --> 00:13:11,100 ymmärtää, että kaikki mitä teen on prefixing nämä tähdet minun muuttujia, 306 00:13:11,100 --> 00:13:13,350 sanonta ei tartu arvoja. 307 00:13:13,350 --> 00:13:14,520 Älä muuta arvoja. 308 00:13:14,520 --> 00:13:17,600 Vaan, mene osoitteet ja saada arvon. 309 00:13:17,600 --> 00:13:21,430 Siirry kyseiseen osoitteeseen ja muutos arvo siellä. 310 00:13:21,430 --> 00:13:25,500 >> Joten nyt haluan siirtyä takaisin ylös, vain korjata tätä linjaa täällä, 311 00:13:25,500 --> 00:13:27,690 muuttaa prototyyppi vastaamaan. 312 00:13:27,690 --> 00:13:30,280 Mutta nyt täytyy tehdä jokin muu asia. 313 00:13:30,280 --> 00:13:35,500 Intuitiivisesti, jos olen muuttanut tyypit argumentteja, että swap odottaa, 314 00:13:35,500 --> 00:13:37,245 mitä muuta tarvitsen muuttaa minun koodi? 315 00:13:37,245 --> 00:13:39,750 316 00:13:39,750 --> 00:13:40,840 >> Kun minä vuorottelu. 317 00:13:40,840 --> 00:13:43,340 Koska juuri nyt, mitä olen Olen ohimennen vaihtaa vielä? 318 00:13:43,340 --> 00:13:47,450 Arvo x ja y: n arvo, tai maitoa ja appelsiinimehua. 319 00:13:47,450 --> 00:13:48,510 Mutta en halua tehdä sitä. 320 00:13:48,510 --> 00:13:51,060 Minä sen sijaan haluat kulkea mitä? 321 00:13:51,060 --> 00:13:53,050 Sijainnin x-ja sijainti y. 322 00:13:53,050 --> 00:13:55,300 Mitkä ovat niiden postiosoitteet, niin sanoakseni. 323 00:13:55,300 --> 00:13:57,600 >> Niin tehdä, että siellä on ampersand. 324 00:13:57,600 --> 00:13:59,260 Ampersand sellainen kuulostaa osoite. 325 00:13:59,260 --> 00:14:03,240 niin n, et-merkki, osoite x, ja osoite y. 326 00:14:03,240 --> 00:14:06,790 Joten se on tahallista, että käytämme et-funktiokutsussa, 327 00:14:06,790 --> 00:14:10,230 ja tähdet julistaessaan ja kun toteuttamisessa toiminto. 328 00:14:10,230 --> 00:14:14,220 >> Ja ajatelkaa käytä merkintää osoite toimija, ja tähti 329 00:14:14,220 --> 00:14:15,490 sinne toimija - 330 00:14:15,490 --> 00:14:18,640 tai oikeammin, dereference operaattori. 331 00:14:18,640 --> 00:14:23,480 Niin, että paljon sanoja vain sanoa, että nyt, toivottavasti, swap on menossa 332 00:14:23,480 --> 00:14:24,440 oikeiksi. 333 00:14:24,440 --> 00:14:26,550 >> Anna minun mennä eteenpäin ja tehdä - 334 00:14:26,550 --> 00:14:30,940 nyt todella nimetä tiedoston, ettei Tämän ohjelman edelleen kutsua ei swap. 335 00:14:30,940 --> 00:14:33,240 Väitän, että me kutsumme sitä swap.c nyt. 336 00:14:33,240 --> 00:14:35,670 Joten tee, vaihtaa. 337 00:14:35,670 --> 00:14:37,520 Dot, slash, vaihtaa. 338 00:14:37,520 --> 00:14:40,210 >> Ja nyt todellakin, x on 1, y on 2. 339 00:14:40,210 --> 00:14:44,040 Ja sitten, x on 2, y on yksi. 340 00:14:44,040 --> 00:14:46,500 No katsotaanpa jos emme voi tehdä tätä vähän eri lailla kuin mitä on 341 00:14:46,500 --> 00:14:47,180 täällä. 342 00:14:47,180 --> 00:14:51,250 Ensinnäkin haluan zoomata meidän piirustusnäytön täällä. 343 00:14:51,250 --> 00:14:54,160 Ja haluaisin ehdottaa hetki - ja kun piirrän tässä peilataan 344 00:14:54,160 --> 00:14:58,660 siellä nyt - haluaisin ehdottaa, että tässä on koko joukko muistiin tai 345 00:14:58,660 --> 00:15:00,540 RAM, sisällä minun tietokone. 346 00:15:00,540 --> 00:15:04,140 >> Ja tämä on purra numero, sanokaamme, 1. 347 00:15:04,140 --> 00:15:05,720 Tämä on tavua numero 2. 348 00:15:05,720 --> 00:15:08,220 Ja minä teen koko joukko enemmän, ja sitten nippu dot dot pisteitä 349 00:15:08,220 --> 00:15:10,880 osoittavat, että siellä on 2 miljardia näistä asioista. 350 00:15:10,880 --> 00:15:13,520 4, 5, ja niin edelleen. 351 00:15:13,520 --> 00:15:17,055 >> Joten on viisi ensimmäistä tavua minun tietokoneen muistiin. 352 00:15:17,055 --> 00:15:17,560 Kaikki hyvin? 353 00:15:17,560 --> 00:15:19,060 Hyvin harvat pois 2000000000. 354 00:15:19,060 --> 00:15:21,120 Mutta nyt aion ehdottaa seuraavat. 355 00:15:21,120 --> 00:15:27,490 Aion ehdottaa, että x on menossa tallentaa numero 1, ja y on menossa 356 00:15:27,490 --> 00:15:29,690 tallentaa numero 2. 357 00:15:29,690 --> 00:15:35,000 Ja anna minun mennä eteenpäin nyt ja edustaa nämä arvot seuraavasti. 358 00:15:35,000 --> 00:15:41,510 >> Tehdään tämä seuraavasti. 359 00:15:41,510 --> 00:15:42,870 Anna minulle vain yksi sekunti. 360 00:15:42,870 --> 00:15:44,150 Yksi toinen. 361 00:15:44,150 --> 00:15:45,680 OK. 362 00:15:45,680 --> 00:15:47,560 Haluan tehdä tätä vähän - 363 00:15:47,560 --> 00:15:50,440 Tehdään tämä taas. 364 00:15:50,440 --> 00:15:53,250 Muuten aion ja käyttämällä samat numerot, tahattomasti, 365 00:15:53,250 --> 00:15:54,230 useita kertoja. 366 00:15:54,230 --> 00:15:57,320 >> Joten niin meillä on eri määrä puhua, kutsukaamme tätä tavu 367 00:15:57,320 --> 00:16:03,391 numero 123, 124, 125, 126, ja piste piste piste. 368 00:16:03,391 --> 00:16:08,400 Ja haluaisin väittää nyt, että aion laittaa arvo 1 täällä, ja arvo 2 369 00:16:08,400 --> 00:16:11,990 täällä, joka tunnetaan myös x-ja y. 370 00:16:11,990 --> 00:16:15,300 Niin se vain niin, että tämä on x, tämä on y. 371 00:16:15,300 --> 00:16:18,180 >> Ja vain noin sattumaa, tietokone, käyttöjärjestelmä, 372 00:16:18,180 --> 00:16:21,890 tapahtui laittaa x paikassa numero 123. 373 00:16:21,890 --> 00:16:25,590 Ja y päätyi sijainti 124 - 374 00:16:25,590 --> 00:16:26,330 hitto vieköön. 375 00:16:26,330 --> 00:16:28,700 Minun olisi pitänyt vahvistaa tämän. 376 00:16:28,700 --> 00:16:34,040 Voi mies, voin todella haluat tehdä tämän? 377 00:16:34,040 --> 00:16:37,340 Kyllä, haluan korjata ja b asianmukainen tästä tänään. 378 00:16:37,340 --> 00:16:39,950 Anteeksi, uusi tässä. 379 00:16:39,950 --> 00:16:45,020 >> 127, 131, ja en halua olla tämän monimutkainen, mutta miksi muutan 380 00:16:45,020 --> 00:16:46,340 numerot siellä? 381 00:16:46,340 --> 00:16:48,360 Koska haluan ints on todella on neljä tavua. 382 00:16:48,360 --> 00:16:49,810 Joten olkaamme Super anaali tästä. 383 00:16:49,810 --> 00:16:53,800 Niin, että jos 1 sattuu käsiteltävä 123, 2 tulee olemaan osoitteessa 384 00:16:53,800 --> 00:16:55,730 127, koska se on vain 4 byes päässä. 385 00:16:55,730 --> 00:16:56,210 Siinä kaikki. 386 00:16:56,210 --> 00:16:58,640 Ja me unohtaa kaikki muita osoitteita maailmassa. 387 00:16:58,640 --> 00:17:03,320 >> Joten x on paikalla 123, y on paikalla 127. 388 00:17:03,320 --> 00:17:05,770 Ja nyt, mitä olen itse haluat tehdä? 389 00:17:05,770 --> 00:17:10,099 Kun soitan swap nyt mitä todella tapahtuu? 390 00:17:10,099 --> 00:17:14,920 No, kun vuorottelu, olen ohimennen osoite x ja osoite y. 391 00:17:14,920 --> 00:17:18,540 Joten esimerkiksi jos nämä kaksi kappaletta Paperin osuus on nyt kaksi 392 00:17:18,540 --> 00:17:23,510 argumentteja ja b vaihtaa, mikä minä olen menossa kirjoittaa Ensimmäinen näistä, 393 00:17:23,510 --> 00:17:27,720 jonka aion soittaa nimitystä? 394 00:17:27,720 --> 00:17:30,610 >> Täsmälleen, 123. 395 00:17:30,610 --> 00:17:31,905 Joten tämä Väitän on. 396 00:17:31,905 --> 00:17:32,955 Tämä on parametri. 397 00:17:32,955 --> 00:17:35,856 Laitan osoitteen x siellä. 398 00:17:35,856 --> 00:17:38,152 >> Mikä tuo on? 399 00:17:38,152 --> 00:17:40,890 >> Mikä tuo on? 400 00:17:40,890 --> 00:17:41,190 >> Ei, ei. 401 00:17:41,190 --> 00:17:41,720 Ei se mitään. 402 00:17:41,720 --> 00:17:42,570 Edelleen hyvä, silti hyvä. 403 00:17:42,570 --> 00:17:43,530 Joten tämä on. 404 00:17:43,530 --> 00:17:46,240 Ja nyt toisen palan paperia, tämä tulee olemaan b, ja mikä minä olen 405 00:17:46,240 --> 00:17:49,010 aiotaan kirjallisesti tämä paperi? 406 00:17:49,010 --> 00:17:50,080 127. 407 00:17:50,080 --> 00:17:53,720 >> Joten ainoa asia, joka on muuttunut edellisessä kertominen tämän tarinan on, 408 00:17:53,720 --> 00:17:58,590 eikä kirjaimellisesti 1 ja 2, minä olen menossa ohi 123 ja 127. 409 00:17:58,590 --> 00:18:02,130 Ja minä lähden nyt laittaa nämä sisällä tämän laatikon, okei? 410 00:18:02,130 --> 00:18:04,640 Niin, että musta laatikko edustaa nyt swap-toiminto. 411 00:18:04,640 --> 00:18:07,230 >> Samaan aikaan, nyt on nyt joku toteuttaa swap-toiminto. 412 00:18:07,230 --> 00:18:09,090 Olisiko joku täällä haluavat tehdä vapaaehtoistyötä? 413 00:18:09,090 --> 00:18:09,560 Tule ylös. 414 00:18:09,560 --> 00:18:11,080 Mikä sinun nimesi on? 415 00:18:11,080 --> 00:18:11,460 Charlie. 416 00:18:11,460 --> 00:18:12,080 Selvä, Charlie. 417 00:18:12,080 --> 00:18:14,810 Tule ylös. 418 00:18:14,810 --> 00:18:17,310 >> Joten Charlie on menossa pelaamaan rooli meidän musta laatikko. 419 00:18:17,310 --> 00:18:21,460 Ja Charlie, mitä haluaisin sinun tekevän Nyt on toteuttaa swap siten, 420 00:18:21,460 --> 00:18:25,320 että koska nämä kaksi osoitetta, olit todella menossa 421 00:18:25,320 --> 00:18:26,330 muuttaa arvoja. 422 00:18:26,330 --> 00:18:28,290 Ja minä kuiskata korvaan kuinka ajaa TV täällä. 423 00:18:28,290 --> 00:18:29,930 >> Joten mene eteenpäin, ja olet musta laatikko. 424 00:18:29,930 --> 00:18:30,920 Reach siellä. 425 00:18:30,920 --> 00:18:34,054 Mitä arvoja näette, ja mitä arvoja näette b? 426 00:18:34,054 --> 00:18:36,740 >> CHARLIE: on 123 ja b on 127. 427 00:18:36,740 --> 00:18:37,530 >> DAVID MALAN: OK, tarkalleen. 428 00:18:37,530 --> 00:18:38,940 Nyt tauko siellä vain hetken. 429 00:18:38,940 --> 00:18:41,680 Ensimmäinen asia aiot tehdä nyt, mukaan koodi - joka 430 00:18:41,680 --> 00:18:43,220 Minä nyt vetää ruudulla - 431 00:18:43,220 --> 00:18:46,750 tulee olemaan jakaa hieman vähän muistia kutsutaan temp. 432 00:18:46,750 --> 00:18:48,850 Joten aion mennä eteenpäin ja antaa teille, että muisti. 433 00:18:48,850 --> 00:18:52,210 >> Joten tämä tulee olemaan kolmas muuttuja että sinulla on saatavilla 434 00:18:52,210 --> 00:18:54,080 soitit temp. 435 00:18:54,080 --> 00:18:57,120 Ja mitä aiot kirjoittaa Temp-paperille? 436 00:18:57,120 --> 00:19:02,524 437 00:19:02,524 --> 00:19:03,470 >> CHARLIE: Osoittimet, eikö? 438 00:19:03,470 --> 00:19:04,790 >> DAVID MALAN: OK, no ei välttämättä viitteitä. 439 00:19:04,790 --> 00:19:07,230 Joten koodiriviä, että olen korostettuna oikealla puolella, 440 00:19:07,230 --> 00:19:07,900 Aloitetaan siellä. 441 00:19:07,900 --> 00:19:08,890 Se kertoo tähden. 442 00:19:08,890 --> 00:19:11,670 Joten tällä hetkellä tallentaa numerossa 123. 443 00:19:11,670 --> 00:19:16,660 Ja vain intuitiivisesti, mitä ei tähti 123 tarkoittaa? 444 00:19:16,660 --> 00:19:21,630 >> Mutta erityisesti, jos on 123, tähti tarkoittaa mitä? 445 00:19:21,630 --> 00:19:22,560 Arvo. 446 00:19:22,560 --> 00:19:24,580 Tai enemmän rennosti, mene sinne. 447 00:19:24,580 --> 00:19:28,620 Joten haluaisin ehdottaa, että tilalla on kätesi, mennä eteenpäin ja käsitellä kyseistä 448 00:19:28,620 --> 00:19:29,430 kuin se on kartta. 449 00:19:29,430 --> 00:19:32,940 Ja kävellä itsesi yli tietokoneen muisti, ja löytää meille, mikä on 450 00:19:32,940 --> 00:19:36,520 paikassa 123. 451 00:19:36,520 --> 00:19:37,720 Täsmälleen. 452 00:19:37,720 --> 00:19:41,100 >> Joten näemme sijainti 123 on mitä, ilmeisesti? 453 00:19:41,100 --> 00:19:44,240 OK, niin mitä arvoa nyt olet aikoo panna temp? 454 00:19:44,240 --> 00:19:44,750 Täsmälleen. 455 00:19:44,750 --> 00:19:45,600 Joten mene eteenpäin ja tehdä sitä. 456 00:19:45,600 --> 00:19:51,280 Ja kirjoita numero 1 pala paperia, joka on tällä hetkellä nimeltään temp. 457 00:19:51,280 --> 00:19:53,540 >> Ja nyt seuraava askel, että aiot toteuttaa 458 00:19:53,540 --> 00:19:54,310 tulee olemaan mitä. 459 00:19:54,310 --> 00:19:57,820 No, oikealla puolella seuraavan rivin koodia on tähti b. b, ja 460 00:19:57,820 --> 00:19:59,260 Tietenkin tallentaa osoite. 461 00:19:59,260 --> 00:20:02,270 Se käsittelee 127. 462 00:20:02,270 --> 00:20:06,620 Star b tarkoittaa mitä, rennosti puhumalla? 463 00:20:06,620 --> 00:20:08,700 >> Siirry kyseiseen paikkaan. 464 00:20:08,700 --> 00:20:14,988 Joten mene eteenpäin ja löytää meidät mitä paikassa 127. 465 00:20:14,988 --> 00:20:15,480 OK. 466 00:20:15,480 --> 00:20:19,170 Tietenkin paikassa 127, on edelleen arvo 2. 467 00:20:19,170 --> 00:20:24,060 Joten mitä aiot nyt myymälässä mitä on paikalla? 468 00:20:24,060 --> 00:20:26,860 Joten tähden keinoin mennä paikkaan. 469 00:20:26,860 --> 00:20:29,770 Mikä on sijainti? 470 00:20:29,770 --> 00:20:30,430 >> Täsmälleen. 471 00:20:30,430 --> 00:20:34,190 Joten nyt, jos haluat muuttaa mitä kyseisessä paikassa - 472 00:20:34,190 --> 00:20:36,470 Menen eteenpäin ja ajaa pyyhekumi tässä. 473 00:20:36,470 --> 00:20:37,760 Ja nyt laita se takaisin harjalla. 474 00:20:37,760 --> 00:20:42,190 Mikä numero aiot kirjoittaa että tyhjä laatikko nyt? 475 00:20:42,190 --> 00:20:42,850 >> Täsmälleen. 476 00:20:42,850 --> 00:20:46,470 Joten tämä rivi koodia, on selvää - let minulle tauko mitä Charlien tekemässä ja 477 00:20:46,470 --> 00:20:51,730 Huomautan, mitä hän juuri tehnyt on kirjoittaa tuohon laatikkoon sijainti 123 478 00:20:51,730 --> 00:20:55,150 arvo, joka oli aiemmin klo b. 479 00:20:55,150 --> 00:20:59,140 Ja niin olemme nyt toteutettu todellakin Tämän toisen rivin koodia. 480 00:20:59,140 --> 00:21:01,920 >> Nyt valitettavasti siellä vielä yksi rivi jäljellä. 481 00:21:01,920 --> 00:21:04,900 Nyt mitä on temp, kirjaimellisesti? 482 00:21:04,900 --> 00:21:06,200 Se on tietysti numero yksi. 483 00:21:06,200 --> 00:21:07,020 Se ei ole osoite. 484 00:21:07,020 --> 00:21:09,380 Se on vain numero, eräänlainen muuttujan viikolla yksi. 485 00:21:09,380 --> 00:21:13,520 >> Ja nyt kun sanot tähden b, joka tarkoittaa Siirry osoitteeseen b, joka on 486 00:21:13,520 --> 00:21:15,090 Tietenkin täällä. 487 00:21:15,090 --> 00:21:16,020 Joten kun olet päässyt sinne - 488 00:21:16,020 --> 00:21:18,320 Menen eteenpäin ja poistaa mitä oikeastaan siellä - ja mitä olet 489 00:21:18,320 --> 00:21:20,820 aikoo kirjoittaa nyt paikalla 127? 490 00:21:20,820 --> 00:21:22,010 >> CHARLIE: Lämpötila, joka on yksi. 491 00:21:22,010 --> 00:21:23,430 >> DAVID MALAN: Lämpötila, joka on yksi. 492 00:21:23,430 --> 00:21:25,670 Ja mitä tapahtuu temp lopulta? 493 00:21:25,670 --> 00:21:26,600 No, emme oikeastaan ​​tiedä. 494 00:21:26,600 --> 00:21:27,420 Emme välitä. 495 00:21:27,420 --> 00:21:31,090 Aina olemme toteutettu toiminto Toistaiseksi kaikki paikalliset muuttujat olet 496 00:21:31,090 --> 00:21:31,890 ovat todellakin paikallisia. 497 00:21:31,890 --> 00:21:33,060 Ja ne vain katoavat. 498 00:21:33,060 --> 00:21:35,040 He talteen jonka käyttöjärjestelmä järjestelmä lopulta. 499 00:21:35,040 --> 00:21:39,800 >> Niin, että lämpötila on edelleen arvo 1 on tavallaan pohjimmiltaan 500 00:21:39,800 --> 00:21:41,150 mielenkiinnoton meille. 501 00:21:41,150 --> 00:21:43,100 Okei, joten aplodit jos voisimme Charlie. 502 00:21:43,100 --> 00:21:46,400 Hyvin tehty. 503 00:21:46,400 --> 00:21:51,520 >> Okei, joten mitä enemmän tekee tämä tarkoittaa voimme tehdä? 504 00:21:51,520 --> 00:21:54,400 Joten käy ilmi, että olemme olleet kertoo muutaman White Lies 505 00:21:54,400 --> 00:21:55,540 jo jonkin aikaa. 506 00:21:55,540 --> 00:21:59,990 Itse asiassa näyttää siltä, ​​että merkkijono, kaikki tällä kertaa, ei oikeastaan 507 00:21:59,990 --> 00:22:02,190 merkkijono sinänsä. 508 00:22:02,190 --> 00:22:03,980 Se sellainen on, että intuitiivisesti. 509 00:22:03,980 --> 00:22:08,270 >> Mutta teknisesti ottaen merkkijono on tietotyyppi, että me julisti sisällä 510 00:22:08,270 --> 00:22:12,170 CS50 kirjasto yksinkertaistaa maailmassa muutaman ensimmäisen viikon luokkaa. 511 00:22:12,170 --> 00:22:20,130 Mikä merkkijono todella on osoite hahmo, jossain RAM. 512 00:22:20,130 --> 00:22:25,530 Merkkijono on todella useita, kuten 123 tai 127, joka tapahtuu rajata 513 00:22:25,530 --> 00:22:28,420 jos merkkijono alkaa tietokoneen muistiin. 514 00:22:28,420 --> 00:22:31,870 >> Mutta se ei edusta string sinänsä itse. 515 00:22:31,870 --> 00:22:33,460 Ja me voimme nähdä tämän seuraavasti. 516 00:22:33,460 --> 00:22:35,980 Anna minun mennä eteenpäin ja avata koodia, joka on muun 517 00:22:35,980 --> 00:22:38,340 Nykypäivän lähdekoodi esimerkkejä. 518 00:22:38,340 --> 00:22:42,225 Ja aion mennä eteenpäin ja avata up, sanotaanko, vertaa-0.c. 519 00:22:42,225 --> 00:22:44,830 520 00:22:44,830 --> 00:22:48,790 Tämä on buginen ohjelma, joka on menossa pantava täytäntöön seuraavasti. 521 00:22:48,790 --> 00:22:49,040 >> First. 522 00:22:49,040 --> 00:22:50,420 Aion sanoa jotain. 523 00:22:50,420 --> 00:22:52,660 Sitten aion mennä eteenpäin ja saada merkkijonon käyttäjä 524 00:22:52,660 --> 00:22:53,750 että seuraavalla rivillä. 525 00:22:53,750 --> 00:22:55,370 Sitten aion sanoa sen taas. 526 00:22:55,370 --> 00:22:57,540 Sitten aion saada toinen merkkijonon käyttäjä. 527 00:22:57,540 --> 00:23:00,390 >> Ja ilmoitus, näytän yksi jousille muuttuja nimeltä s, ja 528 00:23:00,390 --> 00:23:03,040 toinen näistä jouset muuttujaan nimeltä t. 529 00:23:03,040 --> 00:23:07,480 Ja nyt aion vaatia, hyvin kohtuudella, että jos s vastaa yhtä t, 530 00:23:07,480 --> 00:23:08,940 jouset ovat samat. 531 00:23:08,940 --> 00:23:09,970 Kirjoitat sama asia. 532 00:23:09,970 --> 00:23:11,830 Else, jouset ovat ei ole sama asia. 533 00:23:11,830 --> 00:23:15,440 >> Loppujen lopuksi, jos input kaksi ints kaksi merkkiä, kaksi kellukkeet, kaksi tuplaa, jokin 534 00:23:15,440 --> 00:23:18,400 tietotyypit olemme puhuneet toistaiseksi vertailla niitä - 535 00:23:18,400 --> 00:23:22,070 Muistan teimme hyvin selväksi aikaa sitten että et tee tätä, koska 536 00:23:22,070 --> 00:23:25,840 yksi yhtäläisyysmerkki on tietenkin sijoitusoperaattori. 537 00:23:25,840 --> 00:23:26,820 Niin, että olisi virhe. 538 00:23:26,820 --> 00:23:29,260 >> Käytämme yhtä yhtäläisyysmerkki, joka todellakin vertaa 539 00:23:29,260 --> 00:23:31,050 asioita todellista tasa-arvoa. 540 00:23:31,050 --> 00:23:32,275 Mutta Väitän tämä on buginen. 541 00:23:32,275 --> 00:23:37,400 Jos menen eteenpäin ja tehdä vertailla nolla, ja tee piste slash vertailla nolla. 542 00:23:37,400 --> 00:23:39,700 Ja kirjoitan, sanokaamme, hei. 543 00:23:39,700 --> 00:23:41,590 Ja sitten sanotaan Hei taas. 544 00:23:41,590 --> 00:23:46,040 Kirjaimellisesti sama asia, tietokone väittämistä kirjoitetaan eri asioita. 545 00:23:46,040 --> 00:23:47,640 >> Nyt ehkä olen vain väärin kirjoitettu jotain. 546 00:23:47,640 --> 00:23:49,910 Minä kirjoittaa nimeni tällä kertaa. 547 00:23:49,910 --> 00:23:52,580 Tarkoitan, hei. 548 00:23:52,580 --> 00:23:54,770 Hei. 549 00:23:54,770 --> 00:23:57,360 Se on erilainen joka kerta. 550 00:23:57,360 --> 00:23:58,430 >> No, miksi? 551 00:23:58,430 --> 00:24:00,140 Mitä todella tapahtuu alla huppu? 552 00:24:00,140 --> 00:24:03,270 No, mitä todella tapahtuu alla huppu on merkkijono sitten 553 00:24:03,270 --> 00:24:07,410 Olen kirjoittanut, että ensimmäistä kertaa esimerkiksi on sana hei, tietenkin. 554 00:24:07,410 --> 00:24:11,660 Mutta jos me edustamme tämän alla huppu, muistaa, että 555 00:24:11,660 --> 00:24:13,470 merkkijono on jono. 556 00:24:13,470 --> 00:24:15,040 Ja olemme sanoneet aiemmin. 557 00:24:15,040 --> 00:24:20,200 >> Joten jos piirrän että array näin, olen menossa edustamaan jotain aivan 558 00:24:20,200 --> 00:24:23,030 samanlainen kuin mitä teimme hetki sitten. 559 00:24:23,030 --> 00:24:25,390 Ja siellä on todella jotain erityistä täälläkin. 560 00:24:25,390 --> 00:24:28,090 Mitä päätämme on osoitteessa lopussa jokaisen merkkijonon? 561 00:24:28,090 --> 00:24:30,760 Niin, tämä kenoviivan nolla, joka on vain tapa esittää, 562 00:24:30,760 --> 00:24:33,610 kirjaimellisesti, 00000000. 563 00:24:33,610 --> 00:24:35,680 Kahdeksan 0 bittiä peräkkäin. 564 00:24:35,680 --> 00:24:37,610 >> En tiedä, rehellisesti, mitä tämän jälkeen. 565 00:24:37,610 --> 00:24:40,090 Se on vain joukko enemmän RAM sisällä minun tietokone. 566 00:24:40,090 --> 00:24:40,970 Mutta tämä on jono. 567 00:24:40,970 --> 00:24:42,260 Puhuimme paneelit ennen. 568 00:24:42,260 --> 00:24:45,010 Ja me yleensä puhua taulukot olevan paikalla nolla, 569 00:24:45,010 --> 00:24:46,580 sitten yksi, sitten kaksi. 570 00:24:46,580 --> 00:24:47,950 Mutta se on vain mukavuussyistä. 571 00:24:47,950 --> 00:24:49,380 Ja se on täysin suhteellinen. 572 00:24:49,380 --> 00:24:53,010 >> Kun olet todella saada muisti tietokoneen, se on tietenkin tahansa 573 00:24:53,010 --> 00:24:55,450 2000000000 jostain kumman tavua, mahdollisesti. 574 00:24:55,450 --> 00:24:59,100 Siis todella alla huppu, koko tämän ajan, kyllä. 575 00:24:59,100 --> 00:25:01,670 Tämä saattaa hyvinkin olla kiinnike nolla. 576 00:25:01,670 --> 00:25:04,780 Mutta jos kaivaa vielä syvemmälle alla huppu, joka on todella 577 00:25:04,780 --> 00:25:07,000 osoitenumeron 123. 578 00:25:07,000 --> 00:25:09,150 Tämä on osoite 124. 579 00:25:09,150 --> 00:25:11,040 Tämä on osoite 125. 580 00:25:11,040 --> 00:25:12,540 >> Enkä tyriä tällä kertaa. 581 00:25:12,540 --> 00:25:15,840 Nämä ovat nyt yhtä tavua toisistaan ​​mistä syystä? 582 00:25:15,840 --> 00:25:17,930 Kuinka suuri on char? 583 00:25:17,930 --> 00:25:19,170 Char on vain yksi tavu. 584 00:25:19,170 --> 00:25:20,570 Int on tyypillisesti neljä tavua. 585 00:25:20,570 --> 00:25:24,850 Joten siksi tein sen 123, 127, 131 ja niin edelleen. 586 00:25:24,850 --> 00:25:27,560 Nyt voin pitää matematiikka yksinkertaisempi ja vain tehdä plus 1. 587 00:25:27,560 --> 00:25:30,510 Ja tämä on nyt, mitä todella tapahtuu on alla huppu. 588 00:25:30,510 --> 00:25:37,760 >> Joten kun ilmoittaa jotain tällaista, string s, tämä on todella - 589 00:25:37,760 --> 00:25:39,170 se kääntyy pois - 590 00:25:39,170 --> 00:25:41,190 char tähden. 591 00:25:41,190 --> 00:25:44,640 Star, tarkoittaa tietenkin osoite, eli osoitin. 592 00:25:44,640 --> 00:25:46,200 Joten se osoite jotain. 593 00:25:46,200 --> 00:25:47,510 Mikä on se osoite? 594 00:25:47,510 --> 00:25:47,760 >> No - 595 00:25:47,760 --> 00:25:51,680 Olen ainoa, joka näkee hyvin tärkeä asia Teen tai epäilet 596 00:25:51,680 --> 00:25:52,560 Teen. 597 00:25:52,560 --> 00:25:55,270 Joten string - 598 00:25:55,270 --> 00:25:57,180 Surullista on minulla monitori tuolla missä minä 599 00:25:57,180 --> 00:25:58,100 voinut nähdä, että. 600 00:25:58,100 --> 00:26:00,990 >> Okei, joten merkkijono s on mitä I julisti aiemmin. 601 00:26:00,990 --> 00:26:04,600 Mutta näyttää siltä, ​​kiitos hieman taikaa CS50 kirjasto, kaikki tämä 602 00:26:04,600 --> 00:26:08,780 aika merkkijono on kirjaimellisesti ollut char tähden. 603 00:26:08,780 --> 00:26:11,310 Tähti tarkoittaa jälleen osoitin tai osoite. 604 00:26:11,310 --> 00:26:14,180 Se, että se on reunustavat sana char tarkoittaa että se 605 00:26:14,180 --> 00:26:15,970 osoite luonnetta. 606 00:26:15,970 --> 00:26:23,100 >> Joten jos saat merkkijono kutsutaan, ja kirjoitan H-E-L-L-O, ehdottaa nyt, mitä on saada 607 00:26:23,100 --> 00:26:27,330 string kirjaimellisesti palaamassa kaikki tällä kertaa, vaikka olemme pikemminkin 608 00:26:27,330 --> 00:26:29,980 yksinkertaistettu maailma? 609 00:26:29,980 --> 00:26:33,310 Mitä saat string todella palauttaa sen paluuarvon? 610 00:26:33,310 --> 00:26:35,830 611 00:26:35,830 --> 00:26:38,720 >> 123 Tässä tapauksessa esimerkiksi. 612 00:26:38,720 --> 00:26:42,630 Olemme aiemmin sanonut, että saat merkkijono yksinkertaisesti palauttaa merkkijonon, jono 613 00:26:42,630 --> 00:26:43,300 merkkiä. 614 00:26:43,300 --> 00:26:44,790 Mutta se on hieman valkoinen valhe. 615 00:26:44,790 --> 00:26:48,010 Tapa saada merkkijono todella toimii alla huppu on se saa 616 00:26:48,010 --> 00:26:48,930 merkkijonon käyttäjä. 617 00:26:48,930 --> 00:26:51,530 Se vaappuu merkkejä hän tyyppejä muistiin. 618 00:26:51,530 --> 00:26:54,680 Siinä kenoviiva nolla lopussa Näiden merkkijonoa. 619 00:26:54,680 --> 00:26:57,310 >> Mutta mitä sitten ei saa string kirjaimellisesti palaa? 620 00:26:57,310 --> 00:27:02,710 Se kirjaimellisesti palauttaa osoitteen ensimmäinen tavua RAM, että 621 00:27:02,710 --> 00:27:04,130 sitä käytetään, että voimaa. 622 00:27:04,130 --> 00:27:07,500 Ja käy ilmi, että vain palauttamalla yksi osoite 623 00:27:07,500 --> 00:27:12,120 ensimmäisen merkin merkkijono, joka on riittää löytää kokonaisuudessaan 624 00:27:12,120 --> 00:27:12,630 merkkijono. 625 00:27:12,630 --> 00:27:16,930 >> Toisin sanoen saada string ei ole palata 123 ja 124 ja 125. 626 00:27:16,930 --> 00:27:19,950 Sen ei tarvitse antaa minulle pitkä luettelo kaikista tavujen 627 00:27:19,950 --> 00:27:20,740 minun merkkijono käyttää. 628 00:27:20,740 --> 00:27:22,670 Koska yksi, he kaikki takaisin takaisin. 629 00:27:22,670 --> 00:27:28,160 Ja kaksi, jotka perustuvat ensimmäinen osoite, I voi selvittää, missä merkkijono päättyy. 630 00:27:28,160 --> 00:27:29,910 Miten? 631 00:27:29,910 --> 00:27:33,490 >> Erityistä null merkki, Kenoviiva nolla lopussa. 632 00:27:33,490 --> 00:27:35,430 Eli toisin sanoen, jos ohitat ympäri - 633 00:27:35,430 --> 00:27:36,530 sisällä muuttujat - 634 00:27:36,530 --> 00:27:41,300 osoite char, ja sinun oletetaan että lopussa mikä tahansa merkkijono, kaikki 635 00:27:41,300 --> 00:27:45,040 merkkijono meidän ihmisten ajatella jouset, jos oletetaan, että 636 00:27:45,040 --> 00:27:48,600 lopussa tällaisten string siellä kenoviiva nolla, olet kultainen. 637 00:27:48,600 --> 00:27:52,430 Koska voit aina löytää loppuun merkkijono. 638 00:27:52,430 --> 00:27:54,870 >> Nyt mitä todella niin menee on tässä ohjelmassa? 639 00:27:54,870 --> 00:27:59,990 Miksi tämä ohjelma, vertaa-0.c, buginen? 640 00:27:59,990 --> 00:28:01,690 Mikä on todella verrataan? 641 00:28:01,690 --> 00:28:02,420 Niin? 642 00:28:02,420 --> 00:28:05,000 >> Opiskelija: [kuultavissa]. 643 00:28:05,000 --> 00:28:05,730 >> DAVID MALAN: Aivan. 644 00:28:05,730 --> 00:28:08,350 Se vertaamalla sijainnit merkkijonojen. 645 00:28:08,350 --> 00:28:12,420 Joten jos käyttäjä on kirjoittanut hei kerran, kuten tein, muisti saattaa päätyä 646 00:28:12,420 --> 00:28:13,430 tämännäköistä. 647 00:28:13,430 --> 00:28:18,210 Jos käyttäjä sitten tyypit Hei taas, mutta soittamalla saat merkkijono uudelleen, c on 648 00:28:18,210 --> 00:28:21,800 ole erityisen taitava ellet opettaa se olla fiksu kirjoittamalla koodia. 649 00:28:21,800 --> 00:28:22,430 >> C - 650 00:28:22,430 --> 00:28:23,860 ja tietokoneet yleisemmin - 651 00:28:23,860 --> 00:28:27,370 Jos kirjoitat sanan Hei taas, tiedät mitä aiot saada. 652 00:28:27,370 --> 00:28:31,480 Olet juuri menossa toinen array muistin että kyllä, sattuu olemaan 653 00:28:31,480 --> 00:28:35,510 tallentamiseen H-E-L-L-O ja niin edelleen. 654 00:28:35,510 --> 00:28:38,240 >> Se tulee samannäköisiä meille ihmisille, mutta tähän osoitteeseen 655 00:28:38,240 --> 00:28:39,460 ehkä ole 123. 656 00:28:39,460 --> 00:28:42,470 Se voi vain niin käydä, että käyttöjärjestelmä on joitakin käytettävissä 657 00:28:42,470 --> 00:28:45,430 tilaa esimerkiksi paikassa - 658 00:28:45,430 --> 00:28:49,820 sanotaanko jotain mielivaltaista, näin on paikalla 200. 659 00:28:49,820 --> 00:28:51,620 Ja tämä on paikka 201. 660 00:28:51,620 --> 00:28:53,060 Ja tämä on paikka 202. 661 00:28:53,060 --> 00:28:55,730 Meillä ei ole aavistustakaan, missä se on olemaan muistiin. 662 00:28:55,730 --> 00:28:59,110 >> Mutta mitä tämä tarkoittaa, että mitä on aiotaan varastoida lopulta s? 663 00:28:59,110 --> 00:29:00,750 Numero 123. 664 00:29:00,750 --> 00:29:04,860 Mitä aiotaan varastoida t, Tässä mielivaltainen esimerkki? 665 00:29:04,860 --> 00:29:06,300 Numero 200. 666 00:29:06,300 --> 00:29:11,410 Ja kaikki tämä tarkoittaa sitten on tietenkin, 123 ei ole sama 200. 667 00:29:11,410 --> 00:29:14,940 Ja niin tämä jos ehto ei tosi. 668 00:29:14,940 --> 00:29:18,430 Koska get string käyttää erilaisia paloina muisti joka kerta. 669 00:29:18,430 --> 00:29:20,360 >> Nyt voimme nähdä tämän uudelleen toisessa esimerkissä. 670 00:29:20,360 --> 00:29:23,764 Anna minun mennä eteenpäin ja avata copy-0.c. 671 00:29:23,764 --> 00:29:28,770 Väitän, että tämä esimerkki on menossa kokeilla - mutta ei - kopioida kaksi merkkijonoa 672 00:29:28,770 --> 00:29:29,910 seuraavasti. 673 00:29:29,910 --> 00:29:31,730 >> Aion sanoa jotain käyttäjälle. 674 00:29:31,730 --> 00:29:34,490 Olen sitten menossa merkkijono ja kutsua sitä s. 675 00:29:34,490 --> 00:29:36,400 Ja nyt, minä teen tämän valintaruudun täällä. 676 00:29:36,400 --> 00:29:37,990 Olemme maininneet tämän taas takaisin. 677 00:29:37,990 --> 00:29:42,490 Mutta kun saattaa saada merkkijono return, toinen erikoismerkki tai erityistä 678 00:29:42,490 --> 00:29:45,050 symboli sanotaanko. 679 00:29:45,050 --> 00:29:45,900 Jos se on pois muistista. 680 00:29:45,900 --> 00:29:48,970 >> Esimerkiksi, jos käyttäjä on todella on vaikeaa ja tyypit hirvittävät 681 00:29:48,970 --> 00:29:51,220 merkkien määrä on näppäimistö ja osumia Enter. 682 00:29:51,220 --> 00:29:54,580 Jos tämä määrä merkkejä vain voi sopii RAM jostain hullu 683 00:29:54,580 --> 00:29:57,820 syystä myös saada string saattaa hyvin palata null. 684 00:29:57,820 --> 00:30:01,080 >> Tai jos ohjelma itse tekee paljon muita asioita ja siellä on vain 685 00:30:01,080 --> 00:30:03,790 Muisti ei riitä get string menestyä, se saattaa lopettaa 686 00:30:03,790 --> 00:30:05,240 jopa palaamassa null. 687 00:30:05,240 --> 00:30:07,160 Mutta katsotaanpa tarkemmin siitä, mitä tämä on. 688 00:30:07,160 --> 00:30:10,280 Mikä on s tietotyyppi todella? 689 00:30:10,280 --> 00:30:11,610 Char tähden. 690 00:30:11,610 --> 00:30:14,560 >> Joten se kääntyy pois nyt voimme kuoria takaisin kerros null. 691 00:30:14,560 --> 00:30:17,500 Osoittautuu, null on - kyllä, tietysti erikoissymboli. 692 00:30:17,500 --> 00:30:19,190 Mutta mikä on se todella? 693 00:30:19,190 --> 00:30:25,220 Oikeasti, null on vain symboli, että ihmiset käyttävät edustaa nolla samoin. 694 00:30:25,220 --> 00:30:29,010 >> Niin laatijat C ja tietokoneet yleisemmin päätti vuosi sitten 695 00:30:29,010 --> 00:30:30,010 että tiedät mitä. 696 00:30:30,010 --> 00:30:34,850 Miksi emme varmistettava, ettei käyttäjä data on koskaan, koskaan, koskaan 697 00:30:34,850 --> 00:30:36,730 varastoidaan bye nolla? 698 00:30:36,730 --> 00:30:39,610 Itse asiassa jopa minun mielivaltaisen esimerkiksi ennen, en aloita numerointi 699 00:30:39,610 --> 00:30:40,390 tavua nolla. 700 00:30:40,390 --> 00:30:41,540 Aloitin yhden. 701 00:30:41,540 --> 00:30:44,950 Koska tiesin, että ihmiset maailmassa ovat päättäneet varata nolla 702 00:30:44,950 --> 00:30:47,970 tavu kenenkään RAM jotain erityistä. 703 00:30:47,970 --> 00:30:52,020 >> Syynä on, milloin haluat merkki siitä, että jotain on mennyt pieleen 704 00:30:52,020 --> 00:30:55,960 osalta osoitteita, voit palauttaa null - joka tunnetaan myös nolla - 705 00:30:55,960 --> 00:30:59,410 ja koska tiedät, että ei ole legit tiedot osoitteessa nolla, selvästi 706 00:30:59,410 --> 00:31:00,400 se tarkoittaa, että virhe. 707 00:31:00,400 --> 00:31:04,080 Ja siksi me, sopimuksen mukaan, tarkista for null ja palata jotain 708 00:31:04,080 --> 00:31:06,260 kuin yksi näissä asioissa. 709 00:31:06,260 --> 00:31:09,300 >> Jos siis selaa nyt, tämä on vain sitten jotkut virheentarkistukset, kaiken varalta 710 00:31:09,300 --> 00:31:10,610 jotain meni pieleen [? bail?] 711 00:31:10,610 --> 00:31:13,470 kokonaan ja lopettaa ohjelman palauttamalla alussa. 712 00:31:13,470 --> 00:31:19,030 Tämä linja nyt voisi kirjoittaa uudelleen kuin tämä, mikä tarkoittaa sitä, mitä? 713 00:31:19,030 --> 00:31:23,155 Vasemmalla puolella, anna minulle toinen osoitin merkin, ja kutsua sitä t. 714 00:31:23,155 --> 00:31:26,935 Mitä minä tallentamiseen sisällä t, joka perustuu tässä yksi rivi koodia? 715 00:31:26,935 --> 00:31:30,950 716 00:31:30,950 --> 00:31:32,170 >> Olen tallentaa sijainnin. 717 00:31:32,170 --> 00:31:34,742 Erityisesti sijainti joka oli s. 718 00:31:34,742 --> 00:31:39,000 Joten jos käyttäjä on kirjoitettu hello, ja että ensimmäinen hei sattuu päätyä 719 00:31:39,000 --> 00:31:42,567 täällä, niin numero 123 on aikoo tulla takaisin saada 720 00:31:42,567 --> 00:31:43,810 merkkijono ja varastoitava - 721 00:31:43,810 --> 00:31:44,780 kuten sanoimme aiemmin - 722 00:31:44,780 --> 00:31:45,440 S. 723 00:31:45,440 --> 00:31:50,560 >> Kun nyt julistaa toisen osoitin nieriää ja kutsua sitä t, mikä määrä on 724 00:31:50,560 --> 00:31:53,940 kirjaimellisesti menossa päätyä t mukaan tarina? 725 00:31:53,940 --> 00:31:55,420 Joten 123. 726 00:31:55,420 --> 00:32:00,310 >> Joten teknisesti nyt molemmat s ja t osoittavat täsmälleen 727 00:32:00,310 --> 00:32:02,410 Sama paloina muistia. 728 00:32:02,410 --> 00:32:06,140 Joten huomaa, mitä aion tehdä nyt todistaa, että tämä ohjelma on buginen. 729 00:32:06,140 --> 00:32:08,820 >> Ensinnäkin aion vaatia, kanssa Tulosta f hyödyntäminen 730 00:32:08,820 --> 00:32:10,080 kopio merkkijono. 731 00:32:10,080 --> 00:32:11,660 Sitten aion tehdä vähän Virheentarkistus. 732 00:32:11,660 --> 00:32:12,160 Aion varmistaa. 733 00:32:12,160 --> 00:32:16,710 Katsotaanpa varmista, että merkkijono t on ainakin nollaa suurempi pituus, 734 00:32:16,710 --> 00:32:19,190 joten siellä on jokin merkki on todella hyödyntää. 735 00:32:19,190 --> 00:32:22,840 >> Ja sitten saatatte muistaa tämän Aikaisemmissa. 736 00:32:22,840 --> 00:32:25,630 2 ylä - joka on ctype.h tiedosto. 737 00:32:25,630 --> 00:32:30,800 T kiinnike nolla antaa minulle nolla luonne merkkijono t. 738 00:32:30,800 --> 00:32:34,360 Ja 2 ylä saman arvon, ja Tietenkin, muuntaa se isoiksi. 739 00:32:34,360 --> 00:32:38,230 >> Joten intuitiivisesti, tämä korostettuna koodia on isoa ensimmäinen 740 00:32:38,230 --> 00:32:40,250 kirjain t. 741 00:32:40,250 --> 00:32:44,485 Mutta se ei ole pääomia, intuitiivisesti, ensimmäinen kirjain s. 742 00:32:44,485 --> 00:32:48,130 Mutta jos olet ajatellut eteenpäin, mikä minä olen tulleet kun ajaa ohjelman 743 00:32:48,130 --> 00:32:54,220 ja tulostaa sekä alkuperäinen, s, ja niin sanottu kopio, t? 744 00:32:54,220 --> 00:32:55,350 >> He todella olemaan sama. 745 00:32:55,350 --> 00:32:56,600 Ja miksi he tulevat olemaan samat? 746 00:32:56,600 --> 00:32:58,970 747 00:32:58,970 --> 00:33:01,020 He molemmat osoittaen täsmälleen sama asia. 748 00:33:01,020 --> 00:33:01,610 Joten tehdään tämä. 749 00:33:01,610 --> 00:33:03,160 >> Tehdä kopio nolla. 750 00:33:03,160 --> 00:33:04,070 Se kokoaa OK. 751 00:33:04,070 --> 00:33:06,500 Saanen ajaa kopio nolla. 752 00:33:06,500 --> 00:33:10,110 Saanen kirjoittaa jotain Hello in kaikki pienet paina sitten Enter. 753 00:33:10,110 --> 00:33:16,520 Ja se väittää, että sekä alkuperäisen s ja kopiointi ovat todellakin samat. 754 00:33:16,520 --> 00:33:17,920 >> Joten mitä todella tapahtui? 755 00:33:17,920 --> 00:33:20,100 Saanen piirtää tätä kuvaa vain kertoa tarina 756 00:33:20,100 --> 00:33:21,340 hieman eri tavalla. 757 00:33:21,340 --> 00:33:26,060 Mitä todella tapahtuu alla huppu kun julistaa jotain 758 00:33:26,060 --> 00:33:30,410 char start s tai merkkijono s, Saan osoitin - 759 00:33:30,410 --> 00:33:33,090 joka sattuu olemaan neljä tavua vuonna CS50 laitteen 760 00:33:33,090 --> 00:33:34,410 ja paljon tietokoneita. 761 00:33:34,410 --> 00:33:36,008 Ja aion kutsua tätä s. 762 00:33:36,008 --> 00:33:39,810 Ja tämä on tällä hetkellä Jostain arvoa. 763 00:33:39,810 --> 00:33:43,900 >> Kun julistaa muuttuja, ellet itse laittaa arvoa siellä, jotka 764 00:33:43,900 --> 00:33:44,570 tietää, mitä siellä. 765 00:33:44,570 --> 00:33:48,110 Se voisi olla joitakin satunnaisia ​​jono bittiä edellisellä kerralla. 766 00:33:48,110 --> 00:33:52,490 Joten kun, minun rivi koodia ei saada merkkijono, ja sitten tallentaa paluuta 767 00:33:52,490 --> 00:33:54,800 arvo s saada string jotenkin - 768 00:33:54,800 --> 00:33:58,520 ja me lopulta kuori takaisin miten saada string teoksia, jotenkin jakaa 769 00:33:58,520 --> 00:34:00,480 array, joka luultavasti näyttää vähän kuin tämä. 770 00:34:00,480 --> 00:34:05,390 H-E-L-L-O, kenoviivan nolla. 771 00:34:05,390 --> 00:34:09,510 >> Oletetaan, että tämä on osoite 123 vain ensimmäisen johdonmukaisuutta. 772 00:34:09,510 --> 00:34:13,000 Joten merkkijono kotiinpaluuta Korostettuna siellä, se palaa 773 00:34:13,000 --> 00:34:15,000 numero sanoimme, 123. 774 00:34:15,000 --> 00:34:17,420 Joten mitä todella menee sisälle on täällä? 775 00:34:17,420 --> 00:34:26,590 >> No, mitä todella menee sisällä s on 123. 776 00:34:26,590 --> 00:34:29,250 Mutta rehellisesti, olen tulossa hieman hämmentynyt kaikki nämä osoitteet, 777 00:34:29,250 --> 00:34:30,320 kaikki nämä mielivaltaisen numeroita. 778 00:34:30,320 --> 00:34:32,290 123, 124, 127. 779 00:34:32,290 --> 00:34:34,570 Joten todella yksinkertaistaa maailman hieman. 780 00:34:34,570 --> 00:34:38,800 >> Kun puhumme osoittimia, rehellisesti, jotta meille ihmisille, jotka helkutti välittää missä 781 00:34:38,800 --> 00:34:39,870 asiat ovat muistissa? 782 00:34:39,870 --> 00:34:41,080 Se on täysin mielivaltaista. 783 00:34:41,080 --> 00:34:43,370 Se tulee riippuu siitä, kuinka paljon muistia käyttäjä on. 784 00:34:43,370 --> 00:34:46,590 Se tulee riippuvaisia, kun päivä käynnistät ohjelman, ehkä, ja 785 00:34:46,590 --> 00:34:48,250 mitä tulo käyttäjä antaa sinulle. 786 00:34:48,250 --> 00:34:50,060 Olemme asunnon merkityksettömiä yksityiskohtia. 787 00:34:50,060 --> 00:34:54,230 >> Joten abstrakti pois ja sanoa, että kun suoritat koodiriviä näin, 788 00:34:54,230 --> 00:34:57,320 char tähden s saa tuottoa arvo get merkkijono. 789 00:34:57,320 --> 00:35:02,720 Miksi emme sen sijaan vain vetää mitä pitää soittaa osoitin kuin se on 790 00:35:02,720 --> 00:35:04,140 osoittaa jotain? 791 00:35:04,140 --> 00:35:07,000 Joten Väitän nyt, että s asti on osoitin - 792 00:35:07,000 --> 00:35:08,480 alla huppu se osoite. 793 00:35:08,480 --> 00:35:11,330 Mutta se vain osoittaa ensimmäinen tavu 794 00:35:11,330 --> 00:35:12,780 merkkijono, joka on palautettu. 795 00:35:12,780 --> 00:35:16,710 >> Jos minä nyt palata koodi tähän, mitä tapahtuu tällä rivillä? 796 00:35:16,710 --> 00:35:20,020 No, tässä korostettuna nyt Olen julistaa ilmeisesti toinen 797 00:35:20,020 --> 00:35:21,070 muuttuja nimeltä t. 798 00:35:21,070 --> 00:35:25,700 Mutta se on myös osoitin, joten aion tehdä sitä, teoriassa, tarkka 799 00:35:25,700 --> 00:35:26,710 samankokoinen laatikko. 800 00:35:26,710 --> 00:35:28,160 Ja aion kutsua sitä t. 801 00:35:28,160 --> 00:35:33,500 >> Ja nyt jos palaamme koodi uudelleen kun tallentaa sisälläni t, 802 00:35:33,500 --> 00:35:36,920 mitä olen teknisesti laskemisesta sisällä t? 803 00:35:36,920 --> 00:35:39,350 No teknisesti, tämä oli numero 123.. 804 00:35:39,350 --> 00:35:42,270 Joten oikeastaan ​​minun pitäisi kirjoittaa numero 123 on. 805 00:35:42,270 --> 00:35:43,900 Mutta ottakaamme se korkeammalle tasolle. 806 00:35:43,900 --> 00:35:48,090 t, jos se on vain osoitin, intuitiivisesti, on juuri sitä. 807 00:35:48,090 --> 00:35:49,800 Se on kaikki, mitä on tallennetaan siellä. 808 00:35:49,800 --> 00:35:54,970 >> Joten nyt viime mielenkiintoinen linjat koodia, kun olen itse mennä 809 00:35:54,970 --> 00:36:00,680 hyödyntäminen nollamerkki t, mitä on tekeillä? 810 00:36:00,680 --> 00:36:06,310 No, t kiinnike nolla osoittaa nyt mitä hahmo, oletettavasti? 811 00:36:06,310 --> 00:36:07,460 >> Se osoittaa h.. 812 00:36:07,460 --> 00:36:08,870 Koska t kiinnike nolla - 813 00:36:08,870 --> 00:36:12,490 Muistaakseni tämä on vanha syntaksin. t kiinnike nolla tarkoittaa vain, jos t on merkkijono, t 814 00:36:12,490 --> 00:36:15,590 kiinnike nolla tarkoittaa saada nolla merkki, että vahvuus. 815 00:36:15,590 --> 00:36:18,650 Joten mitä se todella tarkoittaa on mennä tähän array - 816 00:36:18,650 --> 00:36:21,520 ja kyllä, tämä voisi olla 123, tämä voisi olla 124. 817 00:36:21,520 --> 00:36:22,790 Mutta se kaikki on suhteellista, muistan. 818 00:36:22,790 --> 00:36:25,640 Aina puhutaan array, meillä on etu puhu 819 00:36:25,640 --> 00:36:27,000 suhteellinen indeksit. 820 00:36:27,000 --> 00:36:31,120 >> Ja nyt voimme vain olettaa, että t kiinnike nolla on h. 821 00:36:31,120 --> 00:36:35,090 Joten jos pyydän 2 ylä sitä, mitä se on todella tekee on isoa 822 00:36:35,090 --> 00:36:38,290 pieniä h isoiksi H. Mutta tietenkin, mikä on s? 823 00:36:38,290 --> 00:36:41,010 Se osoittaa samalla hiton merkkijono. 824 00:36:41,010 --> 00:36:44,200 >> Joten tämä on kaikki, mitä on tapahtunut Tämän koodin toistaiseksi. 825 00:36:44,200 --> 00:36:45,960 Niin mitä sitten implisiittisesti? 826 00:36:45,960 --> 00:36:48,300 Miten voimme korjata nämä kaksi ongelmaa? 827 00:36:48,300 --> 00:36:50,870 Miten voimme verrata todellisia jouset? 828 00:36:50,870 --> 00:36:53,720 >> No intuitiivisesti, miten mennä noin vertaamalla kahta 829 00:36:53,720 --> 00:36:55,090 jousille todellista tasa-arvoa? 830 00:36:55,090 --> 00:36:58,920 831 00:36:58,920 --> 00:37:00,750 >> Mitä se tarkoittaa, jos kaksi kielet ovat tasa-arvoisia? 832 00:37:00,750 --> 00:37:04,330 Selvästikään ole, että niiden osoitteet ovat yhtä muistiin, koska se on pieni 833 00:37:04,330 --> 00:37:06,590 tason täytäntöönpanon yksityiskohtia. 834 00:37:06,590 --> 00:37:08,360 Kaikki merkit ovat samat. 835 00:37:08,360 --> 00:37:12,810 Joten haluan ehdottaa, ja haluan esitellä versiossa yksi compare.c 836 00:37:12,810 --> 00:37:14,970 täällä, joten vertaa-1.c. 837 00:37:14,970 --> 00:37:19,590 >> Saanen ehdottaa, että me vielä saada osoitin kutsutaan s, ja säilytä se 838 00:37:19,590 --> 00:37:20,610 palauttaa arvo get merkkijono. 839 00:37:20,610 --> 00:37:21,750 Tehdään sama juttu t. 840 00:37:21,750 --> 00:37:23,230 Joten mikään koodi on erilainen. 841 00:37:23,230 --> 00:37:25,420 Aion lisätä hieman lisää virheentarkistusta nyt. 842 00:37:25,420 --> 00:37:29,390 Joten nyt olemme tavallaan kuorinta takaisin Tämän kerrokset CS50, mitä merkkijono 843 00:37:29,390 --> 00:37:33,520 todella on, meidän on oltava enemmän anaali kyse siitä, että meillä ei ole väärin 844 00:37:33,520 --> 00:37:35,330 virheellinen arvo kuin nolla. 845 00:37:35,330 --> 00:37:36,440 >> Joten olen juuri menossa tarkistaa. 846 00:37:36,440 --> 00:37:41,490 Jos s ei ole sama kuin nolla ja t ei yhtä null, se tarkoittaa, että olemme OK. 847 00:37:41,490 --> 00:37:44,460 Hanki merkkijono ei tyriä saada jompikumpi näistä jouset. 848 00:37:44,460 --> 00:37:51,270 Ja voit ehkä arvata nyt, mitä ei STR CMP oletettavasti tehdä? 849 00:37:51,270 --> 00:37:52,000 String vertailla. 850 00:37:52,000 --> 00:37:55,470 >> Joten jos olet ohjelman java ennen, tämä on kuin yhtä menetelmää 851 00:37:55,470 --> 00:37:56,490 merkkijonon luokan. 852 00:37:56,490 --> 00:37:57,890 Mutta niille, jotka eivät ole ohjelmoitu ennen, 853 00:37:57,890 --> 00:37:59,320 tämä on vain c-toiminto. 854 00:37:59,320 --> 00:38:02,180 Se sattuu tulemaan sisään tiedosto nimeltä string.h. 855 00:38:02,180 --> 00:38:03,830 Se kun se on julistettu. 856 00:38:03,830 --> 00:38:05,110 >> Ja string vertaa - 857 00:38:05,110 --> 00:38:07,530 Olen itse unohtaa sen käyttö, mutta mitä siitä. 858 00:38:07,530 --> 00:38:10,470 Muista, että voimme tehdä mies, sekoita vertailla. 859 00:38:10,470 --> 00:38:12,590 Ja tämä tulee esiin Linux-ohjelmoijat käsin. 860 00:38:12,590 --> 00:38:14,060 Ja se on rehellisesti sanottuna hieman arvoituksellinen. 861 00:38:14,060 --> 00:38:15,270 Mutta näen tässä, että juu. 862 00:38:15,270 --> 00:38:17,570 Olen myös string.h. 863 00:38:17,570 --> 00:38:20,590 >> Ja tässä sanotaan alla kuvaus " string vertailussa vertaa 864 00:38:20,590 --> 00:38:24,560 kaksi merkkijonoa S1 ja S2. "Ja S1 ja S2 ovat ilmeisesti kaksi 865 00:38:24,560 --> 00:38:26,120 argumenttien sisään 866 00:38:26,120 --> 00:38:28,650 En oikeastaan ​​muista mitä const on, mutta nyt huomaa - 867 00:38:28,650 --> 00:38:31,480 ja olet ehkä nähnyt tämän jo, kun olet käyttää man-sivut, jos 868 00:38:31,480 --> 00:38:32,390 on se kaikki - 869 00:38:32,390 --> 00:38:36,220 että char tähti on vain synonyymi narulla. 870 00:38:36,220 --> 00:38:40,440 >> Joten se vertaa kaksi merkkijonoa, S1 ja S2, ja se palauttaa kokonaisluku vähemmän 871 00:38:40,440 --> 00:38:44,930 kuin tai yhtä suuri tai suurempi kuin nolla Jos S1 on todettu, vastaavasti, olla 872 00:38:44,930 --> 00:38:47,450 alle, tai vastaavat, tai olla suurempi kuin S2. 873 00:38:47,450 --> 00:38:51,220 Se on vain hyvin monimutkainen tapa sanoa merkkijonon vertailla palaa 874 00:38:51,220 --> 00:38:55,760 nolla, jos kaksi merkkijonoa ovat intuitiivisesti identtisiä, merkin 875 00:38:55,760 --> 00:38:57,120 merkin merkki. 876 00:38:57,120 --> 00:38:59,970 >> Se palauttaa negatiivinen luku, jos s, aakkosjärjestyksessä, on tarkoitus 877 00:38:59,970 --> 00:39:01,010 tulla ennen t. 878 00:39:01,010 --> 00:39:05,300 Tai palauttaa positiivinen luku, jos s on tarkoitus tulla jälkeen t 879 00:39:05,300 --> 00:39:06,170 aakkosjärjestyksessä. 880 00:39:06,170 --> 00:39:08,360 Joten tämä yksinkertainen tehtävä, voisi voit esimerkiksi lajitella 881 00:39:08,360 --> 00:39:09,770 koko joukko sanoja? 882 00:39:09,770 --> 00:39:13,984 >> Joten tässä uudessa versiossa, aion mennä eteenpäin ja tehdä compare1. 883 00:39:13,984 --> 00:39:15,750 Dot slash vertailla yhden. 884 00:39:15,750 --> 00:39:18,030 Tulen kirjoittamaan Hei kaikki pienillä kirjaimilla. 885 00:39:18,030 --> 00:39:20,300 Aion kirjoittaa hei kaikissa pieniä uudelleen. 886 00:39:20,300 --> 00:39:23,340 Ja onneksi nyt se tajuaa Olen kirjoittanut sama asia. 887 00:39:23,340 --> 00:39:27,520 >> Samaan aikaan, jos kirjoitan hei alemman tapauksessa ja HELLO isoilla ja 888 00:39:27,520 --> 00:39:29,710 vertailla niitä, olen kirjoittanut eri asioita. 889 00:39:29,710 --> 00:39:32,530 Koska ei vain ovat osoitteita erilaisia, mutta olemme vertaamalla 890 00:39:32,530 --> 00:39:35,350 eri merkkiä uudestaan ​​ja uudestaan. 891 00:39:35,350 --> 00:39:37,320 >> No mennään ja korjata yksi Toinen ongelma nyt. 892 00:39:37,320 --> 00:39:41,590 Saanen avata version yksi kopio, joka nyt käsitellään 893 00:39:41,590 --> 00:39:42,900 tämän ongelman seuraavasti. 894 00:39:42,900 --> 00:39:45,650 Ja tämä tulee näyttämään hieman monimutkaisempi. 895 00:39:45,650 --> 00:39:49,320 Mutta jos ajattelee mitä ongelma meillä täytyy ratkaista, toivottavasti tämä on 896 00:39:49,320 --> 00:39:51,870 tyhjentää vain hetki nyt. 897 00:39:51,870 --> 00:39:57,280 >> Joten tämä ensimmäinen rivi, merkki alku t, vuonna Maallikon termein voisi joku ehdottaa 898 00:39:57,280 --> 00:39:59,450 mitä tämä linja tarkoittaa tässä? 899 00:39:59,450 --> 00:40:01,050 Char tähden t, mitä se tekee? 900 00:40:01,050 --> 00:40:06,660 901 00:40:06,660 --> 00:40:07,210 >> Hyvä. 902 00:40:07,210 --> 00:40:09,500 Luo osoitin joitakin paikka muistiin. 903 00:40:09,500 --> 00:40:10,930 Ja haluan tarkentaa hieman. 904 00:40:10,930 --> 00:40:17,180 Julistaa muuttuja, joka tallentaa osoite joitakin char muistiin vain 905 00:40:17,180 --> 00:40:18,480 olla hieman enemmän oikea. 906 00:40:18,480 --> 00:40:21,210 >> OK, joten nyt oikealla puolella, olen koskaan nähnyt näitä toimintoja 907 00:40:21,210 --> 00:40:22,660 ennen, malloc. 908 00:40:22,660 --> 00:40:26,980 Mutta mitä se mahtaa tarkoittaa? 909 00:40:26,980 --> 00:40:28,050 Jakaminen muistia. 910 00:40:28,050 --> 00:40:29,410 Muistin jakamista. 911 00:40:29,410 --> 00:40:33,050 >> Joten se kääntyy pois, tähän asti olemme ole oikeastaan ​​ollut tehokas tapa 912 00:40:33,050 --> 00:40:36,210 kysyy käyttöjärjestelmä, antaa minulle muistia. 913 00:40:36,210 --> 00:40:39,980 Pikemminkin meillä on nyt toiminto nimeltään malloc, että juuri näin. 914 00:40:39,980 --> 00:40:42,960 Vaikka tämä on hieman häiriötekijä nyt huomaa, että 915 00:40:42,960 --> 00:40:46,200 kahden Suluissa on vain olemaan numero. 916 00:40:46,200 --> 00:40:48,510 Missä olen kirjoittanut kyseisen merkit voi olla useita. 917 00:40:48,510 --> 00:40:51,020 >> Ja että numero tarkoittaa, anna minulle 10 tavua. 918 00:40:51,020 --> 00:40:52,320 Anna minulle 20 tavua. 919 00:40:52,320 --> 00:40:53,820 Anna minulle 100 tavua. 920 00:40:53,820 --> 00:40:56,500 Ja malloc tekee parhaansa kysy käyttöjärjestelmä - 921 00:40:56,500 --> 00:40:57,630 Linux, tässä tapauksessa - 922 00:40:57,630 --> 00:40:59,630 hei, ovat niiden 100 tavua muistia käytettävissä? 923 00:40:59,630 --> 00:41:04,320 Jos näin on, palautettava bytes minulle Palauttamalla osoite, joka on 924 00:41:04,320 --> 00:41:06,610 ne tavua, kenties? 925 00:41:06,610 --> 00:41:07,610 Ensimmäinen. 926 00:41:07,610 --> 00:41:10,460 >> Niin täälläkin - ja tämä on vallitseva C, milloin olet 927 00:41:10,460 --> 00:41:11,680 käsittelevät osoitteet? 928 00:41:11,680 --> 00:41:15,830 Olet melkein aina tekemisissä Ensimmäinen osoite, ei väliä kuinka suuri 929 00:41:15,830 --> 00:41:19,490 kimpale muisti ollaan luovutettu takaisin, niin sanoakseni. 930 00:41:19,490 --> 00:41:20,880 >> Joten sukeltaa täällä. 931 00:41:20,880 --> 00:41:23,940 Yritän jakaa miten monta tavua, tarkalleen? 932 00:41:23,940 --> 00:41:24,080 No. 933 00:41:24,080 --> 00:41:26,090 String pituus s - Katsotaanpa tehdä konkreettinen esimerkki. 934 00:41:26,090 --> 00:41:30,700 Jos s on hello, H-E-L-L-O, mitä merkkijonon pituus s, ilmeisesti? 935 00:41:30,700 --> 00:41:32,010 Joten se on viisi. 936 00:41:32,010 --> 00:41:34,590 Mutta mulla plus 1, että miksi? 937 00:41:34,590 --> 00:41:37,700 Miksi haluan kuusi tavua viiden sijasta? 938 00:41:37,700 --> 00:41:38,790 Null merkki. 939 00:41:38,790 --> 00:41:41,210 >> En halua lähteä pois tästä erityistä null merkki. 940 00:41:41,210 --> 00:41:45,160 Koska jos teen kopion Hei ja tee H-E-L-L-O, mutta en laita 941 00:41:45,160 --> 00:41:50,160 että erityistä luonnetta, tietokone ei ehkä ole, sattumalta, kenoviiva 942 00:41:50,160 --> 00:41:51,730 nolla siellä minua. 943 00:41:51,730 --> 00:41:55,570 Joten jos yritän selvittää kopion pituus, voisin ajatella, että 944 00:41:55,570 --> 00:41:59,360 se on 20 merkkiä pitkä, tai miljoona merkkiä, jos en juuri koskaan tapahdu 945 00:41:59,360 --> 00:42:01,050 lyödä kenoviiva nolla. 946 00:42:01,050 --> 00:42:05,780 >> Joten meidän kuusi tavua tallentaa H-E-L-L-O, kenoviivan nolla. 947 00:42:05,780 --> 00:42:07,870 Ja sitten tämä on vain olla super anaali. 948 00:42:07,870 --> 00:42:10,700 Oletetaan, että unohdan mitä koko char on. 949 00:42:10,700 --> 00:42:12,020 Meidän pitää sanoa se on yksi tavu. 950 00:42:12,020 --> 00:42:12,860 Ja se yleensä on. 951 00:42:12,860 --> 00:42:15,425 Teoriassa se voisi olla jotain erilaisia, on eri Mac tai 952 00:42:15,425 --> 00:42:16,250 eri PC. 953 00:42:16,250 --> 00:42:19,650 >> Joten se kääntyy pois on tämä toimija nimeltään sizeof että jos ohitat sen 954 00:42:19,650 --> 00:42:22,680 nimi tietotyyppi - kuten char tai int tai float - 955 00:42:22,680 --> 00:42:26,930 se kertoo, dynaamisesti, kuinka monta tavua char vie tästä 956 00:42:26,930 --> 00:42:28,090 tiettyyn tietokoneeseen. 957 00:42:28,090 --> 00:42:31,360 >> Joten tämä on käytännössä vain kuten sanonta kertaa 1 tai 958 00:42:31,360 --> 00:42:32,440 kertaa mitään. 959 00:42:32,440 --> 00:42:36,340 Mutta teen sen vain olla super anaali, että vain siinä tapauksessa char eroaa 960 00:42:36,340 --> 00:42:40,610 tietokoneen vs. minun, näin matematiikka on aina menossa tarkistaa. 961 00:42:40,610 --> 00:42:43,720 >> Lopuksi, täällä minä tarkistaa null, mikä on aina hyvä käytäntö - jälleen 962 00:42:43,720 --> 00:42:44,920 tahansa olemme tekemisissä viitteitä. 963 00:42:44,920 --> 00:42:47,520 Jos malloc ei kyennyt antamaan minulle kuusi byes - joka on 964 00:42:47,520 --> 00:42:49,210 epätodennäköistä, mutta vain siinä tapauksessa - 965 00:42:49,210 --> 00:42:50,730 palauttaa yhden heti. 966 00:42:50,730 --> 00:42:53,290 Ja nyt, mennä eteenpäin ja kopioida merkkijono seuraavasti. 967 00:42:53,290 --> 00:42:57,240 Ja tämä on tuttua syntaksia, vaikkakin eri rooli. 968 00:42:57,240 --> 00:43:01,210 >> Aion mennä eteenpäin ja saada merkkijono pituus s ja säilytä n. 969 00:43:01,210 --> 00:43:06,620 Olen sitten menossa kerrata alkaen i vastaa nollaan enintään n, 970 00:43:06,620 --> 00:43:08,410 on suurempi tai yhtä suuri kuin. 971 00:43:08,410 --> 00:43:13,540 Niin että jokaisen iteraation, laitoin nteen luonnetta s i. 972 00:43:13,540 --> 00:43:15,380 luonnetta t. 973 00:43:15,380 --> 00:43:18,190 >> Joten mitä todella tapahtuu alla huppu täällä? 974 00:43:18,190 --> 00:43:22,140 No jos näin, esimerkiksi, on s - 975 00:43:22,140 --> 00:43:26,400 ja olen kirjoittanut sanan H-E-L-L-O ja siellä on kenoviiva nolla. 976 00:43:26,400 --> 00:43:29,020 Ja vielä, tämä on s osoittaa täällä. 977 00:43:29,020 --> 00:43:30,830 Ja tässä nyt on t. 978 00:43:30,830 --> 00:43:34,860 >> Ja tämä osoittaa nyt kopio muistia, eikö? 979 00:43:34,860 --> 00:43:37,340 Malloc on antanut minulle koko murikka muistia. 980 00:43:37,340 --> 00:43:41,440 En tiedä aluksi mitä missä tahansa näistä paikoista. 981 00:43:41,440 --> 00:43:44,340 Joten aion ajatella näitä kuten koko joukko kysymysmerkkejä. 982 00:43:44,340 --> 00:43:50,190 >> Mutta heti kun alkaa silmukoiden nollasta ylös pituuden läpi s, t 983 00:43:50,190 --> 00:43:52,790 kiinnike nolla ja t kiinnike 1 - 984 00:43:52,790 --> 00:43:55,080 ja laitan tähän nyt riippukuljettimella - 985 00:43:55,080 --> 00:44:04,190 t kiinnike nolla ja s kiinnike nollakeskiarvoinen että aion olla kopiointi 986 00:44:04,190 --> 00:44:09,875 iteratiivisesti h täällä, E-L-L-O. Plus, koska tein plus 987 00:44:09,875 --> 00:44:12,370 1, kenoviivan nolla. 988 00:44:12,370 --> 00:44:19,060 >> Joten nyt jos vertaa-1.c, lopulta, jos olen tulostaa 989 00:44:19,060 --> 00:44:24,760 arvo t, meidän pitäisi nähdä, että s on ennallaan. 990 00:44:24,760 --> 00:44:26,090 Anna minun mennä eteenpäin nyt ja tehdä tämän. 991 00:44:26,090 --> 00:44:28,630 Joten tee COPY1. 992 00:44:28,630 --> 00:44:30,860 Dot slash COPY1. 993 00:44:30,860 --> 00:44:33,670 Aion kirjoittaa Hei, Anna. 994 00:44:33,670 --> 00:44:37,430 Ja nyt huomaa, vain kopio on aktivoitu. 995 00:44:37,430 --> 00:44:40,890 Koska olen todella on kaksi paloina muistia. 996 00:44:40,890 --> 00:44:44,390 >> Valitettavasti et voi tehdä joitakin melko huono ja melko vaarallisia asioita täällä. 997 00:44:44,390 --> 00:44:49,290 Saanen vetää esimerkki tästä nyt , joka antaa meille esimerkin muutaman 998 00:44:49,290 --> 00:44:51,540 eri linjaa. 999 00:44:51,540 --> 00:44:56,040 Joten intuitiivisesti täällä, ensimmäinen rivi koodia, int tähti x, on julistaa 1000 00:44:56,040 --> 00:44:57,340 muuttuja nimeltä x. 1001 00:44:57,340 --> 00:44:58,810 Ja mikä tietotyyppi Tämän muuttujan? 1002 00:44:58,810 --> 00:45:01,820 1003 00:45:01,820 --> 00:45:04,290 Mikä tietotyyppi muuttujan? 1004 00:45:04,290 --> 00:45:06,980 Se ei ollut jännitysnäytelmä. 1005 00:45:06,980 --> 00:45:08,350 >> Tietotyyppi on int tähden. 1006 00:45:08,350 --> 00:45:12,600 Joten mitä se tarkoittaa? X säilytä osoite int. 1007 00:45:12,600 --> 00:45:13,520 Yksinkertaista. 1008 00:45:13,520 --> 00:45:16,220 Y on menossa tallentaa osoite int. 1009 00:45:16,220 --> 00:45:18,390 Mikä on kolmas rivi koodia tekee siellä? 1010 00:45:18,390 --> 00:45:21,850 Se jaettaessa, kuinka monta tavua, todennäköisesti? 1011 00:45:21,850 --> 00:45:22,350 Neljä. 1012 00:45:22,350 --> 00:45:25,460 Koska koko int on yleensä neljä, malloc neljä antaa 1013 00:45:25,460 --> 00:45:29,950 Me Back osoite kimpale muistin, joka on ensimmäinen, jonka tavua on 1014 00:45:29,950 --> 00:45:32,110 tallennetaan nyt x. 1015 00:45:32,110 --> 00:45:34,410 >> Nyt olemme siirtymässä hieman nopeasti. 1016 00:45:34,410 --> 00:45:35,760 Star x tarkoittaa mitä? 1017 00:45:35,760 --> 00:45:38,480 1018 00:45:38,480 --> 00:45:42,590 Se tarkoittaa, mene tähän osoitteeseen ja laittaa kuinka monta siellä? 1019 00:45:42,590 --> 00:45:43,870 Laita numero 42 siellä. 1020 00:45:43,870 --> 00:45:47,590 Star y tarkoittaa mennä mitä on y ja laittaa numero 13 siellä. 1021 00:45:47,590 --> 00:45:48,600 >> Mutta hetkinen. 1022 00:45:48,600 --> 00:45:51,640 Mikä on y tällä hetkellä? 1023 00:45:51,640 --> 00:45:54,950 Mikä osoite on y tallentamiseen? 1024 00:45:54,950 --> 00:45:55,770 Emme tiedä, eikö? 1025 00:45:55,770 --> 00:45:59,230 Emme ole koskaan kerran käyttää tehtävän operaattori, joihin y. 1026 00:45:59,230 --> 00:46:03,370 Joten y ilmoitetuista toisella rivillä koodi on vain joitakin roskat arvo, iso 1027 00:46:03,370 --> 00:46:04,760 kysymysmerkki niin sanotusti. 1028 00:46:04,760 --> 00:46:07,230 Sitä voitaisiin osoittaa satunnaisesti mitään muistiin, joka 1029 00:46:07,230 --> 00:46:08,340 on yleensä huono. 1030 00:46:08,340 --> 00:46:13,540 >> Joten kun osuimme että linja siellä, tähden y vastaa 13, jotain pahaa, 1031 00:46:13,540 --> 00:46:17,220 jotain hyvin pahaa on noin tapahtua Binky. 1032 00:46:17,220 --> 00:46:25,810 Katsotaan mitä tulee päätyä tapahtuu Binky täällä hetken 1033 00:46:25,810 --> 00:46:26,200 tai niin näyttävät. 1034 00:46:26,200 --> 00:46:26,490 >> [VIDEOTOISTOSTA] 1035 00:46:26,490 --> 00:46:26,745 >> -Hei, Binky. 1036 00:46:26,745 --> 00:46:27,000 Herää. 1037 00:46:27,000 --> 00:46:29,296 On aika osoitin hauskaa. 1038 00:46:29,296 --> 00:46:30,680 >> -Mikä tuo on? 1039 00:46:30,680 --> 00:46:31,980 Lisätietoja viitteitä? 1040 00:46:31,980 --> 00:46:34,010 Voi goodie. 1041 00:46:34,010 --> 00:46:37,220 >> -No, päästä alkuun, taidamme menossa on pari viitteitä. 1042 00:46:37,220 --> 00:46:37,930 >> -OK. 1043 00:46:37,930 --> 00:46:41,650 Tämä koodi myönnetään kaksi viitteitä joka voi viitata kokonaislukuja. 1044 00:46:41,650 --> 00:46:43,760 >> -OK, hyvin, näen kaksi osoitinta. 1045 00:46:43,760 --> 00:46:45,850 Mutta ne eivät näytä olevan osoittaa mitään. 1046 00:46:45,850 --> 00:46:46,490 >> -Aivan oikein. 1047 00:46:46,490 --> 00:46:48,630 Aluksi osoittimet eivät viitannut mihinkään. 1048 00:46:48,630 --> 00:46:51,700 Asioita he viittaavat kutsutaan pointees, ja asettamalla niille on 1049 00:46:51,700 --> 00:46:52,850 erillisessä vaiheessa. 1050 00:46:52,850 --> 00:46:53,740 >> -Ai niin, aivan. 1051 00:46:53,740 --> 00:46:54,500 Tiesin, että. 1052 00:46:54,500 --> 00:46:56,270 Pointees ovat erillisiä. 1053 00:46:56,270 --> 00:46:58,553 Joten miten jakaa pointee? 1054 00:46:58,553 --> 00:46:59,480 >> -OK. 1055 00:46:59,480 --> 00:47:03,707 No, tämä koodi myöntää uuden kokonaislukuja pointee, ja tämä osa asettaa x 1056 00:47:03,707 --> 00:47:05,520 osoittamaan sitä. 1057 00:47:05,520 --> 00:47:06,760 >> -Hei, että näyttää paremmalta. 1058 00:47:06,760 --> 00:47:08,520 Joten tee se tehdä jotain. 1059 00:47:08,520 --> 00:47:09,530 >> -OK. 1060 00:47:09,530 --> 00:47:14,110 Minä dereference osoitin x tallentaa numero 42 osaksi pointee. 1061 00:47:14,110 --> 00:47:17,660 Tämän temppu, minä tarvitsen taikaa sauva dereferencing. 1062 00:47:17,660 --> 00:47:20,695 >> -Sinun taikasauvaa ja dereferencing? 1063 00:47:20,695 --> 00:47:22,632 Uh, se on hienoa. 1064 00:47:22,632 --> 00:47:24,620 >> -Tämä on mitä koodi näyttää. 1065 00:47:24,620 --> 00:47:27,526 Tulen juuri perustanut numero, ja - 1066 00:47:27,526 --> 00:47:28,250 >> -Hei, katso. 1067 00:47:28,250 --> 00:47:29,680 Sieltä se menee. 1068 00:47:29,680 --> 00:47:34,520 Näin dereference on x seuraa nuolta käyttää sen pointee. 1069 00:47:34,520 --> 00:47:36,690 Tässä tapauksessa tallentaa 42 siellä. 1070 00:47:36,690 --> 00:47:40,890 Hei, kokeile sitä tallentaa numeron 13 kautta muiden osoitin, y. 1071 00:47:40,890 --> 00:47:42,125 >> -OK. 1072 00:47:42,125 --> 00:47:46,810 Menen tänne y ja saada numero 13 perustettu. 1073 00:47:46,810 --> 00:47:50,890 Ja sitten ottaa taikasauva dereferencing ja vain - 1074 00:47:50,890 --> 00:47:52,430 Vau! 1075 00:47:52,430 --> 00:47:53,030 >> -Ai, hei. 1076 00:47:53,030 --> 00:47:54,610 Se ei toiminut. 1077 00:47:54,610 --> 00:47:58,200 Sano, Binky, en usko dereferencing y on hyvä idea, 1078 00:47:58,200 --> 00:48:01,370 koska perustamalla pointee on erillinen askel. 1079 00:48:01,370 --> 00:48:03,460 Ja en usko meidän koskaan tehnyt sitä. 1080 00:48:03,460 --> 00:48:03,810 >> -Hmm. 1081 00:48:03,810 --> 00:48:05,160 Hyvä pointti. 1082 00:48:05,160 --> 00:48:07,410 >> -Joo, me jaetaan osoittimen y. 1083 00:48:07,410 --> 00:48:10,045 Mutta emme koskaan aseta se viittaavat pointee. 1084 00:48:10,045 --> 00:48:10,490 >> -Hmm. 1085 00:48:10,490 --> 00:48:12,170 Erittäin tarkkaavainen. 1086 00:48:12,170 --> 00:48:13,790 >> -Hei, etsit hyvä siellä, Binky. 1087 00:48:13,790 --> 00:48:16,920 Voitteko korjata sen niin, että y pistettä samaan pointee kuin x? 1088 00:48:16,920 --> 00:48:17,810 >> -Toki. 1089 00:48:17,810 --> 00:48:20,300 Minä käytän taikasauvaa ja osoitin tehtävän. 1090 00:48:20,300 --> 00:48:22,240 >> -Onko se tulee olemaan ongelma kuin ennen? 1091 00:48:22,240 --> 00:48:22,665 >> -Ei. 1092 00:48:22,665 --> 00:48:24,300 Tämä ei koske pointees. 1093 00:48:24,300 --> 00:48:27,880 Se vain muuttaa yhtä osoittimen kohtaan on sama asia kuin toinen. 1094 00:48:27,880 --> 00:48:28,970 >> -Ahaa. 1095 00:48:28,970 --> 00:48:31,730 Nyt y pistettä samaan paikkaan kuin x. 1096 00:48:31,730 --> 00:48:32,450 Joten odota. 1097 00:48:32,450 --> 00:48:33,490 Nyt y on kiinteä. 1098 00:48:33,490 --> 00:48:34,630 Se on pointee. 1099 00:48:34,630 --> 00:48:36,520 Joten voit kokeilla sauva of dereferencing jälleen 1100 00:48:36,520 --> 00:48:39,200 lähettää 13 yli. 1101 00:48:39,200 --> 00:48:39,840 >> -OK. 1102 00:48:39,840 --> 00:48:41,570 Tässä menee. 1103 00:48:41,570 --> 00:48:42,870 >> -Hei, katsokaa tuota. 1104 00:48:42,870 --> 00:48:44,320 Nyt dereferencing toimii y. 1105 00:48:44,320 --> 00:48:47,020 Ja koska viitteitä jakavat että yksi pointee, ne 1106 00:48:47,020 --> 00:48:48,585 sekä nähdä 13. 1107 00:48:48,585 --> 00:48:49,040 >> -Joo. 1108 00:48:49,040 --> 00:48:49,670 Jakaminen. 1109 00:48:49,670 --> 00:48:50,380 Whatever. 1110 00:48:50,380 --> 00:48:52,290 Joten olemme menossa kytkin paikkoja nyt? 1111 00:48:52,290 --> 00:48:52,970 >> -Oi, katso. 1112 00:48:52,970 --> 00:48:54,150 Olemme myöhässä. 1113 00:48:54,150 --> 00:48:55,200 >> -Mutta - 1114 00:48:55,200 --> 00:48:57,060 >> -Muista kolme osoitin sääntöjä. 1115 00:48:57,060 --> 00:49:00,100 Numero yksi, perusrakenne on, että sinulla on osoitin. 1116 00:49:00,100 --> 00:49:02,170 Ja se osoittaa yli pointee. 1117 00:49:02,170 --> 00:49:04,160 Mutta osoitin ja pointee ovat erillisiä. 1118 00:49:04,160 --> 00:49:06,460 Ja yleinen virhe on perustaa osoitin, mutta 1119 00:49:06,460 --> 00:49:08,540 unohda antanut pointee. 1120 00:49:08,540 --> 00:49:12,460 >> Numero kaksi, osoitin dereferencing alkaa osoittimen ja seuraa sen 1121 00:49:12,460 --> 00:49:14,570 arrow ympäri päästäksesi käsiksi sen pointee. 1122 00:49:14,570 --> 00:49:18,640 Kuten me kaikki tiedämme, tämä toimii vain, jos on pointee, jonka saa takaisin 1123 00:49:18,640 --> 00:49:19,790 Sääntö numero yksi. 1124 00:49:19,790 --> 00:49:23,670 >> Numero kolme, osoitin toimeksianto kestää yksi osoitin ja muutoksia sen osoittamaan 1125 00:49:23,670 --> 00:49:25,850 sama pointee kuin toinen osoitin. 1126 00:49:25,850 --> 00:49:27,840 Niin sen jälkeen tehtävän, kaksi osoittimet 1127 00:49:27,840 --> 00:49:29,430 osoittaa samaan pointee. 1128 00:49:29,430 --> 00:49:31,600 Joskus sitä kutsutaan jakaminen. 1129 00:49:31,600 --> 00:49:33,430 Ja se kaikki on sitä, todella. 1130 00:49:33,430 --> 00:49:33,840 Bye bye nyt. 1131 00:49:33,840 --> 00:49:34,300 >> [END VIDEOTOISTOSTA] 1132 00:49:34,300 --> 00:49:36,940 >> DAVID MALAN: Joten enemmän viitteitä, enemmän Binky ensi viikolla. 1133 00:49:36,940 --> 00:49:38,190 Nähdään maanantaina. 1134 00:49:38,190 --> 00:49:42,187