1 00:00:00,000 --> 00:00:03,381 >> [Zenelejátszási] 2 00:00:03,381 --> 00:00:10,626 3 00:00:10,626 --> 00:00:11,610 >> [Videó lejátszás] 4 00:00:11,610 --> 00:00:13,640 >> -Ő Hazudott. 5 00:00:13,640 --> 00:00:14,380 >> -Miről? 6 00:00:14,380 --> 00:00:17,182 >> -Nem Tudom. 7 00:00:17,182 --> 00:00:19,990 >> -Szóval Mit tudunk? 8 00:00:19,990 --> 00:00:23,145 >> -Ez A 09:15, Ray Santoya volt az ATM. 9 00:00:23,145 --> 00:00:23,644 -Igen. 10 00:00:23,644 --> 00:00:27,030 Tehát a kérdés az, hogy mi csinált a 09:16? 11 00:00:27,030 --> 00:00:29,720 >> -Shooting A 9 milliméteres valamit. 12 00:00:29,720 --> 00:00:31,540 Talán látta a mesterlövész. 13 00:00:31,540 --> 00:00:33,412 >> -vagy Volt vele dolgozni. 14 00:00:33,412 --> 00:00:34,340 >> Várj. 15 00:00:34,340 --> 00:00:36,200 Menjünk vissza egy. 16 00:00:36,200 --> 00:00:36,975 >> -Mit látsz? 17 00:00:36,975 --> 00:00:44,400 18 00:00:44,400 --> 00:00:47,805 >> -Bring Az arcát, teljes képernyőn. 19 00:00:47,805 --> 00:00:48,680 >> -His Szemüveget. 20 00:00:48,680 --> 00:00:50,060 >> -Van Egy reflexió. 21 00:00:50,060 --> 00:01:00,455 22 00:01:00,455 --> 00:01:02,280 >> -Ez A Nuevitas baseball-csapat. 23 00:01:02,280 --> 00:01:03,110 Ez a logó. 24 00:01:03,110 --> 00:01:05,820 >> -És Ő beszél Aki visel, hogy kabát. 25 00:01:05,820 --> 00:01:06,670 >> [Lejátszás vége] 26 00:01:06,670 --> 00:01:07,628 >> DAVID MALAN: Rendben. 27 00:01:07,628 --> 00:01:11,210 Ez CS50, és ez egy kicsit Az [hallhatatlan], amellyel te 28 00:01:11,210 --> 00:01:12,890 belekóstoltak a problémát az alábbi négy. 29 00:01:12,890 --> 00:01:16,606 Ma elkezdünk nézni egy kicsit Mélyen meg ezeket a dolgokat nevezett mutató, 30 00:01:16,606 --> 00:01:18,480 amely annak ellenére, hogy egy szép misztikus téma, 31 00:01:18,480 --> 00:01:20,813 kiderül, hogy ez lesz hogy az eszköz, ami által 32 00:01:20,813 --> 00:01:24,320 elkezdődhet és összeszerelés sokkal kifinomultabb programokat. 33 00:01:24,320 --> 00:01:28,150 De megcsináltuk a múlt szerdán útján néhány claymation első. 34 00:01:28,150 --> 00:01:30,190 Szóval ez, sokan emlékeznek, Muci és szoktunk rá 35 00:01:30,190 --> 00:01:33,148 hogy vessen egy pillantást a programot, hogy Nem igazán semmi érdekes, 36 00:01:33,148 --> 00:01:34,950 de ez nem válik egy kevés probléma. 37 00:01:34,950 --> 00:01:38,570 Így kezdődik ma, miért nem sétálunk gyorsan át néhány ilyen lépéseket, 38 00:01:38,570 --> 00:01:41,920 próbáld eltávozni az emberi feltételek Pontosan mi folyik itt 39 00:01:41,920 --> 00:01:45,410 és hogy ez miért rossz, majd lépni és valóban kezdjék építeni valamit 40 00:01:45,410 --> 00:01:46,309 ezzel a technikával? 41 00:01:46,309 --> 00:01:48,350 Szóval ezek voltak az első két sort ebben a programban 42 00:01:48,350 --> 00:01:51,340 és a laikus szempontból, hogy mi a következő két sort csinál? 43 00:01:51,340 --> 00:01:55,600 Valaki, aki meglehetősen kényelmes A mi nyilvánította a képernyőn? 44 00:01:55,600 --> 00:01:58,340 45 00:01:58,340 --> 00:02:00,120 Mi ez a két sor csinál? 46 00:02:00,120 --> 00:02:02,070 Ez még nem minden, hogy eltér a héten az egyik, 47 00:02:02,070 --> 00:02:03,611 de van néhány új speciális szimbólum. 48 00:02:03,611 --> 00:02:04,152 Igen? 49 00:02:04,152 --> 00:02:05,628 Vissza ott. 50 00:02:05,628 --> 00:02:07,092 >> Közönség: deklarálása mutatók? 51 00:02:07,092 --> 00:02:08,050 DAVID MALAN: Mondd még egyszer? 52 00:02:08,050 --> 00:02:08,860 Közönség: deklarálása mutatók? 53 00:02:08,860 --> 00:02:11,776 DAVID MALAN: deklarálása mutatók és nézzük finomítani egy kicsit. 54 00:02:11,776 --> 00:02:14,050 Közönség: [hallható] címet x és y majd. 55 00:02:14,050 --> 00:02:15,300 DAVID MALAN: És akkor foglalkozzon. 56 00:02:15,300 --> 00:02:18,550 Tehát konkrétan mit csinálunk A mi nyilvánító két változó. 57 00:02:18,550 --> 00:02:21,252 Ezek a változók, bár folynak hogy int típusú csillag, amely 58 00:02:21,252 --> 00:02:23,210 Pontosabban azt jelenti, fognak tárolni 59 00:02:23,210 --> 00:02:26,450 A címe int, illetve, X és Y. 60 00:02:26,450 --> 00:02:27,660 Most vannak-e olyan értékek? 61 00:02:27,660 --> 00:02:32,621 Vannak-e olyan konkrét címeket ezekben két változó ebben az időpontban? 62 00:02:32,621 --> 00:02:33,120 Nem. 63 00:02:33,120 --> 00:02:35,030 Ez csak az úgynevezett szemetet értékeket. 64 00:02:35,030 --> 00:02:38,120 Ha éppen nem rendelhet változó, bármi is volt a RAM-ban 65 00:02:38,120 --> 00:02:42,224 korábban fog tölteni nullákkal és az is, mind a két változó. 66 00:02:42,224 --> 00:02:44,140 De még nem tudjuk, mik ezek, és ez az, 67 00:02:44,140 --> 00:02:47,060 lesz kulcsa, hogy miért Muci elvesztette a fejét a múlt héten. 68 00:02:47,060 --> 00:02:49,980 >> Szóval ez volt a claymation megtestesülése ennek a 69 00:02:49,980 --> 00:02:53,580 ahol éppen most két változó, kis kör alakú darab agyagot, 70 00:02:53,580 --> 00:02:57,330 hogy képes tárolni változók, de mivel A bebugyolálva nyilak azt sugallják, 71 00:02:57,330 --> 00:03:00,640 ők valójában nem mutat hogy bárhol ismert. 72 00:03:00,640 --> 00:03:03,670 Így aztán volt ezen a vonalon, és ez a új volt a múlt héten, a malloc memória 73 00:03:03,670 --> 00:03:07,130 elosztása, ami csak egy divatos módon megmondani az operációs rendszer, a Linux 74 00:03:07,130 --> 00:03:09,750 vagy Mac OS és Windows, Hé, adj egy kis memóriát, 75 00:03:09,750 --> 00:03:11,780 és csak annyit kell mondani az operációs rendszer 76 00:03:11,780 --> 00:03:14,699 az, ami, ha megkéri azt a memóriát. 77 00:03:14,699 --> 00:03:16,990 Ez nem fog törődni, hogy mit fogsz csinálni vele, 78 00:03:16,990 --> 00:03:19,786 de nem kell mondani az operációs rendszer, amit útján malloc. 79 00:03:19,786 --> 00:03:20,286 Igen? 80 00:03:20,286 --> 00:03:21,078 >> Közönség: Mennyi? 81 00:03:21,078 --> 00:03:21,994 DAVID MALAN: Mennyi? 82 00:03:21,994 --> 00:03:25,280 Mennyit byte, és így, ez megint, egy kitalált példa, csak azt mondja, 83 00:03:25,280 --> 00:03:27,360 adj akkora, mint egy int. 84 00:03:27,360 --> 00:03:30,550 Most, akkora, mint egy int négy bájt vagy 32 bit. 85 00:03:30,550 --> 00:03:32,850 Tehát ez csak egy módja mondván, hé, operációs rendszer, 86 00:03:32,850 --> 00:03:37,290 adj négy bájt memóriát hogy tudom használni a rendelkezésemre, 87 00:03:37,290 --> 00:03:40,560 és konkrétan mit jelent malloc visszatérés tekintetében 88 00:03:40,560 --> 00:03:41,795 E darab négy bájt? 89 00:03:41,795 --> 00:03:44,110 90 00:03:44,110 --> 00:03:44,860 Közönség: Cím? 91 00:03:44,860 --> 00:03:45,901 DAVID MALAN: A címet. 92 00:03:45,901 --> 00:03:47,580 A címe, hogy darab négy bájt. 93 00:03:47,580 --> 00:03:48,190 Pontosan. 94 00:03:48,190 --> 00:03:51,430 És így ez az, ami végső soron tárolt x és ez az, amiért nem igazán 95 00:03:51,430 --> 00:03:55,240 érdekel, mi a számát cím, függetlenül attól, hogy OX1 vagy OX2 96 00:03:55,240 --> 00:03:57,110 vagy valamilyen rejtélyes hexadecimális címet. 97 00:03:57,110 --> 00:03:59,850 Mi csak érdekel képileg hogy ez a változó x ma 98 00:03:59,850 --> 00:04:01,630 rámutatva, hogy darabja a memóriát. 99 00:04:01,630 --> 00:04:05,570 Tehát a nyíl mutatja a mutatót, vagy Közelebbről, egy memória címét. 100 00:04:05,570 --> 00:04:09,120 De ismétlem, nem tipikusan érdekel mik azok tényleges címek. 101 00:04:09,120 --> 00:04:11,780 Most, ebben a sorban az mi laikus szempontból? 102 00:04:11,780 --> 00:04:14,330 Csillagok x egyre 42 pontosvessző. 103 00:04:14,330 --> 00:04:17,390 Mit is jelent ez? 104 00:04:17,390 --> 00:04:18,200 Akarsz menni? 105 00:04:18,200 --> 00:04:20,102 Ne vakarja a nyakát. 106 00:04:20,102 --> 00:04:22,360 >> Közönség: A címe az x a 42. 107 00:04:22,360 --> 00:04:24,300 >> DAVID MALAN: A címe az x 42. 108 00:04:24,300 --> 00:04:25,190 Nem egészen. 109 00:04:25,190 --> 00:04:28,485 Olyan közel, de nem egészen, mert ott van a csillag, ami előtaggal ez x. 110 00:04:28,485 --> 00:04:29,860 Tehát meg kell dobnia egy kicsit. 111 00:04:29,860 --> 00:04:31,032 Igen? 112 00:04:31,032 --> 00:04:36,044 >> Közönség: Az az érték, a pointer x mutat 42. 113 00:04:36,044 --> 00:04:36,710 DAVID MALAN: OK. 114 00:04:36,710 --> 00:04:40,840 Az érték, amit a mutató x rámutatva, hogy, mondjuk, legyen 42, 115 00:04:40,840 --> 00:04:44,165 vagy másképpen fogalmazva, a csillag x mondja, menj bármilyen címet 116 00:04:44,165 --> 00:04:48,340 van x, függetlenül attól, hogy 1 Oxford Utca vagy 33 Oxford Street 117 00:04:48,340 --> 00:04:51,850 vagy OX1 vagy ox33, bármi hogy a numerikus cím, 118 00:04:51,850 --> 00:04:54,380 csillagos x a dereferencing x. 119 00:04:54,380 --> 00:04:57,297 Így megy arra a címre, és aztán a szám 42 van. 120 00:04:57,297 --> 00:04:59,380 Tehát ez lenne egyenértékű módon ezt mondja. 121 00:04:59,380 --> 00:05:01,860 Szóval ez minden rendben, majd mi lenne a kép 122 00:05:01,860 --> 00:05:05,370 az alábbiak szerint, ha felvettünk A 42 darab, hogy négy 123 00:05:05,370 --> 00:05:09,370 byte jobb oldali, de Ez a vonal, ahol a dolgok elromlott 124 00:05:09,370 --> 00:05:11,120 és Muci feje bukkant le ezen a ponton, 125 00:05:11,120 --> 00:05:15,290 mert rossz dolgok történnek, amikor Ön dereference szemetet értékek 126 00:05:15,290 --> 00:05:18,210 vagy hivatkozás feloldási érvénytelen mutatók, és azt mondom érvénytelen 127 00:05:18,210 --> 00:05:21,020 mert ezen a ponton a történet, mi van belül y? 128 00:05:21,020 --> 00:05:24,440 Mi az értéke y alapú az elmúlt pár lépésre? 129 00:05:24,440 --> 00:05:25,360 Igen? 130 00:05:25,360 --> 00:05:26,115 Az mi? 131 00:05:26,115 --> 00:05:26,990 >> Közönség: Egy cím. 132 00:05:26,990 --> 00:05:28,460 DAVID MALAN: Egy cím. 133 00:05:28,460 --> 00:05:31,910 Meg kell egy címet de én inicializált ez? 134 00:05:31,910 --> 00:05:32,800 Szóval még nem. 135 00:05:32,800 --> 00:05:35,430 Tehát mi tudjuk, hogy ott? 136 00:05:35,430 --> 00:05:37,590 Ez csak néhány szemetet értéket. 137 00:05:37,590 --> 00:05:41,500 Ez lehet bármilyen címet nulláról 2 milliárd ha van két giga RAM, 138 00:05:41,500 --> 00:05:44,289 vagy nulla, hogy 4 milliárd, ha már Van négy gigabájt RAM-mal. 139 00:05:44,289 --> 00:05:46,080 Ez valami szemetet értéket, de a probléma 140 00:05:46,080 --> 00:05:48,200 hogy az operációs rendszer, ha nem adott Önnek 141 00:05:48,200 --> 00:05:51,140 hogy darab memória kifejezetten hogy akarsz menni, 142 00:05:51,140 --> 00:05:54,650 ez általában fog okozni, hogy mit láttunk egy szegmentációs hiba. 143 00:05:54,650 --> 00:05:57,810 Tehát valójában, valakinek, aki küszködött problémákkal munkaidőn 144 00:05:57,810 --> 00:06:00,393 vagy problémákat, hogy a több általában megpróbálja kitalálni, 145 00:06:00,393 --> 00:06:02,150 szegmens hiba, hogy általában azt jelenti, 146 00:06:02,150 --> 00:06:05,017 te megható egy szegmense memória, hogy nem kell. 147 00:06:05,017 --> 00:06:07,350 Te megható memória az operációs rendszer nem 148 00:06:07,350 --> 00:06:10,450 megengedett, hogy megérintse, hogy ez megy túl messzire a tömb 149 00:06:10,450 --> 00:06:12,870 vagy most kezdődik, hogy ez azért van, mert megható 150 00:06:12,870 --> 00:06:14,780 memória, hogy csak némi szemetet értéket. 151 00:06:14,780 --> 00:06:18,230 >> Ennek során csillagos x itt fajta definiált működést. 152 00:06:18,230 --> 00:06:22,030 Soha ne csináld, mert esélye van, a program csak fog zuhanni, 153 00:06:22,030 --> 00:06:24,050 mert azt mondod, menj erre a címre 154 00:06:24,050 --> 00:06:27,000 és fogalmam sincs, hol ezt a címet valójában. 155 00:06:27,000 --> 00:06:30,300 Tehát az operációs rendszer valószínűleg fog zuhanni a programot 156 00:06:30,300 --> 00:06:33,840 Ennek eredményeként, és valóban, ez mi történt ott, hogy Muci. 157 00:06:33,840 --> 00:06:37,210 Így végül, Muci rögzített ezt a problémát ezzel. 158 00:06:37,210 --> 00:06:38,909 Annak érdekében, hogy a program maga hibás volt. 159 00:06:38,909 --> 00:06:41,450 De ha valami haladjanak előre és végre ez a vonal helyett, 160 00:06:41,450 --> 00:06:45,580 y értéke x csak azt jelenti, amit cím egy x is betette y. 161 00:06:45,580 --> 00:06:48,740 >> És így képileg, most már képviselik ezt a két nyíl 162 00:06:48,740 --> 00:06:51,570 Az x és y mutatóeszköz hogy ugyanazon a helyen. 163 00:06:51,570 --> 00:06:55,760 Szóval szemantikailag, x egyenlő hogy Y mert e két 164 00:06:55,760 --> 00:07:00,300 tárolja ugyanazon címét, ergo mutatva 42, 165 00:07:00,300 --> 00:07:04,910 és most, amikor azt mondod csillagos y, megy a címet y, 166 00:07:04,910 --> 00:07:06,790 ez egy érdekes mellékhatása. 167 00:07:06,790 --> 00:07:10,320 Tehát az a cím y az ugyanaz, mint a címet x. 168 00:07:10,320 --> 00:07:15,060 Tehát ha azt mondod megy a címet y és módosítsa az értéket 13, 169 00:07:15,060 --> 00:07:17,140 aki mást az érintettek? 170 00:07:17,140 --> 00:07:21,100 X, D pont, hogy úgy mondjam, kell érintettek. 171 00:07:21,100 --> 00:07:24,340 >> És valóban, hogyan Nick felhívta kép A claymation volt, hogy pontosan. 172 00:07:24,340 --> 00:07:28,665 Annak ellenére, hogy követjük a mutatót y, mi végül ugyanazon a helyen, 173 00:07:28,665 --> 00:07:32,780 és így ha voltunk nyomtatni out X vagy Y a pointee, 174 00:07:32,780 --> 00:07:35,720 akkor mi lenne látni az értéke 13. 175 00:07:35,720 --> 00:07:37,927 Most azt mondom, hogy pointee összhangban van a videó. 176 00:07:37,927 --> 00:07:39,760 A programozók, hogy én tudás, sosem 177 00:07:39,760 --> 00:07:42,460 azt a szót pointee, azt, ami hegyes 178 00:07:42,460 --> 00:07:44,650 a, de a következetesség A videó, rájönnek 179 00:07:44,650 --> 00:07:47,520 ez minden, ami volt, jelentette be, hogy a helyzet. 180 00:07:47,520 --> 00:07:54,190 Szóval minden kérdésre claymation vagy mutatókat vagy malloc csak még? 181 00:07:54,190 --> 00:07:54,850 Nem? 182 00:07:54,850 --> 00:07:55,470 Minden rendben. 183 00:07:55,470 --> 00:07:58,560 >> Tehát minden további ado, vessünk egy pillantást 184 00:07:58,560 --> 00:08:00,700 A ahol ez ténylegesen óta használják egy ideje. 185 00:08:00,700 --> 00:08:03,580 Szóval ezt már CS50 könyvtár Ez van mindezen funkciókat. 186 00:08:03,580 --> 00:08:06,810 Már használt GetInt sokat, getString, Valószínűleg GetLongLong korábban 187 00:08:06,810 --> 00:08:09,840 az én PSET egy vagy úgy, de mi ténylegesen folyik itt? 188 00:08:09,840 --> 00:08:12,920 Nos, vessünk egy gyors pillantást a motorháztető alatt egy program, amely 189 00:08:12,920 --> 00:08:17,017 inspirál miért adunk a CS50 könyvtár, sőt, mint a múlt héten, 190 00:08:17,017 --> 00:08:18,850 kezdtük, hogy ezeket képzés kerekek le. 191 00:08:18,850 --> 00:08:21,080 Szóval ez most rendezve A halál utáni, hogy mi 192 00:08:21,080 --> 00:08:23,690 már folyik belsejében CS50 könyvtár, 193 00:08:23,690 --> 00:08:27,250 még akkor is, most kezdenek mozogni előle a legtöbb program. 194 00:08:27,250 --> 00:08:29,460 >> Tehát ez a program neve scanf 0. 195 00:08:29,460 --> 00:08:30,510 Ez szuper rövid. 196 00:08:30,510 --> 00:08:33,909 Csak van ezeket a sorokat, de bevezet olyan függvény scanf 197 00:08:33,909 --> 00:08:36,909 hogy mi történt valójában látni Egy pillanatra belsejében a CS50 könyvtár, 198 00:08:36,909 --> 00:08:38,600 bár egy kicsit más formában. 199 00:08:38,600 --> 00:08:41,330 Szóval ez a program on-line 16 kijelenti változó x. 200 00:08:41,330 --> 00:08:43,150 Szóval adj négy bájtot int. 201 00:08:43,150 --> 00:08:45,750 Ez már mondtam felhasználó, számú kérjük, majd 202 00:08:45,750 --> 00:08:49,010 ez egy érdekes vonal ténylegesen összeköti a múlt héten 203 00:08:49,010 --> 00:08:49,790 és ez. 204 00:08:49,790 --> 00:08:53,230 Scanf, majd észre, hogy vesz egy formátumstringek, mint a printf, 205 00:08:53,230 --> 00:08:57,480 % i: az int, majd tart egy második érv, amely úgy néz ki, egy kicsit 206 00:08:57,480 --> 00:08:58,260 funky. 207 00:08:58,260 --> 00:09:01,880 Ez jelet x, és felidézni, mi csak láttam egyszer a múlt héten. 208 00:09:01,880 --> 00:09:03,465 Mit jelet x képviseli? 209 00:09:03,465 --> 00:09:06,210 210 00:09:06,210 --> 00:09:08,450 Mit jelet tenni a C? 211 00:09:08,450 --> 00:09:08,950 Igen? 212 00:09:08,950 --> 00:09:10,024 >> Közönség: Az címét. 213 00:09:10,024 --> 00:09:11,190 DAVID MALAN: Az címét. 214 00:09:11,190 --> 00:09:13,190 Szóval ez az ellenkezője A csillag üzemeltető, 215 00:09:13,190 --> 00:09:17,270 míg a csillag üzemeltető azt mondja, menj Erre a címre, a jelet üzemeltető 216 00:09:17,270 --> 00:09:20,280 mondja, kitalálni a címe ez a változó, 217 00:09:20,280 --> 00:09:23,530 és így ez a kulcs, mert scanf célja az életben 218 00:09:23,530 --> 00:09:26,320 hogy átvizsgálja a felhasználó közreműködött a billentyűzet, 219 00:09:26,320 --> 00:09:29,970 attól függően, hogy bármit ő típusok, majd olvasd el, hogy felhasználói input 220 00:09:29,970 --> 00:09:32,970 egy változó, de láttam az elmúlt két hétben 221 00:09:32,970 --> 00:09:36,080 hogy ez a swap hogy megpróbálta könnyedén végrehajtani 222 00:09:36,080 --> 00:09:37,110 Csak törve. 223 00:09:37,110 --> 00:09:42,470 Emlékezzünk vissza, hogy a swap, ha csak kijelentette, A és B, ints, 224 00:09:42,470 --> 00:09:47,040 mi nem sikerült cserélni a két változó belső swap 225 00:09:47,040 --> 00:09:50,080 Csakúgy, mint a tej és a HL, de amint swap-vissza, 226 00:09:50,080 --> 00:09:55,200 mi volt az eredmény tekintetében hogy x és y, az eredeti értékek? 227 00:09:55,200 --> 00:09:55,700 Semmi. 228 00:09:55,700 --> 00:09:56,200 Igen. 229 00:09:56,200 --> 00:09:59,754 Semmi sem történt abban az időben, mert csereügyletek változtatni csak a helyi másolatot, 230 00:09:59,754 --> 00:10:01,670 ami azt, valamennyi Ebben az időben, amikor mi már 231 00:10:01,670 --> 00:10:04,010 lett átadva érvek a funkciók vagyunk 232 00:10:04,010 --> 00:10:05,939 csak múló példányban ezeket az érveket. 233 00:10:05,939 --> 00:10:07,980 Meg lehet csinálni, hogy amit akarsz velük, 234 00:10:07,980 --> 00:10:10,890 de ők fognak nincs hatással az eredeti értékeket. 235 00:10:10,890 --> 00:10:13,650 Tehát ez problémás, ha szeretnénk, hogy a funkció, mint a scanf 236 00:10:13,650 --> 00:10:17,170 az életben, amelynek célja, hogy átvizsgálja A felhasználó által megadott a billentyűzetről 237 00:10:17,170 --> 00:10:22,010 majd töltse ki az üres, így a beszélni, hogy van, hogy egy változó, mint az X 238 00:10:22,010 --> 00:10:25,410 érték, mert ha én lennék hogy csak át x scanf, 239 00:10:25,410 --> 00:10:28,790 ha figyelembe vesszük a logikája utolsó héten, scanf tehet, amit akar 240 00:10:28,790 --> 00:10:33,100 egy példányát x, de nem tudta tartósan megváltoztatni x hacsak nem ad 241 00:10:33,100 --> 00:10:37,120 scanf egy kincses térképet, hogy úgy mondjam, ahol x jelzi a helyet, ahol 242 00:10:37,120 --> 00:10:41,860 átadjuk az x címét, hogy scanf lehet menni, és valójában a változás 243 00:10:41,860 --> 00:10:42,920 az x értékét. 244 00:10:42,920 --> 00:10:45,080 És így valóban minden hogy ez a program nem 245 00:10:45,080 --> 00:10:53,180 ha én scanf 0, az én forrás 5m könyvtár, hogy scanf 0, 246 00:10:53,180 --> 00:10:57,730 dot perjel scanf, száma Kérjük 50., köszönöm a 50. 247 00:10:57,730 --> 00:11:01,020 >> Szóval ez nem olyan érdekes, de mi történik valójában 248 00:11:01,020 --> 00:11:04,820 az, hogy amint hívom scanf itt, az x értékét 249 00:11:04,820 --> 00:11:06,410 alatt folyamatosan változott. 250 00:11:06,410 --> 00:11:08,335 Most úgy tűnik, ez szép és jó, és valójában ez 251 00:11:08,335 --> 00:11:11,200 Úgy tűnik, mintha nem igazán kell A CS50 könyvtár már egyáltalán. 252 00:11:11,200 --> 00:11:13,960 Például Fussunk ezt még egyszer itt. 253 00:11:13,960 --> 00:11:15,750 Hadd nyissa meg újra a második. 254 00:11:15,750 --> 00:11:20,600 Próbáljuk számos kérjük és ahelyett, hogy 50, mint korábban, 255 00:11:20,600 --> 00:11:22,810 mondjuk, nem. 256 00:11:22,810 --> 00:11:24,000 OK, ez egy kicsit furcsa. 257 00:11:24,000 --> 00:11:25,270 OKÉ. 258 00:11:25,270 --> 00:11:28,680 És csak valami ostobaságot itt. 259 00:11:28,680 --> 00:11:31,170 Tehát úgy tűnik, nem kezelni hibás helyzeteket. 260 00:11:31,170 --> 00:11:33,620 Tehát meg kell minimálisan kezdete hozzá néhány hibajavítási 261 00:11:33,620 --> 00:11:37,460 meggyőződni arról, hogy a felhasználó rendelkezik beírtam a tényleges szám, mint 50, 262 00:11:37,460 --> 00:11:40,720 mert látszólag gépelés szavak nem érzékeli problémának, 263 00:11:40,720 --> 00:11:42,020 de valószínűleg kell. 264 00:11:42,020 --> 00:11:46,450 >> Nézzük meg ezt a verziót most, hogy kísérletem újraimplementálni getString. 265 00:11:46,450 --> 00:11:48,437 Ha scanf van mindez funkcionalitást beépítve, 266 00:11:48,437 --> 00:11:51,270 Miért is lett belekóstoltak ezekkel képzés kerekek, mint getString? 267 00:11:51,270 --> 00:11:55,450 Nos, itt van talán a saját egyszerű változata getString 268 00:11:55,450 --> 00:12:00,766 ahol egy héttel ezelőtt azt mondta volna, adj egy húr, és hívják buffer. 269 00:12:00,766 --> 00:12:03,390 Ma megyek kezdődik csak mondván char csillag, amely visszahívás, 270 00:12:03,390 --> 00:12:04,400 ez csak egyet jelent. 271 00:12:04,400 --> 00:12:06,629 Úgy néz ki, rémisztőbb, de ez pontosan ugyanaz a dolog. 272 00:12:06,629 --> 00:12:09,420 Szóval adj egy változó nevű puffer hogy fog tárolni egy string, 273 00:12:09,420 --> 00:12:12,780 mondja a felhasználó húr kérjük, majd, mint korábban, 274 00:12:12,780 --> 00:12:17,760 próbáljuk kölcsönkérni ezt a leckét scanf % s ez alkalommal majd át a puffer. 275 00:12:17,760 --> 00:12:19,310 Most, gyors józanság csekket. 276 00:12:19,310 --> 00:12:22,120 Miért nem mondja jelet puffer ebben az időben? 277 00:12:22,120 --> 00:12:25,190 278 00:12:25,190 --> 00:12:26,625 Következtethetett az előző példában. 279 00:12:26,625 --> 00:12:28,000 Közönség: Char csillag egy mutatót. 280 00:12:28,000 --> 00:12:29,920 DAVID MALAN: Pontosan, mert ebben az időben, char 281 00:12:29,920 --> 00:12:34,080 csillag már egy mutató, cím, definíció szerint az, hogy a csillag ott. 282 00:12:34,080 --> 00:12:37,530 És ha scanf elvárja egy címet, elegendő csak át a puffer. 283 00:12:37,530 --> 00:12:39,260 Nem kell mondani, és jelet puffer. 284 00:12:39,260 --> 00:12:42,177 A kíváncsiak, amit lehetett ilyesmire. 285 00:12:42,177 --> 00:12:43,510 Ez volna mást jelent. 286 00:12:43,510 --> 00:12:47,240 Ez ad egy mutatót hogy egy mutató, ami valójában 287 00:12:47,240 --> 00:12:50,050 Érvényes dolog C, de Most pedig nézzük, hogy ez egyszerű 288 00:12:50,050 --> 00:12:51,750 és tartsa a történet következetes. 289 00:12:51,750 --> 00:12:54,100 Én csak átutazóban a puffer és ez helyes. 290 00:12:54,100 --> 00:12:56,487 A probléma azonban az, ez az. 291 00:12:56,487 --> 00:12:58,820 Hadd menjek előre, és futtatni ezt programot, miután úgy fordítják le. 292 00:12:58,820 --> 00:13:00,902 Tedd scanf 1. 293 00:13:00,902 --> 00:13:02,610 A fenébe is, én fordító által fogása hibámat. 294 00:13:02,610 --> 00:13:04,090 Adj nekem egy percet. 295 00:13:04,090 --> 00:13:05,460 Csengés. 296 00:13:05,460 --> 00:13:06,990 Mondjuk scanf-1.c. 297 00:13:06,990 --> 00:13:10,880 298 00:13:10,880 --> 00:13:11,380 OKÉ. 299 00:13:11,380 --> 00:13:12,720 Ott vagyunk. 300 00:13:12,720 --> 00:13:14,280 Kell nekem. 301 00:13:14,280 --> 00:13:16,750 CS50 ID a különböző konfigurációs beállítások 302 00:13:16,750 --> 00:13:18,280 hogy védenek meg magát. 303 00:13:18,280 --> 00:13:21,300 Kellett, hogy tiltsa le azokat a futó csengés kézzel ebben az időben. 304 00:13:21,300 --> 00:13:22,140 Tehát húr kérjük. 305 00:13:22,140 --> 00:13:25,560 Megyek előre, és írja menni A kedvenc hello world. 306 00:13:25,560 --> 00:13:26,490 OK, null. 307 00:13:26,490 --> 00:13:27,700 Ez nem az, amit beírtam. 308 00:13:27,700 --> 00:13:29,690 Tehát ez azt jelzi, hogy valami baj van. 309 00:13:29,690 --> 00:13:33,920 Hadd menjen előre, és írja egy nagyon hosszú sora. 310 00:13:33,920 --> 00:13:37,210 Köszönöm a semmis és nem tudom, ha én leszek képes összeomlik ez. 311 00:13:37,210 --> 00:13:40,240 Próbáljuk egy kicsit másolatot paszta és hátha ez segít. 312 00:13:40,240 --> 00:13:43,290 Csak illessze be egy csomó ezt. 313 00:13:43,290 --> 00:13:47,310 Ez mindenképpen egy nagyobb húr, mint máskor. 314 00:13:47,310 --> 00:13:51,450 Nézzük csak igazán megírni. 315 00:13:51,450 --> 00:13:51,950 Nem. 316 00:13:51,950 --> 00:13:52,650 Basszus. 317 00:13:52,650 --> 00:13:53,480 A parancs nem található. 318 00:13:53,480 --> 00:13:54,550 Szóval ez nem függ össze. 319 00:13:54,550 --> 00:13:56,440 Azért, mert én beillesztett néhány rossz karakter, 320 00:13:56,440 --> 00:13:59,780 de ez kiderül, nem fog működni. 321 00:13:59,780 --> 00:14:03,510 >> Próbáljuk ezt még egyszer, mert ez több móka, ha valóban összeomlik ez. 322 00:14:03,510 --> 00:14:09,116 Nézzük írja ezt, és most én vagyok szeretne másolni egy nagyon hosszú karakterlánc 323 00:14:09,116 --> 00:14:10,990 és most lássuk, ha összeomlását okozhatja ezt a dolgot. 324 00:14:10,990 --> 00:14:14,235 Figyeljük meg kihagytam terek és Új vonalak pontosvessző 325 00:14:14,235 --> 00:14:16,035 és az összes funky karakter. 326 00:14:16,035 --> 00:14:16,535 Belép. 327 00:14:16,535 --> 00:14:21,090 328 00:14:21,090 --> 00:14:22,880 És most a hálózat csak, hogy lassú. 329 00:14:22,880 --> 00:14:27,460 Tartottam lenyomva a Command-V túl hosszú, világos. 330 00:14:27,460 --> 00:14:28,190 Basszus! 331 00:14:28,190 --> 00:14:29,260 A parancs nem található. 332 00:14:29,260 --> 00:14:29,780 >> OKÉ. 333 00:14:29,780 --> 00:14:32,240 Nos, a lényeg az, Ennek ellenére a következő. 334 00:14:32,240 --> 00:14:36,910 Tehát mi történik valójában ezzel a nyilatkozattal 335 00:14:36,910 --> 00:14:39,240 char csillagos puffer on line 16? 336 00:14:39,240 --> 00:14:41,820 Szóval mit kapok ha kijelentem, egy mutatót? 337 00:14:41,820 --> 00:14:47,440 Minden kapok egy négy bájtos érték úgynevezett puffer, de mi van benne belőle 338 00:14:47,440 --> 00:14:49,540 abban a pillanatban? 339 00:14:49,540 --> 00:14:50,930 Ez csak néhány szemetet értéket. 340 00:14:50,930 --> 00:14:54,170 Mert minden alkalommal, amikor, hogy egy változót C, ez csak néhány szemetet értéket, 341 00:14:54,170 --> 00:14:56,220 és még csak most kezdünk megbotlani ez a valóság. 342 00:14:56,220 --> 00:14:59,720 Most, amikor elmondom scanf, menj erre a címre 343 00:14:59,720 --> 00:15:01,520 és tedd, amit a felhasználó által. 344 00:15:01,520 --> 00:15:06,400 Ha a felhasználó által helló világban, nos, hová tegyem meg? 345 00:15:06,400 --> 00:15:07,750 Puffer egy szemetet értéket. 346 00:15:07,750 --> 00:15:11,510 >> Szóval ez olyan, mint egy nyíl ami mutatva ki tudja, hol. 347 00:15:11,510 --> 00:15:13,880 Talán ez mutatva Itt az emlékezetemben. 348 00:15:13,880 --> 00:15:16,560 És így amikor a felhasználó típus hello world, 349 00:15:16,560 --> 00:15:22,380 A program megpróbálja tenni a karakterlánc hello world backslash 0 350 00:15:22,380 --> 00:15:23,910 abban a darab memória. 351 00:15:23,910 --> 00:15:27,070 De nagy valószínűséggel, de Nyilvánvalóan nem 100% -os valószínűséggel 352 00:15:27,070 --> 00:15:30,440 A számítógép fog majd lezuhan A programot, mert ez nem 353 00:15:30,440 --> 00:15:32,490 emlék számára lehetővé kell tenni, hogy megérintse. 354 00:15:32,490 --> 00:15:36,330 Tehát röviden, ez a program hibás Pontosan ez az oka. 355 00:15:36,330 --> 00:15:38,070 Én alapvetően nem mit csinál? 356 00:15:38,070 --> 00:15:42,366 Milyen lépéseket kell kihagytam, mint kihagytuk a Muci első példája? 357 00:15:42,366 --> 00:15:42,866 Igen? 358 00:15:42,866 --> 00:15:43,710 >> Közönség: Memóriakiosztási? 359 00:15:43,710 --> 00:15:45,001 >> DAVID MALAN: Memóriakiosztási. 360 00:15:45,001 --> 00:15:48,400 Én valójában nem kiosztott minden memória, hogy a húr. 361 00:15:48,400 --> 00:15:50,270 Így tudjuk javítani ezt a pár módon. 362 00:15:50,270 --> 00:15:52,700 Az egyik, tudjuk, hogy ez egyszerű és valóban, most már 363 00:15:52,700 --> 00:15:55,116 elkezdenek látni összemosódásának A sorok között, amit 364 00:15:55,116 --> 00:15:58,520 Egy tömb, amit egy string, amit egy char csillag, mit egy sor karakter 365 00:15:58,520 --> 00:15:59,020 van. 366 00:15:59,020 --> 00:16:02,450 Itt egy másik példa bevonásával húrok és értesítés 367 00:16:02,450 --> 00:16:05,690 amit tettem on-line 16, ahelyett, hogy 368 00:16:05,690 --> 00:16:09,530 hogy az átmeneti lesz egy char csillag, a mutató egy darab memória, 369 00:16:09,530 --> 00:16:14,057 Megyek nagyon proaktívan ad magamnak egy puffer 16 karakter, 370 00:16:14,057 --> 00:16:16,390 és valóban, ha ismeri a kifejezést pufferelés, 371 00:16:16,390 --> 00:16:20,570 Valószínűleg a világ a videók, ha egy videó pufferelés, puffer, 372 00:16:20,570 --> 00:16:21,175 bomlástermékeket. 373 00:16:21,175 --> 00:16:22,550 Nos, mi a kapcsolat itt? 374 00:16:22,550 --> 00:16:24,960 Nos, Inside YouTube és belsejét videó lejátszók 375 00:16:24,960 --> 00:16:27,200 általában egy tömb ami nagyobb, mint 16. 376 00:16:27,200 --> 00:16:30,340 Lehet, hogy egy sor mérete egy megabájtos, talán 10 megabájt, 377 00:16:30,340 --> 00:16:34,330 és ebbe a tömb nem a böngésző letölt egy csomó bájt, 378 00:16:34,330 --> 00:16:37,500 egy csomó megabájt videó, és a videó lejátszó, 379 00:16:37,500 --> 00:16:40,930 YouTube vagy akárki, kezdődik olvasás a byte-tömb, 380 00:16:40,930 --> 00:16:43,530 és minden alkalommal, amikor megjelenik a szó pufferelés, puffer, 381 00:16:43,530 --> 00:16:46,350 ez azt jelenti, a játékosnak ütött a vége, hogy a tömb. 382 00:16:46,350 --> 00:16:50,430 A hálózat olyan lassú, hogy ez nem történt újratöltötte a tömb több bájt 383 00:16:50,430 --> 00:16:55,610 és így kiestél bitek megjelenítéséhez a felhasználónak. 384 00:16:55,610 --> 00:16:59,430 >> Tehát puffer egy találó kifejezés itt, hogy ez csak egy tömb, egy darab memóriát. 385 00:16:59,430 --> 00:17:02,530 És ez javítani fogja mert kiderül, 386 00:17:02,530 --> 00:17:07,410 hogy tudod kezelni tömbök, mintha ezek címek, jóllehet puffer 387 00:17:07,410 --> 00:17:10,710 csak egy szimbólum, ez egy karakterek sorozata, buffer, 388 00:17:10,710 --> 00:17:14,760 ez hasznos a számomra, a programozó, akkor át a nevét körül 389 00:17:14,760 --> 00:17:17,079 mintha ez a mutató, mintha 390 00:17:17,079 --> 00:17:21,000 volt a címe egy darab A memória 16 karakter. 391 00:17:21,000 --> 00:17:24,530 Szóval ez azt mondani, tudom át A scanf pontosan ez a szó 392 00:17:24,530 --> 00:17:30,670 és így most, ha én ezt a programot, hogy scanf 2, pont perjel scanf 2, 393 00:17:30,670 --> 00:17:35,386 és írja be a hello world, Adja meg, hogy time-- 394 00:17:35,386 --> 00:17:37,590 >> Hmm, mi történt? 395 00:17:37,590 --> 00:17:39,340 Karakterlánc kérjük. 396 00:17:39,340 --> 00:17:41,430 Mit csináltam rosszul? 397 00:17:41,430 --> 00:17:43,800 Hello world, puffer. 398 00:17:43,800 --> 00:17:44,705 Helló Világ. 399 00:17:44,705 --> 00:17:48,201 400 00:17:48,201 --> 00:17:49,420 Ah, tudom, mit csinál. 401 00:17:49,420 --> 00:17:49,920 OKÉ. 402 00:17:49,920 --> 00:17:51,628 Szóval ez olvasás fel amíg az első helyet. 403 00:17:51,628 --> 00:17:55,680 Úgyhogy csalnak egy pillanatra, és azt mondják, én csak azt akartam, hogy írja valami 404 00:17:55,680 --> 00:18:01,408 Nagyon hosszú, mint ez egy hosszú mondat ez egy, kettő, három, négy, öt, 405 00:18:01,408 --> 00:18:04,420 hat, hét, nyolc, kilenc, 10, 11, 12, 13, 14, 15, 16. 406 00:18:04,420 --> 00:18:05,300 OKÉ. 407 00:18:05,300 --> 00:18:07,600 Ez valóban egy hosszú mondat. 408 00:18:07,600 --> 00:18:10,710 Szóval ez a mondat hosszabb 16 karakter 409 00:18:10,710 --> 00:18:13,670 és így amikor elütöttem Enter, mi fog történni? 410 00:18:13,670 --> 00:18:16,940 Nos, ebben az esetben a történet, én kijelentette, puffer 411 00:18:16,940 --> 00:18:22,190 hogy ténylegesen a tömb 16 karakter kész. 412 00:18:22,190 --> 00:18:27,426 Tehát egy, két, három, négy, öt, hat, hét, nyolc, kilenc, 10, 11, 12, 13, 14, 413 00:18:27,426 --> 00:18:29,440 15, 16. 414 00:18:29,440 --> 00:18:34,410 Tehát 16 karakter, és most, amikor én olvasott valami ilyesmi ez egy hosszú 415 00:18:34,410 --> 00:18:43,950 mondatban, hogy mi fog történni a hogy fogok olvasni, ez egy hosszú 416 00:18:43,950 --> 00:18:49,660 S-E-N-t-e-N-C-E, mondat. 417 00:18:49,660 --> 00:18:52,270 >> Tehát ez szándékosan egy rossz dolog, hogy én 418 00:18:52,270 --> 00:18:55,060 íráshoz túl határait én tömb, 419 00:18:55,060 --> 00:18:56,660 határain túl én puffer. 420 00:18:56,660 --> 00:19:00,100 Nem tudtam, hogy szerencsés és a program folyamatosan a futás és nem érdekel, 421 00:19:00,100 --> 00:19:03,450 de általában elmondható, hogy ez valóban összeomlik a programom, 422 00:19:03,450 --> 00:19:06,440 és ez a hiba az én kódolta a pillanatban lépek 423 00:19:06,440 --> 00:19:08,576 határain túl Az, hogy a tömb, mert én 424 00:19:08,576 --> 00:19:10,450 Nem tudom, ha ez szükségszerűen fog zuhanni 425 00:19:10,450 --> 00:19:12,120 vagy ha én csak megyek, hogy szerencsés. 426 00:19:12,120 --> 00:19:15,750 Szóval ez azért problémás, mert a ebben az esetben, úgy tűnik, hogy a munka 427 00:19:15,750 --> 00:19:20,931 és nézzük kísérteni a sorsot itt, annak ellenére, Az IDE tűnik elviselni egy kicsit 428 00:19:20,931 --> 00:19:21,430 of-- 429 00:19:21,430 --> 00:19:22,040 >> Ott vagyunk. 430 00:19:22,040 --> 00:19:23,240 Végre. 431 00:19:23,240 --> 00:19:26,470 Tehát én vagyok az egyetlen, amelyik képes látni. 432 00:19:26,470 --> 00:19:29,630 Szóval most volt egy nagyon szórakoztató gépelés ki egy nagyon hosszú tényleges kifejezésre 433 00:19:29,630 --> 00:19:32,800 hogy minden bizonnyal meghaladta 16 byte, mert 434 00:19:32,800 --> 00:19:38,050 gépelt ebben az őrült hosszú többsoros kifejezést, majd észre, hogy mi történt. 435 00:19:38,050 --> 00:19:41,110 A program megpróbálta azt kinyomtatni majd kapott egy szegmentációs hiba 436 00:19:41,110 --> 00:19:44,430 és szegmentációs hiba az, amikor ilyesmi történik 437 00:19:44,430 --> 00:19:47,650 és az operációs rendszer azt mondja Nem, nem érintheti meg, hogy az emlékezet. 438 00:19:47,650 --> 00:19:49,570 Mi fog ölni A program összesen. 439 00:19:49,570 --> 00:19:51,180 >> Szóval ez úgy tűnik problémásnak. 440 00:19:51,180 --> 00:19:54,540 Már javult a program, amelynek értelmében legalább van némi memóriát, 441 00:19:54,540 --> 00:19:58,000 de ez úgy tűnik, hogy esetükben A funkció getString hogy kapok 442 00:19:58,000 --> 00:20:00,780 húrjait véges hosszúságú 16. 443 00:20:00,780 --> 00:20:04,200 Tehát ha azt szeretnénk, hogy támogassák tovább mondatokat, mint 16 karakter, 444 00:20:04,200 --> 00:20:04,880 mit csinálsz? 445 00:20:04,880 --> 00:20:07,970 Nos, akkor növelheti a mérete puffer 32 446 00:20:07,970 --> 00:20:09,190 vagy azt, hogy úgy tűnik, olyan rövid. 447 00:20:09,190 --> 00:20:12,260 Miért nem csak, hogy ez 1000, de álljon vissza. 448 00:20:12,260 --> 00:20:17,100 Mi a válasz ösztönösen a Csak elkerülve ezzel a problémával azáltal, hogy 449 00:20:17,100 --> 00:20:20,660 én puffer nagyobb, mint 1000 karakter? 450 00:20:20,660 --> 00:20:23,470 A végrehajtási getString így. 451 00:20:23,470 --> 00:20:27,130 Mi a jó vagy rossz itt? 452 00:20:27,130 --> 00:20:28,033 Igen? 453 00:20:28,033 --> 00:20:30,574 Közönség: Ha kötődnek egy csomó A tér és nem használja, 454 00:20:30,574 --> 00:20:33,500 akkor nem adják ki ismételten, hogy a tér. 455 00:20:33,500 --> 00:20:34,500 DAVID MALAN: Abszolút. 456 00:20:34,500 --> 00:20:38,480 Ez pazarló, mivel ha nem valóban szükség van 900 e bájt 457 00:20:38,480 --> 00:20:41,057 és mégis kérsz 1000 Összesen egyébként, 458 00:20:41,057 --> 00:20:44,140 te csak fogyaszt több memóriát a felhasználó számítógépén, mint meg kell, 459 00:20:44,140 --> 00:20:45,740 és miután az összes, néhány akkor már találkozott 460 00:20:45,740 --> 00:20:47,620 az életben, hogy ha éppen futó rengeteg program 461 00:20:47,620 --> 00:20:50,470 és ők eszik fel sok memória, ez valóban befolyásolja a teljesítményt 462 00:20:50,470 --> 00:20:52,220 és a felhasználói élményt a számítógépen. 463 00:20:52,220 --> 00:20:56,090 Szóval ez a fajta lusta megoldás, az biztos, és fordítva, 464 00:20:56,090 --> 00:21:00,140 ez nem csak pazarló, mi a probléma továbbra is, még akkor is, ha tehetem puffer 465 00:21:00,140 --> 00:21:02,100 1000? 466 00:21:02,100 --> 00:21:02,600 Igen? 467 00:21:02,600 --> 00:21:04,475 >> Közönség: A karakterlánc hossza 1001. 468 00:21:04,475 --> 00:21:05,350 DAVID MALAN: Pontosan. 469 00:21:05,350 --> 00:21:08,280 Ha a string hossza 1001, Ön pontosan ugyanazt a hibát, 470 00:21:08,280 --> 00:21:10,705 és érvem, én Csak akkor teszi 2000- 471 00:21:10,705 --> 00:21:12,830 de nem tudom, előre, hogy mekkora legyen, 472 00:21:12,830 --> 00:21:16,890 és mégis, én le kell fordítanod a programot előtt hagyta ember használja, és töltse le 473 00:21:16,890 --> 00:21:17,390 azt. 474 00:21:17,390 --> 00:21:21,490 Szóval ez pontosan az a fajta dolog, hogy a CS50 könyvtár próbálkozás 475 00:21:21,490 --> 00:21:24,750 hogy segítsen bennünket, és mi csak pillantásra néhány, a mögöttes végrehajtása 476 00:21:24,750 --> 00:21:29,790 itt, de ez CS50 dot C. Ez a az a fájl, ami már a CS50 IDE 477 00:21:29,790 --> 00:21:31,420 Mindezen hetekben, hogy van már használja. 478 00:21:31,420 --> 00:21:34,280 Ez előre összeállított és akkor már használ ez automatikusan 479 00:21:34,280 --> 00:21:38,780 természeténél rendelkező dash L CS50 zászló csengés, 480 00:21:38,780 --> 00:21:42,300 de ha nézd végig az összes ezeket a funkciókat, itt getString, 481 00:21:42,300 --> 00:21:44,636 és csak, hogy ha egy íze, mi folyik itt, 482 00:21:44,636 --> 00:21:46,760 vessünk egy gyors pillantást a viszonylagos összetettségét. 483 00:21:46,760 --> 00:21:48,870 Ez nem egy nagyon hosszú funkciót, de nem tettük 484 00:21:48,870 --> 00:21:52,530 meg kell gondolni minden nehéz erről hogyan megy a szerzés szálakat. 485 00:21:52,530 --> 00:21:55,660 >> Tehát itt az én puffer és én látszólag inicializálás null. 486 00:21:55,660 --> 00:21:57,990 Ez, természetesen, a ugyanaz, mint a char csillag, 487 00:21:57,990 --> 00:22:00,585 de én úgy határozott, végrehajtása CS50 könyvtár 488 00:22:00,585 --> 00:22:02,460 hogy ha megyünk teljesen dinamikus, 489 00:22:02,460 --> 00:22:05,770 Nem tudom előre, hogy mekkora egy húr a felhasználók fognak akarnak. 490 00:22:05,770 --> 00:22:08,140 Így fogok kezdeni csak egy üres stringet 491 00:22:08,140 --> 00:22:11,507 és fogok felépíteni annyi memória, ahogy kell, hogy illeszkedjen a felhasználó húr 492 00:22:11,507 --> 00:22:13,340 és ha nincs elég, én fogom kérni 493 00:22:13,340 --> 00:22:15,010 Az operációs rendszer több memóriát. 494 00:22:15,010 --> 00:22:17,510 Megyek mozgatni a húr egy nagyobb darab memória 495 00:22:17,510 --> 00:22:21,847 és megyek, hogy kiadja, vagy szabad a kellően nagy darab memória 496 00:22:21,847 --> 00:22:23,680 és mi csak megy Ehhez iteratív. 497 00:22:23,680 --> 00:22:25,570 >> Tehát egy gyors pillantást, Itt csak egy változó 498 00:22:25,570 --> 00:22:28,780 amellyel fogom nyomon követni A kapacitása én puffer. 499 00:22:28,780 --> 00:22:30,071 Hány byte tudok illik? 500 00:22:30,071 --> 00:22:32,070 Itt egy változó n és amely fogom tartani 501 00:22:32,070 --> 00:22:36,200 követni, hogy hány bájt ténylegesen a puffer vagy a felhasználó által beírt. 502 00:22:36,200 --> 00:22:39,900 Ha nem láttam ilyet, akkor meghatározhatja, hogy egy változó, mint egy int 503 00:22:39,900 --> 00:22:46,370 aláíratlan, amely mint a neve is sugallja, azt jelenti, hogy nem negatív, és miért lenne 504 00:22:46,370 --> 00:22:50,590 Én soha akarom zavarni, meghatározva hogy egy int nem csak egy int, 505 00:22:50,590 --> 00:22:52,540 de ez egy unsigned int? 506 00:22:52,540 --> 00:22:55,064 Ez egy nem-negatív int. 507 00:22:55,064 --> 00:22:56,355 Mit jelent az [hallhatatlan] jelent? 508 00:22:56,355 --> 00:22:58,910 >> Közönség: Ez leírja mennyiségben memóriával rendelkezik, amely lehet [hallhatatlan]. 509 00:22:58,910 --> 00:22:59,660 >> DAVID MALAN: Igen. 510 00:22:59,660 --> 00:23:03,710 Tehát, ha azt mondom, előjel nélküli, ez valójában így egy kis extra memória 511 00:23:03,710 --> 00:23:07,440 és úgy tűnik, egyfajta buta, de ha Van egy kis plusz memóriát, hogy 512 00:23:07,440 --> 00:23:09,940 azt jelenti, hogy kétszer annyi értékeket is képviseli, 513 00:23:09,940 --> 00:23:11,570 mert ez lehet egy 0 vagy egy 1. 514 00:23:11,570 --> 00:23:14,660 Emiatt alapértelmezés szerint int nagyjából negatív 2 milliárd egészen 515 00:23:14,660 --> 00:23:16,030 akár pozitív 2 milliárd. 516 00:23:16,030 --> 00:23:18,540 Ezek nagy tartományok, de ez még mindig egyfajta pazarló 517 00:23:18,540 --> 00:23:21,280 ha csak érdekel méretű, ami csak ösztönösen 518 00:23:21,280 --> 00:23:24,620 kell lennie, nem-negatív, vagy pozitív vagy 0, illetve akkor, 519 00:23:24,620 --> 00:23:28,884 miért pazarolja 2 milliárd lehetséges értékei negatív számok 520 00:23:28,884 --> 00:23:30,300 ha te soha nem fog használni őket? 521 00:23:30,300 --> 00:23:35,350 Tehát azzal, aláíratlan, most én is int között 0 és mintegy 4 milliárd. 522 00:23:35,350 --> 00:23:39,280 >> Tehát itt csak egy int C okokból nem fogunk bejutni csak most 523 00:23:39,280 --> 00:23:42,280 hogy miért ez egy int helyett Egy karakteres, de itt van 524 00:23:42,280 --> 00:23:44,630 a lényeg, hogy mi folyik itt tovább, és néhányan közületek 525 00:23:44,630 --> 00:23:48,340 Lehet, hogy használ, például a fgetc funkció még PSET négy 526 00:23:48,340 --> 00:23:51,580 vagy azt követően, majd meglátjuk, hogy ismét problémát meg öt, 527 00:23:51,580 --> 00:23:55,410 fgetc szép, mert ahogy a neve fajta, fajta arcanely sugallja, 528 00:23:55,410 --> 00:23:57,940 ez egy függvényt, amely kap egy karaktert, és így, 529 00:23:57,940 --> 00:24:00,690 mi alapvetően eltérő arról, hogy mit csinálunk a getString 530 00:24:00,690 --> 00:24:03,110 a mi nem használjuk scanf ugyanúgy. 531 00:24:03,110 --> 00:24:07,550 Mi csak kúszik végig lépésről-lépésre mint amit a felhasználó beírt, 532 00:24:07,550 --> 00:24:10,970 mert mi mindig hozzá egy char, és így mindig biztonságosan 533 00:24:10,970 --> 00:24:15,599 nézd meg egy karaktert egy időben, és A mágikus kezd itt történni. 534 00:24:15,599 --> 00:24:17,890 Megyek lépjünk le a a közepén ez a funkció 535 00:24:17,890 --> 00:24:20,360 csak azért, hogy röviden bemutassuk ezt a funkciót. 536 00:24:20,360 --> 00:24:22,670 Hasonlóan van egy malloc függvény, van 537 00:24:22,670 --> 00:24:27,740 A realloc függvény, ahol realloc Lehetővé teszi átcsoportosítása egy darab memória 538 00:24:27,740 --> 00:24:29,570 és hogy ez nagyobb, vagy kisebb. 539 00:24:29,570 --> 00:24:33,060 Tehát hosszú történet rövid és hullám kezem a mai, 540 00:24:33,060 --> 00:24:35,620 tudom, hogy mit getString csinál, az ez a fajta 541 00:24:35,620 --> 00:24:39,720 A varázslatosan növekvő vagy csökken a puffer, mint a felhasználói 542 00:24:39,720 --> 00:24:41,440 típus ő karakterlánc. 543 00:24:41,440 --> 00:24:43,962 >> Tehát, ha a felhasználó beír egy rövid karakterlánc, ezt a kódot 544 00:24:43,962 --> 00:24:45,920 egyszerre csak annyi memória, hogy illeszkedjen a húr. 545 00:24:45,920 --> 00:24:48,086 Ha a felhasználó tartja gépelési mint én újra és újra 546 00:24:48,086 --> 00:24:50,330 és újra, nos, ha a puffer kezdetben ez a nagy 547 00:24:50,330 --> 00:24:53,310 és a program felismeri, hogy várj egy percet, én vagyok a hely, 548 00:24:53,310 --> 00:24:55,410 ez lesz a kettős a méret a puffer 549 00:24:55,410 --> 00:24:59,110 majd kétszer a puffer mérete és a kód, hogy nem a duplázás, 550 00:24:59,110 --> 00:25:03,170 Ha megnézzük, hogy itt, ez Csak az okos egysoros. 551 00:25:03,170 --> 00:25:06,830 Lehet, hogy nem látta ezt a szintaxist előtt, de ha azt mondod csillagos egyenlő, 552 00:25:06,830 --> 00:25:10,470 ez ugyanaz, mint a mondván kapacitás alkalommal 2. 553 00:25:10,470 --> 00:25:13,390 Tehát így csak megduplázva a kapacitás a puffer 554 00:25:13,390 --> 00:25:17,480 majd elmondja realloc adni arról, hogy sokkal több memóriát. 555 00:25:17,480 --> 00:25:19,720 >> Most, mint egy félre, ott más funkciók itt 556 00:25:19,720 --> 00:25:23,680 hogy nem fogunk nézni bele a részletekbe Más, mint megmutatni a GetInt, 557 00:25:23,680 --> 00:25:26,150 használjuk getString a GetInt. 558 00:25:26,150 --> 00:25:28,192 Megnézzük, hogy ez nem null, amely visszahívás, 559 00:25:28,192 --> 00:25:30,400 a különös érték azt jelenti, valami elromlott. 560 00:25:30,400 --> 00:25:31,233 Elfogyott a memória. 561 00:25:31,233 --> 00:25:32,310 Jobb ellenőrizze, hogy. 562 00:25:32,310 --> 00:25:33,710 És térjünk vissza egy őrszem értéket. 563 00:25:33,710 --> 00:25:37,850 De majd elhalasztja a megjegyzéseket, hogy Ezért aztán használja ezt unokatestvére scanf 564 00:25:37,850 --> 00:25:42,100 nevű sscanf és kiderül, hogy sscanf, vagy string scanf, 565 00:25:42,100 --> 00:25:45,310 Lehetővé teszi, hogy egy pillantást a sor, hogy A felhasználó begépelte, és segítségével 566 00:25:45,310 --> 00:25:49,610 elemezni lényegében és mire vagyok keresnek itt van Én mondom sscanf, 567 00:25:49,610 --> 00:25:54,440 elemzik, amit a felhasználó beírt és győződjön meg róla% i, 568 00:25:54,440 --> 00:25:59,250 van egy egész szám, és nem fogunk bejutni ma pontosan, hogy miért van még 569 00:25:59,250 --> 00:26:03,760 egy% c ide, de ez dióhéjban lehetővé számunkra, hogy érzékeli, ha a felhasználó begépelt 570 00:26:03,760 --> 00:26:06,050 valami hamis szám után. 571 00:26:06,050 --> 00:26:11,766 Tehát az oka, hogy GetInt és getString megmondja, hogy újra, újra, újra 572 00:26:11,766 --> 00:26:13,640 azért van, mert az összes hogy a kód is írtam, 573 00:26:13,640 --> 00:26:17,900 ez a fajta nézi a felhasználó által megadott ügyelve arra, hogy teljesen numerikus 574 00:26:17,900 --> 00:26:21,700 vagy ez egy tényleges úszó pont értéke vagy hasonló, 575 00:26:21,700 --> 00:26:24,233 attól függően, hogy milyen értéket működik, amit használ. 576 00:26:24,233 --> 00:26:25,060 >> Hűha. 577 00:26:25,060 --> 00:26:25,710 OKÉ. 578 00:26:25,710 --> 00:26:27,592 Hogy volt egy falatot de a lényeg itt 579 00:26:27,592 --> 00:26:29,550 hogy az ok volt azok Segédkerekekkel 580 00:26:29,550 --> 00:26:32,880 azért van, mert a legalacsonyabb szinten, ott is csak annyi dolog, hogy 581 00:26:32,880 --> 00:26:35,674 elromolhat, hogy szerettünk volna a megelőző jellegű kezelni 582 00:26:35,674 --> 00:26:38,090 ezek a dolgok minden bizonnyal a legkorábbi héttel az osztály, 583 00:26:38,090 --> 00:26:42,230 de most PSET négy és öt PSET és túl fogja látni, hogy ez inkább hozzátok 584 00:26:42,230 --> 00:26:45,570 te, hanem te sokkal alkalmasabb megoldásának ilyen jellegű problémák 585 00:26:45,570 --> 00:26:47,180 magad. 586 00:26:47,180 --> 00:26:51,770 Bármilyen kérdésre getString vagy GetInt? 587 00:26:51,770 --> 00:26:52,630 Igen? 588 00:26:52,630 --> 00:26:55,130 >> Közönség: Miért megduplázódik a kapacitás a puffer 589 00:26:55,130 --> 00:26:57,630 ahelyett, hogy csak növekvő ez a pontos összeget? 590 00:26:57,630 --> 00:26:58,100 >> DAVID MALAN: Jó kérdés. 591 00:26:58,100 --> 00:27:00,474 Miért lenne dupla kapacitás a puffer szemben 592 00:27:00,474 --> 00:27:02,800 hogy csak növeli, hogy néhány állandó érték? 593 00:27:02,800 --> 00:27:03,900 Ez egy tervezési döntés volt. 594 00:27:03,900 --> 00:27:08,590 Mi csak úgy döntött, hogy mert hajlamos egy kicsit drága időt bölcs kérni 595 00:27:08,590 --> 00:27:10,440 az operációs rendszer a memória, mi nem 596 00:27:10,440 --> 00:27:13,210 akarnak a végén kapok a helyzet a nagy húrok 597 00:27:13,210 --> 00:27:14,960 hogy mi volt kérve Az OS újra és újra 598 00:27:14,960 --> 00:27:17,500 és újra és újra gyors egymásutánban a memória. 599 00:27:17,500 --> 00:27:20,387 Szóval csak úgy döntött, valamivel önkényesen de reméljük ésszerűen, 600 00:27:20,387 --> 00:27:22,720 hogy, tudod mit, hadd próbálja túltenni magunkat 601 00:27:22,720 --> 00:27:25,520 és csak tartani duplájára úgy, hogy minimalizáljuk a mennyiségű alkalommal 602 00:27:25,520 --> 00:27:29,010 meg kell hívni malloc vagy realloc, de összesen ítélet 603 00:27:29,010 --> 00:27:31,820 hívja hiányában tudva a felhasználók mit érdemes írja be. 604 00:27:31,820 --> 00:27:33,600 Mindkét módon lehetne vitatható. 605 00:27:33,600 --> 00:27:35,430 Vitathatatlanul jó. 606 00:27:35,430 --> 00:27:39,240 >> Szóval vessünk egy pillantást egy pár Más mellékhatások memória, 607 00:27:39,240 --> 00:27:41,610 dolgok rosszra és eszközök, amelyek segítségével 608 00:27:41,610 --> 00:27:43,880 Használja elkapni az ilyen jellegű hibákat. 609 00:27:43,880 --> 00:27:47,800 Kiderült, mindannyian, noha check50 nem mondta meg annyira, 610 00:27:47,800 --> 00:27:50,050 Készítettem hibás kód, mivel a héten az egyik, 611 00:27:50,050 --> 00:27:53,630 még ha minden check50 tesztek telt el, és akkor is, ha te és a TF 612 00:27:53,630 --> 00:27:56,010 szuper benne, hogy A kód működik rendeltetésszerűen. 613 00:27:56,010 --> 00:27:59,190 A kód már hibás, vagy hibás, hogy mindannyian, 614 00:27:59,190 --> 00:28:02,540 használják a CS50 könyvtár, már szivárog a memória. 615 00:28:02,540 --> 00:28:06,040 Már azt kérdezi az operációs rendszer a memória a legtöbb programok 616 00:28:06,040 --> 00:28:08,850 írtál, de akkor már sosem adta vissza. 617 00:28:08,850 --> 00:28:12,110 Már úgynevezett getString és GetInt és GetFloat, 618 00:28:12,110 --> 00:28:15,270 de getString, akkor már Soha nem nevezett unGetString vagy adjon 619 00:28:15,270 --> 00:28:19,890 Húrt vagy hasonló, de láttunk hogy getString nem foglalható memória 620 00:28:19,890 --> 00:28:22,810 útján malloc vagy ennek funkciót realloc, ami csak 621 00:28:22,810 --> 00:28:25,670 nagyon hasonló szellemben, és mégis, mi már 622 00:28:25,670 --> 00:28:28,629 kérve az operációs rendszer memória és a memória, újra és újra 623 00:28:28,629 --> 00:28:29,670 de soha nem adja vissza. 624 00:28:29,670 --> 00:28:33,550 >> Most, mint egy félre, kiderül, hogy amikor egy program leáll, mind a memória 625 00:28:33,550 --> 00:28:34,870 automatikusan felszabadul. 626 00:28:34,870 --> 00:28:36,150 Szóval ez nem volt egy hatalmas üzlet. 627 00:28:36,150 --> 00:28:38,590 Ez nem fog megtörni a IDE vagy lelassítani a dolgokat, 628 00:28:38,590 --> 00:28:40,670 de amikor programokat csinálni Általában szivárog a memória 629 00:28:40,670 --> 00:28:42,170 és ők fut sokáig. 630 00:28:42,170 --> 00:28:45,640 Ha valaha is láttam a kis hülye strandlabda Mac OS vagy a homokóra 631 00:28:45,640 --> 00:28:51,160 Windows ahol ez a fajta lassítása vagy a gondolkodás vagy a gondolkodás 632 00:28:51,160 --> 00:28:53,770 vagy csak tényleg elindul hogy lassú a csúszás, 633 00:28:53,770 --> 00:28:56,960 ez nagy valószínűséggel lehet Az eredmény egy memóriavesztés. 634 00:28:56,960 --> 00:28:59,970 A programozó, aki írta A szoftver, amit használ 635 00:28:59,970 --> 00:29:03,570 kérje az operációs rendszer memória néhány percenként, óránként. 636 00:29:03,570 --> 00:29:05,570 De ha fut a szoftver, akkor is, ha ez 637 00:29:05,570 --> 00:29:08,680 minimalizálni a számítógép órákig vagy napokig, 638 00:29:08,680 --> 00:29:11,980 lehet, hogy kérdezed egyre több memória és soha nem használja 639 00:29:11,980 --> 00:29:15,180 és így a kód lehet, vagy programok lehet, hogy szivárog a memória, 640 00:29:15,180 --> 00:29:18,350 és ha szivárogni kezd a memória, ott kevesebb memória más programok, 641 00:29:18,350 --> 00:29:21,220 és a hatás az, hogy lassú mindent le. 642 00:29:21,220 --> 00:29:23,600 >> Nos, ez messze az egyik A legkegyetlenebb programok 643 00:29:23,600 --> 00:29:26,350 akkor lehetőség futtatni CS50 amennyiben 644 00:29:26,350 --> 00:29:31,650 mivel a kimenete még ezoterikus, mint csengés vagy a tenni vagy bármely parancs 645 00:29:31,650 --> 00:29:35,930 vonal programok általunk futtatott előtt, de Szerencsére ágyazott kimenete 646 00:29:35,930 --> 00:29:39,810 van néhány szuper hasznos tanács, amely hasznos lesz akár PSET négy 647 00:29:39,810 --> 00:29:41,510 vagy biztosan PSET öt. 648 00:29:41,510 --> 00:29:44,250 Tehát valgrind egy olyan eszköz, hogy lehet használni, hogy nézd 649 00:29:44,250 --> 00:29:46,930 A memóriavesztés a programban. 650 00:29:46,930 --> 00:29:48,570 Ez viszonylag egyszerű futni. 651 00:29:48,570 --> 00:29:51,420 Futtatja valgrind majd, sőt bár ez egy kicsit bőbeszédű, 652 00:29:51,420 --> 00:29:54,440 dash dash szivárgás ellenőrzés megegyezik a teljes, majd pont 653 00:29:54,440 --> 00:29:56,320 perjel és a program nevét. 654 00:29:56,320 --> 00:30:00,010 Tehát valgrind majd futtatni a programot és a legvégén a program 655 00:30:00,010 --> 00:30:02,240 futás előtt kilép és ad egy másik gyors, 656 00:30:02,240 --> 00:30:04,980 ez lesz elemezni a programot, miközben ez már fut 657 00:30:04,980 --> 00:30:07,740 és megmondja, ugye szivárog memóriát és ami még jobb, 658 00:30:07,740 --> 00:30:10,610 Megérintette memória nem a tiéd? 659 00:30:10,610 --> 00:30:13,700 Ez nem lehet elkapni mindent, de ez Elég jó fogása a legtöbb dolog. 660 00:30:13,700 --> 00:30:19,700 >> Tehát itt egy példa az én üzemelés ez a program, amelynek távon valgrind, 661 00:30:19,700 --> 00:30:21,470 A program neve memória, és megyek 662 00:30:21,470 --> 00:30:24,730 hogy kiemelje a vonalak, amelyek végül érdekes számunkra. 663 00:30:24,730 --> 00:30:27,690 Szóval van még zavaró hogy már törölték a diát. 664 00:30:27,690 --> 00:30:30,930 De nézzük meg, mi ez a program képes megmondani nekünk. 665 00:30:30,930 --> 00:30:34,800 Ez képes mondja a dolgokat mint érvénytelen írása 4-es méretű. 666 00:30:34,800 --> 00:30:38,020 Más szóval, ha megérinti a memória, konkrétan 4 byte memóriát 667 00:30:38,020 --> 00:30:40,350 hogy nem kellett volna, valgrind lehet mondani, hogy. 668 00:30:40,350 --> 00:30:41,660 Érvénytelen írása 4-es méretű. 669 00:30:41,660 --> 00:30:43,640 Ön megérintette négy bájt hogy nem kellett volna. 670 00:30:43,640 --> 00:30:44,840 Hol csináltad ezt? 671 00:30:44,840 --> 00:30:45,900 Ez a szépség. 672 00:30:45,900 --> 00:30:50,000 Memória pont c 21-es vonal az, ahol elrontottam, és ez az, amiért ez hasznos. 673 00:30:50,000 --> 00:30:53,410 Hasonlóan GDB, ez segíthet pont akkor a tényleges hiba. 674 00:30:53,410 --> 00:30:57,170 >> Nos, ez az ember egy kicsit többet bőbeszédű, ha nem zavaró. 675 00:30:57,170 --> 00:31:01,307 40 bájt 1 háztömbnyire határozottan elveszett veszteség rekord 1 1. 676 00:31:01,307 --> 00:31:02,140 Az mit jelent? 677 00:31:02,140 --> 00:31:05,920 Nos, ez csak azt jelenti, amit kértél 40 bájt és soha nem adta vissza. 678 00:31:05,920 --> 00:31:08,930 Hívtál malloc vagy hívott GetString és az operációs rendszer 679 00:31:08,930 --> 00:31:12,450 kaptál 40 bájt, de soha nem felszabadult, vagy megjelent, hogy az emlékezet, 680 00:31:12,450 --> 00:31:15,400 és az igazat megvallva, még sosem mutatják Ön hogyan adja vissza a memória. 681 00:31:15,400 --> 00:31:17,910 Kiderült, hogy van egy szuper egyszerű függvény úgynevezett szabad. 682 00:31:17,910 --> 00:31:21,170 Egy paramétert, a dolog akarsz felszabadítani, vagy adja vissza, 683 00:31:21,170 --> 00:31:23,430 de 40 bájt, úgy tűnik, ebben a programban 684 00:31:23,430 --> 00:31:27,300 szűnt meg sorban 20 memória pont c. 685 00:31:27,300 --> 00:31:28,650 >> Nézzük ezt a programot. 686 00:31:28,650 --> 00:31:31,020 Ez szuper haszontalan. 687 00:31:31,020 --> 00:31:33,980 Ez csak azt mutatja az adott hiba. 688 00:31:33,980 --> 00:31:34,920 Szóval vessünk egy pillantást. 689 00:31:34,920 --> 00:31:39,920 Itt a fő és legfontosabb, értesítés, hívások függvényét f, majd visszatér. 690 00:31:39,920 --> 00:31:41,550 Szóval nem olyan érdekes. 691 00:31:41,550 --> 00:31:42,664 Mit f csinálni? 692 00:31:42,664 --> 00:31:44,330 Figyeljük meg én nem zavarta a prototípus. 693 00:31:44,330 --> 00:31:46,520 Azt akartam, hogy a kódot a lehető legkisebb legyen. 694 00:31:46,520 --> 00:31:49,530 Így tettem f feletti fő- és ez rendben van, természetesen, 695 00:31:49,530 --> 00:31:51,500 A rövid programok, mint ez. 696 00:31:51,500 --> 00:31:56,910 Tehát f nem tér vissza semmit, és nem nem vesz semmit, de ez nem erre a célra. 697 00:31:56,910 --> 00:31:59,620 Kijelenti, ugyanúgy, mint A Muci például 698 00:31:59,620 --> 00:32:02,682 egy mutatót nevű x, hogy folyik tárolni a címét egy int. 699 00:32:02,682 --> 00:32:03,890 Szóval ez a bal oldali. 700 00:32:03,890 --> 00:32:07,230 Angol, mi a jobb oldalon csinál? 701 00:32:07,230 --> 00:32:09,770 Bárki? 702 00:32:09,770 --> 00:32:13,665 Mit csinál ez nekünk? 703 00:32:13,665 --> 00:32:14,651 Igen? 704 00:32:14,651 --> 00:32:16,623 >> Közönség: [hallható] szor akkora, mint egy int 705 00:32:16,623 --> 00:32:19,175 ami 10-szer, hogy a [nem hallható] 706 00:32:19,175 --> 00:32:20,800 DAVID MALAN: Jó és hadd foglaljam össze. 707 00:32:20,800 --> 00:32:25,480 Tehát kiosztani elég hely a 10 egészek vagy 10, mi a mérete egy int, 708 00:32:25,480 --> 00:32:29,340 ez négy bájt, ezért 10-szer 4 40, így a jobb oldalon, hogy én már 709 00:32:29,340 --> 00:32:33,930 kiemelendő, hogy nekem 40 bájt és tárolja a címe az első bájt 710 00:32:33,930 --> 00:32:34,940 be x. 711 00:32:34,940 --> 00:32:38,380 És most végül, és itt, ahol ez a program hibás, mi 712 00:32:38,380 --> 00:32:41,540 baj vonalon 21 alapján, hogy a logika? 713 00:32:41,540 --> 00:32:45,197 714 00:32:45,197 --> 00:32:46,280 Mi a baj a 21-es vonal? 715 00:32:46,280 --> 00:32:46,780 Igen? 716 00:32:46,780 --> 00:32:49,550 Közönség: Nem lehet indexként x [hallhatatlan]. 717 00:32:49,550 --> 00:32:50,300 DAVID MALAN: Igen. 718 00:32:50,300 --> 00:32:52,270 Nem kellene indexként x ilyesmi. 719 00:32:52,270 --> 00:32:53,850 Szóval nyelvtanilag, az rendben van. 720 00:32:53,850 --> 00:32:56,990 Mi a szép az, mint ahogy lehet kezelni a tömb neve 721 00:32:56,990 --> 00:33:01,080 mintha ez egy mutatót, hasonlóan tud kezelni egy mutatót, mintha ez 722 00:33:01,080 --> 00:33:06,425 tömb, és így tudok szintaktikailag mondjuk x konzol valamit, x konzol i, 723 00:33:06,425 --> 00:33:07,800 de a 10 problematikus. 724 00:33:07,800 --> 00:33:09,096 Miért? 725 00:33:09,096 --> 00:33:10,910 >> Közönség: Mert ez nem befelé. 726 00:33:10,910 --> 00:33:12,390 >> DAVID MALAN: Nem belül, hogy a darab a memóriát. 727 00:33:12,390 --> 00:33:15,306 Mi a legnagyobb értéket kellene szándékozik azokban szögletes zárójelben? 728 00:33:15,306 --> 00:33:16,870 9, 0-tól 9. 729 00:33:16,870 --> 00:33:18,160 Mivel a nulla indexelés. 730 00:33:18,160 --> 00:33:20,190 Tehát 0-tól 9 jó lenne. 731 00:33:20,190 --> 00:33:23,960 Konzol 10 nem jó, és de idézni azonban, minden alkalommal 732 00:33:23,960 --> 00:33:27,017 Úgy tűnik, hogy megpróbálja CS50 IDE baleset beírja a hamis értékek, 733 00:33:27,017 --> 00:33:29,100 ez nem mindig együtt, sőt, gyakran 734 00:33:29,100 --> 00:33:31,460 szerencséd lesz, csak azért, mert a operációs rendszer nem 735 00:33:31,460 --> 00:33:35,467 észre, hogy alig észrevehetően át néhány darab memória, 736 00:33:35,467 --> 00:33:38,300 mert tartózkodott belül technikailag a szegmensben, de erről bővebben 737 00:33:38,300 --> 00:33:40,940 egy operációs rendszerek osztály, és így valami ilyesmi 738 00:33:40,940 --> 00:33:43,000 nagyon könnyen lehet nem derül fény. 739 00:33:43,000 --> 00:33:48,120 Készítsünk programot, sosem fog zuhanni következetesen de talán egyszer egy kicsit. 740 00:33:48,120 --> 00:33:50,610 >> És így próbáljuk valgrind Erre, és itt 741 00:33:50,610 --> 00:33:52,870 ahol mi kap elárasztják által a kimeneti pillanatra. 742 00:33:52,870 --> 00:34:00,810 Tehát, hogy a memória valgrind szivárgás ellenőrzés egyenlő full dot perjel memória. 743 00:34:00,810 --> 00:34:03,040 És itt miért Ígérem ez elborít. 744 00:34:03,040 --> 00:34:05,700 Itt van, amit valgrind, itt van, amit egy programozó, néhány évvel ago- 745 00:34:05,700 --> 00:34:08,469 döntöttem, hogy lenne egy jó ötlet A kimeneti kinézni. 746 00:34:08,469 --> 00:34:09,750 Szóval van értelme ennek. 747 00:34:09,750 --> 00:34:13,120 Tehát egészen a bal oldali oldalán ok nélkül 748 00:34:13,120 --> 00:34:16,620 folyamat azonosítója a program mi csak futni, az egyedi azonosítót 749 00:34:16,620 --> 00:34:18,030 A program már csak futott. 750 00:34:18,030 --> 00:34:19,738 Mi hagyni, hogy honnan A dia, de 751 00:34:19,738 --> 00:34:22,190 van néhány hasznos információt itt. 752 00:34:22,190 --> 00:34:24,684 >> Nézzük felfelé a csúcsra. 753 00:34:24,684 --> 00:34:25,600 Itt, ahol elkezdtük. 754 00:34:25,600 --> 00:34:27,040 Tehát ez nem olyan sok kimenet. 755 00:34:27,040 --> 00:34:30,429 Itt van, hogy az érvénytelen írási A 4-es méretű on-line 21. 756 00:34:30,429 --> 00:34:31,760 Nos, mi volt 21-es vonal? 757 00:34:31,760 --> 00:34:34,500 21. sor pontosan ezt, és van értelme 758 00:34:34,500 --> 00:34:37,290 hogy én vagyok az érvényesen írásban 4 byte, mert én vagyok 759 00:34:37,290 --> 00:34:40,389 próbál tenni ezt az egész, ami lehet bármi, 760 00:34:40,389 --> 00:34:42,370 ez most történik, hogy nulla, de próbálom 761 00:34:42,370 --> 00:34:44,940 tedd olyan helyre hogy nem tartozik rám. 762 00:34:44,940 --> 00:34:50,900 Sőt, itt lent, 40 bájt egy blokkok biztosan elveszett a rekord 1. 763 00:34:50,900 --> 00:34:56,500 Ennek oka, hogy amikor hívom malloc Itt igazából nem szabad a memóriát. 764 00:34:56,500 --> 00:34:58,140 >> Szóval hogyan lehet ezen javítani? 765 00:34:58,140 --> 00:35:02,970 Hadd menjen előre, és egy kicsit biztonságosabb és nem 9, és hagyod, ide szabadon x. 766 00:35:02,970 --> 00:35:04,820 Ez az új funkció a mai. 767 00:35:04,820 --> 00:35:11,520 Ha most ismételni, hogy a memória dot perjel, Fussunk valgrind rá újra, 768 00:35:11,520 --> 00:35:14,990 maximalizálására ablakban, és nyomja meg az Entert. 769 00:35:14,990 --> 00:35:16,900 Most, hogy ez jó. 770 00:35:16,900 --> 00:35:19,590 Temetik el a jó hírt minden ennek az értéknek. 771 00:35:19,590 --> 00:35:20,810 Minden halom blokkok szabadok voltak. 772 00:35:20,810 --> 00:35:23,604 Majd gyere vissza, amit a kupac van, de nincs szivárgás lehetséges. 773 00:35:23,604 --> 00:35:25,520 Szóval ez is csak egy eszköze a szerszámkészlet 774 00:35:25,520 --> 00:35:30,220 amellyel elkezdhetjük keresd a hibákat, mint ezt. 775 00:35:30,220 --> 00:35:34,532 >> De lássuk, mi Több lehet baj itt. 776 00:35:34,532 --> 00:35:38,890 Nézzük átmenet most valóban egy probléma megoldására. 777 00:35:38,890 --> 00:35:42,440 Mint félre, ha ez enyhíti a kicsit zavart, vagy feszültség, 778 00:35:42,440 --> 00:35:43,430 ez most vicces. 779 00:35:43,430 --> 00:35:46,400 780 00:35:46,400 --> 00:35:46,900 Igen. 781 00:35:46,900 --> 00:35:49,040 Ez elég jó. 782 00:35:49,040 --> 00:35:50,890 Mivel pointerek címek és 783 00:35:50,890 --> 00:35:53,098 általában a konvenció írt hexadecimális. 784 00:35:53,098 --> 00:35:54,650 Ha, ha, ez vicces most. 785 00:35:54,650 --> 00:35:58,390 Akárhogy is, úgyhogy most ténylegesen megoldani a problémát. 786 00:35:58,390 --> 00:36:00,840 Ez már szuper, szuper alacsony szintű eddig, 787 00:36:00,840 --> 00:36:03,950 és mi valójában nem hasznos dolgokat ezekkel az alacsony szintű részleteket. 788 00:36:03,950 --> 00:36:06,710 >> Szóval mi vezetett néhány hét ezelőtt fogalma egy tömbben. 789 00:36:06,710 --> 00:36:09,177 Egy sor szép volt, mert nehéz, hogy tisztítsák meg a kódot 790 00:36:09,177 --> 00:36:11,760 mert ha azt akartuk, hogy levelet Program több diák 791 00:36:11,760 --> 00:36:15,270 vagy több név és házak alvás és főiskolák és minden adott, 792 00:36:15,270 --> 00:36:19,430 tudnánk tárolni mindent többet tisztán belső tömb. 793 00:36:19,430 --> 00:36:23,039 De javaslom, egyetlen hátránya Egy tömb eddig. 794 00:36:23,039 --> 00:36:26,080 Akkor is, ha nem ért magad a programban, csak ösztönösen, 795 00:36:26,080 --> 00:36:30,870 mi az a rossz dolog Körülbelül egy tömböt, talán? 796 00:36:30,870 --> 00:36:32,337 Hallom, néhány zúg. 797 00:36:32,337 --> 00:36:34,170 Közönség: Nehéz A méret megváltoztatásához. 798 00:36:34,170 --> 00:36:36,128 DAVID MALAN: Nehéz A méret megváltoztatásához. 799 00:36:36,128 --> 00:36:38,660 Nem tudod megváltoztatni a méretét egy tömb, sőt, önmagában 800 00:36:38,660 --> 00:36:43,040 C. Társíthatja másik tömb, mozgatni mindent a régit 801 00:36:43,040 --> 00:36:45,380 az új, és most van egy kis szabad hely, 802 00:36:45,380 --> 00:36:47,469 de ez nem olyan, mint egy nyelv, mint a Java vagy Python 803 00:36:47,469 --> 00:36:49,760 vagy tetszőleges számú egyéb nyelv, amellyel néhányan 804 00:36:49,760 --> 00:36:52,070 ismerős lehet, ahol csak tartani hozzá dolgokat 805 00:36:52,070 --> 00:36:53,930 orrvérzésig, hogy a végén egy tömb. 806 00:36:53,930 --> 00:36:57,880 Ha van egy sor méret 6, azaz a mérete, 807 00:36:57,880 --> 00:37:01,970 és annyira tetszik az ötlet korábban amelynek puffer egy bizonyos méretet, 808 00:37:01,970 --> 00:37:05,940 meg kell kitalálni ki a kapun milyen méretű akarsz, hogy legyen? 809 00:37:05,940 --> 00:37:07,880 Ha hiszem, túl nagy, te kiesik hely. 810 00:37:07,880 --> 00:37:10,950 Ha hiszem, túl kicsi, akkor nem tudja tárolni az adatokat, legalább 811 00:37:10,950 --> 00:37:12,940 nélkül, sokkal több munkát. 812 00:37:12,940 --> 00:37:18,180 >> Így ma, hála a mutatók, tudjuk kezdeni összefűzni a saját egyéni 813 00:37:18,180 --> 00:37:20,989 adatszerkezetek, és Sőt, itt van valami, 814 00:37:20,989 --> 00:37:23,030 hogy néz ki egy kicsit rejtélyes első pillantásra, 815 00:37:23,030 --> 00:37:26,440 de ez mit fogunk hívni kapcsolódik listát, és a neve egyfajta összefoglalót 816 00:37:26,440 --> 00:37:26,940 azt. 817 00:37:26,940 --> 00:37:29,550 Ez egy listát a számok, vagy Ebben az esetben, egy listát a számok, 818 00:37:29,550 --> 00:37:33,480 de lehet, hogy egy listát a semmit, de ez kapcsolódik egymáshoz útján nyilak, 819 00:37:33,480 --> 00:37:36,380 és csak akkor gondolom milyen technikával 820 00:37:36,380 --> 00:37:38,310 fogunk tudni hogy az összefűzés, 821 00:37:38,310 --> 00:37:42,540 Valahogy úgy, mint a pattogatott kukorica egy szál, Egy láncolt listák téglalapok itt? 822 00:37:42,540 --> 00:37:43,936 A számok? 823 00:37:43,936 --> 00:37:45,560 Mi a mögöttes nyelvi elemmel? 824 00:37:45,560 --> 00:37:46,350 >> Közönség: Egy mutató. 825 00:37:46,350 --> 00:37:47,308 >> DAVID MALAN: Egy mutató. 826 00:37:47,308 --> 00:37:51,700 Tehát minden ilyen nyilak itt jelent egy mutató, vagy csak egy címet. 827 00:37:51,700 --> 00:37:54,590 Más szóval, ha azt akarom, tárolni egy listát a számok, 828 00:37:54,590 --> 00:37:59,040 Nem tudom csak tárolni, ha akarom a képesség, hogy növekszik és összezsugorodik 829 00:37:59,040 --> 00:38:00,990 én adatstruktúra egy tömbben. 830 00:38:00,990 --> 00:38:03,000 Szóval kell egy kis több finomsággal, 831 00:38:03,000 --> 00:38:05,720 de észrevettem, hogy ez a Képet fajta sugallja 832 00:38:05,720 --> 00:38:08,650 hogy ha épp most van kis téma összekötő mindent együtt, 833 00:38:08,650 --> 00:38:13,100 Valószínűleg nem is olyan nehéz, hogy legyen hely A két ilyen téglalap 834 00:38:13,100 --> 00:38:16,750 vagy két ilyen csomópontok, kezdjük nevezve őket, tedd egy új csomópontot, 835 00:38:16,750 --> 00:38:19,547 majd néhány új téma, csak árok a három csomópont össze, 836 00:38:19,547 --> 00:38:22,880 az első, az utolsó, és az egyik, hogy az imént beillesztett középre. 837 00:38:22,880 --> 00:38:26,000 >> És valóban láncolt lista, eltérően egy tömb, dinamikus. 838 00:38:26,000 --> 00:38:27,840 Fejlődik, és tőle telhetőt zsugorodik, te pedig nem 839 00:38:27,840 --> 00:38:32,434 Tudnunk kell, vagy érdekel, előre, hogy mennyi adatot leszel tárolására, 840 00:38:32,434 --> 00:38:35,600 de kiderült, hogy van, hogy egy kicsit óvatos, hogyan valósítható ez. 841 00:38:35,600 --> 00:38:39,070 Tehát először nézzük meg, hogyan kívánjuk megvalósítani Egy ilyen kis téglalap. 842 00:38:39,070 --> 00:38:40,690 Ez könnyen megvalósítható egy int. 843 00:38:40,690 --> 00:38:44,000 Csak azt mondom int n, majd az kapsz 4 bájt int, 844 00:38:44,000 --> 00:38:49,089 de hogyan jutok int, nevezzük n, majd egy mutatót, nevezzük következő. 845 00:38:49,089 --> 00:38:50,880 Nevezhetnénk ezeket a dolgokat, amit csak akarunk 846 00:38:50,880 --> 00:38:53,590 de szükségem van egy egyéni adatok szerkezetét. 847 00:38:53,590 --> 00:38:54,257 Igen? 848 00:38:54,257 --> 00:38:57,020 >> Közönség: Ampersand [hallható]. 849 00:38:57,020 --> 00:39:00,940 >> DAVID MALAN: Szóval jelet fogjuk használni, hogy kap a címét egy csomópont potenciálisan. 850 00:39:00,940 --> 00:39:02,740 De szükségünk van egy másik jellemzője C érdekében 851 00:39:02,740 --> 00:39:06,700 hogy nekem a képesség, hogy Az egyéni téglalap, ezt a szokást 852 00:39:06,700 --> 00:39:08,919 változó, ha úgy tetszik, a memóriában. 853 00:39:08,919 --> 00:39:09,710 Közönség: A struktúra. 854 00:39:09,710 --> 00:39:10,626 DAVID MALAN: A struktúra. 855 00:39:10,626 --> 00:39:14,310 Emlékezzünk a múlt héten, mi vezetett struct, ez a viszonylag egyszerű kulcsszó 856 00:39:14,310 --> 00:39:16,254 amely lehetővé teszi számunkra, hogy a dolgok, mint ez. 857 00:39:16,254 --> 00:39:18,420 C nem jött adat szerkezet az úgynevezett hallgatói. 858 00:39:18,420 --> 00:39:22,190 Jön az int és float és char és Ilyen, de ez nem jön hallgató, 859 00:39:22,190 --> 00:39:26,750 de mi is létrehozhatunk egy diák adatok típusát, egy diák struktúrát, ezzel a szintaxis 860 00:39:26,750 --> 00:39:27,250 itt. 861 00:39:27,250 --> 00:39:28,350 És látni fogod ezt újra és újra. 862 00:39:28,350 --> 00:39:30,426 Szóval ne aggódj megjegyzi a kulcsszavakat, 863 00:39:30,426 --> 00:39:33,300 de a kulcsszót, amely fontos csak az a tény, hogy azt mondtuk struct 864 00:39:33,300 --> 00:39:37,590 és akkor mi nevezte hallgatói és belső A tanuló egy név és egy házat 865 00:39:37,590 --> 00:39:39,390 vagy egy kollégiumi vagy hasonlók. 866 00:39:39,390 --> 00:39:41,980 >> És így most ma, hadd javasolni ezt. 867 00:39:41,980 --> 00:39:45,240 Adtam egy pár szót, de ha azt akarom, végrehajtani ezt a téglalapot, ami 868 00:39:45,240 --> 00:39:48,440 Van is egy int és pointer, tudod mit, én vagyok 869 00:39:48,440 --> 00:39:51,540 lesz arra, hogy egy struct nevű csomópontot. 870 00:39:51,540 --> 00:39:55,630 Én is, belül is, azt fogja mondani hogy egy csomópont, a téglalap, van egy int 871 00:39:55,630 --> 00:39:59,730 és mi fogjuk hívni n és van egy következő mutatót. 872 00:39:59,730 --> 00:40:02,540 És ez egy kicsit bőbeszédű, de ha belegondolunk, 873 00:40:02,540 --> 00:40:07,300 A nyilak, amelyek a képen Egy perce van, hogy milyen adatokat típus? 874 00:40:07,300 --> 00:40:12,330 Amennyiben minden egyes ilyen nyilak mutat hogy milyen típusú adatot szerkezete? 875 00:40:12,330 --> 00:40:14,332 Ez nem mutat, csak egy int önmagában. 876 00:40:14,332 --> 00:40:16,165 Ez rámutatva, hogy a egész téglalap alakú dolog 877 00:40:16,165 --> 00:40:18,720 és hogy téglalap alakú dolog, azt mondta, az úgynevezett csomópontot. 878 00:40:18,720 --> 00:40:21,720 És így ilyen van, hogy rekurzív határozza meg ezt, mint 879 00:40:21,720 --> 00:40:26,270 hogy egy csomópont, azt mondjuk, tartalmazni fog egy int hívott n 880 00:40:26,270 --> 00:40:31,070 és egy mutató az úgynevezett jövő és a típusú adatstruktúra, amelyre 881 00:40:31,070 --> 00:40:35,770 hogy mutató láthatóan lesz struct csomópont. 882 00:40:35,770 --> 00:40:41,550 >> Tehát ez idegesítően bőbeszédű és igaz, hogy pedáns, 883 00:40:41,550 --> 00:40:44,100 Az ok, hogy miért nem Csak mondom ezt, ami őszintén szólva 884 00:40:44,100 --> 00:40:46,860 úgy néz ki, sokkal olvashatóbb, azért van, mert emlékeztetnek arra, hogy C Read 885 00:40:46,860 --> 00:40:48,710 dolgok fentről lefelé, balról jobbra. 886 00:40:48,710 --> 00:40:54,120 Ez nem csak megkapjuk a pontosvessző hogy a kulcsszó csomópont valóban létezik. 887 00:40:54,120 --> 00:40:57,980 Tehát, ha azt akarjuk, hogy ez a fajta ciklikus hivatkozási belsejében az adatok 888 00:40:57,980 --> 00:41:02,120 szerkezete, meg kell tennünk ezt, ahol mondjuk struct csomópont tetején, amely 889 00:41:02,120 --> 00:41:06,770 ad nekünk egy hosszabb módon írja le ezt a dolog, akkor belülről azt mondjuk struct csomópont, 890 00:41:06,770 --> 00:41:09,560 majd a legutolsó sort azt mondjuk, rendben, C, mellesleg, 891 00:41:09,560 --> 00:41:12,060 csak hívja ezt az egész átkozott dolog, amit egy csomópont, és megáll 892 00:41:12,060 --> 00:41:14,360 a kulcsszó struct összesen. 893 00:41:14,360 --> 00:41:18,030 Szóval ez csak egyfajta szintaktikai trükk, hogy végső soron lehetővé teszi számunkra, hozzon létre 894 00:41:18,030 --> 00:41:21,370 valamit, ami úgy néz ki, mint ez. 895 00:41:21,370 --> 00:41:25,010 >> Tehát, ha azt feltételezzük, most már tudjuk végrehajtja ezt a dolgot C, 896 00:41:25,010 --> 00:41:28,040 hogyan is ténylegesen kezdeni áthaladó ez? 897 00:41:28,040 --> 00:41:32,360 Nos, sőt, minden, amit meg kell tennie, hogy ismételget balról jobbra, és csak 898 00:41:32,360 --> 00:41:35,960 fajta helyezze csomópontok vagy törölni csomópontokat vagy keressen a dolgokat, ahol azt akarjuk, 899 00:41:35,960 --> 00:41:39,560 de ehhez, menjünk előre, és a a dolgok egy kicsit valóságosabb, mert ez 900 00:41:39,560 --> 00:41:42,560 már szuper alacsony szintű eddig. 901 00:41:42,560 --> 00:41:45,700 Bárki szó szeretnék lenni az első? 902 00:41:45,700 --> 00:41:46,200 OKÉ. 903 00:41:46,200 --> 00:41:47,092 Gyere fel. 904 00:41:47,092 --> 00:41:47,800 Mi a neved? 905 00:41:47,800 --> 00:41:48,499 >> David: David. 906 00:41:48,499 --> 00:41:49,290 DAVID MALAN: David. 907 00:41:49,290 --> 00:41:49,998 Örvendek. 908 00:41:49,998 --> 00:41:50,960 Nekem is. 909 00:41:50,960 --> 00:41:52,450 Minden rendben. 910 00:41:52,450 --> 00:41:53,990 És szükségünk van egy 9-es szám. 911 00:41:53,990 --> 00:41:55,240 Nem olyan jó, mint az első, talán. 912 00:41:55,240 --> 00:41:56,430 OK, 9-es szám. 913 00:41:56,430 --> 00:41:59,667 A 17-es szám, kérem. 914 00:41:59,667 --> 00:42:01,000 Térjünk vissza egy kicsit távolabb. 915 00:42:01,000 --> 00:42:03,980 22-es számú, kérjük, és Mit szólnál hátrébb 916 00:42:03,980 --> 00:42:06,344 ha látom semmilyen kezek az összes fény, vagy nincs. 917 00:42:06,344 --> 00:42:08,010 Valaki éppen önként ott. 918 00:42:08,010 --> 00:42:08,968 Szeretné, hogy jöjjön fel? 919 00:42:08,968 --> 00:42:10,450 Az alkar erőszakkal megy fel. 920 00:42:10,450 --> 00:42:12,340 OK, 17. 921 00:42:12,340 --> 00:42:13,690 22. 922 00:42:13,690 --> 00:42:15,120 26 jön le. 923 00:42:15,120 --> 00:42:18,450 Bárki mást szeretne forcefully-- Gyere fel. 924 00:42:18,450 --> 00:42:21,030 Tényleges önkéntes. 925 00:42:21,030 --> 00:42:23,330 >> Szóval nagyon gyorsan, ha ti is rendezni 926 00:42:23,330 --> 00:42:26,550 magatokat akárcsak a csomópontok a képernyőn. 927 00:42:26,550 --> 00:42:27,510 Köszönöm. 928 00:42:27,510 --> 00:42:29,234 És akkor lesz 26. 929 00:42:29,234 --> 00:42:30,650 Rendben, gyors bemutatkozás. 930 00:42:30,650 --> 00:42:32,139 Szóval én Dávid és te is? 931 00:42:32,139 --> 00:42:32,680 David: David. 932 00:42:32,680 --> 00:42:33,721 DAVID MALAN: És te? 933 00:42:33,721 --> 00:42:34,229 Jake: Jake. 934 00:42:34,229 --> 00:42:34,729 Sue: Sue. 935 00:42:34,729 --> 00:42:35,229 ALEX: Alex. 936 00:42:35,229 --> 00:42:36,475 Raphael: Raphael. 937 00:42:36,475 --> 00:42:37,100 Taylor: Taylor. 938 00:42:37,100 --> 00:42:37,466 DAVID MALAN: Taylor. 939 00:42:37,466 --> 00:42:37,590 Kitűnő. 940 00:42:37,590 --> 00:42:39,810 Tehát ezek a mi önkéntesek ma és megy előre 941 00:42:39,810 --> 00:42:43,090 és shift egy kicsit, hogy így, és csak megy előre, és tartsa 942 00:42:43,090 --> 00:42:47,024 tartja a számokat, mint te vagy a első jele, és bal kézzel, 943 00:42:47,024 --> 00:42:48,940 megy előre, és csak végrehajtja Ezek a nyilak, csak 944 00:42:48,940 --> 00:42:51,360 úgy, hogy a bal kéz szó mutatva, amit meg kell mutatni 945 00:42:51,360 --> 00:42:54,610 a, és adj magadnak egy kis szobába úgy, hogy akkor vizuálisan látni a karod ténylegesen 946 00:42:54,610 --> 00:42:58,120 mutatva, és akkor csak pont fajta a földre rendben van. 947 00:42:58,120 --> 00:43:03,040 >> Tehát itt van egy csatolt lista egy, két, három, négy, öt csomópontok kezdetben, 948 00:43:03,040 --> 00:43:05,860 és vegyük észre itt van ez a különleges mutatót az elején, aki 949 00:43:05,860 --> 00:43:09,770 kulcsot, mert van, hogy nyomon követhesse A teljes hosszúságú lista valahogy. 950 00:43:09,770 --> 00:43:13,590 Ezek a srácok, bár ők maradt jobbra, háttal a memóriában, 951 00:43:13,590 --> 00:43:15,950 ezek valójában bárhol lehet a számítógép memóriájában. 952 00:43:15,950 --> 00:43:18,240 Szóval ezek a srácok lehet állva bárhol a színpadon 953 00:43:18,240 --> 00:43:20,960 és ez jó, amíg ők valóban mutatott egy másik, 954 00:43:20,960 --> 00:43:22,770 de a dolgokat tiszta és egyszerű, akkor 955 00:43:22,770 --> 00:43:25,728 Csak felhívni őket balról jobbra, mint ez, de ott lehet masszív rések 956 00:43:25,728 --> 00:43:26,790 között azokat a csomópontokat. 957 00:43:26,790 --> 00:43:30,710 >> Most, ha azt akarom, hogy valóban szúrhatunk új érték, menjünk előre, és erre. 958 00:43:30,710 --> 00:43:33,720 Van egy lehetőség most hogy válasszon egy másik csomópont. 959 00:43:33,720 --> 00:43:39,820 Mondja el, kezdjük el a mallocing 55. 960 00:43:39,820 --> 00:43:41,320 Vajon valaki bánja, hogy malloc? 961 00:43:41,320 --> 00:43:42,280 OK, gyere fel. 962 00:43:42,280 --> 00:43:42,992 Mi a neved? 963 00:43:42,992 --> 00:43:43,700 Szivárvány: Rainbow. 964 00:43:43,700 --> 00:43:44,050 DAVID MALAN: Rainbow? 965 00:43:44,050 --> 00:43:44,810 Minden rendben. 966 00:43:44,810 --> 00:43:46,600 Malloc Rainbow. 967 00:43:46,600 --> 00:43:47,450 Gyere fel. 968 00:43:47,450 --> 00:43:51,610 Tehát most már tennünk magunknak Algoritmikusan ahol tudunk rakni 55. 969 00:43:51,610 --> 00:43:53,610 Szóval mindannyian tudjuk, nyilván, ahol valószínűleg 970 00:43:53,610 --> 00:43:55,401 tartozik, ha megpróbálunk tartani ezt a rendezve 971 00:43:55,401 --> 00:43:58,299 és ha a srácok is eltarthat egy lépjen vissza, így nem esik le 972 00:43:58,299 --> 00:43:59,590 a színpadon, az nagyszerű lenne. 973 00:43:59,590 --> 00:44:01,420 Tehát tulajdonképpen, Rainbow, kezdje újra itt vagy velem, 974 00:44:01,420 --> 00:44:04,200 mert mi, mint a számítógép most is csak az egyik változót egy időben. 975 00:44:04,200 --> 00:44:05,190 Tehát, ha ez az első csomópont. 976 00:44:05,190 --> 00:44:07,160 Figyeljük meg, ő nem egy csomópont, ő csak egy mutató, 977 00:44:07,160 --> 00:44:10,270 és ezért ő húzott lenni csak akkora, mint egy mutatót, és nem 978 00:44:10,270 --> 00:44:11,780 az egyik ilyen teljes téglalapok. 979 00:44:11,780 --> 00:44:16,650 Mi is így fogjuk ellenőrizni az egyes iteráció 55 kevesebb, mint 9? 980 00:44:16,650 --> 00:44:17,150 Nem. 981 00:44:17,150 --> 00:44:19,060 55 kevesebb, mint 17? 982 00:44:19,060 --> 00:44:19,720 Nem. 983 00:44:19,720 --> 00:44:20,800 Kevesebb, mint 22? 984 00:44:20,800 --> 00:44:22,020 Kevesebb, mint 26? 985 00:44:22,020 --> 00:44:23,390 Kevesebb, mint 34? 986 00:44:23,390 --> 00:44:25,890 És így most, nyilván Szivárványos tartozik a végén. 987 00:44:25,890 --> 00:44:27,270 Tehát, hogy világos legyen, és milyen volt a neve, Taylor? 988 00:44:27,270 --> 00:44:27,895 >> Taylor: Taylor. 989 00:44:27,895 --> 00:44:32,510 DAVID MALAN: Szóval körében Taylor bal és a Rainbow keze van, 990 00:44:32,510 --> 00:44:38,324 akinek a keze meg kell mutatni, hogy mi a beillesztése érdekében 55 ebbe a listán? 991 00:44:38,324 --> 00:44:39,240 Mit kell tennünk? 992 00:44:39,240 --> 00:44:39,700 Igen? 993 00:44:39,700 --> 00:44:41,140 >> Közönség: Taylor kezét kell mutatnia balra. 994 00:44:41,140 --> 00:44:41,680 >> DAVID MALAN: Pontosan. 995 00:44:41,680 --> 00:44:43,800 Tehát behelyezése csomópont a végén a lista 996 00:44:43,800 --> 00:44:47,140 nagyon egyszerű, mert Taylor csak meg kell mutatni, ahelyett, hogy a földre 997 00:44:47,140 --> 00:44:49,640 vagy hívjuk meg null, null egyfajta hiánya 998 00:44:49,640 --> 00:44:51,640 pointer vagy egy speciális nulla mutatót, te 999 00:44:51,640 --> 00:44:53,740 fog mutatni a bal kezét a Rainbow majd Rainbow, 1000 00:44:53,740 --> 00:44:55,910 Hol kell a bal kéz talán pont? 1001 00:44:55,910 --> 00:44:56,570 Lefelé. 1002 00:44:56,570 --> 00:45:00,140 Ez nem jó, ha a kezét a rendezés rámutatva le itt, vagy valami olyan 1003 00:45:00,140 --> 00:45:00,640 milyen módon. 1004 00:45:00,640 --> 00:45:02,407 Hogy úgy kellene tekinteni egy szemetes értéke, 1005 00:45:02,407 --> 00:45:04,240 de ha ő mutat Néhány ismert érték, akkor 1006 00:45:04,240 --> 00:45:07,360 hívják nulla vagy nulla, ez rendben van mert van egy kifejezés ebben az 1007 00:45:07,360 --> 00:45:09,390 és tudjuk, hogy a lista most elkészült. 1008 00:45:09,390 --> 00:45:11,550 >> Tehát mi a másik viszonylag egyszerű eset? 1009 00:45:11,550 --> 00:45:13,125 Tudnánk malloc 5? 1010 00:45:13,125 --> 00:45:14,010 Gyere fel. 1011 00:45:14,010 --> 00:45:14,782 Mi a neved? 1012 00:45:14,782 --> 00:45:15,490 Tiffany: Tiffany. 1013 00:45:15,490 --> 00:45:16,000 DAVID MALAN: Sajnálom? 1014 00:45:16,000 --> 00:45:16,470 Tiffany: Tiffany. 1015 00:45:16,470 --> 00:45:16,880 DAVID MALAN: Tiffany. 1016 00:45:16,880 --> 00:45:17,110 Minden rendben. 1017 00:45:17,110 --> 00:45:19,071 Tiffany már malloced melynek értéke 5. 1018 00:45:19,071 --> 00:45:19,570 Gyere fel. 1019 00:45:19,570 --> 00:45:23,820 Ez egy viszonylag könnyű is, de nézzük műveletek sorrendjét most. 1020 00:45:23,820 --> 00:45:25,820 Ez elég könnyű volt Taylor a végén. 1021 00:45:25,820 --> 00:45:30,302 5. számú természetesen kevesebb, mint 9, és így már David, van Tiffany, 1022 00:45:30,302 --> 00:45:31,260 és mi volt a neve? 1023 00:45:31,260 --> 00:45:31,680 >> Jake: Jake. 1024 00:45:31,680 --> 00:45:32,470 >> DAVID MALAN: Jake. 1025 00:45:32,470 --> 00:45:34,300 Tiffany, Jake, és David. 1026 00:45:34,300 --> 00:45:36,580 Kinek a kezét frissíteni kell az első? 1027 00:45:36,580 --> 00:45:39,260 1028 00:45:39,260 --> 00:45:40,590 Mit akar itt csinálni? 1029 00:45:40,590 --> 00:45:45,244 Van egy pár lehetséges módon, de van még egy vagy több rossz módon. 1030 00:45:45,244 --> 00:45:46,620 >> Közönség: Kezdje balszélső. 1031 00:45:46,620 --> 00:45:47,800 >> DAVID MALAN: Kezdjük a bal szélső. 1032 00:45:47,800 --> 00:45:49,008 Ki a bal szélső itt akkor? 1033 00:45:49,008 --> 00:45:49,700 Közönség: First. 1034 00:45:49,700 --> 00:45:50,366 >> DAVID MALAN: OK. 1035 00:45:50,366 --> 00:45:53,781 Így kezdődik az első és hol frissíteni kívánt Dávid kezében lenni? 1036 00:45:53,781 --> 00:45:54,780 KÖZÖNSÉG felé: az 5. 1037 00:45:54,780 --> 00:45:55,446 DAVID MALAN: OK. 1038 00:45:55,446 --> 00:45:59,026 Dávid pedig pont ötkor vagy Tiffany itt, és most? 1039 00:45:59,026 --> 00:46:01,072 >> Közönség: Tiffany rámutat, hogy a 9? 1040 00:46:01,072 --> 00:46:04,030 DAVID MALAN: Tökéletes, kivéve Muci a fej csak a fajta leesett, ugye? 1041 00:46:04,030 --> 00:46:06,820 Mert mi a baj ez a kép szó? 1042 00:46:06,820 --> 00:46:08,070 Közönség: Semmi sem mutat. 1043 00:46:08,070 --> 00:46:09,945 DAVID MALAN: Semmi sem rámutatva, hogy Jake most. 1044 00:46:09,945 --> 00:46:13,360 Már szó árván 9 és 17. között, és most szó szerint 1045 00:46:13,360 --> 00:46:18,450 kiszivárgott mindezt memóriát, mert frissítése Dávid kezében először, hogy ez 1046 00:46:18,450 --> 00:46:21,660 finom, amennyiben ez helyes mutatva Tiffany most, 1047 00:46:21,660 --> 00:46:25,410 de ha senki nem volt előrelátás rámutatni Jake, 1048 00:46:25,410 --> 00:46:27,490 akkor elvesztettük a teljes egészében ezt a listát. 1049 00:46:27,490 --> 00:46:28,200 Úgyhogy visszavonni. 1050 00:46:28,200 --> 00:46:30,950 Szóval ez egy jó dolog, hogy megbotlani de nézzük most már megfelelő. 1051 00:46:30,950 --> 00:46:33,624 Mit tegyünk először helyette? 1052 00:46:33,624 --> 00:46:34,124 Igen? 1053 00:46:34,124 --> 00:46:35,791 >> Közönség: Tiffany kell mutatnia a 9? 1054 00:46:35,791 --> 00:46:37,582 DAVID MALAN: Nem tudok kap, hogy közel áll hozzád. 1055 00:46:37,582 --> 00:46:38,720 Ki kell emelnem a 9? 1056 00:46:38,720 --> 00:46:39,220 >> Közönség: Tiffany. 1057 00:46:39,220 --> 00:46:39,390 >> DAVID MALAN: Rendben. 1058 00:46:39,390 --> 00:46:41,200 Tehát Tiffany először pontot a 9. 1059 00:46:41,200 --> 00:46:43,550 Szóval Tiffany kell venni egy azonos értéket 1060 00:46:43,550 --> 00:46:45,820 David, amely úgy tűnik, redundáns egy pillanatra, 1061 00:46:45,820 --> 00:46:48,820 de ez rendben van, mert most, a második lépésben tudjuk frissíteni Dávid kezében 1062 00:46:48,820 --> 00:46:52,680 rámutatni Tiffany, majd ha mi csak egyfajta tiszta dolgokat 1063 00:46:52,680 --> 00:46:55,740 mintha ez a fajta tavasz-szerű, Most, hogy egy helyes szerelést. 1064 00:46:55,740 --> 00:46:56,700 Így kiváló. 1065 00:46:56,700 --> 00:46:57,970 Tehát most már majdnem ott vagyunk. 1066 00:46:57,970 --> 00:47:01,075 Nézzük helyezzen be egy végleges értéket, mint az érték 20. 1067 00:47:01,075 --> 00:47:03,010 Ha tudnánk malloc egy végső önkéntes? 1068 00:47:03,010 --> 00:47:04,140 Gyere fel. 1069 00:47:04,140 --> 00:47:06,224 Tehát ez az ember egy kicsit trükkösebb. 1070 00:47:06,224 --> 00:47:08,390 De tényleg, a kód vagyunk írás, bár verbálisan, 1071 00:47:08,390 --> 00:47:10,610 olyan, mint átélni egy rakás Az, ha olyan feltételeket teremteni, ugye? 1072 00:47:10,610 --> 00:47:12,318 Volt olyan állapot ellenőrizve, hogy tartozik 1073 00:47:12,318 --> 00:47:13,840 a végén, talán az elején. 1074 00:47:13,840 --> 00:47:15,940 Szükségünk van valamilyen hurok megtalálni a folt közepén. 1075 00:47:15,940 --> 00:47:17,400 Tehát lássuk, hogy a mi a neved? 1076 00:47:17,400 --> 00:47:17,700 >> ERIC: Eric. 1077 00:47:17,700 --> 00:47:18,340 >> DAVID MALAN: Eric? 1078 00:47:18,340 --> 00:47:18,660 Eric. 1079 00:47:18,660 --> 00:47:19,368 Örvendek. 1080 00:47:19,368 --> 00:47:20,490 Tehát van 20. 1081 00:47:20,490 --> 00:47:21,220 Kevesebb, mint öt? 1082 00:47:21,220 --> 00:47:21,530 Nem. 1083 00:47:21,530 --> 00:47:22,160 Kevesebb mint kilenc? 1084 00:47:22,160 --> 00:47:22,410 Nem. 1085 00:47:22,410 --> 00:47:23,050 Kevesebb, mint 17? 1086 00:47:23,050 --> 00:47:23,550 Nem. 1087 00:47:23,550 --> 00:47:23,740 OKÉ. 1088 00:47:23,740 --> 00:47:25,701 Ő ide tartozik, és a neveket ismét van? 1089 00:47:25,701 --> 00:47:26,200 Sue: Sue. 1090 00:47:26,200 --> 00:47:26,880 DAVID MALAN: Sue. 1091 00:47:26,880 --> 00:47:27,379 ALEX: Alex. 1092 00:47:27,379 --> 00:47:28,790 DAVID MALAN: Sue, Alex, és? 1093 00:47:28,790 --> 00:47:29,290 ERIC: Eric. 1094 00:47:29,290 --> 00:47:30,120 DAVID MALAN: Eric. 1095 00:47:30,120 --> 00:47:32,140 Kinek a kezében van szüksége, hogy folyamatosan az első? 1096 00:47:32,140 --> 00:47:32,930 >> Közönség: Eric. 1097 00:47:32,930 --> 00:47:33,429 OKÉ. 1098 00:47:33,429 --> 00:47:35,200 Szóval Eric kell mutatni hol? 1099 00:47:35,200 --> 00:47:35,930 A 22. 1100 00:47:35,930 --> 00:47:36,430 Jó. 1101 00:47:36,430 --> 00:47:38,180 És most mi következik? 1102 00:47:38,180 --> 00:47:40,800 Sue majd pont Eric és most, ha srácok csak 1103 00:47:40,800 --> 00:47:44,077 hogy néhány szoba, ami rendben van vizuálisan, most tettünk a szerelést. 1104 00:47:44,077 --> 00:47:47,160 Úgyhogy most egy kérdés vizsgálatára, de Köszönöm szépen, hogy önkénteseink. 1105 00:47:47,160 --> 00:47:48,090 Nagyon jól sikerült. 1106 00:47:48,090 --> 00:47:50,831 Tudod tartani azokat, ha úgy tetszik. 1107 00:47:50,831 --> 00:47:54,140 És van egy szép búcsú ajándék, ha azt minden tetszik, hogy a stressz labdát. 1108 00:47:54,140 --> 00:47:56,030 Hadd át ezt le. 1109 00:47:56,030 --> 00:47:58,430 Tehát mi a elvihető e? 1110 00:47:58,430 --> 00:48:02,430 Úgy tűnik, ez a csodálatos amennyiben mi most 1111 00:48:02,430 --> 00:48:06,360 bevezetett alternatívájaként tömb, ami nem annyira korlátozódik 1112 00:48:06,360 --> 00:48:07,780 hogy egy sor néhány fix méretű. 1113 00:48:07,780 --> 00:48:09,380 Ezek dinamikusan növekszik. 1114 00:48:09,380 --> 00:48:13,220 >> De hasonlóan láttunk hétig Korábban soha nem kap semmit ingyen, 1115 00:48:13,220 --> 00:48:15,740 mint biztosan van egy trade-off itt. 1116 00:48:15,740 --> 00:48:18,890 Tehát egy fejjel egy csatolt listán, ez a dinamika? 1117 00:48:18,890 --> 00:48:21,590 Ez növekedni tudjon, és őszintén szólva, tudtunk volna törlés 1118 00:48:21,590 --> 00:48:23,570 és mi csökkenhet, ha szükséges. 1119 00:48:23,570 --> 00:48:24,710 Milyen árat fizetünk? 1120 00:48:24,710 --> 00:48:28,510 1121 00:48:28,510 --> 00:48:30,340 Kétszer annyi helyet, először. 1122 00:48:30,340 --> 00:48:34,010 Ha megnézzük a képet, már nem vagyok tárolására listáját egészek. 1123 00:48:34,010 --> 00:48:36,740 Én tárolására listáját egészek plusz mutatók. 1124 00:48:36,740 --> 00:48:38,240 Úgyhogy megduplázva a helyet. 1125 00:48:38,240 --> 00:48:40,740 Most, talán ez nem is olyan egy nagy dolog 4 bájt, 8 bájt, 1126 00:48:40,740 --> 00:48:43,160 de minden bizonnyal hozzá fel nagy adathalmazok. 1127 00:48:43,160 --> 00:48:45,570 Mi egy másik hátránya? 1128 00:48:45,570 --> 00:48:46,070 Igen? 1129 00:48:46,070 --> 00:48:48,010 >> Közönség: Meg kell keresztezik őket egy-az-egyben. 1130 00:48:48,010 --> 00:48:48,760 DAVID MALAN: Igen. 1131 00:48:48,760 --> 00:48:50,260 Van bejárására őket egy-az-egyben. 1132 00:48:50,260 --> 00:48:53,860 Tudod mit, feladtuk a szuper kényelmes funkció a szögletes zárójel 1133 00:48:53,860 --> 00:48:57,240 jelölést, pontosabban néven véletlenszerű hozzáférés, 1134 00:48:57,240 --> 00:48:59,280 ahol tudunk csak ugrani egy egyedi elem 1135 00:48:59,280 --> 00:49:01,470 de most, ha még mindig volt én önkéntesek itt, 1136 00:49:01,470 --> 00:49:04,660 ha akartam, hogy megtalálják a száma 22, nem tudok most 1137 00:49:04,660 --> 00:49:06,620 ugrás konzol valami ilyesmi. 1138 00:49:06,620 --> 00:49:10,530 Van, hogy nézd át a listán, sok mint a mi keresés példák lineárisan, 1139 00:49:10,530 --> 00:49:12,260 hogy megtalálják a szám 22. 1140 00:49:12,260 --> 00:49:14,340 Tehát úgy tűnik, hogy nagy árat fizetett ott. 1141 00:49:14,340 --> 00:49:16,430 De mindazonáltal egyéb problémák megoldásához. 1142 00:49:16,430 --> 00:49:18,587 >> Sőt, hadd mutassam be Csak pár látvány. 1143 00:49:18,587 --> 00:49:20,920 Tehát, ha már le Mather étkezőjében közelmúltban, 1144 00:49:20,920 --> 00:49:23,320 emlékezzünk csak vissza, hogy a A felhalmozott dobozokat, mint ez, 1145 00:49:23,320 --> 00:49:26,300 kaptuk kölcsön ezeket re Annenberg osztály előtt. 1146 00:49:26,300 --> 00:49:28,930 Tehát ez a halom tálcák, bár, reprezentatív ténylegesen 1147 00:49:28,930 --> 00:49:30,860 A számítástechnika adatok szerkezetét. 1148 00:49:30,860 --> 00:49:32,910 Van egy adatstruktúra számítástechnika 1149 00:49:32,910 --> 00:49:38,010 néven egy köteg, amely nagyon szépen alkalmas arra, hogy pontosan ez a vizuális. 1150 00:49:38,010 --> 00:49:41,380 Tehát, ha minden egyes ilyen tálcák nem egy tálca de mint egy számot, és azt akartam, 1151 00:49:41,380 --> 00:49:45,010 tárolni számokat, azt sodorhatják egy itt, 1152 00:49:45,010 --> 00:49:48,320 és tudtam tenni egy másik idelent, és továbbra is egymásra számok 1153 00:49:48,320 --> 00:49:53,180 a tetején egy másik, és mi potenciálisan hasznos erről 1154 00:49:53,180 --> 00:49:55,450 az, hogy mi a következménye Ezen adatok szerkezet? 1155 00:49:55,450 --> 00:49:58,045 Melyik szám lehet kihúzni első legkényelmesebben? 1156 00:49:58,045 --> 00:50:00,640 1157 00:50:00,640 --> 00:50:03,030 A legutóbb az egyik fel ott. 1158 00:50:03,030 --> 00:50:06,430 >> Szóval ez az, amit neveznék a számítástechnika LIFO adatszerkezet. 1159 00:50:06,430 --> 00:50:08,070 Tart, first out. 1160 00:50:08,070 --> 00:50:10,800 És majd meglátjuk nemsokára miért hogy hasznosak lehetnek, de most, 1161 00:50:10,800 --> 00:50:12,200 csak úgy a tulajdon. 1162 00:50:12,200 --> 00:50:15,158 És ez elég hülyén, ha úgy gondolja, arról, hogy a ebédlőben csinálja. 1163 00:50:15,158 --> 00:50:17,910 Minden alkalommal, amikor tiszta tálcák és tedd a legfrissebb felülre, 1164 00:50:17,910 --> 00:50:22,160 akkor lehetett volna egy korábban tiszta de végül nagyon piszkos, poros 1165 00:50:22,160 --> 00:50:24,360 tálca legalján ha soha nem 1166 00:50:24,360 --> 00:50:26,820 kap az aljára, hogy verem, mert csak 1167 00:50:26,820 --> 00:50:29,380 folyamatosan üzembe az új és a tiszta is a tetején. 1168 00:50:29,380 --> 00:50:31,840 Ugyanez megtörténhet egy szupermarketben is. 1169 00:50:31,840 --> 00:50:35,450 Ha van egy vitrinben A tej és minden alkalommal CVS 1170 00:50:35,450 --> 00:50:37,610 vagy aki többet kap tejet, csak dugjon a tejek 1171 00:50:37,610 --> 00:50:39,880 már van hátra, és teszel az újak elöl, 1172 00:50:39,880 --> 00:50:43,088 fogsz néhány elég csúnya tej végén az adatstruktúra, 1173 00:50:43,088 --> 00:50:46,390 mert mindig alul, vagy egyenértékűen ez mindig hátul. 1174 00:50:46,390 --> 00:50:50,407 >> De van egy másik módja annak, hogy gondoljon sorakozó adatok és például ez. 1175 00:50:50,407 --> 00:50:53,490 Ha egy olyan ember, aki szereti sorakoznak kívül az Apple boltokban 1176 00:50:53,490 --> 00:50:55,610 ha egy új termék jön ki, akkor valószínűleg 1177 00:50:55,610 --> 00:50:58,780 Nem használ verem adatok szerkezete, mert 1178 00:50:58,780 --> 00:51:03,070 azt elidegeníteni mindenki más, aki sorakozó vásárolni néhány új játékot. 1179 00:51:03,070 --> 00:51:06,610 Inkább akkor valószínűleg a milyen adatstruktúra 1180 00:51:06,610 --> 00:51:10,050 vagy milyen rendszer a való világban? 1181 00:51:10,050 --> 00:51:13,493 Remélhetőleg ez egy sort, vagy több megfelelően, vagy több brit-szerű, egy sorban. 1182 00:51:13,493 --> 00:51:17,700 És kiderül, egy sorban is adatszerkezethez számítástechnika, 1183 00:51:17,700 --> 00:51:19,700 de egy sorban van egy nagyon másik tulajdonságot. 1184 00:51:19,700 --> 00:51:20,820 Ez nem LIFO. 1185 00:51:20,820 --> 00:51:21,990 Tart, first out. 1186 00:51:21,990 --> 00:51:22,800 Isten ments. 1187 00:51:22,800 --> 00:51:24,280 Ez helyett FIFO. 1188 00:51:24,280 --> 00:51:26,110 Először, first out. 1189 00:51:26,110 --> 00:51:27,970 És ez egy jó dolog A méltányosság kedvéért 1190 00:51:27,970 --> 00:51:30,428 természetesen, ha éppen bélés up szuper kora reggel. 1191 00:51:30,428 --> 00:51:33,400 Ha odaér az első, akkor akarjuk, hogy ki az első is. 1192 00:51:33,400 --> 00:51:35,880 >> És ezért az összes ilyen adatok struktúrák, a sorban állást és halmok 1193 00:51:35,880 --> 00:51:39,220 és fürtök mások, kiderül, akkor lehet gondolni ezt csak egy tömbben. 1194 00:51:39,220 --> 00:51:41,820 Ez egy tömb, talán fix 4-es méretű, de ez lenne 1195 00:51:41,820 --> 00:51:44,990 legyen kedves a jó, ha tudnánk csak gyarapodnak tálcák szinte végtelenül magas, ha 1196 00:51:44,990 --> 00:51:46,780 Van, hogy sok tálca vagy számokat. 1197 00:51:46,780 --> 00:51:48,840 Így talán akarunk készítesz egy listát itt, 1198 00:51:48,840 --> 00:51:51,800 de a trade-off lesz potenciálisan, hogy szükségünk van több memória, 1199 00:51:51,800 --> 00:51:55,930 Beletelik egy kis időt, de nem korlátozzák a magassága a verem, 1200 00:51:55,930 --> 00:51:59,550 hasonlóan Mather vitrinben korlátozhatja a méret a verem, 1201 00:51:59,550 --> 00:52:03,117 és így ezek tervezési döntések vagy rendelkezésre álló lehetőségek számunkra végül. 1202 00:52:03,117 --> 00:52:04,950 Tehát ezek az adatok struktúrák, kezdtük 1203 00:52:04,950 --> 00:52:09,360 vannak új felső korlátot potenciálisan milyen volt korábban szupergyors 1204 00:52:09,360 --> 00:52:11,260 és hol fogjuk hagyni off ma, és hol 1205 00:52:11,260 --> 00:52:13,200 akkor remélem, hogy a szerdán, akkor 1206 00:52:13,200 --> 00:52:15,740 elkezdi nézni egy adat struktúra, amely lehetővé teszi számunkra keresni 1207 00:52:15,740 --> 00:52:18,260 keresztül adatokat napló végén újra. 1208 00:52:18,260 --> 00:52:21,470 És láttuk, hogy emlékszem, a héten nulla és egy bináris keresés, osztás 1209 00:52:21,470 --> 00:52:22,180 és meghódítani. 1210 00:52:22,180 --> 00:52:26,240 Ez jön vissza, és még jobb, A szent grál erre szerda 1211 00:52:26,240 --> 00:52:29,510 az lesz, hogy dolgozzon ki a adatszerkezet fut igazán 1212 00:52:29,510 --> 00:52:32,070 vagy elméletileg állandó, s eközben 1213 00:52:32,070 --> 00:52:34,760 nem számít, hány millió vagy milliárd dolgok 1214 00:52:34,760 --> 00:52:38,470 van az adatstruktúra, akkor hogy minket állandóan időt, talán egy lépéssel 1215 00:52:38,470 --> 00:52:41,387 vagy két lépésben, vagy 10 lépésben, de állandó számokat lépések 1216 00:52:41,387 --> 00:52:42,970 keresgélni, hogy az adatok szerkezetét. 1217 00:52:42,970 --> 00:52:46,300 Hogy valóban lesz a szent grál de erről bővebben szerdán. 1218 00:52:46,300 --> 00:52:49,045 Viszlát akkor. 1219 00:52:49,045 --> 00:52:53,704 >> [Zenelejátszási] 1220 00:52:53,704 --> 00:56:08,448