1 00:00:00,000 --> 00:00:01,110 >> [MUZYKA GRA] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 David J. MALAN: Wszystko w porządku. 4 00:00:11,650 --> 00:00:15,610 Jest CS50, a to jest koniec czwartego tygodnia. 5 00:00:15,610 --> 00:00:19,420 , A jednym z tematów dzisiejszego jest to, że od kryminalistyki cyfrowej, 6 00:00:19,420 --> 00:00:20,989 sztuka odzyskiwania informacji. 7 00:00:20,989 --> 00:00:22,780 I rzeczywiście, chociaż jesteś w środku 8 00:00:22,780 --> 00:00:25,070 teraz Pokoju w trzech i Breakout, w przyszłym tygodniu, 9 00:00:25,070 --> 00:00:27,880 Nacisk zostanie położony na właśnie domeny. 10 00:00:27,880 --> 00:00:30,686 >> Tak więc jeden z najfajniejszych miejsc pracy, jakie kiedykolwiek miał wrócił do studia, 11 00:00:30,686 --> 00:00:33,560 kiedy byłem w pracy na lokalnym Middlesex County prokuratora okręgowego 12 00:00:33,560 --> 00:00:34,950 biuro, robi kryminalistyki pracy. 13 00:00:34,950 --> 00:00:37,450 Więc zasadniczo, Massachusetts Policji Państwowej, przy okazji, 14 00:00:37,450 --> 00:00:40,100 podczas pracy na przypadkach byłoby przynieść rzeczy jak dyski twarde 15 00:00:40,100 --> 00:00:42,185 i dyskietek i karty pamięci i podobne. 16 00:00:42,185 --> 00:00:44,060 A oni je przekazać do mnie i mojego mentora, 17 00:00:44,060 --> 00:00:48,070 a naszym celem było znalezienie dowodów, jeżeli jest jakiś, z tych nośników. 18 00:00:48,070 --> 00:00:50,700 Teraz możesz widziałem przebłyski z tego świata medycyny sądowej 19 00:00:50,700 --> 00:00:53,000 w mediach, telewizji i filmów. 20 00:00:53,000 --> 00:00:55,730 Ale praca nie miałem, i Śmiem twierdzić, że świat, 21 00:00:55,730 --> 00:00:57,550 nie jest całkiem jak chcesz go zobaczyć. 22 00:00:57,550 --> 00:01:00,794 Rzućmy okiem na to, co Prawdopodobnie widziałeś. 23 00:01:00,794 --> 00:01:01,460 [ODTWARZANIE] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 Teraz zajmijmy się przyjrzeć Ciebie. 26 00:01:05,380 --> 00:01:06,850 >> [MUZYKA GRA] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> Czekaj go. 29 00:01:12,932 --> 00:01:13,657 Uruchom to z powrotem. 30 00:01:13,657 --> 00:01:14,733 >> Poczekaj chwilkę. 31 00:01:14,733 --> 00:01:15,233 Idź w prawo. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -Tam. 34 00:01:16,870 --> 00:01:17,369 Zamrażać, że. 35 00:01:17,369 --> 00:01:17,930 -full Ekranem. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 Zamrażać, że. 38 00:01:18,875 --> 00:01:20,160 Dokręcić się na tym, dobrze? 39 00:01:20,160 --> 00:01:22,126 >> -vector Się na tym, facet przez tylne koło. 40 00:01:22,126 --> 00:01:24,435 >> -zoom Się tutaj, na tym miejscu. 41 00:01:24,435 --> 00:01:28,580 >> -Z Odpowiedniego sprzętu, obraz może być powiększony i naostrzone. 42 00:01:28,580 --> 00:01:29,330 >> Co to jest? 43 00:01:29,330 --> 00:01:30,780 >> -To Programu poprawy. 44 00:01:30,780 --> 00:01:32,170 >> -Możesz Jasne, że się każdy? 45 00:01:32,170 --> 00:01:33,070 >> Nie wiem. 46 00:01:33,070 --> 00:01:34,150 Niech jej ulepszenie. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance Sekcja A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 I wzmocniona szczegółów, i-- 50 00:01:38,562 --> 00:01:40,020 -Chyba Nie wystarczy zwiększyć. 51 00:01:40,020 --> 00:01:40,976 Zwolnić go do mojego ekranu. 52 00:01:40,976 --> 00:01:42,559 >> -I Wzmocnione odbicie w jej oku. 53 00:01:42,559 --> 00:01:44,322 -Niech Prowadzony przez ten wzmocnienie wideo. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar Można poprawić to? 55 00:01:45,210 --> 00:01:45,710 >> -Hang Dalej. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -Nigdy Pracuje w tej refleksji. 58 00:01:49,458 --> 00:01:50,402 >> -Tu Czyjeś odbicie. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 -Tu Odbiciem twarzy mężczyzny. 61 00:01:52,870 --> 00:01:53,694 >> -The Refleksji! 62 00:01:53,694 --> 00:01:54,610 -Tu Refleksji. 63 00:01:54,610 --> 00:01:55,880 -zoom Się na lustrze. 64 00:01:55,880 --> 00:01:57,860 Widać odbicie. 65 00:01:57,860 --> 00:01:59,630 >> -Możesz Poprawić wizerunek stąd? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 -Możesz Poprawić go? 68 00:02:01,210 --> 00:02:02,190 -Możesz Poprawić go? 69 00:02:02,190 --> 00:02:03,066 -Może Możemy poprawić to? 70 00:02:03,066 --> 00:02:03,898 -Możesz Poprawić go? 71 00:02:03,898 --> 00:02:04,740 Czekaj na sekundę. 72 00:02:04,740 --> 00:02:05,281 Będę poprawić. 73 00:02:05,281 --> 00:02:06,470 -zoom Się na drzwiach. 74 00:02:06,470 --> 00:02:06,970 -Times 10. 75 00:02:06,970 --> 00:02:08,009 -zoom. 76 00:02:08,009 --> 00:02:08,509 -move W. 77 00:02:08,509 --> 00:02:09,340 -Więcej. 78 00:02:09,340 --> 00:02:10,094 Poczekaj, zatrzymaj. 79 00:02:10,094 --> 00:02:10,750 Przestań. 80 00:02:10,750 --> 00:02:11,250 -Pause Go. 81 00:02:11,250 --> 00:02:13,542 -Rotate Nam 75 stopni wokół pionowej, proszę. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> Przestań. 84 00:02:16,127 --> 00:02:19,330 Wrócić do części o drzwi. 85 00:02:19,330 --> 00:02:21,420 >> -Masz Jest wzmacniacz obrazu, który może bitmap? 86 00:02:21,420 --> 00:02:24,420 >> -Może Możemy użyć Pradeep Singh Sposób, aby zobaczyć w oknach. 87 00:02:24,420 --> 00:02:25,902 >> -The Oprogramowania stanie techniki. 88 00:02:25,902 --> 00:02:26,866 >> -The Wartość własna jest wyłączony. 89 00:02:26,866 --> 00:02:29,758 >> -Z Prawa Połączenie algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> -On Podjęte oświetlenie algorytmy do następnego poziomu, 91 00:02:32,168 --> 00:02:34,110 i można ich używać do zwiększenia zdjecia. 92 00:02:34,110 --> 00:02:36,840 >> -lock Na i powiększyć osi z. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 Wzmocnienia. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 -Freeze I wzmocnienia. 97 00:02:40,070 --> 00:02:43,420 [KONIEC ODTWARZANIE] 98 00:02:43,420 --> 00:02:45,830 David J. MALAN: To są wszystkie słowa, ale nie były one 99 00:02:45,830 --> 00:02:47,870 używane w zdaniach poprawnie. 100 00:02:47,870 --> 00:02:52,370 I rzeczywiście, w przyszłości, za każdym razem, proszę, słyszysz jak ktoś mówi słowo, 101 00:02:52,370 --> 00:02:54,250 "Wzmocnienia", chichot tylko trochę. 102 00:02:54,250 --> 00:02:57,190 Ponieważ przy próbie zwiększenia, na przykład, to jest to, co się dzieje. 103 00:02:57,190 --> 00:02:58,580 >> Więc tutaj jest wspaniałe zdjęcia. 104 00:02:58,580 --> 00:02:59,720 To CS50 własnej Daven. 105 00:02:59,720 --> 00:03:03,740 I załóżmy, że chcemy skupić się na tym błyskiem w oku, 106 00:03:03,740 --> 00:03:05,870 lub odbicie zły facet, który był wyraźnie 107 00:03:05,870 --> 00:03:07,820 rejestrowany przez kamerę bezpieczeństwa. 108 00:03:07,820 --> 00:03:10,330 To jest to, co się dzieje, gdy można powiększyć obraz, który 109 00:03:10,330 --> 00:03:14,060 zawiera tylko skończoną bitów związanych z nim. 110 00:03:14,060 --> 00:03:15,420 >> To jest to, co dostajesz. 111 00:03:15,420 --> 00:03:19,190 I rzeczywiście, jest w oku Daven jest tylko cztery, może sześć pikseli 112 00:03:19,190 --> 00:03:22,110 że komponować dokładnie, co została połyskującymi tam. 113 00:03:22,110 --> 00:03:25,890 Więc Problem Set ostatecznie mają cztery odkrywania tego świata, szczególnie 114 00:03:25,890 --> 00:03:28,090 coś z natury nazywamy plik I / O, w którym 115 00:03:28,090 --> 00:03:31,000 I / O jest tylko fantazyjny sposób mówiąc, wejście i wyjście. 116 00:03:31,000 --> 00:03:34,280 >> Tak więc do tej pory wszystkie interakcje mieliśmy z komputerem 117 00:03:34,280 --> 00:03:36,770 były w dużej mierze z Twojego Klawiatura i ekran, 118 00:03:36,770 --> 00:03:40,770 ale nie tyle z dysku twardego, lub zapisywania plików, poza te, które Ci 119 00:03:40,770 --> 00:03:41,620 samemu napisać. 120 00:03:41,620 --> 00:03:44,570 Twoje dotychczasowe mają programy nie zostały tworzenie i zapisywanie, 121 00:03:44,570 --> 00:03:46,270 i aktualizacji własnych plików. 122 00:03:46,270 --> 00:03:47,150 >> Cóż, to, co znajduje się plik? 123 00:03:47,150 --> 00:03:48,105 Cóż, coś w formacie JPEG. 124 00:03:48,105 --> 00:03:50,520 To jest obraz, który mógłby mają lub przesłać na Facebooku, 125 00:03:50,520 --> 00:03:51,690 lub zobaczyć nigdzie w internecie. 126 00:03:51,690 --> 00:03:54,460 Rzeczywiście, że po prostu zdjęcia Piła z Daven było JPEG. 127 00:03:54,460 --> 00:03:57,570 I co ciekawe o plikach, takich jak JPEG 128 00:03:57,570 --> 00:04:02,170 jest to, że mogą być zidentyfikowane typowo, określonych wzorami bitów. 129 00:04:02,170 --> 00:04:05,200 >> Innymi słowy, to, co jest to, że odróżnia się od GIF JPEG 130 00:04:05,200 --> 00:04:08,109 z PING od słowa dokument z pliku programu Excel? 131 00:04:08,109 --> 00:04:09,900 Cóż, to jest po prostu inna wzorców bitów. 132 00:04:09,900 --> 00:04:12,820 A te są różne wzory Zwykle na początku tych plików. 133 00:04:12,820 --> 00:04:18,200 >> Tak, że gdy komputer otwiera Słowo doc, lub gdy komputer otwiera JPEG, 134 00:04:18,200 --> 00:04:20,940 wygląda typowo Pierwsze kilka bitów w pliku. 135 00:04:20,940 --> 00:04:24,059 I jeżeli uzna, wzór, mówi, oh, to jest obraz. 136 00:04:24,059 --> 00:04:25,850 Pozwól, aby go wyświetlić użytkownika jako grafika. 137 00:04:25,850 --> 00:04:27,870 Lub, o, to wygląda jak Word doc. 138 00:04:27,870 --> 00:04:30,480 Pokażę go do użytkownika jako eseju. 139 00:04:30,480 --> 00:04:33,020 >> Tak na przykład, JPEG, Okazuje się, że są 140 00:04:33,020 --> 00:04:35,460 dość skomplikowane pod wyciągiem. 141 00:04:35,460 --> 00:04:40,140 Ale pierwsze trzy bajty w większości każdy JPEG są z trzech cyfr. 142 00:04:40,140 --> 00:04:44,680 Tak więc bajt zero, jedna lub dwie, są w Najbardziej każdy JPEG, 255, a następnie numer 143 00:04:44,680 --> 00:04:46,675 216, następnie numer 255. 144 00:04:46,675 --> 00:04:48,990 >> A co będzie można zacząć robić w przyszłym tygodniu 145 00:04:48,990 --> 00:04:52,920 faktycznie grzebie pod jak kaptur z plików JPEG 146 00:04:52,920 --> 00:04:57,210 i jak pliki bitmap, a widząc co zawsze było tam tak długo, 147 00:04:57,210 --> 00:04:58,650 jak byli przy użyciu komputera. 148 00:04:58,650 --> 00:05:01,860 >> Ale co tam, nie jest zazwyczaj napisane jak liczb dziesiętnych, takich jak ten. 149 00:05:01,860 --> 00:05:04,620 Informatycy nie wydają się mówić po przecinku. 150 00:05:04,620 --> 00:05:06,139 Tak naprawdę nie mówią w formacie binarnym. 151 00:05:06,139 --> 00:05:07,930 Zazwyczaj, gdy chcemy do wyrażania liczb, 152 00:05:07,930 --> 00:05:10,710 faktycznie korzystać szesnastkowym które można przywołać 153 00:05:10,710 --> 00:05:13,027 od, powiedzmy, Problem Set Jeden, który zakwestionował 154 00:05:13,027 --> 00:05:14,610 można pomyśleć o innym systemie. 155 00:05:14,610 --> 00:05:17,170 >> My, oczywiście, zna z przecinku, od zera do dziewięciu. 156 00:05:17,170 --> 00:05:18,215 Rozmawialiśmy o binarnym. 157 00:05:18,215 --> 00:05:20,710 I tak naprawdę nie ma w użyciu, że dużo tutaj 158 00:05:20,710 --> 00:05:22,470 na na zewnątrz, ponieważ komputery użyć. 159 00:05:22,470 --> 00:05:24,900 Ale programiści bardzo Często, choć nie zawsze 160 00:05:24,900 --> 00:05:29,360 używać szesnastkowy, co oznacza po prostu masz 16 liter w alfabecie, 161 00:05:29,360 --> 00:05:31,330 w przeciwieństwie do dwóch lub 10. 162 00:05:31,330 --> 00:05:34,530 >> Więc jak można liczyć na wyższe niż dziewięciu w systemie szesnastkowym? 163 00:05:34,530 --> 00:05:41,120 Udać 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, tylko przez konwencję. 164 00:05:41,120 --> 00:05:43,540 Ale co to jest to, że każdy klucz z nich jest pojedynczy symbol. 165 00:05:43,540 --> 00:05:44,340 Nie ma 10. 166 00:05:44,340 --> 00:05:48,400 Nie ma 11 per se, ponieważ każde swoich cyfr, tak jak w systemie dziesiętnym 167 00:05:48,400 --> 00:05:51,940 i tak jak w binarnym, należy po prostu być pojedynczym znakiem, zgodnie z konwencją. 168 00:05:51,940 --> 00:05:55,280 >> Tak, że to jest alfabet mamy do naszej dyspozycji w systemie szesnastkowym. 169 00:05:55,280 --> 00:05:58,600 Więc co, jeśli wygląda JPEG ciebie było napisać z trzech pierwszych 170 00:05:58,600 --> 00:06:01,980 nie bajtów jako przecinku, ale na przykład, w systemie szesnastkowym? 171 00:06:01,980 --> 00:06:03,640 Hex i dlaczego jest przydatna nawet wszystko, co? 172 00:06:03,640 --> 00:06:05,290 >> Cóż, szybkie spojrzenie na przykład. 173 00:06:05,290 --> 00:06:09,030 Więc jeśli piszę z bitów, które stanowią te numbers-- dziesiętną 174 00:06:09,030 --> 00:06:12,450 to może być trochę zardzewiały teraz od kilku tygodni z powrotem, 175 00:06:12,450 --> 00:06:14,820 ale lewa i prawy są dość łatwe. 176 00:06:14,820 --> 00:06:17,990 255 było najwięcej my może stanowić z ośmiu bitów. 177 00:06:17,990 --> 00:06:18,820 To wszystko było z nich. 178 00:06:18,820 --> 00:06:21,320 Więc to jest tylko jeden lekko interesujący jest środkowy. 179 00:06:21,320 --> 00:06:24,700 A jeśli rodzaj zrobić z matematyka, można wywnioskować, że rzeczywiście 180 00:06:24,700 --> 00:06:27,949 że wzór jednego i Zera reprezentuje 216. 181 00:06:27,949 --> 00:06:30,240 Więc po prostu stanowią dla teraz, że są one poprawne. 182 00:06:30,240 --> 00:06:31,730 Ale dlaczego jest to interesujące? 183 00:06:31,730 --> 00:06:33,970 >> Cóż, bajt, oczywiście, jest osiem bitów. 184 00:06:33,970 --> 00:06:38,980 I okazuje się, że jeśli myślisz bajtu jako dwa kawałki czterech bitów, 185 00:06:38,980 --> 00:06:39,500 tak. 186 00:06:39,500 --> 00:06:41,000 Dodajmy jeszcze trochę miejsca. 187 00:06:41,000 --> 00:06:42,550 Tak przed, po. 188 00:06:42,550 --> 00:06:46,520 Właśnie dodałem jakieś białe znaki na litość wizualizacyjnego tutaj. 189 00:06:46,520 --> 00:06:51,840 Jak możemy teraz reprezentować w, powiedzmy, szesnastkowy każdy quad bitów, 190 00:06:51,840 --> 00:06:52,880 każdy zestaw czterech bitów? 191 00:06:52,880 --> 00:06:56,420 >> Tak na przykład w lewej teraz mamy 1111 w formacie binarnym. 192 00:06:56,420 --> 00:07:00,420 Co to jest liczba w systemie dziesiętnym, jeśli nie z matematyki? 193 00:07:00,420 --> 00:07:03,780 Masz miejsce wielofunkcyjne, miejsce dwójki, miejsce czwórki, a miejsce ósemki. 194 00:07:03,780 --> 00:07:04,341 >> PUBLICZNOŚCI: 15. 195 00:07:04,341 --> 00:07:05,340 David J. MALAN: To 15. 196 00:07:05,340 --> 00:07:08,340 Więc jeśli mamy osiem plus cztery plus dwa plus jeden, mamy 15. 197 00:07:08,340 --> 00:07:11,790 Więc mogłem napisać 15 poniżej 1111, ale cały sens tutaj 198 00:07:11,790 --> 00:07:13,190 jest w systemie szesnastkowym, nie dziesiętnym. 199 00:07:13,190 --> 00:07:17,310 Więc zamiast pisać w dół 15, 1-5, Mam zamiar napisać, że w hex, 200 00:07:17,310 --> 00:07:22,311 które, jeśli uważasz, że z powrotem, jeśli masz zera do f, co 15 będzie? 201 00:07:22,311 --> 00:07:22,810 PUBLICZNOŚCI: f. 202 00:07:22,810 --> 00:07:24,434 David J. MALAN: Okazuje się, że to f. 203 00:07:24,434 --> 00:07:29,140 I można pracować, że od stwierdzenia, oraz, jeśli jest 10 to OK f 15. 204 00:07:29,140 --> 00:07:33,250 Tak więc w rzeczywistości, może przepisać ten sam zestaw liczb jak f. 205 00:07:33,250 --> 00:07:35,750 A potem, jeśli zrobić trochę matematyki, my wywnioskować, że to d. 206 00:07:35,750 --> 00:07:38,650 Osiem jest dość łatwe, bo mają jeden w miejscu ósemki. 207 00:07:38,650 --> 00:07:40,620 A następnie, mamy jeszcze kilka f jest. 208 00:07:40,620 --> 00:07:44,669 >> Więc to, co ludzie mają tendencję do zrobienia umownie kiedy używać szesnastkowy jest po prostu 209 00:07:44,669 --> 00:07:47,710 piszę to trochę bardziej zwięźle, pozbyć się większości tego białej przestrzeni. 210 00:07:47,710 --> 00:07:50,890 I po prostu być bardzo jasne, czytelnicy, że jest to w systemie szesnastkowym 211 00:07:50,890 --> 00:07:54,670 Konwencja między prostą ludzi jest pisać zera 212 00:07:54,670 --> 00:07:58,000 x, która ma znaczenie inne niż wizualny identyfikator, 213 00:07:58,000 --> 00:07:59,590 tutaj jest liczba hex. 214 00:07:59,590 --> 00:08:04,210 >> A potem, można umieścić dwie cyfry, f f w tym przypadku, po czym d, po czym f. 215 00:08:04,210 --> 00:08:06,700 Więc krótko mówiąc, szesnastkowy tylko dąży 216 00:08:06,700 --> 00:08:11,990 są użyteczne, ponieważ każdy z jej cyfry, zera do f, doskonale linie 217 00:08:11,990 --> 00:08:13,880 się wzorem czterech bitów. 218 00:08:13,880 --> 00:08:18,080 >> Więc jeśli masz dwie cyfry szesnastkowe, zerowej do F, znowu i znowu, 219 00:08:18,080 --> 00:08:20,256 że daje doskonale osiem bitów lub jeden bajt. 220 00:08:20,256 --> 00:08:22,380 To dlatego, że ma tendencję do być powszechnie użyteczne. 221 00:08:22,380 --> 00:08:24,990 Nie ma intelektualnej Zawartość naprawdę poza tym, 222 00:08:24,990 --> 00:08:27,010 inne niż jego rzeczywistej użyteczności. 223 00:08:27,010 --> 00:08:29,310 >> Teraz JPEG nie są tylko formatów plików graficznych. 224 00:08:29,310 --> 00:08:33,230 Może pamiętacie, że istnieją plików jak to w świecie, 225 00:08:33,230 --> 00:08:34,830 co najmniej od kilku lat wstecz. 226 00:08:34,830 --> 00:08:37,580 >> Więc to było naprawdę zainstalowany w systemie Windows XP 227 00:08:37,580 --> 00:08:39,960 na milionach komputerów na całym świecie. 228 00:08:39,960 --> 00:08:43,000 I był to plik z obrazkiem, BMP. 229 00:08:43,000 --> 00:08:47,690 I plik mapy bitowej, jak zobaczysz następny tygodniu, po prostu oznacza, wzór kropek, 230 00:08:47,690 --> 00:08:51,710 pikseli, jak są one nazywane, mapy na bitach, naprawdę. 231 00:08:51,710 --> 00:08:55,160 >> Tak więc to, co jest interesujące, choć, o tym formacie, BMP, jest 232 00:08:55,160 --> 00:08:58,590 że pod maską, to ma więcej niż tylko trzy bajty 233 00:08:58,590 --> 00:09:01,020 które tworzą jego nagłówek, więc mówić, pierwsze kilka ugryzień. 234 00:09:01,020 --> 00:09:03,330 To faktycznie wygląda trochę skomplikowane na pierwszy rzut oka. 235 00:09:03,330 --> 00:09:04,704 A zobaczysz, to w zbiorze P. 236 00:09:04,704 --> 00:09:06,810 I zaczyna coś zwłaszcza z tym teraz 237 00:09:06,810 --> 00:09:10,720 nie jest tak ważne, ponieważ tylko fakt że na początku każdego bitmapy 238 00:09:10,720 --> 00:09:13,823 plik, w formacie graficznym, istnieje cała masa liczb. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> Teraz Microsoft, Autor tego formatu, 241 00:09:16,720 --> 00:09:18,820 zmierza nazwać tych, Rzeczy nie ints i znaki 242 00:09:18,820 --> 00:09:22,259 i pływaków, ale słowa i d słowa i tęskni i bajty. 243 00:09:22,259 --> 00:09:23,800 Więc są tylko różne typy danych. 244 00:09:23,800 --> 00:09:25,170 Są różne nazwy do tej samej rzeczy. 245 00:09:25,170 --> 00:09:26,740 Ale zobaczysz, że w P ustawić cztery. 246 00:09:26,740 --> 00:09:31,450 >> Jest to jednak tylko powiedzieć, że w przypadku człowieka podwójnie kliknie jakiś plik na swoim .BMP 247 00:09:31,450 --> 00:09:35,015 lub jej twardy dysk, i otwiera się okno w górę pokazując mu, że obraz, 248 00:09:35,015 --> 00:09:38,500 to się stało, bo w eksploatacji System nie tylko zapewne zauważyłeś 249 00:09:38,500 --> 00:09:41,460 Rozszerzenie pliku BMP w nazwie pliku, 250 00:09:41,460 --> 00:09:45,010 ale także fakt, że jest jakiś Konwencja na wzór bitów 251 00:09:45,010 --> 00:09:47,490 na początku tego pliku mapy bitowej. 252 00:09:47,490 --> 00:09:50,270 >> Ale skupmy się teraz na takie skomplikowane plik, 253 00:09:50,270 --> 00:09:52,120 lecz na czymś takim. 254 00:09:52,120 --> 00:09:55,190 Załóżmy, że tutaj w gedit, ja Wystarczy początki 255 00:09:55,190 --> 00:09:57,070 programu, który jest bardzo prosty. 256 00:09:57,070 --> 00:09:58,860 Mam niektóre obejmuje do góry. 257 00:09:58,860 --> 00:10:02,120 Teraz mam # include "structs.h", ale Wrócę do tego za chwilę. 258 00:10:02,120 --> 00:10:03,974 Ale to jest przydatne do teraz. 259 00:10:03,974 --> 00:10:05,890 Więc jest to program , że zamierza wdrożyć 260 00:10:05,890 --> 00:10:07,335 jak bazy danych stanu cywilnego. 261 00:10:07,335 --> 00:10:09,710 Więc baza studentów, i każdy uczeń w świecie 262 00:10:09,710 --> 00:10:13,190 ma nazwę i dom i prawdopodobnie niektóre inne rzeczy, ale my keep it simple. 263 00:10:13,190 --> 00:10:15,140 Każdy student ma swoje imię i dom. 264 00:10:15,140 --> 00:10:17,700 >> Więc jeśli chciałem napisać Program, którego celem w życiu 265 00:10:17,700 --> 00:10:19,860 tylko do iteracji od zero, do trzech, 266 00:10:19,860 --> 00:10:22,070 jeśli jest trzech studentów na Uniwersytecie Harvarda. 267 00:10:22,070 --> 00:10:25,350 A ja po prostu chcę, aby uzyskać, stosując getString, Nazwa każdego studenta i dom, 268 00:10:25,350 --> 00:10:26,600 a potem po prostu wydrukować te z. 269 00:10:26,600 --> 00:10:28,630 >> To jest coś jak Tygodnia Jeden, Tydzień Dwa rzeczy teraz, 270 00:10:28,630 --> 00:10:30,810 gdzie chcę tylko dla pętli lub coś w tym stylu. 271 00:10:30,810 --> 00:10:34,500 I chcę zadzwonić kilka getString razy, a następnie wydrukować f kilka razy. 272 00:10:34,500 --> 00:10:37,340 Więc jak mogę to zrobić, chociaż, gdy zarówno nazwa i dom 273 00:10:37,340 --> 00:10:39,070 zaangażowane są dla każdego ucznia? 274 00:10:39,070 --> 00:10:42,830 >> Więc mój pierwszy instynkt mógłby się zrobić coś takiego. 275 00:10:42,830 --> 00:10:49,620 I może najpierw powiedzieć, dobrze, daj mi, powiedzieć, tablicę łańcuchów zwanych nazwy. 276 00:10:49,620 --> 00:10:51,530 I nie chcę tu hardcode trzy. 277 00:10:51,530 --> 00:10:53,064 Co chcę, aby tam umieścić? 278 00:10:53,064 --> 00:10:55,730 Tak studentów, bo to po prostu Stała zadeklarowane na górze 279 00:10:55,730 --> 00:10:57,860 tak nie mam hardcode trzech w wielu miejscach. 280 00:10:57,860 --> 00:11:00,859 W ten sposób można zmienić go o jedno miejsce, i wpływa na zmianę wszędzie. 281 00:11:00,859 --> 00:11:04,470 A następnie, może to zrobić Ciąg mieści studentów. 282 00:11:04,470 --> 00:11:10,250 >> A teraz, może zrobić coś jak for (int i = 0; i 00:11:14,390 Więc piszę szybko, ale jest to prawdopodobnie zna składni teraz. 284 00:11:14,390 --> 00:11:17,030 >> A teraz, to było bardziej aktualne. 285 00:11:17,030 --> 00:11:22,890 Jeśli chcę, aby umieścić w i-tej nazwisko studenta, myślę, że mogę to zrobić. 286 00:11:22,890 --> 00:11:26,480 A potem, nie nazwy ale domy wspornik i. 287 00:11:26,480 --> 00:11:29,930 Robię to, getString, i niech mi wrócić i naprawić tę linię. 288 00:11:29,930 --> 00:11:30,430 Zgadzam się? 289 00:11:30,430 --> 00:11:31,200 Nie zgadza? 290 00:11:31,200 --> 00:11:32,366 To nie jest bardzo łatwy w obsłudze. 291 00:11:32,366 --> 00:11:33,890 Nie powiedziałem użytkownika, co zrobić. 292 00:11:33,890 --> 00:11:36,520 >> Ale teraz, jeśli ja też chciał później, niech 293 00:11:36,520 --> 00:11:40,060 powiedzmy, wydrukować te rzeczy out-- tak TODO później. 294 00:11:40,060 --> 00:11:42,330 Mam zamiar zrobić więcej To-- to prawdopodobnie jest 295 00:11:42,330 --> 00:11:45,970 Prawidłowe stosowanie się nazwiska i domy, trzy 296 00:11:45,970 --> 00:11:48,870 ich suma każda z użytkownikiem. 297 00:11:48,870 --> 00:11:51,280 >> Ale nie jest to bardzo dobry projekt, prawda? 298 00:11:51,280 --> 00:11:55,220 Co zrobić, jeśli student ma nie tylko nazwę i dom, ale również numer identyfikacyjny, 299 00:11:55,220 --> 00:11:57,770 i numer telefonu, i adres e-mail, 300 00:11:57,770 --> 00:12:00,280 a może strona główna i może uchwyt Twitter, 301 00:12:00,280 --> 00:12:03,730 Dowolna liczba innych szczegółów związane z student lub osoba, 302 00:12:03,730 --> 00:12:04,610 bardziej ogólnie. 303 00:12:04,610 --> 00:12:07,720 W jaki sposób zaczynamy dodawać Funkcjonalność tego programu? 304 00:12:07,720 --> 00:12:14,080 >> Cóż, czuję się jak w najprostszy sposób mógłby być coś jak, powiedzmy, 305 00:12:14,080 --> 00:12:16,490 int IDS studentów. 306 00:12:16,490 --> 00:12:18,380 Więc mogę umieścić wszystkie swoje identyfikatory tam. 307 00:12:18,380 --> 00:12:22,240 A następnie, za coś jak numery telefonów, 308 00:12:22,240 --> 00:12:24,400 Nie jestem pewien, jak stanowią, że jeszcze. 309 00:12:24,400 --> 00:12:30,280 Więc śmiało i po prostu zadzwoń to twitters studentów, które 310 00:12:30,280 --> 00:12:33,550 Jest to trochę dziwne, ale-- i kilka więcej pól. 311 00:12:33,550 --> 00:12:36,360 >> Zacząłem skutecznie skopiować i wkleić tutaj. 312 00:12:36,360 --> 00:12:39,416 I to będzie całkiem rosnąć nieporęczny dość szybko, prawda? 313 00:12:39,416 --> 00:12:42,290 Czy nie byłoby miło, gdyby nie było w świecie znana struktura danych 314 00:12:42,290 --> 00:12:45,600 nie jako int lub ciąg, ale coś wyższy poziom, abstrakcja, więc 315 00:12:45,600 --> 00:12:47,570 mówić, znany jako student? 316 00:12:47,570 --> 00:12:50,220 C nie pochodzą z wbudowanym Funkcjonalność dla studentów, 317 00:12:50,220 --> 00:12:52,260 Ale co, jeśli chciałem dać to taki? 318 00:12:52,260 --> 00:12:55,640 >> Cóż, okazuje się, zamierzam otwórz plik o nazwie structs.h tutaj, 319 00:12:55,640 --> 00:12:57,090 i można zrobić dokładnie to. 320 00:12:57,090 --> 00:12:58,290 I mamy zamiar zacząć robić to teraz. 321 00:12:58,290 --> 00:13:01,490 A pod maską P ustawić trzy, już robią to teraz. 322 00:13:01,490 --> 00:13:05,920 Nie ma czegoś takiego jak g rect lub g owalne w języku programowania C. 323 00:13:05,920 --> 00:13:10,570 >> Ludzie w Stanford realizowane te typy danych przy użyciu tej metody tutaj, 324 00:13:10,570 --> 00:13:13,900 deklarując swoje własne nowe dane Typy z wykorzystaniem nowego słowa kluczowego 325 00:13:13,900 --> 00:13:16,744 nazywa struct a inny jeden nazywa typedef. 326 00:13:16,744 --> 00:13:19,660 I rzeczywiście, chociaż składni wygląda trochę inaczej od rzeczy 327 00:13:19,660 --> 00:13:23,550 widzieliśmy już wcześniej, w Zasada, że ​​to bardzo proste. 328 00:13:23,550 --> 00:13:25,297 >> To po prostu oznacza "określić typ." 329 00:13:25,297 --> 00:13:27,255 Że będzie Konstrukcja i struktura 330 00:13:27,255 --> 00:13:29,400 jest jak pojemnik do wielu rzeczy. 331 00:13:29,400 --> 00:13:31,780 I że struktura będzie mieć ciąg o nazwie nazwa, 332 00:13:31,780 --> 00:13:33,210 i ciąg zwany dom. 333 00:13:33,210 --> 00:13:37,520 I nazwijmy, po prostu dla wygody, cała ta struktura danych studentów. 334 00:13:37,520 --> 00:13:40,320 >> Tak więc w chwili, gdy się do średnik, masz teraz 335 00:13:40,320 --> 00:13:43,280 stworzył własne dane Typ nazywa uczeń 336 00:13:43,280 --> 00:13:46,420 że teraz stoi obok int, i pływak, i char i ciąg znaków, 337 00:13:46,420 --> 00:13:50,270 oraz g dacji i g owalny, a każdy numer z innymi ludzie wymyślili. 338 00:13:50,270 --> 00:13:53,340 >> Więc co jest przydatne na ten temat teraz jest to, że jeśli wrócę 339 00:13:53,340 --> 00:13:57,430 do struct 0 i skończyć Wdrożenie, które napisałem 340 00:13:57,430 --> 00:14:02,080 z góry tutaj zauważyć, że wszystkie z nieuniknionym, że niechlujstwa 341 00:14:02,080 --> 00:14:05,490 miał rozpocząć się dzieje jak dodałem numery telefonów i Twitters i wszystko 342 00:14:05,490 --> 00:14:07,370 te inne rzeczy do Definicja ucznia, 343 00:14:07,370 --> 00:14:11,810 teraz to zwięźle opakowane w jednym szeregu studentów. 344 00:14:11,810 --> 00:14:15,500 >> I każdy z tych studentów, teraz ma wiele rzeczy w jej wnętrzu. 345 00:14:15,500 --> 00:14:16,930 Tak, że po prostu pozostawia jedno pytanie. 346 00:14:16,930 --> 00:14:19,700 Jak masz na imię, i dom, i ID, 347 00:14:19,700 --> 00:14:21,640 i co tam jeszcze jest wewnątrz studenta? 348 00:14:21,640 --> 00:14:22,930 Bardzo prosty, jak również. 349 00:14:22,930 --> 00:14:25,730 Nowa składnia, ale prosty pomysł. 350 00:14:25,730 --> 00:14:29,239 >> Po prostu wskaźnik do tablicy, jak my w zeszłym tygodniu i to. 351 00:14:29,239 --> 00:14:31,030 A co wyraźnie nowy kawałek składni? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 Po prostu., Co oznacza "do środka Struktura i nazywa się pole 354 00:14:35,880 --> 00:14:39,030 Nazwa, uzyskać pole o nazwie dom, się pole o nazwie Student ". 355 00:14:39,030 --> 00:14:41,940 >> Więc w P ustawić trzy, jeśli jesteś nadal pracuje na tym, 356 00:14:41,940 --> 00:14:44,020 i większość ludzi nadal są, uświadomić sobie, że jak ty 357 00:14:44,020 --> 00:14:46,130 rozpocząć korzystanie z rzeczy, jak g rects i G owale 358 00:14:46,130 --> 00:14:50,201 i inne rzeczy, które wydają się nie pochodzą z Tygodnia zero, jeden lub dwa, 359 00:14:50,201 --> 00:14:52,950 sobie sprawę, że to dlatego, że Stanford ogłosił kilka nowych typów danych. 360 00:14:52,950 --> 00:14:56,160 >> I rzeczywiście, to jest dokładnie to, co będzie zrobić, jak również, w P ustawić cztery, kiedy 361 00:14:56,160 --> 00:14:59,880 zaczynamy zajmować się rzeczami takich jak obrazy, mapy bitowe i więcej. 362 00:14:59,880 --> 00:15:02,882 Więc to tylko zapowiedź i Model psychicznego, co ma nadejść. 363 00:15:02,882 --> 00:15:04,590 Teraz zwlekał nieco tego ranka. 364 00:15:04,590 --> 00:15:09,560 Byłam trochę ciekawi, co tapety Microsoft faktycznie 365 00:15:09,560 --> 00:15:10,310 wygląda dzisiaj. 366 00:15:10,310 --> 00:15:15,200 I okazuje się, kogo w 2006 roku rzeczywiście udał się do prawie dokładnie 367 00:15:15,200 --> 00:15:19,210 samo miejsce, aby fotografować w rzeczywistości wygląda na to, że to, co w dzisiejszych czasach. 368 00:15:19,210 --> 00:15:21,380 Pole jest teraz trochę zarośnięty. 369 00:15:21,380 --> 00:15:24,850 >> Więc mówiąc już o obrazach, niech przywróci Daven tutaj 370 00:15:24,850 --> 00:15:26,890 na ekranie i Mikołaja, i po prostu przypomnieć, 371 00:15:26,890 --> 00:15:30,540 że jeśli chcesz dołączyć do nas na obiad w piątek, szef do naszej zwykłej URL 372 00:15:30,540 --> 00:15:31,440 tutaj. 373 00:15:31,440 --> 00:15:33,530 >> Więc skąd wyjeżdżamy się w poniedziałek? 374 00:15:33,530 --> 00:15:35,140 Wprowadziliśmy ten problem, prawda? 375 00:15:35,140 --> 00:15:37,610 To był pozornie poprawne Realizacja transakcji swap, 376 00:15:37,610 --> 00:15:40,460 w którym bierzesz dwa ints, jeden nazywa, jeden o nazwie b, 377 00:15:40,460 --> 00:15:44,130 zamienić je, tak jak Laura nie tutaj na etapie z mleka, wody, 378 00:15:44,130 --> 00:15:46,820 stosując chwilowy zmienna, lub pusty kubek, 379 00:15:46,820 --> 00:15:50,540 tak, że możemy umieścić B w i a W b bez bałaganu rzeczy. 380 00:15:50,540 --> 00:15:51,560 Użyliśmy zmiennej. 381 00:15:51,560 --> 00:15:52,870 To się nazywa Temp. 382 00:15:52,870 --> 00:15:55,520 >> Ale to, co było podstawowym Problem z tym kodem w poniedziałek? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 Co tu chodzi? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Tak. 387 00:16:00,605 --> 00:16:01,970 >> PUBLICZNOŚCI: To zajmuje więcej miejsca. 388 00:16:01,970 --> 00:16:04,719 >> David J. MALAN: Staje się bardziej miejsca, ponieważ używam zmiennej, 389 00:16:04,719 --> 00:16:05,400 i to jest OK. 390 00:16:05,400 --> 00:16:07,300 To prawda, ale jestem powie, że jest OK. 391 00:16:07,300 --> 00:16:10,030 To jest tylko 32 bitów w Wielkim schemat rzeczy, więc nic wielkiego. 392 00:16:10,030 --> 00:16:10,655 Inne myśli? 393 00:16:10,655 --> 00:16:12,572 PUBLICZNOŚCI: tylko on zamienia zmienne lokalnie. 394 00:16:12,572 --> 00:16:13,571 David J. MALAN: Dokładnie. 395 00:16:13,571 --> 00:16:15,090 To zamienia zmienne tylko lokalnie. 396 00:16:15,090 --> 00:16:18,173 Ponieważ za każdym razem wywołać function-- kiedy miałem tace z Annenberg 397 00:16:18,173 --> 00:16:19,840 Ostatni raz, masz głównym na dole. 398 00:16:19,840 --> 00:16:23,560 Jak tylko wywołać funkcję o nazwie Swap, Swap nie dostać x i y, 399 00:16:23,560 --> 00:16:24,400 oryginalne wartości. 400 00:16:24,400 --> 00:16:26,392 Co robi wymiany GET, nie twierdzimy? 401 00:16:26,392 --> 00:16:27,100 WIDOWNI: Kopie. 402 00:16:27,100 --> 00:16:28,090 David J. MALAN: Więc odpisów. 403 00:16:28,090 --> 00:16:31,120 Tak więc staje się to raz i dwa, gdy przywołać przykład z ostatniego czasu, 404 00:16:31,120 --> 00:16:34,730 ale kopia jednego i dwóch które są z powodzeniem zamienione. 405 00:16:34,730 --> 00:16:38,550 Ale niestety w końcu, Wartości te pozostają takie same. 406 00:16:38,550 --> 00:16:41,880 Tak więc widzimy, to z naszego nowy przyjaciel, miejmy nadzieję, GDB, 407 00:16:41,880 --> 00:16:45,180 że ty lub TFS i CA mają było prowadzenie kierunku w następujący sposób. 408 00:16:45,180 --> 00:16:51,210 >> Więc nie ma przypomnieć wymiany niech wygląda jak-- otworzyć To-- patrzy tak. 409 00:16:51,210 --> 00:16:54,160 Mamy zainicjowany x do jednego, y do dwóch. 410 00:16:54,160 --> 00:16:55,620 Miał kilka print f jest. 411 00:16:55,620 --> 00:16:58,080 Ale potem, klawisz połączenia tutaj był do wymiany, które 412 00:16:58,080 --> 00:17:00,260 jest dokładnie to kod Właśnie widziałem przed chwilą. 413 00:17:00,260 --> 00:17:03,180 Co jest prawdziwe w pierwszym rzut oka, ale funkcjonalnie, 414 00:17:03,180 --> 00:17:06,800 program ten nie działa, bo nie trwale zamienić x i y. 415 00:17:06,800 --> 00:17:10,190 >> Zobaczmy więc, to, szybkie ciepło tu z GDB, a ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 A kilka informacji, że zdecydowaną Ja pozbyć się sterowania L teraz. 418 00:17:15,200 --> 00:17:17,516 A teraz, mam zamiar iść dalej i uruchomić go. 419 00:17:17,516 --> 00:17:19,349 I niestety, że Nie było to użyteczne. 420 00:17:19,349 --> 00:17:22,355 To prowadził program wewnątrz tego Program o nazwie GDB debugger, 421 00:17:22,355 --> 00:17:23,730 ale nie pozwól mi grzebać. 422 00:17:23,730 --> 00:17:26,229 >> Więc w jaki sposób można rzeczywiście wstrzymać wykonanie wewnątrz tego programu? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 Więc złamać. 425 00:17:28,329 --> 00:17:32,340 I mogłem przerwać na dowolnym Numer linii, jedna, 10, 15. 426 00:17:32,340 --> 00:17:35,530 Ale mogę też złamać symbolicznie mówiąc przerwa main. 427 00:17:35,530 --> 00:17:38,980 I to się dzieje, aby ustawić przerwę punkt, najwyraźniej w wierszu 16 w głównym. 428 00:17:38,980 --> 00:17:40,050 I gdzie jest linia 16? 429 00:17:40,050 --> 00:17:42,960 Chodźmy do kodu i przejdź do noswap. 430 00:17:42,960 --> 00:17:46,930 I rzeczywiście, linia 16 jest Pierwszy program. 431 00:17:46,930 --> 00:17:52,130 >> Więc teraz, jeśli pójdę do przodu i typ uruchomić ten czas, Enter, wstrzymania. 432 00:17:52,130 --> 00:17:53,080 Warto więc rozglądamy. 433 00:17:53,080 --> 00:17:55,716 Wydrukuj x-- dlaczego x zera? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 I zignorować znak dolara. 436 00:17:57,830 --> 00:17:59,725 To tylko dla hodowców korzystanie z danego programu. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 Dlaczego x zera w tej chwili? 439 00:18:03,140 --> 00:18:03,640 Tak. 440 00:18:03,640 --> 00:18:07,061 >> PUBLICZNOŚCI: To zatrzymał tuż przed linia 16, a nie w rzeczywistości on line 16. 441 00:18:07,061 --> 00:18:08,060 David J. MALAN: Dokładnie. 442 00:18:08,060 --> 00:18:11,630 GDB, domyślnie jest wstrzymane wykonanie tuż przed linią 16. 443 00:18:11,630 --> 00:18:14,820 Więc to nie jest wykonywane, co Oznacza X jest z jakiejś nieznanej wartości. 444 00:18:14,820 --> 00:18:17,150 I mieliśmy szczęście, że jest to coś czyste jak zero. 445 00:18:17,150 --> 00:18:20,310 Więc teraz, jeśli napiszę następny, teraz jest wykonywane 16. 446 00:18:20,310 --> 00:18:22,000 To na mnie czeka, aby wykonać 17. 447 00:18:22,000 --> 00:18:23,400 Pozwólcie mi iść do przodu i drukuj x. 448 00:18:23,400 --> 00:18:24,094 To jeden. 449 00:18:24,094 --> 00:18:25,260 Pozwólcie mi iść do przodu i drukuj y. 450 00:18:25,260 --> 00:18:26,176 Co mam teraz zobaczyć? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> PUBLICZNOŚCI: [niesłyszalne] 453 00:18:28,560 --> 00:18:29,165 >> David J. MALAN: trochę głośniej. 454 00:18:29,165 --> 00:18:30,040 >> PUBLICZNOŚCI: [niesłyszalne] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 David J. MALAN: Nie dość konsensus. 457 00:18:32,120 --> 00:18:34,760 Więc tak, widzimy jakąś wartość śmieci. 458 00:18:34,760 --> 00:18:37,862 Teraz, y nie jest 134514064. 459 00:18:37,862 --> 00:18:39,320 Cóż, to tylko niektóre wartości śmieci. 460 00:18:39,320 --> 00:18:41,350 Mój program używa pamięci RAM do innych celów. 461 00:18:41,350 --> 00:18:42,350 Nie ma inne funkcje. 462 00:18:42,350 --> 00:18:44,040 Inni ludzie napisali w moim komputerze. 463 00:18:44,040 --> 00:18:46,789 Tak więc te bity są wykorzystywane do inne wartości, i co widzę 464 00:18:46,789 --> 00:18:49,470 to pozostałości niektórych przed korzystanie z tej pamięci. 465 00:18:49,470 --> 00:18:53,350 >> Więc nic wielkiego, bo tak szybko jak wpisać obok, a następnie wydrukować y, 466 00:18:53,350 --> 00:18:55,640 to jest inicjowane wartości, które chcę. 467 00:18:55,640 --> 00:18:57,400 Więc teraz, idziemy do przodu trochę szybciej. 468 00:18:57,400 --> 00:18:58,540 N na następny. 469 00:18:58,540 --> 00:18:59,570 Zróbmy to jeszcze raz. 470 00:18:59,570 --> 00:19:00,530 Zróbmy to jeszcze raz. 471 00:19:00,530 --> 00:19:02,404 Ale ja nie chcę trafić to tutaj, ponieważ jeśli 472 00:19:02,404 --> 00:19:05,110 chcesz zobaczyć, co się dzieje w z wymiany, co jest polecenia? 473 00:19:05,110 --> 00:19:05,520 >> PUBLICZNOŚCI: kroki. 474 00:19:05,520 --> 00:19:06,436 >> David J. MALAN: kroki. 475 00:19:06,436 --> 00:19:09,800 Tak to mi się kroki funkcja, a nie nad nim. 476 00:19:09,800 --> 00:19:12,270 A teraz, to trochę tajemnicze szczerze mówiąc, ale to jest po prostu 477 00:19:12,270 --> 00:19:14,581 mówi mi, że jestem w linii 33 już teraz. 478 00:19:14,581 --> 00:19:15,580 I zróbmy to jeszcze raz. 479 00:19:15,580 --> 00:19:16,080 Temperatura print. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 Wartość śmieci, tym razem negatywny, ale to tylko jeszcze wartość śmieci. 482 00:19:20,170 --> 00:19:22,810 Więc zróbmy następny, drukowania Temp. 483 00:19:22,810 --> 00:19:27,130 Jest to inicjowane 1, co była wartość x, vel. 484 00:19:27,130 --> 00:19:29,110 >> Teraz, gdzie są nasze, a X pochodzi? 485 00:19:29,110 --> 00:19:32,510 Cóż, zawiadomienia w głównym, mamy zwany te wartości x i y. 486 00:19:32,510 --> 00:19:34,740 Następnie przekazał je zamienić w następujący sposób. 487 00:19:34,740 --> 00:19:37,010 X był pierwszy, przecinek y. 488 00:19:37,010 --> 00:19:40,020 A następnie, wymiany może zadzwonić do nich x i y. 489 00:19:40,020 --> 00:19:42,630 Ale dla jasności, to nazywając je i b. 490 00:19:42,630 --> 00:19:45,970 Ale i B są teraz będzie kopii z X i Y, odpowiednio. 491 00:19:45,970 --> 00:19:50,660 >> Tak więc, jeśli wrócę do GDB, temperatura jest obecnie jednym i jest obecnie jednym. 492 00:19:50,660 --> 00:19:56,130 Ale jeśli to zrobię następny i teraz zrobić odcisk , został już przeniesiony na. 493 00:19:56,130 --> 00:20:00,030 Mleka rozlana jest w byłym szkła soku pomarańczowego, albo na odwrót. 494 00:20:00,030 --> 00:20:04,750 >> A jeśli teraz zrobić ponownie, a teraz jeśli wydrukować jako test dla pewności 495 00:20:04,750 --> 00:20:07,687 jest nadal dwa, ale B jest obecnie jednym. 496 00:20:07,687 --> 00:20:08,770 Szczerze mówiąc, to jeszcze nie. 497 00:20:08,770 --> 00:20:10,670 Nie obchodzi mnie to, co temperatura jest. 498 00:20:10,670 --> 00:20:16,850 Ale jak tylko się wpisać, powiedzmy, nadal wrócić, teraz jestem na końcu 499 00:20:16,850 --> 00:20:17,480 Program. 500 00:20:17,480 --> 00:20:20,730 Niestety, x oznacza liczbę jeszcze jeden, a y jest jeszcze dwa. 501 00:20:20,730 --> 00:20:22,272 >> Tak więc to, co było tam użyteczność GDB? 502 00:20:22,272 --> 00:20:23,980 Nie pomogło mi rozwiązać Problem per se 503 00:20:23,980 --> 00:20:26,265 ale mam nadzieję, że mi pomoże rozumiem, realizując 504 00:20:26,265 --> 00:20:30,000 że tak, moja logika jest w porządku, ale mój kod nie jest ostatecznie konieczności 505 00:20:30,000 --> 00:20:31,450 trwały wpływ. 506 00:20:31,450 --> 00:20:34,570 Tak, to jest problem, że jesteśmy będzie teraz rozwiązuje dziś. 507 00:20:34,570 --> 00:20:37,870 >> Ale niech się tam w drodze to. 508 00:20:37,870 --> 00:20:39,230 Ciąg jest kłamstwem. 509 00:20:39,230 --> 00:20:41,860 To też nie typ danych że istnieje w C. To 510 00:20:41,860 --> 00:20:44,750 synonimem dla niektórych Czas na coś innego, 511 00:20:44,750 --> 00:20:47,300 i pokazują, że można w sposób następujący. 512 00:20:47,300 --> 00:20:53,282 >> Pozwólcie mi iść do przodu i otworzyć Program o nazwie porównać-0. 513 00:20:53,282 --> 00:20:56,240 I zamiast wpisać ten jeden, zaczniemy chodzić po kodzie 514 00:20:56,240 --> 00:20:58,040 Ja już napisałem, ale to tylko kilka linijek. 515 00:20:58,040 --> 00:20:59,570 Więc to jest porównanie-0. 516 00:20:59,570 --> 00:21:02,380 I pierwszą rzeczą, którą robię jest coraz linię tekstu. 517 00:21:02,380 --> 00:21:05,610 >> Nie zauważyć, co mam ten po raz pierwszy. 518 00:21:05,610 --> 00:21:07,910 Czym różni się wyraźnie o linii 21? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 Właściwie, chwileczkę. 521 00:21:11,402 --> 00:21:12,110 To jest kopia dwa. 522 00:21:12,110 --> 00:21:13,568 To nie jest nawet odpowiedni program. 523 00:21:13,568 --> 00:21:14,780 Dobrze, spoiler alert. 524 00:21:14,780 --> 00:21:16,890 Wszystko w porządku, więc nie przeszkadza mi to. 525 00:21:16,890 --> 00:21:18,520 To jest odpowiedź na pytanie o przyszłość. 526 00:21:18,520 --> 00:21:21,450 >> Tutaj jest porównanie-0, a ja jestem o do linii tekstu. 527 00:21:21,450 --> 00:21:22,435 Program jest o wiele prostsze. 528 00:21:22,435 --> 00:21:23,560 Więc to jest bardzo proste. 529 00:21:23,560 --> 00:21:28,070 To jest jak Week One Week Dwie rzeczy w tym momencie. String s = GetString. 530 00:21:28,070 --> 00:21:29,700 Teraz powiem to jeszcze raz tutaj. 531 00:21:29,700 --> 00:21:31,830 ciąg t = GetString. 532 00:21:31,830 --> 00:21:35,300 A potem, to ostatnia rzecz, w Program, jak sama nazwa wskazuje, 533 00:21:35,300 --> 00:21:37,090 to mam zamiar spróbować je porównać. 534 00:21:37,090 --> 00:21:40,709 >> Więc jeśli s, pierwszy ciąg, równa = t, to ja jestem 535 00:21:40,709 --> 00:21:42,250 powie wpisać samo. 536 00:21:42,250 --> 00:21:44,291 Indziej, mam zamiar powiedzieć wpisać różne rzeczy. 537 00:21:44,291 --> 00:21:45,880 Warto więc skompilować i uruchomić ten program. 538 00:21:45,880 --> 00:21:48,481 Tak, aby porównać zero. 539 00:21:48,481 --> 00:21:48,980 Wygląda dobrze. 540 00:21:48,980 --> 00:21:50,490 Żadnych błędów kompilacji. 541 00:21:50,490 --> 00:21:52,386 >> Pozwólcie mi iść do przodu teraz i wpisz ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Pozwól mi iść dalej i powiedzieć coś : Daven i coś: Rob. 544 00:21:59,220 --> 00:22:00,450 I wpisać różne rzeczy. 545 00:22:00,450 --> 00:22:01,250 Tak daleko, tak dobrze. 546 00:22:01,250 --> 00:22:02,680 Program wydaje się być poprawne. 547 00:22:02,680 --> 00:22:03,880 >> Ale niech go uruchomić ponownie. 548 00:22:03,880 --> 00:22:05,800 Powiedz coś: Gabe. 549 00:22:05,800 --> 00:22:07,140 Powiedz coś: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 Wszystko w porządku. 552 00:22:09,020 --> 00:22:10,851 Może trafić spacji lub coś odjazdowe. 553 00:22:10,851 --> 00:22:11,600 Zróbmy to jeszcze raz. 554 00:22:11,600 --> 00:22:13,020 Więc Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 Różne rzeczy. 559 00:22:17,330 --> 00:22:19,430 Więc co się dzieje? 560 00:22:19,430 --> 00:22:23,200 >> Tak więc mamy te dwie linie Kod, GetString miano dwukrotnie. 561 00:22:23,200 --> 00:22:25,760 A następnie, po prostu jestem próbuje porównać S i T. 562 00:22:25,760 --> 00:22:28,370 Ale to, co naprawdę wtedy się dzieje? 563 00:22:28,370 --> 00:22:31,180 Cóż, o moje pismo do zarżnąć ten przykład nieco. 564 00:22:31,180 --> 00:22:34,630 I niech rzeczywiście rzucić to się tutaj, jak również. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> Mamy więc linię String s = GetString. 567 00:22:45,712 --> 00:22:48,295 Więc to po prostu pierwszy ciekawy wiersz z tego programu. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 Ale co to wszystko razem było dzieje się pod maską? 570 00:22:52,974 --> 00:22:55,890 Cóż, na lewej stronie strony jest ciąg, który jest jakiś rodzaj zmiennej 571 00:22:55,890 --> 00:22:56,785 i to się nazywa s. 572 00:22:56,785 --> 00:23:00,019 Tak, wiem, że to jest za pomocą pamięci, lub w pamięci RAM, w moim komputerze w jakiś sposób. 573 00:23:00,019 --> 00:23:02,060 Więc idę do abstrakcyjnie narysować, że jako kwadrat. 574 00:23:02,060 --> 00:23:04,820 32 bity, okazuje się, ale więcej na ten temat w przyszłości. 575 00:23:04,820 --> 00:23:06,410 A potem, co się dzieje tutaj? 576 00:23:06,410 --> 00:23:08,700 >> Cóż, getString oczywiście dostaje ciąg od użytkownika. 577 00:23:08,700 --> 00:23:11,360 I GetString dostał Zamyla lub Gabe lub Daven. 578 00:23:11,360 --> 00:23:14,640 Warto więc wybrać pierwszy z tych, który był Daven. 579 00:23:14,640 --> 00:23:19,174 Tak skutecznie, co GetString dostał ja w tym pierwszym przypadku było D-v-e-n. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 A potem, co jeszcze nie to daj mi w tajemnicy? 582 00:23:25,045 --> 00:23:25,920 PUBLICZNOŚCI: [niesłyszalne] 583 00:23:25,920 --> 00:23:28,720 David J. MALAN: Tak, charakter / 0 lub wartość null. 584 00:23:28,720 --> 00:23:30,550 Tak skutecznie dał mi łańcuch. 585 00:23:30,550 --> 00:23:34,550 Ale my już wiemy z poprzedniego wygląda, że ​​łańcuch jest tylko tablica 586 00:23:34,550 --> 00:23:37,895 znaków, i to zakończone to znak specjalny wartownik, / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> Jednak, jeśli jest to prawdą i jest kwadratowy 589 00:23:42,310 --> 00:23:44,160 to jest wyraźnie znacznie większy prostokąt. 590 00:23:44,160 --> 00:23:46,830 I rzeczywiście, jest to, Twierdzę, tylko 32 bitów. 591 00:23:46,830 --> 00:23:49,500 I jest to wyraźnie więcej niż 32 bitów, ponieważ jest to prawdopodobnie 592 00:23:49,500 --> 00:23:51,583 osiem Plus osiem Plus osiem Plus osiem Plus osiem, 593 00:23:51,583 --> 00:23:53,320 tylko dlatego bajtów w kodzie ASCII. 594 00:23:53,320 --> 00:23:57,030 Jak do cholery mamy zamiar zmieścić Daven w tym małym pudełku tutaj? 595 00:23:57,030 --> 00:23:59,880 >> Cóż, co się faktycznie robi getString? 596 00:23:59,880 --> 00:24:03,680 Cóż, to oznacza siatka tutaj pamięci lub pamięci RAM mojego komputera. 597 00:24:03,680 --> 00:24:07,564 Warto więc arbitralnie powiedzieć, że jeśli każdy z nich reprezentuje bajt 598 00:24:07,564 --> 00:24:09,730 wtedy możemy myśleć o sobie Bajt jako mający adresu 599 00:24:09,730 --> 00:24:13,830 jak Oxford Street, 33 lub 34 Oxford Street, lub 35 Oxford Street. 600 00:24:13,830 --> 00:24:16,700 >> Tak jak domy mają adresy i budynki mają adresy, 601 00:24:16,700 --> 00:24:19,810 tak jak poszczególne bajty pamięci mają adresy lub numery 602 00:24:19,810 --> 00:24:21,042 , które jednoznacznie identyfikują je. 603 00:24:21,042 --> 00:24:22,000 Teraz, to jest dowolna. 604 00:24:22,000 --> 00:24:25,370 Ale keep it simple, zamierzam używać szesnastkowy tylko umownie 605 00:24:25,370 --> 00:24:28,200 ale 0x oznacza nic innego, niż "to szesnastkowy." 606 00:24:28,200 --> 00:24:31,030 i zamierzam twierdzić, że "D", kończy się na jednym bajcie w pamięci. 607 00:24:31,030 --> 00:24:34,210 >> Nie mam nic innego dzieje się w pamięci, więc Daven dostał pierwsze miejsce 608 00:24:34,210 --> 00:24:35,509 w Byte One. 609 00:24:35,509 --> 00:24:36,800 To, to, to będzie 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 To będzie 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 To będzie 0x4. 614 00:24:41,800 --> 00:24:43,025 To będzie 0x5. 615 00:24:43,025 --> 00:24:44,025 To będzie 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> Ale gdy już zacząć myśleć o tym, co robi komputera 618 00:24:48,290 --> 00:24:50,710 pod maską, możesz zacząć wnioskować 619 00:24:50,710 --> 00:24:54,960 jak ci, kilka lat temu, byłoby wdrożyły C siebie. 620 00:24:54,960 --> 00:24:58,360 Co to jest GetString prawdopodobnie returning-- bo to 621 00:24:58,360 --> 00:25:00,946 czuje się jak to nie jest powrót Daven, per se, 622 00:25:00,946 --> 00:25:03,320 bo on na pewno nie będzie aby zmieścić się w tym małym box-- 623 00:25:03,320 --> 00:25:05,090 więc to, co jest GetString prawdopodobnie powrocie? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> PUBLICZNOŚCI: [niesłyszalne] 626 00:25:08,920 --> 00:25:10,540 >> David J. MALAN: lokalizacja Daven. 627 00:25:10,540 --> 00:25:12,770 I to robi to odkąd Week One. 628 00:25:12,770 --> 00:25:16,150 Co GetString jest naprawdę powrocie nie jest ciągiem znaków, per se. 629 00:25:16,150 --> 00:25:17,780 To jeden z tych małych białych kłamstw. 630 00:25:17,780 --> 00:25:22,520 To powrót adres ciąg w pamięci, unikalny adres. 631 00:25:22,520 --> 00:25:24,820 Daven mieszka w 33 Oxford Street. 632 00:25:24,820 --> 00:25:29,310 Ale bardziej zwięźle, Gavin żyje w 0x1, adres numer jeden. 633 00:25:29,310 --> 00:25:32,280 >> Więc to, co zostanie umieszczone w tym małe pole to, aby być jasne, 634 00:25:32,280 --> 00:25:35,930 jest tylko adres tego łańcucha. 635 00:25:35,930 --> 00:25:38,110 Więc cały ten czas, to się działo. 636 00:25:38,110 --> 00:25:41,650 Ale to, co wskazuje na to to, że w przypadku wszystkich s 637 00:25:41,650 --> 00:25:44,710 jest liczba jej wnętrzu, które jest się zatrzymać, programista, 638 00:25:44,710 --> 00:25:47,970 od wprowadzenie dowolnej liczby w dowolna zmienna i po prostu skacze 639 00:25:47,970 --> 00:25:49,080 w tym fragmencie pamięci? 640 00:25:49,080 --> 00:25:51,320 I rzeczywiście, zobaczymy to zagrożenie następnym razem. 641 00:25:51,320 --> 00:25:53,500 >> Ale teraz, to czuje się niewystarczające. 642 00:25:53,500 --> 00:25:55,630 Jeśli powiem, żeby mnie ciąg, dasz mi Daven. 643 00:25:55,630 --> 00:25:57,230 Ale tak naprawdę nie dał mi Daven. 644 00:25:57,230 --> 00:25:59,310 Wszystko, co mi daje to adres Daven za. 645 00:25:59,310 --> 00:26:04,310 Jak mam to wiedzieć na pewno, gdzie Daven zaczyna i ends-- 646 00:26:04,310 --> 00:26:07,140 historia jest coraz weird-- gdzie Daven zaczyna się i kończy, 647 00:26:07,140 --> 00:26:10,435 , a następnie obok ciąg w pamięci zaczyna? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> Cóż, jeśli przekazanie mnie początek Daven, 650 00:26:13,620 --> 00:26:17,230 w istocie, nie wiem, w jaki sposób gdzie koniec jego imię jest? 651 00:26:17,230 --> 00:26:20,550 Że specjalny znak null, które Jest to tym bardziej ważne teraz 652 00:26:20,550 --> 00:26:23,040 jeśli struny pod spodem identyfikowane są po prostu kaptur 653 00:26:23,040 --> 00:26:25,820 jednoznacznie o ich lokalizacji w pamięci. 654 00:26:25,820 --> 00:26:28,130 Więc cały ten czas, to to, co się dzieje. 655 00:26:28,130 --> 00:26:32,470 >> Więc teraz, gdy patrzymy na kod tutaj wyjaśnić 656 00:26:32,470 --> 00:26:35,790 jeśli byłoby błąd w linii 26. 657 00:26:35,790 --> 00:26:39,560 Dlaczego Zamyla i Zamyla inaczej? 658 00:26:39,560 --> 00:26:41,330 Dlaczego Gabe i Gabe inaczej? 659 00:26:41,330 --> 00:26:42,154 Tak, w plecy. 660 00:26:42,154 --> 00:26:43,390 >> PUBLICZNOŚCI: Mają różne adresy. 661 00:26:43,390 --> 00:26:45,931 >> David J. MALAN: Po prostu dlatego, mają różne adresy. 662 00:26:45,931 --> 00:26:48,820 Ponieważ kiedy zadzwonić getString ponownie, co zrobię szybko tutaj, 663 00:26:48,820 --> 00:26:52,870 czy to jest druga linia, łańcuch t, tak jak ja w tym programie, 664 00:26:52,870 --> 00:26:55,030 równa się kolejne połączenie do getString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 Następnym razem zadzwonię GetString, zamierzam 667 00:26:58,670 --> 00:27:00,190 aby uzyskać inny kawałek pamięci. 668 00:27:00,190 --> 00:27:02,220 >> GetString jest dozwolone zwrócić się do eksploatacji 669 00:27:02,220 --> 00:27:03,800 System więcej i więcej pamięci. 670 00:27:03,800 --> 00:27:07,894 To nie będzie ponownie wykorzystać ten sam sześć bajtów każdym razem. 671 00:27:07,894 --> 00:27:09,810 Zapowiada się nowy fragment pamięci, który 672 00:27:09,810 --> 00:27:12,780 Oznacza t dostanie inna wartość tutaj. 673 00:27:12,780 --> 00:27:15,380 >> Więc kiedy ja s wynosi = t, nie jesteś porównując 674 00:27:15,380 --> 00:27:17,880 D przed tym i przed ta i V przed tym. 675 00:27:17,880 --> 00:27:19,588 Porównując ten pan wobec tego, który 676 00:27:19,588 --> 00:27:24,020 szczerze mówiąc jest dość useful-- useless-- jest bezużyteczny, bo kto naprawdę 677 00:27:24,020 --> 00:27:25,830 obchodzi, gdzie łańcuchy są w pamięci? 678 00:27:25,830 --> 00:27:26,850 >> I rzeczywiście, nie mamy. 679 00:27:26,850 --> 00:27:28,980 A my nie będziemy rozpocząć szczególnie opiekuńczy. 680 00:27:28,980 --> 00:27:34,180 Tylko w takim zakresie, że mogą pojawić się błędy i zagrożenia bezpieczeństwa mogą wynikać woli 681 00:27:34,180 --> 00:27:36,100 możemy zacząć się martwić o to. 682 00:27:36,100 --> 00:27:37,230 Warto więc rozwiązać ten problem. 683 00:27:37,230 --> 00:27:39,650 Okazuje się to naprawić bardzo prosto. 684 00:27:39,650 --> 00:27:42,600 >> I niech faktycznie, przed I ujawniają, że znowu, co by 685 00:27:42,600 --> 00:27:47,170 zrobić, jeśli w klasie CS50, i trzeba było wdrożyć 686 00:27:47,170 --> 00:27:48,600 porównanie z dwóch ciągów. 687 00:27:48,600 --> 00:27:51,440 Wyraźnie nie można po prostu użyć s wynosi = t. 688 00:27:51,440 --> 00:27:54,090 Ale tak logicznie, jak chcesz porównać ten ciąg 689 00:27:54,090 --> 00:27:56,370 wobec tego łańcucha przy użyciu kodu w C? 690 00:27:56,370 --> 00:27:56,880 Tak. 691 00:27:56,880 --> 00:27:58,780 >> PUBLICZNOŚCI: Rób do pętli [niesłyszalne] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 David J. MALAN: Perfect. 694 00:28:01,670 --> 00:28:02,900 PUBLICZNOŚCI: [niesłyszalne] 695 00:28:02,900 --> 00:28:03,310 David J. MALAN: Tak. 696 00:28:03,310 --> 00:28:05,390 Wystarczy użyć do pętli lub podczas pętli lub cokolwiek. 697 00:28:05,390 --> 00:28:08,710 Ale po prostu stosować podstawową ideę, że jeśli jest to fragment pamięci lub tablicy 698 00:28:08,710 --> 00:28:11,590 a to, iteracyjnego zarówno w tym samym czasie. 699 00:28:11,590 --> 00:28:12,960 I po prostu porównać liter. 700 00:28:12,960 --> 00:28:14,260 >> I masz być trochę uważać, bo 701 00:28:14,260 --> 00:28:16,247 nie chcę jeden palec przejść obok innych 702 00:28:16,247 --> 00:28:18,080 ponieważ jeden ciąg jest dłuższa niż druga. 703 00:28:18,080 --> 00:28:21,380 Więc będziesz chciał sprawdzić wartość ta na koniec, null. 704 00:28:21,380 --> 00:28:24,017 Ale to naprawdę jest, w Koniec jako proste. 705 00:28:24,017 --> 00:28:26,100 I szczerze mówiąc, nie potrzebujemy na nowo, że koło. 706 00:28:26,100 --> 00:28:27,960 Oto wersja Two. 707 00:28:27,960 --> 00:28:32,910 I co mam zamiar powiedzieć, jest to, że Zamiast porównywania s oznacza = t, 708 00:28:32,910 --> 00:28:38,964 Ja, zamiast powiedzieć, jeśli ciąg Porównanie s przecinkami t równa się = 0. 709 00:28:38,964 --> 00:28:40,130 Teraz, co jest ciąg porównać? 710 00:28:40,130 --> 00:28:43,046 >> Okazuje się, że jest to funkcja, która pochodzi z C, którego celem w życiu 711 00:28:43,046 --> 00:28:44,650 jest porównanie dwóch ciągów. 712 00:28:44,650 --> 00:28:48,300 I mieszać porównać, jeśli czytamy jego Strona mężczyzna lub dokumentacji lub CS50 713 00:28:48,300 --> 00:28:50,630 odniesienia, to będzie po prostu powiedzieć, że zamieszanie 714 00:28:50,630 --> 00:28:55,730 porównać zyski albo negatywne ilość lub liczbę dodatnią lub zero 715 00:28:55,730 --> 00:28:57,660 gdzie zero oznacza, że ​​są równe. 716 00:28:57,660 --> 00:28:58,570 >> Więc po prostu domysły. 717 00:28:58,570 --> 00:29:00,390 Co to może oznaczać, jeśli mieszać porównania zyski 718 00:29:00,390 --> 00:29:02,110 wartość ujemna lub dodatnia wartość? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 PUBLICZNOŚCI: Większe lub mniejsze niż. 721 00:29:04,285 --> 00:29:05,570 David J. MALAN: Tak, większa lub mniejsza niż. 722 00:29:05,570 --> 00:29:08,640 Więc jeśli chcesz, aby posortować całość pęczek strun w dictionary-- 723 00:29:08,640 --> 00:29:12,975 jak to w końcu w dół road-- idealna funkcja do wykorzystania potencjalnie, 724 00:29:12,975 --> 00:29:15,850 bo to będzie zrobić Porównanie ciągów dla Ciebie, i powiedz 725 00:29:15,850 --> 00:29:20,060 Państwo nie jest przed b, lub nie b przyjść przed alfabetycznie. 726 00:29:20,060 --> 00:29:21,490 Możemy zrobić dokładnie to. 727 00:29:21,490 --> 00:29:23,620 >> I zauważyć, zrobiłem jeden inny rzecz w tym przykładzie. 728 00:29:23,620 --> 00:29:26,870 Co jeszcze się zmieniło wyższe w tym główną funkcją? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 Char *. 731 00:29:29,350 --> 00:29:31,150 I to jest to, że inne białe kłamstwo. 732 00:29:31,150 --> 00:29:33,750 Przez cały ten czas, gdy masz pisze ciąg, 733 00:29:33,750 --> 00:29:38,350 my zostały potajemnie przepisywanie ciąg jako char *, tak że faktycznie clang 734 00:29:38,350 --> 00:29:39,270 rozumie cię. 735 00:29:39,270 --> 00:29:42,450 >> Innymi słowy, CS50.h i jak my w końcu zobaczyć, 736 00:29:42,450 --> 00:29:45,950 zrobiliśmy synonimów zwany ciąg to samo co char *. 737 00:29:45,950 --> 00:29:49,910 A teraz, wiem tylko, że * W związku z tym co najmniej 738 00:29:49,910 --> 00:29:51,286 oznacza adres. 739 00:29:51,286 --> 00:29:52,210 >> Adres, co? 740 00:29:52,210 --> 00:29:56,390 Cóż, fakt, że powiedziałem char *, int * a nie lub float *, 741 00:29:56,390 --> 00:30:00,820 Oznacza to, że char * adres char. 742 00:30:00,820 --> 00:30:06,770 Więc ta mała skrzynka tutaj, aka ciąg, jest naprawdę typu char *, 743 00:30:06,770 --> 00:30:10,490 która jest po prostu fantazyjny sposób na powiedzenie, w tym polu będzie adres. 744 00:30:10,490 --> 00:30:12,430 I co to adres odnosi się do? 745 00:30:12,430 --> 00:30:13,780 Najwyraźniej, char. 746 00:30:13,780 --> 00:30:16,410 >> Ale mogliśmy absolutnie mają int * i inne rzeczy. 747 00:30:16,410 --> 00:30:20,790 Ale teraz, char * jest naprawdę najbardziej proste i jedna z odsetkami. 748 00:30:20,790 --> 00:30:23,310 Więc ten problem będzie wzrasta, jednak ponownie. 749 00:30:23,310 --> 00:30:24,830 >> Załóżmy, że mam otworzyć ten program. 750 00:30:24,830 --> 00:30:27,670 Zobaczymy czy teraz możemy przewidzieć co jest nie tak z tym kodem. 751 00:30:27,670 --> 00:30:31,140 Tak więc w tym programie, copy-0, jestem zamiar iść do przodu i ponownie wywołać 752 00:30:31,140 --> 00:30:34,190 GetString i zapisać wartość w sekundach. 753 00:30:34,190 --> 00:30:38,800 >> A następnie, po co ja to robię, tylko jako przypomnienie od tygodni przeszłości? 754 00:30:38,800 --> 00:30:40,960 Zrobiliśmy powiedzieć, że getString czasami zwraca null. 755 00:30:40,960 --> 00:30:42,793 Co to oznacza, jeśli GetString zwraca null? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 Coś poszło nie tak. 758 00:30:46,034 --> 00:30:48,950 To prawdopodobnie oznacza ciąg jest zbyt duży, z komputera z pamięci. 759 00:30:48,950 --> 00:30:51,724 Zdarza się, Super, Super, Super rzadko, ale może się zdarzyć. 760 00:30:51,724 --> 00:30:53,890 Chcemy sprawdzić, za to, i to wszystko robimy. 761 00:30:53,890 --> 00:30:57,910 >> Bo zobaczymy teraz, jeśli nie rozpocząć sprawdzanie zwykle rzeczy 762 00:30:57,910 --> 00:31:00,870 jak null, to polubisz zacząć iść 763 00:31:00,870 --> 00:31:03,106 do adresów w pamięci, że są nieważne. 764 00:31:03,106 --> 00:31:05,980 I masz zamiar rozpocząć indukcji coraz więcej błędów segmentacji. 765 00:31:05,980 --> 00:31:08,360 Lub w komputerze Mac lub PC, po prostu powoduje, że komputer zawiesić 766 00:31:08,360 --> 00:31:10,340 lub program do zamrożenia, potencjalnie. 767 00:31:10,340 --> 00:31:14,930 >> Więc teraz, twierdzą w kopiowaniem 0.c, że I Zamierzam skopiować te sznurki w drodze 768 00:31:14,930 --> 00:31:15,685 linii 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 A potem, będę zastrz na dnie 771 00:31:18,750 --> 00:31:21,430 tutaj, że będę zmiana jednej z nich. 772 00:31:21,430 --> 00:31:22,330 >> Więc to zauważyć. 773 00:31:22,330 --> 00:31:24,370 Dzwonię do naszego starego przyjaciela strlen. 774 00:31:24,370 --> 00:31:28,960 I po prostu wyjaśnić w języku angielskim Co robi ta linia 34? 775 00:31:28,960 --> 00:31:32,480 Co t wspornik 0 stanowią na lewo. 776 00:31:32,480 --> 00:31:32,980 Tak. 777 00:31:32,980 --> 00:31:34,339 >> PUBLICZNOŚCI: Pierwszy charakter t? 778 00:31:34,339 --> 00:31:35,880 David J. MALAN: pierwszy znak t. 779 00:31:35,880 --> 00:31:36,379 To jest to. 780 00:31:36,379 --> 00:31:40,024 Pierwszy znak t, chcę przypisać wersję wielką 781 00:31:40,024 --> 00:31:41,190 pierwszego znaku w t. 782 00:31:41,190 --> 00:31:43,200 Więc to jest czerpanie Pierwsza litera. 783 00:31:43,200 --> 00:31:46,340 A potem, bardzo ostatnio co robię W tym programie jest Twierdzę tutaj 784 00:31:46,340 --> 00:31:50,340 Oryginalny, s, i tu jest kopia, t. 785 00:31:50,340 --> 00:31:54,610 >> Ale na podstawie tej historii po prostu powiedział o tym, co naprawdę są łańcuchy, 786 00:31:54,610 --> 00:31:57,520 to, co jest naprawdę linia 28 robi, a to, co jest 787 00:31:57,520 --> 00:31:59,405 Otrzymany błąd będzie się na ekranie? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> Więc po pierwsze, pierwsze pytanie, 28. 790 00:32:03,500 --> 00:32:09,040 Co to jest ciąg t = s naprawdę robi? 791 00:32:09,040 --> 00:32:16,430 Jeśli mamy na lewej ręki łańcuch boczny tutaj t = s; 792 00:32:16,430 --> 00:32:19,400 że daje mi jedno pole tu i tu jedno pole. 793 00:32:19,400 --> 00:32:25,530 I przypuszczam, ten adres jest 0x, powiedzmy, 50 to czas, w sposób arbitralny. 794 00:32:25,530 --> 00:32:28,847 Co ciąg t = s zrobić pod maską? 795 00:32:28,847 --> 00:32:30,340 >> PUBLICZNOŚCI: [niesłyszalne] 796 00:32:30,340 --> 00:32:34,100 >> David J. MALAN: Przechowuje pamięć zajęcia tam, więc 0x50 idzie. 797 00:32:34,100 --> 00:32:37,980 Więc jeśli teraz pójdę do pierwszego charakter i wielkie litery w t go, 798 00:32:37,980 --> 00:32:39,535 Co mam robić, aby skutecznie s? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 Jestem naprawdę robi to samo, prawda? 801 00:32:43,450 --> 00:32:47,680 Bo jeśli Adres 0x50-- i po prostu, ja nie ma wiele miejsca na płycie tutaj, 802 00:32:47,680 --> 00:32:51,750 ale zakładamy, że to tu jest 0x50, gdzieś w pamięci mojego komputera. 803 00:32:51,750 --> 00:32:55,825 >> I ja, na przykład, Gabe w małe litery o, tak. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 I powiedziałem t wspornik 0 zostanie aktywowane. 806 00:33:01,980 --> 00:33:04,860 Cóż, t 0 jest wspornik pierwsza litera t. 807 00:33:04,860 --> 00:33:07,840 Tak mało g będzie się wielkim G. Ale problem 808 00:33:07,840 --> 00:33:09,410 jest, co to s również wskazać? 809 00:33:09,410 --> 00:33:10,300 >> PUBLICZNOŚCI: sam. 810 00:33:10,300 --> 00:33:11,841 >> David J. MALAN: samo dokładne. 811 00:33:11,841 --> 00:33:16,342 Tak proste wyjaśnienie być może, nawet jeśli składnia jest trochę dziwne. 812 00:33:16,342 --> 00:33:17,050 Więc zróbmy to. 813 00:33:17,050 --> 00:33:20,210 Dodać kopię-0, a następnie ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 Powiedz coś: Gabe. 816 00:33:24,110 --> 00:33:26,760 Niestety, obie nich zostały już aktywowane, 817 00:33:26,760 --> 00:33:29,500 ale fakt, że u Dlatego, że jesteśmy po prostu 818 00:33:29,500 --> 00:33:32,350 teraz do czynienia z adresami. 819 00:33:32,350 --> 00:33:36,470 >> Więc jak zacząć address-- gra słów nie intended-- 820 00:33:36,470 --> 00:33:39,270 jak mamy zacząć zajęcia ten konkretny problem? 821 00:33:39,270 --> 00:33:44,400 Cóż, w copy1.c, wszystko idzie się trochę bardziej skomplikowane. 822 00:33:44,400 --> 00:33:49,310 Ale chciałbym ubiegać koncepcyjnie proste rozwiązanie. 823 00:33:49,310 --> 00:33:50,852 >> Tak trudno dostać na pierwszy rzut oka. 824 00:33:50,852 --> 00:33:53,560 Nie będzie to łatwe dla pierwszego Czas wpisaniu go, być może, 825 00:33:53,560 --> 00:33:57,440 ale jeśli problem jest to, że po prostu robi t = s tylko 826 00:33:57,440 --> 00:33:59,694 kopiuje adres, co, ponownie, jeśli mogę wybrać się na ciebie, 827 00:33:59,694 --> 00:34:02,110 będzie rozwiązaniem w rzeczywistości kopiujesz ciąg? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> PUBLICZNOŚCI: Będziemy prawdopodobnie ponownie użyć pętli. 830 00:34:06,770 --> 00:34:06,890 >> David J. MALAN: Tak. 831 00:34:06,890 --> 00:34:08,390 Więc będziemy potrzebować jeszcze pętlę. 832 00:34:08,390 --> 00:34:11,800 I dlatego, jeśli chcemy skopiować łańcuch s do innego łańcucha, 833 00:34:11,800 --> 00:34:14,120 prawdopodobnie chcesz to zrobić znak po znaku. 834 00:34:14,120 --> 00:34:17,199 Ale problemem jest to, czy to pierwotnie s, 835 00:34:17,199 --> 00:34:22,159 Teraz musimy zacząć wyraźnie przydzielania pamięci dla t. 836 00:34:22,159 --> 00:34:24,320 >> Innymi słowy, niech przerysować to po raz ostatni. 837 00:34:24,320 --> 00:34:28,659 Jeśli jest to String s = GetString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 I postawmy to tutaj, jak również. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 To GetString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 , A następnie obraz czegoś tak dzieje się tak jak wcześniej, 844 00:34:43,860 --> 00:34:44,360 g-B-E / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 To wygląda trochę coś takiego. 847 00:34:48,960 --> 00:34:53,650 I s dlatego nazywamy to 0x50, i że będzie to 51, 52. 848 00:34:53,650 --> 00:34:54,409 >> Więc jest to 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 A potem, mam ciąg t. 851 00:34:59,690 --> 00:35:02,450 W pamięci, że to po prostu będzie daj mi trochę plac takiego. 852 00:35:02,450 --> 00:35:04,080 Więc co jest teraz kluczowym krokiem? 853 00:35:04,080 --> 00:35:09,870 Jeśli chcę skopiować s do t, co puste nie musimy wypełnić tutaj? 854 00:35:09,870 --> 00:35:12,050 Albo, co jest nam potrzebne do zrobić na wysokim poziomie? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 Tak? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 Ktoś? 859 00:35:17,020 --> 00:35:17,690 Tak. 860 00:35:17,690 --> 00:35:19,214 >> PUBLICZNOŚCI: Musimy [niesłyszalne]. 861 00:35:19,214 --> 00:35:21,380 David J. MALAN: Tak, należy wypełnić w tym puste. 862 00:35:21,380 --> 00:35:24,340 Nie mogę skopiować, a następnie wykorzystać nazwę Gabe'a 863 00:35:24,340 --> 00:35:28,120 dopóki nie zwróci się do systemu operacyjnego na innym fragmencie pamięci 864 00:35:28,120 --> 00:35:30,640 to jest co najmniej tak duża, jak w oryginale. 865 00:35:30,640 --> 00:35:32,130 Tak, że pozostawia nas z pytaniem. 866 00:35:32,130 --> 00:35:36,080 >> Jak mogę zwrócić się do systemu operacyjnego nie tylko na prosty mały pointer-- 867 00:35:36,080 --> 00:35:38,530 jak to się nazywa, adres, nie pointer-- 868 00:35:38,530 --> 00:35:40,980 prostego małego pudełka tak zwany ciąg? 869 00:35:40,980 --> 00:35:44,200 Jak mogę zwrócić się do eksploatacji System na dużą ilość pamięci? 870 00:35:44,200 --> 00:35:48,430 Jak dotąd, stałam tylko, że z powrotem pośrednio przez wywołanie getString. 871 00:35:48,430 --> 00:35:50,740 Więc jak jest getString nawet uzyskanie jego pamięć? 872 00:35:50,740 --> 00:35:53,430 >> Cóż, okazuje się, że nie ma ta druga funkcja tutaj 873 00:35:53,430 --> 00:35:55,160 że będziemy teraz zacząć używać. 874 00:35:55,160 --> 00:35:59,780 Teraz wygląda to o wiele bardziej tajemniczy niż: a ja jestem jedynym, który widzi to-- 875 00:35:59,780 --> 00:36:03,150 ta linia wygląda o wiele bardziej tajemnicze to powinno na pierwszy rzut oka. 876 00:36:03,150 --> 00:36:04,650 Ale niech drażnić go od siebie. 877 00:36:04,650 --> 00:36:07,950 >> Z lewej strony, mam char * t. 878 00:36:07,950 --> 00:36:13,280 Tak, w języku angielskim, zacznijmy sformułować właściwe zdania w żargonie technicznym. 879 00:36:13,280 --> 00:36:19,757 Więc to jest przydzielenie zmienna typu char * nazywa t. 880 00:36:19,757 --> 00:36:21,090 Teraz, co to naprawdę oznacza? 881 00:36:21,090 --> 00:36:23,881 >> Cóż, to znaczy, co mam umieścić w tej zmiennej o nazwie t? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 Adres char. 884 00:36:26,402 --> 00:36:28,360 Tak, że po prostu prostsze, bardziej rozsądny sposób 885 00:36:28,360 --> 00:36:29,930 opisywania lewą stronę. 886 00:36:29,930 --> 00:36:32,890 Tak, że tworzy to pole tylko tutaj. 887 00:36:32,890 --> 00:36:34,760 Tak, po prawej stronie, przypuszczalnie będzie 888 00:36:34,760 --> 00:36:37,170 przyznanie, że większe fragment pamięci, jak? 889 00:36:37,170 --> 00:36:38,340 Warto więc drażnić to od siebie. 890 00:36:38,340 --> 00:36:41,131 >> To przytłaczające na pierwszy rzut oka, ale co się dzieje wewnątrz tutaj? 891 00:36:41,131 --> 00:36:43,740 Po pierwsze, nie malloc, która widocznie nasz nowy przyjaciel, 892 00:36:43,740 --> 00:36:45,450 "Pamięć przeznaczyć." 893 00:36:45,450 --> 00:36:49,560 Więc to jest argumentem były przekazywane do niego, więc jest to dość duży argumentem. 894 00:36:49,560 --> 00:36:50,970 Warto więc drażnić to od siebie. 895 00:36:50,970 --> 00:36:53,410 >> strlen S oczywiście oznacza do-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 PUBLICZNOŚCI: liczba znaków. 898 00:36:55,600 --> 00:36:56,710 David J. MALAN: Tak liczba znaków w S. 899 00:36:56,710 --> 00:36:59,040 Więc długość s, przy ciąg. 900 00:36:59,040 --> 00:37:00,350 Tak więc G-b-e. 901 00:37:00,350 --> 00:37:02,320 Więc to chyba cztery w tej sprawie. 902 00:37:02,320 --> 00:37:05,485 Dlaczego to robię 1 po dzwoniąc strlen z s? 903 00:37:05,485 --> 00:37:06,360 PUBLICZNOŚCI: [niesłyszalne] 904 00:37:06,360 --> 00:37:07,590 David J. MALAN: W tym specjalny znak NULL. 905 00:37:07,590 --> 00:37:11,260 Jeśli pytasz mnie, co jest długość Nazwa Gabe, mam zamiar powiedzieć cztery. 906 00:37:11,260 --> 00:37:14,480 Pod maską, choć muszę że piąty bajt na znak null. 907 00:37:14,480 --> 00:37:16,100 Więc dlatego robię ten 1. 908 00:37:16,100 --> 00:37:21,730 >> Teraz tylko w przypadku, gdy są uruchomione w tym Program na komputerze innym niż, powiedzmy, 909 00:37:21,730 --> 00:37:24,610 Urządzenie CS50, gdzie wielkość char 910 00:37:24,610 --> 00:37:26,350 może być różny z własnego computer-- 911 00:37:26,350 --> 00:37:30,590 Okazuje się, że mogę nazwać sizeof operator, wystarczy zwrócić się do komputera, 912 00:37:30,590 --> 00:37:32,870 jaki jest rozmiar char na tym komputerze? 913 00:37:32,870 --> 00:37:37,400 >> I przez pomnożenie pięciu w tym Przykład wielkością, która char 914 00:37:37,400 --> 00:37:40,440 na większości komputerów będzie być tylko jeden, malloc 915 00:37:40,440 --> 00:37:44,830 zamierza przeznaczyć dla mnie wielkim fragment pamięci tutaj po prawej stronie. 916 00:37:44,830 --> 00:37:47,140 I to będzie return-- jest function-- więc 917 00:37:47,140 --> 00:37:48,265 zamierza powrócić do mnie, co? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 PUBLICZNOŚCI: adres? 920 00:37:51,830 --> 00:37:53,709 David J. MALAN: adres co? 921 00:37:53,709 --> 00:37:55,250 PUBLICZNOŚCI: pamięci jest przydzielona? 922 00:37:55,250 --> 00:37:56,450 David J. MALAN: Z pamięci jest przydzielona. 923 00:37:56,450 --> 00:37:59,189 Tak więc nie mam pojęcia, szczerze mówiąc, gdzie to będzie skończyć. 924 00:37:59,189 --> 00:38:01,480 Zamierzam zaproponować to się skończyć na 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Całkowicie arbitralne, ale gdzieś indziej niż 0x50, 927 00:38:06,009 --> 00:38:08,800 Ponieważ system operacyjny, Windows i Mac OS nie dla mnie, to 928 00:38:08,800 --> 00:38:11,230 upewnij się, że to daje mi różne kawałki pamięci RAM. 929 00:38:11,230 --> 00:38:14,210 >> Tak to jest, gdy ta wartość fragment pamięci może skończyć. 930 00:38:14,210 --> 00:38:16,060 Więc to jest to, co kończy się tutaj, 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 Więc teraz wyraźnie, rozumiem że nie jest taki sam jak ten, 933 00:38:21,570 --> 00:38:23,960 bo oni wskazując na różne fragmenty pamięci. 934 00:38:23,960 --> 00:38:29,980 Więc jeśli teraz faktycznie chcą skopiować ten w, zróbmy swoje proponowane rozwiązanie. 935 00:38:29,980 --> 00:38:36,870 >> Chodźmy, tworzenie pętli, i do t uchwyt i dostaje y wspornik i. 936 00:38:36,870 --> 00:38:39,760 Bo teraz mogę korzystać Ta tablica jak zapis, 937 00:38:39,760 --> 00:38:43,390 bo chociaż bardzo się przydzielić ogólnie alokuje mi pamięć, 938 00:38:43,390 --> 00:38:45,290 Pamięć jest tylko ciągłych bajtów. 939 00:38:45,290 --> 00:38:47,240 Bajt, bajt, bajt, z powrotem do tyłu na plecach. 940 00:38:47,240 --> 00:38:50,030 >> Mogę z pewnością jako programista traktować ją jako tablicę, która 941 00:38:50,030 --> 00:38:55,090 oznacza, że ​​mogę korzystać z tego w końcu zna oznaczenie tylko niektórych nawiasach kwadratowych. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> Więc pozwól mi zatrzymać tam, bo jest wiele jednocześnie, nawet 944 00:39:00,020 --> 00:39:03,530 choć idea, aby podsumować jest to, że ciąg, przez cały ten czas, 945 00:39:03,530 --> 00:39:05,550 Nie jest to nowy typ danych per se. 946 00:39:05,550 --> 00:39:10,150 To jest po prostu tak zwany wskaźnik, adres postaci, 947 00:39:10,150 --> 00:39:12,650 które po prostu oznacza, że ​​jest to liczba konwencji, które przez ludzi 948 00:39:12,650 --> 00:39:15,350 staramy się pisać jak 0x coś. 949 00:39:15,350 --> 00:39:18,590 >> Ale to tylko liczba, jak 33 Oxford Street, 950 00:39:18,590 --> 00:39:20,530 co zdarza się Adres CS budynku. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 Wszelkie pytania dotyczące tych informacji? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 Tak? 955 00:39:25,289 --> 00:39:28,530 >> PUBLICZNOŚCI: Dlaczego nie możemy sprawdzić dla t równym NULL? 956 00:39:28,530 --> 00:39:30,740 >> David J. MALAN: Dlaczego my sprawdzić t równym NULL? 957 00:39:30,740 --> 00:39:33,250 Jeśli czytamy documentation-- wielki question-- dla malloc, 958 00:39:33,250 --> 00:39:37,020 to się mówi w drobnym drukiem, czasami malloc może zwrócić null, 959 00:39:37,020 --> 00:39:38,080 jak getString. 960 00:39:38,080 --> 00:39:41,820 I rzeczywiście, GetString zwraca null jeśli z kolei malloc zwraca null, 961 00:39:41,820 --> 00:39:43,130 bo GetString używa malloc. 962 00:39:43,130 --> 00:39:46,400 >> I że może się zdarzyć, jeśli system operacyjny, Mac OS, Windows, co jest po prostu 963 00:39:46,400 --> 00:39:48,130 z pamięci dla Ciebie. 964 00:39:48,130 --> 00:39:49,820 Więc to, co tam się stało. 965 00:39:49,820 --> 00:39:52,910 >> I niech mi ujawnić jedną rzecz , że może po prostu cios umysłu 966 00:39:52,910 --> 00:39:55,100 lub całkowicie znajdować się zbyt daleko na linii. 967 00:39:55,100 --> 00:39:59,770 Ale pozwól mi wyciągnąć sama dla pętli do kopiowania, 968 00:39:59,770 --> 00:40:05,480 które przed chwilą, było przywołanie tego. t uchwyt i dostaje y wspornik i. 969 00:40:05,480 --> 00:40:06,740 >> Ładny i łatwy w obsłudze. 970 00:40:06,740 --> 00:40:09,330 Czuję się jak w drugim tygodniu ponownie. 971 00:40:09,330 --> 00:40:14,920 Ale to faktycznie może być w wersji zapisane jako ten, który wygląda tajemniczo. 972 00:40:14,920 --> 00:40:18,280 Jest to technika zwana wskaźnik arytmetyka, adres arytmetyka. 973 00:40:18,280 --> 00:40:19,600 Ale dlaczego to działa? 974 00:40:19,600 --> 00:40:22,220 >> Teraz irytująco, Autorzy postanowili wykorzystać C 975 00:40:22,220 --> 00:40:25,070 * symbol dla różnych celów. 976 00:40:25,070 --> 00:40:29,020 Widzieliśmy kiedyś już raz, char *, co oznacza "daj mi zmienną 977 00:40:29,020 --> 00:40:31,210 że będzie zawierać adres char ". 978 00:40:31,210 --> 00:40:33,990 Tak char * w tym kontekście oznacza "daj mi zmiennej." 979 00:40:33,990 --> 00:40:40,050 >> Niestety, w przypadku korzystania z * bez Słowo przed nim, jak char, 980 00:40:40,050 --> 00:40:41,905 to teraz nazywa Operator nieprawidłowego. 981 00:40:41,905 --> 00:40:43,530 I zobaczymy więcej tego niebawem. 982 00:40:43,530 --> 00:40:44,930 Ale to tylko oznacza "tam". 983 00:40:44,930 --> 00:40:49,070 To tak jakby powiedzieć, jeśli ktoś mi podał na kartce papieru "33 Oxford Street" 984 00:40:49,070 --> 00:40:53,830 jeśli to zrobię "* 33 Oxford Street", to oznacza, "Iść w dół ulicy do budynku ZS." 985 00:40:53,830 --> 00:40:57,220 >> Tak * tylko tam, jeżeli środki Słowo nie ma przed nim. 986 00:40:57,220 --> 00:40:59,100 Tak więc to, co jest t, aby być jasne? 987 00:40:59,100 --> 00:41:03,250 t oznacza adres fragmencie pamięci, która została podana do mnie. 988 00:41:03,250 --> 00:41:06,650 s oznacza adres co do jasności, na przykład byliśmy dyskusji, 989 00:41:06,650 --> 00:41:07,500 z małymi Gabe? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 s oznacza adres of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 PUBLICZNOŚCI: ciąg. 994 00:41:12,460 --> 00:41:14,126 David J. MALAN: oryginalnej nazwy Gabe'a. 995 00:41:14,126 --> 00:41:16,660 Więc jest to adres ten fragment pamięci. 996 00:41:16,660 --> 00:41:22,220 Więc jeśli powiem, t + Ja--, informacja, jest po prostu nasz stary znajomy. 997 00:41:22,220 --> 00:41:24,770 To jest po prostu zmienna indeksu który jest iteracji od zera na górę 998 00:41:24,770 --> 00:41:26,960 długości łańcucha s. 999 00:41:26,960 --> 00:41:30,367 Więc to będzie zero, jeden, potem dwa, potem trzy, potem cztery. 1000 00:41:30,367 --> 00:41:33,200 Warto więc zebrać te nowe Scratch-jak kawałki układanki, jeśli chcesz, 1001 00:41:33,200 --> 00:41:36,140 chociaż znowu składni jest o wiele bardziej ezoteryczne niż Scratch. 1002 00:41:36,140 --> 00:41:39,522 Tak t jest adres + i ma dać mi 1003 00:41:39,522 --> 00:41:42,480 Liczba, ponieważ są one Numery, które byliśmy rysunek jako hex. 1004 00:41:42,480 --> 00:41:43,560 Ale są tylko liczby. 1005 00:41:43,560 --> 00:41:49,960 >> Tak więc, jeśli adres t stwierdziliśmy był 0x88, co 0x88 Plus zero. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Nawet jeśli nie jesteś wygodny z jeszcze hex, zgadywać. 1008 00:41:53,980 --> 00:41:54,410 >> PUBLICZNOŚCI: oryginalna. 1009 00:41:54,410 --> 00:41:55,850 >> David J. MALAN: Nadal 0x88. 1010 00:41:55,850 --> 00:41:58,910 Więc co * 0x88 oznacza? 1011 00:41:58,910 --> 00:42:02,670 Oznacza to, "tam", co oznacza, skutecznie, "Podnieś tutaj swój palec." 1012 00:42:02,670 --> 00:42:06,930 Teraz po stronie prawej to wyrażenie, * a następnie w parens, 1013 00:42:06,930 --> 00:42:11,586 e + i oznaczają S, który jest zająć się tutaj małego g. 1014 00:42:11,586 --> 00:42:16,220 a + 0 jest oczywiście, s, co wynosi:. 1015 00:42:16,220 --> 00:42:21,230 >> Więc teraz, to * S, które podobnie jak * 33 Oxford Street oznacza go na adres 1016 00:42:21,230 --> 00:42:22,010 y. 1017 00:42:22,010 --> 00:42:24,170 Więc tutaj jest to palec, prawa ręka. 1018 00:42:24,170 --> 00:42:26,050 Więc co ja mam skopiować do czego? 1019 00:42:26,050 --> 00:42:30,260 Rzeczą na prawo, które jest Gabe, trochę g tutaj, pod tutaj. 1020 00:42:30,260 --> 00:42:32,750 >> Tak więc, że efekt Pierwsza iteracja pętli 1021 00:42:32,750 --> 00:42:36,200 , jak zaproponowano, chociaż wygląda szalony bardziej skomplikowane niż cokolwiek 1022 00:42:36,200 --> 00:42:42,110 widzieliśmy już wcześniej, jest po prostu, kliknij tutaj i skopiuj ten znak tutaj. 1023 00:42:42,110 --> 00:42:44,700 To daje mapę do obu miejsc. 1024 00:42:44,700 --> 00:42:46,130 >> I zobaczymy o wiele więcej o tym. 1025 00:42:46,130 --> 00:42:50,600 Ale teraz, jest tylko nadzieja wprowadzenie niektórych z tych podstawowych pojęć. 1026 00:42:50,600 --> 00:42:53,550 I rzeczywiście, przyjrzyjmy jeden ostateczny program, tutaj, 1027 00:42:53,550 --> 00:42:57,480 a następnie obiecał claymation, który będzie wszystko w porządku. 1028 00:42:57,480 --> 00:42:57,980 Wszystko w porządku. 1029 00:42:57,980 --> 00:43:01,680 Więc pozwól mi otworzyć up-- tam idziemy. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 Więc mi-- wrócimy na tym zdjęciu przed długo. 1032 00:43:05,440 --> 00:43:08,360 Pozwól mi otworzyć ten ostatni przykład tutaj. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> Więc tutaj jest bardzo, bardzo program, który realizuje 1035 00:43:12,710 --> 00:43:15,050 nic w życiu, które wykonuje następujące czynności. 1036 00:43:15,050 --> 00:43:18,740 To pierwszy deklaruje dwie zmienne x i Y, które nie są liczbami tym razem 1037 00:43:18,740 --> 00:43:19,240 per se. 1038 00:43:19,240 --> 00:43:20,448 Oni nie są liczbami całkowitymi, per se. 1039 00:43:20,448 --> 00:43:22,899 Są podobno int *. 1040 00:43:22,899 --> 00:43:25,690 Więc po prostu ktoś, co to znaczy Jeśli typem danych, zmienna, 1041 00:43:25,690 --> 00:43:26,860 jest typu int * gwiazdkowy? 1042 00:43:26,860 --> 00:43:30,240 To adres int. 1043 00:43:30,240 --> 00:43:31,990 >> Tak więc nie mam pojęcia, gdzie jest jeszcze. 1044 00:43:31,990 --> 00:43:35,150 To po prostu oznacza "umieścić, w końcu, adres int tutaj. " 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, wszędzie tam, gdzie jest to w pamięci, adres jest tam. 1046 00:43:38,340 --> 00:43:40,200 I to jest to, co y jest Będzie, jak również. 1047 00:43:40,200 --> 00:43:44,920 >> Jeśli teraz powiedzieć, x = malloc (sizeof (int)), to fantazyjny sposób na powiedzenie, 1048 00:43:44,920 --> 00:43:49,000 hej systemu operacyjnego, poprzez malloc, dał mi wystarczająco dużo pamięci do wielkości 1049 00:43:49,000 --> 00:43:52,370 z int, który jest prawdopodobnie będzie 32 bity lub cztery bajty. 1050 00:43:52,370 --> 00:43:53,680 >> Więc co malloc powrócić? 1051 00:43:53,680 --> 00:43:55,250 Malloc zwraca adres. 1052 00:43:55,250 --> 00:43:57,020 Więc co się dzieje, aby przechowywać w X? 1053 00:43:57,020 --> 00:44:00,600 Adres fragmencie pamięci, cztery bajty, że malloc 1054 00:44:00,600 --> 00:44:03,360 po prostu znaleźć dla mnie, prosząc system operacyjny. 1055 00:44:03,360 --> 00:44:08,240 >> Teraz zaś, linia cztery tutaj, * x = 42. 1056 00:44:08,240 --> 00:44:09,990 Wystarczy być jasne, co się dzieje na dole? 1057 00:44:09,990 --> 00:44:11,530 Na lewej stronie, * x. 1058 00:44:11,530 --> 00:44:13,610 że jest jak * 33 Oxford Street. 1059 00:44:13,610 --> 00:44:15,523 Tak * x oznacza co? 1060 00:44:15,523 --> 00:44:16,450 >> PUBLICZNOŚCI: Idź do. 1061 00:44:16,450 --> 00:44:17,908 >> David J. MALAN: Idź do tego adresu. 1062 00:44:17,908 --> 00:44:20,466 Gdziekolwiek, że fragment pamięci, przejdź do niego. 1063 00:44:20,466 --> 00:44:21,979 I umieścić to, co tam, oczywiście? 1064 00:44:21,979 --> 00:44:22,520 PUBLICZNOŚCI: 42. 1065 00:44:22,520 --> 00:44:23,580 David J. MALAN: 42. 1066 00:44:23,580 --> 00:44:25,650 Wszystko w porządku, * y, sam pomysł. 1067 00:44:25,650 --> 00:44:26,860 Idź do adresu w Y. 1068 00:44:26,860 --> 00:44:31,740 Umieścić numer 13 tam, y, ale to, co jest w tej chwili? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 PUBLICZNOŚCI: Nie ma pamięci dla y. 1071 00:44:34,630 --> 00:44:35,710 David J. MALAN: Nie ma pamięć y. 1072 00:44:35,710 --> 00:44:38,215 Więc co robi y prawdopodobnie zawiera, jak już mówi? 1073 00:44:38,215 --> 00:44:38,520 >> PUBLICZNOŚCI: Garbage. 1074 00:44:38,520 --> 00:44:39,480 >> David J. MALAN: Niektóre wartości śmieci. 1075 00:44:39,480 --> 00:44:41,320 Teraz stosunek śmieci wciąż liczbą. 1076 00:44:41,320 --> 00:44:43,160 To może jeszcze być mylone z adresem. 1077 00:44:43,160 --> 00:44:45,160 To tak, jakby ktoś nabazgrał coś w dół, 1078 00:44:45,160 --> 00:44:48,002 i błędnie zinterpretował to w ten sposób, część budynku na ulicy. 1079 00:44:48,002 --> 00:44:50,460 A jeśli po prostu spróbować, aby przejść do część budynku nie właścicielem, 1080 00:44:50,460 --> 00:44:53,710 lub jakiś fragment pamięci nie ma dano, złe rzeczy mogą się zdarzyć. 1081 00:44:53,710 --> 00:44:57,740 Komputer może się zawiesić, lub inne nieokreślone zachowanie może się zdarzyć. 1082 00:44:57,740 --> 00:45:01,310 >> Tak intro, a następnie, do Binky to. 1083 00:45:01,310 --> 00:45:04,290 Pamiętam jeszcze, 20 niektóre parę lat później, 1084 00:45:04,290 --> 00:45:07,200 gdzie jestem, kiedy w końcu rozumieć wskaźniki. 1085 00:45:07,200 --> 00:45:09,520 >> To znaczy, jeśli zostawić tutaj trzy minuty 1086 00:45:09,520 --> 00:45:12,170 i myślę, że nie zrozumieć wskaźniki, realizować 1087 00:45:12,170 --> 00:45:14,410 I pamiętać o 20 lat dla jakiegoś szalonego powodu 1088 00:45:14,410 --> 00:45:17,140 kiedy i dlaczego ostatecznie zatopiony w składzie mojego nauczania 1089 00:45:17,140 --> 00:45:19,501 kolega, Nishat Mehta w widok od Eliot jadalni. 1090 00:45:19,501 --> 00:45:21,250 Teraz, mam pamiętać to dlatego, że to był 1091 00:45:21,250 --> 00:45:23,920 jednym z tematów I, w szczególności, walczył z. 1092 00:45:23,920 --> 00:45:26,470 A następnie, w końcu kliknął, Ośmielam się powiedzieć, jak wiele tematów 1093 00:45:26,470 --> 00:45:27,460 w końcu będzie. 1094 00:45:27,460 --> 00:45:32,590 A teraz, aby czuć, że wszystko szczęśliwsi i bardziej przekonujące, 1095 00:45:32,590 --> 00:45:35,360 rzućmy okiem na nasz ostateczny Ostatnie trzy minuty, tu w Binky 1096 00:45:35,360 --> 00:45:37,675 od naszego przyjaciela, Nicka Parlante od Stanford. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [ODTWARZANIE] 1099 00:45:41,580 --> 00:45:42,750 >> Hej, Binky. 1100 00:45:42,750 --> 00:45:43,500 Obudź się! 1101 00:45:43,500 --> 00:45:45,960 To jest czas dla wskaźnika zabawy. 1102 00:45:45,960 --> 00:45:47,012 >> Co to jest? 1103 00:45:47,012 --> 00:45:48,723 Dowiedz się o wskazówki? 1104 00:45:48,723 --> 00:45:50,580 Och, cukierek! 1105 00:45:50,580 --> 00:45:53,563 >> Cóż, aby zacząć, myślę, że jesteśmy będzie trzeba kilka wskazówek. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 Ten kod przydziela dwa wskaźniki, które mogą wskazywać na liczby całkowite. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 Cóż, widzę dwa wskaźniki, ale nie wydają się być skierowane do niczego. 1110 00:46:02,140 --> 00:46:02,980 >> -To Prawo. 1111 00:46:02,980 --> 00:46:05,100 Początkowo, wskaźniki nie wskazują na nic. 1112 00:46:05,100 --> 00:46:08,030 Rzeczy, które wskazują na nazywane są pointees i ich ustanowieniem-tych 1113 00:46:08,030 --> 00:46:09,370 oddzielny stopień. 1114 00:46:09,370 --> 00:46:10,220 >> Och, tak, tak. 1115 00:46:10,220 --> 00:46:10,950 Wiedziałem o tym. 1116 00:46:10,950 --> 00:46:12,385 W pointees są oddzielne. 1117 00:46:12,385 --> 00:46:14,315 Er, tak jak można przeznaczyć wskazywany? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 Cóż, ten kod przydziela Nowy wskazywany całkowitą, 1121 00:46:18,970 --> 00:46:20,950 i to zestawy części X punkt do niego. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> Hej, to wygląda lepiej. 1124 00:46:23,230 --> 00:46:25,060 Więc należy coś zrobić. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 Będę nieprawidłowego wskaźnika x do zapisać numer 42 w jego wskazywany. 1127 00:46:30,455 --> 00:46:32,830 Do tej sztuczki, będę potrzebował mój Różdżka z wyłuskania. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> -Twoja Różdżka z dereferencji? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 That-- to świetnie. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -To Co kod wygląda. 1134 00:46:41,080 --> 00:46:44,110 Ja po prostu ustawić liczbę i [POP] 1135 00:46:44,110 --> 00:46:44,700 >> Hej, spójrz. 1136 00:46:44,700 --> 00:46:46,140 Nie idzie. 1137 00:46:46,140 --> 00:46:50,980 >> Więc robi dereference na x następująco strzałki, aby uzyskać dostęp do jego wskazywany. 1138 00:46:50,980 --> 00:46:53,160 W tym przypadku, sklep 42 tam. 1139 00:46:53,160 --> 00:46:57,710 Hej, spróbuj go zapisać numer 13 do drugiego wskaźnika y. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 Ja po prostu przejść do y, i uzyskać numer 13 ustawienia. 1142 00:47:03,270 --> 00:47:07,930 A następnie podjąć różdżki Wyłuskania i tylko [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> Och! 1144 00:47:08,960 --> 00:47:09,500 >> Oh, hej! 1145 00:47:09,500 --> 00:47:11,090 Że nie działa. 1146 00:47:11,090 --> 00:47:15,630 Powiedzieć, Binky, nie sądzę dereferencji y jest dobry pomysł, bo wiesz, 1147 00:47:15,630 --> 00:47:17,850 konfigurowania wskazywany jest oddzielny etap. 1148 00:47:17,850 --> 00:47:20,450 I nie sądzę, że kiedykolwiek to zrobił. 1149 00:47:20,450 --> 00:47:21,480 >> Dobry punkt. 1150 00:47:21,480 --> 00:47:21,980 Tak. 1151 00:47:21,980 --> 00:47:25,680 Mamy przyznane na wskaźnik y, ale nie ustawić go zwrócić do wskazywany. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -Bardzo spostrzegawczy. 1154 00:47:28,616 --> 00:47:30,240 Hej, szukasz dobrze tam, Binky. 1155 00:47:30,240 --> 00:47:33,400 Można go naprawić, więc Y punktów do tej samej wskazywany jako X? 1156 00:47:33,400 --> 00:47:34,000 >> Jasne. 1157 00:47:34,000 --> 00:47:36,780 Użyję Różdżka z wskaźnikiem zadania. 1158 00:47:36,780 --> 00:47:38,740 >> -is, Że będzie Problem jak wcześniej? 1159 00:47:38,740 --> 00:47:39,240 Nie. 1160 00:47:39,240 --> 00:47:40,660 Nie dotykać pointees. 1161 00:47:40,660 --> 00:47:44,450 To tylko jeden wskaźnik do zmiany wskazują na to samo, co innego. 1162 00:47:44,450 --> 00:47:45,450 >> Och, widzę. 1163 00:47:45,450 --> 00:47:48,200 Teraz y wskazuje na tym samym miejscu co X. 1164 00:47:48,200 --> 00:47:48,910 Więc czekać. 1165 00:47:48,910 --> 00:47:49,950 Obecnie, y jest ustalone. 1166 00:47:49,950 --> 00:47:51,120 Ma wskazywany. 1167 00:47:51,120 --> 00:47:54,510 Więc można spróbować różdżki Dereferencji ponownie wysłać 13 goli. 1168 00:47:54,510 --> 00:47:56,510 >> Uh, OK. 1169 00:47:56,510 --> 00:47:58,160 Tu idzie. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> Hej, spójrz na to. 1171 00:47:59,340 --> 00:48:00,750 Teraz prace nad wyłuskania y. 1172 00:48:00,750 --> 00:48:04,991 A ponieważ wskaźniki dzielą że jednym wskazywany, oboje zobaczyć 13. 1173 00:48:04,991 --> 00:48:05,490 Tak. 1174 00:48:05,490 --> 00:48:06,870 Udostępnianie, cokolwiek. 1175 00:48:06,870 --> 00:48:08,820 Więc my teraz zamienić się miejscami teraz? 1176 00:48:08,820 --> 00:48:09,440 >> Och, spójrz. 1177 00:48:09,440 --> 00:48:10,830 Nie mamy czasu. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> Po prostu pamiętaj, trzy zasady wskaźnika. 1180 00:48:13,530 --> 00:48:16,560 Numer Jeden, podstawowa struktura jest to, że masz wskaźnik, 1181 00:48:16,560 --> 00:48:18,680 i zwraca się do wskazywany. 1182 00:48:18,680 --> 00:48:20,640 Ale wskaźnik i wskazywany są oddzielne, 1183 00:48:20,640 --> 00:48:22,610 i częsty błąd jest utworzenie wskaźnika, 1184 00:48:22,610 --> 00:48:25,000 ale zapomnij dać mu wskazywany. 1185 00:48:25,000 --> 00:48:28,170 >> Numer Dwa, wskaźnik dereferencji rozpoczyna się na wskaźniku 1186 00:48:28,170 --> 00:48:31,050 i następuje jego strzałkę nad aby uzyskać dostęp do jego wskazywany. 1187 00:48:31,050 --> 00:48:33,400 Jak wszyscy wiemy, w tym działa tylko wtedy, gdy istnieje 1188 00:48:33,400 --> 00:48:36,270 wskazywany, jakiego rodzaju wraca z art Number One. 1189 00:48:36,270 --> 00:48:39,000 >> Numer trzy, wskaźnik Przypisanie przyjmuje jeden wskaźnik 1190 00:48:39,000 --> 00:48:42,320 i zmienia go zwrócić do sam wskazywany jako inny wskaźnik. 1191 00:48:42,320 --> 00:48:44,160 Więc po cesji, dwa wskaźniki 1192 00:48:44,160 --> 00:48:45,910 będzie wskazywać na ten sam wskazywany. 1193 00:48:45,910 --> 00:48:47,990 Czasami to się nazywa dzielenie. 1194 00:48:47,990 --> 00:48:49,740 I to wszystko, co jest do tego, naprawdę. 1195 00:48:49,740 --> 00:48:50,277 Żegnaj teraz. 1196 00:48:50,277 --> 00:48:51,110 [KONIEC ODTWARZANIE] 1197 00:48:51,110 --> 00:48:52,568 David J. MALAN: To jest to dla CS50. 1198 00:48:52,568 --> 00:48:55,110 Będziemy zobaczenia w przyszłym tygodniu. 1199 00:48:55,110 --> 00:48:56,064