1 00:00:00,000 --> 00:00:02,310 [Powered by Google Translate] [4. hét, folytatás] 2 00:00:02,310 --> 00:00:04,240 [David J. Malan - Harvard University] 3 00:00:04,240 --> 00:00:07,290 [Ez CS50. - CS50.TV] 4 00:00:07,290 --> 00:00:11,290 >> Ez CS50, és ez a vége a 4 hét. 5 00:00:11,290 --> 00:00:14,030 Szóval néhány jó hír és rossz hír. 6 00:00:14,030 --> 00:00:26,240 Nincs előadás hétfőn, nem probléma állítsa a jövő héten. [Diákok éljenzés] 7 00:00:26,240 --> 00:00:28,680 Ugye nem fog tetszeni, ha ez megy. 8 00:00:28,680 --> 00:00:31,590 De van helyette jövő szerdán, 9 00:00:31,590 --> 00:00:37,740 és van még egy a tananyag 1 Friday előadás jövő pénteken, hogy mi is marad a pályán. 10 00:00:37,740 --> 00:00:40,580 De minden kerül filmre, mint rendesen, úgyhogy ne aggódj. 11 00:00:40,580 --> 00:00:44,100 >> És tekintettel a kvíz 0 mit fogunk csinálni felé hét végére 12 00:00:44,100 --> 00:00:47,140 A elhelyezhet a pályán honlapján cs50.net magyarázatot 13 00:00:47,140 --> 00:00:50,160 Az milyen elvárásokat akkor kell, amikor az első teszt. 14 00:00:50,160 --> 00:00:55,100 Általánosságban elmondható, hogy lesz feleletválasztós, igaz-hamis, a rövid válasz, rövid kódolási problémák. 15 00:00:55,100 --> 00:00:57,360 Nem fogod várható végrehajtására egyenértékű 16 00:00:57,360 --> 00:01:00,030 Az a probléma, hogy ha látná a Pset, amelynek van egy számítógép 17 00:01:00,030 --> 00:01:03,240 és egy hibakereső és a hasonló, de nem lesz kicsi kódoló problémák. 18 00:01:03,240 --> 00:01:06,900 >> És valóban, a legjobb útmutató, hogy egyfajta milyen CS50 kvízek olyanok, mint a 19 00:01:06,900 --> 00:01:09,180 A megy cs50.net, menj a Feladványok linkre, 20 00:01:09,180 --> 00:01:11,920 és láthatjuk az elmúlt néhány évnyi vetélkedők. 21 00:01:11,920 --> 00:01:16,600 Csak észre, hogy a tananyag nem volt mindig ugyanaz az évek során. 22 00:01:16,600 --> 00:01:18,510 Néha ehhez hozzátesszük, néha kivonni, 23 00:01:18,510 --> 00:01:20,670 így ha látni néhány téma egyike a régi kvízek 24 00:01:20,670 --> 00:01:25,380 , hogy fogalmad sincs, mit beszél, akkor sem, hogy mi volt ellepje 25 00:01:25,380 --> 00:01:27,210 vagy az, hogy nem terjed ki rá. 26 00:01:27,210 --> 00:01:31,110 De formájában áttekintésre, vasárnap, hétfő, kedd és 27 00:01:31,110 --> 00:01:34,770 valamint a tanfolyam szintű értékelést ülésén vasárnap este - 28 00:01:34,770 --> 00:01:37,500 időben és helyen, hogy bejelentette a kurzus honlapján - 29 00:01:37,500 --> 00:01:40,120 mindenkinek lehetősége van arra, hogy felülvizsgálja a kurzus tanítási fickók 30 00:01:40,120 --> 00:01:44,830 Az anyag ebben az évben, mind a részt, és egy teljes osztály, 31 00:01:44,830 --> 00:01:48,400 és ezek fogják filmeztek a szokásos módon is. 32 00:01:48,400 --> 00:01:53,380 >> Rendben van. Tehát minden további nélkül, egy megjegyzést / nem felelt meg és add / drop. 33 00:01:53,380 --> 00:01:57,980 Lehet, hogy látta a jegyzeteimet tegnap este, és ez tényleg csak néhány további biztosítékot 34 00:01:57,980 --> 00:02:01,250 hogy ha azok közé tartozunk, különösen a kevésbé kényelmes, vagy valahol a kettő között 35 00:02:01,250 --> 00:02:04,870 és érzed, csak egy kicsit a fejed felett, 36 00:02:04,870 --> 00:02:08,430 rájönnek, hogy valóban teljesen normális, és van egy bőséges támogatási rendszer a helyén, 37 00:02:08,430 --> 00:02:13,530 amelyek közül az egyik munkaidőn volt szándéka javítani annál egy e-mail címemet tegnap este, 38 00:02:13,530 --> 00:02:16,520 és észre azt is, hogy egy opció, mint a / nem felelt meg egy osztály, mint ez 39 00:02:16,520 --> 00:02:21,540 valóban azt jelentette, mint egy olyan mechanizmus, hogy a szélén le egy tanfolyam, mint ez, 40 00:02:21,540 --> 00:02:24,200 annak érdekében, hogy újra, ha töltesz e 10, 15, 20 óra 41 00:02:24,200 --> 00:02:28,160 Csak próbálok valami Pset dolgozni, és tudod, hogy 90-95%-át az utat oda 42 00:02:28,160 --> 00:02:32,100 de nem talál valami rohadt bug, egy megfelelt / nem felelt modell, amely a fajta rendben. 43 00:02:32,100 --> 00:02:36,230 >> Az ötlet az, hogy ez a mechanizmus ezután tovább összpontosítani a többi psets 44 00:02:36,230 --> 00:02:39,530 vagy aludni, vagy bármi legyen is az, amit szeretne összpontosítani. 45 00:02:39,530 --> 00:02:43,390 Szóval észre, hogy van, amíg a jövő kedd - technikailag az 5., hétfő 46 00:02:43,390 --> 00:02:50,840 de ez egy ünnep, így ez a jövő kedd - váltani megfelelt / nem osztályozott, vagy fordítva. 47 00:02:50,840 --> 00:02:54,450 És ha tényleg a szakadék, és gondolkodás csepegtető teljesen, 48 00:02:54,450 --> 00:02:56,440 kérem elkapni után Előadás vagy dobj egy üzenetet. 49 00:02:56,440 --> 00:02:59,990 Szeretnénk legalább a csevegés, mielőtt ajánlatot búcsút. 50 00:02:59,990 --> 00:03:03,470 Rendben van. Szóval elkezdtem szedni a képzési kerekekkel utoljára. 51 00:03:03,470 --> 00:03:06,030 Különösen azt összpontosított string. 52 00:03:06,030 --> 00:03:09,740 Karakterlánc van valami, ami a bejelentett CS50 könyvtárban, 53 00:03:09,740 --> 00:03:14,340 kifejezetten ez a fájl neve cs50.h amelyhez kezdjük nézni ezen a héten és a jövő. 54 00:03:14,340 --> 00:03:17,250 De a szöveg tényleg csak egy egyszerűsítése valami 55 00:03:17,250 --> 00:03:20,980 ez egy kicsit arcanely leírt char *. 56 00:03:20,980 --> 00:03:24,090 Char vagyunk tisztában. Ez csak egy karakter. 57 00:03:24,090 --> 00:03:28,010 De * a hétfői jelölve mi? >> [Hallgató] A mutató. 58 00:03:28,010 --> 00:03:31,290 A mutató. És mi az a mutató? >> [Hallgató] Egy cím. 59 00:03:31,290 --> 00:03:33,420 >> Ez olyan, mint egy cím, egy helyet a memóriában. 60 00:03:33,420 --> 00:03:35,910 Mi egy címet vagy helyet, vagy memória? 61 00:03:35,910 --> 00:03:40,290 Ismét mindannyiunknak laptopok egy koncert vagy 2 GB RAM valószínűleg ezekben a napokban, 62 00:03:40,290 --> 00:03:44,160 és ez azt jelenti, hogy egy milliárd vagy 2 milliárd bájt értékű memória. 63 00:03:44,160 --> 00:03:46,240 És ez nem igazán számít, milyen fizikai néz ki, 64 00:03:46,240 --> 00:03:51,220 de hogy a hit, hogy tudod megszámolni minden egyes bájtok saját laptop - 65 00:03:51,220 --> 00:03:54,580 ez bájt 0, ez bájt 1, ez a bájt 2000000000 - 66 00:03:54,580 --> 00:03:56,100 és pontosan ez az, amit egy számítógép nem. 67 00:03:56,100 --> 00:04:00,030 Ha lefoglalni helyet Egyetlen karakter, például 68 00:04:00,030 --> 00:04:02,480 ez nyilvánvalóan élni valahol a számítógép memóriájában, 69 00:04:02,480 --> 00:04:05,860 és talán ez a byte szám 12345, 70 00:04:05,860 --> 00:04:08,470 és ez valahol itt, a számítógép memóriájában. 71 00:04:08,470 --> 00:04:12,630 És a címét, majd, hogy a karakter 12345. 72 00:04:12,630 --> 00:04:16,140 >> Most, a 0. héten keresztül már eddig, már nem igazán érdekelte 73 00:04:16,140 --> 00:04:19,170 ha a memóriában tárolt dolgok, mert mi általában használ szimbólumokat, 74 00:04:19,170 --> 00:04:22,540 változók és tömbök hogy valóban kap a mi adatokat. 75 00:04:22,540 --> 00:04:24,950 De hétfőn és annál ma, akkor most megy, hogy 76 00:04:24,950 --> 00:04:27,710 Annál is inkább kifejező képességeket író programok 77 00:04:27,710 --> 00:04:31,330 hogy valóban manipulálják a számítógép memóriáját de látod illik, 78 00:04:31,330 --> 00:04:33,720 mind a jó és rossz célokra, 79 00:04:33,720 --> 00:04:39,620 hibákat, hogy egy nagyon gyakori eredményt ezen a ponton a tanulási ezt a cuccot. 80 00:04:39,620 --> 00:04:42,460 De mit is jelent valójában, hogy egy char *? 81 00:04:42,460 --> 00:04:46,140 Menjünk előre vissza -, és mi jön vissza Muci ahogy ígértem ma. 82 00:04:46,140 --> 00:04:48,670 Menjünk egy egyszerű példát itt. 83 00:04:48,670 --> 00:04:53,060 Hadd menteni a fájlt compare.c, és hadd kap néhány sablon kódot itt 84 00:04:53,060 --> 00:05:00,490 ide tartoznak a stdio.h, hadd adjam magam közé cs50.h. Majd Nagyításhoz odafent. 85 00:05:00,490 --> 00:05:05,850 Hadd kezdjem írni fő int main (void), és most szeretnék csinálni valami ilyesmit: 86 00:05:05,850 --> 00:05:13,520 printf ("Adj egy string:"), majd fogom használni s karakterlánc lesz getString 87 00:05:13,520 --> 00:05:16,750 kap egy string a felhasználó, akkor fogom kérni a felhasználót egy másik. 88 00:05:16,750 --> 00:05:21,870 ("Adj egy másik szöveg:"), és én fogom kérni őket, át getString kap, hogy. 89 00:05:21,870 --> 00:05:27,020 Majd hívlak, hogy t, mert t előzte s és s egy szép név egy húr, ha ez elég általános. 90 00:05:27,020 --> 00:05:30,030 Szóval getString, és most csak azt akarom, hogy csinál egy józan ellenőrzést és fogok mondani 91 00:05:30,030 --> 00:05:39,770 if (ok == t), akkor Én csak elmondom a felhasználó printf ("Te gépelt ugyanaz! \ n"); 92 00:05:39,770 --> 00:05:45,520 mást fogok kinyomtatni valami hasonló ("beírt valami mást! \ n") 93 00:05:45,520 --> 00:05:48,460 vagy bármi a büntetés lesz. Szóval valami ilyesmi. 94 00:05:48,460 --> 00:05:52,200 Aztán, mint mindig, én vissza 0, ami csak jelezte, hogy semmi rossz történt, 95 00:05:52,200 --> 00:05:54,400 és én megyek előre, és fordítsd és futtasd ezt a programot. 96 00:05:54,400 --> 00:05:56,540 >> De hétfőn már futott a program, 97 00:05:56,540 --> 00:06:00,420 és valóban azt mondták, hogy nem HELLO Hello and Goodbye nem viszlát. 98 00:06:00,420 --> 00:06:03,140 A viselkedés láttunk egy kicsit több, mint ez. 99 00:06:03,140 --> 00:06:11,450 Hadd menjek az én forrás könyvtárába, nagyítás ide, és csináljuk, hogy összehasonlítani. 100 00:06:11,450 --> 00:06:14,570 Összeállította rendben. Hadd futni összehasonlítani. Adj egy string: HELLO. 101 00:06:14,570 --> 00:06:16,300 Adj még egy string: HELLO. 102 00:06:16,300 --> 00:06:18,000 Beírt valami más! 103 00:06:18,000 --> 00:06:22,650 Nos, hadd próbálj ki valami egyszerűbb, mint a 50, 50. Beírt valami más! 104 00:06:22,650 --> 00:06:25,740 hi, hi. Tehát nyilvánvaló, hogy valami folyik itt. 105 00:06:25,740 --> 00:06:28,440 De mi volt a magyarázata, hogy miért? 106 00:06:28,440 --> 00:06:33,850 Úgy tűnik, hogy 12-es vonal teljesen működésképtelen. 107 00:06:34,300 --> 00:06:39,430 Mi az alapvető probléma? Igen. >> [Hallgató] Ez összehasonlítva a címeket. 108 00:06:39,430 --> 00:06:41,850 Igen, pontosan. Ez tulajdonképpen összehasonlító address 109 00:06:41,850 --> 00:06:44,580 amely HELLO HELLO és tárolja. 110 00:06:44,580 --> 00:06:48,290 Ez nem összehasonlítva a leveleket HELLO újra és újra, 111 00:06:48,290 --> 00:06:52,370 mert mi is történt valójában, Az összes ezúttal már a getString - 112 00:06:52,370 --> 00:06:56,130 Ez a tábla ismét a számítógép memóriájába, 113 00:06:56,130 --> 00:07:00,100 és mondjuk hívom getString után nyilvánító változó s. 114 00:07:00,100 --> 00:07:01,930 Mit jelent az emlékezetemben néz ki? 115 00:07:01,930 --> 00:07:07,070 Tegyük fel azt, hogy önkényesen s úgy néz ki, mint ez. Ez egy négyzet. 116 00:07:07,070 --> 00:07:09,040 És elég sok minden időt, amit húzott egy darab memóriát a képernyőn 117 00:07:09,040 --> 00:07:12,860 ha ez 32 bit Már rajz terek, mint ez, mert valóban a készüléket, 118 00:07:12,860 --> 00:07:17,380 a mutató, egy címet, a 32 bit. Ez ugyanaz, mint egy int. 119 00:07:17,380 --> 00:07:19,420 Ez változhat alapuló számítógépes rendszer. 120 00:07:19,420 --> 00:07:24,630 Azok közületek, akik halványan ismerős az a tény, hogy a Mac vagy PC 64 bit, 121 00:07:24,630 --> 00:07:28,120 hogy valóban azt jelzi, hogy a számítógép használata 64-bit mutatók, 122 00:07:28,120 --> 00:07:33,730 64-bites címeket, és az egyik upsides e a számítógépek 123 00:07:33,730 --> 00:07:35,560 lehet sokkal több, mint a tavalyi RAM. 124 00:07:35,560 --> 00:07:39,240 Hosszú történet rövid, vissza a nap, amikor a számítógépek csak akkor kell használni 32 bites 125 00:07:39,240 --> 00:07:42,740 képviseletére címek, a legnagyobb bájtok száma akkor képviselt 126 00:07:42,740 --> 00:07:46,280 ebben az esetben az volt, amit, ha 32 bit? 127 00:07:46,280 --> 00:07:49,590 Tehát 4 milliárd van, mert a 2 a 32 pedig 4 milliárd euró. 128 00:07:49,590 --> 00:07:51,370 Ez a szám már visszatérő folyamán. 129 00:07:51,370 --> 00:07:55,240 >> Tehát, ha csak 32 bites, a legmagasabb számú lehet számítani, hogy a mintegy 4 milliárd euró. 130 00:07:55,240 --> 00:07:58,750 De ez volt az alapvető korlátozása a számítógépek, amíg néhány évvel ezelőtt 131 00:07:58,750 --> 00:08:01,180 mert ha csak akkor számíthat olyan magas, mint 4 milliárd 132 00:08:01,180 --> 00:08:05,270 nem számít, ha veszel 8 GB RAM, vagy akár 5 gigabájt RAM; 133 00:08:05,270 --> 00:08:07,780 nem lehet számítani, hogy a magas, így nem volt hiábavaló. 134 00:08:07,780 --> 00:08:11,430 Te csak elérni az első 3 vagy 4 gigabájt a számítógép memóriájában. 135 00:08:11,430 --> 00:08:14,410 Ez kevesebb a probléma, és most meg lehet vásárolni MacBook Pro és Dells 136 00:08:14,410 --> 00:08:17,680 , 8 GB RAM, vagy még ezekben a napokban. 137 00:08:17,680 --> 00:08:24,100 De ha osztják egészen egyszerűen ez a program a mutató, a mutató az úgynevezett s, 138 00:08:24,100 --> 00:08:28,370 lehet, hogy néz ki a képernyőn, mert tényleg meg kell héjúak vissza ez a réteg. 139 00:08:28,370 --> 00:08:33,520 Azt mondogatom string, hanem hétfőn, string igazán char *, 140 00:08:33,520 --> 00:08:35,590 a cím néhány karakter. 141 00:08:35,590 --> 00:08:39,280 Akkor nézzük, hogy a képzés kereket bár fogjuk használni a továbbiakban getString most. 142 00:08:39,280 --> 00:08:42,600 Szóval bejelentett s, és ez a darab memória, 32 bit. 143 00:08:42,600 --> 00:08:47,370 Mi van itt a memóriában alapértelmezés szerint? >> [Hallhatatlan tanulói válasz] 144 00:08:47,370 --> 00:08:50,040 Mi ez? >> [Hallgató] Garbage. >> Garbage. Pontosan. 145 00:08:50,040 --> 00:08:54,610 Ha a programozó nem tesz egy értéket egy változó, ki tudja, mi ez? 146 00:08:54,610 --> 00:08:57,990 Néha szerencséd lesz, és ez 0, ami elég egy szép, tiszta alapértelmezett érték, 147 00:08:57,990 --> 00:09:00,310 de mint láttuk, hétfő, néha ez teljes képtelenség, 148 00:09:00,310 --> 00:09:04,130 néhány igazán nagy pozitív vagy negatív szám jött, ahol? 149 00:09:05,350 --> 00:09:07,010 Igen. >> [Hallgató] A funkció előtt. >> Igen. 150 00:09:07,010 --> 00:09:10,170 >> Gyakran a függvény, hogy van neve előtt, mert emlékszem, 151 00:09:10,170 --> 00:09:13,920 ahogy te nevezed funkciók a memóriában, akkor vegye fel egyre több és több helyet alulról felfelé, 152 00:09:13,920 --> 00:09:17,040 és amint a függvény, hogy az emlékezet lesz újra 153 00:09:17,040 --> 00:09:20,890 A következő srác, hogy lesz nevezett, aki használja a ugyanazon szelet memória. 154 00:09:20,890 --> 00:09:23,450 És ha már a bal szemét van, a korábbi értékeket, 155 00:09:23,450 --> 00:09:28,190 talán összetévesztheti s mint amelynek néhány értéket, ha igazán már nem tesz semmit ott. 156 00:09:28,190 --> 00:09:30,960 Így a RAM Ezen a ponton úgy néz ki, mint ez. 157 00:09:30,960 --> 00:09:36,030 Most a jobb oldali 7-es vonal vagyunk hívás getString, 158 00:09:36,030 --> 00:09:40,150 amit már csinál most a héten, de mi getString valójában csinál? 159 00:09:40,150 --> 00:09:43,350 GetString írta CS50 személyzet egy kicsit intelligens 160 00:09:43,350 --> 00:09:46,500 az, hogy amint a felhasználó elindítja gépelési és gombokkal találat Enter, 161 00:09:46,500 --> 00:09:50,010 GetString kitalálja, hány billentyűleütéseket volt a felhasználói hit, 162 00:09:50,010 --> 00:09:53,360 hogy hány karakter van szükség kiosztani RAM. 163 00:09:53,360 --> 00:09:55,660 És ha ez a RAM származik, ki tudja? 164 00:09:55,660 --> 00:09:58,930 Ez valahol a számítógép 2 GB vagy miegymás memória. 165 00:09:58,930 --> 00:10:05,200 De tegyük fel, hogy a számítógépen talált helyet a szót HELLO itt. 166 00:10:05,200 --> 00:10:08,710 A szó, amit beírt volt H-E-L-L-O. 167 00:10:08,710 --> 00:10:13,510 És ha elkészíti ezt a karaktersorozatot, talán rajzolni, mint ez. 168 00:10:13,510 --> 00:10:17,860 De meg kell tennem 1 extra dolog. Mi tartozik végén bármely sztring C? 169 00:10:17,860 --> 00:10:20,710 A null karakter, amit írni, \ 0. 170 00:10:20,710 --> 00:10:23,980 Ez technikailag a 0, de a backslash teszi a tisztább 171 00:10:23,980 --> 00:10:28,150 hogy ez a szó a szám 0, értéke 0; 172 00:10:28,150 --> 00:10:32,440 ez nem, például quote-unquote 0, hogy esetleg írja be a billentyűzeten. 173 00:10:32,440 --> 00:10:33,940 Szóval ez HELLO. 174 00:10:33,940 --> 00:10:36,350 >> És mit mondunk hétfőn, hogy egy függvény hasonló getString 175 00:10:36,350 --> 00:10:39,580 ténylegesen vissza ezeket hét? 176 00:10:39,580 --> 00:10:43,960 Ez nem visszatérés a húr önmagában, mert ez nem igazán van értelme 177 00:10:43,960 --> 00:10:47,710 mivel a húrok nem léteznek. Ők egyfajta gyártás a CS50 könyvtárban. 178 00:10:47,710 --> 00:10:51,300 Mi valóban egy string, műszakilag? >> [Hallgató] Ez az első karakter. 179 00:10:51,300 --> 00:10:55,950 Pontosan. Elég csupán a címe az első karakter, hogy a felhasználó beírt be 180 00:10:55,950 --> 00:11:02,810 Tehát, ha a szavam HELLO végződik fel a byte száma 123, majd a byte szám 124, 181 00:11:02,810 --> 00:11:08,320 125, 126, és így tovább, ha csak az én szám bájt 0-up, 182 00:11:08,320 --> 00:11:12,650 ami igazán getString visszatér szó a szám 123. 183 00:11:12,650 --> 00:11:19,270 Szóval mi lesz életbe s az a szám 123, nem a H betű, nem pedig a szó HELLO, 184 00:11:19,270 --> 00:11:23,130 egyszerűen a címét, amelyen találok az első betű HELLO. 185 00:11:23,130 --> 00:11:26,500 De ez nem tűnik elég. Kérdeztem egy string, nem egy karaktert. 186 00:11:26,500 --> 00:11:32,970 Szóval hogyan lehet, vagy a számítógép tudja, hogy ello fajta jön a H? 187 00:11:35,760 --> 00:11:37,460 Mi az a fajta megállapodás van? Igen. 188 00:11:37,460 --> 00:11:40,100 [Hallgató] Tartja mondja magát, hogy talál valami több karaktert. >> Pontosan. 189 00:11:40,100 --> 00:11:44,570 >> Van ez ember-számítógép-egyezmény, amelynek során, ha foglalkozunk húrok, 190 00:11:44,570 --> 00:11:49,410 más néven most, mint char csillagok, akkor egyszerűen kitalálni 191 00:11:49,410 --> 00:11:54,350 ha a végén minden karakterlánc élet által tényleg csak iterációjával rajta egy for ciklus, 192 00:11:54,350 --> 00:11:57,820 a while ciklus, mindegy, hogy amikor megtalálja a végén a húr 193 00:11:57,820 --> 00:12:02,160 most már lehet következtetni arra, hogy ó, az egész szó volt HELLO. 194 00:12:02,160 --> 00:12:04,820 Akik ezt a korábbi programozási tapasztalatok azt tudni Java 195 00:12:04,820 --> 00:12:09,880 ha csak a tétet. hossza és más nyelveken hívhat hossz vagy hasonló. 196 00:12:09,880 --> 00:12:14,060 Ez azért van, mert egy csomó nyelvek, különösen a dolgok, az úgynevezett objektum-orientált nyelvek, 197 00:12:14,060 --> 00:12:18,580 hossza valami fajta kapszulázott belül az adatot is, 198 00:12:18,580 --> 00:12:24,000 sokkal, mint mi kiöntött azonosítók nevét és házak belsejében egy diák hétfőn. 199 00:12:24,000 --> 00:12:28,700 De C sokkal alacsonyabb szinten. Nincsenek objektumok vagy osztályok, ha már hallottam ezeket a kifejezéseket előtt. 200 00:12:28,700 --> 00:12:31,490 Csak ennyit tényleg memória címeket. 201 00:12:31,490 --> 00:12:35,540 Tehát ez a fajta régi vágású módon képviselő érdekes adatszerkezeteket. 202 00:12:35,540 --> 00:12:38,760 Van egy kezdeti érték, mint a címe az első karakter 203 00:12:38,760 --> 00:12:42,340 majd csak néhány önkényes konvenció, hogy mindenki egyetért abban, hogy kövesse. 204 00:12:42,340 --> 00:12:46,420 Szóval, hogyan string hossza végrehajtása nem javasoljuk? 205 00:12:46,420 --> 00:12:51,360 Strlen, strlen, amelyet néhányan most használt néhány alkalommal. Elég egyszerű, ugye? 206 00:12:51,360 --> 00:12:53,060 Ez olyan, mint 2 sornyi kódot. 207 00:12:53,060 --> 00:12:56,140 Elég sok a for ciklus valamiféle, talán egy további helyi változó. 208 00:12:56,140 --> 00:13:00,540 De strlen csak meg, hogy egy mutatót, majd kezdeni \ 0. 209 00:13:00,540 --> 00:13:05,190 >> És amint azt találja, akkor vissza az összes lépést, hogy ez hozott, hogy a húr. 210 00:13:05,190 --> 00:13:07,150 Így tudjuk következtetni ebből, mi folyik a következő. 211 00:13:07,150 --> 00:13:11,850 Tegyük fel, hogy akkor én kijelentem t, mint én tettem sorban 10. 212 00:13:11,850 --> 00:13:14,280 Ez valami szemét érték. Ki tudja, az első? 213 00:13:14,280 --> 00:13:18,490 De a jobb oldali vonal 10 Hívom getString újra. 214 00:13:18,490 --> 00:13:20,050 Ki tudja, ha ez végül? 215 00:13:20,050 --> 00:13:23,830 Tegyük fel önkényesen azt mondják, hogy az operációs rendszer talált helyet, hogy úton van ide. 216 00:13:23,830 --> 00:13:28,610 Én történetesen véletlenül írja H-E-L-L-O újra, 217 00:13:28,610 --> 00:13:31,260 és így tudjuk felhívni ugyanolyan kép. 218 00:13:31,260 --> 00:13:34,290 De az a tény, hogy már ezt a képet rajzolni szándékos 219 00:13:34,290 --> 00:13:37,720 mert ez egy másik HELLO, mint ez. 220 00:13:37,720 --> 00:13:43,920 Tehát itt ez lehet hely 456, ez a 457, és így tovább. 221 00:13:43,920 --> 00:13:47,170 Szóval, mi lesz, ha tesz a kérdőjel egykor volt? 222 00:13:47,170 --> 00:13:50,190 Ebben az esetben a 456. 223 00:13:50,190 --> 00:13:53,540 Mi felvette ezeket a számokat önkényesen, mert tényleg a mai nap után 224 00:13:53,540 --> 00:13:57,110 nem fogunk törődni annyira, hogy mi a címe, bármi. 225 00:13:57,110 --> 00:14:02,690 Minden törődünk, hogy kitaláljuk, a címét néhány adat, mint a HELLO. 226 00:14:02,690 --> 00:14:07,100 >> Szóval tényleg amit a legtöbb ember csinál számítógép-tudomány, ha beszélünk memória címek 227 00:14:07,100 --> 00:14:10,210 és beszél mutatók pontosabban, 228 00:14:10,210 --> 00:14:14,220 ahelyett zavarta rájönni, 123 - kit érdekel, ha ez a cucc valójában, 229 00:14:14,220 --> 00:14:17,440 mi csak tudjuk, hogy néhány numerikus cím - 230 00:14:17,440 --> 00:14:22,180 leegyszerűsítjük a világot, és csak azt mondják, hogy s mutat, hogy a karakter 231 00:14:22,180 --> 00:14:25,080 és t mutat, hogy a karakter. 232 00:14:25,080 --> 00:14:27,430 És az a tény, hogy ez egy nyíl elég szándékos 233 00:14:27,430 --> 00:14:31,610 mert a szó most s mutat a H és t mutat a többi H 234 00:14:31,610 --> 00:14:34,720 mert az a nap végén, nem számít, hogy mi a cím, 235 00:14:34,720 --> 00:14:40,240 de ez nem számít, hogy mi van a képessége, hogy ezt a címet néhány kódrészletet. 236 00:14:40,240 --> 00:14:42,730 Még nem igazán manipulálni ezeket a címeket csak még 237 00:14:42,730 --> 00:14:47,770 úgyhogy majd meglátjuk, hol tudunk közbevet és rendezni a dolgokat a mutatók, 238 00:14:47,770 --> 00:14:52,030 de most a 12-es vonal szó milyen értékeket fogunk összehasonlítása 239 00:14:52,030 --> 00:14:55,500 szerint ez a történet a 12-es vonal? 240 00:14:56,570 --> 00:15:01,290 Azt mondod, hogy a 123 egyenlő egyenlő 456? És ez egyáltalán nem ez a helyzet. 241 00:15:01,290 --> 00:15:05,320 És még fogalmilag, ez a mutató egyáltalán nem ugyanaz, mint a 242 00:15:05,320 --> 00:15:09,500 azért, mert az úgynevezett getString kétszer, és getString nem próbálja meg, hogy szuper okos, 243 00:15:09,500 --> 00:15:12,470 nem próbálja megvalósítani, oh, beírt HELLO 5 perccel ezelőtt; 244 00:15:12,470 --> 00:15:15,090 hadd adjak ugyanazt a mutatót, mint én adtam neked korábban, 245 00:15:15,090 --> 00:15:18,450 ez csak oszt egy új darab memória minden alkalommal, amikor hívják. 246 00:15:18,450 --> 00:15:20,350 >> Szóval hogyan lehet kijavítani ezt a problémát? 247 00:15:20,350 --> 00:15:24,270 Ha magasabb szintre akarom összehasonlítani a húrok és a HELLO HELLO - 248 00:15:24,270 --> 00:15:28,680 Engem nem érdekel, ami a mutató - hogyan megy a választ a kérdésre, 249 00:15:28,680 --> 00:15:31,980 nem a felhasználó adja meg ugyanaz a dolog? Mi szükség itt? Igen. 250 00:15:31,980 --> 00:15:35,200 [Hallgató] Használja a funkciót. >> Tudom használni a funkciót ki a dobozból. 251 00:15:35,200 --> 00:15:38,170 Tudom használni egy nevezett funkció strcmp, s-t-r-c-m-p, 252 00:15:38,170 --> 00:15:41,190 csak a rövidített változatát, mondván karakterlánc összehasonlítani. 253 00:15:41,190 --> 00:15:45,070 És ha bemegy, például összehasonlítani 2, ami napjaink emlékeztetők, 254 00:15:45,070 --> 00:15:46,690 Tudom, hogy pontosan. 255 00:15:46,690 --> 00:15:51,750 Megtartottam minden más ugyanaz line 1 le, hogy 26, vagy úgy, 256 00:15:51,750 --> 00:15:54,360 és most már észre, ez a rész is változott egy kicsit. 257 00:15:54,360 --> 00:15:57,690 Nézzük ignore 28 vezetéken egy pillanatra, és elsősorban csak ez az egy. 258 00:15:57,690 --> 00:16:00,410 Mit mondunk hétfőn, hogy str összehasonlítás nem? 259 00:16:00,410 --> 00:16:05,200 Ez az elem kezeli a folyamat figyelembe 2 mutatók, s és t ebben az esetben, 260 00:16:05,200 --> 00:16:08,480 fajta gyakorlatilag azáltal, hogy az ujját a 2 betű, 261 00:16:08,480 --> 00:16:11,530 és mit kell tennie egy olyan dolog, mint a while vagy for ciklus, 262 00:16:11,530 --> 00:16:16,050 és azt mondja, ezek az ugyanaz? Ha igen, akkor mozog a kéz vagy a mutató előre. 263 00:16:16,050 --> 00:16:17,970 Ezek az azonos, ezek az azonos, ezek az ugyanaz, 264 00:16:17,970 --> 00:16:22,710 Ezen ugyanaz, ezek az ugyanaz? És ó, én vagyok a végén a húr mind s és t. 265 00:16:22,710 --> 00:16:26,780 Én nem találtam olyan ellentmondásokat. Igen, ezek sztringek az ugyanaz. 266 00:16:26,780 --> 00:16:31,940 És mit str hasonlítsa össze vissza, ha 2 karakterláncok megegyeznek, látszólag? Zero. 267 00:16:31,940 --> 00:16:35,900 Szóval 0 jó ebben az esetben, mert ha visszatér -1 vagy +1, 268 00:16:35,900 --> 00:16:40,560 azt jelenti, hogy s épp, hogy jöjjön elé t betűrendben vagy után t. 269 00:16:40,560 --> 00:16:43,760 És miért lenne ez hasznos funkció, hogy megmondja, melyik húr előbb 270 00:16:43,760 --> 00:16:46,720 vagy azt követően a szótárban? 271 00:16:46,720 --> 00:16:48,740 [Hallgató] Keresés. >> Keresés és rendezés. 272 00:16:48,740 --> 00:16:51,730 >> Szóval lehet csinálni a dolgokat, mint a bináris keresés, vagy buborék rendezés, illetve összeolvad rendezés 273 00:16:51,730 --> 00:16:53,230 ahol van összehasonlítani a dolgokat. 274 00:16:53,230 --> 00:16:56,420 Eddig voltunk ilyen vágott néhány sarkok és csak beszélt válogató 275 00:16:56,420 --> 00:16:59,430 összefüggésben a számok, mert szép és könnyű beszélni, 276 00:16:59,430 --> 00:17:02,430 de akkor biztosan összehasonlítani vonósok, alma és banán, 277 00:17:02,430 --> 00:17:05,349 mert ha alma ismerten elé banán, hasonlóan, 278 00:17:05,349 --> 00:17:09,319 tudsz mozogni húrok bárhol a memóriában, mint Rob tette merge sort a videó 279 00:17:09,319 --> 00:17:15,880 és mi van a színpadon kiválasztási sort, beillesztés sort, és buborék rendezés. 280 00:17:15,880 --> 00:17:18,710 Szóval, ha mást veszünk ezt? Próbáljuk ezt. 281 00:17:18,710 --> 00:17:23,980 Nézzük fajta felejtsük el, hogy lecke egy pillanatra, és próbálja most, és másolja 1.c tegye a következőket. 282 00:17:23,980 --> 00:17:26,800 Összhangban 21 mondok print valamit, 283 00:17:26,800 --> 00:17:28,520 akkor kapok egy string a felhasználó, 284 00:17:28,520 --> 00:17:30,690 akkor én bejelöli ezt. 285 00:17:30,690 --> 00:17:33,620 Mi nem igazán ütött ebbe a szokás még, de most már ezt. 286 00:17:33,620 --> 00:17:40,990 Menjünk ténylegesen héjúak vissza ez a réteg. Ez tényleg char *. Ez a fickó tényleg char *. 287 00:17:40,990 --> 00:17:45,690 Szóval, mit is jelent, hogy ellenőrizni kell, s == NULL? 288 00:17:45,690 --> 00:17:48,380 Kiderült, hogy amikor telefonál egy függvényt, mint getString 289 00:17:48,380 --> 00:17:51,540 vagy még általánosabban csak kérni egy számítógépet, hogy egy kis memória, 290 00:17:51,540 --> 00:17:53,030 valami elromolhat. 291 00:17:53,030 --> 00:17:56,630 Lehet, hogy őrült, és kérje a számítógépet egy terabájt memória 292 00:17:56,630 --> 00:18:01,780 által kért trillió byte memóriát, hogy egyszerűen nem léteznek a számítógépen, 293 00:18:01,780 --> 00:18:05,130 de getString és egyéb funkciókat kell valamilyen módon kiabál rád 294 00:18:05,130 --> 00:18:06,820 ha már kért túl sokat. 295 00:18:06,820 --> 00:18:10,450 És ahogy getString teszi ezt, ha kért több memóriát 296 00:18:10,450 --> 00:18:14,250 mint áll a számítógép, akkor is, ha ez szuper, szuper kis valószínűségű 297 00:18:14,250 --> 00:18:17,730 mert egyikünk sem megy írja trillió karaktert, majd nyomja meg az Enter billentyűt, 298 00:18:17,730 --> 00:18:21,980 de alacsony valószínűségű, bár lehet, én még mindig szeretné, hogy ellenőrizze, hogy csak abban az esetben, 299 00:18:21,980 --> 00:18:26,120 és a speciális értéket getString, választ, és egyéb funkciók visszatér 300 00:18:26,120 --> 00:18:30,630 Ha valami baj van NULL minden sapkák. 301 00:18:30,630 --> 00:18:36,520 >> És mi NULL? NULL csak azért történik, hogy képviselje a mutató. Ez a memória cím 0. 302 00:18:36,520 --> 00:18:40,800 A világ úgy döntött, hogy önkényesen, ha ez a számítógép memóriájában - Tudod mit? - 303 00:18:40,800 --> 00:18:46,260 fogunk lopni csak 1 byte minden számítógép memóriája, és ez a 0 helyen. 304 00:18:46,260 --> 00:18:49,560 Fogjuk, hogy ez a beceneve NULL, és fogunk ígér 305 00:18:49,560 --> 00:18:52,660 hogy soha nem fogjuk ténylegesen valós adatokat oda 306 00:18:52,660 --> 00:18:56,770 mert csak önkényesen szükségünk különleges értéke, 0, más néven NULL, 307 00:18:56,770 --> 00:19:00,230 hogy így kiabálni felhasználó, ha valami balul sül el. 308 00:19:00,230 --> 00:19:03,590 Ellenkező esetben előfordulhat, hogy nem tudja, nem 0 jelenti tesz valamit 309 00:19:03,590 --> 00:19:05,490 vagy nem jelent valami baj? 310 00:19:05,490 --> 00:19:09,190 Meg kell mindannyian egyetértünk, hogy NULL úton semmit sem tért vissza, 311 00:19:09,190 --> 00:19:11,700 nem a tényleges címet vissza. 312 00:19:11,700 --> 00:19:15,210 Most itt vagyok, csak az én emberi elfogadásáról egyezmény I return 1 a fő 313 00:19:15,210 --> 00:19:17,040 ha valami balul sül el. 314 00:19:17,040 --> 00:19:20,650 Azért, mert fő visszatérése egyezmény visszatérni 0, ha jó, 315 00:19:20,650 --> 00:19:22,990 1 vagy más értéket, ha rossz. 316 00:19:22,990 --> 00:19:28,200 De getString és minden olyan funkciót, hogy foglalkozik a memóriában visszatér NULL, ha valami elromlik. 317 00:19:28,200 --> 00:19:33,480 >> Oké. Szóval sajnos line 27, szuper egyszerű bár, teljesen nem másolja a húr. 318 00:19:33,480 --> 00:19:35,740 Miért? Láthatjuk ezt az alábbiak szerint. 319 00:19:35,740 --> 00:19:40,120 Én hivatkozva line 27 lehet, hogy egy példányt s és hívja meg t. 320 00:19:40,120 --> 00:19:45,790 Szóval nem azt kéri a felhasználót, 2 strings ebben az időben, csak azt mondom, az érték s 321 00:19:45,790 --> 00:19:47,870 kellene helyezni t is. 322 00:19:47,870 --> 00:19:52,890 Úgyhogy most csak azért, hogy mutassa be, hogyan tört ez, összhangban 29-től kezdődően, mit csinálok? 323 00:19:52,890 --> 00:19:56,980 Gyártási Én ellenőrzése, hogy a hossza t jelentése 0-nál nagyobb. 324 00:19:56,980 --> 00:19:59,330 Van néhány húr van. A felhasználó beírt valamit be 325 00:19:59,330 --> 00:20:03,410 Mit csinál 32 vezetéken, látszólag? 326 00:20:03,410 --> 00:20:08,910 [Hallhatatlan diák válasza] >> Rendben. Tudod milyen következtetni azt, amit mondtam, hogy csinál. 327 00:20:08,910 --> 00:20:13,200 De technikailag, mi ez csinál? t [0] képviseli azt, amit? 328 00:20:13,200 --> 00:20:15,140 [Hallgató] A 0. karakter. >> [Malan] A 0. karakter. 329 00:20:15,140 --> 00:20:19,620 Vagy inkább emberi, mint az első karakter t, bármi legyen is az, H talán ebben az esetben. 330 00:20:19,620 --> 00:20:24,990 És toupper azt teszi, amit mond. Ez kihasználva a nulladik jellegét t és megváltoztatja azt. 331 00:20:24,990 --> 00:20:28,430 Tehát ez azt jelenti, hogy a nulladik jellegét t, legyen nagybetű, 332 00:20:28,430 --> 00:20:30,320 és tedd vissza, hogy ugyanazon a helyen. 333 00:20:30,320 --> 00:20:35,540 Tehát, ha azt írja hello kisbetűs, ezen változtatni kell a kisbetűs h a tőke H. 334 00:20:35,540 --> 00:20:41,400 De a probléma az, hogy a vonalak 35 és 36, mit fogok csinálni a kinyomtatni számunkra s és t. 335 00:20:41,400 --> 00:20:43,120 És mi a megérzés? 336 00:20:43,120 --> 00:20:47,250 Mit tényleg megy, hogy ha nem adtam a hello csupa kisbetűvel? 337 00:20:47,250 --> 00:20:52,280 Mi folyik itt kap nyomtatott? >> [Hallhatatlan tanulói válasz] >> Mi ez? 338 00:20:52,280 --> 00:20:58,360 [Hallgató] Nagy hidrogénatom és a többi kicsi. >> A nagy H és a maradék kis, amelyre, s vagy t? 339 00:20:58,360 --> 00:21:03,170 [Hallgató] Mindkettő. >> Mindkettő. Pontosan. Szóval lássuk, mi folyik itt. 340 00:21:03,170 --> 00:21:08,380 >> Hadd menjek előre, és lefordításával. Ez COPY1, úgyhogy győződjön meg COPY1. Rendben van. 341 00:21:08,380 --> 00:21:14,840 Nagyítás Hadd menjek előre, és fuss COPY1, Enter, Mondj valamit: hello kisbetűvel. 342 00:21:14,840 --> 00:21:19,570 A tőkésített a másolás, de ez nyilvánvalóan aktiválásra az eredeti is, 343 00:21:19,570 --> 00:21:22,070 mert ami most történik, ebben a történetben? 344 00:21:22,070 --> 00:21:27,030 Összhangban 27 I valójában nem úgy tűnik, hogy másolás a húr, 345 00:21:27,030 --> 00:21:30,450 de még akkor is lehet, hogy ösztönösen azt remélte, hogy ez a helyzet, 346 00:21:30,450 --> 00:21:33,680 ha úgy gondolja, ezt a képet, ami igazán tettem? 347 00:21:33,680 --> 00:21:35,410 Fele a kép az ugyanaz. 348 00:21:35,410 --> 00:21:39,390 Szóval forgassa vissza az időben, hogy a t még nem létezik a történetben. 349 00:21:39,390 --> 00:21:43,160 S létezhet a történetnek, de menjünk kisbetűs helló ebben az időben. 350 00:21:43,160 --> 00:21:46,710 Szóval hadd rögzítse, amit valójában gépelt be 351 00:21:46,710 --> 00:21:51,280 Ebben az esetben itt van h-E-l-l-o. 352 00:21:51,280 --> 00:21:58,050 Majd dolgozzon, mint egy karaktersorozat, tedd a elválasztó vonalak itt a \ 0. 353 00:21:58,050 --> 00:22:05,980 Szóval, ez az, ahol vagyunk, amint sorban 1-től 24-ish, ide vagy oda, már kivégezték. 354 00:22:05,980 --> 00:22:07,800 Ez a kép az emlékezetemben. 355 00:22:07,800 --> 00:22:10,800 Mikor kapok line 27, mi történik? 356 00:22:10,800 --> 00:22:14,730 Csakúgy, mint korábban, kapok egy mutató, ami fogom hívni, mint ezen a téren. 357 00:22:14,730 --> 00:22:19,740 Úgy hívják t. És mi az értéke alapértelmezés szerint? Ki tudja? Néhány szemét érték. 358 00:22:19,740 --> 00:22:22,060 >> Úgyhogy elvont, hogy idegenben, mint egy kérdőjel. 359 00:22:22,060 --> 00:22:27,670 És amint a jobb oldali line 27 végrehajtja, amit én üzembe belsejében t? 360 00:22:27,670 --> 00:22:30,770 Ugyanaz a dolog, hogy van s. 361 00:22:30,770 --> 00:22:34,120 Tehát ha egy pillanatra eltávolítani ezt absztrakció a nyíl, és azt mondjuk, 362 00:22:34,120 --> 00:22:40,330 Ó, ez a memória terhelés címe 123, amikor azt mondod, t kap s, pontosvessző, 363 00:22:40,330 --> 00:22:42,700 te szó szerint üzembe 123 itt. 364 00:22:42,700 --> 00:22:45,200 Nos, ha már ilyen egyszerűsíteni világunk ismét képeket, 365 00:22:45,200 --> 00:22:48,750 amit valójában történt, csak még egy nyíl, hogy a világ 366 00:22:48,750 --> 00:22:52,910 ez mutat-től t pontosan ugyanolyan string. 367 00:22:52,910 --> 00:22:59,730 Tehát, ha sorban 31 és 32 én tényleg megy a változó t [0], 368 00:22:59,730 --> 00:23:05,580 mi a t [0] látszólag egyet most? s [0] 369 00:23:05,580 --> 00:23:07,030 Szóval ez minden, ami történik. 370 00:23:07,030 --> 00:23:09,900 És bár ez a fajta úgy érzi, egy kicsit alacsony, és misztikus 371 00:23:09,900 --> 00:23:12,760 és ez a fajta érzés talán ösztönösen ennek éppen dolgozott - 372 00:23:12,760 --> 00:23:15,410 Csináltam másolatot a dolgok előtt, és ez csak működött - 373 00:23:15,410 --> 00:23:18,590 ha valóban úgy gondolja, hogy mi az a szöveg valóban, ez egy char *. 374 00:23:18,590 --> 00:23:21,700 Nos, mi ez? Ez a címe a néhány karakter. 375 00:23:21,700 --> 00:23:24,930 Akkor talán van több értelme, hogy ha megpróbál tenni valamit 376 00:23:24,930 --> 00:23:29,220 super látszólag egyszerű, mint ez, minden, amit csinál, másol memória címet. 377 00:23:29,220 --> 00:23:32,530 Te valójában nem csinál semmit a húr is. 378 00:23:32,530 --> 00:23:37,500 Tehát akkor is, ha fogalmad sincs, hogyan megoldaná ezt a problémát kódot, 379 00:23:37,500 --> 00:23:45,080 magas szintű, elméletileg, mit kell tennünk annak érdekében, hogy ta másolata s, látszólag? 380 00:23:46,670 --> 00:23:48,820 Igen. >> [Hallgató] Adj neki egy új helyre? >> Pontosan. 381 00:23:48,820 --> 00:23:50,800 >> Meg kell adni t egy teljesen új helyre. 382 00:23:50,800 --> 00:23:55,230 Meg kell valahogy létrehozni egy olyan világban, ahol kapunk egy új darab memória, 383 00:23:55,230 --> 00:24:00,090 ami csak az egyértelműség kedvéért fogom felhívni jobbra lent ez, de nem kell ott lenni. 384 00:24:00,090 --> 00:24:04,880 De kell lennie az azonos méretű, úgyhogy felhívni ezeket függőleges vonalak ugyanazon a helyen. 385 00:24:04,880 --> 00:24:09,720 Rendben van, ha ez az egész szemetet kezdetben. Ki tudja, mi volt ott? 386 00:24:09,720 --> 00:24:13,850 De 1. lépés megy, hogy meg kell adni nekem annyi memóriát, ahogy kell 387 00:24:13,850 --> 00:24:18,630 hogy illeszkedjen egy példányát hello, majd kitaláljuk, hogyan lehet másolni a h itt, e itt, 388 00:24:18,630 --> 00:24:20,390 a l itt és így tovább. 389 00:24:20,390 --> 00:24:24,880 De ez már kell egy kicsit nyilvánvaló, akkor is, ha egyes részleteket még elvont. 390 00:24:24,880 --> 00:24:28,690 Szeretnénk másolni ezt a fonalat ebbe, ez csak egy for ciklus vagy while 391 00:24:28,690 --> 00:24:31,580 vagy valami, amivel lettél annál inkább ismerős. 392 00:24:31,580 --> 00:24:35,970 Akkor próbáljuk meg. Hadd menjek be copy2.c. 393 00:24:35,970 --> 00:24:43,270 A copy2.c már majdnem ugyanazt a programot, kivéve a 27 vezetéken. 394 00:24:43,270 --> 00:24:47,260 Úgy néz ki, egy kicsit bonyolult, de ha törjük le apránként, 395 00:24:47,260 --> 00:24:48,950 a bal oldali ugyanaz. 396 00:24:48,950 --> 00:24:52,790 Char * t hoz létre, ez a dolog a memóriában, jóllehet egy kérdőjel 397 00:24:52,790 --> 00:24:54,680 mert fogalmunk sincs, mi van ott alapértelmezés szerint. 398 00:24:54,680 --> 00:24:57,920 A jobb oldali vagyunk most, hogy új funkció, malloc, 399 00:24:57,920 --> 00:25:00,640 memória osztja, adj memória, 400 00:25:00,640 --> 00:25:06,900 és nyilvánvalóan úgy, hogy sok érv, hogy sok dolog zárójelek? 401 00:25:09,660 --> 00:25:12,130 Hallottam zúgolódástokat 1 és 2, de ez csak 1. 402 00:25:12,130 --> 00:25:15,320 Nincs vessző, ami azt jelenti, hogy csak 1 dolog zárójelben. 403 00:25:15,320 --> 00:25:17,720 Annak ellenére, hogy van más zárójelben hadd jelölje 404 00:25:17,720 --> 00:25:21,460 mi van benne a legkülső zárójelek, és ez a kifejezés: 405 00:25:21,460 --> 00:25:25,880 (Strlen (s) + 1) * sizeof (char). 406 00:25:25,880 --> 00:25:29,190 Tehát ha tényleg úgy gondolja ezt végig, ezt mondja nekem a hossza s. 407 00:25:29,190 --> 00:25:34,440 Miért vagyok azonban, hogy 1-re a hossza? >> [Hallhatatlan tanulói válasz] 408 00:25:34,440 --> 00:25:40,200 Pontosan. Szükségünk van hely ez a fickó a farkát, a hatodik karakter nincs angol jelentése 409 00:25:40,200 --> 00:25:42,250 de nem különleges programszerű értelme. 410 00:25:42,250 --> 00:25:46,800 >> Tehát szükségünk van egy + 1 az, hogy mivel strlen visszatér az emberi várható hossza, 411 00:25:46,800 --> 00:25:50,890 helló vagy 5, akkor nem ad a további null karaktert. 412 00:25:50,890 --> 00:25:52,980 Szóval manuálisan hozzáadni ezt a + 1. 413 00:25:52,980 --> 00:25:56,060 És akkor ez, * méret (char), mi még nem láttam ilyet. 414 00:25:56,060 --> 00:25:57,480 Ez technikailag nem egy függvény. 415 00:25:57,480 --> 00:26:04,150 Ez egy speciális kulcsszó, hogy csak megmondja, hogy mi a mérete néhány adattípus a számítógépen 416 00:26:04,150 --> 00:26:06,980 mert a valóságban, néhányan közülünk 32-bites számítógépeken. 417 00:26:06,980 --> 00:26:10,900 Van egy elég régi számítógépet otthon, és mindig csak 32 bites, hogy képviselje mutatók. 418 00:26:10,900 --> 00:26:13,900 És ha mégis méretű adattípus, lehet, hogy 32 bitet. 419 00:26:13,900 --> 00:26:18,300 De ha én vagyok a új divatos számítógépet, talán vissza értéke 64 bit 420 00:26:18,300 --> 00:26:20,510 valami, mint egy cím. 421 00:26:20,510 --> 00:26:25,400 Tehát ebben az esetben, csak a szuper biztonságos, nem fogunk a kemény code valami hasonló - 422 00:26:25,400 --> 00:26:28,740 Nos, mi a mérete char szerint amit mondtam eddig? 423 00:26:28,740 --> 00:26:34,450 Már nagyjából azt mondta, verbálisan, hogy ez 1 byte, és ez nagyjából igaz az egész fórumon. 424 00:26:34,450 --> 00:26:37,000 De ismétlem, feltételezések általában rossz. 425 00:26:37,000 --> 00:26:40,850 Ők vezetnek kerekesszékes program, ha az emberek használják a szoftver oly módon, hogy nem áll szándékában. 426 00:26:40,850 --> 00:26:44,750 Szóval elvont ezt el, és csak nagyobb általánosságban azt 427 00:26:44,750 --> 00:26:46,830 Kell ez a sok darabokat memória 428 00:26:46,830 --> 00:26:50,210 és minden egyes darab memória kell egyezniük a mérete egy karakter, 429 00:26:50,210 --> 00:26:54,870 ami valójában értéke 1 ebben az esetben, de ez egy általános módon az írás azt. 430 00:26:54,870 --> 00:27:00,460 Tehát, ha a szó hello, hány bájtot jelent malloc látszólag kiosztani hello? 431 00:27:00,460 --> 00:27:04,980 [Hallgató] Hat. >> Hat. Pontosan annyi, mint mi kérdőjelek a képernyőn. 432 00:27:04,980 --> 00:27:07,800 És akkor, hogy egy hiszem, most már az Ön megértése getString 433 00:27:07,800 --> 00:27:12,790 mit malloc valószínűleg vissza? >> [Hallgató] Egy cím. 434 00:27:12,790 --> 00:27:17,020 Egy cím, mi? Az első darabja a memóriát. 435 00:27:17,020 --> 00:27:20,670 >> Fogalmunk sincs, mi van ott, mert néhány más funkció 436 00:27:20,670 --> 00:27:23,010 lehetett volna alkalmazni ezt a memóriát korábban. 437 00:27:23,010 --> 00:27:28,380 De malloc, mint getString, visszatér a cím első byte memória 438 00:27:28,380 --> 00:27:30,540 arról, hogy félre az Ön számára. 439 00:27:30,540 --> 00:27:38,380 Amit azonban nem csinál az, töltse ki az üres egy backslash null karakter 440 00:27:38,380 --> 00:27:43,030 azért, mert kiderült, hogy tudod használni malloc kiosztani semmit: ints, vonósok, tömbök, 441 00:27:43,030 --> 00:27:45,700 úszók, diák struktúrák. 442 00:27:45,700 --> 00:27:47,750 Használhatja malloc teljesen általánosan. 443 00:27:47,750 --> 00:27:51,470 Nem érdekel, vagy tudni, hogy mit kiosztása memória. 444 00:27:51,470 --> 00:27:55,810 Szóval lenne szemtelen a malloc, hogy egy \ 0 445 00:27:55,810 --> 00:27:58,340 a végén minden csonkot memória ez így 446 00:27:58,340 --> 00:28:02,620 mert ez a \ 0 dolog csak egy egyezmény szálakat. 447 00:28:02,620 --> 00:28:06,310 Ez nem használt ints, ez nem használt úszók, ez nem használják a diákok számára. 448 00:28:06,310 --> 00:28:11,730 És így a megvagy a malloc, hogy a teher teljes egészében maga a programozó 449 00:28:11,730 --> 00:28:16,790 emlékezni, hogy hány bájt te kiosztott és nem valaha is használni a for ciklus 450 00:28:16,790 --> 00:28:21,570 vagy a while ciklus, és megy tovább az határa darab memória, amit kapott. 451 00:28:21,570 --> 00:28:23,540 Másképpen fogalmazva, amint memóriát, 452 00:28:23,540 --> 00:28:28,510 nem lehet kérni az operációs rendszer, ó, az úton, mekkora egy darab memória volt ez? 453 00:28:28,510 --> 00:28:32,080 Ez teljesen rajtad múlik, hogy emlékezzen, ha kell ezt az értéket. 454 00:28:32,080 --> 00:28:34,330 >> Nézzük, hogyan folytassa ezt a memóriát. 455 00:28:34,330 --> 00:28:38,430 A vonal 28 és 29, miért csinálom ezt? 456 00:28:39,850 --> 00:28:42,260 Csak teljes józanság csekket. 457 00:28:42,260 --> 00:28:45,110 Csak abban az esetben valami baj, kérem néhány őrült mennyiségű memóriát 458 00:28:45,110 --> 00:28:48,690 vagy már olyan sok dolog fut a számítógépen, hogy nem elég memória, 459 00:28:48,690 --> 00:28:51,780 valami ilyesmi, én legalább akarom, hogy ellenőrizze a null. 460 00:28:51,780 --> 00:28:55,260 A valóságban a legtöbb számítógép megadja az illúziót, hogy minden programot 461 00:28:55,260 --> 00:28:57,080 Használhatja a teljes a RAM, 462 00:28:57,080 --> 00:29:00,740 de még így is, ha a felhasználó beír néhány őrült hosszú sora talán azért, mert ők a rosszfiú 463 00:29:00,740 --> 00:29:03,440 és ők tényleg megpróbálja összeomlik a program, vagy hack bele, 464 00:29:03,440 --> 00:29:07,300 azt szeretnénk, hogy legalább ellenőrizze a visszaadott érték malloc valamint hogy egyenlő null. 465 00:29:07,300 --> 00:29:11,630 És ha ez így van, nézzük csak kilép most, mert nem tudom, mit kell tenni ebben az ügyben. 466 00:29:11,630 --> 00:29:13,950 Hogyan lehet átmásolni a húr? Van néhány módszer, hogy ezt megtehesse. 467 00:29:13,950 --> 00:29:18,850 Vannak str bemásolod funkciók C, de ez szuper egyszerű számunkra, hogy ezt a régi módon. 468 00:29:18,850 --> 00:29:23,110 >> Először is hadd kitalálni, hogy mi a hosszú s. 469 00:29:23,110 --> 00:29:26,930 Tudtam volna, hogy ezt a hurok, hanem csak tedd ide az egyértelműség kedvéért. 470 00:29:26,930 --> 00:29:30,610 Így N most tárolja a hosszát az eredeti szöveg, ami látszólag 5. 471 00:29:30,610 --> 00:29:35,290 Aztán én a hurok Én iterációjával 0-tól a maximum n, 472 00:29:35,290 --> 00:29:40,940 és minden iteráció leteszem s [i] belsejébe t [i]. 473 00:29:40,940 --> 00:29:45,060 Szóval ez az, amit az én hallgatólagos 2 ujjal mutatott a húrok előtt. 474 00:29:45,060 --> 00:29:49,260 Mivel ez a for ciklus végigmegy, mint ez, én leszek másolás h be itt, 475 00:29:49,260 --> 00:29:52,890 e-ba itt, l bele itt, mert ez az s, ez t. 476 00:29:52,890 --> 00:29:58,770 És végül, a 35. sor, miért csinálom ezt? 477 00:29:58,770 --> 00:30:03,770 Meg kell, hogy megbizonyosodjon arról, hogy én vagyok véget a húr t. 478 00:30:03,770 --> 00:30:06,170 És én ezt így is szuper explicit. 479 00:30:06,170 --> 00:30:09,510 De javaslom, hogy valaki, ha tehetném, egy másik módja ennek. 480 00:30:09,510 --> 00:30:13,930 Nem igazán szükséged sor 35. Van egy másik módja ennek. 481 00:30:13,930 --> 00:30:18,880 Igen. >> [Hallhatatlan tanulói válasz] >> Mondja hangosabban. 482 00:30:18,880 --> 00:30:20,960 [Hallgató] Kisebb vagy egyenlő. >> Pontosan. 483 00:30:20,960 --> 00:30:24,450 Így egyszerűen mondjuk kisebb vagy egyenlő, mint N, amely általában már rossz 484 00:30:24,450 --> 00:30:28,190 mert majdnem mindig, amikor felmegyünk egyenlő a dolog, mi számlálás 485 00:30:28,190 --> 00:30:30,000 megyünk 1 lépés túl messzire. 486 00:30:30,000 --> 00:30:32,170 De ne felejtsd el, hogy hány bájt tudtunk kiosztani? 487 00:30:32,170 --> 00:30:37,210 Mi kiosztott strlen S, így 5 + 1-es összesen 6. 488 00:30:37,210 --> 00:30:39,980 Tehát ebben az esetben tudnánk tenni valamit, mint ez 489 00:30:39,980 --> 00:30:46,450 hogy mi vagyunk másolást nem csak a hello, hanem a \ 0 a legvégén. 490 00:30:46,450 --> 00:30:49,860 Alternatív, tudtuk használni a nevezett funkció str másolás, strcpy, 491 00:30:49,860 --> 00:30:51,700 de ez nem lenne közel annyira szórakoztató. 492 00:30:51,700 --> 00:30:54,000 De ez minden, ez alatt a háttérben. 493 00:30:54,000 --> 00:30:56,050 Aztán végül, mi nem ugyanaz a dolog, mint korábban. 494 00:30:56,050 --> 00:31:01,620 Én aktiválja t és aztán azt állítják, hogy az eredeti így néz ki, és a másolatot néz ki, hogy. 495 00:31:01,620 --> 00:31:08,570 Szóval próbáld ezt most. Hadd menjek ide. Gyártó copy2. Majd nagyítás és fuss copy2. 496 00:31:08,570 --> 00:31:13,840 Megyek írja hello kisbetűs, sőt kapok kisbetűs helló, mint az eredeti 497 00:31:13,840 --> 00:31:16,930 de a tőke Hello for a másolatot. 498 00:31:16,930 --> 00:31:20,300 De én nem csináltam csak még. Kell tennem 1 utolsó dolog itt. 499 00:31:20,300 --> 00:31:28,000 46 és 47 egyértelműen felszabadítása memóriájába, de mit is jelent ez valójában? 500 00:31:28,000 --> 00:31:33,250 Mit csinálok, mit gondol, a hívó vonal 46 és 47. sor? 501 00:31:33,250 --> 00:31:38,900 Milyen hatással van, hogy van? Igen. 502 00:31:38,900 --> 00:31:43,140 [Hallhatatlan diák válasza] >> Pontosan. 503 00:31:43,140 --> 00:31:46,380 >> Te csak azt mondom az operációs rendszer, hé, köszönöm ezt a memóriát. 504 00:31:46,380 --> 00:31:48,320 Most már használhatja azt valaki másnak. 505 00:31:48,320 --> 00:31:50,790 És itt van egy tökéletes példa szemetet értékek. 506 00:31:50,790 --> 00:31:55,430 Épp most használta ezt a memóriát, hogy írjuk le a szót hello 2 helyen, 507 00:31:55,430 --> 00:31:57,490 itt, itt, itt, és itt. 508 00:31:57,490 --> 00:32:00,910 Tehát ez az e-h-l-l-o-\ 0. 509 00:32:00,910 --> 00:32:06,960 De aztán hívom vonal 46 és 47. sor, és tudod, hogy mi történik ott szempontjából a kép? 510 00:32:06,960 --> 00:32:10,010 Igazából, várj, ez a kép a régi. 511 00:32:10,010 --> 00:32:12,550 Amint tudjuk, hogy a másolatot, ez a fickó valójában mutat itt, 512 00:32:12,550 --> 00:32:16,110 úgyhogy vegye le a számokat, és csak elvont idegenben, mint a mi nyilak újra. 513 00:32:16,110 --> 00:32:19,370 Mi történik ezen a képen, amikor hívom szabad? 514 00:32:19,370 --> 00:32:22,750 [Hallhatatlan diák válasza] >> Nem is. 515 00:32:22,750 --> 00:32:29,510 Ha hívás ingyenes s és t - egyfajta beugratós kérdés - ez a kép nem változott 516 00:32:29,510 --> 00:32:33,880 mert a hívó s és felhívta t, csak azt mondja az operációs rendszer, 517 00:32:33,880 --> 00:32:39,010 Hé, akkor használja ezt a memóriát újra, de ez nem változtat a null 518 00:32:39,010 --> 00:32:41,840 vagy néhány speciális karakter, ez nem változtat ezen, 519 00:32:41,840 --> 00:32:47,350 ez nem változtatja meg a h vagy az e vagy az l vagy az l vagy az o mindkét helyen mást. 520 00:32:47,350 --> 00:32:51,610 Ami a kép, amint a hívás ingyenes, semmi nem változik. 521 00:32:51,610 --> 00:32:56,570 És ebben rejlik az eredete szemetet értékek mert ha később ebben a programban 522 00:32:56,570 --> 00:33:01,010 kérje az operációs rendszer több memóriát getString vagy malloc vagy valami ilyesmi 523 00:33:01,010 --> 00:33:04,900 és az operációs rendszer azt mondja, persze, van 12 bájt memóriával csak felszabadult, 524 00:33:04,900 --> 00:33:08,080 használja ezeket, mit fog adni? 525 00:33:08,080 --> 00:33:10,830 Fogsz kell adni egy darab memóriát, hogy mi lenne jellemzően döntetlen 526 00:33:10,830 --> 00:33:13,700 A kérdőjelek, de mik azok a kérdőjel? 527 00:33:13,700 --> 00:33:17,000 Is legyenek h-e-l-l-O, H-E-l-l-o. 528 00:33:17,000 --> 00:33:20,940 Ezek az új szemeteskocsi értékeket amint felszabadítani, hogy a memóriát. 529 00:33:20,940 --> 00:33:22,750 >> Van egy valós hatása itt is. 530 00:33:22,750 --> 00:33:24,720 Ez történik köze RAM-mal, de a számítógépek 531 00:33:24,720 --> 00:33:26,720 ténylegesen ugyanezt lemez. 532 00:33:26,720 --> 00:33:30,620 Majd megbeszéljük, különösen a jövőbeli probléma halmaz összpontosít kriminalisztika. 533 00:33:30,620 --> 00:33:36,170 De hogy valójában mi történik, ha van néhány érzékeny pénzügyi fájlba az asztalon 534 00:33:36,170 --> 00:33:39,600 vagy néhány vázlatos JPEG és húzza be a szemetet, 535 00:33:39,600 --> 00:33:44,390 mi történik, ha húzza be a szemetet, vagy a kukába? 536 00:33:44,390 --> 00:33:47,240 Tudtad, amit én beszélek. [Nevetés] 537 00:33:47,240 --> 00:33:52,370 Mi történik, ha már húzni a bizonyítékok be a Lomtár vagy kuka? 538 00:33:52,370 --> 00:33:55,920 [Hallhatatlan hallgatói válasz] 539 00:33:55,920 --> 00:33:58,000 Nos, ezért óvatos. Mi történik, ha nem ezt? 540 00:33:58,000 --> 00:34:01,030 A rövid válasz: nem, nem igaz? 541 00:34:01,030 --> 00:34:04,790 Sketchy vagy kényes fájlt, még mindig csak ott ült valahol a merevlemezen. 542 00:34:04,790 --> 00:34:07,940 A legtöbben legalábbis kárán tanulta meg, hogy meg kell kiüríteni a szemetet 543 00:34:07,940 --> 00:34:10,429 vagy a Lomtár, hogy valóban törölni fájlokat. 544 00:34:10,429 --> 00:34:13,440 És valóban, ha jobb gombbal vagy a Control kattintás a kukába 545 00:34:13,440 --> 00:34:15,580 vagy válassza a Fájl Kuka ürítése vagy bármi 546 00:34:15,580 --> 00:34:21,420 és valóban ürítse ki a kukába vagy a Lomtár, hogy valójában mi történik azután, hogy ezt a képet? 547 00:34:22,810 --> 00:34:25,969 Tovább semmit. Tehát semmi ténylegesen történik a lemezen. 548 00:34:25,969 --> 00:34:30,880 >> És ha csak ideiglenesen elkalandozik és írni - I'll csak használja a hátoldalán. 549 00:34:30,880 --> 00:34:34,639 Tehát most a történet változik RAM, ott, ahol programok léteznek 550 00:34:34,639 --> 00:34:39,250 közben futás őket, lemez, ott, ahol azokat tárolják hosszú távú 551 00:34:39,250 --> 00:34:42,920 akkor is, ha a hatalom kimegy, mert most - és mi jön vissza erre a jövőben - 552 00:34:42,920 --> 00:34:46,380 mondjuk csak úgy, mintha ez jelenti a merevlemez belsejében a számítógép 553 00:34:46,380 --> 00:34:50,110 mert vissza a nap régen kör alakú lemez, akárcsak floppy lemezre. 554 00:34:50,110 --> 00:34:55,130 Szóval, ha van néhány érzékeny Excel fájlt, előfordulhat, hogy vegye fel ezt a darab memória 555 00:34:55,130 --> 00:34:59,770 a számítógép lemez, és én csak rajz ugyanolyan önkényes 1 és 0. 556 00:34:59,770 --> 00:35:03,970 Ha húzza a fájlt így a szemetesbe vagy a Lomtár, 557 00:35:03,970 --> 00:35:07,750 Szó szerint semmi nem történik, mert az Apple és a Microsoft most úgy határozott, 558 00:35:07,750 --> 00:35:10,450 a kukába, és kukába tényleg csak átmeneti helyőrző. 559 00:35:10,450 --> 00:35:14,710 Lehet, hogy végül az operációs rendszer ürítse ki az Ön számára, de általában, nem csinál semmit, 560 00:35:14,710 --> 00:35:17,090 legalábbis addig, amíg te tényleg kevés a hely. 561 00:35:17,090 --> 00:35:20,870 >> Azonban, ha megy üres kukába vagy üres kukába, 562 00:35:20,870 --> 00:35:23,460 hasonlóan, nem történik semmi, hogy ezt a képet. 563 00:35:23,460 --> 00:35:28,590 Minden, ami történik, máshol van a számítógép, van valami táblázat. 564 00:35:28,590 --> 00:35:35,400 Ez a fajta, mint egy kis puskát, hogy azt mondja, hogy, mondjuk, resume.doc, 565 00:35:35,400 --> 00:35:40,920 így az önéletrajz egy Microsoft Word fájlt éltek a helyszínen 123 a merevlemezen, 566 00:35:40,920 --> 00:35:43,710 nem a memóriában, és nem a RAM-ban, hanem a merevlemezen, 567 00:35:43,710 --> 00:35:49,050 és a vázlatos JPEG életét 456, és az Excel file lakik 789 vagy bárhonnan. 568 00:35:49,050 --> 00:35:53,640 Amikor törli a fájlokat ténylegesen a kuka kiürítése közben, vagy a Lomtár, 569 00:35:53,640 --> 00:35:59,530 ezt a képet nem változtatja meg. A 0s és 1s a merevlemezen nem mennek sehova. 570 00:35:59,530 --> 00:36:03,930 De ez asztal, ez a kis adatbázis fajta, nem változnak. 571 00:36:03,930 --> 00:36:08,750 Ha törli önéletrajzát, az olyan, mintha a fájl törlésre kerül bizonyos értelemben, 572 00:36:08,750 --> 00:36:12,790 de a számítógép nem is elfelejti, ha ez a dolog él a merevlemezen. 573 00:36:12,790 --> 00:36:17,870 A 0s és 1s alkotó önéletrajzát, vagy bármely más, ezek a fájlok még mindig érintetlen. 574 00:36:17,870 --> 00:36:21,960 >> Tehát, ha véletlenül tette ezt, még mindig nem nulla valószínűség 575 00:36:21,960 --> 00:36:25,800 hogy akkor vissza az adatokat a Norton Utilities vagy valamilyen kereskedelmi szoftver 576 00:36:25,800 --> 00:36:29,810 amelynek célja az életben, hogy megtalálják 0s és 1s, hogy a fajta nem árva, 577 00:36:29,810 --> 00:36:33,300 Elfelejtettem, de itt marad itt, hogy lehet kapni az adatokat vissza. 578 00:36:33,300 --> 00:36:38,410 Vagy törvényszéki nyomozók számára a rendőrség vagy az FBI valójában, hogy egy merevlemez 579 00:36:38,410 --> 00:36:42,550 és valójában keresnek minták 0s és 1s, hogy néz ki, mint JPEG, néz Excel-fájlokat, 580 00:36:42,550 --> 00:36:46,400 és vissza őket, így még akkor is, ha a számítógép elfelejtette őket. 581 00:36:46,400 --> 00:36:49,820 Tehát az egyetlen módja valóban az adatok törlésére, mivel megbeszéljük a jövőben, 582 00:36:49,820 --> 00:36:54,190 hogy dörzsölje vagy törölje a fájlt vagy a merevlemezt - 583 00:36:54,190 --> 00:36:56,540 Nem igazán lehet megszabadulni a 0s és 1s 584 00:36:56,540 --> 00:36:59,440 mert különben azt kezdeni egy gigabájtos merevlemez 585 00:36:59,440 --> 00:37:02,380 és azt a végén egy megabájtos merevlemez, ha állandóan arra törlés, 586 00:37:02,380 --> 00:37:04,380 szó 0s és 1s. 587 00:37:04,380 --> 00:37:06,310 Szóval, mit tennél, ha nagyon akartam, hogy fedezze a számokat 588 00:37:06,310 --> 00:37:10,510 és az alapvető probléma az, hogy még mindig van 0s és 1s a lemezen? 589 00:37:10,510 --> 00:37:14,930 Látom valaki gesztikuláló, hogy akkor fizikailag megtörni a készüléket. Ez működni fog. 590 00:37:14,930 --> 00:37:19,600 [Nevetés] De ha ez ilyen drága megoldás, mi lenne ésszerű? 591 00:37:19,600 --> 00:37:23,270 Igen. >> [Hallgató] Felülírás őket. >> Felülírása őket mi? >> [Hallgató] Egyéb adatokat. 592 00:37:23,270 --> 00:37:29,070 Egyéb adatok. Tudod csak felülírja a lemezen vagy 0s 1s vagy minden 0s, minden 1s. 593 00:37:29,070 --> 00:37:31,230 >> És ez valóban, amit néhány a szoftver nem. 594 00:37:31,230 --> 00:37:33,570 Lehet vásárolni szoftver is kap szabad szoftver, 595 00:37:33,570 --> 00:37:36,610 és még beépített Mac OS manapság kevesebb, így Windows, 596 00:37:36,610 --> 00:37:38,660 az a képesség, hogy biztonságosan törölni. 597 00:37:38,660 --> 00:37:41,960 Igazából, ha azt szeretnénk, hogy az összes run haza ma, ha van egy Mac, és ezt, 598 00:37:41,960 --> 00:37:45,740 ha van néhány dolog a szemetes, meg tudod csinálni Secure Empty Trash, 599 00:37:45,740 --> 00:37:47,610 amely nem pontosan ezt. 600 00:37:47,610 --> 00:37:53,350 Ahelyett, hogy csak törli a fájlokat ide, nem törli a 0s és 1s itt, 601 00:37:53,350 --> 00:38:01,240 igen, ez csak megváltoztatja őket, például arra, hogy 0s és pont, pont, pont. 602 00:38:01,240 --> 00:38:05,330 Tehát az egyik a jövő psets valóban lesz szándékosan visszaállítani az adatokat - 603 00:38:05,330 --> 00:38:08,430 fényképeket, hogy már megtett az emberek, helyek és dolgok az egyetemen 604 00:38:08,430 --> 00:38:12,810 amelyhez megpróbáljuk egy törvényszéki kép egy digitális fényképezőgép memóriakártyáját, 605 00:38:12,810 --> 00:38:17,120 amely pontosan ugyanezt a gondolatot -, és akkor meg kell, hogy valóban kihívást találni 606 00:38:17,120 --> 00:38:20,160 a mintákat, hogy képviselje JPEG a merevlemezen, 607 00:38:20,160 --> 00:38:23,610 nagyon hasonló volt diák, akinek az e-mailt olvastam néhány héttel ezelőtt volt 608 00:38:23,610 --> 00:38:25,860 vissza húga fényképek. 609 00:38:25,860 --> 00:38:30,300 Miért nem veszünk egy 5-perces szünet van, és mi összefogja több a memória. 610 00:38:33,030 --> 00:38:38,610 Tehát itt, ahol a dolgok egy kicsit pszichedelikus, de ez egy nagyon erős lépés 611 00:38:38,610 --> 00:38:40,480 megértése felé ez annál inkább. 612 00:38:40,480 --> 00:38:42,900 Itt van egy program neve pointers.c. 613 00:38:42,900 --> 00:38:45,430 Ez az egyik a mai minta kódját. 614 00:38:45,430 --> 00:38:51,280 Figyeljük meg, hogy az első pár sort, 19. és 22., Az összes csinálunk valami hasonló getString 615 00:38:51,280 --> 00:38:54,460 és a visszatérő egy címet, tárolása azt s. 616 00:38:54,460 --> 00:38:58,380 Ezentúl a Pset akár 3 ha akarsz, de Pset 4 és 617 00:38:58,380 --> 00:39:01,030 ahol meg lehet kezdeni, hogy ezeket a képzési kerekekkel magad, 618 00:39:01,030 --> 00:39:04,030 nincs ok azt állítani, hogy karakterláncokat létezik többé. 619 00:39:04,030 --> 00:39:07,030 Ez természetesen rendben van, hogy csak elkezd mondani char *. 620 00:39:07,030 --> 00:39:12,610 >> Mint félretéve, az online hivatkozásokat és a könyvek is gyakran látni a csillag mellett a változó. 621 00:39:12,610 --> 00:39:15,600 Lehet, hogy még látni terek körül mindkét oldalát is. 622 00:39:15,600 --> 00:39:17,680 Minden ezek funkcionálisan helyes. 623 00:39:17,680 --> 00:39:21,180 Most azonban, mi szabványosítása e megközelítést a szuper világos 624 00:39:21,180 --> 00:39:24,000 hogy a char * olyan, mintha azt mondanánk karaktert mutató. 625 00:39:24,000 --> 00:39:25,680 Ez az adat típusát. 626 00:39:25,680 --> 00:39:28,730 És akkor a neve a változó s ebben az esetben. 627 00:39:28,730 --> 00:39:31,180 Így már ütött egy string, és mi már nevezte s. 628 00:39:31,180 --> 00:39:35,180 És akkor itt lent észre, hogy csinálok valójában egy kis trükk. 629 00:39:35,180 --> 00:39:39,080 Ezt hívják pointer aritmetikai, amely egyfajta szuper egyszerű. 630 00:39:39,080 --> 00:39:41,790 Ez csak azt jelenti, összeadni és kivonni számokat mutató. 631 00:39:41,790 --> 00:39:43,660 De ez tényleg működik. 632 00:39:43,660 --> 00:39:49,170 Ez a program nyilvánvalóan kiírja az s karakterláncot 1 karakter per sor oly módon, hogy a végeredmény - 633 00:39:49,170 --> 00:39:54,920 Csak így tudjuk elrontani ha ez megy, hogy a mutatók, fuss mutatókat, hadd Nagyítás 634 00:39:54,920 --> 00:39:58,940 Most hadd írja valami ilyesmi HELLO és típus megadása 635 00:39:58,940 --> 00:40:01,080 és kiírja 1 karakter soronként. 636 00:40:01,080 --> 00:40:04,730 Egészen a második napja, már megtette volna ezt a szögletes zárójel jelöléssel. 637 00:40:04,730 --> 00:40:09,760 Mi volna a for ciklus, és megtennék printf az s [i], és mi volna csinálni újra és újra és újra 638 00:40:09,760 --> 00:40:11,950 egy backslash n végén minden sorban. 639 00:40:11,950 --> 00:40:16,800 De ez a program más. Ezt a programot használja, szó szerint, számtani. 640 00:40:16,800 --> 00:40:18,860 Szóval, mi folyik itt? 641 00:40:18,860 --> 00:40:24,720 Először is, még mielőtt ez a ciklus végrehajtja, amit, csak hogy tisztázzuk, van s valójában? 642 00:40:24,720 --> 00:40:27,270 S? >> [Hallgató] Egy cím. >> Egy cím. 643 00:40:27,270 --> 00:40:32,980 >> És ez a címét, esetében szia, az első karakter azt szó, ami a h. 644 00:40:32,980 --> 00:40:37,370 Így S, ebben a konkrét példában a címét a h. 645 00:40:37,370 --> 00:40:41,850 Szóval, mit is jelent a teendő s + i? 646 00:40:41,850 --> 00:40:46,280 Nos, én 0-tól indul ebben a ciklusban. Megcsináltuk, hogy sok alkalommal. 647 00:40:46,280 --> 00:40:49,760 Úgy fog felmenni a hossza a string, látszólag. 648 00:40:49,760 --> 00:40:53,950 Tehát az első iterációs e hurok i nyilvánvalóan 0. 649 00:40:53,950 --> 00:41:01,740 Tehát ez a kifejezés azt mondja, s + i - inkább, s +0--ez nyilvánvalóan csak s. 650 00:41:01,740 --> 00:41:04,320 Tehát mi * s itt? 651 00:41:04,320 --> 00:41:08,530 Most már használja a csillag kissé eltérő módon. 652 00:41:08,530 --> 00:41:13,080 Hadd menjek előre, és megszabadulni t, mert készen vagyunk beszélünk t és másolatait s. 653 00:41:13,080 --> 00:41:15,540 Most már csak azt szeretném elmondani a történetet magában foglaló s. 654 00:41:15,540 --> 00:41:20,090 És ebben a pillanatban, miután string típusú, a világ úgy néz ki, elég, mint előtte 655 00:41:20,090 --> 00:41:26,630 mindössze s tároló címe h és általában mutat a húr hello. 656 00:41:26,630 --> 00:41:33,170 Ha most nem egy sort * (s + i), próbáljuk ki ezt. 657 00:41:33,170 --> 00:41:40,140 Így * (s + i). Hadd egyszerűsíteni, mert ez 0, tehát ez * (s +0). 658 00:41:40,140 --> 00:41:43,790 Nos, várj egy percet. Egyszerűsítse tovább. Ez * (k). 659 00:41:43,790 --> 00:41:47,020 Nos, zárójelben a fajta ostoba, így most nézzük csak ezt * s. 660 00:41:47,020 --> 00:41:50,540 Tehát az első iteráció e hurok, hogy a vonal, ami kiemelt, 26, 661 00:41:50,540 --> 00:41:53,650 nagyjából egyenértékű nyomtatás ezt. 662 00:41:53,650 --> 00:41:56,040 Mi az adattípusa * s? 663 00:41:56,040 --> 00:42:00,770 Ebben az összefüggésben, mivel a csillag történetesen mellett a s maga, 664 00:42:00,770 --> 00:42:04,930 de konkrétan, mert már nem nyilvánító s, 665 00:42:04,930 --> 00:42:09,730 nem vagyunk létre egy változót többé, nincs említés a char * sorban 26, 666 00:42:09,730 --> 00:42:14,280 nincs említés a kulcsszó string, mi csak egy változót nevű s, 667 00:42:14,280 --> 00:42:19,650 kiderült, hogy most a csillag kissé eltérő, és kétségkívül zavaros jelentését. 668 00:42:19,650 --> 00:42:26,590 * S itt azt jelenti, menj a cím s és nyomtatási bármi van. 669 00:42:26,590 --> 00:42:33,750 Tehát s itt van, * s - fajta, mint Csatornák és létrák, kövesse a nyíl - itt. 670 00:42:33,750 --> 00:42:35,850 Szóval ez * s. 671 00:42:35,850 --> 00:42:39,060 >> Szóval mi lesz nyomtatva az első iterációs e hurok sorban 26? 672 00:42:39,060 --> 00:42:42,170 Én kinyomtatni% c, amely a helyőrző egy karaktert, 673 00:42:42,170 --> 00:42:48,520 akkor a \ n az új vonal. * (S + i) ahol i értéke 0, csak ez a. 674 00:42:48,520 --> 00:42:53,670 Szóval mit char tudok helyezni a% c? H. 675 00:42:53,670 --> 00:42:56,900 A következő iteráció a hurok -, akkor valószínűleg látni, ahol ez megy - 676 00:42:56,900 --> 00:43:01,350 a következő iteráció i nyilvánvalóan 1, tehát ez azt jelenti, s +1, 677 00:43:01,350 --> 00:43:05,580 és akkor most nekem kell a zárójel, mert most a csillagot kell mondani 678 00:43:05,580 --> 00:43:08,620 megy memória cím s +1. 679 00:43:08,620 --> 00:43:14,170 Mi s? Menjünk forgassa vissza az időben, és azt mondják, ez a nyíl most valójában nem tesz nekünk szívességet. 680 00:43:14,170 --> 00:43:18,450 Legyen ez pontosabban azt, hogy ez tárolja a száma 123 681 00:43:18,450 --> 00:43:25,110 mivel a kezdetétől húr szia, ez cím 123, ez a 124, és így tovább. 682 00:43:25,110 --> 00:43:30,550 Így a második iteráció amikor mondom s +1, ez, mintha azt mondanánk 123 +1, 683 00:43:30,550 --> 00:43:35,340 más néven 124, akkor mi char lesz nyomtatva a második iteráció? 684 00:43:35,340 --> 00:43:37,850 E at memóriacím 124. 685 00:43:37,850 --> 00:43:44,440 Aztán megint +, 125, 126, 127, és ez a loop szerencsére abbahagyja, mielőtt ideérnek 686 00:43:44,440 --> 00:43:49,040 mert én vagyok a strlen hogy győződjön meg arról, hogy én nem számít túl magas. 687 00:43:49,040 --> 00:43:50,810 Tehát ez is azt. 688 00:43:50,810 --> 00:43:55,000 Ez megint csak, mintha tette egy héttel ezelőtt. 689 00:43:55,000 --> 00:43:59,200 Hadd írjam meg a vonal alatti bár nem akarunk csinálni mindkettőt. 690 00:43:59,200 --> 00:44:02,500 Ez megegyezik most ezt. 691 00:44:02,500 --> 00:44:08,310 >> Így annak ellenére, hogy s egy string, ahogy már nevezni hetek, s valójában egy char *. 692 00:44:08,310 --> 00:44:13,270 Tehát, ha azt akarjuk, hogy szuper anális, ez tényleg helyes, hogy írjon a különleges tulajdonságokra 693 00:44:13,270 --> 00:44:17,490 az i-edik helyen ezekkel a numerikus címeket és e csillag üzemeltető, 694 00:44:17,490 --> 00:44:20,470 de őszintén szólva, ez annyira sokkal tisztább. Tehát ez nem rossz. 695 00:44:20,470 --> 00:44:26,720 Nincs ok arra, hogy abbahagyjuk line 27 itt, de 26 funkcionálisan azonos, 696 00:44:26,720 --> 00:44:31,570 és ez funkcionálisan megegyezik pontosan az okokat, hogy mi már beszélünk eddig. 697 00:44:31,570 --> 00:44:33,650 És végül, 29 csak helyes gyakorlat. 698 00:44:33,650 --> 00:44:38,420 Hívása ingyenes s azt jelenti, hogy most adsz vissza a memóriát getString adtam neked 699 00:44:38,420 --> 00:44:41,630 mert megint, mint már említettem, hétfő getString hetekig 700 00:44:41,630 --> 00:44:44,180 került bevezetése hiba be a kódot. 701 00:44:44,180 --> 00:44:46,490 A kód a héten volt memóriavesztés 702 00:44:46,490 --> 00:44:49,970 ahol voltál kér getString a memóriakártyák esetében, de te soha nem ad vissza. 703 00:44:49,970 --> 00:44:53,410 És hogy szándékosan választott minket pedagógiailag 704 00:44:53,410 --> 00:44:55,880 mert túl sokat gondolkodni korán. 705 00:44:55,880 --> 00:44:57,710 De most több kell szimmetria. 706 00:44:57,710 --> 00:45:00,830 Ha megkérdezzük a számítógép memóriája, mivel a helyzet a getString, 707 00:45:00,830 --> 00:45:02,820 ahogy ez a helyzet a látszólag malloc, 708 00:45:02,820 --> 00:45:07,970 muszáj most Pset 4-től kezdődően is szabad ilyen memóriát. 709 00:45:07,970 --> 00:45:11,650 Figyeljük meg ez eltér mond int n. 710 00:45:11,650 --> 00:45:15,040 Nem kell, hogy szabad, mert nem hívtál getString 711 00:45:15,040 --> 00:45:16,890 és te nem hívja malloc. 712 00:45:16,890 --> 00:45:20,610 >> És még ha a hívott getInt mivel mi végül látni, 713 00:45:20,610 --> 00:45:25,520 GetInt nem memóriát, mert akkor valóban át körül egész 714 00:45:25,520 --> 00:45:29,430 és az úszók és a karakter, ahogy mi már ezt hetekig. 715 00:45:29,430 --> 00:45:33,960 Strings, mégis, vannak különleges, mert valóban ők a összefűzése több karakter. 716 00:45:33,960 --> 00:45:37,450 Így ők csak más karakter, és úszók és ints és hasonlók. 717 00:45:37,450 --> 00:45:39,980 De mi jön vissza, hogy mielőtt hosszú. 718 00:45:39,980 --> 00:45:44,920 Van még kérdése, akkor ebben a kezdete mutatók? Igen. 719 00:45:44,920 --> 00:45:49,690 [Hallhatatlan diák a kérdéshez] 720 00:45:49,690 --> 00:45:51,440 Ah, nagyon jó kérdés. 721 00:45:51,440 --> 00:45:55,790 Az egyik pár dolgot C valójában mire való az Ön számára, mely kényelmes, 722 00:45:55,790 --> 00:46:00,110 van, hogy kitalálja, neked mi a mérete az adattípus 723 00:46:00,110 --> 00:46:03,060 majd nem, hogy ilyen szorzás az Ön számára. 724 00:46:03,060 --> 00:46:06,610 Ez irreleváns abban az esetben, karakter, mert szinte mindig char 1 byte, 725 00:46:06,610 --> 00:46:08,150 így ez csak működik. 726 00:46:08,150 --> 00:46:11,220 De a vita kedvéért, ha ténylegesen nyomtatás egészek 727 00:46:11,220 --> 00:46:15,500 és meg akarták kinyomtatni valamilyen érték s hogy mutatott egy egész szám, 728 00:46:15,500 --> 00:46:20,720 Ön szintén nem kell tennie, + 4 * i, csak azért, mert egy int 4 bájt. 729 00:46:20,720 --> 00:46:25,780 Pointer számtani azt jelenti, hogy a C és a fordító mindent megtesz, hogy matek az Ön számára. 730 00:46:25,780 --> 00:46:29,190 Mindössze annyit kell törődnünk kell a fajta elszámolást az emberi értelemben. Igen. 731 00:46:29,190 --> 00:46:35,200 [Hallgató] Ha nyilvánítja egy string belsejében egy for ciklus, van, hogy szabad később? 732 00:46:35,200 --> 00:46:36,760 Jó kérdés. 733 00:46:36,760 --> 00:46:41,390 >> Ha a bejelentett egy string belsejében a for ciklus, akkor kell felszabadítani később? 734 00:46:41,390 --> 00:46:47,520 Csak akkor kell a szabad memória, hogy osztja a getString vagy malloc. 735 00:46:47,520 --> 00:46:53,110 Tehát, ha csak mondj valamit, mint - hadd fogalmazzak kapcsos zárójelek most így az összes kódot kapcsolódik. 736 00:46:53,110 --> 00:46:58,580 Ha csinált valamit, bár buggily, mint ez, char * t = s, 737 00:46:58,580 --> 00:47:03,450 Önnek nem kell a szabad t, mert t nem járt semmilyen említést a malloc vagy getString. 738 00:47:03,450 --> 00:47:08,960 Ezzel szemben, ha ezt tetted, getString, akkor igen, akkor kell a szabad t. 739 00:47:08,960 --> 00:47:14,350 És valóban, az egyetlen esélye, hogy az, most már ezen belül hurok, az azonos kérdését hatály 740 00:47:14,350 --> 00:47:16,060 , hogy már tárgyalt a múltban. 741 00:47:16,060 --> 00:47:18,830 Ellenkező esetben lenne elosztása memória, elosztásának memória, elosztásának memória, 742 00:47:18,830 --> 00:47:21,230 és a végén a program, mert te túl a hurok, 743 00:47:21,230 --> 00:47:24,240 t nem létezik, de soha nem mondta az operációs rendszer 744 00:47:24,240 --> 00:47:26,750 hogy nem kell, hogy a memória már. 745 00:47:26,750 --> 00:47:30,430 És mielőtt hosszú, Pset 4 vagy 5 mi felvértezzük Önt a program neve Valgrind, 746 00:47:30,430 --> 00:47:34,160 amely hasonló szellemében GDB, mivel van egy kissé misztikus interfész, 747 00:47:34,160 --> 00:47:35,750 de a célja az életben, hogy segítsek. 748 00:47:35,750 --> 00:47:39,380 És Valgrind egy olyan program, amely a jövőben keresni a programok 749 00:47:39,380 --> 00:47:42,550 keres memóriavesztés, akár a getString vagy malloc, 750 00:47:42,550 --> 00:47:47,800 amely akkor kezdi el használni annál is inkább, ahogy abbahagyja a CS50 könyvtár sok. 751 00:47:47,800 --> 00:47:53,030 Végre most már valami a szókincs és a fajta mentális modell elmélet 752 00:47:53,030 --> 00:47:55,170 amellyel megoldani ezt a hibás programot. 753 00:47:55,170 --> 00:47:59,410 >> Tehát ebben a hibás programot, swap gyártelepi belül swap, 754 00:47:59,410 --> 00:48:05,280 de ez soha nem működött, mert fő fő átadott x és y, visszahívása, 755 00:48:05,280 --> 00:48:07,260 illetve fogadtak el az értékek, hogy úgy mondjam. 756 00:48:07,260 --> 00:48:09,330 Másolatai közülük adott cserélni. 757 00:48:09,330 --> 00:48:12,520 Végére a swap, a és b valóban kicserélt, 758 00:48:12,520 --> 00:48:16,120 de természetesen x és y, ahogy megbeszéltük, hétfőn nem volt. 759 00:48:16,120 --> 00:48:19,940 Úgyhogy azt javaslom, zöld itt, hogy ez valójában a megoldás itt. 760 00:48:19,940 --> 00:48:22,640 És valóban, hadd mozgatni a csillagok, csak hogy összhangban legyenek 761 00:48:22,640 --> 00:48:24,440 még akkor is, ismét, funkcionálisan ez nem számít. 762 00:48:24,440 --> 00:48:28,730 A jövőben hetekben elmagyarázzuk, hogy mikor és miért nem számít. 763 00:48:28,730 --> 00:48:30,600 Így a zöld most egy megoldás. 764 00:48:30,600 --> 00:48:33,700 Őszintén szólva, úgy néz ki, egy csomó messier, mert minden a csillagok. 765 00:48:33,700 --> 00:48:35,380 Hadd rámutatni egy dolog. 766 00:48:35,380 --> 00:48:40,040 A felső sorban van, ha azt mondja, int * a és int * b 767 00:48:40,040 --> 00:48:42,820 alapvetően ugyanazt a dolgot, mint mindig. 768 00:48:42,820 --> 00:48:47,070 Ez nyilvánító 2 érveket vagy paraméterek a swap, 769 00:48:47,070 --> 00:48:49,940 amelyek közül az első egy int mutató úgynevezett, 770 00:48:49,940 --> 00:48:53,100 amelyek közül a második egy olyan int mutató b néven. 771 00:48:53,100 --> 00:48:55,770 Az egyetlen dolog, ami új, ezen a ponton az a tény, hogy van egy csillag van. 772 00:48:55,770 --> 00:48:59,340 >> Mit jelent ez? A nem int, b nem int. 773 00:48:59,340 --> 00:49:04,100 A jelentése a címben szereplő int és b a címe, egy eltérő int. 774 00:49:04,100 --> 00:49:06,980 Itt lent, ez az, ahol bevallom C lesz zavaró. 775 00:49:06,980 --> 00:49:09,790 Most már egy csillag, de ennek más jelentése ebben az összefüggésben. 776 00:49:09,790 --> 00:49:13,150 Mert mi nem nyilvánításáról mutatók, mint mi itt, 777 00:49:13,150 --> 00:49:15,500 itt vagyunk dereferencing dolgokat. 778 00:49:15,500 --> 00:49:21,520 Szóval technikailag, a csillag ebben az összefüggésben az első, második és harmadik vonalbeli belül csere 779 00:49:21,520 --> 00:49:24,560 ki a dereference operátor, ami csak annyit jelent, hogy ott. 780 00:49:24,560 --> 00:49:27,400 Szóval, mint az ujjam követte a nyíl h, 781 00:49:27,400 --> 00:49:31,100 * Eszköz megy, hogy a cím és találja meg az int, hogy ott van. 782 00:49:31,100 --> 00:49:34,250 * B úton megy a címre, és adja át, hogy mi van ott. 783 00:49:34,250 --> 00:49:40,730 Szóval dolgozza át a képet, hétfőtől már egy halom keretek, 784 00:49:40,730 --> 00:49:43,130 az alsó amelyek közül az egyik legfontosabb lesz, 785 00:49:43,130 --> 00:49:47,600 a felső amelyek közül az egyik lesz csere, 786 00:49:47,600 --> 00:49:50,880 annak érdekében, hogy világunk úgy néz ki, mint hétfőn, mint ez. 787 00:49:50,880 --> 00:49:53,620 Itt van egy darab memória fő fog használni. 788 00:49:53,620 --> 00:49:56,520 >> Emlékezzünk vissza, hétfő, hogy a program csak volt 2 változó, 789 00:49:56,520 --> 00:50:01,930 egy úgynevezett x és egy y hívott, és én fel a számokat 1 és 2 is. 790 00:50:01,930 --> 00:50:06,580 Most, amikor hívom cserélni, mint én, hétfőn, 791 00:50:06,580 --> 00:50:11,000 korábban, amikor használják a piros változata a program, ami úgy néz ki, mint ez, 792 00:50:11,000 --> 00:50:17,470 Van 2 paraméter, a és b, és mit írunk itt és itt? 793 00:50:17,470 --> 00:50:21,160 Csak az 1. és 2., szó szerint másolatait x és y. 794 00:50:21,160 --> 00:50:23,070 Ma már változtatni. 795 00:50:23,070 --> 00:50:28,510 Ma ahelyett, hogy halad ints és b fogunk átadni a 2 címeket. 796 00:50:28,510 --> 00:50:34,290 Ezek a címek megtörténhet, hogy pont ints, de a címek nem ints magukat. 797 00:50:34,290 --> 00:50:37,330 Ezek a címek. Olyan, mint egy postai címet helyett. 798 00:50:37,330 --> 00:50:40,580 Tehát most meg kell, hogy csak így magamnak egy kicsit részletesebben a képernyőn. 799 00:50:40,580 --> 00:50:43,250 Ez az én számítógép memóriájában, mint volt egész nap. 800 00:50:43,250 --> 00:50:45,120 Most arra van szükség néhány önkényes számozási rendszert. 801 00:50:45,120 --> 00:50:50,580 Akkor mondjuk, csak véletlen, hogy ez a memória cím 123, 124. 802 00:50:50,580 --> 00:50:55,660 Mondjuk ez a 125, ez a 126, és így tovább, de ez teljesen önkényes. 803 00:50:55,660 --> 00:50:58,590 Csak kell egy kis számozási rendszer az emlékezetemben. 804 00:50:58,590 --> 00:51:04,030 Így most, amikor valóban át az x és y, nem megyek át az x és y; 805 00:51:04,030 --> 00:51:08,400 Megyek át a postai címet, hogy úgy mondjam, az x és az y 806 00:51:08,400 --> 00:51:11,870 annak érdekében, hogy mi lesz az itt tárolt és itt nem az 1. és 2., 807 00:51:11,870 --> 00:51:16,030 de ha látom a kis szöveget, mi lesz telt el itt és itt? 808 00:51:16,030 --> 00:51:23,340 [Hallhatatlan diák válasza] >> Pontosan. 123 kerül fel ide, és 124 lesz fel ide. 809 00:51:23,340 --> 00:51:28,910 >> Nos, azért, mert használt a csillag ebben a legelső sorban egészen itt top, 810 00:51:28,910 --> 00:51:34,340 a program csak tudja, hogy a 123 és 124, annak ellenére, hogy nyilvánvalóan egészek 811 00:51:34,340 --> 00:51:40,160 hogy minden ember is észre, azokat úgy kell értelmezni, címek numerikus címeket. 812 00:51:40,160 --> 00:51:43,250 Ezek nem önmagukban és önmaguktól ints, ők címek, 813 00:51:43,250 --> 00:51:46,120 és ez azért van, mert én kifejezetten fel a csillagok ott. 814 00:51:46,120 --> 00:51:51,360 Tehát most az én első, a második és a harmadik sor tényleges kódot, hogy mi történik itt? 815 00:51:51,360 --> 00:51:53,380 Nézzük felhívni a többi kép. 816 00:51:53,380 --> 00:51:56,980 Tmp olyan, mint volt hétfőn. Semmi különleges tmp. 817 00:51:56,980 --> 00:52:03,060 Ez csak egy helyi 32 bites változó, és belül, hogy én vagyok látszólag tárolása értékét * a. 818 00:52:03,060 --> 00:52:08,580 Most, ha csak azt mondta tmp = a, mit tettem ide? >> [Hallgató] 123. 819 00:52:08,580 --> 00:52:10,370 123. De ez nem az, amit csinálok. 820 00:52:10,370 --> 00:52:13,670 Azt mondom tmp = * a. Csillagok úton menni. 821 00:52:13,670 --> 00:52:19,370 Tehát itt van egy, 123. Hogyan menjek oda? Úgy tenni, mintha van egy nyíl. 822 00:52:19,370 --> 00:52:24,460 Nos, itt van, 1. Szóval mi lesz tárolva tmp, látszólag? Csak 1. 823 00:52:24,460 --> 00:52:29,620 Más szóval, a tmp * a * eszköze menj a címet jelenleg egy, 824 00:52:29,620 --> 00:52:31,320 ami látszólag 123. 825 00:52:31,320 --> 00:52:33,910 >> Oké, itt vagyunk a helyszínen 123, látom az 1-es szám, 826 00:52:33,910 --> 00:52:35,670 így fogom fel a 1-es szám van. 827 00:52:35,670 --> 00:52:39,020 Most mit tegyek sorban 2, * a * b =? 828 00:52:39,020 --> 00:52:44,570 Ez egy kicsit nagyobb szerepet, mert most mi is az? Ez 123. 829 00:52:44,570 --> 00:52:50,220 Szóval * a, ahol? Ott, ahol voltam. Akkor menj oda. Oké. 830 00:52:50,220 --> 00:52:53,420 Nos, végül, és végül ez kezd értelme, remélhetőleg, 831 00:52:53,420 --> 00:53:00,280 * B: a mi van b? 124. Szóval kell mennem oda, amely 2. 832 00:53:00,280 --> 00:53:03,430 Szóval, mit tettem, ahol? 833 00:53:03,430 --> 00:53:10,100 2 megy itt, mert * b * bemegy a. Így fogok tenni. 834 00:53:10,100 --> 00:53:13,120 És akkor már látni, talán, hogy mi vagyunk annyira közelebb 835 00:53:13,120 --> 00:53:17,710 megoldása ezt a hülye, egyszerű problémát helyesen az első alkalommal 836 00:53:17,710 --> 00:53:20,920 mert most még mindig van egy emléke, mi volt az x, 837 00:53:20,920 --> 00:53:23,230 van 2 példányban, igaz, az y, 838 00:53:23,230 --> 00:53:25,850 de 3 sor most azt mondja, * b. 839 00:53:25,850 --> 00:53:31,080 Tehát itt b. * B úton menni. Szóval hol van helye 124? 840 00:53:31,080 --> 00:53:35,560 Ez látszólag van. Szóval mit tettem ide? Nyilvánvaló, tmp. 841 00:53:35,560 --> 00:53:39,600 Szóval most ezt. Szóval itt van 1 és 2 itt. 842 00:53:39,600 --> 00:53:43,560 És most mi van erre, a 123, a 124 és az 1? 843 00:53:43,560 --> 00:53:47,910 Amint csere visszatér, ez a memória jó, mint vereség 844 00:53:47,910 --> 00:53:51,070 mert amint swap-visszatér, az operációs rendszer 845 00:53:51,070 --> 00:53:54,190 szabadon használhatja, hogy a memória a jövőben újra. 846 00:53:54,190 --> 00:53:58,870 Egyetlen főbb memóriájába alján ezt az úgynevezett verem stick körül. 847 00:53:58,870 --> 00:54:01,470 >> És így végre most már egy működő változat. 848 00:54:01,470 --> 00:54:06,310 Hadd menjek be swap.c, és vegyük észre a következő. 849 00:54:06,310 --> 00:54:11,280 A tetején a program, amit megváltozott a prototípus is int * a és int * b. 850 00:54:11,280 --> 00:54:15,000 Tehát az egyetlen dolog, amit változott, hogy menjen a vörös, ami rossz volt, a zöld, ami jó, 851 00:54:15,000 --> 00:54:17,350 az Én hozzá ezeket a csillagokat ma. 852 00:54:17,350 --> 00:54:21,520 De aztán meg itt a csereügylet kellett másolás, beillesztés, mi csak a dián. 853 00:54:21,520 --> 00:54:24,140 Nekem van egy csillag itt, csillag itt -, amely megfelel a prototípus - 854 00:54:24,140 --> 00:54:27,930 majd az összes ezeket a dolgokat most csillagos kivéve tmp 855 00:54:27,930 --> 00:54:30,680 mert a ideiglenes változó, nincs semmi új nincs. 856 00:54:30,680 --> 00:54:33,040 Csak kell az átmeneti tárolás int. 857 00:54:33,040 --> 00:54:34,820 Tehát nem kell a csillag ott. 858 00:54:34,820 --> 00:54:39,310 Már csak be kell a csillag, hogy mi is át ezt a fajta önkényes határ 859 00:54:39,310 --> 00:54:42,900 között 2 kép a számítógép memóriájában. 860 00:54:42,900 --> 00:54:45,630 De egy utolsó dolog, amit meg kell változtatni, és lehet, hogy megpillantott már. 861 00:54:45,630 --> 00:54:48,810 Milyen más vonal nyilvánvalóan más most? >> [Hallgató] & x. 862 00:54:48,810 --> 00:54:53,270 >> Igen, 25 az utolsó sort úgy kell változtatni, hogy ez működik. 863 00:54:53,270 --> 00:54:58,360 Egy héttel ezelőtt, és még hétfőn 25 vezetéken nézett ki, mint ez, csere x és y, 864 00:54:58,360 --> 00:55:02,020 és ez csak törve, mert ha azt mondod, swap (x, y) 865 00:55:02,020 --> 00:55:05,660 adsz másolatait x és y, hogy a csere, akkor csinálja a dolgot, 866 00:55:05,660 --> 00:55:09,080 de te sosem változik x és y is. 867 00:55:09,080 --> 00:55:12,880 Tehát akkor is, ha még soha nem láttam ezt a karaktert, mielőtt a jel a kódot, 868 00:55:12,880 --> 00:55:15,860 Csak egy tipp. Mit csinál a jelet csinál, látszólag? 869 00:55:15,860 --> 00:55:17,890 [Hallgató] úgy a címet. >> Azon a címet. 870 00:55:17,890 --> 00:55:21,160 Tehát a jel mondja nekem a címét x. 871 00:55:21,160 --> 00:55:25,590 Ki tudja, hol van? Előfordul, hogy 123. Nem érdekel. Csak add ide a címét x. 872 00:55:25,590 --> 00:55:28,340 És y jelenti nekem a címét y. 873 00:55:28,340 --> 00:55:34,450 És ezen a ponton a történet tökéletesen összhangban van a képen is rajzolt egy pillanattal ezelőtt. 874 00:55:34,450 --> 00:55:38,310 >> Szóval Bevallom mutatók, természetesen számomra, amikor először kezdett tanulni ezt, 875 00:55:38,310 --> 00:55:40,570 volt, határozottan az egyik legnehezebb dolog, hogy betakar a fejemben körül. 876 00:55:40,570 --> 00:55:43,760 De észre, különösen tartjuk játszani ezeket a dolgokat, 877 00:55:43,760 --> 00:55:48,030 ha lebontani ezeket szuper egyszerű fajta intellektuálisan érdektelen problémák 878 00:55:48,030 --> 00:55:52,270 csupán mozgó számok körül, a válasz a sok zavart mutató 879 00:55:52,270 --> 00:55:56,590 Tényleg lehet ezekből a nagyon alapvető mechanika. 880 00:55:56,590 --> 00:55:59,070 Itt a cím. Menj oda a csillagot. 881 00:55:59,070 --> 00:56:03,830 Vagy fordítva, itt egy jelet. Kitalálni, mi a cím valójában. 882 00:56:03,830 --> 00:56:06,270 Rendben van. 883 00:56:06,270 --> 00:56:09,000 Szóval, ha ez minden a memória jön? 884 00:56:09,000 --> 00:56:12,360 Már húzott ehhez a képhez egy párszor, és azt folyamatosan ígéretes fogunk visszatérni rá, 885 00:56:12,360 --> 00:56:14,920 de itt van képviselete a számítógép memóriájában 886 00:56:14,920 --> 00:56:17,420 ez egy kicsit több, mint a táblán jelzett itt. 887 00:56:17,420 --> 00:56:21,590 A szöveg részes csúcson képviseli, amit tekintetében a program? 888 00:56:21,590 --> 00:56:26,090 [Hallhatatlan diák válasza] >> Tessék? Mondd újra. 889 00:56:26,090 --> 00:56:28,660 [Hallgató] A tényleges program. >> A tényleges program. 890 00:56:28,660 --> 00:56:32,430 >> Tehát a 0s és 1s hogy már összeállított kiírása után a C kódot, majd futás csenget 891 00:56:32,430 --> 00:56:35,910 és a termelő 0s és 1s végül egyre gyűrve ott a memóriában 892 00:56:35,910 --> 00:56:38,570 mert ha duplán kattint egy ikon a Mac vagy PC 893 00:56:38,570 --> 00:56:43,010 vagy futtatni egy parancsot, mint a Mario az Ön gyors, a 0s és 1s lemezről 894 00:56:43,010 --> 00:56:45,700 kap betöltődik a memóriába, így a számítógép képes manipulálni őket 895 00:56:45,700 --> 00:56:47,540 és végrehajtja azokat gyorsabban. 896 00:56:47,540 --> 00:56:50,880 Szóval inicializált adatok és inicializált adat, akkor nem beszélünk sokat ezekről, 897 00:56:50,880 --> 00:56:52,420 de ezek csak globális változók. 898 00:56:52,420 --> 00:56:54,710 Inicializált jelenti, globális változók, hogy adott értékek; 899 00:56:54,710 --> 00:56:59,300 inicializált globális változók jelenti, hogy még nem ad értékeket. 900 00:56:59,300 --> 00:57:01,900 Aztán ott van ezeket a környezeti változókat, amelyek leszek teljesen hullám kezem, 901 00:57:01,900 --> 00:57:04,860 de ott vannak, és hogy tárolja dolgok, mint például a felhasználó nevét 902 00:57:04,860 --> 00:57:08,090 és más fajta alacsonyabb szintű részletek. 903 00:57:08,090 --> 00:57:12,880 De juiciest darab a memória elrendezését ez a dolog az úgynevezett stack és a heap. 904 00:57:12,880 --> 00:57:17,470 A verem újra, hogy egyértelmű, az a memória, ami használni, amikor függvények, 905 00:57:17,470 --> 00:57:19,710 ha vannak lokális változók 906 00:57:19,710 --> 00:57:22,120 és ha vannak paraméterek továbbadása körül. 907 00:57:22,120 --> 00:57:24,490 Minden, ami történik a veremben. 908 00:57:24,490 --> 00:57:29,570 A kupac még nem beszéltünk róla, de hogy egy kitalálni, aki használja a kupac. 909 00:57:31,120 --> 00:57:32,690 Csak egy másik darab memória. 910 00:57:32,690 --> 00:57:36,620 Előfordul, hogy Megemlítendő a tetején, de ez egy tetszőleges képi egyezmény. 911 00:57:36,620 --> 00:57:41,670 Ki látszólag használ memóriát a heap hetekig? 912 00:57:41,670 --> 00:57:44,830 Ez technikailag úgy, de közvetett módon. >> [Hallgató] getString. 913 00:57:44,830 --> 00:57:47,950 GetString és malloc. Szóval itt van az alapvető különbség. 914 00:57:47,950 --> 00:57:51,300 >> Tudod, hogy az elmúlt hetekben, hogy ha szüksége van memória, csak, hogy egy változót. 915 00:57:51,300 --> 00:57:54,560 Ha szüksége van sok memória, állapítsa meg egy sor jogot belsejében a funkció. 916 00:57:54,560 --> 00:57:59,620 De a probléma általunk vezetett szemben az, ha kijelentem változókat helyi belső funkciók, 917 00:57:59,620 --> 00:58:05,340 amint a függvény, hogy mi történik a memória és azokat a változókat? 918 00:58:05,340 --> 00:58:09,620 Csak valami, hogy ez már nem a tiéd, ugye? Csak eltűnik fajta fogalmilag. 919 00:58:09,620 --> 00:58:13,950 Még mindig ott fizikailag, természetesen, de ez már nem a jobb használni. 920 00:58:13,950 --> 00:58:17,160 Ez nyilvánvalóan problematikus, ha azt szeretné, hogy írjon funkciók életben 921 00:58:17,160 --> 00:58:20,440 hogy valóban memóriát, és nem adja vissza azonnal. 922 00:58:20,440 --> 00:58:24,180 Case pont: getString célja az életben, hogy fogalmam sincs, előzetesen 923 00:58:24,180 --> 00:58:26,390 mekkora egy string fogok, hogy írja meg a billentyűzetet, 924 00:58:26,390 --> 00:58:30,390 de van, hogy képes legyen a memóriát, hogy tartsa David vagy helló 925 00:58:30,390 --> 00:58:32,860 vagy egy egész esszé, hogy a felhasználó esetleg gépelt be 926 00:58:32,860 --> 00:58:35,280 Szóval getString már használja malloc. 927 00:58:35,280 --> 00:58:38,910 Malloc ezért kell használnia nem verem; 928 00:58:38,910 --> 00:58:40,770 helyette ez használatával ez a dolog az úgynevezett kupac. 929 00:58:40,770 --> 00:58:44,430 Nincs semmi más, ami a memóriát. Ez nem gyorsabb vagy lassabb, vagy ilyesmi. 930 00:58:44,430 --> 00:58:46,570 Ez csak fizikailag egy másik helyre. 931 00:58:46,570 --> 00:58:50,120 >> De a szabály az, hogy a memória, ami kiosztott a heap 932 00:58:50,120 --> 00:58:56,180 soha nem fog elvenni, amíg a hívás -, hogy egy találgatás - ingyenes. 933 00:58:56,180 --> 00:59:00,510 Ezzel szemben, minden memória kérsz a verem mellett csak nyilvánításáról tömb 934 00:59:00,510 --> 00:59:03,320 vagy nyilvánító változó mintha csináltam a héten 935 00:59:03,320 --> 00:59:05,640 hogy alapértelmezés szerint végül a verem. 936 00:59:05,640 --> 00:59:09,550 És ez remekül működik 90%-át az idő, de ezek ritkábbak alkalommal 937 00:59:09,550 --> 00:59:12,470 ahová a memóriát és tartsa körül, 938 00:59:12,470 --> 00:59:14,730 akkor kell használni a funkciót, mint a malloc. 939 00:59:14,730 --> 00:59:19,370 Vagy már használják egy függvényt, mint getString, ami használ malloc. 940 00:59:19,370 --> 00:59:23,300 Lássuk, ha ez esetleg lebontják, és akkor fog egy kandikál Muci. 941 00:59:23,300 --> 00:59:25,820 Majd gyere vissza, hogy a jövőben. 942 00:59:25,820 --> 00:59:29,270 Itt van egy szuper egyszerű program, hogy az első 2 sor mit csinál? 943 00:59:29,270 --> 00:59:33,460 In English, mit ezek első 2 sornyi kódot do belsejében fő? 944 00:59:33,460 --> 00:59:35,600 [Hallhatatlan hallgatói válasz] 945 00:59:35,600 --> 00:59:37,880 Óvatosan. Nem adja meg a címet az x vagy y. 946 00:59:37,880 --> 00:59:41,840 [Hallgató] ad mutatókat ints. >> Jó. Adj nekem 2 mutatókat egészek. 947 00:59:41,840 --> 00:59:45,130 Más szóval, add nekem 2 darabokat memória tartom rajz ma, 948 00:59:45,130 --> 00:59:46,950 bár én törlik most, mint négyzetek. 949 00:59:46,950 --> 00:59:50,000 Adj nekem 2 darabokat a memória, az egyik neve x, az egyik neve y - 950 00:59:50,000 --> 00:59:54,320 korábban felhívtam őket s és t -, és mi az a fajta, hogy a darab a memória? 951 00:59:54,320 --> 00:59:57,160 Ez lesz tárolni egy címet. 952 00:59:57,160 --> 00:59:59,110 Ez a típusú int *. 953 00:59:59,110 --> 01:00:01,630 >> Így a cím egy int-utóbb élni x, 954 01:00:01,630 --> 01:00:03,860 a cím egy int-utóbb élni y, 955 01:00:03,860 --> 01:00:08,460 de kezdetben, mi van benne az x és y? Ki tudja? Garbage értékeket. 956 01:00:08,460 --> 01:00:10,180 Ennek semmi köze a mutatók. 957 01:00:10,180 --> 01:00:12,720 Ha nem tesz valamit ott, ki tudja, mi van valójában ott? 958 01:00:12,720 --> 01:00:18,950 Most, x. Mi történik itt? Ez legális most, mert x egy mutató. Ez egy int *. 959 01:00:18,950 --> 01:00:21,870 Szóval ez azt jelenti, hogy meg tudja fogalmazni az x címét néhány darabja a memóriát. 960 01:00:21,870 --> 01:00:25,120 Mit jelent a malloc vissza? Tökéletes, visszatér címek, 961 01:00:25,120 --> 01:00:28,510 a címe az első byte egy egész darab memória. 962 01:00:28,510 --> 01:00:31,140 Hány bájt van ez látszólag elosztására, például a készülék? 963 01:00:31,140 --> 01:00:33,510 Mi a mérete int? 4. 964 01:00:33,510 --> 01:00:36,600 Ha úgy gondolja, vissza hét 1, nem szuper fontos, hogy mindig emlékezni, hogy a 965 01:00:36,600 --> 01:00:38,870 de ebben az esetben ez hasznos lehet tudni, 4 bájt. 966 01:00:38,870 --> 01:00:41,770 Szóval ez a felosztása a heap 4 byte 967 01:00:41,770 --> 01:00:46,110 és ez visszatérő a címe az első nekem önkényesen. 968 01:00:46,110 --> 01:00:47,700 Nos, mi x csinál? 969 01:00:47,700 --> 01:00:52,200 A * x = 42 mit csinál? 970 01:00:52,200 --> 01:00:57,150 Ha ezen a ponton a történet van x, ami úgy néz ki, mint ez némi szemetet érték, 971 01:00:57,150 --> 01:01:04,120 ez most y némi szemét érték, most 3-as vonal, amit kiosztott 4 byte. 972 01:01:04,120 --> 01:01:06,950 Ez a kép lényegében úgy néz ki, mint ez. 973 01:01:06,950 --> 01:01:12,010 Vagy még pontosabban, ha ez az önkényes címe 123, ez az, amit a mi történetünk így néz ki. 974 01:01:12,010 --> 01:01:23,940 * X = 42 most mit jelent? Ez azt jelenti, megy a 123 címre, és tegye a szám 42 van. 975 01:01:23,940 --> 01:01:26,220 Nem kell felhívni ezeket a sorokat, mert mi nem csinálom szálakat. 976 01:01:26,220 --> 01:01:29,480 >> Kellett volna, csak írt, mint ez, és csak demonstrációs kedvéért, 977 01:01:29,480 --> 01:01:33,240 42, mint egy int típusú vesz fel egy csomó hely, 4 bájt. 978 01:01:33,240 --> 01:01:35,960 Szóval ez az, mi történt ott, de van egy kis gond van. 979 01:01:35,960 --> 01:01:40,580 * Y = 13. Mi fog történni itt? 980 01:01:40,580 --> 01:01:46,470 A probléma * y a mi egyszerűsített világban, csak azt jelenti, megy a címet y. 981 01:01:46,470 --> 01:01:48,590 Mi van y? Ez valami szemetet értéket. 982 01:01:48,590 --> 01:01:53,150 Tehát tegyük fel, hogy ez a szemét az érték 5551212, valami őrült ilyesmi. 983 01:01:53,150 --> 01:01:56,750 * Y úton megy, hogy foglalkozzon 5551212. 984 01:01:56,750 --> 01:02:00,450 Ez olyan, mint itt. Nem létezik, például. 985 01:02:00,450 --> 01:02:05,310 Szóval * y jelentkeznek 13 segítségével próbálom felhívni 13 itt. Ez nem létezik. 986 01:02:05,310 --> 01:02:08,790 Már meghaladta a szegmens a táblára. Mit kapok? 987 01:02:08,790 --> 01:02:14,930 Ez a rejtélyes üzenetet szegmentációs hiba, mert próbálok tenni a memóriában 988 01:02:14,930 --> 01:02:19,470 érték, mint 13 olyan helyen, amely nem létezik. 989 01:02:19,470 --> 01:02:23,900 A többi program működhet rendben van, de addig, amíg ezen a ponton nem. 990 01:02:23,900 --> 01:02:25,350 Így próbáljuk elmondani ezt a történetet. 991 01:02:25,350 --> 01:02:27,830 Majd gyere vissza, hogy egyszer mi már beszéltünk hex. 992 01:02:27,830 --> 01:02:30,290 Térjünk vissza erre, és arra, ezt a dolgot nevezett Muci, 993 01:02:30,290 --> 01:02:33,710 amely visszahívás a Stanford professzora ül otthon játszó claymation, 994 01:02:33,710 --> 01:02:36,380 hogy elmondja a történetet, hogy pontosan ugyanazt a programot. 995 01:02:36,380 --> 01:02:40,580 Ez csak kb 3 perc hosszú. Itt van Muci. 996 01:02:40,580 --> 01:02:45,030 [Hím hangszóró a videó] Hé Muci, kelj fel. Itt az ideje a mutató fun. 997 01:02:45,030 --> 01:02:50,080 [Muci] Mi ez? Tudjon meg többet a mutatók? Oh, nagyszerű! 998 01:02:50,080 --> 01:02:53,700 [Férfi hangszóró] Nos, az induláshoz, azt hiszem, szükségünk lesz egy pár mutatók. 999 01:02:53,700 --> 01:02:57,890 >> [Muci] Oké. Ez a kód lefoglal 2 mutatók, amelyek rámutatnak egészek. 1000 01:02:57,890 --> 01:03:02,220 [Férfi hangszóró] Oké. Nos, látom a 2 mutató, de nem úgy tűnik, hogy mutat valamit. 1001 01:03:02,220 --> 01:03:05,550 [Muci] Ez igaz. Kezdetben mutatók nem mutatnak semmit. 1002 01:03:05,550 --> 01:03:09,270 A dolgokat, mutatnak nevezik pointees, és beállítása őket egy külön lépésben. 1003 01:03:09,270 --> 01:03:12,330 [Férfi hangszóró] Ó, igaz, igaz. Tudtam. A pointees külön. 1004 01:03:12,330 --> 01:03:15,630 Ööö, szóval hogyan osztják a pointee? 1005 01:03:15,630 --> 01:03:21,510 [Muci] Oké. Ez a kód lefoglal egy új integer pointee, és ez a rész x mutasson rá. 1006 01:03:21,510 --> 01:03:23,500 [Férfi hangszóró] Hé, ez jobban néz ki. 1007 01:03:23,500 --> 01:03:26,030 Tehát, hogy csinál valamit. >> [Muci] Oké. 1008 01:03:26,030 --> 01:03:30,300 Én majd dereference a mutatót x tárolni a számot 42 bele pointee. 1009 01:03:30,300 --> 01:03:34,410 Mert ez a trükk lesz szükségem a varázspálcával a dereferencing. 1010 01:03:34,410 --> 01:03:38,610 [Férfi hangszóró] A varázspálca a dereferencing? Ez nagyszerű. 1011 01:03:38,610 --> 01:03:44,230 [Muci] Ez az, amit a kód néz ki. Én csak állítsa be a számot, és ... [Pattogó hang] 1012 01:03:44,230 --> 01:03:46,100 [Férfi hangszóró] Hé nézd, ott megy. 1013 01:03:46,100 --> 01:03:50,990 Így csinál egy dereference az x követi a nyilat, hogy hozzáférjen az pointee, 1014 01:03:50,990 --> 01:03:53,230 ebben az esetben tárolni 42 ott. 1015 01:03:53,230 --> 01:03:57,630 Hé, próbálja meg, hogy tárolja a 13-as szám a másik mutató, y. 1016 01:03:57,630 --> 01:04:03,250 [Muci] Oké. Én csak megy át ide, y, és hogy a 13-as szám létrehozott 1017 01:04:03,250 --> 01:04:08,360 majd megteszi a pálcát a dereferencing és csak ... [Zümmögő hang] Whoa! 1018 01:04:08,360 --> 01:04:10,980 [Férfi hangszóró] Ó hé, ez nem működik. 1019 01:04:10,980 --> 01:04:14,870 >> Mondd, Muci, nem hiszem, dereferencing y ez egy jó ötlet 1020 01:04:14,870 --> 01:04:17,880 mivel létrehozásának pointee külön lépés 1021 01:04:17,880 --> 01:04:19,850 és nem hiszem, hogy valaha is tette. 1022 01:04:19,850 --> 01:04:21,770 [Muci] Hmm, jó érv. 1023 01:04:21,770 --> 01:04:26,640 [Férfi hangszóró] Igen. Mi kiosztott az egérmutatót y de soha állítsa, hogy pont egy pointee. 1024 01:04:26,640 --> 01:04:28,780 [Muci] Hmm, nagyon figyelmes. 1025 01:04:28,780 --> 01:04:30,690 [Férfi hangszóró] Hé, te jól nézel ki ott, Muci. 1026 01:04:30,690 --> 01:04:34,160 Meg tudja javítani úgy, hogy y pontokat ugyanazon pointee mint x? >> [Muci] Persze. 1027 01:04:34,160 --> 01:04:37,100 Fogom használni a varázspálcát a mutató feladat. 1028 01:04:37,100 --> 01:04:39,070 [Férfi hangszóró], hogy lesz a probléma, mint korábban? 1029 01:04:39,070 --> 01:04:40,840 [Muci] Nem, ez nem érinti a pointees. 1030 01:04:40,840 --> 01:04:44,780 Csak változik 1 pointer mutasson ugyanaz, mint a másik. [Pattogó hang] 1031 01:04:44,780 --> 01:04:48,570 [Férfi hangszóró] Oh, értem. Most y pont ugyanazon a helyen, mint x. 1032 01:04:48,570 --> 01:04:51,140 Szóval várj. Most y rögzített. Ez egy pointee. 1033 01:04:51,140 --> 01:04:54,520 Így próbálja meg a pálcát a dereferencing újra elküldeni a 13 feletti. 1034 01:04:54,520 --> 01:04:58,130 [Muci] Uh, oké. Itt megy. [Pattogó hang] 1035 01:04:58,130 --> 01:05:01,250 [Férfi hangszóró] Hé, ezt nézd meg. Most dereferencing működik y. 1036 01:05:01,250 --> 01:05:05,200 És mivel a mutató a megosztás, hogy az egyik pointee, mindketten lásd a 13. 1037 01:05:05,200 --> 01:05:06,910 [Muci] Igen, megosztását. Mindegy. 1038 01:05:06,910 --> 01:05:08,880 >> Így fogunk felcserélődnek most? 1039 01:05:08,880 --> 01:05:11,420 [Férfi hangszóró] Ó nézd, kifogytunk az időből. >> [Muci] De - 1040 01:05:11,420 --> 01:05:13,880 [Férfi hangszóró] Ne feledd, a 3 mutató szabályokat. 1041 01:05:13,880 --> 01:05:18,630 Száma 1, az alapvető struktúra, hogy van egy mutatót, és azt hangsúlyozza át a pointee. 1042 01:05:18,630 --> 01:05:23,120 De a mutató és pointee külön, és a közös hiba, hogy hozzon létre egy mutatót 1043 01:05:23,120 --> 01:05:25,680 hanem az, hogy elfelejtette, hogy ez egy pointee. 1044 01:05:25,680 --> 01:05:29,580 Szám 2, mutató dereferencing kezdődik a mutatót, és követi a nyíl felett 1045 01:05:29,580 --> 01:05:31,060 eléréséhez a pointee. 1046 01:05:31,060 --> 01:05:34,340 Mint azt mindannyian tudjuk, ez csak akkor működik, ha van egy pointee, 1047 01:05:34,340 --> 01:05:36,460 milyen kap vissza az 1-es szám uralkodni. 1048 01:05:36,460 --> 01:05:39,870 Szám 3, mutató feladat vesz egy mutató, és megváltoztatja 1049 01:05:39,870 --> 01:05:42,390 hogy pont ugyanazt a pointee egy másik mutatót. 1050 01:05:42,390 --> 01:05:45,890 Szóval, miután a feladat, a 2 mutatókat fog mutatni az azonos pointee. 1051 01:05:45,890 --> 01:05:47,800 Néha hívják megosztását. 1052 01:05:47,800 --> 01:05:50,910 >> És ez minden van rá igazán. Bye-bye most. 1053 01:05:50,910 --> 01:05:55,840 Ez Muci. Ez CS50. Találkozunk jövő héten. [Taps] 1054 01:05:55,840 --> 01:05:59,000 >> [CS50.TV]