1 00:00:00,000 --> 00:00:03,395 >> [Muzikos grojimo] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 David J. Malan: Tai kaip pirmakursis seminaras šiandien. 4 00:00:13,280 --> 00:00:14,060 GERAI. 5 00:00:14,060 --> 00:00:15,024 Taigi labai lietinga iš. 6 00:00:15,024 --> 00:00:17,690 Tai yra linkęs atsitikti trečiadieniais, bet visi daugiau galimybių 7 00:00:17,690 --> 00:00:18,700 Jei turite klausimų šiandien. 8 00:00:18,700 --> 00:00:22,210 Taigi pradėkime nuo tikrųjų su vos per akimirką filmas. 9 00:00:22,210 --> 00:00:24,560 Bet mes pradėsime Ambicinga kaip visada. 10 00:00:24,560 --> 00:00:28,000 >> Tai yra CS50, ir tai yra 4 savaitės pabaigos. 11 00:00:28,000 --> 00:00:30,820 Taigi, jei jūs kada nors stebėjo TV ar kino kuriame 12 00:00:30,820 --> 00:00:34,690 Yra keletas kompiuterių ekspertai ir policija, ar FTB, arba kai agentūra 13 00:00:34,690 --> 00:00:36,930 bando sugauti kai Priešininkas, gerai, jūs 14 00:00:36,930 --> 00:00:40,850 tikriausiai girdėjote posakį "pagerinti" kuriuo ta technikas kažkaip 15 00:00:40,850 --> 00:00:44,750 stebuklingai priartinti iki begalybės kiek matyti nusikaltėlius 16 00:00:44,750 --> 00:00:48,640 tapatybė arba NL skaičius į net veidrodį mirguliavimas 17 00:00:48,640 --> 00:00:50,390 ar kieno nors akis žibėti. 18 00:00:50,390 --> 00:00:55,196 Taigi iš tiesų, tegul pažvelgti keletas tokių scenos iš Holivudo. 19 00:00:55,196 --> 00:00:55,862 [Vaizdo įrašų atkūrimas] 20 00:00:55,862 --> 00:00:59,243 Ok, dabar galime gauti gerą pažvelgti jums. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Laikyk. 23 00:01:07,415 --> 00:01:08,267 Vykdyti, kad atgal. 24 00:01:08,267 --> 00:01:09,121 >> -Palauk minutėlę. 25 00:01:09,121 --> 00:01:11,300 Eiti į dešinę. 26 00:01:11,300 --> 00:01:12,209 >> -Yra, Užšaldyti, kad. 27 00:01:12,209 --> 00:01:12,750 -Per visą ekraną. 28 00:01:12,750 --> 00:01:13,558 Ok, užšaldyti, kad. 29 00:01:13,558 --> 00:01:14,820 Sugriežtinti ant, kad jūs? 30 00:01:14,820 --> 00:01:16,530 -Vector On, kad vaikinas iš galinio rato. 31 00:01:16,530 --> 00:01:19,400 -Zoom Į čia šioje vietoje. 32 00:01:19,400 --> 00:01:22,846 -Su Tinkamą įrangą, vaizdas galėtų būti išplėsta ir aštrus. 33 00:01:22,846 --> 00:01:24,065 -Kas tai? 34 00:01:24,065 --> 00:01:25,600 -Jis Yra patobulinimas programa. 35 00:01:25,600 --> 00:01:26,860 -Ar Jums aišku, kad iki tokių yra? 36 00:01:26,860 --> 00:01:27,890 -Nežinau. 37 00:01:27,890 --> 00:01:29,050 Leiskite jį pagerinti. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Skyriuje A6. 39 00:01:31,575 --> 00:01:33,642 >> -Aš Sustiprino detales, and-- Aš manau, kad yra 40 00:01:33,642 --> 00:01:35,433 pakankamai sustiprinti, išleisti jį į mano ekraną. 41 00:01:35,433 --> 00:01:37,080 -Aš Sustiprino savo akis atspindys. 42 00:01:37,080 --> 00:01:38,830 >> -ėlis Manimi paleisti tai per Vaizdo didinimas. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Galite padidinti tai? 44 00:01:40,100 --> 00:01:41,875 >> -Laikykis. 45 00:01:41,875 --> 00:01:44,010 >> -I've Dirba šioje atspindys. 46 00:01:44,010 --> 00:01:44,995 >> -Someone Anketa atspindys. 47 00:01:44,995 --> 00:01:45,495 -Atspindys. 48 00:01:45,495 --> 00:01:47,399 -Yra Šiek iš žmogaus veido atspindys. 49 00:01:47,399 --> 00:01:48,065 -The Atspindys. 50 00:01:48,065 --> 00:01:48,981 -Yra Šiek atspindys. 51 00:01:48,981 --> 00:01:50,600 -Zoom Į ant veidrodžio. 52 00:01:50,600 --> 00:01:52,712 -Jūs Galite pamatyti atspindys. 53 00:01:52,712 --> 00:01:54,350 -Ar Jums padidinti atvaizdą iš čia? 54 00:01:54,350 --> 00:01:55,370 -Ar Jums padidinti jį čia? 55 00:01:55,370 --> 00:01:56,210 -Ar Tu jį pagerinti? 56 00:01:56,210 --> 00:01:56,900 Ar galite jį pagerinti? 57 00:01:56,900 --> 00:01:57,870 >> -Ar Mes sustiprinti tai? 58 00:01:57,870 --> 00:01:58,717 >> -Ar Tu jį pagerinti? 59 00:01:58,717 --> 00:02:00,050 -Hold Ant sekundę, aš stiprinti. 60 00:02:00,050 --> 00:02:00,924 -Zoom Į ant durų. 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 -Move Vietą. 64 00:02:03,490 --> 00:02:03,990 -Daugiau. 65 00:02:03,990 --> 00:02:04,690 -Wait, Sustoti. 66 00:02:04,690 --> 00:02:05,190 -Stop. 67 00:02:05,190 --> 00:02:05,970 -Pause Ją. 68 00:02:05,970 --> 00:02:09,460 -Rotate Mums 75 laipsnių aplink vertikalią, prašau. 69 00:02:09,460 --> 00:02:10,962 -Stop. 70 00:02:10,962 --> 00:02:14,040 Grįžti į dalis apie duris, dar kartą. 71 00:02:14,040 --> 00:02:15,860 >> -Got Vaizdo stipriklis, kuris gali Bitmap? 72 00:02:15,860 --> 00:02:18,776 >> -hey, Gal mes galime naudoti Pradeep Sen būdas pamatyti į langus. 73 00:02:18,776 --> 00:02:20,372 -Tai Programinė įranga yra moderniausias. 74 00:02:20,372 --> 00:02:21,845 >> -The Savo reikšmės yra išjungtas. 75 00:02:21,845 --> 00:02:24,300 >> -Su Dešinę kombinaciją algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> -Jis Yra imtasi panaikinimas algoritmai į kitą lygį, 77 00:02:26,755 --> 00:02:28,730 ir aš galiu naudoti juos sustiprinti šį nuotrauka. 78 00:02:28,730 --> 00:02:31,286 >> -Lock Įjungimas ir padidinti z ašį. 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 Ir sustiprinti. 83 00:02:34,960 --> 00:02:37,180 >> [PABAIGA PLAYBACK] 84 00:02:37,180 --> 00:02:41,160 >> David J. Malan: Gerai, taip visi tie, kurie iš tikrųjų žodžiai. 85 00:02:41,160 --> 00:02:44,450 Jie tiesiog suverti kartu A būdas, kad iš tikrųjų tai ne protinga. 86 00:02:44,450 --> 00:02:48,400 Ir, tiesą sakant, CS50 ir kursai patinka linkęs sugadinti TV ir filmų daug 87 00:02:48,400 --> 00:02:48,900 tau. 88 00:02:48,900 --> 00:02:52,330 Nes kai tų kompiuterių ekspertai yra barškėjimas Atskyrimo sąlygų ir sako: 89 00:02:52,330 --> 00:02:56,860 išgalvotas dalykų, pavyzdžiui, vektoriai, ir z ašis, 90 00:02:56,860 --> 00:02:59,572 ir bet koks kitas numeris tikrai daugiau techniniai terminai, 91 00:02:59,572 --> 00:03:02,030 jie tikrai tik apjuostame žodžiai kartu pernelyg dažnai. 92 00:03:02,030 --> 00:03:05,020 Ar tai vienas iš mūsų viltis yra ta, kad kaip šalutinis poveikis imtis kursus 93 00:03:05,020 --> 00:03:08,245 kaip tai bus daugiau žmonių Pasaulio tikrųjų galėtų sverti 94 00:03:08,245 --> 00:03:12,040 ir tiesiog vis tiek šiek tiek įtakoti kokybė ir tikslumas iš tų filmų? 95 00:03:12,040 --> 00:03:14,350 >> Iš tiesų, tegul į realybę išvaizdą. 96 00:03:14,350 --> 00:03:18,070 Taigi čia yra darbuotojai nuotrauka Marija, vienas iš mūsų mokymo bičiulių. 97 00:03:18,070 --> 00:03:20,050 Ir manau, ji yra įtariamas kažką. 98 00:03:20,050 --> 00:03:23,730 Ir dar, ten yra mirgėti kai įrodymu jos akis, 99 00:03:23,730 --> 00:03:25,480 arba iš jos akiniai atspindys. 100 00:03:25,480 --> 00:03:30,760 Na, jei mes tiksliai taip, kaip filmuose pasiūlyti, kur mes priartinimas ir "pagerinti", 101 00:03:30,760 --> 00:03:34,080 tai, kiek informacijos yra Marijos veido 102 00:03:34,080 --> 00:03:36,795 kai fotografuojate su tuo originaliu dydžiu. 103 00:03:36,795 --> 00:03:39,120 >> Ir, iš tiesų, jūs galite pamatyti šiuos taškus. 104 00:03:39,120 --> 00:03:41,900 Ir tai yra tai, ką yra vadinami pikselių, kad P-I-X-E-L-S, 105 00:03:41,900 --> 00:03:45,740 kuris yra tik kvadratinis paprastai kad yra taškas, kad komponuje vaizdą. 106 00:03:45,740 --> 00:03:49,200 Ir atgal per dieną, o iš tiesų net Šiandien kai kurie iš šiandienos LED televizorių 107 00:03:49,200 --> 00:03:51,950 ar LCD televizorių, jei jūs turite vienas savo kambaryje ar namuose, 108 00:03:51,950 --> 00:03:55,100 Jei eiti Super jai artimas ir ypač jei tai šiek tiek vyresni televizija, 109 00:03:55,100 --> 00:03:58,760 Jūs tikriausiai net pamatyti šiuos taškus ir tai, ką rašyti vaizdą. 110 00:03:58,760 --> 00:04:00,980 >> Ir ten yra ne daugiau Informacija nei šis. 111 00:04:00,980 --> 00:04:05,400 Galėtume "padidinti", atsižvelgiant į prasme švelninamasis dalykus vėl ir rūšiuoti 112 00:04:05,400 --> 00:04:09,040 išvadą rūšies, tarsi ką spalva turi būti šalia Marijos akis 113 00:04:09,040 --> 00:04:10,910 kad iš tikrųjų tai ne taip pixelated. 114 00:04:10,910 --> 00:04:14,510 Bet jei aš nuolat priartinimo, yra yra blogiukas savo akis. 115 00:04:14,510 --> 00:04:16,600 Pavyzdžiui, kad yra visi Informacija, kurią mes turime. 116 00:04:16,600 --> 00:04:18,920 Jūs negalite kurti Informacija iš nieko. 117 00:04:18,920 --> 00:04:20,790 Yra tik ribotas bitų skaičius ten. 118 00:04:20,790 --> 00:04:22,873 >> Taigi, problemą, 4, kur Jūs turite galimybę 119 00:04:22,873 --> 00:04:24,580 žaisti su šio pasaulio natūra. 120 00:04:24,580 --> 00:04:27,610 Probleminėse Set 4, jums ištirti pasaulis grafika, ir ekspertizės, 121 00:04:27,610 --> 00:04:30,870 ir iš tikrųjų rašyti kodą kad atgauna prarastus vaizdų. 122 00:04:30,870 --> 00:04:33,510 Jūs rašyti kodą, kad manipuliuoja esamus vaizdus 123 00:04:33,510 --> 00:04:36,120 ir galiausiai suprasti, kas vyksta po gaubtu. 124 00:04:36,120 --> 00:04:38,540 >> Ir it turns out, tai tikrai ne visi, kad sudėtinga. 125 00:04:38,540 --> 00:04:41,320 Pavyzdžiui, jei mes norėjome atstovauti smiley veido kur 126 00:04:41,320 --> 00:04:44,160 šių juodų taškų, arba šie juodi, 127 00:04:44,160 --> 00:04:47,230 Na, mes galime tiesiog atstovauti juos kaip tikrai Bitmap. 128 00:04:47,230 --> 00:04:50,040 Ir jei jūs kada nors girdėjote, kad išraiška Bitmap, galbūt 129 00:04:50,040 --> 00:04:52,330 dabar pradeda padaryti šiek tiek daugiau prasmės šiandien. 130 00:04:52,330 --> 00:04:53,580 >> Mes jau žinome, kas šiek tiek yra. 131 00:04:53,580 --> 00:04:54,160 Tai 0 arba 1. 132 00:04:54,160 --> 00:04:56,201 Ir žemėlapis yra tik kažkas kaip popieriaus lapo 133 00:04:56,201 --> 00:04:59,180 kuri suteikia jums nurodymus ir turi gal nuo x ir y koordinatėmis tinklelis. 134 00:04:59,180 --> 00:05:00,540 Taigi čia yra rastras. 135 00:05:00,540 --> 00:05:03,680 Tai Bitų žemėlapis pagal kurį 1, matyt, 136 00:05:03,680 --> 00:05:07,857 ketina atstovauti balta pikselių, ir 0 ketina atstovauti juodas pikselis. 137 00:05:07,857 --> 00:05:09,440 Bet mes tikrai galėtų apversti jį aplink. 138 00:05:09,440 --> 00:05:11,648 Jis tikrai ne klausimas, todėl Kol mes nuoseklūs. 139 00:05:11,648 --> 00:05:15,570 Ir čia yra kaip, binary-- viduje kompiuterio atmintyje, ar net viduje 140 00:05:15,570 --> 00:05:18,160 iš kietajame failą drive-- galėtum laikyti 141 00:05:18,160 --> 00:05:20,240 iš smiley veido vaizdų paprasčiausias. 142 00:05:20,240 --> 00:05:23,990 Bet ką mes, žinoma, trūksta šio paveikslėlio? 143 00:05:23,990 --> 00:05:24,610 Spalva, tiesa? 144 00:05:24,610 --> 00:05:28,220 Tai akivaizdus Kitas žingsnis ar stiprinimas, siekiant pagerinti tai su spalva. 145 00:05:28,220 --> 00:05:32,230 Taigi, deja, tik su viena bitų, 0 arba 1, galėtume atstovauja spalvą. 146 00:05:32,230 --> 00:05:36,100 Tai galėtų būti raudonos, mėlynos arba, arba juoda, arba balta, arba žalios arba rausvos spalvos, 147 00:05:36,100 --> 00:05:37,420 arba bet spalvų poros. 148 00:05:37,420 --> 00:05:40,860 Bet paprastumo dėlei, mes tiesiog manyti, juoda ir balta. 149 00:05:40,860 --> 00:05:45,930 >> Taigi, kas logiškai mums reikia, jei mes nori įgyvendinti spalvą vaizdą? 150 00:05:45,930 --> 00:05:49,080 Ką turime daryti? 151 00:05:49,080 --> 00:05:51,900 Pavyzdžiui, jei veiksnys ribojantis yra tai, kad su vienu tiek galite tik 152 00:05:51,900 --> 00:05:55,977 atstovauja du būsenos, 0 arba 1, balta arba juoda, ką jūs norite daryti? 153 00:05:55,977 --> 00:05:56,810 Auditorija: Daugiau duomenų. 154 00:05:56,810 --> 00:05:58,813 David J. Malan: Daugiau bitai, Yeah daugiau duomenų, daugiau bitai. 155 00:05:58,813 --> 00:06:01,440 Ir, tiesą sakant, tai yra būtent tai, kaip spalva vaizdai yra atstovaujama. 156 00:06:01,440 --> 00:06:05,120 Užuot naudoti vieną gabaliuką, 0 arba 1 kiekvienam vaizdo elementui, kiekvienas taškas, 157 00:06:05,120 --> 00:06:06,170 jūs tiesiog naudoti kelis. 158 00:06:06,170 --> 00:06:09,660 Gal naudoti 8, galbūt, dažniau naudoti 24, ir iš tiesų, probleminėse Set 159 00:06:09,660 --> 00:06:13,300 4, bus jums žaisti su byla formatas, kuris naudoja 24 bitų paprastai. 160 00:06:13,300 --> 00:06:15,430 >> Bet dauguma iš jūsų tikriausiai susipažinęs su JPEG. 161 00:06:15,430 --> 00:06:17,460 Jeigu jūs kada nors imtasi nuotrauka telefoną, 162 00:06:17,460 --> 00:06:20,360 arba įkeliami ar matė kažką "Facebook", "Flickr" ar, bet koks skaičius 163 00:06:20,360 --> 00:06:24,882 foto pagrįstas svetaines, jūs tikriausiai matė JPEG anksčiau. 164 00:06:24,882 --> 00:06:27,840 Ir pasirodo, tai yra failas formatas mes ketiname naudoti PSet 4 165 00:06:27,840 --> 00:06:30,340 kuriuo jūs ketinate turi susigrąžinti vaizdus 166 00:06:30,340 --> 00:06:35,160 kad aš atsitiktinai ištrintas iš taško A sugadintas atminties kortelę į fotoaparatą, 167 00:06:35,160 --> 00:06:35,800 jei bus. 168 00:06:35,800 --> 00:06:38,490 >> Ir paaiškėja, kad nors JPEG yra gana sophisticated-- 169 00:06:38,490 --> 00:06:40,906 tai daug sudėtingesnės nei juoda ir balta taškeliais 170 00:06:40,906 --> 00:06:44,480 mes matėme prieš momentas, nes ten iš tikrųjų išgalvotas algoritmai, kad 171 00:06:44,480 --> 00:06:47,410 yra naudojami suspausti JPEG, taip, kad jūs galite turėti tikrai gražus, 172 00:06:47,410 --> 00:06:49,832 kokybės vaizdą, bet naudojant palyginti nedaug bitai. 173 00:06:49,832 --> 00:06:51,790 Ir mes grįžti į suspaudimo prieš ilgas. 174 00:06:51,790 --> 00:06:56,280 Pasirodo, kad pirmasis trys baitų JPEG image-- 175 00:06:56,280 --> 00:07:02,750 nesvarbu, ką jūs atlikote nuotrauka of-- vertybės 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Kitaip tariant, jei jūs tiesiog matyti, kad bitai modelį, 177 00:07:05,990 --> 00:07:09,180 atstovavo čia kaip trys baitų, arba 24 bitai iš viso, 178 00:07:09,180 --> 00:07:13,810 su didele tikimybe galima daryti išvadą, kad jūs žiūrite į jį tai pirmas tris 179 00:07:13,810 --> 00:07:15,230 baitų JPEG. 180 00:07:15,230 --> 00:07:18,040 Ir tai yra tai, kas vadinama kaip JPEG parašu. 181 00:07:18,040 --> 00:07:20,540 A failų formatų daug ten yra linkę pradėti 182 00:07:20,540 --> 00:07:23,735 su tam tikrais modeliais 0s ir 1s, taip, kad Windows ir Mac OS ir "iOS", 183 00:07:23,735 --> 00:07:28,272 ir "Android žinoti, kokios bylos jie yra, be to, taip vadinamo failą 184 00:07:28,272 --> 00:07:29,730 pratęsimo, kuri daug failų turėti. 185 00:07:29,730 --> 00:07:32,590 Jei turite .jpg, tai kitas raktas į kompiuterį. 186 00:07:32,590 --> 00:07:35,310 >> Tad dabar pažvelgti į tai, šiek tiek daugiau techniškai. 187 00:07:35,310 --> 00:07:37,390 Mes žinome, po dešimtainio Sistema yra 0 iki 9. 188 00:07:37,390 --> 00:07:38,740 Mes žinome, dvejetainis yra 0 ir 1. 189 00:07:38,740 --> 00:07:41,842 Ir jei jūs manote atgal į PSet 0, mes turėjome galite ristis su, 190 00:07:41,842 --> 00:07:43,800 už truputį, kažko vadinamas šešioliktainis, 191 00:07:43,800 --> 00:07:47,320 kur jūs turite 16 skaitmenų, vietoj 10 arba vietoj 2. 192 00:07:47,320 --> 00:07:50,405 Ir tie skaičiai, pagal susitarimą, yra 0 iki 9 ir tada 193 00:07:50,405 --> 00:07:55,040 per f, kur f parodo, ką dešimtainis skaičius, kaip greitai normalumas 194 00:07:55,040 --> 00:07:56,640 patikrinti? 195 00:07:56,640 --> 00:07:57,610 Taigi, 15. 196 00:07:57,610 --> 00:08:01,390 Ir turi atstovauti 10, tiesiog pobūdis užsakymų, kad aš tikros. 197 00:08:01,390 --> 00:08:04,350 Tai tiesiog savavališkai konvencija, bet tai gana standartinis. 198 00:08:04,350 --> 00:08:06,870 >> Taigi, jei pažvelgtume į šio modelio trijų bytes-- tegul 199 00:08:06,870 --> 00:08:09,620 tik pradeda žiūrėti į jį būdu, kuris atitiktų tai, kaip 200 00:08:09,620 --> 00:08:12,450 kompiuterių mokslininkai paprastai pažvelgti ir pagalvoti apie failus. 201 00:08:12,450 --> 00:08:15,580 Jūs tikrai gali galvoti apie failai 0s ir 1s ir dešimtainė, 202 00:08:15,580 --> 00:08:19,340 Bet iš tikrųjų, mes linkę naudoti dvejetainis ar daugiau paprastai hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 atgal nuo PSet 0. 204 00:08:20,760 --> 00:08:25,857 Taigi leiskite man pasiūlyti, kad 255, 216, 255 ir yra tik šie 0s ir 1s modeliai. 205 00:08:25,857 --> 00:08:28,440 Ir jūs galite tai patikrinti, jei jūs noriu padaryti matematikos nuo 0-inę savaitę. 206 00:08:28,440 --> 00:08:30,810 Bet dabar, tiesiog manyti, , kad tai yra iš tikrųjų teisinga. 207 00:08:30,810 --> 00:08:33,850 Aš ką tik perrašyta tūkstantųjų numeriai trys dvejetainių reikšmių. 208 00:08:33,850 --> 00:08:36,100 Dabar ką aš ruošiuosi padaryti, tai tiesiog pridėkite keletą tarpą, 209 00:08:36,100 --> 00:08:37,266 tik skaitomumas labui. 210 00:08:37,266 --> 00:08:39,940 Ir pranešimas, aš tiesiog vyksta perkelti daiktus atskirai. 211 00:08:39,940 --> 00:08:43,090 Taigi, prieš, po, prieš, po. 212 00:08:43,090 --> 00:08:46,180 Darau nieko įdomaus kita ne tik plinta dalykus taip 213 00:08:46,180 --> 00:08:50,380 kad pranešimas kiekviena aštuonių rinkinys bitai yra dabar dvi keturių bitai. 214 00:08:50,380 --> 00:08:54,920 Tai yra naudinga, nes šešioliktainėje yra ypač madinga 215 00:08:54,920 --> 00:09:00,930 nes kiekvienas šešioliktainis skaitmuo 0 per f, arba, konkrečiau 0 per 15, 216 00:09:00,930 --> 00:09:03,430 gali būti atstovaujama su lygiai keturi bitai. 217 00:09:03,430 --> 00:09:07,960 Kitaip tariant, jei jūs šešioliktainėje nori atstovauti 0, tai tik 0000, 218 00:09:07,960 --> 00:09:08,780 keturi nuliai. 219 00:09:08,780 --> 00:09:13,997 Ir jei norite atstovauti 15, tai 1111, kuri yra keturi bitai. 220 00:09:13,997 --> 00:09:16,080 Ir jei jūs matematikos, jei tai yra tie, vieta, 221 00:09:16,080 --> 00:09:18,210 tai yra 16s vieta, kad ketina suteikti you-- 222 00:09:18,210 --> 00:09:19,960 o kad vyksta to-- Atsiprašome, susidedančiame iš dviejų, 223 00:09:19,960 --> 00:09:23,660 kad ketina suteikti jums 15, tie vieta, Nedideliais vieta Fours ir aštuonias vieta. 224 00:09:23,660 --> 00:09:26,821 Taigi leiskite man pasiūlyti, kad šis nustatyti iš keturių bitų kairėje 225 00:09:26,821 --> 00:09:28,070 yra tai, ką mes ketiname skambinti f. 226 00:09:28,070 --> 00:09:30,110 Tai didžiausias kiekis, kurį gali atstovauti keturios bitai. 227 00:09:30,110 --> 00:09:33,300 Ir mes jau žinome iš šešioliktainis f yra didžiausia skaitmenų šešioliktainis. 228 00:09:33,300 --> 00:09:36,020 Mes turime dar vieną F ten, dar du ten. 229 00:09:36,020 --> 00:09:38,980 Ir dabar, tiesiog tikėjimu kad aš padariau matematikos teisę 230 00:09:38,980 --> 00:09:41,890 ir kad yra kairėje pusėje tų bitai, 1101, 231 00:09:41,890 --> 00:09:43,980 yra tas pats, kaip D šešioliktainėje. 232 00:09:43,980 --> 00:09:46,490 Ir dešinė, 1000, yra tik 8. 233 00:09:46,490 --> 00:09:48,140 >> Ir, kad viena lengva pamatyti, tiesa? 234 00:09:48,140 --> 00:09:51,670 8 represents-- yra teisinga po to aštuonias vietoje. 235 00:09:51,670 --> 00:09:56,040 Taigi, mes turime vieną į aštuonias kolonėlės ir nieko, keturiomis, po du ar tie. 236 00:09:56,040 --> 00:09:59,830 Taigi dabar daugiau tradiciškai, žmonės linkę rašyti šešioliktainius skaitmenis, kaip šis, 237 00:09:59,830 --> 00:10:03,000 jūs tiesiog Squish juos kartu, ir tada jūs priešdėlis juos su 0x. 238 00:10:03,000 --> 00:10:05,920 Tai reiškia ne ką kitą, nei vizualiai raktas į human-- 239 00:10:05,920 --> 00:10:10,350 čia ateina šešioliktainis value-- nes jis gali kitaip būti akivaizdu. 240 00:10:10,350 --> 00:10:13,629 >> Kuris yra, galiausiai, kad iš nulių ir modelis, 241 00:10:13,629 --> 00:10:16,170 arba šešioliktainis modelis skaitmenų analogiškai, kad esate 242 00:10:16,170 --> 00:10:18,990 ketina pradėti ieškoti probleminėse Set 4 yra this-- 243 00:10:18,990 --> 00:10:22,120 ir problema Nustatyti 4 spec eis Jūs per tai daugiau detail-- 244 00:10:22,120 --> 00:10:25,344 bet suprasti, kaip rūšiuoti paslaptingų kaip Tai gali atrodyti iš pirmo žvilgsnio, 245 00:10:25,344 --> 00:10:27,010 jūs ketinate pradėti matyti šį daug. 246 00:10:27,010 --> 00:10:30,320 Ir iš tikrųjų, netgi GDB, The debugeris įdiegėme pirmadienį 247 00:10:30,320 --> 00:10:35,440 ir Danas pristato į PSet 3, vyksta dažnai jums parodyti šešioliktainius vertybes 248 00:10:35,440 --> 00:10:39,910 tik dėl to, jie linkę būti daugiau Paprastųjų nei dešimtosios dalies arba dvejetainis 249 00:10:39,910 --> 00:10:41,157 į kompiuterių pasaulyje. 250 00:10:41,157 --> 00:10:42,490 Dabar galime įdėti į kontekstą tai. 251 00:10:42,490 --> 00:10:48,040 Daugelis galbūt prisiminti tai įsivaizduoju čia, kuris atėjo iš ką? 252 00:10:48,040 --> 00:10:51,240 "Vista", todėl net anksčiau nei , kad "Windows XP" padarė šį debiutą. 253 00:10:51,240 --> 00:10:52,620 Taigi tai yra gražus kraštovaizdis. 254 00:10:52,620 --> 00:10:55,940 Ir iš tiesų, jei baksnoti aplink online-- Aš manau, kad tai Vikipedijos straipsnis, 255 00:10:55,940 --> 00:11:00,110 kuriame kažkas labai nuostabiai išėjo nustatyta, kad tai vieta pasaulyje įsteigti 256 00:11:00,110 --> 00:11:02,240 jo ar jos kamera būtent teisę place-- 257 00:11:02,240 --> 00:11:06,510 o tai šiandien atrodo like-- bet tai lygiai tas pats nustatymas. 258 00:11:06,510 --> 00:11:10,060 Šis vaizdas, nors, yra faile formatas vadinamas Bitmap, B-M-P. 259 00:11:10,060 --> 00:11:12,910 Ir mes ketiname imtis super Greita žvilgsnis, ką tai reiškia. 260 00:11:12,910 --> 00:11:17,770 >> Bet Bitmap yra tik kitoks būdas atstovaujantys vaizdai vis dar naudojate taškų 261 00:11:17,770 --> 00:11:19,580 į 0s ir 1s, galiausiai. 262 00:11:19,580 --> 00:11:23,282 Bet greitai žvilgsnio, ji turi įdomesnis parašas 263 00:11:23,282 --> 00:11:24,490 tuo failo pradžioje. 264 00:11:24,490 --> 00:11:26,670 Tai ne tik trijų baitų, o ten 265 00:11:26,670 --> 00:11:30,770 visa krūva modelių baitų , kurie iš anksto nustatytą reikšmę. 266 00:11:30,770 --> 00:11:34,490 Pavyzdžiui, kažkur Pirmieji keli baitai rastrinis vaizdas 267 00:11:34,490 --> 00:11:37,440 ketina būti dydis vaizdas, atvaizdo plotis, 268 00:11:37,440 --> 00:11:40,390 atvaizdo aukštis, todėl Naudingos metaduomenų, jei bus. 269 00:11:40,390 --> 00:11:43,940 Naudinga informacija, kad Photoshop arba bet grafikos programa jūs naudojate 270 00:11:43,940 --> 00:11:45,180 gali iš tikrųjų rūpi. 271 00:11:45,180 --> 00:11:47,170 >> Taigi daugiau apie tai Problemų nustatymas 4, tačiau tai 272 00:11:47,170 --> 00:11:49,220 tik pasakyti, kad Dienos pabaigoje 273 00:11:49,220 --> 00:11:52,390 visi formatai jau naudojate už years-- failus Microsoft Word, 274 00:11:52,390 --> 00:11:55,820 Skaičiai failus, Excel failus, bet formatų skaičius 275 00:11:55,820 --> 00:11:57,770 kurie gali turėti tam tikrą žinoma failo plėtinys 276 00:11:57,770 --> 00:12:00,130 yra tik 0s ir 1s po gaubtu. 277 00:12:00,130 --> 00:12:02,970 Ir žmonės nusprendė ką konvencijos yra, 278 00:12:02,970 --> 00:12:08,340 kas modeliai 0s ir 1s atstovauti Word failą, palyginti su Excel failą, 279 00:12:08,340 --> 00:12:10,322 palyginti su bet kitų failų formatų. 280 00:12:10,322 --> 00:12:12,780 Taigi PSet 4, turėsite galimybė žaisti su tuo. 281 00:12:12,780 --> 00:12:14,405 >> Bet ką tai reiškia turėti konstrukto. 282 00:12:14,405 --> 00:12:18,012 Tai tikrai gražus Segue dabar į C, kuris turi tik pora 283 00:12:18,012 --> 00:12:20,220 Papildomų funkcijų, mes ne pažvelgė dar. 284 00:12:20,220 --> 00:12:24,230 Tai gana mažas kalba ir viena iš naudingų funkcijų apie C yra konstrukto. 285 00:12:24,230 --> 00:12:27,300 Pavyzdžiui, jei jūsų norėjau represent-- tegul 286 00:12:27,300 --> 00:12:33,690 sako, kad jūs norėjo turėti kintamąjį, kad reiškia, kad kai kuriose programos studentas. 287 00:12:33,690 --> 00:12:37,330 Gal jūs raštu kursą Registracija programa arba pagrindinė prekybos 288 00:12:37,330 --> 00:12:38,870 priemonė, ar kažkas panašaus. 289 00:12:38,870 --> 00:12:42,922 Kokie vienetų duomenis, susijusius studentui, kad ateina į galvą? 290 00:12:42,922 --> 00:12:44,880 Kaip studentas atstovauja su tuo, ką vertina? 291 00:12:44,880 --> 00:12:45,732 Taip? 292 00:12:45,732 --> 00:12:46,940 Jūs turite vardą kaip studentas. 293 00:12:46,940 --> 00:12:48,900 Ką dar veikia tipiškas studentas turi? 294 00:12:48,900 --> 00:12:49,320 >> Auditorija: [nesigirdi] 295 00:12:49,320 --> 00:12:50,200 >> David J. Malan: Taigi, atsiprašau. 296 00:12:50,200 --> 00:12:50,660 >> Auditorija: Amžius. 297 00:12:50,660 --> 00:12:52,980 >> David J. Malan: amžiaus arba gimtadienis analogiškai, yep. 298 00:12:52,980 --> 00:12:53,557 Kas dar? 299 00:12:53,557 --> 00:12:54,390 Auditorija: ID numeris? 300 00:12:54,390 --> 00:12:57,460 David J. Malan: Taigi identifikacinį numerį, o gal telefono numeris, gal bendrabučio, ar namas, 301 00:12:57,460 --> 00:12:58,670 ar koledžas, ar kažkas panašaus. 302 00:12:58,670 --> 00:13:01,820 Bet koks duomenų dalis, kad skaičius jums gali tekti jūsų adresatų sąrašo 303 00:13:01,820 --> 00:13:03,890 kas gali apibrėžti studentas. 304 00:13:03,890 --> 00:13:08,490 Taigi, jei mes norėjome tai padaryti, kodiniai, mes galime padaryti kažką paprasto kaip šis. 305 00:13:08,490 --> 00:13:15,670 Mes gali turėti, kad programa turi tarkim, int main (void). 306 00:13:15,670 --> 00:13:18,920 O jei aš noriu atstovauti studentas aš gali turėti, pavyzdžiui, 307 00:13:18,920 --> 00:13:24,330 eilutė vadinama pavadinimas šio studento, eilutė vadinama bendrabučio tos studentas, 308 00:13:24,330 --> 00:13:26,900 gal int vadinamas ID tos studentas. 309 00:13:26,900 --> 00:13:30,840 O kadangi aš naudoju eilutę, aš reikia grįžti, supakuoti CS50.h. 310 00:13:30,840 --> 00:13:33,300 Gal aš ruošiuosi reikia stdio.h. 311 00:13:33,300 --> 00:13:38,190 Taigi leiskite man Preemptively tie, ir aš ketina tai vadina student.c dabar 312 00:13:38,190 --> 00:13:40,080 ir išsaugoti tai. 313 00:13:40,080 --> 00:13:44,206 >> Ir dabar galiu padaryti kažką šių kintamųjų. 314 00:13:44,206 --> 00:13:46,830 Ir mes tik ketina rašyti kad kaip pseudo kodas komentarą, 315 00:13:46,830 --> 00:13:48,829 nes tai neįdomu ką mes darome dabar. 316 00:13:48,829 --> 00:13:51,242 Gerai, kad tai yra programa, kuri kažkaip saugo studentą. 317 00:13:51,242 --> 00:13:53,450 Ką aš noriu daryti, jei aš norite išsaugoti du studentai? 318 00:13:53,450 --> 00:13:55,991 Taigi mano pirmasis instinktas vyksta kad viskas bus gerai, palauk, 319 00:13:55,991 --> 00:14:01,920 jei aš turiu kitą studentą, kodėl ne aš just do styginių pavadinimas 2, styginių bendrabučio 2, 320 00:14:01,920 --> 00:14:04,190 INT ID2. 321 00:14:04,190 --> 00:14:06,540 Ir mes padarėme dingo žemyn šiuo keliu prieš 322 00:14:06,540 --> 00:14:10,890 ir kas buvo mūsų sprendimas, kas atrodo būti natūra iš hackish Kopijuoti Įklijuoti 323 00:14:10,890 --> 00:14:11,555 darbas čia? 324 00:14:11,555 --> 00:14:12,346 Auditorija: Masyvas. 325 00:14:12,346 --> 00:14:13,830 David J. Malan: Taip, galėtume naudoti masyvą. 326 00:14:13,830 --> 00:14:15,620 Teisė tai labai greitai tampa griozdiškas. 327 00:14:15,620 --> 00:14:18,453 Jūs turite rūšiuoti savavališkai pradėti pavadinimų visų šių kintamųjų. 328 00:14:18,453 --> 00:14:22,190 Ir jūs, žmogaus, turi išlaikyti sekti, kad Gerai name2, atitinka 329 00:14:22,190 --> 00:14:25,060 su dorm2 atitinka ID2 į ÷ jimas. 330 00:14:25,060 --> 00:14:26,200 Jis tiesiog tampa netvarka. 331 00:14:26,200 --> 00:14:29,350 Taigi, tai daug lengviau, prisiminti iš prieš kelias savaites, 332 00:14:29,350 --> 00:14:34,300 tiesiog turintys vadinamas styginių pavadinimų o gal mums iš kurių trys. 333 00:14:34,300 --> 00:14:36,940 Ir tada gal mes turime string bendrabučiuose ir turi 334 00:14:36,940 --> 00:14:41,900 trys iš jų, arba kartu su konstanta, int ID ir turėti iš kurių trys. 335 00:14:41,900 --> 00:14:45,250 Bet net ir dabar tai jaučia šiek tiek prastesnis, į dešinę. 336 00:14:45,250 --> 00:14:49,440 Mes kalbame apie studentus ir dar Aš tikrai gyvenamųjų vangiu 337 00:14:49,440 --> 00:14:50,470 įgyvendinimo detales. 338 00:14:50,470 --> 00:14:52,790 Studentas yra pavadinimas ir bendrabučio ir ID. 339 00:14:52,790 --> 00:14:59,814 >> Kodėl aš negaliu tiesiog paskelbti kintamąjį vadinamas studentas ir jį vadiname Š. 340 00:14:59,814 --> 00:15:02,230 O jei aš noriu dar vieną studentą, kodėl ne aš tiesiog jį vadiname t. 341 00:15:02,230 --> 00:15:05,260 Arba, jei noriu visa krūva Studentų, tai kodėl gi ne aš tiesiog 342 00:15:05,260 --> 00:15:09,740 sako turiu visą klasę studentai, ir tai trys iš jų. 343 00:15:09,740 --> 00:15:12,470 Kitaip tariant, kodėl aš negaliu ateiti su mano paties duomenų tipo, vadinamas 344 00:15:12,470 --> 00:15:15,641 Studentų, kurio viduje yra pavadinimas, yra ID yra bendrabučio, 345 00:15:15,641 --> 00:15:16,890 yra bet kitose srityse, skaičius. 346 00:15:16,890 --> 00:15:19,030 Ir paaiškėja, jums gali padaryti būtent tai. 347 00:15:19,030 --> 00:15:21,850 >> Taigi C turi šią funkciją, vadinamą konstrukto. 348 00:15:21,850 --> 00:15:24,700 Štai kalbos funkcija, kuri leidžia mums daryti būtent tai. 349 00:15:24,700 --> 00:15:28,370 Aš ruošiuosi eiti į priekį ir atverti structs.h 350 00:15:28,370 --> 00:15:32,299 kur mes ketiname pamatyti Žemiau apibrėžimo studentas. 351 00:15:32,299 --> 00:15:35,215 Pasirodo - ir tai vienas net paprastesnė nei vieną apimantį ID 352 00:15:35,215 --> 00:15:36,080 akimirka prieš. 353 00:15:36,080 --> 00:15:39,120 Jei norite sugalvoti Jūsų namų duomenų tipas, 354 00:15:39,120 --> 00:15:42,750 ir, be to, INT ir apanglėjusia Plūdė ir visus šiuos kitiems, kad egzistuoja, 355 00:15:42,750 --> 00:15:45,810 Jūs galite padaryti tiesiog raštu Typedef konstrukto, 356 00:15:45,810 --> 00:15:47,880 tada kai garbanotas petnešos, viduje, kurį 357 00:15:47,880 --> 00:15:51,460 sąrašą kintamuosius, kuriuos norite susieti su šia nauja užsakymą duomenis 358 00:15:51,460 --> 00:15:55,670 įrašykite kaip pavadinimas ir bendrabučio, ir tada po klamrami 359 00:15:55,670 --> 00:15:57,860 galite duoti vardą į naują duomenų tipą. 360 00:15:57,860 --> 00:15:59,220 Taigi, pavyzdžiui, studentas. 361 00:15:59,220 --> 00:16:03,247 >> Ir kas malonu apie tai dabar yra tas, kad jei pažvelgsime į atitinkamą kodą, 362 00:16:03,247 --> 00:16:05,080 Konvencija pirmiausia iš visų, yra įdėti ši 363 00:16:05,080 --> 00:16:08,230 į failą pavadinimu kažkas dot h, antraštės failą, kurį mes turime ne 364 00:16:08,230 --> 00:16:09,780 pradėjo naudoti save per daug. 365 00:16:09,780 --> 00:16:12,120 Tačiau mes ketiname pradėti naudojant gana šiek tiek dabar. 366 00:16:12,120 --> 00:16:18,650 Ir ką mes galime padaryti su tuo, Galiausiai, šių kelių eilučių kodo 367 00:16:18,650 --> 00:16:22,130 yra paskelbti būtent tai duomenų tipas, studentas. 368 00:16:22,130 --> 00:16:23,230 O dabar tegul jį naudoti. 369 00:16:23,230 --> 00:16:27,274 >> Aš ruošiuosi dabar eiti į failas vadinamas structs1.c. 370 00:16:27,274 --> 00:16:29,440 Ir tegul ne išvaizdą Keletas charakteristikos čia. 371 00:16:29,440 --> 00:16:32,250 Taigi stuff čia yra daugiausia pažįstamas, ir mes 372 00:16:32,250 --> 00:16:35,040 grįžti į tai, kas nėra susipažinęs vos akimirką. 373 00:16:35,040 --> 00:16:39,880 Tai, žinoma, yra, įskaitant mano paties antraštės failą, kuris yra nauja, taip pat, 374 00:16:39,880 --> 00:16:42,580 išskyrus PSet 3, kur, Prisiminkite, mes turime helpers.h. 375 00:16:42,580 --> 00:16:45,150 Taigi jums gali prisiminti #include helpers.h. 376 00:16:45,150 --> 00:16:49,381 >> Kodėl nors aš naudoju citatos vietoj kampinių skliausteliuose? 377 00:16:49,381 --> 00:16:50,630 Kai man pasirinkti tarp jų? 378 00:16:50,630 --> 00:16:52,310 Beveik visada man atrodo naudoti kampu skliausteliuose. 379 00:16:52,310 --> 00:16:55,040 Ir tada visi staiga ant linija šešių aš naudoju kabutes. 380 00:16:55,040 --> 00:16:55,860 Kodėl tai gali būti? 381 00:16:55,860 --> 00:16:56,700 Taip? 382 00:16:56,700 --> 00:16:57,725 >> Auditorija: [nesigirdi] 383 00:16:57,725 --> 00:16:59,350 David J. Malan: Štai tikroji, ką? 384 00:16:59,350 --> 00:17:00,559 Auditorija: Kad jūsų IDE. 385 00:17:00,559 --> 00:17:02,475 David J. Malan: Taip, tai mano tikrojo IDE. 386 00:17:02,475 --> 00:17:05,690 Ir tegul ne gyvens IDE, nes tai tik priemonė, kuri aš naudoju. 387 00:17:05,690 --> 00:17:08,119 Kad mano dabartinis yra katalogas, specialiai. 388 00:17:08,119 --> 00:17:11,647 Taigi structs.h yra mano paties failo neįdiegta IDE, 389 00:17:11,647 --> 00:17:14,480 į operacinę sistemą pačiam, o tai mano einamojo katalogo. 390 00:17:14,480 --> 00:17:16,910 Taigi Konvencija, jei norite įtraukti savo antraštės failą, 391 00:17:16,910 --> 00:17:18,200 tiesiog naudokite kabutes. 392 00:17:18,200 --> 00:17:23,290 >> Ką mes vadiname šį dalyką linija 8, apskritai? 393 00:17:23,290 --> 00:17:25,200 Tai ką? 394 00:17:25,200 --> 00:17:28,220 #define kažką. 395 00:17:28,220 --> 00:17:31,040 Tai reiškia, konstantas, tiesa? 396 00:17:31,040 --> 00:17:33,140 Jei norite turėti vertė savo programą 397 00:17:33,140 --> 00:17:35,110 kad jūs naudojate visuma krūva kartų, tai 398 00:17:35,110 --> 00:17:39,330 geras konvencija veiksnys jį, paskelbti ją, su grotelėmis 399 00:17:39,330 --> 00:17:43,340 apibrėžti, tada pagal konvenciją visose didžiąsias word-- nors tai ne 400 00:17:43,340 --> 00:17:45,320 būtina, bet Tai žmogaus konvencija 401 00:17:45,320 --> 00:17:47,210 kapitalizuoti konstantas kad jie iššokti 402 00:17:47,210 --> 00:17:50,380 ne jums visually-- erdvę ir tada vertė norite būti 403 00:17:50,380 --> 00:17:52,250 lygiavertis kad būtų nuolat vardu. 404 00:17:52,250 --> 00:17:56,110 Nėra kabliataškis, bet jūs tiesiog sekti, kad modelis nėra. 405 00:17:56,110 --> 00:17:57,770 >> Taigi, ką aš darau šiame faktinio kodą. 406 00:17:57,770 --> 00:18:00,660 Taigi leiskite pažvelgti pagrindinė programa yra čia. 407 00:18:00,660 --> 00:18:04,080 Pagal 12 nes aš Įtraukėme structs.h, 408 00:18:04,080 --> 00:18:06,492 Dabar aš turiu stebuklingai mano šalinimo naujas duomenų tipas. 409 00:18:06,492 --> 00:18:09,200 Aš ne tik turėti prieigą prie int, ir char ir plūdė, ir styginių, 410 00:18:09,200 --> 00:18:10,060 ir mėlyna ir kt. 411 00:18:10,060 --> 00:18:12,470 Dabar aš turiu priėjimą prie studentas duomenų tipas. 412 00:18:12,470 --> 00:18:17,740 Taigi vadovaujantis 12, aš derinant du ideas-- vieną užsakymą duomenų tipas ir du, 413 00:18:17,740 --> 00:18:18,940 naudojant masyvą. 414 00:18:18,940 --> 00:18:21,700 Ir taip šioje programoje, jei Noriu, kad iš tikrųjų remti 415 00:18:21,700 --> 00:18:24,320 trys skirtingi studentai mano programa, aš 416 00:18:24,320 --> 00:18:30,480 gali tiesiog pasakyti man kintamąjį vadinami studentų, kurių kiekviena 417 00:18:30,480 --> 00:18:32,970 yra tipo studentams, kurie mano užsakymą duomenų tipas. 418 00:18:32,970 --> 00:18:35,890 Ir būtent, duok man trys iš jų, mano masyvo. 419 00:18:35,890 --> 00:18:37,750 >> Taigi, ką mes darome šioje programoje? 420 00:18:37,750 --> 00:18:40,670 Štai tik už kilpos Iteracja nuo 0 iki 3, todėl, kad tai 421 00:18:40,670 --> 00:18:42,110 ką studentai vertina tai. 422 00:18:42,110 --> 00:18:44,420 Aš tiesiog paskatino vartotoją man studento vardą. 423 00:18:44,420 --> 00:18:48,090 Ir tada pagal 17, mes turi daugiausia pažįstamas liniją. 424 00:18:48,090 --> 00:18:50,370 Mes turime senas draugas GetString dešinėje. 425 00:18:50,370 --> 00:18:52,345 Ir ką gabalas sintaksę matyt naujas, 426 00:18:52,345 --> 00:18:55,130 jei jūs niekada užprogramuotas C anksčiau, ir niekada naudojo structs? 427 00:18:55,130 --> 00:18:55,510 Taip? 428 00:18:55,510 --> 00:18:56,417 >> Auditorija: .name. 429 00:18:56,417 --> 00:18:57,500 David J. Malan: The .name. 430 00:18:57,500 --> 00:19:01,220 Bet tai nėra per daug šuolis, nes dabar studentai laikiklis i 431 00:19:01,220 --> 00:19:02,590 suteikia jums i-asis studentas. 432 00:19:02,590 --> 00:19:04,730 Ir jei norite pasinerti viduje šios struktūros, 433 00:19:04,730 --> 00:19:09,490 jūs tiesiog naudoti vieną laikotarpį ir tada kintamojo vardas viduje, 434 00:19:09,490 --> 00:19:11,900 ar viduje, kad nuosavybė norite gauti prieigą prie. 435 00:19:11,900 --> 00:19:14,816 Panašiai tada, jei aš tada paragins vartotojas, duok man studento bendrabučio, 436 00:19:14,816 --> 00:19:18,390 galite taip pat laikyti, kad Styga į bendrabučio kintamojo viduje 437 00:19:18,390 --> 00:19:19,940 tos studento struktūrą. 438 00:19:19,940 --> 00:19:21,410 >> Ir dabar viskas pasidaro šiek tiek fantazijos. 439 00:19:21,410 --> 00:19:24,420 Ir tai vyksta ieškoti ne gal daug gana greitai. 440 00:19:24,420 --> 00:19:27,970 Bet jūs pamatysite tai kas daugiau PSet 4, todėl galime tik žvilgsnis jį dabar. 441 00:19:27,970 --> 00:19:33,364 Pasirodo, kad pagal 23 per 38, ką jūs manote, aš galbūt darote? 442 00:19:33,364 --> 00:19:35,530 Aš nuimti komentarus už ir šiandien, bet versija 443 00:19:35,530 --> 00:19:38,660 kodo internete nuoroda turi visus komentarus. 444 00:19:38,660 --> 00:19:40,171 Ką man atrodo, darai? 445 00:19:40,171 --> 00:19:42,530 >> Auditorija: failą su visais taupymas informacija, kuri įvesta vartotojas. 446 00:19:42,530 --> 00:19:44,530 >> David J. Malan: Taip, tiksliai, tai yra naujas būdas 447 00:19:44,530 --> 00:19:46,370 kad mes matome du, Kitas C funkcija, 448 00:19:46,370 --> 00:19:48,700 kuriuo galiu sukurti savo failus. 449 00:19:48,700 --> 00:19:51,580 Iki šiol beveik kiekviena programa parašiau yra be pilietybės. 450 00:19:51,580 --> 00:19:53,334 Kaip tik tai daroma veikia, tai viskas. 451 00:19:53,334 --> 00:19:55,000 Nėra atmintis arba prisiminimai apie jį. 452 00:19:55,000 --> 00:19:56,110 Nėra failų išsaugotas. 453 00:19:56,110 --> 00:19:58,120 Bet jei jūs norite išsaugoti indėlį, 454 00:19:58,120 --> 00:20:02,100 atsitiko, kaip ir žaidimą ar programą kaip šis, it turns out, mes galime tai padaryti. 455 00:20:02,100 --> 00:20:04,360 Ir jūs pamatysite tai daugiau į PSet 4 ir skyriuje. 456 00:20:04,360 --> 00:20:08,661 Bet tai 23 eilutė iš esmės sukuria failą pavadinimu students.csv. 457 00:20:08,661 --> 00:20:10,160 Ir jūs galėjote matyti anksčiau. 458 00:20:10,160 --> 00:20:14,250 Net jei jūs niekada studijavo CS anksčiau, CSV yra kableliais atskirtų kintamieji. 459 00:20:14,250 --> 00:20:19,000 Tai lyg labai vargšas versija Excel failą, 460 00:20:19,000 --> 00:20:22,270 o tai reiškia, kad ji galėtų būti atidarytas Excel ir "Apple" numeriai, 461 00:20:22,270 --> 00:20:23,830 ir ji turi eilutes ir stulpelius. 462 00:20:23,830 --> 00:20:26,485 Bet tai ne patentuotas formatas, kaip "Microsoft" ar "Apple". 463 00:20:26,485 --> 00:20:29,840 Tai tiesiog kableliai atskirti vertybės, kurios mes pamatysime per akimirką. 464 00:20:29,840 --> 00:20:31,010 >> Ir tik spėti. 465 00:20:31,010 --> 00:20:33,480 Pagal 23 Pačioje pabaigoje, mano antrasis argumentas 466 00:20:33,480 --> 00:20:37,700 į šią naują funkciją, vadinamą f atvira Atidaryti failą w. 467 00:20:37,700 --> 00:20:39,430 Ką gali W reiškia? 468 00:20:39,430 --> 00:20:40,022 Taip? 469 00:20:40,022 --> 00:20:41,260 >> Auditorija: Jis leidžia jums rašyti į failą? 470 00:20:41,260 --> 00:20:42,630 >> David J. Malan: Tai leidžia rašote į failą. 471 00:20:42,630 --> 00:20:44,810 Taigi ten yra variantų pora kad mes galime prijungti čia. 472 00:20:44,810 --> 00:20:47,184 Bet jei jūs tiesiog norite skaityti failas, tai yra pažvelgti į jį 473 00:20:47,184 --> 00:20:50,010 ir skaityti jį į atmintį, tiesiog naudokite citata citatos pabaiga "R". 474 00:20:50,010 --> 00:20:53,110 Jei norite rašyti failą, galite naudoti citata citatos pabaiga "W". 475 00:20:53,110 --> 00:20:55,190 Taip pat pridėti ir kitų dalykų pora 476 00:20:55,190 --> 00:20:57,356 jei norite pakeisti esamus failus. 477 00:20:57,356 --> 00:21:00,480 Dabar mes ketiname nuolat matau tai dalykas, tada mes grįžti į 24 eilutės. 478 00:21:00,480 --> 00:21:02,640 NULL, it turns out, yra ypatinga reikšmė, 479 00:21:02,640 --> 00:21:06,070 gali būti grąžinta tam tikrų funkcijų jei kažkas nuėjo wrong-- 480 00:21:06,070 --> 00:21:08,490 jei failas neegzistuoja, jei jūs paleisti iš atminties, 481 00:21:08,490 --> 00:21:09,620 arba kitų klaidų krūva. 482 00:21:09,620 --> 00:21:13,470 Bet dabar, tegul tiesiog manyti, kad ši yra tik įprastas klaidų tikrinimas. 483 00:21:13,470 --> 00:21:17,090 Čia pagal 26, aš Iteracja nuo 0 iki 3 per visus mano studentai. 484 00:21:17,090 --> 00:21:20,470 Ir tai yra rūšies rūšiuoti naujos funkcijos, fprintf, 485 00:21:20,470 --> 00:21:21,460 bet tik spėti. 486 00:21:21,460 --> 00:21:24,370 Jei printf yra tik Spausdinti suformatuotą eilutė, 487 00:21:24,370 --> 00:21:26,507 Ką fprintf tikriausiai reiškia? 488 00:21:26,507 --> 00:21:27,590 Auditorija: spausdinti į failą. 489 00:21:27,590 --> 00:21:29,290 David J. Malan: Išspausdinkite suformatuotas eilutė faile. 490 00:21:29,290 --> 00:21:31,180 Štai kas yra papildoma f priemonės yra failas. 491 00:21:31,180 --> 00:21:36,420 Ir nauja pirmasis argumentas turi būti kintamasis, kuris atstovauja savo failą. 492 00:21:36,420 --> 00:21:38,866 Tada mes tiesiog formatą styginių kaip printf. 493 00:21:38,866 --> 00:21:40,740 Ir nors tai sintaksė yra nauja, tai tik 494 00:21:40,740 --> 00:21:44,610 reiškia prijungti studento vardas, plug-in studentų bendrabučio, o tada 495 00:21:44,610 --> 00:21:47,160 su fclose, uždarykite rinkmeną. 496 00:21:47,160 --> 00:21:49,730 Ir tada lastly-- tai yra naujas ir mes grįžti prie šio 497 00:21:49,730 --> 00:21:53,240 prieš long-- aš išlaisvinant už priežasčių studentas 498 00:21:53,240 --> 00:21:54,860 tai atsitiko iki aukščiau ten. 499 00:21:54,860 --> 00:21:56,820 Bet mes grįžti kad kad prieš long-- 500 00:21:56,820 --> 00:21:59,820 tai todėl, kad, kaip GetString yra tikrųjų dirba po gaubtu. 501 00:21:59,820 --> 00:22:01,280 >> Taigi leiskite priimti greitai pažvelgti čia. 502 00:22:01,280 --> 00:22:04,380 Jei aš tipo ls mano kataloge, pastebėsite, kad aš ne 503 00:22:04,380 --> 00:22:09,360 turėti failą pavadinimu students.csv, tik ne ten, neegzistuoja. 504 00:22:09,360 --> 00:22:14,965 Taigi, jei aš dabar kaupia šią programą, padaryti structs-1. / structs-1 505 00:22:14,965 --> 00:22:20,570 ir aš ruošiuosi eiti į priekį ir įveskite Andi, kuris gyvena Berkeley Jeilio. 506 00:22:20,570 --> 00:22:26,350 Mes ketiname turėti Rob, kuris gyvena Thayer šių dienų. 507 00:22:26,350 --> 00:22:33,760 Ir tegul sugalvoti, kur yra, manau, Marija yra Mather, 508 00:22:33,760 --> 00:22:35,100 jei aš atsimenu teisingai. 509 00:22:35,100 --> 00:22:36,460 >> Taigi nieko atrodo, kad taip atsitiktų. 510 00:22:36,460 --> 00:22:40,680 Bet jei aš tipo ls dabar yra students.csv. 511 00:22:40,680 --> 00:22:43,080 Vykime į priekį ir atvira students.csv. 512 00:22:43,080 --> 00:22:46,050 Tai vėl labai lengvas failo formatas. 513 00:22:46,050 --> 00:22:49,570 Bet aš tiesiog priėmė konvenciją kad turiu dvi eilutes ir stulpelius. 514 00:22:49,570 --> 00:22:52,020 Pirmasis stulpelis žmonių vardai. 515 00:22:52,020 --> 00:22:55,740 Antrame stulpelyje yra studento bendrabučio, ar koledžas, ar namas, ar Plauktiņš. 516 00:22:55,740 --> 00:22:57,900 Ir dabar aš išgelbėtas šis nuolat failą. 517 00:22:57,900 --> 00:22:59,280 >> Taigi, tai ne visi, kad įdomus. 518 00:22:59,280 --> 00:23:02,980 Bet tai tik slenksčiu dabar , kad galėtų išlikti informacija 519 00:23:02,980 --> 00:23:04,040 visam laikui. 520 00:23:04,040 --> 00:23:08,340 Taigi pažiūrėkime, ką mes galime daugiau daryti su šiomis ir kitomis funkcijomis. 521 00:23:08,340 --> 00:23:10,729 Bet pirmiausia, kokių nors klausimų? 522 00:23:10,729 --> 00:23:12,145 Tai buvo daug, ir kad buvo greitai. 523 00:23:12,145 --> 00:23:16,131 Bet jūs pamatysite daug daugiau PSet 4, taip pat. 524 00:23:16,131 --> 00:23:16,630 Taip? 525 00:23:16,630 --> 00:23:19,360 >> Auditorija: Ar yra būdas toliau pridedant pavadinimus šio failo? 526 00:23:19,360 --> 00:23:19,880 >> David J. Malan: Geras klausimas. 527 00:23:19,880 --> 00:23:21,800 Ar yra būdas toliau pridedant pavadinimus šio failo? 528 00:23:21,800 --> 00:23:22,340 Taip. 529 00:23:22,340 --> 00:23:24,630 Ir, iš tiesų, jei jūs galų iki pakartotinio atidarant failą, 530 00:23:24,630 --> 00:23:26,780 norite naudoti citata citatos pabaiga "A" už Papildyti, 531 00:23:26,780 --> 00:23:31,090 kuri būtų tiesiog pridėti naują liniją, nauja linija vėl ir vėl, tiksliai. 532 00:23:31,090 --> 00:23:32,010 Geras klausimas. 533 00:23:32,010 --> 00:23:32,950 Kiti klausimai? 534 00:23:32,950 --> 00:23:33,450 Taip? 535 00:23:33,450 --> 00:23:35,580 Auditorija: Jei bėgo programa vėl dabar, 536 00:23:35,580 --> 00:23:38,000 tai turėtų nuolat pridedant pavadinimus į failo ar tai turėtų atverti naują failą? 537 00:23:38,000 --> 00:23:38,740 >> David J. Malan: Ak, geras klausimas. 538 00:23:38,740 --> 00:23:41,448 Jei jūs paleidote programą iš naujo teisė dabar, gal įvedėte naujais vardais, 539 00:23:41,448 --> 00:23:44,820 būtų jį įtrauksime į failą arba perrašyti failą? 540 00:23:44,820 --> 00:23:47,420 Pastarasis, nes aš nenaudojate papildymo režimui. 541 00:23:47,420 --> 00:23:49,930 Ir todėl aš tiesiog aklai atidaryti failą rašymui, 542 00:23:49,930 --> 00:23:51,310 tai tik ketina perrašyti failą. 543 00:23:51,310 --> 00:23:54,570 Taigi aš iš tiesų reikia padaryti, tai pridėti, jei aš noriu, kad iš tikrųjų turi ilgalaikius 544 00:23:54,570 --> 00:23:55,350 duomenų bazė. 545 00:23:55,350 --> 00:23:58,220 >> Dabar CSV yra naudinga, tiesą sakant, net už, pavyzdžiui, jei esate writing-- 546 00:23:58,220 --> 00:24:00,100 ir mes galų gale pamatyti šį vėliau semestro, kai 547 00:24:00,100 --> 00:24:01,455 mes naudojame CSV ataskaitose kitiems tikslams. 548 00:24:01,455 --> 00:24:04,920 Jei norite išsaugoti visi žmonės kurie registruojami tam tikrą įvykį, 549 00:24:04,920 --> 00:24:07,420 arba užsiregistravau jūsų studentas grupė, ar kažkas panašaus, 550 00:24:07,420 --> 00:24:10,330 saugoti duomenis į šios rūšies iš formatu yra super patogu. 551 00:24:10,330 --> 00:24:12,580 Kadangi pažodžiui, jei aš buvo atsisiųsti šį failą. 552 00:24:12,580 --> 00:24:14,540 Galėčiau double-- ir tegul realiai išbandyti šį 553 00:24:14,540 --> 00:24:16,720 jei turiu Excel arba numerius čia. 554 00:24:16,720 --> 00:24:19,130 >> Aš ruošiuosi dešiniuoju pelės mygtuku spustelėkite ar kontrolės pelės mygtuku spustelėkite Mano failą. 555 00:24:19,130 --> 00:24:20,020 Oi. 556 00:24:20,020 --> 00:24:21,830 Dešiniuoju pelės mygtuku spustelėkite ir kontrolės pelės mygtuku spustelėkite Mano failą. 557 00:24:21,830 --> 00:24:24,960 Nagi, mano pele nebendradarbiauja. 558 00:24:24,960 --> 00:24:32,694 Download-- aš ruošiuosi atsisiųsti visus failus čia, kad 559 00:24:32,694 --> 00:24:33,860 tiesiog, kad aš galiu paimti šį vieną. 560 00:24:33,860 --> 00:24:37,850 Ir tegul pamatyti, jei tai veikia students.csv-- pirmas kartas 561 00:24:37,850 --> 00:24:39,310 Aš įjungta. 562 00:24:39,310 --> 00:24:41,360 Dabar jie nori matyti savo kontaktus. 563 00:24:41,360 --> 00:24:44,310 Dabar, aš iš viso turiu užsiregistruoti. 564 00:24:44,310 --> 00:24:47,620 Pažiūrėkite, kaip lengva tai naudoti CSV ataskaitose? 565 00:24:47,620 --> 00:24:50,840 Taip, nuolat jį atnaujina. 566 00:24:50,840 --> 00:24:52,375 Gerai, dabar mes pasirengę klasėje. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 Gerai, oi, kas naujo? 569 00:25:00,370 --> 00:25:02,920 Gerai, arti. 570 00:25:02,920 --> 00:25:04,750 Tai buvo stebuklinga. 571 00:25:04,750 --> 00:25:07,280 Gerai, dabar mes turime atnaujinti. 572 00:25:07,280 --> 00:25:10,890 Ir dabar, ji pamiršo, kas byla Aš iš pradžių atidaryti, 573 00:25:10,890 --> 00:25:13,090 bet kas a-- ten einame. 574 00:25:13,090 --> 00:25:16,341 Gerai, kad dabar mes turime Excel failą. 575 00:25:16,341 --> 00:25:18,290 Ačiū. 576 00:25:18,290 --> 00:25:20,764 >> Gerai, kad tai, ką aš padariau buvo lengva dalis. 577 00:25:20,764 --> 00:25:23,930 Žinoma, aš galėjo iš anksto įdiegta "Excel" arba numeriai, ar kokia programa. 578 00:25:23,930 --> 00:25:25,846 Bet tai yra gražus, nes dabar galiu manipuliuoti 579 00:25:25,846 --> 00:25:28,090 kad į standartinį formatą duomenys. 580 00:25:28,090 --> 00:25:30,294 >> Taigi, dabar tegul kontekstas pereiti prie kur mes baigėte 581 00:25:30,294 --> 00:25:32,710 paskutinį kartą, kuris buvo pradėti kilimo mokymo ratus. 582 00:25:32,710 --> 00:25:34,543 Bet pirmiausia, tu negali pamatyti šį ankstesnį pietūs 583 00:25:34,543 --> 00:25:38,150 vėl vyksta čia ir ugnies Ledo Kembridže, Sitar New Haven. 584 00:25:38,150 --> 00:25:43,150 Užsiregistruoti ant CS50s svetainėje ASAP prisijungti CS50 studentus ir personalą. 585 00:25:43,150 --> 00:25:46,090 >> Taigi mes priėmėme mokymo ratus ne pirmadienį, kaip follows-- 586 00:25:46,090 --> 00:25:49,120 eilutė buvo deklaruota CS50s biblioteka tam tikrą laiką. 587 00:25:49,120 --> 00:25:52,650 Ir tai gerai, nes jis leidžia mums kalbėti apie kintamuosius kaip 588 00:25:52,650 --> 00:25:54,660 pilnas žodžiai ir sakiniai ir daugiau. 589 00:25:54,660 --> 00:25:56,710 Tačiau paaiškėja, eilutę neegzistuoja. 590 00:25:56,710 --> 00:26:00,200 Tai tiesiog sinonimas, arba slapyvardį, kad mes sukūrėme kažką, kad 591 00:26:00,200 --> 00:26:03,780 iš tikrųjų yra šiek tiek daugiau techninė vadinamas char *. 592 00:26:03,780 --> 00:26:07,900 >> Ir iš tiesų, mes pamatėme pavyzdį iš pirmadienį programos 593 00:26:07,900 --> 00:26:11,200 kad nesielgė visai kaip mes tikėjomės. 594 00:26:11,200 --> 00:26:13,630 Tai buvo byla, palyginti-0. 595 00:26:13,630 --> 00:26:17,910 Ir prisiminti, kad palyginti-0, jei Aš perkompiliuoti pirmadienio programą 596 00:26:17,910 --> 00:26:22,670 ir paleisti palyginti-0 ir įveskite mama mažosiomis raidėmis, o mama mažosiomis raidėmis dar kartą. 597 00:26:22,670 --> 00:26:25,320 Programa reikalavo I įrašykite skirtingus dalykus, 598 00:26:25,320 --> 00:26:29,210 nors mama, visi mažosiomis raidėmis, yra identiški vizualiai. 599 00:26:29,210 --> 00:26:31,990 Taigi, kas buvo trumpas atsakymas kodėl mano kompiuteris 600 00:26:31,990 --> 00:26:34,500 šios dvi stygos skiriasi? 601 00:26:34,500 --> 00:26:35,250 Taip? 602 00:26:35,250 --> 00:26:36,534 >> Auditorija: [nesigirdi] 603 00:26:36,534 --> 00:26:37,450 David J. Malan: Teisė. 604 00:26:37,450 --> 00:26:39,600 Taigi, mama, pirmą kartą Aš įveskite jį, ji yra 605 00:26:39,600 --> 00:26:42,710 kažkur mano kompiuterio atminties, bet kitoje vietoje 606 00:26:42,710 --> 00:26:44,690 nei antrą kartą aš tipo mama. 607 00:26:44,690 --> 00:26:46,580 Dabar jis tikrai galėtų būti optimizuotas. 608 00:26:46,580 --> 00:26:49,205 Kompiuteris gali būti protingas ir įgyvendinti šiuos dvi eilutes, ei, 609 00:26:49,205 --> 00:26:49,954 jie identiški. 610 00:26:49,954 --> 00:26:51,520 Leiskite man nėra nereikalingai laikyti jį. 611 00:26:51,520 --> 00:26:54,229 Bet Kompiuteriai nedaryk to optimizavimas, nebent jūs pasakykite jiems. 612 00:26:54,229 --> 00:26:56,061 Taigi, pagal nutylėjimą, jie tik ketina baigti 613 00:26:56,061 --> 00:26:57,670 dviejų skirtingų vietų atmintyje. 614 00:26:57,670 --> 00:27:01,570 Ir taip, kad būtų aiškiau, kai lyginome dvi eilutes, 615 00:27:01,570 --> 00:27:03,950 Pirmasis buvo vadinami S, antrasis vadinosi 616 00:27:03,950 --> 00:27:08,530 T, ką konkrečiai man buvo Lyginant čia on-line 13? 617 00:27:08,530 --> 00:27:09,494 Taip. 618 00:27:09,494 --> 00:27:12,390 >> Auditorija: Tai atminties vieta kad kintamasis bus nurodyti. 619 00:27:12,390 --> 00:27:14,900 >> David J. Malan: Būtent, aš buvau lyginant atmintyje vietą 620 00:27:14,900 --> 00:27:16,300 kad tie kintamieji nurodė. 621 00:27:16,300 --> 00:27:20,560 Taigi, konkrečiai, jei mama buvo baitas skaičius 1, ir 2, ir 3, 622 00:27:20,560 --> 00:27:24,020 ir 4-- nes prisimenu backslash 0 turi būti visi pabaigoje būdas. 623 00:27:24,020 --> 00:27:29,420 Ir kitas pavyzdys mama, m-O-M, buvo adresu 10, 11, 12, ir 13. 624 00:27:29,420 --> 00:27:33,100 Buvau lyginant 1, kad adresas, kad atminties vietą, 625 00:27:33,100 --> 00:27:35,160 prieš 10, kuris yra akivaizdu, kad ne tos pačios. 626 00:27:35,160 --> 00:27:36,260 1 yra ne 10. 627 00:27:36,260 --> 00:27:39,620 >> Taigi tai yra gražus tuo, kad tai gana paprasta. 628 00:27:39,620 --> 00:27:42,870 Bet tai problemiška tiek, kiek mes negalime lyginti eilutes. 629 00:27:42,870 --> 00:27:44,930 Taigi fundamentally-- ir šiuo žemo lygio, 630 00:27:44,930 --> 00:27:47,300 jei norite įgyvendinti programa palyginti 631 00:27:47,300 --> 00:27:50,270 du atskiri žodžiai, kad vartotojas įvedėte kokybės, 632 00:27:50,270 --> 00:27:53,944 jie išsirikiuoja char už char, tik bendrais bruožais, 633 00:27:53,944 --> 00:27:55,360 ką mes turime daryti, matyt? 634 00:27:55,360 --> 00:27:57,940 Tai nepakanka tik pažvelgti šių dviejų adresus. 635 00:27:57,940 --> 00:27:58,860 Ką turime daryti? 636 00:27:58,860 --> 00:27:59,360 Taip? 637 00:27:59,360 --> 00:28:01,120 >> Auditorija: pakartoti per eilutė [nesigirdi]. 638 00:28:01,120 --> 00:28:02,600 >> David J. Malan: Taip, tegul pakartoti per eilutę. 639 00:28:02,600 --> 00:28:05,808 Leiskite naudoti už kilpos, per while cikle, arba ką jūs labiausiai patogiai. 640 00:28:05,808 --> 00:28:08,840 Ir jei mes turime dvi eilutes kažkur atmintyje, pažvelkime į kiekvieną aisiais 641 00:28:08,840 --> 00:28:11,770 Pirmasis simbolis, tada kiekvienas antras charakteris, tada trečia, ketvirta, 642 00:28:11,770 --> 00:28:15,206 ir penkta, kol mes hit kas ypatingą Sentinel vertė? 643 00:28:15,206 --> 00:28:16,080 Auditorija: [nesigirdi] 644 00:28:16,080 --> 00:28:18,800 David J. Malan: Taip, Backslash nulis, kuriame taškas arba eilutę 645 00:28:18,800 --> 00:28:20,100 mes galime nuspręsti, kad viskas. 646 00:28:20,100 --> 00:28:21,970 Ar mes atitiko kiekvieną simbolį? 647 00:28:21,970 --> 00:28:22,990 Jei ne, return false. 648 00:28:22,990 --> 00:28:24,770 Jei taip, grąžina true. 649 00:28:24,770 --> 00:28:28,800 Ir taip, kad tai, ką ši versija Programos palyginti-1.c daro. 650 00:28:28,800 --> 00:28:31,677 Jis yra identiškas, ką pažvelgė į pirmadienį, išskyrus, kad aš 651 00:28:31,677 --> 00:28:34,760 Dotarłeś atsikratyti žodžio string-- nors kad neturi funkcinio impact-- visi 652 00:28:34,760 --> 00:28:37,450 Darau dabar pašalinti kai regėjimo mokymo ratai, 653 00:28:37,450 --> 00:28:40,880 bet aiškiai matyti, kad s ir t yra adresai. 654 00:28:40,880 --> 00:28:43,020 Ir tai, ką žvaigždė, Žvaigždute, atstovauja 655 00:28:43,020 --> 00:28:46,690 yra adresas, kitaip žinoma daugiau techniškai kaip žymeklis. 656 00:28:46,690 --> 00:28:49,880 >> Taigi, kai aš pareiškiu, S 9 linijos ir pasakyti char * s, 657 00:28:49,880 --> 00:28:52,160 tai nereiškia, kad man eilutę. 658 00:28:52,160 --> 00:28:56,360 Tai reiškia, kad man kintamąjį, kurio gyvenimo tikslas yra saugoti adresą. 659 00:28:56,360 --> 00:29:00,400 Nes aš esu apie įdėti adresas eilutę į jį. 660 00:29:00,400 --> 00:29:03,500 Ir iš tiesų, GetString, būti aišku, negrąžina eilutę. 661 00:29:03,500 --> 00:29:06,110 Jis negrįžta mama Backslash nulis, per se. 662 00:29:06,110 --> 00:29:10,005 Ką GetString specialiai ir tiksliai grįžti? 663 00:29:10,005 --> 00:29:10,880 Auditorija: [nesigirdi] 664 00:29:10,880 --> 00:29:14,080 David J. Malan: adreso, adresas pirmojo požymio 665 00:29:14,080 --> 00:29:16,070 kai eilutę jis įgytas. 666 00:29:16,070 --> 00:29:19,250 Ir todėl dabar mes matome specialus raktažodžių dar kartą. 667 00:29:19,250 --> 00:29:20,640 Ir aš užsiminiau tai anksčiau. 668 00:29:20,640 --> 00:29:23,620 Tai bus gera konvencija kad dabar mes pamatysime vėl ir vėl. 669 00:29:23,620 --> 00:29:27,540 Aš patikrinti, įsitikinkite, kad s yra ne niekinis ir t yra ne niekinis. 670 00:29:27,540 --> 00:29:30,100 Nes pagal mano tikrai Greita paminėti anksčiau, 671 00:29:30,100 --> 00:29:35,510 ką galėtų reikšti, jei GetString grįžta ne adresas, bet N-U-L-L, kuris yra dar kartą, 672 00:29:35,510 --> 00:29:36,990 kai ypatingą vertę? 673 00:29:36,990 --> 00:29:37,890 >> AUDITORIJA: Klaida. 674 00:29:37,890 --> 00:29:38,600 >> David J. Malan: Tai įvyko klaida. 675 00:29:38,600 --> 00:29:39,550 Kažkas negerai. 676 00:29:39,550 --> 00:29:41,341 Ir kas paprastai gali atsitikti, ypač 677 00:29:41,341 --> 00:29:45,162 su strings-- kuris gali būti nežinomos ilgio advance-- 678 00:29:45,162 --> 00:29:46,870 gal kompiuteriai " iš atminties, gal 679 00:29:46,870 --> 00:29:49,280 Jūs įvedėte tokiu ilgas žodis ar sakinys 680 00:29:49,280 --> 00:29:51,880 arba įterptas toks didžiulis esė ten tiesiog nėra pakankamai atminties. 681 00:29:51,880 --> 00:29:55,340 Ir taip GetString negali grįžti į visa tai, adresas, 682 00:29:55,340 --> 00:29:56,620 todėl tiesiog grįžta nieko. 683 00:29:56,620 --> 00:30:00,580 Ir ji sako klaida nutiko grąžinant ypatingą NULL reikšmę. 684 00:30:00,580 --> 00:30:02,890 Tai nulinis adresas, taip sakant. 685 00:30:02,890 --> 00:30:06,157 >> Dabar paaiškėja, C ateina su funkcija, kuri veikia, kad iteracijos. 686 00:30:06,157 --> 00:30:09,240 Neturime įgyvendinti tai su už kilpa arba while cikle save. 687 00:30:09,240 --> 00:30:11,150 Mes galime naudoti funkciją, vadinamas trumpai, 688 00:30:11,150 --> 00:30:15,400 maišykite comp ar styginių palyginti, kurio gyvenimo tikslas yra padaryti būtent tai. 689 00:30:15,400 --> 00:30:19,990 Jūs suteikiate jai du patarimų, du adresus, ir ji bus eiti į šių adresų 690 00:30:19,990 --> 00:30:23,130 ir tada palyginti raidę laiškas laiške kokybės, 691 00:30:23,130 --> 00:30:26,610 sustabdyti tik tada, kai kas yra tiesa? 692 00:30:26,610 --> 00:30:31,540 Kai intuityviai turėtų išmaišyti comp Nustojus Iteracja, tiesiog, kad būtų aišku? 693 00:30:31,540 --> 00:30:35,400 Kai jis hitai Atgal nerijos velniop 0 vienu eilutė, kuriame temperatūra gali nuspręsti 694 00:30:35,400 --> 00:30:38,910 jau viskas suderinta, arba ten buvo neatitikimas? 695 00:30:38,910 --> 00:30:42,740 >> Taigi, jei mes paleisti tai dabar ir bando mūsų mažai kapitalizacija žaidimas, 696 00:30:42,740 --> 00:30:49,260 todėl įsitikinkite, palyginti-1, ./compare-1 ir įrašykite mama mažosiomis raidėmis abu kartus. 697 00:30:49,260 --> 00:30:50,560 Dabar tai tas pats dalykas. 698 00:30:50,560 --> 00:30:54,080 Ir jei aš jį dar kartą su mažosios ir tada gal didžiąsias. 699 00:30:54,080 --> 00:30:56,720 Dabar jis iš tikrųjų išskiria tarp viršutinės ir mažosiomis raidėmis. 700 00:30:56,720 --> 00:31:00,440 Taigi ne visi, kad sunku ar stebuklinga, bet ji dabar paaiškinti 701 00:31:00,440 --> 00:31:03,140 kas vyksta po gaubtu. 702 00:31:03,140 --> 00:31:07,640 >> Taigi ką dar galima mes ekstrakto iš šios pamokos natūra? 703 00:31:07,640 --> 00:31:08,980 Taigi leiskite pažvelgti šią išvaizdą. 704 00:31:08,980 --> 00:31:15,380 Aš ruošiuosi eiti į priekį ir rašyti Greita programa čia vadinama kopija-0. 705 00:31:15,380 --> 00:31:21,594 O dabar eikime į priekį ir iš tikrųjų darykime this-- kopiją-0, 706 00:31:21,594 --> 00:31:23,010 pažvelgti, ką aš čia turiu išvaizdą. 707 00:31:23,010 --> 00:31:24,712 Aš pirmą kartą pranešti vartotojui, ką nors pasakyti. 708 00:31:24,712 --> 00:31:26,420 Tada gaunu eilutę ir aš saugomi jį s. 709 00:31:26,420 --> 00:31:29,810 Tada aš patikrinti, ar -ai lygus lygus NULL, tiesiog grįžti 1 d. 710 00:31:29,810 --> 00:31:31,590 Taigi tai yra tik standartinė paklaida tikrinimas. 711 00:31:31,590 --> 00:31:33,112 Nieko įdomaus neįvyko. 712 00:31:33,112 --> 00:31:36,320 Ir iš tikrųjų, jei mes atsikratyti klaidų tikrinimo, tai atrodo savaitę 1 kodas 713 00:31:36,320 --> 00:31:36,985 šiuo metu. 714 00:31:36,985 --> 00:31:39,110 Bet aš pradėjau gauti tiek geriau apie tai. 715 00:31:39,110 --> 00:31:43,340 >> Dabar atitinka 16, prieš savaitę, o gal ir net prieš keletą dienų ar minučių, 716 00:31:43,340 --> 00:31:46,720 galite pasakyti linija 16 yra sukurti kintamą vadinamas t 717 00:31:46,720 --> 00:31:48,219 ir kopijavimas s į jį. 718 00:31:48,219 --> 00:31:50,010 Ir tai puikiai protinga Takeaway. 719 00:31:50,010 --> 00:31:51,560 Bet tiksliau dabar. 720 00:31:51,560 --> 00:31:54,190 Kas vyksta vadovaujantis 16? 721 00:31:54,190 --> 00:31:56,170 Kas yra gauti nukopijuotas iš kairės į dešinę? 722 00:31:56,170 --> 00:31:56,669 Taip? 723 00:31:56,669 --> 00:31:58,490 Auditorija: yra t gauti žinutę iš S adresą? 724 00:31:58,490 --> 00:32:01,220 >> David J. Malan: Lygiai t yra gauti iš S adresą. 725 00:32:01,220 --> 00:32:05,170 Taigi, kad būtų aišku, dabar, jei aš einu atgal į tą ankstesnį pavyzdžiui 726 00:32:05,170 --> 00:32:08,520 ir aš atkreipti dėmesį į ką aš įvedėte vietą. 727 00:32:08,520 --> 00:32:11,640 Ir ką aš įvedėte in-- čia s, o čia 728 00:32:11,640 --> 00:32:15,830 yra tai, ką aš įvedėte kažkur atmintis, mama ir tada Backslash 729 00:32:15,830 --> 00:32:17,840 0 kad pridėtinė už mane. 730 00:32:17,840 --> 00:32:23,060 Ką saugomi čia, prisiminti, tai yra bent vietą 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 tai, kas šiuo metu s. 732 00:32:24,655 --> 00:32:29,220 Taigi, jei on-line 16, sakau duok man kitas kintamasis vadinamas T ir parduotuvė 733 00:32:29,220 --> 00:32:33,590 bent vertė s, kas pasireiškia saugomi čia nebus mama 734 00:32:33,590 --> 00:32:35,480 o tik 1 numeris. 735 00:32:35,480 --> 00:32:38,520 >> Taigi, jei mes žiūrime į priekį šioje programoje Dabar, kas nutiks? 736 00:32:38,520 --> 00:32:40,690 Taigi pastebėti, kad ten Ši funkcija jums gali 737 00:32:40,690 --> 00:32:44,410 naudojo tai prieš kurį laiką už Cezaris, arba Vigenere, o gal ne visi. 738 00:32:44,410 --> 00:32:48,170 Galiu reikalauti mano printf, aš ketina pasinaudoti kopijavimo t. 739 00:32:48,170 --> 00:32:51,616 Pirmasis eilutė 19, greitai normalumas Tikrinti, strlen Tikrina t ilgį. 740 00:32:51,616 --> 00:32:53,740 Nes aš nenoriu pabandykite pasinaudoti kažką 741 00:32:53,740 --> 00:32:55,104 Jei nėra styginių ten. 742 00:32:55,104 --> 00:32:57,520 Jei vartotojas tiesiog paspauskite Enter ten nieko pasinaudoti. 743 00:32:57,520 --> 00:33:01,100 Taigi, aš nenoriu daryti liniją 21 d. 744 00:33:01,100 --> 00:33:05,758 Taigi linija 21 yra kapitalizuoti kuri laiškas, matyt, t? 745 00:33:05,758 --> 00:33:06,514 >> AUDITORIJA: M? 746 00:33:06,514 --> 00:33:08,722 David J. Malan: Jis atrodo kaip tai kopijavimas kurių vienas? 747 00:33:08,722 --> 00:33:09,486 AUDITORIJA: M. 748 00:33:09,486 --> 00:33:10,450 David J. Malan: Uh m. 749 00:33:10,450 --> 00:33:12,685 Gerai, kad pirmą m, nes įspėjimo, kad aš 750 00:33:12,685 --> 00:33:14,935 pereinant prie toupper, kuris jei jūs niekada matė jį tai 751 00:33:14,935 --> 00:33:16,980 tik funkcija pasinaudoti kaip savo indėlį. 752 00:33:16,980 --> 00:33:20,240 T laikiklis nulis reiškia duoti man nulis pobūdis t. 753 00:33:20,240 --> 00:33:22,550 Ir taip, kaip tai daro nuotrauka kaita, kad būtų aišku? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Ką reikia gauti perrašyti arba pakeisti atsižvelgiant į s ir t MOM 756 00:33:29,160 --> 00:33:30,097 Backslash nulis. 757 00:33:30,097 --> 00:33:31,470 >> Auditorija: [nesigirdi] 758 00:33:31,470 --> 00:33:34,030 >> David J. Malan: Taip, todėl tai vienas čia tiesiog 759 00:33:34,030 --> 00:33:40,860 reikia gauti pasikeitė to-- nustatyti this-- reikia gauti pakeistas į kapitalo m. 760 00:33:40,860 --> 00:33:44,330 Bet dabar, atrodo vėliau, programa, jei aš atsispausdinti 761 00:33:44,330 --> 00:33:49,800 s ir t, kaip aš valyti čia, žiūrėti, kas nutiks spausdinti s ir t. 762 00:33:49,800 --> 00:33:54,310 Taigi, kad kopija-0, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Leiskite man eiti į priekį ir įveskite MoM visose mažosiomis raidėmis. 764 00:33:57,140 --> 00:34:00,140 Atkreipkite dėmesį, tiek originalus ir kopija buvo kapitalizuotos. 765 00:34:00,140 --> 00:34:00,850 Kodėl? 766 00:34:00,850 --> 00:34:04,431 Na, s ir t yra tiek nukreipta į, jei bus, tas pats gabalas atmintį. 767 00:34:04,431 --> 00:34:06,930 Ir tiesą sakant, tai vis tikrai uninteresting-- tai 768 00:34:06,930 --> 00:34:09,150 kad mes naudojame adresų nulį čia. 769 00:34:09,150 --> 00:34:11,719 Aš turiu galvoje, aš nerūpi kur medžiaga yra atmintyje. 770 00:34:11,719 --> 00:34:13,550 Atsiprašome aš ištrinti šiek tiek per daug. 771 00:34:13,550 --> 00:34:15,674 Bet aš nerūpi kur viskas yra atmintyje. 772 00:34:15,674 --> 00:34:18,510 Ir taip, iš tiesų, ką programuotojai linkę galvoti apie 773 00:34:18,510 --> 00:34:21,080 yra tai, kad, kai jūs kalbate apie adresą, ar rodyklė, 774 00:34:21,080 --> 00:34:22,679 kuris rūpinasi, kur ji yra atmintyje. 775 00:34:22,679 --> 00:34:24,989 Man nerūpi, ar tai ne baitas viena ar vienas milijardas. 776 00:34:24,989 --> 00:34:27,920 Aš tik rūpintis, kad šis kintamasis yra efektyviai 777 00:34:27,920 --> 00:34:29,620 nukreipta į tą atminties riekė. 778 00:34:29,620 --> 00:34:33,350 Ir taip, nuo šiol, o ne kalambūras per savavališkai atminties adresus, tegul 779 00:34:33,350 --> 00:34:36,710 tiesiog pradėkite piešti patarimų kaip rodykles, nes strėlių. 780 00:34:36,710 --> 00:34:39,340 Taigi, kas s ir t yra iš tikrųjų, Pagal šią programą, 781 00:34:39,340 --> 00:34:42,130 nes, kaip aš sukūriau t, tai tik du atskiri kintamieji 782 00:34:42,130 --> 00:34:43,840 nukreipta tuo pačiu riekë atminties. 783 00:34:43,840 --> 00:34:45,215 Ir mes do not care, kur jie yra. 784 00:34:45,215 --> 00:34:47,130 Taigi, mes galime abstrakti karto, kad išsamiai. 785 00:34:47,130 --> 00:34:48,780 >> Taigi, kaip man išspręsti šią problemą? 786 00:34:48,780 --> 00:34:54,120 Jei aš noriu parašyti kopijos versiją programos, kad tikrai kopijos styginių 787 00:34:54,120 --> 00:34:56,840 ir pasinaudos tik Kopijuoti, tiesiog intuityviai, 788 00:34:56,840 --> 00:34:59,766 kas turite būti ingredientas mūsų sprendimas? 789 00:34:59,766 --> 00:35:00,640 Auditorija: [nesigirdi] 790 00:35:00,640 --> 00:35:01,420 David J. Malan: Mums reikia ką? 791 00:35:01,420 --> 00:35:01,820 Auditorija: riekė atmintį. 792 00:35:01,820 --> 00:35:03,280 David J. Malan: Turime kitą atminties riekė, tiesa? 793 00:35:03,280 --> 00:35:05,360 Mes nežinome, kaip daryti dar, nebūtinai. 794 00:35:05,360 --> 00:35:11,330 Bet tam tikra prasme man tai įvyktų taip, kad originalus mama mažosiomis raidėmis 795 00:35:11,330 --> 00:35:14,170 baigiasi toje papildomą riekė atmintį. 796 00:35:14,170 --> 00:35:19,770 Ir tada, kai aš pakeisti kopiją, aš nenoriu keisti šią kopiją čia. 797 00:35:19,770 --> 00:35:26,020 Aš vietoj norite pakeisti tik šį Kopijuoti kad originalas yra nepakitęs. 798 00:35:26,020 --> 00:35:27,980 >> Taigi, pažiūrėkime, kaip mes galime tai padaryti. 799 00:35:27,980 --> 00:35:31,800 Be kopija-1, kuri jau buvo atimta komentarą, 800 00:35:31,800 --> 00:35:33,250 tačiau komentavo internete. 801 00:35:33,250 --> 00:35:36,710 Mes vietoj daryti following-- tai linijos yra identiški, gauti man eilutę 802 00:35:36,710 --> 00:35:38,340 ir skambinti tai ai. 803 00:35:38,340 --> 00:35:43,500 Bet dabar pažvelkime vienas iš mūsų labiausiai sudėtingas, bet paskutinis sudėtingumo 804 00:35:43,500 --> 00:35:47,340 tam tikrą laiką, linija 16 tai tiksliai tai. 805 00:35:47,340 --> 00:35:49,400 Taigi, jei jūsų Nežiūriu su nuotrauka mes tiesiog drew-- 806 00:35:49,400 --> 00:35:51,790 duok man naują riekė atminties, kopijuoti viską į jį, 807 00:35:51,790 --> 00:35:53,730 pažiūrėkime, kaip mes verčiame, kad norint kodą. 808 00:35:53,730 --> 00:35:59,400 >> Taigi linija 16, kairėje pusėje, char * t, suteikia man šį langelį čia. 809 00:35:59,400 --> 00:36:00,230 Štai visa tai daro. 810 00:36:00,230 --> 00:36:03,240 Dešinėje pusėje, m ALLOC arba malloc, 811 00:36:03,240 --> 00:36:06,480 yra atminties paskirstymas, super išgalvotas, Neaiškus būdas tiesiog pasakyti 812 00:36:06,480 --> 00:36:07,640 duok man atminties riekė. 813 00:36:07,640 --> 00:36:09,290 Kiek atminties mums reikia? 814 00:36:09,290 --> 00:36:10,910 Na, yra natūra didelis išraiška. 815 00:36:10,910 --> 00:36:12,570 Bet pažiūrėkime, ką ji sako čia. 816 00:36:12,570 --> 00:36:15,940 Taigi, šis, žinoma, yra duoti man eilutė ilgis s. 817 00:36:15,940 --> 00:36:19,094 Taigi, mama ji turėtų būti, ką? 818 00:36:19,094 --> 00:36:21,010 Taigi tik trys, tiesa? mama yra trys simboliai. 819 00:36:21,010 --> 00:36:22,830 Jūs neturite suskaičiuoti Backslash nulio, kai jūs 820 00:36:22,830 --> 00:36:25,960 kalbėti apie eilutę jis ilgio Tiesą sakant, žmogaus matomus raides. 821 00:36:25,960 --> 00:36:28,020 Taigi mama, todėl tai suteikia man 3. 822 00:36:28,020 --> 00:36:31,170 Bet palauk, aš dabar pridedant 1. 823 00:36:31,170 --> 00:36:34,861 Kodėl aš iš tikrųjų noriu skirti 4 baitų, o ne tik 3? 824 00:36:34,861 --> 00:36:35,360 Taip? 825 00:36:35,360 --> 00:36:36,910 >> Auditorija: Sentinel vertės? 826 00:36:36,910 --> 00:36:38,951 >> David J. Malan: Būtent, tos Sentinel vertės. 827 00:36:38,951 --> 00:36:40,840 Dėl backslash nulis, Man reikia 4 baitų iš viso. 828 00:36:40,840 --> 00:36:42,870 Taigi man reikia ilgio Virvės plius 1 d. 829 00:36:42,870 --> 00:36:45,400 Ir tada tiesiog geros measure-- nors šioje sistemoje, 830 00:36:45,400 --> 00:36:49,390 jis visada bus 1-- aš sakau padauginti iš CHAR dydžio. 831 00:36:49,390 --> 00:36:51,552 Pasirodo, sizeof yra operatorius C, kad 832 00:36:51,552 --> 00:36:53,260 tiesiog jums pasakys baitų skaičius, kad tai 833 00:36:53,260 --> 00:36:54,700 reikalingas tam tikro duomenų tipą. 834 00:36:54,700 --> 00:36:57,740 Tai neveikia masyvai, paprastai, kartais tai daro. 835 00:36:57,740 --> 00:36:59,210 Bet, bendru atveju, ne. 836 00:36:59,210 --> 00:37:02,330 Bet tai bus pasakyti, kiek baitų char yra, kuris paaiškėja, visada yra 1. 837 00:37:02,330 --> 00:37:04,080 Taigi tai yra kaip padauginus iš 1. 838 00:37:04,080 --> 00:37:05,900 >> Taigi super paslaptingas ieško linija kodą. 839 00:37:05,900 --> 00:37:09,320 Bet visa tai daro, yra suteikia man atminties riekė. 840 00:37:09,320 --> 00:37:13,590 Bet tai, atrodo, kopijavimo nieko į tą atmintį? 841 00:37:13,590 --> 00:37:14,560 Dar ne. 842 00:37:14,560 --> 00:37:22,040 Ir taip Ką on-line 22 ir 23, 24, 25, gerai, aš tiesiog tai padaryti. 843 00:37:22,040 --> 00:37:23,760 Ir tai yra tarsi senosios mokyklos dalykų dabar. 844 00:37:23,760 --> 00:37:26,010 Tai kaip PSet 2, kur jūs tiesiog juda dalykų 845 00:37:26,010 --> 00:37:28,620 aplink atmintyje, ar veikiau stygos. 846 00:37:28,620 --> 00:37:31,920 >> Taigi, aš Iteracja nuo 0 iki eilutės s ilgio. 847 00:37:31,920 --> 00:37:37,820 Ir aš kopijavimo i-ojo požymio S į i-ojo požymio t. 848 00:37:37,820 --> 00:37:41,820 O kadangi aš, programuotojas, pagamintas Būtinai skirti tiksliai taip, kaip daug baitų 849 00:37:41,820 --> 00:37:44,600 kaip man reikia, tai puikus vienas su vienu "santykius. 850 00:37:44,600 --> 00:37:47,060 Ir aš nukopijuoti mama mažosiomis prie nauju. 851 00:37:47,060 --> 00:37:50,170 Ir tada galiausiai, aš šioje eilutėje. 852 00:37:50,170 --> 00:37:54,637 Ir taip poveikis yra tik pasinaudoti šia t čia. 853 00:37:54,637 --> 00:37:56,470 Taigi daug sugeria, bet jei jūs tiesiog apsvarstyti 854 00:37:56,470 --> 00:37:58,220 kas iš tikrųjų vyksta apie po gaubtu 855 00:37:58,220 --> 00:38:00,880 tiesiog perkelti šiuos baitų aplink, visi, kad 856 00:38:00,880 --> 00:38:06,617 reikia išspręsti šią problemą yra tiesiog suteikti mums šią atminties riekė. 857 00:38:06,617 --> 00:38:08,450 Šiuo metu yra rizikos didele, leiskite man parodyti 858 00:38:08,450 --> 00:38:13,200 vienas kitas pavyzdys, kad beveik vienodos, išskyrus šį vieną 859 00:38:13,200 --> 00:38:14,350 linija kodą. 860 00:38:14,350 --> 00:38:18,870 Taigi tai yra įsilaužėlis versija Šios programos, jei bus. 861 00:38:18,870 --> 00:38:21,050 Bet tegul tiesiog Alembikować tai į tai, kas vyksta. 862 00:38:21,050 --> 00:38:28,920 24 eilutė naudojama būti tai t laikiklis i gauna -us laikiklį I priedą. 863 00:38:28,920 --> 00:38:33,370 Dabar aš keičiasi tai Daug daugiau paslaptingas žvaigždė t 864 00:38:33,370 --> 00:38:36,280 plius 1 lygu žvaigždė -ai plius 1. 865 00:38:36,280 --> 00:38:38,702 >> Taigi, kas vyksta ir kodėl Ar turime žvaigždės charakterį? 866 00:38:38,702 --> 00:38:41,410 Mes matėme žvaigždė anksčiau, ir jis naudojamas skirtingai čia. 867 00:38:41,410 --> 00:38:45,490 Mes anksčiau matė char *, dabar matau Žvaigždžių pradžioje, ir kad viskas OK. 868 00:38:45,490 --> 00:38:48,190 Nes paaiškėja, mes gali rūšies išvadą tik 869 00:38:48,190 --> 00:38:50,280 nuo pirmojo principai, kas vyksta. 870 00:38:50,280 --> 00:38:53,860 Taigi tiesiog būti aišku, kas yra s? 871 00:38:53,860 --> 00:38:55,052 Praėjusią savaitę jis buvo eilutė. 872 00:38:55,052 --> 00:38:56,260 Tai nepakanka nebėra. 873 00:38:56,260 --> 00:38:57,690 Tai, kas yra S, konkrečiai? 874 00:38:57,690 --> 00:38:58,590 >> Auditorija: [nesigirdi] 875 00:38:58,590 --> 00:38:59,881 >> David J. Malan: Tai rodyklė. 876 00:38:59,881 --> 00:39:02,610 Tai iš adresas Pirmasis simbolis mes įvedėte. 877 00:39:02,610 --> 00:39:04,780 Gerai, kas yra t? 878 00:39:04,780 --> 00:39:05,660 >> Auditorija: [nesigirdi] 879 00:39:05,660 --> 00:39:07,950 >> David J. Malan: adresas pirmasis baitas 880 00:39:07,950 --> 00:39:10,490 t, ty atminties riekė perskirstytos. 881 00:39:10,490 --> 00:39:14,720 Taigi paaiškėja, kad kai mes kartoti nuo 0 nuo iki eilutę 882 00:39:14,720 --> 00:39:17,424 length-- visų pirma, aš prasideda 0, nes 883 00:39:17,424 --> 00:39:18,840 Šios senojoje mokykloje for ciklas dalykas. 884 00:39:18,840 --> 00:39:22,400 Taigi tiesiog paprastumo, tegul Tarkime, kad pirmą eilutę kodo 885 00:39:22,400 --> 00:39:23,760 yra tikrai tik tai, tiesa. 886 00:39:23,760 --> 00:39:26,080 Jei i yra nulis, pridedant nulį kažkas matyt 887 00:39:26,080 --> 00:39:27,540 nesiruošia turėti poveikį. 888 00:39:27,540 --> 00:39:28,560 >> Taigi, kas tai yra posakis? 889 00:39:28,560 --> 00:39:31,600 Pasirodo, kad žvaigždės operatorius šiame kontekste 890 00:39:31,600 --> 00:39:33,700 yra dereference operatorius, kuris yra tik 891 00:39:33,700 --> 00:39:37,530 išgalvotas būdas pasakyti eiti adresu. 892 00:39:37,530 --> 00:39:42,080 Taigi, jei s yra pirmasis adresas personažas šiame atminties riekė, 893 00:39:42,080 --> 00:39:43,630 * s "reiškia ten. 894 00:39:43,630 --> 00:39:45,630 Ir todėl mes sudarytas šioje būdu nuotrauka, 895 00:39:45,630 --> 00:39:47,430 galite patvirtina Žemiau psichikos modelį. 896 00:39:47,430 --> 00:39:51,030 Jei tai yra S, o jūs sakote * s * s, lyg loviai ir kopėčios, 897 00:39:51,030 --> 00:39:54,540 jei pamenate žaidimą iš vaikystės, yra kaip sekti, kad rodyklę ir eiti 898 00:39:54,540 --> 00:39:55,570 į adresą. 899 00:39:55,570 --> 00:39:57,080 >> * t yra tas pats dalykas. 900 00:39:57,080 --> 00:39:59,855 Taigi pradėkite čia, eikite į savo riekė. 901 00:39:59,855 --> 00:40:03,350 Aš negaliu tiesiog piešti ant Šis ekranas, kad taip. 902 00:40:03,350 --> 00:40:05,560 * T reiškia eiti čia. 903 00:40:05,560 --> 00:40:08,830 Ir tada, už linijos, yra tik sakydamas perkelti šį simbolį čia 904 00:40:08,830 --> 00:40:11,330 perkelti šį simbolį čia perkelti šį simbolį čia. 905 00:40:11,330 --> 00:40:12,890 Bet kaip man padaryti, kad rodmenų didėjimas? 906 00:40:12,890 --> 00:40:15,430 Man reikia anuliuoti, ką aš tiesiog ištrinti. 907 00:40:15,430 --> 00:40:18,140 Tai yra tai, ką paprastai vadinama rodyklė aritmetinis, kuris 908 00:40:18,140 --> 00:40:20,040 reiškia matematikos su adresais. 909 00:40:20,040 --> 00:40:22,460 >> Jei, tai už kilpos, Aš nuolat incrementing i, 910 00:40:22,460 --> 00:40:26,880 ir s yra adresą ir t yra Adresas, jei aš tiesiog nuolat pridedant 1, 911 00:40:26,880 --> 00:40:31,406 kad tik reiškia nuolat juda į priekį, ir į priekį, ir perduoti į atmintį. 912 00:40:31,406 --> 00:40:34,030 Tai kaip Oxford Street, The gatvės, kad CS pastatas yra. 913 00:40:34,030 --> 00:40:36,490 CS pastatai yra 33 Oxford Street. 914 00:40:36,490 --> 00:40:39,870 Taigi, jei jums buvo daryti 33 Oksfordo gatvė plius 1, 915 00:40:39,870 --> 00:40:42,870 kad atneša jums 34 Oksforde Gatvė, tada 35 Oxford Street, 916 00:40:42,870 --> 00:40:46,380 tada 36 Oxford Street, ką tie pastatai iš tikrųjų yra - jei jie egzistuoja. 917 00:40:46,380 --> 00:40:50,540 Ir taip, tai viskas, ką mes darome čia su rodykle aritmetika. 918 00:40:50,540 --> 00:40:53,820 >> Taigi, tai super slaptas būdas išreikšti save. 919 00:40:53,820 --> 00:40:56,160 Bet visa tai, kas vyksta po kapotu 920 00:40:56,160 --> 00:40:59,330 yra tik šiuos adresus, kaip po žemėlapį, jei norite, 921 00:40:59,330 --> 00:41:02,692 arba po rodykles, kaip mes parengtos ekrane. 922 00:41:02,692 --> 00:41:04,910 Gerai, daug virškinti. 923 00:41:04,910 --> 00:41:10,410 Bet koks klausimas, sintaksė, koncepcijas, rodyklės, malloc ar pan. 924 00:41:10,410 --> 00:41:11,480 Taip, daugiau nei čia pirmas. 925 00:41:11,480 --> 00:41:13,755 >> Auditorija: Taigi, kur, kad sako * t lygus toupper * t, 926 00:41:13,755 --> 00:41:15,575 yra tai, kad ketina pasinaudoti Visos raidės ar just-- 927 00:41:15,575 --> 00:41:17,283 >> David J. Malan: Ak, tikrai geras klausimas. 928 00:41:17,283 --> 00:41:19,805 Taigi, šiame linija čia, 31, tai vyksta kapitalizuoti 929 00:41:19,805 --> 00:41:21,430 pirmoji raidė arba visas raides. 930 00:41:21,430 --> 00:41:23,460 Taigi leiskite atsakyti, kad vyksta atgal į pirmųjų principų. 931 00:41:23,460 --> 00:41:26,168 Ir pirmieji principai čia aš turiu galvoje Tiesiog nueikite į pagrindinių sąvokų 932 00:41:26,168 --> 00:41:27,000 kas manimi dalyvauja. 933 00:41:27,000 --> 00:41:29,770 Taigi toupper yra funkcija kad pasinaudos char. 934 00:41:29,770 --> 00:41:30,530 Tai viskas. 935 00:41:30,530 --> 00:41:36,740 * T reiškia eiti į first-- eiti į t adresą. 936 00:41:36,740 --> 00:41:40,350 Taigi, vaizdą, jei tai yra su korinio atminties skyrėme su malloc, 937 00:41:40,350 --> 00:41:43,310 ir tai yra t, * t reiškia, eikite čia. 938 00:41:43,310 --> 00:41:46,710 >> Tuo tarpu, jūs artimųjų ši vertė, mažosiomis m 939 00:41:46,710 --> 00:41:50,040 į toupper, jūs gaunate atgal kapitalas, M, kur jūs išleisti jį? 940 00:41:50,040 --> 00:41:52,410 Jūs esate išleidimą toje pačioje vietoje. 941 00:41:52,410 --> 00:41:55,540 Ir taip tos tų logika pagrindinės sąvokos tai tik 942 00:41:55,540 --> 00:41:58,792 Kapitalizacija pirmąją raidę nebent jūs pakartoti su I arba A 943 00:41:58,792 --> 00:42:02,000 už kilpa arba while cikle, jis nesiruošia nieko daugiau, nei jūs paprašykite jį daryti. 944 00:42:02,000 --> 00:42:02,583 Geras klausimas. 945 00:42:02,583 --> 00:42:03,237 Taip? 946 00:42:03,237 --> 00:42:05,369 >> Auditorija: Kodėl naudoti dereference būdas, o ne 947 00:42:05,369 --> 00:42:05,979 masyvas? 948 00:42:05,979 --> 00:42:07,395 >> David J. Malan: Ak, geras klausimas. 949 00:42:07,395 --> 00:42:10,672 Kodėl jūs naudojate dereference metodas vietoj masyvo metodas? 950 00:42:10,672 --> 00:42:12,130 Jokios ypatingos priežasties, turi būti sąžiningas. 951 00:42:12,130 --> 00:42:15,290 Ir, tiesą sakant, tai rūšies, pavyzdžiui, į dešinę, 952 00:42:15,290 --> 00:42:17,556 Aš tiesiog teigdamas, todėl programa sudėtingesnė, 953 00:42:17,556 --> 00:42:19,680 daugiau akys stiklinimas daugiau, žmonės patikrinti 954 00:42:19,680 --> 00:42:22,830 nes tai atrodo super slaptas, tačiau nors ji daro tą patį. 955 00:42:22,830 --> 00:42:26,695 Ir taip, atvirai, tai yra be reikalo vizualiai sudėtingas sprendimas 956 00:42:26,695 --> 00:42:27,320 į problemą. 957 00:42:27,320 --> 00:42:29,580 >> Jis vis dar geras dizainas, penki iš penkių projektavimo, 958 00:42:29,580 --> 00:42:33,140 ar tai skliausteliuose žymėjimas arba žymėjimo žymeklis. 959 00:42:33,140 --> 00:42:36,299 But-- ypač kai mes gauname vėliau kursuose PSet 5 960 00:42:36,299 --> 00:42:39,340 kai mes įgyvendinti šį žodyną Minėjau iš times-- pora 961 00:42:39,340 --> 00:42:42,300 mes iš tikrųjų rūpi žemo lygio atminties adresai 962 00:42:42,300 --> 00:42:44,140 kad mes tikrai suprantame, kas vyksta. 963 00:42:44,140 --> 00:42:48,300 >> Bet, dabar, pasirodo, kad šis eilutę kodo čia laužtiniuose skliaustuose 964 00:42:48,300 --> 00:42:49,900 ne tikrai egzistuoja. 965 00:42:49,900 --> 00:42:52,230 Jie yra tai, kas vadinama sintaksinis cukraus, kuris 966 00:42:52,230 --> 00:42:58,390 yra tik keistai kietas būdas sakydamas kompiliatorius paverčia skliaustus, kad būtų 967 00:42:58,390 --> 00:43:00,420 kad matematinė išraiška. 968 00:43:00,420 --> 00:43:02,660 Taigi, tai žmogaus konvencija kad būtų galima tiesiog rašyti 969 00:43:02,660 --> 00:43:04,220 Šie patogus naudoti skliausteliuose. 970 00:43:04,220 --> 00:43:06,850 Bet kas sudarytojas, žvangėjimas, tikrai daro bet kuriuo metu 971 00:43:06,850 --> 00:43:10,970 rašote, kas pabrėžiama linija 24, po gaubtu, tai tikrai 972 00:43:10,970 --> 00:43:12,330 konvertuojant jį į tai. 973 00:43:12,330 --> 00:43:16,200 Tai tiesiog malonesnis kaip žmogaus skaityti ir rašyti kodą kaip 24 eilutės. 974 00:43:16,200 --> 00:43:18,530 Bet galų gale tie, mokymo ratai per pleiskanoti 975 00:43:18,530 --> 00:43:21,780 Kai vienas savo Comfort stiprėja. 976 00:43:21,780 --> 00:43:27,240 >> Visos teisės, todėl prisimenu tada, kad ši buvo didžiausia problema rūšiuoti 977 00:43:27,240 --> 00:43:27,807 nubėgome į. 978 00:43:27,807 --> 00:43:30,640 Ir tai, kas sukėlė šį visumą velniškai pokalbis apie rodykles, 979 00:43:30,640 --> 00:43:32,340 ir adresai, ir kopijavimas dalykų. 980 00:43:32,340 --> 00:43:35,410 Tai buvo, nes mes jo užkliūti Tai kvaila, kvaila problema, kur 981 00:43:35,410 --> 00:43:38,830 Aš įgyvendinama logically-- su Lauren čia ant demo ir apelsinų sulčių 982 00:43:38,830 --> 00:43:43,770 į milk-- puikiai algoritmiškai teisinga funkcija 983 00:43:43,770 --> 00:43:47,010 už Swapping dviejų kintamųjų " vertės, bet velniškai dalykas 984 00:43:47,010 --> 00:43:50,550 neturėjo jokių patvari, arba nuolatinis, poveikis mano kodas. 985 00:43:50,550 --> 00:43:51,820 >> Ir kodėl tai buvo? 986 00:43:51,820 --> 00:43:54,650 Trumpai tariant, kodėl tai įgyvendinimas apsikeitimo 987 00:43:54,650 --> 00:43:58,740 logiškai teisinga, tačiau neturi įtakos kintamieji, kurios perduodamos į jį, 988 00:43:58,740 --> 00:44:01,119 kaip x ir Y pagrindinis? 989 00:44:01,119 --> 00:44:02,410 Koks buvo šio klausimo esmė? 990 00:44:02,410 --> 00:44:02,909 Taip? 991 00:44:02,909 --> 00:44:05,532 Auditorija: Kadangi kintamasis padarė kopijos kintamasis perdavimo 992 00:44:05,532 --> 00:44:06,240 per funkcija. 993 00:44:06,240 --> 00:44:09,060 >> David J. Malan: Būtent, kai pravažiuojate kintamuosius į funkciją, ar argumentai 994 00:44:09,060 --> 00:44:11,030 į funkciją, jie praėjo egzempliorius, kuris 995 00:44:11,030 --> 00:44:14,770 reiškia, kad gausite identišką ieško modelis bitai abiejų x ir y, 996 00:44:14,770 --> 00:44:15,955 čia vadinamas a ir b. 997 00:44:15,955 --> 00:44:18,080 Ir jūs galite padaryti bet ką norite su šiais egzemplioriais, 998 00:44:18,080 --> 00:44:20,657 bet jie ketina turėti ne Poveikis skambinančio funkcija. 999 00:44:20,657 --> 00:44:22,990 Ir, tiesą sakant, mes atkreipė kad nuotrauka ant ekrano, prisiminti 1000 00:44:22,990 --> 00:44:25,520 Paskutinį kartą, kuriuo, jei jums tikrai manau, kad apie tai, kas 1001 00:44:25,520 --> 00:44:28,570 vyksta po jei hood-- Tai jūsų kompiuterio atmintyje, 1002 00:44:28,570 --> 00:44:31,650 ir žemyn čia yra riekė atminties naudojama pagrindinė, 1003 00:44:31,650 --> 00:44:34,020 tai yra su korinio atminties naudojama apsikeitimo, 1004 00:44:34,020 --> 00:44:37,090 ir net jei pagrindinis turi du kintamieji, X ir Y, 1005 00:44:37,090 --> 00:44:41,840 apsikeitimo gali turėti identiškas ieško vertybės, kurios abi yra 1 ir 2 dalyse, 1006 00:44:41,840 --> 00:44:44,520 bet jie visiškai skirtingi gabalai atminties. 1007 00:44:44,520 --> 00:44:46,130 >> Taigi, mes turime išspręsti šią. 1008 00:44:46,130 --> 00:44:51,580 Ir tiesą sakant, atrodo, kad mes dabar turi išspręsti šią problemą, į dešinę. 1009 00:44:51,580 --> 00:44:55,760 Jei dabar mes turime galimybę manipuliuoti būdu adresų 1010 00:44:55,760 --> 00:44:59,310 ir, rūšiuoti loviai ir kopėčios stilius, atlikite šiuos rodykles 1011 00:44:59,310 --> 00:45:02,820 ir niekur mes norime atmintyje, mes negalėjome 1012 00:45:02,820 --> 00:45:06,220 išspręsti šią problemą Pereinant nuo pagrindinės apsikeitimo 1013 00:45:06,220 --> 00:45:09,650 ne vertybės norime apsikeitimo, bet tiesiog intuityviai 1014 00:45:09,650 --> 00:45:11,630 Ką galėtume perduoti apsikeitimo vietoj? 1015 00:45:11,630 --> 00:45:12,620 >> [Tarpines BALSAS] 1016 00:45:12,620 --> 00:45:15,244 >> David J. Malan: kodėl ne mes tiesiog perduoti jį adresai, tiesa? 1017 00:45:15,244 --> 00:45:17,470 Kodėl mes suteikiame sukeisti lobių žemėlapį, jei norite, 1018 00:45:17,470 --> 00:45:20,950 kuris veda jį į faktiniai dydžiai x ir y. 1019 00:45:20,950 --> 00:45:24,340 Leiskite apsikeitimo, iš tikrųjų keisti tie originalūs, o ne bitai 1020 00:45:24,340 --> 00:45:26,797 tik artimųjų kopijas bitai. 1021 00:45:26,797 --> 00:45:29,130 Ir taip, iš tiesų, tai, kas yra bus sprendimas. 1022 00:45:29,130 --> 00:45:31,899 Ši versija čia yra aiškiai bloga ir trūkumų. 1023 00:45:31,899 --> 00:45:35,190 Ir dabar, iš pirmo žvilgsnio, tai tiesiog atrodo kaip mes pridėjo žvaigždžių krūva atsitiktinai 1024 00:45:35,190 --> 00:45:37,106 ir kirto mūsų pirštai kad būtų surinkti. 1025 00:45:37,106 --> 00:45:38,460 Bet dabar jis kaupia. 1026 00:45:38,460 --> 00:45:40,090 >> Bet pažiūrėkime, kas tai. 1027 00:45:40,090 --> 00:45:43,990 Ir, deja, autorių C galėjo pasirinkti kitą simbolį 1028 00:45:43,990 --> 00:45:46,380 kad tai šiek tiek aiškesnis, bet žvaigždė operatorius 1029 00:45:46,380 --> 00:45:48,610 turi skirtingą reikšmę dviejuose skirtinguose kontekstuose. 1030 00:45:48,610 --> 00:45:50,890 Ir mes matėme tiek, bet tegul atskirti. 1031 00:45:50,890 --> 00:45:55,310 >> Taigi iki ne ten viršuje, kai aš pakeitė a ir b 1032 00:45:55,310 --> 00:46:00,470 gražu int yra į blogas versija int žvaigždės, A ir B 1033 00:46:00,470 --> 00:46:01,740 Anksčiau buvo sveikieji skaičiai. 1034 00:46:01,740 --> 00:46:05,752 Kas yra A ir B dabar geras, žalia versija? 1035 00:46:05,752 --> 00:46:06,900 Jie adresus. 1036 00:46:06,900 --> 00:46:09,610 Adresai, ką, kad būtų aišku? 1037 00:46:09,610 --> 00:46:10,770 Adresai sveikųjų skaičių. 1038 00:46:10,770 --> 00:46:12,520 Taigi dėl to, kad aš sakydamas int žvaigždučių priemonės 1039 00:46:12,520 --> 00:46:15,440 tai yra adresas sveikasis skaičius, konkrečiai. 1040 00:46:15,440 --> 00:46:19,120 >> Taigi, dabar apie tai pranešusios, kodas linijų, kažkas pasikeitė per daug. 1041 00:46:19,120 --> 00:46:22,770 tmp lieka ta pati, nes tai tik laikinas sveikasis skaičius, 1042 00:46:22,770 --> 00:46:24,110 nėra atminties magija ten. 1043 00:46:24,110 --> 00:46:26,370 Bet dabar reikia žvaigždė. 1044 00:46:26,370 --> 00:46:28,560 Ir, iš tiesų, kiekvienas kita paminėjimas A ir B, 1045 00:46:28,560 --> 00:46:31,780 pastebėsite, kad visi tai keičiasi iš raudonos į žalią 1046 00:46:31,780 --> 00:46:34,209 yra tai, kad aš priešdėlį tie kintamieji su žvaigždėmis. 1047 00:46:34,209 --> 00:46:35,750 Nes aš nenoriu kopijuoti ir b. 1048 00:46:35,750 --> 00:46:40,350 Nes jei aš tiesiog nukopijuokite a ir b ir apsikeitimo a ir b, ką aš iš tikrųjų Swapping? 1049 00:46:40,350 --> 00:46:43,760 Tik adresai, noriu sukeisti kas tose adresus. 1050 00:46:43,760 --> 00:46:44,860 Noriu ten. 1051 00:46:44,860 --> 00:46:48,000 Ir taip žvaigždė operatorius viduje mano funkcija, 1052 00:46:48,000 --> 00:46:51,700 ne viduje parametrų sąraše, reiškia, kad jūs einate į šių adresų 1053 00:46:51,700 --> 00:46:54,490 ir iš tikrųjų pakeisti šias vertybes. 1054 00:46:54,490 --> 00:46:56,500 >> Taigi, ką paveikslėlį dabar atrodo vietoj. 1055 00:46:56,500 --> 00:47:03,250 Na, jei ne aš artimųjų į A ir B ne 1 ir 2-- 1056 00:47:03,250 --> 00:47:05,790 Aš iš tikrųjų reikia pridėti vienas kitas apibrėžimas čia. 1057 00:47:05,790 --> 00:47:09,030 Taigi manau, kad tai riekė atminties yra vietos 10. 1058 00:47:09,030 --> 00:47:12,960 >> Tai buvimo vietos 11, bet tai yra iš supaprastinti tiek, 1059 00:47:12,960 --> 00:47:18,900 Dabar aš turiu du pasirinkimus aš praeiti x ir y ar man praeiti jų adresus? 1060 00:47:18,900 --> 00:47:22,500 Jei galiu perduoti savo adresus kaip šis, aš tiesiog 1061 00:47:22,500 --> 00:47:25,390 dabar reikia įgyvendinti apsikeitimo už žalios kodas 1062 00:47:25,390 --> 00:47:29,080 taip, kad, kai jis mato ir ją mato B, tai nereiškia tiesiog nukopijuokite A ir B 1063 00:47:29,080 --> 00:47:30,540 ir perkelti pieno ir apelsinų sulčių. 1064 00:47:30,540 --> 00:47:32,664 Pienas ir apelsinų sultys metafora dabar skyla, 1065 00:47:32,664 --> 00:47:35,060 nes tie, kurie puodeliai skystų, o ne žemėlapiais. 1066 00:47:35,060 --> 00:47:37,750 Mes vietoj reikia eiti spręsti 10 ir mes 1067 00:47:37,750 --> 00:47:42,420 reikia eiti spręsti 11, ir tada atlikti šią Swapping logiką. 1068 00:47:42,420 --> 00:47:45,580 >> Taigi logika yra tas pats, bet mums reikia šiek tiek kitaip 1069 00:47:45,580 --> 00:47:47,160 nuo susipažinimo tuos kintamuosius. 1070 00:47:47,160 --> 00:47:52,400 Ir taip galų gale, ką Programa turi atrodyti tai. 1071 00:47:52,400 --> 00:47:56,610 Be swap.c pažodžiui nukopijuojami ir įklijuoti žalią versiją. 1072 00:47:56,610 --> 00:47:58,450 Bet man reikia padaryti vieną pakeitimą. 1073 00:47:58,450 --> 00:48:00,180 Tai nepakanka tik pakeisti apsikeitimo. 1074 00:48:00,180 --> 00:48:03,830 Kokie kiti linija kodą man reikia pakeisti? 1075 00:48:03,830 --> 00:48:04,330 Taip? 1076 00:48:04,330 --> 00:48:05,770 >> AUDITORIJA: Kur ji mano argumentus. 1077 00:48:05,770 --> 00:48:07,603 >> David J. Malan: Kur ji užima savo argumentus. 1078 00:48:07,603 --> 00:48:09,985 Taigi, jei aš slinkite aukštyn į pagrindinį aš galite ne tik pereiti į x ir y, 1079 00:48:09,985 --> 00:48:12,820 ir, pažadu, paskutinis gabalas naujos sintaksės šiandien. 1080 00:48:12,820 --> 00:48:17,200 Man reikia praeiti ne x ir y bet x ir y adresas. 1081 00:48:17,200 --> 00:48:20,400 Ir it turns out, simbolį kad C autoriai pasirinko 1082 00:48:20,400 --> 00:48:23,860 yra, jei jūs čia naudoti ampersendo, o ne painioti su Bitinis ženklui, 1083 00:48:23,860 --> 00:48:27,130 Jei naudojate ampersendo čia ir Ampersand čia 1084 00:48:27,130 --> 00:48:29,570 Tai skaičiai, už jus, kas yra x adresas 1085 00:48:29,570 --> 00:48:31,740 gal tai 10, kas yra adresas y, gal tai 1086 00:48:31,740 --> 00:48:35,400 11, ir eina tie, vietoj. 1087 00:48:35,400 --> 00:48:37,210 >> Taigi daug sugerti visus iš karto. 1088 00:48:37,210 --> 00:48:40,190 Bet pažiūrėkime, dabar greitai Mūsų likusios keturios minutės 1089 00:48:40,190 --> 00:48:42,150 kur viskas gali pašlyti. 1090 00:48:42,150 --> 00:48:45,120 Ir kaip panaikinti, iš tikrųjų Aš paėmė šią nuotrauką, 1091 00:48:45,120 --> 00:48:46,920 TF paėmė šią nuotrauką per metus ar du atgal. 1092 00:48:46,920 --> 00:48:49,190 Taigi, šis kampas yra atgal iš Eliot valgomajame. 1093 00:48:49,190 --> 00:48:52,310 Pointeriai yra turbūt sunkiausia temą, kad mes padengti CS50. 1094 00:48:52,310 --> 00:48:54,810 Taigi, jei jūs nerimauti rūšiuoti nuolydis yra kaip gal tai 1095 00:48:54,810 --> 00:48:56,770 daugiau ledo ritulio lazda kaip tai, suprantame, 1096 00:48:56,770 --> 00:49:00,160 mes rūšies artėja viršūnę sąlygos konceptualaus sudėtingumo. 1097 00:49:00,160 --> 00:49:02,300 >> Ir aš auklėti tai nuotrauka, nes prisiekiu 1098 00:49:02,300 --> 00:49:05,920 Dievui, rudenį 1996, kai aš paėmė CS50 su mano mokymo bendradarbiu, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, jis sėdėjo mane į kampas Eliot D. salėje per pietus, 1100 00:49:09,620 --> 00:49:12,330 arba vakarienė, ar kažkas bando padėti man suprasti patarimų. 1101 00:49:12,330 --> 00:49:16,520 Ir tai, kai buvau savaitėms po ji buvo įvesta paskaita jei toks 1102 00:49:16,520 --> 00:49:18,170 Aš pagaliau supratau patarimų. 1103 00:49:18,170 --> 00:49:20,590 Ir aš tikiu, tikisi, kad šis bus spustelėkite toli anksčiau už jus. 1104 00:49:20,590 --> 00:49:23,540 Tačiau suprantame, kad tai absoliučiai tarp sudėtingesnį temos 1105 00:49:23,540 --> 00:49:24,420 mes pažvelgė. 1106 00:49:24,420 --> 00:49:25,819 Bet tai viena iš labiausiai galingas. 1107 00:49:25,819 --> 00:49:28,860 Ir kai jūs gaunate jį, tai tikrai visi tik ketina pagaliau atėjo kartu. 1108 00:49:28,860 --> 00:49:31,460 Taigi būkite tikri, jis nėra reikia visa kriaukle šiandien. 1109 00:49:31,460 --> 00:49:32,980 >> Taigi čia paskutinis programa mes ketiname pažvelgti. 1110 00:49:32,980 --> 00:49:35,605 Ir mes ketiname baigti su greitai tris minutes Claymation 1111 00:49:35,605 --> 00:49:37,030 pagaminti mūsų draugas, Nick Parlante. 1112 00:49:37,030 --> 00:49:41,440 Štai programa, kad viršutinė dviejų linijos pareiškia kintama x ir y. 1113 00:49:41,440 --> 00:49:44,780 Kurie abu yra adresai sveikųjų skaičių, dar žinomas kaip patarimų. 1114 00:49:44,780 --> 00:49:48,125 Mes tada skirti pakankamai atminties saugoti int 1115 00:49:48,125 --> 00:49:51,344 ir laikyti adresą tos atminties x. 1116 00:49:51,344 --> 00:49:53,260 Taigi, tai dar paprasčiau nei pavyzdžiui, prieš. 1117 00:49:53,260 --> 00:49:56,100 Duok man keturis baitų atminties, tai iš int dydis, 1118 00:49:56,100 --> 00:49:58,000 ir įdėti, kad adresą x. 1119 00:49:58,000 --> 00:50:01,070 Ši eilutė čia reiškia eiti į X adresą 1120 00:50:01,070 --> 00:50:05,270 ir įdėti prasmę gyvenimą, skaičius 42 yra. 1121 00:50:05,270 --> 00:50:07,710 Tačiau ši eilutė mane jaudina. 1122 00:50:07,710 --> 00:50:12,620 Pažymėti Y reiškia eiti į adreso y, ir įdėti nelaimingas numeris 13 ten. 1123 00:50:12,620 --> 00:50:15,780 Kodėl tai pavojinga, šiuo metu į story-- nors greitai papasakojo 1124 00:50:15,780 --> 00:50:17,980 mūsų rečiau minučių here-- kodėl tai blogai 1125 00:50:17,980 --> 00:50:19,660 man pasakyti, eikite į Y adresą? 1126 00:50:19,660 --> 00:50:21,077 >> Auditorija: Jūs neturite [nesigirdi]. 1127 00:50:21,077 --> 00:50:22,910 David J. Malan: Turiu ne įdėti ką nors į y. 1128 00:50:22,910 --> 00:50:25,520 Taigi, kas yra iš y vertė, šiuo metu į istoriją? 1129 00:50:25,520 --> 00:50:26,570 Mes neįsivaizduoju. 1130 00:50:26,570 --> 00:50:29,190 Tai kai šiukšlių vertė ir nedaro Binky žinoti. 1131 00:50:29,190 --> 00:50:32,532 Jei galėtume baigiasi šio pranešimo. 1132 00:50:32,532 --> 00:50:34,832 >> [Vaizdo įrašų atkūrimas] 1133 00:50:34,832 --> 00:50:36,500 >> -hey, Binky, pabusti. 1134 00:50:36,500 --> 00:50:39,140 Atėjo laikas rodykle įdomus. 1135 00:50:39,140 --> 00:50:40,210 >> -Kas tai? 1136 00:50:40,210 --> 00:50:41,690 Sužinokite daugiau apie rodykles? 1137 00:50:41,690 --> 00:50:43,570 Oi, Goody. 1138 00:50:43,570 --> 00:50:46,600 >> -Well, Pradėti, manau, mes ketinate reikia pora patarimų. 1139 00:50:46,600 --> 00:50:47,380 >> -GERAI. 1140 00:50:47,380 --> 00:50:51,120 Šis kodas skiria dvi rodykles kuris gali nurodyti sveikaisiais skaičiais. 1141 00:50:51,120 --> 00:50:53,557 >> Ok, gerai matau dvi rodyklės, tačiau jie 1142 00:50:53,557 --> 00:50:55,140 neatrodo, kad būti nukreipta į ką nors. 1143 00:50:55,140 --> 00:50:55,970 >> -Teisingai. 1144 00:50:55,970 --> 00:50:58,100 Iš pradžių Pointeriai nenukreipkite į nieką. 1145 00:50:58,100 --> 00:51:00,950 Tai, ką jie atkreipia dėmesį į yra vadinamas pointees ir nustatyti juos 1146 00:51:00,950 --> 00:51:02,330 yra atskiras žingsnis. 1147 00:51:02,330 --> 00:51:03,210 >> -OH, Į dešinę, į dešinę. 1148 00:51:03,210 --> 00:51:03,940 Aš žinojau, kad. 1149 00:51:03,940 --> 00:51:05,730 Į pointees yra atskira. 1150 00:51:05,730 --> 00:51:08,310 Taigi, kaip jums skirti pointee? 1151 00:51:08,310 --> 00:51:11,960 >> Ok, gerai šiame kodekse skiria naujas sveikas pointee, 1152 00:51:11,960 --> 00:51:15,050 ir Šioje dalyje nustatomi x atkreipti į jį. 1153 00:51:15,050 --> 00:51:16,240 >> -hey, Kad atrodo geriau. 1154 00:51:16,240 --> 00:51:17,743 Todėl įsitikinkite, kad kažką daryti. 1155 00:51:17,743 --> 00:51:23,580 >> Ok, aš dereference rodykle X saugoti skaičių 42 į savo pointee. 1156 00:51:23,580 --> 00:51:27,130 Dėl šios apgauti, aš need my Magic Wand dereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> -Tavo Stebuklinga lazdele ir dereferencing? 1158 00:51:30,200 --> 00:51:32,310 Uh, kad tai puiku. 1159 00:51:32,310 --> 00:51:34,270 >> -Tai Ką kodas atrodo. 1160 00:51:34,270 --> 00:51:35,970 Aš tiesiog įsteigti skaičių and-- 1161 00:51:35,970 --> 00:51:37,070 >> [Pop GARSO] 1162 00:51:37,070 --> 00:51:39,140 >> -hey, Ieškoti ten jis eina. 1163 00:51:39,140 --> 00:51:43,980 Taigi, daro dereference pagal x taip rodyklė prieiti prie savo pointee. 1164 00:51:43,980 --> 00:51:46,150 Šiuo atveju, 42 laikyti ten. 1165 00:51:46,150 --> 00:51:50,700 Ei, pabandykite naudoti ją saugoti numerį 13 pro kitą žymeklis, y. 1166 00:51:50,700 --> 00:51:51,840 >> -GERAI. 1167 00:51:51,840 --> 00:51:56,270 Aš tiesiog eiti per čia y, ir gauti numeris 13 išsidėstymą aikštelėje. 1168 00:51:56,270 --> 00:52:00,380 Ir tada į lazdelę dereferencing ir just-- 1169 00:52:00,380 --> 00:52:01,646 >> [BUZZER GARSO] 1170 00:52:01,646 --> 00:52:04,080 >> -OH, Ei, kad neveikia. 1171 00:52:04,080 --> 00:52:06,470 Pasakykite, uh, Binky, aš ne manau dereferencing 1172 00:52:06,470 --> 00:52:10,850 y yra gera idėja, nes nustatant Up pointee yra atskiras žingsnis. 1173 00:52:10,850 --> 00:52:12,480 Ir aš nemanau, kad mes kada nors padarė. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Geras dalykas. 1175 00:52:14,620 --> 00:52:19,810 >> -Yeah, Mes skyrė rodyklę, Y, bet mes niekada nustatyti, kad jis rodo, kad pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Labai pastabus. 1177 00:52:21,590 --> 00:52:23,215 -hey, Jūs ieško gero ten, Binky. 1178 00:52:23,215 --> 00:52:26,390 Ar galite pataisyti taip, kad y taškai prie to paties pointee kaip x. 1179 00:52:26,390 --> 00:52:29,290 >> -Sure, Aš naudoju mano stebuklinga lazdele nuo rodykle užduotį. 1180 00:52:29,290 --> 00:52:31,970 >> -Ar Kad ketina būti problema, kaip ir anksčiau? 1181 00:52:31,970 --> 00:52:33,790 >> Ne, tai nėra paliesti pointees. 1182 00:52:33,790 --> 00:52:35,840 Jis tiesiog keičia vieną žymiklį atkreipti dėmesį į tas pats thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [Pokštelėjimas] 1184 00:52:36,465 --> 00:52:37,450 --as kitą. 1185 00:52:37,450 --> 00:52:38,440 >> -O, supratau. 1186 00:52:38,440 --> 00:52:41,200 Dabar y taškų į tą pačią vietą kaip x. 1187 00:52:41,200 --> 00:52:42,950 Taigi, laukti, dabar y yra fiksuota. 1188 00:52:42,950 --> 00:52:44,110 Ji turi pointee. 1189 00:52:44,110 --> 00:52:47,779 Taigi galite pabandyti su lazdele dereferencing vėl siųsti 13 daugiau. 1190 00:52:47,779 --> 00:52:51,110 >> -OH, Gerai, čia eina. 1191 00:52:51,110 --> 00:52:52,330 >> -hey, Pažvelgti, kad. 1192 00:52:52,330 --> 00:52:53,570 Dabar dereferencing darbus y. 1193 00:52:53,570 --> 00:52:57,900 Ir dėl to, kad patarimų dalijasi kad viena pointee, jie abu pamatyti 13. 1194 00:52:57,900 --> 00:52:59,952 >> -Yeah, Dalijimasis, uh, nesvarbu. 1195 00:52:59,952 --> 00:53:01,535 Taigi, mes ketiname pereiti vietas dabar? 1196 00:53:01,535 --> 00:53:03,730 >> -OH, Atrodo mes pavėluotai. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -Just Prisiminti tris žymeklį taisykles. 1199 00:53:06,520 --> 00:53:09,550 Numeris 1, pagrindinė struktūra yra tai, kad jūs turite žymeklį, 1200 00:53:09,550 --> 00:53:11,630 ir ji nurodo perkelti į pointee. 1201 00:53:11,630 --> 00:53:13,740 Bet žymeklis ir pointee yra atskira. 1202 00:53:13,740 --> 00:53:15,620 Ir dažna klaida yra įsteigti žymiklį 1203 00:53:15,620 --> 00:53:18,000 bet pamiršti suteikti jai pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Numeris 2, žymeklis dereferencing prasideda rodyklės 1205 00:53:21,170 --> 00:53:24,020 ir taip savo rodyklę virš prieiti prie savo pointee. 1206 00:53:24,020 --> 00:53:27,815 Kaip mes visi žinome, tai veikia tik tada, kai yra pointee, kokios gauna atgal 1207 00:53:27,815 --> 00:53:29,260 į Taisyklė numeris 1. 1208 00:53:29,260 --> 00:53:31,990 >> Numeris 3, žymeklis užduotis trunka vieną žymiklį 1209 00:53:31,990 --> 00:53:35,330 ir keičia ją atkreipti dėmesį į pats pointee kaip kitą rodyklę. 1210 00:53:35,330 --> 00:53:37,150 Taigi po perleidimo, dvi rodykles 1211 00:53:37,150 --> 00:53:40,927 bus taškas į tą patį pointee, kartais, kad vadinama dalijimosi. 1212 00:53:40,927 --> 00:53:42,510 Ir tai viskas yra į jį, tikrai. 1213 00:53:42,510 --> 00:53:43,130 Čučumuiža dabar. 1214 00:53:43,130 --> 00:53:43,475 >> [PABAIGA PLAYBACK] 1215 00:53:43,475 --> 00:53:44,830 >> David J. Malan: Štai jį CS50. 1216 00:53:44,830 --> 00:53:46,246 Ačiū profesoriui Nick Parlante. 1217 00:53:46,246 --> 00:53:47,730 Mes jus pamatyti kitą savaitę. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [Elektroninės muzikos žaisti] 1220 00:53:56,435 --> 00:57:22,775