1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> Głośnik 1: Witam wszystkich. 3 00:00:05,680 --> 00:00:07,530 Mamy zamiar zacząć. 4 00:00:07,530 --> 00:00:09,330 Myślę, że ludzie są nadal w toku być filtrowanie. 5 00:00:09,330 --> 00:00:12,840 Ale w interesie czasu, więc możemy Ci faceci z tutaj na czas, 6 00:00:12,840 --> 00:00:14,110 mamy zamiar rozpocząć. 7 00:00:14,110 --> 00:00:18,780 Tak więc zapraszamy do CS50 Quiz recenzji: 0. 8 00:00:18,780 --> 00:00:23,020 Dla tych z Was, którzy nie zdali sobie sprawę, jeszcze, masz pytanie w środę. 9 00:00:23,020 --> 00:00:25,700 Woo-hoo. 10 00:00:25,700 --> 00:00:29,780 >> Jeśli jeszcze nie rozpoczął studia lub nie wiedziałem, że ten jeszcze istnieje, 11 00:00:29,780 --> 00:00:34,070 Wcześniejsze testy i wszystkie informacje o quiz są na cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Istnieje kilka bardzo dobrych rzeczy na nie, Wcześniejsze testy z ostatnich 10 13 00:00:38,090 --> 00:00:43,760 lat, a także informacje o tym quizie i tematów 14 00:00:43,760 --> 00:00:46,250 które będą objęte. 15 00:00:46,250 --> 00:00:48,980 Więc zaczynajmy. 16 00:00:48,980 --> 00:00:54,240 >> Więc chłopaki mogą pamiętać, pierwszy dzień z klasy Dawida miał te lampy na. 17 00:00:54,240 --> 00:00:59,650 Więc w zasadzie wszystko, co wykracza na pod maską komputera jest 18 00:00:59,650 --> 00:01:00,860 wykonane w formacie binarnym. 19 00:01:00,860 --> 00:01:04,080 Binary oznacza to, co brzmi jak, 0 i 1 to. 20 00:01:04,080 --> 00:01:09,290 Posiada dwie wartości, które mogą być reprezentowane. 21 00:01:09,290 --> 00:01:14,675 >> Tak więc, podobnie jak w pierwszym dniu sekcji kiedy David włączone światła 22 00:01:14,675 --> 00:01:21,990 żarówki do reprezentowania na, lub 1, nasz komputer rozumie 0 jest binarny, jak i 23 00:01:21,990 --> 00:01:24,110 1 jest, włączyć lub wyłączyć. 24 00:01:24,110 --> 00:01:25,360 Podstawy binarnych. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Każde miejsce jest reprezentowany w bazie dwa. 27 00:01:32,470 --> 00:01:36,260 Więc dodać 2 do 0 do 1 do 2 aż do góry. 28 00:01:36,260 --> 00:01:41,970 >> Aby obliczyć, co jest twoje binarny dziesiętny, wystarczy postępować zgodnie z tego równania 29 00:01:41,970 --> 00:01:42,840 typu rzeczy. 30 00:01:42,840 --> 00:01:49,510 Jeśli masz 1 w jednym z tych miejsc, należy pomnożyć go przez co 31 00:01:49,510 --> 00:01:53,820 oprzeć to, dodaj go do góry i masz po przecinku. 32 00:01:53,820 --> 00:01:57,930 Tak to jest, jak liczyć do 5 w formacie binarnym. 33 00:01:57,930 --> 00:02:01,400 Podobnie jak to, co robiliśmy na Ostatnie zdjęcie, to jak byś 34 00:02:01,400 --> 00:02:02,650 stanowią od 1 do 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Podobnie, tak jak można dodawać i odejmowanie w przecinku lub oparcie 10, lub 37 00:02:09,660 --> 00:02:13,040 naprawdę każda baza, można dodać na i odejmowanie w systemie binarnym. 38 00:02:13,040 --> 00:02:18,400 Dokładnie to, czego można się spodziewać po dodać dwa do góry, jeśli jest równa większej 39 00:02:18,400 --> 00:02:24,220 niż 1, nosisz 1, sprawiają, że 0, i czy dodanie w ten sposób, po prostu 40 00:02:24,220 --> 00:02:29,910 jak można się spodziewać z regularnym dziesiętny lub inny bazowej. 41 00:02:29,910 --> 00:02:30,970 Fajne. 42 00:02:30,970 --> 00:02:35,140 >> Tak jak mówiłem wcześniej, wszystko, przechodzi pod maską naszego komputera 43 00:02:35,140 --> 00:02:37,560 odbywa się w 0 i 1 to czy binarny. 44 00:02:37,560 --> 00:02:43,470 Jak więc wyrazić, na przykład, liter lub cyfr, lub znaków? 45 00:02:43,470 --> 00:02:45,560 A odpowiedź na to jest ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII jest mapowanie między znakami które normalnie zobaczyć w 47 00:02:49,380 --> 00:02:53,360 Język angielski jak jest, B, C jest, podkreślenia, myślniki i 48 00:02:53,360 --> 00:02:54,910 coś w tym stylu. 49 00:02:54,910 --> 00:02:57,260 I mapy, które do wartości ASCII. 50 00:02:57,260 --> 00:03:03,080 Wartość ASCII jest tylko numer, który może być rozumiane przez komputer. 51 00:03:03,080 --> 00:03:07,430 I tak jak można zrobić dodawanie i odejmowanie z numerami, możesz zrobić 52 00:03:07,430 --> 00:03:10,890 je z wartościami ASCII. 53 00:03:10,890 --> 00:03:14,050 >> Tak więc w tym przykładzie, jaki będzie to wydrukować? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Tak, tak, tylko przestrzeń B C przestrzeń przestrzeń D. Gdzie moja mysz iść? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Zauważyć można określić int na 65. 58 00:03:43,380 --> 00:03:47,080 A podczas drukowania, że ​​z pomocą procent C, będzie to interpretować, że jako 59 00:03:47,080 --> 00:03:49,330 znaków i wypisze A. 60 00:03:49,330 --> 00:03:52,800 >> Podobnie, można zadeklarować go jako char. 61 00:03:52,800 --> 00:03:56,860 A gdy go wydrukować z użyciem procent C, będzie to interpretować, że jako 62 00:03:56,860 --> 00:04:05,240 procent D. I tak jak można dodać Numer można dodawać znaki są 63 00:04:05,240 --> 00:04:06,878 Wartości ASCII, w tym przypadku. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> Więc trochę wskazówka dla wszystkich. 66 00:04:16,130 --> 00:04:19,610 5, jako ciąg znaków, nie faktycznie równa 5. 67 00:04:19,610 --> 00:04:26,610 Więc jak możemy przekształcić łańcuch 5 z całkowitą 5? 68 00:04:26,610 --> 00:04:28,930 Jakieś pomysły? 69 00:04:28,930 --> 00:04:31,630 Tak. 70 00:04:31,630 --> 00:04:36,720 >> Więc jeśli mamy 5 jako ciąg, możemy odjąć 0. 71 00:04:36,720 --> 00:04:37,820 I że da nam 5. 72 00:04:37,820 --> 00:04:41,670 Podobnie, jeśli mamy 5 jako całkowitą, dodać, że do łańcucha 0. 73 00:04:41,670 --> 00:04:43,112 I to daje nam ciąg 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Fajne. 76 00:04:48,350 --> 00:04:52,940 >> Teraz przypominam sobie z powrotem tam gdzie wykład jednego rozmawialiśmy o algorytmach. 77 00:04:52,940 --> 00:04:57,260 Jak więc naprawdę chcesz komputer robić ciekawe rzeczy? 78 00:04:57,260 --> 00:05:00,460 Wiesz, tylko dodawanie i odejmowanie numery i druk rzeczy obecnie nie jest 79 00:05:00,460 --> 00:05:01,730 że ekscytujące. 80 00:05:01,730 --> 00:05:04,620 Zwykle chcemy nasz komputer do wykonać jakiś algorytm. 81 00:05:04,620 --> 00:05:07,820 Coś nieco bardziej skomplikowane niż tylko prostej arytmetyki. 82 00:05:07,820 --> 00:05:11,930 >> Algorytm jest tylko zestaw krok po kroku z instrukcjami, jak wykonać 83 00:05:11,930 --> 00:05:14,640 pewne task-- 84 00:05:14,640 --> 00:05:15,660 tak jak przepis. 85 00:05:15,660 --> 00:05:19,990 Może pamiętasz pierwszy dzień Klasa, gdzie Dawid nam liczyć pokój 86 00:05:19,990 --> 00:05:22,550 ludzi i jak wiele osób były w pokoju. 87 00:05:22,550 --> 00:05:24,480 Możesz być używane do liczenia jeden po drugim. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 W tym przypadku algorytm czasu liniowego. 90 00:05:28,010 --> 00:05:31,710 >> Ale David przedstawił algorytm można policzyć ludzi w pokoju 91 00:05:31,710 --> 00:05:37,340 gdzie każdy wstaje, mówisz swoimi numer do innej osoby, należy dodać, że 92 00:05:37,340 --> 00:05:39,200 liczbę w górę, a jedna osoba siada. 93 00:05:39,200 --> 00:05:40,410 I powtórzyć. 94 00:05:40,410 --> 00:05:42,910 To jest jeden rodzaj algorytmu. 95 00:05:42,910 --> 00:05:47,520 Możemy analizować, jak efektywne an Algorytm oparty jest na to czas pracy. 96 00:05:47,520 --> 00:05:49,680 Ale porozmawiamy trochę Więcej o tym później. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> Więc wszystkie algorytmy mogą również być napisany w Pseudokod. 99 00:05:57,090 --> 00:06:01,120 Pseudokod jest tylko angielski jak Składnia do reprezentowania 100 00:06:01,120 --> 00:06:02,420 język programowania. 101 00:06:02,420 --> 00:06:06,070 Na przykład, jeśli chcemy zadać użytkownikowi odgadnąć mój ulubiony numer, my 102 00:06:06,070 --> 00:06:08,390 może mieć Pseudokod jako takiego. 103 00:06:08,390 --> 00:06:09,850 >> Uzyskaj użytkowników odgadnąć. 104 00:06:09,850 --> 00:06:13,570 Jeśli przypuszczenie jest poprawna, powiedz im, są poprawne, jeszcze powiedz im 105 00:06:13,570 --> 00:06:15,560 nie są one poprawne. 106 00:06:15,560 --> 00:06:22,530 I pseudokod jest sposób łatwo reprezentujących pomysł lub algorytm. 107 00:06:22,530 --> 00:06:26,910 Więc teraz może chcemy rzeczywiście napisać to w języku, że komputer 108 00:06:26,910 --> 00:06:27,980 mógłby zrozumienie. 109 00:06:27,980 --> 00:06:35,660 Więc możemy napisać nasz Pseudokod i interpretacji, że do kodu źródłowego. 110 00:06:35,660 --> 00:06:41,320 >> Do tej pory, należy stosować kod źródłowy do pewnej składni 111 00:06:41,320 --> 00:06:42,490 język programowania. 112 00:06:42,490 --> 00:06:45,430 I do tej pory, w CS50, mamy był używany głównie c. 113 00:06:45,430 --> 00:06:48,320 Więc może to być kod źródłowy C. 114 00:06:48,320 --> 00:06:51,440 Później, w trakcie, to noc przyjść w kontakt z innymi programowania 115 00:06:51,440 --> 00:06:52,480 w językach takich jak PHP. 116 00:06:52,480 --> 00:06:57,540 Lub jeśli nawet podjąć inne zajęcia, ci może zrobić, Java, Python, lub nawet OCML. 117 00:06:57,540 --> 00:07:01,570 Ale w naszym języku C programu, to jest jak możemy napisać kod źródłowy 118 00:07:01,570 --> 00:07:04,760 pseudokod, że algorytm Właśnie opisano wcześniej. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Więc w jaki sposób komputer faktycznie Rozumiesz to? 121 00:07:11,430 --> 00:07:14,490 Tak jak mówiłem wcześniej, to tylko naprawdę rozumie zer i jedynek. 122 00:07:14,490 --> 00:07:17,880 Więc jak to się od źródła Kod do czegoś, co może być 123 00:07:17,880 --> 00:07:18,960 rozumieć? 124 00:07:18,960 --> 00:07:22,920 Cóż, mamy coś zwany kompilator. 125 00:07:22,920 --> 00:07:28,450 >> Jeśli pamiętacie widok większość swojego psets, miałeś jakiś program 126 00:07:28,450 --> 00:07:30,370 napisane w pliku kropka c. 127 00:07:30,370 --> 00:07:32,550 A następnie należy wpisać markę. 128 00:07:32,550 --> 00:07:35,970 Więc co się robi? 129 00:07:35,970 --> 00:07:39,970 >> Możesz wpisać markę skompilować Program ponieważ someone-- 130 00:07:39,970 --> 00:07:42,730 kto napisał swój zestaw p; prawdopodobnie David-- 131 00:07:42,730 --> 00:07:44,190 utworzony plik make. 132 00:07:44,190 --> 00:07:51,320 I to mówi się, aby wiedzieć, aby uruchomić kompilator, zwany dzyń, że wola 133 00:07:51,320 --> 00:07:55,560 następnie skompilować kod źródłowy do obiektu Kod, który jest zer i jedynek 134 00:07:55,560 --> 00:07:57,720 że komputer rozumie. 135 00:07:57,720 --> 00:08:01,610 Ale trochę później, pójdziemy więcej w głębokości około kompilatorów. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> Więc przypominam pset 0, where-- tak, masz pytanie? 138 00:08:10,800 --> 00:08:11,620 >> PUBLICZNOŚCI: [niesłyszalne]? 139 00:08:11,620 --> 00:08:12,490 >> 1 głośnik: Tak. 140 00:08:12,490 --> 00:08:14,960 Myślę, że rzeczywiście powinna być w trybie online. 141 00:08:14,960 --> 00:08:15,120 Tak. 142 00:08:15,120 --> 00:08:16,572 >> PUBLICZNOŚCI: Czy to jest jak [niesłyszalne]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> Głośnik 1: Nie jest. 145 00:08:20,830 --> 00:08:25,810 Są na cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> PUBLICZNOŚCI: quizy Slash, slash 2013, slash 0, i po prostu klikać 147 00:08:32,900 --> 00:08:35,956 2013 i quizy Quiz 0, przeglądu slajdów rozdział. 148 00:08:35,956 --> 00:08:40,380 >> 1 głośnik: Tak, więc jeśli chcecie, aby wyciągnij go i patrzeć na swoje 149 00:08:40,380 --> 00:08:42,740 własny komputer, to też dobrze. 150 00:08:42,740 --> 00:08:43,130 Powiedz to jeszcze raz. 151 00:08:43,130 --> 00:08:44,546 >> PUBLICZNOŚCI: [niesłyszalne]. 152 00:08:44,546 --> 00:08:48,780 >> 1 głośnik: Tak, [niesłyszalne] jest zmienna manekin. 153 00:08:48,780 --> 00:08:49,644 Och, tak? 154 00:08:49,644 --> 00:08:51,372 >> PUBLICZNOŚCI: [niesłyszalne]? 155 00:08:51,372 --> 00:08:54,300 >> Głośnik 1: Nie, strajki nie są na egzaminie. 156 00:08:54,300 --> 00:08:55,950 Niestety, jej pytanie było, było Strajki na egzaminie. 157 00:08:55,950 --> 00:08:59,530 I to nie jest. 158 00:08:59,530 --> 00:09:05,780 Więc pset 0, chłopaki powinni mieć wszystko wdrożone coś używając zera. 159 00:09:05,780 --> 00:09:13,100 I dowiedzieliśmy się podstawowe programowanie bloki przy użyciu podstaw. 160 00:09:13,100 --> 00:09:15,590 >> Warto więc spojrzeć na niektóre z tych bloków 161 00:09:15,590 --> 00:09:18,170 które składają się na program. 162 00:09:18,170 --> 00:09:20,570 Pierwszym z nich jest wyrażenie logiczne. 163 00:09:20,570 --> 00:09:24,540 Wyrażenia te są logiczne i 0-tych lub wszystko co ma 164 00:09:24,540 --> 00:09:25,700 dwie możliwe wartości. 165 00:09:25,700 --> 00:09:30,320 W tym przypadku, prawdziwe lub fałszywe, włączyć lub wyłączyć, i tak lub nie. 166 00:09:30,320 --> 00:09:35,390 Przykład prosty bardzo prosty program, który wykorzystuje Boolean 167 00:09:35,390 --> 00:09:39,140 Wyrażenie się tutaj. 168 00:09:39,140 --> 00:09:43,220 >> Tak aby do wyrażeń logicznych być przydatne, mamy operatorów logicznych. 169 00:09:43,220 --> 00:09:48,920 Są to napędy, które mogą być stosowane porównać pewne wartości. 170 00:09:48,920 --> 00:09:52,820 Więc mamy i czy nie równe, mniej niż lub równy lub większy niż 171 00:09:52,820 --> 00:09:55,130 równą lub mniejszą niż lub większe niż. 172 00:09:55,130 --> 00:09:59,060 Ale te podmioty nie są bardzo przydatne chyba, że ​​możemy połączyć je w 173 00:09:59,060 --> 00:10:00,320 warunki. 174 00:10:00,320 --> 00:10:04,370 >> Więc chłopaki mogą pamiętać od podstaw i od p określa, że ​​my 175 00:10:04,370 --> 00:10:05,400 miał warunki. 176 00:10:05,400 --> 00:10:09,710 Są one w istocie, jak widły w Logika programu, które 177 00:10:09,710 --> 00:10:12,670 wykonywana w zależności od tego, czy Warunek ten jest spełniony. 178 00:10:12,670 --> 00:10:18,150 Tak więc jednym z warunków, które mieliśmy używany wiele razy w tym kursie jest 179 00:10:18,150 --> 00:10:21,470 jeśli, jeszcze, jeśli, i warunki innego. 180 00:10:21,470 --> 00:10:24,060 >> Oto przykład, jak można użyć. 181 00:10:24,060 --> 00:10:28,430 Czy ktoś zna różnicę między tylko za pomocą instrukcji if wszystkich 182 00:10:28,430 --> 00:10:32,530 w dół wersetów if, else, wtedy i jeszcze łączy? 183 00:10:32,530 --> 00:10:33,013 Tak? 184 00:10:33,013 --> 00:10:34,263 >> PUBLICZNOŚCI: [niesłyszalne]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> Głośnik 1: Dokładnie. 187 00:10:42,160 --> 00:10:50,210 Więc gdybym miał, jeśli w dół to sposób, nawet jeśli ten warunek zwrotu 188 00:10:50,210 --> 00:10:52,800 prawdziwe, to nadal testowanie kolejnych dwóch. 189 00:10:52,800 --> 00:11:00,120 Natomiast z innego-jeśli, w inny oświadczenie, jeśli jeden zwraca true, 190 00:11:00,120 --> 00:11:02,640 inni nie są testowane. 191 00:11:02,640 --> 00:11:05,955 Wszelkie pytania na ten temat? 192 00:11:05,955 --> 00:11:06,890 Fajne. 193 00:11:06,890 --> 00:11:12,240 >> Więc używać if-else o indziej oświadczenie, jeśli wiesz, że to może tylko 194 00:11:12,240 --> 00:11:14,470 jeden z tych przypadków. 195 00:11:14,470 --> 00:11:21,550 Wiemy więc, jeśli x jest mniejsze niż 0, to na pewno nie będzie 196 00:11:21,550 --> 00:11:22,890 większy niż 0. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Następny, kolejny blok budynek że dowiedzieliśmy się pętle. 199 00:11:31,480 --> 00:11:33,310 Mamy trzy rodzaje pętli. 200 00:11:33,310 --> 00:11:35,830 Pętli, podczas pętli, i robić podczas pętli. 201 00:11:35,830 --> 00:11:38,730 I na ogół, kiedy siadasz do coś napisać, musisz się zdecydować 202 00:11:38,730 --> 00:11:40,060 który z trzech, którego chcesz użyć. 203 00:11:40,060 --> 00:11:41,900 Jak więc zdecydować, który z nich? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Ogólnie używamy do pętli, jeśli wiemy, ile razy chcemy iteracji 206 00:11:48,790 --> 00:11:53,650 przez coś lub ile razy chcemy, aby wykonać zadanie. 207 00:11:53,650 --> 00:11:58,830 Używamy podczas pętli, jeśli potrzebujemy warunek, aby być prawdziwe, aby utrzymać funkcjonowanie. 208 00:11:58,830 --> 00:12:03,730 I używamy zrobić gdy bardzo podobne do jednocześnie, ale chcemy, aby nasz kod do uruchomienia w 209 00:12:03,730 --> 00:12:04,880 co najmniej jeden raz. 210 00:12:04,880 --> 00:12:09,410 >> Więc zrobić, gdy, co jest na wolę zawsze uruchamiać co najmniej jeden raz. 211 00:12:09,410 --> 00:12:13,120 Mając na uwadze, ze czas, to może nie działać w ogóle, jeśli 212 00:12:13,120 --> 00:12:15,490 warunek nie jest spełniony. 213 00:12:15,490 --> 00:12:16,740 Wszelkie pytania z tym? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> Tak więc struktura pętli. 216 00:12:22,860 --> 00:12:23,620 Macie wszystko widziałem tego. 217 00:12:23,620 --> 00:12:25,320 Zainicjować go. 218 00:12:25,320 --> 00:12:26,600 Masz jakiś warunek. 219 00:12:26,600 --> 00:12:32,340 Tak więc, na przykład, możemy zainicjować jak dla i jest równa 0. 220 00:12:32,340 --> 00:12:34,040 i mniej niż 10. 221 00:12:34,040 --> 00:12:35,442 A i ++. 222 00:12:35,442 --> 00:12:39,010 Bardzo prosty, że zrobiliśmy. 223 00:12:39,010 --> 00:12:42,210 >> Do pętli while, podobnie, masz mieć jakiś inicjalizacji 224 00:12:42,210 --> 00:12:44,980 jakiś stan, i jakaś aktualizacja. 225 00:12:44,980 --> 00:12:51,990 Więc możemy zrealizować naszej pętli również w pętli przy użyciu tego produktu. 226 00:12:51,990 --> 00:12:56,000 I podobnie z zadań podczas pętli, może mamy jakiś inicjalizacji, 227 00:12:56,000 --> 00:12:58,640 wykonać coś, zaktualizować go i następnie sprawdzić stan. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> Więc teraz funkcje. 230 00:13:05,140 --> 00:13:06,460 Stawiamy wszystko razem. 231 00:13:06,460 --> 00:13:10,140 Może chcemy napisać jakiś rodzaj funkcji. 232 00:13:10,140 --> 00:13:12,790 Wspólna funkcja to polubisz już, to głównym. 233 00:13:12,790 --> 00:13:13,770 Głównym jest funkcja. 234 00:13:13,770 --> 00:13:16,160 Ma typu zwrot, int. 235 00:13:16,160 --> 00:13:18,470 Ma nazwę funkcji, główne. 236 00:13:18,470 --> 00:13:20,810 I ma argumenty, argc i argv. 237 00:13:20,810 --> 00:13:24,040 Tak właśnie jest główną funkcją. 238 00:13:24,040 --> 00:13:27,230 >> Inne funkcje mogą już stosowane, printf-- printf jest function-- 239 00:13:27,230 --> 00:13:29,330 GetInt, toupper. 240 00:13:29,330 --> 00:13:32,010 Ale to się stało, że był realizowany dla nas 241 00:13:32,010 --> 00:13:33,270 jakieś biblioteki. 242 00:13:33,270 --> 00:13:37,400 Jeśli wy pamiętać w tym Ta biblioteka CS50.h lub 243 00:13:37,400 --> 00:13:38,510 Standard I / O bibliotece. 244 00:13:38,510 --> 00:13:39,200 Tak, pytanie? 245 00:13:39,200 --> 00:13:41,610 >> PUBLICZNOŚCI: Czy główny prostu nieodłączną c? 246 00:13:41,610 --> 00:13:44,740 Czy to po prostu rodzaj [niesłyszalne]? 247 00:13:44,740 --> 00:13:47,370 >> Głośnik 1: pytanie jeśli głównym jest nieodłączną c. 248 00:13:47,370 --> 00:13:51,460 I tak, wszystkie funkcje mają główną funkcję. 249 00:13:51,460 --> 00:13:55,290 Jest to rodzaj niezbędne do komputera wiedzieć, gdzie zacząć 250 00:13:55,290 --> 00:13:55,993 działania kodu. 251 00:13:55,993 --> 00:13:58,108 >> PUBLICZNOŚCI: więc nie [niesłyszalne]? 252 00:13:58,108 --> 00:13:59,480 >> 1 głośnik: Nie 253 00:13:59,480 --> 00:14:00,760 Jeszcze jakieś pytania? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Fajne. 256 00:14:04,770 --> 00:14:08,050 Więc jak można użyć funkcji , który jest przeznaczony dla Ciebie, możesz również 257 00:14:08,050 --> 00:14:10,380 wyraź swoją funkcję. 258 00:14:10,380 --> 00:14:17,050 To jest funkcja, że ​​ktoś może Napisałem do obliczenia objętości 259 00:14:17,050 --> 00:14:18,395 o Q, na przykład. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Jest to rodzaj powrotu tutaj, w tym przypadku int, nasza nazwa funkcji q i nasze 262 00:14:29,500 --> 00:14:31,360 lista parametrów. 263 00:14:31,360 --> 00:14:34,550 >> I pamiętać, że trzeba zapisać dane Typ parametru, który ma zostać 264 00:14:34,550 --> 00:14:38,660 korzystać albo funkcja nie wiedzieć, jakiego rodzaju 265 00:14:38,660 --> 00:14:41,650 Parametr należy akceptować. 266 00:14:41,650 --> 00:14:48,110 Tak więc, w tym przypadku, chcemy całkowitą od naszego wejścia. 267 00:14:48,110 --> 00:14:50,390 Więc czemu możemy użyć funkcji? 268 00:14:50,390 --> 00:14:52,800 >> Przede wszystkim, doskonały dla organizacji. 269 00:14:52,800 --> 00:14:56,350 Pomagają zerwać kod do więcej zorganizowane kawałki i zrobić 270 00:14:56,350 --> 00:14:57,960 czytelności. 271 00:14:57,960 --> 00:14:59,760 Uproszczenie. 272 00:14:59,760 --> 00:15:01,740 To jest dobre dla projektu. 273 00:15:01,740 --> 00:15:04,570 Kiedy czytasz kawałek kodu , a głównym zadaniem jest naprawdę, 274 00:15:04,570 --> 00:15:07,750 bardzo długo, to może być trudniej Powodem tego, co się dzieje. 275 00:15:07,750 --> 00:15:11,710 Więc jeśli rozbicie go na funkcje, może to być łatwiejsze do odczytania. 276 00:15:11,710 --> 00:15:12,750 I ponowne-zdolności. 277 00:15:12,750 --> 00:15:16,940 Jeśli masz kawałek kodu, który to jest nazwie lub uruchamiać wiele razy, 278 00:15:16,940 --> 00:15:20,690 zamiast przepisywania, że ​​kod 10 razy w swojej głównej funkcji, to polubisz 279 00:15:20,690 --> 00:15:21,440 chce go ponownie. 280 00:15:21,440 --> 00:15:25,740 A następnie za każdym razem trzeba użyć, że kawałek kodu, wywołania funkcji. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> Więc teraz, jeśli pamiętamy, z powrotem do zera, rozmawialiśmy także o kilku koncepcjach, 283 00:15:35,380 --> 00:15:37,680 z których jedna jest gwintów. 284 00:15:37,680 --> 00:15:41,120 Gwint jest pojęcie wielokrotności sekwencje kodu 285 00:15:41,120 --> 00:15:43,040 wykonanie w tym samym czasie. 286 00:15:43,040 --> 00:15:47,490 Więc wracam do pierwszego dnia w którym Dawid Ci ludzie liczą się liczby 287 00:15:47,490 --> 00:15:48,440 osób w pokoju. 288 00:15:48,440 --> 00:15:50,550 >> Zasadniczo, co się dzieje na to wszystko z was byli 289 00:15:50,550 --> 00:15:52,370 uruchomione osobne wątki. 290 00:15:52,370 --> 00:15:55,540 I te wątki razem przybywało dostać jakąś odpowiedź. 291 00:15:55,540 --> 00:15:58,890 Podobnie w Scratch, gdy masz liczne duchy, to polubisz 292 00:15:58,890 --> 00:16:01,070 mieć kota i psa. 293 00:16:01,070 --> 00:16:08,770 I będą one jednocześnie prowadzenie własnych skryptów. 294 00:16:08,770 --> 00:16:10,020 To jest przykład gwintów. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> Oraz inne, które to pojęcie wprowadzony w początku było wydarzenia. 297 00:16:18,000 --> 00:16:22,550 I wydarzenia są, gdy wiele części kod komunikować się ze sobą. 298 00:16:22,550 --> 00:16:26,840 Z początku, kiedy to był używany Kontrola transmisji i Kiedy 299 00:16:26,840 --> 00:16:29,500 Otrzymuj bloków. 300 00:16:29,500 --> 00:16:35,170 >> A także, w Problem Zestaw 4, widzieliśmy Trochę wydarzeń, jak również. 301 00:16:35,170 --> 00:16:38,250 Wy mogły stosować Biblioteka Gevent. 302 00:16:38,250 --> 00:16:42,450 I nie było funkcji waitForClick , w którym czekali 303 00:16:42,450 --> 00:16:44,300 dla użytkownika do kliknięcia. 304 00:16:44,300 --> 00:16:47,870 I click, w tym przypadku, będzie Impreza i czekać na kliknięcie jest Twój 305 00:16:47,870 --> 00:16:49,120 obsługi zdarzeń. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> A także, w całej wyświetlanie psets i pracy na swoim psets, ty 308 00:16:58,630 --> 00:17:01,920 mogła wchodzić w kontakt z niektóre z tych poleceń. 309 00:17:01,920 --> 00:17:05,579 To jest to, co wpisane w swoje okno terminalu lub cokolwiek okno 310 00:17:05,579 --> 00:17:12,119 , który pokazuje się na g edycję, zasadniczo, nawigacja komputer. 311 00:17:12,119 --> 00:17:19,440 >> Tak na przykład, LS wymienia Zawartość katalogu. 312 00:17:19,440 --> 00:17:22,510 Dodać do katalogu tworzy nowy folder. 313 00:17:22,510 --> 00:17:24,819 CD, zmiana katalogu. 314 00:17:24,819 --> 00:17:28,400 RM, usunąć, usuwa plik lub jakiś katalog. 315 00:17:28,400 --> 00:17:31,050 A następnie usunąć katalog usuwa katalog. 316 00:17:31,050 --> 00:17:32,300 >> PUBLICZNOŚCI: [niesłyszalne]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> 1 głośnik: Tak, na pewno. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 Niestety, pytanie czy ty sugeruje wprowadzenie tego 321 00:17:46,040 --> 00:17:48,840 na ściągawki. 322 00:17:48,840 --> 00:17:49,440 To może pomóc. 323 00:17:49,440 --> 00:17:51,490 Jeśli masz pokój, można umieścić go na. 324 00:17:51,490 --> 00:17:56,170 To też po prostu na ogół wystarczająco dobre pamiętać, bo gdy go używać 325 00:17:56,170 --> 00:17:59,060 Może chcesz po prostu ma to na pamięć. 326 00:17:59,060 --> 00:18:02,750 Że twoje życie będzie o wiele łatwiej. 327 00:18:02,750 --> 00:18:04,000 Czy mogę odpowiedzieć na to pytanie? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> Więc teraz, rozmawialiśmy trochę krótko o bibliotekach. 330 00:18:14,290 --> 00:18:18,570 Ale dwa główne z nich, że byli używając tej pory są w trakcie 331 00:18:18,570 --> 00:18:20,860 standard I / O i CS50. 332 00:18:20,860 --> 00:18:25,410 Jakie rzeczy są wliczone w standardowej biblioteki I / O? 333 00:18:25,410 --> 00:18:28,410 >> Tak, do tej pory używaliśmy printf. 334 00:18:28,410 --> 00:18:31,150 W CS50, używaliśmy GetInt i GetString. 335 00:18:31,150 --> 00:18:37,200 I zdarza się typ danych ciąg również należy zgłaszać w tej bibliotece CS50. 336 00:18:37,200 --> 00:18:40,250 Porozmawiamy trochę bardziej w głębokości około jak biblioteki i jak one działają 337 00:18:40,250 --> 00:18:41,870 współdziałać z resztą kodu. 338 00:18:41,870 --> 00:18:46,220 Ale to są dwa główne z nich, że które wchodzą w kontakt z dotychczasowego 339 00:18:46,220 --> 00:18:48,430 Oczywiście. 340 00:18:48,430 --> 00:18:50,050 >> Typy. 341 00:18:50,050 --> 00:18:58,120 Są to warto pamiętać, jak wiele każdy rodzaj jest reprezentowany przez lub jak 342 00:18:58,120 --> 00:19:02,840 wiele bajtów każdy typu requires-- 343 00:19:02,840 --> 00:19:04,990 int, 4 bajty; char, 1 bajt. 344 00:19:04,990 --> 00:19:06,550 Pływak jest 4 bajty. 345 00:19:06,550 --> 00:19:07,782 Co to jest podwójne? 346 00:19:07,782 --> 00:19:09,032 >> PUBLICZNOŚCI: [niesłyszalne]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> 1 głośnik: Tak, tak, pływak ale dwukrotnie rozmiar. 349 00:19:16,240 --> 00:19:17,150 Co o długo? 350 00:19:17,150 --> 00:19:18,400 >> PUBLICZNOŚCI: [niesłyszalne]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> Głośnik 1: OK. 353 00:19:24,680 --> 00:19:25,410 Co to jest długo? 354 00:19:25,410 --> 00:19:26,660 >> PUBLICZNOŚCI: [niesłyszalne]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> 1 głośnik: Tak, double int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Tak. 359 00:19:34,705 --> 00:19:36,100 >> PUBLICZNOŚCI: [niesłyszalne]. 360 00:19:36,100 --> 00:19:38,030 >> Głośnik 1: Długi [niesłyszalne]. 361 00:19:38,030 --> 00:19:41,860 A potem długo, długo to dwukrotnie. 362 00:19:41,860 --> 00:19:42,814 >> PUBLICZNOŚCI: Nie, nie. 363 00:19:42,814 --> 00:19:47,107 Długo jest tylko int. 364 00:19:47,107 --> 00:19:50,910 To zależy od architektury przed [niesłyszalne] 365 00:19:50,910 --> 00:19:52,922 i int mają ten sam rozmiar. 366 00:19:52,922 --> 00:19:54,172 [Niesłyszalne]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> 1 głośnik: Tak długo i int są takie same. 369 00:20:00,920 --> 00:20:02,943 A potem długo, długo jest podwójnie int. 370 00:20:02,943 --> 00:20:03,910 Fajne. 371 00:20:03,910 --> 00:20:05,550 A następnie, jaki jest ostatni typ? 372 00:20:05,550 --> 00:20:06,510 >> PUBLICZNOŚCI: Pointer. 373 00:20:06,510 --> 00:20:10,350 >> 1 głośnik: Tak, tak, my nauczyliśmy Trochę o wskazówki. 374 00:20:10,350 --> 00:20:14,015 I niezależnie od tego, co jest wskaźnikiem wskazując to-- to może być gwiazdą char 375 00:20:14,015 --> 00:20:15,880 lub int star-- 376 00:20:15,880 --> 00:20:20,530 to zawsze 4 bajty dla wskaźnika. 377 00:20:20,530 --> 00:20:21,633 Pytania o to? 378 00:20:21,633 --> 00:20:22,116 Tak? 379 00:20:22,116 --> 00:20:24,531 >> PUBLICZNOŚCI: [niesłyszalne]? 380 00:20:24,531 --> 00:20:29,530 >> 1 głośnik: Tak długo, i int są sama w tym urządzeniu CS50. 381 00:20:29,530 --> 00:20:32,302 >> PUBLICZNOŚCI: urządzenia są całkowicie zamiennie. 382 00:20:32,302 --> 00:20:33,510 >> 1 głośnik: Tak. 383 00:20:33,510 --> 00:20:36,610 Więc potem długo długo podwójne int. 384 00:20:36,610 --> 00:20:39,250 >> PUBLICZNOŚCI: To jest 32-bitowy? 385 00:20:39,250 --> 00:20:40,620 >> Głośnik 1: 32 bit, tak. 386 00:20:40,620 --> 00:20:43,572 >> PUBLICZNOŚCI: Tak [niesłyszalne]? 387 00:20:43,572 --> 00:20:46,790 >> 1 głośnik: Tak, jeśli nie wyraźnie powiedzieć, ci 388 00:20:46,790 --> 00:20:47,870 należy przyjąć 32 bit. 389 00:20:47,870 --> 00:20:50,040 >> PUBLICZNOŚCI: To coś powiedzieć jak przy założeniu, 390 00:20:50,040 --> 00:20:51,498 Architektura podobne urządzenia. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 Dla 64 bit, tylko rzeczy, które Zmiany są długościami i wskaźnikami. 393 00:21:01,710 --> 00:21:05,614 Oboje [niesłyszalne]. 394 00:21:05,614 --> 00:21:06,590 >> 1 głośnik: Tak? 395 00:21:06,590 --> 00:21:07,566 >> PUBLICZNOŚCI: Pytanie. 396 00:21:07,566 --> 00:21:10,982 Tak więc w jednym z quizów praktyce prosi o unsigned int. 397 00:21:10,982 --> 00:21:15,374 Tak, jak by to określić z int [niesłyszalne]? 398 00:21:15,374 --> 00:21:18,140 >> Głośnik 1: niepodpisany w to również 4 bajty. 399 00:21:18,140 --> 00:21:21,172 Ale to, co jest inne o podpisane int i int? 400 00:21:21,172 --> 00:21:22,422 >> PUBLICZNOŚCI: [niesłyszalne]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> Głośnik 1: Prawo. 403 00:21:25,630 --> 00:21:27,570 Można reprezentować wartości ujemne. 404 00:21:27,570 --> 00:21:28,580 Ale jak to zrobić? 405 00:21:28,580 --> 00:21:30,536 >> PUBLICZNOŚCI: [niesłyszalne]. 406 00:21:30,536 --> 00:21:36,370 >> 1 głośnik: Tak, to oszczędza 1 nieco do reprezentowania znak. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Podpisał jeden bit, który ma reprezentuje znak. 409 00:21:45,040 --> 00:21:48,886 I właśnie to wszystko niepodpisany pozytywy. 410 00:21:48,886 --> 00:21:50,365 >> PUBLICZNOŚCI: OK. 411 00:21:50,365 --> 00:21:54,230 Więc można powiedzieć, że jest dwukrotnie dwukrotnie większy od pływaka? 412 00:21:54,230 --> 00:21:58,202 >> Głośnik 1: Pokój jest dwa razy rozmiar pływaka, tak. 413 00:21:58,202 --> 00:22:01,639 >> PUBLICZNOŚCI: W jaki sposób wskaźnik na długo, długo [niesłyszalne]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> Głośnik 1: Więc pytanie jest w jaki sposób wskaźnik na długi long-- 416 00:22:10,870 --> 00:22:13,800 Jak to jest, gdy tylko cztery bajty Dawno jej 8 bajtów. 417 00:22:13,800 --> 00:22:17,310 Więc pamiętaj, co jest wskaźnikiem, zasadniczo w wartości bardzo bazowej. 418 00:22:17,310 --> 00:22:19,046 >> PUBLICZNOŚCI: [niesłyszalne]. 419 00:22:19,046 --> 00:22:22,670 >> 1 głośnik: Tak, tak, wskaźnik jest po prostu pamięć. 420 00:22:22,670 --> 00:22:28,040 Więc to nie ma znaczenia, jak dużo miejsca że wskaźnik wskazuje. 421 00:22:28,040 --> 00:22:32,060 Potrzebuje tylko 4 bajty, aby śledzić z tego miejsca pamięci. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Jeszcze jakieś pytania? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Fajne. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> Więc ostatnią rzeczą, jaką mają jest standardowe wyjście. 428 00:22:47,460 --> 00:22:51,020 Należy używać ich częściej na tyle, że można zapamiętać. 429 00:22:51,020 --> 00:22:54,800 Ale to jest, gdy używamy printf, na przykład. 430 00:22:54,800 --> 00:22:59,260 I mamy te symbole zastępcze, które nazywano kody Format. 431 00:22:59,260 --> 00:23:03,910 >> Więc procent c char, procent i do int, i możemy również użyć procent d. 432 00:23:03,910 --> 00:23:05,130 To samo. 433 00:23:05,130 --> 00:23:08,200 Jednakże, na ogół, że w CS50 spróbuj użyć procent i. 434 00:23:08,200 --> 00:23:09,860 Procent f dla pływaka. 435 00:23:09,860 --> 00:23:15,620 Procent ld długo i długo procent s dla łańcucha. 436 00:23:15,620 --> 00:23:18,550 >> Podobnie, używaliśmy kilka te sekwencje. 437 00:23:18,550 --> 00:23:22,431 Na przykład, backslash n dla nowej linii. 438 00:23:22,431 --> 00:23:26,910 To jest tylko dla kiedy formatowanie Twój kod do druku f. 439 00:23:26,910 --> 00:23:27,260 Tak? 440 00:23:27,260 --> 00:23:28,906 >> PUBLICZNOŚCI: Co to jest procent D? 441 00:23:28,906 --> 00:23:31,850 >> Głośnik 1: Więc pytanie jest to, co jest procent D? 442 00:23:31,850 --> 00:23:33,270 Procent d jest za wskazówki. 443 00:23:33,270 --> 00:23:37,392 Procent di procent i są takie same. 444 00:23:37,392 --> 00:23:41,130 >> PUBLICZNOŚCI: Jaka jest różnica między backslash n i backslash r? 445 00:23:41,130 --> 00:23:45,300 >> Głośnik 1: Więc pytanie jest, co jest Różnica między n i luzu 446 00:23:45,300 --> 00:23:48,615 luz r? 447 00:23:48,615 --> 00:23:50,906 Myślę backslash r jest-- 448 00:23:50,906 --> 00:23:54,340 >> PUBLICZNOŚCI: Więc po prostu oznacza, lewy ukośnik r powraca na początek linii 449 00:23:54,340 --> 00:23:56,670 bez faktycznie będzie nowej linii. 450 00:23:56,670 --> 00:24:01,000 Więc jeśli wydrukować backslash r i wróć do początku wiersza 451 00:24:01,000 --> 00:24:04,005 następnie wydrukować więcej rzeczy, zastąpisz rzeczy, które już na 452 00:24:04,005 --> 00:24:04,390 [Niesłyszalne]. 453 00:24:04,390 --> 00:24:06,725 Mając na uwadze, n rzeczywiście idzie do nowego linia i idzie do [niesłyszalne]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> Głośnik 1: No, jakieś inne pytania? 456 00:24:13,915 --> 00:24:15,430 Wszystko w porządku. 457 00:24:15,430 --> 00:24:18,617 Zamierzam oddać go do Dana, który będzie w dalszym ciągu. 458 00:24:18,617 --> 00:24:25,078 >> [Aplauz] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: W porządku. 461 00:25:09,720 --> 00:25:18,590 Więc będę mówić o kolejnym szeroko Zakres pomysłów z klasy, które są 462 00:25:18,590 --> 00:25:23,220 Przedstawiciel tydzień około dwa i Początek trzy tygodnie rozpoczynając od 463 00:25:23,220 --> 00:25:28,690 z odlewu, który jest po prostu sposobem na leczenia wartość określonego typu, gdy 464 00:25:28,690 --> 00:25:30,830 Wartość innego typu. 465 00:25:30,830 --> 00:25:34,110 Więc możemy to zrobić ze znakami na ints, unosi się wskazówki i 466 00:25:34,110 --> 00:25:35,360 long long podwoić. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Wszystko to może być stosowane jako sposoby leczenia jakąś wartość liczbową 469 00:25:44,500 --> 00:25:48,370 minus char, jak niektóre inne wartość numeryczna. 470 00:25:48,370 --> 00:25:54,480 Więc są pewne problemy z tym, z Oczywiście, która pojawia się, gdy rzucisz 471 00:25:54,480 --> 00:25:57,860 rzeczy, jak wypłyną na wskazówki. 472 00:25:57,860 --> 00:26:00,500 Więc to jest trochę dziwne. 473 00:26:00,500 --> 00:26:03,170 Mamy pływak, który jest 1.31. 474 00:26:03,170 --> 00:26:05,220 Mnożymy go przez 10000. 475 00:26:05,220 --> 00:26:08,380 A potem wydrukować go jako int. 476 00:26:08,380 --> 00:26:09,630 Co to wyjście? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10000 razy 1,31. 479 00:26:14,020 --> 00:26:18,761 Więc 13000, jest to, że przypuszczenie? 480 00:26:18,761 --> 00:26:20,685 >> PUBLICZNOŚCI: Myślę, że to 10,000. 481 00:26:20,685 --> 00:26:24,234 >> DAN: Więc jestem mnożąc go przez 10000 zanim ja oddając go. 482 00:26:24,234 --> 00:26:25,202 >> PUBLICZNOŚCI: Och. 483 00:26:25,202 --> 00:26:27,622 Nie będzie tam jeden 9 0 i niektóre numery? 484 00:26:27,622 --> 00:26:29,270 >> DAN: Możesz mieć jakieś dziwne cyfry. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Więc dobrze, że to 1,3 10000. 487 00:26:37,670 --> 00:26:40,040 Więc to 13,000. 488 00:26:40,040 --> 00:26:41,313 I ten dodatkowy weird-- 489 00:26:41,313 --> 00:26:42,160 >> PUBLICZNOŚCI: 13100. 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13100. 491 00:26:42,650 --> 00:26:44,910 Dziękuję, Rob. 492 00:26:44,910 --> 00:26:46,610 I ten dodatkowy weirdness-- 493 00:26:46,610 --> 00:26:48,060 to 9,9-- 494 00:26:48,060 --> 00:26:53,860 to tylko dlatego, że tego castingu skończyło się zaokrąglenie w dół, gdzie 495 00:26:53,860 --> 00:26:55,394 nie powinien mieć. 496 00:26:55,394 --> 00:26:55,871 Tak. 497 00:26:55,871 --> 00:26:58,256 >> PUBLICZNOŚCI: odlew dzieje po cokolwiek innego? 498 00:26:58,256 --> 00:27:03,865 >> DAN: Tak, bo mam to w druku, to Czy to mnożenie przed nim 499 00:27:03,865 --> 00:27:05,230 Czy to odlew. 500 00:27:05,230 --> 00:27:06,140 >> PUBLICZNOŚCI: [niesłyszalne]. 501 00:27:06,140 --> 00:27:11,350 >> DAN: Myślę, że to rzucić pierwszy, Tak, co byłoby 10000. 502 00:27:11,350 --> 00:27:12,610 Coś jeszcze? 503 00:27:12,610 --> 00:27:13,330 Fajne. 504 00:27:13,330 --> 00:27:16,344 Więc to jest 13099. 505 00:27:16,344 --> 00:27:17,840 Dlaczego tak się dzieje? 506 00:27:17,840 --> 00:27:18,900 Nieścisłości. 507 00:27:18,900 --> 00:27:21,020 >> Pływaki nie są doskonałe. 508 00:27:21,020 --> 00:27:27,550 Mogą reprezentować tylko numery do pewna liczba cyfr znaczących. 509 00:27:27,550 --> 00:27:35,120 Jeśli więc wydrukować sig na 8 figi ten pływak, mamy coś w rodzaju 510 00:27:35,120 --> 00:27:36,800 brzydki patrząc numer. 511 00:27:36,800 --> 00:27:45,580 A to dlatego, że nie można dokładnie 1.31 reprezentowana przez prosty 512 00:27:45,580 --> 00:27:49,000 Uprawnienia z dwóch w urządzeniu. 513 00:27:49,000 --> 00:27:53,530 Tak kończy się przy najbliżej przypuszczam, który kończy się 514 00:27:53,530 --> 00:27:55,710 jest trochę niski. 515 00:27:55,710 --> 00:27:57,730 Ma sens? 516 00:27:57,730 --> 00:27:59,110 OK. 517 00:27:59,110 --> 00:28:05,840 >> Teraz włącza się inny sposób robi instrukcje warunkowe, gdzie wszystkie 518 00:28:05,840 --> 00:28:09,900 dbamy o to pojedyncza zmienna. 519 00:28:09,900 --> 00:28:16,570 Zatem w tym szczególnym przykładzie mamy uzyskiwanie całkowitą od użytkownika. 520 00:28:16,570 --> 00:28:21,070 A następnie patrzymy na co to liczba całkowita jest. 521 00:28:21,070 --> 00:28:23,500 Przypuszczalnie jest to liczba od jednego do czterech. 522 00:28:23,500 --> 00:28:24,800 To, co mamy z prośbą o. 523 00:28:24,800 --> 00:28:28,450 >> Więc zrobić przełącznik nazwa zmiennej. 524 00:28:28,450 --> 00:28:34,290 Następnie skonfigurować przypadków możliwe wartości, to może być. 525 00:28:34,290 --> 00:28:37,730 Więc jednym przypadku, powiedzieć, że jest niski. 526 00:28:37,730 --> 00:28:41,080 I wtedy złamać się wydostać stanu przełącznika, 527 00:28:41,080 --> 00:28:43,270 nie poddawać się. 528 00:28:43,270 --> 00:28:44,830 >> W następnym case-- 529 00:28:44,830 --> 00:28:46,940 więc sprawa dwa i sprawa three-- 530 00:28:46,940 --> 00:28:51,920 jeśli jest to tylko przypadek dwa spada do Pierwsza linia kodu widzi, jak z 531 00:28:51,920 --> 00:28:55,400 przypadku trzy, aż widzi przerwę. 532 00:28:55,400 --> 00:29:00,430 Więc powód masz sprawę jeden z drukuj tylko dlatego, że jest niski 533 00:29:00,430 --> 00:29:01,890 tu mamy tę przerwę. 534 00:29:01,890 --> 00:29:05,360 Gdybym, powiedzmy, zignorował ten break-- gdybym rzucił ten breakaway-- 535 00:29:05,360 --> 00:29:09,740 by drukować na niskim poziomie i wówczas byłoby wydrukować środku, a następnie to przełamać. 536 00:29:09,740 --> 00:29:12,200 >> Więc przerwy są ważną częścią od warunków i przełączyć 537 00:29:12,200 --> 00:29:14,340 powinny być. 538 00:29:14,340 --> 00:29:20,070 Wszelkie sprawy, które nie są wyraźnie określone są obsługiwane przez domyślne 539 00:29:20,070 --> 00:29:26,645 Sprawa w przełączniku i powinny być oddane. 540 00:29:26,645 --> 00:29:31,363 >> PUBLICZNOŚCI: Tak 1, 2, 3, i 4 będzie n? 541 00:29:31,363 --> 00:29:33,310 >> DAN: Wartości N może być. 542 00:29:33,310 --> 00:29:34,654 Tak. 543 00:29:34,654 --> 00:29:35,146 Tak? 544 00:29:35,146 --> 00:29:37,606 >> PUBLICZNOŚCI: Więc kiedy masz że [niesłyszalne]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> DAN: Będziesz drukować niskie, a następnie to wydrukować w srodku, i 547 00:29:46,830 --> 00:29:47,400 potem to przełamać. 548 00:29:47,400 --> 00:29:50,244 >> PUBLICZNOŚCI: Dlaczego to wydrukować średnim, jeśli [niesłyszalne]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> DAN: Więc wszystko w ramach postępowania przed przerwa podlega. 551 00:30:00,550 --> 00:30:09,390 Więc sprawa jest pod jednym przypadku druku jeden, jak to jest po druku. 552 00:30:09,390 --> 00:30:09,890 Tak? 553 00:30:09,890 --> 00:30:11,140 >> PUBLICZNOŚCI: [niesłyszalne]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> DAN: Więc ten numer jest po prostu szczególności wartość, że ta zmienna 556 00:30:22,170 --> 00:30:23,420 może, prawda? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Czy to ma sens? 559 00:30:28,490 --> 00:30:28,990 Tak. 560 00:30:28,990 --> 00:30:31,490 >> PUBLICZNOŚCI: [niesłyszalne]? 561 00:30:31,490 --> 00:30:34,130 >> DAN: Tak, by drukować dwie sprawy średnim, a następnie złamać. 562 00:30:34,130 --> 00:30:35,380 >> PUBLICZNOŚCI: [niesłyszalne]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> DAN: Myślę, że każdy? 565 00:30:40,050 --> 00:30:43,855 Jakie inne typy danych można przełączyć? 566 00:30:43,855 --> 00:30:46,320 >> PUBLICZNOŚCI: Można przełączać w stosunku do wszelkich typów danych. 567 00:30:46,320 --> 00:30:50,905 Ale to tylko oznacza niczego na znaki i ints i takie tam, bo 568 00:30:50,905 --> 00:30:55,600 jeśli wskaźnik przełączania że naprawdę nie ma sensu, 569 00:30:55,600 --> 00:30:59,555 przełączania obciążeń, jeśli nawet niech to zrobić, ponieważ zmiennoprzecinkowych 570 00:30:59,555 --> 00:31:02,840 precyzji, nie bardzo byłoby chcesz to zrobić tak. 571 00:31:02,840 --> 00:31:07,320 Tak bardzo dużo, a zaledwie ints znaki i takie tam. 572 00:31:07,320 --> 00:31:12,360 >> DAN: Tak, to jest, gdy masz wyraźne Wartości, które wiesz, myślę, że może być 573 00:31:12,360 --> 00:31:14,250 że przełącznik jest rzeczywiście użyteczne. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Dobre? 576 00:31:18,990 --> 00:31:21,370 OK. 577 00:31:21,370 --> 00:31:26,180 >> Zakres to zakres, który oświadczył, Zmienna obejmuje. 578 00:31:26,180 --> 00:31:32,190 Tak więc w tym małym fragmencie kodu mam, byłoby pełne błędów. 579 00:31:32,190 --> 00:31:41,450 A powodem jest to int i oświadczył, I w ramach tego na pętli. 580 00:31:41,450 --> 00:31:46,390 A potem staram się odwoływać, że i na zewnątrz, że dla zakresu pętli. 581 00:31:46,390 --> 00:31:50,330 >> Więc w zasadzie, można myśleć o zakresie jak wszystko, co można zadeklarować 582 00:31:50,330 --> 00:31:59,750 z wewnątrz zestawu klamrach tylko istnieje w tych klamrach. 583 00:31:59,750 --> 00:32:04,990 A jeśli spróbujesz użyć tej zmiennej poza tymi klamrach, będziesz 584 00:32:04,990 --> 00:32:08,356 pojawia się błąd od kompilatora. 585 00:32:08,356 --> 00:32:08,812 Tak? 586 00:32:08,812 --> 00:32:09,724 >> PUBLICZNOŚCI: Więc ten nie działa? 587 00:32:09,724 --> 00:32:11,790 >> DAN: To nie działa tak. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Struny. 590 00:32:18,660 --> 00:32:19,780 Ciąg char *. 591 00:32:19,780 --> 00:32:22,250 Są dokładnie takie same. 592 00:32:22,250 --> 00:32:25,540 Oni są po prostu wskaźnikami do znaków. 593 00:32:25,540 --> 00:32:33,000 I wszystkie łańcuchy, które masz powinny zakończyć z backslash zerowej, która jest po prostu 594 00:32:33,000 --> 00:32:34,410 Konwencja c. 595 00:32:34,410 --> 00:32:36,680 >> To się nazywa NULL terminatora. 596 00:32:36,680 --> 00:32:39,050 I NULL-- 597 00:32:39,050 --> 00:32:41,670 Kapitał N, kapitał U, kapitał L, kapitał ja-- 598 00:32:41,670 --> 00:32:44,290 nie jest taki sam, jak NULL terminatora. 599 00:32:44,290 --> 00:32:46,640 To jest wskazówka. 600 00:32:46,640 --> 00:32:48,280 To jest znak. 601 00:32:48,280 --> 00:32:49,530 Są one bardzo różne. 602 00:32:49,530 --> 00:32:50,200 Pamiętam. 603 00:32:50,200 --> 00:32:52,320 To będzie na quizie, prawdopodobnie. 604 00:32:52,320 --> 00:32:54,040 Nie widziałem w quizie. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Tak? 607 00:32:58,840 --> 00:33:01,232 >> PUBLICZNOŚCI: Tak NULL jest, powiedzmy, wskaźnik? 608 00:33:01,232 --> 00:33:01,995 >> DAN: Tak. 609 00:33:01,995 --> 00:33:05,170 >> PUBLICZNOŚCI: Co robi [niesłyszalne]? 610 00:33:05,170 --> 00:33:10,050 >> DAN: Jeśli, powiedzmy, malloc jest wywoływana, gdy ci nie ma wystarczającej ilości pamięci, aby uzyskać 611 00:33:10,050 --> 00:33:14,400 niezależnie od wielkości prosisz, malloc zwróci NULL. 612 00:33:14,400 --> 00:33:19,550 To jest, w zasadzie, gdy funkcja jest powinien powrócić wskaźnik, można 613 00:33:19,550 --> 00:33:22,600 należy sprawdzić na NULL, ponieważ NULL jest całkiem dobre- 614 00:33:22,600 --> 00:33:25,260 to, rodzaj, wartość śmieci. 615 00:33:25,260 --> 00:33:27,050 To w miarę zera wskaźniki iść. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Zawsze, gdy wywołanie funkcji, która zwraca wskaźnik. 618 00:33:32,250 --> 00:33:35,960 Będziesz chcą sprawdzić się pewien, że ten wskaźnik nie jest NULL 619 00:33:35,960 --> 00:33:37,760 ponieważ NULL jest bardzo powszechne. 620 00:33:37,760 --> 00:33:40,160 To coś w rodzaju powrotu śmieci. 621 00:33:40,160 --> 00:33:44,902 Więc jeśli coś nie poszło dobrze, tylko zwróci NULL zamiast. 622 00:33:44,902 --> 00:33:45,898 >> PUBLICZNOŚCI: [niesłyszalne]? 623 00:33:45,898 --> 00:33:48,922 >> DAN: Tak, i to jest to. 624 00:33:48,922 --> 00:33:51,750 >> PUBLICZNOŚCI: [niesłyszalne]? 625 00:33:51,750 --> 00:33:52,800 >> DAN: Zaklęcie to jak to. 626 00:33:52,800 --> 00:33:54,150 To terminator NULL. 627 00:33:54,150 --> 00:33:56,560 To małe litery N-U-L-L, jeśli jesteś pisowni go. 628 00:33:56,560 --> 00:33:59,860 >> PUBLICZNOŚCI: A ja po prostu poszedłem powrotem i przetestowane. 629 00:33:59,860 --> 00:34:03,010 A jeśli spróbujesz umieścić zmiennoprzecinkowych wartość do przełącznika, to będzie krzyczeć na ciebie 630 00:34:03,010 --> 00:34:05,916 mówiąc, stwierdzenie wymaga wyrażenia z całkowitą typu. 631 00:34:05,916 --> 00:34:07,166 >> DAN: Proszę bardzo. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Ale tak, co znowu było pytanie? 634 00:34:12,246 --> 00:34:13,496 >> PUBLICZNOŚCI: [niesłyszalne]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> DAN: Więc kapitał N, kapitał U, kapitał L, L jest kapitał rzeczywisty c rzeczą. 637 00:34:23,679 --> 00:34:29,719 Jest i będzie wskaźnik NULL traktować tylko jako takie. 638 00:34:29,719 --> 00:34:33,530 Że nigdy nie spróbować i pisowni NULL i widać żadnych znaków 639 00:34:33,530 --> 00:34:35,630 inny sposób niż ten. 640 00:34:35,630 --> 00:34:36,610 Tak? 641 00:34:36,610 --> 00:34:42,490 >> PUBLICZNOŚCI: Więc wracając do char max lub coś w notatkach, prawda 642 00:34:42,490 --> 00:34:43,960 uosabiają samą funkcję jako [niesłyszalne]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> PUBLICZNOŚCI: Więc to dotyczy powrót char max z getchar, lub 645 00:34:54,949 --> 00:34:55,444 co to jest? 646 00:34:55,444 --> 00:34:55,940 >> PUBLICZNOŚCI: Tak. 647 00:34:55,940 --> 00:34:58,620 >> PUBLICZNOŚCI: Tak, tak ogólnie termin dla tych wszystkich rzeczy 648 00:34:58,620 --> 00:34:59,920 są wartości wskaźnikowe. 649 00:34:59,920 --> 00:35:03,640 Tak jak powrót int max od GetInt i char max z getchar, to 650 00:35:03,640 --> 00:35:06,010 powinien być jak, dobrze, jeśli te rzeczy wracają do nas, 651 00:35:06,010 --> 00:35:07,210 coś poszło nie tak. 652 00:35:07,210 --> 00:35:09,950 >> Dla wskaźników, po prostu zdarzy się, że Wartość ta, że ​​każdy wartownik 653 00:35:09,950 --> 00:35:10,750 Zgadza się. 654 00:35:10,750 --> 00:35:13,210 I to jest rzecz, powrót , gdy coś pójdzie nie tak. 655 00:35:13,210 --> 00:35:15,910 Tak char max co używamy reprezentować coś 656 00:35:15,910 --> 00:35:18,100 jak NULL lub getchar. 657 00:35:18,100 --> 00:35:23,420 >> PUBLICZNOŚCI: Więc jeśli badania getchar, można po prostu umieścić NULL? 658 00:35:23,420 --> 00:35:23,910 Czy to coś zmienia? 659 00:35:23,910 --> 00:35:25,400 >> DAN: Nie można po prostu sprawdzić NULL. 660 00:35:25,400 --> 00:35:30,130 Trzeba by sprawdzić char max bo Wartość zwracana z funkcji jest 661 00:35:30,130 --> 00:35:35,416 nie charakter wskaźnika. 662 00:35:35,416 --> 00:35:35,888 Tak? 663 00:35:35,888 --> 00:35:38,248 >> PUBLICZNOŚCI: To pytanie zadaje na długość łańcucha. 664 00:35:38,248 --> 00:35:40,136 Robi to na znak null? 665 00:35:40,136 --> 00:35:41,000 >> DAN: Nie 666 00:35:41,000 --> 00:35:45,930 I to jest rzeczywiście, jak długość ciągu że ma zaprzestać ponieważ przechodzi 667 00:35:45,930 --> 00:35:49,070 Twoja tablica znaków, aż widzi znak NULL. 668 00:35:49,070 --> 00:35:51,030 A potem to jak wszyscy Dobra, skończyłem. 669 00:35:51,030 --> 00:35:52,130 >> PUBLICZNOŚCI: [niesłyszalne] pięć? 670 00:35:52,130 --> 00:35:53,990 >> DAN: Witaj będzie pięć. 671 00:35:53,990 --> 00:35:55,240 Tak. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 Więc tablice są ciągłe bloki pamięci. 674 00:36:02,880 --> 00:36:08,480 Mają natychmiastowy dostęp mówiąc Nazwa tablicy, a następnie, w nawiasach 675 00:36:08,480 --> 00:36:16,720 szelki, niezależnie Indeks chcesz iść do, oni indeksowane od zera przez 676 00:36:16,720 --> 00:36:20,100 długość tablicy minus 1. 677 00:36:20,100 --> 00:36:23,070 >> A oni zadeklarowane przez typ rzeczą, którą przechowujemy w 678 00:36:23,070 --> 00:36:29,750 Tablica, nazwa tablicy, a następnie bez względu na rozmiar jest z tej tablicy. 679 00:36:29,750 --> 00:36:36,660 Więc to jest tablica char długości sześć, że ma następujące wartości. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Tak? 682 00:36:42,700 --> 00:36:43,950 >> PUBLICZNOŚCI: [niesłyszalne]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> DAN: Tak. 685 00:36:48,460 --> 00:36:51,340 >> PUBLICZNOŚCI: [niesłyszalne]? 686 00:36:51,340 --> 00:36:56,700 >> DAN: Jeśli masz to, co się dzieje do tablicy już. 687 00:36:56,700 --> 00:37:02,260 Tak można określić to, zamiast jak powiedzmy, char, bez względu na nazwę swojego 688 00:37:02,260 --> 00:37:12,200 tablica jest puste nawiasy równa kręcone przygotuj H przecinek przecinek L E L przecinek przecinkami 689 00:37:12,200 --> 00:37:16,290 O przecinek znak null i nawias klamrowy. 690 00:37:16,290 --> 00:37:18,180 , Który również działa jako deklaracja. 691 00:37:18,180 --> 00:37:20,886 >> PUBLICZNOŚCI: [niesłyszalne]? 692 00:37:20,886 --> 00:37:23,110 >> DAN: Wtedy musisz mieć rozmiar już. 693 00:37:23,110 --> 00:37:23,896 >> PUBLICZNOŚCI: [niesłyszalne]? 694 00:37:23,896 --> 00:37:25,146 >> DAN: Tak. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 W porządku. 697 00:37:32,420 --> 00:37:36,430 Argumenty wiersza poleceń są sposobem uzyskanie danych od użytkownika, co 698 00:37:36,430 --> 00:37:39,380 argumenty do głównej. 699 00:37:39,380 --> 00:37:40,600 Głównym przyjmuje dwa argumenty. 700 00:37:40,600 --> 00:37:47,680 Liczba argumentów, który jest przeszedł wzdłuż linii poleceń i 701 00:37:47,680 --> 00:37:55,340 Ilustracja ciąg lub ciąg tablicy wszystkich argumentów. 702 00:37:55,340 --> 00:38:07,840 >> Tak więc, jeśli, na przykład, o nazwie funkcji, takich jak kropka z 1 miejsca, 2 miejsca, trzy, 703 00:38:07,840 --> 00:38:10,110 argc będzie 4. 704 00:38:10,110 --> 00:38:17,370 I argv 0 będzie kropka z. 705 00:38:17,370 --> 00:38:19,130 Argv1 wynosi 1. 706 00:38:19,130 --> 00:38:23,030 argv2 będzie 2. argv3 byłoby 3, w tym konkretnym przypadku. 707 00:38:23,030 --> 00:38:23,310 Tak? 708 00:38:23,310 --> 00:38:25,400 >> PUBLICZNOŚCI: [niesłyszalne]? 709 00:38:25,400 --> 00:38:34,010 >> DAN: ostatni element w tablicy bo tablica jest długość argc Plus 710 00:38:34,010 --> 00:38:41,050 jeden z argB, ostatni element jest wskaźnikiem NULL. 711 00:38:41,050 --> 00:38:42,580 To argc Plus 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Tak więc w przypadku, że po prostu powiedział, to będzie argv 0 jest kropka na zewnątrz. 714 00:38:52,150 --> 00:38:56,330 argv 1 to 1. argv2 to 2. argv 3 3. 715 00:38:56,330 --> 00:39:03,490 argv 4, który jest większy niż argc będzie NULL. 716 00:39:03,490 --> 00:39:04,870 >> I to jest wskaźnik NULL. 717 00:39:04,870 --> 00:39:06,590 Tak. 718 00:39:06,590 --> 00:39:11,250 A to dlatego, że łańcuch jest gwiazdkowy char jest wskaźnik. 719 00:39:11,250 --> 00:39:14,102 Musi więc być tego samego typu. 720 00:39:14,102 --> 00:39:14,595 Tak? 721 00:39:14,595 --> 00:39:16,074 >> PUBLICZNOŚCI: Dwa pytania. 722 00:39:16,074 --> 00:39:21,004 Tak jeden, jaka jest różnica między to i GetString inne niż jeden typ 723 00:39:21,004 --> 00:39:22,483 w silniku użytkownika? 724 00:39:22,483 --> 00:39:25,934 A dwa, to jest przechowywane w Twoja ostatnia pamięć? 725 00:39:25,934 --> 00:39:28,399 Więc jak, GetString byłoby być [niesłyszalne]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> DAN: Gdzie to jest zapisane? 728 00:39:33,650 --> 00:39:34,905 Nie wiem, gdzie jest przechowywany. 729 00:39:34,905 --> 00:39:40,000 >> PUBLICZNOŚCI: Tak, rzeczywiście, wiesz, jak każdy funkcjonować nazywasz to argumenty 730 00:39:40,000 --> 00:39:42,170 przechowywane na stosie? 731 00:39:42,170 --> 00:39:46,610 Więc argc i argv są argumenty do głównego i są w stos, czy naprawdę 732 00:39:46,610 --> 00:39:49,131 tuż powyżej, co myślisz, jak początek stosu. 733 00:39:49,131 --> 00:39:53,490 Jaka była druga część pytania? 734 00:39:53,490 --> 00:39:56,821 >> PUBLICZNOŚCI: Więc co jest [niesłyszalne]? 735 00:39:56,821 --> 00:40:00,990 >> DAN: Tak, to jest po prostu inny sposób uzyskiwania danych od użytkownika. 736 00:40:00,990 --> 00:40:06,030 Ten jest nieco bardziej wydajny i to bardziej poręczne dla skryptów bo ciebie 737 00:40:06,030 --> 00:40:10,070 może po prostu przekazywać argumenty do głównego Funkcja zamiast czekać 738 00:40:10,070 --> 00:40:13,400 dla użytkowników, jeśli nie ma żadnych użytkowników. 739 00:40:13,400 --> 00:40:16,280 >> PUBLICZNOŚCI: I tak, dostać ciągi byłby [niesłyszalne]. 740 00:40:16,280 --> 00:40:17,922 To przechowywać rzeczy potrzebujesz. 741 00:40:17,922 --> 00:40:18,834 >> DAN: Tak? 742 00:40:18,834 --> 00:40:21,114 >> PUBLICZNOŚCI: [niesłyszalne]? 743 00:40:21,114 --> 00:40:27,545 >> DAN: Tak, argv 0 obejmuje zawsze kropka slash z wywołania funkcji. 744 00:40:27,545 --> 00:40:28,042 Tak? 745 00:40:28,042 --> 00:40:29,292 >> PUBLICZNOŚCI: [niesłyszalne]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN Tak każdy z argumentów są zakończył się w charakter, ponieważ NULL 748 00:40:37,310 --> 00:40:38,310 są ciągami. 749 00:40:38,310 --> 00:40:40,892 >> PUBLICZNOŚCI: [niesłyszalne]? 750 00:40:40,892 --> 00:40:44,116 >> DAN: Tak, argv argc jest wskaźnikiem NULL. 751 00:40:44,116 --> 00:40:45,112 >> PUBLICZNOŚCI: [niesłyszalne]? 752 00:40:45,112 --> 00:40:47,104 >> DAN: O tak. 753 00:40:47,104 --> 00:40:48,100 Tak, przepraszam. 754 00:40:48,100 --> 00:40:49,594 >> PUBLICZNOŚCI: Tak [niesłyszalne]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> DAN: Więc pytanie jest, jeśli miał linia poleceń kropka slash kropkę z 1, 2, 757 00:41:16,340 --> 00:41:20,410 byłoby liczba linii poleceń Argumenty są dwa lub trzy byłoby? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> PUBLICZNOŚCI: Myślę, że tak nie jest znaczenia. 760 00:41:28,240 --> 00:41:31,370 Staram się powiedzieć, oh, nie przechodzą wszelkie argumenty wiersza poleceń, gdy 761 00:41:31,370 --> 00:41:32,730 Oczywiście, o nazwie funkcji. 762 00:41:32,730 --> 00:41:37,950 Więc staram się wokalnie wykluczyć Funkcja z wiersza poleceń 763 00:41:37,950 --> 00:41:40,350 argumenty, nawet jeśli jest to zawarte w argv. 764 00:41:40,350 --> 00:41:42,600 >> DAN: Ale czy to na test-- 765 00:41:42,600 --> 00:41:46,550 yeah--, a także, jeśli coś powiedzieć jak argc jest równe 3, 766 00:41:46,550 --> 00:41:48,512 jesteś w bezpiecznej sytuacji. 767 00:41:48,512 --> 00:41:49,416 Tak? 768 00:41:49,416 --> 00:41:50,666 >> PUBLICZNOŚCI: [niesłyszalne]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> DAN: Myślę, że jeśli zamiast nazywać to w nawiasach argv argC i smyczkowych 771 00:42:09,510 --> 00:42:14,350 ale zachowali te same rodzaje i właśnie dzwonił im coś innego, jak 772 00:42:14,350 --> 00:42:16,640 oraz b, to jeszcze działa? 773 00:42:16,640 --> 00:42:18,790 I to nadal działa, byś tylko-- 774 00:42:18,790 --> 00:42:21,520 Zamiast stosowania argc-- chcesz używać i b. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Tak? 777 00:42:25,408 --> 00:42:26,658 >> PUBLICZNOŚCI: [niesłyszalne]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> DAN: Więc jest pytanie GetString będzie przechowywać pamięć na stercie 780 00:42:38,850 --> 00:42:42,280 bo GetString jest char *. 781 00:42:42,280 --> 00:42:47,530 Przechowuje pamięć na stercie, ponieważ wzywa teraz malloc ciągu faktyczna 782 00:42:47,530 --> 00:42:49,258 Realizacja getString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 Dobra, dalej. 785 00:42:55,090 --> 00:42:55,950 >> Bezpieczeństwo. 786 00:42:55,950 --> 00:43:01,090 Więc być naprawdę bezpieczne, nie można powoływać się na jeden i nie można pozwolić dostęp do dowolnego jednego 787 00:43:01,090 --> 00:43:04,540 swoich danych, dlatego każdy buduje swoje maszyny, 788 00:43:04,540 --> 00:43:09,580 własne systemy operacyjne, wszystkie ich programy od podstaw, i oczywiście 789 00:43:09,580 --> 00:43:13,410 nie podłączać do innych urządzeń za pośrednictwem Internetu. 790 00:43:13,410 --> 00:43:17,350 Tak więc komputery są niepewne. 791 00:43:17,350 --> 00:43:19,200 Oni naprawdę są. 792 00:43:19,200 --> 00:43:20,940 Musimy ufać innym ludziom. 793 00:43:20,940 --> 00:43:26,500 >> I idea bezpieczeństwa jest to, że jesteś próbując ograniczać ilość 794 00:43:26,500 --> 00:43:27,540 zaufanie, że trzeba. 795 00:43:27,540 --> 00:43:32,080 , A jednym ze sposobów to zrobić jest przez kryptografii. 796 00:43:32,080 --> 00:43:34,950 Kryptografia jest, zasadniczo, mamy tajemnic. 797 00:43:34,950 --> 00:43:38,880 >> Czasami musimy przejść nasze tajemnice razem przez, powiedzmy, internet lub 798 00:43:38,880 --> 00:43:39,980 innych rzeczy. 799 00:43:39,980 --> 00:43:43,180 I nie chcemy ludzi poznać te tajemnice. 800 00:43:43,180 --> 00:43:50,100 Więc szyfrować nasze sekrety w sposób Mamy nadzieję, że nikt nie może dowiedzieć się. 801 00:43:50,100 --> 00:43:51,600 >> Więc used-- 802 00:43:51,600 --> 00:43:54,340 poprzez trakcie tego class-- 803 00:43:54,340 --> 00:44:00,750 rzeczy, jak szyfr Cezara i [Niesłyszalne], które są bardzo, bardzo 804 00:44:00,750 --> 00:44:03,200 niezabezpieczone sposoby szyfrowania rzeczy. 805 00:44:03,200 --> 00:44:07,930 Są proste, aby dowiedzieć się, co oni i jakie są twoje sekrety są. 806 00:44:07,930 --> 00:44:12,130 Prawdziwy świat zużywa znacznie więcej skomplikowane systemy szyfrowania. 807 00:44:12,130 --> 00:44:13,880 I nie będzie w o wiele więcej niż to. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Debugowanie. 810 00:44:19,430 --> 00:44:20,785 GDB jest najlepszy. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Idę podkreślić to jeszcze raz. 813 00:44:25,810 --> 00:44:30,920 Używać GDB cały czas każdy czas masz problem. 814 00:44:30,920 --> 00:44:36,030 Polecenia, które są użyteczne są GDB złamać, które można przejść albo linię 815 00:44:36,030 --> 00:44:41,330 Numer, nazwa funkcji, w zasadzie gdzie w kodzie chcesz zatrzymać, 816 00:44:41,330 --> 00:44:45,600 i być w stanie przejąć kontrolę. 817 00:44:45,600 --> 00:44:54,140 >> Drukuj trwa zmienną i drukuje cokolwiek to jest, że zmienna 818 00:44:54,140 --> 00:44:55,990 punkt w swoim wykonaniu. 819 00:44:55,990 --> 00:45:00,130 Następny przenosi swoje wykonanie po jednym kroku. 820 00:45:00,130 --> 00:45:05,050 I krok kroki wewnątrz funkcji w swoim wykonaniu. 821 00:45:05,050 --> 00:45:10,480 >> Inne rzeczy są prowadzone, co jest, jak faktycznie uruchomić kod. 822 00:45:10,480 --> 00:45:16,630 Nadal podejmuje wszelkie kroki niezbędne aby dostać się do następnego punktu przerwania. 823 00:45:16,630 --> 00:45:18,300 I wiele, wiele innych. 824 00:45:18,300 --> 00:45:19,040 Szukać ich. 825 00:45:19,040 --> 00:45:19,901 Są świetne. 826 00:45:19,901 --> 00:45:20,863 Tak? 827 00:45:20,863 --> 00:45:22,113 >> PUBLICZNOŚCI: [niesłyszalne]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: Tak, co jest debugger. 830 00:45:28,200 --> 00:45:34,230 Więc debugger to program, który umożliwia debugowanie programu. 831 00:45:34,230 --> 00:45:39,931 To nie jest program, który wyszukuje błędy w Ci jednak, że byłoby świetnie. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> I ostatnio dla mnie to jest wyszukiwanie. 834 00:45:46,040 --> 00:45:51,470 Więc rodzajów wyszukiwania, które rozmawialiśmy informacje w tej klasie są wyszukiwanie liniowe, 835 00:45:51,470 --> 00:45:55,960 która jest po prostu, że można patrzeć przez każdego element przestrzeni poszukiwań jeden 836 00:45:55,960 --> 00:46:00,410 elementem w czasie, aż znajdziesz co szukasz lub aż do 837 00:46:00,410 --> 00:46:03,350 koniec swojej przestrzeni poszukiwań, w którym wskazać można powiedzieć, że nie można znaleźć 838 00:46:03,350 --> 00:46:06,360 Element, który szukasz. 839 00:46:06,360 --> 00:46:13,450 I to trwa w najlepsze stałego czasu, co 0 o 1 i w najgorszym liniowego 840 00:46:13,450 --> 00:46:16,070 Czas, który wynosi 0 n. 841 00:46:16,070 --> 00:46:19,250 >> Przeszukiwanie binarne, które musi Elementy podłe. 842 00:46:19,250 --> 00:46:24,230 Idziesz do połowy swoich elementów, sprawdzić, czy element szukasz 843 00:46:24,230 --> 00:46:30,120 jest większa lub mniejsza niż element że jesteś w środku. 844 00:46:30,120 --> 00:46:36,510 Jest to większy, można powiedzieć, że dno z wyszukiwania przestrzeń jest Twój 845 00:46:36,510 --> 00:46:41,550 Obecna lokalizacja, w środku, i ponownie uruchomić proces. 846 00:46:41,550 --> 00:46:46,150 Jeśli jest to mniejsza, wyglądasz powiedzieć że do-- Tak, o co chodzi? 847 00:46:46,150 --> 00:46:47,400 >> PUBLICZNOŚCI: [niesłyszalne]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: Tak. 850 00:46:54,260 --> 00:46:58,360 Każdy rodzaj sortowania, które zostało prowadzone w Klasa jest uczciwa gra w badaniu. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Śmiech] 853 00:47:04,920 --> 00:47:10,260 >> DAN: A fakt, że nie mieli zrobić to za zestaw problemów, to sprawiedliwe 854 00:47:10,260 --> 00:47:12,420 gry do testów. 855 00:47:12,420 --> 00:47:15,186 >> PUBLICZNOŚCI: Czy możemy przejść nad nim jak to-- 856 00:47:15,186 --> 00:47:17,052 >> DAN: To będzie już koniec. 857 00:47:17,052 --> 00:47:20,496 >> Głośnik 2: Kod rzeczywisty dla [Niesłyszalne] jest study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Więc jeśli spojrzeć na problem praktyce w stronę scalania sortowania 860 00:47:32,680 --> 00:47:35,880 study.cs50.net istnieje kod wykonawcze do scalania rodzaju. 861 00:47:35,880 --> 00:47:38,550 Więc nie masz do wykonania to się dzisiaj. 862 00:47:38,550 --> 00:47:42,090 Ale upewnij się, że rozumiesz to raczej niż tylko zapamiętanie go. 863 00:47:42,090 --> 00:47:45,035 >> PUBLICZNOŚCI: [niesłyszalne]? 864 00:47:45,035 --> 00:47:49,720 >> Głośnik 2: strona seryjnej sortowania na study.cs50.net, jest praktyką 865 00:47:49,720 --> 00:47:53,570 Problem, który po kliknięciu przez Problem, na samym końcu jest 866 00:47:53,570 --> 00:47:56,280 Rozwiązanie, które jest scalanie implementacja sortowania. 867 00:47:56,280 --> 00:47:58,510 Ale upewnij się, że rozumiem zamiast po prostu go na pamięć 868 00:47:58,510 --> 00:47:59,760 lub kopiując go. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> PUBLICZNOŚCI: I całkowicie poprawny Problem do egzaminu będzie 871 00:48:06,340 --> 00:48:07,990 coś tu jest lista. 872 00:48:07,990 --> 00:48:12,100 Co ta lista wyglądać po jeden etap pozycje rodzaju lub 873 00:48:12,100 --> 00:48:13,330 wstawiania sortowania lub cokolwiek. 874 00:48:13,330 --> 00:48:14,940 Jeden pełny iteracji listy. 875 00:48:14,940 --> 00:48:18,530 Więc nawet jeśli nie kończy się konieczności Kod do niego, trzeba go zrozumieć 876 00:48:18,530 --> 00:48:20,440 wystarczy wiedzieć, jak to się dzieje do modyfikacji tej tablicy. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: To jest to dla mnie. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [Aplauz] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Hej wszystkim. 883 00:49:07,410 --> 00:49:08,390 Nazywam się Lucas. 884 00:49:08,390 --> 00:49:16,840 Mam zamiar porozmawiać o rekursji, wszystko sortuje, że nauczyliśmy się i 885 00:49:16,840 --> 00:49:18,050 Trochę wszystkich wskaźników. 886 00:49:18,050 --> 00:49:18,740 OK? 887 00:49:18,740 --> 00:49:20,340 Więc przede wszystkim, rekurencja. 888 00:49:20,340 --> 00:49:22,951 Co to znaczy, że Funkcja rekurencyjna? 889 00:49:22,951 --> 00:49:24,675 >> PUBLICZNOŚCI: nazywa siebie. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: OK, nazywa się tak. 891 00:49:26,500 --> 00:49:27,700 Tak jak ten obraz, na przykład. 892 00:49:27,700 --> 00:49:30,280 To tak jak na zdjęciu w środku o obrazie i tak dalej. 893 00:49:30,280 --> 00:49:35,740 Tak na przykład, można have-- jako Dan który mówił o poszukiwaniu binarnym. 894 00:49:35,740 --> 00:49:41,840 Jednym ze sposobów, w którym binarne wyszukiwania jest rekurencyjna jest fakt, że jesteś 895 00:49:41,840 --> 00:49:43,130 próbuje znaleźć numer. 896 00:49:43,130 --> 00:49:44,250 Więc idź do środka. 897 00:49:44,250 --> 00:49:47,130 A następnie sprawdzić, czy numery w lewo i w prawo. 898 00:49:47,130 --> 00:49:49,650 >> A następnie, jeśli okaże się że numer jest będzie po lewej stronie, to samo 899 00:49:49,650 --> 00:49:53,340 coś jak robi wyszukiwanie jeszcze raz, ale tylko po lewej stronie na liście. 900 00:49:53,340 --> 00:49:57,350 Tak to jest, jak się wydaje jak to jest rekurencyjna. 901 00:49:57,350 --> 00:50:01,870 To dlatego macie rekurencyjna roztwór do seryjnej rodzaju. 902 00:50:01,870 --> 00:50:04,270 >> OK, więc tutaj jest przykład. 903 00:50:04,270 --> 00:50:07,280 Więc powiedzmy, że chcę, aby wybrać wszystkie numery od 1 do n. 904 00:50:07,280 --> 00:50:13,790 Mogę zrozumieć, że suma n liczba n jest n Plus minus 1 do 1. 905 00:50:13,790 --> 00:50:17,810 Ale potem, jeśli patrzę na n minus 1 plus n minus 2 plus 1, to samo 906 00:50:17,810 --> 00:50:20,680 coś jak numery podsumowujących do n minus 1. 907 00:50:20,680 --> 00:50:25,890 Więc mogę powiedzieć, sumę równą sumie równa n plus suma n minus 1. 908 00:50:25,890 --> 00:50:28,010 Czy to ma sens? 909 00:50:28,010 --> 00:50:32,630 >> I ja również miałby coś innego nazwie bazowym, który jest 910 00:50:32,630 --> 00:50:37,440 suma liczb do zero będzie wynosić zero. 911 00:50:37,440 --> 00:50:42,770 Tak szybko, jak dostać się do liczby zero, przestać liczyć. 912 00:50:42,770 --> 00:50:45,330 Czy to ma sens? 913 00:50:45,330 --> 00:50:48,120 >> Więc oto przykład jak Mogę realizować to. 914 00:50:48,120 --> 00:50:49,860 Więc mam tę funkcję w niektórych. 915 00:50:49,860 --> 00:50:51,700 Że bierze całkowitą n. 916 00:50:51,700 --> 00:50:56,300 Więc ja najpierw sprawdzić, czy n jest mniejsza lub równa zeru. 917 00:50:56,300 --> 00:51:00,310 Więc jeśli jest to mniejsza lub równa zeru, to powrócić do zera, co jest naszym bazowym. 918 00:51:00,310 --> 00:51:05,690 W przeciwnym razie, można po prostu wrócić n Plus Suma z liczby 919 00:51:05,690 --> 00:51:07,190 jeden do jednego n minus. 920 00:51:07,190 --> 00:51:09,360 Ma sens? 921 00:51:09,360 --> 00:51:10,100 OK. 922 00:51:10,100 --> 00:51:11,610 >> Więc oto jak to wygląda. 923 00:51:11,610 --> 00:51:15,260 Masz sumę 2 równa 2 plus suma 1. 924 00:51:15,260 --> 00:51:18,930 A niektórzy z 1 jest 1 plus Suma 0, który wynosi 0. 925 00:51:18,930 --> 00:51:20,216 Ma sens? 926 00:51:20,216 --> 00:51:25,342 Więc jeśli spojrzymy na stos swoje Program jest to, na co wygląda. 927 00:51:25,342 --> 00:51:26,820 >> Po pierwsze, mamy główną funkcję. 928 00:51:26,820 --> 00:51:30,320 A następnie główna funkcja zwana suma 2. 929 00:51:30,320 --> 00:51:36,690 A następnie suma 2 jest powiedzieć, oh, suma 2 plus 2 równa się suma jednego. 930 00:51:36,690 --> 00:51:39,460 Więc dodać sumę 1 do stosu. 931 00:51:39,460 --> 00:51:43,860 I suma 1 zamierza zadzwonić sumę 0, który również zostanie dodany 932 00:51:43,860 --> 00:51:44,630 w stos. 933 00:51:44,630 --> 00:51:49,240 , A następnie każda z nich są te, które na drugim wrócić 934 00:51:49,240 --> 00:51:52,020 przed druga z nich może nie poddawać się. 935 00:51:52,020 --> 00:51:56,240 >> Tak na przykład, tutaj, suma 0, pierwsze, zamierza powrócić 0. 936 00:51:56,240 --> 00:51:58,320 A następnie wybrać kwotę 1. 937 00:51:58,320 --> 00:52:00,850 Następnie suma 1 będzie powrót 1 do kwoty 2. 938 00:52:00,850 --> 00:52:03,900 I wreszcie, suma 2 wybiera 3 powrót do głównego. 939 00:52:03,900 --> 00:52:05,320 Czy to ma sens? 940 00:52:05,320 --> 00:52:09,496 >> To naprawdę ważne, aby zrozumieć, w jaki sposób Stos działa i spróbować 941 00:52:09,496 --> 00:52:11,980 zobaczyć, czy to ma sens. 942 00:52:11,980 --> 00:52:13,260 OK, więc sortowanie. 943 00:52:13,260 --> 00:52:16,170 Więc dlaczego jest sortowanie ważne, Przede wszystkim? 944 00:52:16,170 --> 00:52:18,260 Dlaczego powinniśmy dbać? 945 00:52:18,260 --> 00:52:20,310 Każdy, kto? 946 00:52:20,310 --> 00:52:20,695 Daj mi przykład? 947 00:52:20,695 --> 00:52:21,040 Tak? 948 00:52:21,040 --> 00:52:22,968 >> PUBLICZNOŚCI: [niesłyszalne]. 949 00:52:22,968 --> 00:52:24,700 >> Lucas: Tak, OK. 950 00:52:24,700 --> 00:52:26,090 Więc można szukać bardziej efektywnie. 951 00:52:26,090 --> 00:52:28,580 To jest dobry sposób. 952 00:52:28,580 --> 00:52:32,462 Tak więc, na przykład, mamy dużo rzeczy, tak naprawdę, w naszym życiu, że 953 00:52:32,462 --> 00:52:32,920 są klasyfikowane. 954 00:52:32,920 --> 00:52:34,830 Na przykład, słowniki. 955 00:52:34,830 --> 00:52:39,210 >> To bardzo ważne, aby mieć wszystko słowa w jakiejś kolejności, że 956 00:52:39,210 --> 00:52:41,970 może uzyskać dostęp łatwo. 957 00:52:41,970 --> 00:52:43,280 Więc to, co mówi. 958 00:52:43,280 --> 00:52:45,530 Można wyszukiwać bardziej efektywnie. 959 00:52:45,530 --> 00:52:48,740 Pomyśl o tym, jak trudno byłoby mieć Słownik, w którym słowa są w 960 00:52:48,740 --> 00:52:49,500 losowego. 961 00:52:49,500 --> 00:52:53,120 Musisz patrzeć, dość dużo, każde słowo, aż znajdziesz 962 00:52:53,120 --> 00:52:54,720 Słowo, które szukasz. 963 00:52:54,720 --> 00:52:58,710 >> Jeśli używasz Facebooka także, gdy patrzysz na swoich przyjaciół, jesteś 964 00:52:58,710 --> 00:53:03,540 zobaczymy, że Facebook umieszczania bliżej przyjaciela na górze te 965 00:53:03,540 --> 00:53:05,470 , że nie, że dużo rozmawiać. 966 00:53:05,470 --> 00:53:08,080 Jeśli przejść całą drogę na dół Twoja przyjaciółka, masz zamiar zobaczyć 967 00:53:08,080 --> 00:53:11,250 ludzi, że prawdopodobnie nawet nie pamiętaj, że masz przyjaciół z. 968 00:53:11,250 --> 00:53:14,590 A to dlatego, że na Facebooku rodzaju znajomych w oparciu o jak 969 00:53:14,590 --> 00:53:16,472 blisko jest do nich. 970 00:53:16,472 --> 00:53:17,930 >> Więc organizacji danych. 971 00:53:17,930 --> 00:53:18,450 Również Pokemon. 972 00:53:18,450 --> 00:53:21,400 Więc widać, że wszystkie Pokemony mają numery. 973 00:53:21,400 --> 00:53:27,210 I to jak łatwo sposób dostępu do danych. 974 00:53:27,210 --> 00:53:29,050 >> PUBLICZNOŚCI: Dostęp Pokemon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Tak. 976 00:53:29,890 --> 00:53:32,395 >> PUBLICZNOŚCI: [niesłyszalne]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Tak. 978 00:53:33,460 --> 00:53:35,140 OK, więc wybór sortowania. 979 00:53:35,140 --> 00:53:41,610 Wybór sortowania będzie wybrać Najmniejszy nieposortowane wartość każdej listy 980 00:53:41,610 --> 00:53:43,300 Czas w każdej iteracji. 981 00:53:43,300 --> 00:53:46,800 To trochę tak jak w rodzaju, co robisz w twojej głowie, gdy próbujesz 982 00:53:46,800 --> 00:53:48,430 sortować listę na rękę. 983 00:53:48,430 --> 00:53:51,990 >> Zasadniczo, wszystko co musisz zrobić to spojrzeć dla najmniejszego numeru. 984 00:53:51,990 --> 00:53:54,280 Można umieścić go na liście sortowane. 985 00:53:54,280 --> 00:53:56,230 A następnie szukać następna najmniejsza liczba. 986 00:53:56,230 --> 00:54:00,080 A potem dalej robić to i tak dalej. 987 00:54:00,080 --> 00:54:04,600 >> Tak więc wybór jest w zasadzie można sortować za każdym razem wybrać najmniejszy 988 00:54:04,600 --> 00:54:05,750 Wartość nieposortowane. 989 00:54:05,750 --> 00:54:10,840 Umieścić na końcu posortowane element listy. 990 00:54:10,840 --> 00:54:12,370 I robić to. 991 00:54:12,370 --> 00:54:15,890 Warto więc szybko zobaczyć, co to wygląda. 992 00:54:15,890 --> 00:54:19,340 Więc tutaj jest klasyfikowane i nieposortowane listy. 993 00:54:19,340 --> 00:54:23,350 >> Więc dla sortowane z listy, jest początkowo pusty. 994 00:54:23,350 --> 00:54:26,760 A potem mam zamiar wybrać Najmniej tutaj, co 2. 995 00:54:26,760 --> 00:54:30,650 Więc mam numer 2 i umieścić w przód listy. 996 00:54:30,650 --> 00:54:34,910 A potem patrzę następna najmniejsza Element, który jest 3. 997 00:54:34,910 --> 00:54:37,050 Więc umieścić go na końcu od sortowanej listy. 998 00:54:37,050 --> 00:54:38,140 A potem robić to. 999 00:54:38,140 --> 00:54:40,040 Uważam, 4 i umieścić go na końcu. 1000 00:54:40,040 --> 00:54:41,360 Znajdź 5 i umieścić go na końcu. 1001 00:54:41,360 --> 00:54:44,830 >> I zastanowić się, jak te wszystkie razy, że Mówię, umieścić go na koniec jest, 1002 00:54:44,830 --> 00:54:46,850 w zasadzie, zamiana dwóch wartości. 1003 00:54:46,850 --> 00:54:48,100 OK? 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 A następnie ostatni, po prostu jeszcze jeden element. 1006 00:54:52,825 --> 00:54:55,870 Tak to już posortowane. 1007 00:54:55,870 --> 00:54:57,800 >> OK, więc wprowadzenie sortowania. 1008 00:54:57,800 --> 00:55:03,180 Wstawiania sortowania będziesz mieć również że rzeczą po sortowane i 1009 00:55:03,180 --> 00:55:04,690 nieposortowane listy. 1010 00:55:04,690 --> 00:55:14,540 Jedyną rzeczą jest to, że za każdym razem, dodajesz element do sortowane 1011 00:55:14,540 --> 00:55:18,170 lista, wystarczy wybrać element, który jest przed listy niesegregowanych. 1012 00:55:18,170 --> 00:55:20,880 A następnie masz zamiar znaleźć co Stanowisko powinno być sortowane 1013 00:55:20,880 --> 00:55:22,300 element listy. 1014 00:55:22,300 --> 00:55:25,840 >> Zobaczmy, co to jest tak to więcej sensu. 1015 00:55:25,840 --> 00:55:29,360 Więc początkowo, na przykład, próbuję wstawić numer trzy w 1016 00:55:29,360 --> 00:55:30,680 sortowane część listy. 1017 00:55:30,680 --> 00:55:31,800 Więc lista nie ma nic. 1018 00:55:31,800 --> 00:55:34,160 Więc może po prostu umieścić numer 3. 1019 00:55:34,160 --> 00:55:37,480 >> Teraz chcę dodać numer 5 do sortowane część listy. 1020 00:55:37,480 --> 00:55:38,900 Więc patrzę na numer 5. 1021 00:55:38,900 --> 00:55:40,450 Zauważyłem, że to większy niż 3. 1022 00:55:40,450 --> 00:55:41,980 Tak, wiem, że to musi być po 3. 1023 00:55:41,980 --> 00:55:44,100 Włożyłem więc 3 i 5. 1024 00:55:44,100 --> 00:55:45,940 >> Następnie chcę wstawić numer 2. 1025 00:55:45,940 --> 00:55:51,630 Zauważyłem, że liczba 2 jest rzeczywiście mógł to zarówno 3 i 5. 1026 00:55:51,630 --> 00:55:54,580 Więc faktycznie umieścić to wszystko Sposób na początku listy. 1027 00:55:54,580 --> 00:55:59,030 Więc muszę, rodzaj, przesunąć wszystkie Elementy na liście sortowane, więc może 1028 00:55:59,030 --> 00:56:01,970 zrobić miejsce dla liczby 2. 1029 00:56:01,970 --> 00:56:03,160 >> Wtedy widzę numer 6. 1030 00:56:03,160 --> 00:56:05,450 Widzę, że powinno być po 5. 1031 00:56:05,450 --> 00:56:06,240 Więc ja ją tam umieścić. 1032 00:56:06,240 --> 00:56:07,965 I w końcu, patrzę na numer 4. 1033 00:56:07,965 --> 00:56:11,030 I zauważyłem, że powinny się pomiędzy 3 i 5. 1034 00:56:11,030 --> 00:56:14,870 , A następnie umieścić go tam i przesunięcie Wszystkie pozostałe elementy. 1035 00:56:14,870 --> 00:56:16,120 Ma sens? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> Bubble Sort. 1038 00:56:19,150 --> 00:56:25,730 Więc sortowanie bąbelkowe jest w zasadzie to, co masz będzie do-- nazywamy to bańka 1039 00:56:25,730 --> 00:56:30,113 sortowania, ponieważ można przejść przez list-- to faktycznie lepiej, gdyby po prostu pokazać 1040 00:56:30,113 --> 00:56:32,300 lubisz to-- 1041 00:56:32,300 --> 00:56:35,030 i masz zamiar porównać sąsiednie numery. 1042 00:56:35,030 --> 00:56:38,410 I masz zamiar zamienić ich pozycji, jeśli nie są one 1043 00:56:38,410 --> 00:56:39,190 w odpowiedniej kolejności. 1044 00:56:39,190 --> 00:56:42,570 >> Więc w zasadzie, co się stało się tu, na przykład, 1045 00:56:42,570 --> 00:56:44,160 masz 8 i 6. 1046 00:56:44,160 --> 00:56:47,270 Wiesz, że ich kolejność będzie faktycznie 6 i 5, prawda? 1047 00:56:47,270 --> 00:56:49,540 Więc masz zamiar zamienić zleceń. 1048 00:56:49,540 --> 00:56:51,370 Wtedy widzę, 8 i 4 tutaj. 1049 00:56:51,370 --> 00:56:52,250 I zrobić to samo. 1050 00:56:52,250 --> 00:56:53,400 I znowu zamienić. 1051 00:56:53,400 --> 00:56:55,070 I wreszcie, 2 i 8. 1052 00:56:55,070 --> 00:56:56,670 Ja też je zamienić. 1053 00:56:56,670 --> 00:57:01,690 >> To się nazywa Bubble Sortuj ponieważ po każda z tych iteracji właściwie 1054 00:57:01,690 --> 00:57:05,910 Najwięcej na liście dostaje wszystko aż do końca listy. 1055 00:57:05,910 --> 00:57:06,940 Czy to ma sens? 1056 00:57:06,940 --> 00:57:11,880 Ponieważ utrzymuje zamiana go przesunąć się w prawo. 1057 00:57:11,880 --> 00:57:14,440 >> OK, więc jest to druga iteracja. 1058 00:57:14,440 --> 00:57:17,200 Byłoby to samo. 1059 00:57:17,200 --> 00:57:20,190 Zrobię jedną partycję wymiany i to ostatnie. 1060 00:57:20,190 --> 00:57:23,290 I że nie ma swapy i lista jest sortowana. 1061 00:57:23,290 --> 00:57:27,460 Więc w Bubble Sort, możemy w zasadzie trzymać przejście przez listy i zamiana 1062 00:57:27,460 --> 00:57:32,310 rzeczy, dopóki nie zauważy, że nie zrobiłem wszelkie swapy robić iteracji, które 1063 00:57:32,310 --> 00:57:34,270 Oznacza to, że lista jest już posortowana. 1064 00:57:34,270 --> 00:57:35,520 Ma sens? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Porozmawiajmy trochę o czas pracy. 1067 00:57:40,870 --> 00:57:45,165 Więc wy pamiętać Big O, Omega i Theta? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Tak? 1070 00:57:50,990 --> 00:57:53,070 OK, co to jest Big O, przede wszystkim? 1071 00:57:53,070 --> 00:57:54,315 >> PUBLICZNOŚCI: [niesłyszalne]. 1072 00:57:54,315 --> 00:57:59,070 >> Lucas: Tak, to się nazywa najgorszym przypadku czas pracy, co oznacza po prostu, że jest to 1073 00:57:59,070 --> 00:58:03,470 ile można oczekiwać program podjąć, aby uruchomić. 1074 00:58:03,470 --> 00:58:04,910 Jak w warunkach of-- 1075 00:58:04,910 --> 00:58:06,660 w tym case-- n. 1076 00:58:06,660 --> 00:58:09,150 Liczba elementów w lista w najgorszym przypadku. 1077 00:58:09,150 --> 00:58:12,520 Jak, w najgorszym możliwym przypadku. 1078 00:58:12,520 --> 00:58:17,100 >> Tak na bańki Sort, na przykład mamy Big O n placu. 1079 00:58:17,100 --> 00:58:20,580 Dlaczego mamy to? 1080 00:58:20,580 --> 00:58:24,716 Dlaczego Bubble Sortuj Big O n kwadrat? 1081 00:58:24,716 --> 00:58:27,614 >> PUBLICZNOŚCI: [niesłyszalne]. 1082 00:58:27,614 --> 00:58:35,670 >> Lucas: Tak, tak, w najgorszym przypadku będzie że będę musiał zrobić n iteracji. 1083 00:58:35,670 --> 00:58:39,260 Tak więc każdy z iteracji zamierza doprowadzenia wielkości elementu do końca 1084 00:58:39,260 --> 00:58:40,290 wykazu. 1085 00:58:40,290 --> 00:58:44,230 Więc w najgorszym przypadku jest to, że mam zrobić to coś n razy. 1086 00:58:44,230 --> 00:58:48,550 I dla każdego z tych czasów, muszę zrobić n swapy bo muszę porównać 1087 00:58:48,550 --> 00:58:49,870 każda z dwóch elementów. 1088 00:58:49,870 --> 00:58:53,730 Więc dlatego to n do kwadratu bo to n razy n. 1089 00:58:53,730 --> 00:59:00,120 >> Następnie wybór sortowania jest również brak placu , ponieważ dla każdej iteracji, muszę 1090 00:59:00,120 --> 00:59:02,650 spojrzeć na każdego elementu na liście. 1091 00:59:02,650 --> 00:59:04,980 A następnie znaleźć najmniejszy, co oznacza, że ​​muszę 1092 00:59:04,980 --> 00:59:06,130 patrzeć przez n elementów. 1093 00:59:06,130 --> 00:59:11,750 A ja mam to zrobić n razy, ponieważ Muszę zaznaczyć wszystkie n elementów. 1094 00:59:11,750 --> 00:59:18,273 >> Wstawiania rodzaj placu jest również brak ponieważ w najgorszym wypadku będzie 1095 00:59:18,273 --> 00:59:20,950 być, jeden, muszę włożyć liczby n, prawda? 1096 00:59:20,950 --> 00:59:22,765 Tak, już wiem, że będę mieć n iteracji. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 Ale dla każdego z tych numerów, gdybym miał spojrzeć na wszystkich liczb w 1099 00:59:29,840 --> 00:59:34,380 sortowane listy i umieścić ją całą drogę z przodu, że kwadrat będzie n 1100 00:59:34,380 --> 00:59:36,230 ponieważ będzie ponownie n n razy. 1101 00:59:36,230 --> 00:59:38,280 Ma sens? 1102 00:59:38,280 --> 00:59:41,512 Co o omega? 1103 00:59:41,512 --> 00:59:42,886 >> PUBLICZNOŚCI: [niesłyszalne]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: To najlepszy scenariusz. 1105 00:59:44,620 --> 00:59:48,810 Tak to jest jak, w wielu czasach dla sortowania, Najlepszy scenariusz 1106 00:59:48,810 --> 00:59:50,660 kiedy lista jest już posortowana. 1107 00:59:50,660 --> 00:59:52,670 Tak naprawdę nie ma nic robić. 1108 00:59:52,670 --> 00:59:56,290 Bubble Sort ma najlepsze scenariusz n. 1109 00:59:56,290 --> 00:59:58,820 Czy wiecie dlaczego? 1110 00:59:58,820 --> 01:00:00,620 >> PUBLICZNOŚCI: [niesłyszalne]. 1111 01:00:00,620 --> 01:00:05,640 >> Lucas: Tak, jeśli śledzić czy porcja danych miał żadnych swapów lub 1112 01:00:05,640 --> 01:00:10,533 Nie, jeśli masz coś jak ustawienie prawdziwe, czy nie było iteracji, jeżeli 1113 01:00:10,533 --> 01:00:15,140 Lista jest już posortowane, w zasadzie, co się wydarzy to będę 1114 01:00:15,140 --> 01:00:17,890 spróbuj zamienić każde dwa sąsiednie elementy. 1115 01:00:17,890 --> 01:00:19,920 Idę zobaczyć, że nie ma swap. 1116 01:00:19,920 --> 01:00:21,230 A ja po prostu wrócić od razu. 1117 01:00:21,230 --> 01:00:24,240 >> Więc oznacza to, że po prostu musiałem przejść przez liście jednym czasie. 1118 01:00:24,240 --> 01:00:28,990 Tak to wygląda, bo n w n elementów. 1119 01:00:28,990 --> 01:00:30,930 Dlaczego wybór sortowania n do kwadratu? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Tak, nawet jeśli lista jest posortowana, na każde powtórzenie wyboru rodzaju, że 1122 01:00:45,520 --> 01:00:47,590 trzeba wybrać najmniejszy element. 1123 01:00:47,590 --> 01:00:49,980 To znaczy, że mam się patrzeć na wszystkich elementach w nieposortowane 1124 01:00:49,980 --> 01:00:53,350 listy i znaleźć minimum dla każdej iteracji. 1125 01:00:53,350 --> 01:00:54,600 Czy to ma sens? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> I wprowadzenie miecz n, ponieważ w tak, że staram się włożyć 1128 01:01:04,690 --> 01:01:09,320 numery i wszystkie numery, kiedy spróbuj je włożyć, widzę, że 1129 01:01:09,320 --> 01:01:10,510 znajdują się w prawidłowym położeniu. 1130 01:01:10,510 --> 01:01:15,120 Nie muszę iść sprawdzić wszystkie inne numery na liście sortowane. 1131 01:01:15,120 --> 01:01:17,170 Więc dlatego to będzie brak. 1132 01:01:17,170 --> 01:01:19,480 Ma sens? 1133 01:01:19,480 --> 01:01:21,035 I to, co jest theta? 1134 01:01:21,035 --> 01:01:23,410 >> PUBLICZNOŚCI: [niesłyszalne]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Co, przepraszam? 1136 01:01:24,380 --> 01:01:24,960 Powiedz to jeszcze raz. 1137 01:01:24,960 --> 01:01:25,666 >> PUBLICZNOŚCI: [niesłyszalne]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Dokładnie. 1139 01:01:26,490 --> 01:01:31,280 Więc widać, że tylko wybór przechowywane w seryjnej sortowania mają Thetas. 1140 01:01:31,280 --> 01:01:39,920 A to dlatego, że masz tylko theta jeśli zarówno duże O i omega są takie same. 1141 01:01:39,920 --> 01:01:41,520 OK. 1142 01:01:41,520 --> 01:01:44,210 I wreszcie połączyć sortowania w dzienniku n. 1143 01:01:44,210 --> 01:01:48,910 >> A potem, jak Dan mówił, Merge sort jest jakby ten sam sposób, 1144 01:01:48,910 --> 01:01:50,320 zrobić wyszukiwanie binarne. 1145 01:01:50,320 --> 01:01:53,530 Więc masz listę. 1146 01:01:53,530 --> 01:01:55,170 I masz zamiar przeciąć na pół. 1147 01:01:55,170 --> 01:02:00,580 A następnie je wyciąć w mniejszych części. 1148 01:02:00,580 --> 01:02:01,730 A następnie je połączyć. 1149 01:02:01,730 --> 01:02:02,960 Wy pamiętajcie, że tak? 1150 01:02:02,960 --> 01:02:04,960 OK, jak mówił. 1151 01:02:04,960 --> 01:02:08,330 >> OK, wskaźniki. 1152 01:02:08,330 --> 01:02:11,078 Tak więc to, co jest wskaźnikiem? 1153 01:02:11,078 --> 01:02:12,050 >> PUBLICZNOŚCI: [niesłyszalne]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: adres. 1155 01:02:12,820 --> 01:02:13,720 OK. 1156 01:02:13,720 --> 01:02:18,530 Wiem, że David pokazuje kilka filmy Binky i rzeczy wskazujące 1157 01:02:18,530 --> 01:02:19,080 siebie. 1158 01:02:19,080 --> 01:02:22,960 Ale lubię myśleć o wskaźniki jedynie jako adres. 1159 01:02:22,960 --> 01:02:26,110 Więc jest to zmienna, która będzie do przechowywania adresu. 1160 01:02:26,110 --> 01:02:31,940 >> Tak, to jest po prostu to specjalna zmienna czyli cztery bajty. 1161 01:02:31,940 --> 01:02:36,550 Pamiętaj, że do niczego się wskaźnik zawsze cztery bajty dla naszej 32-bit 1162 01:02:36,550 --> 01:02:39,370 Urządzenie to przypadek urządzenia. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 I to właśnie ma miejsce zmiennej w jej wnętrzu. 1165 01:02:47,050 --> 01:02:50,240 >> OK, więc jest to pamięć, w zasadzie. 1166 01:02:50,240 --> 01:02:57,420 Więc każdy blok pamięci ma rzeczywiście Etykieta, która jest adres 1167 01:02:57,420 --> 01:02:58,890 Pamięć slotty. 1168 01:02:58,890 --> 01:03:02,370 To znaczy, że mogę mieć wskaźnik, wskazujący 1169 01:03:02,370 --> 01:03:03,380 każdy z tych adresów. 1170 01:03:03,380 --> 01:03:09,930 Więc dlatego użyjemy wskaźników jest jeśli mam pamiętać lokalizację 1171 01:03:09,930 --> 01:03:12,300 które jest specyficzne dla zmiennej pamięci. 1172 01:03:12,300 --> 01:03:16,560 >> A wy pamiętać, że jeden z tych, przypadków było, jeśli mam funkcji 1173 01:03:16,560 --> 01:03:20,820 jeśli mam rzeczywiście chcą się Swap dla liczb rzeczywistych, faktycznie 1174 01:03:20,820 --> 01:03:22,110 trzeba wysłać wskaźnik. 1175 01:03:22,110 --> 01:03:23,460 Nie zmienna. 1176 01:03:23,460 --> 01:03:25,200 Czy chłopaki pamiętać, że? 1177 01:03:25,200 --> 01:03:26,450 Różnica between-- 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 jaka jest nazwa? 1180 01:03:34,120 --> 01:03:36,010 Rozmowa wartości i wywołanie przez odniesienie, prawda? 1181 01:03:36,010 --> 01:03:36,840 >> OK, tak. 1182 01:03:36,840 --> 01:03:38,330 Tak nazywamy wartością. 1183 01:03:38,330 --> 01:03:43,570 Po prostu wyślij do zmiennej funkcjonować jesteś po prostu wysyłając wartość. 1184 01:03:43,570 --> 01:03:45,610 Więc faktycznie wysyłanie Kopia zmiennej. 1185 01:03:45,610 --> 01:03:49,720 I Twój program nie obchodzi o tym, czy sama zmienna faktycznie 1186 01:03:49,720 --> 01:03:51,650 tworzy kopię. 1187 01:03:51,650 --> 01:03:56,330 >> I rozmów przez odniesienia oznacza, że Jestem rzeczywiście przesłanie kopii 1188 01:03:56,330 --> 01:03:57,550 wskaźnika do tej zmiennej. 1189 01:03:57,550 --> 01:04:00,970 Więc oznacza to, że wyślę Lokalizacja tej zmiennej. 1190 01:04:00,970 --> 01:04:04,440 Więc wyczuć Mam lokalizację zmienna, gdy zgłoszę funkcja 1191 01:04:04,440 --> 01:04:09,700 ze wskaźnikami, jestem w stanie właściwie zmiany danych, które było w głównym. 1192 01:04:09,700 --> 01:04:12,050 Ma sens? 1193 01:04:12,050 --> 01:04:17,560 >> Chociaż wskaźnik jest kopia, wskaźnik nadal ma prawdziwy adres 1194 01:04:17,560 --> 01:04:20,090 zmienne, które chcę zmienić. 1195 01:04:20,090 --> 01:04:21,920 Ma sens? 1196 01:04:21,920 --> 01:04:24,290 >> Więc tworzenie wskaźników. 1197 01:04:24,290 --> 01:04:28,410 Pamiętaj, wskaźnik zawsze typ, który to wskazuje 1198 01:04:28,410 --> 01:04:29,890 do i gwiazdy. 1199 01:04:29,890 --> 01:04:31,030 A następnie umieścić nazwę. 1200 01:04:31,030 --> 01:04:35,765 Więc pamiętaj, że zawsze, gdy masz co gwiazda, to jak wskaźnik do 1201 01:04:35,765 --> 01:04:38,990 że bez względu na zmienne wpisz że masz. 1202 01:04:38,990 --> 01:04:42,850 >> Więc w gwiazdę, na przykład, jest wskaźnik i całkowitą. 1203 01:04:42,850 --> 01:04:47,680 A potem gwiazda char jest wskaźnik char gwiazda i tak dalej. 1204 01:04:47,680 --> 01:04:47,960 Tak? 1205 01:04:47,960 --> 01:04:52,710 >> PUBLICZNOŚCI: Co zrobić, jeśli mamy wskaźnik do n zagra x. 1206 01:04:52,710 --> 01:04:55,255 Wiem, że tworzy wskaźnik do x. 1207 01:04:55,255 --> 01:04:59,432 Czy to również oświadczyć x liczby całkowitej? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: OK, więc kiedy mówisz n gwiazda X, nie tworzymy wskaźnik do 1209 01:05:05,170 --> 01:05:06,000 zmiennej x. 1210 01:05:06,000 --> 01:05:08,170 Tworząc wskaźnik o nazwie x. 1211 01:05:08,170 --> 01:05:09,396 >> PUBLICZNOŚCI: [niesłyszalne]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Więc kiedy mówię n gwiazda X, jestem mówiąc: hej, w pamięci, mam zamiar 1213 01:05:14,250 --> 01:05:16,390 jeden z tych trzech pól. 1214 01:05:16,390 --> 01:05:20,750 I mam zamiar powiedzieć, że będzie x, który jest 1215 01:05:20,750 --> 01:05:22,000 będzie wskaźnik. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 I coś ciekawego o wskaźniki jest to, że mają one 1218 01:05:30,640 --> 01:05:32,620 4 bajty na komputerze 32-bitowym. 1219 01:05:32,620 --> 01:05:36,320 A powodem tego jest, ponieważ 4 bajty są 32-bitowe. 1220 01:05:36,320 --> 01:05:40,490 >> I maszyny, które są w rzeczywistości 64 bitów Wskaźniki mają adresy 1221 01:05:40,490 --> 01:05:43,480 że są długie 64 bity. 1222 01:05:43,480 --> 01:05:49,820 Tak, to po prostu oznacza, że ​​wielkość Adresy w urządzeniu jest inna. 1223 01:05:49,820 --> 01:05:52,270 >> Więc Odwoływanie i wyłuskania. 1224 01:05:52,270 --> 01:05:54,310 Istnieją dwa podmioty, które faceci powinni pamiętać. 1225 01:05:54,310 --> 01:05:55,450 Pierwszy to Ampersand. 1226 01:05:55,450 --> 01:05:56,810 Drugi jest gwiazdą. 1227 01:05:56,810 --> 01:06:05,060 Nie należy się martwić o to, że gwiazdy i STAR, ponieważ pamiętam, że w 1228 01:06:05,060 --> 01:06:06,950 tym przypadku, masz n gwiazdę. 1229 01:06:06,950 --> 01:06:08,700 >> To jak wszystkiego razem. 1230 01:06:08,700 --> 01:06:10,720 Nie ma miejsca na gwiazda n. 1231 01:06:10,720 --> 01:06:12,070 Więc oznacza to, że jest to rodzaj. 1232 01:06:12,070 --> 01:06:14,870 Pamiętaj, że gdy masz gwiazda zmienna, jesteś 1233 01:06:14,870 --> 01:06:16,230 mówić o rodzaju. 1234 01:06:16,230 --> 01:06:20,540 >> Gdy masz tylko gwiazdę, a następnie Nazwa zmiennej, to znaczy, że 1235 01:06:20,540 --> 01:06:24,100 jesteś dereferencji wskaźnika, który Oznacza to, że patrzysz na 1236 01:06:24,100 --> 01:06:28,290 wskaźnik, znalezienie adresu to wskazując, będzie ten adres, 1237 01:06:28,290 --> 01:06:30,850 i patrząc na ilekroć tam masz. 1238 01:06:30,850 --> 01:06:34,310 Więc mówię moim uczniom, że gdy masz gwiazda, warto pomyśleć, że jest to 1239 01:06:34,310 --> 01:06:36,850 skrót od treści. 1240 01:06:36,850 --> 01:06:39,770 >> Więc jeśli masz wskaźnik i Czy Star wskaźnik, to 1241 01:06:39,770 --> 01:06:41,720 Zawartość wskaźnika. 1242 01:06:41,720 --> 01:06:44,580 Więc idź do tego, co to jest, wskazując na i spojrzeć na stałej zawartości. 1243 01:06:44,580 --> 01:06:47,730 Oraz handlowego i jest taka sama rzecz jak adres. 1244 01:06:47,730 --> 01:06:52,560 >> Więc jeśli mam zmienną A-- jak, niech powiedzieć, że zrobiłem int równa 3-- 1245 01:06:52,560 --> 01:06:56,900 jeśli chcę znaleźć adres, który zmienna pamięci, mogę zrobić 1246 01:06:56,900 --> 01:06:58,240 handlowe i. 1247 01:06:58,240 --> 01:07:00,280 Więc jest to adres. 1248 01:07:00,280 --> 01:07:01,530 Ma sens? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Więc oto przykład. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 To brakuje int int b i c. 1253 01:07:11,530 --> 01:07:16,520 Tak więc int równa 3 oznacza, że Mam zamiar udać się do pamięci. 1254 01:07:16,520 --> 01:07:19,870 I mam zamiar znaleźć gniazdo i umieścić numer 3 tutaj. 1255 01:07:19,870 --> 01:07:22,200 >> A następnie int b równa 4. 1256 01:07:22,200 --> 01:07:23,100 Mam zamiar zrobić to samo. 1257 01:07:23,100 --> 01:07:25,840 Przejdź do pamięci i umieścić szereg 4, w jednym z pól. 1258 01:07:25,840 --> 01:07:27,100 I int równa 5. 1259 01:07:27,100 --> 01:07:29,740 Znaleźć inne pole i umieścić numer 5. 1260 01:07:29,740 --> 01:07:36,160 >> Więc co to jest linia robi? n gwiazda pa równa ampersand a. 1261 01:07:36,160 --> 01:07:37,800 Więc przede wszystkim n gwiazda rocznie. 1262 01:07:37,800 --> 01:07:39,050 Co on robi? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> PUBLICZNOŚCI: [niesłyszalne]. 1265 01:07:42,298 --> 01:07:47,890 >> Lucas: Tak, tak, n gwiazda pa, po pierwsze, deklaruje wskaźnik o nazwie pa. 1266 01:07:47,890 --> 01:07:53,720 A potem to przypisanie wartości że wskaźnik jest adres. 1267 01:07:53,720 --> 01:07:55,790 Więc handlowe i. 1268 01:07:55,790 --> 01:07:58,510 Następnie, jeśli to zrobię gwiazda pb, co to jest gwiazda pb? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Och, przepraszam. 1271 01:08:03,150 --> 01:08:06,330 Jest również brakuje. n gwiazda pb. 1272 01:08:06,330 --> 01:08:07,905 To znaczy gwiazda pc. 1273 01:08:07,905 --> 01:08:11,200 Tak mi przykro. 1274 01:08:11,200 --> 01:08:11,940 To samo. 1275 01:08:11,940 --> 01:08:16,408 Ale teraz jestem dobry ar tworząc wskaźnik do B, a następnie wskaźnik do C. 1276 01:08:16,408 --> 01:08:16,886 Tak? 1277 01:08:16,886 --> 01:08:18,136 >> PUBLICZNOŚCI: [niesłyszalne]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Tak. 1280 01:08:26,670 --> 01:08:32,630 Więc jeśli się do pamięci i przejść do Pole to jest oznaczenie dla pa, 1281 01:08:32,630 --> 01:08:37,149 jesteś rzeczywiście będzie zobacz adresu. 1282 01:08:37,149 --> 01:08:38,399 OK? 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 Tak? 1285 01:08:43,300 --> 01:08:45,605 >> PUBLICZNOŚCI: [niesłyszalne]? 1286 01:08:45,605 --> 01:08:49,260 >> Lucas: Tak, wskaźnik jest adres. 1287 01:08:49,260 --> 01:08:50,120 Nigdy nie zapominaj o tym. 1288 01:08:50,120 --> 01:08:52,800 To jest jak najbardziej istotne część o wskazówki. 1289 01:08:52,800 --> 01:08:56,180 Jest przechowywania i adres w pewnej zmiennej. 1290 01:08:56,180 --> 01:08:56,890 Coś jeszcze? 1291 01:08:56,890 --> 01:08:58,370 Jeszcze jakieś pytania? 1292 01:08:58,370 --> 01:08:59,189 OK. 1293 01:08:59,189 --> 01:09:00,399 >> Tak, wskaźniki i tablice. 1294 01:09:00,399 --> 01:09:08,189 Pamiętaj, że gdy zrobić int tablicy 3, w zasadzie, co robię to ja, rodzaj 1295 01:09:08,189 --> 01:09:12,779 z, deklarując w wskaźnika. 1296 01:09:12,779 --> 01:09:18,960 Więc tablica jest trochę jak wskaźnik do szczególne miejsce w pamięci, w którym 1297 01:09:18,960 --> 01:09:21,999 przydzielone trzy sloty dla liczb całkowitych. 1298 01:09:21,999 --> 01:09:23,430 Czy to ma sens? 1299 01:09:23,430 --> 01:09:30,250 >> Więc kiedy mam int tablicy 3, co mam robi, w zasadzie, jest stworzenie trzech 1300 01:09:30,250 --> 01:09:31,479 Szczeliny w pamięci. 1301 01:09:31,479 --> 01:09:33,899 Więc po prostu znaleźć trzy gniazda w pamięci. 1302 01:09:33,899 --> 01:09:38,810 Więc jeśli tak, to, tablicy, to gwiazda Oznacza, zawartość tablicy, 1303 01:09:38,810 --> 01:09:46,180 co oznacza, że ​​usunięcie wskaźnika, idę w tym miejscu, że to wskazując, 1304 01:09:46,180 --> 01:09:47,939 i umieścić numer jeden. 1305 01:09:47,939 --> 01:09:53,729 >> A następnie, jeśli to zrobię tablicę STAR plus 1, to samo, co robi tablicę 1306 01:09:53,729 --> 01:09:59,690 wsporniki jeden, co oznacza po prostu idę do miejsce, że to wskazuje na. 1307 01:09:59,690 --> 01:10:03,000 A potem plus 1 marki mi przesunąć się o jedną pozycję. 1308 01:10:03,000 --> 01:10:06,510 Więc idę do tej pozycji, w rzeczywistości, i umieścić numer dwa. 1309 01:10:06,510 --> 01:10:10,900 >> I w końcu, kiedy nie Tablica plus 2, pójdę tam, gdzie 1310 01:10:10,900 --> 01:10:11,825 wskazujące tablicowej, która na. 1311 01:10:11,825 --> 01:10:14,690 A następnie przenieść do bloków pamięci. 1312 01:10:14,690 --> 01:10:16,240 A następnie umieścić numer trzy tutaj. 1313 01:10:16,240 --> 01:10:16,600 Tak? 1314 01:10:16,600 --> 01:10:21,400 >> PUBLICZNOŚCI: Więc tablica jest po prostu gwiazda mówiąc, że pierwszy punkt. 1315 01:10:21,400 --> 01:10:25,090 I można dodać 1, tylko dlatego, jesteśmy tylko bardzo 1316 01:10:25,090 --> 01:10:27,295 odwołującego, że pierwszy adres. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Tak. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Dlaczego, na przykład, powiedzieć tablicę 0, tablica 1 i tablica 2? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Mówię, dlaczego robisz 0, 1, 2, 3, zamiast z 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Jednym z powodów jest to, jeden, komputer Programiści wolą zacząć 1323 01:10:46,550 --> 01:10:47,750 licząc od 0. 1324 01:10:47,750 --> 01:10:52,370 Dwa to, ponieważ kiedy robisz tablicę 0, to samo, co robi tablicę 1325 01:10:52,370 --> 01:10:56,330 Plus 0, co oznacza, idę do że stanowisko, a ja nie 1326 01:10:56,330 --> 01:10:59,320 pominąć żadnych bloków pamięci. 1327 01:10:59,320 --> 01:11:01,750 Więc nie poruszać żadnych bloków pamięci. 1328 01:11:01,750 --> 01:11:02,015 Tak? 1329 01:11:02,015 --> 01:11:03,265 >> PUBLICZNOŚCI: [niesłyszalne]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Więc ona pyta, co jest Różnica pomiędzy robi 1332 01:11:12,670 --> 01:11:14,000 to albo robi malloc. 1333 01:11:14,000 --> 01:11:17,550 Jedną z różnic jest to, że int tablica 3 jest tworzenie 1334 01:11:17,550 --> 01:11:19,260 Tablica na stos. 1335 01:11:19,260 --> 01:11:23,080 A kiedy ja malloc, to tworzy na stercie. 1336 01:11:23,080 --> 01:11:25,250 Czy to ma sens? 1337 01:11:25,250 --> 01:11:28,870 >> Więc w jaki sposób malloc rzeczywiście działa? 1338 01:11:28,870 --> 01:11:32,245 Dlaczego więc nawet trzeba używać malloc? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 Twój rodzaj kompilatora figur z wszystkich zmienne, które zadeklarowane. 1341 01:11:39,700 --> 01:11:44,040 I tworzy przestrzeń dla wszystkich z nich w stosie. 1342 01:11:44,040 --> 01:11:47,180 Więc wszystkie swoje zmienne będą być gdzieś w stosie. 1343 01:11:47,180 --> 01:11:49,460 Więc tutaj jest zmienne środowiskowe. 1344 01:11:49,460 --> 01:11:53,850 >> Więc w zasadzie, miejsca dla tych zmiennych w pamięci jest przeznaczona na 1345 01:11:53,850 --> 01:11:55,080 kompilacji. 1346 01:11:55,080 --> 01:11:58,790 Więc oznacza to, że komputer ma znać wszystkich tych zmiennych 1347 01:11:58,790 --> 01:11:59,790 wcześniej. 1348 01:11:59,790 --> 01:12:02,500 Nie musisz wiedzieć, jakie wartości masz zamiar umieścić w nich. 1349 01:12:02,500 --> 01:12:05,490 Ale to musi wiedzieć, jak ile pamięci trzeba. 1350 01:12:05,490 --> 01:12:09,380 >> Ale teraz powiedzmy, że, na przykład, tworzysz tablicę lub przy 1351 01:12:09,380 --> 01:12:13,430 ciąg znaków, który bierzesz od użytkownika. 1352 01:12:13,430 --> 01:12:17,300 Nie wiem, jak długo ciąg dzieje się, na przykład. 1353 01:12:17,300 --> 01:12:20,600 Więc nie wiem dokładnie ile bloki pamięci przydzielić, prawda? 1354 01:12:20,600 --> 01:12:24,120 >> Więc to nie ma sensu można powiedzieć, umieścić 100 znaków. 1355 01:12:24,120 --> 01:12:26,420 I co wtedy, gdy użytkownik pisze 150? 1356 01:12:26,420 --> 01:12:27,670 Idziesz do przykręcenia. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Więc w zasadzie, nie może być pewien, jak ilość pamięci należy przydzielić 1359 01:12:34,620 --> 01:12:35,960 podczas kompilacji programu. 1360 01:12:35,960 --> 01:12:38,240 Po prostu wiem, że na prowadzonym czasie. 1361 01:12:38,240 --> 01:12:39,950 Więc dlatego masz kupę. 1362 01:12:39,950 --> 01:12:47,610 Tak kupa będzie mieć pamięć że jesteś w trakcie przydzielania 1363 01:12:47,610 --> 01:12:50,810 czas trwania biegu programu. 1364 01:12:50,810 --> 01:12:55,780 >> Więc w zasadzie, kiedy nie malloc, co robisz jest przydzielania pamięci na 1365 01:12:55,780 --> 01:13:00,160 czas, co oznacza, że ​​jesteś Decydując prawo w tym momencie, że ci 1366 01:13:00,160 --> 01:13:02,670 Należy mieć tej pamięci. 1367 01:13:02,670 --> 01:13:04,210 Tak to jest, gdy masz ich przyznawanie. 1368 01:13:04,210 --> 01:13:06,430 Czy to ma sens? 1369 01:13:06,430 --> 01:13:11,690 >> Więc pamiętaj, stos ma zmienne , które są tworzone na kompilacji. 1370 01:13:11,690 --> 01:13:14,560 I wtedy kupa ma zmienne które są tworzone, jak przejść 1371 01:13:14,560 --> 01:13:15,600 z malloc, na przykład. 1372 01:13:15,600 --> 01:13:16,850 >> PUBLICZNOŚCI: [niesłyszalne]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: Więc GetString jest Zadzwonię do malloc. 1375 01:13:24,340 --> 01:13:26,710 Pozwól mi mówić o malloc i Wytłumaczę getString. 1376 01:13:26,710 --> 01:13:32,000 Malloc jest tak samo w alokacji pamięci. 1377 01:13:32,000 --> 01:13:34,600 Więc to będzie przydzielić pamięci na stercie. 1378 01:13:34,600 --> 01:13:40,010 I to się zwracają wskaźnik do jeżeli pamięci przeznaczono na. 1379 01:13:40,010 --> 01:13:43,090 >> Więc kiedy do-- 1380 01:13:43,090 --> 01:13:44,910 tu na example-- 1381 01:13:44,910 --> 01:13:45,830 n Wskaźnik gwiazda. 1382 01:13:45,830 --> 01:13:50,520 A następnie wskaźnik wynosi malloc rozmiar razy calowych 10. 1383 01:13:50,520 --> 01:13:52,110 Tworzę wskaźnik. 1384 01:13:52,110 --> 01:13:59,020 A potem ja to wskaźnik do przypisywania Wartość wskaźnika że malloc 1385 01:13:59,020 --> 01:13:59,680 daje mi. 1386 01:13:59,680 --> 01:14:04,150 >> Więc pytam malloc można przydzielić miejsca dla 10 liczb całkowitych. 1387 01:14:04,150 --> 01:14:05,390 To jest to, co mówi. 1388 01:14:05,390 --> 01:14:09,020 I malloc daje mnie wskaźnika do tego miejsca. 1389 01:14:09,020 --> 01:14:11,460 Ma sens? 1390 01:14:11,460 --> 01:14:12,270 OK. 1391 01:14:12,270 --> 01:14:17,940 I I GetString jest, w zasadzie, robi zadzwoń do malloc więc można przydzielić 1392 01:14:17,940 --> 01:14:21,680 pamięci w trakcie wykonywania. 1393 01:14:21,680 --> 01:14:26,460 >> Zawsze pamiętaj, aby sprawdzić, czy wartości null ponieważ malloc będzie zwróci null 1394 01:14:26,460 --> 01:14:28,200 jeśli nie może przydzielić pamięci. 1395 01:14:28,200 --> 01:14:31,660 Powiedzmy, że prosisz o śmieszne ilość pamięci. 1396 01:14:31,660 --> 01:14:33,950 Komputer nie będzie w stanie przeznaczyć tyle. 1397 01:14:33,950 --> 01:14:36,410 >> Tak właśnie dzieje się malloc do zwróci null. 1398 01:14:36,410 --> 01:14:42,210 Więc zawsze pamiętać, aby sprawdzić, czy wskazówka, że ​​masz z malloc jest 1399 01:14:42,210 --> 01:14:45,640 zerowy lub nie, bo jeśli tak, to polubisz być dereferencji wskaźnika i 1400 01:14:45,640 --> 01:14:48,340 powodując uszkodzeń ubocznych. 1401 01:14:48,340 --> 01:14:50,930 I wreszcie, nie zapomnij Twój wolnej pamięci. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc jest tworzenie pamięci na stercie. 1404 01:15:00,560 --> 01:15:03,436 I trzeba zwolnić pamięć zanim program się kończy. 1405 01:15:03,436 --> 01:15:05,370 OK, to wszystko dla mnie. 1406 01:15:05,370 --> 01:15:07,900 Niestety, Rob. 1407 01:15:07,900 --> 01:15:07,950 Dzięki. 1408 01:15:07,950 --> 01:15:09,878 >> [Aplauz] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Jakieś ostatnie pytania przed Rob przychodzi? 1410 01:15:12,679 --> 01:15:13,138 Nie? 1411 01:15:13,138 --> 01:15:13,597 Tak? 1412 01:15:13,597 --> 01:15:15,892 >> PUBLICZNOŚCI: Nie widziałem ten Internecie. 1413 01:15:15,892 --> 01:15:17,269 Czy wysłał go jeszcze? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Myślę, że Dave jest przesłać go szybko. 1415 01:15:19,106 --> 01:15:19,880 >> Dave: To będzie pisał. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: To będzie w Internecie. 1417 01:15:20,310 --> 01:15:21,175 >> PUBLICZNOŚCI: To zależy. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: To jest? 1419 01:15:22,090 --> 01:15:23,157 OK. 1420 01:15:23,157 --> 01:15:23,644 Tak? 1421 01:15:23,644 --> 01:15:27,053 >> PUBLICZNOŚCI: [niesłyszalne]? 1422 01:15:27,053 --> 01:15:30,285 >> Lucas: Tak, należy zwolnić wszystkich pamięci, która jest umieszczana w stercie. 1423 01:15:30,285 --> 01:15:31,535 >> PUBLICZNOŚCI: [niesłyszalne]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Tak. 1426 01:15:36,160 --> 01:15:39,980 Za każdym razem, że masz malloc kultury, trzeba mieć kulturę wolnego 1427 01:15:39,980 --> 01:15:42,640 Po zatrzymaniu za pomocą tej zmiennej. 1428 01:15:42,640 --> 01:15:44,800 Więc malloc i wolne są zawsze razem. 1429 01:15:44,800 --> 01:15:45,410 Ich najlepszymi przyjaciółmi. 1430 01:15:45,410 --> 01:15:46,720 Tak. 1431 01:15:46,720 --> 01:15:47,970 Rob? 1432 01:15:47,970 --> 01:15:55,595 1433 01:15:55,595 --> 01:15:56,850 >> ROB: Pójdę szybko. 1434 01:15:56,850 --> 01:16:00,466 A także film będzie znosić. 1435 01:16:00,466 --> 01:16:01,716 Mam mikrofon na. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> OK, więc tydzień pięć rzeczy. 1438 01:16:26,230 --> 01:16:27,970 Pierwszą rzeczą, jaką mamy, jest stos. 1439 01:16:27,970 --> 01:16:33,390 Tak więc należy pamiętać, że jest tylko jeden stos ramki na aktywnym wywołania funkcji. 1440 01:16:33,390 --> 01:16:34,710 Zobaczymy, że w sekundę. 1441 01:16:34,710 --> 01:16:37,850 A także pamiętać, co naprawdę idzie w każdej ramce stosu będą 1442 01:16:37,850 --> 01:16:41,880 lokalne zmienne z naszych funkcji, argumenty, które są przekazywane do naszego 1443 01:16:41,880 --> 01:16:43,880 Funkcje, wraz z parą inne rzeczy, które tak naprawdę nie 1444 01:16:43,880 --> 01:16:45,260 trzeba się martwić. 1445 01:16:45,260 --> 01:16:50,950 >> Więc oto przykładowy program, gdzie, Ogłoszenie, głównym jest printfing powrót 1446 01:16:50,950 --> 01:16:52,830 wartość foo 4. 1447 01:16:52,830 --> 01:16:57,930 foo jest tylko zamiar wrócić wartość 6 bar 4 przecinkami. 1448 01:16:57,930 --> 01:17:02,380 I bar będzie ustawić niektóre lokalne Zmienna n równa się 4 razy 6. 1449 01:17:02,380 --> 01:17:03,920 A następnie powrócić n. 1450 01:17:03,920 --> 01:17:09,130 >> Więc spójrzmy na stosie przez Rzeczywista powtórzenie tego programu. 1451 01:17:09,130 --> 01:17:10,500 Więc nie ma na dole naszego stosu. 1452 01:17:10,500 --> 01:17:12,620 Pamiętaj, że stos rośnie. 1453 01:17:12,620 --> 01:17:15,370 Tak na dole stosu naszego, że posiada ramki stosu dla głównej. 1454 01:17:15,370 --> 01:17:17,000 Po uruchomieniu programu, głównym zawsze będzie wynosić 1455 01:17:17,000 --> 01:17:18,560 Dno naszego stosu. 1456 01:17:18,560 --> 01:17:20,880 >> I to, co jest wewnątrz naszego stos ramki na główną? 1457 01:17:20,880 --> 01:17:23,810 Tak więc mimo, że nie istnieją żadne lokalne zmiennych do głównej, tak jak powiedziałem wcześniej, 1458 01:17:23,810 --> 01:17:29,670 mamy argc i rgv zajmowania miejsca wewnątrz głównej ramki stosu. 1459 01:17:29,670 --> 01:17:33,260 Więc teraz jest głównym będzie wywołać funkcję foo. 1460 01:17:33,260 --> 01:17:35,125 I oznacza, że ​​foo będzie uzyskać własną ramkę stosu. 1461 01:17:35,125 --> 01:17:36,970 >> Tak więc teraz jesteśmy w środku bla funkcji. 1462 01:17:36,970 --> 01:17:38,610 I co musi iść w Foo ramki stosu? 1463 01:17:38,610 --> 01:17:41,100 Cóż, bla ma n argumentów. 1464 01:17:41,100 --> 01:17:45,440 A n jest równe 4, ponieważ to, co Głównym argumentem jest przepuszczenie jak Foo. 1465 01:17:45,440 --> 01:17:48,490 >> Więc teraz foo będzie wywołać bar. 1466 01:17:48,490 --> 01:17:52,070 Co to jest bar będzie miał w środku jego 'ramki stosu? 1467 01:17:52,070 --> 01:17:55,610 Posiada 4 x równe y równej sześciu. 1468 01:17:55,610 --> 01:17:58,540 To nie wszystko, że będziemy mieć w ramce stosu, ponieważ bar 1469 01:17:58,540 --> 01:18:00,580 ma także lokalną zmienną n. 1470 01:18:00,580 --> 01:18:03,370 Oraz n będziemy równy 24. 1471 01:18:03,370 --> 01:18:05,750 >> Więc teraz bar powróci n. 1472 01:18:05,750 --> 01:18:09,300 Tak bar wraca 24 do bla ramki stosu. 1473 01:18:09,300 --> 01:18:12,560 A ponieważ bar jest teraz wraca, że Oznacza jesteśmy popping ramkę stosu 1474 01:18:12,560 --> 01:18:14,250 za wyłączone z komina. 1475 01:18:14,250 --> 01:18:18,430 Więc wszystkie pamięci, które były bar stosując jest ze stosu. 1476 01:18:18,430 --> 01:18:21,550 >> Teraz zamierza także foo 24 powrót do głównego. 1477 01:18:21,550 --> 01:18:25,470 Więc teraz, że foo jest powrót, pamięć że bla używał w swoich " 1478 01:18:25,470 --> 01:18:27,550 ramki stosu jest również zniknął. 1479 01:18:27,550 --> 01:18:29,660 A teraz, głównym będzie printf. 1480 01:18:29,660 --> 01:18:31,660 Więc jest to tylko kolejny printf funkcja. 1481 01:18:31,660 --> 01:18:35,320 Kiedy wzywamy printf, to będzie kolejna ramka stosu dla printf 1482 01:18:35,320 --> 01:18:36,470 Wywołanie funkcji. 1483 01:18:36,470 --> 01:18:37,990 >> Co my przechodząc printf? 1484 01:18:37,990 --> 01:18:40,090 To, co się dzieje, aby przejść na jego ramce stosu. 1485 01:18:40,090 --> 01:18:44,970 Przynajmniej, przekazujemy że procent i interpretacja odwrotnego ukośnika n i 1486 01:18:44,970 --> 01:18:47,180 Argument 24. 1487 01:18:47,180 --> 01:18:50,370 To może mieć więcej to ramka stosu jeśli printf dzieje się przy użyciu niektórych 1488 01:18:50,370 --> 01:18:51,200 zmienne lokalne. 1489 01:18:51,200 --> 01:18:51,920 Nie wiemy. 1490 01:18:51,920 --> 01:18:53,810 >> Ale wszystko idzie w printf-tych stos ramki. 1491 01:18:53,810 --> 01:18:55,740 To będzie wykonać printf. 1492 01:18:55,740 --> 01:18:56,830 Następnie printf zrobił. 1493 01:18:56,830 --> 01:18:57,820 Powróci. 1494 01:18:57,820 --> 01:18:58,960 Wreszcie głównym odbywa. 1495 01:18:58,960 --> 01:18:59,860 Głównym powróci. 1496 01:18:59,860 --> 01:19:02,020 A następnie nasz program jest zrobione. 1497 01:19:02,020 --> 01:19:02,480 Tak? 1498 01:19:02,480 --> 01:19:04,505 >> PUBLICZNOŚCI: Widzisz [niesłyszalne] 1499 01:19:04,505 --> 01:19:05,900 argumenty [niesłyszalne] 1500 01:19:05,900 --> 01:19:06,830 parametry? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: Tak istnieje subtelna różnica między argumentów i parametrów. 1502 01:19:09,970 --> 01:19:14,400 I rzeczywiście, w powszechnym mówić, ludzie mają tendencję po prostu wymieszać je cały czas. 1503 01:19:14,400 --> 01:19:17,550 Ale parametry są formalne Nazwa rzeczy. 1504 01:19:17,550 --> 01:19:20,180 >> Więc argc i argv są Parametry do głównej. 1505 01:19:20,180 --> 01:19:23,440 Argumenty są co faktycznie przekazać w jak tych parametrów. 1506 01:19:23,440 --> 01:19:28,340 Tak więc, gdy zgłoszę foo z 4, 4 jest argument ja przechodząc. 1507 01:19:28,340 --> 01:19:31,460 I n parametrów, wewnątrz bla, nabiera wartości 4 1508 01:19:31,460 --> 01:19:32,880 od 4 był argument. 1509 01:19:32,880 --> 01:19:35,826 >> PUBLICZNOŚCI: [niesłyszalne]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: n jest zmienną lokalną do baru. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 n jest nadal lokalne do foo, ale jest to parametr do foo. 1513 01:19:44,960 --> 01:19:48,190 To nie jest zmienna lokalna. 1514 01:19:48,190 --> 01:19:48,546 Tak? 1515 01:19:48,546 --> 01:19:51,180 >> PUBLICZNOŚCI: [niesłyszalne]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: Dzwonię foo i bar powrót cokolwiek kreskowych zyski. 1517 01:19:55,400 --> 01:19:56,786 >> PUBLICZNOŚCI: [niesłyszalne]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Tak, po prostu zobaczyć, wielokrotnego stos klatek. 1519 01:19:59,591 --> 01:20:00,082 Tak? 1520 01:20:00,082 --> 01:20:03,519 >> PUBLICZNOŚCI: Dlaczego nazwano foo przed printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Dlaczego foo wezwany przed printf? 1522 01:20:05,920 --> 01:20:10,740 Więc mogłem mieć, zamiast zrobić coś jak int x równa się foo z 4 1523 01:20:10,740 --> 01:20:12,980 a następnie drukowane x. 1524 01:20:12,980 --> 01:20:17,900 Ale zamiast tego, że w połączeniu z funkcji zadzwoń do argumentu printf. 1525 01:20:17,900 --> 01:20:23,670 >> Ale zauważ, że nie możemy w rzeczywistości wykonać połączenie do printf Dopóki 1526 01:20:23,670 --> 01:20:25,610 dowiedzieć się, co jest bla z 4. 1527 01:20:25,610 --> 01:20:27,480 Więc idziemy do oceny tego. 1528 01:20:27,480 --> 01:20:32,504 I tylko raz, że zrobił zamiar wrócić i ocenić to. 1529 01:20:32,504 --> 01:20:32,990 Tak? 1530 01:20:32,990 --> 01:20:37,364 >> PUBLICZNOŚCI: Ponieważ zarówno baru [niesłyszalne] 1531 01:20:37,364 --> 01:20:41,738 wartość, to dlaczego nie mamy [niesłyszalne]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: powinny być one całkowicie int. 1533 01:20:44,400 --> 01:20:46,260 Że nie został złapany na wielokrotne przejścia. 1534 01:20:46,260 --> 01:20:49,010 Tak powinno być int bar i int bla, ponieważ oba te 1535 01:20:49,010 --> 01:20:50,460 wracają liczby całkowite. 1536 01:20:50,460 --> 01:20:54,214 Nieważne jest tylko wtedy, gdy oni nie dzieje powrót wartości rzeczywistych. 1537 01:20:54,214 --> 01:20:54,692 Tak? 1538 01:20:54,692 --> 01:20:58,038 >> PUBLICZNOŚCI: Gdybyś miał linię powyżej powrót, [niesłyszalne]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: linia nad powrotem? 1541 01:21:03,730 --> 01:21:04,410 >> PUBLICZNOŚCI: Tak. 1542 01:21:04,410 --> 01:21:10,780 Jak jeśli nie printf i [niesłyszalne], to wydrukować dwa razy? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Więc wewnątrz foo? 1544 01:21:12,992 --> 01:21:15,945 Gdybyśmy mieli printf tutaj? 1545 01:21:15,945 --> 01:21:16,750 >> PUBLICZNOŚCI: Tak. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Jeśli więc miał prawo printf tu, to wydrukować raz. 1547 01:21:19,510 --> 01:21:23,400 Od wzywamy foo raz w prawo tu, wtedy będziemy hit printf. 1548 01:21:23,400 --> 01:21:24,620 Następnie zadzwonimy poprzeczkę. 1549 01:21:24,620 --> 01:21:25,710 A następnie będzie bla powrócić. 1550 01:21:25,710 --> 01:21:26,275 I to jest to. 1551 01:21:26,275 --> 01:21:30,985 Mamy tylko kiedykolwiek spotkać printf raz. 1552 01:21:30,985 --> 01:21:31,482 Tak? 1553 01:21:31,482 --> 01:21:32,973 >> PUBLICZNOŚCI: [niesłyszalne] 1554 01:21:32,973 --> 01:21:37,950 printf wywołanie foo ponieważ jesteśmy pierwszym wywołanie printf a następnie przekazujemy 1555 01:21:37,950 --> 01:21:38,580 argumenty. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Tak w teorii, nie jest printf wywołanie foo? 1557 01:21:40,960 --> 01:21:42,220 Więc nie ma. 1558 01:21:42,220 --> 01:21:47,360 Tylko zamówienia, które c będzie wykonywania tych rzeczy jest, zanim możemy 1559 01:21:47,360 --> 01:21:49,800 wywołania funkcji, wszystkie argumenty do funkcji muszą 1560 01:21:49,800 --> 01:21:51,600 być całkowicie ocenione. 1561 01:21:51,600 --> 01:21:53,540 Więc jest to całkowicie oceniane? 1562 01:21:53,540 --> 01:21:54,610 Tak, to tylko ciąg. 1563 01:21:54,610 --> 01:21:55,480 To właśnie wartość. 1564 01:21:55,480 --> 01:21:57,200 >> Następnie musimy całkowicie ocenę tego produktu. 1565 01:21:57,200 --> 01:21:59,720 Gdy to nastąpi, obecnie wszystkie Jego argumenty są oceniane. 1566 01:21:59,720 --> 01:22:01,982 A teraz możemy zadzwoń do printf. 1567 01:22:01,982 --> 01:22:02,478 Tak? 1568 01:22:02,478 --> 01:22:03,966 >> PUBLICZNOŚCI: Jedno pytanie. 1569 01:22:03,966 --> 01:22:06,942 Jeśli masz funkcję void, musi masz powrotny średnik? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: Nie średnik powrót jeśli masz funkcję void. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 OK. 1573 01:22:14,780 --> 01:22:15,830 Teraz niektóre sterty rzeczy. 1574 01:22:15,830 --> 01:22:19,640 Tak kupa jest jak jedziemy do czynienia z dynamicznego zarządzania pamięcią. 1575 01:22:19,640 --> 01:22:23,100 I to bezpośrednio z kontrastów Pakiet, który nazwalibyśmy automatyczne 1576 01:22:23,100 --> 01:22:24,100 zarządzanie pamięcią. 1577 01:22:24,100 --> 01:22:27,140 >> Więc na stosie, nie trzeba się naprawdę do czynienia z how zmiennych lokalnych 1578 01:22:27,140 --> 01:22:30,400 są pchane i zdejmowana wszystko te ramki stosu i wszystkie rzeczy. 1579 01:22:30,400 --> 01:22:31,070 Nie musisz się o to martwić. 1580 01:22:31,070 --> 01:22:32,070 To jest automatyczne. 1581 01:22:32,070 --> 01:22:36,990 Tak kupa jest instrukcja. 1582 01:22:36,990 --> 01:22:38,070 I [niesłyszalne] 1583 01:22:38,070 --> 01:22:41,260 pochodzi z tych funkcji malloc i free. 1584 01:22:41,260 --> 01:22:43,550 >> Więc tutaj jest inny program. 1585 01:22:43,550 --> 01:22:47,145 Wszystko co robimy jest mallocing całkowitą. 1586 01:22:47,145 --> 01:22:49,360 Jesteśmy przechowywanie go w gwiazdkowym x. 1587 01:22:49,360 --> 01:22:52,520 Oczywiście, musimy sprawdzić aby sprawdzić, czy x jest null. 1588 01:22:52,520 --> 01:22:56,400 Wtedy będziemy po prostu ustawić co x wskazuje na 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Drukuj to, co x wskazuje, print x, a następnie wolne x. 1591 01:23:03,260 --> 01:23:08,920 >> Tak jak to jest w rzeczywistości będzie wyglądać jeśli spojrzymy na nasze stosu i sterty? 1592 01:23:08,920 --> 01:23:10,950 Więc zacznijmy jeszcze raz. 1593 01:23:10,950 --> 01:23:12,580 Dno naszym stos, jak poprzednio. 1594 01:23:12,580 --> 01:23:15,930 Pamiętaj, że cię kupa bezpośrednio sprzeciwia się stos? 1595 01:23:15,930 --> 01:23:18,850 Więc będziemy mieć Najwięcej naszych sterty tam. 1596 01:23:18,850 --> 01:23:22,590 >> Tak na dole naszego stosu, mamy ramki stosu dla naszego głównego. 1597 01:23:22,590 --> 01:23:28,000 Ma miejsca na argc, argv, a my teraz lokalną zmienną x, która 1598 01:23:28,000 --> 01:23:30,030 int jest gwiazda. 1599 01:23:30,030 --> 01:23:32,240 Więc idziemy do iteracji w ramach tego programu. 1600 01:23:32,240 --> 01:23:34,420 Pierwszą rzeczą, jaką mamy, jest wywołanie malloc. 1601 01:23:34,420 --> 01:23:36,250 >> Więc robimy wywołanie malloc. 1602 01:23:36,250 --> 01:23:37,100 Malloc jest funkcją. 1603 01:23:37,100 --> 01:23:38,770 To będzie dostać ramkę stosu. 1604 01:23:38,770 --> 01:23:40,180 Co my przechodząc do malloc? 1605 01:23:40,180 --> 01:23:41,610 Że idzie do środka ramki stosu. 1606 01:23:41,610 --> 01:23:45,130 Mijamy rozmiaru n, która jest 4. 1607 01:23:45,130 --> 01:23:49,700 Tak, że przechodzi do malloc. 1608 01:23:49,700 --> 01:23:50,910 >> Co malloc zrobić? 1609 01:23:50,910 --> 01:23:53,820 To chwyta nam trochę miejsca na stercie. 1610 01:23:53,820 --> 01:23:55,320 Więc mamy zamiar udać się do sterty. 1611 01:23:55,320 --> 01:23:57,990 I mamy zamiar chwycić 4 bajty z hałdy. 1612 01:23:57,990 --> 01:24:01,500 Więc po prostu dać, że arbitralne adres. 1613 01:24:01,500 --> 01:24:06,680 0x123 Wystarczy udawać, że jest adres, który jest na stercie. 1614 01:24:06,680 --> 01:24:12,300 >> Tak więc to, co jest wewnątrz, że faktycznie obszar pamięci o adresie Ox123? 1615 01:24:12,300 --> 01:24:13,080 Śmieci. 1616 01:24:13,080 --> 01:24:15,270 Więc nie mamy nic w nim przechowywane. 1617 01:24:15,270 --> 01:24:18,830 Tak daleko, jak wiemy, to może być cokolwiek. 1618 01:24:18,830 --> 01:24:20,560 Nie należy zakładać, że jest zerem. 1619 01:24:20,560 --> 01:24:23,870 Jest to prawdopodobnie najbardziej nie zera. 1620 01:24:23,870 --> 01:24:26,260 >> Więc teraz malloc zwraca. 1621 01:24:26,260 --> 01:24:28,020 A co zrobimy, gdy powraca malloc? 1622 01:24:28,020 --> 01:24:29,800 Ustalamy, co to zwraca. 1623 01:24:29,800 --> 01:24:32,290 Stawiamy x równe co to wraca. 1624 01:24:32,290 --> 01:24:33,690 Więc co to jest powrót? 1625 01:24:33,690 --> 01:24:38,150 To powrót 0x123 ponieważ jest adres bloku pamięci, która to 1626 01:24:38,150 --> 01:24:40,850 tylko przydzielone na stercie. 1627 01:24:40,850 --> 01:24:47,160 >> Więc wrócić 0x123 x jest teraz będzie ustawiony równa 0x123, które obrazowo, 1628 01:24:47,160 --> 01:24:52,940 my często rysować jako x ma rzeczywisty strzałka skierowana do tego bloku. 1629 01:24:52,940 --> 01:24:55,820 Ale x jest po prostu przechowywanie tego adresu. 1630 01:24:55,820 --> 01:24:58,670 Teraz musimy sprawdzić, czy x jest null. 1631 01:24:58,670 --> 01:24:59,120 To nie jest wartość null. 1632 01:24:59,120 --> 01:25:02,170 Udajemy, że malloc udało. 1633 01:25:02,170 --> 01:25:04,950 >> Teraz gwiazda x jest równa 50. 1634 01:25:04,950 --> 01:25:08,450 Tak wspomina to znaczy gwiazda przejść do tego adresu. 1635 01:25:08,450 --> 01:25:12,700 Więc 0x123 Zamierzamy przejść do tego adresu. 1636 01:25:12,700 --> 01:25:14,660 Czeka nas więc, że tam. 1637 01:25:14,660 --> 01:25:16,310 Co robimy pod tym adresem? 1638 01:25:16,310 --> 01:25:19,020 Jesteśmy przechowywania 50. 1639 01:25:19,020 --> 01:25:22,500 >> Więc po tej linii, to jest co rzeczy będą wyglądać. 1640 01:25:22,500 --> 01:25:24,640 Więc teraz to już nie śmieci tam. 1641 01:25:24,640 --> 01:25:28,910 Teraz wiemy, że jest, że 50 szczególności adres, ponieważ 1642 01:25:28,910 --> 01:25:32,410 możemy ustawić go na to. 1643 01:25:32,410 --> 01:25:32,790 OK? 1644 01:25:32,790 --> 01:25:34,370 Więc teraz mamy zamiar wydrukować f. 1645 01:25:34,370 --> 01:25:38,490 >> Więc najpierw będziemy drukować gwiazda X. 1646 01:25:38,490 --> 01:25:39,640 Więc co jest gwiazda x? 1647 01:25:39,640 --> 01:25:44,300 Ponownie, gwiazda x oznacza iść do rzeczą, że x wskazuje. 1648 01:25:44,300 --> 01:25:47,140 Więc x jest przechowywanie 0x123 Go do tego. 1649 01:25:47,140 --> 01:25:48,490 Dostajemy 50. 1650 01:25:48,490 --> 01:25:50,540 Więc wydrukować f to. 1651 01:25:50,540 --> 01:25:54,900 A to oznacza, że ​​będzie drukować 50. 1652 01:25:54,900 --> 01:25:56,850 A następnie, że wraca. 1653 01:25:56,850 --> 01:25:58,340 >> A potem mamy drugi printf. 1654 01:25:58,340 --> 01:25:59,370 Jesteśmy teraz procent p. 1655 01:25:59,370 --> 01:26:01,680 Jeśli nie widziałeś, to , jak można wydrukować wskaźnik. 1656 01:26:01,680 --> 01:26:04,960 Więc mamy procent i, procent f oraz wszystkich już nich. 1657 01:26:04,960 --> 01:26:07,160 Więc procent p, wydrukować wskaźnik. 1658 01:26:07,160 --> 01:26:08,920 >> Więc x jest wskaźnikiem. 1659 01:26:08,920 --> 01:26:13,440 Więc jeśli mamy zamiar drukować x sobie, mamy do drukowania, co faktycznie jest w środku 1660 01:26:13,440 --> 01:26:19,220 x, który jest 0x123 więc pierwszy print f będzie drukować 50. 1661 01:26:19,220 --> 01:26:23,620 Drugi druk f będzie wydrukować 0x123 Tak? 1662 01:26:23,620 --> 01:26:27,460 >> PUBLICZNOŚCI: Używasz procent x, aby wydrukować wskaźnik? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Więc używasz procent x, aby wydrukować wskaźnik? 1664 01:26:31,200 --> 01:26:38,350 Tak można, ale procent x jest tylko, ogólnie, na jak jeśli masz jakiś 1665 01:26:38,350 --> 01:26:40,325 całkowitą i chcesz wydrukować to w systemie szesnastkowym. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 To jest po prostu, jak to zrobić. 1668 01:26:44,880 --> 01:26:47,160 >> Natomiast procent d byłoby wydrukować jako przecinku. 1669 01:26:47,160 --> 01:26:50,310 Że były mamy procent d. I jest tylko liczbą całkowitą. 1670 01:26:50,310 --> 01:26:52,690 p jest w szczególności procent dla wskaźników. 1671 01:26:52,690 --> 01:26:54,060 >> Więc x jest wskaźnikiem. 1672 01:26:54,060 --> 01:26:56,360 Chcemy wykorzystać procent str. 1673 01:26:56,360 --> 01:26:57,937 Ale procent x może pracować. 1674 01:26:57,937 --> 01:26:58,414 Tak? 1675 01:26:58,414 --> 01:26:59,664 >> PUBLICZNOŚCI: [niesłyszalne]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Tak. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Przynajmniej na to call-- więc nie obejmują go w tutaj. 1680 01:27:13,440 --> 01:27:19,850 Ale te dwa argumenty muszą wewnątrz tej ramki stosu 1681 01:27:19,850 --> 01:27:23,040 razem ze wszystkimi zmiennymi lokalnymi printf dzieje się przy użyciu. 1682 01:27:23,040 --> 01:27:27,020 A potem następne wywołanie printf teraz wewnątrz ramki stosu jest printf 1683 01:27:27,020 --> 01:27:33,960 procent p backslash n i niezależnie Wartość x wynosi, co 0x123. 1684 01:27:33,960 --> 01:27:34,425 Tak? 1685 01:27:34,425 --> 01:27:35,675 >> PUBLICZNOŚCI: [niesłyszalne]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: To będzie coś wydrukować , który wygląda tak. 1688 01:27:40,880 --> 01:27:41,846 >> PUBLICZNOŚCI: [niesłyszalne]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: Tak to wydrukuje ją w postaci adresu. 1690 01:27:44,510 --> 01:27:47,003 To wygląda jak adres. 1691 01:27:47,003 --> 01:27:47,494 Tak? 1692 01:27:47,494 --> 01:27:49,458 >> PUBLICZNOŚCI: [niesłyszalne]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Dlaczego nie? 1694 01:27:51,075 --> 01:27:52,920 >> PUBLICZNOŚCI: [niesłyszalne]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Dlaczego jest to wskaźnik 4 bajty? 1696 01:27:55,240 --> 01:27:58,500 Tak więc istnieje cała masa z 0 jest przed tym. 1697 01:27:58,500 --> 01:28:03,740 Więc to naprawdę 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 W systemie 64-bitowym, nie byłoby cała masa więcej zer. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Tak? 1701 01:28:11,900 --> 01:28:13,150 >> PUBLICZNOŚCI: [niesłyszalne]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Więc najpierw printf będzie print-- 1704 01:28:21,130 --> 01:28:21,980 >> PUBLICZNOŚCI: [niesłyszalne]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Tak, to będzie drukować co x wskazuje. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Gwiazda mówi, co to jest co wskazuje. 1708 01:28:29,070 --> 01:28:30,300 Chwycić go. 1709 01:28:30,300 --> 01:28:31,455 Więc co to jest wskazując? 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 Chwycić go. 1712 01:28:32,410 --> 01:28:33,390 To jest to, co mamy zamiar drukować. 1713 01:28:33,390 --> 01:28:37,020 Mając na uwadze, następnej, jesteśmy tylko drukowanie x sobie. 1714 01:28:37,020 --> 01:28:38,850 Co jest w środku f? 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 OK. 1717 01:28:44,500 --> 01:28:46,620 >> A potem, w końcu, mamy wolne. 1718 01:28:46,620 --> 01:28:48,040 Co my przechodząc uwolnić? 1719 01:28:48,040 --> 01:28:49,470 Mijamy x. 1720 01:28:49,470 --> 01:28:52,380 I rzeczywiście, że wyświetlany czas to w ramce stosu. 1721 01:28:52,380 --> 01:28:56,370 >> Więc my przekazujemy wartość 0x123 uwolnić. 1722 01:28:56,370 --> 01:28:59,070 Więc teraz za darmo wie, wszystko w porządku, Muszę iść do sterty 1723 01:28:59,070 --> 01:29:00,050 i za darmo, że pamięć. 1724 01:29:00,050 --> 01:29:03,920 To już nie używa, co jest pod adresem 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> Tak wolny będzie zwolnić że ze sterty. 1726 01:29:07,010 --> 01:29:09,490 Teraz nasza kupa jest pusta. 1727 01:29:09,490 --> 01:29:11,120 Nie mamy żadnych wycieków pamięci. 1728 01:29:11,120 --> 01:29:12,940 Teraz za darmo powróci. 1729 01:29:12,940 --> 01:29:16,130 Zauważmy, że x jest nadal 0x123. 1730 01:29:16,130 --> 01:29:18,240 Ale to nie jest teraz ważne pamięci. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Nie powinno być już wyłuskiwania x. 1733 01:29:23,986 --> 01:29:24,440 Tak? 1734 01:29:24,440 --> 01:29:27,240 >> PUBLICZNOŚCI: Czy powrót 0 zbędny? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: Czy returen 0 zbędne? 1736 01:29:28,290 --> 01:29:31,110 Tak. 1737 01:29:31,110 --> 01:29:33,950 Właśnie, że nie, bo umieścić mamy powrót jeden dla powietrza. 1738 01:29:33,950 --> 01:29:36,830 Więc jak to jest, tak, pozwala to powrót 0. 1739 01:29:36,830 --> 01:29:37,310 Tak? 1740 01:29:37,310 --> 01:29:38,560 >> PUBLICZNOŚCI: [niesłyszalne]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: Tak po wolnych x, co się stanie, jeśli staramy się nieprawidłowego wskaźnika? 1743 01:29:45,580 --> 01:29:47,240 Jest możliwe, że nic się nie uda. 1744 01:29:47,240 --> 01:29:49,330 Jest możliwe, że będziemy jeszcze dostać 50. 1745 01:29:49,330 --> 01:29:53,590 >> Jest to możliwe, również, że pamięć jest obecnie wykorzystywane do czegoś innego. 1746 01:29:53,590 --> 01:29:57,140 Więc jest to niezdefiniowane zachowanie. 1747 01:29:57,140 --> 01:30:00,772 I nieokreślone coś znaczy może się zdarzyć. 1748 01:30:00,772 --> 01:30:01,250 Tak? 1749 01:30:01,250 --> 01:30:02,500 >> PUBLICZNOŚCI: [niesłyszalne]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: Nie, więc jeśli przydzielić x na coś innego. 1752 01:30:10,830 --> 01:30:15,870 Więc jeśli tu powiedzieliśmy x jest równa malloc coś else-- 1753 01:30:15,870 --> 01:30:17,100 malloc rozmiar event-- 1754 01:30:17,100 --> 01:30:20,180 następnie, że przy bloku pamięci nie jest wolny. 1755 01:30:20,180 --> 01:30:21,490 I mamy oficjalnie stracił. 1756 01:30:21,490 --> 01:30:23,150 Że jest wyciek pamięci. 1757 01:30:23,150 --> 01:30:25,090 Straciliśmy wszystkie nazwy do tego bloku pamięci. 1758 01:30:25,090 --> 01:30:26,827 Tak więc nie ma mowy, że może nigdy uwolnić go. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 OK, a następnie powrót 0 oznacza zrobić. 1761 01:30:36,630 --> 01:30:37,900 >> W porządku, więc przepełnienie stosu. 1762 01:30:37,900 --> 01:30:39,320 Co to za pomysł tutaj? 1763 01:30:39,320 --> 01:30:41,210 Więc pamiętaj, kupa spada. 1764 01:30:41,210 --> 01:30:43,480 Stos idzie w górę. 1765 01:30:43,480 --> 01:30:48,000 Więc to był przykład z wykładu, Myślę, gdzie głównym jest po prostu będzie 1766 01:30:48,000 --> 01:30:51,380 wywołać tę funkcję foo, która zamierza nazywać się rekursywnie nad i 1767 01:30:51,380 --> 01:30:52,320 na nowo. 1768 01:30:52,320 --> 01:30:55,370 >> Więc stos klatek będą działa dokładnie tak samo. 1769 01:30:55,370 --> 01:30:58,130 Więc mamy zamiar rozpocząć z głównym w dolnej ramie stosu. 1770 01:30:58,130 --> 01:31:02,000 Wtedy głównym będzie wywołać foo, które dostanie ramkę stosu. 1771 01:31:02,000 --> 01:31:04,260 >> Wtedy foo będzie wywołać foo ponownie, co będzie się 1772 01:31:04,260 --> 01:31:05,500 kolejna ramka stosu. 1773 01:31:05,500 --> 01:31:08,270 I znowu, i znowu, i znowu, i znowu, aż w końcu, prowadzimy 1774 01:31:08,270 --> 01:31:09,190 na stercie. 1775 01:31:09,190 --> 01:31:11,990 Tak to jest, jak się przepełnienie stosu. 1776 01:31:11,990 --> 01:31:14,910 I w tym momencie seg winy. 1777 01:31:14,910 --> 01:31:17,335 Albo tak naprawdę seg winy przed ten punkt, ale tak. 1778 01:31:17,335 --> 01:31:19,660 >> PUBLICZNOŚCI: Czy zrzutu pamięci same, jak winy seg? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Tak zobaczysz segmentacji Rdzeń wina po cenach dumpingowych. 1780 01:31:26,140 --> 01:31:28,760 Masz zrzut kiedy Ci seg winy. 1781 01:31:28,760 --> 01:31:32,580 I to jak wysypisko wszystkich zawartość bieżącej pamięci tak 1782 01:31:32,580 --> 01:31:36,670 że można spróbować zidentyfikować dlaczego SEG nic zarzucić. 1783 01:31:36,670 --> 01:31:37,135 Tak? 1784 01:31:37,135 --> 01:31:38,385 >> PUBLICZNOŚCI: [niesłyszalne]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Tak więc środki błędów segmentacji jest przepełnienie stosu. 1787 01:31:45,460 --> 01:31:47,060 Więc nie koniecznie. 1788 01:31:47,060 --> 01:31:49,880 Błąd segmentacji oznacza, że ​​jesteś wzruszające pamięci w sposób 1789 01:31:49,880 --> 01:31:50,880 nie powinno być. 1790 01:31:50,880 --> 01:31:54,750 Tak więc jednym ze sposobów, że dzieje się, gdy Ci przepełnienie stosu, zaczynamy dotykać 1791 01:31:54,750 --> 01:31:58,736 pamięć w sposób, który nie powinien być. 1792 01:31:58,736 --> 01:31:59,208 Tak? 1793 01:31:59,208 --> 01:32:00,458 >> PUBLICZNOŚCI: [niesłyszalne]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Więc wewnątrz nieskończonej pętli. 1796 01:32:05,830 --> 01:32:08,770 Jak to jest jak rekurencyjnego nieskończoności pętli i tak mamy kolejny 1797 01:32:08,770 --> 01:32:09,770 stos ramki każdym razem. 1798 01:32:09,770 --> 01:32:13,540 Ale wewnątrz regularne nieskończony, podczas jedno- 1799 01:32:13,540 --> 01:32:16,390 dobrze, niech nawet nie drukować F-- 1800 01:32:16,390 --> 01:32:17,040 coś zrobić. 1801 01:32:17,040 --> 01:32:18,390 Cokolwiek. 1802 01:32:18,390 --> 01:32:20,610 >> Nie zamierzamy się być coraz kolejna ramka stosu. 1803 01:32:20,610 --> 01:32:22,530 Jesteśmy po prostu się zachować zapętlenie na tej jednej instrukcji. 1804 01:32:22,530 --> 01:32:23,920 Stos nie rośnie. 1805 01:32:23,920 --> 01:32:27,290 To fakt, że każdy rekurencyjna połączenie daje nam ramkę stosu. 1806 01:32:27,290 --> 01:32:31,231 Dlatego mamy przepełnienie stosu. 1807 01:32:31,231 --> 01:32:31,728 Tak? 1808 01:32:31,728 --> 01:32:38,189 >> PUBLICZNOŚCI: Więc jeśli mówi się dostać pętla, a następnie [niesłyszalne]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Tak, jeśli wewnątrz pętli while było printf, nadal byłoby 1810 01:32:42,000 --> 01:32:42,790 nie SEG wina. 1811 01:32:42,790 --> 01:32:46,090 Ja po prostu nie chce mylić rzeczy. 1812 01:32:46,090 --> 01:32:46,610 Byłoby pętli. 1813 01:32:46,610 --> 01:32:48,225 Można dostać jeden stos ramki dla printf. 1814 01:32:48,225 --> 01:32:49,580 >> Następnie printf zwróci. 1815 01:32:49,580 --> 01:32:50,280 Wtedy bym ponownie pętlę. 1816 01:32:50,280 --> 01:32:51,460 Można dostać jeden stos ramki dla printf. 1817 01:32:51,460 --> 01:32:52,850 To powrót. 1818 01:32:52,850 --> 01:32:54,060 Pojedyncze ramki stosu. 1819 01:32:54,060 --> 01:33:00,215 Tak nie dostaniesz to nieskończona piętrzą się ramki stosu. 1820 01:33:00,215 --> 01:33:03,185 >> PUBLICZNOŚCI: [niesłyszalne]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Tak. 1822 01:33:04,040 --> 01:33:09,360 Tak to się dzieje, przepełnienie stosu ponieważ żaden z nich 1823 01:33:09,360 --> 01:33:11,600 wywołania foo wracają. 1824 01:33:11,600 --> 01:33:15,250 Więc jeśli wrócimy, to byłoby rozpocząć utraty ramek stosu. 1825 01:33:15,250 --> 01:33:17,870 I wtedy nie będzie przepełnienie stosu. 1826 01:33:17,870 --> 01:33:20,070 I dlatego trzeba sprawę podstawową dla własnych funkcji. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Tak? 1829 01:33:23,479 --> 01:33:27,375 >> PUBLICZNOŚCI: Czy rozmiar i potencjał stack na stercie samym do 1830 01:33:27,375 --> 01:33:29,880 wszystkie programy? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Mniej więcej. 1832 01:33:31,910 --> 01:33:35,090 Jest potencjalna powierzchnia stosu i stos sama dla wszystkich programów? 1833 01:33:35,090 --> 01:33:37,180 Mniej więcej. 1834 01:33:37,180 --> 01:33:40,080 Istnieją pewne randomizacji do gdzie stosu i zaczyna 1835 01:33:40,080 --> 01:33:42,400 gdzie stos zaczyna. 1836 01:33:42,400 --> 01:33:45,870 Jeśli zdarzy się, że całe mnóstwo zmienne globalne i rzeczy, to polubisz 1837 01:33:45,870 --> 01:33:49,520 zabrać z jakiegoś miejsca dla sterty. 1838 01:33:49,520 --> 01:33:54,060 >> W systemie 64-bitowym, to praktycznie ma nieskończoną pamięć. 1839 01:33:54,060 --> 01:33:55,820 Jest tylko tyle. 1840 01:33:55,820 --> 01:33:59,250 Między 32 bitów i 64 bitów, to Jest znacząca różnica. 1841 01:33:59,250 --> 01:34:02,350 >> Masz zamiar dostać dużo więcej stosu i sterty na przestrzeni 64-bitowej 1842 01:34:02,350 --> 01:34:05,810 systemu, ponieważ nie tylko więcej adresów, które mogą korzystać. 1843 01:34:05,810 --> 01:34:09,360 Ale na indywidualnym systemie, to będzie w przybliżeniu takie same ilości stosu 1844 01:34:09,360 --> 01:34:10,785 i przestrzeni kupa. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 Wszystko w porządku. 1847 01:34:15,530 --> 01:34:18,220 >> Więc ostatnią rzeczą jest kompilacja. 1848 01:34:18,220 --> 01:34:19,810 Tak więc należy wiedzieć na ten proces. 1849 01:34:19,810 --> 01:34:22,240 Są cztery duże kroki. 1850 01:34:22,240 --> 01:34:24,400 Więc pierwsza powinna być łatwe do zapamiętania. 1851 01:34:24,400 --> 01:34:25,085 Wstępne przetwarzanie. 1852 01:34:25,085 --> 01:34:28,390 Ma przedrostek pre w nim. 1853 01:34:28,390 --> 01:34:32,080 Więc to jest przed wszystkim innym. 1854 01:34:32,080 --> 01:34:34,000 >> Rzeczą do zapamiętania jest to, że hash. 1855 01:34:34,000 --> 01:34:37,250 Więc hash hash zawiera definiuje i w każdym z nich. 1856 01:34:37,250 --> 01:34:39,560 Te są wstępnie procesor dyrektyw. 1857 01:34:39,560 --> 01:34:42,030 Są to rzeczy, że pre-procesor zajmuje. 1858 01:34:42,030 --> 01:34:43,680 >> Więc co pre-procesor zrobić? 1859 01:34:43,680 --> 01:34:44,850 To naprawdę głupie rzeczy. 1860 01:34:44,850 --> 01:34:49,380 Wszystko to jest w stanie z nich są Kopiowanie i wycinanie i wklejanie operacje. 1861 01:34:49,380 --> 01:34:51,790 >> Więc hash zawiera standardowe i0 dot godz. 1862 01:34:51,790 --> 01:34:52,990 Co to robi? 1863 01:34:52,990 --> 01:34:56,610 To chwytając standardowych dot i0 h pliku i wklejenie go do góry 1864 01:34:56,610 --> 01:34:58,960 wszędzie tam, gdzie jest napisane hash zawiera średnia i0 kropka godz. 1865 01:34:58,960 --> 01:35:02,480 >> I każdy hash określić, że mamy widziałem, co to robi? 1866 01:35:02,480 --> 01:35:06,730 Jego kopiowanie wartości tego skrótu zdefiniowane jest zdefiniowany jako i wklejanie, że 1867 01:35:06,730 --> 01:35:08,500 wszędzie tam, gdzie używasz wartości. 1868 01:35:08,500 --> 01:35:13,400 Tak naprawdę nie tylko preprocesora Operacje na bazie prostego tekstu. 1869 01:35:13,400 --> 01:35:15,870 Nie robi nic inteligentnego. 1870 01:35:15,870 --> 01:35:18,920 Więc wszystko jest bardziej skomplikowane. 1871 01:35:18,920 --> 01:35:22,970 >> Więc teraz, że preprocesor jest zrobić, faktycznie kompilacji. 1872 01:35:22,970 --> 01:35:24,320 Więc co kompilacji oznacza? 1873 01:35:24,320 --> 01:35:27,310 Jesteśmy teraz dzieje z kodu c do kodu montażowej. 1874 01:35:27,310 --> 01:35:27,570 Tak? 1875 01:35:27,570 --> 01:35:28,820 >> PUBLICZNOŚCI: [niesłyszalne]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Tak, złapaliśmy, że. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 Więc kompilacji. 1880 01:35:38,660 --> 01:35:40,310 Jedziemy od c do zespołu. 1881 01:35:40,310 --> 01:35:42,470 Więc to jest rzeczywista zmiana języka. 1882 01:35:42,470 --> 01:35:45,240 Kompilacja się oznacza przejście z na wyższy poziom języka 1883 01:35:45,240 --> 01:35:47,340 niższy poziom języka. 1884 01:35:47,340 --> 01:35:50,720 >> I C jest językiem wysokiego poziomu w stosunku do zespołu. 1885 01:35:50,720 --> 01:35:52,320 Co to jest zespół? 1886 01:35:52,320 --> 01:35:56,440 Jego instrukcje, które są, dość dużo, wykonane dla procesora. 1887 01:35:56,440 --> 01:35:59,130 Ale komputer nadal nie nie rozumiem montaż. 1888 01:35:59,130 --> 01:36:01,570 Rozumie tylko zer i jedynek. 1889 01:36:01,570 --> 01:36:06,160 Tak więc następny etap montażu, co prowadzi nas od tych instrukcji, które 1890 01:36:06,160 --> 01:36:08,760 Twój procesor rozumie i właściwie tłumaczy je, aby 1891 01:36:08,760 --> 01:36:10,820 te jedynki i zera. 1892 01:36:10,820 --> 01:36:13,570 >> Tak C do montażu na system dwójkowy. 1893 01:36:13,570 --> 01:36:15,870 Ale nie mam jeszcze plik wykonywalny. 1894 01:36:15,870 --> 01:36:19,550 Więc myślę o bibliotece CS50. 1895 01:36:19,550 --> 01:36:23,070 Mamy ci z binarnego na Biblioteka ta CS50, który ma GetString 1896 01:36:23,070 --> 01:36:24,400 i GetInt i to wszystko. 1897 01:36:24,400 --> 01:36:25,700 >> Ale CS50 library-- 1898 01:36:25,700 --> 01:36:27,650 w i itself-- nie jest wykonywalny. 1899 01:36:27,650 --> 01:36:29,570 Nie ma główną funkcję. 1900 01:36:29,570 --> 01:36:32,230 To tylko kilka z binarny które można użyć. 1901 01:36:32,230 --> 01:36:41,730 Więc powiązanie jest jak zebranie wszystkich tych różnych plików binarnych 1902 01:36:41,730 --> 01:36:43,110 do rzeczywistego pliku wykonywalnego. 1903 01:36:43,110 --> 01:36:45,900 Jeden, że można wpisać kropka w kropkę z slash. 1904 01:36:45,900 --> 01:36:51,660 >> Tak to jest jak plik, który napisał, - bez względu na program, jest-- 1905 01:36:51,660 --> 01:36:53,620 Cezara kropka c. 1906 01:36:53,620 --> 01:36:55,100 Ale teraz zostały zestawione w dół do pliku binarnego. 1907 01:36:55,100 --> 01:36:56,480 Więc Ceaser kropka o. 1908 01:36:56,480 --> 01:36:59,620 I to jest nasz CS50 biblioteki binarne. 1909 01:36:59,620 --> 01:37:02,284 A oni są połączone w jednym pliku wykonywalnym. 1910 01:37:02,284 --> 01:37:02,758 Tak? 1911 01:37:02,758 --> 01:37:04,008 >> PUBLICZNOŚCI: [niesłyszalne]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Więc po pierwsze to, pamiętam, hash to jest rzeczywiście 1914 01:37:12,710 --> 01:37:13,810 Etap wstępnego procesora. 1915 01:37:13,810 --> 01:37:14,750 Ale to osobna. 1916 01:37:14,750 --> 01:37:20,730 Jeśli nie używasz żadnych funkcji, które są poza swoim jednym pliku, a następnie, 1917 01:37:20,730 --> 01:37:26,100 nie, nie trzeba łączyć wszystko ponieważ masz wszystko. 1918 01:37:26,100 --> 01:37:30,310 >> Powiedział, że printf jest związana w. 1919 01:37:30,310 --> 01:37:32,820 Jeśli kiedykolwiek używać printf, że coś , który musi być związany 1920 01:37:32,820 --> 01:37:35,740 dlatego, że nie napisał, że. 1921 01:37:35,740 --> 01:37:39,530 I rzeczywiście, printf automatycznie połączone w. 1922 01:37:39,530 --> 01:37:42,760 Wiesz, jak w wierszu poleceń lub gdy Wpisuje się, widać, że mają 1923 01:37:42,760 --> 01:37:46,690 kreska l CS50, która ma związek w bibliotece CS50? 1924 01:37:46,690 --> 01:37:49,070 Printf, i takie, że będzie być związany automatycznie. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Wszelkie inne pytania, na cokolwiek? 1927 01:37:53,930 --> 01:37:56,280 >> PUBLICZNOŚCI: [niesłyszalne]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: Łączenie? 1929 01:37:58,300 --> 01:38:03,450 Mamy całą masę różnych plików binarnych. 1930 01:38:03,450 --> 01:38:06,410 Ten przykład jest kanoniczna że używamy jest biblioteka CS50. 1931 01:38:06,410 --> 01:38:09,960 Zebraliśmy i podawany w binarny dla tej biblioteki CS50. 1932 01:38:09,960 --> 01:38:12,410 >> Chcesz korzystać getString w programie. 1933 01:38:12,410 --> 01:38:14,750 Więc idź i używać getString. 1934 01:38:14,750 --> 01:38:19,700 Ale bez mojego kodu binarnego dla GetString, podczas kompilowania kodu 1935 01:38:19,700 --> 01:38:23,140 w dół, nie można faktycznie uruchomić swój Program ponieważ GetString String jest 1936 01:38:23,140 --> 01:38:25,080 nie są jeszcze w pełni zdefiniowane. 1937 01:38:25,080 --> 01:38:29,220 >> To tylko wtedy, gdy odwołuje się w moim dwójkowy że zawiera getString że teraz wszystko 1938 01:38:29,220 --> 01:38:31,130 Dobra, może faktycznie wykonać getString. 1939 01:38:31,130 --> 01:38:32,330 Mój plik jest kompletny. 1940 01:38:32,330 --> 01:38:34,208 I mogę uruchomić tego. 1941 01:38:34,208 --> 01:38:34,697 Tak? 1942 01:38:34,697 --> 01:38:37,631 >> PUBLICZNOŚCI: Czy powiązanie konwersji binarny do wykonywalnego? 1943 01:38:37,631 --> 01:38:42,032 Więc nawet jeśli nie mają innego biblioteki, nie to i tak będzie 1944 01:38:42,032 --> 01:38:44,477 konieczne tłumaczenie [niesłyszalne]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Tak wykonywalny jest nadal w systemie binarnym. 1946 01:38:48,640 --> 01:38:51,750 To właśnie połączenie w całość pęczek plików binarnych. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> PUBLICZNOŚCI: Dziękuję bardzo. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Nie ma problemu. 1950 01:38:58,560 --> 01:38:59,540 Jeszcze jakieś pytania? 1951 01:38:59,540 --> 01:39:02,001 W przeciwnym razie, mamy wszystko ustawione. 1952 01:39:02,001 --> 01:39:02,690 Wszystko w porządku. 1953 01:39:02,690 --> 01:39:02,990 Dzięki. 1954 01:39:02,990 --> 01:39:03,590 >> [Aplauz] 1955 01:39:03,590 --> 01:39:04,490 >> PUBLICZNOŚCI: Dziękuję. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Tak. 1957 01:39:05,740 --> 01:39:06,582