1 00:00:00,000 --> 00:00:01,110 >> [Zenelejátszás] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 David J. MALAN: Rendben. 4 00:00:11,650 --> 00:00:15,610 Ez CS50, és ez a a hét végén négy. 5 00:00:15,610 --> 00:00:19,420 És az egyik téma ma az, hogy a digitális kriminalisztika, 6 00:00:19,420 --> 00:00:20,989 A művészet az adatmentés. 7 00:00:20,989 --> 00:00:22,780 És valóban, bár te vagy a közepén 8 00:00:22,780 --> 00:00:25,070 most a béke a Three és a Breakout, jövő héten, 9 00:00:25,070 --> 00:00:27,880 a hangsúly a pontosan ezen a területen. 10 00:00:27,880 --> 00:00:30,686 >> Tehát az egyik legmenőbb munkahelyek én valaha az volt vissza a doktori iskola, 11 00:00:30,686 --> 00:00:33,560 amikor dolgoztam a helyi Middlesex County kerületi ügyész 12 00:00:33,560 --> 00:00:34,950 iroda, ezzel kriminalisztika működik. 13 00:00:34,950 --> 00:00:37,450 Tehát lényegében a Massachusetts Állami Rendőrség, alkalmanként, 14 00:00:37,450 --> 00:00:40,100 ha dolgozik az esetekről lenne hogy a dolgok, mint a merevlemezek 15 00:00:40,100 --> 00:00:42,185 és floppy lemezek és memóriakártyák és a hasonlók. 16 00:00:42,185 --> 00:00:44,060 És ők adják őket az én és a mentor, 17 00:00:44,060 --> 00:00:48,070 és a célunk az volt, hogy bizonyítékot találjanak, ha volt, ezeken a média. 18 00:00:48,070 --> 00:00:50,700 Nos, lehet, hogy láttam pillantások ennek a világnak a kriminalisztika 19 00:00:50,700 --> 00:00:53,000 A média, a TV és mozi. 20 00:00:53,000 --> 00:00:55,730 De a munka volt, és mondhatnám, hogy az a világ, 21 00:00:55,730 --> 00:00:57,550 nem egészen, mint te is látod. 22 00:00:57,550 --> 00:01:00,794 Vessünk egy pillantást, amit akkor már valószínűleg látott. 23 00:01:00,794 --> 00:01:01,460 [Videolejátszás] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 Most térjünk jól néz rád. 26 00:01:05,380 --> 00:01:06,850 >> [Zenelejátszás] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> Tartsd meg. 29 00:01:12,932 --> 00:01:13,657 Fuss vissza. 30 00:01:13,657 --> 00:01:14,733 >> Várj egy percet. 31 00:01:14,733 --> 00:01:15,233 Menj jobbra. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -Ott. 34 00:01:16,870 --> 00:01:17,369 Freeze az. 35 00:01:17,369 --> 00:01:17,930 -Teljes Képernyőn. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 Freeze az. 38 00:01:18,875 --> 00:01:20,160 -Tighten Fel, hogy jó? 39 00:01:20,160 --> 00:01:22,126 >> -vector Be az fickó a hátsó kerék. 40 00:01:22,126 --> 00:01:24,435 >> -zoom Az itt, ezen a helyen. 41 00:01:24,435 --> 00:01:28,580 >> -with A megfelelő felszereléssel, a kép nagyítható és éles. 42 00:01:28,580 --> 00:01:29,330 >> Mi az? 43 00:01:29,330 --> 00:01:30,780 >> -Ez Egy tartozékot programot. 44 00:01:30,780 --> 00:01:32,170 >> -Tud Tiszta, hogy akár minden? 45 00:01:32,170 --> 00:01:33,070 >> -Nem Tudom. 46 00:01:33,070 --> 00:01:34,150 Nézzük fokozza azt. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance § A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 Én jobb a részleteket, és-- 50 00:01:38,562 --> 00:01:40,020 -Szerintem Van elég, hogy fokozza. 51 00:01:40,020 --> 00:01:40,976 Engedje meg, hogy a képernyő. 52 00:01:40,976 --> 00:01:42,559 >> -I Fokozott a tükörképét szeme. 53 00:01:42,559 --> 00:01:44,322 -Reméljük Futtatásához át video javítása. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, Meg tudja erősíteni ezt? 55 00:01:45,210 --> 00:01:45,710 >> -Hang Tovább. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -Én Már dolgozom a reflexió. 58 00:01:49,458 --> 00:01:50,402 >> -Van Valaki gondolkodás. 59 00:01:50,402 --> 00:01:50,902 >> Reflexió. 60 00:01:50,902 --> 00:01:52,870 -Van Tükrözi a férfi arcát. 61 00:01:52,870 --> 00:01:53,694 >> -A Elmélkedés! 62 00:01:53,694 --> 00:01:54,610 -Van Tükrözi. 63 00:01:54,610 --> 00:01:55,880 -zoom Az a tükör. 64 00:01:55,880 --> 00:01:57,860 Láthatjuk a reflexió. 65 00:01:57,860 --> 00:01:59,630 >> -Tud Fokozza a kép innen? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 -Tud Növeli meg? 68 00:02:01,210 --> 00:02:02,190 -Tud Növeli meg? 69 00:02:02,190 --> 00:02:03,066 -Tud Mozdítható ez? 70 00:02:03,066 --> 00:02:03,898 -Tud Növeli meg? 71 00:02:03,898 --> 00:02:04,740 Tartsd egy kicsit. 72 00:02:04,740 --> 00:02:05,281 Én fokozza. 73 00:02:05,281 --> 00:02:06,470 -zoom Be az ajtón. 74 00:02:06,470 --> 00:02:06,970 -Times 10. 75 00:02:06,970 --> 00:02:08,009 -zoom. 76 00:02:08,009 --> 00:02:08,509 Mozgás a. 77 00:02:08,509 --> 00:02:09,340 -több. 78 00:02:09,340 --> 00:02:10,094 Várj, állj meg. 79 00:02:10,094 --> 00:02:10,750 -stop. 80 00:02:10,750 --> 00:02:11,250 -Pause Azt. 81 00:02:11,250 --> 00:02:13,542 -Rotate Us 75 fok körül a függőleges, kérem. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> -stop. 84 00:02:16,127 --> 00:02:19,330 Menj vissza a rész az ajtót. 85 00:02:19,330 --> 00:02:21,420 >> -Van Kép fokozó, amely bitmap? 86 00:02:21,420 --> 00:02:24,420 >> Tán tudjuk használni a Pradeep Singh módszer, hogy a Windows. 87 00:02:24,420 --> 00:02:25,902 >> -A Szoftver a legkorszerűbb. 88 00:02:25,902 --> 00:02:26,866 >> -A Sajátérték ki. 89 00:02:26,866 --> 00:02:29,758 >> -with A jobb kombinációja algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> -Nyitva Vett megvilágítás algoritmusok a következő szintre, 91 00:02:32,168 --> 00:02:34,110 és tudom használni őket, hogy fokozza ezt a fényképet. 92 00:02:34,110 --> 00:02:36,840 >> -Lock, És bővíteni a z-tengely. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 Fokozza. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 -Freeze És fokozza. 97 00:02:40,070 --> 00:02:43,420 [END Videolejátszás] 98 00:02:43,420 --> 00:02:45,830 David J. MALAN: Tehát ezek minden szót, de nem voltak 99 00:02:45,830 --> 00:02:47,870 használt mondatok helyesen. 100 00:02:47,870 --> 00:02:52,370 És valóban, a jövőben bármikor, Kérjük, hallod, hogy valaki azt a szót, 101 00:02:52,370 --> 00:02:54,250 "Fokozza", kuncogott egy kicsit. 102 00:02:54,250 --> 00:02:57,190 Mert amikor megpróbál növelése, Például, ez az, ami történik. 103 00:02:57,190 --> 00:02:58,580 >> Tehát itt van egy gyönyörű fénykép. 104 00:02:58,580 --> 00:02:59,720 Ez CS50 saját Daven. 105 00:02:59,720 --> 00:03:03,740 És tegyük fel, hogy mi volna hangsúly a csillogás a szemében, 106 00:03:03,740 --> 00:03:05,870 vagy az tükrözi a rossz srác, hogy egyértelműen 107 00:03:05,870 --> 00:03:07,820 által rögzített a biztonsági kamera. 108 00:03:07,820 --> 00:03:10,330 Ez az, ami történik, ha ráközelít egy kép 109 00:03:10,330 --> 00:03:14,060 csak véges számú bitek társul hozzá. 110 00:03:14,060 --> 00:03:15,420 >> Ez az, amit akkor kap. 111 00:03:15,420 --> 00:03:19,190 És valóban, a Daven szeme csupán négy, talán hat pixel 112 00:03:19,190 --> 00:03:22,110 alkotó pontosan mit volt ragyogó ott. 113 00:03:22,110 --> 00:03:25,890 Tehát Probléma Set Négy végül is felfedezni ezt a világot, különösen 114 00:03:25,890 --> 00:03:28,090 a természet valami nevezzük I / O, ahol 115 00:03:28,090 --> 00:03:31,000 i / o csak egy divatos módon mondván, input és output. 116 00:03:31,000 --> 00:03:34,280 >> Szóval eddig, mind a kölcsönhatások már volt egy számítógéppel 117 00:03:34,280 --> 00:03:36,770 jórészt a saját billentyűzet és a képernyő, 118 00:03:36,770 --> 00:03:40,770 de nem annyira a merevlemez, vagy mentés fájlok túl az is 119 00:03:40,770 --> 00:03:41,620 magad levelet. 120 00:03:41,620 --> 00:03:44,570 A programokat eddig is nem teremt, és mentés, 121 00:03:44,570 --> 00:03:46,270 és frissítése a saját fájljait. 122 00:03:46,270 --> 00:03:47,150 >> Nos, mi egy fájlt? 123 00:03:47,150 --> 00:03:48,105 Nos, valami hasonló a JPEG. 124 00:03:48,105 --> 00:03:50,520 Ez a kép lehet, hogy van, vagy feltölteni a Facebook, 125 00:03:50,520 --> 00:03:51,690 vagy nézze meg bárhol az interneten. 126 00:03:51,690 --> 00:03:54,460 Sőt, hogy fénykép mi csak saw of Daven volt a JPEG. 127 00:03:54,460 --> 00:03:57,570 És ami érdekes, a kép, mint a JPEG 128 00:03:57,570 --> 00:04:02,170 az, hogy azonosítani lehet, Általában bizonyos minták bit. 129 00:04:02,170 --> 00:04:05,200 >> Más szóval, mi az, ami megkülönbözteti a JPEG a GIF 130 00:04:05,200 --> 00:04:08,109 egy PING egy Word- dokumentum egy Excel file? 131 00:04:08,109 --> 00:04:09,900 Nos, ez csak más minták bit. 132 00:04:09,900 --> 00:04:12,820 És ezek a különböző minták általában az elején ezeket a fájlokat. 133 00:04:12,820 --> 00:04:18,200 >> Tehát, hogy ha a számítógép megnyitja a Word- doc, vagy ha a számítógép megnyitja a JPEG, 134 00:04:18,200 --> 00:04:20,940 úgy néz ki, jellemzően a első néhány bit a fájlban. 135 00:04:20,940 --> 00:04:24,059 És ha felismeri a minta, azt mondja, ó, ez egy kép. 136 00:04:24,059 --> 00:04:25,850 Hadd megjeleníteni a a felhasználó számára a grafikus. 137 00:04:25,850 --> 00:04:27,870 Vagy, ó, ez úgy néz ki, mint egy Word doc. 138 00:04:27,870 --> 00:04:30,480 Hadd mutassam meg, hogy a felhasználó, mint egy esszé. 139 00:04:30,480 --> 00:04:33,020 >> Így például, JPEG, kiderül, vannak 140 00:04:33,020 --> 00:04:35,460 meglehetősen bonyolult a motorháztető alatt. 141 00:04:35,460 --> 00:04:40,140 De az első három bájt a legtöbb minden JPEG kezdeni ezzel a három számot. 142 00:04:40,140 --> 00:04:44,680 Tehát byte nulla, egy, kettő és, a legtöbb minden JPEG, 255, majd a szám 143 00:04:44,680 --> 00:04:46,675 216, akkor a szám 255. 144 00:04:46,675 --> 00:04:48,990 >> És mi leszel képes kezdeni ezzel a jövő héten 145 00:04:48,990 --> 00:04:52,920 valójában dugta alatt A motorháztető fájlokat, mint JPEG 146 00:04:52,920 --> 00:04:57,210 és mint a bitmap kép, és látta, mi mindig is ott volt, amíg 147 00:04:57,210 --> 00:04:58,650 ahogy már a számítógép segítségével. 148 00:04:58,650 --> 00:05:01,860 >> De mi van, általában nem írva, mint decimális számok, mint ez. 149 00:05:01,860 --> 00:05:04,620 Számítógépes szakemberek nem inkább beszélni tizedes. 150 00:05:04,620 --> 00:05:06,139 Nem igazán beszél bináris. 151 00:05:06,139 --> 00:05:07,930 Általában, ha azt akarjuk, kifejezni számok, 152 00:05:07,930 --> 00:05:10,710 mi ténylegesen használni hexadecimális, amely lehet felidézni 153 00:05:10,710 --> 00:05:13,027 , mondjuk, Problem Set Az egyik, amely kétségbe 154 00:05:13,027 --> 00:05:14,610 hogy gondoljon egy másik rendszer. 155 00:05:14,610 --> 00:05:17,170 >> Mi, persze, ismerős A tizedes, nulla és kilenc. 156 00:05:17,170 --> 00:05:18,215 Beszéltünk bináris. 157 00:05:18,215 --> 00:05:20,710 És nem igazán van használni, hogy sok itt 158 00:05:20,710 --> 00:05:22,470 a ki, mert a számítógép fogja használni. 159 00:05:22,470 --> 00:05:24,900 De programozók igen gyakran, de nem mindig, 160 00:05:24,900 --> 00:05:29,360 használni hexadecimális, ami csak azt jelenti, van 16 betű az ábécé, 161 00:05:29,360 --> 00:05:31,330 szemben a két vagy 10. 162 00:05:31,330 --> 00:05:34,530 >> Szóval hogyan lehet számolni, hogy a magasabb mint kilenc hexadecimális? 163 00:05:34,530 --> 00:05:41,120 Menj 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, csak a konvenció. 164 00:05:41,120 --> 00:05:43,540 De mi a kulcs az, hogy minden ezek közül egyetlen szimbólum. 165 00:05:43,540 --> 00:05:44,340 Nincs 10. 166 00:05:44,340 --> 00:05:48,400 Nincs 11, önmagában, mert minden a számjegyek, csak úgy, mint a decimális 167 00:05:48,400 --> 00:05:51,940 és csakúgy, mint a bináris, kéne egyetlen karakter, a konvenció. 168 00:05:51,940 --> 00:05:55,280 >> Annak érdekében, hogy akkor ez az ábécé van rendelkezésünkre álló hexadecimális. 169 00:05:55,280 --> 00:05:58,600 Szóval, mit csinál egy JPEG néz ki, ha volt, hogy írjon ki az első három 170 00:05:58,600 --> 00:06:01,980 bytes nem decimális, hanem, Például, amint hexadecimális? 171 00:06:01,980 --> 00:06:03,640 És miért hexadecimális még minden hasznos? 172 00:06:03,640 --> 00:06:05,290 >> Nos, egy gyors pillantást egy példát. 173 00:06:05,290 --> 00:06:09,030 Tehát, ha írok ki a bitek képviseli ezeket decimális numbers-- 174 00:06:09,030 --> 00:06:12,450 ez lehet egy kicsit rozsdás már néhány hete, 175 00:06:12,450 --> 00:06:14,820 de a bal oldali és a jobbra egy meglehetősen egyszerű. 176 00:06:14,820 --> 00:06:17,990 255 volt a legnagyobb szám, amit jelenthet nyolc bit. 177 00:06:17,990 --> 00:06:18,820 Ez volt minden is. 178 00:06:18,820 --> 00:06:21,320 Tehát az egyetlen, aki enyhén érdekes a középső. 179 00:06:21,320 --> 00:06:24,700 És ha a fajta nem ki a matek, akkor következtetni, hogy valóban, 180 00:06:24,700 --> 00:06:27,949 ezt a mintát egy és nullát jelent 216. 181 00:06:27,949 --> 00:06:30,240 Úgyhogy csak kikötik a Most, hogy ezek a helyes. 182 00:06:30,240 --> 00:06:31,730 De miért is érdekes ez? 183 00:06:31,730 --> 00:06:33,970 >> Nos, egy byte, persze, nyolc bit. 184 00:06:33,970 --> 00:06:38,980 És kiderül, hogy ha úgy gondolja, Egy byte két darabokat négy bit, 185 00:06:38,980 --> 00:06:39,500 mint ez. 186 00:06:39,500 --> 00:06:41,000 Hadd adjunk egy kis helyet. 187 00:06:41,000 --> 00:06:42,550 Szóval mielőtt után. 188 00:06:42,550 --> 00:06:46,520 Már csak hozzá néhány fehér térben A megjelenítés kedvéért itt. 189 00:06:46,520 --> 00:06:51,840 Hogyan lehet, hogy most képviselt, mondjuk, hexadecimális minden quad bit, 190 00:06:51,840 --> 00:06:52,880 mindegyik a négy bit? 191 00:06:52,880 --> 00:06:56,420 >> Így például, a bal oldalon Most már 1111 bináris. 192 00:06:56,420 --> 00:07:00,420 Mi az, hogy a szám a decimális, ha nem ki a matek? 193 00:07:00,420 --> 00:07:03,780 Van az is hely, a kettes is, a négyes helyet, és a nyolcas helyen. 194 00:07:03,780 --> 00:07:04,341 >> Közönség: 15. 195 00:07:04,341 --> 00:07:05,340 David J. MALAN: Ez 15. 196 00:07:05,340 --> 00:07:08,340 Tehát, ha nem nyolc plusz négy plusz kettő plusz egy, kapunk 15. 197 00:07:08,340 --> 00:07:11,790 Így tudtam leírni az alábbi 15. 1111, de a lényeg itt 198 00:07:11,790 --> 00:07:13,190 hexadecimális, nem decimális. 199 00:07:13,190 --> 00:07:17,310 Tehát ahelyett, hogy leírom, 15, 1-5, Fogok írni, hogy a hex, 200 00:07:17,310 --> 00:07:22,311 amely ha úgy gondolja, vissza, ha van nulla és f, mi 15 lesz? 201 00:07:22,311 --> 00:07:22,810 Közönség: f. 202 00:07:22,810 --> 00:07:24,434 David J. MALAN: Kiderült, hogy a f. 203 00:07:24,434 --> 00:07:29,140 És akkor a munka, hogy ki mondja, Nos, ha a 10, majd az OK gombra, f 15. 204 00:07:29,140 --> 00:07:33,250 Tehát valóban tudtuk átírni ez ugyanazokat a számokat f f. 205 00:07:33,250 --> 00:07:35,750 És aztán, ha teszünk egy kis matematika, fogjuk következtetni, hogy ez a d. 206 00:07:35,750 --> 00:07:38,650 Eight elég könnyű, mert Van egy a nyolcas helyen. 207 00:07:38,650 --> 00:07:40,620 Aztán, van egy pár f f a. 208 00:07:40,620 --> 00:07:44,669 >> Tehát, amit az emberek általában nem az egyezmény ha az általuk használt hexadecimális is, hogy csak 209 00:07:44,669 --> 00:07:47,710 írom ezt egy kicsit tömören, megszabadulni a legtöbb a fehér térben. 210 00:07:47,710 --> 00:07:50,890 És csak hogy szuper világos olvasó, hogy ez hexadecimális, 211 00:07:50,890 --> 00:07:54,670 az egyszerű egyezmény között emberekben írsz nulla 212 00:07:54,670 --> 00:07:58,000 x, aminek nincs értelme más mint a vizuális azonosítója, 213 00:07:58,000 --> 00:07:59,590 itt jön egy hexadecimális szám. 214 00:07:59,590 --> 00:08:04,210 >> És akkor, akkor tegye a két számjegy, f Ebben az esetben az F, majd egy d, akkor f f. 215 00:08:04,210 --> 00:08:06,700 Tehát hosszú történet rövid, hexadecimális csak hajlamos 216 00:08:06,700 --> 00:08:11,990 hasznos lehet, mivel minden egyes számjegy, nulla és f, tökéletesen vonalak 217 00:08:11,990 --> 00:08:13,880 fel a minta négy bit. 218 00:08:13,880 --> 00:08:18,080 >> Tehát, ha van két számjegy, nulla a F, újra és újra, 219 00:08:18,080 --> 00:08:20,256 hogy ad tökéletesen nyolc bit vagy egy byte. 220 00:08:20,256 --> 00:08:22,380 Szóval ezért hajlamos hagyományosan lehet hasznos. 221 00:08:22,380 --> 00:08:24,990 Nincs szellemi tartalom nagyon túl, 222 00:08:24,990 --> 00:08:27,010 más, mint a tényleges hasznosságát. 223 00:08:27,010 --> 00:08:29,310 >> Most JPEG nem csak fájl formátumokat grafika. 224 00:08:29,310 --> 00:08:33,230 Lehet, emlékeztetnek arra, hogy vannak kép, mint ez a világ, 225 00:08:33,230 --> 00:08:34,830 legalább egy pár évvel ezelőtt. 226 00:08:34,830 --> 00:08:37,580 >> Tehát ez valójában telepített Windows XP 227 00:08:37,580 --> 00:08:39,960 több millió PC-k szerte a világon. 228 00:08:39,960 --> 00:08:43,000 És ez volt a bitmap fájlt, BMP. 229 00:08:43,000 --> 00:08:47,690 És egy bitmap fájlt, ahogy látni fogod a következő hét, csak azt jelenti, egy minta a pontok, 230 00:08:47,690 --> 00:08:51,710 pixel, mint ők nevezik, A térkép a bitek, tényleg. 231 00:08:51,710 --> 00:08:55,160 >> Szóval, mi az érdekes, bár, a fájl formátum, BMP, a 232 00:08:55,160 --> 00:08:58,590 hogy a motorháztető alatt, az több mint három bájt 233 00:08:58,590 --> 00:09:01,020 alkotó a fejléc, így beszélni, az első pár falatot. 234 00:09:01,020 --> 00:09:03,330 Ez valójában úgy néz ki, egy kicsit bonyolultnak első pillantásra. 235 00:09:03,330 --> 00:09:04,704 És látni fogod ezt a P halmaz. 236 00:09:04,704 --> 00:09:06,810 És kezd valamit különösen ki most 237 00:09:06,810 --> 00:09:10,720 nem olyan fontos, mint éppen az a tény, hogy az elején minden bitmap 238 00:09:10,720 --> 00:09:13,823 fájl grafikus formátum, van egy csomó számot. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> Most a Microsoft, a szerzője ezt a formátumot, 241 00:09:16,720 --> 00:09:18,820 szokta így hívni azokat dolgok nem ints és karakter 242 00:09:18,820 --> 00:09:22,259 és úszik, de a szavak és d szavak és vágyik és bájt. 243 00:09:22,259 --> 00:09:23,800 Tehát ők csak különböző adattípusok. 244 00:09:23,800 --> 00:09:25,170 Ők különböző nevek ugyanazt a dolgot. 245 00:09:25,170 --> 00:09:26,740 De látni fogod, hogy a P meg négy. 246 00:09:26,740 --> 00:09:31,450 >> De ez csak azt jelenti, hogy ha az emberi dupla kattintás néhány .bmp az ő 247 00:09:31,450 --> 00:09:35,015 vagy a merevlemez, és egy ablak nyílik meg feltüntetve neki a kép, 248 00:09:35,015 --> 00:09:38,500 hogy azért történt, mert a működési rendszer valószínűleg észre nem csak 249 00:09:38,500 --> 00:09:41,460 a bmp fájl kiterjesztését a fájl neve, 250 00:09:41,460 --> 00:09:45,010 hanem az a tény, hogy van néhány egyezmény a minta bitek 251 00:09:45,010 --> 00:09:47,490 a kezdet kezdetén Az, hogy a bitmap fájlt. 252 00:09:47,490 --> 00:09:50,270 >> De nézzük most összpontosítani ilyen bonyolult fájl 253 00:09:50,270 --> 00:09:52,120 hanem valami, mint ez. 254 00:09:52,120 --> 00:09:55,190 Tegyük fel, hogy itt GEdit, I Csak a kezdet 255 00:09:55,190 --> 00:09:57,070 Egy program, ami nagyon egyszerű. 256 00:09:57,070 --> 00:09:58,860 Van néhány tartalmaz felfelé tetején. 257 00:09:58,860 --> 00:10:02,120 Most kaptam #include "structs.h", de Majd gyere vissza, hogy egy pillanatra. 258 00:10:02,120 --> 00:10:03,974 De ez hasznos most. 259 00:10:03,974 --> 00:10:05,890 Tehát ez egy olyan program, hogy fog végrehajtani 260 00:10:05,890 --> 00:10:07,335 mint az anyakönyvvezető az adatbankjában tárol. 261 00:10:07,335 --> 00:10:09,710 Így egy adatbázist a diákok, és minden diák a világ 262 00:10:09,710 --> 00:10:13,190 van neve, és a házat, és talán néhány más dolog, de majd tartsa egyszerű. 263 00:10:13,190 --> 00:10:15,140 Minden hallgató neve és a házat. 264 00:10:15,140 --> 00:10:17,700 >> Tehát, ha azt akartam írni egy programot, amelynek a célja az életben 265 00:10:17,700 --> 00:10:19,860 Csak a közelítéseket a nulla három, 266 00:10:19,860 --> 00:10:22,070 ha van három diák a Harvard Egyetemen. 267 00:10:22,070 --> 00:10:25,350 És én csak azt szeretném, hogy segítségével getString, minden diák nevét és a ház, 268 00:10:25,350 --> 00:10:26,600 és aztán csak nyomtassa ki azokat. 269 00:10:26,600 --> 00:10:28,630 >> Ez az a fajta, mint hét Egy, Két hét dolog most, 270 00:10:28,630 --> 00:10:30,810 ahol csak akar a számára hurok vagy valami ilyesmi. 271 00:10:30,810 --> 00:10:34,500 És szeretném hívni getString néhány alkalommal, majd nyomtassa f néhányszor. 272 00:10:34,500 --> 00:10:37,340 Szóval, hogyan lehet, hogy én ezt, mégis, amikor mind a nevét és a ház 273 00:10:37,340 --> 00:10:39,070 vesz részt minden hallgató? 274 00:10:39,070 --> 00:10:42,830 >> Tehát az első gondolatom talán lehet tenni valamit, mint ez. 275 00:10:42,830 --> 00:10:49,620 Lehet, hogy először azt mondják, jó, hogy nekem, mondjuk, egy sor húrok hívott neveket. 276 00:10:49,620 --> 00:10:51,530 És én nem akarok a Bedrótozhatsz három itt. 277 00:10:51,530 --> 00:10:53,064 Amit akarok, hogy ott? 278 00:10:53,064 --> 00:10:55,730 , Hogy a diákok, mert ez csak állandó nyilvánította a tetején, 279 00:10:55,730 --> 00:10:57,860 csak azért, hogy ne kelljen Bedrótozhatsz Három több helyen. 280 00:10:57,860 --> 00:11:00,859 Így tudok változtatni egy helyen, és ez hatással van a változás mindenhol. 281 00:11:00,859 --> 00:11:04,470 És akkor talán nem karakterlánc otthont versenyző. 282 00:11:04,470 --> 00:11:10,250 >> És most, talán valami hasonló for (int i = 0; i 00:11:14,390 Szóval gépelés gyors, de ez talán ismerős szintaxist most. 284 00:11:14,390 --> 00:11:17,030 >> És most, ez volt az újabb. 285 00:11:17,030 --> 00:11:22,890 Ha azt akarom, hogy az i-edik hallgató nevét, azt hiszem, ezt csinálom. 286 00:11:22,890 --> 00:11:26,480 És akkor, nem nevek de házak zárójelbe én. 287 00:11:26,480 --> 00:11:29,930 Én ezt, getString, és hagyja, hogy menjek vissza, és oldja meg a vonal. 288 00:11:29,930 --> 00:11:30,430 Egyetért? 289 00:11:30,430 --> 00:11:31,200 Nem ért egyet? 290 00:11:31,200 --> 00:11:32,366 Ez nem túl felhasználóbarát. 291 00:11:32,366 --> 00:11:33,890 Még nem mondtam el a felhasználót, hogy mit kell tennie. 292 00:11:33,890 --> 00:11:36,520 >> De most, ha én is volna később, nézzük 293 00:11:36,520 --> 00:11:40,060 mondjuk, nyomtassa ki ezeket a dolgokat out-- így TODO később. 294 00:11:40,060 --> 00:11:42,330 Fogok csinálni többet Ez-- ez vitathatatlanul IS 295 00:11:42,330 --> 00:11:45,970 helyes végrehajtása szerzés nevek és házak, három 296 00:11:45,970 --> 00:11:48,870 közülük összesen egyes, egy felhasználó. 297 00:11:48,870 --> 00:11:51,280 >> De ez nem túl jó design, igaz? 298 00:11:51,280 --> 00:11:55,220 Mi van, ha a hallgató nem csak egy név és a ház, hanem egy azonosító számot, 299 00:11:55,220 --> 00:11:57,770 és a telefonszám, és egy e-mail cím, 300 00:11:57,770 --> 00:12:00,280 és talán a honlapján, és talán egy Twitter fogantyú, 301 00:12:00,280 --> 00:12:03,730 és számos más részletek kapcsolódó egy diák, vagy egy személy, 302 00:12:03,730 --> 00:12:04,610 általában. 303 00:12:04,610 --> 00:12:07,720 Hogyan kezdjük hozzá funkciókat a program? 304 00:12:07,720 --> 00:12:14,080 >> Nos, úgy érzem, a legegyszerűbb módja, esetleg lehet tenni valamit, mint, mondjuk, 305 00:12:14,080 --> 00:12:16,490 int ids versenyző. 306 00:12:16,490 --> 00:12:18,380 Szóval nem tud minden azonosítók ott. 307 00:12:18,380 --> 00:12:22,240 És akkor, valami mint a telefonszámok, 308 00:12:22,240 --> 00:12:24,400 Nem vagyok biztos benne, hogyan Kijelentem, hogy csak még. 309 00:12:24,400 --> 00:12:30,280 Szóval, menjünk előre, és csak hívás ez csiripelnek diákok, ami 310 00:12:30,280 --> 00:12:33,550 egy kicsit furcsa, de-- és egy csomó több területen. 311 00:12:33,550 --> 00:12:36,360 >> Kezdtem, hogy hatékonyan másolja be itt. 312 00:12:36,360 --> 00:12:39,416 És ez meg fog nőni szép ormótlan elég gyorsan, nem igaz? 313 00:12:39,416 --> 00:12:42,290 Nem lenne jó, ha lenne A világ egy adatstruktúrát ismert 314 00:12:42,290 --> 00:12:45,600 nem mint egy int vagy egy string, de valami magasabb szinten, egy absztrakció, így 315 00:12:45,600 --> 00:12:47,570 beszélni, vagyis a diák? 316 00:12:47,570 --> 00:12:50,220 C nem jött beépített funkcionalitás a diákok, 317 00:12:50,220 --> 00:12:52,260 de mi van, ha azt akartam, hogy ez ilyen? 318 00:12:52,260 --> 00:12:55,640 >> Nos, kiderült, megyek Egy fájl megnyitásához nevű structs.h itt, 319 00:12:55,640 --> 00:12:57,090 és meg tudod csinálni, hogy pontosan. 320 00:12:57,090 --> 00:12:58,290 És meg fogjuk kezdeni ezt most. 321 00:12:58,290 --> 00:13:01,490 És a motorháztető alatt a P Set Three, amit már ezt most. 322 00:13:01,490 --> 00:13:05,920 Nincs olyan dolog, mint a g rect vagy G ovális a programozási nyelv C. 323 00:13:05,920 --> 00:13:10,570 >> Hozzátartozók a Stanford végre azokat adattípusok ezzel a megközelítéssel itt, 324 00:13:10,570 --> 00:13:13,900 bejelentette, hogy saját új adatok típusok egy új kulcsszó 325 00:13:13,900 --> 00:13:16,744 hívott struct és egy másik egy úgynevezett typedef. 326 00:13:16,744 --> 00:13:19,660 És valóban, bár a szintaxis úgy néz ki, egy kicsit más a dolog 327 00:13:19,660 --> 00:13:23,550 láttunk korábban, elv, ez szuper egyszerű. 328 00:13:23,550 --> 00:13:25,297 >> Ez csak annyit jelent: "határozza meg a típus." 329 00:13:25,297 --> 00:13:27,255 Ez lesz a szerkezet, struktúra és 330 00:13:27,255 --> 00:13:29,400 olyan, mint egy konténer több dolgok. 331 00:13:29,400 --> 00:13:31,780 És ez a szerkezet lesz hogy egy string nevű nevet, 332 00:13:31,780 --> 00:13:33,210 és egy string nevű ház. 333 00:13:33,210 --> 00:13:37,520 És hívjuk, csak a kényelem, ez az egész adatstruktúra diák. 334 00:13:37,520 --> 00:13:40,320 >> Tehát abban a pillanatban kapsz a pontosvessző, akkor most 335 00:13:40,320 --> 00:13:43,280 létrehozta a saját adatait típusú úgynevezett diák 336 00:13:43,280 --> 00:13:46,420 hogy most áll mellett int, és úszó és a karakter, és a húr, 337 00:13:46,420 --> 00:13:50,270 és g rect, és g ovális, és a szám más dolog, az emberek találták. 338 00:13:50,270 --> 00:13:53,340 >> Szóval, mi hasznos erről most az, hogy ha visszamegyek 339 00:13:53,340 --> 00:13:57,430 a struct 0. és befejezni ezt a végrehajtás, amit írtam 340 00:13:57,430 --> 00:14:02,080 előre itt, észreveheti, hogy minden Az elkerülhetetlen messiness hogy 341 00:14:02,080 --> 00:14:05,490 volt, hogy kezdenek történni, ahogy hozzá telefonszámok és csiripelnek és minden 342 00:14:05,490 --> 00:14:07,370 ezeket más dolog, hogy egy diák definíciója, 343 00:14:07,370 --> 00:14:11,810 most már tömören csomagolva mivel csak egy sor a diákok. 344 00:14:11,810 --> 00:14:15,500 >> És minden azon hallgatók most többszörös dolgok belsejébe. 345 00:14:15,500 --> 00:14:16,930 Annak érdekében, hogy csak hagy egy kérdés. 346 00:14:16,930 --> 00:14:19,700 Hogyan kap meg a nevét, és a házat, és az azonosító, 347 00:14:19,700 --> 00:14:21,640 és bármi mást belül a hallgató? 348 00:14:21,640 --> 00:14:22,930 Szuper egyszerű, valamint. 349 00:14:22,930 --> 00:14:25,730 Új szintaxis, hanem egy egyszerű ötlet. 350 00:14:25,730 --> 00:14:29,239 >> Egyszerűen index a tömb, mint mi a múlt héten, és ez. 351 00:14:29,239 --> 00:14:31,030 És mi pontosan a új darab szintaxis? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 Csak., Ami azt jelenti: "bemenni a szerkezet és kap a mező hívott 354 00:14:35,880 --> 00:14:39,030 nevet, hogy a terület az úgynevezett ház, kap a mező nevű diák. " 355 00:14:39,030 --> 00:14:41,940 >> Tehát P Set Three, ha még mindig dolgozik, hogy a 356 00:14:41,940 --> 00:14:44,020 és a legtöbb ember még mindig is, rájönnek, hogy ahogy 357 00:14:44,020 --> 00:14:46,130 kezdi el használni a dolgok, mint g rects és g ovális 358 00:14:46,130 --> 00:14:50,201 és más dolog, hogy a jelek szerint nem származik Week nulla, egy, vagy két 359 00:14:50,201 --> 00:14:52,950 észre, hogy azért, mert a Stanford bejelentett néhány új adattípusok. 360 00:14:52,950 --> 00:14:56,160 >> És valóban, pontosan ezt fogjuk nem, illetve, hogy a P meg négy, amikor 361 00:14:56,160 --> 00:14:59,880 kezdjük kezelni a dolgokat például képek, kép, stb. 362 00:14:59,880 --> 00:15:02,882 Szóval ez csak egy teaser, és a mentális modell, ami jön. 363 00:15:02,882 --> 00:15:04,590 Most Halogattam egy kicsit ma reggel. 364 00:15:04,590 --> 00:15:09,560 Kedves volt kíváncsi, hogy mi A Microsoft tapéta ténylegesen 365 00:15:09,560 --> 00:15:10,310 úgy néz ki, mint a mai. 366 00:15:10,310 --> 00:15:15,200 És kiderül, hogy valaki 2006-ban valóban elment majdnem pontosan 367 00:15:15,200 --> 00:15:19,210 ugyanazon a helyen fotózni a valóságban amit úgy néz ki, mint az ezekben a napokban. 368 00:15:19,210 --> 00:15:21,380 A mező most egy kicsit benőtt. 369 00:15:21,380 --> 00:15:24,850 >> Így beszél most a képek, hozzuk vissza Daven ide 370 00:15:24,850 --> 00:15:26,890 a képernyőn, és Nicholas, és csak emlékeztetni, 371 00:15:26,890 --> 00:15:30,540 hogy ha szeretne csatlakozni hozzánk ebédre pénteken, egymás a szokásos URL 372 00:15:30,540 --> 00:15:31,440 itt. 373 00:15:31,440 --> 00:15:33,530 >> Szóval, ha nem hagyjuk ki hétfőn? 374 00:15:33,530 --> 00:15:35,140 Bemutattuk ezt a problémát, igaz? 375 00:15:35,140 --> 00:15:37,610 Ez látszólag a helyes végrehajtása csere, 376 00:15:37,610 --> 00:15:40,460 amely akkor vesz két ints, egy úgynevezett, egy úgynevezett b, 377 00:15:40,460 --> 00:15:44,130 cserélni őket, csakúgy, mint Laura volt itt a színpadon a tejet és a vizet, 378 00:15:44,130 --> 00:15:46,820 használatával egy ideiglenes változó, vagy egy üres poharat, 379 00:15:46,820 --> 00:15:50,540 hogy mi is tesz b egy és a b anélkül, hogy a rendetlenség a dolgokat. 380 00:15:50,540 --> 00:15:51,560 Mi egy változó. 381 00:15:51,560 --> 00:15:52,870 Úgy hívják temp. 382 00:15:52,870 --> 00:15:55,520 >> De mi volt az alapvető probléma ezzel a kóddal hétfőn? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 Mi volt a probléma? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Igen. 387 00:16:00,605 --> 00:16:01,970 >> Közönség: Tart több helyet. 388 00:16:01,970 --> 00:16:04,719 >> David J. MALAN: úgy több hely, mert én egy változó, 389 00:16:04,719 --> 00:16:05,400 és ez rendben van. 390 00:16:05,400 --> 00:16:07,300 Ez igaz, de én vagyok fogja mondani, hogy rendben van. 391 00:16:07,300 --> 00:16:10,030 Ez csak 32 bites a nagy rendszer a dolgok, tehát nem nagy ügy. 392 00:16:10,030 --> 00:16:10,655 Más gondolatok? 393 00:16:10,655 --> 00:16:12,572 Közönség: Csak swapok változók helyileg. 394 00:16:12,572 --> 00:16:13,571 David J. MALAN: Pontosan. 395 00:16:13,571 --> 00:16:15,090 Csak elcseréli változók helyileg. 396 00:16:15,090 --> 00:16:18,173 Mert minden alkalommal, amikor hívjon function-- mikor volt a tálcákat Annenberg 397 00:16:18,173 --> 00:16:19,840 utoljára, akkor legfontosabb az alján. 398 00:16:19,840 --> 00:16:23,560 Amint hívja a funkció az úgynevezett csere, csere nem kap x és y, 399 00:16:23,560 --> 00:16:24,400 az eredeti értékeket. 400 00:16:24,400 --> 00:16:26,392 Mit csere get, nem azt állítjuk? 401 00:16:26,392 --> 00:16:27,100 Közönség: másolatok. 402 00:16:27,100 --> 00:16:28,090 David J. MALAN: Tehát másolatát. 403 00:16:28,090 --> 00:16:31,120 Így kap egy-két, ha felidézni a példa utoljára, 404 00:16:31,120 --> 00:16:34,730 de egy példányát egy és két hogy sikeresen cserélve. 405 00:16:34,730 --> 00:16:38,550 De sajnos a végén, ezek az értékek még mindig ugyanaz. 406 00:16:38,550 --> 00:16:41,880 Így látjuk ezt a mi új barátja, remélhetőleg GDB, 407 00:16:41,880 --> 00:16:45,180 hogy te vagy a TF és a CA is már vezetni Önt felé a következők szerint. 408 00:16:45,180 --> 00:16:51,210 >> Így nincs csere visszahívás néz mint-- nézzük nyit Ez-- néz ki. 409 00:16:51,210 --> 00:16:54,160 Inicializáltuk x az egyik, y-két. 410 00:16:54,160 --> 00:16:55,620 Volt egy csomó nyomtatott f a. 411 00:16:55,620 --> 00:16:58,080 De aztán, a kulcs hívás itt volt a csere, ami 412 00:16:58,080 --> 00:17:00,260 pontosan a kód is Most láttam egy perce. 413 00:17:00,260 --> 00:17:03,180 Melyik helyes az első pillantásra, de funkcionálisan, 414 00:17:03,180 --> 00:17:06,800 ez a program nem működik, mert a nem állandóan cserélni x és y. 415 00:17:06,800 --> 00:17:10,190 >> Nézzük ezt egy gyors meleg itt a GDB, a ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 Egy rakás elsöprő információk Majd, hogy megszabaduljon a Control L most. 418 00:17:15,200 --> 00:17:17,516 És most megyek megy előre, és futtassa azt. 419 00:17:17,516 --> 00:17:19,349 És sajnos, az nem volt hasznos. 420 00:17:19,349 --> 00:17:22,355 Futott a program belsejében ez nevű program GDB, a debugger, 421 00:17:22,355 --> 00:17:23,730 de nem engedi piszkálni körül. 422 00:17:23,730 --> 00:17:26,229 >> Tehát hogyan tudok valójában szünet végrehajtás belül ez a program? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 Így szünet. 425 00:17:28,329 --> 00:17:32,340 És tudtam törni bármelyik sorszám, egy, 10, 15. 426 00:17:32,340 --> 00:17:35,530 De én is megtörni jelképesen mondván szünet fő. 427 00:17:35,530 --> 00:17:38,980 És ez fog meg egy kis szünetet pont, látszólag a sor 16 fő. 428 00:17:38,980 --> 00:17:40,050 És hol van vonal 16? 429 00:17:40,050 --> 00:17:42,960 Menjünk fel a kódot és menj fel a noswap. 430 00:17:42,960 --> 00:17:46,930 És valóban, vonal 16 a legelső a programban. 431 00:17:46,930 --> 00:17:52,130 >> Tehát most, ha megyek előre és típusa futni ebben az időben, az Enter, akkor megállt. 432 00:17:52,130 --> 00:17:53,080 Szóval piszkálni körül. 433 00:17:53,080 --> 00:17:55,716 Nyomtassa x-- miért x nulla? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 És figyelmen kívül hagyja a dollár jel. 436 00:17:57,830 --> 00:17:59,725 Ez csak a szakértő A program használata. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 Miért x nulla a pillanatban? 439 00:18:03,140 --> 00:18:03,640 Igen. 440 00:18:03,640 --> 00:18:07,061 >> Közönség: Megállt mielőtt vonal 16, valójában nem on-line 16. 441 00:18:07,061 --> 00:18:08,060 David J. MALAN: Pontosan. 442 00:18:08,060 --> 00:18:11,630 GDB alapértelmezésben szünetelteti végrehajtás előtt sor 16. 443 00:18:11,630 --> 00:18:14,820 Így azt nem hajtották végre, ami azt az x egy ismeretlen érték. 444 00:18:14,820 --> 00:18:17,150 És szerencsénk volt, hogy ez az valami tiszta, mint a nulla. 445 00:18:17,150 --> 00:18:20,310 Tehát most, ha azt írja a következő, most végre 16. 446 00:18:20,310 --> 00:18:22,000 Ez vár rám, hogy végre 17. 447 00:18:22,000 --> 00:18:23,400 Hadd menjek előre, és a nyomtatási x. 448 00:18:23,400 --> 00:18:24,094 Ez az egyik. 449 00:18:24,094 --> 00:18:25,260 Hadd menjek előre, és a nyomtatási y. 450 00:18:25,260 --> 00:18:26,176 Mit kell most látni? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> KÖZÖNSÉG: [nem hallható] 453 00:18:28,560 --> 00:18:29,165 >> David J. MALAN: Egy kicsit hangosabban. 454 00:18:29,165 --> 00:18:30,040 >> KÖZÖNSÉG: [nem hallható] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 David J. MALAN: Nem egészen egy konszenzus. 457 00:18:32,120 --> 00:18:34,760 Szóval igen, azt látjuk, néhány szemetet érték. 458 00:18:34,760 --> 00:18:37,862 Most, y 134514064 ott. 459 00:18:37,862 --> 00:18:39,320 Nos, ez csak valami szemét érték. 460 00:18:39,320 --> 00:18:41,350 Saját program a RAM különböző célokra. 461 00:18:41,350 --> 00:18:42,350 Van más funkciókat. 462 00:18:42,350 --> 00:18:44,040 Más emberek azt írta benne a számítógép. 463 00:18:44,040 --> 00:18:46,789 Tehát ezeket a biteket óta használják más értékek, és mit látok 464 00:18:46,789 --> 00:18:49,470 a maradványait néhány korábbi ezzel a memóriát. 465 00:18:49,470 --> 00:18:53,350 >> Tehát nem nagy ügy, mert amint mint az I. típusú mellett, majd nyomtassa y, 466 00:18:53,350 --> 00:18:55,640 ez inicializálja a az érték, amit szeretnék. 467 00:18:55,640 --> 00:18:57,400 Tehát most, menjünk előre egy kicsit gyorsabban. 468 00:18:57,400 --> 00:18:58,540 N a következő. 469 00:18:58,540 --> 00:18:59,570 Csináljuk újra. 470 00:18:59,570 --> 00:19:00,530 Csináljuk újra. 471 00:19:00,530 --> 00:19:02,404 De én nem akarom, hogy elérje ide, mert ha én 472 00:19:02,404 --> 00:19:05,110 szeretné látni, mi folyik odabent swap, mi a parancs? 473 00:19:05,110 --> 00:19:05,520 >> Közönség: lépések. 474 00:19:05,520 --> 00:19:06,436 >> David J. MALAN: lépések. 475 00:19:06,436 --> 00:19:09,800 Tehát ez a lépés nekem egy funkció, ahelyett felette. 476 00:19:09,800 --> 00:19:12,270 És most, hogy egy kicsit rejtélyes őszintén, de ez csak 477 00:19:12,270 --> 00:19:14,581 azt mondta, én vagyok a 33. sor most. 478 00:19:14,581 --> 00:19:15,580 És csináljuk újra. 479 00:19:15,580 --> 00:19:16,080 Print temp. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 Szemét érték, negatív ebben az időben, de ez csak még egy szemetes értéket. 482 00:19:20,170 --> 00:19:22,810 Tehát lássuk a következő, nyomtatás temp. 483 00:19:22,810 --> 00:19:27,130 Ez inicializált 1, ami volt az x értékét, más néven a. 484 00:19:27,130 --> 00:19:29,110 >> Most hol vannak a A és X jön? 485 00:19:29,110 --> 00:19:32,510 Nos, hirdetmény fő, mi hívott ezeket az értékeket az x és y. 486 00:19:32,510 --> 00:19:34,740 Ezután át őket cserélni a következők szerint. 487 00:19:34,740 --> 00:19:37,010 X volt előbb, vessző y. 488 00:19:37,010 --> 00:19:40,020 És akkor, csere nevezhetnénk őket x és y. 489 00:19:40,020 --> 00:19:42,630 De az egyszerűség kedvéért, ez hívja őket, a és b. 490 00:19:42,630 --> 00:19:45,970 De a és b most lesz példányban x és y, ill. 491 00:19:45,970 --> 00:19:50,660 >> Tehát, ha visszamegyek GDB, temp most az egyik, és a ma már az egyik. 492 00:19:50,660 --> 00:19:56,130 De ha a következő, és most nem nyomtat Egy, a már költözött át. 493 00:19:56,130 --> 00:20:00,030 A tejet önteni a korábbi narancslé poharába, vagy fordítva. 494 00:20:00,030 --> 00:20:04,750 >> És ha a következő újra, és most ha nyomtassa ki mint a józanság ellenőrzése, 495 00:20:04,750 --> 00:20:07,687 A még két, de b most az egyik. 496 00:20:07,687 --> 00:20:08,770 Őszintén szólva, még mindig ott van. 497 00:20:08,770 --> 00:20:10,670 Nem érdekel, mi temp is. 498 00:20:10,670 --> 00:20:16,850 De amint most írja, mondjuk, továbbra is, hogy menjen vissza, most én vagyok a végén 499 00:20:16,850 --> 00:20:17,480 a programot. 500 00:20:17,480 --> 00:20:20,730 És sajnos, az x még mindig az egyik és y még kettő. 501 00:20:20,730 --> 00:20:22,272 >> Tehát mi volt a haszna GDB ott? 502 00:20:22,272 --> 00:20:23,980 Ez nem segített kijavítani A probléma önmagában, 503 00:20:23,980 --> 00:20:26,265 de ez remélhetőleg segíteni értem megvalósításával 504 00:20:26,265 --> 00:20:30,000 hogy igen, az én logika helyes, de a kód végül nem rendelkező 505 00:20:30,000 --> 00:20:31,450 állandó hatás. 506 00:20:31,450 --> 00:20:34,570 Szóval ez a probléma vagyunk fog most megoldani ma. 507 00:20:34,570 --> 00:20:37,870 >> De térjünk oda útján ezt. 508 00:20:37,870 --> 00:20:39,230 Karakterlánc egy hazugság. 509 00:20:39,230 --> 00:20:41,860 Ez is nem egy adattípust hogy létezik C. Ez 510 00:20:41,860 --> 00:20:44,750 óta szinonimája néhány idő valami mást, 511 00:20:44,750 --> 00:20:47,300 és mi is azt mutatják, hogy a következő. 512 00:20:47,300 --> 00:20:53,282 >> Hadd menjek előre, és nyissa fel a program neve összehasonlítani-0-ra. 513 00:20:53,282 --> 00:20:56,240 És ahelyett, hogy írja ezt ki, kezdjük a séta a kód 514 00:20:56,240 --> 00:20:58,040 Már írtam, de ez csak egy pár sort. 515 00:20:58,040 --> 00:20:59,570 Szóval ez az összehasonlítandó-0-ra. 516 00:20:59,570 --> 00:21:02,380 És az első dolog, amit csinálok kezd egy sort. 517 00:21:02,380 --> 00:21:05,610 >> De figyeljük meg, hogy mire vagyok Ennek az első alkalommal. 518 00:21:05,610 --> 00:21:07,910 Mi a különbség egyértelműen a vonal 21? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 Valójában, várj egy percet. 521 00:21:11,402 --> 00:21:12,110 Ez példány kettő. 522 00:21:12,110 --> 00:21:13,568 Hogy még csak nem is a megfelelő programot. 523 00:21:13,568 --> 00:21:14,780 Rendben, spoiler. 524 00:21:14,780 --> 00:21:16,890 Rendben, akkor nem számít, hogy. 525 00:21:16,890 --> 00:21:18,520 Ez a válasz, hogy a jövő kérdése. 526 00:21:18,520 --> 00:21:21,450 >> Itt összehasonlítani-0, és én vagyok arról, hogy egy sort. 527 00:21:21,450 --> 00:21:22,435 Program sokkal egyszerűbb. 528 00:21:22,435 --> 00:21:23,560 Tehát ez egyértelmű. 529 00:21:23,560 --> 00:21:28,070 Ez olyan, mint hét, hét két dolog abban a pillanatban. húr s = getString. 530 00:21:28,070 --> 00:21:29,700 Most azt mondom, hogy újra itt. 531 00:21:29,700 --> 00:21:31,830 húr t = getString. 532 00:21:31,830 --> 00:21:35,300 És akkor, az utolsó dolog, amit ebben a programot, mint a neve is sugallja, 533 00:21:35,300 --> 00:21:37,090 nem fogom próbálja összehasonlítani őket. 534 00:21:37,090 --> 00:21:40,709 >> Tehát, ha s, az első húr, egyenlő = t, akkor én vagyok 535 00:21:40,709 --> 00:21:42,250 fogja mondani, hogy írja be ugyanezt. 536 00:21:42,250 --> 00:21:44,291 Más, én fogok mondani beírt különböző dolog. 537 00:21:44,291 --> 00:21:45,880 Szóval lefordítani és futtatni ezt a programot. 538 00:21:45,880 --> 00:21:48,481 Tehát, hogy összehasonlítani nulla. 539 00:21:48,481 --> 00:21:48,980 Jól néz ki. 540 00:21:48,980 --> 00:21:50,490 Nem fordítási hibák. 541 00:21:50,490 --> 00:21:52,386 >> Hadd menjek előre most és írja ./compare-0-ra. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Hadd menjek előre, és mond valamit : Daven és valami: Rob. 544 00:21:59,220 --> 00:22:00,450 És az I. típusú különböző dolog. 545 00:22:00,450 --> 00:22:01,250 Eddig jó. 546 00:22:01,250 --> 00:22:02,680 Program helyesnek tűnik. 547 00:22:02,680 --> 00:22:03,880 >> De fussunk újra. 548 00:22:03,880 --> 00:22:05,800 Mondj valamit: Gabe. 549 00:22:05,800 --> 00:22:07,140 Mondj valamit: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 Rendben. 552 00:22:09,020 --> 00:22:10,851 Talán megüt a szóköz vagy valami funky. 553 00:22:10,851 --> 00:22:11,600 Csináljuk újra. 554 00:22:11,600 --> 00:22:13,020 Így Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 Különböző dolog. 559 00:22:17,330 --> 00:22:19,430 Szóval, mi folyik itt? 560 00:22:19,430 --> 00:22:23,200 >> Tehát ez a két sor kód, getString hogy hívják kétszer. 561 00:22:23,200 --> 00:22:25,760 És akkor én vagyok csak próbálunk összehasonlítani s és t. 562 00:22:25,760 --> 00:22:28,370 De ami igazán akkor folyik itt? 563 00:22:28,370 --> 00:22:31,180 Nos, a kézírás mindjárt hentes ezt a példát kissé. 564 00:22:31,180 --> 00:22:34,630 És nézzünk tulajdonképpen dobja ezt fel itt is. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> Tehát van egy sor, mint a húr s = getString. 567 00:22:45,712 --> 00:22:48,295 Szóval ez csak az első érdekes sort a program. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 De mi ebben az időben már folyik a motorháztető alatt? 570 00:22:52,974 --> 00:22:55,890 Nos, a bal oldalon a húr, amely bizonyos típusú változó, 571 00:22:55,890 --> 00:22:56,785 és hívják s. 572 00:22:56,785 --> 00:23:00,019 Úgy tudom, hogy ez a memória, vagy RAM, a gépemen valahogy. 573 00:23:00,019 --> 00:23:02,060 Így fogok elvontan felhívni, hogy a tér. 574 00:23:02,060 --> 00:23:04,820 32 bit, kiderül, de erről bővebben a jövőben. 575 00:23:04,820 --> 00:23:06,410 És akkor, mi folyik itt? 576 00:23:06,410 --> 00:23:08,700 >> Nos, getString nyilvánvalóan kap egy húr a felhasználó. 577 00:23:08,700 --> 00:23:11,360 És getString kapott Zamyla vagy Gabe vagy Daven. 578 00:23:11,360 --> 00:23:14,640 Úgyhogy választani az első e, ami Daven. 579 00:23:14,640 --> 00:23:19,174 Olyan hatékonyan, mi getString kapott engem az első eset volt a D-a-v-e-n. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 És akkor mit tett ez ad nekem titokban? 582 00:23:25,045 --> 00:23:25,920 KÖZÖNSÉG: [nem hallható] 583 00:23:25,920 --> 00:23:28,720 David J. MALAN: Igen, A / 0 vagy null karaktert. 584 00:23:28,720 --> 00:23:30,550 Tehát gyakorlatilag kaptam egy húr. 585 00:23:30,550 --> 00:23:34,550 De mi már tudjuk, a korábbi úgy néz ki, hogy a szöveg csak egy tömb 586 00:23:34,550 --> 00:23:37,895 A karakterek, és ez megszüntetheti ez a különleges sentinel karakter / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> De ha ez igaz, és ez a tér, 589 00:23:42,310 --> 00:23:44,160 ez nyilvánvalóan sokkal nagyobb téglalap. 590 00:23:44,160 --> 00:23:46,830 És valóban, ez az, Azt állítom, csak 32 bit. 591 00:23:46,830 --> 00:23:49,500 És ez nyilvánvalóan több, mint 32 bit, mivel ez valószínűleg 592 00:23:49,500 --> 00:23:51,583 nyolc plusz nyolc plusz nyolc plusz nyolc plusz nyolc, 593 00:23:51,583 --> 00:23:53,320 csak azért, mert byte ASCII. 594 00:23:53,320 --> 00:23:57,030 Hogy a fenébe megyünk, hogy illeszkedjen Daven ebbe a kis dobozba itt? 595 00:23:57,030 --> 00:23:59,880 >> Nos, mi getString valójában csinál? 596 00:23:59,880 --> 00:24:03,680 Nos, ez a rács itt jelent a számítógép memóriájában vagy RAM. 597 00:24:03,680 --> 00:24:07,564 Szóval önkényesen azt mondják, hogy ha minden ilyen bájt képvisel, 598 00:24:07,564 --> 00:24:09,730 akkor el tudunk képzelni az egyes bájt, mint amelyek egy címet, 599 00:24:09,730 --> 00:24:13,830 mint 33 Oxford Street, vagy a 34. Oxford Street, vagy a 35 Oxford Street. 600 00:24:13,830 --> 00:24:16,700 >> Szóval, mint otthon van címe és épületek címek, 601 00:24:16,700 --> 00:24:19,810 így nem egyedi bájt memória van címek és számok 602 00:24:19,810 --> 00:24:21,042 hogy egyedileg azonosítani őket. 603 00:24:21,042 --> 00:24:22,000 Na, ez önkényes. 604 00:24:22,000 --> 00:24:25,370 De, hogy ez egyszerű, megyek használni hexadecimális csak megállapodás szerint, 605 00:24:25,370 --> 00:24:28,200 de a 0x jelent semmit más mint "ez hexadecimális." 606 00:24:28,200 --> 00:24:31,030 és én fogom azt állítani, hogy a "D" végül a Byte One a memóriában. 607 00:24:31,030 --> 00:24:34,210 >> Nincs semmi más folyik memória, így Daven van az első helyen 608 00:24:34,210 --> 00:24:35,509 A Byte One. 609 00:24:35,509 --> 00:24:36,800 Ez akkor lesz 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 Ez lesz a 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 Ez lesz 0x4. 614 00:24:41,800 --> 00:24:43,025 Ez lesz a 0x5. 615 00:24:43,025 --> 00:24:44,025 Ez lesz 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> De ha egyszer elkezdesz gondolkodni arról, hogy mi a számítógép csinál 618 00:24:48,290 --> 00:24:50,710 a motorháztető alatt, akkor elkezd következtetni 619 00:24:50,710 --> 00:24:54,960 hogyan, néhány évvel ezelőtt, lenne hajtotta végre C is. 620 00:24:54,960 --> 00:24:58,360 Mi getString valószínűleg returning-- mert 621 00:24:58,360 --> 00:25:00,946 úgy érzi, hogy nem visszatérő Daven, önmagában, 622 00:25:00,946 --> 00:25:03,320 mert ő biztosan nem fogja hogy beleférjen a kis box-- 623 00:25:03,320 --> 00:25:05,090 akkor mi getString valószínűleg visszatér? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> KÖZÖNSÉG: [nem hallható] 626 00:25:08,920 --> 00:25:10,540 >> David J. MALAN: A helyszín Daven. 627 00:25:10,540 --> 00:25:12,770 És ez már ezt azóta Week One. 628 00:25:12,770 --> 00:25:16,150 Mi getString igazán vissza nem karakterlánc, önmagában. 629 00:25:16,150 --> 00:25:17,780 Ez az egyik a kis hazugságokat. 630 00:25:17,780 --> 00:25:22,520 Ez visszatérő a címét húr a memóriában, az egyedi cím. 631 00:25:22,520 --> 00:25:24,820 Daven él 33 Oxford Street. 632 00:25:24,820 --> 00:25:29,310 De még tömören, Gavin él A 0x1, Cím Number One. 633 00:25:29,310 --> 00:25:32,280 >> Tehát mi lesz ebbe a kis doboz akkor, hogy világos legyen, 634 00:25:32,280 --> 00:25:35,930 csak a címe, hogy a húr. 635 00:25:35,930 --> 00:25:38,110 Tehát ebben az időben, ez a már folyik. 636 00:25:38,110 --> 00:25:41,650 De mi ez utal most az, hogy ha az összes s 637 00:25:41,650 --> 00:25:44,710 egy szám belsejébe, aki megállítani, a programozó, 638 00:25:44,710 --> 00:25:47,970 attól, hogy bármilyen számot minden változó és csak ugrás 639 00:25:47,970 --> 00:25:49,080 az, hogy a darab a memória? 640 00:25:49,080 --> 00:25:51,320 És valóban, majd meglátjuk ez egy fenyegetés legközelebb. 641 00:25:51,320 --> 00:25:53,500 >> De most, ez olyan elégtelen. 642 00:25:53,500 --> 00:25:55,630 Ha azt mondom, hogy nekem a húr, adsz nekem Daven. 643 00:25:55,630 --> 00:25:57,230 De nem igazán ad nekem Daven. 644 00:25:57,230 --> 00:25:59,310 Minden adsz nekem Daven címét. 645 00:25:59,310 --> 00:26:04,310 Hogyan akkor tudom biztosan ahol Daven kezdődik és ends-- 646 00:26:04,310 --> 00:26:07,140 A történet kezd weird-- ahol Daven kezdődik és végződik, 647 00:26:07,140 --> 00:26:10,435 , majd a következő string memória kezd? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> Nos, ha átadod nekem az elején Daven, 650 00:26:13,620 --> 00:26:17,230 lényegében, hogyan tudom ahol a végén az ő neve? 651 00:26:17,230 --> 00:26:20,550 Ez a különleges null karakter, ami annál is inkább fontosabb most 652 00:26:20,550 --> 00:26:23,040 ha húrok alatt a Hood egyszerűen azonosítható 653 00:26:23,040 --> 00:26:25,820 egyedülálló a helyük a memóriában. 654 00:26:25,820 --> 00:26:28,130 Tehát ebben az időben, hogy ez mi folyik. 655 00:26:28,130 --> 00:26:32,470 >> Tehát, ha megnézzük most A kód itt, magyarázza 656 00:26:32,470 --> 00:26:35,790 ha lenne a hibát a 26. 657 00:26:35,790 --> 00:26:39,560 Miért Zamyla és Zamyla más? 658 00:26:39,560 --> 00:26:41,330 Miért van Gabe és Gabe más? 659 00:26:41,330 --> 00:26:42,154 Igen, vissza. 660 00:26:42,154 --> 00:26:43,390 >> Közönség: A különböző címekre. 661 00:26:43,390 --> 00:26:45,931 >> David J. MALAN: Egyszerűen azért, mert vannak különböző címekre. 662 00:26:45,931 --> 00:26:48,820 Mert amikor telefonál getString megint, amit megteszek gyorsan itt 663 00:26:48,820 --> 00:26:52,870 ha ez a második vonal, húr t, mint én abban a programban, 664 00:26:52,870 --> 00:26:55,030 megegyezik egy másik hívás getString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 A következő alkalommal, amikor hívni GetString, megyek 667 00:26:58,670 --> 00:27:00,190 hogy egy másik darab memória. 668 00:27:00,190 --> 00:27:02,220 >> GetString megengedett kérni a működési 669 00:27:02,220 --> 00:27:03,800 rendszer több és több memóriát. 670 00:27:03,800 --> 00:27:07,894 Ez nem fog újra ugyanazt hat bájt minden egyes alkalommal. 671 00:27:07,894 --> 00:27:09,810 Ez lesz, hogy egy új darab memória, amely 672 00:27:09,810 --> 00:27:12,780 azt t fog kapni más érték itt. 673 00:27:12,780 --> 00:27:15,380 >> Tehát, amikor én s értéke = t, te nem összehasonlítása 674 00:27:15,380 --> 00:27:17,880 D ez ellen, és egy ellen ez és az V. ellen. 675 00:27:17,880 --> 00:27:19,588 Te összehasonlítjuk ezt ellen, amely 676 00:27:19,588 --> 00:27:24,020 őszintén szólva elég useful-- useless-- elég használhatatlan, mert aki igazán 677 00:27:24,020 --> 00:27:25,830 érdekel, ahol a húrok a memória? 678 00:27:25,830 --> 00:27:26,850 >> És valóban, mi nem. 679 00:27:26,850 --> 00:27:28,980 És mi nem fogunk indítsa különösen gondoskodó. 680 00:27:28,980 --> 00:27:34,180 Csak olyan mértékben, hogy a hibákat támadhatnak és a biztonsági fenyegetések merülnek akaratát 681 00:27:34,180 --> 00:27:36,100 valójában elkezd érdekel ez. 682 00:27:36,100 --> 00:27:37,230 Szóval megoldhatja a problémát. 683 00:27:37,230 --> 00:27:39,650 Kiderült, tudod javítani szuper egyszerűen. 684 00:27:39,650 --> 00:27:42,600 >> És nézzünk valójában, mielőtt azt mutatják, hogy újra, mi lenne 685 00:27:42,600 --> 00:27:47,170 tenni, ha egy CS50 osztály, és meg kellett végrehajtani 686 00:27:47,170 --> 00:27:48,600 összehasonlítás ellen két szálakat. 687 00:27:48,600 --> 00:27:51,440 Akkor nyilvánvalóan nem csak használni s egyenlő = t. 688 00:27:51,440 --> 00:27:54,090 De logikusan, hogy milyen lenne összehasonlítani ezt a fonalat 689 00:27:54,090 --> 00:27:56,370 szemben ez a karakterlánc a C kódot? 690 00:27:56,370 --> 00:27:56,880 Igen. 691 00:27:56,880 --> 00:27:58,780 >> Közönség: Csak nem a A hurok [nem hallható] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 David J. MALAN: Tökéletes. 694 00:28:01,670 --> 00:28:02,900 KÖZÖNSÉG: [nem hallható] 695 00:28:02,900 --> 00:28:03,310 David J. MALAN: Igen. 696 00:28:03,310 --> 00:28:05,390 Csak használ egy for ciklus vagy while ciklus vagy bármi. 697 00:28:05,390 --> 00:28:08,710 De csak alkalmazza az alapötlet, hogy ha Ez a darab a memória, vagy egy tömb 698 00:28:08,710 --> 00:28:11,590 és ez az, végighaladni mind ugyanabban az időben. 699 00:28:11,590 --> 00:28:12,960 És vessük össze a leveleket. 700 00:28:12,960 --> 00:28:14,260 >> És neked, hogy egy kis óvatos, mert 701 00:28:14,260 --> 00:28:16,247 nem akarnak egy ujj hogy megy a többi 702 00:28:16,247 --> 00:28:18,080 mert az egyik húr hosszabb, mint a másik. 703 00:28:18,080 --> 00:28:21,380 Így fogsz szeretné ellenőrizni ez a különleges érték a végén, null. 704 00:28:21,380 --> 00:28:24,017 De ez tényleg az, a end, ennyire egyszerű. 705 00:28:24,017 --> 00:28:26,100 És őszintén szólva, nem kell kell újra feltalálni a kereket. 706 00:28:26,100 --> 00:28:27,960 Itt Version Two. 707 00:28:27,960 --> 00:28:32,910 És mit fogok mondani, az, hogy ahelyett, hogy összehasonlítjuk s egyenlő = t, 708 00:28:32,910 --> 00:28:38,964 Én inkább akartam mondani, ha húr összehasonlítása s vessző t egyenlő = 0-ra. 709 00:28:38,964 --> 00:28:40,130 Nos, mi húr között? 710 00:28:40,130 --> 00:28:43,046 >> Kiderült, hogy ez a funkció, amely jön a C, melynek célja az életben 711 00:28:43,046 --> 00:28:44,650 össze kell hasonlítani a két szálakat. 712 00:28:44,650 --> 00:28:48,300 És keverjük összehasonlítani, ha azt olvassuk, hogy man oldalt vagy a dokumentációt CS50 713 00:28:48,300 --> 00:28:50,630 utalás, ez lesz csak mondom, hogy feltűnést 714 00:28:50,630 --> 00:28:55,730 összehasonlítani hozamok negatív szám vagy pozitív szám vagy nulla, 715 00:28:55,730 --> 00:28:57,660 ahol nulla azt jelenti, ők egyenlő. 716 00:28:57,660 --> 00:28:58,570 >> Így csak találgatás. 717 00:28:58,570 --> 00:29:00,390 Mi lehet jelent az, ha keverjük összehasonlítása visszatér 718 00:29:00,390 --> 00:29:02,110 negatív érték vagy pozitív érték? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 Közönség: Nagyobb vagy kisebb. 721 00:29:04,285 --> 00:29:05,570 David J. MALAN: Igen, nagyobb vagy kisebb, mint. 722 00:29:05,570 --> 00:29:08,640 Tehát, ha akart rendezni egy egész csokor húrok a dictionary-- 723 00:29:08,640 --> 00:29:12,975 ahogy előbb-utóbb le a road-- tökéletes funkció használata potenciálisan, 724 00:29:12,975 --> 00:29:15,850 mert meg fog tenni, hogy a összehasonlítása húrok az Ön számára, és mondd meg 725 00:29:15,850 --> 00:29:20,060 Ön nem egy szó, mielőtt b, vagy nem b elé a betűrendben. 726 00:29:20,060 --> 00:29:21,490 Meg tudjuk csinálni, hogy pontosan. 727 00:29:21,490 --> 00:29:23,620 >> És észre tettem egy másik dolog ebben a példában. 728 00:29:23,620 --> 00:29:26,870 Mi más változott magasabb fel ebben a fő funkciója? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 Char *. 731 00:29:29,350 --> 00:29:31,150 És ez a másik fehér hazugság. 732 00:29:31,150 --> 00:29:33,750 Egész idő alatt, amikor már Készítettem húr, 733 00:29:33,750 --> 00:29:38,350 akkor már titokban átírta string char *, hogy a csengés valójában 734 00:29:38,350 --> 00:29:39,270 érti meg. 735 00:29:39,270 --> 00:29:42,450 >> Más szóval, a CS50.h és mivel mi végül látni, 736 00:29:42,450 --> 00:29:45,950 tettünk egy szinonima nevű húr ez ugyanaz, mint a char *. 737 00:29:45,950 --> 00:29:49,910 És most tudom, csak hogy a *, Ebben az összefüggésben, legalábbis 738 00:29:49,910 --> 00:29:51,286 jelent a cím. 739 00:29:51,286 --> 00:29:52,210 >> A címe mi? 740 00:29:52,210 --> 00:29:56,390 Nos, az a tény, hogy azt mondtam, char *, és nem int * vagy float * 741 00:29:56,390 --> 00:30:00,820 azt jelenti, hogy char * az címét a kar. 742 00:30:00,820 --> 00:30:06,770 Szóval ez a kis doboz itt, más néven húr, tényleg típusú char * 743 00:30:06,770 --> 00:30:10,490 amely egyszerűen egy divatos szóval, ebben a dobozban megy egy címet. 744 00:30:10,490 --> 00:30:12,430 És mit jelent, hogy a cím utal? 745 00:30:12,430 --> 00:30:13,780 Úgy tűnik, a kar. 746 00:30:13,780 --> 00:30:16,410 >> De teljesen Van int * és egyéb dolgok. 747 00:30:16,410 --> 00:30:20,790 De most, char * valóban a leginkább egyszerű és az egyik érdek. 748 00:30:20,790 --> 00:30:23,310 Így ez a probléma lesz emelkedik, mégis, újra. 749 00:30:23,310 --> 00:30:24,830 >> Tegyük fel, hogy nyissa meg ezt a programot. 750 00:30:24,830 --> 00:30:27,670 Lássuk most már tudjuk megjósolni mi a baj ezzel a kóddal. 751 00:30:27,670 --> 00:30:31,140 Tehát ebben a programban, copy-0, vagyok menni előre, és újra hívni 752 00:30:31,140 --> 00:30:34,190 GetString és tárolja az értéket s. 753 00:30:34,190 --> 00:30:38,800 >> És akkor, miért csinálom ezt, Csak emlékeztetőül a hét múlt? 754 00:30:38,800 --> 00:30:40,960 Azt mondtam, hogy getString néha vissza null. 755 00:30:40,960 --> 00:30:42,793 Mit jelent, ha GetString vissza null? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 Valami nem stimmel. 758 00:30:46,034 --> 00:30:48,950 Ez valószínűleg azt jelenti, a szöveg túl nagy, a számítógép a memória. 759 00:30:48,950 --> 00:30:51,724 Ez történik szuper, szuper, szuper ritkán, de megtörténhet. 760 00:30:51,724 --> 00:30:53,890 Azt akarjuk, hogy ellenőrizze azt, és ez minden, amit csinálunk. 761 00:30:53,890 --> 00:30:57,910 >> Mert akkor most látni, ha nem vizsgáljuk meg szokásos dolgok 762 00:30:57,910 --> 00:31:00,870 mint null, lehet, hogy tényleg elkezd menni 763 00:31:00,870 --> 00:31:03,106 a címeket memória érvénytelen. 764 00:31:03,106 --> 00:31:05,980 És fogsz kezdeni indukáló egyre több és több szegmentáció hibák. 765 00:31:05,980 --> 00:31:08,360 Vagy egy Mac vagy PC, csak ami a számítógép lefagy 766 00:31:08,360 --> 00:31:10,340 vagy program, hogy fagyassza be, esetleg. 767 00:31:10,340 --> 00:31:14,930 >> Szóval, most azt állítják, a copy-0.c, hogy én megyek másolni ezeket a húrok útján 768 00:31:14,930 --> 00:31:15,685 A 28. sor. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 És akkor megyek igényelni az alján 771 00:31:18,750 --> 00:31:21,430 hogy itt fogok megváltoztatni az egyiket. 772 00:31:21,430 --> 00:31:22,330 >> Így észre. 773 00:31:22,330 --> 00:31:24,370 Hívom a régi barát strlen. 774 00:31:24,370 --> 00:31:28,960 És csak magyarázni angolul mi ez a sor 34 csinál? 775 00:31:28,960 --> 00:31:32,480 Mit t konzol 0 képviseli a bal oldalon. 776 00:31:32,480 --> 00:31:32,980 Igen. 777 00:31:32,980 --> 00:31:34,339 >> Közönség: első karaktere t? 778 00:31:34,339 --> 00:31:35,880 David J. MALAN: első karaktere t. 779 00:31:35,880 --> 00:31:36,379 Ennyi. 780 00:31:36,379 --> 00:31:40,024 Első karakterét t, azt akarom, rendelni a nagybetűs változatát 781 00:31:40,024 --> 00:31:41,190 Az első karakter t. 782 00:31:41,190 --> 00:31:43,200 Szóval ez kihasználva az első betű. 783 00:31:43,200 --> 00:31:46,340 És akkor, az utolsó dolog, amit teszek ebben a programban azt állítom itt 784 00:31:46,340 --> 00:31:50,340 az eredeti, s, és itt van a másolat, t. 785 00:31:50,340 --> 00:31:54,610 >> Alapján azonban a történet már csak elmondta, hogy mi vonósok valójában, 786 00:31:54,610 --> 00:31:57,520 mi is sor 28 valóban csinál, és mi a 787 00:31:57,520 --> 00:31:59,405 az ebből eredő hiba lesz Ahhoz, hogy a képernyőn? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> Tehát az első, az első kérdés, 28. 790 00:32:03,500 --> 00:32:09,040 Mi a húr t = s valóban csinál? 791 00:32:09,040 --> 00:32:16,430 Ha van a bal oldali oldal itt húr t = s; 792 00:32:16,430 --> 00:32:19,400 hogy ad nekem egy doboz itt és egy doboz itt. 793 00:32:19,400 --> 00:32:25,530 És tegyük fel, ez a cím 0x, mondjuk, 50 ebben az időben, önkényesen. 794 00:32:25,530 --> 00:32:28,847 Mit húr t = s nem a motorháztető alatt? 795 00:32:28,847 --> 00:32:30,340 >> KÖZÖNSÉG: [nem hallható] 796 00:32:30,340 --> 00:32:34,100 >> David J. MALAN: tárolja a memória foglalkozik ott, tehát 0x50 megy oda. 797 00:32:34,100 --> 00:32:37,980 Tehát, ha most megyek az első karakter t és nagybetű azt, 798 00:32:37,980 --> 00:32:39,535 Mit is hatékonyan tesz s? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 Én tényleg ugyanazt a dolgot, ugye? 801 00:32:43,450 --> 00:32:47,680 Mert ha Address 0x50-- és csak azt Nem sok hely a fedélzeten van, 802 00:32:47,680 --> 00:32:51,750 de azt feltételezik, hogy ez a 0x50 le itt, valahol a számítógép memóriájában. 803 00:32:51,750 --> 00:32:55,825 >> És én, például, Gabe kisbetűvel itt, mint ez. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 És azt mondtam t tartó 0 lesz aktiválásra. 806 00:33:01,980 --> 00:33:04,860 Nos, t konzol a 0 Az első betű a t. 807 00:33:04,860 --> 00:33:07,840 Tehát kis g fog lesz nagy G. De a probléma 808 00:33:07,840 --> 00:33:09,410 az, hogy mit s arra is rámutatnak, hogy? 809 00:33:09,410 --> 00:33:10,300 >> Közönség: Ugyanaz. 810 00:33:10,300 --> 00:33:11,841 >> David J. MALAN: pontosan ugyanolyan dolog. 811 00:33:11,841 --> 00:33:16,342 Így egy egyszerű magyarázat talán, akkor is, ha a szintaxis egy kicsit furcsa. 812 00:33:16,342 --> 00:33:17,050 Így csináljuk. 813 00:33:17,050 --> 00:33:20,210 Készíts copy-0, majd ./copy-0-ra. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 Mondj valamit: Gabe. 816 00:33:24,110 --> 00:33:26,760 És sajnos, mind a Közülük most aktiválásra, 817 00:33:26,760 --> 00:33:29,500 de hogy az alapul szolgáló az oka, hogy mi csak 818 00:33:29,500 --> 00:33:32,350 most foglalkozik a címeket. 819 00:33:32,350 --> 00:33:36,470 >> Szóval hogyan kezdenek address-- no pun intended-- 820 00:33:36,470 --> 00:33:39,270 hogy kezdünk foglalkozni ezt a problémát? 821 00:33:39,270 --> 00:33:44,400 Nos, copy1.c, mennek a dolgok hogy egy kicsit bonyolultabb. 822 00:33:44,400 --> 00:33:49,310 De azt állítják, a fogalmilag egyszerű megoldás. 823 00:33:49,310 --> 00:33:50,852 >> Olyan nehéz, hogy az első pillantásra. 824 00:33:50,852 --> 00:33:53,560 Nem lesz könnyű az első alkalommal írja ki, talán, 825 00:33:53,560 --> 00:33:57,440 de ha a probléma az, hogy egyszerűen azt tette, t = s csak 826 00:33:57,440 --> 00:33:59,694 példányban a cím, milyen, újra, ha én is vegye magára, 827 00:33:59,694 --> 00:34:02,110 lesz a megoldás az egy másolat a húr? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> Közönség: Majd talán használja a hurok újra. 830 00:34:06,770 --> 00:34:06,890 >> David J. MALAN: Igen. 831 00:34:06,890 --> 00:34:08,390 Szóval szükségünk lesz egy hurok újra. 832 00:34:08,390 --> 00:34:11,800 És mert ha azt akarjuk másolni egy string s egy másik szöveget, 833 00:34:11,800 --> 00:34:14,120 azt érdemes csinálni karakterenként. 834 00:34:14,120 --> 00:34:17,199 De a probléma az, hogy ha Ez eredetileg s, 835 00:34:17,199 --> 00:34:22,159 most el kell kezdenünk kifejezetten kiosztása memória t. 836 00:34:22,159 --> 00:34:24,320 >> Más szóval, nézzük dolgozza át ezt még egyszer, utoljára. 837 00:34:24,320 --> 00:34:28,659 Ha ez karaktersorozat s = getString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 És mondjuk ez itt is. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 Ez getString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 És akkor, a kép valami ilyen lesz, mint korábban, 844 00:34:43,860 --> 00:34:44,360 g-a-b-e / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 Úgy néz ki, egy kis valamit, mint ez. 847 00:34:48,960 --> 00:34:53,650 És s ezért nevezzük ezt a 0x50, és ez lesz a 51., 52.. 848 00:34:53,650 --> 00:34:54,409 >> Szóval ez a 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 És akkor én húr t. 851 00:34:59,690 --> 00:35:02,450 A memóriában, hogy csak fog adj egy kis tér, mint ez. 852 00:35:02,450 --> 00:35:04,080 Szóval mi a legfontosabb lépés most? 853 00:35:04,080 --> 00:35:09,870 Ha azt akarom, hogy másolni s a t, amit üres van szükségünk, hogy töltse itt? 854 00:35:09,870 --> 00:35:12,050 Vagy mit kell nem magas szinten? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 Igen? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 Valaki? 859 00:35:17,020 --> 00:35:17,690 Igen. 860 00:35:17,690 --> 00:35:19,214 >> Közönség: Meg kell [nem hallható]. 861 00:35:19,214 --> 00:35:21,380 David J. MALAN: Igen, kell kitölteni üresen. 862 00:35:21,380 --> 00:35:24,340 Nem tudok másolni, majd hasznosítani Gabe neve 863 00:35:24,340 --> 00:35:28,120 amíg kérem az operációs rendszer A másik darab memória 864 00:35:28,120 --> 00:35:30,640 ez legalább akkora, mint az eredeti. 865 00:35:30,640 --> 00:35:32,130 Annak érdekében, hogy hagy bennünket a kérdés. 866 00:35:32,130 --> 00:35:36,080 >> Hogyan kérni az operációs rendszer nem csak egy egyszerű kis pointer-- 867 00:35:36,080 --> 00:35:38,530 mivel ez az úgynevezett, egy cím, a pointer-- nem 868 00:35:38,530 --> 00:35:40,980 egy egyszerű kis doboz így hívják húr? 869 00:35:40,980 --> 00:35:44,200 Hogyan kérni a működési rendszer egy nagy darab memória? 870 00:35:44,200 --> 00:35:48,430 Eddig én még csak ütött vissza közvetve hívja getString. 871 00:35:48,430 --> 00:35:50,740 Szóval, hogyan getString még kezd a memória? 872 00:35:50,740 --> 00:35:53,430 >> Nos, kiderült, hogy nincs ez a másik funkció itt 873 00:35:53,430 --> 00:35:55,160 hogy mi lesz most kezdenek használni. 874 00:35:55,160 --> 00:35:59,780 Nos, ez úgy néz ki, így több rejtélyes mint-- és én vagyok az egyetlen, aki képes látni it-- 875 00:35:59,780 --> 00:36:03,150 ezt a sort úgy néz ki, így több rejtélyes akkor meg kell első pillantásra. 876 00:36:03,150 --> 00:36:04,650 De nézzük kötekedik szét. 877 00:36:04,650 --> 00:36:07,950 >> A bal oldali, van char * t. 878 00:36:07,950 --> 00:36:13,280 Tehát az angol, kezdjük megfogalmazni megfelelő mondatokat szakzsargont. 879 00:36:13,280 --> 00:36:19,757 Szóval ez elosztása a típusú változó char * nevű t. 880 00:36:19,757 --> 00:36:21,090 Nos, mit is jelent valójában? 881 00:36:21,090 --> 00:36:23,881 >> Nos, ez azt jelenti, hogy mit fogok , hogy ebben a változó nevű t? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 Címeit char. 884 00:36:26,402 --> 00:36:28,360 Szóval ez csak az egyszerűbb, ésszerűbb módon 885 00:36:28,360 --> 00:36:29,930 leírására a bal oldalon. 886 00:36:29,930 --> 00:36:32,890 Annak érdekében, hogy létrehozza ezt a dobozt csak itt. 887 00:36:32,890 --> 00:36:34,760 Tehát a jobb oldali, Feltételezhető, hogy megy 888 00:36:34,760 --> 00:36:37,170 kiosztani, hogy a nagyobb darab memória, hogyan? 889 00:36:37,170 --> 00:36:38,340 Szóval kötekedik ezt szét. 890 00:36:38,340 --> 00:36:41,131 >> Ez elsöprő első pillantásra, de mi folyik odabent itt? 891 00:36:41,131 --> 00:36:43,740 Először is, ott van a malloc, amely látszólag új barátunk, 892 00:36:43,740 --> 00:36:45,450 "Memória lefoglalni." 893 00:36:45,450 --> 00:36:49,560 Tehát ez az érv, hogy telt bele, tehát ez egy elég nagy érv. 894 00:36:49,560 --> 00:36:50,970 Szóval kötekedik ezt szét. 895 00:36:50,970 --> 00:36:53,410 >> strlen s, persze, jelentése a-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 Közönség: A karakterek száma. 898 00:36:55,600 --> 00:36:56,710 David J. MALAN: Csak az karakterek száma s. 899 00:36:56,710 --> 00:36:59,040 Így a hossza s, az eredeti szöveg. 900 00:36:59,040 --> 00:37:00,350 Tehát a G-A-B-E. 901 00:37:00,350 --> 00:37:02,320 Így talán négy ebben az esetben. 902 00:37:02,320 --> 00:37:05,485 Miért csinálom 1 után hívás strlen s? 903 00:37:05,485 --> 00:37:06,360 KÖZÖNSÉG: [nem hallható] 904 00:37:06,360 --> 00:37:07,590 David J. MALAN: E speciális null karakter. 905 00:37:07,590 --> 00:37:11,260 Ha engem kérdezel, mi van a hossza Gabe nevét fogom mondani négy. 906 00:37:11,260 --> 00:37:14,480 A motorháztető alatt is, azt kell hogy az ötödik bájt a null karakter. 907 00:37:14,480 --> 00:37:16,100 Szóval ezért csinálom a +1. 908 00:37:16,100 --> 00:37:21,730 >> Most csak abban az esetben, ha fut ez a programot a számítógép más, mint, mondjuk, 909 00:37:21,730 --> 00:37:24,610 A CS50 készülék, ahol akkora, mint egy char 910 00:37:24,610 --> 00:37:26,350 eltérő lehet a saját computer-- 911 00:37:26,350 --> 00:37:30,590 Kiderült, hogy én is hívni ezt a operátor sizeof, csak kérni a számítógép, 912 00:37:30,590 --> 00:37:32,870 ami akkora, mint egy char ezen a számítógépen? 913 00:37:32,870 --> 00:37:37,400 >> És szorozni öt ebben például akkora, mint egy char, amely 914 00:37:37,400 --> 00:37:40,440 A legtöbb számítógépek csak az egyik, malloc 915 00:37:40,440 --> 00:37:44,830 fog kiosztani számomra ez a nagy darab memória itt a jobb oldalon. 916 00:37:44,830 --> 00:37:47,140 És ez fog return-- ez egy így ez function-- 917 00:37:47,140 --> 00:37:48,265 vissza fog térni, hogy mit? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 Közönség: a cím? 920 00:37:51,830 --> 00:37:53,709 David J. MALAN: A cím, mi? 921 00:37:53,709 --> 00:37:55,250 Közönség: a memória azt kiosztott? 922 00:37:55,250 --> 00:37:56,450 David J. MALAN: a memóriát kiosztott. 923 00:37:56,450 --> 00:37:59,189 Szóval fogalmam sincs, őszintén szólva, ahol ez lesz a vége fel. 924 00:37:59,189 --> 00:38:01,480 Fogom javasolni, hogy ez lesz a végén a 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Teljesen önkényes, de valahol más, mint 0x50, 927 00:38:06,009 --> 00:38:08,800 mert az operációs rendszer, milyen A Windows és Mac OS értem, ez 928 00:38:08,800 --> 00:38:11,230 győződjön meg arról, hogy ez így nekem különböző darabokat a RAM. 929 00:38:11,230 --> 00:38:14,210 >> Tehát ez az érték, ahol ez a darab memória talán a végén. 930 00:38:14,210 --> 00:38:16,060 Szóval, ez az, amit végül itt, 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 Tehát most már egyértelműen, meg tudom érteni hogy ez nem ugyanaz, mint ez, 933 00:38:21,570 --> 00:38:23,960 mert ők mutatott különböző darabokat a memória. 934 00:38:23,960 --> 00:38:29,980 Tehát, ha most valóban akar másolni ezt A, csináljuk a javasolt megoldás. 935 00:38:29,980 --> 00:38:36,870 >> Csak menjünk, hozzon létre egy for ciklus, és nem t konzol én lesz s konzol i. 936 00:38:36,870 --> 00:38:39,760 Mert most már használni A tömb-szerű jelölés, 937 00:38:39,760 --> 00:38:43,390 mert bár malloc nagyon általánosságban osztja meg memória, 938 00:38:43,390 --> 00:38:45,290 memória csak összefüggő bájt. 939 00:38:45,290 --> 00:38:47,240 Byte, byte, byte, vissza háttal. 940 00:38:47,240 --> 00:38:50,030 >> Tudom biztosan, mint a programozó kezelni, mint egy tömb, amely 941 00:38:50,030 --> 00:38:55,090 azt jelenti, hogy tudom használni ezt végre ismerős jelölés csupán néhány szögletes zárójelben. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> Hadd álljak oda, mert ez sok egyszerre, még 944 00:39:00,020 --> 00:39:03,530 bár az alapötlet, hogy zárja az, hogy a szöveg, mind ebben az időben, 945 00:39:03,530 --> 00:39:05,550 nem egy új adattípus önmagában. 946 00:39:05,550 --> 00:39:10,150 Ez csak egy úgynevezett mutató, címet a karakter, 947 00:39:10,150 --> 00:39:12,650 ami csak azt jelenti, hogy egy sor hogy az emberi egyezmény 948 00:39:12,650 --> 00:39:15,350 hajlamosak vagyunk írni, 0x valami. 949 00:39:15,350 --> 00:39:18,590 >> De ez csak egy szám, mint 33 Oxford Street, 950 00:39:18,590 --> 00:39:20,530 ami történik, hogy a CS épület címét. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 Bármilyen kérdése a részletekre? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 Igen? 955 00:39:25,289 --> 00:39:28,530 >> Közönség: Miért ellenőrizni T egyenlő null? 956 00:39:28,530 --> 00:39:30,740 >> David J. MALAN: Miért ellenőrizze t egyenlő null? 957 00:39:30,740 --> 00:39:33,250 Ha olvassuk a documentation-- nagy question-- a malloc, 958 00:39:33,250 --> 00:39:37,020 azt fogja mondani az apró betűs, néha malloc adhatja vissza null, 959 00:39:37,020 --> 00:39:38,080 mint getString. 960 00:39:38,080 --> 00:39:41,820 És valóban, getString vissza null ha viszont malloc vissza null, 961 00:39:41,820 --> 00:39:43,130 mert getString használja malloc. 962 00:39:43,130 --> 00:39:46,400 >> És ez fog történni, ha az operációs rendszer, Mac OS, Windows, bármi, egyszerűen 963 00:39:46,400 --> 00:39:48,130 Elfogyott a memória az Ön számára. 964 00:39:48,130 --> 00:39:49,820 Szóval, ez az, ami ott történt. 965 00:39:49,820 --> 00:39:52,910 >> És hadd felfedi egy másik dolog hogy talán csak az agyad 966 00:39:52,910 --> 00:39:55,100 vagy teljesen túl messze a vonalon. 967 00:39:55,100 --> 00:39:59,770 De hadd húzza fel a ugyanaz a hurok a másolás, 968 00:39:59,770 --> 00:40:05,480 amely egy pillanattal ezelőtt, visszahívás ezt. t tartó i lesz s konzol i. 969 00:40:05,480 --> 00:40:06,740 >> Szép és felhasználóbarát. 970 00:40:06,740 --> 00:40:09,330 Olyan, mint a második hét megint. 971 00:40:09,330 --> 00:40:14,920 De ez a verzió valóban lehet újraírt, mint ez, ami úgy néz ki, rejtélyes. 972 00:40:14,920 --> 00:40:18,280 Ez a technika az úgynevezett mutató aritmetikai, cím számtani. 973 00:40:18,280 --> 00:40:19,600 De miért is működik ez? 974 00:40:19,600 --> 00:40:22,220 >> Most bosszantóan, a szerzők C ezúttal 975 00:40:22,220 --> 00:40:25,070 a * jel különböző célokra. 976 00:40:25,070 --> 00:40:29,020 Láttuk, hogy egyszer használható már, char *, ami azt jelenti: "adj egy változó 977 00:40:29,020 --> 00:40:31,210 hogy fog tartalmaz a címét char. " 978 00:40:31,210 --> 00:40:33,990 Tehát char * ezzel összefüggésben azt jelenti: "adj egy változó." 979 00:40:33,990 --> 00:40:40,050 >> Sajnos, ha használja a * nélkül szó előtte, mint a char, 980 00:40:40,050 --> 00:40:41,905 ez most az úgynevezett dereference operátor. 981 00:40:41,905 --> 00:40:43,530 És majd meglátjuk, még ebből nemsokára. 982 00:40:43,530 --> 00:40:44,930 De ez csak azt jelenti: "ott." 983 00:40:44,930 --> 00:40:49,070 Ez olyan, mint azt, ha valaki a kezembe egy darab papír "33 Oxford Street," 984 00:40:49,070 --> 00:40:53,830 ha én "* 33 Oxford Street," azt jelenti, hogy "Menj le az úton, hogy a CS épület." 985 00:40:53,830 --> 00:40:57,220 >> Így * csak azt jelenti, hogy ott, ha nincs szó előtte. 986 00:40:57,220 --> 00:40:59,100 Tehát mi t, hogy világos? 987 00:40:59,100 --> 00:41:03,250 t a címe darab memória kapott vissza hozzám. 988 00:41:03,250 --> 00:41:06,650 s az a címe, hogy mi, hogy világos legyen, A példa, amit tárgyalunk, 989 00:41:06,650 --> 00:41:07,500 A kisbetűs Gabe? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 s az a cím of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 Közönség: a húr. 994 00:41:12,460 --> 00:41:14,126 David J. MALAN: Gabe eredeti nevét. 995 00:41:14,126 --> 00:41:16,660 Szóval ez a címe ez darab memória. 996 00:41:16,660 --> 00:41:22,220 Tehát, ha azt mondom, t + Én-- i, értesítés, csak a régi barát. 997 00:41:22,220 --> 00:41:24,770 Ez csak egy index változó ez iterációjával nullától akár 998 00:41:24,770 --> 00:41:26,960 a hossza a húr s. 999 00:41:26,960 --> 00:41:30,367 Szóval ez lesz nulla, akkor egy, majd kettő, majd három, majd négy. 1000 00:41:30,367 --> 00:41:33,200 Szóval össze ezeket az új Scratch-szerű puzzle-darabokat, ha úgy tetszik, 1001 00:41:33,200 --> 00:41:36,140 jóllehet, újra, a szintaxis sokkal több misztikus, mint a Scratch. 1002 00:41:36,140 --> 00:41:39,522 Így t egy cím + i fog adni nekem 1003 00:41:39,522 --> 00:41:42,480 egy számot, mert ezek mind szám, amit már rajz hexa. 1004 00:41:42,480 --> 00:41:43,560 De ezek csak számok. 1005 00:41:43,560 --> 00:41:49,960 >> Tehát, ha a címét t mondtunk volt 0x88, mi 0x88 plusz nulla. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Akkor is, ha nem kényelmes hexadecimális mégis, akkor gondolom. 1008 00:41:53,980 --> 00:41:54,410 >> Közönség: Az eredeti. 1009 00:41:54,410 --> 00:41:55,850 >> David J. MALAN: Still 0x88. 1010 00:41:55,850 --> 00:41:58,910 Szóval, mit jelent * 0x88 jelent? 1011 00:41:58,910 --> 00:42:02,670 Ez azt jelenti, "menj oda", ami azt jelenti, hatékonyan, "tegye az ujját itt." 1012 00:42:02,670 --> 00:42:06,930 És most a jobb oldali ezt a kifejezést, * majd parens, 1013 00:42:06,930 --> 00:42:11,586 s + s i jelenti, amely a foglalkozik itt a kis g. 1014 00:42:11,586 --> 00:42:16,220 S + 0, természetesen, s, s bármi. 1015 00:42:16,220 --> 00:42:21,230 >> Tehát most, hogy * s, amely ugyanúgy, mint * 33 Oxford Street azt megy a cím 1016 00:42:21,230 --> 00:42:22,010 s. 1017 00:42:22,010 --> 00:42:24,170 Tehát itt van az ujjamon, a jobb kezét. 1018 00:42:24,170 --> 00:42:26,050 Szóval, mit fogok másolni abba, hogy mi? 1019 00:42:26,050 --> 00:42:30,260 A dolog a jobb oldalon, ami Gabe, kis g itt, a itt. 1020 00:42:30,260 --> 00:42:32,750 >> És így a hatása, hogy a első közelítésben a hurok, 1021 00:42:32,750 --> 00:42:36,200 ahogy javasolta, bár úgy néz ki, őrült sokkal bonyolultabb, mint bármi 1022 00:42:36,200 --> 00:42:42,110 láttunk korábban, egyszerűen azt mondja megy itt, és másolja a karakter itt. 1023 00:42:42,110 --> 00:42:44,700 Ez ad neked egy térképet, hogy mindkét helyen. 1024 00:42:44,700 --> 00:42:46,130 >> És majd meglátjuk, sokkal többet. 1025 00:42:46,130 --> 00:42:50,600 De most, a remény, csak bemutatni néhány ilyen alapvető ötleteket. 1026 00:42:50,600 --> 00:42:53,550 És valóban, nézzük meg egy végleges program itt 1027 00:42:53,550 --> 00:42:57,480 majd az ígért claymation, amely biztosítja, hogy minden rendben van. 1028 00:42:57,480 --> 00:42:57,980 Rendben. 1029 00:42:57,980 --> 00:43:01,680 Ezért hadd nyissa hurok-- ott vagyunk. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 Úgyhogy hozzám-- visszajövünk ezt a képet nemsokára. 1032 00:43:05,440 --> 00:43:08,360 Hadd nyissa meg ezt az utolsó példa itt. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> Tehát itt van egy szuper, szuper program, amely megvalósítja 1035 00:43:12,710 --> 00:43:15,050 semmi az életben, hogy nem a következő. 1036 00:43:15,050 --> 00:43:18,740 Először kijelenti két változó, x és y, amelyek nem számok ebben az időben, 1037 00:43:18,740 --> 00:43:19,240 önmagában. 1038 00:43:19,240 --> 00:43:20,448 Ők nem egész számok, önmagában. 1039 00:43:20,448 --> 00:43:22,899 Ezek látszólag int *. 1040 00:43:22,899 --> 00:43:25,690 Szóval valaki, mit jelent Ha az adatok típusát, a változó, 1041 00:43:25,690 --> 00:43:26,860 A típusa int * csillag? 1042 00:43:26,860 --> 00:43:30,240 Ez a cím egy int. 1043 00:43:30,240 --> 00:43:31,990 >> Szóval fogalmam sincs, hol van még. 1044 00:43:31,990 --> 00:43:35,150 Ez csak azt jelenti, hogy "tegye, végül, címét int itt. " 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, ahol ez a memória, egy címet oda. 1046 00:43:38,340 --> 00:43:40,200 És ez az, ami az y lesz, valamint. 1047 00:43:40,200 --> 00:43:44,920 >> Ha most azt mondják, x = malloc (sizeof (int)) ez a divatos módja mondván, 1048 00:43:44,920 --> 00:43:49,000 Hé operációs rendszer keresztül malloc, adj elég memória méretének 1049 00:43:49,000 --> 00:43:52,370 Egy int, ami valószínűleg lesz 32 bites vagy négy bájt. 1050 00:43:52,370 --> 00:43:53,680 >> Szóval mit malloc vissza? 1051 00:43:53,680 --> 00:43:55,250 Malloc vissza a címet. 1052 00:43:55,250 --> 00:43:57,020 Szóval mi kap tárolt x? 1053 00:43:57,020 --> 00:44:00,600 A címet a darab memória, a négy bájt, hogy malloc 1054 00:44:00,600 --> 00:44:03,360 Most találtam nekem azzal, hogy felkéri az operációs rendszer. 1055 00:44:03,360 --> 00:44:08,240 >> Most Eközben vonal négy itt, a * x = 42. 1056 00:44:08,240 --> 00:44:09,990 Csak hogy világos legyen, mi folyik odalent? 1057 00:44:09,990 --> 00:44:11,530 A bal oldali, * x. 1058 00:44:11,530 --> 00:44:13,610 ez olyan, mintha * 33 Oxford Street. 1059 00:44:13,610 --> 00:44:15,523 Így * x mit jelent? 1060 00:44:15,523 --> 00:44:16,450 >> Közönség: Menj a. 1061 00:44:16,450 --> 00:44:17,908 >> David J. MALAN: Menj arra a címre. 1062 00:44:17,908 --> 00:44:20,466 Bárhol is darab memória, megy hozzá. 1063 00:44:20,466 --> 00:44:21,979 És tedd, hogy mi van, nyilván? 1064 00:44:21,979 --> 00:44:22,520 Közönség: 42. 1065 00:44:22,520 --> 00:44:23,580 David J. MALAN: 42. 1066 00:44:23,580 --> 00:44:25,650 Rendben, * y, ugyanezt a gondolatot. 1067 00:44:25,650 --> 00:44:26,860 Menj a címre y. 1068 00:44:26,860 --> 00:44:31,740 Tegye a 13-as szám van, de mi az y ebben a pillanatban? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 Közönség: nincs memória y. 1071 00:44:34,630 --> 00:44:35,710 David J. MALAN: Van nincs memória y. 1072 00:44:35,710 --> 00:44:38,215 Szóval mit y valószínűleg tartalmaz, ahogy azt már mondtam? 1073 00:44:38,215 --> 00:44:38,520 >> Közönség: Garbage. 1074 00:44:38,520 --> 00:44:39,480 >> David J. MALAN: Néhány szemét érték. 1075 00:44:39,480 --> 00:44:41,320 Most, szemét az érték még mindig egy szám. 1076 00:44:41,320 --> 00:44:43,160 Akkor még lehet összetéveszteni egy címet. 1077 00:44:43,160 --> 00:44:45,160 Olyan, mintha valaki felírta valamit le, 1078 00:44:45,160 --> 00:44:48,002 és tévesen értelmezte ezt a bekezdését néhány épület az utcán. 1079 00:44:48,002 --> 00:44:50,460 És ha csak megpróbál bemenni néhány épület nem a saját, 1080 00:44:50,460 --> 00:44:53,710 vagy néhány darab memória van nem volt adott, rossz dolgok történnek. 1081 00:44:53,710 --> 00:44:57,740 Számítógép lehet, lezuhan, vagy valami más meghatározatlan viselkedés megtörténhet. 1082 00:44:57,740 --> 00:45:01,310 >> Tehát az intro, akkor a Muci ez. 1083 00:45:01,310 --> 00:45:04,290 Még mindig emlékszem, 20 néhány furcsa évvel később, 1084 00:45:04,290 --> 00:45:07,200 hol voltam, amikor végre megértette mutatók. 1085 00:45:07,200 --> 00:45:09,520 >> Ami azt jelenti, ha hagyjuk itt három perc alatt 1086 00:45:09,520 --> 00:45:12,170 és hiszem, hogy nem megérteni mutatók, észre 1087 00:45:12,170 --> 00:45:14,410 Már emlékezett 20 évben valamilyen őrült oknál fogva 1088 00:45:14,410 --> 00:45:17,140 mikor és miért végül elsüllyedt az ül az én tanítási 1089 00:45:17,140 --> 00:45:19,501 ember, Nishat Mehta a Vissza az Eliot étkezőben. 1090 00:45:19,501 --> 00:45:21,250 Most, Eszembe jutott , mert ez volt 1091 00:45:21,250 --> 00:45:23,920 az egyik téma I, a különös, küzdött. 1092 00:45:23,920 --> 00:45:26,470 És akkor végül kattintott, mint merem állítani, sok téma 1093 00:45:26,470 --> 00:45:27,460 végül is. 1094 00:45:27,460 --> 00:45:32,590 És most, hogy hogy érzi magát a boldogabb és annál inkább meggyőző, 1095 00:45:32,590 --> 00:45:35,360 vessünk egy utolsó pillantást a mi utolsó három percben itt Muci, 1096 00:45:35,360 --> 00:45:37,675 barátunk, Nick Parlante a Stanford. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [Videolejátszás] 1099 00:45:41,580 --> 00:45:42,750 >> Hé, Muci. 1100 00:45:42,750 --> 00:45:43,500 Ébredj fel! 1101 00:45:43,500 --> 00:45:45,960 Itt az ideje a mutató móka. 1102 00:45:45,960 --> 00:45:47,012 >> Mi az? 1103 00:45:47,012 --> 00:45:48,723 Tudjon meg többet a mutatók? 1104 00:45:48,723 --> 00:45:50,580 Oh, nagyszerű! 1105 00:45:50,580 --> 00:45:53,563 >> Nos, az induláshoz, azt hiszem vagyunk Szükségem lesz egy pár mutatók. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 Ez a kód mellé két mutató, amely pont egész. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 Nos, látom a két mutató, de Nem úgy tűnik, hogy mutat valamit. 1110 00:46:02,140 --> 00:46:02,980 >> -Ez Jobb. 1111 00:46:02,980 --> 00:46:05,100 Kezdetben, pointerek nem mutatnak semmit. 1112 00:46:05,100 --> 00:46:08,030 Dolog, amit mutatnak az úgynevezett pointees, és számukra a kialakításukban a 1113 00:46:08,030 --> 00:46:09,370 egy külön lépésben. 1114 00:46:09,370 --> 00:46:10,220 >> Ó, jobb, jobb. 1115 00:46:10,220 --> 00:46:10,950 Tudtam, hogy. 1116 00:46:10,950 --> 00:46:12,385 A pointees külön. 1117 00:46:12,385 --> 00:46:14,315 Ööö, így hogyan osztja a pointee? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 Nos, ezt a kódot oszt egy új egész pointee, 1121 00:46:18,970 --> 00:46:20,950 és ez a rész az x, hogy pont azt. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> Hé, hogy jobban néz ki. 1124 00:46:23,230 --> 00:46:25,060 Tehát, hogy csinál valamit. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 Én dereference a mutatót x tárolja a szám 42 bele pointee. 1127 00:46:30,455 --> 00:46:32,830 Mert ez a trükk, szükségem lesz a Varázspálca a Dereferencing. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> -El Varázspálca a Dereferencing? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 Hogy-- ez nagyszerű. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -Ez Mi a kód így néz ki. 1134 00:46:41,080 --> 00:46:44,110 Én csak létre a számot, és a [POP] 1135 00:46:44,110 --> 00:46:44,700 >> Hé, figyelj. 1136 00:46:44,700 --> 00:46:46,140 Ott megy. 1137 00:46:46,140 --> 00:46:50,980 >> Szóval ezzel a hivatkozás feloldási be x következik a nyíl, hogy hozzáférjen az pointee. 1138 00:46:50,980 --> 00:46:53,160 Ebben az esetben, a bolt 42 oda. 1139 00:46:53,160 --> 00:46:57,710 Hé, próbálja meg, hogy a szám tárolásához 13. a másik mutató, y. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 Megyek ide, hogy y, és kap a 13-as szám létre. 1142 00:47:03,270 --> 00:47:07,930 És akkor, hogy a Mágus a Dereferencing és csak [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> Ó! 1144 00:47:08,960 --> 00:47:09,500 >> Ó, hé! 1145 00:47:09,500 --> 00:47:11,090 Ez nem működik. 1146 00:47:11,090 --> 00:47:15,630 Azt mondják, Muci, nem hiszem dereferencing y egy jó ötlet, mert tudod, 1147 00:47:15,630 --> 00:47:17,850 létrehozása a pointee egy külön lépésben. 1148 00:47:17,850 --> 00:47:20,450 És nem hiszem, hogy valaha is tette. 1149 00:47:20,450 --> 00:47:21,480 >> Jó pont. 1150 00:47:21,480 --> 00:47:21,980 Igen. 1151 00:47:21,980 --> 00:47:25,680 Mi juttatott a mutató y, de sosem azt, hogy pont a pointee. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -nagyon Figyelmes. 1154 00:47:28,616 --> 00:47:30,240 Hé, te jól nézel ki ott, Muci. 1155 00:47:30,240 --> 00:47:33,400 Meg tudod javítani, hogy y pont azonos pointee mint x? 1156 00:47:33,400 --> 00:47:34,000 >> Persze. 1157 00:47:34,000 --> 00:47:36,780 Fogom használni a Varázspálca mutató kiosztása. 1158 00:47:36,780 --> 00:47:38,740 >> -Ez Lesz A probléma, mint korábban? 1159 00:47:38,740 --> 00:47:39,240 Nem. 1160 00:47:39,240 --> 00:47:40,660 Ez nem érinti a pointees. 1161 00:47:40,660 --> 00:47:44,450 Csak változik egy mutatót pont ugyanaz, mint a másik. 1162 00:47:44,450 --> 00:47:45,450 >> Ó, értem. 1163 00:47:45,450 --> 00:47:48,200 Most y pont ugyanazon a helyen, mint x. 1164 00:47:48,200 --> 00:47:48,910 Így várni. 1165 00:47:48,910 --> 00:47:49,950 Most, y rögzített. 1166 00:47:49,950 --> 00:47:51,120 Ez egy pointee. 1167 00:47:51,120 --> 00:47:54,510 Így próbálja a Mágus a Dereferencing ismét elküldeni a 13-át. 1168 00:47:54,510 --> 00:47:56,510 >> Uh, OK. 1169 00:47:56,510 --> 00:47:58,160 Itt megy. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> Hé, ezt nézd meg. 1171 00:47:59,340 --> 00:48:00,750 Most dereferencing működik y. 1172 00:48:00,750 --> 00:48:04,991 És mivel a mutatók osztoznak hogy az egyik pointee, mindketten lásd a 13.. 1173 00:48:04,991 --> 00:48:05,490 Igen. 1174 00:48:05,490 --> 00:48:06,870 Megosztása, bármi. 1175 00:48:06,870 --> 00:48:08,820 Így fogunk felcserélődnek most? 1176 00:48:08,820 --> 00:48:09,440 >> Ó, nézd. 1177 00:48:09,440 --> 00:48:10,830 Kifutunk az időből. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> -Csak Emlékszik a három mutató szabályokat. 1180 00:48:13,530 --> 00:48:16,560 Number One, az alapvető struktúra az, hogy van egy mutató, 1181 00:48:16,560 --> 00:48:18,680 és mutat át a pointee. 1182 00:48:18,680 --> 00:48:20,640 De a mutató és a pointee külön, 1183 00:48:20,640 --> 00:48:22,610 és a közös hiba hogy hozzanak létre egy mutatót, 1184 00:48:22,610 --> 00:48:25,000 hanem elfelejteni, hogy ez egy pointee. 1185 00:48:25,000 --> 00:48:28,170 >> Number Two, mutató dereferencing indul a mutató 1186 00:48:28,170 --> 00:48:31,050 és követi a nyíl felett eléréséhez a pointee. 1187 00:48:31,050 --> 00:48:33,400 Mint azt mindannyian tudjuk, ez csak akkor működik, ha van 1188 00:48:33,400 --> 00:48:36,270 a pointee, hogy milyen tér vissza az szabály. 1189 00:48:36,270 --> 00:48:39,000 >> Number Three, mutató feladat úgy egy mutató 1190 00:48:39,000 --> 00:48:42,320 és megváltoztatja azt, hogy pont a ugyanaz pointee egy másik mutató. 1191 00:48:42,320 --> 00:48:44,160 Tehát miután a feladat, a két mutató 1192 00:48:44,160 --> 00:48:45,910 majd ugyanarra a pointee. 1193 00:48:45,910 --> 00:48:47,990 Néha, hogy hívják megosztását. 1194 00:48:47,990 --> 00:48:49,740 És ez minden van rá, tényleg. 1195 00:48:49,740 --> 00:48:50,277 Viszlát most. 1196 00:48:50,277 --> 00:48:51,110 [END Videolejátszás] 1197 00:48:51,110 --> 00:48:52,568 David J. MALAN: Ez az a CS50. 1198 00:48:52,568 --> 00:48:55,110 Látni fogjuk, hogy a jövő héten. 1199 00:48:55,110 --> 00:48:56,064