1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] DAVID J. Malan: Dobrze. 2 00:00:08,160 --> 00:00:11,170 To CS50, i to jest koniec drugiego tygodnia. 3 00:00:11,170 --> 00:00:14,650 Jeśli spodziewasz się być głodny w tym czasie jutro, wiem, że będziemy 4 00:00:14,650 --> 00:00:18,920 zwołać jako małe grupy, jutro, w czwartek 13:15. 5 00:00:18,920 --> 00:00:21,460 Jest to adres URL tutaj, jeśli chcesz RSVP. 6 00:00:21,460 --> 00:00:25,270 Przestrzeń jest ograniczona, więc proszę wybaczyć, jeśli formularz został wypełniony przez czas 7 00:00:25,270 --> 00:00:26,680 to wypełnić. 8 00:00:26,680 --> 00:00:29,400 Innym URL jednak, że mogą być interesujące jest to. 9 00:00:29,400 --> 00:00:32,409 >> Więc tylko o miesiąc, kurs ma być udostępnione 10 00:00:32,409 --> 00:00:36,090 wszystko szerzej przez edx, poprzez który ludzie w Internecie, będzie 11 00:00:36,090 --> 00:00:39,580 w stanie podążać, angażują się w trakcie dość aktywnie, w rzeczywistości. 12 00:00:39,580 --> 00:00:43,070 Będą przy użyciu urządzenia i CS50 CS50 dyskutować i większość 13 00:00:43,070 --> 00:00:45,840 różnych narzędzi, które już zostały przy użyciu tego semestru. 14 00:00:45,840 --> 00:00:49,030 A jedną z inicjatyw chcielibyśmy podjąć jako eksperyment w tym roku 15 00:00:49,030 --> 00:00:53,120 jest zobaczyć, jak wiele treści można tłumaczyć na inny w mowie i 16 00:00:53,120 --> 00:00:54,110 języków. 17 00:00:54,110 --> 00:00:58,000 Więc jeśli możesz mieć zainteresowanie uczestnictwem w tym projekcie, na podstawie której 18 00:00:58,000 --> 00:01:02,090 będziemy dostarczać angielskiego transkrypcje i napisy do Kursu 19 00:01:02,090 --> 00:01:05,190 wykłady i szorty i seminariów oraz sekcje i podobne - 20 00:01:05,190 --> 00:01:08,700 jeśli mówić płynnie lub pisać płynnie jakiś inny język, chcielibyśmy 21 00:01:08,700 --> 00:01:12,240 miłość do zaangażowania się w ten projekt, w którym można wziąć na jeden lub więcej 22 00:01:12,240 --> 00:01:15,340 Filmy, tłumacząc je na język znasz bardzo dobrze. 23 00:01:15,340 --> 00:01:19,050 Aby dać ci poczucie interfejsu, jest to internetowy interfejs użytkownika 24 00:01:19,050 --> 00:01:22,330 że będziemy używać, które będą tworzyć głównie UI takiego. 25 00:01:22,330 --> 00:01:24,520 To było mi nauczanie niektórych Halloween temu. 26 00:01:24,520 --> 00:01:27,710 A z prawej strony tam w czarnym obok tych stempli czasowych, 27 00:01:27,710 --> 00:01:31,300 zobaczysz różne rzeczy, które wyszły z moich ust, że dnia. 28 00:01:31,300 --> 00:01:34,660 A potem pod nim, będziesz w stanie przetłumaczyć na inny język. 29 00:01:34,660 --> 00:01:37,840 Dokładnie to, co jest między odwzorowania, w tym przypadku, angielskim 30 00:01:37,840 --> 00:01:38,660 i, powiedzmy, hiszpański. 31 00:01:38,660 --> 00:01:40,480 Więc to jest rzeczywiście bardzo łatwy w obsłudze narzędzie. 32 00:01:40,480 --> 00:01:43,690 Można przewijać do przodu i bardzo łatwo za pomocą skrótów klawiaturowych. 33 00:01:43,690 --> 00:01:46,710 Więc jeśli chcesz wziąć udział w tym eksperymencie i mają swoje słowa 34 00:01:46,710 --> 00:01:50,730 zobaczyć i przeczytać o potencjalnie tysięcy ludzi tam, proszę się czuć 35 00:01:50,730 --> 00:01:51,960 wolne do udziału. 36 00:01:51,960 --> 00:01:56,940 >> Teraz jedno słowo na temat kociaka od poniedziałku, bo wysłaliśmy zbyt 37 00:01:56,940 --> 00:01:58,120 straszne wiadomości. 38 00:01:58,120 --> 00:02:02,130 Sobie sprawę, że w godzinach pracy, jak i działy sugerować sugerować, 39 00:02:02,130 --> 00:02:05,110 konstrukcja jest oczywiście bardzo się studenci współpracę i 40 00:02:05,110 --> 00:02:09,250 mówić do pracy poprzez zestawy problemowych i problemy ze sobą. 41 00:02:09,250 --> 00:02:13,630 I naprawdę linia prostu sprowadza się do, ponownie, praca, którą ostatecznie 42 00:02:13,630 --> 00:02:16,420 powinni złożyć powinny być własne. 43 00:02:16,420 --> 00:02:19,080 I tak to jest, szczerze mówiąc - w godzinach pracy urzędu, jest to całkowicie normalny - 44 00:02:19,080 --> 00:02:21,560 jest to całkowicie do przewidzenia, nawet - do rozmów z niektórymi 45 00:02:21,560 --> 00:02:22,370 przyjaciele obok ciebie. 46 00:02:22,370 --> 00:02:25,240 Jeśli on lub ona ma problemy z jakimś tematem, a jesteś jak, oh, dobrze niech 47 00:02:25,240 --> 00:02:27,750 mi dać wgląd jakiegoś wiersza kodu, który napisałem. 48 00:02:27,750 --> 00:02:28,290 To dobrze. 49 00:02:28,290 --> 00:02:28,700 To się zdarza. 50 00:02:28,700 --> 00:02:31,580 I to jest bardzo sprzyja, jak sądzę, z procesem uczenia się. 51 00:02:31,580 --> 00:02:35,270 Gdzie linia znowu dostaje kciuki jest, gdy głowa jest przechylona na rodzaj 52 00:02:35,270 --> 00:02:38,800 tutaj zbyt wielu sekund lub minut na które naprawdę mają tylko 53 00:02:38,800 --> 00:02:41,250 było okazją do odblokowania swojego znajomego. 54 00:02:41,250 --> 00:02:43,870 A już na pewno, kiedy wszystko się wymieniane za pośrednictwem poczty elektronicznej i i Dropbox 55 00:02:43,870 --> 00:02:45,350 jak, tam jest linia. 56 00:02:45,350 --> 00:02:48,940 Tak więc na wszelkie sposoby, czuć się komfortowo i skłania go do rozmów z przyjaciółmi 57 00:02:48,940 --> 00:02:51,270 i koledzy o psets i więcej. 58 00:02:51,270 --> 00:02:54,680 I po prostu zrozumieć, że to, co ostatecznie złożyć powinien być naprawdę 59 00:02:54,680 --> 00:02:57,780 Produkt swojego dzieła, a nie ktoś inny. 60 00:02:57,780 --> 00:03:01,010 >> Więc w tym samym duchu uroczych stworzeń, możesz być 61 00:03:01,010 --> 00:03:02,820 znam tego gościa tutaj. 62 00:03:02,820 --> 00:03:06,180 Więc to jest piekielnie cheesy film z lat temu. 63 00:03:06,180 --> 00:03:08,680 Ktoś tu widział Spaceballs? 64 00:03:08,680 --> 00:03:09,120 Dobrze. 65 00:03:09,120 --> 00:03:10,220 Tak dobry numer tutaj. 66 00:03:10,220 --> 00:03:13,840 Więc to jest nasz cudownie akademicki sposób wprowadzania dziś ostatecznie 67 00:03:13,840 --> 00:03:15,130 Pojęcie kryptografii. 68 00:03:15,130 --> 00:03:19,010 I tak jedna z domen problemów specyficznych dla Pset 2, która będzie 69 00:03:19,010 --> 00:03:22,770 późno jutro, jest nurkowanie w świat kryptografii, które 70 00:03:22,770 --> 00:03:26,380 to sztuka szyfrowania lub kodowania danych. 71 00:03:26,380 --> 00:03:30,160 I to w końcu odnosi się do świata bezpieczeństwa. 72 00:03:30,160 --> 00:03:34,440 >> Teraz bezpieczeństwo dla większości nas jest w formie mechanizmów dość prozaicznych. 73 00:03:34,440 --> 00:03:36,920 Każdy z nas ma nazwy użytkowników i hasła. 74 00:03:36,920 --> 00:03:41,350 I każdy z nas ma bardzo złe nazwy użytkownika i hasła, najprawdopodobniej. 75 00:03:41,350 --> 00:03:45,250 Jeśli hasło jest takie samo na wielu stronach internetowych, że chyba nie 76 00:03:45,250 --> 00:03:47,920 najlepszy pomysł, jak omówimy do końca semestru. 77 00:03:47,920 --> 00:03:51,680 Jeśli hasło jest napisane na karteczki - nie żart - na Twoim 78 00:03:51,680 --> 00:03:55,130 monitor, to też nie zawsze jest najlepszy projekt, ale dość powszechne 79 00:03:55,130 --> 00:03:56,140 zjawiskiem. 80 00:03:56,140 --> 00:04:00,420 A jeśli nie używasz szyfrowania do szyfrowania haseł, są one 81 00:04:00,420 --> 00:04:01,610 szczególnie narażone. 82 00:04:01,610 --> 00:04:04,670 Więc jeśli uważasz, że jest bardzo mądry przez posiadające ukryte słowo 83 00:04:04,670 --> 00:04:07,740 udokumentować gdzieś na dysku twardym, który ma wszystkie hasła, ale 84 00:04:07,740 --> 00:04:10,550 on w folderze, że nikt nie będzie szukać w, to też nie jest bardzo 85 00:04:10,550 --> 00:04:11,540 bezpieczny mechanizm. 86 00:04:11,540 --> 00:04:15,100 I co z tego pset 2 wprowadzi to jest sztuka i kryptografii 87 00:04:15,100 --> 00:04:18,300 kodowania informacji, aby takie rzeczy jak hasła są 88 00:04:18,300 --> 00:04:19,500 tym bardziej bezpieczne. 89 00:04:19,500 --> 00:04:24,500 Tak, aby motywować ten bardzo rzeczywistych problemów z bardzo nie w świecie rzeczywistym 90 00:04:24,500 --> 00:04:28,740 scenariusz, pozwól mi przedstawić Państwu jeden z naszych ulubionych klipów tutaj z tego 91 00:04:28,740 --> 00:04:29,895 movie, Spaceballs. 92 00:04:29,895 --> 00:04:30,565 >> [PLAYBACK VIDEO] 93 00:04:30,565 --> 00:04:32,995 Kask, to diabeł, co tu się dzieje? 94 00:04:32,995 --> 00:04:34,730 Co robisz z moją córką? 95 00:04:34,730 --> 00:04:38,960 -Pozwól mi przedstawić genialny młody chirurg plastyczny, dr Philip 96 00:04:38,960 --> 00:04:43,290 Schlotkin, największy człowiek nosa w całym 97 00:04:43,290 --> 00:04:45,526 Wszechświat i Beverly Hills. 98 00:04:45,526 --> 00:04:46,450 -Wasza Wysokość. 99 00:04:46,450 --> 00:04:47,380 Nos praca? 100 00:04:47,380 --> 00:04:48,035 Nie rozumiem. 101 00:04:48,035 --> 00:04:49,480 Ona już miała nosa. 102 00:04:49,480 --> 00:04:51,490 To było słodkie 16 obecnie. 103 00:04:51,490 --> 00:04:53,090 -Nie, to nie jest to co myślisz. 104 00:04:53,090 --> 00:04:55,150 Jest o wiele, wiele gorzej. 105 00:04:55,150 --> 00:04:59,860 Jeśli nie dasz mi kombinację do kurtyny powietrznej, dr Schlotkin woli 106 00:04:59,860 --> 00:05:04,135 dać córkę jej stary nos. 107 00:05:04,135 --> 00:05:05,385 -Nie! 108 00:05:08,202 --> 00:05:10,186 Skąd to masz? 109 00:05:10,186 --> 00:05:11,178 -Wszystko w porządku. 110 00:05:11,178 --> 00:05:11,674 Powiem. 111 00:05:11,674 --> 00:05:12,666 Powiem. 112 00:05:12,666 --> 00:05:14,154 -Nie, tatusiu, nie. 113 00:05:14,154 --> 00:05:15,150 Nie musi. 114 00:05:15,150 --> 00:05:16,460 -Masz rację, moja droga. 115 00:05:16,460 --> 00:05:18,450 Tęsknię nowy nos. 116 00:05:18,450 --> 00:05:21,550 Ale nie powiem im kombinację nie wiem co. 117 00:05:21,550 --> 00:05:23,100 -Bardzo dobrze. 118 00:05:23,100 --> 00:05:25,510 Dr Schlotkin, czy twój najgorszy. 119 00:05:25,510 --> 00:05:26,760 -Z przyjemnością. 120 00:05:30,560 --> 00:05:31,180 -Nie! 121 00:05:31,180 --> 00:05:33,450 Czekaj, czekaj. 122 00:05:33,450 --> 00:05:34,770 Powiem. 123 00:05:34,770 --> 00:05:36,400 Powiem. 124 00:05:36,400 --> 00:05:38,630 -Wiedziałem, że to działa. 125 00:05:38,630 --> 00:05:42,040 Dobra, daj mi go. 126 00:05:42,040 --> 00:05:46,890 -Jest połączenie. 127 00:05:46,890 --> 00:05:47,290 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 129 00:05:48,183 --> 00:05:48,950 -Two. 130 00:05:48,950 --> 00:05:49,370 -Two. 131 00:05:49,370 --> 00:05:50,450 -Two. 132 00:05:50,450 --> 00:05:50,715 -Trzy 133 00:05:50,715 --> 00:05:51,380 -Trzy. 134 00:05:51,380 --> 00:05:52,390 -Trzy. 135 00:05:52,390 --> 00:05:53,200 -Four. 136 00:05:53,200 --> 00:05:53,720 -Four. 137 00:05:53,720 --> 00:05:55,830 -Four. 138 00:05:55,830 --> 00:05:56,580 -Five 139 00:05:56,580 --> 00:05:57,120 -Pięć. 140 00:05:57,120 --> 00:05:58,560 -Pięć. 141 00:05:58,560 --> 00:06:03,770 Zatem połączenie, jest jeden, dwa, trzy, cztery, pięć. 142 00:06:03,770 --> 00:06:06,745 To najgłupsza połączenie, jaki słyszałem w życiu. 143 00:06:06,745 --> 00:06:09,290 To rodzaj rzeczy idiota miałby na jego bagażu. 144 00:06:09,290 --> 00:06:11,540 -Dziękuję, Wasza Wysokość. 145 00:06:11,540 --> 00:06:12,940 -Co zrobiłeś? 146 00:06:12,940 --> 00:06:14,230 -I odwrócił się od ściany. 147 00:06:14,230 --> 00:06:14,630 -Nie, nie. 148 00:06:14,630 --> 00:06:15,430 Wyłączono cały film. 149 00:06:15,430 --> 00:06:16,722 -I musi być naciśnięty niewłaściwy przycisk. 150 00:06:16,722 --> 00:06:18,078 -Cóż, umieścić go z powrotem. 151 00:06:18,078 --> 00:06:18,805 Umieść ten film ponownie. 152 00:06:18,805 --> 00:06:19,080 -Tak jest, sir. 153 00:06:19,080 --> 00:06:19,270 Tak, sir. 154 00:06:19,270 --> 00:06:19,830 -Chodźmy, Erna. 155 00:06:19,830 --> 00:06:20,270 Przyjdź, Gretchen. 156 00:06:20,270 --> 00:06:22,850 Oczywiście wiesz, że nadal mam do wystawienia rachunku za to. 157 00:06:27,400 --> 00:06:28,325 -No, to zadziałało? 158 00:06:28,325 --> 00:06:29,550 Gdzie jest brama? 159 00:06:29,550 --> 00:06:29,910 -Udało się, sir. 160 00:06:29,910 --> 00:06:30,770 Mamy połączenie. 161 00:06:30,770 --> 00:06:31,390 -Świetnie. 162 00:06:31,390 --> 00:06:35,630 Teraz możemy wziąć każdy ostatni powiew świeżego powietrza z planety Druidia. 163 00:06:35,630 --> 00:06:36,550 Co jest kombinacja? 164 00:06:36,550 --> 00:06:38,805 -Raz, dwa, trzy, cztery, pięć. 165 00:06:38,805 --> 00:06:40,610 -Raz, dwa, trzy, cztery, pięć? 166 00:06:40,610 --> 00:06:41,070 -Tak. 167 00:06:41,070 --> 00:06:41,760 -To niesamowite. 168 00:06:41,760 --> 00:06:45,200 Mam taką samą kombinację na mój bagaż. 169 00:06:45,200 --> 00:06:47,800 Przygotuj Spaceball 1 do natychmiastowego wyjazdu. 170 00:06:47,800 --> 00:06:48,536 -Tak jest, sir. 171 00:06:48,536 --> 00:06:52,350 -I zmienić kombinację na mój bagaż. 172 00:06:52,350 --> 00:06:53,250 -Ow! 173 00:06:53,250 --> 00:06:55,020 [END ODTWARZANIE VIDEO] 174 00:06:55,020 --> 00:06:57,470 >> DAVID J. Malan: niesamowity film powinien teraz wszystko zobaczyć. 175 00:07:00,600 --> 00:07:06,540 Więc kontekst jest tutaj z niepewnych danych pochodzi okazję 176 00:07:06,540 --> 00:07:07,790 szyfruje je i wspiąć go. 177 00:07:07,790 --> 00:07:11,060 A więc, na przykład, jest przykładem zaszyfrowanej wiadomości. 178 00:07:11,060 --> 00:07:12,980 To rzeczywiście coś mówi w języku angielskim. 179 00:07:12,980 --> 00:07:14,750 Ale to nie jest oczywiście całkowicie oczywiste. 180 00:07:14,750 --> 00:07:17,360 A my zatoczyła koło dzisiaj odciąć co ta tajemnica 181 00:07:17,360 --> 00:07:18,380 Wiadomość o to. 182 00:07:18,380 --> 00:07:22,370 Ale w prawdziwym świecie komputerów, rzeczy, nawet nie wyglądają jak mogą 183 00:07:22,370 --> 00:07:23,440 być zwroty angielskie. 184 00:07:23,440 --> 00:07:27,500 Na przykład, jest to, co można znaleźć w standardowym systemie Linux lub Mac lub 185 00:07:27,500 --> 00:07:32,080 Komputer Unix w pliku, który był kiedyś nazywany plik haseł. 186 00:07:32,080 --> 00:07:34,170 Obecnie, to zostały przeniesione do innych miejsc. 187 00:07:34,170 --> 00:07:38,660 Ale jeśli spojrzeć na właściwym miejscu w systemie, zobaczysz nie tylko swoje 188 00:07:38,660 --> 00:07:41,430 nazwa użytkownika lub innych osób w systemie, ale zobaczysz 189 00:07:41,430 --> 00:07:43,410 szyfrowana wersja ich hasłem. 190 00:07:43,410 --> 00:07:47,800 Rzeczywiście, tam krypta słowo sugeruje, że następujące rzeczy jest szyfrowane. 191 00:07:47,800 --> 00:07:52,030 I ta seria pozornie przypadkowych liter i znaków i numerów oraz 192 00:07:52,030 --> 00:07:56,370 itd. mogą być odszyfrowane tylko ogólnie znając jakąś tajemnicę - 193 00:07:56,370 --> 00:07:58,600 tajne słowo, tajny numer. 194 00:07:58,600 --> 00:08:02,760 I tak rzeczywiście, sztuka kryptografii ostatecznie sprowadza się do zaufania niektórych 195 00:08:02,760 --> 00:08:05,700 sortowania i coś wiedzieć, że ktoś inny nie. 196 00:08:05,700 --> 00:08:10,010 Będziemy badać to w nieco bardziej szczegółowo dziś iw Pset przyjść. 197 00:08:10,010 --> 00:08:11,860 >> A teraz słowo na pass / fail. 198 00:08:11,860 --> 00:08:15,250 Tak szczególnie, jak niektórzy z was zanurkował PSET 1, urządzenia, i 199 00:08:15,250 --> 00:08:18,390 bardzo nowy świat dla siebie, uświadomiłem sobie, że frustracje i 200 00:08:18,390 --> 00:08:21,340 splątanie i tylko trudności techniczne należy się spodziewać. 201 00:08:21,340 --> 00:08:24,410 Szczególnie przy pierwszym pset, gdzie jest tak wiele nowych, dopiero się 202 00:08:24,410 --> 00:08:28,830 zaznajomieni z ls i cd i wszystkich tych tajemniczych poleceń w nowym środowisku. 203 00:08:28,830 --> 00:08:32,679 I to jest niezależne od rzeczywistego materiału i programowania siebie. 204 00:08:32,679 --> 00:08:35,960 Więc sobie sprawę też, że z pewnością istnieją godziny pracy, które istnieją jako 205 00:08:35,960 --> 00:08:36,770 struktura wsparcia. 206 00:08:36,770 --> 00:08:38,620 Sekcje rozpocząć tę niedzielę nadchodzi. 207 00:08:38,620 --> 00:08:41,990 Ale co najważniejsze, jeśli czujesz się po prostu, że nie jest 208 00:08:41,990 --> 00:08:44,420 świat dla ciebie, uświadomić sobie, że to naprawdę nie wystarczy czasu. 209 00:08:44,420 --> 00:08:47,520 I gdyby nie to, za możliwość lat temu dla mnie podejmowania klasę 210 00:08:47,520 --> 00:08:50,840 pass / fail, szczerze mówiąc, nigdy bym nawet nie postawił stopy w klasie. 211 00:08:50,840 --> 00:08:53,520 I można to zmienić, aż, powiedzmy, piąty poniedziałek kursu. 212 00:08:53,520 --> 00:08:57,110 Więc jeśli jesteś na skraju teraz uświadomić sobie, że zamiast głowy na jakiś inny 213 00:08:57,110 --> 00:09:01,000 Wody w ogóle, czy na pewno rozważyć tylko zmiana do pass / fail. 214 00:09:01,000 --> 00:09:03,750 Ponownie, nie jest tak naprawdę ta kultura tutaj na Harvardzie podejmowania rzeczy 215 00:09:03,750 --> 00:09:08,080 pass / fail ponieważ każdy naprawdę chce osiągnąć lub nadwyżką. 216 00:09:08,080 --> 00:09:11,470 Ale szczerze mówiąc, jest to wspaniały sposób na spróbowanie czegoś, że nie może 217 00:09:11,470 --> 00:09:13,110 być znane. 218 00:09:13,110 --> 00:09:17,090 I będziesz kończy się robi w większości przypadków dość drobnych, może 219 00:09:17,090 --> 00:09:18,040 dużo do zaskoczenia. 220 00:09:18,040 --> 00:09:20,850 Iw bardziej konkretny sposób, co myślę pass / fail ogólnie robi, 221 00:09:20,850 --> 00:09:23,350 zwłaszcza jak może masz doświadczenie z Pset 0, jeśli umieściliśmy 222 00:09:23,350 --> 00:09:27,200 w 10 godzin, 15 godzin, 25 godzin w niektórych PSET - a ty jesteś po prostu walić 223 00:09:27,200 --> 00:09:28,180 Twoja głowa o ścianę, 224 00:09:28,180 --> 00:09:29,850 i robi się bardzo późno w nocy, 225 00:09:29,850 --> 00:09:31,880 ale ty podjął Pset jak 90% w sposób, 226 00:09:31,880 --> 00:09:33,780 wiesz, po prostu nie może dowiedzieć się, jedno - 227 00:09:33,780 --> 00:09:36,830 pass / fail naprawdę ma przewagę off klasy jak to, gdzie można sortować 228 00:09:36,830 --> 00:09:39,150 z radością powiedzieć, dobrze, wiem, że nie jest doskonały. 229 00:09:39,150 --> 00:09:40,470 Ale pracował mój tyłek w tej sprawie. 230 00:09:40,470 --> 00:09:42,410 Jestem całkiem zadowolony z którym zakończył się. 231 00:09:42,410 --> 00:09:44,780 Oraz że spełni oczekiwania na pass / fail. 232 00:09:44,780 --> 00:09:46,850 Więc nie miej to na uwadze. 233 00:09:46,850 --> 00:09:47,140 >> Dobrze. 234 00:09:47,140 --> 00:09:50,980 Tak więc ci z was, którzy walczyli do korzystania z Harward bezprzewodowy wiedzieć 235 00:09:50,980 --> 00:09:54,780 że jest CS50 SSID, Wi-Fi, który krąży 236 00:09:54,780 --> 00:09:56,520 może mieć więcej szczęścia dla. 237 00:09:56,520 --> 00:09:59,430 Jest to trochę ironiczne, że hasło to - jeśli chcesz, aby spróbować 238 00:09:59,430 --> 00:10:03,080 podłączania do lepszych prędkości i daj nam znać, czy to nie lepsze - 239 00:10:03,080 --> 00:10:09,240 jeden, dwa, trzy, cztery, pięć, aż do ośmiu ponieważ osiem jest 240 00:10:09,240 --> 00:10:10,270 bardziej bezpieczne niż pięć. 241 00:10:10,270 --> 00:10:15,520 Więc jeśli potrzebujesz Wi-Fi hasła, łączyć się bezprzewodowo CS50 tutaj. 242 00:10:15,520 --> 00:10:16,950 Jeden, dwa, trzy, cztery, pięć, sześć, siedem, osiem. 243 00:10:16,950 --> 00:10:20,440 I post na CS50 Porozmawiaj jeśli jeszcze sporadyczne problemy z łącznością, 244 00:10:20,440 --> 00:10:24,880 i damy z uprawnień, które należy wiedzieć o tym miejscu. 245 00:10:24,880 --> 00:10:25,180 >> Dobrze. 246 00:10:25,180 --> 00:10:30,350 Więc szybkie teaser, zwłaszcza dla tych z was, którzy to chłopcy czy dziewczęta fan 247 00:10:30,350 --> 00:10:31,900 wszystkim Apple, rzeczy. 248 00:10:31,900 --> 00:10:37,566 What I wykopali z kilku lat wstecz był ten plik tutaj, ilock.c, tylko do 249 00:10:37,566 --> 00:10:40,930 rodzaj bardziej konkretne i bardziej skomplikowane niektóre z bardziej podstawowym C 250 00:10:40,930 --> 00:10:42,350 Programy byliśmy pisania. 251 00:10:42,350 --> 00:10:44,360 Więc otworzyłem ten plik, ilock.c. 252 00:10:44,360 --> 00:10:46,830 Jest on dostępny na stronie wykładów na dziś. 253 00:10:46,830 --> 00:10:49,470 Na lewej stronie, widać długą listę funkcji. 254 00:10:49,470 --> 00:10:51,860 Więc człowiek, który napisał to napisał się wiele funkcji, 255 00:10:51,860 --> 00:10:53,290 więcej niż tylko main. 256 00:10:53,290 --> 00:10:55,490 Kiedyś całą masę bibliotek tutaj. 257 00:10:55,490 --> 00:11:00,450 A jeśli zaczniemy przewijanie, co to właściwie jest to bardzo 258 00:11:00,450 --> 00:11:04,670 po pierwsze, uważam, crack do oryginalnego iPhone. 259 00:11:04,670 --> 00:11:08,000 Kiedy chciał jailbreak oryginalny iPhone, co oznacza untether 260 00:11:08,000 --> 00:11:11,800 go z AT & T i faktycznie zainstalować specjalne oprogramowanie na nim i robić rzeczy 261 00:11:11,800 --> 00:11:13,510 że Apple nie chce ludziom robić - 262 00:11:13,510 --> 00:11:17,020 Cóż, ktoś wziął czas, aby dowiedzieć się dokładnie, w jaki sposób mogą wykorzystać 263 00:11:17,020 --> 00:11:20,880 wady oprogramowania, błędy, błędy, w oprogramowaniu Apple. 264 00:11:20,880 --> 00:11:22,650 I w ten sposób narodził ilock.c. 265 00:11:22,650 --> 00:11:26,670 Że jeśli on skompilowany na komputerze i zainstalować go na tym iPhone 266 00:11:26,670 --> 00:11:29,810 był podłączony do komputera poprzez, powiedzmy, kablem USB, nie daje 267 00:11:29,810 --> 00:11:33,360 administracyjne lub uprawnienia administratora na iPhone i pozwala zrobić bardzo dużo 268 00:11:33,360 --> 00:11:34,170 cokolwiek chcesz. 269 00:11:34,170 --> 00:11:36,740 >> I tak nie było to fascynujące kotka i myszkę pomiędzy Apple i 270 00:11:36,740 --> 00:11:39,920 reszta świata, w szczególności jak oni, jak wiele firm, spróbuj zablokować 271 00:11:39,920 --> 00:11:43,220 ich rzeczy w dół, tak że można tylko z nim zrobić, co zamierzają. 272 00:11:43,220 --> 00:11:46,620 Ale dzięki takimi ludźmi i ich zrozumienie niskopoziomowych 273 00:11:46,620 --> 00:11:50,580 szczegóły i, w tym przypadku, programowania C i wiele znanych konstrukcji 274 00:11:50,580 --> 00:11:54,630 że zaczęliśmy grać z, jesteś w stanie naprawdę wykorzystać 275 00:11:54,630 --> 00:11:59,050 sprzętu w sposób widać krój i niekoniecznie jakiś podmiot prawny. 276 00:11:59,050 --> 00:12:01,360 Tak na przykład, nie mam pojęcia, co to wszystko robi. 277 00:12:01,360 --> 00:12:03,220 Ale getVersion brzmi całkiem proste. 278 00:12:03,220 --> 00:12:05,480 I wygląda na to, że jest to funkcja, która ta osoba napisała. 279 00:12:05,480 --> 00:12:09,240 Weź jakąś liczbę całkowitą jako argument, nie zwraca nic, ale 280 00:12:09,240 --> 00:12:13,080 wydaje się pętli z pętli for tutaj i jeśli stanie, jeśli warunek, 281 00:12:13,080 --> 00:12:15,620 złamać, i jakoś dotyczy numery wersji. 282 00:12:15,620 --> 00:12:16,700 Jeśli będziemy przewijać - 283 00:12:16,700 --> 00:12:19,570 choć wiele z tych słów kluczowych będą nowe, a tam 284 00:12:19,570 --> 00:12:22,590 Mnóstwo funkcji tutaj nigdy nie widziałem i może nie zawsze patrz na 285 00:12:22,590 --> 00:12:23,830 kurs w semestrze - 286 00:12:23,830 --> 00:12:27,150 Na koniec dnia, to takie same zasady i logikę, że byli 287 00:12:27,150 --> 00:12:28,760 gry z do tej pory. 288 00:12:28,760 --> 00:12:34,220 Więc to jest zbyt stary, by złamać iPhone 3s lub 4s lub wkrótce 5s te dni, 289 00:12:34,220 --> 00:12:37,320 ale wiem, że to wszystko jest bardzo wiele pochodzi z tego świata, że ​​mamy 290 00:12:37,320 --> 00:12:38,430 zanurkował. 291 00:12:38,430 --> 00:12:41,900 >> Weźmy spojrzeć na przykład trochę bardziej proste. 292 00:12:41,900 --> 00:12:46,100 Ten jeden, tylko po to żeby podgrzać z niektórych składni, a także niektóre inne dane 293 00:12:46,100 --> 00:12:49,240 typu, że rozmawialiśmy o, ale nie bardzo widać w C. Jest to więc 294 00:12:49,240 --> 00:12:51,680 Plik o nazwie positive1.c. 295 00:12:51,680 --> 00:12:55,120 I na komentarze na górze, to tylko wymaga, użytkownik dostarczyć 296 00:12:55,120 --> 00:12:55,960 liczba dodatnia. 297 00:12:55,960 --> 00:12:59,530 Więc jest to przykład do-while, który jest miły dla użytkownika interaktywne 298 00:12:59,530 --> 00:13:01,980 programy, gdzie trzeba poinformować użytkownika coś zrobić. 299 00:13:01,980 --> 00:13:05,190 A jeśli oni nie współpracują, można krzyczeć na nich lub odrzucić ich wejście. 300 00:13:05,190 --> 00:13:11,610 Sprawa w punkcie, mam zamiar zrobić linie 19 poprzez 24, tak długo jak użytkownik posiada 301 00:13:11,610 --> 00:13:14,310 nie daje mi liczbę dodatnią. 302 00:13:14,310 --> 00:13:20,400 Teraz to tu szczegółowo na linii 18, dlaczego Oświadczam n wyżej cała ta 303 00:13:20,400 --> 00:13:24,490 Konstrukcja, w przeciwieństwie do pętli obok linii 22, gdzie 304 00:13:24,490 --> 00:13:26,880 faktycznie dbają, aby n? 305 00:13:26,880 --> 00:13:27,330 Tak? 306 00:13:27,330 --> 00:13:27,780 [Niesłyszalne] 307 00:13:27,780 --> 00:13:29,040 >> DAVID J. Malan: Tak, więc to kwestia zakresu. 308 00:13:29,040 --> 00:13:30,850 A w perspektywie laika, co to zakres odnosi się do? 309 00:13:34,690 --> 00:13:36,610 Tak? 310 00:13:36,610 --> 00:13:37,860 [Niesłyszalne] 311 00:13:40,040 --> 00:13:41,105 DAVID J. Malan: Czy możesz mówić trochę głośniej? 312 00:13:41,105 --> 00:13:43,450 SPEAKER 1: Gdzie można uzyskać dostęp do konkretnej zmiennej. 313 00:13:43,450 --> 00:13:45,170 DAVID J. Malan: Perfect. 314 00:13:45,170 --> 00:13:47,360 Gdzie można uzyskać dostęp do konkretnej zmiennej. 315 00:13:47,360 --> 00:13:50,400 I ogólnie, zasada jest dotychczas, że zakres niektórych 316 00:13:50,400 --> 00:13:55,860 zmienna jest zdefiniowana przez ostatnie klamrowych nawiasach, że widziałem. 317 00:13:55,860 --> 00:14:02,010 I tak w tym przypadku, jeśli popełnił błąd deklarując n na linii 22, 318 00:14:02,010 --> 00:14:03,010 że linia będzie działać. 319 00:14:03,010 --> 00:14:10,990 Chciałbym uzyskać int, i chciałbym umieścić go w tej zmiennej N w wierszu 22. 320 00:14:10,990 --> 00:14:16,900 Ale która linia kodu będzie teraz nie wiem, co mówię? 321 00:14:16,900 --> 00:14:22,650 Tak więc 25, i okazało się, 24, jak również, w tym przypadku z powodu, że nie mieści się 322 00:14:22,650 --> 00:14:23,610 z klamrami. 323 00:14:23,610 --> 00:14:27,280 Więc tylko trochę uciążliwe, ale bardzo łatwo rozwiązać, wystarczy oświadczenie 324 00:14:27,280 --> 00:14:30,140 Zmienna poza samej funkcji. 325 00:14:30,140 --> 00:14:32,600 >> Teraz zobaczymy później dzisiaj, można pójść o krok dalej. 326 00:14:32,600 --> 00:14:34,860 I można było nawet dostać trochę leniwy - 327 00:14:34,860 --> 00:14:37,320 a to nie może być zalecane, w ogóle - 328 00:14:37,320 --> 00:14:42,260 ale można nawet dostać leniwy i umieścić zmienną globalnie, że tak powiem, nie 329 00:14:42,260 --> 00:14:46,670 wewnątrz funkcję, a wewnątrz pętli, lecz w samym pliku poza 330 00:14:46,670 --> 00:14:49,600 z wszystkich funkcji, które zostały napisane, jak ja tutaj, na linii 15. 331 00:14:49,600 --> 00:14:51,160 Ale generalnie jest to mile widziana. 332 00:14:51,160 --> 00:14:55,680 Ale realizacji jest to rozwiązanie czasem do innych problemów, jak będzie 333 00:14:55,680 --> 00:14:56,620 w końcu zobaczyć. 334 00:14:56,620 --> 00:14:58,130 Więc teraz, zostawimy to tak. 335 00:14:58,130 --> 00:15:01,030 Ale zobaczymy, czy możemy przepisać to po prostu zacząć wyrażanie siebie 336 00:15:01,030 --> 00:15:01,990 trochę inaczej. 337 00:15:01,990 --> 00:15:05,330 >> Więc ten program, żeby było jasne, to positive1. 338 00:15:05,330 --> 00:15:11,810 Pozwólcie mi iść do przodu i tutaj w moim oknie terminala dokonać positive1, Enter. 339 00:15:11,810 --> 00:15:12,740 Kompiluje, okay. 340 00:15:12,740 --> 00:15:14,910 Zamierzam uruchomić positive1 wciskamy Enter. 341 00:15:14,910 --> 00:15:16,820 Żądam, aby dać mi dodatnia. 342 00:15:16,820 --> 00:15:18,260 Powiem -1. 343 00:15:18,260 --> 00:15:18,910 To nie działa. 344 00:15:18,910 --> 00:15:22,150 0, 99, który wydaje się działać. 345 00:15:22,150 --> 00:15:23,570 Może nie najbardziej rygorystyczny test. 346 00:15:23,570 --> 00:15:26,480 Ale przynajmniej jest to ładne Sprawdzanie poprawności, że jesteśmy na właściwej drodze. 347 00:15:26,480 --> 00:15:29,240 Więc teraz pozwól mi iść do przodu i otworzyć wersję dwa tego. 348 00:15:29,240 --> 00:15:32,500 A co to jest inna już? 349 00:15:32,500 --> 00:15:35,140 Realizuje to samo. 350 00:15:35,140 --> 00:15:40,660 Ale co się wyskoczyć jak wyraźnie innego tym razem? 351 00:15:40,660 --> 00:15:42,560 Tak, tak to bool na zielono. 352 00:15:42,560 --> 00:15:45,980 Gedit podkreślił to słowo kluczowe w zielonym znanej jako bool, 353 00:15:45,980 --> 00:15:47,000 który jest typu. 354 00:15:47,000 --> 00:15:51,080 Nie przychodzi wbudowana w wszystkich wersjach C trzeba to 355 00:15:51,080 --> 00:15:52,010 określonej biblioteki. 356 00:15:52,010 --> 00:15:54,770 W naszym przypadku, to obejmowały CS50 biblioteki tak, że 357 00:15:54,770 --> 00:15:56,460 mają dostęp do bool. 358 00:15:56,460 --> 00:15:59,810 Ale w wierszu 18, wydaje się mieć wartość logiczną nazywający wdzięczny. 359 00:15:59,810 --> 00:16:01,040 Można więc nazwałem to coś. 360 00:16:01,040 --> 00:16:04,500 Ale zadzwoniłem to wdzięczny tylko rodzaj przekazać jakieś znaczenie semantyczne. 361 00:16:04,500 --> 00:16:07,930 Więc początkowo na linii 18, jestem wdzięczna, ponieważ najwyraźniej nie 362 00:16:07,930 --> 00:16:12,150 Wartość logiczna wdzięczny jest inicjowany na false w linii 18. 363 00:16:12,150 --> 00:16:16,890 I wtedy wydaje się to, co zrobiłem tutaj w linii 21 przez 23 to ja właśnie 364 00:16:16,890 --> 00:16:18,610 rodzaj przepisany moją logikę. 365 00:16:18,610 --> 00:16:21,020 Więc nie funkcjonalnie inna. 366 00:16:21,020 --> 00:16:26,940 Ale teraz przewodem 22, i sprawdzenia, czy użytkownik int przewyższa pod 367 00:16:26,940 --> 00:16:31,120 0, a następnie po prostu zmienić wartość wdzięczny prawda. 368 00:16:31,120 --> 00:16:32,290 I dlaczego mam to zrobić? 369 00:16:32,290 --> 00:16:35,600 Ponieważ w linii 25, zdaje się, mam zamiar sprawdzić warunek. 370 00:16:35,600 --> 00:16:39,380 Zrobić pętlę przy wdzięczny jest fałszywe. 371 00:16:39,380 --> 00:16:43,610 >> Tak więc proponuje to jako alternatywa dla wersji jeden, ponieważ jest to co najmniej 372 00:16:43,610 --> 00:16:45,130 nieco bardziej intuicyjne, może. 373 00:16:45,130 --> 00:16:46,900 Jest to trochę bardziej zakorzeniona w języku angielskim. 374 00:16:46,900 --> 00:16:51,710 Więc wykonaj następujące czynności, podczas gdy nie są wdzięczni lub podczas wdzięczny jest fałszywe. 375 00:16:51,710 --> 00:16:55,890 I tym razem też, jak się zdaje, nie obchodzi się pamiętać, co użytkownik wpisze 376 00:16:55,890 --> 00:16:57,730 ponieważ w ogłoszeniu nie ma zmiennej n. 377 00:16:57,730 --> 00:16:58,650 Więc rzeczywiście, I - 378 00:16:58,650 --> 00:17:00,080 little white lie tam. 379 00:17:00,080 --> 00:17:02,770 Funkcjonalnie program jest nieco inny raz mamy do dna 380 00:17:02,770 --> 00:17:04,819 to dlatego, że ja nie pamiętając, co n jest. 381 00:17:04,819 --> 00:17:09,579 Ale chciałem też tu wykazać, że choć widzieliśmy getInt i 382 00:17:09,579 --> 00:17:13,920 GetString używane na prawej stronie znaku równości dotychczas aby 383 00:17:13,920 --> 00:17:17,160 pamiętamy wartość, technicznie, to nie jest absolutnie konieczne. 384 00:17:17,160 --> 00:17:20,950 Jeśli z jakiegoś powodu po prostu nie obchodzi, aby zapisać wartość, po prostu chcesz 385 00:17:20,950 --> 00:17:25,710 sprawdzić wartość zauważyć, że możemy po prostu napisać to jako getInt otwarty 386 00:17:25,710 --> 00:17:27,000 paren, blisko paren. 387 00:17:27,000 --> 00:17:30,460 Ta funkcja będzie zwracać wartość, jak już mówili. 388 00:17:30,460 --> 00:17:32,010 To będzie oddać int. 389 00:17:32,010 --> 00:17:36,450 I tak, jeśli psychicznie myśli takiej sytuacji, kiedy wpisać 99, getInt 390 00:17:36,450 --> 00:17:38,160 zwraca liczbę 99. 391 00:17:38,160 --> 00:17:41,330 I tak koncepcyjnie, to tak, że mój kod były faktycznie to. 392 00:17:41,330 --> 00:17:45,880 Więc jeśli 99 jest rzeczywiście większa niż 0, to wdzięczny staje się prawdziwe. 393 00:17:45,880 --> 00:17:50,420 Następnie linia 25 realizuje ooh, skończyliśmy, bo jestem teraz wdzięczny. 394 00:17:50,420 --> 00:17:54,590 A w linii 26, po prostu powiedzieć, dzięki za dodatnią liczbę całkowitą, cokolwiek to 395 00:17:54,590 --> 00:17:55,710 stało się. 396 00:17:55,710 --> 00:17:58,900 >> Teraz zróbmy niewielki syntaktyczne cukru tutaj, że tak powiem. 397 00:17:58,900 --> 00:18:02,990 Zobaczmy, czy uda nam się oczyścić tę linię 25 z tym trzecim i ostatnim wariancji 398 00:18:02,990 --> 00:18:04,640 w positive3. 399 00:18:04,640 --> 00:18:08,250 Więc zauważyć tylko różnicą jest to, co się teraz linia kodu? 400 00:18:11,930 --> 00:18:13,260 Tak, więc 25. 401 00:18:13,260 --> 00:18:15,520 I nie byli naprawdę widziałem tej sztuczki jeszcze. 402 00:18:15,520 --> 00:18:19,510 Ale widzieliśmy wykrzyknik w poniedziałek, co oznacza co? 403 00:18:19,510 --> 00:18:20,970 Więc nie, lub zaprzeczenie. 404 00:18:20,970 --> 00:18:23,460 Więc weź wartość logiczną i przerzucić jej wartość. 405 00:18:23,460 --> 00:18:24,390 True staje się fałszywe. 406 00:18:24,390 --> 00:18:25,500 Fałsz staje się prawdą. 407 00:18:25,500 --> 00:18:28,910 Więc to, chciałbym zaproponować, jest nawet trochę bardziej intuicyjny od sposobu 408 00:18:28,910 --> 00:18:32,200 pisania kodu bo jeszcze zainicjować wdzięczny false. 409 00:18:32,200 --> 00:18:33,530 I nadal wykonaj następujące czynności. 410 00:18:33,530 --> 00:18:35,700 Ustawić wdzięczny prawdziwe, gdy nadejdzie czas. 411 00:18:35,700 --> 00:18:40,690 Ale teraz możesz naprawdę tylko przetłumaczyć ten kod werbalnie lewej do prawej, 412 00:18:40,690 --> 00:18:42,550 jednocześnie nie wdzięczny. 413 00:18:42,550 --> 00:18:46,170 Ponieważ bang, lub wykrzyknik, oznacza pojęcie, nie tak podczas 414 00:18:46,170 --> 00:18:47,010 nie wdzięczny. 415 00:18:47,010 --> 00:18:49,740 >> Więc jeszcze raz, że nie wprowadzono żadnych nowych pojęć per se. 416 00:18:49,740 --> 00:18:53,230 Rozmawialiśmy o logicznych z powrotem, gdy graliśmy z Scratch. 417 00:18:53,230 --> 00:18:55,690 Ale teraz możemy zrealizować tylko zacząć pisać nasz kod w 418 00:18:55,690 --> 00:18:56,550 wiele różnych sposobów. 419 00:18:56,550 --> 00:19:00,010 Tak zwłaszcza w pset1, jeśli jesteś rodzaju walczą dowiedzieć drogę do 420 00:19:00,010 --> 00:19:03,400 napisać program, kursy, masz szczęście, bo nie będzie żadnego 421 00:19:03,400 --> 00:19:05,780 szereg rozwiązań, które mogą się zdarzyć na. 422 00:19:05,780 --> 00:19:09,850 Na przykład, to tylko trzy dla nawet najprostszych programów. 423 00:19:09,850 --> 00:19:10,180 Dobrze. 424 00:19:10,180 --> 00:19:13,860 A teraz przypomnieć w poniedziałek, wyszliśmy na tej notatce ze zwracanych wartości. 425 00:19:13,860 --> 00:19:18,280 Tak więc po raz pierwszy, że napisał program, który nie tylko miał main, 426 00:19:18,280 --> 00:19:22,240 ma też swoją własną funkcję niestandardową, że napisałem tutaj. 427 00:19:22,240 --> 00:19:26,640 Tak więc w linii 31 poprzez 34, I zostały wdrożone funkcji modułu. 428 00:19:26,640 --> 00:19:27,800 To nie jest skomplikowane. 429 00:19:27,800 --> 00:19:29,830 To tylko razy w razy, w tym przypadku. 430 00:19:29,830 --> 00:19:34,920 Ale, co ważne jest to, że biorę wejście w formie i 431 00:19:34,920 --> 00:19:38,910 Wracam wyjście w formie razy po razy w. 432 00:19:38,910 --> 00:19:43,940 >> Więc teraz mam możliwość, podobnie jak kiedyś w printf sam, aby zadzwonić 433 00:19:43,940 --> 00:19:47,120 Funkcja ta poprzez wywołanie funkcji modułu. 434 00:19:47,120 --> 00:19:49,470 A funkcja kostka zajmuje trochę wejście. 435 00:19:49,470 --> 00:19:52,030 A funkcja zwraca jakąś kostka wyjście. 436 00:19:52,030 --> 00:19:56,660 I tak dla kontrastu, po prostu zrobił coś printf. 437 00:19:56,660 --> 00:19:59,490 Nie zwraca niczego, że zależało - choć, jak 438 00:19:59,490 --> 00:20:00,820 na bok, to nie zwraca wartości. 439 00:20:00,820 --> 00:20:02,650 Po prostu ogólnie zignorować. 440 00:20:02,650 --> 00:20:04,000 Printf po prostu zrobił coś. 441 00:20:04,000 --> 00:20:06,220 To miał efekt uboczny drukowania na ekranie. 442 00:20:06,220 --> 00:20:09,480 Natomiast tutaj mamy funkcję modułu, który 443 00:20:09,480 --> 00:20:11,400 faktycznie zwraca coś. 444 00:20:11,400 --> 00:20:12,960 >> Więc to jest generalnie - 445 00:20:12,960 --> 00:20:15,260 dla tych, znane z tego, że jest to dość prosty pomysł. 446 00:20:15,260 --> 00:20:18,460 Ale dla tych mniej zaznajomieni z tej idei przekazując wejść i coraz 447 00:20:18,460 --> 00:20:21,700 tylne wyjścia, spróbujmy po prostu coś super proste. 448 00:20:21,700 --> 00:20:25,180 Czy ktoś zbliża się komfortowo na scenie krótko? 449 00:20:25,180 --> 00:20:27,460 Musisz być wygodne, z aparatem na ciebie, jak również. 450 00:20:27,460 --> 00:20:27,640 Tak. 451 00:20:27,640 --> 00:20:28,610 Dobra, jak masz na imię? 452 00:20:28,610 --> 00:20:29,020 KEN: Ken. 453 00:20:29,020 --> 00:20:29,420 DAVID J. Malan: Ken. 454 00:20:29,420 --> 00:20:29,810 Dobrze, Ken. 455 00:20:29,810 --> 00:20:31,060 Chodź na górę. 456 00:20:31,060 --> 00:20:34,660 Więc Ken będzie funkcją rodzaju o. 457 00:20:34,660 --> 00:20:35,760 I idziemy do przodu i to zrobić. 458 00:20:35,760 --> 00:20:38,790 Chodźmy trochę fantazji. 459 00:20:38,790 --> 00:20:39,770 Miło Pana poznać. 460 00:20:39,770 --> 00:20:41,010 Witamy na środek sceny. 461 00:20:41,010 --> 00:20:41,980 Dobrze. 462 00:20:41,980 --> 00:20:45,590 Załóżmy, naciśnij ten przycisk tutaj. 463 00:20:45,590 --> 00:20:46,420 Dobrze. 464 00:20:46,420 --> 00:20:49,490 Więc tutaj masz nowoczesną tablicy. 465 00:20:49,490 --> 00:20:53,050 A co ja jestem jest główną funkcją, na przykład. 466 00:20:53,050 --> 00:20:55,990 I nie masz iPad w ręku. 467 00:20:55,990 --> 00:20:59,000 Naprawdę nie pamiętam, jak - no, faktycznie, nie można powiedzieć, że. 468 00:20:59,000 --> 00:21:02,200 I naprawdę nie ma dobrego pisma. 469 00:21:02,200 --> 00:21:05,260 I tak w związku z tym, chcę, aby wydrukować coś na ekranie dla mnie. 470 00:21:05,260 --> 00:21:07,470 >> Więc ja jako główny program. 471 00:21:07,470 --> 00:21:15,060 I mam zamiar mieć cię powiedzieć, pisząc go w moim podstaw kurczaka i 472 00:21:15,060 --> 00:21:16,600 następnie przechodzi ci wejście. 473 00:21:16,600 --> 00:21:20,000 Tak głupie, choć to ćwiczenie jest pojęcie funkcji i wywołanie 474 00:21:20,000 --> 00:21:22,260 Funkcja i powrotu funkcji tak naprawdę sprowadza się do tego. 475 00:21:22,260 --> 00:21:23,120 Jestem głównym. 476 00:21:23,120 --> 00:21:26,270 Właśnie napisał printf ("coś") na ekranie. 477 00:21:26,270 --> 00:21:27,470 Używam tego programu. 478 00:21:27,470 --> 00:21:30,900 I jak tylko printf jest wywoływana, to przyjmuje jeden argument - lub jeden parametr, 479 00:21:30,900 --> 00:21:31,660 czasami - 480 00:21:31,660 --> 00:21:32,780 między cudzysłów. 481 00:21:32,780 --> 00:21:33,960 O to, że argument. 482 00:21:33,960 --> 00:21:35,740 Jestem przekazaniem go do Kena. 483 00:21:35,740 --> 00:21:39,390 Teraz on jest czarna skrzynka napisane niektóre kilka lat temu, że z pozoru 484 00:21:39,390 --> 00:21:41,070 tylko wie, jak wydrukować rzeczy na ekranie. 485 00:21:41,070 --> 00:21:42,320 >> Więc wykonać. 486 00:21:48,842 --> 00:21:49,900 To nie jest złe. 487 00:21:49,900 --> 00:21:50,890 Tak, bardzo dobrze. 488 00:21:50,890 --> 00:21:52,900 Więc teraz Ken odbywa wykonania. 489 00:21:52,900 --> 00:21:55,810 Będzie musiał oddać mi wszystko z powrotem? 490 00:21:55,810 --> 00:21:57,240 Więc to nie widzieliśmy do tej pory. 491 00:21:57,240 --> 00:21:59,230 Ponownie, printf nie faktycznie zwraca liczbę. 492 00:21:59,230 --> 00:22:01,640 Ale będziemy ignorować faktu, że do teraz, bo nigdy nie używałem go. 493 00:22:01,640 --> 00:22:03,400 Więc to jest to dla Kena. 494 00:22:03,400 --> 00:22:06,650 I teraz główny wraca do wykonania - 495 00:22:06,650 --> 00:22:09,630 Głównym przejmuje kontrolę, ponieważ program ponownie tej linii kodu 496 00:22:09,630 --> 00:22:11,010 printf, odbywa się wykonywanie. 497 00:22:11,010 --> 00:22:13,890 A my go o naszej drodze wykonującego wszelkie inne linie są tam. 498 00:22:13,890 --> 00:22:14,130 >> Dobrze. 499 00:22:14,130 --> 00:22:17,080 Więc teraz spróbujmy nieco inny przykład. 500 00:22:17,080 --> 00:22:22,430 I tym razem tutaj, niech najpierw wyczyścić ekran tutaj. 501 00:22:22,430 --> 00:22:24,670 I tym razem, zrobimy cubing funkcję. 502 00:22:24,670 --> 00:22:27,350 Ale tym razem, spodziewam wartość wyjściową. 503 00:22:27,350 --> 00:22:28,630 Więc idź naprzód i to zrobić. 504 00:22:28,630 --> 00:22:35,680 Więc teraz mam linii kodu, który mówi x cube = (x). 505 00:22:35,680 --> 00:22:36,930 Czyli let's - 506 00:22:41,450 --> 00:22:43,940 linii kodu, przypominam, wygląda tak. 507 00:22:43,940 --> 00:22:45,960 x cube = (x). 508 00:22:45,960 --> 00:22:48,100 Więc jak to będzie działać? 509 00:22:48,100 --> 00:22:50,820 Więc idź naprzód i dać biały ekran ponownie. 510 00:22:50,820 --> 00:22:55,000 I mam zamiar napisać teraz w dół od wartości x, które w tej chwili w 511 00:22:55,000 --> 00:23:01,080 czas dzieje się, powiedzmy, 2, keep it simple. 512 00:23:01,080 --> 00:23:04,890 Więc napisałem na kartce papieru, wartość 2, 513 00:23:04,890 --> 00:23:06,100 który jest moim x wartość. 514 00:23:06,100 --> 00:23:08,250 I oddać go do Kena. 515 00:23:08,250 --> 00:23:09,200 KEN: A ja po prostu napisz odpowiedź? 516 00:23:09,200 --> 00:23:12,660 DAVID J. Malan: Tak, po prostu napisać odpowiedź. 517 00:23:12,660 --> 00:23:13,030 Okay. 518 00:23:13,030 --> 00:23:16,280 A teraz musi zwrócić mi coś. 519 00:23:16,280 --> 00:23:17,560 So - 520 00:23:17,560 --> 00:23:18,170 perfect. 521 00:23:18,170 --> 00:23:18,840 Miło Segue. 522 00:23:18,840 --> 00:23:21,970 >> Więc teraz wręcza mnie wartości 8, w tym przypadku. 523 00:23:21,970 --> 00:23:23,220 I co ja mam z tym zrobić? 524 00:23:23,220 --> 00:23:26,130 Cóż, faktycznie, zobaczymy. 525 00:23:26,130 --> 00:23:26,640 Pobierz to prawo. 526 00:23:26,640 --> 00:23:27,880 Co ja mam z tym zrobić? 527 00:23:27,880 --> 00:23:31,900 Teraz mam zamiar wziąć tę wartość i faktycznie przechowywać go w tych 528 00:23:31,900 --> 00:23:33,400 same bity w pamięci. 529 00:23:33,400 --> 00:23:35,030 Ale zauważ, że jestem rodzaju walczy tutaj. 530 00:23:35,030 --> 00:23:38,280 Jestem trochę zdezorientowany, bo nie wiem od czego właściwie zapisu wartości x? 531 00:23:38,280 --> 00:23:41,840 Bo to, co właśnie zrobić to fizycznie ręka Ken kawałek papieru 532 00:23:41,840 --> 00:23:44,400 , który miał wartość 2, która została x. 533 00:23:44,400 --> 00:23:46,300 I rzeczywiście, to jest dokładnie to, co się dzieje. 534 00:23:46,300 --> 00:23:50,100 Okazuje się, że podczas wywoływania funkcji i przechodzą w argumencie 535 00:23:50,100 --> 00:23:54,130 jak "Hello World" lub przekazać w argumencie jak 2, ogólnie, jesteś 536 00:23:54,130 --> 00:23:56,720 przekazując kopię tego argumentu. 537 00:23:56,720 --> 00:24:01,020 I tak jak ja zapisałem numer 2 tu i wręczył go Ken, które muszą 538 00:24:01,020 --> 00:24:04,760 oznacza to, że mam jeszcze kopię 2 wartości gdzieś. 539 00:24:04,760 --> 00:24:08,140 Bo rzeczywiście, teraz, że stałam się z powrotem na wartość 8, trzeba cofnąć się w 540 00:24:08,140 --> 00:24:12,010 RAM i rzeczywiście napisać 8, gdzie kiedyś miałem numer 2. 541 00:24:12,010 --> 00:24:15,720 >> Tak wizualnie zapamiętać pojęcia przechodząc dosłownie 542 00:24:15,720 --> 00:24:16,730 Kopiowanie wartości. 543 00:24:16,730 --> 00:24:19,570 Ken nie jego sprawa, ręce mnie coś - w tym przypadku, 544 00:24:19,570 --> 00:24:20,820 wartość jak 8. 545 00:24:20,820 --> 00:24:22,660 I wtedy coś zrobić z tą wartością, jeśli 546 00:24:22,660 --> 00:24:24,880 Aby zachować go wokół. 547 00:24:24,880 --> 00:24:29,470 Więc to wszystko będzie zbyt dobrze przed długi. 548 00:24:29,470 --> 00:24:33,082 Dziękuję bardzo za ten pokaz tutaj, Ken. 549 00:24:33,082 --> 00:24:34,820 Dobrze. 550 00:24:34,820 --> 00:24:36,720 Bardzo dobrze zrobione. 551 00:24:36,720 --> 00:24:40,610 Zobaczmy więc, jak to w końcu odnosi się do niektórych funkcji 552 00:24:40,610 --> 00:24:42,270 nazywa to robiliśmy tutaj. 553 00:24:42,270 --> 00:24:47,610 Więc pozwól mi iść dalej i doprowadzić nas z powrotem do cubing przykład tutaj. 554 00:24:47,610 --> 00:24:53,080 I zauważ, że jeśli chcemy zacząć biorąc to dalej, idziemy 555 00:24:53,080 --> 00:24:57,050 aby mieć na uwadze, że liczba x, który jest przekazywany w 556 00:24:57,050 --> 00:25:01,390 tutaj jest inny od tego, co w rzeczywistości jest przekazywane do funkcji. 557 00:25:01,390 --> 00:25:03,940 Więc jeszcze raz, to przekazywane przez kopię będzie się dość 558 00:25:03,940 --> 00:25:05,620 związany z tematem za chwilę. 559 00:25:05,620 --> 00:25:09,320 >> Warto więc spojrzeć na coś, co nie do końca działa prawo jeszcze. 560 00:25:09,320 --> 00:25:11,790 Mam zamiar iść do przodu i otworzyć trzeci przykład buggy, które 561 00:25:11,790 --> 00:25:13,560 jest wadliwy przez naturę. 562 00:25:13,560 --> 00:25:18,070 I to się nazywa buggy3 i realizuje funkcję swap. 563 00:25:18,070 --> 00:25:23,500 Więc tutaj mamy główną funkcją, która x i y arbitralnie inicjowane 564 00:25:23,500 --> 00:25:24,720 1 i 2, odpowiednio. 565 00:25:24,720 --> 00:25:27,590 Mogliśmy korzystać getInt, ale po prostu potrzebujesz prostego ćwiczenia. 566 00:25:27,590 --> 00:25:29,680 Więc to jest zakodowane jako 1 i 2. 567 00:25:29,680 --> 00:25:35,330 W liniach 21 i 22, ale najwyraźniej wydrukować xiy, po jednej w wierszu. 568 00:25:35,330 --> 00:25:39,620 Następnie, w linii 23, ja jestem twierdzić zamiana tych wartości, kropka, kropka, kropka. 569 00:25:39,620 --> 00:25:43,030 I najwyraźniej wywołać funkcję w wierszu 24 o nazwie Swap 570 00:25:43,030 --> 00:25:44,000 która pobiera dwa argumenty. 571 00:25:44,000 --> 00:25:46,430 Jest całkowicie legit dla funkcji do podjęcia dwa argumenty. 572 00:25:46,430 --> 00:25:48,220 Widzieliśmy printf to zrobić już. 573 00:25:48,220 --> 00:25:50,370 Więc Swap najwyraźniej ma X i Y. 574 00:25:50,370 --> 00:25:53,010 I jak sama nazwa wskazuje, to mam nadzieję, że to będzie 575 00:25:53,010 --> 00:25:54,320 zamienić te dwie wartości. 576 00:25:54,320 --> 00:25:57,560 Więc mam prawo na linii 25, zamienione. 577 00:25:57,560 --> 00:26:01,570 I przedruk xiy przy założeniu, że 578 00:26:01,570 --> 00:26:02,830 oni rzeczywiście zamienione. 579 00:26:02,830 --> 00:26:04,370 Ale gdybym rzeczywiście uruchomić ten program - 580 00:26:04,370 --> 00:26:06,060 pozwól mi otworzyć okno terminala. 581 00:26:06,060 --> 00:26:07,750 Pozwól mi buggy3. 582 00:26:07,750 --> 00:26:09,970 Jak sama nazwa wskazuje, to nie skończy się dobrze. 583 00:26:09,970 --> 00:26:14,690 Bo kiedy naciśnij Enter, zauważysz, że x jest 1. 584 00:26:14,690 --> 00:26:15,720 y 2. 585 00:26:15,720 --> 00:26:19,160 I na koniec jeszcze programu, wciąż w rzeczywistości sama. 586 00:26:19,160 --> 00:26:22,760 >> Tak więc na podstawie demonstracji już teraz z Kenem, co się właściwie dzieje? 587 00:26:22,760 --> 00:26:24,660 Cóż, nurkować w tej funkcji swap. 588 00:26:24,660 --> 00:26:25,800 To super krótki. 589 00:26:25,800 --> 00:26:28,020 To tylko kilka linijek kodu długi. 590 00:26:28,020 --> 00:26:32,810 Ale co jest podstawowym problemem w oparciu o prostą opowieść 591 00:26:32,810 --> 00:26:34,270 tutaj z Kenem? 592 00:26:34,270 --> 00:26:36,115 Dlaczego Swap łamane? 593 00:26:36,115 --> 00:26:37,365 [Niesłyszalne] 594 00:26:39,840 --> 00:26:40,460 Dokładnie. 595 00:26:40,460 --> 00:26:43,610 Więc jesteśmy przechowywania do kopii, nie sama zmienna. 596 00:26:43,610 --> 00:26:46,810 Innymi słowy, swap najwyraźniej przyjmuje dwa argumenty, int. 597 00:26:46,810 --> 00:26:49,370 I to dowolnie nazywane i b. 598 00:26:49,370 --> 00:26:54,430 A tutaj, mam przeszedł w xiy, które są odpowiednio 1 i 2. 599 00:26:54,430 --> 00:26:56,580 Ale nie jestem dosłownie przechodzącą w x. 600 00:26:56,580 --> 00:26:58,410 Nie mówię dosłownie przechodzącą w y. 601 00:26:58,410 --> 00:27:01,230 Olewam kopię x oraz kopię y. 602 00:27:01,230 --> 00:27:05,180 To tak, jakby prawie tak, jakby skopiowane i wklejone do wymiany wartości, które 603 00:27:05,180 --> 00:27:07,440 chcesz to faktycznie manipulować. 604 00:27:07,440 --> 00:27:11,970 Więc jeśli to jest w przypadku, gdy program, rozpoczęcie wykonywania 605 00:27:11,970 --> 00:27:14,140 linia 35, potem 36 - 606 00:27:14,140 --> 00:27:17,740 kiedy się do linii 37, w tym momencie w historii, co to jest wartość? 607 00:27:20,740 --> 00:27:24,850 W tym momencie w historii, linia 37, jaka jest wartość w tym momencie? 608 00:27:24,850 --> 00:27:25,980 Tak powinno być tylko 1. 609 00:27:25,980 --> 00:27:26,170 Zgadza się? 610 00:27:26,170 --> 00:27:29,100 Ponieważ x został przekazany jako pierwszy argument. 611 00:27:29,100 --> 00:27:33,150 I ta funkcja po prostu arbitralnie woła swojego pierwszego argumentu. 612 00:27:33,150 --> 00:27:35,130 Podobnie jest y, drugi argument. 613 00:27:35,130 --> 00:27:37,930 I to jest po prostu arbitralnie wywołanie sekund b. argumentów. 614 00:27:37,930 --> 00:27:40,510 >> Teraz ta dychotomia jest rzeczywiście dość prosto wytłumaczyć. 615 00:27:40,510 --> 00:27:40,880 Pomyśl o tym. 616 00:27:40,880 --> 00:27:42,980 Nikt z nas nie spotkał się z osobą, która napisała printf. 617 00:27:42,980 --> 00:27:49,880 Więc na pewno, on nie ma pojęcia, co nasze zmienne 30 lat później idą 618 00:27:49,880 --> 00:27:50,710 zostać wywołana. 619 00:27:50,710 --> 00:27:55,110 Więc nie musi być rozróżnienie co nazywasz zmienne 620 00:27:55,110 --> 00:27:59,960 Funkcje piszesz i co nazywasz zmienne w funkcji jesteś 621 00:27:59,960 --> 00:28:01,770 telefonicznie lub za pomocą. 622 00:28:01,770 --> 00:28:05,120 Więc innymi słowy, napisałem moje zmienne jako X i Y. 623 00:28:05,120 --> 00:28:08,060 Ale jeśli ktoś napisał funkcję wymiany, on czy ona na pewno 624 00:28:08,060 --> 00:28:10,480 nie wiem, co moje zmienne będą tzw. 625 00:28:10,480 --> 00:28:13,850 Więc sobie sprawę, że to właśnie dlatego masz ten dualizm nazw. 626 00:28:13,850 --> 00:28:16,800 Technicznie, mógłby zrobić to przez przypadek. 627 00:28:16,800 --> 00:28:19,750 Ale oni nadal być przekazywane w formie kopii. 628 00:28:19,750 --> 00:28:22,940 Byłoby to po prostu czysty przypadek estetycznie jeśli tej osoby która napisała 629 00:28:22,940 --> 00:28:25,590 Swap użył tych samych nazw. 630 00:28:25,590 --> 00:28:25,930 >> Dobrze. 631 00:28:25,930 --> 00:28:29,010 Tak więc w tym momencie w historii, wiersz 37, jest 1. 632 00:28:29,010 --> 00:28:30,410 b oznacza 2. 633 00:28:30,410 --> 00:28:32,040 I teraz mam postępować, aby zamienić je. 634 00:28:32,040 --> 00:28:34,730 Otóż ​​po pierwsze, pozwól mi faktycznie to zrobić znacznie prościej. 635 00:28:34,730 --> 00:28:36,500 I nie wiem, co te trzy linie kodu robią. 636 00:28:36,500 --> 00:28:37,370 Pozwól mi to zrobić. 637 00:28:37,370 --> 00:28:38,850 b dostaje. 638 00:28:38,850 --> 00:28:40,170 dostaje b. 639 00:28:40,170 --> 00:28:41,450 Gotowe. 640 00:28:41,450 --> 00:28:43,540 Dlaczego to jest złamane, logicznie? 641 00:28:46,980 --> 00:28:48,590 To rodzaj intuicyjnego rzeczy, prawda? 642 00:28:48,590 --> 00:28:50,640 Więc staje się b. 643 00:28:50,640 --> 00:28:52,450 Oraz b staje. 644 00:28:52,450 --> 00:28:55,410 Ale problemem jest to, że jak tylko linia 37 wykonuje, co jest 645 00:28:55,410 --> 00:28:58,170 wartość i B? 646 00:28:58,170 --> 00:28:59,070 Sama, 1. 647 00:28:59,070 --> 00:29:03,460 Dlatego, że niszczona, by tak rzec, zmieniłeś b, aby dorównać. 648 00:29:03,460 --> 00:29:06,000 Więc raz linia 37 zostanie wykonany, to świetnie. 649 00:29:06,000 --> 00:29:09,940 Masz teraz dwa egzemplarze nr 1 wewnątrz tej funkcji. 650 00:29:09,940 --> 00:29:14,720 Więc wtedy, kiedy mówisz w linii 38, ma b, dobrze, że jesteś trochę pijany. 651 00:29:14,720 --> 00:29:17,370 Bo jesteś po prostu przypisanie 1 do 1. 652 00:29:17,370 --> 00:29:20,400 Masz trochę stracił wartość, której zależało. 653 00:29:20,400 --> 00:29:22,910 >> Tak w wersji oryginalnej z tym zauważyć, co zrobiłem. 654 00:29:22,910 --> 00:29:26,620 I zamiast tego mieliśmy trzecią linię kodu, która wyglądała jak ten. 655 00:29:26,620 --> 00:29:29,910 Oświadczam zmiennej tymczasowej - tmp jest bardzo często nazwa 656 00:29:29,910 --> 00:29:31,240 do zmiennej tymczasowej. 657 00:29:31,240 --> 00:29:34,280 To int ponieważ musi pasować to, co chcę zrobić kopię. 658 00:29:34,280 --> 00:29:39,720 Przechowywać kopię wewnętrznej tmp. Więc raz linia 37 została wykonana, 659 00:29:39,720 --> 00:29:41,390 Wartość jest - 660 00:29:41,390 --> 00:29:42,970 szybkie sanity check - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 Wartość b oznacza 2. 663 00:29:45,780 --> 00:29:48,470 A wartość tmp jest 1. 664 00:29:48,470 --> 00:29:51,470 Więc teraz wykonać linię 38. 665 00:29:51,470 --> 00:29:57,180 Więc raz Linia 38 wykonuje, nabiera wartości b. 666 00:29:57,180 --> 00:29:58,510 I B był 2. 667 00:29:58,510 --> 00:30:00,500 Tak jest teraz 2. 668 00:30:00,500 --> 00:30:03,110 Więc w tym momencie w historii, jest 2, b oznacza 2, 669 00:30:03,110 --> 00:30:05,130 i tmp jest 1. 670 00:30:05,130 --> 00:30:09,330 Więc teraz logicznie, możemy po prostu TMP plop jego wartość do b. 671 00:30:09,330 --> 00:30:10,690 I gotowe. 672 00:30:10,690 --> 00:30:12,170 >> Więc mamy rozwiązać ten problem. 673 00:30:12,170 --> 00:30:16,040 Niestety, kiedy uruchomić ten program w tej formie, w rzeczywistości nie zamieniać 674 00:30:16,040 --> 00:30:17,700 żadnych wartości. 675 00:30:17,700 --> 00:30:18,950 Ale żeby było jasne, to dlaczego? 676 00:30:23,420 --> 00:30:26,310 Naprawiłem logiczny problemu z przed chwilą. 677 00:30:26,310 --> 00:30:31,150 Ale znowu, jeśli uruchomić ten program, x i y pozostaną niezmienione do końca roku 678 00:30:31,150 --> 00:30:33,834 wykonywania programu. 679 00:30:33,834 --> 00:30:34,760 [Niesłyszalne] 680 00:30:34,760 --> 00:30:36,030 DAVID J. Malan: Więc nie wrócił nic. 681 00:30:36,030 --> 00:30:36,960 Tak, że to prawda. 682 00:30:36,960 --> 00:30:39,880 Ale okazuje się, że jest trochę problemem tutaj, bo do tej pory, 683 00:30:39,880 --> 00:30:42,460 Jedyne, co udało się nam wrócić to jedno. 684 00:30:42,460 --> 00:30:46,540 I to jest ograniczenie C. Można jedynie wrócić naprawdę jedną wartość, 685 00:30:46,540 --> 00:30:48,970 w tym przypadku, jestem trochę zakleszczony tutaj 686 00:30:48,970 --> 00:30:51,805 bo mogłem zwracać nową wartość x lub może wrócić 687 00:30:51,805 --> 00:30:53,160 Nowa wartość y. 688 00:30:53,160 --> 00:30:54,330 Ale chcę, zarówno z powrotem. 689 00:30:54,330 --> 00:30:58,010 Więc wracając nie proste rozwiązanie jest tutaj. 690 00:30:58,010 --> 00:30:59,770 Ale problem zasadniczo brzmi: dlaczego? 691 00:30:59,770 --> 00:31:03,270 Co my właściwie zamienione? 692 00:31:03,270 --> 00:31:04,010 i b. 693 00:31:04,010 --> 00:31:07,670 Ale i b są kopie xiy, co oznacza, że ​​po prostu nie wszystko 694 00:31:07,670 --> 00:31:10,080 pracować - po prostu spędziliśmy jak trzy minuty mówisz swapu 695 00:31:10,080 --> 00:31:11,680 funkcja i wszystkie trzy z tych zmiennych. 696 00:31:11,680 --> 00:31:15,090 I to jest wspaniałe, prawidłowa w izolacji. 697 00:31:15,090 --> 00:31:20,230 Ale i zakres b tylko jest w tych liniach tutaj. 698 00:31:20,230 --> 00:31:24,130 Więc jak dla pętli, jeśli deklarują liczbę całkowitą i wewnątrz za 699 00:31:24,130 --> 00:31:27,400 loop - podobnie, jeśli deklarując ib wewnątrz funkcji, która 700 00:31:27,400 --> 00:31:30,550 napisałeś, są one ważne tylko wewnątrz tej funkcji. 701 00:31:30,550 --> 00:31:35,020 Co oznacza, że ​​jak tylko zamiana odbywa realizacji i idziemy z linii 24 do 702 00:31:35,020 --> 00:31:38,380 Linia 25, X i Y są zmianie. 703 00:31:38,380 --> 00:31:42,580 Właśnie straciliśmy dużo czasu zamiana kopii zmiennych. 704 00:31:42,580 --> 00:31:46,490 >> Okazuje się, że rozwiązanie to jest rzeczywiście nieoczywisty. 705 00:31:46,490 --> 00:31:49,210 To nie jest zupełnie wystarczające do zwracania wartości ponieważ możemy 706 00:31:49,210 --> 00:31:50,320 zwrócić tylko jedną wartość. 707 00:31:50,320 --> 00:31:53,370 I naprawdę chcesz zamienić zarówno xiy jednocześnie. 708 00:31:53,370 --> 00:31:55,020 Więc mamy zamiar wrócić do tego. 709 00:31:55,020 --> 00:31:58,770 Ale teraz, świadomości, że problem zasadniczo wynika z faktu, 710 00:31:58,770 --> 00:32:00,660 że A i B są kopie. 711 00:32:00,660 --> 00:32:03,450 I są w swoim zakresie. 712 00:32:03,450 --> 00:32:04,980 Cóż, spróbujmy rozwiązać to w jakiś sposób. 713 00:32:04,980 --> 00:32:09,200 Pozwól, że faktycznie przewijania tu i otworzyć się, powiedzmy, wariant czwarty 714 00:32:09,200 --> 00:32:11,170 tego, buggy4. 715 00:32:11,170 --> 00:32:13,230 I co z tego? 716 00:32:13,230 --> 00:32:16,690 To jest podobne, ale prostsze problemem patrzeć zanim podejmiemy ukłucie w 717 00:32:16,690 --> 00:32:17,530 rozwiązania. 718 00:32:17,530 --> 00:32:19,440 Program ten nazywa się przyrost. 719 00:32:19,440 --> 00:32:24,320 I to najwyraźniej inicjuje integer x 1 na linii 18. 720 00:32:24,320 --> 00:32:25,950 I potem ubiegać x jest 1. 721 00:32:25,950 --> 00:32:28,020 I potem ubiegać inkrementacji, kropka, kropka, kropka. 722 00:32:28,020 --> 00:32:29,460 I następnie wywołać przyrost. 723 00:32:29,460 --> 00:32:33,480 Ale potem w liniach 22 i 23, I twierdzą, że został zwiększony. 724 00:32:33,480 --> 00:32:37,780 Żądam x jest teraz cokolwiek to jest, 2 prawdopodobnie. 725 00:32:37,780 --> 00:32:39,770 >> Ale ten program jest wadliwy. 726 00:32:39,770 --> 00:32:41,020 W czym problem? 727 00:32:43,450 --> 00:32:44,418 Tak? 728 00:32:44,418 --> 00:32:45,668 [Niesłyszalne] 729 00:32:49,260 --> 00:32:49,850 DAVID J. Malan: Dokładnie. 730 00:32:49,850 --> 00:32:52,430 Więc x uznano oczywiście na linii 18. 731 00:32:52,430 --> 00:32:54,410 To jest w nawiasach klamrowych nawiasach Main. 732 00:32:54,410 --> 00:32:58,470 Tak prosta odpowiedź o to, że dobrze, x istnieje tutaj. 733 00:32:58,470 --> 00:33:01,510 Nie ma w linii 32. 734 00:33:01,510 --> 00:33:03,710 Więc ten program rzeczywiście nawet nie skompilować. 735 00:33:03,710 --> 00:33:07,910 Kompilator, gdy próbuję kompilowanie tego kodu, będzie na mnie wrzeszczeć 736 00:33:07,910 --> 00:33:13,190 o jakiejś nielegalnej identyfikator, czy coś w tej sprawie. 737 00:33:13,190 --> 00:33:13,870 W rzeczywistości, spróbujmy. 738 00:33:13,870 --> 00:33:15,235 Jest to marka buggy4. 739 00:33:17,780 --> 00:33:18,190 Jest. 740 00:33:18,190 --> 00:33:22,030 Korzystanie z nielegalnego x identyfikator w linii 32. 741 00:33:22,030 --> 00:33:25,700 I faktycznie, bądźmy bardziej wyraźne tu dziś tak, że jest to przydatne w 742 00:33:25,700 --> 00:33:27,140 godziny pracy i w domu. 743 00:33:27,140 --> 00:33:29,000 Zauważ, że jest to trochę tajemniczo napisane. 744 00:33:29,000 --> 00:33:31,560 Ale fakt, że Clang ma krzyczeli na nas, mówiąc: 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, jest rzeczywiście przydatne. 746 00:33:36,970 --> 00:33:41,970 Oznacza to, że błąd jest w linii 32 na pozycji znaku pięciu. 747 00:33:41,970 --> 00:33:44,670 Tak więc jeden, dwa, trzy, cztery, pięć. 748 00:33:44,670 --> 00:33:46,640 To jest, w tym, gdzie problem. 749 00:33:46,640 --> 00:33:49,710 A także, aby pamiętać o godzinach pracy oraz w domu, jestem szczęśliwy tutaj. 750 00:33:49,710 --> 00:33:50,740 Mam jeden błąd. 751 00:33:50,740 --> 00:33:52,660 To będzie stosunkowo łatwe do naprawienia. 752 00:33:52,660 --> 00:33:56,220 Ale jeśli masz cały ekran pełne przeważającymi komunikatów o błędach, znowu, 753 00:33:56,220 --> 00:33:59,240 sobie sprawę, że najniżej jeden może być tylko przejawem 754 00:33:59,240 --> 00:34:00,320 najwyższego z nich. 755 00:34:00,320 --> 00:34:03,560 Więc zawsze ścigać się błędy z góry na dół. 756 00:34:03,560 --> 00:34:06,720 Ponieważ nie może być po prostu łańcuchowe efekt sugeruje ci 757 00:34:06,720 --> 00:34:09,030 sposób mają więcej problemów, niż faktycznie zrobić. 758 00:34:09,030 --> 00:34:14,989 >> Więc w jaki sposób możemy to naprawić, jeśli moim celem jest przyrost wartości x? 759 00:34:14,989 --> 00:34:15,370 Co to jest? 760 00:34:15,370 --> 00:34:15,620 Okay. 761 00:34:15,620 --> 00:34:16,679 Więc możemy x globalny. 762 00:34:16,679 --> 00:34:18,860 Weźmy na skrót, że ostrzegał wcześniej. 763 00:34:18,860 --> 00:34:20,550 Ale do cholery, po prostu trzeba szybko naprawić. 764 00:34:20,550 --> 00:34:23,949 Więc powiedzmy, int x tutaj. 765 00:34:23,949 --> 00:34:25,600 To sprawia, że ​​x globalny. 766 00:34:25,600 --> 00:34:28,460 Więc teraz główny ma do niej dostęp. 767 00:34:28,460 --> 00:34:31,780 I przyrost ma do niej dostęp. 768 00:34:31,780 --> 00:34:33,860 A więc pozwól mi iść do przodu i skompilować to teraz. 769 00:34:33,860 --> 00:34:36,330 Producent buggy4, Enter. 770 00:34:36,330 --> 00:34:37,440 Wydaje się skompilować teraz. 771 00:34:37,440 --> 00:34:40,949 Uciekajmy buggy4, i to zdaje się rzeczywiście pracują. 772 00:34:40,949 --> 00:34:42,780 Teraz jest to jedna z tych rzeczy - 773 00:34:42,780 --> 00:34:45,870 rób jak mówię, a nie tak jak ja, jak ja właśnie skończyliśmy. 774 00:34:45,870 --> 00:34:49,239 Bo w ogóle, nasze programy są dostanie wiele bardziej interesujące i 775 00:34:49,239 --> 00:34:50,440 znacznie dłużej niż to. 776 00:34:50,440 --> 00:34:53,199 A jeśli Twoje rozwiązanie problemów życiowych jest tylko ah, umieścić wszystkie 777 00:34:53,199 --> 00:34:57,550 zmienne na początku pliku, bardzo szybko zrobić programy dostać 778 00:34:57,550 --> 00:34:59,700 piekielnie trudne do zarządzania. 779 00:34:59,700 --> 00:35:02,050 Coraz trudniej wymyślić nowych nazw zmiennych. 780 00:35:02,050 --> 00:35:05,240 Coraz trudniej zrozumieć, co zmienna co robi. 781 00:35:05,240 --> 00:35:08,250 >> I tak na ogół, nie jest dobrym rozwiązaniem. 782 00:35:08,250 --> 00:35:09,780 Więc zróbmy to lepiej. 783 00:35:09,780 --> 00:35:11,920 Nie chcemy użyć zmiennej globalnej tutaj. 784 00:35:11,920 --> 00:35:14,050 Chcę, aby zwiększyć wartość x. 785 00:35:14,050 --> 00:35:16,050 Więc mogłem oczywiście - 786 00:35:16,050 --> 00:35:18,450 na końcu dnia, to jest rodzaj głupie historii, ponieważ po prostu to zrobić. 787 00:35:18,450 --> 00:35:22,050 Ale gdybym nie wiedział o tego operatora, bo nie wolno było 788 00:35:22,050 --> 00:35:27,700 zmienić go w głównym sama, jak inaczej mogłaby wdrożyć Ken tu, to 789 00:35:27,700 --> 00:35:31,450 czas nie do sześcianu, ale do przyrostu? 790 00:35:31,450 --> 00:35:32,700 Jak zmienić ten tutaj? 791 00:35:32,700 --> 00:35:33,025 Tak. 792 00:35:33,025 --> 00:35:34,275 [Niesłyszalne] 793 00:35:37,430 --> 00:35:38,000 DAVID J. Malan: Dobra, dobra. 794 00:35:38,000 --> 00:35:40,490 Więc dlaczego nie mogę przejść w X? 795 00:35:40,490 --> 00:35:44,390 A potem, zamiast odesłać go, dlaczego nie mogę po prostu zrobić zwrot x + 1? 796 00:35:44,390 --> 00:35:46,370 Teraz, kilka rzeczy trzeba zmienić tutaj. 797 00:35:46,370 --> 00:35:47,530 Jestem na dobrej drodze. 798 00:35:47,530 --> 00:35:48,910 Co jeszcze muszę się uszczypnąć? 799 00:35:48,910 --> 00:35:49,470 Ktoś inny. 800 00:35:49,470 --> 00:35:49,882 Tak? 801 00:35:49,882 --> 00:35:51,530 [Niesłyszalne] 802 00:35:51,530 --> 00:35:53,520 DAVID J. Malan: trzeba zmienić typ wartości przyrostu 803 00:35:53,520 --> 00:35:54,590 ponieważ nie jest nieważne. 804 00:35:54,590 --> 00:35:56,650 Pustka oznacza nic nie jest zwracane. 805 00:35:56,650 --> 00:35:57,600 Ale wyraźnie, teraz jest. 806 00:35:57,600 --> 00:36:01,280 Więc musi to zmienić na int być zgodne z tym, co 807 00:36:01,280 --> 00:36:02,580 Jestem rzeczywiście wraca. 808 00:36:02,580 --> 00:36:04,580 >> Teraz jest jeszcze coś innego buggy tutaj. 809 00:36:04,580 --> 00:36:04,982 Tak? 810 00:36:04,982 --> 00:36:06,590 [Niesłyszalne] 811 00:36:06,590 --> 00:36:07,630 DAVID J. Malan: Więc muszę zwiększyć x? 812 00:36:07,630 --> 00:36:10,336 [Niesłyszalne] 813 00:36:10,336 --> 00:36:11,880 DAVID J. Malan: Ah, więc muszę zdać x. 814 00:36:11,880 --> 00:36:13,300 Więc muszę to zrobić tutaj. 815 00:36:17,590 --> 00:36:19,690 Więc prototyp, muszę to zmienić tutaj. 816 00:36:19,690 --> 00:36:21,290 Więc to musi być int. 817 00:36:21,290 --> 00:36:22,820 To musi stać się - 818 00:36:22,820 --> 00:36:23,670 hmm. 819 00:36:23,670 --> 00:36:24,710 I rzeczywiście błąd tutaj. 820 00:36:24,710 --> 00:36:25,780 Chodźmy naprawić ten jeden pierwszy. 821 00:36:25,780 --> 00:36:27,990 Jakie powinny to być w rzeczywistości? 822 00:36:27,990 --> 00:36:29,330 Więc to musi być int coś. 823 00:36:29,330 --> 00:36:30,340 To może być x. 824 00:36:30,340 --> 00:36:33,120 Ale szczerze mówiąc, jeśli zaczniesz wzywając wszystkie swoje zmienne x, to dostanie 825 00:36:33,120 --> 00:36:35,250 coraz mniej jasne, który jest który. 826 00:36:35,250 --> 00:36:38,210 Więc po prostu arbitralnie wybrać inną konwencję nazewnictwa dla mojej 827 00:36:38,210 --> 00:36:40,220 funkcje pomocnicze, funkcje piszę. 828 00:36:40,220 --> 00:36:41,100 Będziemy nazywać. 829 00:36:41,100 --> 00:36:44,500 Albo możemy nazwać - nazwijmy to even_number się jeszcze bardziej wyraźne. 830 00:36:44,500 --> 00:36:47,610 Więc mam do zwrotu tego, co liczba jest plus 1. 831 00:36:47,610 --> 00:36:49,720 A teraz muszę zmienić jedną rzecz tutaj i jeden 832 00:36:49,720 --> 00:36:50,700 Inna sprawa, tutaj. 833 00:36:50,700 --> 00:36:54,150 Co trzeba zmienić na linii 21 po raz pierwszy? 834 00:36:54,150 --> 00:36:55,390 Muszę przypisać ją do x. 835 00:36:55,390 --> 00:36:57,480 Więc nie mogę po prostu zadzwonić x przyrost. 836 00:36:57,480 --> 00:37:01,000 I trzeba pamiętać, odpowiedź, zmieniając wartość x na 837 00:37:01,000 --> 00:37:02,020 lewej stronie. 838 00:37:02,020 --> 00:37:04,930 I mimo, że x jest teraz na lewo i prawo, że jest całkowicie w porządku, bo 839 00:37:04,930 --> 00:37:08,370 z prawej strony zostanie wykonany pierwszy wtedy dostaje koleś w lewo 840 00:37:08,370 --> 00:37:10,240 rzecz używana, x w tym przypadku. 841 00:37:10,240 --> 00:37:11,900 I wtedy wreszcie, jest to łatwo naprawić teraz. 842 00:37:11,900 --> 00:37:15,080 Powinno to tylko mecz, co jest na dole. 843 00:37:15,080 --> 00:37:17,120 Int liczba. 844 00:37:17,120 --> 00:37:17,320 >> Dobrze. 845 00:37:17,320 --> 00:37:20,290 Więc cała masa zmian dla funkcji naprawdę głupie. 846 00:37:20,290 --> 00:37:24,250 Ale przedstawiciel rzeczy, że będziemy coraz częściej chcą robić. 847 00:37:24,250 --> 00:37:25,490 Więc upewnij buggy4. 848 00:37:25,490 --> 00:37:26,485 I już nie przejmował się gdzieś. 849 00:37:26,485 --> 00:37:27,520 O mój Boże. 850 00:37:27,520 --> 00:37:29,660 Pięć błędy w jakieś sześć-line programu. 851 00:37:29,660 --> 00:37:36,500 Więc co jest nie tak na linii 18, znak 5? 852 00:37:36,500 --> 00:37:36,970 Dobrze. 853 00:37:36,970 --> 00:37:39,330 Więc muszę zadeklarować to int. 854 00:37:39,330 --> 00:37:39,630 Dobrze. 855 00:37:39,630 --> 00:37:41,790 Zobaczmy więc, całą masę innych błędów. 856 00:37:41,790 --> 00:37:42,230 O mój Boże. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Ale znowu, po prostu wyczyścić ekran - 859 00:37:46,020 --> 00:37:48,660 L kontrola tutaj - a następnie uruchom ponownie Clang. 860 00:37:48,660 --> 00:37:51,340 Więc pięć problemów jest rzeczywiście tak, że jeden. 861 00:37:51,340 --> 00:37:53,500 Więc teraz niech uruchomić buggy4, Enter. 862 00:37:53,500 --> 00:37:54,150 Uff. 863 00:37:54,150 --> 00:37:57,434 x jest zwiększane w pełnym zakresie. 864 00:37:57,434 --> 00:37:58,420 >> Dobrze. 865 00:37:58,420 --> 00:38:01,700 Wszelkie pytania na temat przyrostu liczby? 866 00:38:01,700 --> 00:38:02,896 Tak? 867 00:38:02,896 --> 00:38:06,864 SPEAKER 2: Dlaczego jest tak, że można po prostu zmienić x do liczby w zmiennej 868 00:38:06,864 --> 00:38:08,860 nazwę i będzie to wiem, co masz na myśli? 869 00:38:08,860 --> 00:38:09,600 DAVID J. Malan: Dobre pytanie. 870 00:38:09,600 --> 00:38:13,130 Jak to jest, że mogę po prostu zmienić x do liczby, a program będzie wiedział, 871 00:38:13,130 --> 00:38:13,990 od razu? 872 00:38:13,990 --> 00:38:16,120 Więc jeszcze raz, pomyśl o tym, jak ten abstrakcji. 873 00:38:16,120 --> 00:38:20,110 Więc jeśli jestem głównym i Ken jest pierwotne, szczerze mówiąc, nie obchodzi mnie 874 00:38:20,110 --> 00:38:21,540 co Ken nazywa swój iPad. 875 00:38:21,540 --> 00:38:25,350 Nie obchodzi mnie, co on nazywa coś, co ma związek z jego wykonania 876 00:38:25,350 --> 00:38:26,550 z tej funkcji. 877 00:38:26,550 --> 00:38:32,130 Więc to jest szczegółów wdrażania, że ​​ja, główny, nie 878 00:38:32,130 --> 00:38:33,010 musimy się martwić. 879 00:38:33,010 --> 00:38:37,440 I tak po prostu zmienić go konsekwentnie wewnątrz funkcji, numer tutaj 880 00:38:37,440 --> 00:38:41,340 i numer tutaj, to wszystko trwa tak długo, jak przebudować. 881 00:38:41,340 --> 00:38:43,820 Jest to coś w rodzaju, jeśli myślisz o - wielu z nas, tych z kierowcy 882 00:38:43,820 --> 00:38:46,590 licencje, którzy byli napędzane, lub jeśli już nawet przejechał w samochodzie - 883 00:38:46,590 --> 00:38:50,710 większość z nas nie ma pojęcia, jak działa samochód, pod maską. 884 00:38:50,710 --> 00:38:54,710 I dosłownie, jeśli otworzyć maskę, większość z nas - w tym ja - 885 00:38:54,710 --> 00:38:56,580 nie będziemy wiedzieć, co tak naprawdę mamy do czynienia. 886 00:38:56,580 --> 00:38:58,850 Trochę jak można czuć się z rzeczy, jak to teraz. 887 00:38:58,850 --> 00:39:01,380 Ale tak naprawdę nie musisz się martwić, jak samochód działa. 888 00:39:01,380 --> 00:39:05,000 Nie musisz się martwić, co wszystkich prętów i tłoków i kabli wewnątrz z 889 00:39:05,000 --> 00:39:07,700 Samochód faktycznie robi. 890 00:39:07,700 --> 00:39:11,360 >> Więc coś, co nazywasz tłok nie ma znaczenia 891 00:39:11,360 --> 00:39:11,920 tu w tym przypadku. 892 00:39:11,920 --> 00:39:12,490 Sam pomysł. 893 00:39:12,490 --> 00:39:12,670 Tak? 894 00:39:12,670 --> 00:39:13,920 [Niesłyszalne] 895 00:39:25,250 --> 00:39:29,530 DAVID J. Malan: Jeśli było więcej zastosowań zmiennego momentu xa temu 896 00:39:29,530 --> 00:39:32,220 Ci, programista, musiałby zmienić je wszędzie. 897 00:39:32,220 --> 00:39:35,230 Lub można dosłownie robić pliku, Menu, a następnie Znajdź / Zamień, 898 00:39:35,230 --> 00:39:36,270 coś takiego. 899 00:39:36,270 --> 00:39:40,110 Ale będziesz musiał dokonać tych zmian samodzielnie. 900 00:39:40,110 --> 00:39:41,200 Trzeba być konsekwentnym. 901 00:39:41,200 --> 00:39:42,450 [Niesłyszalne] 902 00:39:47,200 --> 00:39:48,960 DAVID J. Malan: określonej kolejności, tak jak tutaj? 903 00:39:48,960 --> 00:39:52,660 Jeśli to był int inny numer? 904 00:39:52,660 --> 00:39:52,940 Tak. 905 00:39:52,940 --> 00:39:56,430 Tak aby ważne podczas wywoływania funkcji. 906 00:39:56,430 --> 00:40:00,350 Więc jeśli wołały przyrost o czymś przecinek coś 907 00:40:00,350 --> 00:40:01,400 istnieje bezpośrednie odwzorowanie. 908 00:40:01,400 --> 00:40:04,490 Pierwsza zmienna, co się nazywa, jest egzemplarz pierwszy 909 00:40:04,490 --> 00:40:05,480 Argument tutaj. 910 00:40:05,480 --> 00:40:07,280 Sorry, to nie powinno być nawias. 911 00:40:07,280 --> 00:40:09,300 Drugi argument, linie się z drugim. 912 00:40:09,300 --> 00:40:11,220 >> Tak aby, tak, ma znaczenie. 913 00:40:11,220 --> 00:40:11,490 Dobrze. 914 00:40:11,490 --> 00:40:13,360 Przykro mi, że wziął długą drogę do tam dostać. 915 00:40:13,360 --> 00:40:14,610 Inne pytania? 916 00:40:16,460 --> 00:40:16,850 Dobrze. 917 00:40:16,850 --> 00:40:20,300 Zobaczmy więc, jeśli nie możemy namalować obraz tego, co się faktycznie dzieje 918 00:40:20,300 --> 00:40:22,160 tutaj pod maską, tak powiem. 919 00:40:22,160 --> 00:40:26,310 Więc to jest prostokąt może reprezentować pamięć komputera. 920 00:40:26,310 --> 00:40:31,240 Więc nawet jeśli nie masz pojęcia, jak działa pamięć RAM i jak działa, co najmniej 921 00:40:31,240 --> 00:40:33,590 Zakładamy, że masz bukiety to te dni. 922 00:40:33,590 --> 00:40:34,740 Masz megabajtów niego. 923 00:40:34,740 --> 00:40:35,760 Masz gigabajtów niego. 924 00:40:35,760 --> 00:40:40,690 I wiemy, że od zera tydzień bajt jest tylko to, co? 925 00:40:40,690 --> 00:40:41,280 8 bitów. 926 00:40:41,280 --> 00:40:42,730 Dobra, więc 8 zer i jedynek. 927 00:40:42,730 --> 00:40:46,300 Więc jeśli twój komputer ma koncert pamięci RAM, na dwóch koncertach RAM te dni, masz 928 00:40:46,300 --> 00:40:54,450 Miliard lub 2 miliardów bajtów pamięci, czyli około 8 mld 16000000000 929 00:40:54,450 --> 00:40:56,560 bity, wewnątrz komputera. 930 00:40:56,560 --> 00:40:59,710 Teraz w przeciwieństwie do małego przykład Woolly Willy, to nie cząstki magnetyczne 931 00:40:59,710 --> 00:41:00,560 zazwyczaj więcej. 932 00:41:00,560 --> 00:41:04,470 Coraz częściej w laptopach co najmniej, to Dyski SSD, SSD, że 933 00:41:04,470 --> 00:41:05,560 tylko nie mają ruchomych części. 934 00:41:05,560 --> 00:41:06,710 To wszystko jest elektroniczne. 935 00:41:06,710 --> 00:41:08,070 To wszystko opiera się elektryczności. 936 00:41:08,070 --> 00:41:12,360 Tak, że, chociaż tego prostokąta tak reprezentujący jeden lub dwa 937 00:41:12,360 --> 00:41:13,930 gigabajty pamięci, że masz. 938 00:41:13,930 --> 00:41:15,500 >> Więc to jest fragment pamięci. 939 00:41:15,500 --> 00:41:20,460 Teraz świat informatyki ma jakby oddzielone kawałki 940 00:41:20,460 --> 00:41:22,570 pamięci, aby robić różne rzeczy. 941 00:41:22,570 --> 00:41:25,930 Tak na przykład, jeśli jest to komputera RAM - jak sugeruje 942 00:41:25,930 --> 00:41:30,400 prostokąt tam - okazuje się, że zgodnie z konwencją, w górnej części pamięci RAM, więc 943 00:41:30,400 --> 00:41:33,170 mówić, jest na ogół to, co nazywa fragment tekstu. 944 00:41:33,170 --> 00:41:35,910 To są zer i jedynek, które zostały zebrane. 945 00:41:35,910 --> 00:41:39,040 Kiedy więc szukałem pod maską, co a.out jest, wszystkie 946 00:41:39,040 --> 00:41:40,360 do zer i jedynek - 947 00:41:40,360 --> 00:41:44,000 Po uruchomieniu programu, te zera i jedynki są ładowane z dysku twardego 948 00:41:44,000 --> 00:41:46,290 jazdy do czegoś, co nazywa RAM. 949 00:41:46,290 --> 00:41:48,950 I w pamięci RAM, są narażone na górze. 950 00:41:48,950 --> 00:41:50,330 Teraz tymczasem masz inne rzeczy. 951 00:41:50,330 --> 00:41:53,060 Zainicjowane dane niezainicjowane dane. 952 00:41:53,060 --> 00:41:56,440 Te dwa pokosy pamięci odnoszą się do zmiennych globalnych, które 953 00:41:56,440 --> 00:41:57,530 nie często używać. 954 00:41:57,530 --> 00:42:00,630 Ale czasami, jeśli nie, to w końcu się tam również. 955 00:42:00,630 --> 00:42:01,620 Potem jest kilka innych rzeczy. 956 00:42:01,620 --> 00:42:04,130 Zmienne środowiskowe, których nie będziemy spędzać wiele czasu na. 957 00:42:04,130 --> 00:42:06,120 Ale wtedy dwie ważne rzeczy, że wróci cały ten 958 00:42:06,120 --> 00:42:08,130 semestr, stosu i sterty. 959 00:42:08,130 --> 00:42:12,280 >> Tak więc większość z pamięci komputera jest zarezerwowane podczas uruchamiania programu 960 00:42:12,280 --> 00:42:14,880 coś takiego jak stos i coś, co nazywa się sterty. 961 00:42:14,880 --> 00:42:16,940 A my nie będziemy mówić o kupie dzisiaj, ale będziemy 962 00:42:16,940 --> 00:42:18,180 mówić o stos. 963 00:42:18,180 --> 00:42:22,910 A stos ma wyczarować wizualnego jak jadalni 964 00:42:22,910 --> 00:42:26,120 Korytka posiłek w Mather House, lub gdziekolwiek się znajdziesz, gdzie 965 00:42:26,120 --> 00:42:27,810 jadalnia personel oczyścić je codziennie. 966 00:42:27,810 --> 00:42:30,180 One stosu je z podłogi na górę. 967 00:42:30,180 --> 00:42:33,800 I podobnie w pamięci, nie jest to pomysł na wprowadzenie czegoś na 968 00:42:33,800 --> 00:42:36,740 stosu, kładąc coś na stosie, stawiając coś na stosie. 969 00:42:36,740 --> 00:42:38,000 A co mamy na myśli? 970 00:42:38,000 --> 00:42:41,430 Cóż, powiększyć tylko połowę niższej tego obrazu, komputer'S 971 00:42:41,430 --> 00:42:43,990 RAM, zaproponować następujące. 972 00:42:43,990 --> 00:42:48,300 Okazuje się, że po uruchomieniu programu jak a.out lub hello, co 973 00:42:48,300 --> 00:42:49,920 Program jest to, że napisałeś, 974 00:42:49,920 --> 00:42:53,030 znowu te zera i jedynki są ładowane z dysku twardego - co jest 975 00:42:53,030 --> 00:42:56,190 długoterminowe przechowywanie, pozostaje tam nawet kiedy wyciągnąć wtyczkę - 976 00:42:56,190 --> 00:42:57,220 załadowane do pamięci RAM. 977 00:42:57,220 --> 00:42:59,020 RAM jest szybsza niż dyski twarde. 978 00:42:59,020 --> 00:43:00,700 Jest mniejszy niż dyski twarde. 979 00:43:00,700 --> 00:43:03,490 Ale to, gdzie programy żyć kiedy używasz ich. 980 00:43:03,490 --> 00:43:06,380 >> Więc kliknij dwukrotnie program na komputerze Mac lub PC - jest ładowany z 981 00:43:06,380 --> 00:43:07,750 dysku twardego do pamięci RAM. 982 00:43:07,750 --> 00:43:11,760 Tak szybko, jak to jest ładowany do pamięci RAM, zer i jedynek iść na szczycie drogi, 983 00:43:11,760 --> 00:43:13,130 tzw segmentu tekstu. 984 00:43:13,130 --> 00:43:17,040 Ale potem, jak tylko program faktycznie uruchamia główną 985 00:43:17,040 --> 00:43:18,140 funkcja. 986 00:43:18,140 --> 00:43:21,070 I główny, jak widzieliśmy, często zmiennych lokalnych. 987 00:43:21,070 --> 00:43:24,560 I ma wskazówki i smyczki i znaków i podobne. 988 00:43:24,560 --> 00:43:28,300 Więc, gdy Twój program, które zostały napisane lub program, który masz 989 00:43:28,300 --> 00:43:33,680 podwójnym kliknięciu używane pewne zmienne wewnątrz main, kończy się na 990 00:43:33,680 --> 00:43:37,020 dolnym rogu stos pamięci, że tak powiem. 991 00:43:37,020 --> 00:43:39,160 Teraz bardziej konkretnie, co to właściwie znaczy? 992 00:43:39,160 --> 00:43:44,080 To po prostu oznacza, że ​​jeśli mieliśmy ponumerować rzeczy - 993 00:43:44,080 --> 00:43:49,380 jeśli mieliśmy liczba bajtów pamięci RAM w komputerze, należy zauważyć, że 994 00:43:49,380 --> 00:43:51,650 to może być bajt zerowy numer. 995 00:43:51,650 --> 00:43:56,130 Może to być liczba bajtów jeden, dwa, trzy, cztery, pięć, sześć, wszystkie 996 00:43:56,130 --> 00:43:57,290 aż do jak - 997 00:43:57,290 --> 00:44:01,520 2 miliardy będzie aż tam na górze. 998 00:44:01,520 --> 00:44:05,960 Więc innymi słowy, gdy mówimy o pamięci RAM lub pamięci w kategoriach bajtów, to 999 00:44:05,960 --> 00:44:09,680 oznacza tylko, że ktoś zdecydował, co do liczby wszystkich 1000 00:44:09,680 --> 00:44:11,110 te fragmenty pamięci. 1001 00:44:11,110 --> 00:44:16,950 >> Więc kiedy trzeba 32 bitów dla int, lub potrzebujesz 8 bitów dla char, gdzie 1002 00:44:16,950 --> 00:44:18,320 nie kończy się w pamięci? 1003 00:44:18,320 --> 00:44:20,650 Oraz koncepcyjnie, po prostu kończy się w dolnej części tego 1004 00:44:20,650 --> 00:44:21,780 rzecz zwana stos. 1005 00:44:21,780 --> 00:44:25,670 Ale co ciekawe, teraz jest, gdy głównym wywołuje funkcję. 1006 00:44:25,670 --> 00:44:28,830 Załóżmy, że funkcję o nazwie foo, tylko arbitralne nazwy. 1007 00:44:28,830 --> 00:44:32,480 , Co się dzieje w głównym jest dole stosu pamięci. 1008 00:44:32,480 --> 00:44:35,630 Foo teraz kładzie się na górze głównej w pamięci. 1009 00:44:35,630 --> 00:44:40,020 Więc wszelkie zmienne lokalne, że foo jest skończyć rodzaju koncepcyjnie powyżej 1010 00:44:40,020 --> 00:44:40,770 tych w main. 1011 00:44:40,770 --> 00:44:46,920 Jeśli foo wywołuje inną funkcję o nazwie bar, zmienne te kończą się tutaj. 1012 00:44:46,920 --> 00:44:49,790 Jeśli pasek zwraca coś innego, tutaj, tutaj, tutaj. 1013 00:44:49,790 --> 00:44:53,900 Więc co jest ciekawe o uruchomieniu programu jest to, że podczas wywoływania funkcji, 1014 00:44:53,900 --> 00:44:57,720 i jak te funkcje wywoływać funkcje, i jak te funkcje wywoływać funkcje, 1015 00:44:57,720 --> 00:45:00,980 można zbudować ten stos funkcji w pamięci. 1016 00:45:00,980 --> 00:45:06,740 I tylko raz w deklaracji funkcji pan zacząć tę pamięć. 1017 00:45:06,740 --> 00:45:11,190 Tak więc jednym z najprostszych sposobów na brak pamięci w programie komputerowym jest 1018 00:45:11,190 --> 00:45:14,170 Napisać funkcje, które nigdy nie wróci. 1019 00:45:14,170 --> 00:45:16,650 >> Tak na przykład, niech wykazywać nawet z 1020 00:45:16,650 --> 00:45:18,460 celowo buggy program. 1021 00:45:18,460 --> 00:45:24,690 Pozwólcie mi iść do przodu i nie # include , int main (void). 1022 00:45:24,690 --> 00:45:31,270 I mam zamiar zrobić, gdy (2> 1), które prawdopodobnie nigdy nie będzie 1023 00:45:31,270 --> 00:45:33,370 zmienić na nas. 1024 00:45:33,370 --> 00:45:37,720 I pozwól mi iść do przodu i robić teraz printf. 1025 00:45:37,720 --> 00:45:39,950 Właściwie, to będzie mniej wizualnie ciekawe. 1026 00:45:39,950 --> 00:45:40,460 Zróbmy to. 1027 00:45:40,460 --> 00:45:44,840 Dla int (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 Zróbmy ten błąd, i + +. 1029 00:45:49,740 --> 00:45:51,150 I nie printf tutaj. 1030 00:45:51,150 --> 00:45:52,550 Przećwiczmy co głosił. 1031 00:45:52,550 --> 00:45:54,090 Rzućmy metody tutaj. 1032 00:45:54,090 --> 00:46:00,860 Chorus nieważne, a powiemy int. 1033 00:46:00,860 --> 00:46:02,295 A ja powiem, printf - 1034 00:46:04,871 --> 00:46:06,790 oh, zróbmy to bardziej interesujące. 1035 00:46:06,790 --> 00:46:08,350 Niech nie faktycznie wydrukować cokolwiek. 1036 00:46:08,350 --> 00:46:10,530 Zróbmy to. 1037 00:46:10,530 --> 00:46:11,780 Chorus (i). 1038 00:46:16,630 --> 00:46:17,000 >> Dobrze. 1039 00:46:17,000 --> 00:46:20,040 Więc to jest buggy bo dlaczego? 1040 00:46:20,040 --> 00:46:22,850 I zmyślam, jak przejść, bo program nie właściwie nic 1041 00:46:22,850 --> 00:46:23,420 zainteresowania. 1042 00:46:23,420 --> 00:46:24,670 Ale to nie cel jest. 1043 00:46:24,670 --> 00:46:30,440 Celem jest napisanie programu, którego główną funkcją co robi, najwyraźniej? 1044 00:46:30,440 --> 00:46:31,370 Zadzwoń sam. 1045 00:46:31,370 --> 00:46:32,600 I rzeczywiście, nie potrzebujemy pętli. 1046 00:46:32,600 --> 00:46:36,070 Powiedzmy nawet uprościć to tylko tak, aby nie stracić z oczu naprawdę 1047 00:46:36,070 --> 00:46:37,310 fundamentalny błąd. 1048 00:46:37,310 --> 00:46:39,200 Główne połączenia chór śpiewać jakiś refren. 1049 00:46:39,200 --> 00:46:41,760 Potem zrobiłem coś głupiego, i miałem rozmowę chorus chorus bo zakłada 1050 00:46:41,760 --> 00:46:43,550 ktoś zamierza wdrożyć go może. 1051 00:46:43,550 --> 00:46:45,960 A teraz to nie będzie skompilować jeszcze. 1052 00:46:45,960 --> 00:46:48,340 Muszę zrobić co? 1053 00:46:48,340 --> 00:46:49,700 Potrzebuję prototypu, pamiętam. 1054 00:46:49,700 --> 00:46:55,520 Więc muszę mieć tu refren void (int i);. 1055 00:46:55,520 --> 00:46:57,470 >> Więc teraz, jeśli pójdę na dół - 1056 00:46:57,470 --> 00:46:59,030 faktycznie, użyjmy większe okno. 1057 00:46:59,030 --> 00:47:01,670 Idziemy do przodu i zrobić refren. 1058 00:47:01,670 --> 00:47:06,000 Idziemy do przodu i zrobić refren. 1059 00:47:06,000 --> 00:47:08,302 Korzystanie z niezidentyfikowanym rozgrywającego i. 1060 00:47:08,302 --> 00:47:09,860 Och, to było głupie. 1061 00:47:09,860 --> 00:47:11,020 Nie musimy argument. 1062 00:47:11,020 --> 00:47:13,680 Zróbmy to. 1063 00:47:13,680 --> 00:47:14,550 Szkoda, że ​​zaczął w ten sposób. 1064 00:47:14,550 --> 00:47:16,160 Byłoby o wiele łatwiej program do pisania. 1065 00:47:16,160 --> 00:47:20,100 Więc tam. 1066 00:47:20,100 --> 00:47:23,870 A teraz chodźmy do mojego okna terminala, re-run dzyń. 1067 00:47:23,870 --> 00:47:26,900 I jedziemy. 1068 00:47:26,900 --> 00:47:28,020 To był bardzo szybki. 1069 00:47:28,020 --> 00:47:30,690 Co właściwie się stało, chociaż? 1070 00:47:30,690 --> 00:47:33,430 Cóż, teraz mogę dodać linię wydruku, dzięki czemu możemy zobaczyć. 1071 00:47:33,430 --> 00:47:41,330 Więc pozwól mi powiedzieć, printf, powiedzmy, że jestem tutaj. 1072 00:47:41,330 --> 00:47:43,470 Dobra, nie ma zmiennych, zostawimy to tak. 1073 00:47:43,470 --> 00:47:44,860 Pozwól mi ponownie uruchomić make. 1074 00:47:44,860 --> 00:47:47,940 Pozwól, że re-run refren. 1075 00:47:47,940 --> 00:47:51,235 I chodź. 1076 00:47:53,880 --> 00:47:55,130 Dalej. 1077 00:47:57,630 --> 00:47:59,750 Tak na marginesie, dlaczego nie rozbił się jeszcze? 1078 00:47:59,750 --> 00:48:02,050 Segmentation fault się super szybko przed. 1079 00:48:02,050 --> 00:48:04,250 [Niesłyszalne] 1080 00:48:04,250 --> 00:48:04,830 DAVID J. Malan: Dokładnie. 1081 00:48:04,830 --> 00:48:06,350 Więc na to potrzeba czasu, aby wydrukować. 1082 00:48:06,350 --> 00:48:08,370 To po prostu ma więcej pracy komputera części. 1083 00:48:08,370 --> 00:48:09,550 I tam jest. 1084 00:48:09,550 --> 00:48:10,620 Segmentation fault. 1085 00:48:10,620 --> 00:48:12,140 >> Więc zauważyć, jak szybko uruchamiane programy. 1086 00:48:12,140 --> 00:48:14,110 Jeśli nie masz nic, drukowanie super szybki. 1087 00:48:14,110 --> 00:48:18,100 Ale wciąż mam ten błąd segmentacji, ponieważ to, co się dzieje? 1088 00:48:18,100 --> 00:48:21,310 Cóż, jeśli myślisz o tym, jak pamięć komputera jest określone, to 1089 00:48:21,310 --> 00:48:22,890 dzieje się głównym. 1090 00:48:22,890 --> 00:48:23,800 Ale tu - 1091 00:48:23,800 --> 00:48:28,670 Nazwijmy ten chór, i nazwijmy to refren. 1092 00:48:28,670 --> 00:48:33,420 A teraz, jeśli mam zrobić moje estetykę rację, to jest po prostu powiedzieć refren, 1093 00:48:33,420 --> 00:48:38,060 refren, refren, refren, refren, refren, refren, nauseum ad. 1094 00:48:38,060 --> 00:48:39,920 I w końcu, co się stało? 1095 00:48:39,920 --> 00:48:46,690 Jeśli duży obraz dosłownie to, co właśnie się dzieje koncepcyjnie? 1096 00:48:46,690 --> 00:48:48,320 Przekroczeń stosu sterty. 1097 00:48:48,320 --> 00:48:52,400 Albo, co gorsza, po prostu wszystko, w tym przekroczenia segmencie tekst, który jest 1098 00:48:52,400 --> 00:48:54,530 do zer i jedynek, które stanowią program. 1099 00:48:54,530 --> 00:48:56,690 W skrócie, to jest po prostu super, super źle. 1100 00:48:56,690 --> 00:48:56,860 Zgadza się? 1101 00:48:56,860 --> 00:48:58,620 Program został gwałtownie się spod kontroli. 1102 00:48:58,620 --> 00:49:02,840 Używasz sposób więcej pamięci niż zamierzony wszystko z powodu głupiego 1103 00:49:02,840 --> 00:49:03,920 błąd, w tym przypadku. 1104 00:49:03,920 --> 00:49:08,160 Lub w tym przypadku, bardzo świadomie zrobić funkcja wywołująca sama. 1105 00:49:08,160 --> 00:49:09,210 Teraz nie jest tak źle. 1106 00:49:09,210 --> 00:49:12,540 Funkcje połączeń się rzeczywiście ma wielką moc 1107 00:49:12,540 --> 00:49:13,700 kiedy używasz go poprawnie. 1108 00:49:13,700 --> 00:49:15,650 Nie używałem go poprawnie tutaj. 1109 00:49:15,650 --> 00:49:16,940 >> Więc to nie jest tak źle. 1110 00:49:16,940 --> 00:49:20,620 Ale fakt, że w zasadzie nigdy nie przestać nazywać siebie jest podstawowym 1111 00:49:20,620 --> 00:49:23,050 osłabienie tu tego programu. 1112 00:49:23,050 --> 00:49:25,090 Więc gdzie jedziemy z tym wszystkim? 1113 00:49:25,090 --> 00:49:26,230 Cóż, co się naprawdę dzieje? 1114 00:49:26,230 --> 00:49:30,010 Kiedy wywołujemy funkcję przyrostu, jak robiliśmy w tych przykładach, 1115 00:49:30,010 --> 00:49:33,290 Mam wartość takich jak 1, że przechodzą w. 1116 00:49:33,290 --> 00:49:35,820 Mijam w kopii numer jeden. 1117 00:49:35,820 --> 00:49:37,080 Więc dodaje się dzieje. 1118 00:49:37,080 --> 00:49:40,390 Więc chodźmy do przykładu inkrementacji. 1119 00:49:40,390 --> 00:49:44,230 A ten facet rację tutaj. 1120 00:49:44,230 --> 00:49:46,800 Tak tu jest, co się rzeczywiście dzieje. 1121 00:49:46,800 --> 00:49:50,770 Gdy zadzwoniłem przyrost, i przechodzą w X, co obrazowo 1122 00:49:50,770 --> 00:49:53,660 tutaj dzieje jest to - 1123 00:49:53,660 --> 00:50:00,240 jeśli mają wartość 1 przechowywane tutaj, a ja rzeczywiście wywołać przyrost, który 1124 00:50:00,240 --> 00:50:02,680 teraz nazywa chóru - 1125 00:50:02,680 --> 00:50:04,010 Tak, to rzuca mi się tutaj. 1126 00:50:04,010 --> 00:50:06,750 Więc nazwijmy ten przyrost. 1127 00:50:06,750 --> 00:50:09,420 I nie wiem, co to następna funkcja będzie. 1128 00:50:09,420 --> 00:50:14,270 Więc co się właściwie dzieje, jest tu gdzieś w main, mam kawałek 1129 00:50:14,270 --> 00:50:16,670 pamięci, która przechowuje liczbę 1. 1130 00:50:16,670 --> 00:50:19,730 Kiedy dzwonię do przyrostu, używam innego fragmentu pamięci, ale teraz 1131 00:50:19,730 --> 00:50:20,840 mieć kopię 1. 1132 00:50:20,840 --> 00:50:25,480 Kiedy zwiększyć tę wartość, to staje 2 - strasznie napisany 1133 00:50:25,480 --> 00:50:26,420 ekran tutaj. 1134 00:50:26,420 --> 00:50:30,550 Ale wtedy, co się dzieje, jak tylko powróci przyrostu? 1135 00:50:30,550 --> 00:50:34,610 Ta pamięć tylko zostanie przekazana z powrotem do systemu operacyjnego, co oznacza, że ​​wszystkie 1136 00:50:34,610 --> 00:50:37,470 zrobiłeś nic przydać. 1137 00:50:37,470 --> 00:50:43,460 Która została pierwotnie zawarta w głównym jest nadal faktycznie istnieje. 1138 00:50:43,460 --> 00:50:44,650 >> Więc gdzie jedziemy z tym? 1139 00:50:44,650 --> 00:50:49,400 Cóż, okazuje się, że w pamięci masz to z powrotem do tyłu sekwencję 1140 00:50:49,400 --> 00:50:50,940 bajtów, które można umieścić rzeczy w. 1141 00:50:50,940 --> 00:50:53,760 I okazuje się, że mamy już coś, że polega na nakładaniu 1142 00:50:53,760 --> 00:50:55,100 rzeczy z powrotem do tyłu do tyłu do tyłu. 1143 00:50:55,100 --> 00:51:00,170 Co to jest ciąg, w oparciu o jeden tydzień, a teraz tydzień dwa? 1144 00:51:00,170 --> 00:51:01,840 Więc jest to tylko zbiór znaków. 1145 00:51:01,840 --> 00:51:05,290 Okazuje się zatem, jak można umieścić numery w pamięci, podobnie można 1146 00:51:05,290 --> 00:51:06,900 umieścić znaki w pamięci. 1147 00:51:06,900 --> 00:51:09,810 A kiedy zaczniemy znaków układają się w pamięci z powrotem do tyłu do tyłu, aby 1148 00:51:09,810 --> 00:51:12,800 wstecz, okazuje się, że przy użyciu najprostszych rzeczy jak dla pętli lub 1149 00:51:12,800 --> 00:51:14,510 pętla, możemy iteracyjne - 1150 00:51:14,510 --> 00:51:17,130 od lewej do prawej w ciągu znaków w ciągu - 1151 00:51:17,130 --> 00:51:20,720 i zacznij masować je do różnych znaków w ogóle. 1152 00:51:20,720 --> 00:51:25,550 Może stać B. B może stać C. Tak więc ostatecznie, możemy 1153 00:51:25,550 --> 00:51:28,830 Angielski zdanie, że rzeczywiście ma sens i konwersji każdego z tych 1154 00:51:28,830 --> 00:51:32,440 litery po jednym na raz przechodząc przez nasz komputer pamięci pozostawione 1155 00:51:32,440 --> 00:51:34,300 prawo faktycznie zaszyfrować. 1156 00:51:34,300 --> 00:51:36,590 >> Więc weźmy naszą pięciominutową przerwę, a kiedy wrócił, dowiemy 1157 00:51:36,590 --> 00:51:39,060 rozpocząć ten proces kodowania informacji. 1158 00:51:41,640 --> 00:51:43,180 >> Dobrze. 1159 00:51:43,180 --> 00:51:48,440 Więc zanim nurkowania w pewnym kryptografii i te rzeczy nazywane tablicami, pozwól mi 1160 00:51:48,440 --> 00:51:51,610 przerwa na wszelkie pytania, bo czuję, że naprawdę rodzaj pomieszania niektóre 1161 00:51:51,610 --> 00:51:52,230 te tematy. 1162 00:51:52,230 --> 00:51:53,940 Więc naprawić teraz, jeśli można. 1163 00:51:53,940 --> 00:51:56,480 Więc po prostu mówił o wartościach. 1164 00:51:56,480 --> 00:51:58,630 Rozmawialiśmy o argumenty. 1165 00:51:58,630 --> 00:52:02,330 I rozmawialiśmy o tym pojęciu, które wrócimy w najbliższych tygodniach 1166 00:52:02,330 --> 00:52:07,140 przyjść, przeglądania pamięci, jak całą masę tych stosie 1167 00:52:07,140 --> 00:52:08,540 tace, że tak powiem. 1168 00:52:08,540 --> 00:52:13,460 Z dołu na górę, tak, że każdy podajnik pobiera umieścić na stosie reprezentuje 1169 00:52:13,460 --> 00:52:15,160 Funkcja, która jest obecnie tzw. 1170 00:52:17,970 --> 00:52:20,300 Masz pytanie? 1171 00:52:20,300 --> 00:52:22,890 Więc jak - pozwól mi spytać pytanie. 1172 00:52:22,890 --> 00:52:25,520 Ciągle psuje, ale teraz it's - you've wszystko widział na twarzy chłopca. 1173 00:52:25,520 --> 00:52:27,020 Więc wracamy do tego. 1174 00:52:27,020 --> 00:52:29,700 >> Więc pozwól mi zadać pytanie tutaj. 1175 00:52:29,700 --> 00:52:34,810 Pozwól uprościć ten z powrotem do tego co było wcześniej niektóre z naszych wcześniejszych Q & A. 1176 00:52:34,810 --> 00:52:41,730 A fakt, że przyrost ma otwarty nawias, int liczba, zamknięte 1177 00:52:41,730 --> 00:52:42,260 nawias. 1178 00:52:42,260 --> 00:52:46,370 Co int liczba reprezentuje? 1179 00:52:46,370 --> 00:52:47,250 [Niesłyszalne] 1180 00:52:47,250 --> 00:52:47,870 DAVID J. Malan: argument. 1181 00:52:47,870 --> 00:52:50,732 Dobrze, ale co to argument? 1182 00:52:50,732 --> 00:52:51,620 [Niesłyszalne] 1183 00:52:51,620 --> 00:52:52,500 DAVID J. Malan: Przepraszam, co to jest? 1184 00:52:52,500 --> 00:52:53,150 SPEAKER 3: Coś przechodzą w. 1185 00:52:53,150 --> 00:52:53,570 DAVID J. Malan: Dobra. 1186 00:52:53,570 --> 00:52:54,780 Więc coś, co możesz przekazać w. 1187 00:52:54,780 --> 00:52:56,560 I bardziej ogólnie, to tylko wejście. 1188 00:52:56,560 --> 00:52:59,860 Jeśli piszesz funkcję i że funkcja jest celem w życiu jest do zrobienia 1189 00:52:59,860 --> 00:53:03,290 coś innego za każdym razem, kiedy go używać, to tylko w ten sposób 1190 00:53:03,290 --> 00:53:07,710 Aby tak się stało bardzo wydaje się, aby zapewnić to, że dane wejściowe 1191 00:53:07,710 --> 00:53:10,180 może zrobić coś innego z tego wejścia za każdym razem. 1192 00:53:10,180 --> 00:53:13,590 >> Więc trzeba określić dwie rzeczy, gdy funkcja ma wejścia. 1193 00:53:13,590 --> 00:53:17,240 Musisz określić nazwę, którą chcesz nadać tego wejścia, czysto 1194 00:53:17,240 --> 00:53:20,790 własnej wygody, aby można było odnieść się do niej w funkcji, którą 1195 00:53:20,790 --> 00:53:23,610 Sam piszesz, jak ja tutaj, w linii 32. 1196 00:53:23,610 --> 00:53:27,840 Ale trzeba także określić jego typ, ponieważ C jest językiem programowania 1197 00:53:27,840 --> 00:53:28,840 że po prostu wymaga 1198 00:53:28,840 --> 00:53:31,810 że jeśli chcesz zmienną, musisz powiedzieć komputerowi, co 1199 00:53:31,810 --> 00:53:32,790 typ danych to jest, 1200 00:53:32,790 --> 00:53:35,540 w dużej mierze tak, że wie ile bitów 1201 00:53:35,540 --> 00:53:37,230 przeznaczyć dla tej zmiennej. 1202 00:53:37,230 --> 00:53:38,600 Bo może to być sześć - 1203 00:53:38,600 --> 00:53:39,990 Przepraszam, że nie będzie sześć. 1204 00:53:39,990 --> 00:53:41,050 Może być 16. 1205 00:53:41,050 --> 00:53:41,630 Może być 8. 1206 00:53:41,630 --> 00:53:44,410 32 może być nawet 64. 1207 00:53:44,410 --> 00:53:45,820 Ale komputer musi wiedzieć. 1208 00:53:45,820 --> 00:53:49,110 Teraz int na lewej stronie przedstawia natomiast co? 1209 00:53:52,825 --> 00:53:53,780 [Niesłyszalne] 1210 00:53:53,780 --> 00:53:54,570 DAVID J. Malan: Co to jest? 1211 00:53:54,570 --> 00:53:55,390 [Niesłyszalne] 1212 00:53:55,390 --> 00:53:57,920 David J. Malan: typu funkcji, a w szczególności, 1213 00:53:57,920 --> 00:53:59,755 typ jego wyjścia. 1214 00:53:59,755 --> 00:54:00,220 Racja. 1215 00:54:00,220 --> 00:54:04,220 Tak więc o ile rzeczy w nawiasie reprezentuje jego wkład, jeśli istnieją, 1216 00:54:04,220 --> 00:54:06,640 rzeczą, aby po lewej stronie przedstawia dane wyjściowe. 1217 00:54:06,640 --> 00:54:10,560 I w tym przypadku, przyrost podobno zwraca int. 1218 00:54:10,560 --> 00:54:14,590 I tak int jest typ zwracany tej funkcji. 1219 00:54:14,590 --> 00:54:16,090 >> Co to znaczy wrócić? 1220 00:54:16,090 --> 00:54:19,810 Dosłownie użyć zwrotu słowa kluczowego. 1221 00:54:19,810 --> 00:54:24,640 A jeśli to, co wracają do prawej hasła jest 1222 00:54:24,640 --> 00:54:28,340 liczbą całkowitą, to jest rzeczywiście zgodny z tym, co obiecał. 1223 00:54:28,340 --> 00:54:31,110 Nie można było zrobić coś takiego - 1224 00:54:31,110 --> 00:54:32,280 hello, world - 1225 00:54:32,280 --> 00:54:33,500 bo to jest ciąg. 1226 00:54:33,500 --> 00:54:35,440 Oczywiście nie jest liczbą całkowitą. 1227 00:54:35,440 --> 00:54:40,450 Tak w skrócie, ciężar jest naprawdę na nas, programista, być szczegółowe, jak 1228 00:54:40,450 --> 00:54:44,730 do tego, co mamy do powrotu i wtedy faktycznie go o jego zwrot. 1229 00:54:44,730 --> 00:54:49,030 A potem zrobić ciut bardziej jasne kontekst - 1230 00:54:49,030 --> 00:54:50,080 tam jest znowu. 1231 00:54:50,080 --> 00:54:51,060 Kontekst - 1232 00:54:51,060 --> 00:54:52,830 niespodzianka w najbliższych chwilę. 1233 00:54:52,830 --> 00:54:57,720 Kontekst tu teraz jest, że pamięć komputera jest, ponownie, 1234 00:54:57,720 --> 00:54:59,070 gigabyte, dwa gigabajty, cokolwiek. 1235 00:54:59,070 --> 00:54:59,630 Może jest więcej. 1236 00:54:59,630 --> 00:55:00,540 Może jest mniej. 1237 00:55:00,540 --> 00:55:03,750 Ale komputer widzi ją jako posiadające różne sekcje. 1238 00:55:03,750 --> 00:55:04,860 Coś się tam. 1239 00:55:04,860 --> 00:55:06,020 Coś innego idzie tam. 1240 00:55:06,020 --> 00:55:07,540 Różnych rzeczy idzie w środku. 1241 00:55:07,540 --> 00:55:09,300 A dzisiaj, po prostu opowiadać tę historię. 1242 00:55:09,300 --> 00:55:11,130 >> Ale wrócimy do tego w czasie. 1243 00:55:11,130 --> 00:55:15,000 Na razie tylko kawałek pamięci naprawdę dbają o to fragment tekstu 1244 00:55:15,000 --> 00:55:17,160 dlatego, że po prostu reprezentuje zer i jedynek 1245 00:55:17,160 --> 00:55:18,460 że Clang działo wyprowadzać. 1246 00:55:18,460 --> 00:55:21,570 Więc kiedy uruchomić polecenie na klawiaturze jak a.out, lub podwójnie 1247 00:55:21,570 --> 00:55:25,350 kliknij ikonę na Mac OS lub Windows, program jest ładowany z dysku twardego 1248 00:55:25,350 --> 00:55:26,930 jechać do pamięci RAM. 1249 00:55:26,930 --> 00:55:30,850 I to jest koleś na górze komputera RAM, że tak powiem. 1250 00:55:30,850 --> 00:55:35,470 Teraz w międzyczasie, jak program zostanie uruchomiony i głównym jest wywoływana w 1251 00:55:35,470 --> 00:55:39,240 program, który napisałem lub program Microsoft lub Apple napisał, każde z jej 1252 00:55:39,240 --> 00:55:42,930 zmienne lokalne kończy się tam na dnie pamięci komputera. 1253 00:55:42,930 --> 00:55:46,490 Ale jeśli głównym wywołuje inną funkcję, która sama ma zmienne lub 1254 00:55:46,490 --> 00:55:48,340 argumenty, kończy się nad nim. 1255 00:55:48,340 --> 00:55:50,670 A jeśli ta funkcja wywołuje coś, kończy się nad nim, 1256 00:55:50,670 --> 00:55:51,840 powyższego, powyżej. 1257 00:55:51,840 --> 00:55:56,100 I tylko raz funkcja jest wykonywana wykonującego stos tac, tak 1258 00:55:56,100 --> 00:55:58,320 mówić, zaczynają się coraz niżej. 1259 00:55:58,320 --> 00:56:03,370 I to właśnie wtedy, w skrócie, wyjaśnia, dlaczego, kiedy zadzwonić cube - 1260 00:56:03,370 --> 00:56:04,660 lub zadzwonić przyrost - 1261 00:56:04,660 --> 00:56:06,490 jesteś przejazdem w kopii wartości. 1262 00:56:06,490 --> 00:56:09,840 I co to oznacza obrazowo jest, że jesteś dosłownie pisać 1263 00:56:09,840 --> 00:56:14,540 nr 1 w innej części pamięci, zmianę, że 1 do 2, w przypadku 1264 00:56:14,540 --> 00:56:15,360 przyrost - 1265 00:56:15,360 --> 00:56:17,450 lub do 8, w przypadku modułu - 1266 00:56:17,450 --> 00:56:21,450 i, że pamięć dala rzucania natychmiast przyrostu lub sześcianu 1267 00:56:21,450 --> 00:56:23,410 funkcja zwraca. 1268 00:56:23,410 --> 00:56:24,267 >> Pytanie. 1269 00:56:24,267 --> 00:56:25,517 [Niesłyszalne] 1270 00:56:28,090 --> 00:56:29,970 DAVID J. Malan: Gdzie - zmienne globalne przechowywane są w co 1271 00:56:29,970 --> 00:56:32,960 Obecnie nazywa się na założone dane lub niezainicjowanych danych. 1272 00:56:32,960 --> 00:56:35,900 Różnica jest, jeśli masz zmienną globalną, i przypisać go 1273 00:56:35,900 --> 00:56:39,530 natychmiast wartość przy znaku równości, to kończy się na górze tam. 1274 00:56:39,530 --> 00:56:43,390 A jeśli po prostu powiedzieć, int x średnik bez wartości, kończy się nieco 1275 00:56:43,390 --> 00:56:46,670 niższy w pamięci RAM, po prostu konwencji. 1276 00:56:46,670 --> 00:56:49,308 Inne pytania. 1277 00:56:49,308 --> 00:56:49,750 Dobrze. 1278 00:56:49,750 --> 00:56:53,040 >> Więc ten obraz będzie wracać, ponieważ mamy mocniejsze, co możemy zrobić, 1279 00:56:53,040 --> 00:56:53,830 z komputerem. 1280 00:56:53,830 --> 00:56:58,790 Ale teraz, zróbmy krótki wstęp do kryptografii, specyficzny rodzaj 1281 00:56:58,790 --> 00:57:01,910 Kryptografia to nie rozwiąże wszystkich problemów świata, ale nie rozwiązuje 1282 00:57:01,910 --> 00:57:02,480 niektóre z nich. 1283 00:57:02,480 --> 00:57:06,090 W tej sprawie, mamy coś, co nazywa tajny klucz kryptograficzny. 1284 00:57:06,090 --> 00:57:10,430 I tajne kryptografii klucza, jak sama nazwa wskazuje, pochodzi jego bezpieczeństwo 1285 00:57:10,430 --> 00:57:11,330 z tajemnicy. 1286 00:57:11,330 --> 00:57:14,720 Tak na przykład, jeśli jesteś z powrotem w szkole, a ty przechodząc 1287 00:57:14,720 --> 00:57:18,040 mały sekret list miłosny do chłopaka czy dziewczyny jesteś na zgniatanie - jeśli 1288 00:57:18,040 --> 00:57:20,820 chciał przekazać, że przez publiczność, to pewnie nie napisze 1289 00:57:20,820 --> 00:57:24,120 takie notatki w języku angielskim lub cokolwiek jest językiem ojczystym, a raczej ty 1290 00:57:24,120 --> 00:57:25,800 może zaszyfrować. 1291 00:57:25,800 --> 00:57:27,820 Albo może po prostu wysłać im wiadomość tekstową tych dni. 1292 00:57:27,820 --> 00:57:30,310 Ale może rzeczywiście przekazać im uwagę w całej klasie. 1293 00:57:30,310 --> 00:57:33,820 I zrobić to bezpiecznie, w taki sposób, że przyjaciele i nauczyciel 1294 00:57:33,820 --> 00:57:36,820 nie wiesz co piszesz, może pochodzić z dość proste 1295 00:57:36,820 --> 00:57:37,800 algorytm - 1296 00:57:37,800 --> 00:57:39,290 młody choć może być - 1297 00:57:39,290 --> 00:57:40,780 wystarczy wspiąć słowa. 1298 00:57:40,780 --> 00:57:44,390 Więc zamiast pisać, można napisać B. Zamiast B, można napisać 1299 00:57:44,390 --> 00:57:46,670 C. Zamiast C, D można dodać, i tak dalej. 1300 00:57:46,670 --> 00:57:50,020 Albo można wymyślić bardziej wyrafinowane tłumaczenia listów 1301 00:57:50,020 --> 00:57:51,300 do różnych pism. 1302 00:57:51,300 --> 00:57:55,440 Ale połów jest chłopcem czy dziewczynką, do którego wysyłasz tę notatkę musi 1303 00:57:55,440 --> 00:57:56,850 coś wiedzieć. 1304 00:57:56,850 --> 00:57:59,620 Która jest, co, oczywiście? 1305 00:57:59,620 --> 00:58:01,400 Podoba Ci się to, co twój sekret jest. 1306 00:58:01,400 --> 00:58:04,620 Podoba Ci się, co to jest mapowanie między AS i B i CS i DS? 1307 00:58:04,620 --> 00:58:08,780 Czy jest to po prostu dodanie jednego, że tak powiem, do każdej z liter, aby przejść z 1308 00:58:08,780 --> 00:58:09,730 A do B, B do C? 1309 00:58:09,730 --> 00:58:11,350 Czy jest to bardziej skomplikowane niż to? 1310 00:58:11,350 --> 00:58:16,450 Więc ty i twój zmiażdżyć trzeba mieć tę tajną informację. 1311 00:58:16,450 --> 00:58:18,170 Ale jest rodzaj Catch-22 tutaj. 1312 00:58:18,170 --> 00:58:20,760 Jeśli jest to pierwszy raz masz ten list miłosny przez 1313 00:58:20,760 --> 00:58:25,590 klasy, w jaki sposób ten chłopak lub dziewczyna będzie wiedzieć, co tajne nawet jest? 1314 00:58:25,590 --> 00:58:28,450 Tak tajny klucz szyfrujący nie rozwiązuje wszystkich problemów świata. 1315 00:58:28,450 --> 00:58:30,490 I jest rzeczywiście związek, że będziemy wracać do kierunku 1316 00:58:30,490 --> 00:58:31,370 semestru end. 1317 00:58:31,370 --> 00:58:35,970 >> Podobnie ma nikt z nas prawdopodobnie nigdy wysłane - 1318 00:58:35,970 --> 00:58:39,453 Podobnie, w większości nie wiemy, że ktoś pracuje, na przykład, na 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 A jednak wielu z nas prawdopodobnie kupił rzeczy w Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 A my nauczono aby zakładać, że e-commerce 1322 00:58:45,670 --> 00:58:47,060 transakcje są bezpieczne. 1323 00:58:47,060 --> 00:58:47,210 Zgadza się? 1324 00:58:47,210 --> 00:58:49,310 URL prawdopodobnie mówi https. 1325 00:58:49,310 --> 00:58:51,590 Jest może trochę głupie ikona kłódki gdzieś. 1326 00:58:51,590 --> 00:58:54,680 Istnieje pewien rodzaj kryptografii zabezpieczania informacji o karcie kredytowej 1327 00:58:54,680 --> 00:58:56,980 między tobą i Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 A jednak, jeśli kryptografia obejmuje wiedząc jakąś tajemnicę, a jeszcze nie mam 1329 00:59:00,410 --> 00:59:03,330 znam nikogo w Amazon, a ja na pewno nie zorganizował żadnego rodzaju 1330 00:59:03,330 --> 00:59:07,350 Tajemnica z kimś z Amazonii, jak jest komputer lub moja przeglądarka to robi? 1331 00:59:07,350 --> 00:59:10,100 Cóż, okazuje się, że to inne rodzaje kryptografii łącznie, które rozwiązują 1332 00:59:10,100 --> 00:59:10,740 że problem. 1333 00:59:10,740 --> 00:59:13,610 Ale na dziś, będziemy koncentrować się na proste, gdzie można zorganizować w 1334 00:59:13,610 --> 00:59:18,480 awansować znać jakąś tajemnicę, jak plus 1 lub jakiegoś mapowania pomiędzy AS i pensjonatów. 1335 00:59:18,480 --> 00:59:20,710 >> A proces ten obejmuje zwykle kryptografii. 1336 00:59:20,710 --> 00:59:23,550 Masz jakiś zwykły tekst, przedstawiony tu w lewo. 1337 00:59:23,550 --> 00:59:26,260 Go uruchomić przez jakiś algorytm lub procedury 1338 00:59:26,260 --> 00:59:27,670 na szyfrowanie. 1339 00:59:27,670 --> 00:59:31,390 Może to po prostu staje się B, B C. I wtedy staje się to skończyć 1340 00:59:31,390 --> 00:59:32,260 Cipher tekstu. 1341 00:59:32,260 --> 00:59:36,450 Tymczasem, po zapłaceniu zgniatać otrzymuje tajną notatkę, on lub ona musi następnie 1342 00:59:36,450 --> 00:59:39,950 odszyfrować ogólnie cofania że algorytm tak, aby 1343 00:59:39,950 --> 00:59:41,640 kopię zwykłego tekstu. 1344 00:59:41,640 --> 00:59:43,860 Teraz istnieją fizyczne inkarnacje to. 1345 00:59:43,860 --> 00:59:46,720 Na przykład, jest to mały sekret pierścień dekoder. 1346 00:59:46,720 --> 00:59:50,060 I jest to pierścień w tym sensie, że są dwie tarcze tutaj. 1347 00:59:50,060 --> 00:59:53,630 Na zewnętrznym obwodzie tej rzeczy, nie litery A do Z, 1348 00:59:53,630 --> 00:59:55,110 chociaż są one w przypadkowej kolejności. 1349 00:59:55,110 --> 00:59:58,410 A w środku, jest rzeczywiście niektóre numery, takie, że z tego 1350 00:59:58,410 --> 01:00:02,940 ring, można trochę skręcić na zewnątrz, ale nie w środku, aby wyrównać 1351 01:00:02,940 --> 01:00:04,110 numery z literami. 1352 01:00:04,110 --> 01:00:08,290 A w klipie jesteś o patrz - niektóre z nich można spotkać 24/7 1353 01:00:08,290 --> 01:00:11,120 wokół Bożego Narodzenia z filmu o nazwie Christmas Story. 1354 01:00:11,120 --> 01:00:16,050 Zobaczysz, że było tak mało Ralphie pragnie dowiedzieć się, co trochę sierota 1355 01:00:16,050 --> 01:00:19,810 TAJNE Annie była dla niego, które zostały przekazane, Myślę, że w 1356 01:00:19,810 --> 01:00:22,810 tworzą numerycznych wiadomości na seryjnym skrzynki. 1357 01:00:22,810 --> 01:00:26,760 I trzeba było zgromadzić wszystkie małe karty dołączone 1358 01:00:26,760 --> 01:00:27,480 w polu zbóż. 1359 01:00:27,480 --> 01:00:28,320 Trzeba było wysłać je do środka 1360 01:00:28,320 --> 01:00:31,060 Miałeś wrócić tajny pierścień dekoder, tak, że można w końcu zrozumieć 1361 01:00:31,060 --> 01:00:34,190 co mapowanie między liter i cyfr, 1362 01:00:34,190 --> 01:00:35,420 lub litery i litery. 1363 01:00:35,420 --> 01:00:39,790 Więc dam ci ten krótki klip z Christmas Story motywować Pset 2 i 1364 01:00:39,790 --> 01:00:42,340 nasza dyskusja, w jednej chwili, z tablic. 1365 01:00:42,340 --> 01:00:43,773 Mamy tu więc Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [PLAYBACK VIDEO] 1367 01:00:44,126 --> 01:00:47,470 -Be wiadomo wszem i wobec, że Ralph Parker zostaje mianowany 1368 01:00:47,470 --> 01:00:50,690 członkiem Little Orphan Annie Tajnej Kręgu i ma prawo do wszystkich 1369 01:00:50,690 --> 01:00:53,500 zaszczyty i korzyści występujące w tym zakresie. 1370 01:00:53,500 --> 01:00:56,040 Podpisany, Little Orphan Annie. 1371 01:00:56,040 --> 01:00:58,730 Kontrasygnaty, Pierre Andre! 1372 01:00:58,730 --> 01:01:00,150 Atramentem! 1373 01:01:00,150 --> 01:01:02,910 Nagrody i korzyści, już w wieku dziewięciu lat. 1374 01:01:09,970 --> 01:01:10,730 Chodź, przejdźmy się z tym. 1375 01:01:10,730 --> 01:01:15,000 Nie potrzebuję All That Jazz o przemytników i piratów. 1376 01:01:15,000 --> 01:01:17,624 -Słuchaj jutro na przygodę kończącej Czarne 1377 01:01:17,624 --> 01:01:19,710 Pirate Ship. 1378 01:01:19,710 --> 01:01:23,380 Teraz nadszedł czas na tajne wiadomości Annie dla Ciebie członków 1379 01:01:23,380 --> 01:01:25,670 z The Secret Circle. 1380 01:01:25,670 --> 01:01:30,260 Pamiętaj, dzieci, tylko członkowie Secret Circle Annie może dekodować 1381 01:01:30,260 --> 01:01:31,660 TAJNE Annie. 1382 01:01:31,660 --> 01:01:36,230 Pamiętaj, Annie zależy od Ciebie. 1383 01:01:36,230 --> 01:01:38,720 Ustaw swoje szpilki do B2. 1384 01:01:38,720 --> 01:01:41,040 Oto wiadomość. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Jestem w moim pierwszym posiedzeniu tajnym. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -Pierre był w świetnej dziś głosu. 1389 01:01:51,700 --> 01:01:54,890 Mógłbym powiedzieć, że dzisiejsza wiadomość była bardzo ważna. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 To wiadomość od Annie siebie. 1392 01:01:58,590 --> 01:01:59,840 Pamiętaj, nie mów nikomu. 1393 01:02:04,570 --> 01:02:08,750 -90 Sekund później, jestem w jedynym pokoju, w domu, w którym chłopiec z dziewięciu 1394 01:02:08,750 --> 01:02:12,980 może siedzieć w prywatność i dekodowania. 1395 01:02:12,980 --> 01:02:17,130 Aha, B. poszedłem dalej. 1396 01:02:17,130 --> 01:02:20,330 E. Pierwsze słowo to będzie. 1397 01:02:20,330 --> 01:02:22,670 S. przychodzi łatwiej. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Oh, come on, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Muszę już iść. 1401 01:02:28,430 --> 01:02:30,350 -Będę mieć rację w dół, ma. 1402 01:02:30,350 --> 01:02:33,720 -Gee świst. 1403 01:02:33,720 --> 01:02:38,270 -T, O. Koniecznie. 1404 01:02:38,270 --> 01:02:40,000 Upewnij się, że co? 1405 01:02:40,000 --> 01:02:42,105 Co było mało Orphan Annie próbuje powiedzieć? 1406 01:02:42,105 --> 01:02:43,095 Upewnij się, że co? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Randy ma iść. 1409 01:02:44,580 --> 01:02:45,570 Czy możesz wyjść? 1410 01:02:45,570 --> 01:02:46,560 -W porządku, mamo. 1411 01:02:46,560 --> 01:02:48,540 Zaraz się. 1412 01:02:48,540 --> 01:02:50,580 -I był coraz bliżej. 1413 01:02:50,580 --> 01:02:52,550 Napięcie było straszne. 1414 01:02:52,550 --> 01:02:53,355 Co to było? 1415 01:02:53,355 --> 01:02:56,315 Los planety może się zawiesić w bilansie. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Randy ma iść. 1418 01:02:59,165 --> 01:03:02,310 -Ja się od razu, na litość boską. 1419 01:03:02,310 --> 01:03:04,000 -Gee, prawie. 1420 01:03:04,000 --> 01:03:05,180 Moje palce przeleciał. 1421 01:03:05,180 --> 01:03:07,150 Mój umysł był pułapką stali. 1422 01:03:07,150 --> 01:03:08,790 Każda pora wibruje. 1423 01:03:08,790 --> 01:03:10,040 To było niemal oczywiste. 1424 01:03:10,040 --> 01:03:13,400 Tak, tak, tak, tak. 1425 01:03:13,400 --> 01:03:18,960 -Pamiętaj, aby pić Ovaltine. 1426 01:03:18,960 --> 01:03:20,210 Ovaltine? 1427 01:03:24,010 --> 01:03:25,260 Crummy handlowych? 1428 01:03:28,200 --> 01:03:29,640 Sukinsyn. 1429 01:03:29,640 --> 01:03:33,340 [END ODTWARZANIE VIDEO] 1430 01:03:33,340 --> 01:03:36,040 >> DAVID J. Malan: Więc nie mamy kryptografii. 1431 01:03:36,040 --> 01:03:39,670 Tak jak w komputerze, możemy pójść o realizacji lub 1432 01:03:39,670 --> 01:03:40,950 reprezentujących takie rzeczy? 1433 01:03:40,950 --> 01:03:44,430 Cóż, musimy sposób wyrażania siebie trochę bardziej elastyczny niż 1434 01:03:44,430 --> 01:03:46,420 nasze zmienne dotąd pozwoliły. 1435 01:03:46,420 --> 01:03:47,370 Mieliśmy wskazówki. 1436 01:03:47,370 --> 01:03:48,380 Mieliśmy znaki. 1437 01:03:48,380 --> 01:03:50,790 Mieliśmy pływaków i dwuosobowe i kilka innych. 1438 01:03:50,790 --> 01:03:55,050 Ale to są pojedyncze dzieła z pamięci, że tak naprawdę nie pozwalają nam 1439 01:03:55,050 --> 01:03:58,010 wyrazić rzeczy, jak słów i zdań i zwrotów. 1440 01:03:58,010 --> 01:04:00,200 Rzeczywiście, mamy nazywa takie rzeczy sznurki. 1441 01:04:00,200 --> 01:04:03,650 Ale obiecał, że jest to tak naprawdę tylko uproszczenie w CS50 1442 01:04:03,650 --> 01:04:07,020 Biblioteka że mamy zamiar obrać z powrotem. 1443 01:04:07,020 --> 01:04:08,970 >> A więc zacznijmy to zrobić tutaj. 1444 01:04:08,970 --> 01:04:11,130 Pozwólcie mi iść do przodu i otworzyć plik - 1445 01:04:11,130 --> 01:04:13,770 wszystkie pliki są dostępne jak zwykle online - 1446 01:04:13,770 --> 01:04:19,120 nazywa array.c rozwiązać problem niezwiązany strun ale maluje 1447 01:04:19,120 --> 01:04:23,040 zdjęcie tu w jaki sposób możemy wykorzystać coś, co nazywa tablicę. 1448 01:04:23,040 --> 01:04:25,530 Tablica jest typu. 1449 01:04:25,530 --> 01:04:31,320 To jest typ zmiennej, rodzaju, który posiada kilka mniejszych typów danych 1450 01:04:31,320 --> 01:04:34,150 wewnątrz niego z powrotem do tyłu do tyłu do tyłu. 1451 01:04:34,150 --> 01:04:37,700 Tak na przykład, jeśli chcemy napisać mały program, który daje ci 1452 01:04:37,700 --> 01:04:42,110 quiz, średnio na kurs, jak 50, który ma dwa quizy, mógłbyś łatwo 1453 01:04:42,110 --> 01:04:45,170 napisać ten program - na podstawie nawet niektóre z zeszłotygodniowego materiału - 1454 01:04:45,170 --> 01:04:47,770 używając getInt i kilka zmiennych. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, i to całkiem proste. 1456 01:04:51,920 --> 01:04:55,930 To jest być może 10, 20 linii kodu, Max, realizację programu, który pyta 1457 01:04:55,930 --> 01:05:01,170 użytkownika dla dwóch wyników quizu, a następnie oblicza ich średnią, dodając je 1458 01:05:01,170 --> 01:05:03,850 razem, dzieląc przez dwa, i drukowania wyników. 1459 01:05:03,850 --> 01:05:06,380 Moglibyśmy prawdopodobnie zrobić dość łatwo teraz po 1460 01:05:06,380 --> 01:05:07,510 pewną liczbę minut. 1461 01:05:07,510 --> 01:05:11,005 >> Ale problemem jest to, że załóżmy, że 50 miał trzy quizy lub cztery. 1462 01:05:11,005 --> 01:05:13,510 Załóżmy, że chcesz użyć tego samego programu dla klasy, która miała 1463 01:05:13,510 --> 01:05:14,850 tygodniowy quizów. 1464 01:05:14,850 --> 01:05:16,610 Pomyśl o klasie, która co tydzień quizy. 1465 01:05:16,610 --> 01:05:20,610 Jeśli jest tak jak 16 lub tak tygodni w semestrze, teraz masz 16 zmiennych - 1466 01:05:20,610 --> 01:05:24,270 int quiz1, int quiz2, int quiz3, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 Jak tylko zaczniesz widzieć tę nadmiarowość, to kopiowanie i wklejanie 1468 01:05:27,560 --> 01:05:31,390 kodu, należy zacząć, aby ci szkoda że nie było lepszego sposobu. 1469 01:05:31,390 --> 01:05:33,930 I na szczęście, bo z tablic, jest. 1470 01:05:33,930 --> 01:05:34,980 Więc zróbmy to. 1471 01:05:34,980 --> 01:05:38,430 Po pierwsze, pozwól mi przedstawić bardzo prostą rzecz, że nie już używana do tej pory, 1472 01:05:38,430 --> 01:05:40,140 ale zobaczysz go okazjonalnie w kodzie. 1473 01:05:40,140 --> 01:05:42,360 To jest to, co zwykle nazywa się stała. 1474 01:05:42,360 --> 01:05:45,790 Więc to jest stała w tym sensie, że wartość ta nie zmienia. 1475 01:05:45,790 --> 01:05:49,210 Konwencja człowieka przy tworzeniu stałej jest wykorzystać cały kapitał 1476 01:05:49,210 --> 01:05:51,940 litery, po prostu tak, że tak naprawdę wyróżnia się w kodzie. 1477 01:05:51,940 --> 01:05:55,960 I specjalne słowo, że używasz w C # jest zdefiniować. 1478 01:05:55,960 --> 01:06:00,250 Więc jeśli mówisz, # define, a następnie spację, a następnie wyraz, który chcesz użyć do 1479 01:06:00,250 --> 01:06:03,260 Stała nazwa, a następnie wartość stałą. 1480 01:06:03,260 --> 01:06:06,180 Więc uprzedzenia, to jest różne od przypisując coś do zmiennej. 1481 01:06:06,180 --> 01:06:07,020 Nie ma znaku równości. 1482 01:06:07,020 --> 01:06:08,240 Nie ma średnik. 1483 01:06:08,240 --> 01:06:11,410 To, co się powszechnie znana jako dyrektywa preprocesora, ale o 1484 01:06:11,410 --> 01:06:12,210 że kolejny raz. 1485 01:06:12,210 --> 01:06:18,540 >> Na razie, to tworzy niezmienny nazwie których rzeczywista wartość QUIZZES 1486 01:06:18,540 --> 01:06:19,940 Wartość liczbowa jest 2. 1487 01:06:19,940 --> 01:06:24,020 Więc wszędzie widzisz quizy, konkursy, quizy, całej tej sprawy, to 1488 01:06:24,020 --> 01:06:25,410 tylko numer 2. 1489 01:06:25,410 --> 01:06:28,100 Teraz, gdy patrzę na głównym teraz zobaczmy, jak to działa. 1490 01:06:28,100 --> 01:06:29,500 Po pierwsze, to wygląda trochę tajemniczy. 1491 01:06:29,500 --> 01:06:31,340 Ale to wszystko rzeczy z tydzień jeden. 1492 01:06:31,340 --> 01:06:32,710 Zapytaj użytkownika o klasach. 1493 01:06:32,710 --> 01:06:33,630 W jaki sposób możemy to zrobić? 1494 01:06:33,630 --> 01:06:35,470 Cóż, w wierszu 22 - 1495 01:06:35,470 --> 01:06:37,210 to jest naprawdę soczyste część - 1496 01:06:37,210 --> 01:06:40,960 Oświadczam, pływaka, ale nie tylko pojedyncze float. 1497 01:06:40,960 --> 01:06:44,620 Jestem deklarując raczej tablicę wartości zmiennoprzecinkowych. 1498 01:06:44,620 --> 01:06:49,100 Że zmienna będzie się nazywać gatunki, jak sugeruje tutaj. 1499 01:06:49,100 --> 01:06:53,080 Ale tylko kawałek nowej składni, a następnie są te nawiasy kwadratowe, fakt 1500 01:06:53,080 --> 01:06:59,350 Powiedziałem, że gatunki, pływak, a następnie otworzyć wspornik a następnie numer. 1501 01:06:59,350 --> 01:07:02,460 Wskazówka, jeśli jest to stała, to jest tak, jak to zrobiliśmy. 1502 01:07:02,460 --> 01:07:06,890 Oznacza to, że komputer hej, daj mi dwa pływaki i niech wspólnie zadzwonić 1503 01:07:06,890 --> 01:07:08,220 ich gatunki. 1504 01:07:08,220 --> 01:07:11,920 Jest to w przeciwieństwie do bardziej żmudne takiego. 1505 01:07:11,920 --> 01:07:15,850 Spławik grade1, float grade2, i tak dalej. 1506 01:07:15,850 --> 01:07:20,010 Więc tablica pozwala nam na realizację tego pomysłu, ale znacznie mniej messily w 1507 01:07:20,010 --> 01:07:24,630 taki sposób, że możemy napisać jedną linię kodu, zamiast, powiedzmy, 16 dla 16 1508 01:07:24,630 --> 01:07:25,740 Semestr tygodni. 1509 01:07:25,740 --> 01:07:29,950 Więc nie chcą ciężko kod 2, bo jeśli myślisz o tym teraz 1510 01:07:29,950 --> 01:07:34,160 logicznie - załóżmy następny rok CS50 zmiany 3 quizy zamiast. 1511 01:07:34,160 --> 01:07:35,510 I miałem numer 2 tutaj. 1512 01:07:35,510 --> 01:07:36,600 Miałem numer 2 tutaj. 1513 01:07:36,600 --> 01:07:37,580 Miałem numer 2 tutaj. 1514 01:07:37,580 --> 01:07:38,560 Miałem numer 2 tutaj. 1515 01:07:38,560 --> 01:07:43,180 To staje się bardzo uciążliwe i bardzo łatwo zepsuć i przypadkowo zmienić 1516 01:07:43,180 --> 01:07:47,690 jedna wartość do 3 i przegapić jakieś inne wartości 2. 1517 01:07:47,690 --> 01:07:52,460 Więc mam zamiar zamiast streszczenie to dalej i wykorzystać tę stałą, że z jego 1518 01:07:52,460 --> 01:07:54,120 nazwa wskazuje, nigdy się nie zmienia. 1519 01:07:54,120 --> 01:07:57,710 A teraz, bez względu na to, czy mamy w tym roku różne quizy lub następnego, I 1520 01:07:57,710 --> 01:08:01,210 tylko zmienić go w jednym miejscu, tu na górze. 1521 01:08:01,210 --> 01:08:02,720 >> Więc to wszystko jest stała. 1522 01:08:02,720 --> 01:08:08,680 Tymczasem nowe pojęciowy cechą jest to, że z układu. 1523 01:08:08,680 --> 01:08:14,660 Więc nawiasy kwadratowe mi to wiele pływaków i pozwala mi zbiorowo 1524 01:08:14,660 --> 01:08:16,630 Nazywamy je gatunki tutaj. 1525 01:08:16,630 --> 01:08:17,990 Więc teraz zobaczmy, co mam zamiar zrobić. 1526 01:08:17,990 --> 01:08:20,359 Tu, w linii 24 jest początkiem pętli for. 1527 01:08:20,359 --> 01:08:22,260 To naprawdę nic szczególnego. 1528 01:08:22,260 --> 01:08:25,060 To jest po prostu za pomocą quizów zamiast liczby zakodowane. 1529 01:08:25,060 --> 01:08:27,790 Ale nie ma nic intelektualnie inaczej tam od zeszłego tygodnia. 1530 01:08:27,790 --> 01:08:29,040 To tylko printf. 1531 01:08:29,040 --> 01:08:35,490 Więc printf ("liczba quizu% dz% d"), bo po prostu chcę wydrukować dać mi quizu 1532 01:08:35,490 --> 01:08:38,050 numer jeden z dwóch i dwóch na dwa. 1533 01:08:38,050 --> 01:08:39,850 Więc to jest czysto estetyczny rzeczą. 1534 01:08:39,850 --> 01:08:42,500 Ale interesujący jest teraz w wierszu 27. 1535 01:08:42,500 --> 01:08:48,310 W celu wypełnienia w jednej z dwóch zastępczych w zmiennoprzecinkowych 1536 01:08:48,310 --> 01:08:51,029 wartość, ponownie użyć nawiasów kwadratowych. 1537 01:08:51,029 --> 01:08:55,620 W tym przypadku, używam i. bo to dla pętli rozpoczął się i wyrównał 1538 01:08:55,620 --> 01:08:57,560 jakie wartości, najwyraźniej? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Tak więc w pierwszym iteracji tej pętli, to jest chociaż 1541 01:09:01,350 --> 01:09:02,689 Napisałem to w kodzie. 1542 01:09:02,689 --> 01:09:05,580 Lecz na drugiej iteracji tej pętli, to jest chociaż 1543 01:09:05,580 --> 01:09:07,750 Napisałem to w moim kodu. 1544 01:09:07,750 --> 01:09:10,750 Ale fakt, że używam zmienną jest doskonały, ponieważ, jak sama nazwa 1545 01:09:10,750 --> 01:09:14,300 sugeruje, to zmieniając jej wartość na każdej iteracji. 1546 01:09:14,300 --> 01:09:17,370 Więc jestem wypełnienie tej tablicy jedno miejsce w czasie. 1547 01:09:17,370 --> 01:09:18,910 Co oznacza ta tablica wygląda? 1548 01:09:18,910 --> 01:09:21,430 Cóż, powód narysowałem to super proste prostokąt na ekranie o 1549 01:09:21,430 --> 01:09:23,350 Zanim było tego powodu. 1550 01:09:23,350 --> 01:09:27,279 Tablica jest tylko fragment pamięci następuje kolejny kawałek pamięci, 1551 01:09:27,279 --> 01:09:30,109 następnie inną ilość pamięci, i tak dalej. 1552 01:09:30,109 --> 01:09:35,260 Więc jeśli moja tablica ma rozmiar 2, w tym przypadku tutaj, wszystko będę robić przez 1553 01:09:35,260 --> 01:09:37,590 wpisując w moich wyników quizu, jak tutaj. 1554 01:09:37,590 --> 01:09:39,430 Mam 100 na ten jeden. 1555 01:09:39,430 --> 01:09:42,020 A potem dostałam 99 na ten jeden. 1556 01:09:42,020 --> 01:09:46,040 Wtedy ta pamięć może nawet nie być stosowane, ponieważ mam tylko pytanie 1557 01:09:46,040 --> 01:09:48,689 Komputer dla tablicy o rozmiarze 2. 1558 01:09:48,689 --> 01:09:50,180 Te kwadraty są nadal. 1559 01:09:50,180 --> 01:09:50,340 Zgadza się? 1560 01:09:50,340 --> 01:09:52,500 Masz jeszcze dwa gigabajty pamięci RAM, nawet jeśli jesteś tylko 1561 01:09:52,500 --> 01:09:53,979 prosząc o dwa pływaki. 1562 01:09:53,979 --> 01:09:58,710 Więc idea tablic jest to, że komputer po prostu ma kawałek pamięci 1563 01:09:58,710 --> 01:10:03,230 a następnie rozdziela mniejsze kawałki z powrotem do tyłu do tyłu do tyłu. 1564 01:10:03,230 --> 01:10:04,740 A więc to wszystko, tablica jest. 1565 01:10:04,740 --> 01:10:09,080 To ciągły fragment pamięci, wewnątrz którego można umieścić rzeczy. 1566 01:10:09,080 --> 01:10:12,400 >> Teraz to się stanie wtedy zrobić tylko trochę nudne arytmetyki. 1567 01:10:12,400 --> 01:10:16,170 Gdybym przewiń tutaj, to jest tam gdzie następnie iteracyjne nad tablicy. 1568 01:10:16,170 --> 01:10:19,410 I pochodzą z sumowania wszystkich wartości w tablicy. 1569 01:10:19,410 --> 01:10:22,390 A następnie użyć funkcja ROUND tu faktycznie 1570 01:10:22,390 --> 01:10:23,940 Podsumowując podzielona przez quizy. 1571 01:10:23,940 --> 01:10:27,450 Ale pozwól mi machać ręką na to jako rodzaj dość arytmetyki do teraz. 1572 01:10:27,450 --> 01:10:30,010 Ale wszystko, co robi dla mnie ostatecznie jest obliczenie średnią. 1573 01:10:30,010 --> 01:10:33,640 Więc najpierw quizu oraz sekunda quiz, podzielić przez 2, a następnie drukowanie 1574 01:10:33,640 --> 01:10:34,700 go jako int. 1575 01:10:34,700 --> 01:10:39,030 >> Ale niech teraz przejście do innego przykładu nazwie string1, 1576 01:10:39,030 --> 01:10:42,370 który maluje podobny obraz, ale ciągi używane. 1577 01:10:42,370 --> 01:10:45,550 Pozwól mi iść dalej i uprościć ten na chwilę. 1578 01:10:45,550 --> 01:10:48,340 I odpuść wcięcie teraz. 1579 01:10:48,340 --> 01:10:52,280 Wskazówka w linii 19 w tym przykładzie, mam ciąg od użytkownika. 1580 01:10:52,280 --> 01:10:55,780 Zauważmy jednak, co mam robić w następnej linii 22 dalej. 1581 01:10:55,780 --> 01:11:00,260 Jestem rzeczywiście Iterowanie od i do - i to jest nowy trick - 1582 01:11:00,260 --> 01:11:02,730 strlen, długość łańcucha. 1583 01:11:02,730 --> 01:11:07,010 Jest to funkcja, która pochodzi z C, że jeśli przekazana ciąg, to mówi 1584 01:11:07,010 --> 01:11:08,950 Ci, ile znaków jest w tym ciągu. 1585 01:11:08,950 --> 01:11:09,440 To wszystko. 1586 01:11:09,440 --> 01:11:12,520 Fakt, że jest to strlen zamiast długości łańcucha to tylko dlatego, że jest 1587 01:11:12,520 --> 01:11:13,040 bardziej zwięzłe. 1588 01:11:13,040 --> 01:11:17,100 30 lat temu, ludzie lubią pisać rzeczy tak zwięźle, jak to możliwe. 1589 01:11:17,100 --> 01:11:19,080 Więc trzymam tę konwencję tutaj. 1590 01:11:19,080 --> 01:11:21,730 i + + po prostu oznacza, inkrementacja i w każdej iteracji. 1591 01:11:21,730 --> 01:11:24,310 A teraz to zauważyć, co jest naprawdę interesujące. 1592 01:11:24,310 --> 01:11:28,730 Tak więc w wierszu 24, mówię komputer, daj mi znak, osiem 1593 01:11:28,730 --> 01:11:30,770 bity, i nazywają to c. 1594 01:11:30,770 --> 01:11:35,370 Ale co to jest to na prawej stronie mówi? 1595 01:11:35,370 --> 01:11:38,150 W języku angielskim, co to przedstawia? 1596 01:11:38,150 --> 01:11:40,070 [Niesłyszalne] 1597 01:11:40,070 --> 01:11:40,490 DAVID J. Malan: Dokładnie. 1598 01:11:40,490 --> 01:11:42,390 Daj mi pierwszy znak w tablicy. 1599 01:11:42,390 --> 01:11:45,400 Lub, bardziej ogólnie, daj mi i-tego znaku w tablicy. 1600 01:11:45,400 --> 01:11:48,230 I uświadomić sobie, że to ważne teraz, że jako naukowcy komputerowych, jesteśmy faktycznie 1601 01:11:48,230 --> 01:11:49,330 licząc od 0. 1602 01:11:49,330 --> 01:11:51,290 Nie masz swobodę teraz zacząć robić. 1603 01:11:51,290 --> 01:11:54,580 Teraz masz się zachowywać zgodnie z oczekiwaniami i komputera 1604 01:11:54,580 --> 01:11:58,010 liczyć od zera, ponieważ [0] będzie pierwszy 1605 01:11:58,010 --> 01:11:59,670 znak w ciągu. 1606 01:11:59,670 --> 01:12:01,320 [1] będzie sekundy. 1607 01:12:01,320 --> 01:12:03,610 [2] będzie trzecie i tak dalej. 1608 01:12:03,610 --> 01:12:08,840 Więc ten program, jeśli go skompilować - to znów, string1. 1609 01:12:08,840 --> 01:12:11,040 >> Tak zrobić string1. 1610 01:12:11,040 --> 01:12:16,730 A teraz biegnę string1 w moim oknie terminala. 1611 01:12:16,730 --> 01:12:19,180 To oczekiwanie na wejście, więc mam zamiar napisać, powiedzmy, Dawida. 1612 01:12:19,180 --> 01:12:20,080 Enter. 1613 01:12:20,080 --> 01:12:23,350 A teraz wypisuje DAVID wszystko na różnych liniach, ponieważ 1614 01:12:23,350 --> 01:12:24,430 zauważyć to, co robię. 1615 01:12:24,430 --> 01:12:27,510 Jestem drukowania jeden znak na raz. 1616 01:12:27,510 --> 01:12:29,100 Teraz nie będziemy wchodzić w szczegóły, dziś na ten temat. 1617 01:12:29,100 --> 01:12:31,610 Ale przed chwilą usunięty tej kontroli tutaj. 1618 01:12:31,610 --> 01:12:36,310 Okazuje się, że jeśli użytkownik zachowuje się niegrzecznie, kontradyktoryjności, lub po prostu 1619 01:12:36,310 --> 01:12:41,780 mylić, rzeczywiście można nie dać ciąg jakiejś długości. 1620 01:12:41,780 --> 01:12:43,640 Jeśli trafisz na niewłaściwy klawisz na klawiaturze, możesz dać 1621 01:12:43,640 --> 01:12:44,390 żaden łańcuch w ogóle. 1622 01:12:44,390 --> 01:12:47,790 Lub jeśli jesteś złośliwy, możesz spróbować wkleić w gigabajt w wartym 1623 01:12:47,790 --> 01:12:49,380 esej wypełnić ten ciąg. 1624 01:12:49,380 --> 01:12:52,060 A jeśli komputer działa z pamięci, okazuje się, że będziemy 1625 01:12:52,060 --> 01:12:54,310 wrócić tę szczególną wartość o nazwie null. 1626 01:12:54,310 --> 01:12:57,550 Więc teraz, po prostu wiem, że istnieje wartość ta nazywana zerowy że 1627 01:12:57,550 --> 01:13:01,000 Pozwoli nam to sprawdzić, kiedy jesteśmy z pamięci, między innymi. 1628 01:13:01,000 --> 01:13:07,330 >> Ale jeśli mogę otworzyć teraz ciąg2, zauważają różnicę. 1629 01:13:07,330 --> 01:13:09,760 Zauważają różnicę tutaj ciąg2. 1630 01:13:09,760 --> 01:13:13,260 Ciąg2, to dla pętli jest trochę inaczej. 1631 01:13:13,260 --> 01:13:16,350 Pozwól usunąć wartości null tak, że możemy mówić o tych, innym razem. 1632 01:13:16,350 --> 01:13:18,460 Ale co innego w pętli for i tym razem? 1633 01:13:21,580 --> 01:13:23,160 A ja mogę wrócić do poprzedniego przykładu. 1634 01:13:23,160 --> 01:13:24,800 Więc to jest wersja dwa. 1635 01:13:24,800 --> 01:13:27,020 To jest jedna wersja. 1636 01:13:27,020 --> 01:13:31,935 Raz, dwa, raz dwa. 1637 01:13:35,030 --> 01:13:38,240 Więc strlen połączenie jest gdzie? 1638 01:13:38,240 --> 01:13:40,420 Jest w pierwszej części pętli for. 1639 01:13:40,420 --> 01:13:43,060 Wszelkie myśli, dlaczego to robię? 1640 01:13:43,060 --> 01:13:43,690 Tak. 1641 01:13:43,690 --> 01:13:46,010 [Niesłyszalne] 1642 01:13:46,010 --> 01:13:47,630 DAVID J. Malan: Więc nie wywołać funkcję za każdym razem. 1643 01:13:47,630 --> 01:13:48,040 Dokładnie. 1644 01:13:48,040 --> 01:13:50,350 Przypomnijmy dla pętli, że są super proste po rodzaju 1645 01:13:50,350 --> 01:13:52,180 Rozumiem, że jest inicjalizacja, 1646 01:13:52,180 --> 01:13:53,330 stan i update. 1647 01:13:53,330 --> 01:13:55,430 Problem jest, że dzieje się na każde warunki 1648 01:13:55,430 --> 01:13:56,600 iteracji pętli. 1649 01:13:56,600 --> 01:13:59,930 A więc w tym przykładzie, co jest złego w tym, 1650 01:13:59,930 --> 01:14:03,500 , że to jest mój stan? 1651 01:14:03,500 --> 01:14:05,920 Dzwonisz strlen znowu i znowu i znowu. 1652 01:14:05,920 --> 01:14:08,990 Ale kiedy już wpisane w David, długość tego ciągu wynosi pięć. 1653 01:14:08,990 --> 01:14:11,560 I to nie zmieni się w każdej iteracji pętli, ponieważ 1654 01:14:11,560 --> 01:14:15,560 ciąg nadal-D-V-I-D. Więc jest to aluzja do tego, co dzieje się 1655 01:14:15,560 --> 01:14:19,650 coraz ważniejsza idea znana jako decyzji projektowych, gdzie - po prostu nie 1656 01:14:19,650 --> 01:14:21,640 że komputer robić niepotrzebnej pracy. 1657 01:14:21,640 --> 01:14:25,630 >> Teraz, tak jak zapowiedzią Pset 2, PSET 2 w standardowej wersji jest 1658 01:14:25,630 --> 01:14:28,850 będzie wyzwanie do rzeczywiście wdrożyć pewną liczbę cyfr, niektóre 1659 01:14:28,850 --> 01:14:32,650 liczba algorytmów szyfrowania, tak aby można zarówno szyfrowania i deszyfrowania 1660 01:14:32,650 --> 01:14:35,530 tajne wiadomości, podobnie jak jeden Ralphie nie dekodowane. 1661 01:14:35,530 --> 01:14:38,720 W edycji hakerów z Pset 2, będziemy iść trochę dalej. 1662 01:14:38,720 --> 01:14:42,010 Zamierzamy przekazać Ci plik z rzeczywistego systemu komputerowego, który zawiera 1663 01:14:42,010 --> 01:14:45,690 cała masa nazw użytkowników i haseł zaszyfrowanych rzeczywistych i wyzwanie 1664 01:14:45,690 --> 01:14:49,110 za wydanie hacker będzie złamać tych haseł i Rysunek 1665 01:14:49,110 --> 01:14:53,060 co kryptograficznej lub co sekret został użyty do rzeczywistości 1666 01:14:53,060 --> 01:14:55,080 wygenerowania tych haseł. 1667 01:14:55,080 --> 01:14:58,360 A my zrobimy to za pomocą nowej funkcji tu C, że dam 1668 01:14:58,360 --> 01:15:02,200 po prostu demo, znany jako argumentów wiersza polecenia. 1669 01:15:02,200 --> 01:15:05,930 >> Okazuje się, jak niektórzy z was mogą zobaczyć w sekcji lub w podręcznikach, 1670 01:15:05,930 --> 01:15:09,850 główny nie zawsze muszą być unieważnione w nawiasach. 1671 01:15:09,850 --> 01:15:14,060 Okazuje się, że głównym można zapisać w ten sposób, z dwoma argumentami, 1672 01:15:14,060 --> 01:15:19,690 argc i argv, gdzie argc jest liczba słów, które po wpisaniu 1673 01:15:19,690 --> 01:15:21,940 nazwa programu na linii poleceń. 1674 01:15:21,940 --> 01:15:24,550 A argv jest rzeczywiste słowa. 1675 01:15:24,550 --> 01:15:29,470 I jak nawiasy kwadratowe tam sugerują, argv jest najwyraźniej tablicą. 1676 01:15:29,470 --> 01:15:33,720 To będzie ciąg po sznurku po sznurku w pamięci. 1677 01:15:33,720 --> 01:15:36,170 Więc co będziemy w stanie zrobić, począwszy Pset 2, jest 1678 01:15:36,170 --> 01:15:37,310 coś takiego. 1679 01:15:37,310 --> 01:15:42,450 Jeśli zrobię argv1, który jest przykładem wrócimy do w poniedziałek, i uruchom 1680 01:15:42,450 --> 01:15:45,180 to należy zauważyć, że nie wydaje się, aby zrobić coś jeszcze. 1681 01:15:45,180 --> 01:15:47,050 To po prostu wypisuje swoją nazwę. 1682 01:15:47,050 --> 01:15:53,220 Ale jeśli powiem klasa goodbye, zauważ, że ten program najwyraźniej przechodzi 1683 01:15:53,220 --> 01:15:57,030 nad każdym z wyrazów, które zostały wpisane w wierszu polecenia. 1684 01:15:57,030 --> 01:16:02,050 I środki, dzięki którym zyskamy dostęp do słów, które użytkownik ma 1685 01:16:02,050 --> 01:16:06,780 wpisane w wierszu polecenia jest zmiana głównego, zaczynając w ten weekend, z int 1686 01:16:06,780 --> 01:16:10,710 main (void) int main (argc, argv). 1687 01:16:10,710 --> 01:16:13,700 I w ten sposób będzie urodzony argumentów wiersza poleceń. 1688 01:16:13,700 --> 01:16:17,210 A kiedy się naprawdę wyrafinowane na to, że będziesz w stanie napisać 1689 01:16:17,210 --> 01:16:21,370 naprawdę trippy programy, takie jak ten tutaj, co wykracza poza 1690 01:16:21,370 --> 01:16:25,520 niektóre funkcjonalności robiliśmy dotychczas, ale wszystkie bardzo silny. 1691 01:16:25,520 --> 01:16:27,330 >> Będziemy więc zostaw to na ekranie. 1692 01:16:27,330 --> 01:16:29,160 I zobaczymy w poniedziałek.