1 00:00:00,000 --> 00:00:00,960 2 00:00:00,960 --> 00:00:03,360 >> [MUZYKA GRY] 3 00:00:03,360 --> 00:00:11,050 4 00:00:11,050 --> 00:00:12,065 >> DAVIN: Dobra, chłopaki. 5 00:00:12,065 --> 00:00:13,642 6 00:00:13,642 --> 00:00:15,350 Jest to więc ocena dla pierwszego quizu. 7 00:00:15,350 --> 00:00:17,751 Czy wszyscy gotowi do Quiz w środę? 8 00:00:17,751 --> 00:00:18,292 ALLISON: Woo! 9 00:00:18,292 --> 00:00:18,743 STUDENT: Woo! 10 00:00:18,743 --> 00:00:19,242 DAVIN: Tak. 11 00:00:19,242 --> 00:00:19,920 ALLISON: Tak! 12 00:00:19,920 --> 00:00:20,920 DAVIN: Ten facet jest gotowy. 13 00:00:20,920 --> 00:00:22,200 Ten facet, dwie ręce, ładne. 14 00:00:22,200 --> 00:00:23,234 15 00:00:23,234 --> 00:00:25,900 Więc ocena Quiz dzisiaj, to będzie na około godzinę i pół. 16 00:00:25,900 --> 00:00:27,940 Mamy zamiar iść na wszystkich głównych koncepcje należy wiedzieć na quiz. 17 00:00:27,940 --> 00:00:31,434 Mamy zamiar przejść przez jakiegoś kodowania przykłady rąk, które są w każdym quizie. 18 00:00:31,434 --> 00:00:34,350 A jeśli masz pytania, nie krępuj podnieść rękę i wszystko, 19 00:00:34,350 --> 00:00:34,945 tak. 20 00:00:34,945 --> 00:00:36,695 Cóż, logistyka ok quiz online. 21 00:00:36,695 --> 00:00:38,450 Więc mamy zamiar podzielić ludzi się w różnych pomieszczeniach. 22 00:00:38,450 --> 00:00:39,491 To na podstawie ich nazwy. 23 00:00:39,491 --> 00:00:43,630 Więc jeśli masz jakiekolwiek pytania dotyczące gdzie iść lub o tym, co jest materialne, jak, 24 00:00:43,630 --> 00:00:46,810 oficjalne słowo na co się dzieje się na quizie, sprawdzić w Internecie. 25 00:00:46,810 --> 00:00:48,420 I to wszystko na bieżąco. 26 00:00:48,420 --> 00:00:51,280 Więc jeśli nie ma żadnych pytań do Przede wszystkim, mamy zamiar rozpocząć. 27 00:00:51,280 --> 00:00:52,790 28 00:00:52,790 --> 00:00:53,710 A tu Allison. 29 00:00:53,710 --> 00:00:56,060 30 00:00:56,060 --> 00:00:57,000 >> [Klaszcze] 31 00:00:57,000 --> 00:00:59,300 >> ALLISON: OK, dzięki, Rob. 32 00:00:59,300 --> 00:01:00,280 Doceniam to. 33 00:01:00,280 --> 00:01:01,350 34 00:01:01,350 --> 00:01:03,050 Davin powinien odwrócenie tego. 35 00:01:03,050 --> 00:01:07,240 Jest to niewyczerpujący wykaz tematy, jak zawsze, jak Davina właśnie powiedział. 36 00:01:07,240 --> 00:01:10,860 Zapoznaj się z dokumentacją w Internecie na temat quizu zera. 37 00:01:10,860 --> 00:01:13,680 Ale to jest całkiem much-- to w programie nauczania 38 00:01:13,680 --> 00:01:15,550 to wszystko, co już przeszedł do tej pory. 39 00:01:15,550 --> 00:01:18,290 Wszystko tutaj jest uczciwa gra, jak nic innego 40 00:01:18,290 --> 00:01:21,380 które mogą być wymienione w wykładzie. 41 00:01:21,380 --> 00:01:25,070 >> Moja sekcja, tu jest po prostu dużo recenzji. 42 00:01:25,070 --> 00:01:27,775 Istnieje kilka ćwiczeń że chłopaki mogą pracować. 43 00:01:27,775 --> 00:01:30,650 Jednak dla większości rzeczywiście Aby dostać się do Davina z tych kodzie 44 00:01:30,650 --> 00:01:31,710 ćwiczenia ręki. 45 00:01:31,710 --> 00:01:33,940 >> Więc mam zamiar latać tym. 46 00:01:33,940 --> 00:01:36,330 Jeśli masz jakiekolwiek pytania, zatrzymać mnie. 47 00:01:36,330 --> 00:01:37,270 Podnieś rękę. 48 00:01:37,270 --> 00:01:39,250 Obiecuję, że prawdopodobnie do zobaczenia. 49 00:01:39,250 --> 00:01:41,042 Jeśli nie, to po prostu fala wokół. 50 00:01:41,042 --> 00:01:42,250 Mam zamiar być szybko mówić. 51 00:01:42,250 --> 00:01:43,950 Mam nadzieję, że każdy jest w porządku z tym. 52 00:01:43,950 --> 00:01:48,020 >> OK, specjalne słowo, Davin oczywiście Zapomniałem przerzucać tych slajdów. 53 00:01:48,020 --> 00:01:51,880 [Śmiech] Jesteś w kłopoty, człowieku. 54 00:01:51,880 --> 00:01:55,770 Więc wskazówki dotyczące quizu zerowej, praktyki kodowania na papierze. 55 00:01:55,770 --> 00:01:58,950 Chłopaki będą się niektóre ćwiczyć z tym teraz z Davina, 56 00:01:58,950 --> 00:02:00,655 więc nie będzie całkowicie samodzielnie. 57 00:02:00,655 --> 00:02:03,030 Myślę, że rzeczywiście będzie przez te dwie funkcje. 58 00:02:03,030 --> 00:02:04,500 Więc będziesz dobrze przygotowany tam. 59 00:02:04,500 --> 00:02:05,958 >> Znać swoich zbiorów problemowych. 60 00:02:05,958 --> 00:02:08,150 Nie było pytania na poprzednich quizach 61 00:02:08,150 --> 00:02:12,680 że cię zapytać, na przykład, do kodu się coś bardzo podobnego do Mario. 62 00:02:12,680 --> 00:02:15,060 Więc jest bardzo dobrze zna Twój problem określa, jak dobrze 63 00:02:15,060 --> 00:02:17,827 jako pytań prosimy na początku, w postaci 64 00:02:17,827 --> 00:02:19,660 że wypełnisz, będzie służyć Ci bardzo dobrze. 65 00:02:19,660 --> 00:02:20,940 66 00:02:20,940 --> 00:02:23,380 >> Czy poprzedni quiz, pod ograniczenia czasowe. 67 00:02:23,380 --> 00:02:25,430 Te testy są długie. 68 00:02:25,430 --> 00:02:26,850 Czas płynie bardzo szybko. 69 00:02:26,850 --> 00:02:30,480 I często nie zdają sobie sprawy, jak szybko to idzie aż faktycznie 70 00:02:30,480 --> 00:02:32,180 postawić się w tych ograniczeniach. 71 00:02:32,180 --> 00:02:36,500 Więc jeśli można po prostu wykroić, wiesz, 75 minuta, albo dzisiaj albo jutro 72 00:02:36,500 --> 00:02:41,020 wziąć jedną z tych quizów pod że będzie w znacznie lepszej kondycji. 73 00:02:41,020 --> 00:02:43,060 >> A także, tworząc arkusz odniesienia. 74 00:02:43,060 --> 00:02:45,290 Pamiętaj, masz jedno strona przednia i tylna 75 00:02:45,290 --> 00:02:47,040 jako odniesienie dla quiz w środę. 76 00:02:47,040 --> 00:02:49,074 Tworzenie, że jest to świetny sposób, aby studiować. 77 00:02:49,074 --> 00:02:51,990 Wszystko, co masz problemy ze chcesz to tam. 78 00:02:51,990 --> 00:02:55,627 Wszystko, co było twoje TF, podobnych, jest bardzo ważne. 79 00:02:55,627 --> 00:02:57,960 Powinieneś wiedzieć, to są Może rzeczy masz na nie 80 00:02:57,960 --> 00:02:59,931 jeśli nie ma ich na pamięć. 81 00:02:59,931 --> 00:03:02,680 Nawet jeśli wiem, naprawdę je dobrze, czasem nie mając go na 82 00:03:02,680 --> 00:03:07,030 tylko rodzaj komfortu dla Ciebie, Wiem, quizy, które są stresujące. 83 00:03:07,030 --> 00:03:09,260 Więc każdy komfort masz może pomóc. 84 00:03:09,260 --> 00:03:13,072 Wszystko w porządku, również się spać i jeść i jak normalne rzeczy 85 00:03:13,072 --> 00:03:14,280 możemy powiedzieć, że dla quizów. 86 00:03:14,280 --> 00:03:16,320 87 00:03:16,320 --> 00:03:18,890 >> Tak więc począwszy od łatwe, Typy danych i rozmiary. 88 00:03:18,890 --> 00:03:22,720 Jak powiedziałem, jest to po prostu będzie do mnie rzucając wiele rzeczy 89 00:03:22,720 --> 00:03:24,320 tutaj, że powinieneś wiedzieć. 90 00:03:24,320 --> 00:03:27,600 Mamy więc nasze znaki że to jeden bajty, ints 91 00:03:27,600 --> 00:03:30,390 że są cztery bajty, długi długie, co osiem bajtów. 92 00:03:30,390 --> 00:03:33,280 W zasadzie, to tylko ty chcą posiadać większe liczby całkowite. 93 00:03:33,280 --> 00:03:35,490 Pływaki, które są cztery, dwuosobowe, które są osiem. 94 00:03:35,490 --> 00:03:38,150 Ponownie, po prostu daje więcej miejsca dla pływaków. 95 00:03:38,150 --> 00:03:41,290 A następnie wpisz gwiazdkę, więc każdy wskaźnik na komputerze 32-bitowym, 96 00:03:41,290 --> 00:03:44,650 co jest potrzebne wszystkie chłopaki wiedzieć, jest cztery bajty. 97 00:03:44,650 --> 00:03:46,542 >> Więc wszystkie rzeczy, które powinny wiem, może rzeczy 98 00:03:46,542 --> 00:03:48,250 chcesz mieć na Twój arkusz odniesienia. 99 00:03:48,250 --> 00:03:50,350 100 00:03:50,350 --> 00:03:53,520 OK, konwersja binarnej do konwersji binarnych, 101 00:03:53,520 --> 00:03:56,860 na szesnastkowy, tam iz powrotem, wszystkie rzeczy, które powinieneś wiedzieć. 102 00:03:56,860 --> 00:03:59,480 Więc z binarnego na dziesiętny. 103 00:03:59,480 --> 00:04:03,309 Chcecie wziąć szybki minut i spróbować dowiedzieć się, każdy z nich 104 00:04:03,309 --> 00:04:04,600 i powiedz mi, co oni są? 105 00:04:04,600 --> 00:04:06,500 106 00:04:06,500 --> 00:04:10,240 >> Mam też słodycze w mojej torbie, więc każdy który odpowiada dostaje słodycze, przy okazji. 107 00:04:10,240 --> 00:04:13,560 108 00:04:13,560 --> 00:04:14,480 I mam dużo. 109 00:04:14,480 --> 00:04:15,760 110 00:04:15,760 --> 00:04:16,870 Pozwól mi złapać tego. 111 00:04:16,870 --> 00:04:18,480 Mam zamiar dać to Gabe. 112 00:04:18,480 --> 00:04:21,829 Więc można rozdawać cukierki kto jest miły i spółdzielni. 113 00:04:21,829 --> 00:04:23,490 >> OK, widziałem tam w rękę z tyłu. 114 00:04:23,490 --> 00:04:26,418 115 00:04:26,418 --> 00:04:28,370 >> UCZEŃ: Tak, pierwszy z nich jest 42. 116 00:04:28,370 --> 00:04:30,280 >> ALLISON: Tak, pierwszy z nich jest 42, poprawne. 117 00:04:30,280 --> 00:04:31,163 118 00:04:31,163 --> 00:04:32,038 STUDENT: [niesłyszalne]. 119 00:04:32,038 --> 00:04:34,810 [Śmiech] 120 00:04:34,810 --> 00:04:37,030 ALLISON: Druga, tam z powrotem na żółto? 121 00:04:37,030 --> 00:04:38,910 STUDENT: 110,01 tysięcy. 122 00:04:38,910 --> 00:04:43,410 ALLISON: Zgadza się, i to ostatni, tu na dole? 123 00:04:43,410 --> 00:04:44,570 Ponadto, tak, wiesz, chcesz? 124 00:04:44,570 --> 00:04:45,550 Wystarczy wrzucić na słodycze. 125 00:04:45,550 --> 00:04:46,483 Jak o słodycze dla wszystkich? 126 00:04:46,483 --> 00:04:47,510 >> STUDENT: [niesłyszalne], kiedy skończysz. 127 00:04:47,510 --> 00:04:48,051 >> ALLISON: Ciii. 128 00:04:48,051 --> 00:04:49,380 129 00:04:49,380 --> 00:04:50,910 I wtedy ostatni. 130 00:04:50,910 --> 00:04:52,000 Kto chce odpowiedzieć? 131 00:04:52,000 --> 00:04:52,744 Właśnie tam. 132 00:04:52,744 --> 00:04:54,480 >> STUDENT: 11100. 133 00:04:54,480 --> 00:04:56,820 >> ALLISON: 11100, spójrz na to. 134 00:04:56,820 --> 00:04:58,790 Gratulacje, świetna robota, wszyscy. 135 00:04:58,790 --> 00:05:03,370 OK, rozumiem, każdy rodzaj Proces ten sposób? 136 00:05:03,370 --> 00:05:08,700 Ty, idąc z binarnego na dziesiętny sposób staram się to zrobić, pisze się 137 00:05:08,700 --> 00:05:09,920 uprawnienia 2. 138 00:05:09,920 --> 00:05:18,350 Więc mówię, OK, 0 razy w 2 do 0, więc to 0, 1 razy 2 do pierwszej, 139 00:05:18,350 --> 00:05:21,400 jest 2 będzie dalej w ten sposób. 140 00:05:21,400 --> 00:05:25,790 Czy ktoś chce mi się wyraźnie przejść przez przykład binarny? 141 00:05:25,790 --> 00:05:26,840 142 00:05:26,840 --> 00:05:28,140 OK, fajnie. 143 00:05:28,140 --> 00:05:30,390 >> Dziesiętnego na binarny jest bardzo podobny. 144 00:05:30,390 --> 00:05:31,550 145 00:05:31,550 --> 00:05:33,630 Staram się pisać uprawnień 2. 146 00:05:33,630 --> 00:05:38,660 Zacznij od tego, który jest największym, ale nie przejść obok po przecinku 147 00:05:38,660 --> 00:05:39,710 że szukasz. 148 00:05:39,710 --> 00:05:42,870 A następnie rodzaj pracy na swój sposób wstecz dodanie rzeczy, jak to konieczne. 149 00:05:42,870 --> 00:05:45,200 >> A potem, z dodatkiem, że to Ponadto, tak jak normalny. 150 00:05:45,200 --> 00:05:51,110 Jeśli kiedykolwiek sprawę, gdzie jesteś dodanie dwóch 1s, to oczywiście staje się dwa. 151 00:05:51,110 --> 00:05:56,875 2 w formacie binarnym jest teraz 1 0 więc trzeba nosić jeden do następnej kolumny. 152 00:05:56,875 --> 00:05:57,375 Fajne. 153 00:05:57,375 --> 00:05:59,220 154 00:05:59,220 --> 00:06:03,240 >> Szesnastkowy, to może być coś że jest nieco mniej znane. 155 00:06:03,240 --> 00:06:06,600 Tak jak Rob mówi mi właśnie wcześniej, za to jego sztuczka 156 00:06:06,600 --> 00:06:10,210 jest po prostu podzielić go na cztery kawałki bajtowych, OK? 157 00:06:10,210 --> 00:06:11,050 Bity, przepraszam. 158 00:06:11,050 --> 00:06:11,720 Patrz? 159 00:06:11,720 --> 00:06:12,220 Dzięki Rob. 160 00:06:12,220 --> 00:06:15,874 To dlatego, że tu jesteś. [NOISE] OK, więc po prostu złamać go 161 00:06:15,874 --> 00:06:16,790 na cztery bity kawałki. 162 00:06:16,790 --> 00:06:21,570 Więc z plików binarnych do postaci szesnastkowej, patrzymy na pierwsze 4, 163 00:06:21,570 --> 00:06:25,573 który jest, jeśli mamy w czterech 1s wiersz, jaki numer ma to symbolizować? 164 00:06:25,573 --> 00:06:26,540 >> STUDENT: F. 165 00:06:26,540 --> 00:06:32,751 >> ALLISON: Więc w tym przypadku, co jest 11111111 or-- tak? 166 00:06:32,751 --> 00:06:33,250 STUDENT: FF. 167 00:06:33,250 --> 00:06:34,600 ALLISON: Perfect, FF. 168 00:06:34,600 --> 00:06:36,900 Tak wielka, słodycze dla ciebie. 169 00:06:36,900 --> 00:06:41,100 Teraz, jak szesnastkowy na binarny, my pomyśl o tym rodzaju w odwrotnej kolejności. 170 00:06:41,100 --> 00:06:46,420 Dla każdej liczby lub litery tym mamy w naszym systemie szesnastkowym, 171 00:06:46,420 --> 00:06:53,930 po prostu przekonwertować go do czterech bit [Śmiech], aby jego cztery bitowej konwersji. 172 00:06:53,930 --> 00:06:58,696 Tak więc 5, w tym przypadku, co jest 5 czy jesteśmy reprezentujący go czterech bitów? 173 00:06:58,696 --> 00:06:59,608 >> STUDENT: 010? 174 00:06:59,608 --> 00:07:00,520 Mm-hm. 175 00:07:00,520 --> 00:07:03,605 A następnie, co jest faktycznie 10, będzie? 176 00:07:03,605 --> 00:07:06,230 177 00:07:06,230 --> 00:07:08,040 1010. 178 00:07:08,040 --> 00:07:09,670 Mamy więc, że tutaj. 179 00:07:09,670 --> 00:07:13,990 Więc konwersji między szesnastkowym i binarny rzeczywiście nie jest tak źle. 180 00:07:13,990 --> 00:07:16,565 Jeśli spojrzeć na to w czterech bit kawałki, będzie złoty. 181 00:07:16,565 --> 00:07:18,330 182 00:07:18,330 --> 00:07:19,300 Everyone-- tak? 183 00:07:19,300 --> 00:07:21,903 >> ROB: To jest głupie, ale ja zawsze pamiętać 184 00:07:21,903 --> 00:07:23,500 , Ponieważ miało być 10. 185 00:07:23,500 --> 00:07:26,230 I binarne tylko 10 10, SO- 186 00:07:26,230 --> 00:07:27,310 >> ALLISON: Ach, nie idziemy. 187 00:07:27,310 --> 00:07:28,615 >> ROB: Hej. 188 00:07:28,615 --> 00:07:30,020 >> ALLISON: Hej, słodycze dla Roba. 189 00:07:30,020 --> 00:07:31,707 190 00:07:31,707 --> 00:07:33,290 Nie ma rzeczy nie czekolada tam. 191 00:07:33,290 --> 00:07:34,180 Więc można mieć pewne. 192 00:07:34,180 --> 00:07:35,790 193 00:07:35,790 --> 00:07:36,760 Więc ASCII matematyki. 194 00:07:36,760 --> 00:07:38,206 195 00:07:38,206 --> 00:07:38,705 Zachowywać. 196 00:07:38,705 --> 00:07:40,630 197 00:07:40,630 --> 00:07:44,720 Tak więc matematyka, jak ASCII wy chyba dobrze pamiętam 198 00:07:44,720 --> 00:07:48,480 p set 2 z Visioneer i Cezar, to dużo to zrobił. 199 00:07:48,480 --> 00:07:49,610 200 00:07:49,610 --> 00:07:51,980 Pamiętaj, że znaki są tu podstawowe tylko liczby. 201 00:07:51,980 --> 00:07:54,780 Więc co możemy zrobić z nimi matematyki, tak jak robimy matematyki z int. 202 00:07:54,780 --> 00:07:58,090 >> Mamy więc tylko trochę proste rzeczy tutaj. 203 00:07:58,090 --> 00:08:00,940 Mamy jedne w to inicjowany do 65. 204 00:08:00,940 --> 00:08:07,440 I B równa wartości ASCII A plus 1, char C równa D minus 1, 205 00:08:07,440 --> 00:08:09,060 i znak D równy 68. 206 00:08:09,060 --> 00:08:13,130 Więc idziemy do druku wszystkie z nich, jak widzimy tutaj. 207 00:08:13,130 --> 00:08:15,650 A może ktoś mi powiedzieć, co to będzie drukować? 208 00:08:15,650 --> 00:08:17,335 209 00:08:17,335 --> 00:08:18,210 STUDENT: [niesłyszalne]. 210 00:08:18,210 --> 00:08:20,540 ALLISON: Dokładnie tak jedną sprawą jest 211 00:08:20,540 --> 00:08:22,900 że mamy do drukowania znaków za każdym razem, tutaj. 212 00:08:22,900 --> 00:08:28,290 Jesteśmy wyznaczenie chociaż A i B są ints kiedy ogłosił je powyżej. 213 00:08:28,290 --> 00:08:32,870 Jesteśmy drukowanie ich jako znaków przez procent C i nasze oświadczenie printf, 214 00:08:32,870 --> 00:08:34,610 więc będą wszystkie wydrukować jako znaki. 215 00:08:34,610 --> 00:08:40,730 I oczywiście, będzie wartość ASCII 65 wydrukować jako A. ASCII A plus 1 216 00:08:40,730 --> 00:08:43,669 będzie 66, który dumą B. Tak więc w rzeczywistości, 217 00:08:43,669 --> 00:08:49,107 tam dostać B C D. Każdy dobry? 218 00:08:49,107 --> 00:08:49,690 Jakieś pytania? 219 00:08:49,690 --> 00:08:50,721 220 00:08:50,721 --> 00:08:51,220 Niesamowite. 221 00:08:51,220 --> 00:08:52,500 222 00:08:52,500 --> 00:08:53,455 >> OK, zakres. 223 00:08:53,455 --> 00:08:55,090 224 00:08:55,090 --> 00:08:59,950 Tak więc zakres jest oczywiście bardzo Ważne jest, aby zrozumieć, tutaj. 225 00:08:59,950 --> 00:09:03,250 Wielu z was, jeśli was mają błędy kompilacji, 226 00:09:03,250 --> 00:09:06,085 i mówi, że nie ma dostęp do jakiejś zmiennej, 227 00:09:06,085 --> 00:09:08,540 to pewnie dlatego, że ciebie definiuje go w pętli 228 00:09:08,540 --> 00:09:12,210 a następnie próbował do niego dostęp z niego, lub na odwrót. 229 00:09:12,210 --> 00:09:16,410 >> Tak więc zakres w swej istocie, określa, gdzie to tylko 230 00:09:16,410 --> 00:09:20,800 mówimy zmienna istnieje, gdzie Można to zmienić, gdzie można uzyskać do niego dostęp. 231 00:09:20,800 --> 00:09:24,550 To tylko rodzaj mówiąc są to jedyne miejsca, gdzie mają dostęp 232 00:09:24,550 --> 00:09:26,060 do tej zmiennej. 233 00:09:26,060 --> 00:09:30,080 >> Tak więc te dwa zakresy, które mówią o podczas zajęć są globalne i lokalne. 234 00:09:30,080 --> 00:09:35,080 Zmienne, więc możemy mówić o globalnym podczas definiowania ich ponad głównym. 235 00:09:35,080 --> 00:09:38,390 Oznacza to, że cały Program ma do niej dostęp, 236 00:09:38,390 --> 00:09:42,090 i istnieje on tak długo jak przebiegów programu, OK? 237 00:09:42,090 --> 00:09:45,100 Lokalna oznacza, że ​​jest to bardziej ograniczone do regionu. 238 00:09:45,100 --> 00:09:50,520 Więc gdy masz konkretne funkcje jak swap, zawsze porozmawiać. 239 00:09:50,520 --> 00:09:54,380 Zawsze mówimy o zamianie z A i B. A i B istnieją w tej funkcji. 240 00:09:54,380 --> 00:09:55,690 Nie istnieją nigdzie indziej. 241 00:09:55,690 --> 00:09:56,860 242 00:09:56,860 --> 00:10:00,610 >> Jak dobrze, gdy masz, jeśli oświadczenia lub pętli. 243 00:10:00,610 --> 00:10:04,670 Ilekroć mamy, na przykład, w pętli mamy int I jest równa 0. 244 00:10:04,670 --> 00:10:06,630 Mamy pewne warunki, a my go zaktualizować. 245 00:10:06,630 --> 00:10:10,270 I istnieje tylko w szelki tej pętli. 246 00:10:10,270 --> 00:10:13,270 Jeśli próbujesz do niego dostęp w innym miejscu, kompilator będzie krzyczeć na ciebie. 247 00:10:13,270 --> 00:10:14,560 To byłoby jak, co chcesz zrobić? 248 00:10:14,560 --> 00:10:15,400 Nie istnieje. 249 00:10:15,400 --> 00:10:16,644 250 00:10:16,644 --> 00:10:18,435 Więc to dwa Różne typy zakresu. 251 00:10:18,435 --> 00:10:19,486 252 00:10:19,486 --> 00:10:20,860 Czy to ma sens dla każdego? 253 00:10:20,860 --> 00:10:23,870 254 00:10:23,870 --> 00:10:27,890 >> Tak na przykład tutaj, w tym to tylko niektóre prosty program. 255 00:10:27,890 --> 00:10:29,120 256 00:10:29,120 --> 00:10:32,890 Co myślicie jest wydarzy się w każdym punkcie 257 00:10:32,890 --> 00:10:34,210 że staramy się drukować? 258 00:10:34,210 --> 00:10:40,150 Więc ten jeden tutaj, co się stało? 259 00:10:40,150 --> 00:10:43,047 260 00:10:43,047 --> 00:10:44,255 STUDENT: Będzie wydrukować trzy. 261 00:10:44,255 --> 00:10:44,880 ALLISON: Prawo. 262 00:10:44,880 --> 00:10:45,930 To będzie drukować trzy. 263 00:10:45,930 --> 00:10:47,272 Co tutaj? 264 00:10:47,272 --> 00:10:48,230 Student: To nie będzie działać. 265 00:10:48,230 --> 00:10:48,910 ALLISON: To nie będzie działać. 266 00:10:48,910 --> 00:10:50,290 Jesteś poza zakresem, prawda? 267 00:10:50,290 --> 00:10:55,160 Zmienna lokalna nie istnieje poza tymi szelkami, wszystko w porządku? 268 00:10:55,160 --> 00:10:56,462 A potem co się tutaj? 269 00:10:56,462 --> 00:10:57,850 >> STUDENT: [niesłyszalne]. 270 00:10:57,850 --> 00:10:59,210 >> ALLISON: Co? 271 00:10:59,210 --> 00:10:59,900 Rob, idź. 272 00:10:59,900 --> 00:11:00,854 >> ROB: Właśnie powiedział. 273 00:11:00,854 --> 00:11:04,200 Zmienne globalne powinny być zmienna globalna podkreślenia. 274 00:11:04,200 --> 00:11:05,660 >> ALLISON: Ach, tak, przepraszam. 275 00:11:05,660 --> 00:11:06,200 Dzięki, Rob. 276 00:11:06,200 --> 00:11:07,480 277 00:11:07,480 --> 00:11:10,170 Rob jak nasz kompilator rezydenta. 278 00:11:10,170 --> 00:11:12,684 On po prostu krzyczeć na nas, kiedy potrzebujesz. [Śmiech] Tak, że 279 00:11:12,684 --> 00:11:14,225 powinna być zmienna podkreślenia globalnego. 280 00:11:14,225 --> 00:11:15,760 281 00:11:15,760 --> 00:11:18,430 Tak więc zakładając, że był globalny podkreślenia 282 00:11:18,430 --> 00:11:20,260 zmienna, co się będzie działo? 283 00:11:20,260 --> 00:11:21,260 Student: To będzie działać. 284 00:11:21,260 --> 00:11:22,093 ALLISON: To będzie działać. 285 00:11:22,093 --> 00:11:24,655 Więc to wydrukować, więc po prostu bardzo prosty przykład. 286 00:11:24,655 --> 00:11:27,650 287 00:11:27,650 --> 00:11:29,870 OK, prototypy. 288 00:11:29,870 --> 00:11:33,680 Tak oczywiście, naprawdę podkreślają, dla was 289 00:11:33,680 --> 00:11:36,460 do funkcji, jeśli sensu w swoich programach. 290 00:11:36,460 --> 00:11:38,460 Ale oczywiście, kiedy tworzyć własne funkcje, 291 00:11:38,460 --> 00:11:40,930 zwykle będziesz je zdefiniować po głównym. 292 00:11:40,930 --> 00:11:42,430 A ty spróbuj zadzwonić do nich w głównym. 293 00:11:42,430 --> 00:11:46,030 A jeśli nie używasz prototyp, kompilator będzie krzyczeć na ciebie. 294 00:11:46,030 --> 00:11:49,590 >> Prototyp jest w zasadzie tylko mówi kompilatorowi 295 00:11:49,590 --> 00:11:52,400 że mam tej funkcji poniżej głównego. 296 00:11:52,400 --> 00:11:54,970 Mam zamiar nazwać zanim zdefiniować. 297 00:11:54,970 --> 00:11:56,360 Trzymaj się. 298 00:11:56,360 --> 00:12:00,660 Obiecuję, że nie jest to określone, a będzie miał wszystko, czego potrzebujesz. 299 00:12:00,660 --> 00:12:05,900 >> Więc sposób to robimy to tylko twój powrót rodzaj, nazwę funkcji, twój wkład 300 00:12:05,900 --> 00:12:06,400 lista. 301 00:12:06,400 --> 00:12:09,760 Jest to w zasadzie pierwsza linia swojej deklaracji funkcji. 302 00:12:09,760 --> 00:12:11,510 To naprawdę wszystko jest. 303 00:12:11,510 --> 00:12:14,440 Ale to tylko Generalnie rodzaj formatu. 304 00:12:14,440 --> 00:12:17,220 >> Tak więc w naszym przykładzie tutaj, które faceci powinni 305 00:12:17,220 --> 00:12:19,700 widziałem w sekcji w pewnym momencie, mamy 306 00:12:19,700 --> 00:12:23,220 Sześcian, że niektóre int zajmuje trochę int wejścia. 307 00:12:23,220 --> 00:12:25,870 I mamy nasze główne Funkcja, która zwraca sześcianu. 308 00:12:25,870 --> 00:12:28,670 A kostka jest określona po fakcie. 309 00:12:28,670 --> 00:12:34,450 >> Więc jeśli nie mamy wejście int kostki w górę, gdy kostka nazywane 310 00:12:34,450 --> 00:12:36,620 ciągu głównym naszego kompilatora nie gniewaj się na nas. 311 00:12:36,620 --> 00:12:38,890 To byłoby jak, co ty mówisz? 312 00:12:38,890 --> 00:12:40,360 Cube nie istnieje. 313 00:12:40,360 --> 00:12:41,910 Nie wiem, co się prosi. 314 00:12:41,910 --> 00:12:43,490 A ja po prostu się zatrzymać. 315 00:12:43,490 --> 00:12:47,330 >> Ale dlatego, że nie nasz prototyp na górze, już powiedzieliśmy, 316 00:12:47,330 --> 00:12:49,800 wiesz, kiedy widzisz kostka, nie martw się o to. 317 00:12:49,800 --> 00:12:51,990 Obiecuję, że nie jest to zdefiniowane później. 318 00:12:51,990 --> 00:12:53,750 I będzie to pozwala robić to, co chcesz. 319 00:12:53,750 --> 00:12:57,750 Więc jeśli kiedykolwiek mieć funkcję oświadczył, że jest po to nazwać 320 00:12:57,750 --> 00:13:00,570 po raz pierwszy, musisz mają to prototypy na górze. 321 00:13:00,570 --> 00:13:01,640 322 00:13:01,640 --> 00:13:02,720 >> Tak? 323 00:13:02,720 --> 00:13:04,412 >> ROB: To do kwadratu, a nie organizowania kostek. 324 00:13:04,412 --> 00:13:05,855 >> ALLISON: O mój Boże. 325 00:13:05,855 --> 00:13:09,435 Nie have-- Gabe'a, myślałem, byłeś naszym korektor. 326 00:13:09,435 --> 00:13:10,740 327 00:13:10,740 --> 00:13:12,760 OK chłopaki, pokrywa się ze mną, tutaj. 328 00:13:12,760 --> 00:13:14,440 Mam nadzieję, że wszyscy się pomysł. 329 00:13:14,440 --> 00:13:15,560 330 00:13:15,560 --> 00:13:20,380 OK, więc to powinno mieć był wyrównany, nie pokrojone w kostkę. 331 00:13:20,380 --> 00:13:22,700 Ale idea pozostaje taka sama. 332 00:13:22,700 --> 00:13:23,702 333 00:13:23,702 --> 00:13:26,660 Każda funkcja, że ​​dzwonisz po Fakt ten powinien mieć prototyp. 334 00:13:26,660 --> 00:13:27,730 335 00:13:27,730 --> 00:13:28,970 Wszyscy dobrze się z tym? 336 00:13:28,970 --> 00:13:30,730 337 00:13:30,730 --> 00:13:32,310 Wszelkie inne literówki? 338 00:13:32,310 --> 00:13:32,810 OK. 339 00:13:32,810 --> 00:13:34,730 340 00:13:34,730 --> 00:13:36,230 Tutaj jakieś literówki, zanim zaczniemy, Rob? 341 00:13:36,230 --> 00:13:37,356 342 00:13:37,356 --> 00:13:42,380 [Śmiech] OK, więc strukturach. 343 00:13:42,380 --> 00:13:45,040 Zasadniczo structury pozwalają utworzyć własny typ danych. 344 00:13:45,040 --> 00:13:49,264 Tak więc podobnie jak int lub char lub pływak, to tylko inny rodzaj. 345 00:13:49,264 --> 00:13:51,680 Lubię myśleć o tym, jak, jak, stworzyć własny typ danych. 346 00:13:51,680 --> 00:13:53,740 Więc pozwala Ci zrobić. 347 00:13:53,740 --> 00:13:56,160 I posiada różne typy danych. 348 00:13:56,160 --> 00:14:01,030 >> Więc jeśli pamiętamy, w tablicy, możemy może posiadać tylko rzeczy podobnego typu. 349 00:14:01,030 --> 00:14:04,660 Structury pozwalają nam trzymać wielokrotnego rzeczy z różnych typów. 350 00:14:04,660 --> 00:14:08,944 Tak więc w tym przypadku tutaj, my mają struct nazwie Student, 351 00:14:08,944 --> 00:14:10,650 nazwany tu na dole. 352 00:14:10,650 --> 00:14:13,540 I mamy trochę id int a niektóre ciągi. 353 00:14:13,540 --> 00:14:14,620 354 00:14:14,620 --> 00:14:17,300 Więc to jest po prostu inny typ danych. 355 00:14:17,300 --> 00:14:18,950 Mamy teraz typ danych o nazwie Student. 356 00:14:18,950 --> 00:14:20,330 357 00:14:20,330 --> 00:14:24,750 >> Tak więc, ponieważ możemy myśleć to jako kolejny typ danych, 358 00:14:24,750 --> 00:14:27,760 możemy deklarować zmienne jak każdy inny. 359 00:14:27,760 --> 00:14:32,680 Więc zamiast tylko o, jak, int student, musimy po prostu student, 360 00:14:32,680 --> 00:14:33,390 Student 1. 361 00:14:33,390 --> 00:14:33,560 Och, spójrz. 362 00:14:33,560 --> 00:14:34,059 To Rob. 363 00:14:34,059 --> 00:14:35,750 364 00:14:35,750 --> 00:14:38,880 Więc tutaj mamy deklarując struktura, lub zmienna 365 00:14:38,880 --> 00:14:40,940 nazywa uczeń 1 typu studenta. 366 00:14:40,940 --> 00:14:45,370 Więc to będzie miał identyfikator a nazwa wiąże się z nim. 367 00:14:45,370 --> 00:14:48,430 >> I sposób uzyskać do nich dostęp elementy w naszej struct 368 00:14:48,430 --> 00:14:50,100 jest z operatorem kropka, tutaj. 369 00:14:50,100 --> 00:14:51,910 370 00:14:51,910 --> 00:14:54,660 Tak więc w tym przypadku oświadczył pewnego studenta 1. 371 00:14:54,660 --> 00:14:57,080 Mamy przypisany identyfikator być jeden. 372 00:14:57,080 --> 00:14:58,840 A my przypisać nazwę się Rob. 373 00:14:58,840 --> 00:15:03,010 374 00:15:03,010 --> 00:15:04,960 OK, wszyscy dobrze się z tym? 375 00:15:04,960 --> 00:15:06,787 Użyj po prostu like-- tak? 376 00:15:06,787 --> 00:15:09,530 >> UCZEŃ: Tak, typedef-- kiedy musimy użyć typedef? 377 00:15:09,530 --> 00:15:13,190 >> ALLISON: Więc po prostu typedef mówi that-- Rob, ty 378 00:15:13,190 --> 00:15:16,990 może mnie poprawić, jeśli się na to, że jestem wrong-- ale w rzeczywistości jest po prostu typedef deklarując 379 00:15:16,990 --> 00:15:19,330 to jako typ, który można wykorzystać, prawda? 380 00:15:19,330 --> 00:15:22,550 >> ROB: Tak, to jest w zasadzie, tak, to jest po prostu tworzenie 381 00:15:22,550 --> 00:15:24,215 alias lub pseudonim dla typu. 382 00:15:24,215 --> 00:15:25,590 Więc można wpisać, że [niesłyszalne]. 383 00:15:25,590 --> 00:15:27,140 384 00:15:27,140 --> 00:15:30,350 Więc [niesłyszalne] istnieje, i teraz musimy tylko 385 00:15:30,350 --> 00:15:32,090 [Niesłyszalne] środki dokładnie to samo. 386 00:15:32,090 --> 00:15:37,210 I tak oto, mamy wpisane, jak sądzę, pewnego rodzaju struktura 2 [niesłyszalne]. 387 00:15:37,210 --> 00:15:40,680 Więc to tylko pseudonim dla danego typu. 388 00:15:40,680 --> 00:15:44,344 >> STUDENT: String [niesłyszalne] biblioteka został wpisany się jak gwiazda char. 389 00:15:44,344 --> 00:15:51,380 390 00:15:51,380 --> 00:15:54,390 >> ALLISON: Dla naszych celów, jeśli deklarowania struct, 391 00:15:54,390 --> 00:15:55,600 po prostu zrobić typedef struct. 392 00:15:55,600 --> 00:15:57,680 393 00:15:57,680 --> 00:16:04,490 OK więc wcześniej, to jest tylko normalne zmienna tutaj. 394 00:16:04,490 --> 00:16:06,390 Mamy do niego dostęp z kropką. 395 00:16:06,390 --> 00:16:08,580 jeśli mamy wskaźnik do struktura, możemy rzeczywiście 396 00:16:08,580 --> 00:16:10,700 użyj strzałek, co jest całkiem fajne. 397 00:16:10,700 --> 00:16:17,130 >> Więc w tym przypadku, mamy wskaźnik do Uczeń 1 to od typu ucznia. 398 00:16:17,130 --> 00:16:19,020 Pamiętaj, że z telefonem Konstrukcja wskaźnika, 399 00:16:19,020 --> 00:16:23,710 chcesz cokolwiek wpisać wskaźnik wskazuje się na początku. 400 00:16:23,710 --> 00:16:25,960 Więc mamy trochę studenta 1, tutaj. 401 00:16:25,960 --> 00:16:27,370 402 00:16:27,370 --> 00:16:31,050 I od tego studenta 1 jest teraz ostro, 403 00:16:31,050 --> 00:16:36,520 możemy rzeczywiście iść studentów nazwę 1 strzałki zamiast kropki, bo to wskaźnik, 404 00:16:36,520 --> 00:16:37,640 i przypisać Rob. 405 00:16:37,640 --> 00:16:40,720 A teraz, jeśli chcemy zmienić Roba do Davina, 406 00:16:40,720 --> 00:16:43,570 to jest po prostu pokazując, Innym sposobem, aby to zrobić. 407 00:16:43,570 --> 00:16:48,850 >> Więc zamiast za pomocą strzałki, można może also-- skończę to, a następnie 408 00:16:48,850 --> 00:16:52,860 przyjąć, że question-- mógłbyś również zrobić studenta odniesienia 1. 409 00:16:52,860 --> 00:16:56,170 To mówi, jak udać się do co jest studenta 1, która 410 00:16:56,170 --> 00:16:58,840 Uczeń będzie nasza struktura. 411 00:16:58,840 --> 00:17:03,910 Do niego dostęp z kropką i elementu które chcesz, a następnie przypisać go. 412 00:17:03,910 --> 00:17:05,326 Nie było pytanie. 413 00:17:05,326 --> 00:17:08,034 Uczeń: Tak, tak, jak się masz używać [niesłyszalne], gdy jesteś 414 00:17:08,034 --> 00:17:10,367 studentów nie robi gwiazdę [Niesłyszalne] studentem? 415 00:17:10,367 --> 00:17:12,200 ALLISON: Ponieważ tworzy wskaźnik. 416 00:17:12,200 --> 00:17:13,616 ROB: Będziemy o tym rozmawiać. 417 00:17:13,616 --> 00:17:16,119 ALLISON: Będziemy rozmawiać o tym w dalszej części przeglądu. 418 00:17:16,119 --> 00:17:17,660 Więc po prostu trzymać się tej myśli. 419 00:17:17,660 --> 00:17:20,560 Jeśli nadal przeszkadza w końca, przyszedł porozmawiać z jednym z nas. 420 00:17:20,560 --> 00:17:23,380 >> Więc to zrobić dokładnie to samo. 421 00:17:23,380 --> 00:17:25,579 Jesteśmy po prostu pokazując dwa różnych sposobów, aby to zrobić. 422 00:17:25,579 --> 00:17:29,470 Student 1 jest teraz wskaźnik, tak można uzyskać dostęp do elementu Nazwa 423 00:17:29,470 --> 00:17:30,960 w struct ze strzałką. 424 00:17:30,960 --> 00:17:36,440 Albo można dereference wskaźnikiem, a następnie uzyskać do niego dostęp, jak zwykle. 425 00:17:36,440 --> 00:17:38,430 Czy to ma sens każdemu? 426 00:17:38,430 --> 00:17:39,480 427 00:17:39,480 --> 00:17:43,890 Jeśli wskaźnik całe rzeczy są trochę mylące, Gabe będzie mówić o tym, 428 00:17:43,890 --> 00:17:45,740 i to może to będzie więcej sensu. 429 00:17:45,740 --> 00:17:46,240 Tak? 430 00:17:46,240 --> 00:17:48,387 >> Uczeń: Tak, tak, jak jest tym różni się od? 431 00:17:48,387 --> 00:17:49,470 ALLISON: poprzednia? 432 00:17:49,470 --> 00:17:52,330 Więc w tym uczeń 1 Sprawa nie jest wskaźnikiem. 433 00:17:52,330 --> 00:17:54,380 To tylko faktyczna struktura. 434 00:17:54,380 --> 00:17:55,400 >> STUDENT: OK. 435 00:17:55,400 --> 00:17:57,645 >> ALLISON: Podczas tej jednej jest wskaźnik do struct. 436 00:17:57,645 --> 00:17:58,910 437 00:17:58,910 --> 00:18:02,060 >> STUDENT: OK, ale robi to rodzaj w końcu pracuje sam [niesłyszalne]. 438 00:18:02,060 --> 00:18:03,310 >> ALLISON: Skutecznie działa tak samo. 439 00:18:03,310 --> 00:18:04,560 Składnia jest po prostu inna. 440 00:18:04,560 --> 00:18:05,185 STUDENT: OK. 441 00:18:05,185 --> 00:18:07,600 >> ALLISON: Tak, są one faktycznie same. 442 00:18:07,600 --> 00:18:11,321 To właśnie w zależności od kontekstu, możesz na siebie. 443 00:18:11,321 --> 00:18:11,820 Tak? 444 00:18:11,820 --> 00:18:13,956 >> STUDENT: Kiedy robisz odniesienia do 1-- 445 00:18:13,956 --> 00:18:14,580 ALLISON: Mm-hm? 446 00:18:14,580 --> 00:18:16,880 STUDENT: Dlaczego mają nawiasy? 447 00:18:16,880 --> 00:18:19,575 ALLISON: Ponieważ uczeń 1 jest wskaźnik. 448 00:18:19,575 --> 00:18:22,200 Więc musisz upewnić się, że jesteś tylko dereferencji wskaźnika. 449 00:18:22,200 --> 00:18:23,380 >> STUDENT: OK. 450 00:18:23,380 --> 00:18:26,700 >> ALLISON: Więc w tym przypadku tutaj, nawiasy wokół niego 451 00:18:26,700 --> 00:18:29,875 oznacza, że ​​jesteś dereferencji ucznia 1. 452 00:18:29,875 --> 00:18:35,390 Więc idziesz do miejsca, gdzie uczeń 1 pkt, co jest twoja struktura. 453 00:18:35,390 --> 00:18:38,010 Więc teraz można myśleć o tym, jak tego struct, 454 00:18:38,010 --> 00:18:39,785 więc możemy skorzystać z naszego normalnego działania dot. 455 00:18:39,785 --> 00:18:42,752 456 00:18:42,752 --> 00:18:43,585 Jeszcze jakieś pytania? 457 00:18:43,585 --> 00:18:45,840 458 00:18:45,840 --> 00:18:48,120 Cool, niesamowite. 459 00:18:48,120 --> 00:18:51,359 >> Więc ostatnią rzeczą, myślę, to mój ostatni slajd, woo! 460 00:18:51,359 --> 00:18:52,775 OK, więc zmiennoprzecinkowych niedokładności. 461 00:18:52,775 --> 00:18:54,090 462 00:18:54,090 --> 00:18:56,820 Rozmawialiśmy chwilę o to podczas wykładu. 463 00:18:56,820 --> 00:19:00,030 Zasadniczo, mamy nieskończenie wiele liczb rzeczywistych. 464 00:19:00,030 --> 00:19:02,237 A jeśli któryś z was kocham matematykę, nie 465 00:19:02,237 --> 00:19:03,570 wszelkiego rodzaju fajne rzeczy z nami. 466 00:19:03,570 --> 00:19:05,010 467 00:19:05,010 --> 00:19:07,190 >> Ale istnieje nieskończenie wiele liczb rzeczywistych. 468 00:19:07,190 --> 00:19:09,850 Ale to tylko skończony wiele bitów, które mamy. 469 00:19:09,850 --> 00:19:13,240 Więc zawsze będzie mają niedokładności, to wszystko. 470 00:19:13,240 --> 00:19:16,269 I to jest to po prostu rodzaj jak coś, co powinieneś wiedzieć. 471 00:19:16,269 --> 00:19:19,060 To jak my może zapytać, dlaczego nie zmiennoprzecinkowe niedokładności istnieje? 472 00:19:19,060 --> 00:19:20,004 473 00:19:20,004 --> 00:19:21,420 Więc po prostu coś trzeba wiedzieć. 474 00:19:21,420 --> 00:19:23,770 A z tym, jestem toczenia go do wskaźników. 475 00:19:23,770 --> 00:19:27,720 476 00:19:27,720 --> 00:19:28,520 >> Binky: Cześć, chłopaki. 477 00:19:28,520 --> 00:19:29,616 Nazywam się Binky. 478 00:19:29,616 --> 00:19:30,990 Mam zamiar mówić o wskazówki. 479 00:19:30,990 --> 00:19:33,247 480 00:19:33,247 --> 00:19:35,830 Tak, tak jest w rzeczywistości wskaźniki moja ulubiona część tego kursu. 481 00:19:35,830 --> 00:19:39,740 Tak po prostu, aby jasne, co Allison mówił o tutaj, więc powód 482 00:19:39,740 --> 00:19:43,810 why-- Jedyną różnicą, Duża różnica była droga 483 00:19:43,810 --> 00:19:44,760 oświadczamy rzeczy. 484 00:19:44,760 --> 00:19:47,560 Więc oznacza to gwiazda uczeń jest wskaźnikiem do studenta. 485 00:19:47,560 --> 00:19:52,960 Natomiast slajd przed, student Rzeczywista struktura, jak rzeczywiste studenta, 486 00:19:52,960 --> 00:19:54,400 zawierających żadnej z tych rzeczy. 487 00:19:54,400 --> 00:19:57,050 >> A powodem, dla którego chcą to-- tak, Davina? 488 00:19:57,050 --> 00:19:58,630 >> DAVIN: Co strzałki oznacza? 489 00:19:58,630 --> 00:20:04,240 >> Binky: Środki strzałek dokładnie takie same, jak to. 490 00:20:04,240 --> 00:20:06,150 Tak naprawdę nie trzeba strzałkę. 491 00:20:06,150 --> 00:20:11,060 Jak, jeśli jesteś jedynym programem w C, możesz po prostu użyć tego. 492 00:20:11,060 --> 00:20:12,850 Niestety, ja nie, co to jest. 493 00:20:12,850 --> 00:20:14,920 Możesz po prostu użyć tej składni. 494 00:20:14,920 --> 00:20:17,430 >> Ale niektórzy ludzie, gdy były projektowania C, 495 00:20:17,430 --> 00:20:19,870 oni zorientowali, że ludzie użył tego składnię tak wiele, 496 00:20:19,870 --> 00:20:23,970 że będą one lubią po prostu wymyślić o strukturze składni dla niego. 497 00:20:23,970 --> 00:20:26,820 A miało to miejsce w forma tej strzałki. 498 00:20:26,820 --> 00:20:29,210 I to jest naprawdę ładne, bo symbolizuje coś 499 00:20:29,210 --> 00:20:33,670 jakbyśmy rzeczywiście po ta strzałka, to wskaźnik, 500 00:20:33,670 --> 00:20:35,300 w kierunku jakiegoś miejsca w pamięci. 501 00:20:35,300 --> 00:20:40,410 A gdy tam dotrzemy, chcemy spojrzeć na nazwę tego studenta, 502 00:20:40,410 --> 00:20:42,150 czy to ma sens. 503 00:20:42,150 --> 00:20:43,000 OK? 504 00:20:43,000 --> 00:20:44,290 >> Tak to jest dokładnie to samo. 505 00:20:44,290 --> 00:20:46,310 To jest dokładnie to samo, co ten. 506 00:20:46,310 --> 00:20:48,130 Oni się skompilowany dokładnie tak samo, OK? 507 00:20:48,130 --> 00:20:50,100 508 00:20:50,100 --> 00:20:55,580 A powodem tutaj dlatego malloc coś, ponieważ w tym wypadku 509 00:20:55,580 --> 00:20:59,120 nasza zmienna jest faktycznie tylko zmienna wskaźnik. 510 00:20:59,120 --> 00:21:02,900 Tak więc mamy tylko trochę miejsca w pamięci, który trzyma wskaźnik. 511 00:21:02,900 --> 00:21:06,570 Tak naprawdę nie ma żadnego miejsca który posiada rzeczywistej struktury. 512 00:21:06,570 --> 00:21:08,660 >> Więc to musi być wykonane w dwóch etapach. 513 00:21:08,660 --> 00:21:11,545 Musimy stworzyć Pamięć umieścić struct w. 514 00:21:11,545 --> 00:21:14,445 I musimy stworzyć pamięci, aby umieścić wskaźnik w. 515 00:21:14,445 --> 00:21:16,570 Więc są w zasadzie dwa różne zmienne, tutaj. 516 00:21:16,570 --> 00:21:19,730 Jednym z nich jest rodzaj studenta oprócz tego, że tak naprawdę nie ma nazwy. 517 00:21:19,730 --> 00:21:21,900 A druga jest typu studenckiego gwiazdy. 518 00:21:21,900 --> 00:21:24,900 A następnie 1 pkt studenckie tam, czy to ma sens. 519 00:21:24,900 --> 00:21:25,871 520 00:21:25,871 --> 00:21:26,370 OK? 521 00:21:26,370 --> 00:21:28,160 522 00:21:28,160 --> 00:21:31,860 >> Więc powód używamy wskaźniki, ponieważ wszystko jest 523 00:21:31,860 --> 00:21:35,510 w komputerze, każda zmienna w komputerze, posiada dwie rzeczy. 524 00:21:35,510 --> 00:21:36,580 Ma swoją wartość. 525 00:21:36,580 --> 00:21:38,420 I to ma swój adres. 526 00:21:38,420 --> 00:21:41,390 I dobry sposób, aby konceptualizacji to tam 527 00:21:41,390 --> 00:21:44,230 wiele problemów, gdy spróbuj użyć funkcji. 528 00:21:44,230 --> 00:21:47,200 I mamy zamiar spróbować zajrzeć do jednego z nich. 529 00:21:47,200 --> 00:21:50,370 Mianowicie, to będzie myśleć o pamięci jako skrzynek. 530 00:21:50,370 --> 00:21:52,810 >> Zawsze myślałem o zmiennych kiedy mówisz na równe 5. 531 00:21:52,810 --> 00:21:54,430 Myślisz, że na wprowadzenie 5 do pudełka. 532 00:21:54,430 --> 00:21:55,520 533 00:21:55,520 --> 00:22:00,030 Więc co, jeśli chcesz, aby przejść że int do funkcji? 534 00:22:00,030 --> 00:22:03,230 Wystarczy pass-- ja nie know-- x do funkcji. 535 00:22:03,230 --> 00:22:06,090 Ale to, co się dzieje, zwykle jako ludzi, to 536 00:22:06,090 --> 00:22:09,050 pomyśli coś jakbym przepuszczenie pola na osobie. 537 00:22:09,050 --> 00:22:12,070 I to naprawdę nie robi zdarzają się w komputerach. 538 00:22:12,070 --> 00:22:17,770 Co się dzieje, jest skopiowanie wartości skrzynki do skrzynki osoby. 539 00:22:17,770 --> 00:22:22,440 >> Więc to, co próbuję powiedzieć to to, że jeśli masz function-- sorry-- tutaj, 540 00:22:22,440 --> 00:22:27,700 jeśli mamy funkcję jak do pięciu górę nie, jeśli spróbujesz przekazać zmienną, 541 00:22:27,700 --> 00:22:29,450 to po prostu się skopiować. 542 00:22:29,450 --> 00:22:35,771 Jeśli nx initialize równa 3, to będzie skopiować tę wartość do zmiennej a 543 00:22:35,771 --> 00:22:36,270 tam. 544 00:22:36,270 --> 00:22:37,005 545 00:22:37,005 --> 00:22:39,630 OK, a to z tego powodu rodzajem Dlatego chcemy użyć wskaźników. 546 00:22:39,630 --> 00:22:42,550 Bo zamiast daje tylko wartość, 547 00:22:42,550 --> 00:22:44,850 zamiast po prostu przechodząc po prostu wartość do funkcji, 548 00:22:44,850 --> 00:22:46,530 chcemy przekazać przez odniesienie. 549 00:22:46,530 --> 00:22:50,630 To, co nazywamy przepustkę przez odniesienie jest rodzajem dawać pole do funkcji, 550 00:22:50,630 --> 00:22:53,890 tak, że funkcja może również zmienić wartości w tym polu. 551 00:22:53,890 --> 00:22:57,280 >> OK, więc tylko niektóre podstawowe wskaźnik rzeczy jest stworzenie wskaźników, 552 00:22:57,280 --> 00:23:00,300 po prostu zadeklarować jej typ, a umieścić gwiazdę tuż po nim. 553 00:23:00,300 --> 00:23:02,307 I typ jest po prostu co masz wskazując na. 554 00:23:02,307 --> 00:23:04,390 Więc jeśli jest to int gwiazda, jesteś wskazując na int. 555 00:23:04,390 --> 00:23:05,940 Jeśli jest to gwiazda znak, jesteś wskazując na wykresie. 556 00:23:05,940 --> 00:23:07,790 A jeśli to gwiazda student, jesteś wskazując na ucznia. 557 00:23:07,790 --> 00:23:08,770 OK? 558 00:23:08,770 --> 00:23:10,510 >> A oni długo wszystkie 4 bajty. 559 00:23:10,510 --> 00:23:13,010 Bo tej zmiennej tak nie jest w rzeczywistości 560 00:23:13,010 --> 00:23:15,380 trzeba trzymać char, int, lub uczeń. 561 00:23:15,380 --> 00:23:16,890 To tylko musi posiadać adres. 562 00:23:16,890 --> 00:23:21,390 To dlatego, że są wszystkie 4 bajty długi w normalnym urządzeniu 32-bitowym. 563 00:23:21,390 --> 00:23:21,890 OK? 564 00:23:21,890 --> 00:23:25,600 Więc tutaj, x jest zmienną, która wskazuje do wew. y wskazuje na char. Z punktów 565 00:23:25,600 --> 00:23:26,580 do pływaka. 566 00:23:26,580 --> 00:23:27,480 Tutaj jakieś pytania? 567 00:23:27,480 --> 00:23:29,841 568 00:23:29,841 --> 00:23:30,340 Fajne. 569 00:23:30,340 --> 00:23:32,550 I są dwa oni mają różne symbole 570 00:23:32,550 --> 00:23:34,341 aby pamiętać przy zbliża się do wskaźnika. 571 00:23:34,341 --> 00:23:36,540 Tak więc odwołanie i dereferencji są te duże. 572 00:23:36,540 --> 00:23:38,100 573 00:23:38,100 --> 00:23:41,602 Więc z ampersand nazwa zmiennej daje? 574 00:23:41,602 --> 00:23:42,310 STUDENT: Adres. 575 00:23:42,310 --> 00:23:43,380 Binky: Adres. 576 00:23:43,380 --> 00:23:47,330 Więc jeśli zadeklarować int a wynosi 5, a następnie ampersanda 577 00:23:47,330 --> 00:23:49,214 z ma dać ci adres. 578 00:23:49,214 --> 00:23:51,130 I rzeczywiście można spróbować wydrukować, że i zobaczyć 579 00:23:51,130 --> 00:23:54,640 jaki adres w pamięci zmienna ma. 580 00:23:54,640 --> 00:23:57,380 A potem dereferencing-- tak, że została odwołanie, 581 00:23:57,380 --> 00:24:00,380 coraz address-- dereferencji Jest dokładnie odwrotnie. 582 00:24:00,380 --> 00:24:04,120 OK, tak jak czasami jest przeciwieństwem podziału, 583 00:24:04,120 --> 00:24:06,060 Gwiazda jest przeciwieństwem ampersand. 584 00:24:06,060 --> 00:24:09,710 Tak więc środki dereferencji tam. 585 00:24:09,710 --> 00:24:14,280 Więc jeśli dasz star-- I nie know-- 50, to 586 00:24:14,280 --> 00:24:20,320 Spróbuję go na adres Numer 50 wewnątrz komputera. 587 00:24:20,320 --> 00:24:22,840 OK, a dlaczego nie widzimy że są przeciwieństwami? 588 00:24:22,840 --> 00:24:27,320 Bo to, co się dzieje, jeśli nie coś jak gwiazda handlowe i? 589 00:24:27,320 --> 00:24:28,470 590 00:24:28,470 --> 00:24:33,460 Cóż, handlowego i daje adres zmiennej, adres. 591 00:24:33,460 --> 00:24:35,830 Ale gwiazda oznacza tam. 592 00:24:35,830 --> 00:24:38,930 >> Więc co się dzieje, jeśli przejść na adres? 593 00:24:38,930 --> 00:24:40,400 Wystarczy dostać się do, prawda? 594 00:24:40,400 --> 00:24:41,410 595 00:24:41,410 --> 00:24:43,600 Tak więc zamierza adresem to samo co. 596 00:24:43,600 --> 00:24:47,580 Dlatego są one zwykle o których mowa w tym same-- 597 00:24:47,580 --> 00:24:50,480 a ten określa się jako przeciwstawne operatorów. 598 00:24:50,480 --> 00:24:50,980 OK? 599 00:24:50,980 --> 00:24:52,780 600 00:24:52,780 --> 00:24:53,790 Tak fajne. 601 00:24:53,790 --> 00:24:57,240 >> W obszarze okapu, na przykład, jeśli zadeklarować int x jest równe 5, 602 00:24:57,240 --> 00:24:58,040 mamy zmienną. 603 00:24:58,040 --> 00:25:00,790 I pamiętam, że powiedział co zmienna-- i to jest dobra rzecz 604 00:25:00,790 --> 00:25:03,820 do utrzymania w mind-- ma dwa różne sprawy związane z. 605 00:25:03,820 --> 00:25:06,460 Że ma zająć i wartość. 606 00:25:06,460 --> 00:25:07,140 OK? 607 00:25:07,140 --> 00:25:09,180 >> Tak więc wartość w tym przypadku 5. 608 00:25:09,180 --> 00:25:12,140 I adres is-- powiedzmy, że jestem zrobienie czegoś up-- To 0x04. 609 00:25:12,140 --> 00:25:13,180 610 00:25:13,180 --> 00:25:17,200 I tylko dlatego, że zwykle stanowią adresy w systemie szesnastkowym 611 00:25:17,200 --> 00:25:19,770 jest jeden, bo to jak dobra. 612 00:25:19,770 --> 00:25:21,600 To pasuje binarny. 613 00:25:21,600 --> 00:25:23,500 Jest to łatwe do konwersji z formatu binarnego. 614 00:25:23,500 --> 00:25:26,890 I to nie było zbyt duże, jeśli masz bardzo dużą liczbę. 615 00:25:26,890 --> 00:25:29,990 Więc jak korzystać szesnastkowy w adresach drukarskich. 616 00:25:29,990 --> 00:25:31,890 Ale mogę reprezentować to jako liczba całkowita. 617 00:25:31,890 --> 00:25:32,750 Jest w porządku. 618 00:25:32,750 --> 00:25:35,450 >> I tak to ma adres 4 i wartość 5. 619 00:25:35,450 --> 00:25:38,080 I wtedy powiedziałem int gwiazda wskaźnik. 620 00:25:38,080 --> 00:25:40,070 Więc to jest inny typ, zawiadomienie. 621 00:25:40,070 --> 00:25:43,220 Int gwiazda wskaźnik równy adres x. 622 00:25:43,220 --> 00:25:46,425 Więc co będzie wartość ptr? 623 00:25:46,425 --> 00:25:47,710 624 00:25:47,710 --> 00:25:51,600 To będzie adres x, tutaj. 625 00:25:51,600 --> 00:25:54,190 OK, więc ma wartość jest taki sam, jak adres. 626 00:25:54,190 --> 00:25:56,130 To zadanie działać robię. 627 00:25:56,130 --> 00:25:59,380 A potem PTR będzie mieć własny adres, który okazuje, 628 00:25:59,380 --> 00:26:02,050 w tym przypadku, 8, OK? 629 00:26:02,050 --> 00:26:03,850 630 00:26:03,850 --> 00:26:05,900 >> A następnie utworzyć nową całkowitą kopię. 631 00:26:05,900 --> 00:26:08,790 I mówię int kopii wynosi tam. 632 00:26:08,790 --> 00:26:11,140 Więc idź do tego, co ptr wskazuje. 633 00:26:11,140 --> 00:26:13,940 No, co to ptr mieć? 634 00:26:13,940 --> 00:26:14,740 Ptr ma 0x04. 635 00:26:14,740 --> 00:26:16,060 636 00:26:16,060 --> 00:26:18,400 Co się stanie, jeśli spróbuję tam? 637 00:26:18,400 --> 00:26:23,650 Znajdę faceta, który ma Adres x i, kto ma adres 4. 638 00:26:23,650 --> 00:26:25,970 A kto ma zająć cztery jest x. 639 00:26:25,970 --> 00:26:26,950 Czy to ma sens? 640 00:26:26,950 --> 00:26:28,295 641 00:26:28,295 --> 00:26:28,795 Tak? 642 00:26:28,795 --> 00:26:32,060 >> STUDENT: W tym przypadku, jest wskaźnik w stosie? 643 00:26:32,060 --> 00:26:36,024 >> Binky: W tym przypadku, it's-- dobre pytanie. 644 00:26:36,024 --> 00:26:38,690 I tak naprawdę nie myślę o tym podczas przygotowania tych adresów. 645 00:26:38,690 --> 00:26:42,570 Jednak, jeżeli jest to, podobnie jak wszystkie są to zmienne lokalne, 646 00:26:42,570 --> 00:26:46,372 to x będzie żył in-- wszystko będzie żyć w stosie. 647 00:26:46,372 --> 00:26:48,330 Więc wszystko idzie być wskazując na stos. 648 00:26:48,330 --> 00:26:49,360 649 00:26:49,360 --> 00:26:52,700 Dostajesz tylko sterty kiedy to zaczniesz używać malloc, prawda? 650 00:26:52,700 --> 00:26:59,430 >> Więc jeśli przypomnieć stos jest za każdym razem, można wywołać funkcję w programie, 651 00:26:59,430 --> 00:27:02,800 takie jak, na przykład główny lub dowolny innych funkcji, takich jak printf. 652 00:27:02,800 --> 00:27:06,334 Wszystkie lokalne zmienne zamierza się umieścić w ramce stosu. 653 00:27:06,334 --> 00:27:08,500 I dostaniesz jak ułożone w stos. 654 00:27:08,500 --> 00:27:09,930 To, co nazywa się stos. 655 00:27:09,930 --> 00:27:12,200 I wszystkie te zmienne lokalne są tam będzie. 656 00:27:12,200 --> 00:27:14,940 I heap-- i jedziemy aby porozmawiać o tym later-- 657 00:27:14,940 --> 00:27:19,050 kupa jest gdzie wszystkie dynamicznie przydzielane życie pamięci. 658 00:27:19,050 --> 00:27:20,270 Cool? 659 00:27:20,270 --> 00:27:21,680 >> Idziemy do tego slajdu. 660 00:27:21,680 --> 00:27:22,800 Tak? 661 00:27:22,800 --> 00:27:25,490 >> STUDENT: Dlaczego nie jest int kopia powrocie 0x04? 662 00:27:25,490 --> 00:27:27,870 663 00:27:27,870 --> 00:27:30,066 >> Binky: Dlaczego nie jest int kopia powrocie 0x04? 664 00:27:30,066 --> 00:27:32,450 >> STUDENT: Dlaczego nie jest to, że [niesłyszalne]? 665 00:27:32,450 --> 00:27:35,530 >> Binky: Bo to, co jest wartością ptr? 666 00:27:35,530 --> 00:27:37,394 667 00:27:37,394 --> 00:27:38,370 >> STUDENT: 0x04. 668 00:27:38,370 --> 00:27:38,960 >> Binky: 0x04. 669 00:27:38,960 --> 00:27:40,910 Co się stanie, jeśli pójdziesz do 0x04? 670 00:27:40,910 --> 00:27:41,620 Co otrzymasz? 671 00:27:41,620 --> 00:27:42,371 >> STUDENT: Oh, OK. 672 00:27:42,371 --> 00:27:42,995 Binky: Widzisz? 673 00:27:42,995 --> 00:27:43,536 UCZEŃ: Tak. 674 00:27:43,536 --> 00:27:44,890 Binky: Więc masz 5. 675 00:27:44,890 --> 00:27:49,170 Więc kopia będzie miał 5, czy to ma sens. 676 00:27:49,170 --> 00:27:49,809 Tak? 677 00:27:49,809 --> 00:27:52,803 >> STUDENT: Czy możemy zdobyć 5 W polu Value [niesłyszalne] 678 00:27:52,803 --> 00:27:55,300 jeśli stawiamy int skopiować [niesłyszalne]. 679 00:27:55,300 --> 00:27:56,710 >> Binky: Int-- my by, tak. 680 00:27:56,710 --> 00:27:59,080 Że zrobiłby prawie to samo. 681 00:27:59,080 --> 00:28:02,080 Ale w ten sposób, możemy przejść zwracam się do funkcji. 682 00:28:02,080 --> 00:28:05,050 I to jest fajne mamy zamiar teraz zrobić. 683 00:28:05,050 --> 00:28:06,770 684 00:28:06,770 --> 00:28:13,090 >> Więc ten rodzaj ćwiczeń zawsze pojawia się on-- bardzo zwykle pojawia się w quizach. 685 00:28:13,090 --> 00:28:15,870 Więc to jest naprawdę dobry, aby spróbować zrobić coś takiego samemu. 686 00:28:15,870 --> 00:28:21,210 Więc staram się śledzić, co adres jest i chcesz wartości zmiennych 687 00:28:21,210 --> 00:28:22,620 są w każdym punkcie. 688 00:28:22,620 --> 00:28:24,370 Tak to jest dokładnie to, co będziemy robić. 689 00:28:24,370 --> 00:28:26,988 Tutaj mamy kroki, jeden, dwa, trzy, cztery, pięć. 690 00:28:26,988 --> 00:28:30,530 Jeden, dwa, trzy, cztery, pięć. 691 00:28:30,530 --> 00:28:33,330 I będziemy śledzić z wartości x i. 692 00:28:33,330 --> 00:28:34,650 693 00:28:34,650 --> 00:28:40,530 >> Więc co to robi, jeśli jest to Kod buggy, staramy się zrobić do pięciu. 694 00:28:40,530 --> 00:28:43,610 Więc staramy się dostać w zmienna i zmienić jego wartość do 5. 695 00:28:43,610 --> 00:28:44,630 696 00:28:44,630 --> 00:28:49,900 I pamiętam o analogii box i wręczając pole do kogoś? 697 00:28:49,900 --> 00:28:51,515 Tak więc głównym ma to pole o nazwie x. 698 00:28:51,515 --> 00:28:52,570 699 00:28:52,570 --> 00:28:54,170 I zawiera wartość 3. 700 00:28:54,170 --> 00:28:55,230 701 00:28:55,230 --> 00:28:57,455 I staram się przekazać to pole, aby do pięciu. 702 00:28:57,455 --> 00:28:58,560 703 00:28:58,560 --> 00:29:01,510 >> I chcę, aby zmienić do pięciu Wartość tego pola do 5. 704 00:29:01,510 --> 00:29:03,080 705 00:29:03,080 --> 00:29:05,120 A potem po prostu wydrukować wartość x. 706 00:29:05,120 --> 00:29:06,475 707 00:29:06,475 --> 00:29:08,850 To jest to, co mój function-- jest to, co chcę robić. 708 00:29:08,850 --> 00:29:12,450 Próbuję tylko do aktualizacji Wartość x 5. 709 00:29:12,450 --> 00:29:13,512 710 00:29:13,512 --> 00:29:14,970 Czy to jest jasne, co robi funkcja? 711 00:29:14,970 --> 00:29:16,210 712 00:29:16,210 --> 00:29:21,440 >> OK, więc co będzie Wartości x i tu, 713 00:29:21,440 --> 00:29:27,734 pierwszej linii, tuż przed pierwszym line-- chciałbym say-- programu? 714 00:29:27,734 --> 00:29:28,940 >> Student: Prawdopodobnie śmieci. 715 00:29:28,940 --> 00:29:30,023 >> Binky: Tylko śmieci rzeczy. 716 00:29:30,023 --> 00:29:32,590 Więc po prostu umieścić N / A. Tak naprawdę nie wiem. 717 00:29:32,590 --> 00:29:37,400 Jak, nawet nie istnieje, dlatego, że nie nazywa się do pięciu. 718 00:29:37,400 --> 00:29:38,980 Int nie jest zadeklarowana. 719 00:29:38,980 --> 00:29:40,030 720 00:29:40,030 --> 00:29:42,920 A x będzie istnieć tutaj, ale naprawdę nie ma 721 00:29:42,920 --> 00:29:45,370 przypisane do niego żadnej wartości, tak dobrze? 722 00:29:45,370 --> 00:29:46,570 723 00:29:46,570 --> 00:29:52,340 >> A potem, co będzie wartości X oraz w numer dwa? 724 00:29:52,340 --> 00:29:54,530 725 00:29:54,530 --> 00:29:55,410 >> STUDENT: [niesłyszalne]. 726 00:29:55,410 --> 00:29:57,540 >> Binky: Tak x będzie trzech. 727 00:29:57,540 --> 00:29:59,650 To proste, ponieważ mamy przypisanie do niej 3. 728 00:29:59,650 --> 00:30:03,500 I nadal nie istnieje bo po prostu żyje w pięć. 729 00:30:03,500 --> 00:30:05,800 Więc mam zamiar mieć trzy i nic. 730 00:30:05,800 --> 00:30:08,590 lub jak śmieci, niezależnie, naprawdę nie zdefiniowane. 731 00:30:08,590 --> 00:30:11,640 732 00:30:11,640 --> 00:30:13,140 A teraz, jest to ważne, linia. 733 00:30:13,140 --> 00:30:14,931 Tutaj mamy zamiar faktycznie zadzwonić do pięciu. 734 00:30:14,931 --> 00:30:17,140 735 00:30:17,140 --> 00:30:18,680 I pamiętaj, co powiedziałem. 736 00:30:18,680 --> 00:30:20,240 Nigdy nie przechodzą w polu. 737 00:30:20,240 --> 00:30:23,110 Po prostu skopiuj wartość okno do innego okna. 738 00:30:23,110 --> 00:30:27,000 To nie wszystkie komputery, kopiowanie rzeczy z jednego miejsca do drugiego. 739 00:30:27,000 --> 00:30:33,550 >> Więc do pięciu, co rzeczywiście robi to kopiuje wartość x do. 740 00:30:33,550 --> 00:30:35,130 Więc to, co dzieje się tutaj? 741 00:30:35,130 --> 00:30:36,210 Wartości x i. 742 00:30:36,210 --> 00:30:38,670 743 00:30:38,670 --> 00:30:43,360 3 i 3, po prostu skopiować to w ciągu od x. 744 00:30:43,360 --> 00:30:44,710 745 00:30:44,710 --> 00:30:45,320 Fajne. 746 00:30:45,320 --> 00:30:46,140 >> Teraz jesteśmy tutaj. 747 00:30:46,140 --> 00:30:47,610 748 00:30:47,610 --> 00:30:49,430 A teraz idziemy aktualizacji wynosi 5. 749 00:30:49,430 --> 00:30:50,900 750 00:30:50,900 --> 00:30:53,070 Co się stanie w kolejce cztery? 751 00:30:53,070 --> 00:30:55,120 752 00:30:55,120 --> 00:30:56,010 >> STUDENT: [niesłyszalne]. 753 00:30:56,010 --> 00:30:59,685 >> Binky: jest aktualizowany, ale x nie aktualizowane. 754 00:30:59,685 --> 00:31:02,050 755 00:31:02,050 --> 00:31:05,250 Ponieważ x nadal mieszka w głównym, to zupełnie inny blok pamięci. 756 00:31:05,250 --> 00:31:06,970 To inna zmienna. 757 00:31:06,970 --> 00:31:07,900 jest inną zmienną. 758 00:31:07,900 --> 00:31:10,000 Stało się, że mają I taką samą wartość, ponieważ 759 00:31:10,000 --> 00:31:13,980 skopiowane wartości x do. 760 00:31:13,980 --> 00:31:20,070 Ale teraz, kiedy robię wynosi 5, to tak naprawdę nie wpływa w żaden sposób x. 761 00:31:20,070 --> 00:31:21,450 To jest trudniejsze część. 762 00:31:21,450 --> 00:31:23,380 Czy to ma sens dla wszystkich? 763 00:31:23,380 --> 00:31:24,093 Tak? 764 00:31:24,093 --> 00:31:25,717 STUDENT: Jeszcze jedno pytanie, masz trzy. 765 00:31:25,717 --> 00:31:27,741 Dlaczego already-- och, nie, to 3. 766 00:31:27,741 --> 00:31:28,490 Niestety, nic nie szkodzi. 767 00:31:28,490 --> 00:31:29,310 Czytałem 5. 768 00:31:29,310 --> 00:31:30,415 >> Binky: Tak, 3, 3. 769 00:31:30,415 --> 00:31:31,540 >> STUDENT: [niesłyszalne], tak. 770 00:31:31,540 --> 00:31:35,290 Binky: A potem przypisać 5 do , ale tak naprawdę nie zmieni x. 771 00:31:35,290 --> 00:31:36,369 Dobry? 772 00:31:36,369 --> 00:31:36,910 UCZEŃ: Tak. 773 00:31:36,910 --> 00:31:37,410 Binky: Tak? 774 00:31:37,410 --> 00:31:42,330 Czy możesz wyjaśnić, w jaki sposób ponownie zostanie skopiowany [niesłyszalne]? 775 00:31:42,330 --> 00:31:48,480 >> Binky: OK, więc gdy dzwonisz do pięciu x, więc tej linii kodu tutaj. 776 00:31:48,480 --> 00:31:50,100 777 00:31:50,100 --> 00:31:52,340 pięć x, co jest x? 778 00:31:52,340 --> 00:31:55,160 779 00:31:55,160 --> 00:31:58,340 x jest tylko 3 w tym momencie, prawda? 780 00:31:58,340 --> 00:32:03,320 Więc może po prostu myśleć o wprowadzenie 3 w tu i zapominając o x. 781 00:32:03,320 --> 00:32:04,410 Wystarczy umieścić 3 tutaj. 782 00:32:04,410 --> 00:32:10,880 Jak, mamy zamiar skopiować wartość x do int a, który jest tam. 783 00:32:10,880 --> 00:32:12,310 784 00:32:12,310 --> 00:32:13,630 OK? 785 00:32:13,630 --> 00:32:14,780 >> Tak więc wartość x 3. 786 00:32:14,780 --> 00:32:17,680 Mamy zamiar skopiować 3 nad do. 787 00:32:17,680 --> 00:32:20,040 A wszystko to drugi blok Pamięć ta druga zmienna 788 00:32:20,040 --> 00:32:22,640 nazywany będzie miał 3, jak również. 789 00:32:22,640 --> 00:32:23,580 Czy to ma sens? 790 00:32:23,580 --> 00:32:24,780 791 00:32:24,780 --> 00:32:25,794 Tak? 792 00:32:25,794 --> 00:32:31,008 >> STUDENT: Jeśli dasz do pięciu, jak mieć go jako liczba całkowita x, a nie, 793 00:32:31,008 --> 00:32:32,910 by to wszystko naprawić? 794 00:32:32,910 --> 00:32:36,290 >> Binky: Jeśli to integer-- nie, że nie wszystko naprawić. 795 00:32:36,290 --> 00:32:37,590 Więc to jest bardzo dobre pytanie. 796 00:32:37,590 --> 00:32:40,480 To naprawdę nie ma znaczenia, co nazywasz tych zmiennych. 797 00:32:40,480 --> 00:32:44,510 Ponownie, to będzie kwestia zakresu, dlatego, że nie jesteś sam x. 798 00:32:44,510 --> 00:32:46,526 Są całkowicie różne miejsca w pamięci. 799 00:32:46,526 --> 00:32:47,400 STUDENT: [niesłyszalne]. 800 00:32:47,400 --> 00:32:49,020 Binky: Więc to naprawdę nie robi znaczenia, co do nich zadzwonić. 801 00:32:49,020 --> 00:32:50,480 To nie rozwiąże sprawy, OK? 802 00:32:50,480 --> 00:32:53,390 803 00:32:53,390 --> 00:32:54,430 Więcej pytań? 804 00:32:54,430 --> 00:32:55,762 Tak? 805 00:32:55,762 --> 00:32:58,498 >> STUDENT: Jak to jest z powrotem do numer pięć [niesłyszalne]? 806 00:32:58,498 --> 00:32:59,661 807 00:32:59,661 --> 00:33:01,160 Binky: OK, mamy nie zrobić tego jeszcze. 808 00:33:01,160 --> 00:33:03,432 Chodźmy na numer pięć, a następnie. 809 00:33:03,432 --> 00:33:04,650 >> STUDENT: [niesłyszalne]? 810 00:33:04,650 --> 00:33:05,565 >> Binky: Co? 811 00:33:05,565 --> 00:33:08,179 >> STUDENT: Czy masz zwrot w ogóle? 812 00:33:08,179 --> 00:33:09,970 Binky: Nie mamy zwrotny, nie stanowi głównego. 813 00:33:09,970 --> 00:33:12,940 Ale główne automatycznie powraca 0 jeśli nic nie powrócić. 814 00:33:12,940 --> 00:33:14,400 815 00:33:14,400 --> 00:33:15,188 Tak? 816 00:33:15,188 --> 00:33:22,658 >> STUDENT: Czy mógłbyś zrobić main-- lub można wprowadzić do pięciu zwróci? 817 00:33:22,658 --> 00:33:24,170 818 00:33:24,170 --> 00:33:27,990 >> Binky: Mogliśmy do pięciu wrócić, tak. 819 00:33:27,990 --> 00:33:32,527 Ale wtedy musielibyśmy przypisać x równa wartości zwracanej do pięciu, 820 00:33:32,527 --> 00:33:34,360 który byłby nieco inny program. 821 00:33:34,360 --> 00:33:35,440 To działa. 822 00:33:35,440 --> 00:33:38,730 Ale to, co chcemy zrobić, to, co jest nazywa zmiana coś w miejscu. 823 00:33:38,730 --> 00:33:41,690 Dlatego chcemy, aby rzeczywiście zmienić to pole i nie martwić się 824 00:33:41,690 --> 00:33:44,390 o konieczności powrotu wartości lub cokolwiek. 825 00:33:44,390 --> 00:33:44,890 OK? 826 00:33:44,890 --> 00:33:46,490 827 00:33:46,490 --> 00:33:50,150 >> To jest tak jak z funkcji zamiany David pokazał w wykładzie, z wyjątkiem jestem 828 00:33:50,150 --> 00:33:51,740 tylko do czynienia z jedną zmienną. 829 00:33:51,740 --> 00:33:55,960 I użył dwóch, więc int b i następnie tymczasowe zmienne i etażerka. 830 00:33:55,960 --> 00:33:57,020 OK? 831 00:33:57,020 --> 00:33:58,070 Więc co jest ostatnia linia? 832 00:33:58,070 --> 00:34:04,400 Po pięciu zwrotów, to po prostu ma zamiar odejść. 833 00:34:04,400 --> 00:34:06,120 834 00:34:06,120 --> 00:34:10,179 Nie będzie już, i tylko x nadal będzie żyć. 835 00:34:10,179 --> 00:34:12,130 >> I wiecie co? x nie zmienić jego wartość, 836 00:34:12,130 --> 00:34:15,520 po wszystkim, bo jesteśmy tylko zmienia wartość. 837 00:34:15,520 --> 00:34:17,370 Dlatego x 3 było w całym. 838 00:34:17,370 --> 00:34:17,870 OK? 839 00:34:17,870 --> 00:34:20,195 840 00:34:20,195 --> 00:34:21,130 Dobra. 841 00:34:21,130 --> 00:34:23,560 Tak więc ten program nie robi osiągnąć to, co chcieliśmy. 842 00:34:23,560 --> 00:34:24,760 Teraz to naprawić. 843 00:34:24,760 --> 00:34:27,440 >> A program jest za pomocą wskaźników naprawić. 844 00:34:27,440 --> 00:34:32,300 Co możemy zrobić, to mamy trzy linie, które są różne. 845 00:34:32,300 --> 00:34:34,020 Pierwsze z nich jest nie przekazujemy x. 846 00:34:34,020 --> 00:34:35,535 Przekazujemy adres x. 847 00:34:35,535 --> 00:34:37,330 848 00:34:37,330 --> 00:34:40,876 Więc zamiast kopiowania na Wartość pola, 849 00:34:40,876 --> 00:34:42,500 Jestem nadal będzie skopiować coś. 850 00:34:42,500 --> 00:34:45,380 Ale ja przekopiowaniu adres skrzynki. 851 00:34:45,380 --> 00:34:48,780 >> Więc jeśli mogę przekazać adres pole do do pięciu, a następnie do pięciu 852 00:34:48,780 --> 00:34:51,560 będzie w stanie stwierdzić, że w pamięci i zmienić jej wartość. 853 00:34:51,560 --> 00:34:53,980 854 00:34:53,980 --> 00:34:59,580 >> Więc i tam mam że nie jest już int. 855 00:34:59,580 --> 00:35:00,882 jest int gwiazda. 856 00:35:00,882 --> 00:35:02,090 Jest to wskaźnik do liczby całkowitej. 857 00:35:02,090 --> 00:35:03,790 858 00:35:03,790 --> 00:35:07,310 A potem, ponieważ olewam zająć się tutaj, a następnie to, co robię 859 00:35:07,310 --> 00:35:10,530 nie jest równy 5, ponieważ trzyma adres. 860 00:35:10,530 --> 00:35:16,710 Więc to, co chcę zrobić, to pójść tam i aktualizować zawartość tego adresu 861 00:35:16,710 --> 00:35:18,305 z 5. 862 00:35:18,305 --> 00:35:21,130 >> OK, więc chodźmy przez wszystkie linie jednego po drugim. 863 00:35:21,130 --> 00:35:22,410 864 00:35:22,410 --> 00:35:26,024 Więc kiedy zaczynam tutaj, jeszcze N / A, N / N / 865 00:35:26,024 --> 00:35:28,440 za wszystko w pierwszym linia, bo naprawdę nie mam 866 00:35:28,440 --> 00:35:29,390 zadeklarował jeszcze rzeczy. 867 00:35:29,390 --> 00:35:30,980 868 00:35:30,980 --> 00:35:35,110 A potem druga linia, mam x równa się trzy. 869 00:35:35,110 --> 00:35:38,020 Int gwiazda nie istnieją, samo, jak wcześniej. 870 00:35:38,020 --> 00:35:39,160 871 00:35:39,160 --> 00:35:40,640 >> Teraz robi się ciekawie. 872 00:35:40,640 --> 00:35:42,300 Więc mam zamiar przekazać. 873 00:35:42,300 --> 00:35:45,720 I załóżmy, że adres x jest 12 w systemie szesnastkowym. 874 00:35:45,720 --> 00:35:46,880 875 00:35:46,880 --> 00:35:48,420 Załóżmy po prostu to. 876 00:35:48,420 --> 00:35:49,221 Zrobiłem to. 877 00:35:49,221 --> 00:35:51,680 878 00:35:51,680 --> 00:35:53,500 Więc co ja tu jest przechodząc do pięciu. 879 00:35:53,500 --> 00:35:54,460 Olewam 12. 880 00:35:54,460 --> 00:35:56,390 881 00:35:56,390 --> 00:35:58,610 >> Więc jaką wartość ma mieć? 882 00:35:58,610 --> 00:36:04,785 883 00:36:04,785 --> 00:36:06,210 >> STUDENT: [niesłyszalne]. 884 00:36:06,210 --> 00:36:06,950 >> Binky: Przepraszam? 885 00:36:06,950 --> 00:36:08,145 >> STUDENT: [niesłyszalne]. 886 00:36:08,145 --> 00:36:10,520 Binky: Tak, jak do niech Zakładam, że jesteśmy tutaj, teraz. 887 00:36:10,520 --> 00:36:11,540 888 00:36:11,540 --> 00:36:12,040 Pytam. 889 00:36:12,040 --> 00:36:12,915 >> STUDENT: [niesłyszalne]. 890 00:36:12,915 --> 00:36:13,590 891 00:36:13,590 --> 00:36:14,890 >> Binky: Został on zainicjowany. 892 00:36:14,890 --> 00:36:15,860 >> STUDENT: [niesłyszalne]. 893 00:36:15,860 --> 00:36:17,985 Binky: Ponieważ minęło coś do funkcji. 894 00:36:17,985 --> 00:36:19,431 895 00:36:19,431 --> 00:36:19,930 Tak? 896 00:36:19,930 --> 00:36:20,899 >> STUDENT: Adres x. 897 00:36:20,899 --> 00:36:22,690 Binky: To będzie posiada adres x. 898 00:36:22,690 --> 00:36:25,800 I adres x jest 12, dobra. 899 00:36:25,800 --> 00:36:30,990 Więc x będzie trzech, ponieważ tak naprawdę nie zmieniło x jeszcze. 900 00:36:30,990 --> 00:36:36,700 A potem będzie 0x12, więc adres x, bo to 901 00:36:36,700 --> 00:36:38,840 co przekazywane do pięciu. 902 00:36:38,840 --> 00:36:40,940 >> A potem co się dzieje, jeśli staramy się tam? 903 00:36:40,940 --> 00:36:42,145 Co my teraz znaleźć? 904 00:36:42,145 --> 00:36:47,120 Więc jeśli próbujesz drukować gwiazda, będziemy śledzić ten adres 905 00:36:47,120 --> 00:36:48,620 i uzyskać wartość w środku. 906 00:36:48,620 --> 00:36:50,470 I wartość jest po prostu sama wartość, x 907 00:36:50,470 --> 00:36:53,980 ma bo to Adres x, który będzie 3. 908 00:36:53,980 --> 00:36:55,440 909 00:36:55,440 --> 00:36:56,930 Czy jesteśmy dobrze? 910 00:36:56,930 --> 00:36:59,990 >> OK, a następnie teraz, faktycznie tam. 911 00:36:59,990 --> 00:37:05,510 I aktualizujemy co W tym adresem 12. 912 00:37:05,510 --> 00:37:07,390 Robimy to 5. 913 00:37:07,390 --> 00:37:10,560 Więc teraz obaj x i gwiazda są 5. 914 00:37:10,560 --> 00:37:13,170 915 00:37:13,170 --> 00:37:13,680 >> Dlaczego tak jest? 916 00:37:13,680 --> 00:37:17,070 Ponieważ adres x jest 12. 917 00:37:17,070 --> 00:37:20,920 I 12, jak również jej wartości. 918 00:37:20,920 --> 00:37:23,780 Więc jeśli kierujemy 12, jesteśmy po prostu będzie znaleźć x. 919 00:37:23,780 --> 00:37:27,400 Więc co robimy z gwiazda będzie się działo 920 00:37:27,400 --> 00:37:30,790 x, ponieważ zawiera adres x. 921 00:37:30,790 --> 00:37:31,918 922 00:37:31,918 --> 00:37:32,418 OK? 923 00:37:32,418 --> 00:37:34,090 924 00:37:34,090 --> 00:37:37,750 >> I to jest jak sedno poprawki. 925 00:37:37,750 --> 00:37:41,500 Teraz jesteśmy w stanie, z do pięciu, w rzeczywistości 926 00:37:41,500 --> 00:37:43,840 Pamięć dostępu, który mieszkał w głównym. 927 00:37:43,840 --> 00:37:47,980 Więc ta pamięć nie mieszka w celu pięć, jak wcześniej, ten adres 12. 928 00:37:47,980 --> 00:37:50,980 I udało nam się tam i zmienić jego wartość do 5. 929 00:37:50,980 --> 00:37:53,990 >> A potem, gdy wrócimy, zapominamy o. 930 00:37:53,990 --> 00:37:55,720 Zapominamy o star. 931 00:37:55,720 --> 00:37:57,020 I x jest jeszcze pięć. 932 00:37:57,020 --> 00:37:58,327 933 00:37:58,327 --> 00:38:00,160 Więc jeśli chcesz zaimplementować funkcję wymiany, 934 00:38:00,160 --> 00:38:05,010 byłoby po prostu zrobić dokładnie to samo, chyba trzeba int gwiazdy tutaj, 935 00:38:05,010 --> 00:38:06,140 i tak dalej, i tak dalej. 936 00:38:06,140 --> 00:38:06,976 OK? 937 00:38:06,976 --> 00:38:07,475 Czy jesteśmy dobrze? 938 00:38:07,475 --> 00:38:09,860 939 00:38:09,860 --> 00:38:10,610 Fajne. 940 00:38:10,610 --> 00:38:12,410 >> Więc arytmetyki wskaźników. 941 00:38:12,410 --> 00:38:13,960 Jest to nieco trudne temat. 942 00:38:13,960 --> 00:38:16,554 Tak więc okazuje się, że Wskaźniki są tylko liczby całkowite. 943 00:38:16,554 --> 00:38:17,970 Można myśleć o nich jako liczby całkowite. 944 00:38:17,970 --> 00:38:21,080 Bo w pamięci, jak masz Adres pamięci, zero, jeden, dwa, trzy, 945 00:38:21,080 --> 00:38:21,900 cztery, pięć. 946 00:38:21,900 --> 00:38:23,900 Możemy więc podsumować adresów pamięci. 947 00:38:23,900 --> 00:38:27,230 >> I to jest zwykle to, co robisz, gdy jesteś w i tablicy, na przykład. 948 00:38:27,230 --> 00:38:30,540 Tablica jest jak przyległe blok pamięci, z dużą ilością znaków, 949 00:38:30,540 --> 00:38:31,840 na przykład wiele int. 950 00:38:31,840 --> 00:38:34,420 Więc jeśli chcesz, aby przejść do Drugi int lub trzecim int, 951 00:38:34,420 --> 00:38:37,830 Podsumowując można tylko coś pierwszy adres, i masz zamiar się tam dostać. 952 00:38:37,830 --> 00:38:39,620 Więc to jest bardzo przydatne do tego. 953 00:38:39,620 --> 00:38:41,850 >> A co do utrzymania pamiętać jednak to, 954 00:38:41,850 --> 00:38:45,140 że to nie jest tak jak normalny w sensie arytmetyczna 955 00:38:45,140 --> 00:38:50,304 że jeśli masz do czynienia z, powiedzmy, int gwiazda, i dodać 1 do niego, 956 00:38:50,304 --> 00:38:52,220 wtedy nie będziesz dodać 1 do adresu, 957 00:38:52,220 --> 00:38:53,950 masz zamiar dodać 4 do adresu. 958 00:38:53,950 --> 00:38:55,030 959 00:38:55,030 --> 00:38:56,670 Ponieważ int jest 4 bajty. 960 00:38:56,670 --> 00:38:57,720 961 00:38:57,720 --> 00:38:59,540 >> Tak to jest jak chodzenie na tablicy. 962 00:38:59,540 --> 00:39:05,260 Jeśli mamy tablicę i wiele int Następnie staramy się przejść do drugiej, 963 00:39:05,260 --> 00:39:08,790 to w zasadzie tylko zsumowanie adres pierwszego plus 1. 964 00:39:08,790 --> 00:39:10,040 965 00:39:10,040 --> 00:39:13,425 Ale to nie być: po prostu powiedzmy, że adres pierwszego jest 4. 966 00:39:13,425 --> 00:39:14,560 967 00:39:14,560 --> 00:39:16,250 Tutaj, w niniejszym przypadku. 968 00:39:16,250 --> 00:39:19,780 969 00:39:19,780 --> 00:39:22,850 A jeśli suma, więc jest to, co się dzieje. 970 00:39:22,850 --> 00:39:23,530 Mamy int. 971 00:39:23,530 --> 00:39:25,640 Int x równa się pięć. 972 00:39:25,640 --> 00:39:26,950 X ma wartość 5. 973 00:39:26,950 --> 00:39:31,240 I zainicjować ten wskaźnik, int y int gwiazda y równa adres x. 974 00:39:31,240 --> 00:39:33,660 >> Załóżmy, że adres x 4. 975 00:39:33,660 --> 00:39:36,960 Co się wydarzy teraz jeśli suma dodać 1 do r? 976 00:39:36,960 --> 00:39:39,110 977 00:39:39,110 --> 00:39:44,790 To będzie naprawdę suma 4, a nie tylko jeden. 978 00:39:44,790 --> 00:39:50,920 Więc mogę dodać jedno, ale to rzeczywiście dodane 4, ponieważ komputer Smart. 979 00:39:50,920 --> 00:39:55,275 Więc to będzie rzeczywiście dodać przez I razy Wielkość rodzaju wskaźnika. 980 00:39:55,275 --> 00:39:56,340 981 00:39:56,340 --> 00:39:56,840 OK? 982 00:39:56,840 --> 00:39:58,030 983 00:39:58,030 --> 00:40:02,440 >> Tak więc, jeśli to było char np gdyby to było gwiazdą char y, 984 00:40:02,440 --> 00:40:07,141 a jeśli dodać 1 to ten będzie być 5, ponieważ char jest długa 1 bajt. 985 00:40:07,141 --> 00:40:07,640 Dobry? 986 00:40:07,640 --> 00:40:10,560 987 00:40:10,560 --> 00:40:13,190 >> I wreszcie dotarliśmy do wskaźniki i tablice. 988 00:40:13,190 --> 00:40:16,451 Okazuje się, że za każdym razem, masz do czynienia z tablicy, 989 00:40:16,451 --> 00:40:18,075 jesteś rzeczywiście do czynienia ze wskaźnikiem. 990 00:40:18,075 --> 00:40:19,720 991 00:40:19,720 --> 00:40:24,777 Bardzo ładne koncepcyjne powodem jest to, że tablice są bardzo duże. 992 00:40:24,777 --> 00:40:27,360 Więc pamiętaj, że powiedziałem, że za każdym razem przejść rzeczy wokół, 993 00:40:27,360 --> 00:40:29,097 skopiować wszystko. 994 00:40:29,097 --> 00:40:31,180 Więc jeśli masz tablicę to jest naprawdę duży, 995 00:40:31,180 --> 00:40:32,990 naprawdę nie chcę za każdym razem, skopiować wszystko 996 00:40:32,990 --> 00:40:35,710 przekazać ją wokół do innego funkcja, bo to jest po prostu 997 00:40:35,710 --> 00:40:37,190 ogromne ilości pracy. 998 00:40:37,190 --> 00:40:39,710 Więc co można zrobić, to tylko przeszłość adres pierwszego bajta. 999 00:40:39,710 --> 00:40:40,969 1000 00:40:40,969 --> 00:40:44,010 I wtedy funkcja będzie miał dostęp do wszystkich elementów w tej tablicy. 1001 00:40:44,010 --> 00:40:48,670 Więc przeszedł szereg jego adres, tak adres pierwszego bajtu. 1002 00:40:48,670 --> 00:40:53,010 >> Jeśli więc zadeklarować int Tablica 3, tutaj, wiemy 1003 00:40:53,010 --> 00:40:57,470 sposób uzyskiwania dostępu do pierwszego elementu używając notacji nawiasu. 1004 00:40:57,470 --> 00:41:02,410 Jeśli pamiętasz wspornik zapis, wspornik tablicy 0 jest równa 1. 1005 00:41:02,410 --> 00:41:06,330 Cóż, będzie to dokładnie samo, jak tylko tam pojechać i umieścić jeden. 1006 00:41:06,330 --> 00:41:07,370 1007 00:41:07,370 --> 00:41:09,110 OK, jest dokładnie to samo. 1008 00:41:09,110 --> 00:41:13,010 Więc wspornika w zapisie tutaj będzie taka sama jak ta linii. 1009 00:41:13,010 --> 00:41:18,600 >> I wiecie co wspornik notacji do wspornika tablicy 1 będzie? 1010 00:41:18,600 --> 00:41:20,440 Będzie to po prostu to samo, co ten. 1011 00:41:20,440 --> 00:41:22,500 Więc dodać jeden do tablicy. 1012 00:41:22,500 --> 00:41:24,370 Przenieść jeden wzdłuż w pamięci. 1013 00:41:24,370 --> 00:41:26,310 Idź tam i umieścić dwa. 1014 00:41:26,310 --> 00:41:28,050 1015 00:41:28,050 --> 00:41:28,579 OK? 1016 00:41:28,579 --> 00:41:29,870 A ta linia to samo. 1017 00:41:29,870 --> 00:41:34,860 Chcemy, aby przejść do trzeciego okno, więc tablica plus 2. 1018 00:41:34,860 --> 00:41:37,465 Idź tam i umieścić trzy. 1019 00:41:37,465 --> 00:41:39,340 Tak więc w pamięci, co jest stanie się to, że jesteśmy 1020 00:41:39,340 --> 00:41:44,400 będzie mieć 1, 2 oraz 3, jako trzy elementy tej tablicy. 1021 00:41:44,400 --> 00:41:46,970 >> Mogliśmy zrobić to za pomocą nasz znajomy zapis wspornik. 1022 00:41:46,970 --> 00:41:49,410 Chcę tylko wiedzieć, chłopaki że są one tym samym. 1023 00:41:49,410 --> 00:41:50,530 1024 00:41:50,530 --> 00:41:53,010 OK, pytania o to? 1025 00:41:53,010 --> 00:41:56,115 1026 00:41:56,115 --> 00:41:56,615 Nicea. 1027 00:41:56,615 --> 00:41:57,990 1028 00:41:57,990 --> 00:41:59,880 Teraz mam zamiar oddać go do Hannah, 1029 00:41:59,880 --> 00:42:00,330 >> HANNAH: Yay, Yee-haw. 1030 00:42:00,330 --> 00:42:02,246 >> Binky: Mówiąc o Pamięć i artykuł rzeczy. 1031 00:42:02,246 --> 00:42:06,554 [APPLAUSE] 1032 00:42:06,554 --> 00:42:10,150 >> HANNAH: Cześć, fajnie, więc jesteśmy Porozmawiamy trochę więcej 1033 00:42:10,150 --> 00:42:13,090 o pamięci, która po prostu adresowane za pomocą wskaźników. 1034 00:42:13,090 --> 00:42:16,060 Tak więc istnieją dwa główne części pamięć, że jesteśmy zainteresowani. 1035 00:42:16,060 --> 00:42:18,830 Mamy stos, który rośnie do dna, i sterty, która 1036 00:42:18,830 --> 00:42:20,600 zachodzi od góry. 1037 00:42:20,600 --> 00:42:24,690 A stos będzie się trzymać wszystkich naszych zmiennych instancji. 1038 00:42:24,690 --> 00:42:28,860 Tak więc każda funkcja nazywa się dostaje własne małe ramki na stosie. 1039 00:42:28,860 --> 00:42:32,160 Tak Gabe wspomniano wcześniej, jeśli ponownie i ponownie wywołać funkcję, 1040 00:42:32,160 --> 00:42:34,180 będziemy układać rzeczy w górę na stosie. 1041 00:42:34,180 --> 00:42:35,220 1042 00:42:35,220 --> 00:42:38,570 >> I podobnie, kupa, który zaczyna się w górnej 1043 00:42:38,570 --> 00:42:42,660 będzie posiadać wszystkie pamięci że dynamicznie przydzielać. 1044 00:42:42,660 --> 00:42:45,110 I tak jak my dynamicznie przydzielić pamięci, 1045 00:42:45,110 --> 00:42:47,580 będzie zejść w kierunku dna. 1046 00:42:47,580 --> 00:42:51,340 Kilka rzeczy, aby mieć świadomość, kiedy używamy stosu i sterty, 1047 00:42:51,340 --> 00:42:55,200 ze stosu, jeśli mamy zbyt many-- niech say-- wywołań cyklicznych, 1048 00:42:55,200 --> 00:42:58,392 a my ponownie wywołanie funkcji, i znowu, i znowu, i znowu, 1049 00:42:58,392 --> 00:43:00,350 i to układanie się, układania, układanie się. 1050 00:43:00,350 --> 00:43:01,570 I to będzie rozbić się hałdy. 1051 00:43:01,570 --> 00:43:03,040 Jedziemy do wyczerpania pamięci. 1052 00:43:03,040 --> 00:43:05,100 To będzie powodować Problemem dla komputera. 1053 00:43:05,100 --> 00:43:06,770 I to się nazywa przepełnienie stosu. 1054 00:43:06,770 --> 00:43:09,728 Więc to na pewno coś ci powinni być świadomi i starają się unikać. 1055 00:43:09,728 --> 00:43:10,228 1056 00:43:10,228 --> 00:43:14,050 A kupa, trzeba pamiętać aby przypadkowo nie wyciek pamięci. 1057 00:43:14,050 --> 00:43:17,950 Za każdym razem używasz malloc, nie zapomnij zwolnić tę pamięć. 1058 00:43:17,950 --> 00:43:20,040 W przeciwnym wypadku będziesz tylko być na stercie zmarnowany, 1059 00:43:20,040 --> 00:43:23,230 a komputer nie będzie wiedział, że jest do korzystania z tej pamięci. 1060 00:43:23,230 --> 00:43:25,810 Więc te kilka rzeczy być bardzo ostrożnym z po 1061 00:43:25,810 --> 00:43:28,580 masz do czynienia z stosu i sterty. 1062 00:43:28,580 --> 00:43:30,412 Wszelkie pytania z tym? 1063 00:43:30,412 --> 00:43:31,304 Niesamowite. 1064 00:43:31,304 --> 00:43:31,900 >> OK, fajnie. 1065 00:43:31,900 --> 00:43:32,940 1066 00:43:32,940 --> 00:43:36,810 Więc tego rodzaju ma to samo Pomysł jak przepełnienie stosu, gdzie 1067 00:43:36,810 --> 00:43:39,850 jedziemy dalej Granice tego, co pamięć 1068 00:43:39,850 --> 00:43:41,960 jest, że powinniśmy być w stanie wykorzystać. 1069 00:43:41,960 --> 00:43:45,077 Więc weź, na przykład, bufor, albo może po prostu myśleć o tym jako tablica. 1070 00:43:45,077 --> 00:43:47,660 I powiedział: OK, mamy zamiar utworzyć tę miłą tablicę. 1071 00:43:47,660 --> 00:43:49,140 To będzie ciąg. 1072 00:43:49,140 --> 00:43:50,630 Albo to będzie przechowywać znaki. 1073 00:43:50,630 --> 00:43:51,720 A to po prostu się przywitać. 1074 00:43:51,720 --> 00:43:52,678 I to jest nieokreślona. 1075 00:43:52,678 --> 00:43:53,990 To wszystko. 1076 00:43:53,990 --> 00:43:58,240 >> Ale gdybym był ktoś zły i chciał zrobić coś złego z tej tablicy, co 1077 00:43:58,240 --> 00:44:02,310 Mogę zrobić, to spróbować napisać poza koniec ciągu. 1078 00:44:02,310 --> 00:44:04,490 A jak zobaczysz, jeśli Piszę tyle daleko, 1079 00:44:04,490 --> 00:44:06,980 Może faktycznie wpływać adres zwrotny. 1080 00:44:06,980 --> 00:44:09,530 A jeśli zacznę mieć wpływ adres zwrotny, 1081 00:44:09,530 --> 00:44:11,730 I mieć wpływ na program rzeczywiście działa. 1082 00:44:11,730 --> 00:44:15,900 I zamiast wracać, ci wiedzieć, jak szczęśliwy ciąg witam, ja 1083 00:44:15,900 --> 00:44:19,460 może zrobić coś złego, jak udać się do gdzieś w komputerze, nadal 1084 00:44:19,460 --> 00:44:22,146 pamięci, zmienić go, co chcę zrobić. 1085 00:44:22,146 --> 00:44:25,020 Więc to, co to będzie wyglądać to jeśli tylko trochę go wypełnić 1086 00:44:25,020 --> 00:44:27,400 z losowej wartości śmieci, w tym przypadku po prostu. 1087 00:44:27,400 --> 00:44:30,490 I wtedy, kiedy rzeczywiście dostał się do adresu pamięci, 1088 00:44:30,490 --> 00:44:33,740 Zacząłem go czymś napełniania że zrobił to, co chciałem zrobić. 1089 00:44:33,740 --> 00:44:34,952 1090 00:44:34,952 --> 00:44:36,410 Wszelkie pytania o przepełnienie bufora? 1091 00:44:36,410 --> 00:44:38,450 1092 00:44:38,450 --> 00:44:40,730 Niesamowite, latające tuż przez tych rzeczy. 1093 00:44:40,730 --> 00:44:43,530 >> OK, więc rozmawialiśmy dużo o wskaźnik z Gabe. 1094 00:44:43,530 --> 00:44:45,790 Jak mamy rzeczywiście uzyskać wskaźnik? 1095 00:44:45,790 --> 00:44:48,070 W jaki sposób możemy uzyskać adres w pamięci? 1096 00:44:48,070 --> 00:44:51,040 Cóż, możemy wykorzystać ten miły wywołanie funkcji malloc, która 1097 00:44:51,040 --> 00:44:53,370 dostanie Mały kawałek pamięci, 1098 00:44:53,370 --> 00:44:55,480 w szczególności w kupa, jak mówiliśmy, 1099 00:44:55,480 --> 00:44:59,780 i to będzie oddać wskaźnika do tego adresu w pamięci. 1100 00:44:59,780 --> 00:45:01,950 A argument, że dać do malloc 1101 00:45:01,950 --> 00:45:04,280 to ile miejsca w pamięci chcemy. 1102 00:45:04,280 --> 00:45:06,100 >> Więc widać, rozmiar w bajcie. 1103 00:45:06,100 --> 00:45:08,670 Powiedzmy, na przykład, lub w rzeczywistości, w tym przykładzie, 1104 00:45:08,670 --> 00:45:12,040 mamy tyle przeznaczyć miejsca dla 10 liczb całkowitych. 1105 00:45:12,040 --> 00:45:15,640 Więc chyba to, co będziemy chcieli umieścić tutaj jest tablicą 10 liczb całkowitych. 1106 00:45:15,640 --> 00:45:19,641 Więc dajemy mu rozmiar int, który Dowiedzieliśmy się, jak wiele bajtów? 1107 00:45:19,641 --> 00:45:20,140 STUDENT: 4. 1108 00:45:20,140 --> 00:45:22,920 HANNAH: 4, piękny, i chce 10 osób w rzędzie, 1109 00:45:22,920 --> 00:45:28,050 tak, że mamy wystarczająco dużo miejsca do przechowywać wszystkie 10 liczby całkowite, w tym przypadku. 1110 00:45:28,050 --> 00:45:31,290 Coś bardzo ważne, za każdym razem wywołać malloc, 1111 00:45:31,290 --> 00:45:32,880 trzeba sprawdzić, null. 1112 00:45:32,880 --> 00:45:37,310 Jeśli nie sprawdzić, null, dobrze, malloc, jeśli zabraknie miejsca 1113 00:45:37,310 --> 00:45:40,400 i nie może dać każdy więcej pamięci, zwróci wartość null. 1114 00:45:40,400 --> 00:45:42,060 1115 00:45:42,060 --> 00:45:45,630 Tak więc, jeśli nie sprawdzić, malloc może zwróci null. 1116 00:45:45,630 --> 00:45:51,265 I wtedy, gdy staramy się wyłuskanie wskaźnika null, 1117 00:45:51,265 --> 00:45:54,960 mamy zamiar uzyskać winy segmentacji, którego będziemy mówić o teraz. 1118 00:45:54,960 --> 00:45:56,150 1119 00:45:56,150 --> 00:45:56,650 Niesamowite. 1120 00:45:56,650 --> 00:45:58,300 >> OK, pytania z malloc? 1121 00:45:58,300 --> 00:46:00,044 1122 00:46:00,044 --> 00:46:00,544 Tak? 1123 00:46:00,544 --> 00:46:05,460 >> STUDENT: Czy sprawdzanie pusty [Niesłyszalne] nie rób tego na quiz? 1124 00:46:05,460 --> 00:46:08,100 >> HANNAH: Oczywiście, pytanie to matter-- w quizie, 1125 00:46:08,100 --> 00:46:10,420 dostaniesz punkty wyłączyć, jeśli nie sprawdzić dla wartości null? 1126 00:46:10,420 --> 00:46:12,794 Tak, dostaniesz punkty off jeśli nie sprawdzić, null. 1127 00:46:12,794 --> 00:46:16,030 Za każdym razem wywołać malloc, zarówno na Quiz i twoi psets i w prawdziwym życiu, 1128 00:46:16,030 --> 00:46:17,155 trzeba sprawdzić, null. 1129 00:46:17,155 --> 00:46:18,330 Dobre pytanie. 1130 00:46:18,330 --> 00:46:19,689 >> GABE: Co, jeśli nie uwolni? 1131 00:46:19,689 --> 00:46:21,730 HANNAH: Gabe chce wiedzieć co jeśli nie za darmo. 1132 00:46:21,730 --> 00:46:25,030 Wtedy będziemy mieć wyciek pamięci w naszym sterty. 1133 00:46:25,030 --> 00:46:26,140 Jeszcze jakieś pytania? 1134 00:46:26,140 --> 00:46:27,550 Tak? 1135 00:46:27,550 --> 00:46:30,120 >> STUDENT: Czy you-- przejść Przepełnienie bufora bardzo szybko ponownie? 1136 00:46:30,120 --> 00:46:30,530 >> HANNAH: Jasne. 1137 00:46:30,530 --> 00:46:33,071 Pytanie możemy przejść nad Naprawdę szybkie przepełnienie bufora. 1138 00:46:33,071 --> 00:46:35,050 Wróćmy do tych preparatów. 1139 00:46:35,050 --> 00:46:37,430 Więc bufor, można po prostu myśleć o tym, jak tablicy, prawda? 1140 00:46:37,430 --> 00:46:39,360 Masz trochę miejsca w pamięci. 1141 00:46:39,360 --> 00:46:43,580 A kiedy po raz pierwszy tworzymy tablicę, wiemy, że tablice mają stałe rozmiary, 1142 00:46:43,580 --> 00:46:45,470 lub naszego bufor ma określony rozmiar. 1143 00:46:45,470 --> 00:46:51,360 >> Więc powiedzmy, że w tym przypadku mamy tylko wystarczająco dużo miejsca, aby napisać ciąg komentarzy. 1144 00:46:51,360 --> 00:46:57,340 Jeśli mijamy, że granica, jeśli mijamy co nasza tablica powiedzieliśmy może posiadać, 1145 00:46:57,340 --> 00:46:59,780 moglibyśmy zacząć pisanie do pamięci 1146 00:46:59,780 --> 00:47:01,780 że komputer nie robi chce nam napisać do. 1147 00:47:01,780 --> 00:47:02,810 1148 00:47:02,810 --> 00:47:05,580 A konkretnie, czy trafiliśmy coś w zamian 1149 00:47:05,580 --> 00:47:08,700 adres funkcji, która, jak każdy inny element pamięci 1150 00:47:08,700 --> 00:47:11,420 jest po prostu gdzieś w komputer, można rzeczywiście 1151 00:47:11,420 --> 00:47:14,080 to zmienić i zacząć robić złe rzeczy. 1152 00:47:14,080 --> 00:47:15,272 Odpowiedź na Twoje pytanie? 1153 00:47:15,272 --> 00:47:16,230 Niesamowite, coś jeszcze? 1154 00:47:16,230 --> 00:47:17,466 Tak? 1155 00:47:17,466 --> 00:47:21,948 >> UCZEŃ: Tak stos [niesłyszalne] ci powiedział przejść od dołu w górę. 1156 00:47:21,948 --> 00:47:25,434 W zasięgu stosu, nie Pamięć iść z, jak, 1157 00:47:25,434 --> 00:47:27,230 z góry na dół dotyczące każdej przerwie? 1158 00:47:27,230 --> 00:47:28,646 1159 00:47:28,646 --> 00:47:32,100 >> HANNAH: Jak you-- odroczyć do Roba na ten jeden. 1160 00:47:32,100 --> 00:47:35,370 1161 00:47:35,370 --> 00:47:38,213 >> ROB: będzie rosnąć w tym samym kierunek jak stos rośnie. 1162 00:47:38,213 --> 00:47:38,712 HANNAH: OK. 1163 00:47:38,712 --> 00:47:40,967 ROB: Więc ja się mylić. 1164 00:47:40,967 --> 00:47:42,331 To ma być abstrakcją. 1165 00:47:42,331 --> 00:47:42,831 HANNAH: OK. 1166 00:47:42,831 --> 00:47:44,000 ROB: To prawda. 1167 00:47:44,000 --> 00:47:49,420 Tak więc, jeśli stos rośnie w górę, a następnie generally-- go 1168 00:47:49,420 --> 00:47:52,380 nie musi tak być. ale można zadeklarować int x. 1169 00:47:52,380 --> 00:47:54,120 Następnie zadeklarować int y. 1170 00:47:54,120 --> 00:47:57,300 Następnie int x będzie na ogół niższe niż na stosie int y. 1171 00:47:57,300 --> 00:47:59,300 Ale to po prostu fakt. 1172 00:47:59,300 --> 00:48:02,410 To nie jest tak ważną rzeczą nasion. 1173 00:48:02,410 --> 00:48:06,800 >> ROB: Więc znowu była tylko kwestia co się dzieje, każda klatka buduje. 1174 00:48:06,800 --> 00:48:08,960 Tak więc każda funkcja dostaje Mały kawałek stosu. 1175 00:48:08,960 --> 00:48:13,030 A jak idziesz do góry, w terminie, który mały kawałek, w tym ramy, 1176 00:48:13,030 --> 00:48:16,710 powiemy, że zmienne w tym ramy również przenieść się. 1177 00:48:16,710 --> 00:48:17,473 Pytanie? 1178 00:48:17,473 --> 00:48:18,688 >> ROB: Wystarczy być na mikrofonie. 1179 00:48:18,688 --> 00:48:19,396 HANNAH: Oh, tak. 1180 00:48:19,396 --> 00:48:20,440 ROB: będę mówić do Ciebie. 1181 00:48:20,440 --> 00:48:21,410 HANNAH: Oh, tak, OK. 1182 00:48:21,410 --> 00:48:24,150 ROB: Wyjątkiem jest dla tablic i strukturach, 1183 00:48:24,150 --> 00:48:27,470 gdzie macierze, niższe indeks w tablicy, 1184 00:48:27,470 --> 00:48:29,930 i w strukturach na wyższe pola w strukturach 1185 00:48:29,930 --> 00:48:35,040 są na pewno w niższych adresów później niż wartość w tablicy. 1186 00:48:35,040 --> 00:48:36,720 Więc te są gwarantowane. 1187 00:48:36,720 --> 00:48:40,310 Ale w jakieś szczególne zmienne, jak int x, int y wewnątrz funkcji, 1188 00:48:40,310 --> 00:48:43,030 nie ma potrzeby związek między ich adresami. 1189 00:48:43,030 --> 00:48:44,882 1190 00:48:44,882 --> 00:48:46,340 HANNAH: Kolejne pytanie tutaj? 1191 00:48:46,340 --> 00:48:51,620 STUDENT: Więc w buforze przepływu, tylko przepełnienia buforu 1192 00:48:51,620 --> 00:48:54,980 Gdy tylko stało nie, jak, przypisany 1193 00:48:54,980 --> 00:49:01,056 Ilość macierzy że wtedy jest większa? 1194 00:49:01,056 --> 00:49:03,230 Jak, można? 1195 00:49:03,230 --> 00:49:05,435 Więc jeśli pytasz o coś z user-- 1196 00:49:05,435 --> 00:49:06,018 >> HANNAH: Mm-hm. 1197 00:49:06,018 --> 00:49:08,600 STUDENT: mogą przymusowo dać coś w zamian 1198 00:49:08,600 --> 00:49:11,777 to jest większy niż cokolwiek ty przeznaczone na nich? 1199 00:49:11,777 --> 00:49:13,610 HANNAH: Jasne, tak Pytanie było w zasadzie, 1200 00:49:13,610 --> 00:49:16,217 może dać użytkownikowi więcej niż prosisz? 1201 00:49:16,217 --> 00:49:16,800 UCZEŃ: Tak. 1202 00:49:16,800 --> 00:49:18,480 HANNAH: Cóż, można zapobiec użytkownik z robić. 1203 00:49:18,480 --> 00:49:21,350 Można wyraźnie powiedzieć nie daj mi więcej, niż przez bajtów x ilość 1204 00:49:21,350 --> 00:49:24,330 Mam tylko wam pokój dla x liczba bajtów, x ilość znaków. 1205 00:49:24,330 --> 00:49:25,700 Więc to jest coś, co chcesz, aby zapobiec. 1206 00:49:25,700 --> 00:49:26,199 Tak? 1207 00:49:26,199 --> 00:49:30,270 Co jest różnica pomiędzy przepełnienie stosu i przepełnienia buforu? 1208 00:49:30,270 --> 00:49:32,140 >> HANNAH: OK, więc stos overflow-- och, co 1209 00:49:32,140 --> 00:49:34,790 jest różnica między stosu Przepełnienie i przepełnienie bufora? 1210 00:49:34,790 --> 00:49:37,581 Dlatego chcemy, aby myśleć o przepełnienie stosu dzieje się, kiedy jesteśmy rzeczywiście 1211 00:49:37,581 --> 00:49:39,530 układania tych wywołań funkcji. 1212 00:49:39,530 --> 00:49:42,991 Powiedzmy, że masz funkcję rekurencyjną, ponieważ wiemy, że za każdym razem 1213 00:49:42,991 --> 00:49:45,240 wywołać funkcję, to dostaje własnej ramki na stosie. 1214 00:49:45,240 --> 00:49:47,950 >> Więc stos zbyt wysokie, a następnie zaczniemy przelewać. 1215 00:49:47,950 --> 00:49:50,530 I używamy zbyt dużo pamięci, I nie mamy nigdzie w lewo. 1216 00:49:50,530 --> 00:49:51,590 Dostajemy ten błąd. 1217 00:49:51,590 --> 00:49:53,930 >> Przepełnienie bufora jest w ramach programu. 1218 00:49:53,930 --> 00:49:57,180 Chcemy, może nie koniecznie zabraknie pamięci w taki sam sposób 1219 00:49:57,180 --> 00:50:00,080 że moglibyśmy jeśli mamy układania aż tak wielu wywołań funkcji, 1220 00:50:00,080 --> 00:50:04,540 ale piszemy obok pamięci że wiemy, że możemy korzystać. 1221 00:50:04,540 --> 00:50:06,170 A to pozwala nam robić złe rzeczy. 1222 00:50:06,170 --> 00:50:08,060 1223 00:50:08,060 --> 00:50:08,560 Tak? 1224 00:50:08,560 --> 00:50:10,950 >> ROB: Tak, możesz aby tylko powtórzyć to, 1225 00:50:10,950 --> 00:50:12,699 ale można też myśleć z przepełnienie stosu 1226 00:50:12,699 --> 00:50:15,374 tak jak szczególnego rodzaju z przepełnienia bufora. 1227 00:50:15,374 --> 00:50:17,665 Albo po prostu myśleć o stos jako naprawdę duży bufor. 1228 00:50:17,665 --> 00:50:20,724 Wtedy, kiedy przepełnienia stosu, to trochę jak przepełnienia bufora. 1229 00:50:20,724 --> 00:50:23,390 Ale przepełnienie stosu jest tylko specyficzny termin używany, gdy stos 1230 00:50:23,390 --> 00:50:24,310 Sam przelewa. 1231 00:50:24,310 --> 00:50:27,500 >> HANNAH: Tak, tak, aby powtórzyć dla filmu, 1232 00:50:27,500 --> 00:50:31,756 to można myśleć o przepełnienie stosu jako specyficzny typ przepełnienia bufora. 1233 00:50:31,756 --> 00:50:33,040 Cool? 1234 00:50:33,040 --> 00:50:34,562 Jakieś pytania, zanim udamy się? 1235 00:50:34,562 --> 00:50:35,380 1236 00:50:35,380 --> 00:50:35,880 Niesamowite. 1237 00:50:35,880 --> 00:50:37,130 1238 00:50:37,130 --> 00:50:39,727 >> OK, fajnie, więc porozmawiajmy o pewne wspólne komunikaty o błędach. 1239 00:50:39,727 --> 00:50:42,060 To jest coś, co ma pokazał się na wielu konkursach, 1240 00:50:42,060 --> 00:50:44,740 więc coś, co jest warte biorąc drugi przyjrzeć. 1241 00:50:44,740 --> 00:50:46,860 Jestem pewien, że już napotkał co najmniej niektóre z tych 1242 00:50:46,860 --> 00:50:48,690 jak robisz ustawia twój problem. 1243 00:50:48,690 --> 00:50:50,980 Więc upewnij się, że można mówić o nich na quiz. 1244 00:50:50,980 --> 00:50:52,990 >> Tak więc pierwszy jest Błąd segmentacji. 1245 00:50:52,990 --> 00:50:55,250 I to za każdym razem mamy próby uzyskania dostępu do pamięci 1246 00:50:55,250 --> 00:50:57,130 że nie wolno nam dostęp. 1247 00:50:57,130 --> 00:51:00,280 Więc migh widzieliście tego, Na przykład, w podgrupach. 1248 00:51:00,280 --> 00:51:03,390 W przypadku wykrycia kolizji zwróci null, a następnie 1249 00:51:03,390 --> 00:51:05,500 Próbowałem coś zrobić z tym wartość null, 1250 00:51:05,500 --> 00:51:08,147 Komputer da Ci winy segmentacji. 1251 00:51:08,147 --> 00:51:10,730 Tak jeden, ważne jest, aby zrobić, aby unikać tego 1252 00:51:10,730 --> 00:51:12,000 jest, aby zawsze sprawdzić, null. 1253 00:51:12,000 --> 00:51:13,300 1254 00:51:13,300 --> 00:51:16,180 >> Możesz również postrzegane niejawna deklaracja funkcji. 1255 00:51:16,180 --> 00:51:18,370 Więc to jest to, co się dzieje, kiedy Allison pokazałem 1256 00:51:18,370 --> 00:51:20,150 jak zrobić prototyp, prawda? 1257 00:51:20,150 --> 00:51:23,440 Więc powiedzmy, że mamy pewne Funkcja zdefiniować. 1258 00:51:23,440 --> 00:51:24,440 Powiedzmy kostkę. 1259 00:51:24,440 --> 00:51:27,120 I który przechodzi u dołu naszej funkcji, pod głównym. 1260 00:51:27,120 --> 00:51:35,205 >> Jeśli zapomnij powiedzieć o komputer kostka, gdy główny próbuje zadzwonić kostkę, 1261 00:51:35,205 --> 00:51:36,830 Komputer będzie, jak, o mój Boże. 1262 00:51:36,830 --> 00:51:38,300 Nie mam pojęcia, co to znaczy. 1263 00:51:38,300 --> 00:51:39,760 Nie wiem, co zrobić, tutaj. 1264 00:51:39,760 --> 00:51:41,594 Więc prototyp mówi nie martw się. 1265 00:51:41,594 --> 00:51:42,510 Mam zamiar powiedzieć. 1266 00:51:42,510 --> 00:51:43,132 >> To będzie pochodzić. 1267 00:51:43,132 --> 00:51:43,840 Nie krzycz na mnie. 1268 00:51:43,840 --> 00:51:46,697 Nie daj mi ukryte deklaracja funkcji. 1269 00:51:46,697 --> 00:51:49,280 Więc jeśli masz ten problem, jeden co masz zamiar chcesz zrobić 1270 00:51:49,280 --> 00:51:50,821 to upewnij się, że masz swój prototyp. 1271 00:51:50,821 --> 00:51:52,320 1272 00:51:52,320 --> 00:51:53,230 OK? 1273 00:51:53,230 --> 00:51:55,680 >> I ostatnie, ale nie najmniej, Identyfikator nierejestrowana 1274 00:51:55,680 --> 00:52:00,570 jest zasadniczo przy próbie użycia zmienne, które nie zostały uznane. 1275 00:52:00,570 --> 00:52:03,449 Więc nagle zacząć mówiąc, jak N powiększonej plus. 1276 00:52:03,449 --> 00:52:04,740 I komputer mówi co n? 1277 00:52:04,740 --> 00:52:06,660 Nigdy nie powiedział mi, n był rzeczą. 1278 00:52:06,660 --> 00:52:10,930 >> Więc jedna rzecz trzeba upewnić się, nie jest powiedzieć komputerowi, co n jest. 1279 00:52:10,930 --> 00:52:13,320 Tak na przykład, n może być liczbą całkowitą. 1280 00:52:13,320 --> 00:52:14,999 I wtedy będzie można uniknąć tego błędu. 1281 00:52:14,999 --> 00:52:16,290 Wszelkie pytania dotyczące typowych błędów? 1282 00:52:16,290 --> 00:52:17,260 Tak? 1283 00:52:17,260 --> 00:52:19,344 >> STUDENT: Dla niejawna Deklaracja funkcji, 1284 00:52:19,344 --> 00:52:22,343 może to być również, że pominięto jeden bibliotek miałeś 1285 00:52:22,343 --> 00:52:24,400 obejmujące, raczej niż prototyp? 1286 00:52:24,400 --> 00:52:26,359 >> HANNAH: Tak, tak, Pytanie było, można 1287 00:52:26,359 --> 00:52:28,650 także ten błąd, jeśli zapomniałeś to biblioteka. 1288 00:52:28,650 --> 00:52:29,085 >> UCZEŃ: Tak. 1289 00:52:29,085 --> 00:52:30,876 >> HANNAH: Absolutnie, ponieważ w ten sam sposób, 1290 00:52:30,876 --> 00:52:33,540 które chcemy umieścić nasze prototypy przed główną funkcją, 1291 00:52:33,540 --> 00:52:37,717 jeśli mamy bibliotekę, ci będą zasadniczo do obejmują prototypów 1292 00:52:37,717 --> 00:52:39,425 obejmują definicje z tych funkcji. 1293 00:52:39,425 --> 00:52:40,585 Świetne pytanie. 1294 00:52:40,585 --> 00:52:43,230 >> STUDENT: Dla segmentacji przyczepić, to, że również 1295 00:52:43,230 --> 00:52:47,350 stanie, jeśli, tak jak próbował dostępu do zmiennej 1296 00:52:47,350 --> 00:52:51,947 jak, w innym [niesłyszalne] niż zostało to zadeklarowane w? 1297 00:52:51,947 --> 00:52:54,030 HANNAH: Jasne, że tak będzie uzyskać winy segmentacji 1298 00:52:54,030 --> 00:52:56,270 jeśli próbował uzyskać dostęp zmienna poza zakresem? 1299 00:52:56,270 --> 00:52:57,104 Czy to było pytanie? 1300 00:52:57,104 --> 00:52:57,645 UCZEŃ: Tak. 1301 00:52:57,645 --> 00:52:58,430 HANNAH: Piękny. 1302 00:52:58,430 --> 00:53:01,840 Więc pewnie, masz zamiar dostać nierejestrowana błąd identyfikator zamiast. 1303 00:53:01,840 --> 00:53:04,006 Więc to po prostu powie Nie wiem co to jest. 1304 00:53:04,006 --> 00:53:04,920 1305 00:53:04,920 --> 00:53:05,920 Fajne, coś jeszcze? 1306 00:53:05,920 --> 00:53:07,744 1307 00:53:07,744 --> 00:53:08,980 Tak, OK, piękne. 1308 00:53:08,980 --> 00:53:10,330 1309 00:53:10,330 --> 00:53:12,400 >> W porządeczku, więc rekurencji. 1310 00:53:12,400 --> 00:53:15,160 Więc już wspomniałem kilka razy że możemy uzyskać przepełnienie stosu 1311 00:53:15,160 --> 00:53:17,919 dlatego, że dzwonisz naszym Funkcja rekurencyjna tak wiele razy. 1312 00:53:17,919 --> 00:53:20,210 Dostajemy wszystkie te stos Ramy, bla, bla, bla. 1313 00:53:20,210 --> 00:53:22,420 Co jeszcze jest rekurencyjna funkcja? 1314 00:53:22,420 --> 00:53:25,680 Cóż, jest funkcja rekurencyjna każda funkcja, która nazywa siebie. 1315 00:53:25,680 --> 00:53:26,820 1316 00:53:26,820 --> 00:53:30,160 >> Niektóre rzeczy być świadomy, kiedy realizują funkcję rekurencyjną, 1317 00:53:30,160 --> 00:53:31,940 Nie zapomnij podać sprawę podstawową. 1318 00:53:31,940 --> 00:53:34,010 Baza jest przypadek Punkt, w którym kończymy. 1319 00:53:34,010 --> 00:53:38,740 Tak więc, na przykład, jeśli mamy kodowania , Powiedzmy, Fibonacci rekurencyjnie, 1320 00:53:38,740 --> 00:53:43,210 Chcemy mieć pewność, że gdy mamy do lub pierwszego numeru Fibonacciego 0, 1321 00:53:43,210 --> 00:53:46,220 te dwa numery są te przypadki, bo te nie są zależne 1322 00:53:46,220 --> 00:53:47,700 na rzeczy, które przyszło wcześniej. 1323 00:53:47,700 --> 00:53:48,990 Ci mają własne wartości. 1324 00:53:48,990 --> 00:53:51,270 1325 00:53:51,270 --> 00:53:55,320 >> Niektóre plusy do rekursji, które jest Pytanie widzieliśmy w ostatnich konkursach. 1326 00:53:55,320 --> 00:53:57,930 Mogą one prowadzić do bardziej zwięzłe, elegancki kod. 1327 00:53:57,930 --> 00:54:00,510 I wiele funkcji, wiele różnych algorytmów, 1328 00:54:00,510 --> 00:54:02,350 rzeczywiście nadają się do rekursji. 1329 00:54:02,350 --> 00:54:05,510 Ich definicja może być rekurencyjnych w sobie. 1330 00:54:05,510 --> 00:54:06,980 Więc Fibonacciego jest jeden. 1331 00:54:06,980 --> 00:54:07,860 Silnia jest jednym. 1332 00:54:07,860 --> 00:54:10,480 Sortowanie przez scalanie znaczy jedno- wszystko rzeczy, które możesz patrzeć. 1333 00:54:10,480 --> 00:54:12,650 1334 00:54:12,650 --> 00:54:13,460 OK, jakieś pytania? 1335 00:54:13,460 --> 00:54:13,960 Tak? 1336 00:54:13,960 --> 00:54:15,644 1337 00:54:15,644 --> 00:54:19,612 >> STUDENT: Czy przypadek rogu podobny do przypadku bazowego? 1338 00:54:19,612 --> 00:54:22,590 Albo jest to, że dla niektórych innych rodzaj [niesłyszalne]? 1339 00:54:22,590 --> 00:54:25,170 >> HANNAH: Jasne, tak Sprawa jest any-- więc narożnik 1340 00:54:25,170 --> 00:54:27,580 Sprawa jest taka sama, jak róg przypadku podstawowym? 1341 00:54:27,580 --> 00:54:32,825 Sprawa rogu jest coś, że twój Kod może zachowywać się trochę inaczej. 1342 00:54:32,825 --> 00:54:34,450 1343 00:54:34,450 --> 00:54:38,610 Wariant podstawowy jest rodzajem związanych, w że są jak szczególnych przypadkach 1344 00:54:38,610 --> 00:54:40,240 że chcesz patrzeć. 1345 00:54:40,240 --> 00:54:43,240 Ale idea przypadku bazy jest to, że chcesz się z funkcji rekurencyjnej 1346 00:54:43,240 --> 00:54:44,870 zatrzymać w pewnym momencie. 1347 00:54:44,870 --> 00:54:46,490 Nie może utrzymać nazywająca siebie na zawsze. 1348 00:54:46,490 --> 00:54:47,781 To musi się zatrzymać w pewnym momencie. 1349 00:54:47,781 --> 00:54:49,340 1350 00:54:49,340 --> 00:54:53,460 >> ROB: Tak, często, wasze przypadki bazowe Może być przykładami zasad narożnych. 1351 00:54:53,460 --> 00:54:55,876 >> HANNAH: Prawo, fajne, cokolwiek? 1352 00:54:55,876 --> 00:54:58,732 >> STUDENT: Czy mógłbyś wyjaśnić opiera trochę więcej? 1353 00:54:58,732 --> 00:55:01,600 I nie bardzo rozumiem [Niesłyszalne] przypadki bazowe. 1354 00:55:01,600 --> 00:55:02,676 >> HANNAH: przypadków bazowych? 1355 00:55:02,676 --> 00:55:03,140 >> STUDENT: przypadki bazowe, tak. 1356 00:55:03,140 --> 00:55:03,770 >> HANNAH: O tak, na pewno. 1357 00:55:03,770 --> 00:55:04,270 Zobaczmy. 1358 00:55:04,270 --> 00:55:05,480 Czy mamy tu kredy? 1359 00:55:05,480 --> 00:55:06,690 1360 00:55:06,690 --> 00:55:07,320 Tak, my. 1361 00:55:07,320 --> 00:55:09,530 OK, więc bardzo szybko, będę Staram się pisać na tyle duże, 1362 00:55:09,530 --> 00:55:11,320 więc można zobaczyć na ekranie. 1363 00:55:11,320 --> 00:55:13,490 Porozmawiajmy o tym, naprawdę szybko, Fibonacciego. 1364 00:55:13,490 --> 00:55:15,550 Więc dam ci sekwencji Fibonacciego. 1365 00:55:15,550 --> 00:55:17,090 Możesz sprawdzić definicję. 1366 00:55:17,090 --> 00:55:26,050 >> Zasadniczo, każdy numer w kolejności jest sumą dwóch poprzednich numerów. 1367 00:55:26,050 --> 00:55:29,720 OK, więc sposób, że tylko opisane Fibonacciego, 1368 00:55:29,720 --> 00:55:31,530 słychać rekurencję, prawda? 1369 00:55:31,530 --> 00:55:35,280 Kiedy powiedziałem, że każdy numer jest Suma dwóch poprzednich liczb 1370 00:55:35,280 --> 00:55:36,420 można powiedzieć OK. 1371 00:55:36,420 --> 00:55:38,570 Cóż, n-ty Fibonacciego number-- więc niech 1372 00:55:38,570 --> 00:55:42,260 że mamy tej funkcji nazywa fib-- fib n 1373 00:55:42,260 --> 00:55:48,260 będzie równa fib n minus 1 plus-- przykro, 1374 00:55:48,260 --> 00:55:51,240 my przejściem do następnej linii ponad here-- fib n minus dwa. 1375 00:55:51,240 --> 00:55:52,790 1376 00:55:52,790 --> 00:55:56,790 >> OK, więc to działa świetnie, jeśli jesteś patrząc na przykład zero, jeden, 1377 00:55:56,790 --> 00:55:59,410 dwa, trzy, cztery, Piąty numer Fibonacciego, 1378 00:55:59,410 --> 00:56:03,561 gdzie można powiedzieć, że 5 jest równe 2 plus 3. 1379 00:56:03,561 --> 00:56:05,060 Ale co, jeśli jesteś na początku? 1380 00:56:05,060 --> 00:56:07,184 Co zrobić, jeśli jesteś po prostu uderzając te dwie pierwsze wartości? 1381 00:56:07,184 --> 00:56:08,470 1382 00:56:08,470 --> 00:56:11,330 >> Aby uzyskać ten jeden, nie można powiedzieć, dodać dwa poprzednie, 1383 00:56:11,330 --> 00:56:13,930 bo tego zera and-- nie wiem. 1384 00:56:13,930 --> 00:56:15,390 Więc w pewnym momencie musimy się zatrzymać. 1385 00:56:15,390 --> 00:56:21,250 W pewnym momencie trzeba powiedzieć, że te dwa po prostu mają własne definicje. 1386 00:56:21,250 --> 00:56:23,890 Numer 0 Fibonacciego 0. 1387 00:56:23,890 --> 00:56:26,115 I pierwszy numer Fibonacciego jest 1. 1388 00:56:26,115 --> 00:56:34,120 >> Więc sposób mogę zakodować to, że powiedziałbym, jeśli n jest mniejsza niż dwa, 1389 00:56:34,120 --> 00:56:35,130 a potem po prostu wrócić n. 1390 00:56:35,130 --> 00:56:36,494 I to będzie mój przypadek bazowy. 1391 00:56:36,494 --> 00:56:38,660 W ten sposób wiem, aby zatrzymać z funkcji rekurencyjnej. 1392 00:56:38,660 --> 00:56:40,640 1393 00:56:40,640 --> 00:56:41,410 Czy to jasne? 1394 00:56:41,410 --> 00:56:41,940 Niesamowite. 1395 00:56:41,940 --> 00:56:43,260 Wszystko inne na rekursji? 1396 00:56:43,260 --> 00:56:44,890 1397 00:56:44,890 --> 00:56:45,930 Piękny. 1398 00:56:45,930 --> 00:56:48,750 >> Niech szybko mówić o wyszukiwania i sortowania prowadzone razy. 1399 00:56:48,750 --> 00:56:52,660 A potem dam Davin niektórych czas, aby porozmawiać o przykłady kodowania. 1400 00:56:52,660 --> 00:56:56,490 Więc tutaj są głównym wyszukiwarka i rodzaju, które powinieneś wiedzieć o. 1401 00:56:56,490 --> 00:56:59,500 Guarantee-- nie mogę zagwarantować, bo nie widziałem quiz-- 1402 00:56:59,500 --> 00:57:01,940 ale pojawia się quizu po quizie po rzucić. 1403 00:57:01,940 --> 00:57:04,050 Więc na pewno korzystać z tego wykresu. 1404 00:57:04,050 --> 00:57:05,682 Jak podjąć ten wykres. 1405 00:57:05,682 --> 00:57:06,890 Umieść go na swojej ściągawki. 1406 00:57:06,890 --> 00:57:07,931 Będziesz szczęśliwy człowiek. 1407 00:57:07,931 --> 00:57:09,010 1408 00:57:09,010 --> 00:57:12,590 >> To mówi nam czasów pracy każdego tych algorytmów sortowania i wyszukiwania. 1409 00:57:12,590 --> 00:57:14,020 1410 00:57:14,020 --> 00:57:18,850 Więc wyszukiwarka liniowy, można zobaczyć przebieg czas, a sam z wyszukiwaniem binarnym. 1411 00:57:18,850 --> 00:57:21,490 Przejść nad tym, co tych algorytmów zrobić, ogólną ideę. 1412 00:57:21,490 --> 00:57:24,220 Spójrz na jakiś Pseudokod, jeśli nie kodować się. 1413 00:57:24,220 --> 00:57:25,610 1414 00:57:25,610 --> 00:57:30,380 >> Zobaczysz, że sortowanie bąbelkowe ma górny związana w najgorszym przypadku n kwadratu. 1415 00:57:30,380 --> 00:57:31,490 1416 00:57:31,490 --> 00:57:34,680 Jeśli więc nasza tablica była całkowicie wstecz przed chcieliśmy go rozwiązać, 1417 00:57:34,680 --> 00:57:37,090 moglibyśmy powiedzieć, że jest to zajmie n kwadratowe kroki. 1418 00:57:37,090 --> 00:57:38,160 1419 00:57:38,160 --> 00:57:41,730 Ale w najlepszym przypadku tak dolna granica dla najlepszego przypadku 1420 00:57:41,730 --> 00:57:44,300 będzie, jeśli to już doskonale sortowane. 1421 00:57:44,300 --> 00:57:46,671 Wtedy wszystko, co musimy zrobić, to sprawdzić, czy nie jest to klasyfikowane. 1422 00:57:46,671 --> 00:57:47,921 Czy istnieje pytanie tutaj? 1423 00:57:47,921 --> 00:57:49,805 >> STUDENT: kiedy chcesz używać rodzaju? 1424 00:57:49,805 --> 00:57:50,747 Sortowania. 1425 00:57:50,747 --> 00:57:52,160 Jestem po prostu ciekawy. 1426 00:57:52,160 --> 00:57:53,510 >> HANNAH: Kiedy planujesz chcesz używać wyboru rodzaju? 1427 00:57:53,510 --> 00:57:54,010 To jeden? 1428 00:57:54,010 --> 00:57:55,705 Jeden, który jest n do kwadratu w obu przypadkach? 1429 00:57:55,705 --> 00:57:56,860 >> STUDENT: [niesłyszalne]. 1430 00:57:56,860 --> 00:57:58,151 >> HANNAH: Więc to jest bardzo różne. 1431 00:57:58,151 --> 00:58:00,760 Jeśli masz konkretne Wymagania dla programu, 1432 00:58:00,760 --> 00:58:04,887 jak rzeczy, jak gdyby po prostu powiedział: wdrożenie search-- sorry-- 1433 00:58:04,887 --> 00:58:06,720 realizacji swego, będziesz prawdopodobnie chcesz iść 1434 00:58:06,720 --> 00:58:09,950 w jednym z tych, które ma najlepszy przypadek n, 1435 00:58:09,950 --> 00:58:12,410 lub dolnej granicy w najlepszym przypadku n. 1436 00:58:12,410 --> 00:58:14,790 Ale nie może być pewne rzeczy, jak, powiedzmy, 1437 00:58:14,790 --> 00:58:16,767 Swapy są naprawdę kosztowne z jakiegoś powodu. 1438 00:58:16,767 --> 00:58:18,850 Następnie, co chcesz zrobić sortowanie bąbelkowe, bo Ciebie 1439 00:58:18,850 --> 00:58:20,641 musisz zrobić tak wiele swapy, takie rzeczy. 1440 00:58:20,641 --> 00:58:21,710 1441 00:58:21,710 --> 00:58:23,098 Wszelkie other-- tak? 1442 00:58:23,098 --> 00:58:25,488 >> STUDENT: Czy jest [niesłyszalne] powiedzieć, że [niesłyszalne]? 1443 00:58:25,488 --> 00:58:30,077 1444 00:58:30,077 --> 00:58:31,910 HANNAH: To jest jedna rzecz by powiedzieć, że 1445 00:58:31,910 --> 00:58:33,670 jeśli szukasz na realizację. 1446 00:58:33,670 --> 00:58:35,850 I rzeczywiście tak myśleć o tym, dlaczego to n 1447 00:58:35,850 --> 00:58:40,840 kwadrat jest to, że mamy do pracy przez naszą tablicę długości n, 1448 00:58:40,840 --> 00:58:42,765 za każdym razem, co najwyżej, n swapów. 1449 00:58:42,765 --> 00:58:43,980 1450 00:58:43,980 --> 00:58:46,220 I musimy zrobić ten proces n razy. 1451 00:58:46,220 --> 00:58:51,130 >> Więc kiedy masz do co najwyżej n swapy i dla n przebiega tablicy, 1452 00:58:51,130 --> 00:58:52,380 nie będzie n do kwadratu. 1453 00:58:52,380 --> 00:58:55,480 Ale tak, to zostaną ujawnione dzięki tej podwójnej pętli for, 1454 00:58:55,480 --> 00:58:59,428 jak pytanie asked-- lub zagnieżdżonych pętli, powinienem powiedzieć. 1455 00:58:59,428 --> 00:59:00,890 OK? 1456 00:59:00,890 --> 00:59:03,375 >> A następnie połączyć rodzaju, które jest najszybszym rodzajem teraz, 1457 00:59:03,375 --> 00:59:07,560 lub które omówiliśmy w CS50, wiem, że algorytm jest głównym 1458 00:59:07,560 --> 00:59:10,150 ten pomysł włamania do sztuk i wtedy posortowanych 1459 00:59:10,150 --> 00:59:11,980 łącząc razem te posortowane bitów. 1460 00:59:11,980 --> 00:59:14,170 I będzie się nam log n log n. 1461 00:59:14,170 --> 00:59:17,110 Wszelkie pytania dotyczące poszukiwań i rodzaju, zanim go przekazywać? 1462 00:59:17,110 --> 00:59:19,840 1463 00:59:19,840 --> 00:59:21,040 Zobaczmy. 1464 00:59:21,040 --> 00:59:21,800 >> Och, związane list. 1465 00:59:21,800 --> 00:59:23,210 Niestety, mam jeszcze jeden temat. 1466 00:59:23,210 --> 00:59:25,000 OK, niesamowite, związane list. 1467 00:59:25,000 --> 00:59:27,900 Problem z tablicami, mają ustaloną wielkość. 1468 00:59:27,900 --> 00:59:30,634 Więc jeśli nie wiesz, jak duży Twój wkład będzie, 1469 00:59:30,634 --> 00:59:32,050 nie chcesz, aby utworzyć tablicę. 1470 00:59:32,050 --> 00:59:34,080 Bo jeśli tworzymy tablica, że ​​jest zbyt mały, 1471 00:59:34,080 --> 00:59:35,930 możemy uruchomić do przepełnienia bufora. 1472 00:59:35,930 --> 00:59:38,890 >> Więc zamiast tego, co mogliśmy zrobić coś z list, które powiązanych 1473 00:59:38,890 --> 00:59:44,280 pozwala nam na dynamiczny wielkości, struktury danych 1474 00:59:44,280 --> 00:59:48,970 który pozwoli nam na przechowywanie bardziej elastyczne ilość danych. 1475 00:59:48,970 --> 00:59:54,030 Tak więc w ciągu każdego węzła w naszym listy powiązane, mamy dwa kawałki. 1476 00:59:54,030 --> 00:59:56,820 Mamy rzeczywistą wartość, że przechowuje. 1477 00:59:56,820 --> 00:59:59,530 Więc to jest tylko rzeczą, którą będzie patrz w tablicy, na przykład. 1478 00:59:59,530 --> 01:00:04,600 A potem również śledzić wskaźnik do następnej rzeczy w pamięci. 1479 01:00:04,600 --> 01:00:06,430 >> W przeciwieństwie do tablic, które wiemy wszyscy będą 1480 01:00:06,430 --> 01:00:10,890 aby być: elementy tablicy są jednym po drugim w memory-- związane 1481 01:00:10,890 --> 01:00:13,300 list może być w dowolnym miejscu w pamięci. 1482 01:00:13,300 --> 01:00:14,590 Są dowolnych miejscach. 1483 01:00:14,590 --> 01:00:16,410 Więc gdybyśmy rzeczywiście iść je znaleźć, możemy 1484 01:00:16,410 --> 01:00:19,770 trzeba śledzić Następną rzeczą na naszej liście. 1485 01:00:19,770 --> 01:00:22,840 >> A następnie w celu poznania w przypadku, gdy lista jest jako całość, 1486 01:00:22,840 --> 01:00:26,276 wszyscy musimy śledzić to Pierwszym elementem naszej listy. 1487 01:00:26,276 --> 01:00:27,900 I że będziemy pozwalają nam po drodze. 1488 01:00:27,900 --> 01:00:31,020 1489 01:00:31,020 --> 01:00:33,070 >> Tak to jest, jak można określić tryb. 1490 01:00:33,070 --> 01:00:36,160 Jest to świetna okazja, wykorzystać strukturach. 1491 01:00:36,160 --> 01:00:39,660 Bo masz ten pomysł, dobrze, dla danego węzła, mam dwa kawałki. 1492 01:00:39,660 --> 01:00:41,770 Mam wartość rzeczywistą sam. 1493 01:00:41,770 --> 01:00:45,610 A potem mam wskaźnik do Kolejnym elementem w połączonej listy. 1494 01:00:45,610 --> 01:00:49,150 Więc widać, mamy liczbę całkowitą n, który będzie rzeczywista wartość, 1495 01:00:49,150 --> 01:00:53,150 a następnie wskaźnik do Węzeł, zwany dalej. 1496 01:00:53,150 --> 01:00:56,431 Tak, że będzie następny elementem naszej listy. 1497 01:00:56,431 --> 01:00:56,972 UCZEŃ: Tak? 1498 01:00:56,972 --> 01:01:01,920 Czy trzeba określić, że gwiazda jest jak struct? 1499 01:01:01,920 --> 01:01:05,620 >> HANNAH: Tak, tak, od tego jest prawie jak rodzaj, 1500 01:01:05,620 --> 01:01:07,980 wydaje się rekurencyjny definicja w tym my 1501 01:01:07,980 --> 01:01:12,080 trzeba wiedzieć, co jest węzeł wewnątrz do znalezienia węzła. 1502 01:01:12,080 --> 01:01:14,450 Ponieważ tak nie jest w rzeczywistości wiedzieć, co jest całkowicie węzła 1503 01:01:14,450 --> 01:01:17,283 aż dojdziemy do końca this-- i po tym można po prostu nazwać to 1504 01:01:17,283 --> 01:01:21,935 node-- wewnątrz tej definicji, musimy nazwać węzeł struct. 1505 01:01:21,935 --> 01:01:22,560 Świetne pytanie. 1506 01:01:22,560 --> 01:01:23,580 1507 01:01:23,580 --> 01:01:25,214 Coś jeszcze? 1508 01:01:25,214 --> 01:01:26,198 Tak? 1509 01:01:26,198 --> 01:01:29,150 >> STUDENT: Dlaczego my powiedzieć węzeł dwa razy? 1510 01:01:29,150 --> 01:01:33,578 Bo kiedy byliśmy w [niesłyszalne] po prostu musieliśmy to zrobić w średnikiem, 1511 01:01:33,578 --> 01:01:37,352 ale teraz mamy do stwierdzenia, że węzeł struct? [Niesłyszalne]. 1512 01:01:37,352 --> 01:01:39,060 HANNAH: Więc wierzę W ostatnim przykładzie 1513 01:01:39,060 --> 01:01:42,110 my właśnie stworzenie w każdej chwili chciał wykorzystać studenta po tym, ty 1514 01:01:42,110 --> 01:01:46,430 musiałem użyć struct node-- Jestem sorry-- studenta struct. 1515 01:01:46,430 --> 01:01:51,575 To pozwoliło nam, po fakcie, po prostu węzeł wykorzystanie dodać nowy typ, zasadniczo. 1516 01:01:51,575 --> 01:01:53,324 1517 01:01:53,324 --> 01:01:53,990 To ma sens? 1518 01:01:53,990 --> 01:01:54,984 1519 01:01:54,984 --> 01:01:57,150 Więc musielibyśmy wrócić i przed spojrzeć na kod. 1520 01:01:57,150 --> 01:01:59,025 Ale przypuszczam, że nie używać typedef. 1521 01:01:59,025 --> 01:02:02,050 I zadał pytanie, dlaczego musimy użyć typedef? 1522 01:02:02,050 --> 01:02:05,540 Typedef pozwala nam uniknąć Słowo struktura na początku. 1523 01:02:05,540 --> 01:02:06,221 Tak? 1524 01:02:06,221 --> 01:02:08,095 STUDENT: Jakie pytania przyjdzie się 1525 01:02:08,095 --> 01:02:10,400 chodzi w sensie węzły i związane listy? 1526 01:02:10,400 --> 01:02:15,110 >> HANNAH: Więc jedno jest można powiedzieć, w jaki sposób możesz przeglądać połączonej listy? 1527 01:02:15,110 --> 01:02:16,930 OK, bo to nieco bardziej skomplikowane 1528 01:02:16,930 --> 01:02:18,520 niż jeśli szukasz za pośrednictwem tablicy. 1529 01:02:18,520 --> 01:02:21,472 Możemy tylko patrzeć na elemencie zerowym, jeden element, element dwa, bla, bla, 1530 01:02:21,472 --> 01:02:21,972 bla. 1531 01:02:21,972 --> 01:02:22,629 1532 01:02:22,629 --> 01:02:24,420 Jeśli chcemy, aby szukać dzięki połączonej listy, 1533 01:02:24,420 --> 01:02:27,229 my rzeczywiście podążać ten mały labirynt wskaźników. 1534 01:02:27,229 --> 01:02:29,270 Więc rzeczywiście iść przez to bardzo szybko. 1535 01:02:29,270 --> 01:02:30,460 1536 01:02:30,460 --> 01:02:32,860 Co możemy zrobić w zamówić to-- Powiedzmy, że 1537 01:02:32,860 --> 01:02:35,430 chcą po prostu iterację nasz całkowicie związana lista. 1538 01:02:35,430 --> 01:02:37,450 Chcemy zacząć od głowy. 1539 01:02:37,450 --> 01:02:39,890 A następnie, w celu przejść do następnego elementu, 1540 01:02:39,890 --> 01:02:43,680 a nie tylko zwiększając o jeden jak moglibyśmy w przejściu przez tablicę, 1541 01:02:43,680 --> 01:02:45,720 my rzeczywiście będzie kolejnemu wskaźnik, 1542 01:02:45,720 --> 01:02:48,360 więc możemy dowiedzieć się, gdzie w Pamięć Kolejnym elementem jest. 1543 01:02:48,360 --> 01:02:49,357 1544 01:02:49,357 --> 01:02:51,690 Tak wiem, że to nie wystarczy wziąć to wszystko w tej chwili, 1545 01:02:51,690 --> 01:02:52,650 ale musisz te slajdy. 1546 01:02:52,650 --> 01:02:54,730 Więc można przejść przez to trochę wolniej. 1547 01:02:54,730 --> 01:02:56,890 Ale zasadniczo, co chcemy zrobić, to wykonaj następujące wskaźniki 1548 01:02:56,890 --> 01:02:58,550 przez całości połączonej listy. 1549 01:02:58,550 --> 01:03:00,258 Więc to jest pytanie możesz zostać poproszony. 1550 01:03:00,258 --> 01:03:01,920 1551 01:03:01,920 --> 01:03:03,980 >> Coś zauważyć z wstawiania, powiedzmy, 1552 01:03:03,980 --> 01:03:07,925 chcieliśmy umieścić nowy element z przodu naszej listy. 1553 01:03:07,925 --> 01:03:10,800 Musimy być bardzo ostrożni o kolejności, w której 1554 01:03:10,800 --> 01:03:12,760 przypisane kursory. 1555 01:03:12,760 --> 01:03:15,230 Bo powiedzmy, że ja po prostu powiedział OK. 1556 01:03:15,230 --> 01:03:18,930 Dodać punkt głowy do tego nowego elementu. 1557 01:03:18,930 --> 01:03:23,550 Wystarczy zrobić to wskazać na jeden Następnie mamy zasadniczo stracił resztę naszej liście, 1558 01:03:23,550 --> 01:03:25,860 bo nie pamiętam, gdzie dwa życia. 1559 01:03:25,860 --> 01:03:27,730 >> Tak więc mamy do czynienia w bardzo konkretne zamówienie. 1560 01:03:27,730 --> 01:03:31,500 Po pierwsze, aby nowy punkt w głowę elementem. 1561 01:03:31,500 --> 01:03:33,970 A potem robimy głowę wskazuje na nowy element. 1562 01:03:33,970 --> 01:03:38,455 Zobaczmy więc, co to wygląda z arrows-- tak po prostu. 1563 01:03:38,455 --> 01:03:42,080 Więc najpierw nowe punkt do starej głowie elementem. 1564 01:03:42,080 --> 01:03:45,990 A teraz, mamy głowę aby wskazać nowy pierwszego elementu. 1565 01:03:45,990 --> 01:03:47,187 Wszelkie pytania z tym? 1566 01:03:47,187 --> 01:03:49,870 1567 01:03:49,870 --> 01:03:54,350 >> OK, tutaj jest jakiś kod ponownie, coś przyjrzeć się nieco później. 1568 01:03:54,350 --> 01:03:58,630 A teraz zwracam go do Davina dla GDB i trochę praktyki 1569 01:03:58,630 --> 01:03:59,480 kodowanie na papierze. 1570 01:03:59,480 --> 01:04:00,597 1571 01:04:00,597 --> 01:04:01,096 Piękny. 1572 01:04:01,096 --> 01:04:01,810 >> ROB: I Rob. 1573 01:04:01,810 --> 01:04:02,360 >> HANNAH: Och, Davin i Rob. 1574 01:04:02,360 --> 01:04:03,055 Przykro mi. 1575 01:04:03,055 --> 01:04:03,596 >> STUDENT: Woo! 1576 01:04:03,596 --> 01:04:08,140 1577 01:04:08,140 --> 01:04:09,110 >> ROB: Dzięki. 1578 01:04:09,110 --> 01:04:11,209 >> DAVIN: Czy chcesz powiedzieć, wszystko bardzo szybko? 1579 01:04:11,209 --> 01:04:11,875 ROB: Tak, tak. 1580 01:04:11,875 --> 01:04:12,845 DAVIN: Kiedy jestem w górę. 1581 01:04:12,845 --> 01:04:16,240 1582 01:04:16,240 --> 01:04:19,520 OK, a Rob kładzie mikrofon, więc co to GDB? 1583 01:04:19,520 --> 01:04:23,945 Każdy powinien widziałem w GDB klasy, a także w godzinach pracy. 1584 01:04:23,945 --> 01:04:25,070 I powinno być go używać. 1585 01:04:25,070 --> 01:04:25,750 Więc co jest GDB? 1586 01:04:25,750 --> 01:04:28,030 1587 01:04:28,030 --> 01:04:28,850 Ktokolwiek? 1588 01:04:28,850 --> 01:04:29,540 >> Student: To debugger. 1589 01:04:29,540 --> 01:04:30,250 >> DAVIN: To debugger. 1590 01:04:30,250 --> 01:04:31,624 A co to pozwala zrobić? 1591 01:04:31,624 --> 01:04:33,064 Jak, dlaczego lubimy GDB? 1592 01:04:33,064 --> 01:04:34,480 STUDENT: Aby spowolnić program. 1593 01:04:34,480 --> 01:04:36,740 DAVIN: Tak, więc można chodzić przez to jak człowiek tempo. 1594 01:04:36,740 --> 01:04:38,490 A więc jakie są polecenia można zrobić? 1595 01:04:38,490 --> 01:04:40,407 Cóż, prawdopodobnie jest przerwa Twój ulubiony poleceń. 1596 01:04:40,407 --> 01:04:43,240 Dlatego, że pozwala złamać Program i faktycznie przejść przez to 1597 01:04:43,240 --> 01:04:44,280 linia po linii. 1598 01:04:44,280 --> 01:04:46,500 >> Uruchom pozwala go uruchomić. 1599 01:04:46,500 --> 01:04:48,210 Następnie, jak wchodzenie przez. 1600 01:04:48,210 --> 01:04:49,820 Co znajduje się między obok i kroku? 1601 01:04:49,820 --> 01:04:52,190 1602 01:04:52,190 --> 01:04:53,190 Czekaj, że głośno. 1603 01:04:53,190 --> 01:04:54,060 To było prawidłowe. 1604 01:04:54,060 --> 01:04:55,280 >> STUDENT: [niesłyszalne]. 1605 01:04:55,280 --> 01:04:56,190 >> DAVIN: Tak, niesamowite. 1606 01:04:56,190 --> 01:04:59,210 Więc jak, następny i krok, jeśli you're-- powiedzmy, że masz funkcję 1607 01:04:59,210 --> 01:04:59,950 zdefiniować. 1608 01:04:59,950 --> 01:05:03,350 Powiedzmy, że niektórzy w swojej głównej funkcji, i jesteś po prostu uderzając obok, obok, 1609 01:05:03,350 --> 01:05:03,850 następny. 1610 01:05:03,850 --> 01:05:05,910 Jesteś rzeczywiście będzie wykonywania tej funkcji, 1611 01:05:05,910 --> 01:05:07,285 ale masz zamiar skakać nad nim. 1612 01:05:07,285 --> 01:05:09,711 Jeśli trafisz krok, lub s lub cokolwiek, jesteś 1613 01:05:09,711 --> 01:05:11,460 będzie faktycznie skok do tej funkcji, 1614 01:05:11,460 --> 01:05:14,110 a następnie można trafić następna aby zobaczyć różne połączenia 1615 01:05:14,110 --> 01:05:16,170 wewnątrz danej funkcji. 1616 01:05:16,170 --> 01:05:16,670 Tak? 1617 01:05:16,670 --> 01:05:18,670 >> STUDENT: Czy istnieje sposób skakać, jak, się wycofać? 1618 01:05:18,670 --> 01:05:20,750 DAVIN: Zakończ, tak, zakończyć skok cię. 1619 01:05:20,750 --> 01:05:22,570 Tak to się kończy, że Funkcja, a następnie jesteś 1620 01:05:22,570 --> 01:05:24,153 będzie z powrotem w głównym, na przykład. 1621 01:05:24,153 --> 01:05:25,250 1622 01:05:25,250 --> 01:05:27,370 Wydruk będzie go wydrukować jeden raz. 1623 01:05:27,370 --> 01:05:29,381 Coś zawsze używam jest wyświetlacz. 1624 01:05:29,381 --> 01:05:31,880 Wyświetlacz będzie go wydrukować stale na całym całości 1625 01:05:31,880 --> 01:05:32,470 z programu. 1626 01:05:32,470 --> 01:05:33,810 >> Na przykład, jeśli jesteś w pętli for i 1627 01:05:33,810 --> 01:05:37,018 chcę zobaczyć, jak coś się zmienia, a ty nie chcesz, jak, stale 1628 01:05:37,018 --> 01:05:38,940 robić jak print, druku, druk, ekran 1629 01:05:38,940 --> 01:05:43,230 wyświetli tej zmiennej w sposób ciągły, za każdym razem trafisz Dalej. 1630 01:05:43,230 --> 01:05:44,310 I kontynuować. 1631 01:05:44,310 --> 01:05:45,905 Więc GBD, to GDB. 1632 01:05:45,905 --> 01:05:47,160 1633 01:05:47,160 --> 01:05:49,180 >> Student: Co znajduje się jeden gdzie [niesłyszalne]? 1634 01:05:49,180 --> 01:05:50,150 1635 01:05:50,150 --> 01:05:50,900 DAVIN: Co to jest? 1636 01:05:50,900 --> 01:05:52,310 1637 01:05:52,310 --> 01:05:54,390 >> Student: Co the-- zmienne lokalne. 1638 01:05:54,390 --> 01:05:55,364 1639 01:05:55,364 --> 01:05:57,780 ROB: Jest coś, co w rzeczywistości jak miejscowi albo coś. 1640 01:05:57,780 --> 01:05:58,140 I can't-- 1641 01:05:58,140 --> 01:05:59,930 >> DAVIN: To może być coś w tym stylu, tak. 1642 01:05:59,930 --> 01:06:00,830 >> HANNAH: W miejscowych? 1643 01:06:00,830 --> 01:06:01,510 >> DAVIN: To jest to. 1644 01:06:01,510 --> 01:06:02,134 To jeden. 1645 01:06:02,134 --> 01:06:03,040 ROB: Piękny. 1646 01:06:03,040 --> 01:06:04,030 >> DAVIN: Tak. 1647 01:06:04,030 --> 01:06:06,010 >> Student: Co dalej robić? 1648 01:06:06,010 --> 01:06:08,010 >> DAVIN: To continues-- więc jest to po prostu zamierza kontynuować swoje programy. 1649 01:06:08,010 --> 01:06:09,843 Więc jeśli złamać i uderzyć dalej, to będzie 1650 01:06:09,843 --> 01:06:13,119 po prostu uruchomić ten program, aż trafi, że przerwy ponownie. 1651 01:06:13,119 --> 01:06:14,910 Tak na przykład, jeśli wybuchła w funkcji, 1652 01:06:14,910 --> 01:06:16,720 i masz zamiar zrobić, jak na pętli lub coś w tym stylu, 1653 01:06:16,720 --> 01:06:19,869 i trafisz dalej, to będzie dalej i wrócić do tej przerwie. 1654 01:06:19,869 --> 01:06:22,660 Czy nie ma przerwy, to będzie kontynuować i zakończyć program. 1655 01:06:22,660 --> 01:06:25,000 >> ROB: Więc tak jak działają przystanki na pierwszy punkt przerwania 1656 01:06:25,000 --> 01:06:27,010 trafisz, jeśli Ciebie to hit dalej, to będzie trzymać 1657 01:06:27,010 --> 01:06:28,070 będzie aż będzie następny punkt przerwania. 1658 01:06:28,070 --> 01:06:30,111 I dalej pójdzie do następnego przerwania. 1659 01:06:30,111 --> 01:06:31,264 1660 01:06:31,264 --> 01:06:32,680 DAVIN: Wszelkie inne pytania dotyczące GDB? 1661 01:06:32,680 --> 01:06:33,577 1662 01:06:33,577 --> 01:06:35,410 Więc myślę, że w przeszłości, prosiliśmy, co 1663 01:06:35,410 --> 01:06:37,690 GDB jest i dać Przykładem niektórych rzeczy 1664 01:06:37,690 --> 01:06:40,770 można zrobić z GDB, więc naprawdę proste, ale tak. 1665 01:06:40,770 --> 01:06:42,280 Proszę bardzo. 1666 01:06:42,280 --> 01:06:43,250 I węzły? 1667 01:06:43,250 --> 01:06:49,571 >> ROB: Tak, tak, w jakim kierunku to było? 1668 01:06:49,571 --> 01:06:50,851 1669 01:06:50,851 --> 01:06:51,726 Student: To było to. 1670 01:06:51,726 --> 01:06:52,160 DAVIN: Poczekaj. 1671 01:06:52,160 --> 01:06:52,270 ROB: Ten facet? 1672 01:06:52,270 --> 01:06:52,936 DAVIN: To jeden. 1673 01:06:52,936 --> 01:06:54,660 ROB: Ten facet, oh, nie zdawałem sobie sprawy. 1674 01:06:54,660 --> 01:06:56,940 Więc nie były jasne na co the-- ja nie 1675 01:06:56,940 --> 01:06:58,680 wiem, kto to was-- ale pytanie. 1676 01:06:58,680 --> 01:07:01,180 Nie wiemy dokładnie, co pytali o to, tak po prostu 1677 01:07:01,180 --> 01:07:04,800 coś wyjaśnić. 1678 01:07:04,800 --> 01:07:07,750 Więc po pierwsze, jak już wcześniej powiedziałem, typedef masz zawsze przy użyciu tylko 1679 01:07:07,750 --> 01:07:09,305 tworzenia pseudonimu dla typu. 1680 01:07:09,305 --> 01:07:13,420 Więc tutaj, pseudonim jesteśmy tworzenie jest dla tego typu węzła struct. 1681 01:07:13,420 --> 01:07:18,070 >> Więc po pierwsze, ignorując w ten węzeł typedef, więc ta struktura węzeł kręcone 1682 01:07:18,070 --> 01:07:21,060 przygotować się do następnego kręcone klamra jest typ węzła struct. 1683 01:07:21,060 --> 01:07:23,470 I musimy się do tego węzła tam, bo 1684 01:07:23,470 --> 01:07:25,190 trzeba odwołać węzeł tutaj. 1685 01:07:25,190 --> 01:07:29,380 Więc z tego typu rekurencyjnego struct, trzeba dać tej struktury nazwę, 1686 01:07:29,380 --> 01:07:31,340 bo nie mogłem powiedzieć węzeł struct tutaj. 1687 01:07:31,340 --> 01:07:33,340 Podczas gdy przed z uczniem kiedy zostały wpisane, jak sądzę, 1688 01:07:33,340 --> 01:07:35,423 nie mają do powiedzenia Student znajduje się, bo my 1689 01:07:35,423 --> 01:07:40,370 nie powiedzieć struct Student wewnątrz samego struct. 1690 01:07:40,370 --> 01:07:43,730 Więc to, że rekurencyjne zmusza nas do powiedzenia tam węzeł. 1691 01:07:43,730 --> 01:07:46,610 >> Ten węzeł jest tylko nazwa jesteśmy dając do węzła typedef. 1692 01:07:46,610 --> 01:07:48,520 Tak, że węzeł nie jest sama, jak węzeł. 1693 01:07:48,520 --> 01:07:51,567 Ale to jest węzeł struct sama, jak węzeł struktury. 1694 01:07:51,567 --> 01:07:54,150 DAVIN: Więc kiedy zadzwonisz, jak, węzeł w funkcji main, 1695 01:07:54,150 --> 01:07:55,350 nie będziemy powiedzieć węzeł struct. 1696 01:07:55,350 --> 01:07:58,360 Można tylko powiedzieć, węzeł, ponieważ węzeł jest different-- jest w zasadzie 1697 01:07:58,360 --> 01:07:59,440 mówisz, OK. 1698 01:07:59,440 --> 01:08:01,490 Zamiast konieczności połączenia węzeł struct w moim kodu, 1699 01:08:01,490 --> 01:08:04,050 Chcę tylko, aby zmienić jego nazwę jako węzła, aby ułatwić. 1700 01:08:04,050 --> 01:08:06,800 >> ROB: Jeśli zawsze używać typedef, to 1701 01:08:06,800 --> 01:08:11,240 to jedyne miejsce, będziesz miał zadeklarować zmienną z węzła struct 1702 01:08:11,240 --> 01:08:11,740 gwiazda, tak. 1703 01:08:11,740 --> 01:08:14,650 1704 01:08:14,650 --> 01:08:20,801 >> DAVIN: OK, więc ostatnia część jest trudno nauczyć because-- 1705 01:08:20,801 --> 01:08:22,185 1706 01:08:22,185 --> 01:08:22,685 ROB: Co? 1707 01:08:22,685 --> 01:08:24,098 1708 01:08:24,098 --> 01:08:25,649 >> DAVIN: Bo to kodowanie na papierze. 1709 01:08:25,649 --> 01:08:28,689 Więc co roku mamy Kod na pytania papieru. 1710 01:08:28,689 --> 01:08:32,510 Więc myślę, że w zeszłym roku, 12 z 80 punktów były Kod na papierze. 1711 01:08:32,510 --> 01:08:36,720 Rok wcześniej, 10 z 80, Rok wcześniej, że 20 na 100, 1712 01:08:36,720 --> 01:08:37,939 więc sporo z nich. 1713 01:08:37,939 --> 01:08:40,970 Więc masz zamiar być w stanie kodować się te funkcje ręcznie. 1714 01:08:40,970 --> 01:08:45,340 >> Więc pomyślałem, możemy przejść Kilka z nich i zobaczyć, jak ludzie, 1715 01:08:45,340 --> 01:08:47,340 rodzaj spacer je powoli z ludźmi. 1716 01:08:47,340 --> 01:08:48,790 1717 01:08:48,790 --> 01:08:52,420 Więc ogólnie, strlen i atoi były bardzo popularne. 1718 01:08:52,420 --> 01:08:55,670 W zeszłym roku, myślę, że mieliśmy GetPositiveInt i RandomInt. 1719 01:08:55,670 --> 01:08:58,591 Ale pow, więc moc, także pozytywny zbyt. 1720 01:08:58,591 --> 01:09:00,965 Miejmy tylko przejść może jedna lub dwie spośród nich razem. 1721 01:09:00,965 --> 01:09:02,510 1722 01:09:02,510 --> 01:09:03,729 Co ludzie chcą zobaczyć? 1723 01:09:03,729 --> 01:09:05,037 1724 01:09:05,037 --> 01:09:05,767 >> STUDENT: atoi. 1725 01:09:05,767 --> 01:09:06,350 UCZEŃ: Tak. 1726 01:09:06,350 --> 01:09:06,859 DAVIN: atoi? 1727 01:09:06,859 --> 01:09:07,800 STUDENT: [niesłyszalne]. 1728 01:09:07,800 --> 01:09:09,682 DAVIN: OK, będę to zrobić na forum. 1729 01:09:09,682 --> 01:09:11,765 Czy masz preferencje jeśli robię to tu czy tam? 1730 01:09:11,765 --> 01:09:13,580 1731 01:09:13,580 --> 01:09:14,550 Nie, Gabe mówi nie. 1732 01:09:14,550 --> 01:09:16,729 1733 01:09:16,729 --> 01:09:19,580 >> ROB: I to jest ogólne myśli na te pytania kodowania. 1734 01:09:19,580 --> 01:09:21,705 Spróbuj napisać coś. 1735 01:09:21,705 --> 01:09:22,580 Nie pozostawić puste. 1736 01:09:22,580 --> 01:09:23,080 >> DAVIN: Tak. 1737 01:09:23,080 --> 01:09:25,520 ROB: Jeśli można uzyskać powrót typu prawidłowe, 1738 01:09:25,520 --> 01:09:27,090 czy może moglibyśmy dać go do ty, ale jeśli możesz, jak, 1739 01:09:27,090 --> 01:09:30,256 Napisać ogólną podpisu funkcji, Jeśli można uzyskać przypadki bazowe prawidłowe, 1740 01:09:30,256 --> 01:09:32,244 lub przypadki, narożne lub pamiętając czek na null, 1741 01:09:32,244 --> 01:09:34,160 tak długo, jak masz jakiś rzeczy, to być może 1742 01:09:34,160 --> 01:09:35,880 może dać Ci kilka wskazuje na problem. 1743 01:09:35,880 --> 01:09:36,810 Nie należy po prostu zostawić to pole puste. 1744 01:09:36,810 --> 01:09:38,560 >> DAVIN: Tak, i jeśli są po prostu całkowicie 1745 01:09:38,560 --> 01:09:40,580 zastanawiał się, jak rzeczywiście przekształcić się w kodzie. 1746 01:09:40,580 --> 01:09:43,140 Jeśli piszesz Pseudokod, to jest całkiem dobre. 1747 01:09:43,140 --> 01:09:46,390 Więc jak to jest, to jest sześć punkt pytanie i napisać poprawne Pseudokod, 1748 01:09:46,390 --> 01:09:47,858 będziesz miał co najmniej dwa punkty. 1749 01:09:47,858 --> 01:09:49,149 Więc nie tylko pozostawić je puste. 1750 01:09:49,149 --> 01:09:50,279 Staraj się umieścić coś. 1751 01:09:50,279 --> 01:09:51,770 >> ROB: To musi być prawidłowe pseudokod, choć. 1752 01:09:51,770 --> 01:09:52,270 >> DAVIN: Tak. 1753 01:09:52,270 --> 01:09:55,381 ROB: Tak więc jesteśmy na ogół są mniej wyrozumiali dla błędów w Pseudokod. 1754 01:09:55,381 --> 01:09:57,130 Davina: OK, więc chłopaki chciałem zobaczyć atoi. 1755 01:09:57,130 --> 01:09:58,480 1756 01:09:58,480 --> 01:10:02,820 OK, więc po prostu really-- więc co chcesz zrobić 1757 01:10:02,820 --> 01:10:04,969 jest masz zamiar być podane jakieś liczby. 1758 01:10:04,969 --> 01:10:07,010 Ale liczba ta nie jest będzie int, prawda? 1759 01:10:07,010 --> 01:10:08,574 Co to będzie? 1760 01:10:08,574 --> 01:10:09,480 >> STUDENT: [niesłyszalne]. 1761 01:10:09,480 --> 01:10:11,146 >> DAVIN: To będzie ciąg, prawda? 1762 01:10:11,146 --> 01:10:13,160 Więc jeśli podano string-- niech say-- 1763 01:10:13,160 --> 01:10:15,228 >> ROB: powinienem otwieramy w edytorze? 1764 01:10:15,228 --> 01:10:16,200 Mogę wyciągnąć up-- 1765 01:10:16,200 --> 01:10:16,800 >> DAVIN: Och, chcesz zrobić on-- 1766 01:10:16,800 --> 01:10:17,420 >> ROB: Wolisz płytę? 1767 01:10:17,420 --> 01:10:18,800 >> DAVIN: Co chcesz zrobić? 1768 01:10:18,800 --> 01:10:19,900 Chodzi mi o to, czy chcesz to zrobić ręcznie? 1769 01:10:19,900 --> 01:10:21,460 Lub chcesz to zrobić za pomocą komputera? 1770 01:10:21,460 --> 01:10:22,180 >> ROB: zrobić to ręcznie. 1771 01:10:22,180 --> 01:10:22,805 >> DAVIN: [śmiech] 1772 01:10:22,805 --> 01:10:23,950 ROB: zrobić to ręcznie. 1773 01:10:23,950 --> 01:10:25,469 >> DAVIN: OK, więc to będzie atoi. 1774 01:10:25,469 --> 01:10:27,760 Więc co it-- To znaczy, że będziesz prawdopodobnie dać ci tego. 1775 01:10:27,760 --> 01:10:29,106 Ale to, co idzie do powrotu? 1776 01:10:29,106 --> 01:10:29,452 >> STUDENT: Int. 1777 01:10:29,452 --> 01:10:31,076 >> DAVIN: To będzie powrót int, prawda? 1778 01:10:31,076 --> 01:10:33,772 SO- nie chcę, aby to zrobić tam. 1779 01:10:33,772 --> 01:10:34,510 Zrobię to tutaj. 1780 01:10:34,510 --> 01:10:36,596 >> ROB: można pociągnąć go w dół a następnie wcisnąć się na nim. 1781 01:10:36,596 --> 01:10:38,500 1782 01:10:38,500 --> 01:10:40,385 >> DAVIN: tak. 1783 01:10:40,385 --> 01:10:43,880 [Śmiech] zmiana gry. 1784 01:10:43,880 --> 01:10:50,950 OK, więc to będzie int atoi, i co to potrwa? 1785 01:10:50,950 --> 01:10:52,180 1786 01:10:52,180 --> 01:10:57,780 Gwiazda char, więc po prostu łańcuch, gwiazda s, tak. 1787 01:10:57,780 --> 01:10:59,240 >> ROB: Ładny gwiazda, ładne. 1788 01:10:59,240 --> 01:11:02,582 1789 01:11:02,582 --> 01:11:04,040 DAVIN: To może nie być tam, OK. 1790 01:11:04,040 --> 01:11:04,540 ROB: Tak. 1791 01:11:04,540 --> 01:11:06,670 DAVIN: OK, więc pierwsza rzeczą, którą chcesz do-- I 1792 01:11:06,670 --> 01:11:08,490 nie wiem, czy ktoś spojrzał praktyki w solutions-- 1793 01:11:08,490 --> 01:11:10,150 ale co masz zamiar chce zrobić, to jesteś 1794 01:11:10,150 --> 01:11:11,570 będzie chciał mieć pętli, bo jesteś 1795 01:11:11,570 --> 01:11:14,100 będzie chciał rzeczywiście przejść przez ten ciąg. 1796 01:11:14,100 --> 01:11:18,880 Więc helpful-- więc powiedzmy, jedziemy do pętli, 1797 01:11:18,880 --> 01:11:22,270 i będziemy krok po kroku każdy element łańcucha. 1798 01:11:22,270 --> 01:11:23,470 Ile to jest? 1799 01:11:23,470 --> 01:11:26,464 Ile razy będziemy do iteracji w pętli for, że? 1800 01:11:26,464 --> 01:11:27,130 STUDENT: Sterln? 1801 01:11:27,130 --> 01:11:27,963 DAVIN: Sterln, tak. 1802 01:11:27,963 --> 01:11:29,350 1803 01:11:29,350 --> 01:11:41,294 Więc powiedzmy, int długość równa sterln s. 1804 01:11:41,294 --> 01:11:44,240 1805 01:11:44,240 --> 01:11:48,740 I po prostu ciekawi, dlaczego jest to zawsze rodzaj z lepiej zrobić to na zewnątrz pętli? 1806 01:11:48,740 --> 01:11:52,277 Jak, dlaczego lepiej jest zadzwonić Funkcja ta poza pętlą? 1807 01:11:52,277 --> 01:11:53,360 Wystarczy sprawdzić szybkie rozsądek? 1808 01:11:53,360 --> 01:11:55,810 1809 01:11:55,810 --> 01:11:56,311 Tak? 1810 01:11:56,311 --> 01:11:58,268 STUDENT: Więc nie zachować sprawdzenie go. 1811 01:11:58,268 --> 01:11:59,400 Możesz po prostu [niesłyszalne]. 1812 01:11:59,400 --> 01:12:01,560 >> DAVIN: Dokładnie tak, tak, dokładnie to, co powiedziała. 1813 01:12:01,560 --> 01:12:03,101 Więc nie trzeba zaglądać go. 1814 01:12:03,101 --> 01:12:05,690 Tak na przykład, jeśli dzwonię funkcja wewnątrz pętli, 1815 01:12:05,690 --> 01:12:08,050 wtedy będę wzywasz funkcja ta wiele razy. 1816 01:12:08,050 --> 01:12:10,080 I to się dzieje, aby zmniejszyć Skuteczność programu. 1817 01:12:10,080 --> 01:12:12,370 Dlatego zawsze przydatne zadeklarować ją na zewnątrz. 1818 01:12:12,370 --> 01:12:14,370 >> ROB: To się mówi, na każdy z tych problemów 1819 01:12:14,370 --> 01:12:17,940 prawie tak długo, jak masz rozwiązanie działa, masz pełny kredyt. 1820 01:12:17,940 --> 01:12:20,820 Więc nie martw się, jeśli projekt jest absolutnie przerażające. 1821 01:12:20,820 --> 01:12:22,120 1822 01:12:22,120 --> 01:12:25,230 To może uczynić nas zdenerwowany czytanie kodu. 1823 01:12:25,230 --> 01:12:28,160 Jednak pod warunkiem, że działa dostaniesz punkty. 1824 01:12:28,160 --> 01:12:29,302 >> DAVIN: Tak. 1825 01:12:29,302 --> 01:12:31,260 OK, więc wtedy będę zadeklarować jakąś zmienną. 1826 01:12:31,260 --> 01:12:33,900 To po prostu będzie zadzwonić int suma. 1827 01:12:33,900 --> 01:12:37,031 I mam zamiar ustawić to równy zeru, tak. 1828 01:12:37,031 --> 01:12:38,780 A to po prostu będzie być zastępczy. 1829 01:12:38,780 --> 01:12:40,960 Tak, że będzie co mam zamiar wrócić. 1830 01:12:40,960 --> 01:12:43,730 Więc mam zamiar w końcu zwrotu kwoty tego programu. 1831 01:12:43,730 --> 01:12:44,980 Więc mam te dwie zmienne. 1832 01:12:44,980 --> 01:12:45,563 Ja mam długość. 1833 01:12:45,563 --> 01:12:46,500 Mam sumę. 1834 01:12:46,500 --> 01:12:48,290 A teraz wskoczyć do naszego łańcucha. 1835 01:12:48,290 --> 01:12:49,510 >> Więc pozwala Posiadamy do pętli. 1836 01:12:49,510 --> 01:13:06,520 Tak więc cztery int I jest równa 0 w, podczas gdy I jest mniejsza niż długość ja plus plus. 1837 01:13:06,520 --> 01:13:07,150 I now-- 1838 01:13:07,150 --> 01:13:10,920 1839 01:13:10,920 --> 01:13:11,420 ROB: Nicea. 1840 01:13:11,420 --> 01:13:14,030 DAVIN: OK, a teraz tutaj pochodzi mięso naszego kodu. 1841 01:13:14,030 --> 01:13:17,380 Więc rzeczywiście można zrobić to w zasadzie w jednej linii. 1842 01:13:17,380 --> 01:13:20,702 Więc czy ktoś ma pomysł z tego, co mamy zamiar zrobić? 1843 01:13:20,702 --> 01:13:23,680 1844 01:13:23,680 --> 01:13:25,380 OK, więc to jest OK. 1845 01:13:25,380 --> 01:13:35,860 Więc robimy powiedzieć sumę equals-- pozwól mi wiać ten over-- sumę 1846 01:13:35,860 --> 01:13:50,010 równa razy suma 10 plus-- jesteśmy zajmie s i minus jeden 1847 01:13:50,010 --> 01:13:54,787 cytat 0 jeden cytat zrobić, tak. 1848 01:13:54,787 --> 01:13:55,620 ROB: Bardzo intuicyjne. 1849 01:13:55,620 --> 01:13:56,980 1850 01:13:56,980 --> 01:13:57,880 >> DAVIN: Kruszywo go. 1851 01:13:57,880 --> 01:14:01,438 OK, więc someone-- mam go, mam go. 1852 01:14:01,438 --> 01:14:03,680 1853 01:14:03,680 --> 01:14:06,960 OK, więc jest to wyraźnie rośnie. 1854 01:14:06,960 --> 01:14:08,320 1855 01:14:08,320 --> 01:14:09,450 Co to oznacza? 1856 01:14:09,450 --> 01:14:12,120 Więc czy ktoś wie, co to oznacza? 1857 01:14:12,120 --> 01:14:13,826 Czy każdy może to zobaczyć? 1858 01:14:13,826 --> 01:14:16,088 Nie, nikt nie może zobaczyć, OK. 1859 01:14:16,088 --> 01:14:17,390 1860 01:14:17,390 --> 01:14:18,340 Idę to-- 1861 01:14:18,340 --> 01:14:20,506 >> ROB: Idę napisać Formuła właśnie tutaj. 1862 01:14:20,506 --> 01:14:23,140 DAVIN: OK, Rob idzie to zrobić na komputerze, który jest zabawa. 1863 01:14:23,140 --> 01:14:26,889 1864 01:14:26,889 --> 01:14:27,514 ROB: O mój Boże. 1865 01:14:27,514 --> 01:14:34,340 1866 01:14:34,340 --> 01:14:35,010 Albo nie będę. 1867 01:14:35,010 --> 01:14:36,288 1868 01:14:36,288 --> 01:14:36,954 DAVIN: Stand by. 1869 01:14:36,954 --> 01:14:42,300 1870 01:14:42,300 --> 01:14:44,260 STUDENT: Mam pytanie. 1871 01:14:44,260 --> 01:14:45,348 DAVIN: Tak, na pewno. 1872 01:14:45,348 --> 01:14:46,223 STUDENT: [niesłyszalne]? 1873 01:14:46,223 --> 01:14:52,529 1874 01:14:52,529 --> 01:14:54,570 DAVIN: OK, więc to rzeczywiście, jak tylko na ogół 1875 01:14:54,570 --> 01:14:56,710 jeśli było umieścić, jak, w tej deklaracji int 1876 01:14:56,710 --> 01:14:59,770 I jest równa długości 0 przecinkami równa sterln, that-- 1877 01:14:59,770 --> 01:15:01,200 >> STUDENT: [niesłyszalne]. 1878 01:15:01,200 --> 01:15:03,585 >> DAVIN: To dobrze, bo that-- 1879 01:15:03,585 --> 01:15:05,543 STUDENT: Dlaczego chcesz nawet trzeba użyć długość? 1880 01:15:05,543 --> 01:15:08,620 Dlaczego nie mógł po prostu [niesłyszalne] sterln s, jak cały czas [niesłyszalne]? 1881 01:15:08,620 --> 01:15:09,460 >> DAVIN: Masz na myśli tutaj? 1882 01:15:09,460 --> 01:15:10,001 >> UCZEŃ: Tak. 1883 01:15:10,001 --> 01:15:12,630 DAVIN: Ponieważ każdy Czas to dla przebiegów pętli, 1884 01:15:12,630 --> 01:15:14,295 to będzie ocenić ten warunek. 1885 01:15:14,295 --> 01:15:14,920 STUDENT: Prawo. 1886 01:15:14,920 --> 01:15:16,836 DAVIN: A jeśli masz sterln istnieje, to jest to 1887 01:15:16,836 --> 01:15:19,510 będzie musiał faktycznie zadzwonić że funkcja każdym razem. 1888 01:15:19,510 --> 01:15:21,090 Więc zamiast tylko Porównując go do int, 1889 01:15:21,090 --> 01:15:23,548 idziesz do wywoływania Funkcja, a następnie porównanie go 1890 01:15:23,548 --> 01:15:24,510 do wartości zwracanej. 1891 01:15:24,510 --> 01:15:25,860 Tak, tak, to jest po prostu, tak. 1892 01:15:25,860 --> 01:15:28,860 1893 01:15:28,860 --> 01:15:30,770 >> Ładny, OK, więc teraz każdy może go zobaczyć. 1894 01:15:30,770 --> 01:15:33,400 Co does-- to jest jak, to jest to. 1895 01:15:33,400 --> 01:15:34,580 To jest dżem, tutaj. 1896 01:15:34,580 --> 01:15:37,030 1897 01:15:37,030 --> 01:15:37,930 Co to oznacza? 1898 01:15:37,930 --> 01:15:39,250 1899 01:15:39,250 --> 01:15:39,970 Co ja robię? 1900 01:15:39,970 --> 01:15:41,890 1901 01:15:41,890 --> 01:15:42,880 Tak, pomysł? 1902 01:15:42,880 --> 01:15:43,482 Tak? 1903 01:15:43,482 --> 01:15:45,692 >> Student: No, więc kiedy jesteś wejściem tablicę, 1904 01:15:45,692 --> 01:15:47,525 masz zamiar jechać od lewej do prawej 1905 01:15:47,525 --> 01:15:51,786 tak masz zamiar jechać w dziesiętnej z dół [niesłyszalne]. 1906 01:15:51,786 --> 01:15:52,410 DAVIN: Dokładnie. 1907 01:15:52,410 --> 01:15:55,063 STUDENT: Więc każdy trzeba pomnożyć 1908 01:15:55,063 --> 01:15:59,490 co widziałeś jako wartość przez int czas masz przejść, że nad jednym. 1909 01:15:59,490 --> 01:16:01,590 >> DAVIN: Doskonały, doskonały, tak, na przykład, niech 1910 01:16:01,590 --> 01:16:05,376 powiedzieć, że dał you-- jestem zamiar napisać tutaj. 1911 01:16:05,376 --> 01:16:06,480 Nie, nie jestem. 1912 01:16:06,480 --> 01:16:08,640 Mam zamiar napisać tutaj. 1913 01:16:08,640 --> 01:16:12,080 Powiedzmy, że dałem ci 76, prawda? 1914 01:16:12,080 --> 01:16:13,380 Powiedzmy, że dam ci 76. 1915 01:16:13,380 --> 01:16:15,360 To ciąg na początek, OK? 1916 01:16:15,360 --> 01:16:16,840 >> Tak więc długość jest co? 1917 01:16:16,840 --> 01:16:18,060 1918 01:16:18,060 --> 01:16:19,060 2, prawda? 1919 01:16:19,060 --> 01:16:20,290 Suma 0. 1920 01:16:20,290 --> 01:16:21,600 Potem skok w naszej pętli. 1921 01:16:21,600 --> 01:16:24,187 OK, pierwsza iteracja to, co to będzie? 1922 01:16:24,187 --> 01:16:25,270 To będzie suma wynosi 0. 1923 01:16:25,270 --> 01:16:27,180 Więc Podsumowując razy 10 0. 1924 01:16:27,180 --> 01:16:28,500 To bez znaczenia. 1925 01:16:28,500 --> 01:16:29,880 Następnie co to robić? 1926 01:16:29,880 --> 01:16:30,845 1927 01:16:30,845 --> 01:16:31,720 STUDENT: [niesłyszalne]. 1928 01:16:31,720 --> 01:16:33,110 1929 01:16:33,110 --> 01:16:37,430 >> DAVIN: To się okaże, że znaków do liczby całkowitej, prawda? 1930 01:16:37,430 --> 01:16:42,160 To trochę tak jak z telefonem Problem set-- tym light-- 1931 01:16:42,160 --> 01:16:44,170 to trochę jak z Problem ustawienie Visioneer. 1932 01:16:44,170 --> 01:16:45,980 Masz do czynienia z wartościami ASCII. 1933 01:16:45,980 --> 01:16:48,520 Więc jeśli dam ci, jak, siedem, ale to znak, 1934 01:16:48,520 --> 01:16:50,965 i chcesz wiedzieć, OK, co cyfra to jest? 1935 01:16:50,965 --> 01:16:53,540 1936 01:16:53,540 --> 01:16:54,910 Tak, może, tak. 1937 01:16:54,910 --> 01:16:55,900 Więc co cyfra to jest? 1938 01:16:55,900 --> 01:16:59,550 Można z niej odjąć 0, ale trzeba odjąć 0, charakter. 1939 01:16:59,550 --> 01:17:01,425 >> A gdzie ludzie się potknął się, że są 1940 01:17:01,425 --> 01:17:04,260 jak, dobrze, dobrze, muszę wiedzieć wartości ASCII dla tego quizu? 1941 01:17:04,260 --> 01:17:06,218 Nie, na pewno nie wiedzieć ASCII 1942 01:17:06,218 --> 01:17:09,520 wartości, jak, małymi literami , wielkie litery, zero. 1943 01:17:09,520 --> 01:17:12,060 >> ROB: Nie ma powodu, aby kiedykolwiek umieścić to na ściągawki. 1944 01:17:12,060 --> 01:17:14,226 >> DAVIN: Zdecydowanie nie marnować miejsca z tym. 1945 01:17:14,226 --> 01:17:18,090 Możesz literally-- tylko zamiast powiedzieć 48, podobnie jak prawo do 1946 01:17:18,090 --> 01:17:24,630 tam, które jest równoważne z mówiąc jedno, jeden apostrof, 1947 01:17:24,630 --> 01:17:27,680 tak, dokładnie tak samo. 1948 01:17:27,680 --> 01:17:34,106 >> ROB: Można prawie że o tym, jak if-- Boga, muszę mój, 1949 01:17:34,106 --> 01:17:37,490 oops-- można prawie myśleć a jeśli mamy coś takiego mieszania 1950 01:17:37,490 --> 01:17:39,755 zdefiniować 0 jako 48. 1951 01:17:39,755 --> 01:17:41,320 1952 01:17:41,320 --> 01:17:42,030 To nie będzie działać. 1953 01:17:42,030 --> 01:17:45,502 Ale uważam, że jest pojedynczy cudzysłów 0 apostrof, a dla wszystkich znaków. 1954 01:17:45,502 --> 01:17:47,960 Pomyśl o tym, jak stała oznacza, że ​​wartość ASCII. 1955 01:17:47,960 --> 01:17:49,080 >> DAVIN: Tak. 1956 01:17:49,080 --> 01:17:52,820 OK, więc po raz pierwszy przez siebie tak, z 76-- więc za pierwszym razem, 1957 01:17:52,820 --> 01:17:57,260 to tylko znak 7 minus znak 0, 1958 01:17:57,260 --> 01:18:00,420 i to są siedem integers-- dobrze, te 1959 01:18:00,420 --> 01:18:04,030 siedem miejsc od siebie inne na wykresie ASCII lub cokolwiek. 1960 01:18:04,030 --> 01:18:06,770 Tak, że zamierza powrócić int z 7. 1961 01:18:06,770 --> 01:18:08,720 Więc teraz, suma jest równa 7. 1962 01:18:08,720 --> 01:18:10,830 >> OK, dobrze, niech skakać do tego pętli ponownie. 1963 01:18:10,830 --> 01:18:13,010 OK, teraz jest to suma razy 10. 1964 01:18:13,010 --> 01:18:15,800 Więc jesteś skutecznie przesuwania 7 w lewo. 1965 01:18:15,800 --> 01:18:17,542 Czy to ma sens? 1966 01:18:17,542 --> 01:18:19,250 Skutecznie jesteś przesuwając go w lewo. 1967 01:18:19,250 --> 01:18:21,790 >> A potem add-- to będzie 6 minus 0. 1968 01:18:21,790 --> 01:18:22,650 To 6. 1969 01:18:22,650 --> 01:18:24,752 Więc to będzie 70 oraz 6. 1970 01:18:24,752 --> 01:18:25,996 76, to jest twój numer. 1971 01:18:25,996 --> 01:18:28,370 Tak więc niezależnie od jakiej liczby Dałem wam, że to właśnie powoli 1972 01:18:28,370 --> 01:18:31,610 zamierza przenieść większych wartości z lewej strony, czynnik 10 1 1973 01:18:31,610 --> 01:18:35,525 za każdym razem w pętli, a następnie dodać w miarę potrzeby. 1974 01:18:35,525 --> 01:18:37,350 1975 01:18:37,350 --> 01:18:37,865 >> W plecy? 1976 01:18:37,865 --> 01:18:40,240 Student: Nie mamy zrobić każda kontrola w programie? 1977 01:18:40,240 --> 01:18:41,580 1978 01:18:41,580 --> 01:18:44,302 >> ROB: Tak o ile sprawdzenie idzie do programu, 1979 01:18:44,302 --> 01:18:46,510 moglibyśmy powiedzieć dość dużo, co trzeba sprawdzić. 1980 01:18:46,510 --> 01:18:48,670 Jeśli nie powiedzieć, cokolwiek, to na ogół 1981 01:18:48,670 --> 01:18:50,320 Zakładam, że masz sprawdzić większość rzeczy. 1982 01:18:50,320 --> 01:18:54,772 Tak jak może, tylko być bezpieczne, prawdopodobnie powinien sprawdzić, hej, jest s zerowy? 1983 01:18:54,772 --> 01:18:56,230 Wtedy nie mam pojęcia, co do powrotu. 1984 01:18:56,230 --> 01:18:58,814 Ale możemy powiedzieć, że tego typu rzeczy. 1985 01:18:58,814 --> 01:18:59,480 0, nie wiem. 1986 01:18:59,480 --> 01:19:02,786 >> DAVIN: A dlaczego chcesz ponownie sprawdzić, czy s jest równa NULL? 1987 01:19:02,786 --> 01:19:03,660 STUDENT: [niesłyszalne]. 1988 01:19:03,660 --> 01:19:04,880 DAVIN: Bo gwiazdy char. 1989 01:19:04,880 --> 01:19:05,510 To wskazówka. 1990 01:19:05,510 --> 01:19:09,240 Więc całkowicie dopuszczalne oświadczenie, mógłbym powiedzieć, OK, 1991 01:19:09,240 --> 01:19:11,917 s jest równa null, ponieważ to może być wskaźnik na null. 1992 01:19:11,917 --> 01:19:14,250 Więc gdy masz wskazówki w drogę w ten sposób, 1993 01:19:14,250 --> 01:19:15,420 powinieneś sprawdzić. 1994 01:19:15,420 --> 01:19:18,461 Bo jeśli nie sprawdzić, że i następnie przejdź do swojej pętli, 1995 01:19:18,461 --> 01:19:20,100 a ty doing-- wiać w dół. 1996 01:19:20,100 --> 01:19:21,980 1997 01:19:21,980 --> 01:19:22,920 Scoot dół. 1998 01:19:22,920 --> 01:19:23,860 >> ROB: Niestety, to jest to. 1999 01:19:23,860 --> 01:19:25,860 >> DAVIN: I tak, jak, jeśli jest pusty, a następnie 2000 01:19:25,860 --> 01:19:28,267 robić to, co błąd masz zamiar dostać? 2001 01:19:28,267 --> 01:19:29,850 STUDENT: Zamierzasz dostać zestaw błąd. 2002 01:19:29,850 --> 01:19:31,250 DAVIN: Będziesz ustawiony winy, w prawo, bo jesteś 2003 01:19:31,250 --> 01:19:32,616 starając się indeksu na null. 2004 01:19:32,616 --> 01:19:35,240 Więc masz zamiar spróbować indeksu w pamięci, że nie jest właścicielem. 2005 01:19:35,240 --> 01:19:39,550 Więc to, czy to jest null, a to zrobisz, będziesz cykl. 2006 01:19:39,550 --> 01:19:43,656 >> ROB: Myślę też na egzamin, w którym poprosiliśmy to pytanie, powiedzieć 2007 01:19:43,656 --> 01:19:45,655 że można po prostu przyjąć, jest to liczba dodatnia. 2008 01:19:45,655 --> 01:19:48,270 Oczekuje się również, ponieważ atoi obsłużyć liczb ujemnych, 2009 01:19:48,270 --> 01:19:49,686 więc trzeba by szczególnym przypadku. 2010 01:19:49,686 --> 01:19:53,080 Hej, to pierwszy znak kreska, w tym przypadku, OK, 2011 01:19:53,080 --> 01:19:54,839 teraz jest ujemną liczbą całkowitą. 2012 01:19:54,839 --> 01:19:56,380 Powiemy wam tego rodzaju rzeczy. 2013 01:19:56,380 --> 01:19:58,005 Powiemy ci, co trzeba obsłużyć. 2014 01:19:58,005 --> 01:19:59,310 DAVIN: Tak. 2015 01:19:59,310 --> 01:20:02,530 Więc jestem pewien, że niektórzy ludzie mogą have-- jeśli zaczął patrząc na starych egzaminów, 2016 01:20:02,530 --> 01:20:03,900 Widziałeś sterln. 2017 01:20:03,900 --> 01:20:05,120 To popularny. 2018 01:20:05,120 --> 01:20:09,790 I myślę, że w sterln, trzeba było zrobić ten test na null, powrót 2019 01:20:09,790 --> 01:20:10,950 0 lub coś w tym stylu. 2020 01:20:10,950 --> 01:20:11,940 Jak, trzeba było sprawdzić, null. 2021 01:20:11,940 --> 01:20:14,230 A jeśli nie, to było zwrócić się w quizie. 2022 01:20:14,230 --> 01:20:16,750 2023 01:20:16,750 --> 01:20:19,500 W każdym razie, nie wszyscy czuć się dobrze z atoi? 2024 01:20:19,500 --> 01:20:21,112 2025 01:20:21,112 --> 01:20:22,820 Czy ktoś chce przejść części ponownie? 2026 01:20:22,820 --> 01:20:23,815 2027 01:20:23,815 --> 01:20:25,565 ROB: O tak, myślę, że możemy również powiedzieć ci 2028 01:20:25,565 --> 01:20:28,565 Można założyć, że wszystko is-- że oni faktycznie wprowadzania numeru, 2029 01:20:28,565 --> 01:20:32,821 że nie musisz się martwić, jak, litery są w ciągu, tak. 2030 01:20:32,821 --> 01:20:33,320 DAVIN: Tak. 2031 01:20:33,320 --> 01:20:33,922 Tak? 2032 01:20:33,922 --> 01:20:35,713 STUDENT: Czy można przejść w ciągu jednej chwili, gdy więcej 2033 01:20:35,713 --> 01:20:37,860 użyć podwójny cudzysłów i apostrof? 2034 01:20:37,860 --> 01:20:41,290 >> DAVIN: Pewnie tak, cudzysłowy, bardzo po prostu, jest podwójne cudzysłowy są łańcuchami. 2035 01:20:41,290 --> 01:20:43,370 Więc jeśli cudzysłów cokolwiek, to ciąg. 2036 01:20:43,370 --> 01:20:48,270 Więc jak, gdybym miał to 0 tutaj, a ja to zrobił, to ciąg. 2037 01:20:48,270 --> 01:20:50,060 To już nie jest znak. 2038 01:20:50,060 --> 01:20:54,816 Więc nie mogę znaleźć tej wartości na moim ASCII wykres, bo to ciąg, tak. 2039 01:20:54,816 --> 01:20:57,770 2040 01:20:57,770 --> 01:20:59,480 >> OK, jakieś inne pytania? 2041 01:20:59,480 --> 01:21:00,405 Tak? 2042 01:21:00,405 --> 01:21:02,345 >> STUDENT: Więc masz już odpowiedział to, 2043 01:21:02,345 --> 01:21:05,255 ale jak, kiedy jesteśmy rzeczywiście pisanie to na quiz, 2044 01:21:05,255 --> 01:21:08,165 chcesz nam pisać tnie zer [niesłyszalne]? 2045 01:21:08,165 --> 01:21:11,041 2046 01:21:11,041 --> 01:21:11,540 DAVIN: Nie 2047 01:21:11,540 --> 01:21:13,800 Pytanie powinieneś umieścić ukośnik przez zer 2048 01:21:13,800 --> 01:21:14,890 wskazać, czy są zera? 2049 01:21:14,890 --> 01:21:15,890 Nie, my zrozumieć. 2050 01:21:15,890 --> 01:21:16,940 2051 01:21:16,940 --> 01:21:19,530 Tak, dzięki, że są dobre. 2052 01:21:19,530 --> 01:21:20,860 OK, coś jeszcze? 2053 01:21:20,860 --> 01:21:25,060 Czy ktoś chce to-- więc myślę my uruchomić trochę w czasie. 2054 01:21:25,060 --> 01:21:27,305 Czy chcesz zobaczyć inny, lub? 2055 01:21:27,305 --> 01:21:28,096 STUDENT: RandomInt. 2056 01:21:28,096 --> 01:21:29,230 2057 01:21:29,230 --> 01:21:30,750 >> DAVIN: RandomInt, OK, dokładnie. 2058 01:21:30,750 --> 01:21:32,975 Więc zróbmy RandomInt. 2059 01:21:32,975 --> 01:21:34,395 2060 01:21:34,395 --> 01:21:35,270 Zrobię to tutaj. 2061 01:21:35,270 --> 01:21:36,770 2062 01:21:36,770 --> 01:21:39,210 Więc RandomInt jest znacznie prostsze. 2063 01:21:39,210 --> 01:21:43,578 Myślę, że atoi jest chyba najtrudniejszy które prosiliśmy w poprzednich latach. 2064 01:21:43,578 --> 01:21:44,453 STUDENT: [niesłyszalne]. 2065 01:21:44,453 --> 01:21:46,660 2066 01:21:46,660 --> 01:21:47,161 >> DAVIN: Co? 2067 01:21:47,161 --> 01:21:49,493 ROB: widzę, czy jest to rodzaj z widoczny z tutaj. 2068 01:21:49,493 --> 01:21:50,040 DAVIN: Czy to jest? 2069 01:21:50,040 --> 01:21:52,500 ROB: Nie sądzę, że to going-- myślę to będzie działać na prawo. 2070 01:21:52,500 --> 01:21:53,791 DAVIN: OK, tak zrobię tego. 2071 01:21:53,791 --> 01:21:56,250 A potem po prostu umieścić go na ekranie. 2072 01:21:56,250 --> 01:21:57,150 >> ROB: Wszystko w porządku. 2073 01:21:57,150 --> 01:21:58,190 >> DAVIN: Chcesz być moim uczony? 2074 01:21:58,190 --> 01:21:58,600 >> ROB: Tak. 2075 01:21:58,600 --> 01:21:59,100 >> DAVIN: Nicea. 2076 01:21:59,100 --> 01:22:01,210 2077 01:22:01,210 --> 01:22:02,727 OK, mogę wymazać tego? 2078 01:22:02,727 --> 01:22:04,188 >> UCZEŃ: Tak. 2079 01:22:04,188 --> 01:22:05,162 >> DAVIN: To jest tak trudno. 2080 01:22:05,162 --> 01:22:10,032 2081 01:22:10,032 --> 01:22:12,062 (Śpiewa) Robisz co robisz. 2082 01:22:12,062 --> 01:22:14,454 I robi to, czego nie robić. 2083 01:22:14,454 --> 01:22:14,954 Dobrze. 2084 01:22:14,954 --> 01:22:19,790 2085 01:22:19,790 --> 01:22:22,930 >> OK, jeśli dobrze pamiętam, na Quiz RandomInt było jak, 2086 01:22:22,930 --> 01:22:26,190 OK, mam zamiar dać Ci dwa numery, jak a i b. 2087 01:22:26,190 --> 01:22:30,380 I chcę, aby mi dać RandomInt między tymi liczbami. 2088 01:22:30,380 --> 01:22:33,440 Więc RandomInt będzie wziąć dwa numbers-- 2089 01:22:33,440 --> 01:22:41,690 tak RandomInt-- i to zamierza powrócić int. 2090 01:22:41,690 --> 01:22:42,930 >> Więc co jest zwracana wartość? 2091 01:22:42,930 --> 01:22:44,151 Właśnie mówiłem. 2092 01:22:44,151 --> 01:22:44,650 Int, prawda? 2093 01:22:44,650 --> 01:22:46,400 2094 01:22:46,400 --> 01:22:49,260 Tak, i to jest to potrwa dwa ints. 2095 01:22:49,260 --> 01:22:56,301 Więc to zajmie int i int b, tak. 2096 01:22:56,301 --> 01:22:58,217 Więc co RandomInt jest zamiar zrobić, to to będzie 2097 01:22:58,217 --> 01:23:02,440 powrót jakąś losową wartość między tymi dwiema wartościami. 2098 01:23:02,440 --> 01:23:05,140 Więc to będzie większy niż, mniej niż b. 2099 01:23:05,140 --> 01:23:09,020 Więc myślę, że prawdopodobnie można przyjąć, że jest mniejszą z dwóch wartości. 2100 01:23:09,020 --> 01:23:12,210 Tak więc, jeśli mamy do czynienia z przypadkowość, co funkcja 2101 01:23:12,210 --> 01:23:14,825 widzieliśmy, że daje nam losowe rzeczy? 2102 01:23:14,825 --> 01:23:15,450 STUDENT: Drand. 2103 01:23:15,450 --> 01:23:16,506 DAVIN: Drand, dokładnie. 2104 01:23:16,506 --> 01:23:18,630 Więc masz zamiar prawdopodobnie chcą korzystać z drand. 2105 01:23:18,630 --> 01:23:19,940 2106 01:23:19,940 --> 01:23:29,160 Więc można powiedzieć, int losowa, a my po prostu powiedzieć, że jest równa 0 teraz. 2107 01:23:29,160 --> 01:23:30,170 2108 01:23:30,170 --> 01:23:38,690 I oni mamy zamiar powiedzieć, OK, losowe równi drand 48. 2109 01:23:38,690 --> 01:23:39,747 2110 01:23:39,747 --> 01:23:40,830 A co to ma powrócić? 2111 01:23:40,830 --> 01:23:43,742 Co to funkcja daje? 2112 01:23:43,742 --> 01:23:45,610 >> STUDENT: od 0 do 1. 2113 01:23:45,610 --> 01:23:47,870 >> DAVIN: Tak, od 0 do 1. 2114 01:23:47,870 --> 01:23:48,890 Więc to będzie być: 2115 01:23:48,890 --> 01:23:51,070 >> ROB: I myślę, że to is-- my ci to powiedzieć. 2116 01:23:51,070 --> 01:23:52,670 Jak można używać drand 48. 2117 01:23:52,670 --> 01:23:54,350 Można to sprawdzić na ostatnim egzaminie. 2118 01:23:54,350 --> 01:23:56,720 Ale my chyba powiedzieć ci Można stosować drand 48, która 2119 01:23:56,720 --> 01:23:58,790 zwraca pływaka między 0 a 1. 2120 01:23:58,790 --> 01:24:00,830 >> DAVIN: Tak, tak, jestem całkiem pewien, na egzaminie 2121 01:24:00,830 --> 01:24:03,860 mówi Ci prawdopodobnie użyć drand, tak. 2122 01:24:03,860 --> 01:24:07,041 Tak to się dzieje, aby powrócić niektóre wartości pomiędzy 0 a 1. 2123 01:24:07,041 --> 01:24:08,790 A potem co ty będzie chciał zrobić? 2124 01:24:08,790 --> 01:24:16,360 Cóż, chcesz pomnożyć by-- poczekać, myślę, że to tak, przepraszam. 2125 01:24:16,360 --> 01:24:18,018 Ja po prostu to zrobić. 2126 01:24:18,018 --> 01:24:19,410 Nie wiem. 2127 01:24:19,410 --> 01:24:22,240 >> Tak b minus. 2128 01:24:22,240 --> 01:24:23,310 2129 01:24:23,310 --> 01:24:24,490 Więc dlaczego b minus? 2130 01:24:24,490 --> 01:24:26,110 2131 01:24:26,110 --> 01:24:30,490 Więc powiedzmy drand daje powrotem int-- OK, po prostu zrobić resztę, 2132 01:24:30,490 --> 01:24:33,380 tak plus. 2133 01:24:33,380 --> 01:24:36,130 Więc co does-- y jest minus b. 2134 01:24:36,130 --> 01:24:40,670 Więc powiedzmy, że drand daje powrót Maksymalna wartość to mogło ewentualnie 2135 01:24:40,670 --> 01:24:41,410 dać. 2136 01:24:41,410 --> 01:24:42,409 Co to będzie? 2137 01:24:42,409 --> 01:24:43,010 UCZEŃ: 1. 2138 01:24:43,010 --> 01:24:44,430 >> DAVIN: 1, prawda? 2139 01:24:44,430 --> 01:24:47,880 Więc jeśli jest to 1, a ty pomnożenie przez b minus, 2140 01:24:47,880 --> 01:24:50,110 dobrze, że to tylko Różnica pomiędzy minus A. 2141 01:24:50,110 --> 01:24:52,870 A jeśli dodać, że wtedy z powrotem na, to co? 2142 01:24:52,870 --> 01:24:54,290 2143 01:24:54,290 --> 01:24:55,180 To w zasadzie b. 2144 01:24:55,180 --> 01:24:56,435 2145 01:24:56,435 --> 01:24:57,310 Czy to ma sens? 2146 01:24:57,310 --> 01:24:57,851 >> UCZEŃ: Tak. 2147 01:24:57,851 --> 01:24:59,480 2148 01:24:59,480 --> 01:25:02,170 >> DAVIN: Więc jeśli jest to maksymalna wartość mogłaby ona być, 2149 01:25:02,170 --> 01:25:03,175 to będzie jeden. 2150 01:25:03,175 --> 01:25:04,122 2151 01:25:04,122 --> 01:25:06,330 I to jest właśnie Różnica między tymi dwoma. 2152 01:25:06,330 --> 01:25:11,410 Dodawać na, więc jest zamierza powrócić losowo. 2153 01:25:11,410 --> 01:25:15,000 2154 01:25:15,000 --> 01:25:18,620 A w przypadku rożnego drand daje powrót 1, 2155 01:25:18,620 --> 01:25:20,970 losowo będzie po prostu skutecznie b. 2156 01:25:20,970 --> 01:25:22,700 Ale to może być maksymalna. 2157 01:25:22,700 --> 01:25:27,420 Więc jeśli będzie mniej niż że, więc powiedzmy, że jej jak 0,9, 2158 01:25:27,420 --> 01:25:31,080 tak to 0,9 b minus będzie mniej 2159 01:25:31,080 --> 01:25:33,230 niż różnica między b minus. 2160 01:25:33,230 --> 01:25:35,830 >> A potem, jeśli dodać, że na, to, że wartość jest 2161 01:25:35,830 --> 01:25:38,986 będzie większa niż, ponieważ dodajesz coś na nim, 2162 01:25:38,986 --> 01:25:40,360 ale to będzie mniej niż b. 2163 01:25:40,360 --> 01:25:41,430 2164 01:25:41,430 --> 01:25:44,420 Więc dostaniesz losowo liczba, ponieważ dzwonisz drand. 2165 01:25:44,420 --> 01:25:48,000 I że rand, że liczba losowa jest będzie gdzieś pomiędzy 2166 01:25:48,000 --> 01:25:49,342 i b. 2167 01:25:49,342 --> 01:25:50,780 Czy to ma sens? 2168 01:25:50,780 --> 01:25:52,990 >> ROB: Wystarczy umieścić go w konkretne numery, więc 2169 01:25:52,990 --> 01:25:55,450 powiedzmy, że chcemy wybrać Liczba losowa pomiędzy 7 i 10. 2170 01:25:55,450 --> 01:25:56,960 Tak b minus to nasza oferta. 2171 01:25:56,960 --> 01:26:00,150 Więc nie jest oferta trzech numery chcemy wybierać. 2172 01:26:00,150 --> 01:26:03,290 A następnie pomnożenie że pomiędzy 0 a 1 1 2173 01:26:03,290 --> 01:26:07,430 jeśli to daje nam some-- powiedzmy, że daje nam 1,5. 2174 01:26:07,430 --> 01:26:10,670 >> Następnie 1,5, chcemy iść od 7 do 10. 2175 01:26:10,670 --> 01:26:14,470 Więc 1,5 oraz 7 przynosi nam z powrotem do naszego 7 do 10 zakresu. 2176 01:26:14,470 --> 01:26:17,580 A potem mamy przechowywanie go wewnątrz liczbą całkowitą, tak że obcięty do 8. 2177 01:26:17,580 --> 01:26:18,790 A potem po prostu wrócić, że. 2178 01:26:18,790 --> 01:26:21,310 Tak b minus to nasza oferta. 2179 01:26:21,310 --> 01:26:25,770 przesuwa się ją do liczby że chcemy w tym zakresie. 2180 01:26:25,770 --> 01:26:30,540 Tak między 7 a 10, a potem może powrócić, co skończy się. 2181 01:26:30,540 --> 01:26:32,684 >> DAVIN: Tak, miło. 2182 01:26:32,684 --> 01:26:34,470 >> ROB: Dziękuję. 2183 01:26:34,470 --> 01:26:35,628 >> DAVIN: Tak, o co chodzi? 2184 01:26:35,628 --> 01:26:39,746 >> STUDENT: Czy możemy uruchomić go na wszelkiego rodzaju Błędy ASCII gdy we're-- jeśli drand jest 2185 01:26:39,746 --> 01:26:40,996 powrót pływaka [niesłyszalne]. 2186 01:26:40,996 --> 01:26:42,470 2187 01:26:42,470 --> 01:26:45,360 >> ROB: Tak jak powiedział Rob, ponieważ nie jest przypadkowy int 2188 01:26:45,360 --> 01:26:47,080 tak drand będzie pływak. 2189 01:26:47,080 --> 01:26:48,470 Tak, a następnie mnoży się. 2190 01:26:48,470 --> 01:26:50,507 A może masz jakiś rodzaj liczb zmiennoprzecinkowych. 2191 01:26:50,507 --> 01:26:51,840 I wtedy to się obciąć. 2192 01:26:51,840 --> 01:26:52,339 >> STUDENT: OK. 2193 01:26:52,339 --> 01:26:53,019 DAVIN: Tak. 2194 01:26:53,019 --> 01:26:56,060 ROB: I jeśli były ostrzec kompilator ty o, jak, utrata precyzji, 2195 01:26:56,060 --> 01:26:58,986 tylko rzucony int w tam, i to jest dobre. 2196 01:26:58,986 --> 01:27:00,398 2197 01:27:00,398 --> 01:27:00,898 DAVIN: Tak? 2198 01:27:00,898 --> 01:27:02,332 2199 01:27:02,332 --> 01:27:04,722 >> STUDENT: Czy to ma samo prawdopodobieństwo dostania, 2200 01:27:04,722 --> 01:27:06,156 jak, b lub [niesłyszalne]? 2201 01:27:06,156 --> 01:27:08,080 2202 01:27:08,080 --> 01:27:10,980 >> ROB: Tak is-- jestem naprawdę wondering-- jest RandomInt rzekome 2203 01:27:10,980 --> 01:27:14,362 się numer z mniej niż b? 2204 01:27:14,362 --> 01:27:16,820 Jak, czy to między 7 a 10, jakie są możliwości? 2205 01:27:16,820 --> 01:27:18,454 7, 8 i 9 lub 7, 8, 9, 10? 2206 01:27:18,454 --> 01:27:19,120 DAVIN: zapomnę. 2207 01:27:19,120 --> 01:27:19,880 Na set-- problemów 2208 01:27:19,880 --> 01:27:20,570 >> ROB: Myślę, że to 7, 8, 9. 2209 01:27:20,570 --> 01:27:22,785 >> DAVIN: To wyraźnie mówi czyjejś włącznie, a jeden na wyłączność. 2210 01:27:22,785 --> 01:27:23,110 >> ROB: Tak. 2211 01:27:23,110 --> 01:27:23,670 >> DAVIN: Ale don't-- jestem not-- 2212 01:27:23,670 --> 01:27:25,878 >> ROB: Więc myślę, że to jest nie wliczone w cenę, w tym przypadku, 2213 01:27:25,878 --> 01:27:28,152 nie jest równa Prawdopodobieństwo 7, 8 i 9. 2214 01:27:28,152 --> 01:27:29,360 Nie ma prawdopodobieństwo 10. 2215 01:27:29,360 --> 01:27:31,770 2216 01:27:31,770 --> 01:27:32,270 DAVIN: Tak? 2217 01:27:32,270 --> 01:27:33,395 STUDENT: Mam pytanie. 2218 01:27:33,395 --> 01:27:38,090 Chcemy zdefiniować funkcję zwraca nie jedną wartość, ale tablicę. 2219 01:27:38,090 --> 01:27:41,020 Więc co będzie Składnia po powrocie? 2220 01:27:41,020 --> 01:27:44,604 >> DAVIN: OK, więc wtedy would-- po powrocie? 2221 01:27:44,604 --> 01:27:47,020 Więc powiedzmy, że oświadczył, Tablica gdzieś tam. 2222 01:27:47,020 --> 01:27:49,708 Wtedy po prostu wrócić Nazwa tablicy. 2223 01:27:49,708 --> 01:27:50,676 >> STUDENT: OK, dziękuję. 2224 01:27:50,676 --> 01:27:51,718 Wtedy po prostu wrócić z A-- 2225 01:27:51,718 --> 01:27:52,759 DAVIN: Oh wait, tak mi przykro. 2226 01:27:52,759 --> 01:27:54,620 Pytanie było jak Pan zwraca tablicę. 2227 01:27:54,620 --> 01:27:56,170 >> ROB: Mimo, że nie mógł być tablica zadeklarowana 2228 01:27:56,170 --> 01:27:57,260 na stosie, lub coś podobnego. 2229 01:27:57,260 --> 01:27:59,510 To musiałoby być coś malloced, ponieważ malloc 2230 01:27:59,510 --> 01:28:01,610 to, w jaki sposób obejść automatyczna alokacja pamięci. 2231 01:28:01,610 --> 01:28:02,109 >> DAVIN: Tak. 2232 01:28:02,109 --> 01:28:03,433 2233 01:28:03,433 --> 01:28:04,933 ROB: Jak można obejść zasięgu lokalnym. 2234 01:28:04,933 --> 01:28:09,670 2235 01:28:09,670 --> 01:28:11,550 >> DAVIN: Ale będzie tylko zwrócić jego name-- 2236 01:28:11,550 --> 01:28:17,890 >> STUDENT: [niesłyszalne] to nie jest jeden wartości, na przykład, dwa numery, więc 2237 01:28:17,890 --> 01:28:18,390 [Niesłyszalne]. 2238 01:28:18,390 --> 01:28:19,590 >> DAVIN: Nie możesz wrócić numer wielokrotne. 2239 01:28:19,590 --> 01:28:20,850 Nie można, jak, return-- 2240 01:28:20,850 --> 01:28:23,630 >> STUDENT: Rozmawiałem o powrocie tablica czy coś takiego. 2241 01:28:23,630 --> 01:28:26,050 >> DAVIN: Tak, więc pytanie jest Mogę zwracać wiele wartości. 2242 01:28:26,050 --> 01:28:27,460 Nie można zwracać wiele wartości. 2243 01:28:27,460 --> 01:28:30,270 Nie można, jak, po czym wrócić powrót b czy coś takiego. 2244 01:28:30,270 --> 01:28:32,710 Bo po powrocie, ci powrócić z funkcji. 2245 01:28:32,710 --> 01:28:35,790 A następnie jest wykonywana funkcja i jak Rob mówi, jest na stosie. 2246 01:28:35,790 --> 01:28:38,260 >> Więc wszystko, pamięci tylko dostaje zwrócone do komputera. 2247 01:28:38,260 --> 01:28:40,025 Wszystko zostanie zapomniane, w zasadzie. 2248 01:28:40,025 --> 01:28:41,480 2249 01:28:41,480 --> 01:28:44,430 Więc jeśli chcesz, aby powrócić wielokrotnego wartości, trzeba zwrócić tablicę, 2250 01:28:44,430 --> 01:28:45,971 I sposób to zrobić jest mallocing. 2251 01:28:45,971 --> 01:28:48,780 A potem wrócisz x tak. 2252 01:28:48,780 --> 01:28:50,280 Zasadniczo, po prostu zwróci nazwę. 2253 01:28:50,280 --> 01:28:51,620 A po powrocie coś takiego, że jesteś 2254 01:28:51,620 --> 01:28:53,200 faktycznie nie zwracając wartość. 2255 01:28:53,200 --> 01:28:55,430 >> Więc powiedzmy, że przechowywane wartości w tablicy. 2256 01:28:55,430 --> 01:28:57,910 Nie jesteś naprawdę powrót tych wartości. 2257 01:28:57,910 --> 01:29:01,515 Jak, jeśli wróciłem int, jestem naprawdę powrocie kopie wartości. 2258 01:29:01,515 --> 01:29:02,017 2259 01:29:02,017 --> 01:29:03,850 Ale jeśli miałbym wrócić coś takiego, 2260 01:29:03,850 --> 01:29:06,450 Wracam odniesienie do tych wartości. 2261 01:29:06,450 --> 01:29:09,090 Więc wracam, w zasadzie, adres pamięci do wartości. 2262 01:29:09,090 --> 01:29:10,079 Czy to ma sens? 2263 01:29:10,079 --> 01:29:10,620 UCZEŃ: Tak. 2264 01:29:10,620 --> 01:29:11,120 DAVIN: Nicea. 2265 01:29:11,120 --> 01:29:12,760 2266 01:29:12,760 --> 01:29:13,410 Tak? 2267 01:29:13,410 --> 01:29:15,430 >> STUDENT: Kiedy jesteś używając drand tutaj, 2268 01:29:15,430 --> 01:29:17,660 masz umieścić srand wcześniej? 2269 01:29:17,660 --> 01:29:20,320 >> DAVIN: Nie, nie, nie myślę tak. 2270 01:29:20,320 --> 01:29:23,040 >> ROB: Tak, tak, masz powiedzieć coś o srand? 2271 01:29:23,040 --> 01:29:26,900 Domyślnym was nigdy mówiąc srand w ogóle, to po prostu zrobić srand null. 2272 01:29:26,900 --> 01:29:29,350 Więc drand pracy własnej woli. 2273 01:29:29,350 --> 01:29:33,759 I automatycznie z nasion aktualny czas, to co to wykorzystuje. 2274 01:29:33,759 --> 01:29:35,175 2275 01:29:35,175 --> 01:29:35,675 DAVIN: Tak? 2276 01:29:35,675 --> 01:29:40,950 STUDENT: Czy ci [niesłyszalne] z numerami? 2277 01:29:40,950 --> 01:29:42,570 DAVIN: Tak, można. 2278 01:29:42,570 --> 01:29:46,770 STUDENT: tak można powiedzieć, jak, 4 razy 2. 2279 01:29:46,770 --> 01:29:50,280 Chodzi o to, że nie można zakładać, następnie int jest cztery bajty. 2280 01:29:50,280 --> 01:29:51,020 Only-- 2281 01:29:51,020 --> 01:29:53,830 >> DAVIN: Mam na myśli, na quizie można. 2282 01:29:53,830 --> 01:29:54,830 [Śmiech] 2283 01:29:54,830 --> 01:29:55,780 >> ROB: Mm, nie. 2284 01:29:55,780 --> 01:29:56,780 DAVIN: Tak, tak można. 2285 01:29:56,780 --> 01:30:00,197 Jeśli zapytać, jak duże int jest, nie może być, jak, czterech lub ośmiu. 2286 01:30:00,197 --> 01:30:02,030 ROB: Oh, więc jeśli Pytanie jest konkretnie 2287 01:30:02,030 --> 01:30:04,857 Na przykład, jeśli jest to problem kodowanie należy powiedzieć, rozmiar wew. 2288 01:30:04,857 --> 01:30:06,690 Jeśli jest to tabela, lub mówi, jak wiele bajtów, 2289 01:30:06,690 --> 01:30:08,808 nie należy wypełniać w rozmiarze int. 2290 01:30:08,808 --> 01:30:11,278 >> STUDENCI: [śmiech] 2291 01:30:11,278 --> 01:30:18,210 2292 01:30:18,210 --> 01:30:20,580 >> DAVIN: Tak, tak, to dlaczego rozmiar int ważnego tutaj? 2293 01:30:20,580 --> 01:30:23,085 Więc jak, jeśli jedziemy do 32-bit procesor lub coś w tym stylu, 2294 01:30:23,085 --> 01:30:24,300 to będzie cztery bajty. 2295 01:30:24,300 --> 01:30:26,342 Ale na niektóre nowsze rzeczy, to może być co? 2296 01:30:26,342 --> 01:30:27,383 To może być osiem, prawda? 2297 01:30:27,383 --> 01:30:30,550 Więc this-- jeśli tylko ciężko Kod cztery, następnie na niektórych maszynach, to będzie działać. 2298 01:30:30,550 --> 01:30:32,180 Niektóre maszyny, nie działa. 2299 01:30:32,180 --> 01:30:35,270 Ale jeśli w quizie jesteśmy jak, jak duży jest int? 2300 01:30:35,270 --> 01:30:35,770 Włóż cztery. 2301 01:30:35,770 --> 01:30:38,710 2302 01:30:38,710 --> 01:30:39,210 ROB: Prawo. 2303 01:30:39,210 --> 01:30:39,790 DAVIN: Tak? 2304 01:30:39,790 --> 01:30:43,192 Uczeń: Tak, ponieważ jesteśmy deklarując [Niesłyszalne] wewnątrz funkcji, 2305 01:30:43,192 --> 01:30:45,622 należy umieścić trzy wewnątrz tej funkcji? 2306 01:30:45,622 --> 01:30:46,907 Albo możemy używać go na zewnątrz? 2307 01:30:46,907 --> 01:30:48,740 DAVIN: Można go używać poza tą funkcją. 2308 01:30:48,740 --> 01:30:49,890 Więc pyta za darmo. 2309 01:30:49,890 --> 01:30:51,700 >> STUDENT: stracić gdzie [niesłyszalne]. 2310 01:30:51,700 --> 01:30:54,720 >> ROB: Och, nie happen-- darmo to część magii malloc 2311 01:30:54,720 --> 01:30:57,220 jest to, że nie jesteś ograniczona do zasięgu lokalnego. 2312 01:30:57,220 --> 01:31:00,700 Masz pełną kontrolę nad jak długo zmienne żyć. 2313 01:31:00,700 --> 01:31:05,380 Tak nazywamy malloc tutaj, to może być całkowicie odrębne funkcje. 2314 01:31:05,380 --> 01:31:08,670 Może to być 10 godzin później że w końcu zadzwonić za darmo. 2315 01:31:08,670 --> 01:31:11,764 >> DAVIN: Tak na przykład, jak, kilka tygodni od teraz, kiedy wreszcie 2316 01:31:11,764 --> 01:31:13,680 zrobić słownika Speller psets, będziesz 2317 01:31:13,680 --> 01:31:16,410 do niektórych funkcji, które mają Tworzy ton węzłów. 2318 01:31:16,410 --> 01:31:18,630 Więc mallocing ton węzłów w tej funkcji. 2319 01:31:18,630 --> 01:31:20,670 A później w oddzielna funkcja, jesteś 2320 01:31:20,670 --> 01:31:22,440 będzie chciał uwolnić tych wszystkich węzłów. 2321 01:31:22,440 --> 01:31:25,740 Więc można dosłownie przejść do uwolnić wskaźnik, więc adres pamięci 2322 01:31:25,740 --> 01:31:26,684 do czego malloced. 2323 01:31:26,684 --> 01:31:27,600 I że będzie dobrze. 2324 01:31:27,600 --> 01:31:29,725 Nie trzeba się uwolnić, podobne, w tej samej funkcji. 2325 01:31:29,725 --> 01:31:30,449 Tak? 2326 01:31:30,449 --> 01:31:36,197 >> UCZEŃ: Tak malloc zmienna [niesłyszalne] na zewnątrz? 2327 01:31:36,197 --> 01:31:37,384 Czy to, co mówisz? 2328 01:31:37,384 --> 01:31:38,300 DAVIN: Czekaj, mówisz? 2329 01:31:38,300 --> 01:31:38,800 Przepraszam. 2330 01:31:38,800 --> 01:31:42,300 >> STUDENT: Jeśli zmienna malloc może być wolny w dowolnym miejscu w kodzie, 2331 01:31:42,300 --> 01:31:44,800 następnie mogą być dostępne w dowolnym miejscu w kodzie? 2332 01:31:44,800 --> 01:31:45,800 Możesz zachować je lokalnym? 2333 01:31:45,800 --> 01:31:47,880 >> DAVIN: Och, zapytała, jak zmienna, like-- 2334 01:31:47,880 --> 01:31:51,300 2335 01:31:51,300 --> 01:31:55,510 >> ROB: Więc trzeba jeszcze mają jakieś odniesienie 2336 01:31:55,510 --> 01:31:57,220 do bloku malloc w pamięci. 2337 01:31:57,220 --> 01:31:58,540 Więc tutaj mamy powrót x. 2338 01:31:58,540 --> 01:31:59,040 STUDENT: Och. 2339 01:31:59,040 --> 01:32:01,920 ROB: Jeśli nie wrócimy x tutaj, i to było po prostu nieważne, 2340 01:32:01,920 --> 01:32:04,550 wtedy nie mamy dostępu do wskaźnik, który został malloced, 2341 01:32:04,550 --> 01:32:05,920 i to wyciekły pamięć. 2342 01:32:05,920 --> 01:32:06,690 >> STUDENT: OK. 2343 01:32:06,690 --> 01:32:10,010 >> DAVIN: Więc jak, powiedzmy, ma to, jak, tutaj. 2344 01:32:10,010 --> 01:32:10,510 ROB: Nie 2345 01:32:10,510 --> 01:32:13,430 DAVIN: W mojej podstawowej funkcji, nie mogę zadzwoń to x i być, jak, OK, 2346 01:32:13,430 --> 01:32:14,645 w tej funkcji, zrobiłem to. 2347 01:32:14,645 --> 01:32:14,960 >> ROB: Prawo. 2348 01:32:14,960 --> 01:32:17,790 >> DAVIN: Więc mam zamiar zadzwonić x w, jak, głównym lub coś w tym stylu. 2349 01:32:17,790 --> 01:32:18,540 Nie możesz tego zrobić. 2350 01:32:18,540 --> 01:32:19,600 Masz zamiar powrócić coś. 2351 01:32:19,600 --> 01:32:21,000 Ale to, co masz zamiar wrócić? 2352 01:32:21,000 --> 01:32:22,130 Masz zamiar wrócić adres pamięci. 2353 01:32:22,130 --> 01:32:25,130 A ponieważ powrót pamięci adres, który jest dostępny gdzie indziej. 2354 01:32:25,130 --> 01:32:27,262 2355 01:32:27,262 --> 01:32:28,255 Jeszcze jakieś pytania? 2356 01:32:28,255 --> 01:32:28,755 Tak? 2357 01:32:28,755 --> 01:32:31,213 >> STUDENT: Czy funkcja powyżej jest czek na [niesłyszalne]? 2358 01:32:31,213 --> 01:32:33,270 2359 01:32:33,270 --> 01:32:35,005 >> DAVIN: Dlaczego nie muszę robić? 2360 01:32:35,005 --> 01:32:35,880 STUDENT: [niesłyszalne]. 2361 01:32:35,880 --> 01:32:37,755 DAVIN: Bo jesteś nie mallocing nic. 2362 01:32:37,755 --> 01:32:39,640 Więc to not-- tak, to nie jak ciąg s. 2363 01:32:39,640 --> 01:32:41,160 Jest to wskaźnik gdzieś. 2364 01:32:41,160 --> 01:32:42,951 Są to tylko wartości. 2365 01:32:42,951 --> 01:32:43,450 STUDENT: OK. 2366 01:32:43,450 --> 01:32:43,949 DAVIN: Tak. 2367 01:32:43,949 --> 01:32:47,600 2368 01:32:47,600 --> 01:32:48,470 Coś jeszcze? 2369 01:32:48,470 --> 01:32:48,970 ROB: Tak? 2370 01:32:48,970 --> 01:32:50,386 STUDENT: Ale kiedy [niesłyszalne]? 2371 01:32:50,386 --> 01:32:55,050 2372 01:32:55,050 --> 01:32:58,690 >> ROB: Tak, aby uwolnić pamięci, będziemy tutaj mówić. 2373 01:32:58,690 --> 01:33:01,350 Więc x jest nasz wskaźnik do blok pamięci. 2374 01:33:01,350 --> 01:33:02,845 Uwolnimy ten wskaźnik. 2375 01:33:02,845 --> 01:33:04,470 I nie koniecznie to zrobić tutaj. 2376 01:33:04,470 --> 01:33:05,390 Możemy to zrobić w dowolnym miejscu. 2377 01:33:05,390 --> 01:33:10,400 Ale tylko dzwonić za darmo na coś, że malloc zwraca. 2378 01:33:10,400 --> 01:33:12,940 Więc malloc, tutaj, wrócił co jest przechowywane w x. 2379 01:33:12,940 --> 01:33:14,802 Tak więc możemy zadzwonić bezpłatnie na x. 2380 01:33:14,802 --> 01:33:18,730 2381 01:33:18,730 --> 01:33:20,556 Jakieś ostatnie pytania? 2382 01:33:20,556 --> 01:33:21,701 >> DAVIN: Jakieś ostatnie pytanie? 2383 01:33:21,701 --> 01:33:22,200 Tak? 2384 01:33:22,200 --> 01:33:25,152 >> STUDENT: Przykro nam, możesz ponownie wyjaśnić dlaczego chcesz uwolnić się tam? 2385 01:33:25,152 --> 01:33:26,630 Dlaczego [niesłyszalne]? 2386 01:33:26,630 --> 01:33:27,774 >> DAVIN: Bo tu? 2387 01:33:27,774 --> 01:33:29,109 >> UCZEŃ: Tak, jak zaraz po. 2388 01:33:29,109 --> 01:33:30,900 DAVIN: Prawdopodobnie nie chcę tutaj za darmo. 2389 01:33:30,900 --> 01:33:31,630 ROB: Prawdopodobnie nie. 2390 01:33:31,630 --> 01:33:33,060 DAVIN: Tak, że to nic nie robić. 2391 01:33:33,060 --> 01:33:35,220 To, jak, stworzyć pamięci, robić rzeczy, do tego, 2392 01:33:35,220 --> 01:33:37,390 a następnie natychmiast zapomnij o tym, tak. 2393 01:33:37,390 --> 01:33:39,850 >> ROB: Ale możemy zrobić, jak, tutaj z jakiegoś powodu. 2394 01:33:39,850 --> 01:33:43,902 Można powiedzieć, int gwiazdę y równa return array. 2395 01:33:43,902 --> 01:33:47,900 Zrobić kilka rzeczy z y, może wydrukować zawartość. 2396 01:33:47,900 --> 01:33:49,350 I wtedy wreszcie skończymy. 2397 01:33:49,350 --> 01:33:50,626 Możemy uwolnić y. 2398 01:33:50,626 --> 01:33:51,501 STUDENT: [niesłyszalne]. 2399 01:33:51,501 --> 01:33:57,839 2400 01:33:57,839 --> 01:33:59,005 DAVIN: Czy mogę przewinąć w dół? 2401 01:33:59,005 --> 01:34:00,445 Dzięki. 2402 01:34:00,445 --> 01:34:00,945 ROB: Nicea. 2403 01:34:00,945 --> 01:34:02,400 2404 01:34:02,400 --> 01:34:03,646 >> DAVIN: OK, to jest to. 2405 01:34:03,646 --> 01:34:04,520 ROB: Dobra, dobra. 2406 01:34:04,520 --> 01:34:05,070 Powodzenia. 2407 01:34:05,070 --> 01:34:06,800 >> DAVIN: Jeśli masz jakieś pytania, napisz do nas. 2408 01:34:06,800 --> 01:34:08,670 Powodzenia. 2409 01:34:08,670 --> 01:34:10,283