1 00:00:00,000 --> 00:00:03,395 >> [Zenelejátszási] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 David J. MALAN: Ez olyan, mint elsős szeminárium ma. 4 00:00:13,280 --> 00:00:14,060 OKÉ. 5 00:00:14,060 --> 00:00:15,024 Szóval nagyon csapadékos ki. 6 00:00:15,024 --> 00:00:17,690 Ez általában történni szerdán, de annál lehetőséget 7 00:00:17,690 --> 00:00:18,700 A kérdés ma. 8 00:00:18,700 --> 00:00:22,210 Szóval kezdjük el ténylegesen a film csak egy pillanatra. 9 00:00:22,210 --> 00:00:24,560 De kezdjük nagyvonalúan, mint mindig. 10 00:00:24,560 --> 00:00:28,000 >> Ez CS50, és ez a a vége a 4. héten. 11 00:00:28,000 --> 00:00:30,820 Tehát, ha valaha is nézte TV vagy egy film, ahol 12 00:00:30,820 --> 00:00:34,690 van néhány számítógépes szakemberek és a rendőrség, vagy az FBI, vagy valamilyen hivatal 13 00:00:34,690 --> 00:00:36,930 próbál elkapni néhány ellenféltől, nos, akkor már 14 00:00:36,930 --> 00:00:40,850 Valószínűleg hallotta ezt a kifejezést "fokozza" amely szerint a technikus valahogy 15 00:00:40,850 --> 00:00:44,750 varázslatosan ráközelít végtelenül messze, hogy a bűnözők 16 00:00:44,750 --> 00:00:48,640 identitás, illetve a rendszám még a csillogó tükör 17 00:00:48,640 --> 00:00:50,390 vagy a csillogása valakinek a szemét. 18 00:00:50,390 --> 00:00:55,196 Tehát valóban, vessünk egy pillantást Néhány ilyen jeleneteket Hollywoodban. 19 00:00:55,196 --> 00:00:55,862 [Videó lejátszás] 20 00:00:55,862 --> 00:00:59,243 -OK, Most térjünk egy jó pillantást Önnek. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Tartsd. 23 00:01:07,415 --> 00:01:08,267 Fuss, hogy vissza. 24 00:01:08,267 --> 00:01:09,121 >> Várj egy percet. 25 00:01:09,121 --> 00:01:11,300 Menj jobbra. 26 00:01:11,300 --> 00:01:12,209 >> -Van, Fagyasztható, hogy. 27 00:01:12,209 --> 00:01:12,750 -Teljes képernyő. 28 00:01:12,750 --> 00:01:13,558 -OK, Fagyasztható, hogy. 29 00:01:13,558 --> 00:01:14,820 -Tighten Fel, hogy jó? 30 00:01:14,820 --> 00:01:16,530 Vektor be, hogy srác a hátsó kereket. 31 00:01:16,530 --> 00:01:19,400 -zoom Az itt ezen a helyen. 32 00:01:19,400 --> 00:01:22,846 -Az A megfelelő felszereléssel, a kép bővülhet, és élesebbé vált. 33 00:01:22,846 --> 00:01:24,065 -Az mi? 34 00:01:24,065 --> 00:01:25,600 -Ez Egy tartozékot programot. 35 00:01:25,600 --> 00:01:26,860 -Használható, Akkor egyértelmű, hogy akár minden? 36 00:01:26,860 --> 00:01:27,890 -Nem Tudom. 37 00:01:27,890 --> 00:01:29,050 Nézzük fokozza azt. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Részén A6. 39 00:01:31,575 --> 00:01:33,642 >> -I Fokozta a részletekre, és-- Szerintem van 40 00:01:33,642 --> 00:01:35,433 elég ahhoz, hogy fokozza, engedje meg, hogy én képernyőn. 41 00:01:35,433 --> 00:01:37,080 -I Fokozta a reflexió a szemében. 42 00:01:37,080 --> 00:01:38,830 >> -Let Futtatáskor ez a video javítása. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Meg tudja növelni ezt? 44 00:01:40,100 --> 00:01:41,875 >> -Várj. 45 00:01:41,875 --> 00:01:44,010 >> -I've Már dolgozom a reflexió. 46 00:01:44,010 --> 00:01:44,995 >> -Someone Gondolkodás. 47 00:01:44,995 --> 00:01:45,495 Reflexió. 48 00:01:45,495 --> 00:01:47,399 -Van Egy tükrözi a férfi arcát. 49 00:01:47,399 --> 00:01:48,065 -A Tükrözi. 50 00:01:48,065 --> 00:01:48,981 -Van Egy reflexió. 51 00:01:48,981 --> 00:01:50,600 -zoom Az a tükör. 52 00:01:50,600 --> 00:01:52,712 -Te Is látni tükrözi. 53 00:01:52,712 --> 00:01:54,350 -Használható Akkor fokozza a kép innen? 54 00:01:54,350 --> 00:01:55,370 -Használható, Ha emeli őt itt? 55 00:01:55,370 --> 00:01:56,210 -Használható, Ha emeli meg? 56 00:01:56,210 --> 00:01:56,900 Tud fokozza ez? 57 00:01:56,900 --> 00:01:57,870 >> -Használható Mozdítható ez? 58 00:01:57,870 --> 00:01:58,717 >> -Használható, Ha emeli meg? 59 00:01:58,717 --> 00:02:00,050 Lefelé mutató nyíllal jelölt a második, én fokozza. 60 00:02:00,050 --> 00:02:00,924 -zoom Be az ajtón. 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 -Beköltözni. 64 00:02:03,490 --> 00:02:03,990 -Több. 65 00:02:03,990 --> 00:02:04,690 Várj, állj. 66 00:02:04,690 --> 00:02:05,190 -Állj meg. 67 00:02:05,190 --> 00:02:05,970 -Pause Azt. 68 00:02:05,970 --> 00:02:09,460 -Rotate Velünk 75 fok körüli függőleges, kérem. 69 00:02:09,460 --> 00:02:10,962 -Állj meg. 70 00:02:10,962 --> 00:02:14,040 Menj vissza a részét az ajtóval, ismét. 71 00:02:14,040 --> 00:02:15,860 >> -Got Egy képet fokozó, amely bitmap? 72 00:02:15,860 --> 00:02:18,776 >> -Hé, Talán fel tudjuk használni a Pradeep Sen módszer, hogy a Windows. 73 00:02:18,776 --> 00:02:20,372 -Ez A szoftver a legkorszerűbb. 74 00:02:20,372 --> 00:02:21,845 >> -A Sajátérték ki. 75 00:02:21,845 --> 00:02:24,300 >> -A Jobb kombinációja algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> -Ő A megtett megszüntetése algoritmusok a következő szintre, 77 00:02:26,755 --> 00:02:28,730 és tudom használni őket fokozza ezt a fényképet. 78 00:02:28,730 --> 00:02:31,286 >> -Lock, És bővíteni a z-tengely. 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 És fokozza. 83 00:02:34,960 --> 00:02:37,180 >> [Lejátszás vége] 84 00:02:37,180 --> 00:02:41,160 >> David J. MALAN: Rendben, Mindezen valójában szó. 85 00:02:41,160 --> 00:02:44,450 Ők csak csapott össze egy hogy valójában nem érzékelhető. 86 00:02:44,450 --> 00:02:48,400 És valóban, CS50 és tanfolyamok tetszik hajlamos tönkretenni a sok TV és filmek 87 00:02:48,400 --> 00:02:48,900 neked. 88 00:02:48,900 --> 00:02:52,330 Mert ha azok, számítógépes szakemberek a csörgő le szerződési mondván 89 00:02:52,330 --> 00:02:56,860 extra dolgot, mint sajátvektorai, és a z-tengely, 90 00:02:56,860 --> 00:02:59,572 és tetszőleges számú egyéb valójában több technikai feltételek, 91 00:02:59,572 --> 00:03:02,030 ők tényleg csak drót szó együtt túl gyakran. 92 00:03:02,030 --> 00:03:05,020 Az, hogy az egyik reményeink szerint, Mellékhatásként a tanfolyamot 93 00:03:05,020 --> 00:03:08,245 mint ez, majd többen a világban ténylegesen képes mérlegelni a 94 00:03:08,245 --> 00:03:12,040 és csak alig észrevehetően befolyásolja a minőségét és pontosságát ezeket a filmeket? 95 00:03:12,040 --> 00:03:14,350 >> Tény, vessünk egy pillantást a valóság. 96 00:03:14,350 --> 00:03:18,070 Tehát itt van a személyzet fotó Mária, az egyik tanítási társaik. 97 00:03:18,070 --> 00:03:20,050 És tegyük fel, ő gyanús valami. 98 00:03:20,050 --> 00:03:23,730 És mégis, van egy halvány Néhány bizonyíték a szeme, 99 00:03:23,730 --> 00:03:25,480 vagy a tükörképe a szemüvegét. 100 00:03:25,480 --> 00:03:30,760 Nos, ha nem teszünk, ahogyan a filmek javaslatot, amelyben azt zoom és a "fokozza", 101 00:03:30,760 --> 00:03:34,080 ez mennyi információt a Mária arca 102 00:03:34,080 --> 00:03:36,795 ha a kép készítése össze az eredeti felbontás. 103 00:03:36,795 --> 00:03:39,120 >> És valóban, akkor ezeket a pontokat. 104 00:03:39,120 --> 00:03:41,900 És ezek mik úgynevezett pixel, P-I-X-E-L-S, 105 00:03:41,900 --> 00:03:45,740 amely csak egy négyzet jellemzően hogy egy pont, hogy komponál egy képet. 106 00:03:45,740 --> 00:03:49,200 És vissza a nap, és valójában még ma néhány mai LED TV 107 00:03:49,200 --> 00:03:51,950 vagy LCD TV-k, ha van Egy a szobában, vagy otthon, 108 00:03:51,950 --> 00:03:55,100 Ha felmész szuper közel hozzá, és különösen, ha ez a valamivel idősebb TV, 109 00:03:55,100 --> 00:03:58,760 akkor talán még látni ezeket a pontokat és ez az, amit komponálni egy képet. 110 00:03:58,760 --> 00:04:00,980 >> És nincs több információt, mint ez. 111 00:04:00,980 --> 00:04:05,400 Mi lehetne "fokozza", abban az értelemben, elsimítani, és egyfajta 112 00:04:05,400 --> 00:04:09,040 következtetünk fajta, fajta, amit színes legyen mellette Mary szeme 113 00:04:09,040 --> 00:04:10,910 úgy, hogy ez valójában nem így kimaradnak. 114 00:04:10,910 --> 00:04:14,510 De ha tovább nagyítás, ott a rosszfiú a szemében. 115 00:04:14,510 --> 00:04:16,600 Mint ez az összes információval rendelkezünk. 116 00:04:16,600 --> 00:04:18,920 Ön nem hozhat létre információk a semmiből. 117 00:04:18,920 --> 00:04:20,790 Már csak egy véges bitek száma ott. 118 00:04:20,790 --> 00:04:22,873 >> Tehát a probléma Set 4, ahol Önnek lehetősége van arra, 119 00:04:22,873 --> 00:04:24,580 játszani ezt a fajta világot. 120 00:04:24,580 --> 00:04:27,610 Ebben Probléma Set 4, akkor tárja fel a világába grafika, és a kriminalisztika, 121 00:04:27,610 --> 00:04:30,870 és valójában írni kódot hogy visszanyeri elvesztett képek. 122 00:04:30,870 --> 00:04:33,510 Majd kódot írni, hogy manipulálja meglévő képek 123 00:04:33,510 --> 00:04:36,120 és végül megérteni, mi folyik a motorháztető alatt. 124 00:04:36,120 --> 00:04:38,540 >> És kiderül, hogy valójában Nem olyan bonyolult. 125 00:04:38,540 --> 00:04:41,320 Például, ha azt akartuk, hogy képviselnek egy mosolygó arc, ahol 126 00:04:41,320 --> 00:04:44,160 ezekkel a fekete képpontok, vagy ezek a fekete pöttyök, 127 00:04:44,160 --> 00:04:47,230 Nos, egyszerűen képviseli őket igazán bitmap. 128 00:04:47,230 --> 00:04:50,040 És ha valaha is hallottam, hogy véleménynyilvánítás bitmap, talán 129 00:04:50,040 --> 00:04:52,330 most kezdődik, hogy egy kicsit több értelme ma. 130 00:04:52,330 --> 00:04:53,580 >> Azt már tudjuk, hogy mi egy kicsit is. 131 00:04:53,580 --> 00:04:54,160 Ez 0 vagy 1. 132 00:04:54,160 --> 00:04:56,201 És egy térképet is csak valami mint egy darab papír 133 00:04:56,201 --> 00:04:59,180 hogy elmagyarázza, és Talán egy rács x és y koordinátákat. 134 00:04:59,180 --> 00:05:00,540 Tehát itt van egy bitmap. 135 00:05:00,540 --> 00:05:03,680 Ez egy térképet bit melynek során egy 1 látszólag 136 00:05:03,680 --> 00:05:07,857 fogja képviselni fehér pixel, és a 0 képviselnek majd egy fekete pixel. 137 00:05:07,857 --> 00:05:09,440 De akkor pedig fordítsa körbe. 138 00:05:09,440 --> 00:05:11,648 Ez nem igazán számít, így Amíg mi vagyunk következetesek. 139 00:05:11,648 --> 00:05:15,570 És itt van, hogyan, a binary-- belül a számítógép memóriájában, vagy akár belülről 140 00:05:15,570 --> 00:05:18,160 egy fájl a merevlemezen drive-- tudna tárolni 141 00:05:18,160 --> 00:05:20,240 A legegyszerűbb mosolygó arc képek. 142 00:05:20,240 --> 00:05:23,990 De mik vagyunk mi, persze, hiányzik ez a kép? 143 00:05:23,990 --> 00:05:24,610 Színes, ugye? 144 00:05:24,610 --> 00:05:28,220 Ez egy nyilvánvaló következő lépés, vagy javítása javítani ezen a színes. 145 00:05:28,220 --> 00:05:32,230 Így sajnos csak egyetlen bit, 0 vagy 1, akkor jelenthet színét. 146 00:05:32,230 --> 00:05:36,100 Ez lehet piros, vagy kék, vagy fekete, vagy fehér, vagy zöld, vagy rózsaszín, 147 00:05:36,100 --> 00:05:37,420 vagy pár színeket. 148 00:05:37,420 --> 00:05:40,860 De az egyszerűség kedvéért, akkor csak feltételezem, fekete és fehér. 149 00:05:40,860 --> 00:05:45,930 >> Tehát mi logikusan van szükségünk, ha kívánja megvalósítani színes a kép? 150 00:05:45,930 --> 00:05:49,080 Mit kell tennünk? 151 00:05:49,080 --> 00:05:51,900 Mint ha a korlátozó tényező itt az, hogy egy kicsit akkor csak 152 00:05:51,900 --> 00:05:55,977 képviselik két állam, 0 vagy 1, fehér vagy fekete, mit akarsz csinálni? 153 00:05:55,977 --> 00:05:56,810 Közönség: Több adat. 154 00:05:56,810 --> 00:05:58,813 David J. MALAN: több bit, Igen több adatot, több bitet. 155 00:05:58,813 --> 00:06:01,440 És valóban, pontosan hogyan színes képek képviselteti magát. 156 00:06:01,440 --> 00:06:05,120 Ahelyett, hogy egyetlen bit, egy 0 vagy 1 minden egyes pixelen Minden pontra, 157 00:06:05,120 --> 00:06:06,170 csak használja több. 158 00:06:06,170 --> 00:06:09,660 Talán használja 8, talán még gyakrabban használja a 24, sőt, a probléma szett 159 00:06:09,660 --> 00:06:13,300 4, fogsz játszani egy fájlt formátum, mely 24 bites általában. 160 00:06:13,300 --> 00:06:15,430 >> De a legtöbben valószínűleg ismerik JPEG. 161 00:06:15,430 --> 00:06:17,460 Ha valaha is tett egy fotó a telefonon, 162 00:06:17,460 --> 00:06:20,360 vagy feltölteni vagy látott valamit Facebook, vagy a Flickr, bármennyi 163 00:06:20,360 --> 00:06:24,882 A fotó alapú weboldalak, akkor már Nyilván mindenki látott egy JPEG képet, mielőtt. 164 00:06:24,882 --> 00:06:27,840 És kiderül, ez a fájl formátumban fogunk használni PSET 4, 165 00:06:27,840 --> 00:06:30,340 ahol fogsz Van, hogy visszaszerezze képek 166 00:06:30,340 --> 00:06:35,160 hogy már véletlenül törölt egy sérült memóriakártya a fényképezőgépben, 167 00:06:35,160 --> 00:06:35,800 ha úgy tetszik. 168 00:06:35,800 --> 00:06:38,490 >> És kiderül, hogy bár JPEG elég kiforrott 169 00:06:38,490 --> 00:06:40,906 ez sokkal kifinomultabb mint a fekete és fehér pontok 170 00:06:40,906 --> 00:06:44,480 láttuk az imént, mert van valóban divatos algoritmusok, 171 00:06:44,480 --> 00:06:47,410 sűrítésére használnak JPEG, így hogy lehet egy igazán szép, 172 00:06:47,410 --> 00:06:49,832 minőségű kép, de a viszonylag kevés bit. 173 00:06:49,832 --> 00:06:51,790 És mi jön vissza tömörítés előtt hosszú. 174 00:06:51,790 --> 00:06:56,280 Kiderül, hogy az első három byte olyan JPEG image-- 175 00:06:56,280 --> 00:07:02,750 nem számít, mit hozott egy fényképet of-- azok az értékek 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Más szóval, ha csak lásd ezt a mintát a bitek, 177 00:07:05,990 --> 00:07:09,180 Az itt bemutatott három bájt, illetve 24 bites Total, 178 00:07:09,180 --> 00:07:13,810 nagy valószínűséggel akkor arra következtethetünk, hogy nézed meg ezt első három 179 00:07:13,810 --> 00:07:15,230 byte JPEG. 180 00:07:15,230 --> 00:07:18,040 És ez az, amit ismert, mint az aláírása JPEG. 181 00:07:18,040 --> 00:07:20,540 Sok fájlformátumok ott szokták kezdeni 182 00:07:20,540 --> 00:07:23,735 bizonyos mintákat 0 és 1-esek, úgy, hogy a Windows és a Mac OS és iOS, 183 00:07:23,735 --> 00:07:28,272 és az Android tudom, milyen fájlt általuk vannak, amellett, hogy az úgynevezett fájl 184 00:07:28,272 --> 00:07:29,730 kiterjesztése, hogy sok fájl van. 185 00:07:29,730 --> 00:07:32,590 Ha .jpg, ez Egy másik nyom a számítógépet. 186 00:07:32,590 --> 00:07:35,310 >> Úgyhogy most nézd meg ezt egy kicsit technikailag. 187 00:07:35,310 --> 00:07:37,390 Tudjuk, hogy a tizedes rendszer 0-tól 9. 188 00:07:37,390 --> 00:07:38,740 Tudjuk bináris 0 és 1. 189 00:07:38,740 --> 00:07:41,842 És ha úgy gondolja, vissza PSET 0, mi volt akkor birkózni, 190 00:07:41,842 --> 00:07:43,800 Egy kicsit, valami úgynevezett hexadecimális, 191 00:07:43,800 --> 00:07:47,320 ahol van 16 számjegy, 10 helyett vagy 2 helyett. 192 00:07:47,320 --> 00:07:50,405 És azok a számok, megállapodás szerint, 0 és 9 között, majd egy 193 00:07:50,405 --> 00:07:55,040 keresztül f, ahol f képviseli azt, amit decimális szám, csak egy gyors józanság 194 00:07:55,040 --> 00:07:56,640 csekk? 195 00:07:56,640 --> 00:07:57,610 Szóval, 15. 196 00:07:57,610 --> 00:08:01,390 És kell képviselniük 10, csak a jellege a rendelési hogy megadtam. 197 00:08:01,390 --> 00:08:04,350 Ez csak egy önkényes konvenció, de ez meglehetősen szabványos. 198 00:08:04,350 --> 00:08:06,870 >> Tehát, ha megnézzük ezt a mintát Három bytes-- nézzük 199 00:08:06,870 --> 00:08:09,620 csak elkezd nézni, hogy a összeegyeztethető módon, hogyan 200 00:08:09,620 --> 00:08:12,450 számítógépes szakemberek általában nézd meg és gondolj fájlokat. 201 00:08:12,450 --> 00:08:15,580 Akkor biztosan gondolkodni fájlok 0s és 1s, és a decimális, 202 00:08:15,580 --> 00:08:19,340 de a valóságban, hajlamosak vagyunk a bináris vagy még tipikusabban hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 vissza PSET 0. 204 00:08:20,760 --> 00:08:25,857 Szóval hadd javaslom, hogy 255, 216, és 255 Íme, ezek a minták a 0 és 1-esek. 205 00:08:25,857 --> 00:08:28,440 És akkor nézd ezt, ha akar csinálni a matek-re hét 0. 206 00:08:28,440 --> 00:08:30,810 De most, csak feltételezik, hogy ez valóban helyes. 207 00:08:30,810 --> 00:08:33,850 Épp most újraírt három tizedes szám három bináris értékeket. 208 00:08:33,850 --> 00:08:36,100 Most mit fogok csinálni a Csak adjunk hozzá egy kevés fehér térben, 209 00:08:36,100 --> 00:08:37,266 Csak az olvashatóság kedvéért. 210 00:08:37,266 --> 00:08:39,940 És észre, én csak fog mozgatni a dolgokat egymástól. 211 00:08:39,940 --> 00:08:43,090 Tehát előtt, után, előtt, után. 212 00:08:43,090 --> 00:08:46,180 Csinálok semmi érdekes más mint terjed a dolgokat úgy, 213 00:08:46,180 --> 00:08:50,380 E közlemény egyes sor nyolc bit most két négy bit. 214 00:08:50,380 --> 00:08:54,920 Ez azért hasznos, mert hexadecimális Különösen divatos 215 00:08:54,920 --> 00:09:00,930 mert minden hexadecimális jegy lehet 0 f, vagy még pontosabban 0 és 15, 216 00:09:00,930 --> 00:09:03,430 leírható pontosan négy bit. 217 00:09:03,430 --> 00:09:07,960 Más szóval, a hexadecimális ha szeretnénk, hogy képviselje a 0, ez csak 0000, 218 00:09:07,960 --> 00:09:08,780 négy nulla. 219 00:09:08,780 --> 00:09:13,997 És ha azt szeretnénk, hogy képviselje 15, ez 1111, amely négy bit. 220 00:09:13,997 --> 00:09:16,080 És ha nem a matematika, ha ez az egyesek helyére, 221 00:09:16,080 --> 00:09:18,210 ez az a hely, 16S, hogy fog adni you-- 222 00:09:18,210 --> 00:09:19,960 inkább azt, hogy folyik alábbiakra: bocs, bináris, 223 00:09:19,960 --> 00:09:23,660 hogy meg fog adni neked 15, egyesek helyére, kettesével helyen, négyes és nyolcas sor. 224 00:09:23,660 --> 00:09:26,821 Szóval hadd javasolni, hogy ez a Állítsa be a négy bit a bal 225 00:09:26,821 --> 00:09:28,070 az, amit mi fogunk hívni f. 226 00:09:28,070 --> 00:09:30,110 Ez a legnagyobb szám képviselhet négy bit. 227 00:09:30,110 --> 00:09:33,300 És már tudjuk hexadecimális, f a legnagyobb jegyű hexadecimális. 228 00:09:33,300 --> 00:09:36,020 Van egy másik f ott, két odaát. 229 00:09:36,020 --> 00:09:38,980 És most, csak hogy a hit amit tettem a matek jogot 230 00:09:38,980 --> 00:09:41,890 és, hogy a bal fél e bitek, 1101, 231 00:09:41,890 --> 00:09:43,980 ez ugyanaz, mint a d hexadecimális. 232 00:09:43,980 --> 00:09:46,490 És a jobb kéz, 1000, mindössze 8. 233 00:09:46,490 --> 00:09:48,140 >> És ez az ember könnyen belátható, ugye? 234 00:09:48,140 --> 00:09:51,670 A 8 represents-- igaza van alatta, hogy a nyolcas sor. 235 00:09:51,670 --> 00:09:56,040 Tehát van egy a nyolcas oszlop és semmi a négyes, kettesével is. 236 00:09:56,040 --> 00:09:59,830 Szóval most még hagyományosan, az emberek hajlamosak hogy írjon hexadecimális számjegy, mint ez, 237 00:09:59,830 --> 00:10:03,000 csak a giccs őket, majd előtagot őket 0x. 238 00:10:03,000 --> 00:10:05,920 Ez azt jelenti, nem más, mint a vizuális nyom egy human-- 239 00:10:05,920 --> 00:10:10,350 itt jön egy hexadecimális value--, mert ez egyébként nem nyilvánvaló. 240 00:10:10,350 --> 00:10:13,629 >> Ami azt jelenti, végső soron, hogy a minta a nullák és egyesek, 241 00:10:13,629 --> 00:10:16,170 vagy a minta hexadecimális számjegy azzal egyenértékű, hogy te 242 00:10:16,170 --> 00:10:18,990 fog kezdeni A probléma szett 4 this-- 243 00:10:18,990 --> 00:10:22,120 És a probléma szett 4 spec fog járni végig ezt a több detail-- 244 00:10:22,120 --> 00:10:25,344 de észre a fajta misztikus, mint ez tűnhet első pillantásra, 245 00:10:25,344 --> 00:10:27,010 fogsz újra látni ezt a sok. 246 00:10:27,010 --> 00:10:30,320 És valóban, még a GDB, a debugger bevezettük hétfőn 247 00:10:30,320 --> 00:10:35,440 és Dan bevezeti a PSET 3, folyik hogy gyakran mutassa meg hexadecimális értékek 248 00:10:35,440 --> 00:10:39,910 csak azért, mert általában sokkal hagyományos, mint decimális vagy bináris 249 00:10:39,910 --> 00:10:41,157 A számítógépek világában. 250 00:10:41,157 --> 00:10:42,490 Most, hogy ezt az összefüggések. 251 00:10:42,490 --> 00:10:48,040 Talán sokan emlékeznek ezt kép itt lépett a mi? 252 00:10:48,040 --> 00:10:51,240 Vista, így még korábban, mint hogy a Windows XP tette ezt debütált. 253 00:10:51,240 --> 00:10:52,620 Szóval ez egy gyönyörű táj. 254 00:10:52,620 --> 00:10:55,940 És valóban, ha piszkálni körül online-- Azt hiszem, ez egy Wikipedia cikket, 255 00:10:55,940 --> 00:11:00,110 ahol valaki nagyon elképesztően kiment találtam ezt a helyét a világban létrehozott 256 00:11:00,110 --> 00:11:02,240 ő kamera pontosan a megfelelő place-- 257 00:11:02,240 --> 00:11:06,510 és ez ma úgy néz ki, de az általam elvártnál ez pontosan ugyanaz a beállítás. 258 00:11:06,510 --> 00:11:10,060 Ez a kép, bár ez a fájl formában nevű bitmap, b-m-p. 259 00:11:10,060 --> 00:11:12,910 És mi fog tartani egy szuper pillantás, mit jelent ez. 260 00:11:12,910 --> 00:11:17,770 >> De bitmap csak egy másfajta képviselő képek még mindig a pixel 261 00:11:17,770 --> 00:11:19,580 A 0 és 1-esek, végső soron. 262 00:11:19,580 --> 00:11:23,282 De gyors pillantást, azt egy érdekes aláírás 263 00:11:23,282 --> 00:11:24,490 elején a fájlt. 264 00:11:24,490 --> 00:11:26,670 Ez nem csak a három bájt, hanem van 265 00:11:26,670 --> 00:11:30,770 egy csomó minták bájtok amelyek előre meghatározott jelentése. 266 00:11:30,770 --> 00:11:34,490 Például, valahol a első néhány byte bitmap kép 267 00:11:34,490 --> 00:11:37,440 lesz a méret a kép, a szélessége a kép, 268 00:11:37,440 --> 00:11:40,390 a magassága a kép, így hasznos metaadatokat, ha úgy tetszik. 269 00:11:40,390 --> 00:11:43,940 Hasznos információk, hogy a Photoshop vagy bármilyen grafikai program, amit használ 270 00:11:43,940 --> 00:11:45,180 Lehet, tényleg érdekel. 271 00:11:45,180 --> 00:11:47,170 >> Szóval erről bővebben Probléma Set 4, de ez a 272 00:11:47,170 --> 00:11:49,220 csak azt mondani, hogy végén az a nap 273 00:11:49,220 --> 00:11:52,390 minden fájlformátum van már használja A years-- Microsoft Word fájlokat, 274 00:11:52,390 --> 00:11:55,820 Számok fájlok, Excel fájlok, tetszőleges számú fájlformátumok 275 00:11:55,820 --> 00:11:57,770 hogy köze van egymáshoz ismert fájl kiterjesztését 276 00:11:57,770 --> 00:12:00,130 csak 0 és 1-esek a motorháztető alatt. 277 00:12:00,130 --> 00:12:02,970 És az emberek úgy döntöttek, mi a konvenciók, 278 00:12:02,970 --> 00:12:08,340 milyen mintákat 0 és 1-esek képviselik Word file szemben egy Excel fájlt, 279 00:12:08,340 --> 00:12:10,322 versus számos más formátumok. 280 00:12:10,322 --> 00:12:12,780 Tehát PSET 4, akkor van egy arra, hogy játsszon vele. 281 00:12:12,780 --> 00:12:14,405 >> De mit is jelent az, hogy a struktúra. 282 00:12:14,405 --> 00:12:18,012 Ez tulajdonképpen egy szép Segue most a C, amely csak egy pár 283 00:12:18,012 --> 00:12:20,220 A további funkciók, még nem nézett még. 284 00:12:20,220 --> 00:12:24,230 Ez egy nagyon kis nyelv és az egyik A szép képességgel a C egy struct. 285 00:12:24,230 --> 00:12:27,300 Például, ha akarta represent-- nézzük 286 00:12:27,300 --> 00:12:33,690 mondod, szeretett volna egy változó, képviseli a diák valamilyen programot. 287 00:12:33,690 --> 00:12:37,330 Lehet, hogy írtak egy tanfolyam regisztrációs program, vagy magot vásárlás 288 00:12:37,330 --> 00:12:38,870 eszközt, vagy valami ilyesmi. 289 00:12:38,870 --> 00:12:42,922 Mik a darab kapcsolatos adatok hogy egy diák jöhetnek szóba? 290 00:12:42,922 --> 00:12:44,880 Mint egy diák képviselteti magát, milyen értékeket? 291 00:12:44,880 --> 00:12:45,732 Igen? 292 00:12:45,732 --> 00:12:46,940 Van egy név, mint egy diák. 293 00:12:46,940 --> 00:12:48,900 Mit csinál egy tipikus diák van? 294 00:12:48,900 --> 00:12:49,320 >> Közönség: [hallható] 295 00:12:49,320 --> 00:12:50,200 >> David J. MALAN: Szóval, sajnálom. 296 00:12:50,200 --> 00:12:50,660 >> Közönség: Kor. 297 00:12:50,660 --> 00:12:52,980 >> David J. MALAN: Egy kor vagy születésnapi azzal egyenértékű, aha. 298 00:12:52,980 --> 00:12:53,557 Mi más? 299 00:12:53,557 --> 00:12:54,390 Közönség: azonosító száma? 300 00:12:54,390 --> 00:12:57,460 David J. MALAN: Tehát egy azonosító számot, talán egy telefonszámot, talán egy kollégiumi, vagy házat, 301 00:12:57,460 --> 00:12:58,670 vagy főiskolai, vagy valami ilyesmi. 302 00:12:58,670 --> 00:13:01,820 Bármilyen számú darab adatok lehet, hogy a névjegyzékben 303 00:13:01,820 --> 00:13:03,890 van, mi lehet meghatározni egy diák. 304 00:13:03,890 --> 00:13:08,490 Tehát ha azt akartuk, hogy ezt, a kódot, talán nem valami egyszerű, mint ez. 305 00:13:08,490 --> 00:13:15,670 Talán van egy programot, hogy van mondjuk, int main (void). 306 00:13:15,670 --> 00:13:18,920 És ha azt akarom, hogy képviselje a tanuló talán van, például, 307 00:13:18,920 --> 00:13:24,330 egy string nevű nevét, hogy a hallgatói, egy string nevű kollégiumi, hogy a hallgatói, 308 00:13:24,330 --> 00:13:26,900 Talán egy int hívott azonosítóját, hogy a tanuló. 309 00:13:26,900 --> 00:13:30,840 És mivel én vagyok a húr, én kell, hogy menjen vissza, és tedd fel CS50.h. 310 00:13:30,840 --> 00:13:33,300 Talán szükségem lesz stdio.h. 311 00:13:33,300 --> 00:13:38,190 Szóval hadd preemptively nem azok, és én vagyok Felhívom ezt student.c most 312 00:13:38,190 --> 00:13:40,080 és mentse ezt. 313 00:13:40,080 --> 00:13:44,206 >> És most tudok tenni valamit ezekkel a változókkal. 314 00:13:44,206 --> 00:13:46,830 És mi csak fog írni hogy megjegyzésként a pszeudo-kód, 315 00:13:46,830 --> 00:13:48,829 mert ez nem érdekes mit teszünk most. 316 00:13:48,829 --> 00:13:51,242 OK, így ez egy olyan program, Valahogy tárolja egy diák. 317 00:13:51,242 --> 00:13:53,450 Mit akarok csinálni, ha én szeretnénk tárolni két diák? 318 00:13:53,450 --> 00:13:55,991 Szóval az első ösztöne megy hogy minden rendben, várj egy percet, 319 00:13:55,991 --> 00:14:01,920 ha van egy másik diák miért nem csak nem karakterláncnevet 2, string kollégiumi 2, 320 00:14:01,920 --> 00:14:04,190 int id2. 321 00:14:04,190 --> 00:14:06,540 És mi csináltunk elment ezen az úton, mielőtt 322 00:14:06,540 --> 00:14:10,890 és mi volt a megoldás, amit úgy tűnik hogy egyfajta Hackish másolás beillesztés 323 00:14:10,890 --> 00:14:11,555 munkát itt? 324 00:14:11,555 --> 00:14:12,346 Közönség: Egy tömb. 325 00:14:12,346 --> 00:14:13,830 David J. MALAN: Igen, tudtuk használni egy tömbben. 326 00:14:13,830 --> 00:14:15,620 Erre nagyon gyorsan lesz nehézkes. 327 00:14:15,620 --> 00:14:18,453 Meg kell rendezni az önkényesen kezdeni elnevezése az összes ilyen változó. 328 00:14:18,453 --> 00:14:22,190 És te, az emberi, meg kell tartani követni, hogy OK name2 megfelel 329 00:14:22,190 --> 00:14:25,060 A dorm2 megfelel id2. 330 00:14:25,060 --> 00:14:26,200 Csak lesz a káosz. 331 00:14:26,200 --> 00:14:29,350 Szóval ez sokkal könnyebb, visszahívja a néhány héttel ezelőtt, 332 00:14:29,350 --> 00:14:34,300 hogy csak úgy, hogy az úgynevezett karakterlánc neve és talán nekünk három is. 333 00:14:34,300 --> 00:14:36,940 És akkor talán van karakterlánc alvás és 334 00:14:36,940 --> 00:14:41,900 három e, vagy egy állandó, int azonosítók és három e. 335 00:14:41,900 --> 00:14:45,250 De még most is ezt érzi, egy kicsit hanyag, ugye. 336 00:14:45,250 --> 00:14:49,440 Beszélünk diákok és mégis Én nagyon rágódni alacsony szintje 337 00:14:49,440 --> 00:14:50,470 végrehajtásának részleteit. 338 00:14:50,470 --> 00:14:52,790 A diák egy név és egy kollégiumi és ID. 339 00:14:52,790 --> 00:14:59,814 >> Miért nem tudok csak, hogy egy változót nevű diák és hívjuk s. 340 00:14:59,814 --> 00:15:02,230 És ha azt akarom, egy másik diák, miért nem én csak hívom t. 341 00:15:02,230 --> 00:15:05,260 Vagy ha akarok egy csomó A diákok, miért nem én csak 342 00:15:05,260 --> 00:15:09,740 mondom, van egy egész osztály diákok, és ez a hárman. 343 00:15:09,740 --> 00:15:12,470 Más szóval, miért nem tudok jönni akár a saját adatok típusát, az úgynevezett 344 00:15:12,470 --> 00:15:15,641 Diákok, amelynek belsejében van Egy név, egy azonosítót, egy kollégiumi, 345 00:15:15,641 --> 00:15:16,890 bármilyen számú egyéb területeken. 346 00:15:16,890 --> 00:15:19,030 És kiderül, hogy lehet csinálni, hogy pontosan. 347 00:15:19,030 --> 00:15:21,850 >> Tehát C ezt a funkciót nevű struktúra. 348 00:15:21,850 --> 00:15:24,700 Ez egy nyelvet funkció, amely lehetővé teszi számunkra, hogy pontosan ezt. 349 00:15:24,700 --> 00:15:28,370 Megyek, hogy menjen előre és megnyitja structs.h 350 00:15:28,370 --> 00:15:32,299 hová megyünk, hogy a következő meghatározást egy diák. 351 00:15:32,299 --> 00:15:35,215 Kiderül, - és ez még egyszerűbb, mint az, amely magában foglal egy azonosítót 352 00:15:35,215 --> 00:15:36,080 Egy perccel ezelőtt. 353 00:15:36,080 --> 00:15:39,120 Ha azt szeretnénk, hogy dolgozzon ki a házi adatok típusát, 354 00:15:39,120 --> 00:15:42,750 és emellett a INT, és char és lebegnek és ezek mások, hogy léteznek, 355 00:15:42,750 --> 00:15:45,810 megteheti szó szerint írásban typedef struct, 356 00:15:45,810 --> 00:15:47,880 majd néhány kapcsoszárójele, belsejét, amit 357 00:15:47,880 --> 00:15:51,460 sorolja fel a változókat szeretne társítani új egyéni adatok 358 00:15:51,460 --> 00:15:55,670 írja ki, mint egy név és egy kollégiumi, majd miután a kapcsos zárójelek 359 00:15:55,670 --> 00:15:57,860 adsz egy nevet az új típusú adatokat. 360 00:15:57,860 --> 00:15:59,220 Így például, diák. 361 00:15:59,220 --> 00:16:03,247 >> És mi a szép erről most az, hogy Ha megnézzük a megfelelő kódot, 362 00:16:03,247 --> 00:16:05,080 Az egyezmény első Mindenekelőtt az, hogy ezt a 363 00:16:05,080 --> 00:16:08,230 nevű fájlt valami dot h, header fájl, amely már nem 364 00:16:08,230 --> 00:16:09,780 elkezdtem használni magunkat túl sok. 365 00:16:09,780 --> 00:16:12,120 De mi fog kezdeni segítségével egy kicsit most. 366 00:16:12,120 --> 00:16:18,650 És mit tehetünk ezzel, és végül is ez a néhány sornyi kódot 367 00:16:18,650 --> 00:16:22,130 A kijelentik, hogy pontosan adattípus, egy diák. 368 00:16:22,130 --> 00:16:23,230 És most nézzük használni. 369 00:16:23,230 --> 00:16:27,274 >> Megyek most menj be nevű fájlt structs1.c. 370 00:16:27,274 --> 00:16:29,440 És vessünk egy pillantást a Néhány jellemzők itt. 371 00:16:29,440 --> 00:16:32,250 Tehát a dolog itt van többnyire ismerik, és mi 372 00:16:32,250 --> 00:16:35,040 gyere vissza, amit nem ismerős csak egy pillanatra. 373 00:16:35,040 --> 00:16:39,880 Ez természetesen beleértve a saját header fájlt, ami új is, 374 00:16:39,880 --> 00:16:42,580 kivéve PSET 3 ahol, Emlékezzünk, mi helpers.h. 375 00:16:42,580 --> 00:16:45,150 Szóval lehet, hogy emlékszem #include helpers.h. 376 00:16:45,150 --> 00:16:49,381 >> Miért bár használom idézetek helyett szögletes zárójelben? 377 00:16:49,381 --> 00:16:50,630 Mikor választhat közülük? 378 00:16:50,630 --> 00:16:52,310 Szinte mindig úgy tűnik, a szögletes zárójelben szerepel. 379 00:16:52,310 --> 00:16:55,040 És akkor, hirtelen a soros hathengeres Én idézőjelek. 380 00:16:55,040 --> 00:16:55,860 Miért lenne az? 381 00:16:55,860 --> 00:16:56,700 Igen? 382 00:16:56,700 --> 00:16:57,725 >> Közönség: [hallható] 383 00:16:57,725 --> 00:16:59,350 David J. MALAN: Ez egy tényleges, mi? 384 00:16:59,350 --> 00:17:00,559 Közönség: Ez a IDE. 385 00:17:00,559 --> 00:17:02,475 David J. MALAN: Igen, ez az én tényleges IDE. 386 00:17:02,475 --> 00:17:05,690 És ne lakjanak a IDE, mert ez csak egy eszköz, hogy én vagyok a. 387 00:17:05,690 --> 00:17:08,119 Ez az én jelenlegi könyvtár, konkrétan. 388 00:17:08,119 --> 00:17:11,647 Tehát structs.h az én saját fájl nincs telepítve az IDE, 389 00:17:11,647 --> 00:17:14,480 az operációs rendszer maga, inkább az én aktuális könyvtárban. 390 00:17:14,480 --> 00:17:16,910 Így az egyezmény, ha azt szeretnénk, hogy vegye fel saját header fájlt, 391 00:17:16,910 --> 00:17:18,200 csak használja idézőjelek között. 392 00:17:18,200 --> 00:17:23,290 >> Mit nevezünk ezt a dolgot 8. sor, általában? 393 00:17:23,290 --> 00:17:25,200 Ez az, amit? 394 00:17:25,200 --> 00:17:28,220 #define valamit. 395 00:17:28,220 --> 00:17:31,040 Ez jelenti állandók, nem igaz? 396 00:17:31,040 --> 00:17:33,140 Ha azt szeretnénk, hogy egy értéket a programban 397 00:17:33,140 --> 00:17:35,110 hogy használjon egy egész párszor, hogy 398 00:17:35,110 --> 00:17:39,330 Jó egyezmény faktort ki, állapítsa meg, a hash szimbólum 399 00:17:39,330 --> 00:17:43,340 meghatározni, akkor a konvenció szerint minden nagybetűs word-- bár ez nem 400 00:17:43,340 --> 00:17:45,320 feltétlenül szükséges, de ez az emberi konvenció 401 00:17:45,320 --> 00:17:47,210 tőkét kovácsolni állandók úgy, hogy kiugranak 402 00:17:47,210 --> 00:17:50,380 rád visually-- tér és akkor az érték akarsz lenni 403 00:17:50,380 --> 00:17:52,250 egyenértékű konstans nevét. 404 00:17:52,250 --> 00:17:56,110 Nem pontosvessző, hanem egyszerűen kövesse ezt a mintát is. 405 00:17:56,110 --> 00:17:57,770 >> Szóval mit csinálok ezen a tényleges kódot. 406 00:17:57,770 --> 00:18:00,660 Szóval vessünk egy pillantást A fő program itt. 407 00:18:00,660 --> 00:18:04,080 Összhangban 12 mert van tüntetve structs.h, 408 00:18:04,080 --> 00:18:06,492 Én most már varázslatosan én rendelkezésünkre áll egy új típusú adatokat. 409 00:18:06,492 --> 00:18:09,200 Én nem csak férhetnek hozzá int, és char, és lebegnek, és a szöveg, 410 00:18:09,200 --> 00:18:10,060 és a kék és mások. 411 00:18:10,060 --> 00:18:12,470 Én már elérhető a egy diák típusú adatokat. 412 00:18:12,470 --> 00:18:17,740 Tehát a 12-es vonal, én ötvözi a két ideái egy egyéni adat típusát és két, 413 00:18:17,740 --> 00:18:18,940 egy mezőhöz. 414 00:18:18,940 --> 00:18:21,700 És így ebben a programban, ha Azt akarom, hogy ténylegesen támogatást 415 00:18:21,700 --> 00:18:24,320 Három különböző diákok az én programot, 416 00:18:24,320 --> 00:18:30,480 Elég annyit mondani, hogy nekem egy változó nevezett diákok, amelyek mindegyike 417 00:18:30,480 --> 00:18:32,970 a típusa diákok, amelyek az én egyéni adattípus. 418 00:18:32,970 --> 00:18:35,890 És különösen adj Három ilyen az én tömb. 419 00:18:35,890 --> 00:18:37,750 >> Tehát most mit tegyünk ebben a programban? 420 00:18:37,750 --> 00:18:40,670 Itt csak egy for ciklus iterációjával 0-3, mert ez 421 00:18:40,670 --> 00:18:42,110 mi az érték a hallgatók. 422 00:18:42,110 --> 00:18:44,420 Én csak a felhasználó megkérdezése add nekem a diák nevét. 423 00:18:44,420 --> 00:18:48,090 És akkor a 17. sorban, mi Van egy többnyire ismerős sort. 424 00:18:48,090 --> 00:18:50,370 Megvan a régi barát GetString a jobb oldalon. 425 00:18:50,370 --> 00:18:52,345 És mi darab szintaxis látszólag új, 426 00:18:52,345 --> 00:18:55,130 ha soha nem programozott C előtt, és soha nem használta az struktúrákat? 427 00:18:55,130 --> 00:18:55,510 Igen? 428 00:18:55,510 --> 00:18:56,417 >> Közönség: A .name. 429 00:18:56,417 --> 00:18:57,500 David J. MALAN: A .name. 430 00:18:57,500 --> 00:19:01,220 De ez nem túl sok egy ugrás, mert most a diákok zárójelbe i 431 00:19:01,220 --> 00:19:02,590 megadja az i-edik diák. 432 00:19:02,590 --> 00:19:04,730 És ha szeretne merülni belsejét, hogy a struktúra, 433 00:19:04,730 --> 00:19:09,490 csak használja egy ideig, és akkor a változó nevét belsejében, 434 00:19:09,490 --> 00:19:11,900 vagy az ingatlan található, amelyek azt szeretnénk, hogy hozzáférjenek a. 435 00:19:11,900 --> 00:19:14,816 Hasonlóképpen akkor, ha majd kéri a felhasználó, adj a hallgató kollégiumi, 436 00:19:14,816 --> 00:19:18,390 akkor hasonlóképpen tárolni, hogy húr a kollégiumi belüli változókat 437 00:19:18,390 --> 00:19:19,940 Az, hogy a hallgatói szerkezetét. 438 00:19:19,940 --> 00:19:21,410 >> És most a dolgok egy kicsit divatos. 439 00:19:21,410 --> 00:19:24,420 És ez meg fog nézni A talán sok nagyon hamar. 440 00:19:24,420 --> 00:19:27,970 De látni fogod ezt sokkal inkább PSET 4, úgyhogy csak pillantást most. 441 00:19:27,970 --> 00:19:33,364 Kiderül, hogy a 23. sor keresztül 38, mit gondolsz én talán csinál? 442 00:19:33,364 --> 00:19:35,530 Már eltávolították a hozzászólások A mai, de az a változat 443 00:19:35,530 --> 00:19:38,660 A kód online hivatkozás az összes hozzászólás. 444 00:19:38,660 --> 00:19:40,171 Mit Úgy látszik, hogy vagy? 445 00:19:40,171 --> 00:19:42,530 >> Közönség: A fájl mentése minden Az információ, hogy a felhasználó által megadott. 446 00:19:42,530 --> 00:19:44,530 >> David J. MALAN: Igen, Pontosan, ez egy új módja 447 00:19:44,530 --> 00:19:46,370 hogy látunk két, egy másik jellemzője a C, 448 00:19:46,370 --> 00:19:48,700 ahol tudok létrehozni saját fájlokat. 449 00:19:48,700 --> 00:19:51,580 Eddig szinte minden program írtál hontalan. 450 00:19:51,580 --> 00:19:53,334 Amint ez megtörtént fut, ennyi. 451 00:19:53,334 --> 00:19:55,000 Nincs memória, vagy emlékezetbe. 452 00:19:55,000 --> 00:19:56,110 Nincs mentett fájl. 453 00:19:56,110 --> 00:19:58,120 De ha nem akarjuk, hogy menteni bemenet, amely 454 00:19:58,120 --> 00:20:02,100 történt, mint egy játék vagy program mint ez kiderül, akkor megteheti. 455 00:20:02,100 --> 00:20:04,360 És látni fogod ezt tovább A PSET 4 és pontban. 456 00:20:04,360 --> 00:20:08,661 De ezen a vonalon 23 lényegében létrehoz egy fájlt úgynevezett students.csv. 457 00:20:08,661 --> 00:20:10,160 És lehet, hogy láttam ilyet. 458 00:20:10,160 --> 00:20:14,250 Még ha soha nem tanult CS előtt, CSV vesszővel elválasztott változókat. 459 00:20:14,250 --> 00:20:19,000 Ez olyan, mint egy nagyon szegény ember változatát egy Excel fájlt, 460 00:20:19,000 --> 00:20:22,270 ami azt jelenti, hogy azt úgy lehet nyitni Az Excel és az Apple számok, 461 00:20:22,270 --> 00:20:23,830 és van sorok és oszlopok. 462 00:20:23,830 --> 00:20:26,485 De ez nem egy saját formátumban, mint a Microsoft vagy az Apple. 463 00:20:26,485 --> 00:20:29,840 Ez csak vesszővel elválasztva a értékeket, majd meglátjuk, egy pillanat. 464 00:20:29,840 --> 00:20:31,010 >> És csak akkor gondolom. 465 00:20:31,010 --> 00:20:33,480 Összhangban a 23., a nagyon végén, a második érv 466 00:20:33,480 --> 00:20:37,700 hogy ez az új funkció kerül meghívásra f nyitva fájl megnyitása w. 467 00:20:37,700 --> 00:20:39,430 Mi lehet w jelöl? 468 00:20:39,430 --> 00:20:40,022 Igen? 469 00:20:40,022 --> 00:20:41,260 >> Közönség: Ez lehetővé teszi, írni a fájlt? 470 00:20:41,260 --> 00:20:42,630 >> David J. MALAN: Lehetővé teszi, írsz a fájlt. 471 00:20:42,630 --> 00:20:44,810 Szóval van egy pár változatok hogy mi lehet csatlakoztatni itt. 472 00:20:44,810 --> 00:20:47,184 De ha csak azt olvasni A fájl, ami nézd meg 473 00:20:47,184 --> 00:20:50,010 és olvasd el a memóriába, csak használja idézet idézőjel bezárva "r". 474 00:20:50,010 --> 00:20:53,110 Ha azt szeretnénk, hogy írjon a fájlt, akkor használja idézet idézőjel bezárva "w". 475 00:20:53,110 --> 00:20:55,190 Van még hozzáfűzni, és egy pár más dolog 476 00:20:55,190 --> 00:20:57,356 Ha azt szeretnénk, hogy módosítsák a meglévő fájlokat. 477 00:20:57,356 --> 00:21:00,480 Most megyünk, hogy látta ezt a dolog, aztán gyere vissza, hogy sorban 24. 478 00:21:00,480 --> 00:21:02,640 NULL, kiderül, van Egy különös érték 479 00:21:02,640 --> 00:21:06,070 vissza lehet bizonyos funkciók ha valami nem wrong-- 480 00:21:06,070 --> 00:21:08,490 Ha a fájl nem létezik, ha már elfogyott a memória, 481 00:21:08,490 --> 00:21:09,620 vagy egy csomó más hibákat. 482 00:21:09,620 --> 00:21:13,470 De most, most csak feltételezik, hogy a csak a hagyományos hibák ellenőrzése. 483 00:21:13,470 --> 00:21:17,090 Itt a sorban 26, én ismételve 0-3 egész tanítványaim. 484 00:21:17,090 --> 00:21:20,470 És ez a fajta rendezés Egy új funkció, fprintf, 485 00:21:20,470 --> 00:21:21,460 de csak akkor gondolom. 486 00:21:21,460 --> 00:21:24,370 Ha printf csak print formázott szöveget, 487 00:21:24,370 --> 00:21:26,507 Mit fprintf valószínűleg azt jelenti? 488 00:21:26,507 --> 00:21:27,590 Közönség: nyomtathatunk fájlba. 489 00:21:27,590 --> 00:21:29,290 David J. MALAN: Nyomtatás egy formázott karakterlánc egy fájlba. 490 00:21:29,290 --> 00:21:31,180 Ez az, amit a kiegészítő f úton van a fájl. 491 00:21:31,180 --> 00:21:36,420 És az új első érv kell, hogy legyen A változó, amely a fájl. 492 00:21:36,420 --> 00:21:38,866 Ezután már csak egy méret húr, mint a printf. 493 00:21:38,866 --> 00:21:40,740 És bár ez a szintaxis új, ez csak 494 00:21:40,740 --> 00:21:44,610 azt jelenti, csatlakoztassa a hallgató nevét, plug-in a hallgató kollégiumi, majd 495 00:21:44,610 --> 00:21:47,160 A fclose, lezárja az ügyet. 496 00:21:47,160 --> 00:21:49,730 És akkor lastly-- ez az új és mi visszatérünk erre a 497 00:21:49,730 --> 00:21:53,240 mielőtt long-- Én felszabadítása A diák miatt 498 00:21:53,240 --> 00:21:54,860 ami történt fönt van. 499 00:21:54,860 --> 00:21:56,820 De mi jön vissza előttihez long-- 500 00:21:56,820 --> 00:21:59,820 ez azért, mert milyen getString van valóban dolgozik a motorháztető alatt. 501 00:21:59,820 --> 00:22:01,280 >> Szóval vessünk egy gyors pillantást ide. 502 00:22:01,280 --> 00:22:04,380 Ha én írja ls az én könyvtár, észre, hogy én nem 503 00:22:04,380 --> 00:22:09,360 Van egy fájlt úgynevezett students.csv, csak nem ott, nem létezik. 504 00:22:09,360 --> 00:22:14,965 Tehát ha én most fordítani ezt a programot, hogy struktúrákat-1,. / struktúrákat-1, 505 00:22:14,965 --> 00:22:20,570 és én megyek előre, és írja be Andi, aki él Berkeley a Yale. 506 00:22:20,570 --> 00:22:26,350 Megyünk, hogy Rob, aki él Thayer ezekben a napokban. 507 00:22:26,350 --> 00:22:33,760 És hadd jöjjön fel, ahol Ez, azt hiszem, Maria van Mather, 508 00:22:33,760 --> 00:22:35,100 ha jól emlékszik. 509 00:22:35,100 --> 00:22:36,460 >> Tehát semmi sem történik. 510 00:22:36,460 --> 00:22:40,680 De ha én írja ls most, van students.csv. 511 00:22:40,680 --> 00:22:43,080 Menjünk előre, és nyitott students.csv. 512 00:22:43,080 --> 00:22:46,050 Ez megint egy nagyon könnyű formátumban. 513 00:22:46,050 --> 00:22:49,570 De én már csak elfogadott egyezmény hogy van két sorok és oszlopok itt. 514 00:22:49,570 --> 00:22:52,020 Az első oszlop ember első neveket. 515 00:22:52,020 --> 00:22:55,740 A második oszlop a hallgató kollégiumi, vagy főiskolai, vagy házat, vagy miegymás. 516 00:22:55,740 --> 00:22:57,900 És most hagytam ezt állandó jelleggel egy fájlt. 517 00:22:57,900 --> 00:22:59,280 >> Szóval ez nem olyan érdekes. 518 00:22:59,280 --> 00:23:02,980 De ez csak egy lépcsőfok most hogy képes fennállnak információk 519 00:23:02,980 --> 00:23:04,040 véglegesen. 520 00:23:04,040 --> 00:23:08,340 Nézzük most mi többet tudunk csinálni ezekkel és egyéb jellemzőit. 521 00:23:08,340 --> 00:23:10,729 De először, bármilyen kérdése? 522 00:23:10,729 --> 00:23:12,145 Ez rengeteg, és hogy gyors volt. 523 00:23:12,145 --> 00:23:16,131 De látni fogod azt a sok több PSET 4, valamint. 524 00:23:16,131 --> 00:23:16,630 Igen? 525 00:23:16,630 --> 00:23:19,360 >> Közönség: Van úgy, hogy továbbra nevek hozzáadását a fájlt? 526 00:23:19,360 --> 00:23:19,880 >> David J. MALAN: Jó kérdés. 527 00:23:19,880 --> 00:23:21,800 Van úgy, hogy továbbra is nevek hozzáadását a fájlt? 528 00:23:21,800 --> 00:23:22,340 Igen. 529 00:23:22,340 --> 00:23:24,630 És valóban, ha a végén akár újra megnyitja a fájlt, 530 00:23:24,630 --> 00:23:26,780 Ön is használja idézettel idézet vége "a" hozzáfűzés, 531 00:23:26,780 --> 00:23:31,090 ami csak egy új sort, a Új sort újra és újra, pontosan. 532 00:23:31,090 --> 00:23:32,010 Jó kérdés. 533 00:23:32,010 --> 00:23:32,950 Más kérdés? 534 00:23:32,950 --> 00:23:33,450 Igen? 535 00:23:33,450 --> 00:23:35,580 Közönség: Ha futtatta a program ismételt most, 536 00:23:35,580 --> 00:23:38,000 lenne megtartani a nevek hozzáadását a fájl vagy lenne nyitni egy új fájlt? 537 00:23:38,000 --> 00:23:38,740 >> David J. MALAN: Ah, jó kérdés. 538 00:23:38,740 --> 00:23:41,448 Ha futott a program ismét jobbra Most, talán gépelt új nevek, 539 00:23:41,448 --> 00:23:44,820 lenne hozzá, hogy a fájl vagy felülírja a fájlt? 540 00:23:44,820 --> 00:23:47,420 Az utóbbi, mert én vagyok Nem használ hozzáfűzési mód. 541 00:23:47,420 --> 00:23:49,930 És mivel én csak vakon A fájl megnyitása írásra, 542 00:23:49,930 --> 00:23:51,310 ez csak fog felülírni. 543 00:23:51,310 --> 00:23:54,570 Szóval valóban kell tennie, hogy csatolja, ha azt akarom, hogy valóban van egy hosszú távú 544 00:23:54,570 --> 00:23:55,350 adatbázisban. 545 00:23:55,350 --> 00:23:58,220 >> Most CSV hasznos, őszintén szólva, még a hasonló ha writing-- 546 00:23:58,220 --> 00:24:00,100 és mi végül látni ezt később a félévben, amikor 547 00:24:00,100 --> 00:24:01,455 használjuk CSVs más célokra. 548 00:24:01,455 --> 00:24:04,920 Ha szeretné tárolni az összes ember aki regisztrált valamilyen esemény, 549 00:24:04,920 --> 00:24:07,420 vagy iratkozott fel a diák csoport, vagy valami ilyesmi, 550 00:24:07,420 --> 00:24:10,330 az adatok tárolásának ez a fajta A formátum szuper kényelmes. 551 00:24:10,330 --> 00:24:12,580 Mert a szó szoros értelmében, ha voltak tölteni ezt a fájlt. 552 00:24:12,580 --> 00:24:14,540 Tudtam double-- és nézzük valóban megpróbálják ezt 553 00:24:14,540 --> 00:24:16,720 ha van Excel vagy számok itt. 554 00:24:16,720 --> 00:24:19,130 >> Megyek a jobb gombbal vagy a Control fájlom. 555 00:24:19,130 --> 00:24:20,020 Hoppá. 556 00:24:20,020 --> 00:24:21,830 Kattintson a jobb gombbal vagy a Control fájlom. 557 00:24:21,830 --> 00:24:24,960 Gyerünk, az egér nem működik együtt. 558 00:24:24,960 --> 00:24:32,694 Download-- fogok összes fájl letöltése itt ilyen 559 00:24:32,694 --> 00:24:33,860 Csak így tudok megragad ez. 560 00:24:33,860 --> 00:24:37,850 És lássuk, ha ez működik students.csv-- először 561 00:24:37,850 --> 00:24:39,310 Már aktiválva. 562 00:24:39,310 --> 00:24:41,360 Most akarják látni a kapcsolataimat. 563 00:24:41,360 --> 00:24:44,310 Most azt kell regisztrálni. 564 00:24:44,310 --> 00:24:47,620 Látod, milyen egyszerű a használata CSVs? 565 00:24:47,620 --> 00:24:50,840 Igen, csak így tovább a mai napig. 566 00:24:50,840 --> 00:24:52,375 OK, most már készen állunk az osztályban. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 OK, ó, mi újság? 569 00:25:00,370 --> 00:25:02,920 OK, közel. 570 00:25:02,920 --> 00:25:04,750 Ez volt varázslatos. 571 00:25:04,750 --> 00:25:07,280 OK, most már frissíteni. 572 00:25:07,280 --> 00:25:10,890 És most, hogy elfelejtettem, mit fájlt, amit eredetileg megnyitott, 573 00:25:10,890 --> 00:25:13,090 de mi egy-- is vagyunk. 574 00:25:13,090 --> 00:25:16,341 OK, így most van egy Excel fájlt. 575 00:25:16,341 --> 00:25:18,290 Köszönöm. 576 00:25:18,290 --> 00:25:20,764 >> OK, így amit tettem volt a könnyebbik rész. 577 00:25:20,764 --> 00:25:23,930 Természetesen tudtam volna előre telepített Excel, vagy számok, vagy bármit. 578 00:25:23,930 --> 00:25:25,846 De ez szép, mert most lehet manipulálni 579 00:25:25,846 --> 00:25:28,090 Az adatok szabványos formátumban. 580 00:25:28,090 --> 00:25:30,294 >> Így most nézzük összefüggésben váltani, ahol abbahagytuk 581 00:25:30,294 --> 00:25:32,710 utolsó időben, ami volt, hogy indul felszállni képzés kerekek. 582 00:25:32,710 --> 00:25:34,543 De először meg nem lásd ezt a korábbi ebéd 583 00:25:34,543 --> 00:25:38,150 ismét történik itt Tűz és Ice Cambridge, Sitar New Havenben. 584 00:25:38,150 --> 00:25:43,150 Iratkozzon fel CS50s honlapján ASAP hogy csatlakozzon CS50 hallgatók és oktatók. 585 00:25:43,150 --> 00:25:46,090 >> Így került a képzés kerekek off hétfőn follows-- 586 00:25:46,090 --> 00:25:49,120 karakterlánc nyilvánították CS50s könyvtár egy ideig. 587 00:25:49,120 --> 00:25:52,650 És ez szép, mert lehetővé teszi, hogy beszéljünk változókat, hogy a 588 00:25:52,650 --> 00:25:54,660 teljes szavakat és mondatokat, és így tovább. 589 00:25:54,660 --> 00:25:56,710 De kiderül, húr nem létezik. 590 00:25:56,710 --> 00:26:00,200 Ez csak egy szinonimája, vagy egy álnevet, hogy hoztunk létre valamit, 591 00:26:00,200 --> 00:26:03,780 valójában egy kicsit technikai úgynevezett char *. 592 00:26:03,780 --> 00:26:07,900 >> És valóban, láttunk példát A program hétfőn 593 00:26:07,900 --> 00:26:11,200 hogy nem viselkedett annyira vártunk. 594 00:26:11,200 --> 00:26:13,630 Ez volt a fájl, hasonlítsa össze-0. 595 00:26:13,630 --> 00:26:17,910 És emlékszem, hogy hasonlítsa össze-0, ha Én újrafordítani a hétfői programot 596 00:26:17,910 --> 00:26:22,670 és fuss hasonlítsa-0 és írja be a MOM kisbetűs, és anyukám kisbetűs újra. 597 00:26:22,670 --> 00:26:25,320 A program ragaszkodott hozzá, írja különböző dolog, 598 00:26:25,320 --> 00:26:29,210 annak ellenére, anya, mind a kisbetűs, azonos vizuálisan. 599 00:26:29,210 --> 00:26:31,990 Tehát mi volt a rövid válasz miért a számítógép gondolkodik 600 00:26:31,990 --> 00:26:34,500 E két húrok különböző? 601 00:26:34,500 --> 00:26:35,250 Igen? 602 00:26:35,250 --> 00:26:36,534 >> Közönség: [hallható] 603 00:26:36,534 --> 00:26:37,450 David J. MALAN: Így van. 604 00:26:37,450 --> 00:26:39,600 Szóval, anyu, az első alkalommal Azt írja be azt, hogy a 605 00:26:39,600 --> 00:26:42,710 tárolni valahol az én számítógép memória, de egy másik helyen 606 00:26:42,710 --> 00:26:44,690 mint a második alkalom, írja az anya. 607 00:26:44,690 --> 00:26:46,580 Most ez persze lehetne optimalizálni. 608 00:26:46,580 --> 00:26:49,205 A számítógép is okos és megvalósítani a két húrok, hé, 609 00:26:49,205 --> 00:26:49,954 ők azonosak. 610 00:26:49,954 --> 00:26:51,520 Hadd ne redundáns tárolja. 611 00:26:51,520 --> 00:26:54,229 De a számítógépek nem csinál ilyet optimalizálási ha nem mondja nekik, hogy. 612 00:26:54,229 --> 00:26:56,061 Szóval, alapértelmezés szerint, ők Csak lesz a vége 613 00:26:56,061 --> 00:26:57,670 két különböző helyen a memóriában. 614 00:26:57,670 --> 00:27:01,570 És így, hogy több egyértelmű, ha összehasonlítottuk a két szöveget, 615 00:27:01,570 --> 00:27:03,950 Az első hívták s, A második hívták 616 00:27:03,950 --> 00:27:08,530 t, konkrétan mit is tartottam összehasonlítva itt a 13-as vonal? 617 00:27:08,530 --> 00:27:09,494 Igen. 618 00:27:09,494 --> 00:27:12,390 >> Közönség: Ez az a hely a memóriában hogy a változó fog mutatni. 619 00:27:12,390 --> 00:27:14,900 >> David J. MALAN: Pontosan, én voltam összehasonlítjuk az a hely a memóriában 620 00:27:14,900 --> 00:27:16,300 hogy azokat a változókat mutatott. 621 00:27:16,300 --> 00:27:20,560 Tehát konkrétan, ha anyu volt bájt szám 1 és 2, és 3, 622 00:27:20,560 --> 00:27:24,020 és 4-- mert emlékszem a backslash 0 kell lennie egészen a végén. 623 00:27:24,020 --> 00:27:29,420 És a másik példánya anyuka, m-o-m, volt cím 10, 11, 12, és 13. 624 00:27:29,420 --> 00:27:33,100 Én összehasonlítjuk 1, ezt a címet, ezen a helyen a memóriában, 625 00:27:33,100 --> 00:27:35,160 ellen 10, ami nyilvánvalóan nem ugyanaz. 626 00:27:35,160 --> 00:27:36,260 1 nem 10. 627 00:27:36,260 --> 00:27:39,620 >> Szóval ez szép, hogy ez elég egyértelmű. 628 00:27:39,620 --> 00:27:42,870 De ez problémás, mivel úgy tűnik nem tudjuk összehasonlítani szálakat. 629 00:27:42,870 --> 00:27:44,930 Tehát fundamentally-- és ezen az alacsony szinten, 630 00:27:44,930 --> 00:27:47,300 ha akart végrehajtani program összehasonlítani 631 00:27:47,300 --> 00:27:50,270 két külön szó, hogy a felhasználó begépelte a minőség, 632 00:27:50,270 --> 00:27:53,944 vajon sorakoznak char számára char, csak általánosságban, 633 00:27:53,944 --> 00:27:55,360 Mit kell tennünk, látszólag? 634 00:27:55,360 --> 00:27:57,940 Ez nem elegendő csupán nézd meg ezt a két címet. 635 00:27:57,940 --> 00:27:58,860 Mit kell tennünk? 636 00:27:58,860 --> 00:27:59,360 Igen? 637 00:27:59,360 --> 00:28:01,120 >> Közönség: végiglépkedhetünk A string [hallhatatlan]. 638 00:28:01,120 --> 00:28:02,600 >> David J. MALAN: Igen, hadd halad végig a húr. 639 00:28:02,600 --> 00:28:05,808 Vegyünk egy for ciklus egy while ciklus, vagy bármit is a legkényelmesebb. 640 00:28:05,808 --> 00:28:08,840 És ha van két húrok valahol a memóriában, nézzük meg minden a 641 00:28:08,840 --> 00:28:11,770 első karakter, akkor minden második karaktert, majd a harmadik, és a negyedik, 642 00:28:11,770 --> 00:28:15,206 és az ötödik, míg elérünk milyen speciális sentinel érték? 643 00:28:15,206 --> 00:28:16,080 Közönség: [hallható] 644 00:28:16,080 --> 00:28:18,800 David J. MALAN: Igen, a backslash nulla, ekkor mindkét húr 645 00:28:18,800 --> 00:28:20,100 tudjuk eldönteni, hogy ez az. 646 00:28:20,100 --> 00:28:21,970 Van már kiegyenlített minden egyes karakter? 647 00:28:21,970 --> 00:28:22,990 Ha nem, akkor vissza hamis. 648 00:28:22,990 --> 00:28:24,770 Ha igen, vissza igaz. 649 00:28:24,770 --> 00:28:28,800 És így, hogy pontosan mi ez a verzió A program hasonlítson-1.c csinál. 650 00:28:28,800 --> 00:28:31,677 Ez azonos azzal, amit mi nézett hétfő kivéve, hogy én már 651 00:28:31,677 --> 00:28:34,760 megszabadult a szó string-- bár hogy nincs funkcionális impact-- összes 652 00:28:34,760 --> 00:28:37,450 Csinálok most eltávolítja valamilyen vizuális képzés kerekek, 653 00:28:37,450 --> 00:28:40,880 de tisztán látni, hogy s és t címeket. 654 00:28:40,880 --> 00:28:43,020 És ez az, amit a csillag, A csillaggal jelölt képviseli 655 00:28:43,020 --> 00:28:46,690 egy cím, más néven nagyobb technikai mutatóként. 656 00:28:46,690 --> 00:28:49,880 >> Tehát, ha kijelentem, s az 9. sorban, és azt mondják, char * s, 657 00:28:49,880 --> 00:28:52,160 ez nem jelenti azt, hogy nekem egy string. 658 00:28:52,160 --> 00:28:56,360 Ez azt jelenti, hogy nekem egy változó, amelynek célja az életben, hogy tárolja egy címet. 659 00:28:56,360 --> 00:29:00,400 Mert én vagyok arról, hogy a címét egy string bele. 660 00:29:00,400 --> 00:29:03,500 És valóban, getString, hogy tiszta, nem tér vissza a húr. 661 00:29:03,500 --> 00:29:06,110 Nem ad vissza anya backslash nulla, önmagában. 662 00:29:06,110 --> 00:29:10,005 Mit jelent getString kifejezetten és pontosan vissza? 663 00:29:10,005 --> 00:29:10,880 Közönség: [hallható] 664 00:29:10,880 --> 00:29:14,080 David J. MALAN: Egy cím, a címét, az első karakter 665 00:29:14,080 --> 00:29:16,070 néhány húr ez ütött. 666 00:29:16,070 --> 00:29:19,250 És így most látjuk Egy speciális kulcsszó újra. 667 00:29:19,250 --> 00:29:20,640 És utaltam erre korábban. 668 00:29:20,640 --> 00:29:23,620 Ez lesz a jó egyezményt hogy majd meglátjuk, újra és újra most. 669 00:29:23,620 --> 00:29:27,540 Én ellenőrzi, hogy megbizonyosodjon arról, hogy s nem nulla, és t nem null. 670 00:29:27,540 --> 00:29:30,100 Mert alapján én tényleg Gyors említést korábban, 671 00:29:30,100 --> 00:29:35,510 mit is jelenthet, ha getString vissza nem egy címet, de az N-U-L-L, amely ismét, 672 00:29:35,510 --> 00:29:36,990 Néhány különleges értéket? 673 00:29:36,990 --> 00:29:37,890 >> Közönség: Hiba. 674 00:29:37,890 --> 00:29:38,600 >> David J. MALAN: Ez egy hiba. 675 00:29:38,600 --> 00:29:39,550 Valami elromlott. 676 00:29:39,550 --> 00:29:41,341 És mi jellemzően megtörténhet, különösen, 677 00:29:41,341 --> 00:29:45,162 A strings-- esetleg Az ismeretlen hossza advance-- 678 00:29:45,162 --> 00:29:46,870 Lehet, hogy a számítógépek " elfogyott a memória, talán 679 00:29:46,870 --> 00:29:49,280 beírt egy ilyen Hosszú szó vagy mondat 680 00:29:49,280 --> 00:29:51,880 vagy beillesztett ilyen hatalmas esszé Egyszerűen nincs elég memória. 681 00:29:51,880 --> 00:29:55,340 És így getString nem tud visszatérni A címe az egészet, 682 00:29:55,340 --> 00:29:56,620 Tehát csak vissza semmit. 683 00:29:56,620 --> 00:30:00,580 És azt mondja, hogy hiba történt visszaküldésével speciális NULL érték. 684 00:30:00,580 --> 00:30:02,890 Ez a nulla címét, hogy úgy mondjam. 685 00:30:02,890 --> 00:30:06,157 >> Most kiderül, C jön egy funkciót, hogy nem, hogy ismétlés. 686 00:30:06,157 --> 00:30:09,240 Nem kell végrehajtani ezt a egy for ciklus vagy while ciklus magunkat. 687 00:30:09,240 --> 00:30:11,150 Mi lehet használni a funkciót, nevű tömören, 688 00:30:11,150 --> 00:30:15,400 keverjük comp, vagy string összehasonlítani, akinek célja az életben, hogy pontosan erre. 689 00:30:15,400 --> 00:30:19,990 Adod két mutató, két címet, és ez fog menni azokra a címekre 690 00:30:19,990 --> 00:30:23,130 majd összehasonlítani levél levél levél minőségű, 691 00:30:23,130 --> 00:30:26,610 megállás csak akkor, ha mi igaz? 692 00:30:26,610 --> 00:30:31,540 Amikor ösztönösen kell kavarni comp abbahagyja iterációjával, csak hogy legyen világos? 693 00:30:31,540 --> 00:30:35,400 Amikor eléri a backslash 0 bármelyik húr, amely ponton azt eldöntheti 694 00:30:35,400 --> 00:30:38,910 már mindent kiegyenlített, vagy nem volt még olyan ellentmondás? 695 00:30:38,910 --> 00:30:42,740 >> Tehát, ha futunk ezt most, és próbálja a mi kis kapitalizáció játék, 696 00:30:42,740 --> 00:30:49,260 úgyhogy győződjön meg összehasonlítandó-1, ./compare-1, és írja anyuka a kisbetűs mindkét alkalommal. 697 00:30:49,260 --> 00:30:50,560 Most ez ugyanaz a dolog. 698 00:30:50,560 --> 00:30:54,080 És ha én azt újra a kis- és akkor talán nagybetűs. 699 00:30:54,080 --> 00:30:56,720 Most valóban megkülönbözteti között kis- és a nagybetűk. 700 00:30:56,720 --> 00:31:00,440 Szóval nem olyan nehéz, vagy varázslatos, de ez most megmagyarázni 701 00:31:00,440 --> 00:31:03,140 mi folyik a motorháztető alatt. 702 00:31:03,140 --> 00:31:07,640 >> Tehát mi több, tudjuk kivonat Az ilyenfajta leckét? 703 00:31:07,640 --> 00:31:08,980 Szóval vessünk egy pillantást erre. 704 00:31:08,980 --> 00:31:15,380 Én megyek előre, és levelet gyors program itt nevű copy-0. 705 00:31:15,380 --> 00:31:21,594 És most menjünk előre, és ténylegesen csináljuk this-- a copy-0, 706 00:31:21,594 --> 00:31:23,010 vessünk egy pillantást, amit kaptam itt. 707 00:31:23,010 --> 00:31:24,712 Én először mondani a felhasználó, mondj valamit. 708 00:31:24,712 --> 00:31:26,420 Aztán kap egy húr és én tárolt azt s. 709 00:31:26,420 --> 00:31:29,810 Aztán ellenőrizd, s egyenlő egyenlő NULL, csak vissza 1. 710 00:31:29,810 --> 00:31:31,590 Szóval ez csupán a standard hibák ellenőrzése. 711 00:31:31,590 --> 00:31:33,112 Semmi érdekes nem történt. 712 00:31:33,112 --> 00:31:36,320 És valóban, ha megszabadulunk a hiba ellenőrzi, ez úgy néz ki, mint a heti 1-kód 713 00:31:36,320 --> 00:31:36,985 abban a pillanatban. 714 00:31:36,985 --> 00:31:39,110 De már kezdett egy kicsit jobban róla. 715 00:31:39,110 --> 00:31:43,340 >> Most sorban 16, egy héttel ezelőtt, talán még egy pár napig, vagy perce 716 00:31:43,340 --> 00:31:46,720 mondhatnánk vonal 16 ami egy változó nevű t 717 00:31:46,720 --> 00:31:48,219 és másolás s bele. 718 00:31:48,219 --> 00:31:50,010 És ez egy tökéletesen ésszerű elvihető. 719 00:31:50,010 --> 00:31:51,560 De pontosabban most. 720 00:31:51,560 --> 00:31:54,190 Mi történik a 16. sorban? 721 00:31:54,190 --> 00:31:56,170 Mit kezd másolni jobbról balra? 722 00:31:56,170 --> 00:31:56,669 Igen? 723 00:31:56,669 --> 00:31:58,490 Közönség: Van t kapok egy címét s? 724 00:31:58,490 --> 00:32:01,220 >> David J. MALAN: Pontosan, t kezd a címe s. 725 00:32:01,220 --> 00:32:05,170 Szóval, hogy most tiszta, ha elmegyek vissza, hogy a korábbi példa 726 00:32:05,170 --> 00:32:08,520 és én felhívni arra a dolog, amit beírt. 727 00:32:08,520 --> 00:32:11,640 És amit beírt in-- itt s, és itt 728 00:32:11,640 --> 00:32:15,830 az, amit beírt valahol memória, anya, majd egy backslash 729 00:32:15,830 --> 00:32:17,840 0, ami hozzáadott számomra. 730 00:32:17,840 --> 00:32:23,060 Amit tárolt itt, emlékszem, ez a helyen 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 Ez az, amit jelenleg s. 732 00:32:24,655 --> 00:32:29,220 Tehát, ha a 16. sorban, azt mondom, hogy nekem másik változó nevű t és tárolja 733 00:32:29,220 --> 00:32:33,590 AT az s értéke, mi lesz itt tárolt nem anya 734 00:32:33,590 --> 00:32:35,480 hanem inkább csak az 1-es szám. 735 00:32:35,480 --> 00:32:38,520 >> Tehát, ha előre tekintünk ebben a programban Most, hogy mi fog történni? 736 00:32:38,520 --> 00:32:40,690 Így észreveszed, hogy van Ez a funkció lehet, hogy 737 00:32:40,690 --> 00:32:44,410 használták ezt a néhány évvel ezelőtt Caesar, vagy Vigenère, vagy talán egyáltalán nem. 738 00:32:44,410 --> 00:32:48,170 Azt állítják, az én printf vagyok fog tőkét kovácsolni a másolatot t. 739 00:32:48,170 --> 00:32:51,616 Első sorban a 19., gyors józanság ellenőrizze, strlen ellenőrzések hossza t. 740 00:32:51,616 --> 00:32:53,740 Mert nem akarom, hogy megpróbál valamit nagybetűvel 741 00:32:53,740 --> 00:32:55,104 ha nincs húr van. 742 00:32:55,104 --> 00:32:57,520 Ha a felhasználó az Enter leütése, nincs semmi tőkét kovácsolni. 743 00:32:57,520 --> 00:33:01,100 Szóval én nem akarok 21-es vonal. 744 00:33:01,100 --> 00:33:05,758 Így a vezetékben 21 capitalizing melyik betű, nyilvánvalóan, t? 745 00:33:05,758 --> 00:33:06,514 >> Közönség: m? 746 00:33:06,514 --> 00:33:08,722 David J. MALAN: Úgy néz ki, mintha másolást melyiket? 747 00:33:08,722 --> 00:33:09,486 Közönség: m. 748 00:33:09,486 --> 00:33:10,450 David J. MALAN: Uh, m. 749 00:33:10,450 --> 00:33:12,685 OK, így az első m, mert észre, hogy én vagyok 750 00:33:12,685 --> 00:33:14,935 átadva TOUPPER, amely ha soha nem láttam, hogy ez 751 00:33:14,935 --> 00:33:16,980 Csak egy függvényt tőkét kovácsolni, mint a bemeneti. 752 00:33:16,980 --> 00:33:20,240 t tartó nulla jelenti, hogy nekem a nulla karakter t. 753 00:33:20,240 --> 00:33:22,550 És igen, hogyan működik ez Képet változás, hogy világos? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Mit kell, hogy átírt vagy megváltozott tekintetében s és t és a MOM 756 00:33:29,160 --> 00:33:30,097 backslash nulla. 757 00:33:30,097 --> 00:33:31,470 >> Közönség: [hallható] 758 00:33:31,470 --> 00:33:34,030 >> David J. MALAN: Igen, így ez itt egyszerűen 759 00:33:34,030 --> 00:33:40,860 kell, hogy megváltozott az alábbiakra: fix this-- kell, hogy megváltozott a főváros m. 760 00:33:40,860 --> 00:33:44,330 De most, nézd később a programot, ha ki kell nyomtatni 761 00:33:44,330 --> 00:33:49,800 s, t, mint én tiszta itt, nézzük, mi az, fog történni kinyomtatásával s és t. 762 00:33:49,800 --> 00:33:54,310 Tehát, hogy copy-0, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Hadd menjen előre, és írja az anya a csupa kisbetűvel. 764 00:33:57,140 --> 00:34:00,140 Figyeljük meg az eredeti és a A másolási tudták kihasználni. 765 00:34:00,140 --> 00:34:00,850 Miért? 766 00:34:00,850 --> 00:34:04,431 Nos, s és t egyaránt mutat, ha úgy tetszik, ugyanaz a darab memória. 767 00:34:04,431 --> 00:34:06,930 És őszintén szólva, ez kezd Tényleg uninteresting-- az a tény, 768 00:34:06,930 --> 00:34:09,150 hogy mi használ címet nullán. 769 00:34:09,150 --> 00:34:11,719 Úgy értem, nem igazán érdekel ahol cucc a memóriában. 770 00:34:11,719 --> 00:34:13,550 Elnézést törlése egy kicsit túl sok. 771 00:34:13,550 --> 00:34:15,674 De nem igazán érdekel ahol a dolgok a memóriában. 772 00:34:15,674 --> 00:34:18,510 És igen, valóban ezt programozók hajlamosak gondolni 773 00:34:18,510 --> 00:34:21,080 az, hogy ha beszélni egy címet, vagy egy mutatót, 774 00:34:21,080 --> 00:34:22,679 kit érdekel, hol van a memóriában. 775 00:34:22,679 --> 00:34:24,989 Nem érdekel, ha ez a bájt egy vagy egymilliárd. 776 00:34:24,989 --> 00:34:27,920 Csak érdekel, hogy ez a változó hatékonyan 777 00:34:27,920 --> 00:34:29,620 mutatva, hogy darabja a memóriát. 778 00:34:29,620 --> 00:34:33,350 És így ezentúl inkább kibúvó több mint tetszőleges memória címek, hadd 779 00:34:33,350 --> 00:34:36,710 csak elkezd rajzolni mutatók a mutatók, mint a nyíl. 780 00:34:36,710 --> 00:34:39,340 Szóval mit s és t valójában, szerint ez a program, 781 00:34:39,340 --> 00:34:42,130 mert az, hogy létrehoztam t, ez csak két különböző változók 782 00:34:42,130 --> 00:34:43,840 rámutatva ugyanakkor darab memória. 783 00:34:43,840 --> 00:34:45,215 És nem érdekel, hogy hol vannak. 784 00:34:45,215 --> 00:34:47,130 Így tudjuk elvonatkoztatni, hogy részletesen. 785 00:34:47,130 --> 00:34:48,780 >> Szóval hogyan lehet ezt orvosolni? 786 00:34:48,780 --> 00:34:54,120 Ha azt akarom, hogy írjon egy változata a másolás program ténylegesen példányban a húr 787 00:34:54,120 --> 00:34:56,840 és kihasználja csak a másolatot, csak ösztönösen, 788 00:34:56,840 --> 00:34:59,766 mi van, hogy egy Hozzávalók a mi megoldás? 789 00:34:59,766 --> 00:35:00,640 Közönség: [hallható] 790 00:35:00,640 --> 00:35:01,420 David J. MALAN: Szükségünk van egy mi? 791 00:35:01,420 --> 00:35:01,820 Közönség: darab memória. 792 00:35:01,820 --> 00:35:03,280 David J. MALAN: Szükségünk Egy másik darab memória, ugye? 793 00:35:03,280 --> 00:35:05,360 Nem tudjuk, hogyan kell csináld még, feltétlenül. 794 00:35:05,360 --> 00:35:11,330 De milyen kell, hogy ez megtörténjen, így hogy az eredeti anya kisbetűvel 795 00:35:11,330 --> 00:35:14,170 végül, hogy extra darab memória. 796 00:35:14,170 --> 00:35:19,770 Aztán amikor változtatni a másolás, I Nem akarja megváltoztatni ezt a példányt itt. 797 00:35:19,770 --> 00:35:26,020 Én inkább szeretnénk változtatni csak ezt másolatot, így az eredeti változatlan marad. 798 00:35:26,020 --> 00:35:27,980 >> Szóval, lássuk, hogyan lehet ezt csinálni. 799 00:35:27,980 --> 00:35:31,800 Ebben copy-1, amely már megfosztották megjegyzést, 800 00:35:31,800 --> 00:35:33,250 de kommentálta az interneten. 801 00:35:33,250 --> 00:35:36,710 Mi ehelyett nem a following-- ezeket vonalak azonos, hozz egy húr 802 00:35:36,710 --> 00:35:38,340 és hívjuk s. 803 00:35:38,340 --> 00:35:43,500 De most nézzük meg az egyik legnagyobb összetett, de az utolsó a komplexitás 804 00:35:43,500 --> 00:35:47,340 Egy darabig 16. sor pontosan ezt teszi. 805 00:35:47,340 --> 00:35:49,400 Tehát, ha a kényelmes a Képet mi csak drew-- 806 00:35:49,400 --> 00:35:51,790 adj egy új darab memória, másolni mindent bele, 807 00:35:51,790 --> 00:35:53,730 Nézzük meg, hogyan tudjuk lefordítani, hogy a kódot. 808 00:35:53,730 --> 00:35:59,400 >> Tehát vonal 16, a bal oldali, char * t ad nekem ezt a dobozt ide. 809 00:35:59,400 --> 00:36:00,230 Ez minden, hogy nem. 810 00:36:00,230 --> 00:36:03,240 A jobb oldali, m alloc, vagy malloc, 811 00:36:03,240 --> 00:36:06,480 a memória kiosztás, szuper divatos, Egy rejtélyes módon csak azt mondom, 812 00:36:06,480 --> 00:36:07,640 adj egy darab memóriát. 813 00:36:07,640 --> 00:36:09,290 Mennyi memória van szükségünk? 814 00:36:09,290 --> 00:36:10,910 Nos, ez a fajta egy nagy kifejezése. 815 00:36:10,910 --> 00:36:12,570 De lássuk, mit mond itt. 816 00:36:12,570 --> 00:36:15,940 Tehát ez, persze, hogy nekem a húr hossza s. 817 00:36:15,940 --> 00:36:19,094 Szóval, anyu meg kell, mi? 818 00:36:19,094 --> 00:36:21,010 Tehát csak három, nem igaz? anyuka három karakter. 819 00:36:21,010 --> 00:36:22,830 Nem számít a backslash egy nulla 820 00:36:22,830 --> 00:36:25,960 beszélni a karakterlánc hosszát ez valójában az emberi látható betűket. 821 00:36:25,960 --> 00:36:28,020 Szóval anya, így ez ad nekem 3. 822 00:36:28,020 --> 00:36:31,170 De várj egy percet, én most hozzá 1. 823 00:36:31,170 --> 00:36:34,861 Miért valóban akar kiosztani 4 byte, és nem csak 3? 824 00:36:34,861 --> 00:36:35,360 Igen? 825 00:36:35,360 --> 00:36:36,910 >> Közönség: a Sentinel érték? 826 00:36:36,910 --> 00:36:38,951 >> David J. MALAN: Pontosan, e sentinel értéket. 827 00:36:38,951 --> 00:36:40,840 A backslash nulla, Szükségem 4 byte összesen. 828 00:36:40,840 --> 00:36:42,870 Szóval kell hosszát A karakterlánc plusz 1. 829 00:36:42,870 --> 00:36:45,400 És akkor csak a jó measure-- jóllehet ez a rendszer, 830 00:36:45,400 --> 00:36:49,390 ez mindig lesz 1-- mondok megszorozzuk a méret a char. 831 00:36:49,390 --> 00:36:51,552 Kiderült, sizeof van Az üzemben a C, hogy 832 00:36:51,552 --> 00:36:53,260 Csak azt mondja, a byte-ok száma, ez 833 00:36:53,260 --> 00:36:54,700 amelyek bizonyos típusú adatokat. 834 00:36:54,700 --> 00:36:57,740 Nem működik a tömbök, jellemzően, néha nem. 835 00:36:57,740 --> 00:36:59,210 De az általános esetben, nem. 836 00:36:59,210 --> 00:37:02,330 De akkor mondja meg, hogy hány bájt a char, melyről kiderül, mindig 1. 837 00:37:02,330 --> 00:37:04,080 Tehát ez olyan, mint megszorozzuk 1. 838 00:37:04,080 --> 00:37:05,900 >> Szóval szuper rejtélyes keres kódsort. 839 00:37:05,900 --> 00:37:09,320 De minden ez is ad nekem egy darab memóriát. 840 00:37:09,320 --> 00:37:13,590 De nem is úgy tűnik, hogy a másolás semmit, hogy a memória? 841 00:37:13,590 --> 00:37:14,560 Még nem. 842 00:37:14,560 --> 00:37:22,040 És akkor mi van ugye a 22. sorban, és 23, 24, 25, nos, azt egyszerűen megteheted ezt. 843 00:37:22,040 --> 00:37:23,760 És ez a fajta old school cucc most. 844 00:37:23,760 --> 00:37:26,010 Ez olyan, mint PSET 2, ahol te csak mozgó dolgok 845 00:37:26,010 --> 00:37:28,620 körül a memóriában, vagy inkább a szálakat. 846 00:37:28,620 --> 00:37:31,920 >> Úgyhogy iterációjával 0 A string hossza s. 847 00:37:31,920 --> 00:37:37,820 És én másolás i-edik karakter S be az i-edik karaktere t. 848 00:37:37,820 --> 00:37:41,820 És mert a programozó készült Ügyeljen arra, hogy fordítsanak pontosan annyi bájt 849 00:37:41,820 --> 00:37:44,600 ahogy kell, ez tökéletes egy-egy kapcsolat. 850 00:37:44,600 --> 00:37:47,060 És én másolni anyuka a kisbetűs az újat. 851 00:37:47,060 --> 00:37:50,170 És akkor végül, én ezt a vonalat. 852 00:37:50,170 --> 00:37:54,637 És így a hatás csak kihasználni ezt a t itt. 853 00:37:54,637 --> 00:37:56,470 Szóval sok elnyelni, de ha csak úgy 854 00:37:56,470 --> 00:37:58,220 mi folyik valójában A a motorháztető alatt 855 00:37:58,220 --> 00:38:00,880 csak, ha ezeket a byte körül, minden, 856 00:38:00,880 --> 00:38:06,617 szükséges, hogy megoldják ezt a problémát Csak, hogy nekünk ez a darab a memóriát. 857 00:38:06,617 --> 00:38:08,450 Most azzal a veszéllyel jár elsöprő, hadd mutassam 858 00:38:08,450 --> 00:38:13,200 Egy másik példa, hogy majdnem azonos, kivéve ez az egy 859 00:38:13,200 --> 00:38:14,350 kódsort. 860 00:38:14,350 --> 00:38:18,870 Szóval ez a hacker verzió E program, ha úgy tetszik. 861 00:38:18,870 --> 00:38:21,050 De nézzük csak distill azt, hogy mi folyik. 862 00:38:21,050 --> 00:38:28,920 24. sor szokott lenni ez t konzol i jelentkeznek s konzol i. 863 00:38:28,920 --> 00:38:33,370 Most én vagyok a változó ezt A sokkal rejtélyes csillagos t 864 00:38:33,370 --> 00:38:36,280 plusz 1 egyenlő csillagos s plusz 1. 865 00:38:36,280 --> 00:38:38,702 >> Szóval, mi történik és miért van még egy csillag karaktert? 866 00:38:38,702 --> 00:38:41,410 Láttuk a csillag előtt, és ez is használható eltérően itt. 867 00:38:41,410 --> 00:38:45,490 Mi korábban látott char *, most látok Egy csillag az elején, és ez rendben is van. 868 00:38:45,490 --> 00:38:48,190 Mert kiderül, mi lehet egyfajta következtetni, csak 869 00:38:48,190 --> 00:38:50,280 azoktól első elvek, mi folyik itt. 870 00:38:50,280 --> 00:38:53,860 Szóval, csak hogy tisztázzuk, mi az ok? 871 00:38:53,860 --> 00:38:55,052 A múlt héten volt egy string. 872 00:38:55,052 --> 00:38:56,260 Ez nem elegendő többé. 873 00:38:56,260 --> 00:38:57,690 Mi s, konkrétan? 874 00:38:57,690 --> 00:38:58,590 >> Közönség: [hallható] 875 00:38:58,590 --> 00:38:59,881 >> David J. MALAN: Ez egy mutató. 876 00:38:59,881 --> 00:39:02,610 Ez a címe első karaktere most beírtunk. 877 00:39:02,610 --> 00:39:04,780 OK, mi t? 878 00:39:04,780 --> 00:39:05,660 >> Közönség: [hallható] 879 00:39:05,660 --> 00:39:07,950 >> David J. MALAN: A címét, az első bájt 880 00:39:07,950 --> 00:39:10,490 t, hogy a darab memória átcsoportosítani. 881 00:39:10,490 --> 00:39:14,720 Így kiderül, hogy amikor ismételget 0, egészen a húr 882 00:39:14,720 --> 00:39:17,424 length-- először, i indul a 0, mert 883 00:39:17,424 --> 00:39:18,840 Ennek a régi iskola hurok dolog. 884 00:39:18,840 --> 00:39:22,400 Tehát csak az egyszerűség kedvéért, hadd Feltételezzük, hogy az első sorban a kódot 885 00:39:22,400 --> 00:39:23,760 tényleg csak ezt, ugye. 886 00:39:23,760 --> 00:39:26,080 Ha én nulla, hozzátéve nulla hogy valamit feltehetően 887 00:39:26,080 --> 00:39:27,540 nem fog mutatkozni. 888 00:39:27,540 --> 00:39:28,560 >> Szóval mi ez a mondás? 889 00:39:28,560 --> 00:39:31,600 Kiderül, hogy a sztár üzemeltető ebben az összefüggésben 890 00:39:31,600 --> 00:39:33,700 a hivatkozás feloldási üzemben, amely csak 891 00:39:33,700 --> 00:39:37,530 divatos szóval menni az alábbi címre. 892 00:39:37,530 --> 00:39:42,080 Tehát, ha s a címe az első karakter ebben darab memória, 893 00:39:42,080 --> 00:39:43,630 * s eszközzel megy oda. 894 00:39:43,630 --> 00:39:45,630 És mivel mi már kidolgozott a kép ezen a módon, 895 00:39:45,630 --> 00:39:47,430 akkor fogadja el a következő mentális modell. 896 00:39:47,430 --> 00:39:51,030 Ha ez ok, és azt mondod * s * s olyan, mint csúszdák és létrák, 897 00:39:51,030 --> 00:39:54,540 Ha emlékszik a játékot a gyermekkorból, olyan, mint követni, hogy nyílra, és menjen 898 00:39:54,540 --> 00:39:55,570 a címet. 899 00:39:55,570 --> 00:39:57,080 >> * t ugyanaz a dolog. 900 00:39:57,080 --> 00:39:59,855 Tehát itt kezdődnek, megy a darab. 901 00:39:59,855 --> 00:40:03,350 Nem tudok csak támaszkodni Ezen a képernyőn, hogy így. 902 00:40:03,350 --> 00:40:05,560 * t jelenti, hogy megy itt. 903 00:40:05,560 --> 00:40:08,830 És akkor, a for ciklus csak mondván mozog ez a karakter van, 904 00:40:08,830 --> 00:40:11,330 mozog ez a karakter van, mozog ez a karakter itt. 905 00:40:11,330 --> 00:40:12,890 De hogyan tudom ezt növelés? 906 00:40:12,890 --> 00:40:15,430 Meg kell visszavonni, amit én csak törölni. 907 00:40:15,430 --> 00:40:18,140 Ez az, ami általában az úgynevezett pointer aritmetika, amely 908 00:40:18,140 --> 00:40:20,040 azt jelenti, matematikai címekkel. 909 00:40:20,040 --> 00:40:22,460 >> Amennyiben ebben a hurok, Folyton megnő i, 910 00:40:22,460 --> 00:40:26,880 és s jelentése egy cím és t jelentése címét, ha csak tartani, hogy 1, 911 00:40:26,880 --> 00:40:31,406 ez csak azt jelenti folyamatosan halad előre, és továbbítja, és továbbítja a memóriában. 912 00:40:31,406 --> 00:40:34,030 Olyan ez, mint az Oxford Street, a utcán, hogy a CS épületben van kapcsolva. 913 00:40:34,030 --> 00:40:36,490 A CS épületek pedig 33 Oxford Street. 914 00:40:36,490 --> 00:40:39,870 Tehát, ha azt írjuk, hogy 33 Az Oxford Street plusz 1, 915 00:40:39,870 --> 00:40:42,870 hogy hozza meg a 34 Oxford Utcáig, majd 35 Oxford Street, 916 00:40:42,870 --> 00:40:46,380 majd 36 Oxford Street, függetlenül azok épületek valójában - ha vannak ilyenek. 917 00:40:46,380 --> 00:40:50,540 És igen, ez minden, amit csinálsz Itt a mutató aritmetika. 918 00:40:50,540 --> 00:40:53,820 >> Szóval ez egy szuper misztikus módon kifejezni magunkat. 919 00:40:53,820 --> 00:40:56,160 De minden, ami történik a motorháztető alatt 920 00:40:56,160 --> 00:40:59,330 csak követi ezeket a címeket, mint a következő egy térképet, ha úgy tetszik, 921 00:40:59,330 --> 00:41:02,692 vagy azt követően nyilak, mint amit rajzolt a képernyőn. 922 00:41:02,692 --> 00:41:04,910 OK, sok megemészteni. 923 00:41:04,910 --> 00:41:10,410 Bármilyen kérdés szintaxis, koncepciók, mutatók, malloc, vagy hasonlók. 924 00:41:10,410 --> 00:41:11,480 Igen, itt először. 925 00:41:11,480 --> 00:41:13,755 >> Közönség: Szóval, ha ez mondja * t egyenlő toupper * t, 926 00:41:13,755 --> 00:41:15,575 az, hogy lesz kihasználni összes betűt vagy csak-- 927 00:41:15,575 --> 00:41:17,283 >> David J. MALAN: Ah, nagyon jó kérdés. 928 00:41:17,283 --> 00:41:19,805 Tehát ebben a sorban van, 31, ez megy, hogy tőkét 929 00:41:19,805 --> 00:41:21,430 Az első betűjét vagy minden betűjét. 930 00:41:21,430 --> 00:41:23,460 Úgyhogy válaszolni, hogy megy Vissza az első elvek. 931 00:41:23,460 --> 00:41:26,168 És az első elvek itt azt értem, csak megy alapmeghatározásait 932 00:41:26,168 --> 00:41:27,000 A mi szó. 933 00:41:27,000 --> 00:41:29,770 Tehát toupper egy funkciót hasznosítja a char. 934 00:41:29,770 --> 00:41:30,530 Ez minden. 935 00:41:30,530 --> 00:41:36,740 * t jelenti megy a first-- megy a címet t. 936 00:41:36,740 --> 00:41:40,350 Szóval, a képen, ha ez a darab Az emlékezet malloc, 937 00:41:40,350 --> 00:41:43,310 és ez t, * t jelenti megy itt. 938 00:41:43,310 --> 00:41:46,710 >> Közben te halad ez az érték, kisbetűs m 939 00:41:46,710 --> 00:41:50,040 hogy toupper, kapsz vissza tőke M, hová üzembe? 940 00:41:50,040 --> 00:41:52,410 Te amivel azt, hogy ugyanazon a helyen. 941 00:41:52,410 --> 00:41:55,540 És így az, hogy a logika e alapvető meghatározások ez csak 942 00:41:55,540 --> 00:41:58,792 Kihasználva az első levél hacsak nem ismételget az i vagy 943 00:41:58,792 --> 00:42:02,000 A hurok vagy while ciklus, ez nem fog másra, mint kérdezed meg. 944 00:42:02,000 --> 00:42:02,583 Jó kérdés. 945 00:42:02,583 --> 00:42:03,237 Igen? 946 00:42:03,237 --> 00:42:05,369 >> Közönség: Miért használja a hivatkozás feloldási módszer helyett 947 00:42:05,369 --> 00:42:05,979 a tömb? 948 00:42:05,979 --> 00:42:07,395 >> David J. MALAN: Ah, jó kérdés. 949 00:42:07,395 --> 00:42:10,672 Miért használjuk a hivatkozás feloldási módszer helyett a tömb módszer? 950 00:42:10,672 --> 00:42:12,130 Nincs különösebb oka, hogy őszinte legyek. 951 00:42:12,130 --> 00:42:15,290 És valóban, erre a fajta például, jobbra, 952 00:42:15,290 --> 00:42:17,556 Én csak azzal érvelve, hogy a programot bonyolultabb, 953 00:42:17,556 --> 00:42:19,680 Több szem üvegezés fölött, az emberek megnézni 954 00:42:19,680 --> 00:42:22,830 mert ez úgy néz ki, szuper misztikus, de annak ellenére, hogy ugyanazt a dolgot. 955 00:42:22,830 --> 00:42:26,695 És így, őszintén szólva, ez egy Feleslegesen vizuálisan komplex megoldás 956 00:42:26,695 --> 00:42:27,320 a problémára. 957 00:42:27,320 --> 00:42:29,580 >> Még mindig jó design, Öt az öt tervezési, 958 00:42:29,580 --> 00:42:33,140 függetlenül attól, hogy a konzol jelölést vagy a mutató jelöléssel. 959 00:42:33,140 --> 00:42:36,299 De-- különösen, ha megkapjuk később a kurzus PSET 5 960 00:42:36,299 --> 00:42:39,340 amikor végre, hogy szótárból Már említettem néhány times-- 961 00:42:39,340 --> 00:42:42,300 akkor tényleg érdekel a alacsony memória címek 962 00:42:42,300 --> 00:42:44,140 hogy valóban megértsük mi történik. 963 00:42:44,140 --> 00:42:48,300 >> Ám most, kiderül, hogy ez a kódsort itt szögletes zárójelben 964 00:42:48,300 --> 00:42:49,900 nem igazán létezik. 965 00:42:49,900 --> 00:42:52,230 Ezek az úgynevezett szintaktikai cukor, amelynek 966 00:42:52,230 --> 00:42:58,390 csak hátborzongatóan jó szóval a fordító alakítja szögletes zárójelben kell 967 00:42:58,390 --> 00:43:00,420 hogy a matematikai kifejezés. 968 00:43:00,420 --> 00:43:02,660 Szóval ez egy emberi konvenció hogy képes legyen csak írni 969 00:43:02,660 --> 00:43:04,220 Ezek nagyon felhasználóbarát zárójelben. 970 00:43:04,220 --> 00:43:06,850 De mi a fordító, csengés, valóban csinál bármikor 971 00:43:06,850 --> 00:43:10,970 írsz, mi kiemelt sorban 24, a motorháztető alatt ez tényleg 972 00:43:10,970 --> 00:43:12,330 átkonvertálja ezt. 973 00:43:12,330 --> 00:43:16,200 Ez csak sokkal élvezetesebb, mint egy emberi olvasni és írni kódot, mint a sorban 24. 974 00:43:16,200 --> 00:43:18,530 De végül azok, képzés kerekek is jön le 975 00:43:18,530 --> 00:43:21,780 ha az ember saját kényelmét erősödik. 976 00:43:21,780 --> 00:43:27,240 >> Rendben, emlékszem majd, hogy ez a az a fajta legnagyobb probléma 977 00:43:27,240 --> 00:43:27,807 botlottunk. 978 00:43:27,807 --> 00:43:30,640 És ez az, ami felkeltette az egész átkozott beszélgetés mutatók, 979 00:43:30,640 --> 00:43:32,340 és címét, és a másolás dolgokat. 980 00:43:32,340 --> 00:43:35,410 Azért, mert mi megbotlott ez a hülye, hülye kérdés, amellyel 981 00:43:35,410 --> 00:43:38,830 Én végre logically-- Lauren itt a demo és a narancslé 982 00:43:38,830 --> 00:43:43,770 A milk-- tökéletesen algoritmikusan helyes működés 983 00:43:43,770 --> 00:43:47,010 átszivatásáho két változó " értékeket, de az átkozott 984 00:43:47,010 --> 00:43:50,550 nem volt tartós, vagy állandó, hatása a kódomat. 985 00:43:50,550 --> 00:43:51,820 >> És miért volt ez? 986 00:43:51,820 --> 00:43:54,650 Dióhéjban, miért van ez végrehajtása swap- 987 00:43:54,650 --> 00:43:58,740 logikailag helyes, de nincs hatása a változókat, amelyek a neki átadott, 988 00:43:58,740 --> 00:44:01,119 mint x és y a fő? 989 00:44:01,119 --> 00:44:02,410 Mi volt a lényeg, hogy ezt a kérdést? 990 00:44:02,410 --> 00:44:02,909 Igen? 991 00:44:02,909 --> 00:44:05,532 Közönség: Mivel változó készül példányban változó a pass 992 00:44:05,532 --> 00:44:06,240 through funkcióval. 993 00:44:06,240 --> 00:44:09,060 >> David J. MALAN: Pontosan, ha át változók egy függvény, vagy érvek 994 00:44:09,060 --> 00:44:11,030 egy függvény, ők által elfogadott példányát, amely 995 00:44:11,030 --> 00:44:14,770 azt jelenti, kapsz egy azonos keres minta bitek mind x és y, 996 00:44:14,770 --> 00:44:15,955 itt nevezik a és b. 997 00:44:15,955 --> 00:44:18,080 És bármit megtehetsz akarsz Ezeket a példányokat, 998 00:44:18,080 --> 00:44:20,657 de ők fognak nincs hatása a hívó függvényben. 999 00:44:20,657 --> 00:44:22,990 És valóban, felhívtuk, hogy kép a képernyőn, visszahívás 1000 00:44:22,990 --> 00:44:25,520 utoljára, ahol ha Tényleg azt hiszed, hogy mi a 1001 00:44:25,520 --> 00:44:28,570 folyik alatta a hood-- ha ez a számítógép memóriájában, 1002 00:44:28,570 --> 00:44:31,650 és le itt a darab memória használják fő, 1003 00:44:31,650 --> 00:44:34,020 ez a darab használt memóriába a csere, 1004 00:44:34,020 --> 00:44:37,090 és így még ha fő van két változó, x és y, 1005 00:44:37,090 --> 00:44:41,840 csereügylet lehet azonos keres értékek, amelyek mindegyike az 1. és 2., 1006 00:44:41,840 --> 00:44:44,520 de ők teljesen különböző darabokat a memóriában. 1007 00:44:44,520 --> 00:44:46,130 >> Tehát szükségünk van egy megoldás erre. 1008 00:44:46,130 --> 00:44:51,580 És őszintén szólva, úgy tűnik, hogy most van egy megoldás erre a problémára, jobbra. 1009 00:44:51,580 --> 00:44:55,760 Ha most már a képessége, hogy manipulálni a dolgokat útján címek 1010 00:44:55,760 --> 00:44:59,310 és, egyfajta csúszdák és létrák stílus, a következő nyilak 1011 00:44:59,310 --> 00:45:02,820 és menj sehova akarunk a memóriában, nem tudtuk 1012 00:45:02,820 --> 00:45:06,220 megoldja ezt a problémát, halad fő cserélni 1013 00:45:06,220 --> 00:45:09,650 Nem az értékeket akarunk csereügylet, de csak ösztönösen 1014 00:45:09,650 --> 00:45:11,630 mit tehettünk volna át a swap helyett? 1015 00:45:11,630 --> 00:45:12,620 >> [Közbeiktatásával VOICES] 1016 00:45:12,620 --> 00:45:15,244 >> David J. MALAN: Miért nem csak adja át a címeket, ugye? 1017 00:45:15,244 --> 00:45:17,470 Miért nem ad swap-egy kincses térképet, ha úgy tetszik, 1018 00:45:17,470 --> 00:45:20,950 hogy vezet, hogy a tényleges értékek x és y. 1019 00:45:20,950 --> 00:45:24,340 Nézzük csere, valóban változtatni azok eredeti bit, ahelyett 1020 00:45:24,340 --> 00:45:26,797 csak múló példányban a bitek. 1021 00:45:26,797 --> 00:45:29,130 És így, sőt, ez az, ami lesz a megoldás. 1022 00:45:29,130 --> 00:45:31,899 Ez a verzió itt egyértelműen a rossz és elhibázott. 1023 00:45:31,899 --> 00:45:35,190 És most, az első pillantásra, csak úgy néz ki mint mi hozzá egy csomó csillagok véletlenszerűen 1024 00:45:35,190 --> 00:45:37,106 és keresztbe ujjainkat hogy ez összeállítani. 1025 00:45:37,106 --> 00:45:38,460 De, akkor most összeállítani. 1026 00:45:38,460 --> 00:45:40,090 >> De lássuk, mit jelentenek ezek. 1027 00:45:40,090 --> 00:45:43,990 És, sajnos, a szerzők C választhatott volna egy másik szimbólum 1028 00:45:43,990 --> 00:45:46,380 hogy ez egy kicsit világosabb, de a csillag üzemeltető 1029 00:45:46,380 --> 00:45:48,610 van más jelentése Két különböző kontextusokban. 1030 00:45:48,610 --> 00:45:50,890 És láttunk mindkét, de nézzük megkülönböztetni. 1031 00:45:50,890 --> 00:45:55,310 >> Szóval fel a tetején van, amikor megváltoztak a és b 1032 00:45:55,310 --> 00:46:00,470 attól, hogy int a az rossz változat int csillagok, az A és B, 1033 00:46:00,470 --> 00:46:01,740 Korábban voltak egészek. 1034 00:46:01,740 --> 00:46:05,752 Milyen a és b most A jó, a zöld változat? 1035 00:46:05,752 --> 00:46:06,900 Ők címeket. 1036 00:46:06,900 --> 00:46:09,610 Címét, mi, hogy világos? 1037 00:46:09,610 --> 00:46:10,770 Címét egészek. 1038 00:46:10,770 --> 00:46:12,520 Tehát az a tény, hogy én vagyok mondván int csillagos eszközökkel 1039 00:46:12,520 --> 00:46:15,440 ez a címe egy egész szám, specifikusan. 1040 00:46:15,440 --> 00:46:19,120 >> Tehát most hirdetmény a sorból, valami más is megváltozott. 1041 00:46:19,120 --> 00:46:22,770 tmp ugyanaz marad, mert ez csak ideiglenes egész, 1042 00:46:22,770 --> 00:46:24,110 nincs memória varázslat van. 1043 00:46:24,110 --> 00:46:26,370 De a most szüksége van egy csillag. 1044 00:46:26,370 --> 00:46:28,560 És, sőt, minden más említés a és b, 1045 00:46:28,560 --> 00:46:31,780 észre, hogy minden, ami változó pirosról zöldre 1046 00:46:31,780 --> 00:46:34,209 az, hogy én előtaggal azokat a változókat a csillagok. 1047 00:46:34,209 --> 00:46:35,750 Mert nem akarom másolni a és b. 1048 00:46:35,750 --> 00:46:40,350 Mert ha csak másolja a és b és swap a és b, mi vagyok én valójában csere? 1049 00:46:40,350 --> 00:46:43,760 Csak címeket, szeretnék cserélni mi forog ezeket a címeket. 1050 00:46:43,760 --> 00:46:44,860 Oda akarok menni. 1051 00:46:44,860 --> 00:46:48,000 És így a csillag üzemeltető belső én funkciót, 1052 00:46:48,000 --> 00:46:51,700 nem belül a paraméter lista, azt jelenti, elmész azokra a címekre 1053 00:46:51,700 --> 00:46:54,490 és valóban változtatni ezeket az értékeket. 1054 00:46:54,490 --> 00:46:56,500 >> Tehát mi nem a kép kinézni helyett. 1055 00:46:56,500 --> 00:47:03,250 Nos, ha ahelyett, hogy én vagyok halad a A és B nem 1 és 2-- 1056 00:47:03,250 --> 00:47:05,790 Igazából kell hozzá Egy másik meghatározás itt. 1057 00:47:05,790 --> 00:47:09,030 Tehát tegyük fel, hogy ez a darab memória áll helyre 10. 1058 00:47:09,030 --> 00:47:12,960 >> Ez a hely 11, de ez egy kicsit egyszerűsítés 1059 00:47:12,960 --> 00:47:18,900 Én most két választási tudom átadni x és y vagy tudom átadni a címüket? 1060 00:47:18,900 --> 00:47:22,500 Ha elmegyek a címüket mint ez, én csak 1061 00:47:22,500 --> 00:47:25,390 Most végre kell hajtani swap-per a zöld-kód 1062 00:47:25,390 --> 00:47:29,080 úgy, hogy amikor lát és amikor b látja, hogy nem csak másolja a és b 1063 00:47:29,080 --> 00:47:30,540 és mozgassa a tej és a narancslé. 1064 00:47:30,540 --> 00:47:32,664 A tej és a narancslé metafora most elromlik, 1065 00:47:32,664 --> 00:47:35,060 mert ezek azok kupák Folyékony és nem térképeket. 1066 00:47:35,060 --> 00:47:37,750 Mi ehelyett kell menni hogy foglalkozzon 10 és 1067 00:47:37,750 --> 00:47:42,420 kell menni, hogy foglalkozzon a 11., és a majd hajtsa végre, hogy csere logikája. 1068 00:47:42,420 --> 00:47:45,580 >> Tehát a logika ugyanaz, de szükségünk van egy kicsit másképp 1069 00:47:45,580 --> 00:47:47,160 elérésének azokat a változókat. 1070 00:47:47,160 --> 00:47:52,400 És így a végén, amit a programot kell kinéznie ez. 1071 00:47:52,400 --> 00:47:56,610 Ebben swap.c szó másolt és beillesztette a zöld változata. 1072 00:47:56,610 --> 00:47:58,450 De azt kell, hogy egy változás. 1073 00:47:58,450 --> 00:48:00,180 Ez nem elegendő csak megváltoztatni csere. 1074 00:48:00,180 --> 00:48:03,830 Milyen más kódsort Hogy tudok változtatni? 1075 00:48:03,830 --> 00:48:04,330 Igen? 1076 00:48:04,330 --> 00:48:05,770 >> Közönség: Hol tart az érveket. 1077 00:48:05,770 --> 00:48:07,603 >> David J. MALAN: Hol tart az érvelését. 1078 00:48:07,603 --> 00:48:09,985 Szóval, ha felfelé a fő, én Nem lehet csak átadni az x és y, 1079 00:48:09,985 --> 00:48:12,820 és ígérem, az utolsó darab új szintaxis ma. 1080 00:48:12,820 --> 00:48:17,200 Azt kell, hogy adja át a nem x és y de a címét x és y. 1081 00:48:17,200 --> 00:48:20,400 És kiderül, a szimbólum hogy a szerzők a C választotta 1082 00:48:20,400 --> 00:48:23,860 ha használod-jel van, hogy nem tévesztendő össze a bitenkénti-jel, 1083 00:48:23,860 --> 00:48:27,130 ha használja-jel itt és itt-jel, 1084 00:48:27,130 --> 00:48:29,570 ezt kitalálja az Ön számára, mi a címe az x, 1085 00:48:29,570 --> 00:48:31,740 talán 10, mi a címét y, talán 1086 00:48:31,740 --> 00:48:35,400 11, és átadja azokat a helyett. 1087 00:48:35,400 --> 00:48:37,210 >> Szóval egy csomó, hogy felszívja az összes egyszerre. 1088 00:48:37,210 --> 00:48:40,190 De nézzük most gyorsan a maradék négy perc 1089 00:48:40,190 --> 00:48:42,150 ahol a dolgok félrecsúszik. 1090 00:48:42,150 --> 00:48:45,120 És mint félretéve, valóban Vettem ezt a képet, 1091 00:48:45,120 --> 00:48:46,920 TF ezt a képet egy-két évvel ezelőtt. 1092 00:48:46,920 --> 00:48:49,190 Szóval ez a hátsó sarokban Eliot Dining Hall. 1093 00:48:49,190 --> 00:48:52,310 Pointerek talán a legnehezebb A téma, hogy lefedjük a CS50. 1094 00:48:52,310 --> 00:48:54,810 Tehát, ha aggódsz a rendezés A lejtőn, mint talán 1095 00:48:54,810 --> 00:48:56,770 Több mint hokiütő mint ez, észre 1096 00:48:56,770 --> 00:49:00,160 Mi vagyunk a fajta közeledik a csúcs Ami a fogalmi komplexitást. 1097 00:49:00,160 --> 00:49:02,300 >> És hozom fel ezt fotó, mert esküszöm 1098 00:49:02,300 --> 00:49:05,920 Istennek, az ősszel, amikor 1996-vettem CS50 az én tanítási fickó, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, aki leültetett a sarkában a Eliot D. Csarnok ebéd közben, 1100 00:49:09,620 --> 00:49:12,330 vagy vacsora, vagy valami, hogy megpróbálja hogy segítsen megérteni mutatók. 1101 00:49:12,330 --> 00:49:16,520 És ez az, ahol én voltam hét után vezették be, amikor előadás 1102 00:49:16,520 --> 00:49:18,170 Végül megértettem mutatók. 1103 00:49:18,170 --> 00:49:20,590 És biztos vagyok benne, hogy ez a majd kattintson messze hamarabb az Ön számára. 1104 00:49:20,590 --> 00:49:23,540 De észre ezt egyáltalán között A kifinomultabb témák 1105 00:49:23,540 --> 00:49:24,420 átnéztük. 1106 00:49:24,420 --> 00:49:25,819 De ez közül a legerősebb. 1107 00:49:25,819 --> 00:49:28,860 És amikor már azt, hogy tényleg minden csak úgy, hogy végül jön össze. 1108 00:49:28,860 --> 00:49:31,460 Így biztos lehetsz benne, hogy nem kell minden mosogató ma. 1109 00:49:31,460 --> 00:49:32,980 >> Tehát itt az utolsó program fogunk nézni. 1110 00:49:32,980 --> 00:49:35,605 És mi lesz a vége egy Gyors három percen claymation 1111 00:49:35,605 --> 00:49:37,030 által barátunk, Nick Parlante. 1112 00:49:37,030 --> 00:49:41,440 Itt egy programot, amely a felső két vonalak kijelenti változó x és y. 1113 00:49:41,440 --> 00:49:44,780 Mindkét amelyek címek Egész számok, AKA mutatók. 1114 00:49:44,780 --> 00:49:48,125 Ezután osztják elég memóriát egy int 1115 00:49:48,125 --> 00:49:51,344 és tárolja a címet Az, hogy a memória x. 1116 00:49:51,344 --> 00:49:53,260 Szóval, ez még egyszerűbb mint a példa korábban. 1117 00:49:53,260 --> 00:49:56,100 Adj nekem négy bájt memóriát, ez a méret egy int, 1118 00:49:56,100 --> 00:49:58,000 és tedd azt a címet x. 1119 00:49:58,000 --> 00:50:01,070 Ez a vonal itt azt jelenti, megy a címet x 1120 00:50:01,070 --> 00:50:05,270 és tedd értelmében az élet, a szám 42 van. 1121 00:50:05,270 --> 00:50:07,710 De ezen a vonalon aggaszt. 1122 00:50:07,710 --> 00:50:12,620 Csillag y azt jelenti, megy a címet y, és tegye a szerencsétlen szám 13 van. 1123 00:50:12,620 --> 00:50:15,780 Miért veszélyes, ezen a ponton A story-- noha gyorsan elmondta 1124 00:50:15,780 --> 00:50:17,980 a mi fogyó perc here-- miért nem jó ez 1125 00:50:17,980 --> 00:50:19,660 hogy azt mondjam, menj a címet y? 1126 00:50:19,660 --> 00:50:21,077 >> Közönség: Nem [hallható]. 1127 00:50:21,077 --> 00:50:22,910 David J. MALAN: én nem tegyen semmit y. 1128 00:50:22,910 --> 00:50:25,520 Tehát mi az értéke y, Ezen a ponton a történet? 1129 00:50:25,520 --> 00:50:26,570 Fogalmunk sincs. 1130 00:50:26,570 --> 00:50:29,190 Ez valami szemetet értéke és az sem Muci tudom. 1131 00:50:29,190 --> 00:50:32,532 Ha a végén ezt a jegyzetet. 1132 00:50:32,532 --> 00:50:34,832 >> [Videó lejátszás] 1133 00:50:34,832 --> 00:50:36,500 >> -Hé, Muci, ébredj fel. 1134 00:50:36,500 --> 00:50:39,140 Itt az ideje mutató móka. 1135 00:50:39,140 --> 00:50:40,210 >> -Az mi? 1136 00:50:40,210 --> 00:50:41,690 Ismerje meg a mutatók? 1137 00:50:41,690 --> 00:50:43,570 Ó, szobaasszony. 1138 00:50:43,570 --> 00:50:46,600 >> -Nos, Az induláshoz, azt hiszem, mi vagyunk Szükségem lesz egy-két mutató. 1139 00:50:46,600 --> 00:50:47,380 >> -OKÉ. 1140 00:50:47,380 --> 00:50:51,120 Ez a kód oszt két pointert amelyek rámutatnak, hogy egész számok. 1141 00:50:51,120 --> 00:50:53,557 >> -OK, Jól látom a két mutató, de 1142 00:50:53,557 --> 00:50:55,140 Nem úgy tűnik, hogy mutat semmit. 1143 00:50:55,140 --> 00:50:55,970 >> -Ez így van. 1144 00:50:55,970 --> 00:50:58,100 Kezdetben pointerek Nem mutat sehova. 1145 00:50:58,100 --> 00:51:00,950 A dolgok rámutatnak a nevű pointees és számukra a kialakításukban 1146 00:51:00,950 --> 00:51:02,330 egy külön lépésben. 1147 00:51:02,330 --> 00:51:03,210 >> -Ó, Jobb, jobb. 1148 00:51:03,210 --> 00:51:03,940 Tudtam. 1149 00:51:03,940 --> 00:51:05,730 A pointees külön. 1150 00:51:05,730 --> 00:51:08,310 Szóval hogyan lehet lefoglalni egy pointee? 1151 00:51:08,310 --> 00:51:11,960 >> -OK, Valamint ezt a kódot kiosztja Új integer pointee, 1152 00:51:11,960 --> 00:51:15,050 és ez a rész az x, hogy pont azt. 1153 00:51:15,050 --> 00:51:16,240 >> -Hé, Hogy jobban néz ki. 1154 00:51:16,240 --> 00:51:17,743 Tehát, hogy ez nem valami. 1155 00:51:17,743 --> 00:51:23,580 >> -OK, Én dereference a mutatót x A szám tárolásához 42 bele pointee. 1156 00:51:23,580 --> 00:51:27,130 Mert ez a trükk, szükségem lesz az én varázspálcája dereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> -A Varázspálcája dereferencing? 1158 00:51:30,200 --> 00:51:32,310 Uh, hogy ez nagyszerű. 1159 00:51:32,310 --> 00:51:34,270 >> -Ez Az, amit a kód így néz ki. 1160 00:51:34,270 --> 00:51:35,970 Én csak létre száma és-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> -Hé, Nézd meg ott megy. 1163 00:51:39,140 --> 00:51:43,980 Szóval, csinál egy hivatkozás feloldási a következőképpen x A nyilat a pointee. 1164 00:51:43,980 --> 00:51:46,150 Ebben az esetben, hogy tárolja 42 ott. 1165 00:51:46,150 --> 00:51:50,700 Hé, próbálja meg azt a számot tárolni 13, a másikon mutatót, y. 1166 00:51:50,700 --> 00:51:51,840 >> -OKÉ. 1167 00:51:51,840 --> 00:51:56,270 Megyek át ide y, és kap a 13-as szám létre. 1168 00:51:56,270 --> 00:52:00,380 Majd megteszi a pálcát a dereferencing és csak-- 1169 00:52:00,380 --> 00:52:01,646 >> [Csengő hang] 1170 00:52:01,646 --> 00:52:04,080 >> -Ó, Hé, hogy nem működött. 1171 00:52:04,080 --> 00:52:06,470 Azt mondják, uh, Muci, én nem gondolom dereferencing 1172 00:52:06,470 --> 00:52:10,850 y egy jó ötlet, mert a kötés fel a pointee egy külön lépésben. 1173 00:52:10,850 --> 00:52:12,480 És nem hiszem, hogy valaha csináltam. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Jó pont. 1175 00:52:14,620 --> 00:52:19,810 >> -Igen, Mi juttatott a mutatót, y, de mi soha meg azt, hogy pont egy pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Nagyon figyelmes. 1177 00:52:21,590 --> 00:52:23,215 -Hé, Te jól nézel ki ott, Muci. 1178 00:52:23,215 --> 00:52:26,390 Meg tudná javítani úgy, hogy y pont hogy az azonos pointee mint x. 1179 00:52:26,390 --> 00:52:29,290 >> -Sure, Tudom használni a varázspálcát A mutató feladat. 1180 00:52:29,290 --> 00:52:31,970 >> -Van, Hogy lesz probléma, mint korábban? 1181 00:52:31,970 --> 00:52:33,790 >> -Nem, Ez nem ér hozzá a pointees. 1182 00:52:33,790 --> 00:52:35,840 Csak megváltoztatja egy mutatót hogy pont ugyanazt thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [Pattogó hang] 1184 00:52:36,465 --> 00:52:37,450 --as másik. 1185 00:52:37,450 --> 00:52:38,440 >> -Ó, értem. 1186 00:52:38,440 --> 00:52:41,200 Most y pont ugyanazon a helyen, mint x. 1187 00:52:41,200 --> 00:52:42,950 Na várjunk csak, most y rögzített. 1188 00:52:42,950 --> 00:52:44,110 Ez egy pointee. 1189 00:52:44,110 --> 00:52:47,779 Így próbálja a pálcát a dereferencing újra elküldeni a 13 feletti. 1190 00:52:47,779 --> 00:52:51,110 >> -Ó, OK, itt megy. 1191 00:52:51,110 --> 00:52:52,330 >> -Hé, Nézd meg ezt. 1192 00:52:52,330 --> 00:52:53,570 Most dereferencing alkotások y. 1193 00:52:53,570 --> 00:52:57,900 És mivel a pointerek megosztása hogy az egyik pointee, mindketten lásd a 13. 1194 00:52:57,900 --> 00:52:59,952 >> -Igen, Megosztás, uh, mindegy. 1195 00:52:59,952 --> 00:53:01,535 Szóval, megyünk helyet cserélnek most? 1196 00:53:01,535 --> 00:53:03,730 >> -Ó, Nézd kifogytunk az időből. 1197 00:53:03,730 --> 00:53:04,660 >> -De-- 1198 00:53:04,660 --> 00:53:06,520 >> -Csak Emlékeznek a három mutató szabályokat. 1199 00:53:06,520 --> 00:53:09,550 1. szám, az alapvető szerkezete az, hogy van egy mutatót, 1200 00:53:09,550 --> 00:53:11,630 és ez pont fölött egy pointee. 1201 00:53:11,630 --> 00:53:13,740 De a kurzort, pointee külön. 1202 00:53:13,740 --> 00:53:15,620 És a gyakori hiba hogy hozzanak létre egy mutatót 1203 00:53:15,620 --> 00:53:18,000 de elfelejteni, hogy ez egy pointee. 1204 00:53:18,000 --> 00:53:21,170 >> 2. szám, mutató dereferencing kezdődik a mutató 1205 00:53:21,170 --> 00:53:24,020 és követi annak nyíl fölött hogy hozzáférjen az pointee. 1206 00:53:24,020 --> 00:53:27,815 Mint tudjuk, ez csak akkor működik, ha van egy pointee, milyen visszaér 1207 00:53:27,815 --> 00:53:29,260 uralkodni száma 1. 1208 00:53:29,260 --> 00:53:31,990 >> 3. szám, mutató hozzárendelés úgy egy mutatót 1209 00:53:31,990 --> 00:53:35,330 és megváltoztatja azt, hogy pont a ugyanolyan pointee, mint egy másik mutatót. 1210 00:53:35,330 --> 00:53:37,150 Tehát miután a megbízást, A két mutató 1211 00:53:37,150 --> 00:53:40,927 fog mutatni az azonos pointee, néha, hogy hívják megosztását. 1212 00:53:40,927 --> 00:53:42,510 És ez minden van, tényleg. 1213 00:53:42,510 --> 00:53:43,130 Viszlát most. 1214 00:53:43,130 --> 00:53:43,475 >> [Lejátszás vége] 1215 00:53:43,475 --> 00:53:44,830 >> David J. MALAN: Ennyi CS50. 1216 00:53:44,830 --> 00:53:46,246 Hála professzor Nick Parlante. 1217 00:53:46,246 --> 00:53:47,730 Találkozunk a jövő héten. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [Elektronikus zene szól] 1220 00:53:56,435 --> 00:57:22,775