1 00:00:00,000 --> 00:00:11,200 2 00:00:11,200 --> 00:00:12,580 >> DAVID MALAN: Rendben, szívesen vissza. 3 00:00:12,580 --> 00:00:13,290 Ez CS50. 4 00:00:13,290 --> 00:00:15,130 Ez a kezdete a hét hét. 5 00:00:15,130 --> 00:00:18,890 Szóval ez már egy ideje, így azt gondoltam, hogy hogy egy forgószél túra, ahol 6 00:00:18,890 --> 00:00:20,760 abbahagyta, és ahol mi vagyunk most megy. 7 00:00:20,760 --> 00:00:23,310 >> Tehát ez a dolog itt lehet, hogy okozott némi szorongás először. 8 00:00:23,310 --> 00:00:27,680 De remélhetőleg, akkor kezd hozzászokik, hogy ez mit jelöl itt - 9 00:00:27,680 --> 00:00:32,670 csillag képviselő mutató, amely csak mi, több laikus szempontból? 10 00:00:32,670 --> 00:00:33,400 Szóval ez egy cím. 11 00:00:33,400 --> 00:00:35,490 >> Szóval ez a címe valami a memóriában. 12 00:00:35,490 --> 00:00:38,260 És elkezdtünk húzza vissza a rétegek Néhány héttel ezelőtt, a dolgok, mint 13 00:00:38,260 --> 00:00:41,800 GetString és más hasonló funkciók egész idő alatt már visszatérő 14 00:00:41,800 --> 00:00:46,010 címét dolgok a memóriában, mint a címét az első karakter 15 00:00:46,010 --> 00:00:46,990 bizonyos sorrendben. 16 00:00:46,990 --> 00:00:50,360 >> Így is bevezette valgrind, amely akkor elkezdi használni ezt a problémát 17 00:00:50,360 --> 00:00:53,380 állítva, különösen a következő probléma meg is. 18 00:00:53,380 --> 00:00:54,980 És valgrind mit értünk? 19 00:00:54,980 --> 00:00:57,520 20 00:00:57,520 --> 00:01:01,020 Ellenőrzi a memóriavesztés, és is ellenőrzi visszaélés memóriát. 21 00:01:01,020 --> 00:01:05,890 >> Ez, bizonyos valószínűséggel, érzékeli, ha A kód fog érinteni memória 22 00:01:05,890 --> 00:01:07,100 hogy egyszerűen nem. 23 00:01:07,100 --> 00:01:10,410 Tehát nem feltétlenül a szivárgást, de ha túlmutatnak határain egyes 24 00:01:10,410 --> 00:01:14,730 tömb, és a ténylegesen megtett valgrind és rávenni, hogy a viselkedését, miközben 25 00:01:14,730 --> 00:01:17,870 valgrind fut a program belül futó, akkor kapsz 26 00:01:17,870 --> 00:01:21,460 üzenetek, mint ez - "érvénytelen írnak 4-es méretű, "ami, felidézni egy-két 27 00:01:21,460 --> 00:01:25,880 héttel ezelőtt azt jelentette, hogy volt véletlenül mint egy int túl messze 28 00:01:25,880 --> 00:01:27,250 határain túl egy tömb. 29 00:01:27,250 --> 00:01:30,790 És így 4-es méretű itt azt jelenti, a méret az adott int. 30 00:01:30,790 --> 00:01:35,260 >> Tehát hogy megnyugtató, hogy az a tény, valgrind kimeneti, a formátum is, 31 00:01:35,260 --> 00:01:36,170 csak kegyetlen. 32 00:01:36,170 --> 00:01:40,180 Nagyon nehéz átlátni a rendetlenség az érdekes információkat. 33 00:01:40,180 --> 00:01:42,910 Szóval, mit tettünk itt csak részlet néhány több pár 34 00:01:42,910 --> 00:01:43,850 érdekes vonalak. 35 00:01:43,850 --> 00:01:46,760 De észre, hogy 80%-a az valgrind kimenet lesz egy kis 36 00:01:46,760 --> 00:01:47,650 figyelemelterelés. 37 00:01:47,650 --> 00:01:52,820 >> Csak nézd minták, mint ezek - érvénytelen jobb, érvénytelen olvasni, 40 bájt 38 00:01:52,820 --> 00:01:56,690 és egyes blokkok száma egyértelműen elveszett, kulcsszavak ilyesmi. 39 00:01:56,690 --> 00:02:01,920 És mit fog remélhetőleg látni egy kis egyfajta nyoma, hogy mi működik a 40 00:02:01,920 --> 00:02:03,340 hiba valójában be 41 00:02:03,340 --> 00:02:07,195 Ebben az esetben is, milyen sorban a kód volt a hiba nyilvánvalóan? 42 00:02:07,195 --> 00:02:09,729 43 00:02:09,729 --> 00:02:14,130 >> 26 nevű fájlt memory.c, ami A példában játszottak 44 00:02:14,130 --> 00:02:14,890 abban az időben. 45 00:02:14,890 --> 00:02:16,460 Tehát valószínűleg nem a malloc. 46 00:02:16,460 --> 00:02:18,630 Valószínűleg az én kódot. 47 00:02:18,630 --> 00:02:20,910 Szóval majd meglátjuk ezt újra és ismét nemsokára. 48 00:02:20,910 --> 00:02:24,080 >> Tehát scanf, ez jött fel egy Pár formák eddig. 49 00:02:24,080 --> 00:02:26,410 Láttuk sscanf röviden. 50 00:02:26,410 --> 00:02:28,330 Olyan volt, mintha a több Ön fejest ugrott a 51 00:02:28,330 --> 00:02:29,535 felkészülés a teszt. 52 00:02:29,535 --> 00:02:33,130 És scanf valójában mi a CS50 könyvtár használta alatt 53 00:02:33,130 --> 00:02:36,560 Hood jó ideje, hogy hogy adatokat kér a felhasználótól. 54 00:02:36,560 --> 00:02:40,420 >> Például, ha áttérni a CS50 készülék itt, hadd nyit egy 55 00:02:40,420 --> 00:02:45,315 Például ma, hogy hívják scanf-0.c És ez végtelenül egyszerű. 56 00:02:45,315 --> 00:02:46,590 Ez csak néhány sornyi kódot. 57 00:02:46,590 --> 00:02:50,880 De ez azt mutatja, hogy tényleg getInt dolgozott egész ebben az időben. 58 00:02:50,880 --> 00:02:54,710 >> Ebben a programban itt, a 16. sorban Figyelje meg, hogy kijelentem, int. 59 00:02:54,710 --> 00:02:57,270 Tehát nem mutató, semmi mágikus ott, csak egy int. 60 00:02:57,270 --> 00:03:00,330 Aztán a 17. sorban, azt kéri a felhasználó egy számot, kérem. 61 00:03:00,330 --> 00:03:02,930 Aztán késő 18, azt használja scanf itt. 62 00:03:02,930 --> 00:03:06,910 És én meg, olyan, mint printf, hogy várom idézet 63 00:03:06,910 --> 00:03:08,110 Unquote százalék i. 64 00:03:08,110 --> 00:03:10,920 >> Tehát százalék i, persze, jelöli egy int. 65 00:03:10,920 --> 00:03:14,580 De észre, mi a második érv, hogy a scanf. 66 00:03:14,580 --> 00:03:17,350 Hogyan jellemezné a második érvelés után a vessző? 67 00:03:17,350 --> 00:03:19,450 Mi ez? 68 00:03:19,450 --> 00:03:20,670 >> Ez a cím az x. 69 00:03:20,670 --> 00:03:25,490 Tehát ez hasznos, mert azáltal, hogy scanf a címét x, mit 70 00:03:25,490 --> 00:03:29,560 amelyek képessé teszik ezt a funkciót, hogy nem? 71 00:03:29,560 --> 00:03:33,010 Nem csak ott, hanem az, amit? 72 00:03:33,010 --> 00:03:34,060 >> Készíts egy változás is. 73 00:03:34,060 --> 00:03:38,080 Mert akkor ott, ez a fajta mint egy térkép, hogy a hely a memóriában. 74 00:03:38,080 --> 00:03:41,900 És mindaddig, amíg az Ön által megadott scanf vagy minden funkció olyan térképet, amely 75 00:03:41,900 --> 00:03:45,840 funkció ott, és nem csak a nézd meg az értéket, de ez is 76 00:03:45,840 --> 00:03:49,670 át az értékeket, ami hasznos, ha a célja az életben, hogy scanf 77 00:03:49,670 --> 00:03:53,060 szkennelés adatokat kér a felhasználótól, különösen a billentyűzetről. 78 00:03:53,060 --> 00:03:57,830 És a f jelöli formázott, mint printf, a f jelöli a formázott 79 00:03:57,830 --> 00:03:58,930 karakterláncot szeretne nyomtatni. 80 00:03:58,930 --> 00:04:04,430 >> Tehát röviden, ez a sor 18 egyszerűen azt mondja, próbálja olvasni egy int a felhasználó 81 00:04:04,430 --> 00:04:10,420 billentyűzet és tárolja belsejében x, a bármi cím x lesz élni. 82 00:04:10,420 --> 00:04:14,860 És akkor végül, a 19 csak azt mondja, köszönöm a int, ebben az esetben. 83 00:04:14,860 --> 00:04:15,940 >> Hadd megy előre, és ezt. 84 00:04:15,940 --> 00:04:18,570 Tehát, hogy scanf 0-ra. 85 00:04:18,570 --> 00:04:20,130 Hadd menjek előre, és nagyításhoz 86 00:04:20,130 --> 00:04:22,960 Megyek, és futtassa ezt pont perjel scanf 0-ra. 87 00:04:22,960 --> 00:04:24,020 Szám, kérem? 88 00:04:24,020 --> 00:04:24,720 50.. 89 00:04:24,720 --> 00:04:25,730 Köszönöm a 50. 90 00:04:25,730 --> 00:04:27,270 Tehát ez nagyon egyszerű. 91 00:04:27,270 --> 00:04:28,160 >> Most mi van az nem csinál? 92 00:04:28,160 --> 00:04:29,940 Ez nem csinál egy csomó hiba ellenőrzése. 93 00:04:29,940 --> 00:04:33,000 Például, ha nem működnek együtt, és nem írja be a számot, de a 94 00:04:33,000 --> 00:04:37,860 ehelyett írok valamit, mint a "hello," ez csak furcsa. 95 00:04:37,860 --> 00:04:41,130 És az egyik dolog, a CS50 könyvtár már csinál nekünk egy kis 96 00:04:41,130 --> 00:04:43,440 idő, hogy reprompting és reprompting. 97 00:04:43,440 --> 00:04:49,320 >> Az Újra kifejezés visszahívás volt cs50.c, és ez az oka annak, hogy a getInt 98 00:04:49,320 --> 00:04:51,670 A CS50 könyvtár valójában egy egész csomó sor hosszú, mert mi vagyunk 99 00:04:51,670 --> 00:04:53,190 ellenőrzi a buta dolgok, mint ez. 100 00:04:53,190 --> 00:04:55,730 Vajon a felhasználó nem ad minket, sőt, egy int? 101 00:04:55,730 --> 00:04:57,910 Vajon ő ad nekünk valamit mint az ABC szerinti rendezést? 102 00:04:57,910 --> 00:05:01,410 Ha igen, szeretnénk észlelni ezt, és kiabálni őket. 103 00:05:01,410 --> 00:05:03,915 >> De a dolgok sokkal érdekesebb ebben a következő példában. 104 00:05:03,915 --> 00:05:09,840 Ha elmegyek scanf-1.c, mi az, dolog, hogy alapvetően megváltozott 105 00:05:09,840 --> 00:05:11,135 A következő példa? 106 00:05:11,135 --> 00:05:13,690 107 00:05:13,690 --> 00:05:16,010 Én vagyok a char *, persze, helyett int. 108 00:05:16,010 --> 00:05:19,210 >> Szóval ez azért érdekes, mert char * emlékszem, tényleg csak a 109 00:05:19,210 --> 00:05:20,190 ugyanaz, mint a szöveg. 110 00:05:20,190 --> 00:05:23,840 Olyan érzés, mint lehet, hogy ez egy szuper egyszerű végrehajtása getString. 111 00:05:23,840 --> 00:05:26,010 De én hámozott vissza a réteg A CS50 könyvtár, úgyhogy 112 00:05:26,010 --> 00:05:27,550 hívja a char * most. 113 00:05:27,550 --> 00:05:30,070 Lássuk, hol, ha bárhol, mi baj. 114 00:05:30,070 --> 00:05:30,840 >> Line 17 - 115 00:05:30,840 --> 00:05:33,950 Megint mondom, kérek valamit, ebben az esetben egy string. 116 00:05:33,950 --> 00:05:37,940 Majd a következő sorban, hívom scanf, újra, így ez a formátum kód 117 00:05:37,940 --> 00:05:39,310 de ezúttal százalék s. 118 00:05:39,310 --> 00:05:41,900 És akkor ez az idő, én vagyok így ez puffer. 119 00:05:41,900 --> 00:05:43,550 >> Most veszi észre, nem vagyok a a jel. 120 00:05:43,550 --> 00:05:47,120 De miért van az, hogy az valószínűleg rendben itt? 121 00:05:47,120 --> 00:05:49,760 Mert ami buffer már? 122 00:05:49,760 --> 00:05:50,770 Ez már a mutató. 123 00:05:50,770 --> 00:05:51,650 Ez már egy címet. 124 00:05:51,650 --> 00:05:54,510 >> És nézzük ezt a szót "megzavarja" Hadd csak ez s, például az, hogy 125 00:05:54,510 --> 00:05:55,050 egyszerűség. 126 00:05:55,050 --> 00:05:58,250 De én nevezte puffer, mert Általánosságban elmondható, programozás, ha van egy 127 00:05:58,250 --> 00:06:02,130 darab memória, amely egy sor igazán csak az, hogy lehet, hogy ez egy puffer. 128 00:06:02,130 --> 00:06:04,460 Ez egy olyan hely az adatok tárolására. 129 00:06:04,460 --> 00:06:07,400 >> Hasonló a dolgokat, mint a YouTube, amikor ők pufferelés, hogy úgy mondjam, hogy a 130 00:06:07,400 --> 00:06:10,270 csak azt jelenti, hogy ez le bitet az interneten, és tárolja azokat egy 131 00:06:10,270 --> 00:06:14,160 helyi tömb helyi darab memória, így hogy meg lehet nézni, hogy később nem 132 00:06:14,160 --> 00:06:16,830 az ugró vagy lóg Ön lejátszása közben. 133 00:06:16,830 --> 00:06:20,930 >> Szóval van egy probléma, bár, mert én mondom scanf, várnak 134 00:06:20,930 --> 00:06:22,320 húr a felhasználó. 135 00:06:22,320 --> 00:06:24,410 Itt a címét egy darab memóriát. 136 00:06:24,410 --> 00:06:26,180 Tedd, hogy a húr van. 137 00:06:26,180 --> 00:06:31,230 Miért van az, hogy a kötött adjon mi baj, igaz? 138 00:06:31,230 --> 00:06:33,490 >> Mi ez? 139 00:06:33,490 --> 00:06:35,510 Vagyok szabad hozzáférés azt a részét, a memória? 140 00:06:35,510 --> 00:06:36,250 Tudod, én nem tudom. 141 00:06:36,250 --> 00:06:39,210 Mivel a puffer inicializálása valamit? 142 00:06:39,210 --> 00:06:39,820 Nem igazán. 143 00:06:39,820 --> 00:06:43,090 És ez az, amit mi már hívás egy szemetes értéket, amely 144 00:06:43,090 --> 00:06:44,040 nem formális szót. 145 00:06:44,040 --> 00:06:49,200 Ez csak azt jelenti, hogy fogalmunk sincs, mi bitek belül van a négy byte 146 00:06:49,200 --> 00:06:51,240 Én felosztása a puffer. 147 00:06:51,240 --> 00:06:52,450 >> Nem hívott malloc. 148 00:06:52,450 --> 00:06:53,940 Én biztosan nem hívott getString. 149 00:06:53,940 --> 00:06:56,380 Szóval, ki tudja, mi az valójában belső puffer? 150 00:06:56,380 --> 00:07:00,550 És mégis azt mondta scanf vakon, ott és tedd, amit a felhasználó beírt. 151 00:07:00,550 --> 00:07:04,460 >> Tehát mi okozhat a kódunk, ha elindul? 152 00:07:04,460 --> 00:07:05,700 Valószínűleg segfault. 153 00:07:05,700 --> 00:07:07,970 Talán nem, de valószínűleg a segfault. 154 00:07:07,970 --> 00:07:10,620 És azt mondom, lehet, hogy nem, mert néha igen, néha 155 00:07:10,620 --> 00:07:11,380 nem kap a segfault. 156 00:07:11,380 --> 00:07:14,280 Néha egyszerűen csak szerencsés, de ez azonban lesz 157 00:07:14,280 --> 00:07:15,340 egy hiba a programban. 158 00:07:15,340 --> 00:07:17,060 >> Hadd megy előre, és lefordításával. 159 00:07:17,060 --> 00:07:18,280 Fogom csinálni a régi iskola módon. 160 00:07:18,280 --> 00:07:23,825 Így csattanással kötőjel 0, scanf-1, scanf-1.c, Enter. 161 00:07:23,825 --> 00:07:24,720 Hoppá, túl öreg iskola. 162 00:07:24,720 --> 00:07:26,550 Lássuk. 163 00:07:26,550 --> 00:07:28,440 Hol megyek? 164 00:07:28,440 --> 00:07:29,700 Ó, char * buffer. 165 00:07:29,700 --> 00:07:33,595 166 00:07:33,595 --> 00:07:35,130 Ó, köszönöm - 167 00:07:35,130 --> 00:07:36,930 Mentés, OK - 168 00:07:36,930 --> 00:07:37,690 nagyon régi iskolában. 169 00:07:37,690 --> 00:07:38,900 Rendben, ez már egy ideje. 170 00:07:38,900 --> 00:07:41,720 >> Szóval már csak mentette a fájlt, miután teszi, hogy az ideiglenes 171 00:07:41,720 --> 00:07:42,700 változtatni egy perce. 172 00:07:42,700 --> 00:07:46,090 És most már össze is kézzel csenget. 173 00:07:46,090 --> 00:07:49,500 És most megyek előre és fuss scanf-1, Enter. 174 00:07:49,500 --> 00:07:50,290 Karakterlánc kérem. 175 00:07:50,290 --> 00:07:51,600 Majd írja be "hello". 176 00:07:51,600 --> 00:07:54,070 >> És most, itt, ahol, őszintén szólva, printf tud egy kicsit bosszantó. 177 00:07:54,070 --> 00:07:56,020 Ez valójában nem fog segfault ebben az esetben. 178 00:07:56,020 --> 00:07:59,860 Printf egy kicsit különleges, mert ez annyira szuper elterjedt, hogy 179 00:07:59,860 --> 00:08:03,570 lényegében printf csinál nekünk egy szívességet, és felismerve, 180 00:08:03,570 --> 00:08:04,830 ez nem érvényes pointer. 181 00:08:04,830 --> 00:08:09,080 Hadd vegye fel magam, hogy csak nyomtatni out zárójelben null, még 182 00:08:09,080 --> 00:08:13,340 bár ez nem feltétlenül, amit mi magunk várható. 183 00:08:13,340 --> 00:08:16,940 >> Tehát nem igazán könnyen váltanak ki segfault ezzel, de egyértelműen ez a 184 00:08:16,940 --> 00:08:18,600 nem az a viselkedés, amit akartam. 185 00:08:18,600 --> 00:08:19,800 Szóval mi az egyszerű megoldás? 186 00:08:19,800 --> 00:08:25,650 Nos, scanf-2, hadd javasoljuk, hogy ahelyett, hogy valójában csak egy kiosztása 187 00:08:25,650 --> 00:08:30,100 char *, hadd legyek egy kicsit okosabb a ezt, és hadd osztja puffer 188 00:08:30,100 --> 00:08:32,940 mint egy sorozata 16 karakter. 189 00:08:32,940 --> 00:08:34,200 >> Így meg tudom csinálni ezt egy pár módon. 190 00:08:34,200 --> 00:08:35,610 Én is teljesen használni malloc. 191 00:08:35,610 --> 00:08:38,980 De én vissza a két hétig, amikor Csak kellett egy csomó 192 00:08:38,980 --> 00:08:39,620 karakter. 193 00:08:39,620 --> 00:08:40,860 Ez csak egy tömb. 194 00:08:40,860 --> 00:08:44,870 Hadd inkább újra puffer hogy egy sor 16 karakter. 195 00:08:44,870 --> 00:08:47,340 >> És most, amikor elmegyek puffer - 196 00:08:47,340 --> 00:08:49,940 és ez az, amit mi nem beszélni a héten két - 197 00:08:49,940 --> 00:08:53,730 de kezelésére tömb bár ez a cím. 198 00:08:53,730 --> 00:08:56,390 Technikailag, mint láttuk, ők egy kicsit más. 199 00:08:56,390 --> 00:09:01,290 De scanf nem bánja, ha adsz meg a nevét egy sor, mert amit 200 00:09:01,290 --> 00:09:05,030 Clang fog tenni nekünk alapvetően kezeli a nevét, hogy a tömb, mint a 201 00:09:05,030 --> 00:09:08,280 címe darab 16 bájt. 202 00:09:08,280 --> 00:09:09,550 >> Tehát ez jobb. 203 00:09:09,550 --> 00:09:12,110 Ez azt jelenti, most, hogy remélhetőleg tegye a következőket. 204 00:09:12,110 --> 00:09:16,800 Hadd kicsinyíteni egy pillanatra, és megcsináljuk scanf-2 összeállított OK. 205 00:09:16,800 --> 00:09:19,390 Most hadd ne lett perjel scanf-2. 206 00:09:19,390 --> 00:09:22,430 Karakterlánc kérem. "Hello." És ez úgy tűnt, működik ebben az időben. 207 00:09:22,430 --> 00:09:26,020 >> De valaki javasolni a forgatókönyvet amely lehet, hogy nem mindig működik? 208 00:09:26,020 --> 00:09:28,550 Igen? 209 00:09:28,550 --> 00:09:30,640 Valami hosszabb, mint 16 karakter. 210 00:09:30,640 --> 00:09:32,020 És tényleg, mi lehet egy kicsit pontosabb. 211 00:09:32,020 --> 00:09:36,540 Valami hosszabb, mint 15 karakter, mert tényleg meg kell szem előtt tartani 212 00:09:36,540 --> 00:09:39,920 , amire szükségünk van, hogy a backslash nulla hallgatólagosan a végén a húr, 213 00:09:39,920 --> 00:09:42,950 amely félre scanf általában vigyázni számunkra. 214 00:09:42,950 --> 00:09:46,210 >> Hadd ilyesmit - 215 00:09:46,210 --> 00:09:48,040 Néha csak hagyja így. 216 00:09:48,040 --> 00:09:50,630 OK, így már jelenleg indukált szegmentációs hiba. 217 00:09:50,630 --> 00:09:51,000 Miért? 218 00:09:51,000 --> 00:09:54,940 Mert gépelt, hogy több mint 15 karakterek, és így most már tényleg 219 00:09:54,940 --> 00:09:58,280 megérintette memória, hogy én valóban nem kellett volna. 220 00:09:58,280 --> 00:10:00,180 >> Szóval, ami igazán a megoldás itt? 221 00:10:00,180 --> 00:10:02,210 Nos, mi van, ha szükségünk van egy hosszabb szöveg? 222 00:10:02,210 --> 00:10:03,960 Nos, lehet, hogy 32 bájt. 223 00:10:03,960 --> 00:10:05,160 Nos, mi van, ha ez nem elég hosszú? 224 00:10:05,160 --> 00:10:06,040 Mit szólnál 64 byte? 225 00:10:06,040 --> 00:10:07,080 Mi van, ha ez nem elég hosszú? 226 00:10:07,080 --> 00:10:09,640 Mit szólnál 128 vagy 200 bájt? 227 00:10:09,640 --> 00:10:12,660 Ami igazán a megoldás itt a Általános esetben, ha nem tudjuk a 228 00:10:12,660 --> 00:10:14,460 előre, amit a felhasználó fog gépelni? 229 00:10:14,460 --> 00:10:20,000 230 00:10:20,000 --> 00:10:23,050 >> Ez csak elég nagy fájdalom a csacsi, hogy őszinte legyek, ezért a 231 00:10:23,050 --> 00:10:29,050 CS50 könyvtár néhány tucat sornyi kód együttes végrehajtása 232 00:10:29,050 --> 00:10:32,390 GetString karakterláncot úgy, hogy mi nem kell tudni előre, mi a 233 00:10:32,390 --> 00:10:33,430 felhasználó fog beírni. 234 00:10:33,430 --> 00:10:37,370 Különösen, ha megnézi vissza cs50.c két héttel ezelőtt, akkor megjelenik 235 00:10:37,370 --> 00:10:40,480 hogy getString valójában nem scanf nem használhatja ezen a módon. 236 00:10:40,480 --> 00:10:43,720 Inkább olvas egy karakter egy időben. 237 00:10:43,720 --> 00:10:46,010 >> Mivel az egyetlen jó dolog olvasás egy karakter tudunk 238 00:10:46,010 --> 00:10:48,490 biztosítani magunkat, hogy mindig legalább egy char. 239 00:10:48,490 --> 00:10:51,740 Én is csak egy char kijelentem, majd vegye Ezen igazán baba lépéseket csak 240 00:10:51,740 --> 00:10:54,380 olvasni egy karakter egy időt a billentyűzeten. 241 00:10:54,380 --> 00:10:58,240 És akkor mit fog látni getString tesz, minden alkalommal, amikor elfogy a, 242 00:10:58,240 --> 00:11:02,280 mondjuk 16 byte memóriát, használ malloc vagy unokatestvére annak, hogy 243 00:11:02,280 --> 00:11:06,810 Több memória másolás a régi memóriát az új, majd a csúszó 244 00:11:06,810 --> 00:11:09,900 mentén, szerzés egy karaktert egy időben, és amikor elfogy, hogy a 245 00:11:09,900 --> 00:11:13,370 darab memória, dobja el, megragadja egy nagyobb darab memória, másolatok régi 246 00:11:13,370 --> 00:11:14,750 új, és megismétli. 247 00:11:14,750 --> 00:11:18,480 És ez valóban a fájdalom, hogy ténylegesen végre valami olyan egyszerű, mint 248 00:11:18,480 --> 00:11:19,710 kapok be a felhasználó. 249 00:11:19,710 --> 00:11:21,090 >> Így használhatja scanf. 250 00:11:21,090 --> 00:11:22,430 Használhatja más hasonló funkciók. 251 00:11:22,430 --> 00:11:25,420 És sok a tankönyvek és az online példák, de ezek mind 252 00:11:25,420 --> 00:11:27,210 téve a problémák, mint ez. 253 00:11:27,210 --> 00:11:29,550 És végül, kapok egy segfault a fajta idegesítő. 254 00:11:29,550 --> 00:11:30,680 Ez nem jó, a felhasználó számára. 255 00:11:30,680 --> 00:11:33,560 >> De a legrosszabb esetben, mit alapvetõen tedd 256 00:11:33,560 --> 00:11:37,160 kód veszélyeztetett? 257 00:11:37,160 --> 00:11:39,250 Valamilyen támadás, esetleg. 258 00:11:39,250 --> 00:11:41,680 Beszéltünk egy ilyen támadást - túláradó a verem. 259 00:11:41,680 --> 00:11:44,660 De általában, ha szabad túlcsordulás a puffer, mint tettük azt a 260 00:11:44,660 --> 00:11:48,070 Néhány héttel ezelőtt, és csak írásban több, mint "hello" a verem, akkor 261 00:11:48,070 --> 00:11:52,330 valóban átveszi, potenciálisan a számítógép, vagy legalább kap az adatok 262 00:11:52,330 --> 00:11:53,510 nem a tiéd. 263 00:11:53,510 --> 00:11:55,970 >> Tehát röviden, ezért van a képzés kerekek. 264 00:11:55,970 --> 00:11:59,090 De most kezd levenni, mint a programok már nem kell, 265 00:11:59,090 --> 00:12:00,610 szükségszerűen, adatokat kér a felhasználótól. 266 00:12:00,610 --> 00:12:03,960 De abban az esetben a problémát meg hat, A bemenet jön egy hatalmas 267 00:12:03,960 --> 00:12:07,520 szótár fájl 150 néhány furcsa ezer szónál. 268 00:12:07,520 --> 00:12:10,330 >> Szóval nem kell aggódni a felhasználó tetszőleges bemenet. 269 00:12:10,330 --> 00:12:13,720 Adunk néhány feltételezés az a fájl. 270 00:12:13,720 --> 00:12:20,340 Bármilyen kérdése van, vagy mutatók scanf vagy felhasználói általában? 271 00:12:20,340 --> 00:12:24,450 >> Rendben, egy gyors pillantást, majd egy záró témát két héttel ezelőtt. 272 00:12:24,450 --> 00:12:28,590 És ez volt ez a fogalom a struct. 273 00:12:28,590 --> 00:12:34,180 Nem mintha - ezt a fogalmat a struct, ami volt? 274 00:12:34,180 --> 00:12:35,430 Mit struct tenni értünk? 275 00:12:35,430 --> 00:12:39,280 276 00:12:39,280 --> 00:12:39,860 >> Határozza meg - 277 00:12:39,860 --> 00:12:41,710 Tessék? 278 00:12:41,710 --> 00:12:42,820 Határozza meg a változó típusát. 279 00:12:42,820 --> 00:12:44,410 Tehát egyfajta. 280 00:12:44,410 --> 00:12:46,180 Mi tulajdonképpen ötvözi két témát. 281 00:12:46,180 --> 00:12:49,510 Tehát typedef, emlékeztetni arra, hogy mi is kijelentik egyfajta saját, mint a 282 00:12:49,510 --> 00:12:51,500 szinonimája, mint a karakterlánc char *. 283 00:12:51,500 --> 00:12:56,200 De a typedef struct és, mi is létre igazán saját adatszerkezeteket. 284 00:12:56,200 --> 00:12:59,600 >> Például, ha visszamegyek a gedit itt egy pillanatra, és megy előre 285 00:12:59,600 --> 00:13:08,230 is valami hasonlót, hadd mentse ezt, mondjuk, structs.c 286 00:13:08,230 --> 00:13:10,840 átmenetileg, Elmegyek , hogy menjen előre, és egy olyan 287 00:13:10,840 --> 00:13:14,360 standardio.h, int main semmis. 288 00:13:14,360 --> 00:13:18,960 És akkor itt, tegyük fel, hogy azt akarom, írni egy programot, amely tárolja 289 00:13:18,960 --> 00:13:21,840 több diák több házak, például. 290 00:13:21,840 --> 00:13:24,430 Szóval, ez olyan, mint egy registrarial adatbázis valamilyen. 291 00:13:24,430 --> 00:13:29,550 >> Tehát, ha szüksége van a név az egyik diák, én lehet csinálni valamit, mint char * name, 292 00:13:29,550 --> 00:13:31,570 és én ilyesmit - 293 00:13:31,570 --> 00:13:34,410 valójában, vegyünk a CS50 könyvtár csak egy pillanatra, hogy ez a 294 00:13:34,410 --> 00:13:38,380 kicsit egyszerűbb, így kölcsönözhetnek a több tucat sornyi kódot. 295 00:13:38,380 --> 00:13:39,340 És nézzük csak tartsa egyszerű. 296 00:13:39,340 --> 00:13:42,610 Majd tartsa string, és most getString. 297 00:13:42,610 --> 00:13:47,420 >> Tehát azt állítom, most, hogy már tárolt a nevét néhány diák, és a ház a 298 00:13:47,420 --> 00:13:50,240 Néhány diák, csak a változó mint mi, és az első héten. 299 00:13:50,240 --> 00:13:52,370 De tegyük fel, most szeretnék támogatni több diák. 300 00:13:52,370 --> 00:13:58,460 Rendben, én ösztönök kell tennünk karakterlánc name2, kap getString, string 301 00:13:58,460 --> 00:14:01,370 house2 lesz getString. 302 00:14:01,370 --> 00:14:05,850 És akkor a harmadik diák, lássuk név3 getString. 303 00:14:05,850 --> 00:14:09,170 >> Rendben, ez remélhetőleg feltűnő Ön, mint a fajta ostoba, 304 00:14:09,170 --> 00:14:11,580 mert ez a folyamat valóban nem lesz a vége, és ez csak úgy 305 00:14:11,580 --> 00:14:13,130 hogy a kód a valósnál és ami még rosszabb és rosszabb lesz. 306 00:14:13,130 --> 00:14:14,810 De ezt is megoldotta a héten kettő. 307 00:14:14,810 --> 00:14:19,450 Milyen volt a viszonylag tiszta megoldás amikor már több változó a 308 00:14:19,450 --> 00:14:23,580 Ugyanezeket az adatokat típus, mind összefügg egymással, de mi nem akarjuk, hogy ez szörnyű rendetlenség 309 00:14:23,580 --> 00:14:26,870 A hasonló nevű változó? 310 00:14:26,870 --> 00:14:30,060 Mit csinálunk helyette? 311 00:14:30,060 --> 00:14:31,260 >> Szóval azt hiszem, hallottam egy pár helyen. 312 00:14:31,260 --> 00:14:32,590 Volt egy tömb. 313 00:14:32,590 --> 00:14:37,110 Ha azt szeretné, több példányban valamit, miért nem tiszta ez az egész 314 00:14:37,110 --> 00:14:39,540 , és csak azt mondom, hogy nekem nevű tömböt neveket? 315 00:14:39,540 --> 00:14:41,640 >> És most, most kemény 3-as kód. 316 00:14:41,640 --> 00:14:44,450 Aztán adj még egy tömb hívott házak, és hagyd, hogy a 317 00:14:44,450 --> 00:14:45,800 most nehéz 3-as kód. 318 00:14:45,800 --> 00:14:49,220 És én már masszívan kitakarította a rendetlenség, hogy én csak teremtett. 319 00:14:49,220 --> 00:14:52,400 Nos, én még mindig nehéz kódolású 3, de még a 3 is dinamikusan jönnek a 320 00:14:52,400 --> 00:14:54,350 felhasználó vagy argv, vagy hasonlók. 321 00:14:54,350 --> 00:14:55,720 Szóval ez már tisztább. 322 00:14:55,720 --> 00:15:00,100 >> De mi bosszantó ez, hogy Most, bár a név valahogy 323 00:15:00,100 --> 00:15:02,280 alapvetően a egy diák háza - 324 00:15:02,280 --> 00:15:04,720 ez egy diák, hogy igazán szeretné, hogy képviselje - 325 00:15:04,720 --> 00:15:08,080 Most már két tömböt, amely párhuzamos abban az értelemben, hogy ők a 326 00:15:08,080 --> 00:15:13,930 azonos méretű, és neveket konzol 0 feltehetően térképek házak konzol 0, 327 00:15:13,930 --> 00:15:16,600 és neveket konzol 1 térképek a házak konzol 1. 328 00:15:16,600 --> 00:15:19,280 Más szóval, hogy a diák él hogy a ház, és hogy más diák 329 00:15:19,280 --> 00:15:20,530 lakik a másik házban. 330 00:15:20,530 --> 00:15:23,720 De biztosan ez lehet tenni, még tisztábban. 331 00:15:23,720 --> 00:15:24,990 >> Nos, lehet, sőt. 332 00:15:24,990 --> 00:15:28,730 És hadd menjen előre, és nyitott fel structs.h, és akkor 333 00:15:28,730 --> 00:15:31,130 látja ezt az ötletet itt. 334 00:15:31,130 --> 00:15:34,905 Figyeljük meg, hogy én is használtam typedef, ahogy utalt az imént, hogy állapítsa meg a 335 00:15:34,905 --> 00:15:35,570 saját adattípus. 336 00:15:35,570 --> 00:15:39,660 De én is ezzel a másik kulcsszó nevezett struktúra, ami nekem egy új 337 00:15:39,660 --> 00:15:40,790 adatstruktúra. 338 00:15:40,790 --> 00:15:43,980 >> És ez adatstruktúra azt állítják megy hogy a két dolog belsejében 339 00:15:43,980 --> 00:15:47,060 ez - egy string nevű nevet, és egy string nevű házat. 340 00:15:47,060 --> 00:15:49,820 És a neve fogok adni ez az adat struktúra megy 341 00:15:49,820 --> 00:15:51,005 hogy hívják diák. 342 00:15:51,005 --> 00:15:54,030 Nevezhetném, amit csak akarok, de szemantikailag teszi 343 00:15:54,030 --> 00:15:55,810 értelme számomra a fejemben. 344 00:15:55,810 --> 00:15:59,160 >> Tehát most, ha nyit egy jobb változat A program elkezdtem írni 345 00:15:59,160 --> 00:16:00,390 ott, hadd lépjünk a csúcsra. 346 00:16:00,390 --> 00:16:03,190 És van néhány sornyi kódot itt, de hadd összpontosítani a 347 00:16:03,190 --> 00:16:04,160 a pillanatban az egyik. 348 00:16:04,160 --> 00:16:07,790 Már kijelentette, állandó úgynevezett diák és kemény kódolású 3 most. 349 00:16:07,790 --> 00:16:11,110 De most, észre, hogy tiszta a kód kezd kap. 350 00:16:11,110 --> 00:16:15,030 >> A vonal 22, kijelentem tömb diákok. 351 00:16:15,030 --> 00:16:18,760 És észre, hogy a diákok látszólag most egy adattípust. 352 00:16:18,760 --> 00:16:23,360 Mivel a tetején ezt a fájlt, észre Én már bele, hogy header fájlt 353 00:16:23,360 --> 00:16:24,820 hogy húztam fel, csak egy perce. 354 00:16:24,820 --> 00:16:28,820 És header fájlt egyszerűen volt Ez a meghatározás egy diák. 355 00:16:28,820 --> 00:16:32,470 >> Tehát most, amit létre saját egyéni adatok írja, hogy a szerzők a C év 356 00:16:32,470 --> 00:16:33,890 ezelőtt nem gondol előre. 357 00:16:33,890 --> 00:16:34,570 De nem gond. 358 00:16:34,570 --> 00:16:35,870 Én lehet, hogy én magam. 359 00:16:35,870 --> 00:16:39,050 Tehát ez egy tömb nevű diákok, Minden amelynek tagjai 360 00:16:39,050 --> 00:16:41,100 egy diák struktúrát. 361 00:16:41,100 --> 00:16:44,270 És azt akarom, a három említett a tömbben. 362 00:16:44,270 --> 00:16:46,030 >> És most mi a többit a program nem? 363 00:16:46,030 --> 00:16:47,550 Kellett valami, egy kicsit önkényes. 364 00:16:47,550 --> 00:16:51,450 Így az online 24-től, Azt hajtogat 0-3. 365 00:16:51,450 --> 00:16:54,000 Én majd felkéri a felhasználót a a hallgató nevét. 366 00:16:54,000 --> 00:16:56,110 Aztán használjon getString, mint korábban. 367 00:16:56,110 --> 00:16:59,410 Aztán kérje a hallgató házába, és tudom használni getString, mint korábban. 368 00:16:59,410 --> 00:17:01,780 >> De vegyük észre - némileg új darab szintaxis - 369 00:17:01,780 --> 00:17:07,010 Még mindig index az i-edik diák, de hogyan jutok el a konkrét adatok 370 00:17:07,010 --> 00:17:08,354 területén belül a struktúra? 371 00:17:08,354 --> 00:17:11,770 Nos, mi úgy tűnik, a új darab szintaxis? 372 00:17:11,770 --> 00:17:13,339 Ez csak a pont operátor. 373 00:17:13,339 --> 00:17:14,510 >> Már nem igazán láttam ilyet. 374 00:17:14,510 --> 00:17:17,819 Láttad azt a Pset öt, ha már lebukott a már a bitmap kép. 375 00:17:17,819 --> 00:17:22,372 De a dot csak azt jelenti, belül a struct vagy több területen, hogy pont 376 00:17:22,372 --> 00:17:24,510 név, vagy adj dot házat. 377 00:17:24,510 --> 00:17:28,690 Ez azt jelenti, menj be a struct és kap az egyes területeken. 378 00:17:28,690 --> 00:17:30,200 >> Mit jelent a többi a program nem? 379 00:17:30,200 --> 00:17:31,190 Ez még nem minden, hogy szexi. 380 00:17:31,190 --> 00:17:34,640 Figyeljük meg, hogy én hajtogat 0-3 ismét és hozzon létre egy angol 381 00:17:34,640 --> 00:17:40,500 kifejezés, mint olyan, és így az ilyen, és egy ilyen ház, átadva dot nevét 382 00:17:40,500 --> 00:17:43,320 Az i-edik diák és ház is. 383 00:17:43,320 --> 00:17:47,560 >> És akkor végül, most kezdjük, hogy anális erről, most, hogy 384 00:17:47,560 --> 00:17:49,580 tisztában azzal, mi malloc és egyéb funkciókat 385 00:17:49,580 --> 00:17:50,570 mindezt alkalommal. 386 00:17:50,570 --> 00:17:54,220 Miért kell szabadítani a két név és a ház, bár én 387 00:17:54,220 --> 00:17:56,960 Nem hívja malloc? 388 00:17:56,960 --> 00:17:58,020 >> GetString volt. 389 00:17:58,020 --> 00:18:00,930 És ez volt a piszkos kis titka néhány hét, de van getString 390 00:18:00,930 --> 00:18:03,530 már szivárog memória az egész hely minden félévben eddig. 391 00:18:03,530 --> 00:18:05,990 És valgrand majd végül mutatják ezt velünk. 392 00:18:05,990 --> 00:18:10,730 >> De ez nem egy nagy dolog, mert tudom, , hogy én is csak szabad a nevét 393 00:18:10,730 --> 00:18:15,750 és a ház, hiába, hogy szuper, szuper biztonságos, azt kell 394 00:18:15,750 --> 00:18:17,890 csinál valami hiba ellenőrzés itt. 395 00:18:17,890 --> 00:18:19,040 Mi az ösztöneid mondom? 396 00:18:19,040 --> 00:18:22,480 Mire kell hogy ellenőrzik mielőtt szabad, ami a 397 00:18:22,480 --> 00:18:25,470 string, amely más néven a char *? 398 00:18:25,470 --> 00:18:33,460 >> Én tényleg ellenőrzik, ha a diákok konzol i pont neve nem 399 00:18:33,460 --> 00:18:34,840 egyenlő null. 400 00:18:34,840 --> 00:18:40,400 Akkor lesz baj, hogy menjen előre és ingyenes hogy a mutató, és azonos vagy más 401 00:18:40,400 --> 00:18:41,160 egy is. 402 00:18:41,160 --> 00:18:46,860 Ha a tanulók konzol i dot ház nem egyenlő null, ezt most megvédi 403 00:18:46,860 --> 00:18:52,520 szemben a sarokban ügyben, amelyben GetString visszatér valami ilyesmi null. 404 00:18:52,520 --> 00:18:57,310 És láttunk egy perce printf majd megvédeni minket itt csak azt 405 00:18:57,310 --> 00:18:58,990 null, ami fog nézni furcsa. 406 00:18:58,990 --> 00:19:02,340 De legalább nem fog segfault, mint láttuk. 407 00:19:02,340 --> 00:19:05,990 >> Nos, hadd tegye egy másik dolog itt. Struktúrák-0 egyfajta ostoba programot 408 00:19:05,990 --> 00:19:09,700 mert én meg ezeket az adatokat, majd a ez elveszett, ha a program véget ér. 409 00:19:09,700 --> 00:19:10,940 De hadd menjek előre, és erre a célra. 410 00:19:10,940 --> 00:19:12,830 Engedjék meg, hogy a terminál ablak egy kicsit nagyobb. 411 00:19:12,830 --> 00:19:17,000 Engedjék meg, hogy struktúrákat-1, amely egy új változata a. 412 00:19:17,000 --> 00:19:18,520 >> Én nagyítani egy kicsit. 413 00:19:18,520 --> 00:19:21,620 És most hadd futni dot slash Struktúrák-1. 414 00:19:21,620 --> 00:19:22,590 Student neve - 415 00:19:22,590 --> 00:19:31,500 David Mather, csináljuk Rob Kirkland, lássuk Lauren Leverett. 416 00:19:31,500 --> 00:19:33,650 Milyen érdekes most felhívás - 417 00:19:33,650 --> 00:19:35,540 és én csak azt tudom, mert Én írtam a programot - 418 00:19:35,540 --> 00:19:38,930 van egy kép most a jelenlegi elnevezésű könyvtárat students.csv. 419 00:19:38,930 --> 00:19:40,420 Néhányan lehet, hogy láttam ezeket a valós világban. 420 00:19:40,420 --> 00:19:42,980 >> Mi az a CSV fájlt? 421 00:19:42,980 --> 00:19:44,170 Vesszővel elválasztott értékek. 422 00:19:44,170 --> 00:19:46,670 Ez a fajta, mint a szegény ember verziója egy Excel fájl. 423 00:19:46,670 --> 00:19:50,580 Ez egy tábla a sorok és oszlopok meg tudja nyitni a programot, mint az Excel, 424 00:19:50,580 --> 00:19:51,800 vagy számok egy Mac. 425 00:19:51,800 --> 00:19:55,180 >> És ha kinyitom ezt a fájlt itt gedit, felhívás - a számok nincsenek ott. 426 00:19:55,180 --> 00:19:57,360 Ez csak gedit mondja nekem sorszámok. 427 00:19:57,360 --> 00:19:59,740 Figyeljük meg az első sorban a fájl David és Mather. 428 00:19:59,740 --> 00:20:01,450 A következő sor Rob vessző Kirkland. 429 00:20:01,450 --> 00:20:04,170 A harmadik vonal Lauren vessző Leverett. 430 00:20:04,170 --> 00:20:05,480 >> Szóval, mit hoztam létre? 431 00:20:05,480 --> 00:20:09,580 Már most írt egy C program hatékonyan tud generálni táblázatok 432 00:20:09,580 --> 00:20:11,840 meg lehet nyitni a program, mint például az Excel. 433 00:20:11,840 --> 00:20:15,520 Nem olyan vonzó egy adathalmaz, de ha sokkal nagyobb darabokat 434 00:20:15,520 --> 00:20:18,440 adatokat, amit valóban szeretne manipulálni, és grafikonok, valamint a 435 00:20:18,440 --> 00:20:21,260 tetszik, ez talán az egyik módja, hogy az adatok. 436 00:20:21,260 --> 00:20:25,370 Sőt, CSVs valóban szuper gyakori csak tárolására egyszerű adat - 437 00:20:25,370 --> 00:20:28,940 Yahoo Finance, például, ha kap tőzsdei keresztül az úgynevezett 438 00:20:28,940 --> 00:20:33,180 API, az ingyenes szolgáltatás, amely lehetővé teszi, hogy kap a jelenlegi up-to-the-date állomány 439 00:20:33,180 --> 00:20:35,650 idézi a cégek, adja az adatokat vissza a 440 00:20:35,650 --> 00:20:37,800 szuper egyszerű CSV formátumban. 441 00:20:37,800 --> 00:20:39,380 >> Szóval hogyan tesszük ezt? 442 00:20:39,380 --> 00:20:42,530 Hát észre, a legtöbb a program majdnem ugyanaz. 443 00:20:42,530 --> 00:20:46,870 De észre itt, ahelyett, print A diákok ki, on line 35 444 00:20:46,870 --> 00:20:51,040 tovább, azt állítom, hogy én vagyok a megtakarítás diákok a lemezre, így a mentés egy fájlba. 445 00:20:51,040 --> 00:20:53,630 >> Így észre én nyilvánított FILE * - 446 00:20:53,630 --> 00:20:57,260 Most, ez a fajta anomália a C Bármilyen okból, FILE minden sapkák, 447 00:20:57,260 --> 00:21:00,690 ami nem olyan, mint a legtöbb más adattípusok C-ben, de ez a beépített 448 00:21:00,690 --> 00:21:02,320 adattípus, FILE *. 449 00:21:02,320 --> 00:21:05,900 És én nyilvánított mutató egy fájlba, az, hogy hogyan lehet gondolni, hogy az. 450 00:21:05,900 --> 00:21:08,070 >> fopen: nyitott fájlt. 451 00:21:08,070 --> 00:21:09,470 Milyen fájlt akarsz megnyitni? 452 00:21:09,470 --> 00:21:12,620 Szeretnék nyitni egy fájlt, amit majd önkényesen hívás students.csv. 453 00:21:12,620 --> 00:21:14,480 Tudtam hívni, hogy amit csak akarok. 454 00:21:14,480 --> 00:21:15,200 >> És akkor egy tipp. 455 00:21:15,200 --> 00:21:18,960 Mit jelent a második argumentum az fopen valószínűleg azt jelenti? 456 00:21:18,960 --> 00:21:21,480 Jobb, w az írás, lehetne lesz r olvasni. 457 00:21:21,480 --> 00:21:24,120 Van egy hozzáfűzés, ha hozzáadni kívánt sorokat, és nem 458 00:21:24,120 --> 00:21:25,200 felülírja az egészet. 459 00:21:25,200 --> 00:21:28,005 >> De én csak azt szeretném, hogy létrehozza ezt a fájlt egyszer, úgyhogy használni quote unquote w. 460 00:21:28,005 --> 00:21:31,880 És tudom, hogy csak olvastam a dokumentáció, vagy a man oldalt. 461 00:21:31,880 --> 00:21:35,100 Ha a fájl nem null - más szóval, ha semmi baj nincs - 462 00:21:35,100 --> 00:21:37,820 hadd hatunk végig tanulók 0-3. 463 00:21:37,820 --> 00:21:40,410 >> És most észre, hogy van valami alig észrevehetően eltérő 464 00:21:40,410 --> 00:21:42,110 a line 41 itt. 465 00:21:42,110 --> 00:21:42,960 Ez nem printf. 466 00:21:42,960 --> 00:21:46,530 Ez fprintf a fájlok printf. 467 00:21:46,530 --> 00:21:47,790 Így fog írni a fájlba. 468 00:21:47,790 --> 00:21:48,860 Melyik fájlt? 469 00:21:48,860 --> 00:21:53,630 Akinek mutató megadott az első érv. 470 00:21:53,630 --> 00:21:55,940 >> Aztán meg a format string. 471 00:21:55,940 --> 00:21:59,660 Aztán meg, hogy milyen szöveg akarunk csatlakoztassa az első százalékos s, és 472 00:21:59,660 --> 00:22:04,320 majd egy másik változót vagy a második százalék s. 473 00:22:04,320 --> 00:22:06,760 Ezután zárjuk a fájlt fclose. 474 00:22:06,760 --> 00:22:09,380 Mint én szabad a memória, mint korábban, de Menjek vissza, és adjunk hozzá 475 00:22:09,380 --> 00:22:10,540 Néhány ellenőrzi null. 476 00:22:10,540 --> 00:22:12,090 >> És ennyi. 477 00:22:12,090 --> 00:22:16,960 fopen, fprintf, fclose ad nekem képes létrehozni szöveges fájlokat. 478 00:22:16,960 --> 00:22:19,640 Most, akkor látni probléma meg öt, amely magában foglalja a képeket, akkor használja 479 00:22:19,640 --> 00:22:20,990 bináris fájlok helyett. 480 00:22:20,990 --> 00:22:24,200 De alapvetően az ötlet ugyanaz, még akkor is, ha a funkció azt is megtudhatod 481 00:22:24,200 --> 00:22:28,710 hogy egy kicsit más. 482 00:22:28,710 --> 00:22:32,580 >> Tehát forgószél túra, de akkor kap is ismeri fájl I/O-- 483 00:22:32,580 --> 00:22:34,960 be-és kimenet - a Pset öt. 484 00:22:34,960 --> 00:22:38,607 És bármilyen kérdése van az kezdeti alapokat itt? 485 00:22:38,607 --> 00:22:39,857 Igen? 486 00:22:39,857 --> 00:22:41,880 487 00:22:41,880 --> 00:22:43,710 >> Mi van, ha megpróbálja kiszabadítani a null érték? 488 00:22:43,710 --> 00:22:48,880 Azt hiszem, hacsak nem szabad ütött kicsit több felhasználóbarát, akkor 489 00:22:48,880 --> 00:22:49,890 potenciálisan segfault. 490 00:22:49,890 --> 00:22:54,160 Halad null rossz, mert nem hisz szabadon zavar, hogy ellenőrizze az Ön számára, 491 00:22:54,160 --> 00:22:57,330 mivel ez potenciálisan a hulladék Az idő, hogy ezt maga a 492 00:22:57,330 --> 00:22:59,022 mindenki a világon. 493 00:22:59,022 --> 00:23:00,590 Jó kérdés, mégis. 494 00:23:00,590 --> 00:23:04,300 >> Rendben, így ez a fajta lesz minket egy érdekes téma. 495 00:23:04,300 --> 00:23:07,010 A téma a probléma meg Ötös kriminalisztika. 496 00:23:07,010 --> 00:23:08,420 Legalábbis ez a része a megoldásokat. 497 00:23:08,420 --> 00:23:12,030 Törvényszéki általában utal, hogy a helyreállítási információ, hogy lehet, 498 00:23:12,030 --> 00:23:14,110 Lehet, hogy nem törölték szándékosan. 499 00:23:14,110 --> 00:23:18,680 És azt gondoltam, hogy egy gyors ízelítőt, hogy mi is történik valójában az összes 500 00:23:18,680 --> 00:23:21,230 ezúttal alatt Hood a számítógép. 501 00:23:21,230 --> 00:23:23,960 >> Például, ha van benne a laptop vagy az asztali számítógépen a 502 00:23:23,960 --> 00:23:28,040 merevlemez, ez akár egy mechanikus eszköz, amely valóban forog - 503 00:23:28,040 --> 00:23:31,650 ott kerek dolgokat az úgynevezett tálak úgy néz nagyon tetszik, amit 504 00:23:31,650 --> 00:23:34,540 most volt a képernyőn van, mégis ez inkább a régi iskolában. 505 00:23:34,540 --> 00:23:37,370 Ez egy három-és egy-fél hüvelyk merevlemez. 506 00:23:37,370 --> 00:23:40,070 És három és fél hüvelyk utal a az a dolog, ha telepíti 507 00:23:40,070 --> 00:23:40,890 egy számítógép. 508 00:23:40,890 --> 00:23:44,890 >> Sokan közületek srácok a laptopok már van szilárdtest-meghajtók és SSD, 509 00:23:44,890 --> 00:23:46,260 amelyek nem tartalmaz mozgó alkatrészeket. 510 00:23:46,260 --> 00:23:49,170 Ők inkább RAM-ot és kevesebb, mint a ezek a mechanikus eszközök. 511 00:23:49,170 --> 00:23:51,450 De az ötlet még mindig ugyanaz, Természetesen, mint azok 512 00:23:51,450 --> 00:23:52,790 a probléma meg öt. 513 00:23:52,790 --> 00:23:57,400 >> És ha úgy gondolja, van most egy merevlemezt jelenti, hogy egy kör, amely 514 00:23:57,400 --> 00:23:58,930 Én felhívni így itt. 515 00:23:58,930 --> 00:24:02,290 Amikor létrehoz egy fájlt a számítógépen, hogy ez egy SSD, vagy 516 00:24:02,290 --> 00:24:06,610 Ebben az esetben egy régebbi iskola merevlemez, ez a fájl tartalmazza több bit. 517 00:24:06,610 --> 00:24:10,510 Tegyük fel, hogy ez a 0 és 1, egy csomó 0s és 1s. 518 00:24:10,510 --> 00:24:11,660 Szóval ez az egész merevlemezt. 519 00:24:11,660 --> 00:24:13,225 Ez nyilvánvalóan egy nagyon nagy fájlt. 520 00:24:13,225 --> 00:24:18,080 És ez a fel a 0s és 1s abban része a fizikai tál. 521 00:24:18,080 --> 00:24:19,750 >> Nos, mi az, hogy a fizikai része? 522 00:24:19,750 --> 00:24:25,310 Nos, kiderült, hogy a merevlemezen, legalább egy ilyen típusú, van 523 00:24:25,310 --> 00:24:27,340 ezek az apró kis mágneses részecskéket. 524 00:24:27,340 --> 00:24:32,630 És lényegében az Északi-és a déli pólus nekik, hogy ha 525 00:24:32,630 --> 00:24:35,710 viszont egy ilyen mágneses részecskék Ily módon, ha azt mondják, hogy ez 526 00:24:35,710 --> 00:24:36,720 ami 1. 527 00:24:36,720 --> 00:24:39,340 És ha ez fejjel lefelé délre észak, lehet mondani, hogy ez 528 00:24:39,340 --> 00:24:40,390 ami 0-ra. 529 00:24:40,390 --> 00:24:43,660 >> Így a valós fizikai világban, ez hogyan jelenthet valamit 530 00:24:43,660 --> 00:24:45,670 bináris állapotot a 0 és a 1. 531 00:24:45,670 --> 00:24:46,720 Szóval ez az egész egy fájl. 532 00:24:46,720 --> 00:24:49,300 Van egy csomó mágneses részecskék, amelyek az így vagy 533 00:24:49,300 --> 00:24:51,920 Ily módon, ami minták A 0s és 1s. 534 00:24:51,920 --> 00:24:56,760 >> De kiderül, amikor elment egy fájlt, néhány információt tárolja külön. 535 00:24:56,760 --> 00:25:00,000 Tehát ez egy kis asztal, a könyvtár, hogy úgy mondjam. 536 00:25:00,000 --> 00:25:05,810 És én hívom az oszlop nevét, Hívom ezt az oszlopot helyre. 537 00:25:05,810 --> 00:25:08,850 >> És azt fogom mondani, feltételezni ez az én folytatódik. 538 00:25:08,850 --> 00:25:14,050 My resume.doc tárolja a helyre, mondjuk 123. 539 00:25:14,050 --> 00:25:15,390 Én mindig megy ez a szám. 540 00:25:15,390 --> 00:25:18,810 De elég annyit mondani, hogy csakúgy, mint a RAM-ban, akkor egy merevlemez 541 00:25:18,810 --> 00:25:22,350 ez egy gigabyte vagy 200 GB vagy egy terabájt, és akkor 542 00:25:22,350 --> 00:25:23,750 száma az összes bájt. 543 00:25:23,750 --> 00:25:26,480 Lehet szám Minden darabokat 8 bit. 544 00:25:26,480 --> 00:25:29,030 >> Ezért mondom, hogy ez a Van hely 123. 545 00:25:29,030 --> 00:25:32,070 Tehát ez a könyvtár belsejében az operációs rendszer megjegyzi, hogy a 546 00:25:32,070 --> 00:25:34,250 önéletrajz a következő helyen: 123.. 547 00:25:34,250 --> 00:25:36,850 De ez lesz érdekes, ha töröl egy fájlt. 548 00:25:36,850 --> 00:25:37,820 >> Így például - 549 00:25:37,820 --> 00:25:40,790 és szerencsére, a legtöbb a világ fogott erre -, hogy mi történik, ha 550 00:25:40,790 --> 00:25:45,040 húzza a fájlt a Mac OS Kuka , vagy a Windows Recycle Bin? 551 00:25:45,040 --> 00:25:48,290 552 00:25:48,290 --> 00:25:50,510 Mi a célja ennek, hogy? 553 00:25:50,510 --> 00:25:53,860 Ez nyilvánvalóan, hogy megszabaduljon a fájlt, de mit jelent a cselekmény fogd és 554 00:25:53,860 --> 00:25:57,550 csökken be a szemetet, vagy a Recycle Bin csinál a számítógépen? 555 00:25:57,550 --> 00:25:59,230 >> Abszolút semmi, tényleg. 556 00:25:59,230 --> 00:26:00,320 Olyan ez, mint egy mappát. 557 00:26:00,320 --> 00:26:01,800 Ez egy különleges mappa, az biztos. 558 00:26:01,800 --> 00:26:04,460 De vajon ez tényleg törli a fájlt? 559 00:26:04,460 --> 00:26:06,780 >> Nos, nem, mert néhányan talán volt, mint, ó fenébe, hogy nem 560 00:26:06,780 --> 00:26:07,420 azt jelenti, hogy ezt tegyük. 561 00:26:07,420 --> 00:26:09,130 Szóval kattintson duplán a Trash, vagy Lomtár. 562 00:26:09,130 --> 00:26:11,630 Már kidugta a környéken, és már vissza A fájl csak húzással 563 00:26:11,630 --> 00:26:12,110 onnan. 564 00:26:12,110 --> 00:26:14,420 Tehát egyértelműen, ez nem feltétlenül törli azt. 565 00:26:14,420 --> 00:26:15,990 >> OK, te okosabb. 566 00:26:15,990 --> 00:26:18,860 Tudod, hogy csak húzza be a Trash, vagy Lomtár nem jelenti azt, 567 00:26:18,860 --> 00:26:19,930 akkor ürítse ki a szemetet. 568 00:26:19,930 --> 00:26:24,110 Szóval menj fel a menüt, és azt mondod Empty Trash vagy Lomtár ürítése. 569 00:26:24,110 --> 00:26:25,360 Akkor mi lesz? 570 00:26:25,360 --> 00:26:29,070 571 00:26:29,070 --> 00:26:32,530 >> Igen, ezért törlésre inkább. 572 00:26:32,530 --> 00:26:37,660 De minden, ami történik ez. 573 00:26:37,660 --> 00:26:45,350 A számítógép elfelejti, hol resume.doc volt. 574 00:26:45,350 --> 00:26:47,400 >> De mi nem változott látszólag a képen? 575 00:26:47,400 --> 00:26:51,390 576 00:26:51,390 --> 00:26:55,570 A bitek a 0s és 1s, hogy állítják, A helyszínen néhány fizikai szempontból 577 00:26:55,570 --> 00:26:56,280 a hardver. 578 00:26:56,280 --> 00:26:57,110 Ők mindig ott vannak. 579 00:26:57,110 --> 00:26:58,930 Ez csak a számítógép elfelejtette, mik azok. 580 00:26:58,930 --> 00:27:03,160 >> Szóval ez lényegében felszabadította a fájl bit úgy, hogy újra fel lehet használni. 581 00:27:03,160 --> 00:27:06,940 De amíg még több kép, és fájlokat, és a több fájl lesz 582 00:27:06,940 --> 00:27:12,150 valószínűségi azok 0s és 1s, a mágneses részecskéket, kap újra, 583 00:27:12,150 --> 00:27:16,220 fejjel vagy jobb oldalon felfelé, a egyéb fájlokat, 0s és 1s. 584 00:27:16,220 --> 00:27:17,980 >> Szóval van ez az ablak az idő. 585 00:27:17,980 --> 00:27:19,860 És ez nem a kiszámítható hosszú, de tényleg. 586 00:27:19,860 --> 00:27:22,240 Ez attól függ, mekkora a merevlemez meghajtót, és hogy hány kép van, és 587 00:27:22,240 --> 00:27:23,490 milyen gyorsan újakat. 588 00:27:23,490 --> 00:27:27,050 De ez idő-ablak alatt amely a fájl még mindig tökéletesen 589 00:27:27,050 --> 00:27:27,770 hasznosítható. 590 00:27:27,770 --> 00:27:31,050 >> Tehát, ha valaha is használni programok, mint a McAfee vagy Norton hogy megpróbálja visszaállítani 591 00:27:31,050 --> 00:27:35,680 adatokat, az összes csinálnak próbál vissza az úgynevezett könyvtár 592 00:27:35,680 --> 00:27:37,340 kitalálni, ahol a fájl volt. 593 00:27:37,340 --> 00:27:40,605 És néha Norton és azt mondja, fájl 93%-ban újrahasznosítható. 594 00:27:40,605 --> 00:27:42,020 Nos, mit jelent ez? 595 00:27:42,020 --> 00:27:45,690 Ez csak azt jelenti, hogy az egyéb fájl véletlenül végül a, mondjuk, 596 00:27:45,690 --> 00:27:48,920 ezeket a biteket ki az eredeti fájl. 597 00:27:48,920 --> 00:27:51,950 >> Tehát mi tulajdonképpen szó visszaszerzés adat? 598 00:27:51,950 --> 00:27:55,720 Nos, ha nincs valami hasonló Norton előre telepítve a számítógépre, 599 00:27:55,720 --> 00:27:59,510 A legjobb, amit tehetünk, néha meg A teljes merevlemezt keresnek 600 00:27:59,510 --> 00:28:00,510 minták bit. 601 00:28:00,510 --> 00:28:05,350 És az egyik témája a probléma meg öt az, hogy megkeresi a 602 00:28:05,350 --> 00:28:09,570 felel meg a merevlemez, a törvényszéki kép egy compact flash kártya a 603 00:28:09,570 --> 00:28:13,660 digitális fényképezőgép, keresi a 0s 1s és jellemzően, mivel nagy 604 00:28:13,660 --> 00:28:16,720 valószínűség képviselik kezdete egy JPEG képet. 605 00:28:16,720 --> 00:28:21,120 >> És ti is vissza a képek feltételezve, ha látom, ezt a mintát a 606 00:28:21,120 --> 00:28:24,380 bit a törvényszéki képet, nagy a valószínűsége, hogy a védjegyek 607 00:28:24,380 --> 00:28:25,650 kezdetét a JPEG. 608 00:28:25,650 --> 00:28:29,520 És ha látom ugyanazt a mintát újra, hogy valószínűleg kezdetét a 609 00:28:29,520 --> 00:28:32,440 másik JPEG, és egy másik JPEG, JPEG és egy másik. 610 00:28:32,440 --> 00:28:34,970 És ez tipikusan milyen adat visszaszerzés fog működni. 611 00:28:34,970 --> 00:28:37,870 Mi a jó a JPEG még ha A fájlformátum is némileg 612 00:28:37,870 --> 00:28:44,400 komplex, az elején minden olyan fájl valójában meglehetősen azonosítható 613 00:28:44,400 --> 00:28:47,370 és egyszerű, mint látni fogjuk, ha már nem tette meg. 614 00:28:47,370 --> 00:28:50,270 >> Szóval vessünk egy közelebbi pillantást alatt a motorháztetőt, hogy pontosan mi volt 615 00:28:50,270 --> 00:28:53,360 folyik, és amit ezek a 0-ák és 1-esek van, hogy egy kicsit több a 616 00:28:53,360 --> 00:28:55,330 összefüggésben ez különösen nagy kihívást jelent. 617 00:28:55,330 --> 00:28:55,510 >> [VIDEÓ LEJÁTSZÁS] 618 00:28:55,510 --> 00:28:58,700 >> -Ahol a számítógép tárolja a legtöbb Az állandó adatokat. 619 00:28:58,700 --> 00:29:03,390 Ehhez az adatok utazik RAM valamint a szoftver, azt jelzi, hogy elmondja 620 00:29:03,390 --> 00:29:06,110 a merevlemez, hogyan kell tárolni az adatokat. 621 00:29:06,110 --> 00:29:09,410 A merevlemez áramkörök fordítás ezeket a jeleket a feszültség 622 00:29:09,410 --> 00:29:10,870 ingadozások. 623 00:29:10,870 --> 00:29:14,970 Ezek viszont ellenőrzik a merevlemez mozgó alkatrészek, néhány a néhány 624 00:29:14,970 --> 00:29:17,910 mozgó alkatrészek maradt a modern számítógép. 625 00:29:17,910 --> 00:29:22,130 >> Egyes jelek vezérlésére motor amely forog fémmel bevont tálak. 626 00:29:22,130 --> 00:29:25,470 Az adatok ténylegesen tárolt ezeken a tálak. 627 00:29:25,470 --> 00:29:28,610 Más jelek mozgassa az írási / olvasási fejek olvasni, vagy 628 00:29:28,610 --> 00:29:30,710 írni az adatokat a tálak. 629 00:29:30,710 --> 00:29:35,450 Ez a gép olyan pontosak, hogy az emberi haj nem is adja át az 630 00:29:35,450 --> 00:29:37,280 fej és forgó tálak. 631 00:29:37,280 --> 00:29:40,316 Mégis, minden működik félelmetes sebességgel. 632 00:29:40,316 --> 00:29:40,660 >> [END VIDEÓ LEJÁTSZÁS] 633 00:29:40,660 --> 00:29:42,190 >> DAVID MALAN: Nagyítás egy kicsit mélyebb most mi van 634 00:29:42,190 --> 00:29:44,360 valójában a tálak. 635 00:29:44,360 --> 00:29:44,720 >> [VIDEÓ LEJÁTSZÁS] 636 00:29:44,720 --> 00:29:47,660 >> -Nézzük meg, amit most látott lassított. 637 00:29:47,660 --> 00:29:51,710 Ha a rövid impulzus villamos küldött az író / olvasó fej, ha fejtetőre 638 00:29:51,710 --> 00:29:54,650 egy kis elektromágneses számára egy töredéke a második. 639 00:29:54,650 --> 00:29:58,970 A mágnes létrehoz egy mezőt, amely megváltoztatja a polaritását egy apró, pici 640 00:29:58,970 --> 00:30:02,850 részét a fém részecskék, amelyek kabát minden tál felület. 641 00:30:02,850 --> 00:30:05,940 >> A minta sorozat ezen apró, feltöltött területek a lemezen 642 00:30:05,940 --> 00:30:08,470 jelentése egy egyetlen bit adatokat a bináris szám 643 00:30:08,470 --> 00:30:10,530 rendszer által használt számítógépek. 644 00:30:10,530 --> 00:30:13,775 Most, ha a jelenlegi küldi egyik módja keresztül az író / olvasó fej, a terület 645 00:30:13,775 --> 00:30:15,970 polarizált az egyik irányba. 646 00:30:15,970 --> 00:30:17,950 Ha az aktuális kerül elküldésre ellenkező irányba, a 647 00:30:17,950 --> 00:30:19,930 polarizáció megfordul. 648 00:30:19,930 --> 00:30:22,370 >> Hogy kap az adatok le a merevlemezt? 649 00:30:22,370 --> 00:30:24,090 Csak visszafordítani a folyamatot. 650 00:30:24,090 --> 00:30:26,550 Így a részecskék a lemezen hogy mindig a legfrissebb, a 651 00:30:26,550 --> 00:30:27,960 író / olvasó fej mozog. 652 00:30:27,960 --> 00:30:30,700 Össze millió ilyen mágnesezett szegmensek és 653 00:30:30,700 --> 00:30:32,160 van egy fájl. 654 00:30:32,160 --> 00:30:36,060 >> Most, a darab egyetlen fájl szétszórva az egész egy meghajtó 655 00:30:36,060 --> 00:30:39,970 tálak, olyan, mint a rendetlenség A papírok az asztalon. 656 00:30:39,970 --> 00:30:43,500 Tehát egy speciális extra fájlt nyilvántartja Az hol van. 657 00:30:43,500 --> 00:30:45,985 Nem szeretném, ha volna valami ilyesmi? 658 00:30:45,985 --> 00:30:46,470 >> [END VIDEÓ LEJÁTSZÁS] 659 00:30:46,470 --> 00:30:47,820 >> DAVID MALAN: OK, talán nem. 660 00:30:47,820 --> 00:30:52,070 Szóval hány a srácok nőtt fel ezeket? 661 00:30:52,070 --> 00:30:53,970 OK, így egyre kevesebb kezet minden évben. 662 00:30:53,970 --> 00:30:56,550 De örülök, hogy te legalább ismerős velük, mert ez és a saját 663 00:30:56,550 --> 00:31:00,520 könyv demo sajnos halnak nagyon lassú halál itt közismertek. 664 00:31:00,520 --> 00:31:04,010 >> De ez az, amit én, legalábbis, vissza középiskolában, használt felhasználás mentést. 665 00:31:04,010 --> 00:31:08,110 És csodálatos volt, mert lehet tárolni 1.4 megabájt on 666 00:31:08,110 --> 00:31:08,930 az adott lemezt. 667 00:31:08,930 --> 00:31:12,260 És ez volt a nagy sűrűségű verzió, ahogy azt a HD, amely 668 00:31:12,260 --> 00:31:14,240 ami azt jelenti, mielőtt a mai HD videók. 669 00:31:14,240 --> 00:31:16,400 >> Szabványos sűrűség 800 kilobyte. 670 00:31:16,400 --> 00:31:18,640 És előtte voltak 400 kilobájtos lemezek. 671 00:31:18,640 --> 00:31:23,120 És előtte voltak 5 és 1/4 os lemezek, amelyek igazán floppy, 672 00:31:23,120 --> 00:31:25,680 és egy kicsit szélesebb és magasabb mint ezek a dolgok itt. 673 00:31:25,680 --> 00:31:29,150 De valóban látni az úgynevezett floppy szempontból ezeket a lemezeket. 674 00:31:29,150 --> 00:31:32,630 >> És funkcionálisan, ők valójában nagyon hasonló a merevlemezek az at 675 00:31:32,630 --> 00:31:33,570 legalábbis ez a fajta. 676 00:31:33,570 --> 00:31:37,270 Ismét SSD újabb számítógépek a munka egy kicsit másképp. 677 00:31:37,270 --> 00:31:41,530 De ha mozog a kis fém fület, akkor valóban látni egy kicsit süti, 678 00:31:41,530 --> 00:31:42,560 vagy tál. 679 00:31:42,560 --> 00:31:43,830 >> Nem fémből, mint ez. 680 00:31:43,830 --> 00:31:46,000 Ez valójában néhány olcsóbb műanyag. 681 00:31:46,000 --> 00:31:46,750 És akkor milyen kígyózik is. 682 00:31:46,750 --> 00:31:50,310 És te kurva, csak letörölni néhány bitek száma vagy mágneses részecskék 683 00:31:50,310 --> 00:31:51,220 az ezen a lemezen. 684 00:31:51,220 --> 00:31:52,710 >> Így szerencsére, nincs rajta semmi. 685 00:31:52,710 --> 00:31:55,790 Ha ez dolog az úton -, és fedjük a szemét, és azok a szomszéd - 686 00:31:55,790 --> 00:31:58,865 akkor csak ilyen húzni ezt az egész hüvely ki, mint ezt. 687 00:31:58,865 --> 00:32:01,900 De van egy kis tavaszi, ezért Tudatában a szemed. 688 00:32:01,900 --> 00:32:03,620 Tehát most már tényleg egy floppy lemezen. 689 00:32:03,620 --> 00:32:07,090 >> És mi figyelemre méltó ebben az, hogy, amennyire csak ez egy 690 00:32:07,090 --> 00:32:10,830 kis léptékű ábrázolása egy nagyobb merevlemez, ezek a dolgok szuper, 691 00:32:10,830 --> 00:32:11,590 szuper egyszerű. 692 00:32:11,590 --> 00:32:15,170 Ha csipetnyi alján, most, hogy az hogy a fém dolog nem stimmel, és húzza 693 00:32:15,170 --> 00:32:20,990 őket nyitva, ami van két darab nemez és az úgynevezett floppy disk 694 00:32:20,990 --> 00:32:22,930 egy darab fém a belseje. 695 00:32:22,930 --> 00:32:25,990 >> És ott megy a fele a lemez tartalmát. 696 00:32:25,990 --> 00:32:27,540 Ott megy egy másik fele. 697 00:32:27,540 --> 00:32:31,375 De ez minden, ami forgott benne a számítógép a múlt. 698 00:32:31,375 --> 00:32:35,220 699 00:32:35,220 --> 00:32:38,310 >> És ismét, hogy ezt a szempontból, mekkora a legtöbb 700 00:32:38,310 --> 00:32:39,560 merevlemezek manapság? 701 00:32:39,560 --> 00:32:41,960 702 00:32:41,960 --> 00:32:46,230 500 GB, a terabájt, talán egy asztali számítógép, 2 terabájt, 3 703 00:32:46,230 --> 00:32:47,630 terabájt, 4 terabájt, igaz? 704 00:32:47,630 --> 00:32:52,480 Ez egy megabájt, ide vagy oda, ami nem is illik a tipikus MP3 705 00:32:52,480 --> 00:32:55,310 már ezekben a napokban, vagy valamilyen hasonló zenei fájlt. 706 00:32:55,310 --> 00:32:59,500 >> Így egy kis emlék ma, és is, hogy segítsen kontextusba milyen 707 00:32:59,500 --> 00:33:03,570 fogunk vesz biztosra most probléma meg öt. 708 00:33:03,570 --> 00:33:04,820 Tehát azok a tiéd tartani. 709 00:33:04,820 --> 00:33:07,340 710 00:33:07,340 --> 00:33:13,370 Hadd átmenet, ahol lesz kiadások a következő Pset is. 711 00:33:13,370 --> 00:33:18,470 Tehát már most meg ezt az oldalt, - ó, pár bejelentések gyorsan. 712 00:33:18,470 --> 00:33:21,730 >> Ezen a pénteken, ha szeretne csatlakozni CS50 ebédre, megy a szokásos helyen, 713 00:33:21,730 --> 00:33:23,610 cs50.net/rsvp. 714 00:33:23,610 --> 00:33:25,100 És a projekt végső - 715 00:33:25,100 --> 00:33:28,520 így egy a tananyag, már írt a végleges projekt specifikáció már. 716 00:33:28,520 --> 00:33:31,410 Ismerd fel, hogy ez nem jelenti azt, ez miatt különösen hamarosan. 717 00:33:31,410 --> 00:33:33,990 Ez írt, tényleg, csak azért, hogy srácok rágondolok. 718 00:33:33,990 --> 00:33:37,620 És valóban, a szuper jelentős százalékos lesz leküzdése 719 00:33:37,620 --> 00:33:40,780 végső projektek anyagot, hogy nem is ütött, hogy az osztályban, 720 00:33:40,780 --> 00:33:42,730 de már a jövő héten. 721 00:33:42,730 --> 00:33:45,530 >> Közlemény azonban, hogy a spec kéri néhány különböző összetevői 722 00:33:45,530 --> 00:33:46,190 végleges projekt. 723 00:33:46,190 --> 00:33:49,590 Az első néhány hét, egy pre-javaslat egy szép alkalmi e-mail 724 00:33:49,590 --> 00:33:52,760 A TF elmondani neki, vagy mi te gondolkodtam a projekt, és 725 00:33:52,760 --> 00:33:53,650 Nem elkötelezettség. 726 00:33:53,650 --> 00:33:56,710 Javaslat lesz az adott elkötelezettség, mondván, itt, ez az, amit 727 00:33:56,710 --> 00:33:57,770 Szeretnék csinálni a projektet. 728 00:33:57,770 --> 00:33:58,250 Mit gondolsz? 729 00:33:58,250 --> 00:33:58,650 Túl nagy? 730 00:33:58,650 --> 00:33:59,145 Túl kicsi? 731 00:33:59,145 --> 00:34:00,330 Ez kezelhető? 732 00:34:00,330 --> 00:34:02,230 És látod a spec a részletekért. 733 00:34:02,230 --> 00:34:05,060 >> Pár héttel azután, hogy az az állapot, jelentést, amely egy hasonlóan 734 00:34:05,060 --> 00:34:08,260 alkalmi e-mail a TF mondani, hogy milyen messze van a végső 735 00:34:08,260 --> 00:34:12,360 projekt megvalósítása, majd a A CS50 Hackathon melyet mindenki 736 00:34:12,360 --> 00:34:17,520 felkérést kap, ami lehet egy esemény 20:00 egy este 07:00-ig 737 00:34:17,520 --> 00:34:19,150 AM másnap reggel. 738 00:34:19,150 --> 00:34:22,560 Pizza, ahogy én is említettem a héten nulla, wil szolgálnak fel 09:00, 739 00:34:22,560 --> 00:34:24,120 Kínai étel 01:00. 740 00:34:24,120 --> 00:34:27,929 És ha még mindig ébren 5:00, akkor elviszi IHOP reggelire. 741 00:34:27,929 --> 00:34:31,310 >> Tehát az egyik Hackathon annál élmények az osztályban. 742 00:34:31,310 --> 00:34:35,290 Akkor a végrehajtás miatt, és akkor az éghajlati CS50 Vásár. 743 00:34:35,290 --> 00:34:38,070 További részletek az összes ilyen az elkövetkező hetekben. 744 00:34:38,070 --> 00:34:40,739 >> De térjünk vissza valamit old school - 745 00:34:40,739 --> 00:34:41,920 ismét egy tömb. 746 00:34:41,920 --> 00:34:45,040 Így egy sor jó volt, mert megoldja probléma, mint láttuk, csak egy 747 00:34:45,040 --> 00:34:49,290 pillanattal ezelőtt a diákok struktúrák Kicsit ki a kezéből, ha 748 00:34:49,290 --> 00:34:52,405 szeretné, hogy a hallgató egy, két diák, diák három diák dot dot dot, 749 00:34:52,405 --> 00:34:54,400 néhány tetszőleges számú diák. 750 00:34:54,400 --> 00:34:58,850 >> Tehát tömbök, néhány héttel ezelőtt, lecsapott a és megoldani minden problémánk, hogy nem 751 00:34:58,850 --> 00:35:03,340 tudván előre, hogy sok mindent bizonyos típusú is érdemes. 752 00:35:03,340 --> 00:35:07,390 És láttam, hogy a struktúrákat segíthet tovább szervezzük kódot, és folyamatosan 753 00:35:07,390 --> 00:35:11,660 fogalmilag hasonló tulajdonságokkal, mint például a nevét és a ház, valamint, hogy mi 754 00:35:11,660 --> 00:35:15,570 kezelni őket, mint egy szervezet, belső amelynek vannak kisebb darabokra. 755 00:35:15,570 --> 00:35:17,810 >> De tömbök van néhány hátránya. 756 00:35:17,810 --> 00:35:19,780 Melyek azok a hátrányok már találkozott 757 00:35:19,780 --> 00:35:22,320 A tömbök eddig? 758 00:35:22,320 --> 00:35:23,450 Mi ez? 759 00:35:23,450 --> 00:35:28,130 Rögzített méret - így annak ellenére, hogy lehet, hogy képes a memóriát egy 760 00:35:28,130 --> 00:35:32,310 tömb, ha tudja, hogy hány diák van, hogy hány karakter van 761 00:35:32,310 --> 00:35:35,460 a felhasználó, ha egyszer már kiutalt a tömb, amit a fajta festett 762 00:35:35,460 --> 00:35:36,740 magát egy sarokban. 763 00:35:36,740 --> 00:35:40,600 >> Mert nem lehet be új elemeket a közepén egy tömb. 764 00:35:40,600 --> 00:35:43,660 Nem lehet beszúrni több elemet végén egy tömb. 765 00:35:43,660 --> 00:35:47,750 Tényleg, kénytelenek létrehozása teljesen új tömb, ahogy már említettük, 766 00:35:47,750 --> 00:35:49,320 másolás a régi az új. 767 00:35:49,320 --> 00:35:52,610 És ismét, ez a fejfájás, GetString foglalkozik az Ön számára. 768 00:35:52,610 --> 00:35:56,170 >> De ismétlem, ha nem is be valamit a közepén a tömb 769 00:35:56,170 --> 00:35:58,200 ha az arány nem teljesen töltve. 770 00:35:58,200 --> 00:36:03,010 Például, ha ez a tömb mérete itt hat csak öt dolog benne, 771 00:36:03,010 --> 00:36:06,080 Nos, akkor most tack valamit rá a végén. 772 00:36:06,080 --> 00:36:08,200 De mi van, ha szeretnénk beszúrni valamit a közepén a 773 00:36:08,200 --> 00:36:11,280 tömb, bár lehet, hogy öt a hatból, ami benne van? 774 00:36:11,280 --> 00:36:14,250 >> Nos, mit teszünk, ha már az összes Az emberi önkéntesek színpadon 775 00:36:14,250 --> 00:36:15,110 hét múlt? 776 00:36:15,110 --> 00:36:18,710 Ha akartuk, hogy itt valaki, vagy ezek az emberek, hogyan kell mozogni a 777 00:36:18,710 --> 00:36:22,540 módon, vagy ezek az emberek, hogyan kell mozogni a megtervezésében, és vált drága. 778 00:36:22,540 --> 00:36:26,950 A változó az emberek belsejében egy array végül összeadjuk és költségszámítás 779 00:36:26,950 --> 00:36:31,240 nekünk időt, ezért sok a mi n négyzetes futó időkben behelyezés sort, a 780 00:36:31,240 --> 00:36:32,550 Például, a legrosszabb esetben. 781 00:36:32,550 --> 00:36:36,520 Tehát tömbök nagy, de van, hogy előre tudni, hogy milyen nagy szeretné őket. 782 00:36:36,520 --> 00:36:38,030 >> Tehát OK, itt a megoldás. 783 00:36:38,030 --> 00:36:43,860 Ha nem tudja előre, hogy hány diákok Talán van, és tudom, hogy egyszer 784 00:36:43,860 --> 00:36:47,870 Döntök, bár én megragadt, hogy az sok diák, miért nem én csak mindig 785 00:36:47,870 --> 00:36:51,740 osztják kétszer annyi helyet mint én is hiszem, szükségem van? 786 00:36:51,740 --> 00:36:54,450 Ez nem a megfelelő megoldás? 787 00:36:54,450 --> 00:36:58,240 >> Reálisan, nem hiszem, hogy mi vagyunk lesz szükség több mint 50 hely 788 00:36:58,240 --> 00:37:02,190 A tömb egy közepes méretű osztály, úgyhogy csak felhajt. 789 00:37:02,190 --> 00:37:07,040 Csinálok 100 nyílások a tömbben, csak azért, hogy nem feltétlenül kap a 790 00:37:07,040 --> 00:37:10,330 hallgatók száma elvárom, hogy hogy néhány közepes méretű osztályban. 791 00:37:10,330 --> 00:37:14,320 Akkor miért nem csak a kerek, és osztja több memória, jellemzően egy tömb 792 00:37:14,320 --> 00:37:16,290 mint azt gondolja, talán még szükség? 793 00:37:16,290 --> 00:37:20,190 Mi ez az egyszerű pushback hogy ezt az ötletet? 794 00:37:20,190 --> 00:37:21,440 >> Te csak pazarlás memória. 795 00:37:21,440 --> 00:37:25,350 Szó szerint minden programot írsz, akkor A talán a kétszer annyi memóriát 796 00:37:25,350 --> 00:37:26,680 valóban szükség van. 797 00:37:26,680 --> 00:37:28,990 És ez csak nem úgy, mint egy különösen elegáns megoldás. 798 00:37:28,990 --> 00:37:31,990 Sőt, ez csak csökkenti a valószínűsége, hogy a probléma. 799 00:37:31,990 --> 00:37:35,300 Ha véletlenül van egy népszerű kurzus egy szemeszter, és van 101 800 00:37:35,300 --> 00:37:39,610 diákok, a program továbbra is alapvetően szembe ugyanezzel a kérdéssel. 801 00:37:39,610 --> 00:37:44,280 >> Így szerencsére, van egy megoldás, hogy ez ad minden problémát formában 802 00:37:44,280 --> 00:37:46,790 adatstruktúrák, amelyek bonyolultabb, mint azok, 803 00:37:46,790 --> 00:37:47,970 láttunk eddig. 804 00:37:47,970 --> 00:37:50,530 Ez, azt állítják, a láncolt lista. 805 00:37:50,530 --> 00:37:51,920 Ez a lista a szám - 806 00:37:51,920 --> 00:37:54,970 9., 17., 22., 26., és 34. - 807 00:37:54,970 --> 00:38:00,120 , amelyek kapcsolódnak egymáshoz útján Az, amit én készült a nyíl. 808 00:38:00,120 --> 00:38:03,580 >> Más szóval, ha azt akartam, hogy képviselje egy sor, nem tudtam csinálni 809 00:38:03,580 --> 00:38:04,910 valami ilyesmi. 810 00:38:04,910 --> 00:38:07,310 És teszem ezt a felső csak egy pillanat. 811 00:38:07,310 --> 00:38:09,970 Tudtam csinálni - 812 00:38:09,970 --> 00:38:12,520 hello, rendben. 813 00:38:12,520 --> 00:38:14,470 Készenlét. 814 00:38:14,470 --> 00:38:17,360 Új számítógép itt, tiszta - 815 00:38:17,360 --> 00:38:18,090 Rendben van. 816 00:38:18,090 --> 00:38:21,730 >> Tehát, ha már ezek a számok tömb - 817 00:38:21,730 --> 00:38:28,880 9., 17., 22., 26., 24 - 818 00:38:28,880 --> 00:38:30,530 nem feltétlenül arányos. 819 00:38:30,530 --> 00:38:33,730 Rendben, itt van a sor - 820 00:38:33,730 --> 00:38:34,980 oh my god. 821 00:38:34,980 --> 00:38:38,700 822 00:38:38,700 --> 00:38:40,395 Rendben, itt van a tömb. 823 00:38:40,395 --> 00:38:44,110 824 00:38:44,110 --> 00:38:45,050 Ó, Istenem. 825 00:38:45,050 --> 00:38:48,820 >> [Nevetés] 826 00:38:48,820 --> 00:38:49,440 >> DAVID MALAN: mintha. 827 00:38:49,440 --> 00:38:52,330 Ez túl sok erőfeszítést, hogy menjen vissza és rögzíteni, hogy, így - 828 00:38:52,330 --> 00:38:54,290 26.. 829 00:38:54,290 --> 00:38:57,650 Tehát itt van ez a sor 9., 17., 22., 26., és 34.. 830 00:38:57,650 --> 00:39:00,260 Azoknak, láthatjuk a kínos hiba, amit most tett, 831 00:39:00,260 --> 00:39:00,830 ott van. 832 00:39:00,830 --> 00:39:04,490 >> Szóval azt állítják, hogy ez a nagyon hatékony megoldás. 833 00:39:04,490 --> 00:39:07,310 Már kiosztott annyi ints mint Szükségem van - egy, kettő, három, 834 00:39:07,310 --> 00:39:09,100 négy, öt, vagy hat - 835 00:39:09,100 --> 00:39:11,660 és én majd tárolja a számokat belül a tömb. 836 00:39:11,660 --> 00:39:15,220 De tegyük fel, akkor azt a beszúrni kívánt érték, mint a 8-as szám? 837 00:39:15,220 --> 00:39:16,100 Nos, hova megy? 838 00:39:16,100 --> 00:39:18,530 Tegyük fel, hogy szeretné szúrni több, mint 20. 839 00:39:18,530 --> 00:39:19,790 Nos, hova megy? 840 00:39:19,790 --> 00:39:23,160 Valahol a közepén, vagy a szám 35 mennie kell 841 00:39:23,160 --> 00:39:24,010 valahol a végén. 842 00:39:24,010 --> 00:39:25,320 De én vagyok a hely. 843 00:39:25,320 --> 00:39:29,120 >> És így ez egy alapvető kihívás A tömbök ez a megoldás. 844 00:39:29,120 --> 00:39:32,280 Azt állította, egy perce, getString megoldja ezt a problémát. 845 00:39:32,280 --> 00:39:37,380 Ha szeretné szúrni a hatodik számot ebbe a tömb, ami legalább egy 846 00:39:37,380 --> 00:39:40,090 megoldás is esik vissza, az biztos, , mint mi a getString? 847 00:39:40,090 --> 00:39:44,340 848 00:39:44,340 --> 00:39:46,030 Mi ez? 849 00:39:46,030 --> 00:39:48,190 >> Nos, hogy a nagyobb, könnyebb mondani, mint megtenni. 850 00:39:48,190 --> 00:39:52,810 Nem feltétlenül, hogy a tömb nagyobb, de mit tehetünk? 851 00:39:52,810 --> 00:39:56,570 Készíts egy új tömböt, ami nagyobb, mérete 6, esetleg 10-es méret, ha akarjuk 852 00:39:56,570 --> 00:40:00,490 hogy előre a dolgok, majd másolja A régi az új tömb, majd 853 00:40:00,490 --> 00:40:01,680 szabad a régi tömb. 854 00:40:01,680 --> 00:40:05,770 >> De mi a működési idő Most, hogy a folyamat? 855 00:40:05,770 --> 00:40:09,870 Ez elég nagy O n, mivel a másolás fog kerülni néhány egység 856 00:40:09,870 --> 00:40:13,480 idő, így nem annyira ideális, ha kell hozzárendel egy új tömböt, ami megy 857 00:40:13,480 --> 00:40:15,610 fogyasztani kétszer annyi memória átmenetileg. 858 00:40:15,610 --> 00:40:16,660 Másolás régi új - 859 00:40:16,660 --> 00:40:18,800 Úgy értem, ez csak egy fejfájás, amely az, hogy ismét, hogy miért írtam 860 00:40:18,800 --> 00:40:19,920 GetString az Ön számára. 861 00:40:19,920 --> 00:40:21,380 >> Szóval mit is csinálunk helyette? 862 00:40:21,380 --> 00:40:25,000 Nos, mi van, ha az adatstruktúra valójában hiányosságok benne? 863 00:40:25,000 --> 00:40:30,790 Tegyük fel, hogy én pihenni a cél, amelyek összefüggő darabokban a memóriát, ahol a 9 864 00:40:30,790 --> 00:40:34,500 közvetlen közelében 17, ami közvetlenül a 22, és így tovább. 865 00:40:34,500 --> 00:40:39,570 >> És tegyük fel, hogy lehet több mint 9 itt RAM, és 17 is itt a RAM, 866 00:40:39,570 --> 00:40:40,990 és 22 is itt a RAM-ban. 867 00:40:40,990 --> 00:40:43,610 Más szóval, nem kell őket még vissza vissza többé. 868 00:40:43,610 --> 00:40:47,850 Csak meg kell valahogy menet a tűt egyes rendszereken keresztül ezeket a számokat, vagy az egyes 869 00:40:47,850 --> 00:40:51,010 Ezen csomópontok, hívjuk a téglalapok ahogy már készült őket, hogy 870 00:40:51,010 --> 00:40:55,670 emlékszem, hogyan lehet eljutni az utolsó az ilyen csomópont az első. 871 00:40:55,670 --> 00:40:59,940 >> Tehát mi a programozási konstrukció láttuk egészen a közelmúltban, amit 872 00:40:59,940 --> 00:41:03,030 végre, hogy a menet, vagy húzott itt, amit lehet 873 00:41:03,030 --> 00:41:05,430 végre a nyilak? 874 00:41:05,430 --> 00:41:06,500 Tehát mutatók, igaz? 875 00:41:06,500 --> 00:41:09,560 Ha osztja nem csak egy int, de a csomópont - és 876 00:41:09,560 --> 00:41:10,810 node, most értem tartályba. 877 00:41:10,810 --> 00:41:12,900 És vizuálisan, úgy értem egy téglalapot. 878 00:41:12,900 --> 00:41:16,420 Tehát egy csomópont nyilvánvalóan szüksége van tartalmaz két érték - 879 00:41:16,420 --> 00:41:21,490 Az int is, és aztán, jelentette az alsó felét a téglalap, 880 00:41:21,490 --> 00:41:23,010 elegendő hely egy int. 881 00:41:23,010 --> 00:41:26,130 >> Tehát csak előre gondolkodás itt, milyen nagy ez a csomópont, a 882 00:41:26,130 --> 00:41:27,170 konténer-e? 883 00:41:27,170 --> 00:41:29,250 Hány byte az int? 884 00:41:29,250 --> 00:41:31,310 Feltehetően 4, ha ez ugyanaz, mint a szokásos. 885 00:41:31,310 --> 00:41:33,270 És akkor, hogy hány bájt a mutató? 886 00:41:33,270 --> 00:41:33,650 4.. 887 00:41:33,650 --> 00:41:37,940 Szóval ez a tartály, vagy a csomópont, az lesz egy 8 bájtos struktúra. 888 00:41:37,940 --> 00:41:41,760 Ja, és ez egy szerencsés egybeesés, hogy Mi csak be ezt a fogalmat a 889 00:41:41,760 --> 00:41:44,400 egy struct vagy C struktúrát. 890 00:41:44,400 --> 00:41:48,890 >> Tehát azt állítom, hogy szeretnék, hogy egy lépést felé a kifinomultabb 891 00:41:48,890 --> 00:41:52,560 végrehajtása számok listája, a láncolt lista a számok, azt kell tennie, 892 00:41:52,560 --> 00:41:56,920 kicsit több gondolkodás elöl és Kijelentem, nem csak egy int, de a struktúra 893 00:41:56,920 --> 00:41:58,620 hogy fogom hívni, hagyományosan Itt, csomópont. 894 00:41:58,620 --> 00:42:01,630 Nevezhetnénk, amit csak akarunk, de csomópont lesz a sok tematikus 895 00:42:01,630 --> 00:42:03,560 A dolog, amit kezdeni most. 896 00:42:03,560 --> 00:42:06,480 >> Belül, hogy a csomópont egy int n. 897 00:42:06,480 --> 00:42:09,350 És akkor ez a szintaxis, egy kicsit furcsa első ránézésre - 898 00:42:09,350 --> 00:42:12,960 struct node * mellett. 899 00:42:12,960 --> 00:42:16,900 Nos képszerűen, mi ez? 900 00:42:16,900 --> 00:42:21,000 Ez az alsó fele A téglalap láttunk 901 00:42:21,000 --> 00:42:22,730 csak egy perce. 902 00:42:22,730 --> 00:42:27,600 >> De miért is mondok struct node * szemben a csak node *? 903 00:42:27,600 --> 00:42:31,370 Mert ha ez mutató mutat egy másik node, ez csak a 904 00:42:31,370 --> 00:42:32,760 Egy csomópont címét. 905 00:42:32,760 --> 00:42:35,630 Ez egyezik azzal, amit tárgyalt a mutatók eddig. 906 00:42:35,630 --> 00:42:39,690 De miért, ha azt állítom, ez a struktúra néven csomópont, akkor azt kell mondanom, struktúra 907 00:42:39,690 --> 00:42:42,660 node idebent? 908 00:42:42,660 --> 00:42:43,190 >> Pontosan. 909 00:42:43,190 --> 00:42:46,490 Ez egyfajta ostoba valóság a C. A typedef, hogy úgy mondjam, még nem 910 00:42:46,490 --> 00:42:47,220 történt meg. 911 00:42:47,220 --> 00:42:48,510 C szuper szó. 912 00:42:48,510 --> 00:42:51,050 Így hangzik a kódot felső lefelé, balról jobbra. 913 00:42:51,050 --> 00:42:54,930 És addig, amíg eléri, hogy a pontosvessző lényeg, tudod mit nem 914 00:42:54,930 --> 00:42:57,590 léteznek adattípus? 915 00:42:57,590 --> 00:42:59,060 Node, idézet idézet vége csomópont. 916 00:42:59,060 --> 00:43:03,050 >> Hanem azért, mert a nagyobb bőbeszédű nyilatkozat Én az első sorban - 917 00:43:03,050 --> 00:43:05,340 typedef struct csomópont - 918 00:43:05,340 --> 00:43:08,790 mert ez volt előbb, mielőtt a zárójelek, ez a fajta, mint 919 00:43:08,790 --> 00:43:11,800 pre-nevelése csenget, te Tudod mit, adj egy struct 920 00:43:11,800 --> 00:43:13,570 nevű struct csomópont. 921 00:43:13,570 --> 00:43:16,270 Őszintén szólva, én nem szeretem a dolgokat hív struct csomópont, csomópont struktúra minden 922 00:43:16,270 --> 00:43:17,090 az egész az én kódot. 923 00:43:17,090 --> 00:43:20,660 De én csak akkor használja, egyszer csak belül, így tudok hatékonyan 924 00:43:20,660 --> 00:43:25,010 létrehoz egyfajta körkörös hivatkozást, nem a mutató magamnak önmagában, hanem a 925 00:43:25,010 --> 00:43:29,400 mutató másik azonos típusú. 926 00:43:29,400 --> 00:43:32,330 >> Így kiderül, hogy egy adatstruktúra mint ez, van egy pár 927 00:43:32,330 --> 00:43:34,470 műveleteket lehet érdekes számunkra. 928 00:43:34,470 --> 00:43:37,460 Talán szeretné szúrni egy lista, mint ez. 929 00:43:37,460 --> 00:43:39,850 Azt érdemes törölni Egy ilyen lista. 930 00:43:39,850 --> 00:43:43,490 Azt érdemes keresni a listát a érték, vagy általánosabban, áthalad. 931 00:43:43,490 --> 00:43:46,410 És áthalad csak egy divatos módon mondván, kezdődik a bal és helyezze át az összes 932 00:43:46,410 --> 00:43:47,650 az utat a jobb. 933 00:43:47,650 --> 00:43:52,640 >> És vegyük észre, még ezzel a valamivel több kifinomult adatstruktúra, legyen 934 00:43:52,640 --> 00:43:56,510 én javaslom, hogy lehet kölcsönözni néhány az ötleteket az elmúlt két hétben, és 935 00:43:56,510 --> 00:43:58,410 végre egy funkciót nevű keresés, mint ez. 936 00:43:58,410 --> 00:44:01,360 Ez lesz igaz értéket ad vissza, vagy hamis, jelezve, igen vagy 937 00:44:01,360 --> 00:44:03,390 nem, n értéke a listában. 938 00:44:03,390 --> 00:44:05,960 A második érv a mutató hogy maga a lista, így egy 939 00:44:05,960 --> 00:44:07,920 mutató egy csomópont. 940 00:44:07,920 --> 00:44:10,350 >> Minden fogom majd tennie, hogy kijelentik, átmeneti változót. 941 00:44:10,350 --> 00:44:12,730 Hívjuk meg PTR megállapodás szerint, a mutató. 942 00:44:12,730 --> 00:44:15,220 És rendelje megegyezik a a lista elején. 943 00:44:15,220 --> 00:44:16,680 >> És most észre a while ciklus. 944 00:44:16,680 --> 00:44:20,640 Mindaddig, amíg a mutató nem azonos null, megyek, hogy ellenőrizze. 945 00:44:20,640 --> 00:44:24,520 Az egérmutató n egyenlő n, amit elfogadott? 946 00:44:24,520 --> 00:44:26,410 És egy pillanat - új darab szintaxis. 947 00:44:26,410 --> 00:44:29,324 Mi nyíl hirtelen? 948 00:44:29,324 --> 00:44:30,574 Igen? 949 00:44:30,574 --> 00:44:34,200 950 00:44:34,200 --> 00:44:34,810 >> Pontosan. 951 00:44:34,810 --> 00:44:38,860 Tehát mivel a néhány perccel ezelőtt használt a pont jelölés eléréséhez valamit 952 00:44:38,860 --> 00:44:43,080 belsejében egy a struct, ha a változó még nem a struktúra 953 00:44:43,080 --> 00:44:47,420 , hanem egy mutató a struct, Szerencsére egy darab szintaxist 954 00:44:47,420 --> 00:44:48,620 végül teszi logikus. 955 00:44:48,620 --> 00:44:52,360 A nyíl azt jelenti, hogy kövesse a mutatót, mint a mi nyilak általában azt jelenti, 956 00:44:52,360 --> 00:44:56,570 képszerűen, és menj a adatmező belül. 957 00:44:56,570 --> 00:44:59,700 Tehát nyíl ugyanaz, mint a dot, de akkor használja, ha van egy mutató. 958 00:44:59,700 --> 00:45:05,270 >> Tehát csak bedugni, majd ha az n terület belül a struct nevű mutató 959 00:45:05,270 --> 00:45:07,760 egyenlő értéke n, vissza igaz. 960 00:45:07,760 --> 00:45:11,970 Ellenkező esetben ez a sor itt - mutató egyenlő mutató a következő. 961 00:45:11,970 --> 00:45:17,540 Szóval mi ez csinál, értesítés, ha én vagyok jelenleg mutatott a struct 962 00:45:17,540 --> 00:45:21,430 tartalmazó 9 és 9 nem a számot Keresem - hiszem, keresek 963 00:45:21,430 --> 00:45:22,830 n értéke 50 - 964 00:45:22,830 --> 00:45:25,930 Fogom frissíteni a mutató átmeneti hogy nem pont ebben a csomópont 965 00:45:25,930 --> 00:45:31,190 már, de a mutató nyílra, amely megy, hogy nekem itt. 966 00:45:31,190 --> 00:45:34,270 >> Nos, rájöttem, egy forgószél bevezetés. 967 00:45:34,270 --> 00:45:37,380 Szerdán, akkor ténylegesen ezt néhány ember és néhány további 968 00:45:37,380 --> 00:45:38,900 kód lassabb ütemben. 969 00:45:38,900 --> 00:45:42,990 De észre, mi ma már az adatok bonyolultabb struktúrákat, hogy a mi 970 00:45:42,990 --> 00:45:45,780 algoritmusok kap a hatékonyabb, amely lesz szükséges a 971 00:45:45,780 --> 00:45:50,500 Pset hat, amikor betölteni, ismét az 150000 szavak, de szükség van erre 972 00:45:50,500 --> 00:45:55,650 hatékonyan, és ideális esetben, hozzon létre egy program fut, a felhasználók nem 973 00:45:55,650 --> 00:46:00,460 lineáris, négyzetes n nem, de állandó idő, az ideális. 974 00:46:00,460 --> 00:46:02,300 >> Találkozunk szerdán. 975 00:46:02,300 --> 00:46:07,240 >> SPEAKER: A következő CS50, David elfelejti alapeset. 976 00:46:07,240 --> 00:46:12,770 >> DAVID MALAN: És ez hogyan küld szöveges üzenetek C. Mi a - 977 00:46:12,770 --> 00:46:14,020 >> [KÜLÖNBÖZŐ szöveges üzenet Értesítési hangok] 978 00:46:14,020 --> 00:46:19,734