1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorn: Witamy do A5, każdy. 3 00:00:07,820 --> 00:00:11,270 Mamy ekscytujący tydzień przed nami, głównie dlatego, że istnieje tak wiele nowych 4 00:00:11,270 --> 00:00:12,350 stoi w tym pokoju. 5 00:00:12,350 --> 00:00:12,920 To jest cudowne. 6 00:00:12,920 --> 00:00:15,740 Wielu z was jest tutaj przez przypadek, co jest jeszcze lepsze. 7 00:00:15,740 --> 00:00:18,220 Więc mam nadzieję, że będziesz trzymać do nas dołączy. 8 00:00:18,220 --> 00:00:20,220 >> W tym tygodniu mamy zamiar spędzić Większość sekcji 9 00:00:20,220 --> 00:00:21,870 przygotowania do quizu. 10 00:00:21,870 --> 00:00:26,580 Więc na naszym programie, będziemy rozmawiać nieco o zasoby na klasy, 11 00:00:26,580 --> 00:00:30,350 a także quizu, a następnie ponownie spędzają większość klasy rozmowy 12 00:00:30,350 --> 00:00:31,390 o pytania. 13 00:00:31,390 --> 00:00:33,900 Kiedy skończysz odbierasz pytania, lub jeśli twoje pytania 14 00:00:33,900 --> 00:00:39,010 naturalnie prowadzi nas do jakiegoś kodowania, ja przykładowe problemy z midterms 15 00:00:39,010 --> 00:00:43,180 przeszłości, że będziemy żyć w sekcji kodu razem, że również przywołać inny 16 00:00:43,180 --> 00:00:45,420 dobre tematy na okładce. 17 00:00:45,420 --> 00:00:48,280 >> Więc po pierwsze, jak już przeszedł na ostatnie kilka tygodni, aby przypomnieć, 18 00:00:48,280 --> 00:00:51,700 Chłopaki, jest mnóstwo zasobów dostępny dla tego kursu. 19 00:00:51,700 --> 00:00:55,020 Wiele z nich będzie bardzo pomocny do was, jak nadal 20 00:00:55,020 --> 00:00:57,280 studia quizu 0, ponieważ to jest we wtorek po południu. 21 00:00:57,280 --> 00:00:59,630 Tak was wszystkich było studiuje na trochę. 22 00:00:59,630 --> 00:01:02,640 >> Nie są notatki do wykładów i źródło Kod, który należy 23 00:01:02,640 --> 00:01:04,050 na pewno sprawdzić. 24 00:01:04,050 --> 00:01:05,019 Oglądać szorty. 25 00:01:05,019 --> 00:01:07,470 Sprawdź study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 A następnie, wymienione poniżej, numer innych zasobów. 27 00:01:11,770 --> 00:01:14,020 >> Ponownie, jest jutro 0 quizu na 1 rano. 28 00:01:14,020 --> 00:01:18,230 Jeśli nie zostało to jeszcze zrobione, należy sprawdzić Quiz z tej O dokumencie na 0 29 00:01:18,230 --> 00:01:21,370 stronę przedmiotu, aby dowiedzieć się, dokąd się wybierasz, biorąc udział w quizie. 30 00:01:21,370 --> 00:01:25,770 Quiz rozpoczyna się w 1:10 i kończy się 70 minut później. 31 00:01:25,770 --> 00:01:29,610 Więc jeśli pojawi się po 1:10, jesteś dostanie, że wiele mniej minut 32 00:01:29,610 --> 00:01:30,940 od 70 do quizu. 33 00:01:30,940 --> 00:01:33,570 Więc upewnij się, że jesteś tam na czas. 34 00:01:33,570 --> 00:01:38,690 Jeśli jesteś studentem lub mają rozszerzenie niektóre inne względy badania, to 35 00:01:38,690 --> 00:01:40,400 może nie być w godzina pierwsza jutro. 36 00:01:40,400 --> 00:01:43,540 Ale znowu, sprawdź O Quiz 0 udokumentować, aby upewnić się nie wiadomo kiedy 37 00:01:43,540 --> 00:01:44,760 bierzesz udział w quizie. 38 00:01:44,760 --> 00:01:46,440 Napisałem 75 minut tutaj. 39 00:01:46,440 --> 00:01:48,580 Myślę, że ma rację, a nie 70. 40 00:01:48,580 --> 00:01:53,420 >> Obejmuje ona wszystkie materiały z tygodnia 0 do zeszłotygodniowego wykładu w środę. 41 00:01:53,420 --> 00:01:59,350 I znów, do tego quizu, za które Dokument, masz jeden dwustronny i 8 42 00:01:59,350 --> 00:02:03,770 1/2 do 11 arkuszy papieru, aby uzyskać używać jako notatek podczas quizu. 43 00:02:03,770 --> 00:02:08,570 Wiele osób, jeśli nie większość ludzi, mają okazało się, że jednym z najbardziej pomocny sposób 44 00:02:08,570 --> 00:02:11,970 na studia jest quiz wykonaj arkusz nauce, 45 00:02:11,970 --> 00:02:13,730 jedna sider, własnych. 46 00:02:13,730 --> 00:02:17,710 Więc spójrz na tych ostatnich, jeśli widziałeś przeszłych. 47 00:02:17,710 --> 00:02:19,960 Dotrzeć do znajomych, aby zobaczyć, co oni umieszczenie na nich. 48 00:02:19,960 --> 00:02:23,610 >> Ale ręce w dół, to najlepszy sposób można Badanie to jest przejść przez wszystko i 49 00:02:23,610 --> 00:02:26,530 zredukować go do tego, co powinien lub powinien Nie należy w tym arkuszu 50 00:02:26,530 --> 00:02:30,570 papier, bo to po prostu bardzo była sposobem, aby upewnić się, 51 00:02:30,570 --> 00:02:33,620 idziesz przez wszystko i mieć jakieś znajomości z nim. 52 00:02:33,620 --> 00:02:36,690 Większość ludzi, znaleźć, mimo że się arkusz papieru siedział 53 00:02:36,690 --> 00:02:39,840 obok nich w quizie, nie włącza do niego, gdyż jeszcze, że bardzo 54 00:02:39,840 --> 00:02:43,290 Proces przechodzi informacji pomógł im się go nauczyć. 55 00:02:43,290 --> 00:02:45,370 >> Czy ktoś ma jakieś pytania o quizie 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Ma wszystkich - 58 00:02:51,450 --> 00:02:53,230 Nie zamierzam robić pokaz rękach. 59 00:02:53,230 --> 00:02:53,550 Nic nie szkodzi. 60 00:02:53,550 --> 00:02:54,790 Chciałem zapytać, kto rozpoczął studia. 61 00:02:54,790 --> 00:02:58,360 Ale ja nie chcę, aby ci wszystko nie podnieść ręce. 62 00:02:58,360 --> 00:03:01,290 Tak jak powiedziałem - tak, Avi, śmiało. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Co byłoby przydatne rzeczy umieścić na jednej pager? 64 00:03:04,205 --> 00:03:05,875 >> Student: To zależy od ciebie. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirschhorn: Otrzymasz korzystać z wyroku. 66 00:03:08,210 --> 00:03:13,220 Przydatne rzeczy umieścić na jednej pager, jeśli jesteś mylić o Big O 67 00:03:13,220 --> 00:03:17,510 czas różnych rodzajów wyszukiwania i rodzaju, umieścić, że w sprawie nie 68 00:03:17,510 --> 00:03:18,760 poręczne dandys wykres. 69 00:03:18,760 --> 00:03:22,250 W ten sposób, jeśli jesteś proszony, że na quizu, nie trzeba spróbować i rysunek 70 00:03:22,250 --> 00:03:23,560 czy to z powodu, przez starcie. 71 00:03:23,560 --> 00:03:24,730 Możesz po prostu skopiować go. 72 00:03:24,730 --> 00:03:28,320 Jeśli spojrzeć na quizy przeszłości, wiele razy, nie działa na pytania w czasie. 73 00:03:28,320 --> 00:03:34,150 Tak że byłoby przykład dobre co umieścić na jednej pager. 74 00:03:34,150 --> 00:03:37,450 >> Inne dobre rzeczy włożyć, jeśli jesteś zagubiony jak deklarować 75 00:03:37,450 --> 00:03:40,570 Funkcja lub co poszczególne części deklaracja funkcji są, napisz 76 00:03:40,570 --> 00:03:43,400 że tam, generycznych wersji i to może przykład. 77 00:03:43,400 --> 00:03:47,290 Jeśli jesteś mylić o wskazówki, schemat jak wskaźniki praca jest 78 00:03:47,290 --> 00:03:48,660 Prawdopodobnie bardzo pomocna. 79 00:03:48,660 --> 00:03:52,440 Jeśli jesteś mylić o rekursji, a skosztować tam funkcję rekurencyjną 80 00:03:52,440 --> 00:03:54,980 może również okazać się bardzo pomocna. 81 00:03:54,980 --> 00:03:57,290 Czy to daje jakieś pomysły? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Musisz zrozumieć, Cały proces kompilacji, jak 83 00:04:01,820 --> 00:04:03,220 jak to wszystko działa? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorn: Wszystko , który został pokryty mógł 85 00:04:06,620 --> 00:04:08,060 pokazać się w quizie. 86 00:04:08,060 --> 00:04:08,930 Pytania - 87 00:04:08,930 --> 00:04:11,300 ale znowu, niektóre rzeczy będą ważone stopniu niż inne. 88 00:04:11,300 --> 00:04:14,330 Niektóre rzeczy mają pochodzić ponownie , a następnie w klasie w 89 00:04:14,330 --> 00:04:15,590 Wykład i sekcja. 90 00:04:15,590 --> 00:04:17,220 Inne rzeczy nie mają wymyślić, że często. 91 00:04:17,220 --> 00:04:22,900 >> Rozmawialiśmy dużo o # include i -L, a coś, co to znaczy w 92 00:04:22,900 --> 00:04:24,390 Proces kompilacji. 93 00:04:24,390 --> 00:04:29,120 Rozmawialiśmy dużo o GDB, trzymać, te różne flagi, które stosujemy, gdy 94 00:04:29,120 --> 00:04:33,100 musimy skompilować coś, a co make15 np. rzeczywiście 95 00:04:33,100 --> 00:04:34,510 oznacza, i rzeczywiście. 96 00:04:34,510 --> 00:04:38,110 Nie mów tyle, o każdy krok w 97 00:04:38,110 --> 00:04:39,240 Proces kompilacji. 98 00:04:39,240 --> 00:04:40,410 Mamy jeszcze rozmawialiśmy o tym. 99 00:04:40,410 --> 00:04:42,550 Więc to jest coś, czego jeszcze powinien znać. 100 00:04:42,550 --> 00:04:44,610 Ale znowu, nie zamierzamy być - 101 00:04:44,610 --> 00:04:49,140 rzeczy, które pojawią się w klasie częściej są bardziej prawdopodobne do wystąpienia więcej 102 00:04:49,140 --> 00:04:52,495 częściej i bardziej intensywnie ważonych w quizie. 103 00:04:52,495 --> 00:04:53,280 >> Fajne. 104 00:04:53,280 --> 00:04:54,580 Wszelkie inne pytania dotyczące quizu 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, więc mogę umieścić listę Tematy na forum. 107 00:05:00,050 --> 00:05:01,550 Przeszedłem przez program nauczania. 108 00:05:01,550 --> 00:05:07,340 Przeszedłem sekcji test z wczoraj i te slajdy wymyślić 109 00:05:07,340 --> 00:05:13,710 z niepełnego wykazu tematów że mamy objęte dotychczas w CS50 110 00:05:13,710 --> 00:05:16,800 i rzeczy, które mogą pojawiają się na quiz. 111 00:05:16,800 --> 00:05:19,900 Więc ja nie zamierzam przejść przez każdy z nich. 112 00:05:19,900 --> 00:05:22,370 Że zajmie dużo więcej czasu niż mamy teraz. 113 00:05:22,370 --> 00:05:26,880 Ale Ja to się tutaj z nadzieją pobiegać pamięć co do rzeczy, które mogą 114 00:05:26,880 --> 00:05:28,420 lub może nie być tak zna ciebie. 115 00:05:28,420 --> 00:05:32,850 >> I chciałbym spędzić większość Sekcja odpowiadając na pytania o 116 00:05:32,850 --> 00:05:35,130 te tematy, tematy, które nie zostały uwzględnione. 117 00:05:35,130 --> 00:05:36,130 Możemy napisać kod pseudo. 118 00:05:36,130 --> 00:05:40,010 Możemy napisać prawdziwy kod aby upewnić się, że - 119 00:05:40,010 --> 00:05:44,280 Mogę odpowiedzieć na to pytanie i pomoże wszyscy zasadniczo rozumieć 120 00:05:44,280 --> 00:05:48,330 Wiele z tych tematów, więc będziesz czuć przygotowane i wygodne wchodząc 121 00:05:48,330 --> 00:05:50,150 Quiz jutro. 122 00:05:50,150 --> 00:05:52,300 Więc przeczytać listę. 123 00:05:52,300 --> 00:05:54,780 Mam nadzieję doszli do sekcji kilka pytań, jak również. 124 00:05:54,780 --> 00:05:58,480 Kiedy będziesz gotowy, podnieść rękę i zaczniemy. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Należy pamiętać, pytania masz, nie ma głupich pytań. 127 00:06:05,200 --> 00:06:06,250 Słyszeliśmy, że dużo. 128 00:06:06,250 --> 00:06:09,490 I pytania trzeba, jestem gotów postawić, jak wiele innych osób 129 00:06:09,490 --> 00:06:11,740 siedzi tu i oglądania online mają również. 130 00:06:11,740 --> 00:06:13,770 Więc można tylko pomóc ludziom zadając pytania. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: pomiędzy stosie kupa, tam jest wstępnie przyznane 133 00:06:18,040 --> 00:06:22,880 procent pamięci, który jest zdefiniowany jako jest na stosie lub hałdy? 134 00:06:22,880 --> 00:06:25,010 Lub jak to działa dokładnie? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorn: Wielki znak zapytania. 136 00:06:26,230 --> 00:06:28,640 Idę do tyłu prześledzić trochę. 137 00:06:28,640 --> 00:06:30,910 Czy wszyscy - 138 00:06:30,910 --> 00:06:31,660 proszę tu być uczciwy. 139 00:06:31,660 --> 00:06:34,130 Wiem, że proszę cię podnieść strony przed swoimi rówieśnikami. 140 00:06:34,130 --> 00:06:38,510 Ale są tam ludzie, którzy czują się niewygodne ze stosu i sterty 141 00:06:38,510 --> 00:06:42,980 i chciałbym, aby przejść nad tym i co ci chodzi? 142 00:06:42,980 --> 00:06:43,880 Podnieś rękę, jeśli - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Dziękuję. 145 00:06:45,120 --> 00:06:48,420 Więc mamy zamiar iść na stos i kupa naprawdę szybko, a następnie 146 00:06:48,420 --> 00:06:50,370 przejść do odpowiedzi na Twoje pytanie. 147 00:06:50,370 --> 00:06:58,250 >> Więc jeśli zwracamy się do reprezentowania polu pamięci na komputerze, jakie są 148 00:06:58,250 --> 00:07:02,160 rzeczy, które w tym polu? 149 00:07:02,160 --> 00:07:03,630 Główny. 150 00:07:03,630 --> 00:07:04,020 Główną funkcją. 151 00:07:04,020 --> 00:07:05,890 Gdzie głównym iść? 152 00:07:05,890 --> 00:07:08,090 >> STUDENT: [niesłyszalne]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirschhorn: Więc będziemy umieścić głównym tutaj. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Co jeszcze idzie w tym polu? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> STUDENT: Funkcje, które można nazwać. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Funkcje które nazywamy. 159 00:07:19,020 --> 00:07:20,440 I gdzie są? 160 00:07:20,440 --> 00:07:21,300 >> Student: W stosie. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirschhorn: Oni go na stosie. 162 00:07:22,380 --> 00:07:27,350 Więc mamy zamiar nazwać co tu stos. 163 00:07:27,350 --> 00:07:31,880 I do góry, mamy kupę. 164 00:07:31,880 --> 00:07:35,450 Więc pamięć nie jest tak jak to pudełko. 165 00:07:35,450 --> 00:07:37,330 Ale to jest rzeczywiście bardzo podobny. 166 00:07:37,330 --> 00:07:40,840 To będzie dużo pudełek na i ponad, w zależności od tego, jak duży jest twój 167 00:07:40,840 --> 00:07:43,730 komputer lub jak duża pamięć jest. 168 00:07:43,730 --> 00:07:46,950 >> Na cytat-koniec cytatu "dół" jest stos. 169 00:07:46,950 --> 00:07:50,880 I jest wiele rzeczy, że go na stosie. 170 00:07:50,880 --> 00:07:53,840 I tych, zależy od funkcji masz w kodzie. 171 00:07:53,840 --> 00:07:57,780 Zawsze masz jedną funkcję w telefonie Kod nazywany głównym, więc zawsze 172 00:07:57,780 --> 00:08:00,480 Sekcja tu w stos poświęcone głównym. 173 00:08:00,480 --> 00:08:03,980 >> Te odcinki w stosie nazywane są ramki stosu. 174 00:08:03,980 --> 00:08:09,580 Kiedy zadzwonić do innej funkcji, powiedzmy głównym zwraca binarną funkcję wyszukiwania, 175 00:08:09,580 --> 00:08:11,075 stawiamy kolejne ramki na stosie. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Dokładniej, będziemy darować kawałek pamięci na nasze 178 00:08:17,320 --> 00:08:22,960 komputer do przechowywania binarne wyszukiwania jest lokalny zmienne i uruchomić plik binarny 179 00:08:22,960 --> 00:08:24,150 Kod wyszukiwania. 180 00:08:24,150 --> 00:08:26,810 >> Tak nazywamy wyszukiwanie binarne. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 W tym fragmencie pamięci, będziemy przechowywać swoje zmienne lokalne. 183 00:08:33,340 --> 00:08:35,270 Mamy zamiar zapisać swoje printf połączeń. 184 00:08:35,270 --> 00:08:38,159 Cokolwiek się zdarzy, że funkcja jest będą przechowywane tam. 185 00:08:38,159 --> 00:08:40,350 Binary search zamierza wykonać. 186 00:08:40,350 --> 00:08:42,210 To będzie wykonać egzekucję. 187 00:08:42,210 --> 00:08:47,450 Co to jest słowo, które oznacza w C że funkcja powinna 188 00:08:47,450 --> 00:08:49,306 zakończenia jego realizacji? 189 00:08:49,306 --> 00:08:50,040 >> STUDENT: Powrót. 190 00:08:50,040 --> 00:08:50,870 >> JASON Hirschhorn: Powrót. 191 00:08:50,870 --> 00:08:53,230 Więc gdy widzisz instrukcji return, Funkcja kończy 192 00:08:53,230 --> 00:08:54,350 gdy trafi to. 193 00:08:54,350 --> 00:08:56,740 Szukaj więc binarny trafi jego powrót. 194 00:08:56,740 --> 00:09:01,360 Ta część pamięci będzie zasadniczo być uwolnione. 195 00:09:01,360 --> 00:09:03,510 I główny wróci do wykonania. 196 00:09:03,510 --> 00:09:07,240 Tak więc głównym będzie wstrzymać gdziekolwiek był, zadzwoń wyszukiwanie binarne, trochę wartości zwracanej, 197 00:09:07,240 --> 00:09:08,700 i kontynuować wykonanie. 198 00:09:08,700 --> 00:09:10,840 Ramka stosu odejdzie. 199 00:09:10,840 --> 00:09:14,810 >> Jeśli nazywamy rekurencyjną funkcję, która Jest to funkcja, która zwraca się w ciągu 200 00:09:14,810 --> 00:09:18,480 kółko, możemy uzyskać - mówi nam nie binarnego wyszukiwania rekurencyjnie. 201 00:09:18,480 --> 00:09:21,520 Możemy uzyskać poszukiwaną wersję jednego binarnego, wyszukiwanie binarne dwa, wyszukiwanie binarne 202 00:09:21,520 --> 00:09:24,090 trzy, cztery binarne wyszukiwania, wyszukiwanie binarne pięć. 203 00:09:24,090 --> 00:09:27,950 I wtedy ten końcowy wyszukiwanie binarne pięć trafi na sprawę podstawową, i stos 204 00:09:27,950 --> 00:09:31,010 klatek będzie wrócić i zatrzymać zamykanie , aż wrócimy do głównego. 205 00:09:31,010 --> 00:09:32,530 Możemy iść na rekursji w kawałku. 206 00:09:32,530 --> 00:09:35,530 Ale to wszystko jest do powiedzenia, jeśli jesteś wywołując wiele funkcji na raz, 207 00:09:35,530 --> 00:09:39,250 że nie będzie wielu stos ramki na stosie. 208 00:09:39,250 --> 00:09:42,900 >> Stos, z drugiej strony, do Tutaj nie jest dla funkcji 209 00:09:42,900 --> 00:09:44,380 nie dla zmiennych lokalnych. 210 00:09:44,380 --> 00:09:48,920 To dla dynamicznie przydzielane zmienne. 211 00:09:48,920 --> 00:09:57,210 Więc są to zmienne, które mogą być inicjowane w jednej głównej lub 212 00:09:57,210 --> 00:09:58,640 funkcja, która główne połączenia. 213 00:09:58,640 --> 00:10:00,790 W dowolnym miejscu w kodzie, że może zostać zainicjowany. 214 00:10:00,790 --> 00:10:04,360 I zainicjować dynamicznie Zmienna przydzielone. 215 00:10:04,360 --> 00:10:06,970 Jaką funkcję w C używamy? 216 00:10:06,970 --> 00:10:07,600 >> STUDENT: Malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirschhorn: Malloc. 218 00:10:09,240 --> 00:10:10,800 Nazywasz malloc. 219 00:10:10,800 --> 00:10:12,260 Masz miejsca pamięci. 220 00:10:12,260 --> 00:10:15,020 I że przestrzeń pamięci jest hałdy. 221 00:10:15,020 --> 00:10:18,840 I że pozostaje przestrzeń pamięci tam do czasu wywołania darmo. 222 00:10:18,840 --> 00:10:22,670 >> Tak dynamicznie przydzielane zmienne kupa będzie istnieć tak długo, jak ty 223 00:10:22,670 --> 00:10:25,250 chcę, żeby istnieć, a oni nie będą odejść, dopóki nie wyraźnie 224 00:10:25,250 --> 00:10:26,760 powiedz im odejść. 225 00:10:26,760 --> 00:10:29,670 Możesz utworzyć je w jednej funkcji. 226 00:10:29,670 --> 00:10:31,930 Stos, które działają w ramka zniknie. 227 00:10:31,930 --> 00:10:35,490 Ale, że zmienna będzie nadal istnieć w stos, dopóki nie zostanie uwolniony 228 00:10:35,490 --> 00:10:39,650 potencjalnie przez funkcję, zwaną wyszukiwanie binarne lub cokolwiek. 229 00:10:39,650 --> 00:10:42,580 >> Więc te zmienne kupa tam tak długo, jak chcesz 230 00:10:42,580 --> 00:10:43,490 im tam. 231 00:10:43,490 --> 00:10:46,090 A oni się umieścić tutaj. 232 00:10:46,090 --> 00:10:47,450 A potem następny zostanie tam umieszczone. 233 00:10:47,450 --> 00:10:50,210 Mają coraz wypełnione, a oni tam pozostać do czasu wywołania darmo. 234 00:10:50,210 --> 00:10:52,870 >> I w istocie, sterty i stosu, się do kwestii Marcusa, 235 00:10:52,870 --> 00:10:54,500 rośnie w kierunku do siebie nawzajem. 236 00:10:54,500 --> 00:10:57,730 A jeśli działają one na siebie, masz stosować całą pamięć w telefonie 237 00:10:57,730 --> 00:11:01,330 komputer, a program będzie zamknąć dlatego, że nie mam żadnych więcej pamięci 238 00:11:01,330 --> 00:11:02,420 od lewej do użycia. 239 00:11:02,420 --> 00:11:07,290 Pomiędzy nimi istnieje potencjalnie innych rzeczy. 240 00:11:07,290 --> 00:11:10,980 Ale zakres tego kursu, Ciebie nie musisz się o to martwić. 241 00:11:10,980 --> 00:11:12,020 >> Tak aby była odpowiedź do Twojego pytania. 242 00:11:12,020 --> 00:11:13,520 Niech się Pan o to nie martwi. 243 00:11:13,520 --> 00:11:15,550 Ale to było dawno odpowiedź. 244 00:11:15,550 --> 00:11:17,800 Wszystko, co musisz wiedzieć, sterty i stosu będzie - 245 00:11:17,800 --> 00:11:18,900 rozpoczyna się na dole. 246 00:11:18,900 --> 00:11:19,570 Stos ma. 247 00:11:19,570 --> 00:11:20,790 Kupa tam jest. 248 00:11:20,790 --> 00:11:21,990 Będą zbliżyć do siebie. 249 00:11:21,990 --> 00:11:23,110 >> A jeśli dotknąć, to jest problem. 250 00:11:23,110 --> 00:11:24,500 Ci zabrakło pamięci. 251 00:11:24,500 --> 00:11:28,760 Ale także, oprócz wiedzy, gdzie są one, co jest przechowywane w obydwu 252 00:11:28,760 --> 00:11:30,512 stosu i sterty. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Kiedy zderzają się, jest to, że przepełnienie stosu? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorn: Kiedy zderzają się, to nie jest przepełnienie stosu. 256 00:11:35,670 --> 00:11:38,340 Przepełnienie stosu jest inny obszar że możemy przejść, jeśli chcesz. 257 00:11:38,340 --> 00:11:40,020 OK, wrócimy do tego za chwilę. 258 00:11:40,020 --> 00:11:42,730 >> Student: Co jest słowo nazywa gdy uderzają wzajemnie 259 00:11:42,730 --> 00:11:44,450 stosu i sterty? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorn: Na razie, nie przejmuj się. 261 00:11:46,640 --> 00:11:47,750 Po prostu wiem - 262 00:11:47,750 --> 00:11:50,530 Odpowiem na to pytanie po zajęciach. 263 00:11:50,530 --> 00:11:52,680 Jeśli działają one na siebie, to zabrakło z pamięci, bo nie ma więcej 264 00:11:52,680 --> 00:11:53,330 miejsca tam. 265 00:11:53,330 --> 00:11:55,450 >> Student: Przepraszam, co jest wina SEG? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorn: Segment Usterka może być konieczne - 267 00:11:58,710 --> 00:12:02,240 to zależy, dlaczego nazywa winy SEG. 268 00:12:02,240 --> 00:12:06,260 Zdarza się, że przepełnienie stosu, to będzie powiedzieć seg fault jako błąd. 269 00:12:06,260 --> 00:12:08,180 >> Student: Co dereferencing null zmienna? 270 00:12:08,180 --> 00:12:10,040 Czy to wina SEG? 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirschhorn: dereferencing pustego wskaźnika - 272 00:12:11,480 --> 00:12:17,850 OK, więc jeśli masz wskaźnik, że ty równy null, wskaźniki, przypomnijmy, 273 00:12:17,850 --> 00:12:20,270 Adresy sklep pamięci ich wartości. 274 00:12:20,270 --> 00:12:23,660 I zasadniczo jest wskaźnik NULL przechowywanie 0, 0-th 275 00:12:23,660 --> 00:12:26,670 zająć w tej zmiennej. 276 00:12:26,670 --> 00:12:30,010 Tak więc 0x, 0, 0, 0, 0, i tak dalej. 277 00:12:30,010 --> 00:12:35,030 Że 0-ty adres w pamięci, że nie jest w naszym zdjęciu, to tam 278 00:12:35,030 --> 00:12:38,800 gdzieś, że jest zastrzeżone dla komputera. 279 00:12:38,800 --> 00:12:40,130 My nie wolno go dotykać. 280 00:12:40,130 --> 00:12:44,680 >> Więc, gdy Twój program jest wykonywany, jeśli coś próbuje przejść do pamięci 281 00:12:44,680 --> 00:12:48,990 adres 0, to wie, że że jest pusta wartość. 282 00:12:48,990 --> 00:12:50,820 Wie, nic nie powinno tam być. 283 00:12:50,820 --> 00:12:53,420 Więc jeśli próbujesz coś tam i używać i traktować jak tam lub coś 284 00:12:53,420 --> 00:12:58,355 stara się iść do tego miejsca, jesteś dostanie usterki seg lub błąd. 285 00:12:58,355 --> 00:13:00,520 Czy to wyjaśniło Twoje pytanie? 286 00:13:00,520 --> 00:13:03,170 >> A teraz wracamy na przepełnienie stosu. 287 00:13:03,170 --> 00:13:09,560 Rzeczy na stosie, jak macie widział, w - powiedzmy narysować blisko 288 00:13:09,560 --> 00:13:11,966 się z ramki stosu. 289 00:13:11,966 --> 00:13:15,050 Czy każdy może zobaczyć, że? 290 00:13:15,050 --> 00:13:16,650 Więc mamy stosu ramki. 291 00:13:16,650 --> 00:13:23,260 Ratujemy tablicę jako lokalny zmienna w tej funkcji. 292 00:13:23,260 --> 00:13:29,510 Więc powiedzieć, że nasze tablica ma pięć punktów. 293 00:13:29,510 --> 00:13:33,230 Wszystkie pięć osób będą przechowywane W tej ramce stosu. 294 00:13:33,230 --> 00:13:37,540 >> Jeśli zaczniemy piśmie poza Granice tej tablicy - 295 00:13:37,540 --> 00:13:43,990 Jeśli więc zacząć pisać do, powiedzmy, że jest 0. 296 00:13:43,990 --> 00:13:46,800 Są to pięć indeksy naszej tablicy. 297 00:13:46,800 --> 00:13:50,980 Jeśli zaczniesz pisać w indeksie 5, który nie mamy, gdy mamy 298 00:13:50,980 --> 00:13:55,900 Tablica o wymiarach 5, zaczynamy pisanie do Indeks 6, 7, 8, 9, możemy dostać stos 299 00:13:55,900 --> 00:13:57,960 Przepełnienie błąd. 300 00:13:57,960 --> 00:14:00,510 >> Generalnie to nie jest - 301 00:14:00,510 --> 00:14:04,910 prawdopodobnie będziesz miał kłopoty jeśli się nad jednym. 302 00:14:04,910 --> 00:14:08,640 Ale ogólnie, można dostać się do większość problemów, jeśli pójdziesz przez wiele 303 00:14:08,640 --> 00:14:12,770 i iść tak daleko, że piszesz na na adres zwrotny, który 304 00:14:12,770 --> 00:14:16,080 Funkcja, która znajduje się w Dno ramki stosu. 305 00:14:16,080 --> 00:14:16,520 >> Ponieważ, tak? 306 00:14:16,520 --> 00:14:17,670 Ci - w - przepraszam. 307 00:14:17,670 --> 00:14:18,550 Nie ", ponieważ dobrze." 308 00:14:18,550 --> 00:14:20,470 >> W ramce stosu, trzeba Twoje lokalne zmienne. 309 00:14:20,470 --> 00:14:27,090 U dołu stosu Rama jest adres zwrotny. 310 00:14:27,090 --> 00:14:28,790 To, gdzie funkcja idzie, kiedy to się skończy. 311 00:14:28,790 --> 00:14:33,750 A jeśli zastąpić ten zwrot adres, a następnie, gdy ta ramka stosu, 312 00:14:33,750 --> 00:14:36,680 kiedy idziesz przez stos kadrowanie i wykonywanie każdego wiersza, jesteś 313 00:14:36,680 --> 00:14:40,350 pójdzie do nowego adresu zwrotnego tam jest napisane, że zamiast 314 00:14:40,350 --> 00:14:40,910 rzeczywisty jeden. 315 00:14:40,910 --> 00:14:45,050 I to jest, jak widzieliśmy, niektóre naruszenia bezpieczeństwa 316 00:14:45,050 --> 00:14:46,780 może zdarzyć się z komputerami. 317 00:14:46,780 --> 00:14:52,760 >> Więc przepełnienie stosu, w skrócie, jest przy można zastąpić część w stosie 318 00:14:52,760 --> 00:14:55,440 masz się stosować, lokalne Zmienna masz się stosować, a 319 00:14:55,440 --> 00:14:58,070 w szczególności podczas uruchamiania nadpisywania ważne rzeczy, jak 320 00:14:58,070 --> 00:14:59,100 adres zwrotny. 321 00:14:59,100 --> 00:15:00,090 I tam dostaniesz błąd. 322 00:15:00,090 --> 00:15:03,980 A może nawet można zacząć nawet pisząc do - 323 00:15:03,980 --> 00:15:05,370 Wyszukiwanie binarne było powiedzieć tuż nad głównym. 324 00:15:05,370 --> 00:15:07,790 Jeśli dużo zastąpiłeś, ci może napisać do głównego. 325 00:15:07,790 --> 00:15:10,230 Ale ogólnie, pojawi się błąd, zanim Następnie, ponieważ komputerowy wie 326 00:15:10,230 --> 00:15:12,270 robisz coś, czego nie powinno się robić. 327 00:15:12,270 --> 00:15:12,560 Tak. 328 00:15:12,560 --> 00:15:13,910 >> STUDENT: Jaka jest różnica między przepełnienie stosu 329 00:15:13,910 --> 00:15:16,940 i przepełnienie bufora? 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirschhorn: Przepełnienie bufora jest bardziej ogólny typ 331 00:15:19,420 --> 00:15:20,395 Znalazłem coś opisane. 332 00:15:20,395 --> 00:15:22,610 >> Student: Tak jest przepełnienie stosu przykład na przepełnienie bufora. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorn: Dokładnie. 334 00:15:23,420 --> 00:15:28,700 To jest tablica możemy myśleć jako bufor, miejsce na rzeczy, aby przejść w. 335 00:15:28,700 --> 00:15:30,600 Bufor ten jest przepełnienie stosu. 336 00:15:30,600 --> 00:15:33,210 Mogliśmy przepełnienie buforu sterty. 337 00:15:33,210 --> 00:15:36,870 Jeśli było bufor których często Tablica jest kupa, a my 338 00:15:36,870 --> 00:15:40,600 nadpisałeś te granice, to byłoby mają przepełnienie buforu sterty. 339 00:15:40,600 --> 00:15:44,870 >> I wykracza poza zakres tego kursu, są one wykrywane nieco inaczej. 340 00:15:44,870 --> 00:15:48,040 Kompilator ma specjalny sposoby wykrywania każdego. 341 00:15:48,040 --> 00:15:50,660 Ale jest przepełnienie buforu bardziej ogólny typu, co opisałem, 342 00:15:50,660 --> 00:15:54,090 co było przepełnienie bufora na stosie. 343 00:15:54,090 --> 00:15:56,240 Czy to wyjaśniło Twoje pytanie? 344 00:15:56,240 --> 00:15:57,910 Słodkie. 345 00:15:57,910 --> 00:16:01,850 >> Czy były jakieś inne pytania związane na stosie lub na stercie? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Tak. 348 00:16:05,510 --> 00:16:08,220 >> Student: Wiem, że masz do bezpłatnych ciągów bo są w kupie 349 00:16:08,220 --> 00:16:09,305 i nie chcesz, aby wyciek pamięci. 350 00:16:09,305 --> 00:16:12,240 Ale masz uwolnić zmiennych globalnych i takie tam? 351 00:16:12,240 --> 00:16:14,335 Lub są one automatycznie usuwane? 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirschhorn: Dobre pytanie. 353 00:16:15,700 --> 00:16:22,340 Więc w CS50.H tworzymy tę rzecz Ci zwany ciąg. 354 00:16:22,340 --> 00:16:23,800 Ciąg jest naprawdę to, co? 355 00:16:23,800 --> 00:16:24,810 >> STUDENT: Char gwiazdki. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorn: gwiazda char, wskaźnik do charakteru, wskaźnik do 357 00:16:29,180 --> 00:16:30,650 Tablica znaków. 358 00:16:30,650 --> 00:16:32,210 To ciąg jest. 359 00:16:32,210 --> 00:16:36,050 Więc musimy ją uwolnić, ponieważ getString, którego użyliśmy dużo - 360 00:16:36,050 --> 00:16:38,370 Nazwa ciągu jest równy GetString - 361 00:16:38,370 --> 00:16:43,560 że mallocs dla nas trochę pamięci na kupa, a następnie zwraca wskaźnik do 362 00:16:43,560 --> 00:16:47,230 Pierwszy znak, że łańcuch, gwiazda char. 363 00:16:47,230 --> 00:16:52,760 >> Tak ostentacyjnie, jeśli nie zostały pisanie darmo na dowolnych ciągów 364 00:16:52,760 --> 00:16:55,600 że nazywa się pan tak daleko, trzeba został przecieka trochę pamięci. 365 00:16:55,600 --> 00:16:57,430 Oczywiście, że nie mówił o to, więc nikt nie dostał w 366 00:16:57,430 --> 00:16:58,520 kłopotu robią. 367 00:16:58,520 --> 00:16:59,980 Ale w przyszłości, tak. 368 00:16:59,980 --> 00:17:03,990 Kiedy zadzwonić GetString, jesteś mallocing trochę miejsca na stercie. 369 00:17:03,990 --> 00:17:07,640 A jeśli nie zadzwonić później, że wolny ciąg, masz przeciek pamięci. 370 00:17:07,640 --> 00:17:09,440 Że odpowiedź na pytanie? 371 00:17:09,440 --> 00:17:10,606 >> Tak 372 00:17:10,606 --> 00:17:15,020 >> Student: Tak, aby to zrobić, używamy wolny tuż przed powrotem? 373 00:17:15,020 --> 00:17:18,510 Jak, w zakresie, myślę, że jeśli powiedzieć, jak, int main, w ramach 374 00:17:18,510 --> 00:17:24,410 zakres kodu, który znajduje się w tych nawiasy klamrowe, tuż przed - 375 00:17:24,410 --> 00:17:26,140 wiesz, gdzie jesteś, że zazwyczaj umieścić zwrot. 376 00:17:26,140 --> 00:17:27,950 Czy można umieścić za darmo przed tym? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorn: Więc można umieścić za darmo wszędzie tam, gdzie chcesz umieścić darmo. 378 00:17:31,000 --> 00:17:33,810 Ponieważ są one dynamicznie przydzielane zmienne, ponieważ mogą one 379 00:17:33,810 --> 00:17:39,170 Mieszkam poza zakres szczególności funkcji, jeśli zadzwonisz malloc w 380 00:17:39,170 --> 00:17:44,140 oddzielna funkcja, na przykład, getString, można zadzwonić za darmo w głównym. 381 00:17:44,140 --> 00:17:46,050 Nie musisz nazywać W szczególnej funkcji 382 00:17:46,050 --> 00:17:47,570 gdzie malloc nazywa. 383 00:17:47,570 --> 00:17:50,340 Ale trzeba to nazwać przed sądem zwrotu. 384 00:17:50,340 --> 00:17:51,120 >> I tak naprawdę zależy. 385 00:17:51,120 --> 00:17:54,960 To zależy od tego, dlaczego malloced że Przestrzeń w pierwszym miejscu. 386 00:17:54,960 --> 00:17:57,320 Niektórzy ludzie nazywają uwolnić się dość szybko. 387 00:17:57,320 --> 00:17:59,220 Niektórzy ludzie nie będą dzwonić za darmo do momentu Koniec ich programu. 388 00:17:59,220 --> 00:18:00,660 A oni przejść przez i wolne wszystko. 389 00:18:00,660 --> 00:18:03,597 To zależy od tego, dlaczego nazywa malloc. 390 00:18:03,597 --> 00:18:11,270 >> Student: A co byś powiedział, jeśli nazywa użytkowania GetString? 391 00:18:11,270 --> 00:18:13,320 Można by powiedzieć, wolne, co? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorn: Więc składnia za darmo jest po prostu wolny, otwarty nawias, w pobliżu 393 00:18:20,040 --> 00:18:22,130 nawias i nazwa wskaźnika. 394 00:18:22,130 --> 00:18:26,410 Więc jeśli piszesz String name równych getString, można umieścić nazwę tutaj. 395 00:18:26,410 --> 00:18:27,760 To nazwa wskaźnika. 396 00:18:27,760 --> 00:18:30,570 I wie, aby uwolnić tę pamięć. 397 00:18:30,570 --> 00:18:33,920 >> Uczeń: Tak więc kiedy zwalnia, że ​​pamięć, Wskaźnik wskazuje na to miejsce 398 00:18:33,920 --> 00:18:34,970 w pamięci? 399 00:18:34,970 --> 00:18:39,020 Lub też jest opróżniany z wskaźnik adres, który wskazuje na. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorn: Powinniśmy spróbować. 401 00:18:40,290 --> 00:18:41,430 Powinniśmy zakodować, że. 402 00:18:41,430 --> 00:18:43,880 Wróćmy gdy mamy do kodowania, i niech to kod, który. 403 00:18:43,880 --> 00:18:46,000 A jeśli chcesz dowiedzieć się, odpowiedź się, że można również kod 404 00:18:46,000 --> 00:18:46,690 w międzyczasie. 405 00:18:46,690 --> 00:18:49,100 Ale to jest dobre pytanie. 406 00:18:49,100 --> 00:18:53,480 >> Student: Czy jest możliwe, aby wolne coś zbyt szybko? 407 00:18:53,480 --> 00:18:58,530 Więc nadal trzeba go do programu, i uwolnił, że miejsca w pamięci? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorn: Tak. 409 00:18:59,200 --> 00:19:03,020 Jest to możliwe, jeśli coś za darmo a następnie użyć go ponownie, będziesz 410 00:19:03,020 --> 00:19:06,890 uruchomić w błąd. 411 00:19:06,890 --> 00:19:10,810 Ale to na ciebie, bo uwolnił coś, a następnie nazwał go później. 412 00:19:10,810 --> 00:19:13,940 Więc to był błąd programisty. 413 00:19:13,940 --> 00:19:14,780 Ale tak. 414 00:19:14,780 --> 00:19:17,760 Można napisać, że. 415 00:19:17,760 --> 00:19:19,240 >> Jeszcze jakieś pytania na temat - 416 00:19:19,240 --> 00:19:19,760 Tak. 417 00:19:19,760 --> 00:19:22,820 >> Uczeń: Tak więc, jeśli mają tylko uwolnić go, zanim w ogóle 418 00:19:22,820 --> 00:19:25,490 Program kończy się, to znaczy, jeśli Program kończy się i nie uwolni go, 419 00:19:25,490 --> 00:19:27,580 że pamięć jest nadal przydzielone? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorn: Jeśli program kończy i zapomnieć, aby uwolnić coś, a następnie 421 00:19:31,330 --> 00:19:34,390 że pamięć została przydzielona przez żywotność programu. 422 00:19:34,390 --> 00:19:37,670 Gdy program zamyka się całkowicie, że pamięć nie będzie 423 00:19:37,670 --> 00:19:39,490 pozostać tam na zawsze. 424 00:19:39,490 --> 00:19:42,080 Komputer jest na tyle inteligentny, aby wiedzieć, że gdy zamyka program, to 425 00:19:42,080 --> 00:19:46,440 należy się pozbyć wszystkie pamięci związany był z programem. 426 00:19:46,440 --> 00:19:51,240 >> Istnieją jednak narzędzia można uruchomić na program do wykrywania, jeśli przy 427 00:19:51,240 --> 00:19:54,720 Program zakończył, zapomniałeś , aby zwolnić pamięć. 428 00:19:54,720 --> 00:19:57,960 I na następne problemu ustawić gdzie będziesz używać malloc i korzystania 429 00:19:57,960 --> 00:20:02,610 wskaźniki, będzie uruchomiona ta zaprogramować od programu, aby zobaczyć, czy, 430 00:20:02,610 --> 00:20:06,530 gdy główne powróci, trzeba było niektóre rzeczy, które zostały pozostawione unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Więc nie zamierzamy zatrzymać malloced zawsze w komputerze. 432 00:20:09,130 --> 00:20:11,720 To byłoby marnotrawstwo, bo bardzo szybko, komputery 433 00:20:11,720 --> 00:20:12,960 zabraknie pamięci. 434 00:20:12,960 --> 00:20:16,450 Ale jeśli trwał do końca Twojego zaprogramować i nie są one uwolnione i twój 435 00:20:16,450 --> 00:20:20,260 Program wychodzi, że nadal problemem że to narzędzie pomoże Ci rozwiązać. 436 00:20:20,260 --> 00:20:21,520 >> Student: Czy to Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorn: To nazywa Valgrind. 438 00:20:22,910 --> 00:20:23,520 I będziesz - 439 00:20:23,520 --> 00:20:25,780 >> Uczeń: Ale nie mamy wiedzieć że w quizie, choć? 440 00:20:25,780 --> 00:20:27,600 To znaczy, że mówiono o trochę w wykładzie. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorn: Więc Valgrind jest nazwa tego narzędzia. 442 00:20:33,600 --> 00:20:37,180 Wiedząc to, co robi jest wystarczy quizu. 443 00:20:37,180 --> 00:20:40,200 Ale nie zostały wykorzystane jeszcze na twój Problem ustawić bo nie mieliśmy 444 00:20:40,200 --> 00:20:43,520 Zestaw problem wyraźnie rozpatrywane z malloc lub za pomocą malloc. 445 00:20:43,520 --> 00:20:45,330 Więc nie był jeszcze używany Valgrind. 446 00:20:45,330 --> 00:20:47,760 Ale można go użyć wcześniej niż później. 447 00:20:47,760 --> 00:20:48,710 >> Student: Czy można powtórzyć co Valgrind jest? 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirschhorn: Przepraszam? 449 00:20:49,190 --> 00:20:51,240 >> Student: Czy możesz powtórzyć to, co Celem Valgring jest? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorn: Valgrind to nazwa - 451 00:20:53,100 --> 00:20:59,890 jak GDB pomaga debugować program, Valgrind pomaga dowiedzieć się, czy 452 00:20:59,890 --> 00:21:03,210 rzeczy nie zostały uwolnione gdy program się zamyka. 453 00:21:03,210 --> 00:21:05,110 Więc można go uruchomić w programie. 454 00:21:05,110 --> 00:21:09,230 I program wychodzi, i będzie to powiedzieć program nazywa malloc to wiele 455 00:21:09,230 --> 00:21:13,670 razy tego wielu bajtów, a ty tylko w nazwie darmo to wiele razy. 456 00:21:13,670 --> 00:21:16,520 I tak zostawiłeś te wiele bajtów bez uwolniony. 457 00:21:16,520 --> 00:21:18,050 Albo będzie to powiedzieć już uwolniony wszystko. 458 00:21:18,050 --> 00:21:19,070 Dobra robota. 459 00:21:19,070 --> 00:21:19,480 >> STUDENT: OK. 460 00:21:19,480 --> 00:21:21,060 I to się nazywa Valgring? 461 00:21:21,060 --> 00:21:24,940 >> JASON Hirschhorn: V--L-G-R-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> STUDENT: pytanie o wskazówki. 463 00:21:25,970 --> 00:21:30,080 Więc mówisz, że n gwiazda x równa się coś. 464 00:21:30,080 --> 00:21:33,330 Równa, co jesteś wprowadzenie tam, jest to, że to, co jest umieścić wewnątrz 465 00:21:33,330 --> 00:21:36,120 x, co wskazuje, lub wskaźnik od x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorn: można powtórzyć pytanie? 467 00:21:37,690 --> 00:21:39,340 Możemy wyciągnąć go natomiast to powiedzieć? 468 00:21:39,340 --> 00:21:42,710 >> Student: W quizie, rzeczywiście, jeden nas wysłany, to było jak, char 469 00:21:42,710 --> 00:21:46,520 gwiazda prawda równa CS50 skały, prawda? 470 00:21:46,520 --> 00:21:52,190 Czy to oznacza, że ​​CS50 skały jest co prawda wskazuje? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorn: Więc mówisz o gwiazdy znaku w ciągu znaków, jak 472 00:21:55,810 --> 00:21:56,460 , który działa? 473 00:21:56,460 --> 00:21:56,890 Tak. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Miejmy narysować to tutaj. 476 00:21:59,140 --> 00:22:07,100 >> [Boku ROZMOWA] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorn: Więc ta zmienna ma być typu char gwiazdy. 478 00:22:11,130 --> 00:22:14,580 Jak duży jest zmienna gwiazdy typu char? 479 00:22:14,580 --> 00:22:15,510 Ile bajtów? 480 00:22:15,510 --> 00:22:16,450 >> STUDENCI: Cztery. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorn: To cztery bajty. 482 00:22:18,210 --> 00:22:21,420 Ile prawa jest zmienna typu int gwiazdy? 483 00:22:21,420 --> 00:22:22,210 >> STUDENCI: Cztery. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorn: cztery bajty. 485 00:22:24,910 --> 00:22:28,280 Jeżeli jest to wskaźnik, to jest zawsze cztery bajty, ponieważ zapisane wskaźniki, ich 486 00:22:28,280 --> 00:22:30,070 wartość jest adres pamięci. 487 00:22:30,070 --> 00:22:35,160 I adresy pamięci na CS50 Urządzenie to cztery bajty. 488 00:22:35,160 --> 00:22:42,900 Więc kiedy nazywamy GetString lub kiedy powiedzmy, stringName równa, a następnie w 489 00:22:42,900 --> 00:22:46,140 cudzysłowy umieścić napis, stawiamy - 490 00:22:46,140 --> 00:22:46,920 dobrze, że jest trochę inaczej. 491 00:22:46,920 --> 00:22:48,630 Zrobimy GetString jako przykład. 492 00:22:48,630 --> 00:22:52,150 Char coś lub gwiazda równa się łańcuch. 493 00:22:52,150 --> 00:22:54,360 Przykro mi, daj mi przykład że czytasz? 494 00:22:54,360 --> 00:22:57,590 >> STUDENT: Prawda jest równa char gwiazda "ska CS50" w cudzysłów. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorn: Więc ta gwiazda, ta nazwijmy to dla naszej zmiennej x. 496 00:23:02,260 --> 00:23:04,060 cele ogólne. 497 00:23:04,060 --> 00:23:05,970 Stworzyliśmy zmienną x. 498 00:23:05,970 --> 00:23:07,610 Jest to typ char gwiazda. 499 00:23:07,610 --> 00:23:10,950 Jest to wskaźnik do serii znaków. 500 00:23:10,950 --> 00:23:12,200 Więc tutaj - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Tak to jest, jak to by pracować w pamięci. 503 00:23:25,890 --> 00:23:27,410 To przechowywać adres pamięci. 504 00:23:27,410 --> 00:23:31,770 To przechowywać adres pamięci Pierwszy znak w tablicy. 505 00:23:31,770 --> 00:23:33,830 I wtedy, gdy następuje wskaźnik, byś 506 00:23:33,830 --> 00:23:35,200 uzyskania pierwszego znaku. 507 00:23:35,200 --> 00:23:38,780 >> A jeśli czytasz to coś jak łańcuch, komputer jest inteligentny 508 00:23:38,780 --> 00:23:42,930 wystarczy wiedzieć, przeczytać całość , aż dojdzie do gwałtownej reakcji 0. 509 00:23:42,930 --> 00:23:45,530 Ale jeśli czytasz to na charakter Czas, więc jesteś iteracja 510 00:23:45,530 --> 00:23:49,910 ten ciąg, wtedy po prostu czytać znaków na raz, aż dojdziesz do 511 00:23:49,910 --> 00:23:50,850 odwrotny ukośnik 0. 512 00:23:50,850 --> 00:23:52,335 To może nie odpowiedzieć na Twój pytanie, choć. 513 00:23:52,335 --> 00:23:55,610 >> Student: Tak, ale nie mają malloced że przestrzeń 514 00:23:55,610 --> 00:23:58,400 Jeszcze do tego wskaźnika. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorn: Więc nie jestem pewien, dokładnie to, czego szukasz w, 516 00:24:02,510 --> 00:24:03,640 bo nie sprawiają, że quiz. 517 00:24:03,640 --> 00:24:06,370 Który miał być pomocny zasobów z innego TF. 518 00:24:06,370 --> 00:24:11,380 Jeśli tworzysz na ciąg stos lub zmiennej lokalnej, to będzie 519 00:24:11,380 --> 00:24:16,920 po prostu tablica zamiast opłat ogólnie gwiazda char wskazując 520 00:24:16,920 --> 00:24:18,600 inny ciąg. 521 00:24:18,600 --> 00:24:20,550 Ale nie wiem. 522 00:24:20,550 --> 00:24:25,065 To może być wskaźnikiem innego ciąg na stosie, jak również. 523 00:24:25,065 --> 00:24:27,240 Tak. 524 00:24:27,240 --> 00:24:31,116 >> Student: Wiem, że trzeba przydzielić pamięci, gdy wskaźnik jest 525 00:24:31,116 --> 00:24:33,360 coraz deklarowane wewnątrz z innej funkcji. 526 00:24:33,360 --> 00:24:36,740 Czy trzeba zrobić to samo, jeśli to deklarowanych wewnątrz głównego, 527 00:24:36,740 --> 00:24:39,570 używasz go wewnątrz głównej? 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirschhorn: Więc tak. 529 00:24:43,590 --> 00:24:46,670 Możesz zadeklarować wskaźnik do dowolnego adres pamięci w pamięci. 530 00:24:46,670 --> 00:24:51,440 Może to być adres pamięci lokalnej zmienna, choć często, 531 00:24:51,440 --> 00:24:55,760 ludzie nie deklarują adresów pamięci do zmiennych lokalnych, ponieważ wykraczają 532 00:24:55,760 --> 00:24:59,890 Odległość kiedyś, że funkcja zwraca, które Dlatego generalnie malloc rzeczy. 533 00:24:59,890 --> 00:25:04,630 Ale tak, można zadeklarować wskaźnik do innej zmiennej lokalnej. 534 00:25:04,630 --> 00:25:06,360 To jest po prostu ogólnie nie zrobił. 535 00:25:06,360 --> 00:25:09,480 Ale mogę przyjrzeć się, że konkretne rzeczy po klasie. 536 00:25:09,480 --> 00:25:10,650 Tak. 537 00:25:10,650 --> 00:25:12,350 >> Student: Myślę, że to jest rodzaj o co się prosi. 538 00:25:12,350 --> 00:25:16,930 Wydaje się dziwne, aby być inicjowanie a nie jako wskaźnik 539 00:25:16,930 --> 00:25:20,760 adres, ale to, co wydaje się wartością. 540 00:25:20,760 --> 00:25:25,970 Wydaje się, CS50 to co jest w środku rzeczą jest wskazał i 541 00:25:25,970 --> 00:25:28,820 nie rzeczywisty adres, prawda? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorn: Więc to jest nie przypadek, choć. 543 00:25:30,520 --> 00:25:32,470 To nie jest to, co się dzieje. 544 00:25:32,470 --> 00:25:35,910 Kiedy deklarujesz gwiazdę char, jest to adres w pamięci. 545 00:25:35,910 --> 00:25:38,860 Wskaźniki są wszystkie adresy pamięci wskazując na coś innego. 546 00:25:38,860 --> 00:25:41,480 Że coś jeszcze może być na stos, ale prawie zawsze jest na 547 00:25:41,480 --> 00:25:43,440 kupa w drodze zobaczymy kiedyś. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Ale stringName równa cudzysłów "GetString", widzimy, że i my 550 00:25:53,500 --> 00:25:55,010 przez które można zajrzeć i kod, który. 551 00:25:55,010 --> 00:26:01,190 GetString ciąg nie jest zapisany w że zmienna, lub cokolwiek ciąg 552 00:26:01,190 --> 00:26:04,580 Nazwa nie jest zapisane, że zmienna, a nie dlatego, że tak 553 00:26:04,580 --> 00:26:06,070 wskaźniki pracy. 554 00:26:06,070 --> 00:26:06,770 Czy to ma sens? 555 00:26:06,770 --> 00:26:07,170 >> Uczeń: Tak. 556 00:26:07,170 --> 00:26:08,570 >> JASON Hirschhorn: OK. 557 00:26:08,570 --> 00:26:11,690 Miejmy nadzieję, że nie było mylące dla każdego. 558 00:26:11,690 --> 00:26:15,732 Ale jeśli tak, możemy spojrzeć na to jeszcze raz w kawałku, ponieważ jesteśmy naprawdę dzieje 559 00:26:15,732 --> 00:26:19,240 do kodu coś, co mam nadzieję, że pracy z tekstem i pomóc poczuć 560 00:26:19,240 --> 00:26:22,170 bardziej komfortowo z nich. 561 00:26:22,170 --> 00:26:24,869 >> Wszelkie inne kwestie związane z tymi tematów lub inne tematy, które 562 00:26:24,869 --> 00:26:26,119 Włożę z powrotem? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 I - 565 00:26:34,840 --> 00:26:36,310 teraz. 566 00:26:36,310 --> 00:26:37,630 Tak, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Więc to jest zupełnie bez związku, ale może po prostu przejść nad 568 00:26:39,860 --> 00:26:42,760 bardzo szybko, co musimy wiedzieć o różnicy między 32 a 569 00:26:42,760 --> 00:26:46,345 Maszyna 64-bit? 570 00:26:46,345 --> 00:26:47,740 >> JASON Hirschhorn: Tak. 571 00:26:47,740 --> 00:26:52,111 Więc 32 bity jest jak wiele bajtów? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: To cztery bajty. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorn: To cztery bajty. 574 00:26:54,360 --> 00:26:58,420 I 64 bity jest to, jak wiele bajtów? 575 00:26:58,420 --> 00:26:59,112 >> STUDENT: Osiem. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorn: Osiem bajtów. 577 00:27:00,610 --> 00:27:03,980 Więc jeszcze raz, osiem bitów to jeden bajt. 578 00:27:03,980 --> 00:27:08,340 Twoje urządzenie CS50 jest Maszyna 32-bit. 579 00:27:08,340 --> 00:27:13,650 Więc adresy pamięci są czterech bajtów. 580 00:27:13,650 --> 00:27:17,460 Istnieją 2 do 32. adresy pamięci. 581 00:27:17,460 --> 00:27:21,310 0 do 2 do 32 minus 1. 582 00:27:21,310 --> 00:27:27,630 A ja nie jestem pozytywny, ale to Prawdopodobnie zakres, co trzeba 583 00:27:27,630 --> 00:27:35,230 wiedzieć na maszynie 32-bitowego, to pamięć adresy są znowu cztery bajty, 584 00:27:35,230 --> 00:27:39,620 i to jest maksymalna kwota adresów pamięci. 585 00:27:39,620 --> 00:27:41,680 >> Ponadto, typy danych - 586 00:27:41,680 --> 00:27:45,020 Może to być coś tak dobrze, że warto zauważyć. 587 00:27:45,020 --> 00:27:49,610 Wielkość zależy od typu danych Maszyna pracy z. 588 00:27:49,610 --> 00:27:56,760 Tak char, jeden znak, jest to, jak wielu bajtów na naszej CS50 urządzenia? 589 00:27:56,760 --> 00:27:57,980 Jeden bajt. 590 00:27:57,980 --> 00:28:02,310 I to jest rzeczywiście jeden bajt jako oraz w komputerze 64-bitowym. 591 00:28:02,310 --> 00:28:05,920 >> I większość typów danych są takie same liczby bajtów na obu komputerach. 592 00:28:05,920 --> 00:28:11,620 Ale niektóre typy danych będą różne na obu komputerach. 593 00:28:11,620 --> 00:28:14,590 Tak że potencjalnie Jedyne, co musisz wiedzieć. 594 00:28:14,590 --> 00:28:16,710 >> Ale nawet to, jak sądzę, jest poza granice - 595 00:28:16,710 --> 00:28:20,990 Jestem prawie pewien, jeśli spojrzeć wstecz w starych quizy, to mówi, zakładamy na 596 00:28:20,990 --> 00:28:24,090 kodowanie problemów, których używasz Maszyna 32-bit. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Ale są, aby przejść wraz z tym w Jeśli jesteś zainteresowany, nie istnieje 599 00:28:30,620 --> 00:28:35,920 rodzaje danych, które są takie same Rozmiar na wszystkich maszynach. 600 00:28:35,920 --> 00:28:42,670 >> Jeśli widzieliście coś takiego uint32_t, może być lub 601 00:28:42,670 --> 00:28:43,260 Nie widziałem tego. 602 00:28:43,260 --> 00:28:44,290 To jest typ danych. 603 00:28:44,290 --> 00:28:47,570 Które mówi, jest 32 bity bez względu czym urządzenie to jest włączone. 604 00:28:47,570 --> 00:28:50,350 Więc kiedy ludzie piszą przenośne Kod, prawdopodobnie nie będzie korzystać ints. 605 00:28:50,350 --> 00:28:53,260 Oni zamiast używać tych innych danych rodzaje że będą wiedzieć sam 606 00:28:53,260 --> 00:28:54,780 Rozmiar na każdej maszynie. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> Madhu: Miałem pytanie o Proces kompilacji. 610 00:29:00,150 --> 00:29:04,110 Więc jeśli piszesz program, który używa Biblioteka jak CS50 lub coś 611 00:29:04,110 --> 00:29:06,840 tak, wiem, że biblioteka musi w pewnym punkcie, bądź 612 00:29:06,840 --> 00:29:08,590 skompilowane i połączone w. 613 00:29:08,590 --> 00:29:13,380 Ale ile z tego się dzieje podczas kompilacja programu? 614 00:29:13,380 --> 00:29:15,880 Jaka część tego procesu biblioteki pojawia się, gdy jesteś 615 00:29:15,880 --> 00:29:18,560 kompilacji własnego programu? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorn: Więc chodźmy na Ogólnie, kroki tego sposobu. 617 00:29:24,020 --> 00:29:26,280 Ci napisać c plik.. 618 00:29:26,280 --> 00:29:33,530 W c plik., To # include swoje Biblioteki nagłówka, na przykład, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Co oznacza, że ​​ostre m.in. Linia zrobić do programu? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Dodaje prototypy funkcjonuje z nagłówka 622 00:29:43,350 --> 00:29:45,120 plików w bibliotekach. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorn: Dokładnie. 624 00:29:45,600 --> 00:29:49,870 Dodaje, że te prototypy funkcji do kodu. 625 00:29:49,870 --> 00:29:55,230 Tak więc, gdy kod jest kompilowane w wczesnym stadium, kompilator wie 626 00:29:55,230 --> 00:29:59,250 że funkcje te naprawdę istnieją, i że gdzieś zostały zdefiniowane. 627 00:29:59,250 --> 00:30:02,460 Pliki. H nie obejmują definicje dla tych funkcji lub sposobu 628 00:30:02,460 --> 00:30:03,950 faktycznie pracują. 629 00:30:03,950 --> 00:30:07,960 Cs50.h tylko zawiera coś, co mówi getString jest prawdziwa rzecz, że 630 00:30:07,960 --> 00:30:09,270 może się zdarzyć. 631 00:30:09,270 --> 00:30:14,240 I standardio.h mówi printf jest prawdziwe, że może się zdarzyć. 632 00:30:14,240 --> 00:30:23,190 >> Więc c język z tym. Nagłówek plik zostanie przekształcone w niektórych 633 00:30:23,190 --> 00:30:27,750 Kod do odczytu maszynowego, które ostatecznie zostaje przekształcony binarny 634 00:30:27,750 --> 00:30:30,030 Kod, 0 i 1 jest. 635 00:30:30,030 --> 00:30:33,590 I to jest kod, który ostatecznie zostanie wykonany. 636 00:30:33,590 --> 00:30:38,550 -L CS50 linii - na przykład, gdy piszesz dzyń - 637 00:30:38,550 --> 00:30:41,830 a następnie są-l CS50, wpisać, że w. 638 00:30:41,830 --> 00:30:42,180 I widać, że. 639 00:30:42,180 --> 00:30:43,890 Podczas pisania zrobić, będziesz zobaczyć, że linia się tutaj. 640 00:30:43,890 --> 00:30:47,740 I zobaczymy, że w drugim przypadku kodujemy lub później, kiedy kod. 641 00:30:47,740 --> 00:30:50,390 >> Ale to-l linia CS50 robi coś nieco inaczej niż 642 00:30:50,390 --> 00:30:52,440 # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Co robi linia-l CS50 zrobić? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Chcę powiedzieć, że łączy biblioteki do funkcji 646 00:31:00,310 --> 00:31:02,710 zadzwonić, jak. pliki o. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorn: Tak bardzo blisko, jeśli nie spot-on. 648 00:31:08,200 --> 00:31:16,220 -L CS50 wykonuje plik binarny i łączy je z pliku binarnego. 649 00:31:16,220 --> 00:31:21,410 Więc cs50.h, nie ma sensu w przekształcaniu cs50.h z języka C do dwuskładnikowych każdego 650 00:31:21,410 --> 00:31:23,130 wolny czas, jest on używany. 651 00:31:23,130 --> 00:31:26,650 To byłoby głupie, bo to nie tracić czasu. 652 00:31:26,650 --> 00:31:30,420 Tak to już jest skompilowany i zwrócił się do pliku wykonywalnego. 653 00:31:30,420 --> 00:31:35,430 A teraz to ma być połączone z pliku na końcu. 654 00:31:35,430 --> 00:31:38,370 Więc te 1 i 0 są dzieje do łączenia się z tymi 655 00:31:38,370 --> 00:31:39,150 i 0 na koniec. 656 00:31:39,150 --> 00:31:43,670 Więc teraz będziesz rzeczywiście rzeczywista 1 i 0, które definiują sposób GetString, 657 00:31:43,670 --> 00:31:47,890 na przykład, działa, lub jak printf, Na przykład, prace. 658 00:31:47,890 --> 00:31:52,750 >> I uzyskać więcej informacji, nie krótkie kompilatory, które daje, że Nate 659 00:31:52,750 --> 00:31:55,410 należy sprawdzić, że idzie przez te etapy. 660 00:31:55,410 --> 00:31:56,050 Ale - 661 00:31:56,050 --> 00:31:56,560 Tak. 662 00:31:56,560 --> 00:32:01,700 >> Student: Czy zawsze w pliki o.. gdy są w formie biblioteki, 663 00:32:01,700 --> 00:32:06,764 gotowe do połączenia, związany - jak są one w kodzie binarnym? 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirschhorn: OK. 665 00:32:07,600 --> 00:32:08,420 Co - 666 00:32:08,420 --> 00:32:11,780 >> Student: Czy to zawsze w przypadku biblioteki, gdy połączyć je? 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirschhorn: Tak. 668 00:32:12,500 --> 00:32:17,300 Więc nie. S pliki, które będą kodem maszynowym, co również będzie 669 00:32:17,300 --> 00:32:17,975 tajemnicze do Ciebie. 670 00:32:17,975 --> 00:32:19,410 Nie musisz martwić się o nich. 671 00:32:19,410 --> 00:32:24,930 Ale ogólnie, tak, że będziesz być. o pliki gotowe. 672 00:32:24,930 --> 00:32:27,170 >> STUDENT: Więc kiedy statek biblioteki, czy tylko wysyła 673 00:32:27,170 --> 00:32:28,880 . hi. o? 674 00:32:28,880 --> 00:32:32,210 Nie wysyłamy. C lub. S.. 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirschhorn: Tak - 676 00:32:33,070 --> 00:32:36,260 i to jest w tym krótkim, jak również, jeśli informacja ta wydaje się pochodzić 677 00:32:36,260 --> 00:32:36,700 trochę szybko. 678 00:32:36,700 --> 00:32:39,870 Ale brakuje kompilatorów mówi o tym, jak również. 679 00:32:39,870 --> 00:32:43,290 Kiedy wysyłamy bibliotekę, jeśli statek . h, nagłówek pliku, te 680 00:32:43,290 --> 00:32:46,290 prototypy funkcji i 1-tych i 0, w to wszystko, czego potrzebujesz, aby dać. 681 00:32:46,290 --> 00:32:50,640 Nie musisz dać jak Funkcja działa. c plik. 682 00:32:50,640 --> 00:32:56,360 Ponieważ punkt poboru, lub wskazują API, punkt w tym SPL, 683 00:32:56,360 --> 00:32:59,650 przenośna biblioteka Stanford, to , aby nie martwić się, jak nowy 684 00:32:59,650 --> 00:33:04,220 GRect działa, albo jak przenieść utwory, lub jak dodać utwory. 685 00:33:04,220 --> 00:33:06,520 Wszystko, co musisz wiedzieć, jest to, że dodatek Jest to funkcja, że ​​można 686 00:33:06,520 --> 00:33:08,880 używać, i to robi. 687 00:33:08,880 --> 00:33:12,760 Tak naprawdę nie trzeba wiedzieć, jak jest napisany w C. Trzeba tylko 688 00:33:12,760 --> 00:33:15,460 Wiesz, tutaj są funkcje, co zrobić, a tu są 1 i 0 689 00:33:15,460 --> 00:33:18,870 jeśli naprawdę chcesz ich używać. 690 00:33:18,870 --> 00:33:19,530 >> Fajne. 691 00:33:19,530 --> 00:33:26,980 Więcej pytań na temat kompilatorów lub inne tematy na forum? 692 00:33:26,980 --> 00:33:30,300 >> Student: Mam pytanie, realizacji funkcji rekurencyjnych. 693 00:33:30,300 --> 00:33:31,170 Pytanie o rekursji. 694 00:33:31,170 --> 00:33:33,030 Miałem wrażenie, że przyjdzie się. 695 00:33:33,030 --> 00:33:38,310 Więc szybko przejść rekurencja w specyficzny 696 00:33:38,310 --> 00:33:40,690 Na przykład, funkcje silni. 697 00:33:40,690 --> 00:33:44,920 Ze względu na to, że Przykład często pojawia się lub jest stosowany 698 00:33:44,920 --> 00:33:46,170 do zilustrowania rekursji. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Tak więc "4!" odczytywany jest jako 4 silnia. 701 00:33:56,410 --> 00:33:59,120 I co 4 silnia oznacza? 702 00:33:59,120 --> 00:34:00,696 Co to robić? 703 00:34:00,696 --> 00:34:02,235 Jak obliczyć 4 silni? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 razy 3 razy 2 razy 1. 706 00:34:07,960 --> 00:34:11,889 >> Więc inny sposób napisać 4 silnia jest to napisać. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 razy 3 silnia. 709 00:34:19,022 --> 00:34:22,080 Ponieważ 3 silnia jest 3 razy 2 razy 1. 710 00:34:22,080 --> 00:34:27,580 Więc 4 razy 3 silnia jest 4 razy 3 razy 2 razy 1. 711 00:34:27,580 --> 00:34:32,679 To dlatego jest świetnym silnia Kandydat na rekursji, ponieważ jest to 712 00:34:32,679 --> 00:34:36,630 jasne, że istnieje coś, co dzieje się w kółko i na na 713 00:34:36,630 --> 00:34:39,820 mniejsza ilość rzeczy do czasu dojdziesz do końca. 714 00:34:39,820 --> 00:34:42,570 Po dotarciu 1, 1 silnia jest 1. 715 00:34:42,570 --> 00:34:43,719 Nie można pójść znacznie dalej. 716 00:34:43,719 --> 00:34:47,219 0 silnia jest również określone jako 1. 717 00:34:47,219 --> 00:34:50,679 Więc kiedy się na 1 lub 0, jesteś na końcu, i można 718 00:34:50,679 --> 00:34:53,219 zaczynają iść w górę. 719 00:34:53,219 --> 00:34:59,540 Więc jeśli chcemy napisać rekurencyjną Funkcja do obliczenia silni, 720 00:34:59,540 --> 00:35:02,170 mamy zamiar napisać jakiś pseudokod na to teraz. 721 00:35:02,170 --> 00:35:03,300 Zanim dodać tę Pseudokod - 722 00:35:03,300 --> 00:35:05,660 Dam wam kilka minut napisać kod pseudo lub po prostu, że 723 00:35:05,660 --> 00:35:09,600 o tym - są dwie rzeczy, co Funkcja rekurencyjna potrzebuje. 724 00:35:09,600 --> 00:35:12,530 Co to są te dwie rzeczy? 725 00:35:12,530 --> 00:35:13,220 >> JACK: To musi nazywać się. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirschhorn: Noah? 727 00:35:13,680 --> 00:35:14,460 Och, Jack. 728 00:35:14,460 --> 00:35:15,100 Śmiało. 729 00:35:15,100 --> 00:35:16,640 >> JACK: To musi nazywać się. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorn: Tak rekurencyjne Funkcja wymaga wywołania rekurencyjnego, 731 00:35:19,220 --> 00:35:20,220 dzwonić do siebie. 732 00:35:20,220 --> 00:35:20,770 To jeden. 733 00:35:20,770 --> 00:35:21,510 A co innego jest? 734 00:35:21,510 --> 00:35:22,250 >> JACK: wariant podstawowy. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirschhorn: wariant podstawowy. 736 00:35:23,780 --> 00:35:26,940 Wariant podstawowy jest, tutaj jest, kiedy przestać. 737 00:35:26,940 --> 00:35:29,510 Więc funkcja jest wywoływana. 738 00:35:29,510 --> 00:35:31,410 Baza jest pierwszy przypadek. 739 00:35:31,410 --> 00:35:33,710 Chcesz wiedzieć, czy jesteś na koniec. 740 00:35:33,710 --> 00:35:37,110 A jeśli nie jesteś na końcu, ty dokonać wywołanie rekurencyjne. 741 00:35:37,110 --> 00:35:39,880 I przejść przez tę funkcję ponownie, jeszcze raz sprawdzić sprawę podstawową. 742 00:35:39,880 --> 00:35:42,575 Jeśli nie jesteś do końca, można dokonać kolejny wywołanie rekurencyjne, 743 00:35:42,575 --> 00:35:44,130 et cetera, et cetera. 744 00:35:44,130 --> 00:35:47,110 >> Dlatego funkcje rekurencyjne zawsze trzeba te podstawowe i te sprawy 745 00:35:47,110 --> 00:35:48,210 wywołania rekurencyjne. 746 00:35:48,210 --> 00:35:51,280 Jeśli nie masz wywołanie rekurencyjne, to nie byłoby rekurencyjna funkcja. 747 00:35:51,280 --> 00:35:53,210 Jeśli nie masz sprawę podstawową, chcesz iść na wieki 748 00:35:53,210 --> 00:35:54,780 nie byłoby zakończenie. 749 00:35:54,780 --> 00:35:57,870 I wariant podstawowy jest zawsze najważniejsze, bo zawsze będziesz chciał sprawdzić 750 00:35:57,870 --> 00:36:00,420 jeśli jesteś na końcu pierwszy. 751 00:36:00,420 --> 00:36:04,770 Zanim więc zrobić Pseudokod, dlaczego Czy nie warto pomyśleć o minutę 752 00:36:04,770 --> 00:36:09,360 jak rekurencyjna funkcja silnia będzie napisane? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Ponadto, aż robisz, pisanie to na kartce papieru jest 755 00:36:26,010 --> 00:36:27,960 co masz zamiar mieć do zrobić na quizie jutro. 756 00:36:27,960 --> 00:36:32,160 Więc chyba dobra praktyka, aby pewien kod piszesz 757 00:36:32,160 --> 00:36:34,420 w dół na kartce papieru - 758 00:36:34,420 --> 00:36:35,160 czy można to zrobić. 759 00:36:35,160 --> 00:36:36,710 Wiesz gdzie średniki są. 760 00:36:36,710 --> 00:36:37,660 Pamiętacie składni. 761 00:36:37,660 --> 00:36:40,400 Ponieważ nie jesteś w stanie mieć kompilator powiedzieć, popełnił błąd. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Również w tym kierunku, jutro, kiedy masz kodowanie problemy, jeśli 764 00:37:07,240 --> 00:37:11,490 są rzucili się na czas, lub jeśli jesteś bardzo mylić, jak masz się 765 00:37:11,490 --> 00:37:16,030 napisać konkretnej rzeczy w C, nie wypada Ci napisać pseudokod 766 00:37:16,030 --> 00:37:18,160 lub napisz komentarz jako dobrze. 767 00:37:18,160 --> 00:37:21,940 Bo jest kredyt na częściowe Wiele pytań na quiz. 768 00:37:21,940 --> 00:37:24,840 Więc może być pośpiechu, lub może po prostu mylić. 769 00:37:24,840 --> 00:37:28,030 Pisać w komentarzach lub pseudo-kodzie często są sposoby, które 770 00:37:28,030 --> 00:37:29,360 mogą uzyskać częściową kredyt. 771 00:37:29,360 --> 00:37:31,440 >> Więc nie zostawiaj coś puste w quizie. 772 00:37:31,440 --> 00:37:33,490 Nie ma kary za oddanie rzeczy w. 773 00:37:33,490 --> 00:37:37,650 W rzeczywistości wprowadzenie kodu lub pseudo- komentarze pomoże równiarka 774 00:37:37,650 --> 00:37:40,410 dowiedzieć się, czy rzeczywiście wie, co mówisz, a może nagrodę 775 00:37:40,410 --> 00:37:42,030 Ci niektóre częściowo kredyt na to. 776 00:37:42,030 --> 00:37:44,510 >> Także w tym kierunku, czytelnie. 777 00:37:44,510 --> 00:37:47,650 Jeśli nie możemy naprawdę to, co piszesz, nie będziemy do ciebie dzwonić 778 00:37:47,650 --> 00:37:49,900 o północy jutro do figury z tego, co napisał. 779 00:37:49,900 --> 00:37:51,520 Jesteśmy po prostu się do startu punktów. 780 00:37:51,520 --> 00:37:56,570 Napisz jasno więc możemy usłyszeć, a raczej możemy przeczytać to, co napisał. 781 00:37:56,570 --> 00:38:00,230 >> A jeśli mówi dwa zdania, nie dodać pkt. 782 00:38:00,230 --> 00:38:02,280 Postępuj zgodnie z instrukcjami. 783 00:38:02,280 --> 00:38:03,500 Napisz jasno. 784 00:38:03,500 --> 00:38:07,720 I pisać w tych komentarzach lub pseudokod na pytania, które mogłyby 785 00:38:07,720 --> 00:38:10,270 Nagroda częściowe kredytowej. 786 00:38:10,270 --> 00:38:12,520 >> OK, chodźmy do silni. 787 00:38:12,520 --> 00:38:15,000 Mamy więc funkcję silni. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Gdybym rzeczywiście napisać to w C, to, co jest potrzebne, aby umieścić przed nazwą 790 00:38:21,550 --> 00:38:22,800 funkcji? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Zwracany typ, który w tym przypadku, damy mu int. 793 00:38:30,060 --> 00:38:35,450 A następnie wewnątrz nawiasów klamrowych, jest to, co dzieje się wewnątrz nawiasów klamrowych dla 794 00:38:35,450 --> 00:38:36,850 funkcji? 795 00:38:36,850 --> 00:38:37,950 >> STUDENCI: typ argumentu. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirschhorn: Jego argumenty. 797 00:38:39,150 --> 00:38:42,680 Prawdopodobnie będzie tak silnia jeden z argumentów. 798 00:38:42,680 --> 00:38:44,500 To będzie prawdopodobnie tylko jeden argument. 799 00:38:44,500 --> 00:38:49,450 I powiemy to zajmie całkowitą nazwie X. 800 00:38:49,450 --> 00:38:52,770 I znów, pisząc prototyp Funkcja lub pisania funkcji 801 00:38:52,770 --> 00:38:57,110 w kodzie przed zdefiniowaniem, ci Napisać typ danych i nazwę 802 00:38:57,110 --> 00:39:01,370 że zmienna tylko dla tej funkcji. 803 00:39:01,370 --> 00:39:06,350 Więc można przejść do tego jakiś numer funkcji, to będzie dalej x. 804 00:39:06,350 --> 00:39:07,340 wewnętrznie. 805 00:39:07,340 --> 00:39:08,755 >> Mamy funkcję silni. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Potrzebujemy dwóch rzeczy, sprawy bazowej i wywołanie rekurencyjne. 808 00:39:15,850 --> 00:39:20,900 Co to jest przypadek bazowy dla silnia? 809 00:39:20,900 --> 00:39:24,850 Ktoś, kto napisał to i który nie ma jeszcze mówił, co jest podstawą 810 00:39:24,850 --> 00:39:26,100 przypadku silni? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> STUDENT: Jeśli n jest mniejsza niż 2, powrót 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirschhorn: Jeśli n jest mniej niż 2, z powrotem 1. 814 00:39:33,520 --> 00:39:37,216 Podoba mi się to, bo to dba o 0 i 1. 815 00:39:37,216 --> 00:39:45,290 Więc zrobimy x <2, powrót 1. 816 00:39:45,290 --> 00:39:47,870 Jeśli przejdzie 0, jeśli mamy przeszedł 1, funkcja ta 817 00:39:47,870 --> 00:39:49,790 natychmiast zwraca 1. 818 00:39:49,790 --> 00:39:54,020 Jeśli przejdzie pewną liczbę większą niż lub równy 2, będziemy 819 00:39:54,020 --> 00:39:55,370 Posiadamy wywołanie rekurencyjne. 820 00:39:55,370 --> 00:39:57,855 >> I tak, jak jest, że będzie działać? 821 00:39:57,855 --> 00:40:01,070 Czy ktoś, kto pracował nad tym który jeszcze nie mówi mi 822 00:40:01,070 --> 00:40:07,380 wywołanie rekurencyjne dla tej funkcji w Pseudokod? 823 00:40:07,380 --> 00:40:10,770 Jeśli przejdzie w numerze x. i jest większe niż 2, co 824 00:40:10,770 --> 00:40:13,370 chcemy zrobić? 825 00:40:13,370 --> 00:40:17,930 Mamy też przykład napisany boczne, które mogą dać wskazówkę. 826 00:40:17,930 --> 00:40:20,770 >> STUDENT: Call x razy silnia x minus 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirschhorn: Dokładnie tak. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Mamy zamiar wrócić x razy silnia x minus 1. 830 00:40:37,750 --> 00:40:41,810 I, że choć napisałem do góry, w zasadzie to, co pan powiedział w języku angielskim, 831 00:40:41,810 --> 00:40:44,580 Funkcja ta silnia będzie się nazywa ponownie. 832 00:40:44,580 --> 00:40:46,320 To będzie wykonać na x minus 1. 833 00:40:46,320 --> 00:40:49,320 To będzie powrót z jakimś liczby całkowitej, i to te dwa będzie pomnożyć 834 00:40:49,320 --> 00:40:52,050 razem, i że wartość będzie wrócił do tego, co nazywa się 835 00:40:52,050 --> 00:40:55,010 Funkcja silnia, które mogą być inny przykład 836 00:40:55,010 --> 00:40:58,420 Funkcja ta silnia. 837 00:40:58,420 --> 00:41:01,360 >> Tak, że jest przykładem rekursywnego funkcja, bardzo 838 00:41:01,360 --> 00:41:02,530 prosta funkcja rekurencyjna. 839 00:41:02,530 --> 00:41:04,530 Ale większość z nich nie będzie w ten sposób. 840 00:41:04,530 --> 00:41:11,170 Jeśli chcesz dobrą Cykliczne wyzwanie dla quizu, spróbuj kodowania 841 00:41:11,170 --> 00:41:13,230 wyszukiwanie binarne rekurencyjnie. 842 00:41:13,230 --> 00:41:18,950 Bo jeśli nie binarnego wyszukiwania dla Problem ustawić trzy, to prawdopodobnie nie jest 843 00:41:18,950 --> 00:41:21,730 iteracyjnie w pętli while. 844 00:41:21,730 --> 00:41:23,700 >> Ale to może być również zapisane rekurencyjnie. 845 00:41:23,700 --> 00:41:26,310 Będziesz musiał napisać własny oddzielna funkcja, która wykonuje pewne 846 00:41:26,310 --> 00:41:29,020 różne argumenty wiersza polecenia - lub nie argumenty wiersza polecenia, niektóre 847 00:41:29,020 --> 00:41:30,910 tylko regularne różne argumenty. 848 00:41:30,910 --> 00:41:33,870 Ale można napisać wyszukiwanie binarne rekurencyjnie, jak również. 849 00:41:33,870 --> 00:41:36,190 >> STUDENT: Więc może również napisane, zamiast X minus 1, to 850 00:41:36,190 --> 00:41:39,502 mogło również napisane X minus minus, lub można mieć 851 00:41:39,502 --> 00:41:40,830 napisane minus minus x. 852 00:41:40,830 --> 00:41:44,740 Może po prostu wyjaśnić, dlaczego bardzo szybko te będą różne rzeczy, 853 00:41:44,740 --> 00:41:49,510 jak to, co jest różnica między x minus minus i minus minus x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorn: Nie, nie jestem pójdzie na to. 855 00:41:51,320 --> 00:41:55,500 Ale będę z tobą rozmawiać o tym po klasa. x minus minus minus minus x 856 00:41:55,500 --> 00:41:57,780 zmniejszyć X o 1. 857 00:41:57,780 --> 00:41:59,090 Ale robią to nieco inaczej. 858 00:41:59,090 --> 00:42:00,340 Ale ja nie chcę iść do tego. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Inne pytania o rekursji czy ta funkcja? 861 00:42:09,090 --> 00:42:10,140 To naprawdę nie jest nawet pseudokod. 862 00:42:10,140 --> 00:42:15,060 To jest w zasadzie kod C można zapisać do tego. 863 00:42:15,060 --> 00:42:19,393 >> OK, żadnych innych pytań ten temat tutaj? 864 00:42:19,393 --> 00:42:19,864 Tak. 865 00:42:19,864 --> 00:42:23,130 >> Student: Mam szybki przegląd zmiennoprzecinkowych i precyzja. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorn: Floating punkt i precyzja. 867 00:42:24,260 --> 00:42:26,920 Czy ktoś naprawdę szybko daj mi wybiegu 868 00:42:26,920 --> 00:42:28,210 zmiennoprzecinkowych i precyzja? 869 00:42:28,210 --> 00:42:30,420 Wszyscy mieli to zrobić dla swojego ustawić problemu, więc nic ci nie 870 00:42:30,420 --> 00:42:31,700 z nim zapoznać. 871 00:42:31,700 --> 00:42:35,090 A może nie wszyscy. 872 00:42:35,090 --> 00:42:36,602 Ktoś? 873 00:42:36,602 --> 00:42:39,530 Daj mi zaczął miejsce. 874 00:42:39,530 --> 00:42:40,750 Zmiennoprzecinkowych i precyzja. 875 00:42:40,750 --> 00:42:42,380 W czym problem? 876 00:42:42,380 --> 00:42:42,960 Tak. 877 00:42:42,960 --> 00:42:43,680 Wiktoria? 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON Hirschhorn: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Przepraszam. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Jest tylko skończona liczba wartości, które mogą być reprezentowane 882 00:42:51,550 --> 00:42:57,930 bo jesteś na, w naszym przypadku systemu 32-bit. 883 00:42:57,930 --> 00:43:03,080 Więc niby trzeba uzupełnić niektóre numery. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorn: Więc to jest Dokładnie tak. 885 00:43:03,910 --> 00:43:08,110 Istnieje tylko pewna ilość numery, które mogą być reprezentowane. 886 00:43:08,110 --> 00:43:11,770 Jeśli pomnożymy dwa bardzo duże liczby, może przelać kwotę 887 00:43:11,770 --> 00:43:13,950 miejsc masz do reprezentowania całkowita. 888 00:43:13,950 --> 00:43:17,930 Dlatego czasami używamy długo, długo, zamiast int. 889 00:43:17,930 --> 00:43:19,210 Że ma więcej miejsca. 890 00:43:19,210 --> 00:43:21,210 Który może pomieścić większą liczbę. 891 00:43:21,210 --> 00:43:24,310 >> Zmiennoprzecinkowa precyzja ma do czynienia z , ale również ma do czynienia z 892 00:43:24,310 --> 00:43:29,300 Fakt, że są liczby dziesiętne nie zawsze reprezentowane. 893 00:43:29,300 --> 00:43:29,540 Przepraszam. 894 00:43:29,540 --> 00:43:31,280 Ujmę to w górę. 895 00:43:31,280 --> 00:43:36,610 Liczbę dziesiętną 1.0 nie zawsze jest reprezentowane jak ty się spodziewać, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Czasami jest reprezentowane 1,000000001 lub 0,999999999. 898 00:43:50,360 --> 00:43:52,780 Może to być nawet 89 rzucony gdzieś tam. 899 00:43:52,780 --> 00:43:56,560 Więc te liczby po przecinku nie są reprezentowane dokładnie, jak chcesz 900 00:43:56,560 --> 00:43:58,430 spodziewamy się, że być reprezentowane. 901 00:43:58,430 --> 00:44:00,010 >> Więc w błąd set - 902 00:44:00,010 --> 00:44:00,860 było to dwa? - 903 00:44:00,860 --> 00:44:05,290 Problem ustawić dwa, gdzie mieliśmy do czynienia z liczb zmiennoprzecinkowych, kiedy chcieliśmy 904 00:44:05,290 --> 00:44:08,690 je reprezentować dokładnie to, co chcieliśmy im oznaczają liczbę 905 00:44:08,690 --> 00:44:12,860 groszy lub liczbę centów, mnożymy je przez 100. 906 00:44:12,860 --> 00:44:14,750 Minęliśmy ich. 907 00:44:14,750 --> 00:44:18,660 A potem odciął wszystko za przecinku. 908 00:44:18,660 --> 00:44:22,020 To było w celu zapewnienia, że ​​byłoby faktycznie równa dokładnie to, co chcieliśmy 909 00:44:22,020 --> 00:44:22,410 im dorównać. 910 00:44:22,410 --> 00:44:26,870 >> Bo jeśli wziąć coś, co jest unosić i przekształcić go w int, można 911 00:44:26,870 --> 00:44:29,860 odciąć wszystko w prawo przecinkiem. 912 00:44:29,860 --> 00:44:33,900 Ponieważ istnieje jakiś zmiennoprzecinkowe brak precyzji, 100.000 może być 913 00:44:33,900 --> 00:44:37,440 reprezentowane 99,999999999. 914 00:44:37,440 --> 00:44:40,350 A jeśli po prostu odciąć wszystko prawo od razu, będziesz 915 00:44:40,350 --> 00:44:41,600 dostać zły numer. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Tak. 918 00:44:44,180 --> 00:44:45,290 >> STUDENT: Miałem pytanie o odlewy. 919 00:44:45,290 --> 00:44:47,500 Jakiej kolejności ma to nastąpić w? 920 00:44:47,500 --> 00:44:54,480 Jeśli chcesz zrobić pływak, wsporniki, 1 podzielona przez 10, to robi 1 podzielone przez 10, 921 00:44:54,480 --> 00:44:58,910 następnie uzyskać 0,1, a następnie skręcić to do pływaka? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorn: Jeśli nie unosić 1 podzielone przez 10 - 923 00:45:01,470 --> 00:45:02,550 >> Uczeń: Tak, i to jest równe - 924 00:45:02,550 --> 00:45:04,240 dobrze, że będzie normalnie mają to równa się - 925 00:45:04,240 --> 00:45:04,690 Tak. 926 00:45:04,690 --> 00:45:06,760 Chcesz, aby to pływak, prawda? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorn: OK, więc mamy zamiar używać, aby przechodzić w zastanawianie się, 928 00:45:12,790 --> 00:45:15,390 odpowiedzi na te pytania poprzez kodowanie. 929 00:45:15,390 --> 00:45:18,180 Bo prawdopodobnie będziesz mieć dużo te pytania minute i dobry sposób 930 00:45:18,180 --> 00:45:19,100 je rozwiązać to poprzez kodowanie. 931 00:45:19,100 --> 00:45:21,320 Więc idziemy do kodu to teraz, a następnie będziemy wracać i 932 00:45:21,320 --> 00:45:24,020 kod na pytanie trzeba było. 933 00:45:24,020 --> 00:45:24,950 >> Tak więc pierwsza linia - 934 00:45:24,950 --> 00:45:29,390 I nie powinno to napisać - to, co jest Pierwszą rzeczą, którą chcesz zrobić, gdy 935 00:45:29,390 --> 00:45:32,250 otworzyć nowy plik w gedit? 936 00:45:32,250 --> 00:45:34,190 >> STUDENT: Dołącz. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorn: Uwzględnij co? 938 00:45:35,920 --> 00:45:37,952 >> STUDENT: Biblioteka CS50. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirschhorn: OK. 940 00:45:39,920 --> 00:45:42,590 Co jeszcze powinniśmy uwzględnić? 941 00:45:42,590 --> 00:45:46,820 Jesteśmy po prostu się, by sprawdzić, co się dzieje kiedy rzucił coś do pływaka. 942 00:45:46,820 --> 00:45:48,605 Ale to, co jest nam potrzebny do włączenia, jeśli jesteśmy zamiar napisać program w C? 943 00:45:48,605 --> 00:45:49,300 >> STUDENT: Standard I / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON Hirschhorn: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Właściwie nie trzeba, za to Program, cs50.h, mimo że jest 946 00:45:54,880 --> 00:45:55,920 zawsze pomocny, aby umieścić go. 947 00:45:55,920 --> 00:45:58,260 Ale nie zawsze trzeba stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> STUDENT: Podczas kodowania w C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorn: Podczas kodowania w C. 950 00:46:15,770 --> 00:46:17,090 >> Więc zapisać go jako tego. C pliku. 951 00:46:17,090 --> 00:46:18,590 Mam jakieś fajne podświetlanie składni. 952 00:46:18,590 --> 00:46:22,890 Napisałem pustkę wewnątrz Głównym. 953 00:46:22,890 --> 00:46:24,792 Co void oznacza? 954 00:46:24,792 --> 00:46:26,740 >> STUDENT: nie bierze Argumenty wiersza polecenia. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: brak środków, w tym przypadku, głównym nie ponosi 956 00:46:28,900 --> 00:46:29,700 Argumenty wiersza polecenia. 957 00:46:29,700 --> 00:46:32,720 W innych przypadkach oznacza to, że funkcja nie bierze argumenty wiersza poleceń. 958 00:46:32,720 --> 00:46:36,560 Lub funkcji, gdybym miał napisać pustkę main (void), które mówią Main 959 00:46:36,560 --> 00:46:38,460 nie zwraca nic. 960 00:46:38,460 --> 00:46:39,960 Więc nieważne po prostu nic nie znaczy. 961 00:46:39,960 --> 00:46:42,510 Co chciałbym napisać, gdybym przyjmują argumenty wiersza polecenia? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> STUDENT: int c łańcuch łuk łuk v. 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirschhorn: int argc argv ciąg. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Czy to prawda? 967 00:46:55,572 --> 00:46:58,720 >> Student: To char wsporniki gwiazda ARGV. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorn: Więc można napisać Ciąg ARGV lub wsporniki gwiazda char argv 969 00:47:01,730 --> 00:47:03,710 wsporniki, ale trzeba wsporniki. 970 00:47:03,710 --> 00:47:06,290 Ponieważ argv jest tablicą ciągów, pamiętam. 971 00:47:06,290 --> 00:47:07,360 To nie jest tylko jeden ciąg. 972 00:47:07,360 --> 00:47:10,350 Więc ciąg argv jest, tu jest jeden ciąg nazywany argv. 973 00:47:10,350 --> 00:47:13,630 Uchwyty ARGV ciąg jest, tu jest Tablica ciągów znaków. 974 00:47:13,630 --> 00:47:17,865 Tak int ciąg ARGV wsporniki argc byłoby coś, co 975 00:47:17,865 --> 00:47:18,810 prawdopodobnie napisać. 976 00:47:18,810 --> 00:47:23,050 >> Więc chciał zapisać w postaci liczby całkowitej? 977 00:47:23,050 --> 00:47:24,285 >> Student: Tak, liczba całkowita. 978 00:47:24,285 --> 00:47:25,840 Lub w obrocie. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorn: W pacy? 980 00:47:26,710 --> 00:47:30,790 Jak pływak x wynosi 1 podzielone przez 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON Hirschhorn: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Jak mogę wydrukować pływaka w printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Co? 986 00:47:46,714 --> 00:47:47,560 >> STUDENT:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON Hirschhorn:% f. 988 00:47:48,300 --> 00:47:50,810 Co jest liczbą całkowitą? 989 00:47:50,810 --> 00:47:52,110 d lub i. 990 00:47:52,110 --> 00:47:53,000 Co to jest ciąg? 991 00:47:53,000 --> 00:47:54,240 >> STUDENT: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON Hirschhorn: s. 993 00:47:56,140 --> 00:47:57,550 Jak uzyskać nową linię? 994 00:47:57,550 --> 00:47:58,800 >> STUDENT: Backslash n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorn: Co mogę wrócić jeśli główne działa prawidłowo? 997 00:48:07,100 --> 00:48:08,360 >> STUDENT: 0. 998 00:48:08,360 --> 00:48:09,430 Muszę napisać, że wiersz, chociaż? 999 00:48:09,430 --> 00:48:10,170 >> Student: Nie. 1000 00:48:10,170 --> 00:48:11,513 OK, nie będziemy pisać, a potem. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Czy każdy może przeczytać, że? 1003 00:48:17,190 --> 00:48:18,485 Wygląda to trochę małe. 1004 00:48:18,485 --> 00:48:20,160 Czy każdy może zobaczyć, czy powinien I sprawiają, że większy? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Myślę, że do kamery, zrobimy jest nieco większy, choć. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorn: Jeżeli chcę, aby włączyć tę . C plik do pliku wykonywalnego, co 1009 00:48:38,410 --> 00:48:39,260 mam napisać? 1010 00:48:39,260 --> 00:48:41,610 >> STUDENT: zrobić test. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorn: Przepraszam? 1012 00:48:42,080 --> 00:48:42,790 >> STUDENT: zrobić test. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorn: Zrób test. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Rozmawialiśmy o linia ta wcześniej. 1016 00:48:48,410 --> 00:48:49,140 Dzyń. 1017 00:48:49,140 --> 00:48:51,270 Co jest brzęk? 1018 00:48:51,270 --> 00:48:52,200 Nazwa kompilatora. 1019 00:48:52,200 --> 00:48:53,920 Co to za linia? 1020 00:48:53,920 --> 00:48:55,580 >> STUDENT: Ustawia go do użytku GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Zestawy to się do stosowania GDB. 1022 00:48:59,230 --> 00:49:02,338 Linia ta, co to jest? 1023 00:49:02,338 --> 00:49:03,290 >> STUDENT: Kod źródłowy. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirschhorn: To plik źródłowy. c plik. 1025 00:49:06,010 --> 00:49:08,150 Co te dwie linie zrobić? 1026 00:49:08,150 --> 00:49:10,245 Czy te dwa nie linie. 1027 00:49:10,245 --> 00:49:12,300 >> STUDENT: nazwy? Go przetestować. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorn: Tak kreska o mówi nazwać to coś inaczej. 1029 00:49:15,410 --> 00:49:16,790 I tu dzwonisz to badanie. 1030 00:49:16,790 --> 00:49:18,900 Jeśli nie mam, że w, co by było nazwać to? 1031 00:49:18,900 --> 00:49:20,260 >> STUDENT: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON Hirschhorn: a.out. 1033 00:49:22,340 --> 00:49:25,366 Co to zrobić? 1034 00:49:25,366 --> 00:49:27,670 >> STUDENT: Linki biblioteki matematycznej. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorn: Łączy w bibliotece matematycznej. 1036 00:49:29,550 --> 00:49:32,880 Nie zawiera bibliotekę matematyczną, ale ponieważ to jest tak powszechne, że już 1037 00:49:32,880 --> 00:49:35,780 napisana marka zawsze obejmują biblioteka matematyczna. 1038 00:49:35,780 --> 00:49:39,050 I podobnie, obejmuje Biblioteka CS50. 1039 00:49:39,050 --> 00:49:43,010 >> OK, więc jeśli mamy listę, mamy teraz wykonywalny o nazwie Test. 1040 00:49:43,010 --> 00:49:45,150 Aby go wykonać, piszę test. 1041 00:49:45,150 --> 00:49:48,330 Widzę, że moja zmiennoprzecinkowych, zgodnie z oczekiwaniami, jest równa 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Czy to - 1044 00:49:51,590 --> 00:49:52,060 SO - 1045 00:49:52,060 --> 00:49:55,210 >> Uczeń: Zatem jeśli umieścić unosić się, jak oddasz go jako pływaka - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorn: Obsada 1 do pływaka? 1047 00:49:56,870 --> 00:49:59,180 >> Student: Nie, rzucać pełne rzeczy - 1048 00:49:59,180 --> 00:49:59,500 tak. 1049 00:49:59,500 --> 00:50:02,460 Jeśli tylko to zrobił, byłoby które sprawiają, że 0.1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorn: OK, więc bardzo szybko, 1 podzielone przez 10, są to 1051 00:50:07,170 --> 00:50:08,690 liczby całkowite są podzielone. 1052 00:50:08,690 --> 00:50:13,580 Więc po podzieleniu liczby całkowite, są 0, i ratujesz że 0 w 1053 00:50:13,580 --> 00:50:17,170 unosić, ponieważ znak jest tylko całkowitą podział. 1054 00:50:17,170 --> 00:50:19,180 Więc teraz mamy coś toczenia w obrocie. 1055 00:50:19,180 --> 00:50:21,650 >> Zobaczmy, co się dzieje. 1056 00:50:21,650 --> 00:50:22,900 Zrobimy test. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Teraz widzimy, że to nie był ukośnik Podział całkowitą, unosiła 1059 00:50:31,090 --> 00:50:32,640 Podział punkt. 1060 00:50:32,640 --> 00:50:35,700 Ponieważ jeden z jej argumentów został oddany do pływaka. 1061 00:50:35,700 --> 00:50:38,380 Więc teraz to mówił, traktują to Podział na to, że mamy do czynienia z 1062 00:50:38,380 --> 00:50:40,140 punktów pływające, nie z liczb całkowitych. 1063 00:50:40,140 --> 00:50:42,760 I tak otrzymujemy odpowiedź oczekujemy. 1064 00:50:42,760 --> 00:50:44,620 >> Zobaczmy, co się dzieje - 1065 00:50:44,620 --> 00:50:47,103 Ups. 1066 00:50:47,103 --> 00:50:51,646 Gdybym chciał wydrukować więcej dziesiętny miejsc, jak mogę to zrobić? 1067 00:50:51,646 --> 00:50:55,550 >> STUDENT: Punkt punkt f, lub jak wielu miejsc po przecinku, jak chcesz. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirschhorn: Więc drukować 10 miejsc po przecinku. 1070 00:51:04,440 --> 00:51:06,610 I widzimy teraz jesteśmy coraz jakieś dziwne rzeczy. 1071 00:51:06,610 --> 00:51:09,650 I że wraca do pytania o zmiennoprzecinkowych niedokładności. 1072 00:51:09,650 --> 00:51:10,950 Nie dziwne rzeczy przechowywane w tutaj. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, nie, że odpowiedź na pytanie? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Co jeszcze chcesz szybko kodować? 1077 00:51:20,200 --> 00:51:25,470 >> STUDENT: Chciałem tylko zobaczyć, czy nie, jeśli uwolnione jakiś wskaźnik, 1078 00:51:25,470 --> 00:51:30,410 czy ten wskaźnik jeszcze przechowywane w to adres, co to było 1079 00:51:30,410 --> 00:51:32,170 wskazując wcześniej. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorn: OK, tak, zróbmy to. 1081 00:51:34,100 --> 00:51:38,030 Char gwiazda PTR, ten tworzy zmienną nazywa PTR typu char gwiazdy. 1082 00:51:38,030 --> 00:51:39,280 Jak napisać malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Tylko malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Ale to musi być rozmiar i w tym przypadku, myślę, że można by 1087 00:51:51,040 --> 00:51:52,465 być skierowane do char. 1088 00:51:52,465 --> 00:51:54,450 Więc byłoby char. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorn: OK, więc więcej ogólnie, Wewnątrz - 1090 00:51:57,520 --> 00:51:58,770 niech edytować. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Wewnątrz malloc, chcesz numer bajtów na stercie. 1093 00:52:09,260 --> 00:52:12,320 Ogólnie rzecz biorąc, to, co widzieliśmy, że jesteśmy robi to jedziemy do malloc 1094 00:52:12,320 --> 00:52:14,940 łańcuchy, na przykład, lub tablice liczb całkowitych. 1095 00:52:14,940 --> 00:52:21,600 Więc jeśli chcemy 10 lub 10 liczb całkowitych znaków, 10 da nam 10. 1096 00:52:21,600 --> 00:52:24,370 A następnie wielkość znaków dałoby nam, że wielkość znaków, które w 1097 00:52:24,370 --> 00:52:25,120 W tym przypadku jest 1 bajt. 1098 00:52:25,120 --> 00:52:26,250 Dostajemy 10 bajtów. 1099 00:52:26,250 --> 00:52:28,540 Gdybyśmy mieli napisać rozmiar int, że da nam 40 bajtów. 1100 00:52:28,540 --> 00:52:31,520 >> Tak bardziej ogólnie, wewnątrz malloc jest liczba bajtów chcesz. 1101 00:52:31,520 --> 00:52:34,620 W tym przypadku dostajemy 1 bajt. 1102 00:52:34,620 --> 00:52:36,900 Który wydaje się dziwne użytku malloc, ale dla naszych 1103 00:52:36,900 --> 00:52:38,470 celów ma sens. 1104 00:52:38,470 --> 00:52:40,420 Więc nie jest to. 1105 00:52:40,420 --> 00:52:43,420 >> Mamy zamiar zadzwonić za darmo. 1106 00:52:43,420 --> 00:52:47,040 My się go pozbyć, a my ponownie użyć ptr. 1107 00:52:47,040 --> 00:52:48,750 I co chcesz sprawdzić? 1108 00:52:48,750 --> 00:52:50,550 >> STUDENT: Chciałem tylko sprawdzić, czy czy nie było coś 1109 00:52:50,550 --> 00:52:51,900 w jej wnętrzu. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirschhorn: Więc, czy Wskazał on na nic? 1111 00:52:53,050 --> 00:52:57,740 >> Student: Tak, dokładnie, czy nadal miał adres pamięci. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorn: Więc chcesz sprawdzić wartość ptr? 1113 00:53:02,220 --> 00:53:03,470 >> Student: Tak, dokładnie. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirschhorn: Co mam pisać tutaj jeśli chcę, aby sprawdzić wartość 1116 00:53:10,160 --> 00:53:11,880 punkt - to, co jest, Jordania powiedział, wartość? 1117 00:53:11,880 --> 00:53:13,720 Albo, co jest przechowywane wewnątrz ptr? 1118 00:53:13,720 --> 00:53:14,620 >> STUDENT: adres pamięci. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirschhorn: adres pamięci. 1120 00:53:16,330 --> 00:53:20,520 Więc jeśli piszę po prostu to, że będziesz daj mi wartość ptr. 1121 00:53:20,520 --> 00:53:22,800 I jak mogę wydrukować adres pamięci? 1122 00:53:22,800 --> 00:53:26,470 Co znajduje się ciąg formatu na adres w pamięci? 1123 00:53:26,470 --> 00:53:27,430 >> STUDENT:% s.. 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirschhorn:% s.. 1125 00:53:28,050 --> 00:53:29,500 % S jest ciągiem. 1126 00:53:29,500 --> 00:53:30,750 % P do wskaźnika. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Czy to prawda? 1129 00:53:43,540 --> 00:53:44,790 To jest prawda. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Więc ptr jest równe - 1132 00:53:51,040 --> 00:53:53,350 nadal ma coś w nim. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Jest to prawdopodobnie więcej ciekawe pytanie. 1135 00:53:57,645 --> 00:53:59,198 Co oznacza, że ​​linia zrobić? 1136 00:53:59,198 --> 00:54:00,830 >> STUDENT: błędy Seg. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorn: Co? 1138 00:54:01,310 --> 00:54:02,678 >> Student: Myślę, że seg usterek. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirschhorn: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> Student: Myślę, że będzie to seg winy. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirschhorn: Więc ta linia kodu, gwiazdy ptr, co 1142 00:54:08,265 --> 00:54:10,152 ma gwiazdki oznaczają? 1143 00:54:10,152 --> 00:54:11,240 >> STUDENT: Zawartość. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirschhorn: Tak. 1145 00:54:11,560 --> 00:54:13,910 Idź do uzyskania zawartości. 1146 00:54:13,910 --> 00:54:16,830 Tak to się dzieje, aby przejść do pamięci zająć tam i daj mi to. 1147 00:54:16,830 --> 00:54:21,030 Kiedyś% c tutaj, ponieważ nie są znaki tam przechowywane. 1148 00:54:21,030 --> 00:54:23,390 Więc mamy zamiar udać się do tego adresu my Właśnie widziałem - czy będzie nim 1149 00:54:23,390 --> 00:54:25,190 to trochę inaczej razem możemy uruchomić program. 1150 00:54:25,190 --> 00:54:28,010 Ale pójdziemy na ten adres których wiemy jeszcze istnieje 1151 00:54:28,010 --> 00:54:29,260 i zobaczyć, co tam jest. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Więc nie seg winy. 1154 00:54:37,110 --> 00:54:38,970 To po prostu nie dają nam nic. 1155 00:54:38,970 --> 00:54:43,350 To może rzeczywiście daje nam coś, po prostu nie może go zobaczyć. 1156 00:54:43,350 --> 00:54:45,110 I że wraca do tego pomysłu - 1157 00:54:45,110 --> 00:54:47,270 i nie będziemy się zbyt dużo do tego, bo to jest poza 1158 00:54:47,270 --> 00:54:48,460 zakres tego kursu. 1159 00:54:48,460 --> 00:54:51,260 Ale rozmawialiśmy o tutaj, jeśli wykraczał poza granice tablicy przez 1160 00:54:51,260 --> 00:54:54,890 1, nie mogą mieć kłopoty. 1161 00:54:54,890 --> 00:54:58,550 >> Czasami, kiedy po prostu przejść się przez 1, robisz coś złego, a ty 1162 00:54:58,550 --> 00:54:59,220 może mieć kłopoty. 1163 00:54:59,220 --> 00:55:00,820 Ale nie zawsze się w kłopoty. 1164 00:55:00,820 --> 00:55:05,170 To zależy od tego, ile coś złego ci nie, będziesz miał kłopoty. 1165 00:55:05,170 --> 00:55:07,790 Co nie znaczy, być spokojnym z kodem. 1166 00:55:07,790 --> 00:55:12,080 Ale to znaczy nie nastąpi zawsze zamknąć, nawet jeśli gdzieś 1167 00:55:12,080 --> 00:55:14,130 nie powinieneś się udać. 1168 00:55:14,130 --> 00:55:18,170 >> Dobrym przykładem, że jest wiele osób w ich problemu ustaw 3, która 1169 00:55:18,170 --> 00:55:22,350 był 15, nie sprawdzałem Granice pokładzie. 1170 00:55:22,350 --> 00:55:25,860 Więc spojrzał w lewo, spojrzał na prawo, spojrzał do góry, spojrzał 1171 00:55:25,860 --> 00:55:27,000 do dołu. 1172 00:55:27,000 --> 00:55:31,540 Ale nie sprawdzić, czy górna faktycznie będzie na pokładzie. 1173 00:55:31,540 --> 00:55:35,220 I wielu ludzi, którzy zrobili to i okazało, że w ich programie pracował 1174 00:55:35,220 --> 00:55:38,960 doskonale, bo gdzie rada była przechowywane w pamięci, jeśli poszedł jeden 1175 00:55:38,960 --> 00:55:42,300 nad nim i sprawdziła, że ​​pamięć adres, nie było nic 1176 00:55:42,300 --> 00:55:44,870 szczególnie strasznego, więc program nie był 1177 00:55:44,870 --> 00:55:45,970 będzie krzyczeć na ciebie. 1178 00:55:45,970 --> 00:55:48,870 >> Ale my wciąż zdjąć punkty, jeśli można sprawdzić, że nie, bo 1179 00:55:48,870 --> 00:55:50,850 robią coś, czego nie byli robić, i można mieć 1180 00:55:50,850 --> 00:55:51,860 dostał się w kłopoty. 1181 00:55:51,860 --> 00:55:54,040 Szanse są, choć pewnie nie. 1182 00:55:54,040 --> 00:55:57,790 Tak to jest, aby pokazać, że tak, nadal możemy pójść do niej. 1183 00:55:57,790 --> 00:55:59,010 I nie dostaniesz w Kłopot w tym przypadku. 1184 00:55:59,010 --> 00:56:04,000 Jeśli będziemy próbowali zrobić czytaj Kolejne 100 znaków, my 1185 00:56:04,000 --> 00:56:06,000 Prawdopodobnie miał kłopoty. 1186 00:56:06,000 --> 00:56:09,400 I można kodować czytanie kolejnych 100 znaków, jeśli chcesz, wykonując niektóre 1187 00:56:09,400 --> 00:56:10,110 rodzaj pętli. 1188 00:56:10,110 --> 00:56:10,850 Tak. 1189 00:56:10,850 --> 00:56:16,250 >> Student: Ponieważ dostaliśmy, że wartości rzeczywistej przestrzeni, nie byłoby 1190 00:56:16,250 --> 00:56:17,050 rzeczywiście być w stanie zobaczyć niczego. 1191 00:56:17,050 --> 00:56:21,740 Powinniśmy spróbować z ustawieniem, które równa jak C czy coś? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorn: Wielki znak zapytania. 1193 00:56:22,640 --> 00:56:25,340 Jak ustawić tę wartość - 1194 00:56:25,340 --> 00:56:28,980 co linia kodu napisać na linii siedem do tego, co pan powiedział? 1195 00:56:28,980 --> 00:56:34,040 >> STUDENT: Star ptr jest równe wolny cytat c końca pojedynczego cudzysłowu. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorn: Tak, że wkłada charakter, c, w tym miejscu, 1197 00:56:36,970 --> 00:56:40,200 bo raz, że gwiazda Oznacza iść tam. 1198 00:56:40,200 --> 00:56:43,320 I stosowane po stronie lewej operator przypisania, który wynosi 1199 00:56:43,320 --> 00:56:47,270 podpisać, nie dostaniesz, że Wartość tyle ustawić tę wartość. 1200 00:56:47,270 --> 00:56:48,520 Teraz zobaczmy, co się stanie. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Kładziemy tam coś i tam. 1203 00:56:56,770 --> 00:56:58,000 Zadzwoniliśmy darmo. 1204 00:56:58,000 --> 00:57:00,100 Niektóre rzeczy pewnie się na stercie. 1205 00:57:00,100 --> 00:57:01,890 Więc to nie jest już tam. 1206 00:57:01,890 --> 00:57:07,440 Ale znowu, nie dostaniesz w kłopoty tam. 1207 00:57:07,440 --> 00:57:10,260 >> Ja tego robić w kodzie, aby zilustrować że wiele z tych 1208 00:57:10,260 --> 00:57:12,410 pytania, które masz, są bardzo ciekawe 1209 00:57:12,410 --> 00:57:13,650 odpowiedzi dużo czasu. 1210 00:57:13,650 --> 00:57:15,260 I są naprawdę dobre pytania. 1211 00:57:15,260 --> 00:57:19,010 I można dowiedzieć się na ich własne, jeśli, na przykład, 1212 00:57:19,010 --> 00:57:19,990 nie jesteśmy w sekcji. 1213 00:57:19,990 --> 00:57:20,940 Tak. 1214 00:57:20,940 --> 00:57:24,430 >> STUDENT: Bo nie wysyłasz pointer w dowolnym miejscu, nie trzeba 1215 00:57:24,430 --> 00:57:26,530 używać malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirschhorn: Więc to wraca do początkowego pytania. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Jest to po prostu zmienna lokalna? 1219 00:57:29,980 --> 00:57:32,280 Malloc tutaj nie jest przekonujące. 1220 00:57:32,280 --> 00:57:35,260 Korzystanie z malloc nie jest tu że przekonujące, bo to 1221 00:57:35,260 --> 00:57:36,500 tylko zmienna lokalna. 1222 00:57:36,500 --> 00:57:40,970 >> STUDENT: Więc można zrobić char gwiazda ptr jest równe komentarzy 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirschhorn: Och. 1224 00:57:41,400 --> 00:57:43,300 Więc mamy zamiar teraz wrócić do początkowego pytania. 1225 00:57:43,300 --> 00:57:46,885 Myślę, że nie zostały spełnione z mojej odpowiedzi. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Tak? 1228 00:57:49,226 --> 00:57:49,682 >> Uczeń: Tak. 1229 00:57:49,682 --> 00:57:50,932 Czekać. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirschhorn: A gdzie chcesz wydrukować? 1232 00:57:57,850 --> 00:58:00,026 Będziemy więc wydrukować ciąg takiego? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> STUDENT: Ciekawe. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorn: Więc to mówi, że to argument typ charakteru. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Tak to powinno być znaków. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> STUDENT: Tylko bierze pierwszy. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorn: Więc to jest to, co powiedziałem wcześniej. 1242 00:58:28,610 --> 00:58:34,240 Tak jak powiedziałem, to nie jest przechowywanie ciąg wewnątrz zmiennej wskaźnika. 1243 00:58:34,240 --> 00:58:35,120 To przechowywania - 1244 00:58:35,120 --> 00:58:36,350 >> STUDENT: pierwsza wartość łańcucha. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorn: adres Pierwsza wartość ciągu. 1246 00:58:40,810 --> 00:58:46,940 Gdybyśmy mieli wydrukować to, że jesteśmy uzyskanie wartości wewnątrz wskaźnika. 1247 00:58:46,940 --> 00:58:51,005 I zobaczymy, to jest, rzeczywiście, adres pamięci. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Czy to ma sens? 1250 00:58:56,440 --> 00:58:56,940 Przepraszam. 1251 00:58:56,940 --> 00:58:58,996 Zaraz, czy to odpowiedź na swoje pytanie, choć? 1252 00:58:58,996 --> 00:58:59,790 >> Uczeń: Tak. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorn: Ten wiersz kodu tworząc ciąg i potem kolejny 1254 00:59:05,830 --> 00:59:09,115 Zmienna wskazuje wskaźnik, który jest do tego ciągu, że tablica. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Tak. 1257 00:59:14,980 --> 00:59:19,200 >> Student: Zatem jeśli byliśmy jedną pamięć adres dalej, chcielibyśmy dostać h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Został on zapisany jako ciąg? 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirschhorn: Jak, my - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 tak, to jest cenne, aby zrobić. 1263 00:59:30,790 --> 00:59:33,780 To jest punkt arytmetyczne, które wy nie widział i powinien być 1264 00:59:33,780 --> 00:59:35,550 stosunkowo komfortowo. 1265 00:59:35,550 --> 00:59:36,905 To jest podobne do pisania - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 gdybyśmy mieli do napisania tego wiersza kodu, widzieliśmy notacji tablicy przed. 1268 00:59:46,350 --> 00:59:55,900 To powinno dać nam drugą Wartość w tej tablicy, godz. 1269 00:59:55,900 --> 01:00:05,010 >> Jeśli zrobiliśmy to, to powinna również nam druga wartość w tej tablicy. 1270 01:00:05,010 --> 01:00:08,320 Ponieważ nie jest on będzie do pamięci adres z pierwszych rzeczy, ale 1271 01:00:08,320 --> 01:00:10,530 adres pamięci z jednej rzeczy na. 1272 01:00:10,530 --> 01:00:14,360 A potem dereferences operator gwiazdki że wskaźnik. 1273 01:00:14,360 --> 01:00:16,940 I znowu, zobaczmy. 1274 01:00:16,940 --> 01:00:18,664 Ponownie uzyskać godz. 1275 01:00:18,664 --> 01:00:20,980 >> Student: Co dokładnie robi nieprawidłowego oznacza? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorn: Dereferencjuj jest wyszukane słowo udać. 1277 01:00:23,650 --> 01:00:26,390 Idź do tego i dostać to, co tam jest jest do nieprawidłowego wskaźnika. 1278 01:00:26,390 --> 01:00:28,240 To tylko wyobraźnia słowo na to. 1279 01:00:28,240 --> 01:00:29,986 >> STUDENT: Gdybyśmy chcieli druku cały ciąg, możemy 1280 01:00:29,986 --> 01:00:31,930 zrobić ampersand wskaźnik? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorn: OK, jesteśmy zamiar wstrzymać się tutaj. 1282 01:00:33,490 --> 01:00:35,480 Jesteśmy tu skończy. 1283 01:00:35,480 --> 01:00:41,760 Ampersand daje adres lokalizacja, więc kiedy nie ampersanda z 1284 01:00:41,760 --> 01:00:44,080 zmienna, to daje adres w przypadku, gdy zmienna jest przechowywana. 1285 01:00:44,080 --> 01:00:48,580 Ampersand wskaźnik daje adres ptr gdzie ptr jest w pamięci. 1286 01:00:48,580 --> 01:00:50,140 >> Nie zamierzamy iść na z tego przykładu. 1287 01:00:50,140 --> 01:00:52,640 Możesz dowiedzieć się, te rzeczy na własną rękę. 1288 01:00:52,640 --> 01:00:55,740 Ale znowu, to może być nawet na pograniczu nieco poza to, co trzeba wiedzieć o 1289 01:00:55,740 --> 01:00:58,000 Zakres tej połowie okresu - 1290 01:00:58,000 --> 01:00:59,070 lub tego quizu, raczej. 1291 01:00:59,070 --> 01:01:00,270 Przepraszam. 1292 01:01:00,270 --> 01:01:03,770 >> Mamy zamiar przejść, bo chciałbym jak zrobić jeden kodowania problemu 1293 01:01:03,770 --> 01:01:05,100 zanim czas się skończy. 1294 01:01:05,100 --> 01:01:09,340 I będziemy kodować co myślę Jest najbardziej atrakcyjne z tych 1295 01:01:09,340 --> 01:01:11,020 przykłady, atoi. 1296 01:01:11,020 --> 01:01:14,520 Więc to było pytanie na Quiz dwa lata temu. 1297 01:01:14,520 --> 01:01:17,810 I mam go na pokładzie tutaj. 1298 01:01:17,810 --> 01:01:20,680 >> Ludzie zadano w quizie - 1299 01:01:20,680 --> 01:01:23,640 zostały one podane w trochę więcej tesxt pytanie, ale wyeliminowany 1300 01:01:23,640 --> 01:01:26,640 tekst, ponieważ nie jest konieczne dla naszych celów teraz. 1301 01:01:26,640 --> 01:01:29,180 To był tylko niektóre tła na co atoi zrobił. 1302 01:01:29,180 --> 01:01:31,425 Ale wszyscy wiemy i są bardzo zaznajomieni z atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Proponuję ten kod na arkuszu papieru. 1304 01:01:35,620 --> 01:01:39,310 Proponuję także użyć strategii że mamy już ponad 1305 01:01:39,310 --> 01:01:41,040 Wiele w naszej sekcji. 1306 01:01:41,040 --> 01:01:44,130 Po pierwsze, upewnij się, że rozumiesz co atoi robi. 1307 01:01:44,130 --> 01:01:47,580 Narysować obrazek lub wymyślić jakiś wyobrażenie o tym w twojej głowie. 1308 01:01:47,580 --> 01:01:51,120 Następnie napisać Pseudokod do tego. 1309 01:01:51,120 --> 01:01:53,120 W quizie, jeśli wszystko masz jest pseudokod, przynajmniej 1310 01:01:53,120 --> 01:01:54,550 umieścić coś w dół. 1311 01:01:54,550 --> 01:02:00,070 A następnie na mapie tego Pseudokod C. Jeśli masz zaewidencjonować 1312 01:02:00,070 --> 01:02:03,760 pseudokod, jak sprawdzić, czy coś jest 1, że jeśli mapy na 1313 01:02:03,760 --> 01:02:05,750 stan i tak dalej. 1314 01:02:05,750 --> 01:02:07,850 I wreszcie, kod programu w C 1315 01:02:07,850 --> 01:02:15,000 >> Więc wrócić do atoi i trwać pięć minut kodować to na kartce 1316 01:02:15,000 --> 01:02:19,480 Papier, który jest prawdopodobnie o Czas, byś się na 1317 01:02:19,480 --> 01:02:21,260 quiz atoi kodu. 1318 01:02:21,260 --> 01:02:27,060 Pięć do 15 minut, od pięciu do 12, pięć do Ciągu 10 minut o wysokości 1319 01:02:27,060 --> 01:02:30,150 czasu chcesz poświęcić na to pytanie w quizie. 1320 01:02:30,150 --> 01:02:31,670 Tak trwać pięć minut teraz, proszę. 1321 01:02:31,670 --> 01:02:35,957 A jeśli masz jakiekolwiek pytania, podnieść Twoja ręka i będę się wokół. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [ROZMOWY SIDE] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorn: OK, więc To było pięć minut. 1326 01:08:37,580 --> 01:08:39,880 To był prawdopodobnie o kwoty czasu chcesz poświęcić na które na quizie, 1327 01:08:39,880 --> 01:08:42,120 może niski koniec tego czasu. 1328 01:08:42,120 --> 01:08:44,010 Będziemy podsumować w kawałku. 1329 01:08:44,010 --> 01:08:45,740 Zacznijmy kodowanie to. 1330 01:08:45,740 --> 01:08:49,479 A jeśli nie mamy całą drogę, Odpowiedzi na to i to 1331 01:08:49,479 --> 01:08:54,189 Quiz pytanie są dostępne, znowu, Jesień 2011, kiedy to pytanie jest 1332 01:08:54,189 --> 01:08:54,913 pojawił się w quizie. 1333 01:08:54,913 --> 01:08:57,830 >> I warto było osiem punktów w quizie wtedy. 1334 01:08:57,830 --> 01:09:01,140 Osiem punktów jest na wysokim koniec ilość punktów coś jest warte. 1335 01:09:01,140 --> 01:09:04,790 Większość pytań znajdują się w zakresie od jednego do sześciu punktach. 1336 01:09:04,790 --> 01:09:08,500 Więc to jest trudniejsze pytanie, na pewno. 1337 01:09:08,500 --> 01:09:09,750 Czy ktoś może zaczynaj? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Generalnie, co będziemy chce z tym zrobić 1340 01:09:15,380 --> 01:09:17,550 funkcjonować atoi, logicznie? 1341 01:09:17,550 --> 01:09:19,569 Co chcemy zrobić? 1342 01:09:19,569 --> 01:09:22,279 Więc mamy zamiar napisać niektóre pseudokod. 1343 01:09:22,279 --> 01:09:24,090 >> STUDENT: Konwersja znaków do liczb całkowitych. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorn: Konwersja znaków do liczb całkowitych. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Więc ile znaków jesteśmy będzie trzeba przejść przez? 1347 01:09:30,870 --> 01:09:32,295 >> STUDENT: Wszystkie. 1348 01:09:32,295 --> 01:09:34,100 >> STUDENT: Wszystkie postacie w ciąg. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorn: Wszystkie znaków w ciągu. 1350 01:09:35,540 --> 01:09:42,180 Więc jeśli chcemy przejść przez każdy znaków w ciągu, co jest rzeczą 1351 01:09:42,180 --> 01:09:44,560 w C, widzieliśmy, że pozwoliła nam przejść przez każdy 1352 01:09:44,560 --> 01:09:45,939 znaków w ciągu znaków? 1353 01:09:45,939 --> 01:09:46,819 >> STUDENCI: na pętli. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorn: na pętli. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Więc idziemy do pętli Każda postać w s.. 1357 01:09:55,330 --> 01:10:00,940 >> To co będziemy chcieli zrobić gdy mamy szczególny charakter? 1358 01:10:00,940 --> 01:10:02,480 Powiedzieć, że jesteśmy coraz uchwalił 90. 1359 01:10:02,480 --> 01:10:03,460 Dostajemy 9. 1360 01:10:03,460 --> 01:10:04,240 To jest znak. 1361 01:10:04,240 --> 01:10:07,440 Co chcemy zrobić z że znak 9? 1362 01:10:07,440 --> 01:10:10,082 >> STUDENT: Odejmij to od charakteru 0? 1363 01:10:10,082 --> 01:10:11,860 >> STUDENT: Dodaj 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorn: Odejmij to od charakteru 0? 1365 01:10:13,350 --> 01:10:13,800 >> Uczeń: Tak. 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirschhorn: Dlaczego chcesz to zrobić? 1367 01:10:15,573 --> 01:10:16,560 >> STUDENT: [niesłyszalne] 1368 01:10:16,560 --> 01:10:17,010 wartość. 1369 01:10:17,010 --> 01:10:18,380 Jego wartość int. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirschhorn: OK, więc bierzemy znak 9, odjąć go od 1371 01:10:21,580 --> 01:10:25,820 znak 0, aby uzyskać rzeczywista całkowita 9. 1372 01:10:25,820 --> 01:10:27,070 Słodkie. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 A skąd wiesz, że charakter 9 minus 0 znaków jest 9? 1375 01:10:37,000 --> 01:10:39,222 Co wykres nie obejrzysz? 1376 01:10:39,222 --> 01:10:43,130 >> Student: Nie logicznie dziewięć miejsca od 9 do 0. 1377 01:10:43,130 --> 01:10:44,620 Lub można spojrzeć na tabelę ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorn: tabela ASCII. 1379 01:10:45,120 --> 01:10:46,490 Ale tak, masz również prawidłowe. 1380 01:10:46,490 --> 01:10:47,780 Więc odjąć 0. 1381 01:10:47,780 --> 01:10:49,010 Więc teraz mamy całkowitą 9. 1382 01:10:49,010 --> 01:10:49,970 I co chcemy zrobić z tym? 1383 01:10:49,970 --> 01:10:54,970 Jeśli mamy 90, to pierwsza liczba całkowita mamy, co chcemy zrobić? 1384 01:10:54,970 --> 01:10:58,180 >> STUDENT: Chciałbym umieścić w tymczasowym całkowitą tablicy, a następnie zrobić do niej matematyki 1385 01:10:58,180 --> 01:11:02,088 później zrobić to do końca. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirschhorn: OK. 1387 01:11:03,020 --> 01:11:06,990 >> STUDENT: Możesz zacząć pod koniec tablicy, a następnie iść do przodu tak 1388 01:11:06,990 --> 01:11:10,350 że za każdym razem iść do przodu, można pomnożyć przez 10.. 1389 01:11:10,350 --> 01:11:10,830 >> JASON Hirschhorn: OK. 1390 01:11:10,830 --> 01:11:12,250 To brzmi jak dość przekonujące pomysł. 1391 01:11:12,250 --> 01:11:16,040 Możemy rozpocząć pod koniec naszej tablicy, i możemy używać strleng. 1392 01:11:16,040 --> 01:11:17,030 Możemy użyć strleng tutaj. 1393 01:11:17,030 --> 01:11:18,870 Dostaniemy długość naszego łańcucha. 1394 01:11:18,870 --> 01:11:20,100 Zaczynamy w końcu. 1395 01:11:20,100 --> 01:11:29,170 I + pierwszy z nich, po prostu przyjąć, że całkowitą, a może stworzymy jak 1396 01:11:29,170 --> 01:11:32,270 Nowa zmienna całkowita się góry, gdzie mamy do przechowywania wszystkiego. 1397 01:11:32,270 --> 01:11:37,340 Więc pętli każdego char w s od z powrotem do przodu, odjąć 0, a 1398 01:11:37,340 --> 01:11:42,790 Następnie bierzemy go, w zależności od gdzie to jest, że to mnożenie 1399 01:11:42,790 --> 01:11:45,860 o mocy 10. 1400 01:11:45,860 --> 01:11:50,644 Ponieważ pierwszy, co my znak po prawej stronie, należy pomnożyć przez? 1401 01:11:50,644 --> 01:11:51,440 >> STUDENT: 10 do 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirschhorn: 10 do 0. 1403 01:11:53,170 --> 01:11:56,010 Co drugi mnożymy Skrajny prawy znak po? 1404 01:11:56,010 --> 01:11:57,450 >> STUDENT: [niesłyszalne]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorn: Co? 1406 01:11:57,960 --> 01:11:59,150 >> STUDENT: 10 do 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirschhorn: 10 do 1. 1408 01:12:00,420 --> 01:12:03,754 Skrajny prawy trzecich charakter? 1409 01:12:03,754 --> 01:12:04,580 >> STUDENT: 10 do 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirschhorn: 10 do 2. 1411 01:12:05,350 --> 01:12:07,200 >> STUDENT: Przykro mi, ale nie rozumiem co my tu robimy. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorn: OK, wróćmy więc. 1413 01:12:08,640 --> 01:12:12,500 Więc dostaniesz podjęta w ciągu. 1414 01:12:12,500 --> 01:12:14,470 Bo piszemy atoi. 1415 01:12:14,470 --> 01:12:15,260 Więc przejdzie w ciągu. 1416 01:12:15,260 --> 01:12:17,640 Powiedzieć, że jesteśmy coraz przeszedł w ciągu 90. 1417 01:12:17,640 --> 01:12:19,930 >> Pierwszą rzeczą, którą mamy zamiar zrobić, to ustawić Nowa zmienna całkowita, że ​​jesteśmy 1418 01:12:19,930 --> 01:12:22,150 po prostu się do tworzenia w naszej nowej liczby całkowitej. 1419 01:12:22,150 --> 01:12:24,630 To, co mamy zamiar powrót na końcu. 1420 01:12:24,630 --> 01:12:30,110 Musimy przejść przez każdy znak w ciąg, ponieważ stwierdziliśmy 1421 01:12:30,110 --> 01:12:34,430 że musimy dotknąć każdego i następnie dodać go do naszej nowej liczby całkowitej. 1422 01:12:34,430 --> 01:12:36,330 >> Ale nie możemy po prostu dodać je jako liczby. 1423 01:12:36,330 --> 01:12:38,270 Nie możemy po prostu wziąć 9 i dodać 9 do naszej liczby całkowitej. 1424 01:12:38,270 --> 01:12:40,560 To zależy od tego, jakie miejsce to jest w ciągu. 1425 01:12:40,560 --> 01:12:42,960 Zamierzamy trzeba pomnożyć to przez moc 10. 1426 01:12:42,960 --> 01:12:45,580 Bo to, jak działa baza 10. 1427 01:12:45,580 --> 01:12:49,050 >> Więc mamy zamiar uzyskać rzeczywisty znaków, liczba całkowita lub rzeczywista 1428 01:12:49,050 --> 01:12:53,860 liczba, przez odjęcie charakter 0 od charakteru 9 jak zrobiliśmy z 1429 01:12:53,860 --> 01:12:57,560 odjęcie znaków kapitałowych, z niezależnie od charakteru mieliśmy w jednym z 1430 01:12:57,560 --> 01:12:58,120 tych problemów. 1431 01:12:58,120 --> 01:13:04,190 Więc my faktycznie uzyskać numer od 0 do 9 zapisany jako liczba rzeczywista, a my 1432 01:13:04,190 --> 01:13:07,590 pomnożyć przez potęgi 10, w zależności gdzie jesteśmy w ciąg. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 A potem będziemy dodawać je z powrotem w naszej nowej zmiennej całkowitej. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Więc co to wygląda jak by być - będziemy rysować tutaj. 1437 01:13:37,890 --> 01:13:40,086 Jeśli przejdzie w ciągu 90 - 1438 01:13:40,086 --> 01:13:41,336 >> STUDENT: [niesłyszalne]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorn: Ale atoi przyjmuje ciąg. 1441 01:13:45,540 --> 01:13:46,350 Więc mamy zamiar przejść przez gospodarstwo. 1442 01:13:46,350 --> 01:13:49,900 Będziemy przejdzie w 90. 1443 01:13:49,900 --> 01:13:51,540 Zaczynamy od tyłu do przodu. 1444 01:13:51,540 --> 01:13:53,920 Bierzemy 0. 1445 01:13:53,920 --> 01:13:55,080 >> Student: Przepraszam. 1446 01:13:55,080 --> 01:13:55,880 Może to jest głupie. 1447 01:13:55,880 --> 01:13:59,440 Jeśli jesteśmy coraz podjęta w ciągu, dlaczego jest 90, co mamy 1448 01:13:59,440 --> 01:14:00,260 uzyskiwanie przekazany? 1449 01:14:00,260 --> 01:14:03,160 Ponieważ 90 jest liczbą całkowitą. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorn: Ponieważ atoi trwa łańcuch i włącza go do liczby całkowitej 1451 01:14:06,820 --> 01:14:08,320 reprezentacja tego łańcucha. 1452 01:14:08,320 --> 01:14:13,650 Ale ciąg 90 nie jest liczbą całkowitą 90 lub 90 Numer. 1453 01:14:13,650 --> 01:14:17,920 Ciąg 90 jest tablicą dwóch, lub trzy znaki, a raczej 9 1454 01:14:17,920 --> 01:14:22,740 charakter, 0 postaci, a odwrotny ukośnik 0 znaków. 1455 01:14:22,740 --> 01:14:26,260 >> I piszemy atoi, ponieważ dla Na przykład, jeśli wziąć polecenia 1456 01:14:26,260 --> 01:14:30,230 argument wiersza, i to zapisane w argv, to zapisywane jako ciąg znaków. 1457 01:14:30,230 --> 01:14:32,940 Ale jeśli chcesz, aby traktować go jako liczby, trzeba przekonwertować go na 1458 01:14:32,940 --> 01:14:34,700 Rzeczywista liczba całkowita. 1459 01:14:34,700 --> 01:14:37,210 Co zrobiliśmy jednego z naszych zespołów problemowych. 1460 01:14:37,210 --> 01:14:38,800 Co zrobiliśmy w wielu z naszych zbiorów problemowych. 1461 01:14:38,800 --> 01:14:41,690 Każdy, kto wziął liczbę całkowitą jako argument wiersza polecenia. 1462 01:14:41,690 --> 01:14:46,490 To dlatego nasza funkcja atoi pobiera ciąg. 1463 01:14:46,490 --> 01:14:51,910 >> Więc jeszcze raz, w naszym przykładzie tutaj jesteśmy zajmie ostatni. 1464 01:14:51,910 --> 01:14:55,050 Jedziemy do odejmowania charakter 0 z niego, ponieważ znaki 0 1465 01:14:55,050 --> 01:14:58,810 odejmowana znakiem 0 daje Rzeczywista ilość 0, według 1466 01:14:58,810 --> 01:15:00,950 matematyka ASCII, co robimy. 1467 01:15:00,950 --> 01:15:04,870 >> Ponieważ znaki są reprezentowane inaczej niż ich rzeczywista - 1468 01:15:04,870 --> 01:15:08,830 znaków, na przykład małe jest 97. 1469 01:15:08,830 --> 01:15:10,260 To nie jest - oops! 1470 01:15:10,260 --> 01:15:13,290 To nie jest, co można się spodziewać to jest, 0, na przykład. 1471 01:15:13,290 --> 01:15:16,200 Więc trzeba odjąć znaków, aby uzyskać 0. 1472 01:15:16,200 --> 01:15:18,950 >> Więc mamy zamiar to zrobić tutaj aby uzyskać rzeczywistą liczbę. 1473 01:15:18,950 --> 01:15:22,560 A potem będziemy pomnożyć przez moc 10 w zależności od miejsca 1474 01:15:22,560 --> 01:15:27,030 jest w ciągu znaków, a następnie, że i dodać go do naszego właściciela lokalu 1475 01:15:27,030 --> 01:15:32,520 zmienna więc możemy wymyślić Nasza ostateczna nowa całkowitą. 1476 01:15:32,520 --> 01:15:35,080 Czy to ma sens dla wszystkich? 1477 01:15:35,080 --> 01:15:37,730 >> Więc nie idziemy do kodu to teraz, ponieważ jesteśmy 1478 01:15:37,730 --> 01:15:38,830 się na krótki czas. 1479 01:15:38,830 --> 01:15:40,860 Przepraszam za timing to. 1480 01:15:40,860 --> 01:15:44,620 Ale to jest to, co, miejmy nadzieję, byś być w stanie zrobić w quizie - w 1481 01:15:44,620 --> 01:15:47,710 najmniej, dostać ten Pseudokod rozpisane. 1482 01:15:47,710 --> 01:15:50,840 >> I wtedy, gdybyśmy mieli pisać pseudokod, w rzeczywistości, możemy to zrobić 1483 01:15:50,840 --> 01:15:51,490 dość szybko. 1484 01:15:51,490 --> 01:15:55,230 Każda linia komentarzach pisaliśmy tutaj przekłada się na temat 1485 01:15:55,230 --> 01:15:56,970 jedna linia kodu C. 1486 01:15:56,970 --> 01:16:01,780 Deklarując nową zmienną, pisanie pętla, niektóre odejmowanie, niektóre 1487 01:16:01,780 --> 01:16:07,070 mnożenia, a niektóre zadania. 1488 01:16:07,070 --> 01:16:09,020 My pewnie też chcą napisz przewód powrotny. 1489 01:16:09,020 --> 01:16:12,040 Możemy również chcesz umieścić Niektóre kontrole tutaj. 1490 01:16:12,040 --> 01:16:12,655 Tak. 1491 01:16:12,655 --> 01:16:15,720 >> Uczeń: Tak więc możemy traktować y jak rzeczywisty ciąg? 1492 01:16:15,720 --> 01:16:18,730 Bo wiem, że to tylko adres. 1493 01:16:18,730 --> 01:16:22,090 Jak, w jaki sposób dostać się na długość Ciąg jest przepuszczany przez? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorn: Więc jak długość łańcucha? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> STUDENT: strlen, tak. 1497 01:16:26,660 --> 01:16:30,550 Ale możesz umieścić s jako argument za tym? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorn: Więc strlen wykonuje gwiazdę char. 1499 01:16:34,620 --> 01:16:38,090 I to stąd, że gwiazda char, i to utrzymuje liczy aż dojdzie do 1500 01:16:38,090 --> 01:16:41,865 odwrotny ukośnik 0. strlen faktycznie jeden z pozostałych programów my 1501 01:16:41,865 --> 01:16:42,850 jechaliśmy kodu. 1502 01:16:42,850 --> 01:16:44,560 To kolejny dobry do kodu. 1503 01:16:44,560 --> 01:16:47,270 Że jeden jest trochę łatwiej, ponieważ jeśli będziesz o tym myśleć 1504 01:16:47,270 --> 01:16:47,830 koncepcyjnie - 1505 01:16:47,830 --> 01:16:51,620 Powiedziałem to głośno - strlen następująco wskaźnik i utrzymuje dzieje i 1506 01:16:51,620 --> 01:16:54,210 liczenia i śledzenia, dopóki osiągniesz odwrotny ukośnik 0. 1507 01:16:54,210 --> 01:16:56,530 >> STUDENT: OK, rozumiem. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirschhorn: Więc najlepiej Powodzenia w quizie 0 jutro. 1509 01:17:00,200 --> 01:17:03,170 Jeśli masz jakieś pytania, będę na zewnątrz po tym. 1510 01:17:03,170 --> 01:17:05,610 Zapraszam do mnie e-mail. 1511 01:17:05,610 --> 01:17:08,480 Dotrzeć do własnego TF jeśli jesteś nie w moim dziale, lub uzyskać w moim 1512 01:17:08,480 --> 01:17:10,005 e-mail, jeśli chcesz. 1513 01:17:10,005 --> 01:17:13,140 >> Jeśli chcesz freak out i po prostu wysłać mi e-mail, e-mail freakout, będę 1514 01:17:13,140 --> 01:17:16,710 wysłać z powrotem, jak, uśmiechniętą twarz, czy, jak, żart czy coś. 1515 01:17:16,710 --> 01:17:18,190 Dlatego zachęcamy do zrobienia, że ​​dobrze. 1516 01:17:18,190 --> 01:17:20,750 Powodzenia jeszcze raz, i będę zobaczyć was wszystkich w przyszłym tygodniu. 1517 01:17:20,750 --> 01:17:23,435