1 00:00:00,000 --> 00:00:03,395 >> [Muusika mängib] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 DAVID J. Humala: See on nagu uustulnuk seminar täna. 4 00:00:13,280 --> 00:00:14,060 OKEI. 5 00:00:14,060 --> 00:00:15,024 Nii väga vihmane välja. 6 00:00:15,024 --> 00:00:17,690 See kipub juhtuma kolmapäeviti kuid kõik suuremad võimalused 7 00:00:17,690 --> 00:00:18,700 küsimustele täna. 8 00:00:18,700 --> 00:00:22,210 Nii alustame tegelikult film vaid hetkeks. 9 00:00:22,210 --> 00:00:24,560 Aga hakkame suurejooneliselt nagu alati. 10 00:00:24,560 --> 00:00:28,000 >> See on CS50 ja see on nädala lõpuks 4. 11 00:00:28,000 --> 00:00:30,820 Nii et kui te olete kunagi vaatasin TV ja filmi, kus 12 00:00:30,820 --> 00:00:34,690 seal on mõned arvuti eksperdid ja politsei või FBI või mõni asutus 13 00:00:34,690 --> 00:00:36,930 üritab jõuda mõned Vastane, noh, sa oled 14 00:00:36,930 --> 00:00:40,850 ilmselt kuulnud väljendit "parandada" kusjuures see tehnik kuidagi 15 00:00:40,850 --> 00:00:44,750 võluväel suumib lõpmatult kaugele näha kurjategijad 16 00:00:44,750 --> 00:00:48,640 identiteedi või numbrimärk isegi virvendama peegel 17 00:00:48,640 --> 00:00:50,390 või helk kellegi silma. 18 00:00:50,390 --> 00:00:55,196 Nii tõesti, võtame pilk mõned sellised stseenid Hollywood. 19 00:00:55,196 --> 00:00:55,862 [Video taasesitus] 20 00:00:55,862 --> 00:00:59,243 -OK, Nüüd lähme hea vaadata teid. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Hoia seda. 23 00:01:07,415 --> 00:01:08,267 Jookse, et tagasi. 24 00:01:08,267 --> 00:01:09,121 >> -Oota hetk. 25 00:01:09,121 --> 00:01:11,300 Mine õige. 26 00:01:11,300 --> 00:01:12,209 >> -On, Külmutada, et. 27 00:01:12,209 --> 00:01:12,750 -Täisekraan. 28 00:01:12,750 --> 00:01:13,558 -OK, Külmutada, et. 29 00:01:13,558 --> 00:01:14,820 -Tighten Üles, et sa? 30 00:01:14,820 --> 00:01:16,530 -Vector Sisse, et mees poolt tagarattal. 31 00:01:16,530 --> 00:01:19,400 -ZOOM Aastal siinsamas kohapeal. 32 00:01:19,400 --> 00:01:22,846 Hindajaks õige varustus, pilt võiks laiendada ja teritatud. 33 00:01:22,846 --> 00:01:24,065 -Mis see on? 34 00:01:24,065 --> 00:01:25,600 -See Lisaseadmete programmi. 35 00:01:25,600 --> 00:01:26,860 -Kas Sa selge, et kuni kõik? 36 00:01:26,860 --> 00:01:27,890 Ma ei tea. 37 00:01:27,890 --> 00:01:29,050 Olgem tõsta see. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Osa A6. 39 00:01:31,575 --> 00:01:33,642 >> -Ma Suurendanud detail, and-- Ma arvan, et 40 00:01:33,642 --> 00:01:35,433 piisavalt suurendada, vabastage see minu ekraanil. 41 00:01:35,433 --> 00:01:37,080 -Ma Suurem peegeldus oma silmaga. 42 00:01:37,080 --> 00:01:38,830 >> Vaatame käivitada läbi video parandamiseks. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Saab parandada seda? 44 00:01:40,100 --> 00:01:41,875 >> -Oota. 45 00:01:41,875 --> 00:01:44,010 >> -Ma Olen töötanud selles peegeldus. 46 00:01:44,010 --> 00:01:44,995 >> -Someone Peegeldus. 47 00:01:44,995 --> 00:01:45,495 -Reflection. 48 00:01:45,495 --> 00:01:47,399 -On See peegeldus mehe nägu. 49 00:01:47,399 --> 00:01:48,065 -The Peegeldus. 50 00:01:48,065 --> 00:01:48,981 -On See peegeldus. 51 00:01:48,981 --> 00:01:50,600 -ZOOM In peeglisse. 52 00:01:50,600 --> 00:01:52,712 -Sa Ei näe peegeldus. 53 00:01:52,712 --> 00:01:54,350 -Kas Sa parema pildi siit? 54 00:01:54,350 --> 00:01:55,370 -Kas Teil suurendada teda siin? 55 00:01:55,370 --> 00:01:56,210 -Kas Teil suurendada seda? 56 00:01:56,210 --> 00:01:56,900 Kas teil suurendada seda? 57 00:01:56,900 --> 00:01:57,870 >> -Kas Me parandada seda? 58 00:01:57,870 --> 00:01:58,717 >> -Kas Teil suurendada seda? 59 00:01:58,717 --> 00:02:00,050 Hoia teisel, ma tõsta. 60 00:02:00,050 --> 00:02:00,924 -ZOOM In uksele. 61 00:02:00,924 --> 00:02:01,700 -Times 10. 62 00:02:01,700 --> 00:02:02,586 -zoom. 63 00:02:02,586 --> 00:02:03,490 -Sisse kolima. 64 00:02:03,490 --> 00:02:03,990 -Rohkem. 65 00:02:03,990 --> 00:02:04,690 Oota, peatus. 66 00:02:04,690 --> 00:02:05,190 -Stop. 67 00:02:05,190 --> 00:02:05,970 -Pause Ta. 68 00:02:05,970 --> 00:02:09,460 -Keerake Juures 75 kraadi ümber vertikaalse, palun. 69 00:02:09,460 --> 00:02:10,962 -Stop. 70 00:02:10,962 --> 00:02:14,040 Mine tagasi osa umbes ukse uuesti. 71 00:02:14,040 --> 00:02:15,860 >> -Got Pildi tugevdaja, mis võib bitmap? 72 00:02:15,860 --> 00:02:18,776 >> Hei, äkki saame kasutada Pradeep Sen meetod näha arvesse aknad. 73 00:02:18,776 --> 00:02:20,372 -See Tarkvara on nüüdisaegse. 74 00:02:20,372 --> 00:02:21,845 >> -The Eigenvalue on välja lülitatud. 75 00:02:21,845 --> 00:02:24,300 >> Hindajaks õigus kombinatsioon algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> -Ta Võetud kõrvaldamine algoritme järgmisele tasemele, 77 00:02:26,755 --> 00:02:28,730 ja ma ei saa neid kasutada suurendada selle foto. 78 00:02:28,730 --> 00:02:31,286 >> -Lock Kohta ja suurendada z-telje. 79 00:02:31,286 --> 00:02:32,560 >> -Enhance. 80 00:02:32,560 --> 00:02:33,100 >> -Enhance. 81 00:02:33,100 --> 00:02:33,600 >> -Enhance. 82 00:02:33,600 --> 00:02:34,960 -Freeze Ja parandada. 83 00:02:34,960 --> 00:02:37,180 >> [Taasesituse lõpetamiseks] 84 00:02:37,180 --> 00:02:41,160 >> DAVID J. Humala: Okei, nii et Kõigil neil on tegelikult sõnu. 85 00:02:41,160 --> 00:02:44,450 Nad lihtsalt nöörile kokku nii, et see ei ole tegelikult mõistlik. 86 00:02:44,450 --> 00:02:48,400 Ja tegelikult, CS50 ja kursusi, nagu see kipub rikud palju TV ja filmid 87 00:02:48,400 --> 00:02:48,900 Sinu jaoks. 88 00:02:48,900 --> 00:02:52,330 Sest kui need arvuti eksperdid on surmamise tingimused ja öelda 89 00:02:52,330 --> 00:02:56,860 väljamõeldud asju eigenvectors ja z-telg, 90 00:02:56,860 --> 00:02:59,572 ja mis tahes hulk teisi tegelikult rohkem tehnilisi tingimusi, 91 00:02:59,572 --> 00:03:02,030 nad tõesti lihtsalt nöörile sõnad koos liigagi tihti. 92 00:03:02,030 --> 00:03:05,020 Kas see on üks meie lootusi, on see, kui kõrvaltoime kursustel 93 00:03:05,020 --> 00:03:08,245 niimoodi, hakkab rohkem inimesi Kogu maailmas on võimalik lööma 94 00:03:08,245 --> 00:03:12,040 ja lihtsalt kunagi nii veidi mõjutada kvaliteedi ja täpsuse filmid? 95 00:03:12,040 --> 00:03:14,350 >> Tegelikult võtame pilk reaalsus. 96 00:03:14,350 --> 00:03:18,070 Nii et siin on personal foto Mary, üks meie õpetamise stipendiaatide. 97 00:03:18,070 --> 00:03:20,050 Ja oletame, et ta on kahtlustatakse midagi. 98 00:03:20,050 --> 00:03:23,730 Ja veel, seal kumama mõned tõend oma silmaga, 99 00:03:23,730 --> 00:03:25,480 või peegeldus tema prillid. 100 00:03:25,480 --> 00:03:30,760 Noh, kui me teeme täpselt nii, nagu filmid ettepaneku, milles me zoom ja "parandada", 101 00:03:30,760 --> 00:03:34,080 see on, kui palju teavet on Mary nägu 102 00:03:34,080 --> 00:03:36,795 kui pildistate selle algse resolutsiooni. 103 00:03:36,795 --> 00:03:39,120 >> Ja tegelikult, näed neid dots. 104 00:03:39,120 --> 00:03:41,900 Ja need, mis on piksleid, P-I-X-E-L-S, 105 00:03:41,900 --> 00:03:45,740 mis on lihtsalt ruudu tavaliselt mis on dot et komponeerib pildi. 106 00:03:45,740 --> 00:03:49,200 Ja juba järgmisel päeval ja tegelikult isegi täna mõned tänapäeva LED televiisorid 107 00:03:49,200 --> 00:03:51,950 või LCD-telerid, kui sul üks oma toas või kodus, 108 00:03:51,950 --> 00:03:55,100 kui sa tahad minna super lähedal, ja eriti kui see on veidi vanem TV, 109 00:03:55,100 --> 00:03:58,760 saab vist isegi need täpid ja see on, mida kirjutada pildi. 110 00:03:58,760 --> 00:04:00,980 >> Ja ei ole enam teavet kui see. 111 00:04:00,980 --> 00:04:05,400 Võiksime "parandada", selles mõttes, silumiseks asjad üle ja omamoodi 112 00:04:05,400 --> 00:04:09,040 aimates selline, omamoodi mida värv peaks olema kõrval Mary silma 113 00:04:09,040 --> 00:04:10,910 nii, et see ei ole tegelikult nii pixelated. 114 00:04:10,910 --> 00:04:14,510 Aga kui ma saan suum, seal on paha poiss oma silmaga. 115 00:04:14,510 --> 00:04:16,600 Nagu see on kõik informatsiooni meil. 116 00:04:16,600 --> 00:04:18,920 Te ei saa luua informatsiooni eimillestki. 117 00:04:18,920 --> 00:04:20,790 Seal on ainult piiratud bittide arv seal. 118 00:04:20,790 --> 00:04:22,873 >> Nii Ülesanded 4, kus Teil on võimalus 119 00:04:22,873 --> 00:04:24,580 mängida sellist maailma. 120 00:04:24,580 --> 00:04:27,610 In Ülesanded 4, saate uurida maailma graafika ja kriminalistika, 121 00:04:27,610 --> 00:04:30,870 ja tegelikult kirjutada koodi mis taastab kaotatud pilte. 122 00:04:30,870 --> 00:04:33,510 Te kirjutate koodi manipuleerib olemasolevaid pilte 123 00:04:33,510 --> 00:04:36,120 ja lõpuks aru, mida on toimub all kapuuts. 124 00:04:36,120 --> 00:04:38,540 >> Ja selgub, et see on tegelikult mitte kõik nii keeruline. 125 00:04:38,540 --> 00:04:41,320 Näiteks, kui me tahtsime esindavad naerusuu kus 126 00:04:41,320 --> 00:04:44,160 Nende musti piksleid, või need mustad täpid, 127 00:04:44,160 --> 00:04:47,230 Noh, me võiksime lihtsalt esindavad neid tõeliselt bitmap. 128 00:04:47,230 --> 00:04:50,040 Ja kui sa kunagi kuulnud, et Väljend bitmap ehk 129 00:04:50,040 --> 00:04:52,330 nüüd hakkab tegema vähe mõttekam täna. 130 00:04:52,330 --> 00:04:53,580 >> Me juba teame, mida natuke on. 131 00:04:53,580 --> 00:04:54,160 On 0 või 1. 132 00:04:54,160 --> 00:04:56,201 Ja kaardil on lihtsalt midagi nagu paberileht 133 00:04:56,201 --> 00:04:59,180 mis annab teile juhiseid ja on võibolla ruudustik x- ja y-koordinaadid. 134 00:04:59,180 --> 00:05:00,540 Nii et siin on bitmap. 135 00:05:00,540 --> 00:05:03,680 On kaarti bitti mille kohaselt 1 on ilmselt 136 00:05:03,680 --> 00:05:07,857 läheb esindama valge piksel, ja 0 läheb esindama must piksel. 137 00:05:07,857 --> 00:05:09,440 Aga me võiksime kindlasti pöörake ümber. 138 00:05:09,440 --> 00:05:11,648 See ei ole tegelikult küsimus, et Niikaua kui me järjekindlalt. 139 00:05:11,648 --> 00:05:15,570 Ja siin on, kuidas saavad binary-- sees Arvutiprogrammi mällu või isegi sees 140 00:05:15,570 --> 00:05:18,160 faili kõvakettal drive-- võiks salvestada 141 00:05:18,160 --> 00:05:20,240 lihtsaim naerusuu pilte. 142 00:05:20,240 --> 00:05:23,990 Aga mida me muidugi puudub see pilt? 143 00:05:23,990 --> 00:05:24,610 Värv, eks? 144 00:05:24,610 --> 00:05:28,220 See on ilmne järgmine samm või suurendamine, et parandada seda värvi. 145 00:05:28,220 --> 00:05:32,230 Nii kahjuks vaid ühe natuke, 0 või 1, võiksime esindada värvi. 146 00:05:32,230 --> 00:05:36,100 See võiks olla punane või sinine või must või valge või roheline või roosa, 147 00:05:36,100 --> 00:05:37,420 või paari värve. 148 00:05:37,420 --> 00:05:40,860 Aga lihtsuse huvides, siis me lihtsalt eeldada, must ja valge. 149 00:05:40,860 --> 00:05:45,930 >> Mis siis loogiliselt me ​​peame, kui me soovite rakendada värvi pilt? 150 00:05:45,930 --> 00:05:49,080 Mida me peame tegema? 151 00:05:49,080 --> 00:05:51,900 Nagu kui piiravaks teguriks siin on see, et üks natuke saab ainult 152 00:05:51,900 --> 00:05:55,977 esindavad kaks riiki, 0 või 1, valge või mustad, mida sa teha tahad? 153 00:05:55,977 --> 00:05:56,810 Sihtrühm: Rohkem andmeid. 154 00:05:56,810 --> 00:05:58,813 DAVID J. Humala: Rohkem bitti, yeah rohkem andmeid, rohkem bitte. 155 00:05:58,813 --> 00:06:01,440 Ja tõepoolest, see on täpselt, kuidas värvipilte on esindatud. 156 00:06:01,440 --> 00:06:05,120 Selle asemel, et kasutada ühte bitti, et 0 või 1 iga piksli iga dot, 157 00:06:05,120 --> 00:06:06,170 sa lihtsalt kasutada mitut. 158 00:06:06,170 --> 00:06:09,660 Võib-olla kasutada 8, võibolla sagedamini kasutada 24, ning selles, Ülesanded 159 00:06:09,660 --> 00:06:13,300 4, siis sa mängid faili formaat, mis kasutab 24 bitti tavaliselt. 160 00:06:13,300 --> 00:06:15,430 >> Aga enamik teist on ilmselt tuttav JPEG. 161 00:06:15,430 --> 00:06:17,460 Kui olete kunagi võtnud Foto telefoni, 162 00:06:17,460 --> 00:06:20,360 või laaditakse või näinud midagi Facebook või Flickr iga number 163 00:06:20,360 --> 00:06:24,882 foto baasil veebilehed, olete ilmselt näinud JPEG enne. 164 00:06:24,882 --> 00:06:27,840 Ja selgub, et see on faili formaadis me ei kavatse kasutada pset 4, 165 00:06:27,840 --> 00:06:30,340 millega sa lähed on taastuda pildid 166 00:06:30,340 --> 00:06:35,160 et ma olen kogemata kustutati vigane mälukaart kaamerasse 167 00:06:35,160 --> 00:06:35,800 kui soovite. 168 00:06:35,800 --> 00:06:38,490 >> Ja selgub, et kuigi JPEG on päris sophisticated-- 169 00:06:38,490 --> 00:06:40,906 see on palju keerukam kui must ja valge dots 170 00:06:40,906 --> 00:06:44,480 nägime hetk tagasi, sest seal on tegelikult väljamõeldud algoritme, et 171 00:06:44,480 --> 00:06:47,410 kasutatakse suruma JPEG, nii et sul võib olla tore, 172 00:06:47,410 --> 00:06:49,832 pildikvaliteet kuid kasutades suhteliselt vähe bitti. 173 00:06:49,832 --> 00:06:51,790 Ja me tuleme tagasi compression enne pikk. 174 00:06:51,790 --> 00:06:56,280 Selgub, et esimene kolm baiti JPEG image-- 175 00:06:56,280 --> 00:07:02,750 ükskõik, mida olete võtnud foto of-- on väärtused, 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Teisisõnu, kui sa just vaata, et muster bitti, 177 00:07:05,990 --> 00:07:09,180 siin esindatud kolm baiti või 24 bitti kokku, 178 00:07:09,180 --> 00:07:13,810 Suure tõenäosusega saab järeldada, et sa vaatad seda esimese kolme 179 00:07:13,810 --> 00:07:15,230 baiti JPEG. 180 00:07:15,230 --> 00:07:18,040 Ja see on see, mis on tuntud kui allkiri JPEG. 181 00:07:18,040 --> 00:07:20,540 Palju failivorminguid seal kipuvad alustada 182 00:07:20,540 --> 00:07:23,735 teatud mustrid 0. ja 1s, nii, et Windows ja Mac OS ja iOS, 183 00:07:23,735 --> 00:07:28,272 ja Android teada, millist faili nad on lisaks nn faili 184 00:07:28,272 --> 00:07:29,730 laiendamine, et palju faile on. 185 00:07:29,730 --> 00:07:32,590 Kui teil on .jpg, mis on teise aimugi arvutiga. 186 00:07:32,590 --> 00:07:35,310 >> Nii saab nüüd vaadata seda veidi tehniliselt. 187 00:07:35,310 --> 00:07:37,390 Me teame koma Süsteem on 0 kuni 9. 188 00:07:37,390 --> 00:07:38,740 Me teame, binaarne on 0 ja 1. 189 00:07:38,740 --> 00:07:41,842 Ja kui te arvate tagasi pset 0, meil oli teile maadelda, 190 00:07:41,842 --> 00:07:43,800 jaoks natuke midagi nimetatakse kuueteistkümnesüsteemis 191 00:07:43,800 --> 00:07:47,320 kus sul on 16 numbrit, 10 asemel või selle asemel 2. 192 00:07:47,320 --> 00:07:50,405 Ja need numbrid Tavapäraselt on 0 kuni 9 ja seejärel 193 00:07:50,405 --> 00:07:55,040 läbi f, kus f näitab, mida kümnendnumbrina, nagu kiire meelerahu 194 00:07:55,040 --> 00:07:56,640 vaadata? 195 00:07:56,640 --> 00:07:57,610 Niisiis, 15. 196 00:07:57,610 --> 00:08:01,390 Ja peab moodustama 10, lihtsalt iseloomu tellimise et ma olen andnud. 197 00:08:01,390 --> 00:08:04,350 See on lihtsalt suvaline konventsioon, kuid see on üsna standard. 198 00:08:04,350 --> 00:08:06,870 >> Nii et kui me vaatame seda mustrit Kolme bytes-- olgem 199 00:08:06,870 --> 00:08:09,620 hakka lihtsalt vaadata seda kooskõlas kuidas 200 00:08:09,620 --> 00:08:12,450 arvuti teadlased üldiselt vaadata ja mõelda faile. 201 00:08:12,450 --> 00:08:15,580 Te saate kindlasti mõelda Failide 0. ja 1s, ja kohaga, 202 00:08:15,580 --> 00:08:19,340 aga tegelikult, meil on kombeks kasutada binaarse või sagedamini hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 tagasi pset 0. 204 00:08:20,760 --> 00:08:25,857 Nii et lubage mul teha ettepaneku, et 255, 216 ja 255 on vaid need mustrid 0. ja 1s. 205 00:08:25,857 --> 00:08:28,440 Ja sa võid vaadata seda, kui sa tahan teha matemaatika nädalast 0. 206 00:08:28,440 --> 00:08:30,810 Aga nüüd, lihtsalt eeldada et see on tõepoolest õige. 207 00:08:30,810 --> 00:08:33,850 Ma olen lihtsalt ümber kirjutada kolm koma numbrite kolm binaarväärtus. 208 00:08:33,850 --> 00:08:36,100 Nüüd, mida ma lähen tegema, on lihtsalt lisada mõned valge ruum, 209 00:08:36,100 --> 00:08:37,266 ainult loetavuse huvides. 210 00:08:37,266 --> 00:08:39,940 Ja teate, ma lähen lihtsalt liikuda asju välja. 211 00:08:39,940 --> 00:08:43,090 Nii enne, pärast enne, pärast. 212 00:08:43,090 --> 00:08:46,180 Ma teen midagi huvitavat teistele kui lihtsalt levib asjad nii 213 00:08:46,180 --> 00:08:50,380 Selle teatise iga kaheksat bitti nüüd kahed nelja bitti. 214 00:08:50,380 --> 00:08:54,920 See on kasulik, sest kuueteistkümnendsüsteemis Eriti moes 215 00:08:54,920 --> 00:09:00,930 sest iga kuueteistkümnendkoodis 0 kuni f ehk täpsemalt 0 kuni 15, 216 00:09:00,930 --> 00:09:03,430 saab esitada täpselt neli bitti. 217 00:09:03,430 --> 00:09:07,960 Teisisõnu, kuueteistkümnendsüsteemis kui te tahan kujutada 0, see on lihtsalt 0000, 218 00:09:07,960 --> 00:09:08,780 neli nulli. 219 00:09:08,780 --> 00:09:13,997 Ja kui sa tahad esindada 15, see on 1111, mis on neli bitti. 220 00:09:13,997 --> 00:09:16,080 Ja kui sa matemaatikat, kui see on need olemas, 221 00:09:16,080 --> 00:09:18,210 see on 16s koht, mis on annan sina-- 222 00:09:18,210 --> 00:09:19,960 pigem, et läheb mina-- kahju, binaarne, 223 00:09:19,960 --> 00:09:23,660 mis läheb teile 15, neist koha twos koht, püksid ja kaheksad koht. 224 00:09:23,660 --> 00:09:26,821 Nii et lubage mul ettepaneku, et seatud neli bitti vasakule 225 00:09:26,821 --> 00:09:28,070 on see, mida me ei kavatse helistada f. 226 00:09:28,070 --> 00:09:30,110 See on suurim number, mida võib esindada neli bitti. 227 00:09:30,110 --> 00:09:33,300 Ja me juba teame kuueteistkümnesüsteemis f on suurim number kuueteistkümnendsüsteemis. 228 00:09:33,300 --> 00:09:36,020 Meil teise f seal, kaks seal. 229 00:09:36,020 --> 00:09:38,980 Ja nüüd, võtke usu mis ma olen teinud matemaatika õigus 230 00:09:38,980 --> 00:09:41,890 ning et vasakul poolel nende osad, 1101, 231 00:09:41,890 --> 00:09:43,980 on sama asi nagu d kuueteistkümnendsüsteemis. 232 00:09:43,980 --> 00:09:46,490 Ja parem käsi, 1000, on vaid 8. 233 00:09:46,490 --> 00:09:48,140 >> Ja et üks lihtne näha, eks? 234 00:09:48,140 --> 00:09:51,670 8 represents-- on õige all, et kaheksad koht. 235 00:09:51,670 --> 00:09:56,040 Nii et meil on üks kaheksad veerus ja miski püksid, kahekesi või ones. 236 00:09:56,040 --> 00:09:59,830 Nüüd enam tavapäraselt, inimesed kipuvad kirjutada kuueteistkümnendarvudega niimoodi, 237 00:09:59,830 --> 00:10:03,000 sa lihtsalt lirts neid koos, ja siis eesliide neid 0x. 238 00:10:03,000 --> 00:10:05,920 See ei tähenda midagi muud kui visuaalne aimugi kuni human-- 239 00:10:05,920 --> 00:10:10,350 siin on kuueteistkümnendsüsteemis value-- sest see muidu ei ilmne. 240 00:10:10,350 --> 00:10:13,629 >> Mis tähendab, lõpuks, et muster ühtede ja nullide, 241 00:10:13,629 --> 00:10:16,170 või muster kuueteistkümnendsüsteemis numbrit samaväärselt et sa oled 242 00:10:16,170 --> 00:10:18,990 läheb otsima in Ülesanded 4 on see-- 243 00:10:18,990 --> 00:10:22,120 Ja probleem Set 4 spec kõnnime Teile selle kaudu rohkem detail-- 244 00:10:22,120 --> 00:10:25,344 aga aru, kui mingi kauge kui Seda saab teha esmapilgul 245 00:10:25,344 --> 00:10:27,010 sa lähed alustada nähes seda palju. 246 00:10:27,010 --> 00:10:30,320 Ja tegelikult, isegi GDB on siluri tutvustasime esmaspäeval 247 00:10:30,320 --> 00:10:35,440 ja Dan tutvustatud pset 3, läheb tihti näitan sulle kuueteistkümnendväärtused 248 00:10:35,440 --> 00:10:39,910 lihtsalt sellepärast, et nad kipuvad olema rohkem tavaliste kui koma või binaarsed 249 00:10:39,910 --> 00:10:41,157 maailma arvuteid. 250 00:10:41,157 --> 00:10:42,490 Nüüd paneme selle konteksti. 251 00:10:42,490 --> 00:10:48,040 Paljud teist ehk mäletavad seda pilt siin, mis tulid siis? 252 00:10:48,040 --> 00:10:51,240 Vista, nii et isegi varem kui et Windows XP tegi seda debüüdi. 253 00:10:51,240 --> 00:10:52,620 Nii et see on ilus maastik. 254 00:10:52,620 --> 00:10:55,940 Ja tegelikult, kui te tuhnima online-- Ma arvan, et see on Wikipedia article, 255 00:10:55,940 --> 00:11:00,110 kus keegi väga hämmastavalt läks leidsin selle kohas maailmas loodud 256 00:11:00,110 --> 00:11:02,240 tema kaamera täpselt õige place-- 257 00:11:02,240 --> 00:11:06,510 ja täna tundub like-- kuid see on täpselt sama seade. 258 00:11:06,510 --> 00:11:10,060 See pilt on aga faili vormi nimetatakse bitmap, b-m-p. 259 00:11:10,060 --> 00:11:12,910 Ja me läheme super Kiire pilk, mida see tähendab. 260 00:11:12,910 --> 00:11:17,770 >> Aga bitmap on lihtsalt teistmoodi esindavad pildid ikka kasutada pikslit 261 00:11:17,770 --> 00:11:19,580 in 0. ja 1s, lõpuks. 262 00:11:19,580 --> 00:11:23,282 Aga kiire pilgu, see on rohkem huvitavaid allkiri 263 00:11:23,282 --> 00:11:24,490 alguses fail. 264 00:11:24,490 --> 00:11:26,670 See ei ole lihtsalt kolm baiti, pigem seal 265 00:11:26,670 --> 00:11:30,770 terve hunnik mustreid baitide mis on ettemääratud tähendus. 266 00:11:30,770 --> 00:11:34,490 Näiteks kuskil paar esimest baiti bitmap image 267 00:11:34,490 --> 00:11:37,440 saab olema suurusest Pildi laius pilti, 268 00:11:37,440 --> 00:11:40,390 kõrgus pilti, nii kasulik metaandmed, kui soovite. 269 00:11:40,390 --> 00:11:43,940 Kasulik info, et Photoshop või graafika programmi te kasutate 270 00:11:43,940 --> 00:11:45,180 võiks tegelikult hoolivad. 271 00:11:45,180 --> 00:11:47,170 >> Nii rohkem seda Ülesanded 4, kuid selle 272 00:11:47,170 --> 00:11:49,220 on ainult öelda, et lõpus päeval 273 00:11:49,220 --> 00:11:52,390 kõiki failivorminguid olete kasutanud jaoks years-- Microsoft Word failid, 274 00:11:52,390 --> 00:11:55,820 Numbrid faile, Excel faile, ükskõik kui palju failivorminguid 275 00:11:55,820 --> 00:11:57,770 et võib-olla mõned tuntud faililaiend 276 00:11:57,770 --> 00:12:00,130 on vaid 0. ja 1s all kapuuts. 277 00:12:00,130 --> 00:12:02,970 Ja inimesed on otsustanud mida konventsioonid on, 278 00:12:02,970 --> 00:12:08,340 Mis mustrid 0. ja 1s esindavad Wordi faili versus Excel fail, 279 00:12:08,340 --> 00:12:10,322 versus mõnel teisel failivorminguid. 280 00:12:10,322 --> 00:12:12,780 Nii pset 4, sul on võimalus mängida seda. 281 00:12:12,780 --> 00:12:14,405 >> Aga mida see tähendab, et on struct. 282 00:12:14,405 --> 00:12:18,012 See on tegelikult kena Segue nüüd viiakse C, kus on vaid paar 283 00:12:18,012 --> 00:12:20,220 lisavõimalusi et me ei ole tutvunud veel. 284 00:12:20,220 --> 00:12:24,230 See on üsna väike keel ja üks kena funktsioonid umbes C on struct. 285 00:12:24,230 --> 00:12:27,300 Näiteks, kui sa tahtsin represent-- olgem 286 00:12:27,300 --> 00:12:33,690 ütled tahtnud muutuja esindab õpilane mõnes programmis. 287 00:12:33,690 --> 00:12:37,330 Äkki olid kirjutamise kursus registreerimise programmi või core shopping 288 00:12:37,330 --> 00:12:38,870 näitaja, või midagi sellist. 289 00:12:38,870 --> 00:12:42,922 Mis on tükid seotud andmed õpilasele meelde tulevad? 290 00:12:42,922 --> 00:12:44,880 Nagu üliõpilane on esindatud, milliseid väärtushinnanguid? 291 00:12:44,880 --> 00:12:45,732 Jah? 292 00:12:45,732 --> 00:12:46,940 Sul on nimi õpilasena. 293 00:12:46,940 --> 00:12:48,900 Mida ei tüüpiline üliõpilane on? 294 00:12:48,900 --> 00:12:49,320 >> Sihtrühm: [kuuldamatu] 295 00:12:49,320 --> 00:12:50,200 >> DAVID J. Humala: Nii kahju. 296 00:12:50,200 --> 00:12:50,660 >> Sihtrühm: Age. 297 00:12:50,660 --> 00:12:52,980 >> DAVID J. Humala: vanusega ja sünnipäeva võrreldavalt yep. 298 00:12:52,980 --> 00:12:53,557 Mida veel? 299 00:12:53,557 --> 00:12:54,390 Sihtrühm: ID number? 300 00:12:54,390 --> 00:12:57,460 DAVID J. Humala: Nii ID-number, võibolla telefoninumber, äkki ühiselamus või maja, 301 00:12:57,460 --> 00:12:58,670 või kolledžis, või midagi sellist. 302 00:12:58,670 --> 00:13:01,820 Iga tükiarv andmeid sa oleks võinud oma kontaktide nimekirja 303 00:13:01,820 --> 00:13:03,890 on see, mida võib määratleda üliõpilane. 304 00:13:03,890 --> 00:13:08,490 Nii et kui me tahame seda teha, on kood, me võiks teha midagi lihtsat nagu see. 305 00:13:08,490 --> 00:13:15,670 Oleksime programmi nii, et on oletame, int main (void). 306 00:13:15,670 --> 00:13:18,920 Ja kui ma tahan kujutada õpilase ma võib-olla näiteks 307 00:13:18,920 --> 00:13:24,330 string nimega nime, et õpilane, string nimega Dorm eest, et õpilane, 308 00:13:24,330 --> 00:13:26,900 võibolla int nimega ID et üliõpilane. 309 00:13:26,900 --> 00:13:30,840 Ja kuna ma kasutan string, ma vaja tagasi minna ja panna CS50.h. 310 00:13:30,840 --> 00:13:33,300 Võib-olla ma vajan stdio.h. 311 00:13:33,300 --> 00:13:38,190 Nii et lubage mul ennetavalt teha neid ja ma olen läheb nimetame seda student.c nüüd 312 00:13:38,190 --> 00:13:40,080 ja salvestage see. 313 00:13:40,080 --> 00:13:44,206 >> Ja nüüd ma ei tee midagi Nende muutujaid. 314 00:13:44,206 --> 00:13:46,830 Ja me lihtsalt kirjutame et kui kommentaar on pseudo-koodi 315 00:13:46,830 --> 00:13:48,829 sest see ei ole huvitav mida me teeme nüüd. 316 00:13:48,829 --> 00:13:51,242 OK, nii et see on programm, mis kuidagi salvestab üliõpilane. 317 00:13:51,242 --> 00:13:53,450 Mida ma tahan teha, kui ma tahad salvestada kaks üliõpilast? 318 00:13:53,450 --> 00:13:55,991 Nii et minu esimene instinkt läheb et kõik korras, oodake minut, 319 00:13:55,991 --> 00:14:01,920 kui mul on teine ​​õpilane Miks ma ei lihtsalt ei string nimi 2 string Dorm 2, 320 00:14:01,920 --> 00:14:04,190 int ID2. 321 00:14:04,190 --> 00:14:06,540 Ja me oleme teinud läinud seda teed enne 322 00:14:06,540 --> 00:14:10,890 ja mis oli meie lahendus, mis tundub olema mingi hackish koopia pasta 323 00:14:10,890 --> 00:14:11,555 töö siin? 324 00:14:11,555 --> 00:14:12,346 Sihtrühm: Array. 325 00:14:12,346 --> 00:14:13,830 DAVID J. Humala: Jah, me võiks kasutada massiivi. 326 00:14:13,830 --> 00:14:15,620 Õigus seda väga kiiresti muutub kohmakamaks. 327 00:14:15,620 --> 00:14:18,453 Sa pead sorteerida Meelevaldselt alustada nimetades kõiki neid muutujaid. 328 00:14:18,453 --> 00:14:22,190 Ja sina, inimene, pead hoidma jälgida, et OK nimi2 vastab 329 00:14:22,190 --> 00:14:25,060 koos dorm2 vastab ID2. 330 00:14:25,060 --> 00:14:26,200 See lihtsalt migristub. 331 00:14:26,200 --> 00:14:29,350 Nii et see on palju lihtsam, mäletate paar nädalat tagasi, 332 00:14:29,350 --> 00:14:34,300 lihtsalt võttes nimega string nimed ja võibolla meile neist kolm. 333 00:14:34,300 --> 00:14:36,940 Ja siis äkki on meil string hostelis ning on 334 00:14:36,940 --> 00:14:41,900 kolm neist või konstantse, int IDS ja kolm neist. 335 00:14:41,900 --> 00:14:45,250 Aga isegi nüüd tundub see natuke lohakas, eks. 336 00:14:45,250 --> 00:14:49,440 Me räägime õpilaste ja veel Ma tõesti eluruumi madal 337 00:14:49,440 --> 00:14:50,470 rakendamise üksikasju. 338 00:14:50,470 --> 00:14:52,790 Õpilane on nimi ja ühiselamus ja ID. 339 00:14:52,790 --> 00:14:59,814 >> Miks ma ei saa lihtsalt kuulutada muutuja nimetatakse õpilane ja nimetavad seda s. 340 00:14:59,814 --> 00:15:02,230 Ja kui ma tahan teise üliõpilase, miks ei Kutsun seda t. 341 00:15:02,230 --> 00:15:05,260 Või kui ma tahan terve hunnik õpilaste, miks ma just ei 342 00:15:05,260 --> 00:15:09,740 et mul on terve klass õpilased, ja see on neist kolm. 343 00:15:09,740 --> 00:15:12,470 Teisisõnu, miks ei saa Mu koos oma andmete tüübi, mida nimetatakse 344 00:15:12,470 --> 00:15:15,641 Õpilased, mille sees on Nime on ID, ei ühiselamus, 345 00:15:15,641 --> 00:15:16,890 on mistahes paljudes muudes valdkondades. 346 00:15:16,890 --> 00:15:19,030 Ja selgub, sa saate teha just nii. 347 00:15:19,030 --> 00:15:21,850 >> Nii C on see funktsioon nimega struct. 348 00:15:21,850 --> 00:15:24,700 See on keele funktsioon, mis võimaldab meil teha just seda. 349 00:15:24,700 --> 00:15:28,370 Ma lähen edasi minna ja avada structs.h 350 00:15:28,370 --> 00:15:32,299 kus me näeme järgmised määratlus üliõpilane. 351 00:15:32,299 --> 00:15:35,215 Selgub, - ja see on isegi lihtsam kui ühe hõlmavaid ID 352 00:15:35,215 --> 00:15:36,080 hetk tagasi. 353 00:15:36,080 --> 00:15:39,120 Kui soovite tulla Sinu omatehtud andmete tüübi, 354 00:15:39,120 --> 00:15:42,750 ja lisaks int ja char ja float ja kõik need teised, et on olemas, 355 00:15:42,750 --> 00:15:45,810 saate seda teha sõna otseses mõttes kirjalikult typedef struct, 356 00:15:45,810 --> 00:15:47,880 siis mõned looksulg, mille sees sa 357 00:15:47,880 --> 00:15:51,460 nimekirja muutujate soovid seostavad seda uut custom andmeid 358 00:15:51,460 --> 00:15:55,670 kirjutad nagu nimi ja ühiselamus, ja siis pärast looksulg 359 00:15:55,670 --> 00:15:57,860 sa annad nime uute andmete tüübist. 360 00:15:57,860 --> 00:15:59,220 Nii näiteks üliõpilane. 361 00:15:59,220 --> 00:16:03,247 >> Ja mis on tore see nüüd on, et Kui me vaatame vastava koodi, 362 00:16:03,247 --> 00:16:05,080 Konventsiooni esimene kõik, on panna see 363 00:16:05,080 --> 00:16:08,230 nimelisse faili midagi dot h, päisefailist, mida me ei ole 364 00:16:08,230 --> 00:16:09,780 hakkasin end liiga palju. 365 00:16:09,780 --> 00:16:12,120 Aga me ei kavatse hakata kasutades üsna natuke nüüd. 366 00:16:12,120 --> 00:16:18,650 Ja mida me saame teha seda, lõpuks, need paar rida koodi 367 00:16:18,650 --> 00:16:22,130 on kuulutada täpselt, et andmetüüp, üliõpilane. 368 00:16:22,130 --> 00:16:23,230 Ja nüüd lähme seda kasutada. 369 00:16:23,230 --> 00:16:27,274 >> Ma lähen nüüd minema fail nimega structs1.c. 370 00:16:27,274 --> 00:16:29,440 Ja võtame pilk paari omadused siin. 371 00:16:29,440 --> 00:16:32,250 Nii toppima siin enamasti tuttav, ja me 372 00:16:32,250 --> 00:16:35,040 tagasi tulla, mida ei ole tuttav hetk. 373 00:16:35,040 --> 00:16:39,880 See muidugi on ka minu päisefail, mis on nii uued kui ka, 374 00:16:39,880 --> 00:16:42,580 va pset 3, kus Meenuta, meil helpers.h. 375 00:16:42,580 --> 00:16:45,150 Nii võite meenutada #include helpers.h. 376 00:16:45,150 --> 00:16:49,381 >> Miks küll ma kasutan hinnapakkumisi asemel noolsulge? 377 00:16:49,381 --> 00:16:50,630 Kui ma valin nende vahel? 378 00:16:50,630 --> 00:16:52,310 Peaaegu alati ma ilmselt kasutada noolsulge. 379 00:16:52,310 --> 00:16:55,040 Ja siis, äkki kohta line kuus ma kasutan jutumärkide. 380 00:16:55,040 --> 00:16:55,860 Miks see võiks olla? 381 00:16:55,860 --> 00:16:56,700 Jah? 382 00:16:56,700 --> 00:16:57,725 >> Sihtrühm: [kuuldamatu] 383 00:16:57,725 --> 00:16:59,350 DAVID J. Humala: See on tegelik, mida? 384 00:16:59,350 --> 00:17:00,559 Sihtrühm: See on sinu IDE. 385 00:17:00,559 --> 00:17:02,475 DAVID J. Humala: Jah, see on minu tegelik IDE. 386 00:17:02,475 --> 00:17:05,690 Ja ärgem peatuda IDE, sest see on just see vahend, mis ma kasutan. 387 00:17:05,690 --> 00:17:08,119 See on minu praegune kataloog, konkreetselt. 388 00:17:08,119 --> 00:17:11,647 Nii structs.h on minu faili ei paigaldatud IDE, 389 00:17:11,647 --> 00:17:14,480 operatsioonisüsteemi ise, pigem on see minu praeguse kataloogi. 390 00:17:14,480 --> 00:17:16,910 Nii et konventsioon on, kui soovite lisada oma päisefail, 391 00:17:16,910 --> 00:17:18,200 sa lihtsalt kasutada jutumärkides. 392 00:17:18,200 --> 00:17:23,290 >> Mida me nimetame seda asja line 8 üldiselt? 393 00:17:23,290 --> 00:17:25,200 See on see, mida? 394 00:17:25,200 --> 00:17:28,220 #define midagi. 395 00:17:28,220 --> 00:17:31,040 See on konstandid, eks? 396 00:17:31,040 --> 00:17:33,140 Kui sa tahad olla väärtust oma programmi 397 00:17:33,140 --> 00:17:35,110 mida saate kasutada terve kamp korda, see on 398 00:17:35,110 --> 00:17:39,330 Hea tava kohaselt tegur it out, kuulutada, kus räsi sümbolit 399 00:17:39,330 --> 00:17:43,340 määratleda, siis Tavapäraselt kõik suurtäheks word-- kuigi see ei ole 400 00:17:43,340 --> 00:17:45,320 hädavajalik, kuid see on inimese konventsiooni 401 00:17:45,320 --> 00:17:47,210 ära konstandid nii, et nad välja hüpata 402 00:17:47,210 --> 00:17:50,380 sind visually-- ruumi ja siis väärtus tahad olla 403 00:17:50,380 --> 00:17:52,250 mis on võrdväärne pidev nime. 404 00:17:52,250 --> 00:17:56,110 No semikooloniga, kuid sa lihtsalt jälgida, et muster on. 405 00:17:56,110 --> 00:17:57,770 >> Mida ma teen selle tegelikku koodi. 406 00:17:57,770 --> 00:18:00,660 Võtame pilk Põhiprogrammi siin. 407 00:18:00,660 --> 00:18:04,080 Vastavalt 12 sest ma lisanud structs.h, 408 00:18:04,080 --> 00:18:06,492 Mul on nüüd võluväel minu käsutuses uus andmetüüp. 409 00:18:06,492 --> 00:18:09,200 Ma ei ole lihtsalt juurdepääsu int, ja char ja float ja nööri 410 00:18:09,200 --> 00:18:10,060 ja sinine ja teised. 411 00:18:10,060 --> 00:18:12,470 Mul on nüüd juurdepääs üliõpilane andmete tüübi. 412 00:18:12,470 --> 00:18:17,740 Nii line 12 Ma ühendab kaks ideas-- üks custom andmete tüübi ja kaks, 413 00:18:17,740 --> 00:18:18,940 kasutades massiivi. 414 00:18:18,940 --> 00:18:21,700 Ja nii see programm, kui Ma tahan tegelikult toetada 415 00:18:21,700 --> 00:18:24,320 kolm erinevat õpilased minu programm, ma 416 00:18:24,320 --> 00:18:30,480 lihtsalt öelda mulle muutuja nimetatakse õpilast, millest igaüks 417 00:18:30,480 --> 00:18:32,970 tüübiks õpilased, mis Mul on kohandatud andmete tüübi. 418 00:18:32,970 --> 00:18:35,890 Ja eriti, anna mulle neist kolm minu rida. 419 00:18:35,890 --> 00:18:37,750 >> Nüüd, mida me teeme, on see programm? 420 00:18:37,750 --> 00:18:40,670 Siin on lihtsalt silmus iterating 0-3, sest see on 421 00:18:40,670 --> 00:18:42,110 Mis väärtus õpilased on. 422 00:18:42,110 --> 00:18:44,420 Ma lihtsalt sunnib kasutaja mulle õpilase nimi. 423 00:18:44,420 --> 00:18:48,090 Ja siis vastavalt 17, me on enamasti tuttav line. 424 00:18:48,090 --> 00:18:50,370 Meil on meie vana sõber GetString paremal. 425 00:18:50,370 --> 00:18:52,345 Ja mida tükk süntaks on ilmselt uue, 426 00:18:52,345 --> 00:18:55,130 Kui sa pole kunagi programmeeritud C enne, ja ei ole kunagi kasutanud struktuurideks? 427 00:18:55,130 --> 00:18:55,510 Jah? 428 00:18:55,510 --> 00:18:56,417 >> Sihtrühm: .name. 429 00:18:56,417 --> 00:18:57,500 DAVID J. Humala: .name. 430 00:18:57,500 --> 00:19:01,220 Aga see ei ole liiga palju hüpe, sest nüüd õpilased ümbritsevad i 431 00:19:01,220 --> 00:19:02,590 annab i-nda õpilane. 432 00:19:02,590 --> 00:19:04,730 Ja kui sa tahad sukelduda sees, et struktuuri, 433 00:19:04,730 --> 00:19:09,490 sa lihtsalt kasutada ühte perioodi ja siis nimi muutuja sees, 434 00:19:09,490 --> 00:19:11,900 või vara sees, et soovite saada ligipääs. 435 00:19:11,900 --> 00:19:14,816 Samamoodi siis, kui ma siis ajendab kasutaja, anna mulle õpilase Dorm, 436 00:19:14,816 --> 00:19:18,390 saab sarnaselt salvestada et string ühiselamus muutuja sees 437 00:19:18,390 --> 00:19:19,940 Selle õpilane struktuuri. 438 00:19:19,940 --> 00:19:21,410 >> Ja nüüd on asjad natuke uhke. 439 00:19:21,410 --> 00:19:24,420 Ja see läheb otsima kell ehk palju üsna kiiresti. 440 00:19:24,420 --> 00:19:27,970 Aga näete seda palju rohkem pset 4, nii et vaatame lihtsalt pilk see nüüd. 441 00:19:27,970 --> 00:19:33,364 Selgub, et kooskõlas 23. kaudu 38, mida sa arvad, et ma võib-olla teeme? 442 00:19:33,364 --> 00:19:35,530 Olen eemaldanud kommentaarid täna, kuid versioon 443 00:19:35,530 --> 00:19:38,660 kood onlines Viide on kõik kommentaarid. 444 00:19:38,660 --> 00:19:40,171 Mida ma ilmselt tegema? 445 00:19:40,171 --> 00:19:42,530 >> Sihtrühm: salvestage fail kõik teavet, mida kasutaja sisestatud. 446 00:19:42,530 --> 00:19:44,530 >> DAVID J. Humala: Jah, täpselt, see on uus viis 447 00:19:44,530 --> 00:19:46,370 et me näeme kahte, teine ​​tunnusjoon C, 448 00:19:46,370 --> 00:19:48,700 kusjuures ma ei luua oma faile. 449 00:19:48,700 --> 00:19:51,580 Siiani peaaegu iga programm olete kirjutanud on kodakondsuseta. 450 00:19:51,580 --> 00:19:53,334 Niipea, kui ta on teinud töötab, see on kõik. 451 00:19:53,334 --> 00:19:55,000 Ei ole mälu või mälestus sellest. 452 00:19:55,000 --> 00:19:56,110 Ei ole salvestatud faili. 453 00:19:56,110 --> 00:19:58,120 Aga kui sa ei taha salvestada input, mis on 454 00:19:58,120 --> 00:20:02,100 juhtus, nagu mäng või programmi niimoodi, selgub saame seda teha. 455 00:20:02,100 --> 00:20:04,360 Ja te näete seda rohkem in pset 4 ja §. 456 00:20:04,360 --> 00:20:08,661 Aga see rida 23 sisuliselt loob faili nimega students.csv. 457 00:20:08,661 --> 00:20:10,160 Ja sa võisid seda varem näinud. 458 00:20:10,160 --> 00:20:14,250 Isegi kui sa pole kunagi õppinud CS enne, CSV on komadega eraldatud muutujaid. 459 00:20:14,250 --> 00:20:19,000 See on nagu väga vaese mehe versiooni Exceli faili, 460 00:20:19,000 --> 00:20:22,270 mis tähendab, et seda saaks avada Excel ja Apple numbrid, 461 00:20:22,270 --> 00:20:23,830 ja see on read ja veerud. 462 00:20:23,830 --> 00:20:26,485 Aga see ei ole varaliste formaadis nagu Microsoft või Apple. 463 00:20:26,485 --> 00:20:29,840 See on lihtsalt komadega eraldades väärtused, mida me näeme ühel hetkel. 464 00:20:29,840 --> 00:20:31,010 >> Ja lihtsalt võtta vist. 465 00:20:31,010 --> 00:20:33,480 Vastavalt 23, päris lõpus, minu teine ​​argument 466 00:20:33,480 --> 00:20:37,700 see uus funktsioon nimega f avatud fail avatud on w. 467 00:20:37,700 --> 00:20:39,430 Mis võiks w tähistavad? 468 00:20:39,430 --> 00:20:40,022 Jah? 469 00:20:40,022 --> 00:20:41,260 >> Sihtrühm: See võimaldab teil kirjutada faili? 470 00:20:41,260 --> 00:20:42,630 >> DAVID J. Humala: See võimaldab sa kirjutada faili. 471 00:20:42,630 --> 00:20:44,810 Nii et paar varianti et suudame ühendada siin. 472 00:20:44,810 --> 00:20:47,184 Aga kui tahad lihtsalt lugeda fail, mis on vaadata seda 473 00:20:47,184 --> 00:20:50,010 ja loe see mällu, siis lihtsalt kasutada quote lõppeb "r". 474 00:20:50,010 --> 00:20:53,110 Kui soovite kirjutada faili, mida kasutate quote lõppeb "w". 475 00:20:53,110 --> 00:20:55,190 Seal on ka lisada ja paar muud asjad 476 00:20:55,190 --> 00:20:57,356 Kui soovite muuta olemasolevaid faile. 477 00:20:57,356 --> 00:21:00,480 Nüüd me ei kavatse hoida nähes seda asi, siis me tuleme tagasi liinile 24. 478 00:21:00,480 --> 00:21:02,640 NULL, selgub, on eriline väärtus, mis 479 00:21:02,640 --> 00:21:06,070 saab tagastada teatud funktsioone kui midagi on läinud wrong-- 480 00:21:06,070 --> 00:21:08,490 Kui faili ei eksisteeri, kui olete otsa mälu 481 00:21:08,490 --> 00:21:09,620 või hunnik muid vigu. 482 00:21:09,620 --> 00:21:13,470 Aga nüüd, lähme lihtsalt eeldada, et see on lihtsalt tavalised veatuvastuse. 483 00:21:13,470 --> 00:21:17,090 Siin line 26, ma iterating 0-3 üle kõik minu õpilased. 484 00:21:17,090 --> 00:21:20,470 Ja see on selline omamoodi uue funktsiooni, fprintf, 485 00:21:20,470 --> 00:21:21,460 aga lihtsalt võtta vist. 486 00:21:21,460 --> 00:21:24,370 Kui printf on lihtsalt print vormindatud stringi, 487 00:21:24,370 --> 00:21:26,507 mida see fprintf ilmselt tähendab? 488 00:21:26,507 --> 00:21:27,590 Sihtrühm: Printimine faili. 489 00:21:27,590 --> 00:21:29,290 DAVID J. Humala: Printige vormindatud stringi faili. 490 00:21:29,290 --> 00:21:31,180 See, mida täiendavad f vahendid on fail. 491 00:21:31,180 --> 00:21:36,420 Ja uus esimene argument peab olema muutuja, mis esindab oma faili. 492 00:21:36,420 --> 00:21:38,866 Siis me lihtsalt formaadis string nagu printf. 493 00:21:38,866 --> 00:21:40,740 Ja kuigi see süntaks on uus, see lihtsalt 494 00:21:40,740 --> 00:21:44,610 tähendab ühendage õpilase nimi, plug-in õpilane Dorm ja seejärel 495 00:21:44,610 --> 00:21:47,160 koos kirjutamisel, sulgege fail. 496 00:21:47,160 --> 00:21:49,730 Ja siis lastly-- see on uue ja me tuleme tagasi selle 497 00:21:49,730 --> 00:21:53,240 enne long-- ma vabastades õpilase põhjustel 498 00:21:53,240 --> 00:21:54,860 mis juhtus kuni eespool. 499 00:21:54,860 --> 00:21:56,820 Aga me tuleme tagasi sellele enne long-- 500 00:21:56,820 --> 00:21:59,820 see on, sest kuidas getString on tegelikult töötavad all kapuuts. 501 00:21:59,820 --> 00:22:01,280 >> Võtame pilgu siin. 502 00:22:01,280 --> 00:22:04,380 Kui ma kirjutada ls hakemistossani, märgata, et ma ei ole 503 00:22:04,380 --> 00:22:09,360 on fail nimega students.csv, lihtsalt ei ole, ei ole olemas. 504 00:22:09,360 --> 00:22:14,965 Nii et kui ma nüüd koostada selle programmi, teha struktuurideks-1,. / struktuurideks-1, 505 00:22:14,965 --> 00:22:20,570 ja ma lähen edasi minna ja kirjutada Andi, kes elab Berkeley Yale'i. 506 00:22:20,570 --> 00:22:26,350 Me läheme on Rob, kes elab Thayer nendel päevadel. 507 00:22:26,350 --> 00:22:33,760 Ja olgem tulla, kus on, ma arvan, Maria on Mather, 508 00:22:33,760 --> 00:22:35,100 kui mul on meeles õigesti. 509 00:22:35,100 --> 00:22:36,460 >> Nii midagi tundub juhtuda. 510 00:22:36,460 --> 00:22:40,680 Aga kui ma tüüpi ls nüüd, on students.csv. 511 00:22:40,680 --> 00:22:43,080 Lähme edasi ja avatud students.csv. 512 00:22:43,080 --> 00:22:46,050 See on jällegi väga kerge vormingus. 513 00:22:46,050 --> 00:22:49,570 Aga ma olen lihtsalt vastu konventsiooni et mul on kaks ridade ja veergude siin. 514 00:22:49,570 --> 00:22:52,020 Esimene veerg on inimeste eesnimed. 515 00:22:52,020 --> 00:22:55,740 Teises veerus on õpilase Dorm või kolledžis või maja, või tühi-tähi. 516 00:22:55,740 --> 00:22:57,900 Ja nüüd ma olen säästetakse alaliselt faili. 517 00:22:57,900 --> 00:22:59,280 >> Nii see ei ole kõik, et huvitav. 518 00:22:59,280 --> 00:23:02,980 Aga see on vaid hüppelauaks nüüd et oleks võimalik püsida info 519 00:23:02,980 --> 00:23:04,040 jäädavalt. 520 00:23:04,040 --> 00:23:08,340 Vaatame nüüd, mida rohkem me saame teha nende ja muid funktsioone. 521 00:23:08,340 --> 00:23:10,729 Aga kõigepealt küsimusi? 522 00:23:10,729 --> 00:23:12,145 See oli palju ja see oli kiire. 523 00:23:12,145 --> 00:23:16,131 Aga näete palju rohkem pset 4, samuti. 524 00:23:16,131 --> 00:23:16,630 Jah? 525 00:23:16,630 --> 00:23:19,360 >> Sihtrühm: Kas on võimalik, et jätkata, lisades nime, et faili? 526 00:23:19,360 --> 00:23:19,880 >> DAVID J. Humala: Hea küsimus. 527 00:23:19,880 --> 00:23:21,800 Kas on võimalik jätkata Lisades nimed, et faili? 528 00:23:21,800 --> 00:23:22,340 Jah. 529 00:23:22,340 --> 00:23:24,630 Ja tegelikult, kui sa lõpuks kuni taasavamise faili 530 00:23:24,630 --> 00:23:26,780 kasutad quote lõppeb "a" append, 531 00:23:26,780 --> 00:23:31,090 mis oleks lihtsalt lisada uus rida, et Uus liin uuesti ja uuesti, täpselt. 532 00:23:31,090 --> 00:23:32,010 Hea küsimus. 533 00:23:32,010 --> 00:23:32,950 Muud küsimused? 534 00:23:32,950 --> 00:23:33,450 Jah? 535 00:23:33,450 --> 00:23:35,580 Sihtrühm: Kui sa jooksid Programm kohe uuesti, 536 00:23:35,580 --> 00:23:38,000 oleks see hoida lisades nimed esitada või oleks avada uus fail? 537 00:23:38,000 --> 00:23:38,740 >> DAVID J. Humala: Ah, hea küsimus. 538 00:23:38,740 --> 00:23:41,448 Kui tegite programm uuesti paremale Nüüd äkki kirjutada uusi nimesid, 539 00:23:41,448 --> 00:23:44,820 oleks see lisada faili või kirjutada faili? 540 00:23:44,820 --> 00:23:47,420 Viimane, sest ma olen ei kasuta append režiimis. 541 00:23:47,420 --> 00:23:49,930 Ja kuna ma olen lihtsalt pimesi avades faili kirjutamiseks, 542 00:23:49,930 --> 00:23:51,310 see on lihtsalt läheb üle kirjutada faili. 543 00:23:51,310 --> 00:23:54,570 Nii et ma tõesti pead tegema, on lisada, kui ma tahan tegelikult on pikaajaline 544 00:23:54,570 --> 00:23:55,350 andmebaasis. 545 00:23:55,350 --> 00:23:58,220 >> Nüüd CSV on kasulik, ausalt, isegi jaoks nagu kui sa oled writing-- 546 00:23:58,220 --> 00:24:00,100 ja me lõpuks näha seda hiljem semestri kui 547 00:24:00,100 --> 00:24:01,455 me kasutame CSV-des muudel eesmärkidel. 548 00:24:01,455 --> 00:24:04,920 Kui soovite salvestada kõik inimesed kes on registreeritud mõne sündmuse, 549 00:24:04,920 --> 00:24:07,420 või registreerusin oma õpilase grupp, või midagi sellist, 550 00:24:07,420 --> 00:24:10,330 andmete säilitamise selline formaadis on super mugav. 551 00:24:10,330 --> 00:24:12,580 Sest sõna otseses mõttes, kui ma olid seda faili allalaadida. 552 00:24:12,580 --> 00:24:14,540 Ma võiks double-- ja olgem tegelikult proovida seda 553 00:24:14,540 --> 00:24:16,720 kui mul on Excel või numbrid siin. 554 00:24:16,720 --> 00:24:19,130 >> Ma lähen parem hiireklõps või kontrolli käsku Minu fail. 555 00:24:19,130 --> 00:24:20,020 Oih. 556 00:24:20,020 --> 00:24:21,830 Paremklõpsake või kontrolli käsku Minu fail. 557 00:24:21,830 --> 00:24:24,960 Tule, mu hiir ei teinud koostööd. 558 00:24:24,960 --> 00:24:32,694 Download-- ma lähen lae kõik failid siin nii 559 00:24:32,694 --> 00:24:33,860 lihtsalt, et ma saaks haarata see üks. 560 00:24:33,860 --> 00:24:37,850 Ja vaatame, kas see töötab students.csv-- esimest korda 561 00:24:37,850 --> 00:24:39,310 Olen aktiveeritud. 562 00:24:39,310 --> 00:24:41,360 Nüüd nad tahavad näha oma kontaktid. 563 00:24:41,360 --> 00:24:44,310 Nüüd pean registreeruma. 564 00:24:44,310 --> 00:24:47,620 Vaata, kui lihtne on kasutada CSV-des? 565 00:24:47,620 --> 00:24:50,840 Jah, hoida seda ajakohasena. 566 00:24:50,840 --> 00:24:52,375 OK, nüüd oleme valmis klassi. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 OK, oh, mida uut? 569 00:25:00,370 --> 00:25:02,920 OK lähedal. 570 00:25:02,920 --> 00:25:04,750 See oli maagiline. 571 00:25:04,750 --> 00:25:07,280 OK, nüüd peame uuendama. 572 00:25:07,280 --> 00:25:10,890 Ja nüüd, see unustanud, mis faili ma algselt avatud, 573 00:25:10,890 --> 00:25:13,090 aga mis a_N seal me läheme. 574 00:25:13,090 --> 00:25:16,341 OK, nii et nüüd on meil Exceli faili. 575 00:25:16,341 --> 00:25:18,290 Aitäh. 576 00:25:18,290 --> 00:25:20,764 >> OK, nii et mida ma tegin oli lihtne osa. 577 00:25:20,764 --> 00:25:23,930 Muidugi ma oleks eelinstalleeritud Excel või numbrid, või mis iganes programmi. 578 00:25:23,930 --> 00:25:25,846 Aga see on kena, sest nüüd ma ei saa manipuleerida 579 00:25:25,846 --> 00:25:28,090 andmed vormikohase. 580 00:25:28,090 --> 00:25:30,294 >> Nüüd oletame kontekstis minna, kus pooleli jäime 581 00:25:30,294 --> 00:25:32,710 Viimane kord, mis pidi algama startida abirattad. 582 00:25:32,710 --> 00:25:34,543 Aga kõigepealt, sa ei ole vaata seda varem lõunasöök 583 00:25:34,543 --> 00:25:38,150 jälle siin toimub kell Fire ja Ice Cambridge, Sitar New Haven. 584 00:25:38,150 --> 00:25:43,150 Registreeru kohta CS50s veebilehel ASAP liituda CS50 üliõpilased ja töötajad. 585 00:25:43,150 --> 00:25:46,090 >> Nii võtsime abirattad välja esmaspäeval, kui follows-- 586 00:25:46,090 --> 00:25:49,120 string on tunnistatud CS50s raamatukogu juba mõnda aega. 587 00:25:49,120 --> 00:25:52,650 Ja see on tore, sest see võimaldab meil rääkida muutujaid on 588 00:25:52,650 --> 00:25:54,660 täielik sõnu ja lauseid ja rohkem. 589 00:25:54,660 --> 00:25:56,710 Aga selgub string ei ole olemas. 590 00:25:56,710 --> 00:26:00,200 See on lihtsalt sünonüüm või varjunime, et oleme loonud midagi, mis 591 00:26:00,200 --> 00:26:03,780 tegelikult on natuke rohkem tehnilise nimetatakse char *. 592 00:26:03,780 --> 00:26:07,900 >> Ja tõepoolest, nägime näiteks programmi esmaspäeval 593 00:26:07,900 --> 00:26:11,200 et ei käitunud üsna nagu me ootasime. 594 00:26:11,200 --> 00:26:13,630 See oli fail, võrrelda-0. 595 00:26:13,630 --> 00:26:17,910 Ja meenutada, et võrrelda-0, kui Ma kompileerida esmaspäeval programmi 596 00:26:17,910 --> 00:26:22,670 ja joosta võrrelda-0 ja kirjuta ema on väiketähed ja ema väiketähtedega uuesti. 597 00:26:22,670 --> 00:26:25,320 Programm nõudis Ma kirjuta erinevaid asju, 598 00:26:25,320 --> 00:26:29,210 kuigi ema, kõik väiketähed, on identsed visuaalselt. 599 00:26:29,210 --> 00:26:31,990 Mis oli lühike vastus miks arvuti mõtleb 600 00:26:31,990 --> 00:26:34,500 Nende kahe stringid on erinevad? 601 00:26:34,500 --> 00:26:35,250 Jah? 602 00:26:35,250 --> 00:26:36,534 >> Sihtrühm: [kuuldamatu] 603 00:26:36,534 --> 00:26:37,450 DAVID J. Humala: Right. 604 00:26:37,450 --> 00:26:39,600 Niisiis, ema, esimest korda Ma kirjuta see on olemine 605 00:26:39,600 --> 00:26:42,710 salvestatud kusagil minu arvuti mälu, kuid teises kohas 606 00:26:42,710 --> 00:26:44,690 kui teist korda ma kirjuta ema. 607 00:26:44,690 --> 00:26:46,580 Nüüd see kindlasti võiks optimeeritud. 608 00:26:46,580 --> 00:26:49,205 Arvuti võiks olla tark ja mõistma nende kahe stringe, hei, 609 00:26:49,205 --> 00:26:49,954 nad identsed. 610 00:26:49,954 --> 00:26:51,520 Lubage mul ei redundantly seda säilitada. 611 00:26:51,520 --> 00:26:54,229 Aga arvutid ei tee seda optimeerimine, kui sa neile öelda, et. 612 00:26:54,229 --> 00:26:56,061 Nii, vaikimisi, et nad lihtsalt läheb lõpuks 613 00:26:56,061 --> 00:26:57,670 kahes erinevas kohas mälus. 614 00:26:57,670 --> 00:27:01,570 Ja nii olema selge, kui meil võrreldes kaks stringi, 615 00:27:01,570 --> 00:27:03,950 Esimeses kutsuti s, Teise kutsuti 616 00:27:03,950 --> 00:27:08,530 t, mida konkreetselt oli mul võrrelda siin on line 13? 617 00:27:08,530 --> 00:27:09,494 Jah. 618 00:27:09,494 --> 00:27:12,390 >> Sihtrühm: See on koht, mälestuseks et muutuja toob välja. 619 00:27:12,390 --> 00:27:14,900 >> DAVID J. Humala: Täpselt, ma olin võrreldes koht mälu 620 00:27:14,900 --> 00:27:16,300 et need muutujad osutas. 621 00:27:16,300 --> 00:27:20,560 Nii öeldes, kui ema oli bait number 1 ja 2 ja 3, 622 00:27:20,560 --> 00:27:24,020 ja 4-- sest mäletan kurakriips 0 peab olema kogu tee lõpus. 623 00:27:24,020 --> 00:27:29,420 Ja teine ​​eksemplar ema, m-o-m, oli aadressiga 10, 11, 12 ja 13. 624 00:27:29,420 --> 00:27:33,100 Olin võrreldes 1, et aadress, et asukohta mälus, 625 00:27:33,100 --> 00:27:35,160 vastu 10, mis on Ilmselgelt ei ole samad. 626 00:27:35,160 --> 00:27:36,260 1 ei ole 10. 627 00:27:36,260 --> 00:27:39,620 >> Nii et see on kena, et see on üsna lihtne. 628 00:27:39,620 --> 00:27:42,870 Aga see on problemaatiline, kuivõrd Me ei saa ilmselt võrrelda stringid. 629 00:27:42,870 --> 00:27:44,930 Nii fundamentally-- ja selles madal, 630 00:27:44,930 --> 00:27:47,300 kui sa tahad ellu Programmi võrrelda 631 00:27:47,300 --> 00:27:50,270 kaks eraldi sõna, et kasutaja on sisestanud kvaliteedi, 632 00:27:50,270 --> 00:27:53,944 nad rivistama char char, vaid üldiselt, 633 00:27:53,944 --> 00:27:55,360 Mida me peame tegema, ilmselt? 634 00:27:55,360 --> 00:27:57,940 See ei ole piisav lihtsalt vaadata neid kahte aadressid. 635 00:27:57,940 --> 00:27:58,860 Mida me peame tegema? 636 00:27:58,860 --> 00:27:59,360 Jah? 637 00:27:59,360 --> 00:28:01,120 >> Sihtrühm: Käi läbi string [kuuldamatu]. 638 00:28:01,120 --> 00:28:02,600 >> DAVID J. Humala: Jah, lähme itereerima läbi string. 639 00:28:02,600 --> 00:28:05,808 Kasutame jaoks silmus, samal ajal loop või iganes sa oled kõige mugavamalt. 640 00:28:05,808 --> 00:28:08,840 Ja kui meil kaks stringi kusagil mälu, vaatame iga aasta 641 00:28:08,840 --> 00:28:11,770 Esimene märk, siis iga teine iseloomu, siis kolmas ja neljas, 642 00:28:11,770 --> 00:28:15,206 ja viies, kuni me tabanud Mis eriline valvur väärtus? 643 00:28:15,206 --> 00:28:16,080 Sihtrühm: [kuuldamatu] 644 00:28:16,080 --> 00:28:18,800 DAVID J. Humala: Jah, längkriipsu null, misjärel kas string 645 00:28:18,800 --> 00:28:20,100 saame otsustada, mis see on. 646 00:28:20,100 --> 00:28:21,970 Kas me sobitada iga märk? 647 00:28:21,970 --> 00:28:22,990 Kui ei ole, tagastab false. 648 00:28:22,990 --> 00:28:24,770 Kui jah, siis tagasi tõsi. 649 00:28:24,770 --> 00:28:28,800 Ja nii see on täpselt, mida see versioon Programmi võrrelda-1.c teeb. 650 00:28:28,800 --> 00:28:31,677 See on identne sellega, mida me Vaatasin esmaspäeval välja, et ma olen 651 00:28:31,677 --> 00:28:34,760 saanud lahti sõna string-- kuigi et ei ole funktsionaalne impact-- kõik 652 00:28:34,760 --> 00:28:37,450 Ma teen nüüd on kõrvaldada mõned visuaalsed abirattad, 653 00:28:37,450 --> 00:28:40,880 aga selgelt näha, et s ja t on aadresse. 654 00:28:40,880 --> 00:28:43,020 Ja see, mida täht, tärn, esindab 655 00:28:43,020 --> 00:28:46,690 on aadress, mis on tuntud tehniliselt kui kursor. 656 00:28:46,690 --> 00:28:49,880 >> Nii et kui ma kuulutada s line 9 ja öelda char * s, 657 00:28:49,880 --> 00:28:52,160 see ei tähenda mulle string. 658 00:28:52,160 --> 00:28:56,360 See tähendab mulle muutuja kelle elu mõte on säilitada aadressi. 659 00:28:56,360 --> 00:29:00,400 Sest ma olen umbes panna aadress string ta. 660 00:29:00,400 --> 00:29:03,500 Ja tõepoolest, getString, et selge, ei tagasta string. 661 00:29:03,500 --> 00:29:06,110 See ei tagasta ema kurakriips null, per se. 662 00:29:06,110 --> 00:29:10,005 Mida getString spetsiaalselt ja täpselt tagasi? 663 00:29:10,005 --> 00:29:10,880 Sihtrühm: [kuuldamatu] 664 00:29:10,880 --> 00:29:14,080 DAVID J. Humala: Aadress on aadressi esimene märk 665 00:29:14,080 --> 00:29:16,070 Mõnes string on saanud. 666 00:29:16,070 --> 00:29:19,250 Ja nii nüüd me näeme eriline märksõna uuesti. 667 00:29:19,250 --> 00:29:20,640 Ja ma vihjas sellele varem. 668 00:29:20,640 --> 00:29:23,620 See saab olema hea konventsiooni et me näeme ikka ja jälle nüüd. 669 00:29:23,620 --> 00:29:27,540 Ma kontrollin veenduda, et s ei ole null ja t ei ole null. 670 00:29:27,540 --> 00:29:30,100 Kuna põhineb minu tõesti Kiire varem mainitud, 671 00:29:30,100 --> 00:29:35,510 mida võiks tähendada, kui getString naaseb ole aadress, kuid N-U-L-L, mis on jällegi 672 00:29:35,510 --> 00:29:36,990 mingi eriline väärtus? 673 00:29:36,990 --> 00:29:37,890 >> Sihtrühm: Error. 674 00:29:37,890 --> 00:29:38,600 >> DAVID J. Humala: See on viga. 675 00:29:38,600 --> 00:29:39,550 Midagi läks valesti. 676 00:29:39,550 --> 00:29:41,341 Ja mida tavaliselt Võib juhtuda, eriti 677 00:29:41,341 --> 00:29:45,162 koos strings-- mis võib olla tundmatu pikkus advance-- 678 00:29:45,162 --> 00:29:46,870 võibolla arvutid mälu, võibolla 679 00:29:46,870 --> 00:29:49,280 tipitud selline pikk sõna või lause 680 00:29:49,280 --> 00:29:51,880 või kleepida nii suur essee seal lihtsalt ei ole piisavalt mälu. 681 00:29:51,880 --> 00:29:55,340 Ja nii getString ei saa naasta aadressi kogu asi, 682 00:29:55,340 --> 00:29:56,620 nii see lihtsalt tagasi midagi. 683 00:29:56,620 --> 00:30:00,580 Ja ta ütleb viga on juhtunud tagastades eriline väärtus NULL. 684 00:30:00,580 --> 00:30:02,890 See on null aadress, kui nii võib öelda. 685 00:30:02,890 --> 00:30:06,157 >> Nüüd selgub, C kaasas funktsiooni, mis teeb selle kordamise. 686 00:30:06,157 --> 00:30:09,240 Me ei pea rakendama seda jaoks silmus või samas loop ise. 687 00:30:09,240 --> 00:30:11,150 Me saame kasutada funktsiooni, nimetatakse lühidalt 688 00:30:11,150 --> 00:30:15,400 sega comp või string võrrelda, kelle elu mõte on teha just nii. 689 00:30:15,400 --> 00:30:19,990 Sa annad siis kaks suunanäitajaks, kaks aadressi, ja see läheb neile aadressid 690 00:30:19,990 --> 00:30:23,130 ja siis võrrelda kirja kirja kirja kvaliteedi, 691 00:30:23,130 --> 00:30:26,610 peatudes ainult siis, kui see, mis on õige? 692 00:30:26,610 --> 00:30:31,540 Kui intuitiivselt peaks segama comp lõpetate iterating, lihtsalt olla kindel? 693 00:30:31,540 --> 00:30:35,400 Kui ta tabab längkriipsuga 0 kummaski string, misjärel võib ta otsustada 694 00:30:35,400 --> 00:30:38,910 on kõike sobitada, või on seal olnud vastuolu? 695 00:30:38,910 --> 00:30:42,740 >> Seega, kui võtame seda nüüd ja proovige meie väike kapitaliseeritus mängu 696 00:30:42,740 --> 00:30:49,260 nii et võrrelda-1, ./compare-1 ja kirjuta ema väiketähtedega nii korda. 697 00:30:49,260 --> 00:30:50,560 Nüüd on sama asi. 698 00:30:50,560 --> 00:30:54,080 Ja kui ma seda uuesti väiketähed ja siis äkki suur-. 699 00:30:54,080 --> 00:30:56,720 Nüüd küll vahet Suur- ja väiketähed. 700 00:30:56,720 --> 00:31:00,440 Nii ei ole nii raske või maagiline, kuid see ei nüüd seletada 701 00:31:00,440 --> 00:31:03,140 mis toimub all kapuuts. 702 00:31:03,140 --> 00:31:07,640 >> Mida rohkem me saame eraldada Sellist liiki õppetund? 703 00:31:07,640 --> 00:31:08,980 Võtame pilk see. 704 00:31:08,980 --> 00:31:15,380 Ma lähen edasi minna ja kirjutada kiire programm siin nimetatakse koopia-0. 705 00:31:15,380 --> 00:31:21,594 Ja nüüd lähme edasi ja tegelikult teeme see-- kopeerimise-0, 706 00:31:21,594 --> 00:31:23,010 vaatleme, mida mul siin. 707 00:31:23,010 --> 00:31:24,712 Ma esimest öelda kasutaja, midagi öelda. 708 00:31:24,712 --> 00:31:26,420 Siis ma saan string ja ma hoidnud seda s. 709 00:31:26,420 --> 00:31:29,810 Siis ma kontrollida, kas s võrdub võrdub NULL, lihtsalt tagasi 1. 710 00:31:29,810 --> 00:31:31,590 Nii et see on lihtsalt standard veatuvastuse. 711 00:31:31,590 --> 00:31:33,112 Midagi huvitavat on juhtunud. 712 00:31:33,112 --> 00:31:36,320 Ja tegelikult, kui me vabaneda viga kontrollida, see näeb välja nagu nädal 1 koodi 713 00:31:36,320 --> 00:31:36,985 hetkel. 714 00:31:36,985 --> 00:31:39,110 Aga ma olen hakanud saada natuke parem sellest. 715 00:31:39,110 --> 00:31:43,340 >> Nüüd joon 16, nädal tagasi, võibolla isegi paar päeva või minutit tagasi, 716 00:31:43,340 --> 00:31:46,720 Te võite öelda line 16 on luues muutuja nimega t 717 00:31:46,720 --> 00:31:48,219 kopeerimine ja s ta. 718 00:31:48,219 --> 00:31:50,010 Ja see on täiesti mõistliku Buffee. 719 00:31:50,010 --> 00:31:51,560 Aga täpsemalt nüüd. 720 00:31:51,560 --> 00:31:54,190 Mis toimub rida 16? 721 00:31:54,190 --> 00:31:56,170 Mis muutub kopeeritud paremalt vasakule? 722 00:31:56,170 --> 00:31:56,669 Jah? 723 00:31:56,669 --> 00:31:58,490 Sihtrühm: Kas t saada aadress s? 724 00:31:58,490 --> 00:32:01,220 >> DAVID J. Humala: Täpselt, t muutub aadressi s. 725 00:32:01,220 --> 00:32:05,170 Nii et nüüd selge, kui ma lähen tagasi, et varem näiteks 726 00:32:05,170 --> 00:32:08,520 ja ma venitama asi, mida ma olen sisestanud. 727 00:32:08,520 --> 00:32:11,640 Ja mida ma olen tipitud in-- siin on s, ja siin 728 00:32:11,640 --> 00:32:15,830 on see, mida ma olen sisestanud kusagil mälu, ema ja siis längkriipsuga 729 00:32:15,830 --> 00:32:17,840 0, mis on lisatud minu jaoks. 730 00:32:17,840 --> 00:32:23,060 Mida ma hoida siin, mäletate, see on temperatuuril asukoha 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 see on see, mis on praegu s. 732 00:32:24,655 --> 00:32:29,220 Nii et kui on line 16 Ma ütlen mulle teise muutuja nimega t ja poest 733 00:32:29,220 --> 00:32:33,590 in väärtuses s, mida saab ladustada siin mitte ema 734 00:32:33,590 --> 00:32:35,480 vaid lihtsalt number 1. 735 00:32:35,480 --> 00:32:38,520 >> Nii et kui me vaatame tulevikku selles programmis Nüüd, mida juhtub? 736 00:32:38,520 --> 00:32:40,690 Nii märkate, et seal on Seda funktsiooni võite 737 00:32:40,690 --> 00:32:44,410 on kasutanud seda juba mõnda aega tagasi eest Caesar, või Vigenere, või ehk üldse mitte. 738 00:32:44,410 --> 00:32:48,170 Väidan minu printf, ma olen läheb ära koopia t. 739 00:32:48,170 --> 00:32:51,616 Esimene rida 19, kiire meelerahu Kontrollige, strlen kontrolli pikkus t. 740 00:32:51,616 --> 00:32:53,740 Sest ma ei taha proovida ära midagi 741 00:32:53,740 --> 00:32:55,104 kui pole string seal. 742 00:32:55,104 --> 00:32:57,520 Kui kasutaja lihtsalt Enter, seal on midagi ära. 743 00:32:57,520 --> 00:33:01,100 Nii et ma ei taha teha line 21. 744 00:33:01,100 --> 00:33:05,758 Nii line 21 ära mis kirjas, ilmselt on t? 745 00:33:05,758 --> 00:33:06,514 >> Sihtrühm: m? 746 00:33:06,514 --> 00:33:08,722 DAVID J. Humala: Tundub nagu see on kopeerimine, millest üks? 747 00:33:08,722 --> 00:33:09,486 Sihtrühm: m. 748 00:33:09,486 --> 00:33:10,450 DAVID J. Humala: Uh, m. 749 00:33:10,450 --> 00:33:12,685 OK, nii et esimene m, sest teate, et ma olen 750 00:33:12,685 --> 00:33:14,935 möödaminnes toupper, mis Kui sa pole kunagi näinud seda on 751 00:33:14,935 --> 00:33:16,980 vaid funktsiooni ära oma panus. 752 00:33:16,980 --> 00:33:20,240 t sulg null tähendab anda mulle null iseloomu t. 753 00:33:20,240 --> 00:33:22,550 Ja nii kuidas see pilt muutus, et oleks selge? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Mida on vaja, et saada transkribeeritakse või muutunud seoses s ja t and mom 756 00:33:29,160 --> 00:33:30,097 kurakriips null. 757 00:33:30,097 --> 00:33:31,470 >> Sihtrühm: [kuuldamatu] 758 00:33:31,470 --> 00:33:34,030 >> DAVID J. Humala: Jah, nii see siin lihtsalt 759 00:33:34,030 --> 00:33:40,860 vajab muutunud mina-- määrata see-- vajab muutunud kapitali m. 760 00:33:40,860 --> 00:33:44,330 Aga nüüd, vaatame hiljem Programm, kui ma välja printida 761 00:33:44,330 --> 00:33:49,800 s ja t, kui ma puhastada siin, vaata, mis on juhtub väljatrükk s ja t. 762 00:33:49,800 --> 00:33:54,310 Nii et koopia-0, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Lubage mul minna ja kirjuta emme kõik väiketähed. 764 00:33:57,140 --> 00:34:00,140 Pange tähele, nii esialgses koopia on kapitaliseeritud. 765 00:34:00,140 --> 00:34:00,850 Miks? 766 00:34:00,850 --> 00:34:04,431 Noh, s ja t on nii osutades, kui soovite, sama tüki mälu. 767 00:34:04,431 --> 00:34:06,930 Ja ausalt öeldes, see muutub tõesti uninteresting-- asjaolu 768 00:34:06,930 --> 00:34:09,150 et me kasutame aadress null siin. 769 00:34:09,150 --> 00:34:11,719 Ma mõtlen, et ma tõesti ei hooli kus asjad on mälu. 770 00:34:11,719 --> 00:34:13,550 Sorry ma kustutamine natuke liiga palju. 771 00:34:13,550 --> 00:34:15,674 Aga ma tõesti ei hooli kus asjad on mälu. 772 00:34:15,674 --> 00:34:18,510 Ja nii tõesti, mida programmeerijad kipuvad mõtlema 773 00:34:18,510 --> 00:34:21,080 on see, et kui te räägite aadressi või osuti, 774 00:34:21,080 --> 00:34:22,679 kes hoolib, kui see on mälu. 775 00:34:22,679 --> 00:34:24,989 Mind ei huvita, kui see on bait üks või ühe miljardi. 776 00:34:24,989 --> 00:34:27,920 Ma lihtsalt huvita, et see muutuja on tõhusalt 777 00:34:27,920 --> 00:34:29,620 osutades, et patakas mälu. 778 00:34:29,620 --> 00:34:33,350 Ja nii edaspidi, mitte Saivartelu üle suvalise mälu aadresse, olgem 779 00:34:33,350 --> 00:34:36,710 hakka lihtsalt juhtida viiteid kui viiteid, nagu nooled. 780 00:34:36,710 --> 00:34:39,340 Mida s ja t tegelikult on, Vastavalt sellele programmile, 781 00:34:39,340 --> 00:34:42,130 sest kuidas ma loodud t, see on lihtsalt kaks eraldi muutujad 782 00:34:42,130 --> 00:34:43,840 juhtides samal patakas mälu. 783 00:34:43,840 --> 00:34:45,215 Ja me ei hooli, kus nad on. 784 00:34:45,215 --> 00:34:47,130 Nii et me võime seda ära, et detail. 785 00:34:47,130 --> 00:34:48,780 >> Niisiis, kuidas ma seda parandada? 786 00:34:48,780 --> 00:34:54,120 Kui ma tahan kirjutada versiooni koopia programm, mis tegelikult kopeerib string 787 00:34:54,120 --> 00:34:56,840 ja suurtäheks ainult koopia, vaid intuitiivselt, 788 00:34:56,840 --> 00:34:59,766 Mis sai olla koostisosa meie lahendus? 789 00:34:59,766 --> 00:35:00,640 Sihtrühm: [kuuldamatu] 790 00:35:00,640 --> 00:35:01,420 DAVID J. Humala: Vajame mida? 791 00:35:01,420 --> 00:35:01,820 Sihtrühm: patakas mälu. 792 00:35:01,820 --> 00:35:03,280 DAVID J. Humala: Vajame teise patakas mälu, eks? 793 00:35:03,280 --> 00:35:05,360 Me ei tea, kuidas seda veel tingimata. 794 00:35:05,360 --> 00:35:11,330 Aga ma sellist vaja, et see juhtub nii et originaal ema väiketähed 795 00:35:11,330 --> 00:35:14,170 jõuab, et ekstra patakas mälu. 796 00:35:14,170 --> 00:35:19,770 Ja siis, kui ma saan muuta koopia, ma ei taha seda muuta koopia siin. 797 00:35:19,770 --> 00:35:26,020 Ma asemel soovite muuta ainult selle koopia nii, et originaal on muutumatu. 798 00:35:26,020 --> 00:35:27,980 >> Nii, vaatame, kuidas me võiksime seda teha. 799 00:35:27,980 --> 00:35:31,800 In koopia-1, mis on juba kooritud kommentaar, 800 00:35:31,800 --> 00:35:33,250 kuid on kommenteerinud online. 801 00:35:33,250 --> 00:35:36,710 Meil asemel teha following-- neid read on identsed, saada mulle string 802 00:35:36,710 --> 00:35:38,340 ja nimetame seda s. 803 00:35:38,340 --> 00:35:43,500 Aga nüüd vaatame meie üks keeruline, kuid viimase keerukusest 804 00:35:43,500 --> 00:35:47,340 mõnda aega, liin 16 ei täpselt seda. 805 00:35:47,340 --> 00:35:49,400 Seega, kui teie hubane koos Pildi me lihtsalt drew-- 806 00:35:49,400 --> 00:35:51,790 anna mulle uus patakas mälu kopeerida kõike sinna, 807 00:35:51,790 --> 00:35:53,730 Vaatame, kuidas me tõlkida, et koodi. 808 00:35:53,730 --> 00:35:59,400 >> Nii line 16, vasakul pool, char * t annab mulle seda kasti siin. 809 00:35:59,400 --> 00:36:00,230 See on kõik, mida ta teeb. 810 00:36:00,230 --> 00:36:03,240 Paremal pool, m alloc või malloc, 811 00:36:03,240 --> 00:36:06,480 on mälu eraldamise, super fancy, segasena viis lihtsalt öeldes 812 00:36:06,480 --> 00:36:07,640 mulle patakas mälu. 813 00:36:07,640 --> 00:36:09,290 Kui palju mälu me vajame? 814 00:36:09,290 --> 00:36:10,910 Noh, on selline suur väljendus. 815 00:36:10,910 --> 00:36:12,570 Aga vaatame, mida ta ütleb siin. 816 00:36:12,570 --> 00:36:15,940 Nii see muidugi on anda mulle string pikkusega s. 817 00:36:15,940 --> 00:36:19,094 Niisiis, ema peaks olema siis? 818 00:36:19,094 --> 00:36:21,010 Nii lihtsalt kolm, eks? ema on kolm märki. 819 00:36:21,010 --> 00:36:22,830 Sa ei arvestata kurakriips null, kui 820 00:36:22,830 --> 00:36:25,960 rääkida pikkus string see tegelikult inimese nähtav tähed. 821 00:36:25,960 --> 00:36:28,020 Nii ema, nii et see annab mulle 3. 822 00:36:28,020 --> 00:36:31,170 Aga oota natuke, ma olen nüüd lisades 1. 823 00:36:31,170 --> 00:36:34,861 Miks ma tegelikult tahan eraldada 4 baiti ja mitte ainult 3? 824 00:36:34,861 --> 00:36:35,360 Jah? 825 00:36:35,360 --> 00:36:36,910 >> Sihtrühm: Sentinel väärtus? 826 00:36:36,910 --> 00:36:38,951 >> DAVID J. Humala: Täpselt, eest, et valvur väärtus. 827 00:36:38,951 --> 00:36:40,840 Sest kurakriips null, Vajan 4 baiti kokku. 828 00:36:40,840 --> 00:36:42,870 Nii et ma pean pikkus string pluss 1. 829 00:36:42,870 --> 00:36:45,400 Ja siis lihtsalt hea measure-- kuigi selle süsteemi, 830 00:36:45,400 --> 00:36:49,390 see on alati saab olema 1-- ma räägin korrutada seda suurust paalia. 831 00:36:49,390 --> 00:36:51,552 Selgub Sizeof on operaator C, et 832 00:36:51,552 --> 00:36:53,260 lihtsalt ütleb teile baitide arv, mis on 833 00:36:53,260 --> 00:36:54,700 vajalik teatud andmete tüübi. 834 00:36:54,700 --> 00:36:57,740 See ei tööta massiivid, tavaliselt, mõnikord ta teeb. 835 00:36:57,740 --> 00:36:59,210 Aga üldiselt juhul, ei. 836 00:36:59,210 --> 00:37:02,330 Aga ta ütleb mulle, kui palju baite char on, mis osutub alati 1. 837 00:37:02,330 --> 00:37:04,080 Nii et see on nagu korrutades 1. 838 00:37:04,080 --> 00:37:05,900 >> Nii super segasena otsima rida koodi. 839 00:37:05,900 --> 00:37:09,320 Aga kõik see on annab mul patakas mälu. 840 00:37:09,320 --> 00:37:13,590 Aga see tundub, et kopeerimine midagi sinna mälu? 841 00:37:13,590 --> 00:37:14,560 Mitte veel. 842 00:37:14,560 --> 00:37:22,040 Ja mis ma real 22 ja 23, 24, 25, noh, ma lihtsalt seda teha. 843 00:37:22,040 --> 00:37:23,760 Ja see on omamoodi vana kooli värk nüüd. 844 00:37:23,760 --> 00:37:26,010 See on nagu pset 2, kus sa oled lihtsalt liigub asjad 845 00:37:26,010 --> 00:37:28,620 ringi mälu, või pigem stringid. 846 00:37:28,620 --> 00:37:31,920 >> Nii et ma iterating 0 kuni pikkus string s. 847 00:37:31,920 --> 00:37:37,820 Ja ma kopeerimine i-nda iseloomu s sisse i-nda tegelaskuju t. 848 00:37:37,820 --> 00:37:41,820 Ja kuna ma, programmeerija, tehtud Kindlasti eraldada täpselt nii palju baite 849 00:37:41,820 --> 00:37:44,600 kui mul on vaja, see on täiuslik üks-ühele suhet. 850 00:37:44,600 --> 00:37:47,060 Ja ma kopeerida ema on väiketähed uuega. 851 00:37:47,060 --> 00:37:50,170 Ja siis lõpuks, ma teen seda joont. 852 00:37:50,170 --> 00:37:54,637 Ja nii on mõju ainult ära seda t siin. 853 00:37:54,637 --> 00:37:56,470 Nii palju taluda, kuid kui sa lihtsalt kaaluda 854 00:37:56,470 --> 00:37:58,220 Mis tegelikult toimub kohta all kapuuts 855 00:37:58,220 --> 00:38:00,880 on lihtsalt liigub neid baiti ümber, kõik, mis 856 00:38:00,880 --> 00:38:06,617 on vaja selle probleemi lahendamiseks on lihtsalt annab meile selle tüki mälu. 857 00:38:06,617 --> 00:38:08,450 Nüüd on oht Valdav, las ma näitan 858 00:38:08,450 --> 00:38:13,200 üks teine ​​näide, mis on peaaegu identsed, välja arvatud see üks 859 00:38:13,200 --> 00:38:14,350 rida koodi. 860 00:38:14,350 --> 00:38:18,870 Nii et see on häkker versioon Selle programmi, kui soovite. 861 00:38:18,870 --> 00:38:21,050 Aga olgem lihtsalt ajama see, mis toimub. 862 00:38:21,050 --> 00:38:28,920 Rida 24 varem seda t sulg i saab s sulg i. 863 00:38:28,920 --> 00:38:33,370 Nüüd ma selle muutma palju rohkem segasena star t 864 00:38:33,370 --> 00:38:36,280 plus 1 võrdub star s pluss 1. 865 00:38:36,280 --> 00:38:38,702 >> Mis toimub ja miks Kas meil on star märk? 866 00:38:38,702 --> 00:38:41,410 Me oleme näinud täht enne ja see on kasutusel siin erinevalt. 867 00:38:41,410 --> 00:38:45,490 Me varem näinud char *, nüüd näen Star alguses, ja see on OK. 868 00:38:45,490 --> 00:38:48,190 Kuna selgub me saab omamoodi järeldada ainult 869 00:38:48,190 --> 00:38:50,280 Nendest esimene põhimõtteid, mis toimub. 870 00:38:50,280 --> 00:38:53,860 Nii lihtsalt peab olema selge, milline on s? 871 00:38:53,860 --> 00:38:55,052 Eelmisel nädalal oli see string. 872 00:38:55,052 --> 00:38:56,260 See ei piisa enam. 873 00:38:56,260 --> 00:38:57,690 Mis on s, konkreetselt? 874 00:38:57,690 --> 00:38:58,590 >> Sihtrühm: [kuuldamatu] 875 00:38:58,590 --> 00:38:59,881 >> DAVID J. Humala: See on kursor. 876 00:38:59,881 --> 00:39:02,610 On aadress Esimene täht me kirjutada. 877 00:39:02,610 --> 00:39:04,780 OK, mis on t? 878 00:39:04,780 --> 00:39:05,660 >> Sihtrühm: [kuuldamatu] 879 00:39:05,660 --> 00:39:07,950 >> DAVID J. Humala: aadressi esimene bait 880 00:39:07,950 --> 00:39:10,490 t, et patakas mälu ümber. 881 00:39:10,490 --> 00:39:14,720 Nii selgub, et kui me itereerima 0 edasi kuni string 882 00:39:14,720 --> 00:39:17,424 length-- esmalt i käivitab 0, sest 883 00:39:17,424 --> 00:39:18,840 Selle vana kooli loop asi. 884 00:39:18,840 --> 00:39:22,400 Nii lihtsalt lihtsuse, olgem eeldada, et esimene rida koodi 885 00:39:22,400 --> 00:39:23,760 on tõesti ainult seda, eks. 886 00:39:23,760 --> 00:39:26,080 Kui i on null, lisades null midagi ilmselt 887 00:39:26,080 --> 00:39:27,540 ei kavatse mõjutada. 888 00:39:27,540 --> 00:39:28,560 >> Mis on see sõna? 889 00:39:28,560 --> 00:39:31,600 Tuleb välja, et staar operaator selles kontekstis 890 00:39:31,600 --> 00:39:33,700 on apparent operaator, mis on lihtsalt 891 00:39:33,700 --> 00:39:37,530 fancy viis öelda minna järgmisel aadressil. 892 00:39:37,530 --> 00:39:42,080 Nii et kui s on aadress esimesest iseloomu selles patakas mälu 893 00:39:42,080 --> 00:39:43,630 * s vahendid sinna minna. 894 00:39:43,630 --> 00:39:45,630 Ja kuna me oleme tõmmatud Pildi sel viisil, 895 00:39:45,630 --> 00:39:47,430 võite võtta järgmised vaimne mudel. 896 00:39:47,430 --> 00:39:51,030 Kui see on s, ja sa ütled * s * s selline nagu rennide ja redelid, 897 00:39:51,030 --> 00:39:54,540 Kui sa mäletad seda mängu lapsepõlvest, on nagu järgima, et nool ja minna 898 00:39:54,540 --> 00:39:55,570 aadressile. 899 00:39:55,570 --> 00:39:57,080 >> * t on sama asi. 900 00:39:57,080 --> 00:39:59,855 Nii algab siin, minge oma tüki. 901 00:39:59,855 --> 00:40:03,350 Ma ei saa lihtsalt tugineda see ekraan nii. 902 00:40:03,350 --> 00:40:05,560 * t tähendab, et minna siin. 903 00:40:05,560 --> 00:40:08,830 Ja siis on silmus on lihtsalt öeldes liikuda see märk siin 904 00:40:08,830 --> 00:40:11,330 liikuda see märk siin liikuda see märk siin. 905 00:40:11,330 --> 00:40:12,890 Aga kuidas ma seda teen incrementation? 906 00:40:12,890 --> 00:40:15,430 Mul on vaja tagasi võtta, mida ma lihtsalt kustutatakse. 907 00:40:15,430 --> 00:40:18,140 See on see, mida on tavaliselt nimetatakse pointer aritmeetika, mis 908 00:40:18,140 --> 00:40:20,040 tähendab matemaatikat aadressid. 909 00:40:20,040 --> 00:40:22,460 >> Kui seda loop, Hoian incrementing i, 910 00:40:22,460 --> 00:40:26,880 ja s on aadress ja t on aadress, kui ma lihtsalt hoida lisades 1, 911 00:40:26,880 --> 00:40:31,406 see tähendab lihtsalt hoida liigub edasi, ja edastada ning edastab mällu. 912 00:40:31,406 --> 00:40:34,030 See on nagu Oxford Street on street et CS hoone on. 913 00:40:34,030 --> 00:40:36,490 CS hooned on 33 Oxford Street. 914 00:40:36,490 --> 00:40:39,870 Nii et kui sa teeksid 33 Oxford Street pluss 1, 915 00:40:39,870 --> 00:40:42,870 mis viib sind 34 Oxford Tänav, siis 35 Oxford Street, 916 00:40:42,870 --> 00:40:46,380 siis 36 Oxford Street, olenemata neile Hoonete tegelikult on - siis, kui need on olemas. 917 00:40:46,380 --> 00:40:50,540 Ja nii, et kõik me teeme siin pointer aritmeetika. 918 00:40:50,540 --> 00:40:53,820 >> Nii et see on super kauge tee väljendada end. 919 00:40:53,820 --> 00:40:56,160 Aga kõik, mis toimub all kapuuts 920 00:40:56,160 --> 00:40:59,330 lihtsalt pärast neid aadresse, nagu järgmised kaardil, kui soovite, 921 00:40:59,330 --> 00:41:02,692 või pärast nooled nagu oleme ekraanile joonistada. 922 00:41:02,692 --> 00:41:04,910 OK, palju seedida. 923 00:41:04,910 --> 00:41:10,410 Iga küsimus süntaks, mõisted, suunanäitajaks, malloc vms. 924 00:41:10,410 --> 00:41:11,480 Jah, siin esimene. 925 00:41:11,480 --> 00:41:13,755 >> Sihtrühm: Nii kui see ütleb * t võrdub toupper * t, 926 00:41:13,755 --> 00:41:15,575 on see, et läheb ära kõik tähed või Lihtsalt-- 927 00:41:15,575 --> 00:41:17,283 >> DAVID J. Humala: Ah, tõesti hea küsimus. 928 00:41:17,283 --> 00:41:19,805 Nii see rida siin, 31, see läheb ära 929 00:41:19,805 --> 00:41:21,430 esimene täht või kõik tähed. 930 00:41:21,430 --> 00:41:23,460 Nii saab vastata, et minnes tagasi esimesele põhimõtteid. 931 00:41:23,460 --> 00:41:26,168 Ja esimene põhimõtteid siin ma mõtlen minge põhimõisted 932 00:41:26,168 --> 00:41:27,000 mis on seotud. 933 00:41:27,000 --> 00:41:29,770 Nii toupper on funktsioon mis suurtäheks char. 934 00:41:29,770 --> 00:41:30,530 See on kõik. 935 00:41:30,530 --> 00:41:36,740 * t tähendab minna first-- mine aadressile t. 936 00:41:36,740 --> 00:41:40,350 Nii, pildil, kui see on patakas Mälu me eraldamisel malloc, 937 00:41:40,350 --> 00:41:43,310 ja see on t * t tähendab minna siin. 938 00:41:43,310 --> 00:41:46,710 >> Vahepeal sa möödaminnes et väärtus väiketähed m 939 00:41:46,710 --> 00:41:50,040 to toupper, te saate tagasi kapitali M, kuhu sa panemist? 940 00:41:50,040 --> 00:41:52,410 Sa oled pannes seda, et samas kohas. 941 00:41:52,410 --> 00:41:55,540 Ja nii selle loogika nende põhimõisted see on ainult 942 00:41:55,540 --> 00:41:58,792 ära algustäht kui sa itereerima koos i või 943 00:41:58,792 --> 00:42:02,000 for loop või samas silmus, ta ei kavatse teha midagi enamat kui sa küsid. 944 00:42:02,000 --> 00:42:02,583 Hea küsimus. 945 00:42:02,583 --> 00:42:03,237 Jah? 946 00:42:03,237 --> 00:42:05,369 >> Sihtrühm: Miks te kasutate apparent meetod asemel 947 00:42:05,369 --> 00:42:05,979 massiivi? 948 00:42:05,979 --> 00:42:07,395 >> DAVID J. Humala: Ah, hea küsimus. 949 00:42:07,395 --> 00:42:10,672 Miks te kasutate apparent meetod asemel massiivi meetodit? 950 00:42:10,672 --> 00:42:12,130 Ole mingit erilist põhjust, kui aus olla. 951 00:42:12,130 --> 00:42:15,290 Ja tegelikult, sel Selline näiteks õigus, 952 00:42:15,290 --> 00:42:17,556 Ma lihtsalt väites, muutes Programm keerulisem, 953 00:42:17,556 --> 00:42:19,680 rohkem silmad klaasimine üle, inimesed end välja 954 00:42:19,680 --> 00:42:22,830 sest see näeb super kauge, kuid kuigi see teeb sama asja. 955 00:42:22,830 --> 00:42:26,695 Ja nii, ausalt öeldes, see on asjatult visuaalselt kompleksset lahendust 956 00:42:26,695 --> 00:42:27,320 probleemile. 957 00:42:27,320 --> 00:42:29,580 >> See on ikka hea disain, viis viiest projekteerimise, 958 00:42:29,580 --> 00:42:33,140 kas see on sulg märke või kursor märke. 959 00:42:33,140 --> 00:42:36,299 Aga-- eriti kui saame hiljem muidugi pset 5 960 00:42:36,299 --> 00:42:39,340 kui me seda rakendama sõnastik, mis Olen mainitud paar korda-- 961 00:42:39,340 --> 00:42:42,300 me tegelikult hoolivad madal mäluaadressid 962 00:42:42,300 --> 00:42:44,140 et me tõesti aru mis toimub. 963 00:42:44,140 --> 00:42:48,300 >> Aga nüüd selgub, et see koodirida siin nurksulgudes 964 00:42:48,300 --> 00:42:49,900 tegelikult ei eksisteeri. 965 00:42:49,900 --> 00:42:52,230 Nad on, mida nimetatakse süntaktiline suhkur, mis 966 00:42:52,230 --> 00:42:58,390 on lihtsalt kummaliselt lahe viis öelda koostaja muudab nurksulgudes olevat 967 00:42:58,390 --> 00:43:00,420 et matemaatiline väljendus. 968 00:43:00,420 --> 00:43:02,660 Nii et see on inimese konventsiooni saaks lihtsalt kirjutada 969 00:43:02,660 --> 00:43:04,220 Nende väga kasutajasõbralik sulgudes. 970 00:43:04,220 --> 00:43:06,850 Aga mida kompilaator, rõkkama, on tõesti teeme igal ajal 971 00:43:06,850 --> 00:43:10,970 sa kirjutad, mida on esile toodud rida 24, all kapuutsiga see on tõesti 972 00:43:10,970 --> 00:43:12,330 konverteerides selle see. 973 00:43:12,330 --> 00:43:16,200 See on lihtsalt rohkem nauditav kui inimese lugeda ja kirjutada koodi nagu line 24. 974 00:43:16,200 --> 00:43:18,530 Aga lõpuks need abirattad liiga maha tulla 975 00:43:18,530 --> 00:43:21,780 kui oma mugavusest tugevneb. 976 00:43:21,780 --> 00:43:27,240 >> Olgu, nii meenutavad siis, et see oli omamoodi suurim probleem 977 00:43:27,240 --> 00:43:27,807 me sattus. 978 00:43:27,807 --> 00:43:30,640 Ja see, mida tekitas kogu see damn vestlus suunanäitajaks, 979 00:43:30,640 --> 00:43:32,340 ja aadressid, kopeerimine ja asju. 980 00:43:32,340 --> 00:43:35,410 See oli, sest me komistada see loll, loll küsimus, millega 981 00:43:35,410 --> 00:43:38,830 Ma ellu logically-- Lauren siin on demo ja apelsinimahl 982 00:43:38,830 --> 00:43:43,770 on milk-- täiesti algoritmiliselt õige funktsiooni 983 00:43:43,770 --> 00:43:47,010 Vahetatakse kahe muutuja " väärtused, kuid kuradi asi 984 00:43:47,010 --> 00:43:50,550 ei ole veel ühtegi püsivat või püsiv, mõjutab minu kood. 985 00:43:50,550 --> 00:43:51,820 >> Ja miks see oli? 986 00:43:51,820 --> 00:43:54,650 Lühidalt, miks see nii on rakendamise swap 987 00:43:54,650 --> 00:43:58,740 loogiliselt õige, kuid ei mõjuta muutujatega, mis on läinud see, 988 00:43:58,740 --> 00:44:01,119 nagu x ja y jaoks peamine? 989 00:44:01,119 --> 00:44:02,410 Mis oli põhisisu küsimus? 990 00:44:02,410 --> 00:44:02,909 Jah? 991 00:44:02,909 --> 00:44:05,532 Sihtrühm: Kuna muutuja tehtud koopiad muutuja pass 992 00:44:05,532 --> 00:44:06,240 läbi funktsioon. 993 00:44:06,240 --> 00:44:09,060 >> DAVID J. Humala: Täpselt, kui te kaotate muutujad funktsiooni või argumendid 994 00:44:09,060 --> 00:44:11,030 funktsiooniks on nad vastu võetud koopia, mis 995 00:44:11,030 --> 00:44:14,770 tähendab, et sa saad identse otsin struktuuris bittide nii x ja y, 996 00:44:14,770 --> 00:44:15,955 nimetatakse siin a ja b. 997 00:44:15,955 --> 00:44:18,080 Ja sa ei saa midagi teha soovite neid koopiaid, 998 00:44:18,080 --> 00:44:20,657 aga nad ei kavatse ei ole mõju helistaja funktsiooni. 999 00:44:20,657 --> 00:44:22,990 Ja tegelikult me ​​juhtis et pilt ekraanil, tagasikutsumine 1000 00:44:22,990 --> 00:44:25,520 Viimane kord, mille kohaselt, kui teil tõesti arvad, mida on 1001 00:44:25,520 --> 00:44:28,570 toimub all hood-- kui see on arvuti mälu, 1002 00:44:28,570 --> 00:44:31,650 ja siin on patakas kasutatavat mälu peamine, 1003 00:44:31,650 --> 00:44:34,020 see on patakas kasutatavat mälu vahetada, 1004 00:44:34,020 --> 00:44:37,090 ja nii isegi siis, kui peamine on kahe muutuja, x ja y, 1005 00:44:37,090 --> 00:44:41,840 swap võib olla identsed otsin väärtusi, mis on mõlemad 1 ja 2, 1006 00:44:41,840 --> 00:44:44,520 kuid nad on täiesti erinevat tükkideks mälu. 1007 00:44:44,520 --> 00:44:46,130 >> Seega peame lahenduse sellele. 1008 00:44:46,130 --> 00:44:51,580 Ja ausalt öeldes tundub, et me nüüd on sellele probleemile lahendus, eks. 1009 00:44:51,580 --> 00:44:55,760 Kui me nüüd võime manipuleerida asju teel aadressid 1010 00:44:55,760 --> 00:44:59,310 ja omamoodi rennide ja redelid stiilis, järgige nooltega 1011 00:44:59,310 --> 00:45:02,820 ja kuhugi minna tahame mälu, ei saanud me 1012 00:45:02,820 --> 00:45:06,220 Selle probleemiga suundumiseks peamine swap 1013 00:45:06,220 --> 00:45:09,650 ei väärtusi tahame swap, vaid lihtsalt intuitiivselt 1014 00:45:09,650 --> 00:45:11,630 Mis võiks võtame vahetada asemel? 1015 00:45:11,630 --> 00:45:12,620 >> [Astudes HÄÄLT] 1016 00:45:12,620 --> 00:45:15,244 >> DAVID J. Humala: Miks me lihtsalt ei andke seda aadressid, eks? 1017 00:45:15,244 --> 00:45:17,470 Miks me ei anna Vaheta aare kaart, kui soovite, 1018 00:45:17,470 --> 00:45:20,950 mis viib selle tegelikud väärtused x ja y. 1019 00:45:20,950 --> 00:45:24,340 Olgem swap, tegelikult muuta nimetatud algsete bitti, mitte 1020 00:45:24,340 --> 00:45:26,797 sõidame koopiad bitti. 1021 00:45:26,797 --> 00:45:29,130 Ja nii tegelikult see, mida on saab olema lahendus. 1022 00:45:29,130 --> 00:45:31,899 See versioon on siin selgelt halb ja vale. 1023 00:45:31,899 --> 00:45:35,190 Ja nüüd, esimesel pilgul, see lihtsalt tundub nagu me lisada kamp tähed juhuslikult 1024 00:45:35,190 --> 00:45:37,106 ja ületas meie sõrmede et see oleks koostada. 1025 00:45:37,106 --> 00:45:38,460 Aga see nüüd koostada. 1026 00:45:38,460 --> 00:45:40,090 >> Aga vaatame, mis need asjad tähendavad. 1027 00:45:40,090 --> 00:45:43,990 Ja kahjuks autorid C oleks võinud valida teise sümbol 1028 00:45:43,990 --> 00:45:46,380 teha seda veidi selgem, kuid staar operaator 1029 00:45:46,380 --> 00:45:48,610 on erinevad tähendus kahes erinevas kontekstis. 1030 00:45:48,610 --> 00:45:50,890 Ja me oleme näinud nii, kuid olgem eristada. 1031 00:45:50,890 --> 00:45:55,310 >> Nii up ülaosas seal, kui ma olen muutunud ja b 1032 00:45:55,310 --> 00:46:00,470 alates on int on ka halb version int tärni, a ja b, 1033 00:46:00,470 --> 00:46:01,740 Varem olid täisarvud. 1034 00:46:01,740 --> 00:46:05,752 Mis on a ja b nüüd hea, roheline versioon? 1035 00:46:05,752 --> 00:46:06,900 Nad aadressid. 1036 00:46:06,900 --> 00:46:09,610 Aadressid, mida, teha selgeks? 1037 00:46:09,610 --> 00:46:10,770 Aadressid täisarvud. 1038 00:46:10,770 --> 00:46:12,520 Nii et ma olen öeldes int star vahendid 1039 00:46:12,520 --> 00:46:15,440 see on aadress täisarv, konkreetselt. 1040 00:46:15,440 --> 00:46:19,120 >> Nüüd teate rida koodi, midagi on muutunud liiga. 1041 00:46:19,120 --> 00:46:22,770 tmp jääb samaks, kuna see on lihtsalt ajutine täisarv, 1042 00:46:22,770 --> 00:46:24,110 no mälu magic seal. 1043 00:46:24,110 --> 00:46:26,370 Aga nüüd tuleb täht. 1044 00:46:26,370 --> 00:46:28,560 Ja tegelikult iga teiste mainita a ja b, 1045 00:46:28,560 --> 00:46:31,780 märgata, et kõik, mis on muutuvas punasest roheliseks 1046 00:46:31,780 --> 00:46:34,209 on see, et ma prefixing need muutujad tähed. 1047 00:46:34,209 --> 00:46:35,750 Sest ma ei taha, et kopeerida ja b. 1048 00:46:35,750 --> 00:46:40,350 Sest kui ma lihtsalt kopeerida ja b ja swap A ja B, mida ma tegelikult vahetada? 1049 00:46:40,350 --> 00:46:43,760 Just aadressid, ma tahan vahetada Mis on need aadressid. 1050 00:46:43,760 --> 00:46:44,860 Ma tahan sinna minna. 1051 00:46:44,860 --> 00:46:48,000 Ja nii star operaator sees minu funktsioon, 1052 00:46:48,000 --> 00:46:51,700 ei sees parameetrite nimekirja, tähendab, et sa minema need aadressid 1053 00:46:51,700 --> 00:46:54,490 ja tegelikult muuta neid väärtusi. 1054 00:46:54,490 --> 00:46:56,500 >> Mis siis pilt nüüd nägema asemel. 1055 00:46:56,500 --> 00:47:03,250 Noh, kui selle asemel ma möödaminnes jaoks A ja B 1 ja 2-- 1056 00:47:03,250 --> 00:47:05,790 Ma tegelikult vaja lisada üks teine ​​definitsioon siin. 1057 00:47:05,790 --> 00:47:09,030 Nii oletame, et see patakas Mälu on asukohast 10. 1058 00:47:09,030 --> 00:47:12,960 >> See on asukoha 11, kuid see on natuke lihtsustada, 1059 00:47:12,960 --> 00:47:18,900 Mul on nüüd kaks võimalust ma mööda x ja y või ma anda oma aadressi? 1060 00:47:18,900 --> 00:47:22,500 Kui ma edasi nende aadressid niimoodi, ma lihtsalt 1061 00:47:22,500 --> 00:47:25,390 Nüüd on vaja rakendada swap ühe rohelise koodi 1062 00:47:25,390 --> 00:47:29,080 nii, et kui ta näeb ja kui see näeb b, see ei ole lihtsalt kopeerida ja b 1063 00:47:29,080 --> 00:47:30,540 ja liigu piima ja apelsinimahl. 1064 00:47:30,540 --> 00:47:32,664 Piima ja apelsinimahl metafoor nüüd ei tööta, 1065 00:47:32,664 --> 00:47:35,060 sest need on tassid vedeliku ja mitte kaarte. 1066 00:47:35,060 --> 00:47:37,750 Meil asemel vaja minna tegeleda 10 ja me 1067 00:47:37,750 --> 00:47:42,420 vaja minna, et lahendada 11, ja Seejärel täita, et vahetada loogika. 1068 00:47:42,420 --> 00:47:45,580 >> Nii et loogika on sama, kuid vajame veidi teistmoodi 1069 00:47:45,580 --> 00:47:47,160 juurdepääsu nendele muutujatele. 1070 00:47:47,160 --> 00:47:52,400 Ja nii lõpuks, mida Programm on välja nägema see. 1071 00:47:52,400 --> 00:47:56,610 In swap.c sõnalt kopeeritud ja kleebitud roheline versioon. 1072 00:47:56,610 --> 00:47:58,450 Aga mul on vaja teha üks muutus. 1073 00:47:58,450 --> 00:48:00,180 See ei ole piisav lihtsalt muuta swap. 1074 00:48:00,180 --> 00:48:03,830 Mis muu koodirida ma pean muutma? 1075 00:48:03,830 --> 00:48:04,330 Jah? 1076 00:48:04,330 --> 00:48:05,770 >> Sihtrühm: Kus see võtab argumente. 1077 00:48:05,770 --> 00:48:07,603 >> DAVID J. Humala: Kus see võtab oma väidet. 1078 00:48:07,603 --> 00:48:09,985 Nii et kui ma keri üles peamiste ma ei saa lihtsalt liigu x ja y, 1079 00:48:09,985 --> 00:48:12,820 ja ma luban, viimase tükk uut süntaks täna. 1080 00:48:12,820 --> 00:48:17,200 Mul on vaja läbida mitte x ja y kuid aadress x ja y. 1081 00:48:17,200 --> 00:48:20,400 Ja selgub, sümbol et autorid C valisid 1082 00:48:20,400 --> 00:48:23,860 on, kui te kasutate ampersand siin, mitte tohi segi ajada bitwise ampersand, 1083 00:48:23,860 --> 00:48:27,130 kui te kasutate ampersand siin ja ampersand siin 1084 00:48:27,130 --> 00:48:29,570 Selle arvud välja teie jaoks, Mis on aadress x, 1085 00:48:29,570 --> 00:48:31,740 äkki see on 10, mida on aadress y, äkki see on 1086 00:48:31,740 --> 00:48:35,400 11 ja läbib need asemel. 1087 00:48:35,400 --> 00:48:37,210 >> Nii palju absorbeerida kõik korraga. 1088 00:48:37,210 --> 00:48:40,190 Aga vaatame nüüd kiiresti Meie ülejäänud neli minutit 1089 00:48:40,190 --> 00:48:42,150 kus asjad valesti minna. 1090 00:48:42,150 --> 00:48:45,120 Ja kui kõrvale, tegelikult Ma võtsin selle pildi, 1091 00:48:45,120 --> 00:48:46,920 TF võtsin selle pildi aasta või kaks tagasi. 1092 00:48:46,920 --> 00:48:49,190 Nii et see on tagumises nurgas of Eliot Toitlustus Hall. 1093 00:48:49,190 --> 00:48:52,310 Lähtekohad on ehk kõige raskem teema, mida me katta CS50. 1094 00:48:52,310 --> 00:48:54,810 Nii et kui te muretsema omamoodi kalle on nagu võibolla on 1095 00:48:54,810 --> 00:48:56,770 rohkem hokikeppide niimoodi aru, 1096 00:48:56,770 --> 00:49:00,160 me mingi jõudmas haripunkti Seoses kontseptuaalse keerukust. 1097 00:49:00,160 --> 00:49:02,300 >> Ja ma tuua selle foto, sest ma vannun 1098 00:49:02,300 --> 00:49:05,920 Jumalale, sügisel 1996, kui võtsin CS50 minu õpetamise mehe, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, istus ta mulle allapoole nurgas Eliot D. Hall lõunalauas 1100 00:49:09,620 --> 00:49:12,330 või õhtusöök, või midagi proovida mind aidata mõista viiteid. 1101 00:49:12,330 --> 00:49:16,520 Ja see on koht, kus ma olin nädala pärast see võeti kasutusele loengu kui 1102 00:49:16,520 --> 00:49:18,170 Ma lõpuks aru suunanäitajaks. 1103 00:49:18,170 --> 00:49:20,590 Ja ma olen lootusrikas, et see kliki palju varem teile. 1104 00:49:20,590 --> 00:49:23,540 Aga seda mõistma absoluutselt hulgast keerukamaid teemasid 1105 00:49:23,540 --> 00:49:24,420 me vaatasime. 1106 00:49:24,420 --> 00:49:25,819 Aga see on kõige võimsam. 1107 00:49:25,819 --> 00:49:28,860 Ja kui saad, see on tõesti kõik lihtsalt läheb lõpuks kokku. 1108 00:49:28,860 --> 00:49:31,460 Nii võite olla kindel, see ei ole pea kõik valamu täna. 1109 00:49:31,460 --> 00:49:32,980 >> Nii et siin on viimane programmi me ei kavatse vaadata. 1110 00:49:32,980 --> 00:49:35,605 Ja me ei kavatse lõpeb kiire kolme minuti claymation 1111 00:49:35,605 --> 00:49:37,030 mida meie sõber Nick PARLANTE. 1112 00:49:37,030 --> 00:49:41,440 Siin on programm, mis peal kaks read deklareerib muutuja x ja y. 1113 00:49:41,440 --> 00:49:44,780 Mis mõlemad on aadressid täisarvud, AKA suunanäitajaks. 1114 00:49:44,780 --> 00:49:48,125 Siis eraldada piisavalt mälu, et salvestada int 1115 00:49:48,125 --> 00:49:51,344 ja hoidke aadress Selle mälu x. 1116 00:49:51,344 --> 00:49:53,260 Nii, see on isegi lihtsam kui näiteks varem. 1117 00:49:53,260 --> 00:49:56,100 Anna mulle neli baiti mälu, see on suurus int, 1118 00:49:56,100 --> 00:49:58,000 ja pane see aadress x. 1119 00:49:58,000 --> 00:50:01,070 See joon siin tähendab mine aadressile x 1120 00:50:01,070 --> 00:50:05,270 ja pane tähenduses elu, number 42 on. 1121 00:50:05,270 --> 00:50:07,710 Aga see rida ärritas mind. 1122 00:50:07,710 --> 00:50:12,620 Star y tähendab minna aadressile y, ja pane õnnetu number 13 sinna. 1123 00:50:12,620 --> 00:50:15,780 Miks on ohtlik, sel hetkel on story-- kuigi kiiresti rääkinud 1124 00:50:15,780 --> 00:50:17,980 Meie vähenemas minuti siin-- miks on see halb 1125 00:50:17,980 --> 00:50:19,660 mulle öelda, minge aadressile y? 1126 00:50:19,660 --> 00:50:21,077 >> Sihtrühm: Sa pole [kuuldamatu]. 1127 00:50:21,077 --> 00:50:22,910 DAVID J. Humala: ma ei ole pane midagi y. 1128 00:50:22,910 --> 00:50:25,520 Mis on väärtus y, siinkohal lugu? 1129 00:50:25,520 --> 00:50:26,570 Me ei tea. 1130 00:50:26,570 --> 00:50:29,190 See on mõned prügi väärtus ja ega Binky tea. 1131 00:50:29,190 --> 00:50:32,532 Kui meil oleks lõpeb käesoleva märkuse. 1132 00:50:32,532 --> 00:50:34,832 >> [Video taasesitus] 1133 00:50:34,832 --> 00:50:36,500 >> Hei, Binky, ärka üles. 1134 00:50:36,500 --> 00:50:39,140 On aeg pointer lõbus. 1135 00:50:39,140 --> 00:50:40,210 >> -Mis see on? 1136 00:50:40,210 --> 00:50:41,690 Lugege vihjeid? 1137 00:50:41,690 --> 00:50:43,570 Oh, tüdruk. 1138 00:50:43,570 --> 00:50:46,600 >> Noh, et alustada, ma arvan, et me oleme läheb vaja paar suunanäitajaks. 1139 00:50:46,600 --> 00:50:47,380 >> -OKEI. 1140 00:50:47,380 --> 00:50:51,120 See kood eraldab kaks viiteid mis võib tuua täisarvud. 1141 00:50:51,120 --> 00:50:53,557 >> -OK, Samuti näen kaks suunanäitajaks, kuid nad 1142 00:50:53,557 --> 00:50:55,140 ei tundu olevat osutades midagi. 1143 00:50:55,140 --> 00:50:55,970 >> -See On õige. 1144 00:50:55,970 --> 00:50:58,100 Esialgu suunanäitajaks ei viita midagi. 1145 00:50:58,100 --> 00:51:00,950 Asju, millele need osutavad nimetatakse pointees ja milles neid 1146 00:51:00,950 --> 00:51:02,330 on eraldi etapis. 1147 00:51:02,330 --> 00:51:03,210 >> Oh, ja õigusega. 1148 00:51:03,210 --> 00:51:03,940 Ma teadsin seda. 1149 00:51:03,940 --> 00:51:05,730 Pointees eraldi. 1150 00:51:05,730 --> 00:51:08,310 Niisiis, kuidas sa eraldada pointee? 1151 00:51:08,310 --> 00:51:11,960 >> -OK, Samuti see kood eraldab uus täisarv pointee, 1152 00:51:11,960 --> 00:51:15,050 ja see osa komplekti x juhtida seda. 1153 00:51:15,050 --> 00:51:16,240 >> Hei, mis näeb parem välja. 1154 00:51:16,240 --> 00:51:17,743 Nii et see midagi teha. 1155 00:51:17,743 --> 00:51:23,580 >> -OK, Ma apparent kursorit x Numbri salvestamiseks 42 arvesse oma pointee. 1156 00:51:23,580 --> 00:51:27,130 Sest see trikk, et ma vajan oma võlukeppi ja dereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> -Sinu Võlukeppi ja dereferencing? 1158 00:51:30,200 --> 00:51:32,310 Uh, et see on suurepärane. 1159 00:51:32,310 --> 00:51:34,270 >> -See On see kood välja näeb. 1160 00:51:34,270 --> 00:51:35,970 Ma lihtsalt luua arvu and-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> Hei, vaata seal läheb. 1163 00:51:39,140 --> 00:51:43,980 Niisiis, teeme apparent x järgmiselt nool juurdepääsu oma pointee. 1164 00:51:43,980 --> 00:51:46,150 Sel juhul salvestada 42 seal. 1165 00:51:46,150 --> 00:51:50,700 Hei, proovige seda salvestada number 13 läbi teise osuti, y. 1166 00:51:50,700 --> 00:51:51,840 >> -OKEI. 1167 00:51:51,840 --> 00:51:56,270 Ma lihtsalt minna üle siin y, ja saada number 13 loodud. 1168 00:51:56,270 --> 00:52:00,380 Ja siis võta võlukepp dereferencing ja Lihtsalt-- 1169 00:52:00,380 --> 00:52:01,646 >> [Helisignaali] 1170 00:52:01,646 --> 00:52:04,080 >> Oh, hei, mis ei tööta. 1171 00:52:04,080 --> 00:52:06,470 Ütle, uh, Binky, ma ei arvan dereferencing 1172 00:52:06,470 --> 00:52:10,850 y on hea mõte, sest milles üles pointee on eraldi etapis. 1173 00:52:10,850 --> 00:52:12,480 Ja ma ei usu, et me kunagi tegin seda. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Hea punkt. 1175 00:52:14,620 --> 00:52:19,810 >> Jah, me eraldatud kursorit, y, kuid me iial seda viitavad pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Väga tähelepanelik. 1177 00:52:21,590 --> 00:52:23,215 Hei, sa näed hea välja seal, Binky. 1178 00:52:23,215 --> 00:52:26,390 Kas sa seda parandada, nii et y punktid samale pointee nagu x. 1179 00:52:26,390 --> 00:52:29,290 >> -Sure, Ma kasutan oma võlukeppi kohaviitade ülesanne. 1180 00:52:29,290 --> 00:52:31,970 >> -Kas See saab olema Probleem, nagu enne? 1181 00:52:31,970 --> 00:52:33,790 >> -Ei, See ei puuduta pointees. 1182 00:52:33,790 --> 00:52:35,840 See lihtsalt muudab üks pointer osutada sama asi-- 1183 00:52:35,840 --> 00:52:36,465 >> [Pauku] 1184 00:52:36,465 --> 00:52:37,450 --as teise. 1185 00:52:37,450 --> 00:52:38,440 >> Oh, ma näen. 1186 00:52:38,440 --> 00:52:41,200 Nüüd y osutab samas kohas kui x. 1187 00:52:41,200 --> 00:52:42,950 Nii, oodake, nüüd y on fikseeritud. 1188 00:52:42,950 --> 00:52:44,110 See on pointee. 1189 00:52:44,110 --> 00:52:47,779 Nii võid proovida võlukepp dereferencing uuesti saata 13 üle. 1190 00:52:47,779 --> 00:52:51,110 >> Oh, OK, siin läheb. 1191 00:52:51,110 --> 00:52:52,330 >> Hei, vaata seda. 1192 00:52:52,330 --> 00:52:53,570 Nüüd dereferencing tööde y. 1193 00:52:53,570 --> 00:52:57,900 Ja kuna viiteid jagavad et üks pointee, nad mõlemad näha 13. 1194 00:52:57,900 --> 00:52:59,952 >> Jah, jagamise, uh, mida iganes. 1195 00:52:59,952 --> 00:53:01,535 Nii me siis kohad vahetada nüüd? 1196 00:53:01,535 --> 00:53:03,730 >> Oh, vaatame me läbi aja. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -Lihtsalt Mäleta kolm pointer reegleid. 1199 00:53:06,520 --> 00:53:09,550 Number 1, põhistruktuur on see, et teil on pointer, 1200 00:53:09,550 --> 00:53:11,630 ja see juhib üle anda pointee. 1201 00:53:11,630 --> 00:53:13,740 Aga kursorit ja pointee eraldi. 1202 00:53:13,740 --> 00:53:15,620 Ja levinud viga on luua pointer 1203 00:53:15,620 --> 00:53:18,000 aga unustada, et anda sellele pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Number 2, pointer dereferencing algab pointer 1205 00:53:21,170 --> 00:53:24,020 ja järgnevalt selle noole üle juurdepääsu oma pointee. 1206 00:53:24,020 --> 00:53:27,815 Nagu me kõik teame, see töötab ainult siis, kui on pointee, millist saab tagasi 1207 00:53:27,815 --> 00:53:29,260 reegel number 1. 1208 00:53:29,260 --> 00:53:31,990 >> Number 3 pointer loovutamise võtab üks pointer 1209 00:53:31,990 --> 00:53:35,330 ja muudab seda, et see osutaks Sama pointee teise kursorit. 1210 00:53:35,330 --> 00:53:37,150 Nii pärast üleminekut, Kahe viiteid 1211 00:53:37,150 --> 00:53:40,927 mis viitavad samale pointee, mõnikord kutsutakse seda jagada. 1212 00:53:40,927 --> 00:53:42,510 Ja see kõik on see, tõesti. 1213 00:53:42,510 --> 00:53:43,130 Hüvasti nüüd. 1214 00:53:43,130 --> 00:53:43,475 >> [Taasesituse lõpetamiseks] 1215 00:53:43,475 --> 00:53:44,830 >> DAVID J. Humala: Ongi CS50. 1216 00:53:44,830 --> 00:53:46,246 Tänu professor Nick PARLANTE. 1217 00:53:46,246 --> 00:53:47,730 Näeme järgmisel nädalal. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [ELECTRONIC muusika mängib] 1220 00:53:56,435 --> 00:57:22,775