1 00:00:00,000 --> 00:00:01,110 >> [Muusika mängimine] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 DAVID J. Humala: Olgu. 4 00:00:11,650 --> 00:00:15,610 See on CS50 ja see on lõpuks neljas nädal. 5 00:00:15,610 --> 00:00:19,420 Ja üks teemadest täna on see, et digitaalse kohtuekspertiisi, 6 00:00:19,420 --> 00:00:20,989 kunst taastumas teavet. 7 00:00:20,989 --> 00:00:22,780 Ja tõepoolest, kuigi sa oled keset 8 00:00:22,780 --> 00:00:25,070 praegu rahu Three ja Breakout, järgmisel nädalal 9 00:00:25,070 --> 00:00:27,880 Keskendutakse Just selles valdkonnas. 10 00:00:27,880 --> 00:00:30,686 >> Nii et üks lahedam töökohad ma kunagi olid vanasti oli lõpetanud kooli, 11 00:00:30,686 --> 00:00:33,560 kui ma töötasin kohaliku Middlesex County District Attorney 12 00:00:33,560 --> 00:00:34,950 kontor, teeme ekspertiisi tegema. 13 00:00:34,950 --> 00:00:37,450 Nii et sisuliselt, Massachusetts Riigipolitsei, kohati 14 00:00:37,450 --> 00:00:40,100 kui tööd juhtudel oleks tuua asju nagu kõvakettad 15 00:00:40,100 --> 00:00:42,185 ja disketid ja mälukaardid jms. 16 00:00:42,185 --> 00:00:44,060 Ja nad annavad need Mulle ja mu mentor, 17 00:00:44,060 --> 00:00:48,070 ja meie eesmärk oli leida tõendeid, kui seal oli, on need meedias. 18 00:00:48,070 --> 00:00:50,700 Nüüd võite näinud vilksamisi Selle maailma kohtuekspertiisi 19 00:00:50,700 --> 00:00:53,000 meedias, telesaateid ja filme. 20 00:00:53,000 --> 00:00:55,730 Aga töö oli mul, ja daresay et maailm, 21 00:00:55,730 --> 00:00:57,550 ei ole päris nagu sa näeksid seda. 22 00:00:57,550 --> 00:01:00,794 Võtame pilk olete ilmselt näinud. 23 00:01:00,794 --> 00:01:01,460 [VIDEO PLAYBACK] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 Nüüd lähme hea pilk teile. 26 00:01:05,380 --> 00:01:06,850 >> [Muusika mängimine] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> Hoia seda. 29 00:01:12,932 --> 00:01:13,657 Vii see tagasi. 30 00:01:13,657 --> 00:01:14,733 >> Oota üks hetk. 31 00:01:14,733 --> 00:01:15,233 Mine õige. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 Seal. 34 00:01:16,870 --> 00:01:17,369 Freeze et. 35 00:01:17,369 --> 00:01:17,930 -Full-Ekraan. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 Freeze et. 38 00:01:18,875 --> 00:01:20,160 -Tighten Üles, et sa? 39 00:01:20,160 --> 00:01:22,126 >> -Vector Sisse, et mees poolt tagarattal. 40 00:01:22,126 --> 00:01:24,435 >> -ZOOM Aastal siinsamas kohapeal. 41 00:01:24,435 --> 00:01:28,580 >> Hindajaks õige varustus, pilti saab suurendada ja teritatud. 42 00:01:28,580 --> 00:01:29,330 >> Mis see on? 43 00:01:29,330 --> 00:01:30,780 >> -See Suurendamise programmi. 44 00:01:30,780 --> 00:01:32,170 >> Kas sa selge, et kuni kõik? 45 00:01:32,170 --> 00:01:33,070 >> Ma ei tea. 46 00:01:33,070 --> 00:01:34,150 Olgem suurendada seda. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance Jagu A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 Ma täiustatud detail ja-- 50 00:01:38,562 --> 00:01:40,020 Ma arvan, et seal on piisavalt suurendada. 51 00:01:40,020 --> 00:01:40,976 Vabastage see, et mu ekraanil. 52 00:01:40,976 --> 00:01:42,559 >> Ma täiustatud peegeldus oma silmaga. 53 00:01:42,559 --> 00:01:44,322 -Ärme Käivitada läbi video lisaseadmega. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, Saate suurendada seda? 55 00:01:45,210 --> 00:01:45,710 >> Oodake veidi. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -Mind Tööd selle peegeldus. 58 00:01:49,458 --> 00:01:50,402 >> Seal on kellegi peegeldus. 59 00:01:50,402 --> 00:01:50,902 >> Peegelduvusega. 60 00:01:50,902 --> 00:01:52,870 Seal on peegeldus mehe nägu. 61 00:01:52,870 --> 00:01:53,694 >> -The Peegeldus! 62 00:01:53,694 --> 00:01:54,610 Seal on peegeldus. 63 00:01:54,610 --> 00:01:55,880 -ZOOM Sisse peegel. 64 00:01:55,880 --> 00:01:57,860 Näete peegeldus. 65 00:01:57,860 --> 00:01:59,630 >> Kas sa saad parema pildi siit? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 Kas sa saad parandada seda? 68 00:02:01,210 --> 00:02:02,190 Kas sa saad parandada seda? 69 00:02:02,190 --> 00:02:03,066 Kas me võime sisse parandada seda? 70 00:02:03,066 --> 00:02:03,898 Kas sa saad parandada seda? 71 00:02:03,898 --> 00:02:04,740 Oota üks hetk. 72 00:02:04,740 --> 00:02:05,281 Ma suurendada. 73 00:02:05,281 --> 00:02:06,470 -ZOOM Sisse uksele. 74 00:02:06,470 --> 00:02:06,970 -Times 10. 75 00:02:06,970 --> 00:02:08,009 -ZOOM. 76 00:02:08,009 --> 00:02:08,509 -Liikuge. 77 00:02:08,509 --> 00:02:09,340 -Rohkem. 78 00:02:09,340 --> 00:02:10,094 Oota, peatus. 79 00:02:10,094 --> 00:02:10,750 Lõpeta. 80 00:02:10,750 --> 00:02:11,250 -Pause Ta. 81 00:02:11,250 --> 00:02:13,542 -Keerake Meil ​​75 kraadi ümber vertikaaltelje, palun. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> Lõpeta. 84 00:02:16,127 --> 00:02:19,330 Mine tagasi osa umbes uks uuesti. 85 00:02:19,330 --> 00:02:21,420 >> -Saite Pildi tugevdaja, mis võib bitmap? 86 00:02:21,420 --> 00:02:24,420 >> Võibolla saame kasutada Pradeep Singh meetod näha arvesse aknad. 87 00:02:24,420 --> 00:02:25,902 >> -The Tarkvara on nüüdisaegse. 88 00:02:25,902 --> 00:02:26,866 >> -The Eigenvalue on välja lülitatud. 89 00:02:26,866 --> 00:02:29,758 >> Hindajaks õigus kombinatsioon algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> Ta on võtnud valgustus algoritme järgmisele tasemele, 91 00:02:32,168 --> 00:02:34,110 ja ma ei saa neid kasutada suurendab see foto. 92 00:02:34,110 --> 00:02:36,840 >> Lukustage kohta ja suuremalt z-telg. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 Tõsta. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 Seis ja parandada. 97 00:02:40,070 --> 00:02:43,420 [END VIDEO PLAYBACK] 98 00:02:43,420 --> 00:02:45,830 DAVID J. Humala: Nii et need on kõik sõnad, kuid need ei olnud 99 00:02:45,830 --> 00:02:47,870 lausetes õigesti. 100 00:02:47,870 --> 00:02:52,370 Ja tõepoolest tulevikus igal ajal, Palun, kas sa kuuled kedagi ütlemas sõna 101 00:02:52,370 --> 00:02:54,250 "Parandada", itsitama natuke. 102 00:02:54,250 --> 00:02:57,190 Sest kui sa püüad parandada, Näiteks see, mis juhtub. 103 00:02:57,190 --> 00:02:58,580 >> Nii et siin on ilus pilt. 104 00:02:58,580 --> 00:02:59,720 See on CS50 enda Daven. 105 00:02:59,720 --> 00:03:03,740 Ja arvan, et me tahtsime keskenduda twinkle oma silmaga, 106 00:03:03,740 --> 00:03:05,870 või peegeldus paha poiss, et oli selgelt 107 00:03:05,870 --> 00:03:07,820 pildistatud turvakaamera. 108 00:03:07,820 --> 00:03:10,330 See juhtub siis, kui sa suumida pilti 109 00:03:10,330 --> 00:03:14,060 on ainult piiratud arv bittide sellega seotud. 110 00:03:14,060 --> 00:03:15,420 >> See on see, mida sa saad. 111 00:03:15,420 --> 00:03:19,190 Ja tõepoolest, ka Daven silma on vaid neli, võibolla kuus pikslit 112 00:03:19,190 --> 00:03:22,110 et kirjutada täpselt, mida oli kume seal. 113 00:03:22,110 --> 00:03:25,890 Nii Ülesanded Neli lõpuks on te avastada seda maailma, eriti 114 00:03:25,890 --> 00:03:28,090 olemuselt midagi me nimetame faili I / O, kus 115 00:03:28,090 --> 00:03:31,000 I / O on lihtsalt fancy viis öeldes, sisend ja väljund. 116 00:03:31,000 --> 00:03:34,280 >> Nii et seni on kõik interaktsioonid oleme olnud koos arvutiga 117 00:03:34,280 --> 00:03:36,770 on suures osas oma klaviatuuri ja ekraani, 118 00:03:36,770 --> 00:03:40,770 kuid mitte nii palju koos kõvaketta, või säästa faile üle need, mida 119 00:03:40,770 --> 00:03:41,620 ise kirjutada. 120 00:03:41,620 --> 00:03:44,570 Teie programmid seni on ei ole luues ja salvestades, 121 00:03:44,570 --> 00:03:46,270 ja ajakohastada oma faile. 122 00:03:46,270 --> 00:03:47,150 >> Noh, mis on fail? 123 00:03:47,150 --> 00:03:48,105 Noh, midagi nagu JPEG. 124 00:03:48,105 --> 00:03:50,520 See on pilt, mida võiks on või üles laadida Facebook, 125 00:03:50,520 --> 00:03:51,690 või näha kõikjal veebis. 126 00:03:51,690 --> 00:03:54,460 Tõepoolest, et foto me lihtsalt Saag on Daven oli JPEG. 127 00:03:54,460 --> 00:03:57,570 Ja mis on huvitav umbes faile nagu JPEG 128 00:03:57,570 --> 00:04:02,170 on, et neid saab identifitseerida Tavaliselt teatud mustrid bitti. 129 00:04:02,170 --> 00:04:05,200 >> Teisisõnu, mis on see, et eristab JPEG alates GIF 130 00:04:05,200 --> 00:04:08,109 alates ping Word dokument Exceli fail? 131 00:04:08,109 --> 00:04:09,900 Noh, see on lihtsalt erinevad mustrid bitti. 132 00:04:09,900 --> 00:04:12,820 Ja need erinevad mustrid tavaliselt alguses neid faile. 133 00:04:12,820 --> 00:04:18,200 >> Nii et kui arvuti avab Word doc, või kui arvuti avaneb JPEG, 134 00:04:18,200 --> 00:04:20,940 tundub tüüpiliselt Esimene mitu bitti fail. 135 00:04:20,940 --> 00:04:24,059 Ja kui ta tunnistab, muster, ta ütleb, oh, see on pilt. 136 00:04:24,059 --> 00:04:25,850 Lubage mul näidata seda kasutaja on graafiline. 137 00:04:25,850 --> 00:04:27,870 Või, oh, see näeb välja nagu Word doc. 138 00:04:27,870 --> 00:04:30,480 Las ma näitan seda, et kasutaja on essee. 139 00:04:30,480 --> 00:04:33,020 >> Nii näiteks JPEG, Selgub, et on 140 00:04:33,020 --> 00:04:35,460 üsna keerukas all kapuuts. 141 00:04:35,460 --> 00:04:40,140 Kuid esimesed kolm baiti enamikus iga JPEG algavad need kolm numbrit. 142 00:04:40,140 --> 00:04:44,680 Nii bait null, üks, kaks on, välja Peaaegu iga JPEG, 255, seejärel number 143 00:04:44,680 --> 00:04:46,675 216, siis nr 255. 144 00:04:46,675 --> 00:04:48,990 >> Ja mida sa pead olema võimeline algust teha järgmisel nädalal 145 00:04:48,990 --> 00:04:52,920 tegelikult poking all kapuuts faile nagu JPEG 146 00:04:52,920 --> 00:04:57,210 ja nagu bitmap faili, ja nähes mis on alati olemas olnud nii kaua 147 00:04:57,210 --> 00:04:58,650 kui olete olnud arvuti abil. 148 00:04:58,650 --> 00:05:01,860 >> Aga mis seal on, ei ole tavaliselt kirjutatud nagu koma numbrid niimoodi. 149 00:05:01,860 --> 00:05:04,620 Arvuti Teadlased ei kipuvad rääkima koma. 150 00:05:04,620 --> 00:05:06,139 Nad tõesti ei räägi kahendsüsteemis. 151 00:05:06,139 --> 00:05:07,930 Tavaliselt, kui me tahame väljendada numbrid 152 00:05:07,930 --> 00:05:10,710 me tegelikult kasutada kuueteistkümnendsüsteemi, mida te võib-olla mäletate 153 00:05:10,710 --> 00:05:13,027 , ütleme, Ülesanded Üks, mis vaidlustas 154 00:05:13,027 --> 00:05:14,610 sa mõelda muud süsteemi. 155 00:05:14,610 --> 00:05:17,170 >> Me muidugi tunnevad koos kohaga, nullist üheksani. 156 00:05:17,170 --> 00:05:18,215 Rääkisime binaarne. 157 00:05:18,215 --> 00:05:20,710 Ja me tõesti ei ole kasutada, et palju siin 158 00:05:20,710 --> 00:05:22,470 aasta läbi, sest arvuteid kasutame seda. 159 00:05:22,470 --> 00:05:24,900 Aga programmeerijad väga tihti, kuid mitte alati, 160 00:05:24,900 --> 00:05:29,360 kasutada kuueteistkümnendsüsteemi, mis tähendab lihtsalt teil on 16 tähte oma tähestik, 161 00:05:29,360 --> 00:05:31,330 erinevalt kahest või 10. 162 00:05:31,330 --> 00:05:34,530 >> Niisiis, kuidas sa loota, et kõrgemat kui üheksa kuueteistkümnendsüsteemis? 163 00:05:34,530 --> 00:05:41,120 Sa mine 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, vaid kokkuleppeliselt. 164 00:05:41,120 --> 00:05:43,540 Aga mis peamine on see, et iga neist on üks sümbol. 165 00:05:43,540 --> 00:05:44,340 Puuduvad 10. 166 00:05:44,340 --> 00:05:48,400 Puuduvad 11, per se, sest iga oma numbrit, just nagu kohaga 167 00:05:48,400 --> 00:05:51,940 ja just nagu binaarsed, tuleb lihtsalt olema üks sümbol, kokkuleppeliselt. 168 00:05:51,940 --> 00:05:55,280 >> Nii et siis on tähestiku meil meie käsutuses kuueteistkümnendsüsteemis. 169 00:05:55,280 --> 00:05:58,600 Mis siis JPEG nägema, kui sa kirjutaks välja need esimesed kolm 170 00:05:58,600 --> 00:06:01,980 baidid ei kohaga, kuid Näiteks kuueteistkümnendsüsteemi? 171 00:06:01,980 --> 00:06:03,640 Ja miks on hex isegi kõik, mis kasulik? 172 00:06:03,640 --> 00:06:05,290 >> Noh, kiire pilk näiteks. 173 00:06:05,290 --> 00:06:09,030 Nii et kui ma kirjutan välja bitti, mis esindavad need kohaga numbers-- 174 00:06:09,030 --> 00:06:12,450 see võib olla natuke roostes Nüüd alates paar nädalat tagasi 175 00:06:12,450 --> 00:06:14,820 kuid vasakpoolne ja õige on üsna lihtne. 176 00:06:14,820 --> 00:06:17,990 255 oli suurim number me võiks olla kaheksa bitti. 177 00:06:17,990 --> 00:06:18,820 See kõik oli ones. 178 00:06:18,820 --> 00:06:21,320 Nii et ainus, mis on kergelt Huvitav on keskel üks. 179 00:06:21,320 --> 00:06:24,700 Ja kui sa sellist tegema läbi matemaatikat, siis järeldada, et tõepoolest, 180 00:06:24,700 --> 00:06:27,949 et struktuuris ühe ja nulle esindab 216. 181 00:06:27,949 --> 00:06:30,240 Nii et olgem lihtsalt soetama nüüd, et need on õiged. 182 00:06:30,240 --> 00:06:31,730 Aga miks on see huvitav? 183 00:06:31,730 --> 00:06:33,970 >> Noh, bait, muidugi, on kaheksa bitti. 184 00:06:33,970 --> 00:06:38,980 Ja selgub, et kui te arvate, on bait kahe tükkideks neli bitti, 185 00:06:38,980 --> 00:06:39,500 niimoodi. 186 00:06:39,500 --> 00:06:41,000 Lubage mul lisada mõned ruumi. 187 00:06:41,000 --> 00:06:42,550 Nii et enne, pärast. 188 00:06:42,550 --> 00:06:46,520 Ma olen lihtsalt lisada tühikut visualiseerimiseks hoidku siit. 189 00:06:46,520 --> 00:06:51,840 Kuidas võiks me nüüd esindame, ütleme, kuueteistkümnendsüsteemis iga quad bittide, 190 00:06:51,840 --> 00:06:52,880 Iga komplekt nelja bitti? 191 00:06:52,880 --> 00:06:56,420 >> Nii näiteks on vasakul Nüüd on meil 1111 kahendsüsteemis. 192 00:06:56,420 --> 00:07:00,420 Mis on see, et number koma, kui sa läbi matemaatika? 193 00:07:00,420 --> 00:07:03,780 Teil on need olemas, kahed koht, püksid koht ja kaheksad koht. 194 00:07:03,780 --> 00:07:04,341 >> Sihtrühm: 15. 195 00:07:04,341 --> 00:07:05,340 DAVID J. Humala: On 15. 196 00:07:05,340 --> 00:07:08,340 Nii et kui me teeme kaheksa pluss neli pluss kaks pluss üks, saame 15. 197 00:07:08,340 --> 00:07:11,790 Nii et ma võiks kirjutada 15 alla 1111, kuid mõte siin 198 00:07:11,790 --> 00:07:13,190 on kuueteistkümnendsüsteemis, mitte koma. 199 00:07:13,190 --> 00:07:17,310 Nii et selle asemel, et kirjutada alla 15, 1-5, Ma kirjutan, et hex, 200 00:07:17,310 --> 00:07:22,311 mis, kui te arvate tagasi, kui teil on nullist f, mis on 15 läheb? 201 00:07:22,311 --> 00:07:22,810 Sihtrühm: f. 202 00:07:22,810 --> 00:07:24,434 DAVID J. Humala: Nii selgub see on f. 203 00:07:24,434 --> 00:07:29,140 Ja saab tööd, et välja öelda, Noh, kui on 10, siis OK, f 15. 204 00:07:29,140 --> 00:07:33,250 Nii et tõesti, me võime kirjutada Selle samad numbrid nagu f f. 205 00:07:33,250 --> 00:07:35,750 Ja siis, kui me teeme natuke matemaatikat, me järeldada, et see on d. 206 00:07:35,750 --> 00:07:38,650 Kaheksa on üsna lihtne, sest me on üks kaheksandikud kohas. 207 00:07:38,650 --> 00:07:40,620 Ja siis on meil veel paar f f on. 208 00:07:40,620 --> 00:07:44,669 >> Niisiis, mida inimesed kipuvad tegema kokkuleppeliselt kui nad kasutavad kuueteistkümnendsüsteemis on nad lihtsalt 209 00:07:44,669 --> 00:07:47,710 kirjutan seda veidi lühidalt vabaneda enamik, et valge ruum. 210 00:07:47,710 --> 00:07:50,890 Ja lihtsalt olla super selge lugejatele, et see on kuueteistkümnendsüsteemis, 211 00:07:50,890 --> 00:07:54,670 lihtne konventsiooni vahel Inimestel on teil kirjutada null 212 00:07:54,670 --> 00:07:58,000 x, mis ei ole mõtet teiste kui visuaalne tunnus, 213 00:07:58,000 --> 00:07:59,590 siin on arvuna. 214 00:07:59,590 --> 00:08:04,210 >> Ja siis paned kaks numbrit, f f antud juhul siis d, siis f f. 215 00:08:04,210 --> 00:08:06,700 Nii pikk lugu lühike, kuueteistkümnendsüsteemi lihtsalt kipub 216 00:08:06,700 --> 00:08:11,990 olema kasulik, sest iga selle numbrit, nullist f, täiesti read 217 00:08:11,990 --> 00:08:13,880 üles struktuuris neli bitti. 218 00:08:13,880 --> 00:08:18,080 >> Nii et kui sul on kaks kuueteistkümnendarvudega, nullist F, ja jälle, 219 00:08:18,080 --> 00:08:20,256 mis annab sulle täiesti kaheksa bitti või ühe baidi. 220 00:08:20,256 --> 00:08:22,380 Nii et miks see kipub olla tavapäraselt kasulik. 221 00:08:22,380 --> 00:08:24,990 Pole mingit intellektuaalset sisu on tõesti kaugemale, 222 00:08:24,990 --> 00:08:27,010 peale selle tegelikku kasulikkust. 223 00:08:27,010 --> 00:08:29,310 >> Nüüd JPEG ei ole ainus failiformaate graafika. 224 00:08:29,310 --> 00:08:33,230 Sa võiks meenutada, et on olemas faile nagu seda maailmas, 225 00:08:33,230 --> 00:08:34,830 vähemalt alates paar aastat tagasi. 226 00:08:34,830 --> 00:08:37,580 >> Nii et see oli tegelikult paigaldatud Windows XP 227 00:08:37,580 --> 00:08:39,960 miljoneid arvuteid üle maailma. 228 00:08:39,960 --> 00:08:43,000 Ja see oli bitmap faili, BMP. 229 00:08:43,000 --> 00:08:47,690 Ja bitmap fail, nagu näete järgmisel nädal, tähendab lihtsalt muster dots, 230 00:08:47,690 --> 00:08:51,710 pikslite neid kutsutakse, kaart bitti, tõesti. 231 00:08:51,710 --> 00:08:55,160 >> Mis on huvitav, kuigi selle faili formaat, BMP, on 232 00:08:55,160 --> 00:08:58,590 et all kapuuts, see on rohkem kui lihtsalt kolm baiti 233 00:08:58,590 --> 00:09:01,020 et koostada selle kaudu, et rääkida, esimesed paar hammustab. 234 00:09:01,020 --> 00:09:03,330 See tegelikult tundub veidi keeruline esimesel pilgul. 235 00:09:03,330 --> 00:09:04,704 Ja te näete seda P komplekti. 236 00:09:04,704 --> 00:09:06,810 Ja saada midagi eelkõige sellest nüüd 237 00:09:06,810 --> 00:09:10,720 ei ole nii oluline, sest vaid asjaolu et alguses iga bitmapi 238 00:09:10,720 --> 00:09:13,823 fail, graafiline formaat, seal on terve hunnik numbreid. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> Nüüd Microsoft, autor seda formaati, 241 00:09:16,720 --> 00:09:18,820 kipub helistada neile asjad ei ints ja tähemärki 242 00:09:18,820 --> 00:09:22,259 ja ujub aga sõnad ja d sõnad ja igatseb ja baiti. 243 00:09:22,259 --> 00:09:23,800 Nii et nad on lihtsalt erinevad andmetüübid. 244 00:09:23,800 --> 00:09:25,170 Nad erinevad nimed sama asi. 245 00:09:25,170 --> 00:09:26,740 Aga näete, et P, neli. 246 00:09:26,740 --> 00:09:31,450 >> Aga see on ainult öelda, et kui inimese topelt-klõpsuga mõned BMP fail oma 247 00:09:31,450 --> 00:09:35,015 või tema kõvaketas ja aken üles näidates teda, et pilt, 248 00:09:35,015 --> 00:09:38,500 mis juhtus, sest operatsioonisüsteemi süsteem ilmselt märganud, mitte ainult 249 00:09:38,500 --> 00:09:41,460 BMP faililaiend faili nimi, 250 00:09:41,460 --> 00:09:45,010 vaid ka asjaolu, et seal on mõned konventsiooni muster bitti 251 00:09:45,010 --> 00:09:47,490 alguses Selle bitmap faili. 252 00:09:47,490 --> 00:09:50,270 >> Kuid olgem nüüd keskenduma selline keeruline faili 253 00:09:50,270 --> 00:09:52,120 kohta, vaid midagi sellist. 254 00:09:52,120 --> 00:09:55,190 Oletame siin gedit, I lihtsalt algus 255 00:09:55,190 --> 00:09:57,070 on programm, mis on üsna lihtne. 256 00:09:57,070 --> 00:09:58,860 Mul on ka üleval. 257 00:09:58,860 --> 00:10:02,120 Nüüd ma sain # include "structs.h", kuid Ma tulen tagasi, et hetkel. 258 00:10:02,120 --> 00:10:03,974 Kuid see on kasulik praegu. 259 00:10:03,974 --> 00:10:05,890 Nii et see on programm, mis toimub rakendada 260 00:10:05,890 --> 00:10:07,335 nagu registripidajale andmebaasis. 261 00:10:07,335 --> 00:10:09,710 Nii andmebaasi õpilased, ja iga õpilane maailmas 262 00:10:09,710 --> 00:10:13,190 on nimi ja maja ja ilmselt mõned muud kraami, kuid me hoida lihtsa. 263 00:10:13,190 --> 00:10:15,140 Iga õpilane on oma nimi ja maja. 264 00:10:15,140 --> 00:10:17,700 >> Nii et kui ma tahtsin kirjutada programm, mille eesmärk elus 265 00:10:17,700 --> 00:10:19,860 just itereerima alates null kuni kolm, 266 00:10:19,860 --> 00:10:22,070 kui seal on kolm õpilast Harvardi ülikoolis. 267 00:10:22,070 --> 00:10:25,350 Ja ma lihtsalt tahan, kasutades getString, iga õpilase nimi ja maja, 268 00:10:25,350 --> 00:10:26,600 ja siis lihtsalt printida need välja. 269 00:10:26,600 --> 00:10:28,630 >> See on omamoodi nagu nädal Üks, teine ​​nädal värk nüüd, 270 00:10:28,630 --> 00:10:30,810 kui ma lihtsalt tahan jaoks loop või midagi sellist. 271 00:10:30,810 --> 00:10:34,500 Ja ma tahan, et helistada getString mõne korda ja seejärel printida f paar korda. 272 00:10:34,500 --> 00:10:37,340 Niisiis, kuidas oleks mul seda teha, kuigi, kui mõlemad nimi ja maja 273 00:10:37,340 --> 00:10:39,070 on kaasatud iga õpilane? 274 00:10:39,070 --> 00:10:42,830 >> Nii et minu esimene instinkt võiks olla midagi sellist. 275 00:10:42,830 --> 00:10:49,620 Ma võin kõigepealt öelda, noh, mulle, öelda, massiivi stringe nimega nimed. 276 00:10:49,620 --> 00:10:51,530 Ja ma ei taha hardcode kolm siin. 277 00:10:51,530 --> 00:10:53,064 Mida ma tahan, et sinna pannakse? 278 00:10:53,064 --> 00:10:55,730 Nii õpilased, sest see on just pidev kuulutatud ülaosas, 279 00:10:55,730 --> 00:10:57,860 lihtsalt, et ma ei pea hardcode kolm mitmes kohas. 280 00:10:57,860 --> 00:11:00,859 Nii, ma ei saa seda muuta ühes kohas, ja see mõjutab muutus kõikjal. 281 00:11:00,859 --> 00:11:04,470 Ja siis ma võiks teha string maja õpilastele. 282 00:11:04,470 --> 00:11:10,250 >> Ja nüüd, ma võiks teha midagi jaoks (int i = 0; i <üliõpilast i ++. 283 00:11:10,250 --> 00:11:14,390 Nii et ma olen masinakirja kiire, kuid see on ilmselt tuttav süntaks nüüd. 284 00:11:14,390 --> 00:11:17,030 >> Ja nüüd oli see uuemate. 285 00:11:17,030 --> 00:11:22,890 Kui ma tahan panna i-nda õpilase nimi, ma arvan, et ma seda teen. 286 00:11:22,890 --> 00:11:26,480 Ja siis ei ole nimedega kuid maja ümbritsevad i. 287 00:11:26,480 --> 00:11:29,930 Ma teen seda, getString ja lase mul minna tagasi ja määrata see rida. 288 00:11:29,930 --> 00:11:30,430 Nõus? 289 00:11:30,430 --> 00:11:31,200 Ei ole nõus? 290 00:11:31,200 --> 00:11:32,366 See ei ole väga kasutajasõbralik. 291 00:11:32,366 --> 00:11:33,890 Ma ei öelnud kasutaja, mida teha. 292 00:11:33,890 --> 00:11:36,520 >> Aga nüüd, kui ma ka tahtis hiljem, olgem 293 00:11:36,520 --> 00:11:40,060 ütleme, printida need asjad minemas-- nii TODO hiljem. 294 00:11:40,060 --> 00:11:42,330 Ma lähen tegema rohkem seda-- see vaieldamatult tähendab 295 00:11:42,330 --> 00:11:45,970 nõuetekohase rakendamise saada nimed ja maja, kolm 296 00:11:45,970 --> 00:11:48,870 neist kokku iga alates alla. 297 00:11:48,870 --> 00:11:51,280 >> Kuid see ei ole väga hea disain, eks? 298 00:11:51,280 --> 00:11:55,220 Mis siis, kui üliõpilane ei ole lihtsalt nimi ja maja, kuid ka ID number, 299 00:11:55,220 --> 00:11:57,770 ja telefoninumber ja e-posti aadress, 300 00:11:57,770 --> 00:12:00,280 ja võibolla kodulehekülg ja võibolla Twitter käepide, 301 00:12:00,280 --> 00:12:03,730 ja iga rida teisi üksikasju seotud õpilase või isik, 302 00:12:03,730 --> 00:12:04,610 üldisemalt. 303 00:12:04,610 --> 00:12:07,720 Kuidas me hakkame lisama funktsionaalsust selle programmiga? 304 00:12:07,720 --> 00:12:14,080 >> Noh, ma tunnen, et lihtsaim viis võiks olla midagi nagu, ütleme, 305 00:12:14,080 --> 00:12:16,490 int IDS õpilastele. 306 00:12:16,490 --> 00:12:18,380 Nii et ma panen kõik oma ID-sinna. 307 00:12:18,380 --> 00:12:22,240 Ja siis midagi nagu telefoninumbrid, 308 00:12:22,240 --> 00:12:24,400 Ma ei ole kindel, kuidas esindavad, et veel. 309 00:12:24,400 --> 00:12:30,280 Nii et lähme edasi ja helista Selle twitters õpilast, mis 310 00:12:30,280 --> 00:12:33,550 on natuke imelik, aga-- ja hunnik rohkem välju. 311 00:12:33,550 --> 00:12:36,360 >> Olen hakanud tõhusalt kopeeri ja kleebi siia. 312 00:12:36,360 --> 00:12:39,416 Ja see läheb kasvama päris kohmakas päris kiiresti, eks? 313 00:12:39,416 --> 00:12:42,290 Kas poleks tore, kui seal oli maailma andmestruktuur teada 314 00:12:42,290 --> 00:12:45,600 mitte int või string, kuid midagi kõrgemal tasemel, abstraktsioon, nii 315 00:12:45,600 --> 00:12:47,570 rääkida, mida tuntakse õpilane? 316 00:12:47,570 --> 00:12:50,220 C ei tulnud koos sisseehitatud funktsionaalsus õpilastele, 317 00:12:50,220 --> 00:12:52,260 aga mis siis, kui ma tahtsin, et anda see selline? 318 00:12:52,260 --> 00:12:55,640 >> Noh, selgub, ma lähen avage fail nimega structs.h siin 319 00:12:55,640 --> 00:12:57,090 ja mida saate teha just nii. 320 00:12:57,090 --> 00:12:58,290 Ja me ei kavatse hakata seda praegu teevad. 321 00:12:58,290 --> 00:13:01,490 Ja all kapuuts P Set Three, sa oled juba seda teinud nüüd. 322 00:13:01,490 --> 00:13:05,920 Ei ole olemas sellist asja nagu g ristkülik või g ovaalsed programmeerimiskeeles C. 323 00:13:05,920 --> 00:13:10,570 >> Folks at Stanford rakendada neid andmetüübid, kasutades sellist lähenemist siin 324 00:13:10,570 --> 00:13:13,900 deklareerides oma uute andmete tüüpi kasutades uut märksõna 325 00:13:13,900 --> 00:13:16,744 nimetatakse struct ja muu üks nn typedef. 326 00:13:16,744 --> 00:13:19,660 Ja tõepoolest, kuigi süntaks tundub veidi erinevad asjad 327 00:13:19,660 --> 00:13:23,550 oleme näinud varem, Põhimõtteliselt see on super lihtne. 328 00:13:23,550 --> 00:13:25,297 >> See tähendab lihtsalt, et "määratleda tüüp." 329 00:13:25,297 --> 00:13:27,255 See saab olema struktuuri ja struktuuri 330 00:13:27,255 --> 00:13:29,400 on nagu konteiner mitme asja. 331 00:13:29,400 --> 00:13:31,780 Ja see struktuur läheb on string nimetatakse nimi 332 00:13:31,780 --> 00:13:33,210 ja string nimega maja. 333 00:13:33,210 --> 00:13:37,520 Ja olgem helistada, lihtsalt mugavusest kogu see andmestruktuur õpilane. 334 00:13:37,520 --> 00:13:40,320 >> Nii et hetkel sa saad semikoolon, teil on nüüd 335 00:13:40,320 --> 00:13:43,280 loonud oma andmed tüüp nimega üliõpilane 336 00:13:43,280 --> 00:13:46,420 mis nüüd seisab kõrvuti int, ja float, ja char, ja string, 337 00:13:46,420 --> 00:13:50,270 ja g ristkülik, ja g ovaalsed, ja mis tahes arv muid asju inimesed on leiutanud. 338 00:13:50,270 --> 00:13:53,340 >> Mis on kasulik selle Nüüd on see, et kui ma lähen tagasi 339 00:13:53,340 --> 00:13:57,430 et struct 0 ja lõpetada see rakendamist, mis ma kirjutasin 340 00:13:57,430 --> 00:14:02,080 eelnevalt siin, märkate, et kõik paratamatu segadus, et 341 00:14:02,080 --> 00:14:05,490 oli algamas juhtub kui ma lisasin telefoninumbreid ja twitters ja kõik 342 00:14:05,490 --> 00:14:07,370 need muud asjad õpilase määratlus, 343 00:14:07,370 --> 00:14:11,810 nüüd on tabavalt tõmmati lihtsalt üks massiiv õpilastele. 344 00:14:11,810 --> 00:14:15,500 >> Ja kõik need õpilased nüüd on mitu asja sees on. 345 00:14:15,500 --> 00:14:16,930 Nii et lihtsalt jätab ühe küsimuse. 346 00:14:16,930 --> 00:14:19,700 Kuidas sa selle nime juures, ja maja, ja ID, 347 00:14:19,700 --> 00:14:21,640 ja mis iganes on sees õpilane? 348 00:14:21,640 --> 00:14:22,930 Super lihtne, samuti. 349 00:14:22,930 --> 00:14:25,730 Uus süntaks, kuid lihtne idee. 350 00:14:25,730 --> 00:14:29,239 >> Sa lihtsalt indeks arvesse massiiv, nagu tegime eelmisel nädalal ja see. 351 00:14:29,239 --> 00:14:31,030 Ja mis on selgelt uus tükk süntaks? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 Just., Mis tähendab "sisse minna struktuur ja saage Väli 354 00:14:35,880 --> 00:14:39,030 nimi, saada Väli maja, saada Väli õpilane. " 355 00:14:39,030 --> 00:14:41,940 >> Nii et P Set Three, kui sa oled veel töötan selle kallal, 356 00:14:41,940 --> 00:14:44,020 ja kõige vanemad veel on, aru, et kui sa 357 00:14:44,020 --> 00:14:46,130 hakata asju g rects ja g ovaali 358 00:14:46,130 --> 00:14:50,201 ja muid asju, mis ei tundu pärit Week null, üks või kaks, 359 00:14:50,201 --> 00:14:52,950 aru, et see on sellepärast, Stanford deklareeritud uusi andmetüüpe. 360 00:14:52,950 --> 00:14:56,160 >> Ja tõepoolest, see on täpselt see, mida jagame teha, samuti, P, neli, kui 361 00:14:56,160 --> 00:14:59,880 hakkame tegelema asjad nagu pildid, rasterpiltidena ja palju muud. 362 00:14:59,880 --> 00:15:02,882 Nii et see on lihtsalt teaser ja vaimne mudel, mis on tulemas. 363 00:15:02,882 --> 00:15:04,590 Nüüd ma viivitanud natuke hommikul. 364 00:15:04,590 --> 00:15:09,560 Mul oli selline uudishimulik näha, mida Microsoft tapeet tegelikult 365 00:15:09,560 --> 00:15:10,310 näeb välja nagu praegu. 366 00:15:10,310 --> 00:15:15,200 Ja selgub, et keegi aastal 2006 tegelikult läks peaaegu täpselt 367 00:15:15,200 --> 00:15:19,210 sama kohapeal pildistada tegelikkuses mida näeb, et nendel päevadel. 368 00:15:19,210 --> 00:15:21,380 Valdkonnas on nüüd veidi ülekasvanud. 369 00:15:21,380 --> 00:15:24,850 >> Nii võib öelda nüüd pilte, lähme tagasi tuua Daven siin 370 00:15:24,850 --> 00:15:26,890 ekraanil ja Nicholas, ja lihtsalt meelde tuletada, 371 00:15:26,890 --> 00:15:30,540 et kui soovite meiega liituda lõunaks sel reedel, pea meie tavaline URL 372 00:15:30,540 --> 00:15:31,440 siin. 373 00:15:31,440 --> 00:15:33,530 >> Kust siis jätame välja esmaspäeval? 374 00:15:33,530 --> 00:15:35,140 Me tutvustas seda probleemi, eks? 375 00:15:35,140 --> 00:15:37,610 See oli ilmselt õige rakendamise swap, 376 00:15:37,610 --> 00:15:40,460 mille sa võtad kaks ints, ühe nimega, üks nn B 377 00:15:40,460 --> 00:15:44,130 vahetada neid, nagu Laura tegi siin laval piima ja veega, 378 00:15:44,130 --> 00:15:46,820 kasutades ajutist muutuja, või tühi tass, 379 00:15:46,820 --> 00:15:50,540 nii et me võiks panna B ja in b tegemata jamasid. 380 00:15:50,540 --> 00:15:51,560 Me kasutasime muutuja. 381 00:15:51,560 --> 00:15:52,870 Seda nimetatakse temp. 382 00:15:52,870 --> 00:15:55,520 >> Aga mis oli põhiline Probleemiks on see kood esmaspäeval? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 Mis oli probleem? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Jah. 387 00:16:00,605 --> 00:16:01,970 >> Sihtrühm: See võtab rohkem ruumi. 388 00:16:01,970 --> 00:16:04,719 >> DAVID J. Humala: võtab rohkem ruum, sest ma kasutan muutuja, 389 00:16:04,719 --> 00:16:05,400 ja see on OK. 390 00:16:05,400 --> 00:16:07,300 See on tõsi, aga ma olen kavatse öelda, et see on OK. 391 00:16:07,300 --> 00:16:10,030 See on ainult 32 bitti grand kava asju, nii et ei ole suur asi. 392 00:16:10,030 --> 00:16:10,655 Muud mõtted? 393 00:16:10,655 --> 00:16:12,572 Sihtrühm: See ainult vahetuslepingud muutujad kohapeal. 394 00:16:12,572 --> 00:16:13,571 DAVID J. Humala: Täpselt. 395 00:16:13,571 --> 00:16:15,090 See ainult vahetab muutujad kohapeal. 396 00:16:15,090 --> 00:16:18,173 Sest iga kord, kui helistada funktsioon-- kui mul oli salved Annenberg 397 00:16:18,173 --> 00:16:19,840 Viimane kord, teil on peamised põhjale. 398 00:16:19,840 --> 00:16:23,560 Niipea, kui te helistate funktsiooni nimetatakse swap swap ei saa x ja y, 399 00:16:23,560 --> 00:16:24,400 algväärtused. 400 00:16:24,400 --> 00:16:26,392 Mida swap get, kas me väita? 401 00:16:26,392 --> 00:16:27,100 Sihtrühm: koopiad. 402 00:16:27,100 --> 00:16:28,090 DAVID J. Humala: Nii neist koopiaid. 403 00:16:28,090 --> 00:16:31,120 Seega saab üks ja kaks, kui te meenutada näiteks viimane kord, 404 00:16:31,120 --> 00:16:34,730 kuid koopia üks ja kaks mis on edukalt vahetada. 405 00:16:34,730 --> 00:16:38,550 Aga kahjuks lõpuks need väärtused on ikka sama. 406 00:16:38,550 --> 00:16:41,880 Nii näeme seda meie uus sõber, loodetavasti GDB, 407 00:16:41,880 --> 00:16:45,180 et teie või TFs ja CA on juhtinud sa poole järgmiselt. 408 00:16:45,180 --> 00:16:51,210 >> Nii ei swap turult välja nagu-- olgem avada see-- näeb välja selline. 409 00:16:51,210 --> 00:16:54,160 Me vormindatud x ühe, y kahele. 410 00:16:54,160 --> 00:16:55,620 Oli hunnik print f on. 411 00:16:55,620 --> 00:16:58,080 Aga siis, võti kõne siin oli vahetada, mis 412 00:16:58,080 --> 00:17:00,260 Just kood me nägin just hetk tagasi. 413 00:17:00,260 --> 00:17:03,180 Milline on õige esimesel lühidalt, kuid funktsionaalselt, 414 00:17:03,180 --> 00:17:06,800 see programm ei tööta, sest see ei ole püsivalt vahetada x ja y. 415 00:17:06,800 --> 00:17:10,190 >> Vaatame seda, kiire soe siin koos GDB, ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 Hunnik valdav teavet, mis Ma vabaneda juhtimisega L praegu. 418 00:17:15,200 --> 00:17:17,516 Ja nüüd, ma lähen edasi minna ja käivitada. 419 00:17:17,516 --> 00:17:19,349 Ja kahjuks, et ei olnud, et kasulik. 420 00:17:19,349 --> 00:17:22,355 Ta jooksis programm sees käesoleva programmi nimega GDB, siluri, 421 00:17:22,355 --> 00:17:23,730 kuid ta ei lasknud mind tuhnima. 422 00:17:23,730 --> 00:17:26,229 >> Niisiis, kuidas ma tegelikult pausi täitmise sees selle programmi? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 Nii murda. 425 00:17:28,329 --> 00:17:32,340 Ja ma võiks murda mis tahes reanumbril üks, 10, 15. 426 00:17:32,340 --> 00:17:35,530 Aga ma ei saa ka murda sümboolselt öeldes break peamine. 427 00:17:35,530 --> 00:17:38,980 Ja mis teeb edasi murda punkt, ilmselt real 16 peamine. 428 00:17:38,980 --> 00:17:40,050 Ja kus on line 16? 429 00:17:40,050 --> 00:17:42,960 Lähme kuni koodi ja minna kuni noswap. 430 00:17:42,960 --> 00:17:46,930 Ja tõepoolest, rida 16 on Kõige esimene programmis. 431 00:17:46,930 --> 00:17:52,130 >> Nüüd, kui ma edasi minna ja tüüp joosta seekord Enter, see peatub. 432 00:17:52,130 --> 00:17:53,080 Nii et olgem tuhnima. 433 00:17:53,080 --> 00:17:55,716 Prindi x-- miks on x null? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 Ja ignoreerida dollari märk. 436 00:17:57,830 --> 00:17:59,725 See on lihtsalt huviline kasutuse programmi. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 Miks on x null hetkel? 439 00:18:03,140 --> 00:18:03,640 Jah. 440 00:18:03,640 --> 00:18:07,061 >> Sihtrühm: See peatus vahetult enne line 16, tegelikult on line 16. 441 00:18:07,061 --> 00:18:08,060 DAVID J. Humala: Täpselt. 442 00:18:08,060 --> 00:18:11,630 GDB, vaikimisi on peatatud täitmise vahetult enne line 16. 443 00:18:11,630 --> 00:18:14,820 Nii et see ei ole täidetud, mis tähendab, et x on mõne tundmatu väärtus. 444 00:18:14,820 --> 00:18:17,150 Ja meil vedas, et see on midagi puhas nagu null. 445 00:18:17,150 --> 00:18:20,310 Nüüd, kui ma järgmisena, nüüd ta hukati 16. 446 00:18:20,310 --> 00:18:22,000 Ta ootab mind täita 17. 447 00:18:22,000 --> 00:18:23,400 Lubage mul minna ja print x. 448 00:18:23,400 --> 00:18:24,094 See on üks. 449 00:18:24,094 --> 00:18:25,260 Lubage mul minna ja print y. 450 00:18:25,260 --> 00:18:26,176 Mida ma peaksin nüüd näha? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> Sihtrühm: [kuuldamatu] 453 00:18:28,560 --> 00:18:29,165 >> DAVID J. Humala: veidi valjem. 454 00:18:29,165 --> 00:18:30,040 >> Sihtrühm: [kuuldamatu] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 DAVID J. Humala: Mitte päris üksmeel. 457 00:18:32,120 --> 00:18:34,760 Nii et jah, me näeme mõned prügi väärtus. 458 00:18:34,760 --> 00:18:37,862 Nüüd, y on 134514064 seal. 459 00:18:37,862 --> 00:18:39,320 Noh, see on lihtsalt mingi prügi väärtus. 460 00:18:39,320 --> 00:18:41,350 Minu programm kasutab RAM erinevatel eesmärkidel. 461 00:18:41,350 --> 00:18:42,350 Seal on muid funktsioone. 462 00:18:42,350 --> 00:18:44,040 Teised inimesed kirjutas sees minu arvutis. 463 00:18:44,040 --> 00:18:46,789 Nii et need bitid on kasutatud muid väärtusi, ja mida ma näen 464 00:18:46,789 --> 00:18:49,470 on jäänuseid mõned enne kasutamist, et mälu. 465 00:18:49,470 --> 00:18:53,350 >> Nii et ei ole suur asi, sest niipea nagu ma järgmisena ja seejärel printida y, 466 00:18:53,350 --> 00:18:55,640 see lähtestatakse väärtus, mida ma tahan. 467 00:18:55,640 --> 00:18:57,400 Nii et nüüd, lähme edasi natuke kiiremini. 468 00:18:57,400 --> 00:18:58,540 N järgmisel. 469 00:18:58,540 --> 00:18:59,570 Teeme seda uuesti. 470 00:18:59,570 --> 00:19:00,530 Teeme seda uuesti. 471 00:19:00,530 --> 00:19:02,404 Aga ma ei taha lüüa see siin, sest kui ma 472 00:19:02,404 --> 00:19:05,110 tahan näha, mis toimub sees swap, milline on käsk? 473 00:19:05,110 --> 00:19:05,520 >> Sihtrühm: sammud. 474 00:19:05,520 --> 00:19:06,436 >> DAVID J. Humala: sammud. 475 00:19:06,436 --> 00:19:09,800 Nii et see samme mind funktsiooni, mitte üle. 476 00:19:09,800 --> 00:19:12,270 Ja nüüd, et see on natuke segasena ausalt, kuid see on vaid 477 00:19:12,270 --> 00:19:14,581 mulle Olen line 33 nüüd. 478 00:19:14,581 --> 00:19:15,580 Ja teeme seda jälle. 479 00:19:15,580 --> 00:19:16,080 Prindi temp. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 Garbage väärtus langeb sel ajal aga see on lihtsalt veel prügi väärtus. 482 00:19:20,170 --> 00:19:22,810 Teeme kõrval, print temp. 483 00:19:22,810 --> 00:19:27,130 See on vormindatud 1, mis oli väärtus x, aka. 484 00:19:27,130 --> 00:19:29,110 >> Nüüd, kus oleme meie ja X tuleb? 485 00:19:29,110 --> 00:19:32,510 Noh, teate peamine, me nimetatakse neid väärtusi x ja y. 486 00:19:32,510 --> 00:19:34,740 Siis andis need vahetada järgmiselt. 487 00:19:34,740 --> 00:19:37,010 X oli enne, koma y. 488 00:19:37,010 --> 00:19:40,020 Ja siis, swap neid kutsuda x ja y. 489 00:19:40,020 --> 00:19:42,630 Aga selgus, et see on kutsudes neid ja b. 490 00:19:42,630 --> 00:19:45,970 Aga a ja b on nüüd hakkab olema koopiate x ja y, vastavalt. 491 00:19:45,970 --> 00:19:50,660 >> Nii et kui ma lähen tagasi GDB, temp Nüüd on üks ja on nüüd üks. 492 00:19:50,660 --> 00:19:56,130 Aga kui ma edasi tegema ja nüüd teha print , on juba üle läinud. 493 00:19:56,130 --> 00:20:00,030 On piima valatakse endise apelsinimahl klaasile või vastupidi. 494 00:20:00,030 --> 00:20:04,750 >> Ja kui ma järgmine kord, ja nüüd kui ma välja printida kui mõistuse kontrolli, 495 00:20:04,750 --> 00:20:07,687 on veel kaks, aga b nüüd üks. 496 00:20:07,687 --> 00:20:08,770 Ausalt, see on ikka seal. 497 00:20:08,770 --> 00:20:10,670 Mind ei huvita, mis temp on. 498 00:20:10,670 --> 00:20:16,850 Aga niipea, kui ma nüüd kirjutad, ütleme, jätkuvalt, et minna tagasi, nüüd ma olen lõpus 499 00:20:16,850 --> 00:20:17,480 programm. 500 00:20:17,480 --> 00:20:20,730 Ja kahjuks, x on veel ühe ja y on endiselt kaks. 501 00:20:20,730 --> 00:20:22,272 >> Mis siis oli kasulikkust GDB on? 502 00:20:22,272 --> 00:20:23,980 See ei aidanud mind parandada probleem iseenesest, 503 00:20:23,980 --> 00:20:26,265 kuid loodetavasti aitab mind aru realiseerimisel 504 00:20:26,265 --> 00:20:30,000 et jah, minu loogika on õige, kuid minu kood ei ole lõpuks võttes 505 00:20:30,000 --> 00:20:31,450 püsiv mõju. 506 00:20:31,450 --> 00:20:34,570 Nii et see on probleem, millega me oleme läheb nüüd lahendada täna. 507 00:20:34,570 --> 00:20:37,870 >> Aga lähme sinna teel seda. 508 00:20:37,870 --> 00:20:39,230 String on vale. 509 00:20:39,230 --> 00:20:41,860 Ka see ei ole andmetüüp mis eksisteerib C. See 510 00:20:41,860 --> 00:20:44,750 olnud sünonüümina mõned aega midagi muud, 511 00:20:44,750 --> 00:20:47,300 ja me ei ilmnenud, et järgmine. 512 00:20:47,300 --> 00:20:53,282 >> Lubage mul minna ja avada programmi nimega võrrelda-0. 513 00:20:53,282 --> 00:20:56,240 Ja selle asemel, kirjuta see välja, hakkame kõndida läbi kood 514 00:20:56,240 --> 00:20:58,040 Ma juba kirjutasin, kuid see on ainult paar rida. 515 00:20:58,040 --> 00:20:59,570 Nii et see on võrrelda-0. 516 00:20:59,570 --> 00:21:02,380 Ja esimene asi, mida ma teen muutub rida teksti. 517 00:21:02,380 --> 00:21:05,610 >> Aga teate, mida ma olen teeme esmakordselt. 518 00:21:05,610 --> 00:21:07,910 Mis on erinevad selgelt umbes liin 21? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 Tegelikult, oota. 521 00:21:11,402 --> 00:21:12,110 See on koopia kaks. 522 00:21:12,110 --> 00:21:13,568 See ei ole isegi õige programm. 523 00:21:13,568 --> 00:21:14,780 Olgu, spoiler tähelepanelik. 524 00:21:14,780 --> 00:21:16,890 Olgu, vahet pole, mis. 525 00:21:16,890 --> 00:21:18,520 See on vastus tuleviku küsimuse. 526 00:21:18,520 --> 00:21:21,450 >> Siin on võrrelda-0, ja ma olen umbes saada rida teksti. 527 00:21:21,450 --> 00:21:22,435 Programmi palju lihtsam. 528 00:21:22,435 --> 00:21:23,560 Nii et see on lihtne. 529 00:21:23,560 --> 00:21:28,070 See on nagu esimene nädal, teine ​​nädal stuff hetkel. string s = getString. 530 00:21:28,070 --> 00:21:29,700 Ma ütlen seda uuesti siin. 531 00:21:29,700 --> 00:21:31,830 string t = getString. 532 00:21:31,830 --> 00:21:35,300 Ja siis viimane asi, mida selles programm, nagu nimigi ütleb, 533 00:21:35,300 --> 00:21:37,090 on Ma lähen, et proovida neid võrrelda. 534 00:21:37,090 --> 00:21:40,709 >> Nii et kui te esimest string, võrdub = t, siis ma olen 535 00:21:40,709 --> 00:21:42,250 ütlen kirjutad sama asja. 536 00:21:42,250 --> 00:21:44,291 Else, ma ütlen kirjutad erinevaid asju. 537 00:21:44,291 --> 00:21:45,880 Nii et olgem kompileerida ja käivitada see programm. 538 00:21:45,880 --> 00:21:48,481 Nii et võrrelda null. 539 00:21:48,481 --> 00:21:48,980 Näeb hea välja. 540 00:21:48,980 --> 00:21:50,490 No koostamise vigu. 541 00:21:50,490 --> 00:21:52,386 >> Lubage mul minna nüüd ja tippige ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Lubage mul minna ja midagi öelda : Daven ja midagi: Rob. 544 00:21:59,220 --> 00:22:00,450 Ja ma tüüpi erinevaid asju. 545 00:22:00,450 --> 00:22:01,250 Siiani nii hea. 546 00:22:01,250 --> 00:22:02,680 Programm tundub olevat õige. 547 00:22:02,680 --> 00:22:03,880 >> Kuid olgem joosta see uuesti. 548 00:22:03,880 --> 00:22:05,800 Ütle midagi: Gabe. 549 00:22:05,800 --> 00:22:07,140 Ütle midagi: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 Olgu. 552 00:22:09,020 --> 00:22:10,851 Võib-olla ma tabanud tühikut või midagi funky. 553 00:22:10,851 --> 00:22:11,600 Teeme seda uuesti. 554 00:22:11,600 --> 00:22:13,020 Nii Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 Erinevad asjad. 559 00:22:17,330 --> 00:22:19,430 Mis siis toimub? 560 00:22:19,430 --> 00:22:23,200 >> Nii et meil on need kaks rida kood, getString kutsutakse kaks korda. 561 00:22:23,200 --> 00:22:25,760 Ja siis ma lihtsalt püüavad võrrelda s ja t. 562 00:22:25,760 --> 00:22:28,370 Aga mis tegelikult siis toimub? 563 00:22:28,370 --> 00:22:31,180 Noh, minu käekiri hakkab lihunik see näiteks mõnevõrra. 564 00:22:31,180 --> 00:22:34,630 Ja olgem tegelikult visata see siia üles ka. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> Nii et meil on rida nagu string s = getString. 567 00:22:45,712 --> 00:22:48,295 Nii et see on lihtsalt esimene huvitav joont, et programm. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 Aga mida see kõik aega olnud toimub all kapuuts? 570 00:22:52,974 --> 00:22:55,890 Noh, vasakul servas on string, mis on teatud tüüpi muutuja 571 00:22:55,890 --> 00:22:56,785 ja seda nimetatakse s. 572 00:22:56,785 --> 00:23:00,019 Nii et ma tean, et see kasutab mälu, või RAM minu arvuti kuidagi. 573 00:23:00,019 --> 00:23:02,060 Nii et ma lähen abstraktselt juhtida, et ruut. 574 00:23:02,060 --> 00:23:04,820 32 bitti, selgub, kuid rohkem sellest tulevikus. 575 00:23:04,820 --> 00:23:06,410 Ja siis, mis toimub siin? 576 00:23:06,410 --> 00:23:08,700 >> Noh, getString ilmselt saab string kasutaja. 577 00:23:08,700 --> 00:23:11,360 Ja getString sai Zamyla või Gabe või Daven. 578 00:23:11,360 --> 00:23:14,640 Nii et olgem valida esimese need, mis oli Daven. 579 00:23:14,640 --> 00:23:19,174 Nii et tegelikult, mida getString sai mulle, et esimesel juhul oli D-a-v-e-n. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 Ja siis, mida veel ei see annab mulle salaja? 582 00:23:25,045 --> 00:23:25,920 Sihtrühm: [kuuldamatu] 583 00:23:25,920 --> 00:23:28,720 DAVID J. Humala: Jah, / 0 või null iseloomu. 584 00:23:28,720 --> 00:23:30,550 Nii et tegelikult andis mulle string. 585 00:23:30,550 --> 00:23:34,550 Aga me juba teame eelmisest tundub, et string on lihtsalt massiivi 586 00:23:34,550 --> 00:23:37,895 märke, ja see lõpetatakse see eriline valvur iseloomuga / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> Aga kui see on tõsi ja see on ruut, 589 00:23:42,310 --> 00:23:44,160 see on ilmselt palju suurem ristkülik. 590 00:23:44,160 --> 00:23:46,830 Ja tõepoolest, see on, Väidan, ainult 32 bitti. 591 00:23:46,830 --> 00:23:49,500 Ja see on selgelt rohkem kui 32 bitti, kuna see on ilmselt 592 00:23:49,500 --> 00:23:51,583 kaheksa pluss kaheksa pluss kaheksa pluss kaheksa pluss kaheksa, 593 00:23:51,583 --> 00:23:53,320 lihtsalt sellepärast, et baitide ASCII. 594 00:23:53,320 --> 00:23:57,030 Kuidas kuradit me sobitada Daven sellesse väike kast siin? 595 00:23:57,030 --> 00:23:59,880 >> Noh, mis on getString tegelikult teeb? 596 00:23:59,880 --> 00:24:03,680 Noh, see võre esindab siin minu arvuti mälu või muutmälu. 597 00:24:03,680 --> 00:24:07,564 Nii et olgem suvaliselt öelda, et kui Iga neist tähistab bait, 598 00:24:07,564 --> 00:24:09,730 siis me ei mõtle iga bait, millel on aadress, 599 00:24:09,730 --> 00:24:13,830 nagu 33 Oxford Street, või 34 Oxford Street, või 35 Oxford Street. 600 00:24:13,830 --> 00:24:16,700 >> Nii nagu kodu on aadressid ja hooned on aadressid, 601 00:24:16,700 --> 00:24:19,810 nii teha üksikute baitide mälu on aadressid või numbrid 602 00:24:19,810 --> 00:24:21,042 mis üheselt identifitseerib neid. 603 00:24:21,042 --> 00:24:22,000 Nii, see on meelevaldne. 604 00:24:22,000 --> 00:24:25,370 Kuid hoida lihtsa, ma lähen kasutada kuueteistkümnendsüsteemi lihtsalt kokkuleppeliselt, 605 00:24:25,370 --> 00:24:28,200 kuid 0x ei tähenda midagi muud kui "see on kuueteistkümnendsüsteemis." 606 00:24:28,200 --> 00:24:31,030 ja ma väita, et "D" jõuab kell bait Üks mällu. 607 00:24:31,030 --> 00:24:34,210 >> Ma sain midagi toimub mälu, nii Daven sai esimese koha 608 00:24:34,210 --> 00:24:35,509 kell bait Üks. 609 00:24:35,509 --> 00:24:36,800 See on siis läheb 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 See läheb 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 See saab olema 0x4. 614 00:24:41,800 --> 00:24:43,025 See läheb 0x5. 615 00:24:43,025 --> 00:24:44,025 See saab olema 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> Aga kui sa hakkad mõtlema sellest, mida arvuti teeb 618 00:24:48,290 --> 00:24:50,710 all kapuuts, te võite järeldada, 619 00:24:50,710 --> 00:24:54,960 kuidas mõned aastad tagasi, siis on rakendatud C ise. 620 00:24:54,960 --> 00:24:58,360 Mis on getString ilmselt returning-- sest see 621 00:24:58,360 --> 00:25:00,946 tundub, et see pole tagastamise Daven iseenesest 622 00:25:00,946 --> 00:25:03,320 sest ta kindlasti ei kavatse mahtuda see väike box-- 623 00:25:03,320 --> 00:25:05,090 Mis on getString tõenäoliselt naasmist? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> Sihtrühm: [kuuldamatu] 626 00:25:08,920 --> 00:25:10,540 >> DAVID J. Humala: asukoht Daven. 627 00:25:10,540 --> 00:25:12,770 Ja see on seda teinud kunagi, sest esimene nädal. 628 00:25:12,770 --> 00:25:16,150 Mis getString on tõesti naasmist ei ole string, per se. 629 00:25:16,150 --> 00:25:17,780 See on üks väike valge vale. 630 00:25:17,780 --> 00:25:22,520 Ta naasis aadress stringi mälu, unikaalne aadress. 631 00:25:22,520 --> 00:25:24,820 Daven elab 33 Oxford Street. 632 00:25:24,820 --> 00:25:29,310 Aga rohkem tabavalt, Gavin elab at 0x1, aadress Number One. 633 00:25:29,310 --> 00:25:32,280 >> Niisiis, mida saab panna selle väike kast siis peab olema selge, 634 00:25:32,280 --> 00:25:35,930 on lihtsalt aadress, et string. 635 00:25:35,930 --> 00:25:38,110 Niisiis kõik see aeg, seda on kestnud. 636 00:25:38,110 --> 00:25:41,650 Aga mida see vihjab Nüüd on see, et kui kõik s on 637 00:25:41,650 --> 00:25:44,710 on mitmeid sees on, kes teid peatada, programmeerija, 638 00:25:44,710 --> 00:25:47,970 paneks iga number iga muutuja ja lihtsalt hüpped 639 00:25:47,970 --> 00:25:49,080 selle patakas mälu? 640 00:25:49,080 --> 00:25:51,320 Ja tõepoolest, me näeme, see oht järgmine kord. 641 00:25:51,320 --> 00:25:53,500 >> Aga nüüd, see tundub ebapiisav. 642 00:25:53,500 --> 00:25:55,630 Kui ma ütlen, anna mulle string, sa annad mulle Daven. 643 00:25:55,630 --> 00:25:57,230 Aga sa tõesti ei anna mulle Daven. 644 00:25:57,230 --> 00:25:59,310 Kõik, mida mulle on Daven aadress. 645 00:25:59,310 --> 00:26:04,310 Kuidas ma siis tean kindlalt, kus Daven algab ja ends-- 646 00:26:04,310 --> 00:26:07,140 lugu on saada kummaline-- kus Daven algab ja lõpeb, 647 00:26:07,140 --> 00:26:10,435 ja seejärel, järgmisel stringi mälu hakkab? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> Noh, kui sa oled teisaldus mulle alguses Daven, 650 00:26:13,620 --> 00:26:17,230 sisuliselt, kuidas ma tean, kui lõpuks ta nimi on? 651 00:26:17,230 --> 00:26:20,550 See eriline null iseloomu, mis on eriti oluline nüüd 652 00:26:20,550 --> 00:26:23,040 kui stringid all kapuuts on lihtsalt tuvastatud 653 00:26:23,040 --> 00:26:25,820 üheselt nende asukohta mälus. 654 00:26:25,820 --> 00:26:28,130 Nii et kogu see aeg, mis on mis on kestnud. 655 00:26:28,130 --> 00:26:32,470 >> Nii et kui me vaatame praegu kood siia, selgitada 656 00:26:32,470 --> 00:26:35,790 kui sa oleks viga line 26. 657 00:26:35,790 --> 00:26:39,560 Miks on Zamyla ja Zamyla erinevad? 658 00:26:39,560 --> 00:26:41,330 Miks on Gabe ja Gabe erinevad? 659 00:26:41,330 --> 00:26:42,154 Jah, on tagasi. 660 00:26:42,154 --> 00:26:43,390 >> Sihtrühm: Need on erinevad aadressid. 661 00:26:43,390 --> 00:26:45,931 >> DAVID J. Humala: Lihtsalt sellepärast, neil on erinevad aadressid. 662 00:26:45,931 --> 00:26:48,820 Sest kui sa helistada getString uuesti, mida ma teen siin kiiresti, 663 00:26:48,820 --> 00:26:52,870 kui see on teine ​​rida, string t, kui ma tegin, et programmi 664 00:26:52,870 --> 00:26:55,030 võrdub teise kõne getString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 Järgmine kord, kui ma kutsun GetString, ma lähen 667 00:26:58,670 --> 00:27:00,190 saada erinevat patakas mälu. 668 00:27:00,190 --> 00:27:02,220 >> GetString on lubatud küsida operatsioonisüsteemi 669 00:27:02,220 --> 00:27:03,800 süsteemi rohkem ja rohkem mälu. 670 00:27:03,800 --> 00:27:07,894 Ta ei kavatse uuesti sama kuus baiti iga kord. 671 00:27:07,894 --> 00:27:09,810 See läheb aina uusi patakas mälu, mis 672 00:27:09,810 --> 00:27:12,780 tähendab t ei hakka mõnda muud väärtust siin. 673 00:27:12,780 --> 00:27:15,380 >> Nii et kui ma s võrdub = t, et sa ei võrdle 674 00:27:15,380 --> 00:27:17,880 D vastu ja vastu seda ja V vastu. 675 00:27:17,880 --> 00:27:19,588 Sa Võrreldes seda selle vastu, mis 676 00:27:19,588 --> 00:27:24,020 ausalt öeldes on päris useful-- useless-- on üsna mõttetu, sest kes tegelikult 677 00:27:24,020 --> 00:27:25,830 hoolib, kui stringid on mälu? 678 00:27:25,830 --> 00:27:26,850 >> Ja tõepoolest, me ei ole. 679 00:27:26,850 --> 00:27:28,980 Ja me ei kavatse alustada eriti hooliv. 680 00:27:28,980 --> 00:27:34,180 Ainult sel määral, et vead võivad tekkida ja julgeolekuohtude võib tekkida tahe 681 00:27:34,180 --> 00:27:36,100 me tegelikult hakata hooli sellest. 682 00:27:36,100 --> 00:27:37,230 Nii et olgem probleemi lahendada. 683 00:27:37,230 --> 00:27:39,650 Selgub, siis kinnitage see super lihtsalt. 684 00:27:39,650 --> 00:27:42,600 >> Ja olgem tegelikult, enne kui ma selgub, et jälle, milline oleks 685 00:27:42,600 --> 00:27:47,170 sa teeksid, kui sisse CS50 klass, ja siis tuli rakendada 686 00:27:47,170 --> 00:27:48,600 võrdlemine kahe stringe. 687 00:27:48,600 --> 00:27:51,440 Sa ilmselgelt ei saa lihtsalt kasutada s võrdub = t. 688 00:27:51,440 --> 00:27:54,090 Aga loogiliselt, kuidas oleks võrrelda seda string 689 00:27:54,090 --> 00:27:56,370 Seda stringi kasutatakse C-koodi? 690 00:27:56,370 --> 00:27:56,880 Jah. 691 00:27:56,880 --> 00:27:58,780 >> Sihtrühm: Lihtsalt tee loop [kuuldamatu] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 DAVID J. Humala: Perfect. 694 00:28:01,670 --> 00:28:02,900 Sihtrühm: [kuuldamatu] 695 00:28:02,900 --> 00:28:03,310 DAVID J. Humala: Jah. 696 00:28:03,310 --> 00:28:05,390 Lihtsalt silmus või samas silmus või mis iganes. 697 00:28:05,390 --> 00:28:08,710 Aga kohaldatakse põhiidee, et kui see on patakas mälu või massiivi 698 00:28:08,710 --> 00:28:11,590 ja see on korrake üle mõlemad samal ajal. 699 00:28:11,590 --> 00:28:12,960 Ja lihtsalt võrrelda tähte. 700 00:28:12,960 --> 00:28:14,260 >> Ja sa pead olema natuke ettevaatlik, sest sa 701 00:28:14,260 --> 00:28:16,247 ei taha ühte sõrme minna mööda teiste 702 00:28:16,247 --> 00:28:18,080 sest üks string on pikem kui teised. 703 00:28:18,080 --> 00:28:21,380 Nii et sa lähed, et tahad, et kontrollida see eriline väärtus lõpus, null. 704 00:28:21,380 --> 00:28:24,017 Aga see tõesti on lõppu, nii lihtne. 705 00:28:24,017 --> 00:28:26,100 Ja ausalt öeldes, me ei vaja leiutada, et ratas. 706 00:28:26,100 --> 00:28:27,960 Siin on versioon kaks. 707 00:28:27,960 --> 00:28:32,910 Ja mida ma siin öelda, on see, et asemel võrreldakse s võrdub = t, 708 00:28:32,910 --> 00:28:38,964 Ma asemel ütlen, kui string võrdlemine s eralda t võrdub = 0. 709 00:28:38,964 --> 00:28:40,130 Nüüd, mis on string võrrelda? 710 00:28:40,130 --> 00:28:43,046 >> Selgub, et see on funktsioon, mis Kaasas C, kelle eesmärk elus 711 00:28:43,046 --> 00:28:44,650 on võrrelda kahe stringe. 712 00:28:44,650 --> 00:28:48,300 Ja sega võrrelda, kui me loeme oma man-leheküljelt või dokumente või CS50 713 00:28:48,300 --> 00:28:50,630 viide, siis lihtsalt öelda, et segada 714 00:28:50,630 --> 00:28:55,730 võrrelda naaseb kas negatiivne number või positiivne arv või null, 715 00:28:55,730 --> 00:28:57,660 kus null tähendab, et nad võrdsed. 716 00:28:57,660 --> 00:28:58,570 >> Nii lihtsalt oletustele. 717 00:28:58,570 --> 00:29:00,390 Mis võiks see tähendab, kui sega võrrelda naaseb 718 00:29:00,390 --> 00:29:02,110 negatiivne väärtus või positiivne väärtus? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 Sihtrühm: Suurem või väiksem. 721 00:29:04,285 --> 00:29:05,570 DAVID J. Humala: Jah, suurem või väiksem. 722 00:29:05,570 --> 00:29:08,640 Nii et kui sa tahad, et sortida kogu hunnik stringid dictionary-- 723 00:29:08,640 --> 00:29:12,975 kui me lõpuks alla road-- täiuslik funktsiooni kasutada potentsiaalselt 724 00:29:12,975 --> 00:29:15,850 sest see läheb teha Võrdluseks stringide jaoks, ja öelda 725 00:29:15,850 --> 00:29:20,060 sa ei tuleb enne b, või ei b tulema enne tähestikulises järjekorras. 726 00:29:20,060 --> 00:29:21,490 Me võime teha just seda. 727 00:29:21,490 --> 00:29:23,620 >> Ja teate, ma tegin veel ühe asi selles näites. 728 00:29:23,620 --> 00:29:26,870 Mida muud on muutunud kõrgema kuni selles põhiülesanne? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 Char *. 731 00:29:29,350 --> 00:29:31,150 Ja see on see, et teiste hädavale. 732 00:29:31,150 --> 00:29:33,750 Kogu selle aja, kui olete Enda kirjutatud string, 733 00:29:33,750 --> 00:29:38,350 meil on salaja ümberkirjutamist stringi char * et rõkkama tegelikult 734 00:29:38,350 --> 00:29:39,270 mõistab sind. 735 00:29:39,270 --> 00:29:42,450 >> Teisisõnu on CS50.h ja kui me lõpuks näha, 736 00:29:42,450 --> 00:29:45,950 tegime sünonüümi nimega string see on sama asi nagu char *. 737 00:29:45,950 --> 00:29:49,910 Ja nüüd, tean ainult seda, et * Selles kontekstis vähemalt 738 00:29:49,910 --> 00:29:51,286 tähendab aadress. 739 00:29:51,286 --> 00:29:52,210 >> Aadress, mida? 740 00:29:52,210 --> 00:29:56,390 Noh, see, et ma ütlesin char *, mitte int * või float *, 741 00:29:56,390 --> 00:30:00,820 tähendab, et char * on aadress char. 742 00:30:00,820 --> 00:30:06,770 Nii et see väike kast siin, aka string, on tõesti tüüpi char * 743 00:30:06,770 --> 00:30:10,490 mis on lihtsalt fancy viis öelda, Selles lahtris lähevad aadress. 744 00:30:10,490 --> 00:30:12,430 Ja mida see aadress viidata? 745 00:30:12,430 --> 00:30:13,780 Ilmselt char. 746 00:30:13,780 --> 00:30:16,410 >> Kuid võib absoluutselt on int * ja muid asju. 747 00:30:16,410 --> 00:30:20,790 Aga nüüd, char * on tõesti kõige lihtne ja üks huvi. 748 00:30:20,790 --> 00:30:23,310 Nii et see probleem läheb tõusma, kuigi uuesti. 749 00:30:23,310 --> 00:30:24,830 >> Oletame, ma avada seda programmi. 750 00:30:24,830 --> 00:30:27,670 Vaatame, kas me saame nüüd ennustada mis sul viga on see kood. 751 00:30:27,670 --> 00:30:31,140 Nii et selles programmis, kopeeri-0, ma olen läheb minna ja uuesti helistada 752 00:30:31,140 --> 00:30:34,190 GetString ja hoida väärtus s. 753 00:30:34,190 --> 00:30:38,800 >> Ja siis, miks ma teen seda, lihtsalt meeldetuletuseks alates nädalat varem? 754 00:30:38,800 --> 00:30:40,960 Me ei öelda, et getString mõnikord tagastab null. 755 00:30:40,960 --> 00:30:42,793 Mida see tähendab, kui GetString tagastab null? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 Midagi läks valesti. 758 00:30:46,034 --> 00:30:48,950 See tähendab ilmselt, et string on liiga suur, arvuti mälu. 759 00:30:48,950 --> 00:30:51,724 See juhtub, super, super, super harva, kuid see võib juhtuda. 760 00:30:51,724 --> 00:30:53,890 Me tahame kontrollida seda, ja see on kõik, mis me teeme. 761 00:30:53,890 --> 00:30:57,910 >> Sest me näeme nüüd, kui sa seda ei tee alustada kontrollides tavaliselt asju 762 00:30:57,910 --> 00:31:00,870 nagu null, siis võib tegelikult alustada minna 763 00:31:00,870 --> 00:31:03,106 aadressidele mälu, mis on kehtetu. 764 00:31:03,106 --> 00:31:05,980 Ja sa lähed alustada indutseerivate rohkem killustatust vigu. 765 00:31:05,980 --> 00:31:08,360 Või Mac või PC, lihtsalt põhjustada arvuti hanguda 766 00:31:08,360 --> 00:31:10,340 või programmi külmutada, potentsiaalselt. 767 00:31:10,340 --> 00:31:14,930 >> Nii et nüüd ma väita copy-0.c, et ma lähen kopeerige need stringid teel 768 00:31:14,930 --> 00:31:15,685 Line 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 Ja siis ma lähen Nõudluspunktile allosas 771 00:31:18,750 --> 00:31:21,430 siin, et ma lähen muuta ühte neist. 772 00:31:21,430 --> 00:31:22,330 >> Nii et seda märgata. 773 00:31:22,330 --> 00:31:24,370 Ma kutsun meie vana sõber strlen. 774 00:31:24,370 --> 00:31:28,960 Ja lihtsalt seletada inglise keeles mida see rida 34 läheb? 775 00:31:28,960 --> 00:31:32,480 Mida t sulg 0 esindavad vasakul. 776 00:31:32,480 --> 00:31:32,980 Jah. 777 00:31:32,980 --> 00:31:34,339 >> Sihtrühm: Esimene iseloomu t? 778 00:31:34,339 --> 00:31:35,880 DAVID J. Humala: esimene märk t. 779 00:31:35,880 --> 00:31:36,379 Ongi kõik. 780 00:31:36,379 --> 00:31:40,024 Esimene täht t, ma tahan määrata suure algustähega versioon 781 00:31:40,024 --> 00:31:41,190 ning esimene märk t. 782 00:31:41,190 --> 00:31:43,200 Nii et see on ära esimene täht. 783 00:31:43,200 --> 00:31:46,340 Ja siis, kõige viimane asi, mida ma teha Selles programmis on Väidan siin 784 00:31:46,340 --> 00:31:50,340 originaal, S, ja siin on koopia, t. 785 00:31:50,340 --> 00:31:54,610 >> Aga mis põhineb lugu me lihtsalt rääkida, mida stringid tegelikult on, 786 00:31:54,610 --> 00:31:57,520 Mis on line 28 tegelikult teeb ja mida on 787 00:31:57,520 --> 00:31:59,405 Saadud viga läheb olema ekraanil? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> Nii et esimene, esimene küsimus, 28. 790 00:32:03,500 --> 00:32:09,040 Mis on string t = s tõesti teed? 791 00:32:09,040 --> 00:32:16,430 Kui meil on vasakul pool siin string t = s; 792 00:32:16,430 --> 00:32:19,400 mis annab mulle üks kast siin ja üks kast siin. 793 00:32:19,400 --> 00:32:25,530 Ja arvan, et see aadress on 0x, oletame, 50 seekord meelevaldselt. 794 00:32:25,530 --> 00:32:28,847 Mida string t = s seda all kapuuts? 795 00:32:28,847 --> 00:32:30,340 >> Sihtrühm: [kuuldamatu] 796 00:32:30,340 --> 00:32:34,100 >> DAVID J. Humala: See salvestab mälu tegeleda seal, nii et 0x50 läheb sinna. 797 00:32:34,100 --> 00:32:37,980 Nii et kui nüüd, ma lähen esimesena märk t ja suurtäheks see, 798 00:32:37,980 --> 00:32:39,535 Mida ma tegelikult tegema, et s? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 Ma tõesti teevad sama asja, eks? 801 00:32:43,450 --> 00:32:47,680 Sest kui Aadress 0x50-- ja lihtsalt, ma ei ole palju ruumi laual siin 802 00:32:47,680 --> 00:32:51,750 kuid eeldame, et see on 0x50 siia alla, kuskil minu arvuti mällu. 803 00:32:51,750 --> 00:32:55,825 >> Ja ma olen näiteks Gabe väiketähtedega siin niimoodi. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 Ja ma olen öelnud t sulg 0 saab kapitaliseeritud. 806 00:33:01,980 --> 00:33:04,860 Noh, t sulg 0 on esimene täht t. 807 00:33:04,860 --> 00:33:07,840 Nii vähe g läheb saada suur G. Aga probleem 808 00:33:07,840 --> 00:33:09,410 on, mida see s ka punkt, et? 809 00:33:09,410 --> 00:33:10,300 >> Sihtrühm: sama. 810 00:33:10,300 --> 00:33:11,841 >> DAVID J. Humala: täpselt sama asi. 811 00:33:11,841 --> 00:33:16,342 Nii lihtne selgitus ehk isegi kui süntaks on veidi imelik. 812 00:33:16,342 --> 00:33:17,050 Nii et teeme seda. 813 00:33:17,050 --> 00:33:20,210 Tee copy-0 ja siis ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 Ütle midagi: Gabe. 816 00:33:24,110 --> 00:33:26,760 Ja kahjuks on mõlemad praeguseks on need kapitaliseeritud, 817 00:33:26,760 --> 00:33:29,500 kuid selle aluseks Põhjusel, et me oleme lihtsalt 818 00:33:29,500 --> 00:33:32,350 Nüüd tegelevad aadressid. 819 00:33:32,350 --> 00:33:36,470 >> Niisiis, kuidas me hakkame address-- no pun intended-- 820 00:33:36,470 --> 00:33:39,270 kuidas me hakkame tegelema selle probleemiga? 821 00:33:39,270 --> 00:33:44,400 Noh, copy1.c, asjad lähevad saada veidi keerulisem. 822 00:33:44,400 --> 00:33:49,310 Aga ma väita, kontseptuaalselt lihtne lahendus. 823 00:33:49,310 --> 00:33:50,852 >> Nii raske saada esimesel pilgul. 824 00:33:50,852 --> 00:33:53,560 Ei saa lihtne olema esimese kord, kui sa kirjutad seda, võib-olla, 825 00:33:53,560 --> 00:33:57,440 aga kui probleem on see, et lihtsalt teeme t = s lihtsalt 826 00:33:57,440 --> 00:33:59,694 koopiad aadress, mida, uuesti, kui ma ei vali teid, 827 00:33:59,694 --> 00:34:02,110 saab olema lahendus eest tegelikult kopeerimine string? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> Sihtrühm: me ilmselt kasutage silmus uuesti. 830 00:34:06,770 --> 00:34:06,890 >> DAVID J. Humala: Jah. 831 00:34:06,890 --> 00:34:08,390 Nii et me vajame silmus uuesti. 832 00:34:08,390 --> 00:34:11,800 Ja kuna kui me tahame, et kopeerida string s teise string, 833 00:34:11,800 --> 00:34:14,120 me ilmselt tahad seda teha tähthaaval. 834 00:34:14,120 --> 00:34:17,199 Aga probleem on, kui see on algselt s 835 00:34:17,199 --> 00:34:22,159 nüüd peame hakkama selgesõnaliselt eraldades mälu t. 836 00:34:22,159 --> 00:34:24,320 >> Teisisõnu, olgem tõmmata seda viimast korda. 837 00:34:24,320 --> 00:34:28,659 Kui see on string s = getString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 Ja paneme selle siia samuti. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 See on getString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 Ja siis on pilt midagi niimoodi saab olema nagu enne, 844 00:34:43,860 --> 00:34:44,360 g--b-e / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 See tundub natuke midagi sellist. 847 00:34:48,960 --> 00:34:53,650 Ja s seetõttu, et me nimetame seda 0x50, ja mis saab olema 51, 52. 848 00:34:53,650 --> 00:34:54,409 >> Nii et see on 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 Ja siis ma teen string t. 851 00:34:59,690 --> 00:35:02,450 Mälu, mis on lihtsalt läheb Andke mulle pisut kandiline niimoodi. 852 00:35:02,450 --> 00:35:04,080 Mis on oluline samm nüüd? 853 00:35:04,080 --> 00:35:09,870 Kui ma tahan kopeerida s arvesse t, mis tühi meil vaja täita siin? 854 00:35:09,870 --> 00:35:12,050 Või mida me peame teha kõrgel tasemel? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 Jah? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 Keegi? 859 00:35:17,020 --> 00:35:17,690 Jah. 860 00:35:17,690 --> 00:35:19,214 >> Sihtrühm: Peame [kuuldamatu]. 861 00:35:19,214 --> 00:35:21,380 DAVID J. Humala: Jah, me vaja täita see tühi. 862 00:35:21,380 --> 00:35:24,340 Ma ei saa kopeerida ja siis ära Gabe nimi 863 00:35:24,340 --> 00:35:28,120 kuni ma küsida operatsioonisüsteemi teise patakas mälu 864 00:35:28,120 --> 00:35:30,640 mis on vähemalt sama suur kui originaal. 865 00:35:30,640 --> 00:35:32,130 Nii et jätab meile küsimus. 866 00:35:32,130 --> 00:35:36,080 >> Kuidas küsida operatsioonisüsteemi ei lihtsalt lihtne vähe pointer-- 867 00:35:36,080 --> 00:35:38,530 nagu seda nimetatakse, aadress, pointer-- ei 868 00:35:38,530 --> 00:35:40,980 lihtsa väike kast nagu seda nimetatakse string? 869 00:35:40,980 --> 00:35:44,200 Kuidas küsida operatsioonisüsteemi süsteemi suur patakas mälu? 870 00:35:44,200 --> 00:35:48,430 Siiani olen ainult saanud, et tagasi kaudselt helistades getString. 871 00:35:48,430 --> 00:35:50,740 Niisiis, kuidas on getString isegi saada oma mälu? 872 00:35:50,740 --> 00:35:53,430 >> Noh, selgub, et seal on see teine ​​funktsioon siin 873 00:35:53,430 --> 00:35:55,160 et me nüüd seda kasutama hakata. 874 00:35:55,160 --> 00:35:59,780 Nüüd, see tundub nii rohkem segasena kui-- ja ma olen ainus, kes suudab näha Kui-- 875 00:35:59,780 --> 00:36:03,150 see rida tundub nii rohkem segasena siis peaks ta esimesel pilgul. 876 00:36:03,150 --> 00:36:04,650 Kuid olgem tease ta peale. 877 00:36:04,650 --> 00:36:07,950 >> Vasakul servas on mul char * t. 878 00:36:07,950 --> 00:36:13,280 Nii inglise, alustame sõnastada õige laused tehnilist kõnepruuki. 879 00:36:13,280 --> 00:36:19,757 Nii et see eraldab muutuja tüüpi char * nn t. 880 00:36:19,757 --> 00:36:21,090 Nüüd, mida see tegelikult tähendab? 881 00:36:21,090 --> 00:36:23,881 >> Noh, see tähendab, mida ma kavatsen panna see muutuja nimega t? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 Aadress char. 884 00:36:26,402 --> 00:36:28,360 Nii et see on lihtsalt lihtsam, mõistlikum viis 885 00:36:28,360 --> 00:36:29,930 kirjeldamiseks vasakul poolel. 886 00:36:29,930 --> 00:36:32,890 Nii et loob selle kasti siin ainult. 887 00:36:32,890 --> 00:36:34,760 Nii et paremal pool, arvatavasti läheb 888 00:36:34,760 --> 00:36:37,170 eraldada, et suurem patakas mälu, kuidas? 889 00:36:37,170 --> 00:36:38,340 Nii et olgem kiusupunn see peale. 890 00:36:38,340 --> 00:36:41,131 >> See on valdav esimesel pilgul aga mis sinu sees toimub siin? 891 00:36:41,131 --> 00:36:43,740 Esiteks, seal on malloc, mis Ilmselt on meie uus sõber 892 00:36:43,740 --> 00:36:45,450 "Mälu eraldada." 893 00:36:45,450 --> 00:36:49,560 Nii et see on argument möödutakse sinna, nii et see on päris suur argument. 894 00:36:49,560 --> 00:36:50,970 Nii et olgem kiusupunn see peale. 895 00:36:50,970 --> 00:36:53,410 >> strlen s loomulikult esindab selle-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 Sihtrühm: tähemärkide arv. 898 00:36:55,600 --> 00:36:56,710 DAVID J. Humala: Just tähemärkide arv s. 899 00:36:56,710 --> 00:36:59,040 Nii pikkus s, algse stringi. 900 00:36:59,040 --> 00:37:00,350 Nii G--b-e. 901 00:37:00,350 --> 00:37:02,320 Nii et see on ilmselt neli käesolevas asjas. 902 00:37:02,320 --> 00:37:05,485 Miks ma teen 1 pärast kutsudes strlen s? 903 00:37:05,485 --> 00:37:06,360 Sihtrühm: [kuuldamatu] 904 00:37:06,360 --> 00:37:07,590 DAVID J. Humala: Sest et eriline null iseloomu. 905 00:37:07,590 --> 00:37:11,260 Kui te küsite minult, mis on pikkus Gabe nimi, ma ütlen neli. 906 00:37:11,260 --> 00:37:14,480 All kapuuts, aga mul on vaja et viies bait null iseloomu. 907 00:37:14,480 --> 00:37:16,100 Nii et miks ma teen 1. 908 00:37:16,100 --> 00:37:21,730 >> Nüüd igaks juhuks teil on see arvutiprogrammi muud kui, ütleme, 909 00:37:21,730 --> 00:37:24,610 CS50 seade, kus suurus paalia 910 00:37:24,610 --> 00:37:26,350 võivad olla erinevad minu enda computer-- 911 00:37:26,350 --> 00:37:30,590 Tuleb välja, et ma seda nimetada operaator tähistamaks, küsige arvutis 912 00:37:30,590 --> 00:37:32,870 Mis on suurus char selles arvutis? 913 00:37:32,870 --> 00:37:37,400 >> Ja korrutades viis selles näiteks suurus paalia, mis 914 00:37:37,400 --> 00:37:40,440 kõige arvutid ainult üks, malloc 915 00:37:40,440 --> 00:37:44,830 läheb eraldada mulle see suur patakas mälu üle siin paremal. 916 00:37:44,830 --> 00:37:47,140 Ja see läheb return-- see on funktsioon-- nii et see on 917 00:37:47,140 --> 00:37:48,265 läheb tagasi mida? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 Sihtrühm: aadress? 920 00:37:51,830 --> 00:37:53,709 DAVID J. Humala: aadress, mis? 921 00:37:53,709 --> 00:37:55,250 Sihtrühm: mälu on jaotatud? 922 00:37:55,250 --> 00:37:56,450 DAVID J. Humala: Of mälu on eraldatud. 923 00:37:56,450 --> 00:37:59,189 Nii et ma ei tea, ausalt, kui see läheb lõpuks. 924 00:37:59,189 --> 00:38:01,480 Ma lähen ettepaneku see läheb lõpuks on 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Täiesti suvaline, kuid mujal kui 0x50, 927 00:38:06,009 --> 00:38:08,800 sest operatsioonisüsteem, mis Windows ja Mac OS minu jaoks teha, on 928 00:38:08,800 --> 00:38:11,230 veenduge, et see annab mulle erinevaid tükke RAM. 929 00:38:11,230 --> 00:38:14,210 >> Seega on see väärtus, kui see patakas mälu sattuda. 930 00:38:14,210 --> 00:38:16,060 Nii et see on see, mis jõuab siia, 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 Nii et nüüd selgelt, ma saan aru, et see ei ole sama kui seda 933 00:38:21,570 --> 00:38:23,960 sest nad osutavad eri tükkideks mälu. 934 00:38:23,960 --> 00:38:29,980 Nii et kui ma nüüd tegelikult soovid kopeerida seda aastal, teeme oma pakutud lahendus. 935 00:38:29,980 --> 00:38:36,870 >> Lähme, looma jaoks silmus, ja teha t sulg i saab s sulg i. 936 00:38:36,870 --> 00:38:39,760 Sest nüüd ma saan kasutada Selle massiivi-like märke, 937 00:38:39,760 --> 00:38:43,390 sest kuigi malloc väga üldiselt eraldab mind mälu 938 00:38:43,390 --> 00:38:45,290 mälu on lihtsalt külgnevas baiti. 939 00:38:45,290 --> 00:38:47,240 Bait, bait, bait, tagasi tagasi tagasi. 940 00:38:47,240 --> 00:38:50,030 >> Ma ei kindlasti programmeerijana seda ravida massiiv, mis 941 00:38:50,030 --> 00:38:55,090 tähendab, et ma ei kasuta seda lõpuks tuttav märkega vaid mõned nurksulgudes. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> Nii et lubage mul paus seal, sest see on palju korraga, isegi 944 00:39:00,020 --> 00:39:03,530 kuigi põhiidee sulgege on, et string, kõik see aeg, 945 00:39:03,530 --> 00:39:05,550 ei ole uute andmete tüüp iseenesest. 946 00:39:05,550 --> 00:39:10,150 See on lihtsalt nn pointer, aadress iseloomu, 947 00:39:10,150 --> 00:39:12,650 mis tähendab lihtsalt, et see number et inimese konventsiooni 948 00:39:12,650 --> 00:39:15,350 kaldume kirjutada nagu 0x midagi. 949 00:39:15,350 --> 00:39:18,590 >> Aga see on lihtsalt number, nagu 33 Oxford Street, 950 00:39:18,590 --> 00:39:20,530 mis juhtub olema CS hoone aadress. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 Kõik küsimused on need andmed? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 Jah? 955 00:39:25,289 --> 00:39:28,530 >> Sihtrühm: Miks me kontrollida t võrdub null? 956 00:39:28,530 --> 00:39:30,740 >> DAVID J. Humala: Miks me kontrollida t võrdub null? 957 00:39:30,740 --> 00:39:33,250 Kui me loeme documentation-- suur question-- jaoks malloc, 958 00:39:33,250 --> 00:39:37,020 see saab öelda trahvi print, mõnikord malloc võivad naasta null, 959 00:39:37,020 --> 00:39:38,080 nagu getString. 960 00:39:38,080 --> 00:39:41,820 Ja tõepoolest, getString tagastab null kui omakorda malloc tagastab null, 961 00:39:41,820 --> 00:39:43,130 sest getString kasutab malloc. 962 00:39:43,130 --> 00:39:46,400 >> Ja see võib juhtuda, kui OS, Mac OS, Windows, mis iganes, on lihtsalt 963 00:39:46,400 --> 00:39:48,130 mälu jaoks. 964 00:39:48,130 --> 00:39:49,820 Nii et see, mis juhtus seal. 965 00:39:49,820 --> 00:39:52,910 >> Ja lubage mul esile üks teine ​​asi et võib lihtsalt löök meelt 966 00:39:52,910 --> 00:39:55,100 või täielikult olla liiga kaugele üle joone. 967 00:39:55,100 --> 00:39:59,770 Aga las ma tõmba sama loop kopeerimise, 968 00:39:59,770 --> 00:40:05,480 mis hetk tagasi tagasikutsumine see. t sulg i saab s sulg i. 969 00:40:05,480 --> 00:40:06,740 >> Kena ja kasutajasõbralik. 970 00:40:06,740 --> 00:40:09,330 Tundub nagu teine ​​nädal uuesti. 971 00:40:09,330 --> 00:40:14,920 Aga see variant tegelikult saab kirjutada kui see, mis tundub segasena. 972 00:40:14,920 --> 00:40:18,280 See on tehnika, mida nimetatakse pointer aritmeetika, aadress aritmeetika. 973 00:40:18,280 --> 00:40:19,600 Aga miks see toimib? 974 00:40:19,600 --> 00:40:22,220 >> Nüüd tüütult, autorid C otsustanud kasutada 975 00:40:22,220 --> 00:40:25,070 * sümbol erinevatel eesmärkidel. 976 00:40:25,070 --> 00:40:29,020 Me oleme näinud seda kasutatakse juba korra, char *, mis tähendab "anna mulle muutuja 977 00:40:29,020 --> 00:40:31,210 et läheb sisalda aadress char. " 978 00:40:31,210 --> 00:40:33,990 Nii char * selles kontekstis tähendab "anna mulle muutuja." 979 00:40:33,990 --> 00:40:40,050 >> Kahjuks, kui te kasutate * ilma sõna ees on, nagu paalia, 980 00:40:40,050 --> 00:40:41,905 see on nüüd nimetatakse dereference operaator. 981 00:40:41,905 --> 00:40:43,530 Ja me näeme rohkem seda enne pikk. 982 00:40:43,530 --> 00:40:44,930 Aga see tähendab lihtsalt "minna." 983 00:40:44,930 --> 00:40:49,070 See on nagu öelda, kui keegi andis mulle tükk paberit "33 Oxford Street," 984 00:40:49,070 --> 00:40:53,830 kui ma teen "* 33 Oxford Street," mis tähendab, et "Minna mööda teed CS hoone." 985 00:40:53,830 --> 00:40:57,220 >> Nii * tähendab lihtsalt sinna minna, kui seal ei ole sõna selle ees. 986 00:40:57,220 --> 00:40:59,100 Mis on t, peab olema selge? 987 00:40:59,100 --> 00:41:03,250 t on aadress tüki mälu, mis anti mulle tagasi. 988 00:41:03,250 --> 00:41:06,650 s on aadress, mida, peab olema selge, näites, me arutame, 989 00:41:06,650 --> 00:41:07,500 väikseid Gabe? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 s on aadress of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 Sihtrühm: string. 994 00:41:12,460 --> 00:41:14,126 DAVID J. Humala: Of Gabe esialgne nimi. 995 00:41:14,126 --> 00:41:16,660 Nii et see on aadress see patakas mälu. 996 00:41:16,660 --> 00:41:22,220 Nii et kui ma ütlen, t + i-- i, teate, on just meie vana sõber. 997 00:41:22,220 --> 00:41:24,770 See on lihtsalt indeks muutuja mis on iterating nullist ülesse 998 00:41:24,770 --> 00:41:26,960 Lisa pikkus string s. 999 00:41:26,960 --> 00:41:30,367 Nii et see saab olema null, üks, siis kaks, siis kolm, siis neli. 1000 00:41:30,367 --> 00:41:33,200 Nii et olgem koguda neid uusi Scratch-like puzzle tükki, kui soovite, 1001 00:41:33,200 --> 00:41:36,140 kuigi jällegi süntaksi on märksa kauge kui Scratch. 1002 00:41:36,140 --> 00:41:39,522 Nii t on aadress + i läheb mulle 1003 00:41:39,522 --> 00:41:42,480 arvu, kuna need on kõik numbrid, et oleme olnud joonistus nagu hex. 1004 00:41:42,480 --> 00:41:43,560 Aga nad on lihtsalt numbrid. 1005 00:41:43,560 --> 00:41:49,960 >> Nii et kui aadress t me ütlesime oli 0x88, mis on 0x88 pluss null. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Isegi kui sa ei ole mugav kuuskant veel, pakkuge. 1008 00:41:53,980 --> 00:41:54,410 >> Sihtrühm: originaal. 1009 00:41:54,410 --> 00:41:55,850 >> DAVID J. Humala: Ikka 0x88. 1010 00:41:55,850 --> 00:41:58,910 Mis siis * 0x88 tähendab? 1011 00:41:58,910 --> 00:42:02,670 See tähendab, "minna", mis tähendab efektiivselt, "panna oma sõrme siin." 1012 00:42:02,670 --> 00:42:06,930 Ja nüüd paremas servas see väljend, * ja siis Sulgudes, 1013 00:42:06,930 --> 00:42:11,586 s + i tähendab s, mis on tegeleda siin on vähe g. 1014 00:42:11,586 --> 00:42:16,220 s + 0 on muidugi, s, sõltumata s. 1015 00:42:16,220 --> 00:42:21,230 >> Nüüd, see * s, mis nagu * 33 Oxford Street tähendab minna aadressile 1016 00:42:21,230 --> 00:42:22,010 s. 1017 00:42:22,010 --> 00:42:24,170 Nii et siin on see sõrme, parema käe. 1018 00:42:24,170 --> 00:42:26,050 Nii et mida ma nüüd kopeerida, milliseid? 1019 00:42:26,050 --> 00:42:30,260 Asi on õige, mis on Gabe, vähe g siin sisseveo siin. 1020 00:42:30,260 --> 00:42:32,750 >> Ja nii et kõnealuse esimese iteratsiooni silmus, 1021 00:42:32,750 --> 00:42:36,200 kui ettepanek, kuigi see näeb hull keerulisem kui midagi 1022 00:42:36,200 --> 00:42:42,110 Me oleme näinud, on lihtsalt öeldes minema siit ja kopeeri see märk siin. 1023 00:42:42,110 --> 00:42:44,700 See annab sulle kaardi mõlemas kohas. 1024 00:42:44,700 --> 00:42:46,130 >> Ja me näeme palju seda. 1025 00:42:46,130 --> 00:42:50,600 Aga nüüd, loodan, on lihtsalt mõningaid neist põhiideed. 1026 00:42:50,600 --> 00:42:53,550 Ja tõepoolest, vaatame üks lõplik programm siin 1027 00:42:53,550 --> 00:42:57,480 ja siis lubas claymation, mis muudab kõik on korras. 1028 00:42:57,480 --> 00:42:57,980 Olgu. 1029 00:42:57,980 --> 00:43:01,680 Nii et lubage mul avada up-- sinna läheme. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 Nii et mulle-- tuleme tagasi Selle pildi enne pikk. 1032 00:43:05,440 --> 00:43:08,360 Lubage mul avada see viimane näide on siin. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> Nii et siin on super, super programm, millega saavutatakse 1035 00:43:12,710 --> 00:43:15,050 midagi, elu, mis teeb järgmise. 1036 00:43:15,050 --> 00:43:18,740 Kõigepealt kinnitab kahe muutuja x ja y, mis ei ole numbrid seekord 1037 00:43:18,740 --> 00:43:19,240 per se. 1038 00:43:19,240 --> 00:43:20,448 Nad ei ole täisarvud, per se. 1039 00:43:20,448 --> 00:43:22,899 Nad on ilmselt int *. 1040 00:43:22,899 --> 00:43:25,690 Nii lihtsalt keegi, mida see tähendab Kui teie andmed tüüp, oma muutuja, 1041 00:43:25,690 --> 00:43:26,860 on tüüpi int * star? 1042 00:43:26,860 --> 00:43:30,240 See on aadress, int. 1043 00:43:30,240 --> 00:43:31,990 >> Nii et ma olen ei tea, kus ta on veel. 1044 00:43:31,990 --> 00:43:35,150 See tähendab lihtsalt "panna lõpuks aadress int siin. " 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, kus see on mälu, aadress läheb sinna. 1046 00:43:38,340 --> 00:43:40,200 Ja see, mida y on saab olema, samuti. 1047 00:43:40,200 --> 00:43:44,920 >> Kui ma nüüd ütlen x = malloc (sizeof (int)) see on fancy viis öelda, 1048 00:43:44,920 --> 00:43:49,000 hey operatsioonisüsteemi kaudu malloc, anna mulle piisavalt mälu suurus 1049 00:43:49,000 --> 00:43:52,370 kohta int, mis on ilmselt saab olema 32 bitti või neli baiti. 1050 00:43:52,370 --> 00:43:53,680 >> Mis siis malloc tagasi? 1051 00:43:53,680 --> 00:43:55,250 Malloc naaseb aadress. 1052 00:43:55,250 --> 00:43:57,020 Mis siis hakka salvestatud x? 1053 00:43:57,020 --> 00:44:00,600 Aadress patakas mälu, neli baiti, et malloc 1054 00:44:00,600 --> 00:44:03,360 leidsin just minu jaoks, küsides operatsioonisüsteemi. 1055 00:44:03,360 --> 00:44:08,240 >> Nüüd vahepeal joon neli siin * x = 42. 1056 00:44:08,240 --> 00:44:09,990 Lihtsalt olla kindel, Mis toimub seal? 1057 00:44:09,990 --> 00:44:11,530 Vasakul servas, * x. 1058 00:44:11,530 --> 00:44:13,610 see on nagu * 33 Oxford Street. 1059 00:44:13,610 --> 00:44:15,523 Nii * x tähendab mida? 1060 00:44:15,523 --> 00:44:16,450 >> Sihtrühm: Mine. 1061 00:44:16,450 --> 00:44:17,908 >> DAVID J. Humala: Mine aadressile. 1062 00:44:17,908 --> 00:44:20,466 Kus iganes see patakas mälu on, minna ta. 1063 00:44:20,466 --> 00:44:21,979 Ja pane mida seal ilmselt? 1064 00:44:21,979 --> 00:44:22,520 Sihtrühm: 42. 1065 00:44:22,520 --> 00:44:23,580 DAVID J. Humala: 42. 1066 00:44:23,580 --> 00:44:25,650 Olgu, * y, sama mõte. 1067 00:44:25,650 --> 00:44:26,860 Mine aadressile y. 1068 00:44:26,860 --> 00:44:31,740 Pane number 13 sinna, aga mis on y hetkel? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 Sihtrühm: Ei ole mälu y. 1071 00:44:34,630 --> 00:44:35,710 DAVID J. Humala: Ei ole mälu y. 1072 00:44:35,710 --> 00:44:38,215 Mis siis y ilmselt sisaldab, nagu me oleme öelnud? 1073 00:44:38,215 --> 00:44:38,520 >> Sihtrühm: prügi. 1074 00:44:38,520 --> 00:44:39,480 >> DAVID J. Humala: Mõned prügi väärtus. 1075 00:44:39,480 --> 00:44:41,320 Nüüd, prügi väärtus on ikka number. 1076 00:44:41,320 --> 00:44:43,160 See võib siiski olla eksikombel aadress. 1077 00:44:43,160 --> 00:44:45,160 See on, nagu oleks keegi kritseldas midagi ette, 1078 00:44:45,160 --> 00:44:48,002 ja ma tõlgendas seda nii, mõned hoone mööda tänavat. 1079 00:44:48,002 --> 00:44:50,460 Ja kui sa lihtsalt proovida minna mõned hoone ei kuulu teile, 1080 00:44:50,460 --> 00:44:53,710 või mõned patakas mälu sul ei antud, halbu asju võib juhtuda. 1081 00:44:53,710 --> 00:44:57,740 Arvuti võib põrgata, või mõne muu määratlemata käitumine võib juhtuda. 1082 00:44:57,740 --> 00:45:01,310 >> Nii intro, siis on Binky on see. 1083 00:45:01,310 --> 00:45:04,290 Mäletan veel, 20 mõned paaritu aastat hiljem 1084 00:45:04,290 --> 00:45:07,200 kus ma olin, kui ma lõpuks aru sellest. 1085 00:45:07,200 --> 00:45:09,520 >> Mis tähendab, kui sa siit lahkuda kolme minutiga 1086 00:45:09,520 --> 00:45:12,170 ja arvan, et ma seda ei tee mõista viiteid, mõistma 1087 00:45:12,170 --> 00:45:14,410 Olen mäletatakse 20 aastatel mõned hull põhjus 1088 00:45:14,410 --> 00:45:17,140 millal ja miks ta lõpuks vajunud aastal, kes istub minu õpetamise 1089 00:45:17,140 --> 00:45:19,501 mehe, Nishat Mehta sisse tagasi Eliot söögisaal. 1090 00:45:19,501 --> 00:45:21,250 Nüüd ma olen meelde seda sellepärast, et see oli 1091 00:45:21,250 --> 00:45:23,920 üks teemadest I, Eelkõige maadelnud. 1092 00:45:23,920 --> 00:45:26,470 Ja siis lõpuks klõpsatud, nagu ma julgen öelda, palju teemasid 1093 00:45:26,470 --> 00:45:27,460 lõpuks teen. 1094 00:45:27,460 --> 00:45:32,590 Ja nüüd teha, et tunda kõiki õnnelikumad ja enam veenev, 1095 00:45:32,590 --> 00:45:35,360 Võtame lõplik pilk meie viimase kolme minuti siin Binky, 1096 00:45:35,360 --> 00:45:37,675 meie sõber Nick Parlante Stanfordi. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [VIDEO PLAYBACK] 1099 00:45:41,580 --> 00:45:42,750 >> Hei, Binky. 1100 00:45:42,750 --> 00:45:43,500 Ärka üles! 1101 00:45:43,500 --> 00:45:45,960 On aeg pointer lõbus. 1102 00:45:45,960 --> 00:45:47,012 >> Mis see on? 1103 00:45:47,012 --> 00:45:48,723 Lugege vihjeid? 1104 00:45:48,723 --> 00:45:50,580 Oh, tüdruk! 1105 00:45:50,580 --> 00:45:53,563 >> Noh, alustada, ma arvan, et me oleme läheb vaja paar suunanäitajaks. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 See kood eraldab kaks suunanäitajaks, mis võib tuua täisarvud. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 Noh, ma näen kaks suunanäitajaks, kuid nad ei tundu olevat osutades midagi. 1110 00:46:02,140 --> 00:46:02,980 >> -Just. 1111 00:46:02,980 --> 00:46:05,100 Esialgu viiteid ei viita midagi. 1112 00:46:05,100 --> 00:46:08,030 Asju, mida nad osutavad kutsutakse pointees ja milles neid on 1113 00:46:08,030 --> 00:46:09,370 Eraldi etapis. 1114 00:46:09,370 --> 00:46:10,220 >> Oh, jah, muidugi. 1115 00:46:10,220 --> 00:46:10,950 Ma teadsin seda. 1116 00:46:10,950 --> 00:46:12,385 Pointees eraldi. 1117 00:46:12,385 --> 00:46:14,315 Er, siis kuidas sa jaotada pointee? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 Noh, see kood eraldab uus täisarv pointee, 1121 00:46:18,970 --> 00:46:20,950 ja see osa komplekti x juhtida seda. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> Hei, mis näeb parem välja. 1124 00:46:23,230 --> 00:46:25,060 Nii et see midagi teha. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 Tulen dereference pointer x salvestada number 42 arvesse oma pointee. 1127 00:46:30,455 --> 00:46:32,830 Sel trikk, ma vajan oma Magic Wand of Dereferencing. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> Su Magic Wand of Dereferencing? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 See-- see on suurepärane. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -See Ongi kood välja näeb. 1134 00:46:41,080 --> 00:46:44,110 Ma lihtsalt loodud number, ja [POP] 1135 00:46:44,110 --> 00:46:44,700 >> Hei, vaata. 1136 00:46:44,700 --> 00:46:46,140 Seal ta läheb. 1137 00:46:46,140 --> 00:46:50,980 >> -Nii Teed dereference kohta x järgmiselt Nool juurdepääsu oma pointee. 1138 00:46:50,980 --> 00:46:53,160 Sel juhul poodi 42 sinna. 1139 00:46:53,160 --> 00:46:57,710 Hei proovige seda salvestada number 13 kaudu teiste osutiga, y. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 Ma lihtsalt lähen üle siin y, ja saada number 13 loodud. 1142 00:47:03,270 --> 00:47:07,930 Ja siis võtta võlukepp Dereferencing ja lihtsalt [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> Oh! 1144 00:47:08,960 --> 00:47:09,500 >> Oh, hei! 1145 00:47:09,500 --> 00:47:11,090 See ei õnnestunud. 1146 00:47:11,090 --> 00:47:15,630 Ütle, Binky, ma ei usu, dereferencing y on hea mõte, sest sa tead, 1147 00:47:15,630 --> 00:47:17,850 loomise pointee on eraldi etapis. 1148 00:47:17,850 --> 00:47:20,450 Ja ma ei arva, et me kunagi tegime seda. 1149 00:47:20,450 --> 00:47:21,480 >> Hea punkt. 1150 00:47:21,480 --> 00:47:21,980 Jah. 1151 00:47:21,980 --> 00:47:25,680 Me eraldatud pointer y, kuid me ei sea see käsk pointee. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> Väga tähelepanelik. 1154 00:47:28,616 --> 00:47:30,240 Hei, sa näed hea välja seal, Binky. 1155 00:47:30,240 --> 00:47:33,400 Kas sa seda parandada nii, et y punktid Lisa sama pointee kui x? 1156 00:47:33,400 --> 00:47:34,000 >> Muidugi. 1157 00:47:34,000 --> 00:47:36,780 Ma kasutan oma võlukepiga of Pointer määramine. 1158 00:47:36,780 --> 00:47:38,740 >> Kas see saab olema probleem nagu enne? 1159 00:47:38,740 --> 00:47:39,240 Ei. 1160 00:47:39,240 --> 00:47:40,660 See ei puuduta pointees. 1161 00:47:40,660 --> 00:47:44,450 See lihtsalt muutub üks pointer viitavad sama asi, mis veel. 1162 00:47:44,450 --> 00:47:45,450 >> Oh, ma näen. 1163 00:47:45,450 --> 00:47:48,200 Nüüd y osutab samas kohas kui x. 1164 00:47:48,200 --> 00:47:48,910 Nii et oodake. 1165 00:47:48,910 --> 00:47:49,950 Nüüd, y on fikseeritud. 1166 00:47:49,950 --> 00:47:51,120 See on pointee. 1167 00:47:51,120 --> 00:47:54,510 Nii et võite proovida Wand of Dereferencing uuesti saata 13 üle. 1168 00:47:54,510 --> 00:47:56,510 >> -Uh, OK. 1169 00:47:56,510 --> 00:47:58,160 Siin see läheb. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> Hei, vaata seda. 1171 00:47:59,340 --> 00:48:00,750 Nüüd dereferencing tööde y. 1172 00:48:00,750 --> 00:48:04,991 Ja kuna viiteid jagavad et üks pointee nad mõlemad näha 13. 1173 00:48:04,991 --> 00:48:05,490 Jah. 1174 00:48:05,490 --> 00:48:06,870 Jagamine, mida iganes. 1175 00:48:06,870 --> 00:48:08,820 Nii me siis vahetada kohad nüüd? 1176 00:48:08,820 --> 00:48:09,440 >> Oh, vaata. 1177 00:48:09,440 --> 00:48:10,830 Meil on aeg otsas. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> -Lihtsalt Mäletan kolm pointer reegleid. 1180 00:48:13,530 --> 00:48:16,560 Number One põhistruktuur on see, et teil on osuti, 1181 00:48:16,560 --> 00:48:18,680 ja see juhib üle pointee. 1182 00:48:18,680 --> 00:48:20,640 Aga osuti ja pointee on eraldi, 1183 00:48:20,640 --> 00:48:22,610 ja üldine viga on loodud pointer, 1184 00:48:22,610 --> 00:48:25,000 aga unustada, et anda sellele pointee. 1185 00:48:25,000 --> 00:48:28,170 >> Number kaks, pointer dereferencing algab pointer 1186 00:48:28,170 --> 00:48:31,050 ja järgib oma kursorit üle juurdepääsu oma pointee. 1187 00:48:31,050 --> 00:48:33,400 Nagu me kõik teame, on see ainult siis, kui on olemas 1188 00:48:33,400 --> 00:48:36,270 pointee, mis liiki saab tagasi Reegel number üks. 1189 00:48:36,270 --> 00:48:39,000 >> Number kolm, pointer ülesande võtab üks pointer 1190 00:48:39,000 --> 00:48:42,320 ja muudab seda, et see osutaks Sama pointee teise osuti. 1191 00:48:42,320 --> 00:48:44,160 Nii et pärast üleminekut, kaks viiteid 1192 00:48:44,160 --> 00:48:45,910 toob välja sama pointee. 1193 00:48:45,910 --> 00:48:47,990 Mõnikord seda nimetatakse jagamine. 1194 00:48:47,990 --> 00:48:49,740 Ja see kõik on see, tõesti. 1195 00:48:49,740 --> 00:48:50,277 Nägemist nüüd. 1196 00:48:50,277 --> 00:48:51,110 [END VIDEO PLAYBACK] 1197 00:48:51,110 --> 00:48:52,568 DAVID J. Humala: Ongi CS50. 1198 00:48:52,568 --> 00:48:55,110 Me näeme järgmisel nädalal. 1199 00:48:55,110 --> 00:48:56,064