>> [MUZYKI]
CAMILLE REKHSON: Cześć wszystkim.
Witamy w quizie CS50 Przegląd zerowy sesji.
Jestem Camille.
I mam zamiar jechać na niektóre tematy z tobą
Chłopaki dzisiaj pomóc przygotować się do quizu.
Więc tutaj jest nasz wyczerpujący lista tematów,
powinien zapoznać się z quizu.
Zostały one wykonane bezpośrednio z programu nauczania.
Wiem, że wydaje się to dużo.
Ale uwierzcie mi, wiesz już wszystko te rzeczy w ciągu ostatnich kilku tygodni.
>> Więc my na pewno tam na wiele z tych dzisiaj.
Ale też trochę czasu na własna recenzję te rzeczy.
A jeśli nie znali co niektóre z tych rzeczy,
pamiętaj, aby poprosić jedną z nas.
Ponadto, na oficjalnej słowa w quizie, iść ten link.
Będzie to mieć wszystkie informacje z pokoju, w którym trzeba iść,
podzielone alfabetycznie, a także kilka wskazówek, jakie materiały
należy się uczyć, i jakie pytania konkursowe można się spodziewać.
Więc upewnij się, aby sprawdzić, czy na zewnątrz.
>> Również kilka wskazówek, kiedy przygotowują się do egzaminu.
Praktyka kodowania na papierze.
Wiem, że przyzwyczaiła się do posiadania kontrola IDE dla swoich błędów dla Ciebie,
i it's-- podczas pisania go, to trochę inaczej niż o
pisać rzeczy.
Więc ćwiczyć jakiejś kodowania.
Kilka dobrych funkcji do praktyki robi to strlen i atoi,
sprawdzając, czy można napisać tych, na własną rękę.
Znać zestawów problemowych.
Większość lat istnieją pytania, które odnoszą
niektórych z problemów ustawić materiału.
Więc upewnij się, że wiesz, jak zrobić wszystkie zestawy problemowe.
>> Spróbuj zrobić kilka starych quizów pod 75 minut czasu wiązania.
Wiele quizów może być trochę długo.
Więc jest to dobry sposób, aby dać się niektóre praktyki,
i jak długo to będzie cię, i jak cię
należy podzielić swój czas, aby upewnić się, skończysz wszystko do końca.
A także, otrzymasz jedną stronę, dwustronny arkusz referencyjny
że można pisać co chce się używać podczas quizu.
Więc podczas tworzenia , że jest to również
naprawdę świetny sposób, aby studiować, ponieważ będziesz rodzaj być przeglądając rzeczy
jak piszesz to.
>> Więc wszelkie ogólne pytania na temat quiz, lub jak to działa?
Tak.
>> PUBLICZNOŚCI: Will, że lista tematów że po prostu pokazał się dla nas dostępne
w Internecie?
>> CAMILLE REKHSON: Cały slajdów pokaż zostaną zamieszczone na stronie internetowej.
Również film dzisiejszego przeglądu sesja będzie na stronie internetowej.
Więc nie przejmuj się zbytnio przez pisanie rzeczy w dół.
To wszyscy będziemy tam.
Jakieś inne pytania?
OK, więc zaczynajmy.
>> Więc jedna rzecz znać to różne typy danych i rozmiar
, które biorą na siebie.
To może być również doskonałym rozwiązaniem zapisać na karcie referencyjnej,
po prostu upewnij się, że pamiętam wszystkich.
Ale-- więc znaki to 1 bajt.
Int są 4 bajty.
Dawno, dawno, która jest w zasadzie więcej miejsca dla liczby całkowitej, jest 8 bajtów.
Pływak jest 4 bajty.
Podwójny, co w zasadzie daje więcej miejsca do przechowywania pływaka, jest 8 bajtów.
I wtedy wskaźnik jest 8 bajtów.
Wszelkie pytania na temat tego miasta?
>> Więc binarny jest inny temat mamy pokryte trochę w tym semestrze.
Więc zróbmy pewne ćwiczyć z konwersji
pomiędzy binarny i po przecinku.
Więc ktoś ma jakiś pomysł, co że pierwszy będzie?
Kogokolwiek?
Tak, to jest 42.
Więc jeśli pamiętać, każda z miejsc w binarnym
jest w zasadzie podobnie jak 2 do władzy to miejsce jest.
>> Tak, że pierwszy spot jest 2 do 0 mocy.
I mamy 0 tam, więc nic nie ma.
Kolejnym miejscem jest 2 do pierwszej potęgi.
A my mieć 1 tam, tak, że w zasadzie 2.
Kolejnym miejscem jest 2 do po drugie, co jest 4.
Nie mamy nic tam.
Kolejne miejsce na to od 2 do trzecie, co byłoby 8.
A my nie masz tam.
A my dalej.
To last-- najdalej do lewa, gdzie mamy 32.
I tak, w zasadzie mają 32 oraz 8 oraz 2, aby uzyskać 42.
Jakiekolwiek pytania?
>> PUBLICZNOŚCI: Co to jest indeks dla?
>> CAMILLE REKHSON: Indeks dolny w zasadzie mówi nam to binarny.
Więc nie ma tam 2.
Gdyby nie było like-- w następnym jeden, lub gdy mamy do konwersji po przecinku
na binarny, jest to 10 pokazuje nam, że liczba ta jest początkowo w postaci dziesiętnej.
>> PUBLICZNOŚCI: Dziękuję.
>> CAMILLE REKHSON: Tak.
Wszelkie inne pytania dotyczące tego jednego?
OK, więc spróbujmy następnego jeden to, dziesiętny na binarny.
Więc przy 50 i oddanie, które w formacie binarnym.
Jak to zrobić?
Tak.
>> PUBLICZNOŚCI: 110010.
>> CAMILLE REKHSON: Tak.
Więc jedno- łatwy sposób myśleć o konwersji z przecinku na binarny
jest to-- często pomaga pisać co różne potęgi 2 są.
A następnie przejść przez to i zobacz Bez względu na najwyższą jednym z tych
jest to, że można umieścić w do liczba dziesiętna bez przechodzenia nad nim.
>> Zatem w tym przypadku jeden z uprawnienia 2 jest 32.
Więc 32 idzie do 50.
Ale następnego moc będzie 64, co oczywiście nie pasuje do 50.
Więc najwyższy mamy jest 32.
Następny do 16.
16 i 32 oraz tylko 48.
Tak, że wciąż pasuje do 50.
Więc mamy 1 w obu z nich.
A potem, jeśli nie poddawać się w dół, jedyną rzeczą, jaką musimy w lewo
więcej 2 dostać od 48 do 50.
Tak więc mamy 1 w tej pozycji, i 0 na ostatniej pozycji.
Bo nie ma nic w W 2 do 0-tym miejscu.
Pytania dotyczące konwersji dziesiętnego na binarny?
>> Więc teraz spróbujmy robić niektóre binarny dodatkiem.
Jak podczas dodawania tych dwóch w górę?
Tak.
>> PUBLICZNOŚCI: 11100.
>> CAMILLE REKHSON: Tak.
Czyniąc dodatkiem binarnie jest dość tak samo jak robi to w przecinku.
Z wyjątkiem, jeśli masz dwa 1 na samopoczucie sumowane, 1 plus 1 oznacza 2,
ale 2 binarnie jest 1 0.
Więc trzeba nosić 1, i zachować przenoszenia tych kilku kolumnach.
A poza tym, po prostu dodaj normalnie.
Wszelkie pytania na ten temat?
Tak.
>> PUBLICZNOŚCI: Niestety, to, co jest na ostatnim miejscu?
Jest sześć numerów.
Tak skrajnej lewej kolumnie, jakie wartości chodzi?
CAMILLE REKHSON: Na tej dolnej jednej?
PUBLICZNOŚCI: Na górze jeden, na 50.
CAMILLE REKHSON: Dla 50?
Och, tak się po lewej stronie z nich jest 32.
>> PUBLICZNOŚCI: 32?
>> CAMILLE REKHSON: Tak, tak, że będzie być 32, 16, a następnie 8, 4, 2 lub 1, 0--.
Cóż, to 2 zerowego, czyli 1.
Tak.
Wszelkie inne pytania w tej sprawie?
OK, więc to będziemy robić trochę w systemie szesnastkowym.
Więc to może być trochę mniej znane,
bo wiem, że zrobiliśmy o wiele więcej z binarny.
Ale naprawdę dobry sposób, aby myśleć o systemie szesnastkowym
jest zerwać binarne Numer na 4 bitowe kawałki.
Ponieważ każde 4 bity liczba binarna jest w zasadzie
jedna z liczb w systemie szesnastkowym.
>> Więc jeśli mamy ten pierwszy, mamy w zasadzie osiem 1-tych.
Więc te można podzielić up--
>> PUBLICZNOŚCI: 255.
>> CAMILLE REKHSON: Powiedz to jeszcze raz.
PUBLICZNOŚCI: 255 w systemie dziesiętnym, lub 0xFF w systemie szesnastkowym.
CAMILLE REKHSON: Tak, to jest.
Jeśli więc, że podzielone na dwa 4-bitowe kawałki,
w zasadzie mają cztery zestawy 1.
Który jest maximum-- w zasadzie maksymalna
możemy się z 4 bitów w formacie binarnym.
A maksymalna moglibyśmy dostać za że w systemie szesnastkowym byłoby F.
Więc mamy dwa F-tych.
Wszelkie pytania na ten temat?
Tak?
>> PUBLICZNOŚCI: Możesz powtórzyć.
CAMILLE REKHSON: Jasne.
Tak więc każdy, w zasadzie, miejsce szesnastkowy jest
równoważne 4 bitów binarnego.
Tak więc najprostszym sposobem na to jest aby złamać go na 4-bitowe kawałki.
Więc w tym przypadku, mamy osiem 1-tych.
Więc jeśli się rozdzielimy te na dwa 4-bitowe kawałki,
będziemy mieć dwa zestawy czterech 1-tych.
I każdy z tych jest równoważna F
Jeśli uważasz, że about-- Wiem, że nasze mózgi są
rodzaj przewodowy myśleć więcej poprzez przecinku,
ponieważ to, co do których jesteśmy przyzwyczajeni.
Więc jeden sposób można myśleć o nim jako cztery 1 jest równa 15 w systemie dziesiętnym.
I 15 w systemie szesnastkowym jest F. Więc to inny sposób można to przez niego.
Tak.
>> PUBLICZNOŚCI: Jaki jest 0x dla?
>> CAMILLE REKHSON: 0x oznacza, że ​​jest to w systemie szesnastkowym.
Więc po prostu umieścić, że prefiks tam normalnie.
Inne pytania w tej sprawie.
OK, więc spróbujmy dzieje w drugą stronę to.
W tym przypadku mamy have-- przykro?
PUBLICZNOŚCI: [niesłyszalne].
CAMILLE REKHSON: Jedziemy na binarny.
Tak więc, idąc w drugą stronę.
Ale w tym przypadku, mamy 5 i A. Tak, jeśli myślimy o tym,
Jeśli każdy z those-- do 5 i A jest jak będzie reprezentować 4-bitowy kawałek,
jak można powiedzieć, 5 w binarnym?
>> PUBLICZNOŚCI: 0101.
>> CAMILLE REKHSON: Tak, tak, to jest 0101 częścią.
A potem, jak można powiedzieć in--
>> PUBLICZNOŚCI: 10.
CAMILLE REKHSON: Powiedz it-- przykro?
PUBLICZNOŚCI: 10.
CAMILLE REKHSON: Tak, tak, to druga część.
A potem, jeśli umieścisz te dwa razem, to
jak masz pełny binarny dla szesnastkowym.
Tak?
>> PUBLICZNOŚCI: wiedzieć, że jest 1010, nie musisz go pamiętać?
Albo można like--
>> CAMILLE REKHSON: Więc jeśli you-- differe-- tak
kiedy idziesz przez binarny, w zasadzie binarnej
ma od 0 do 9, a następnie do F jak jego 16 rzeczy.
Więc jeśli na drodze 0 do 9-- jeśli you-- 9, a następnie, w zasadzie
jeśli przekształcane jest na dziesiętne, A będzie jak 10, B będzie jak 11.
A jeśli myślisz o binarna 1010 8 i 2,
ponieważ są to dwa miejsca, które dodają do 10, które
jest dokładnie to, co jest równoważne.
Więc to rodzaj łatwe sposób myślenia o tym.
Inne pytania na szesnastkowy.
>> OK, więc teraz mamy zamiar podjąć Spojrzenie na operatorów bitowe.
Więc to na pewno może pojawią się na quiz.
Wiem, że nie mają pracował z nimi dużo.
Ale jesteśmy po prostu zrobić trochę opinia o nich.
Więc mam nadzieję, że to będzie nieco bardziej znajome.
Więc sześciu operatorów bitowe że nie są tutaj wymienione.
I pozwolili nam manipulować Poszczególne bity.
Więc I operatora jest jednym znaku &.
Nie należy mylić, że z podwójne znaku &,
co jest logiczne i że pozwala nam porównać dwie rzeczy.
>> Singiel I jest to, jak się da manipulować rzeczy bitowej.
Więc to daje nam wynik 1, jeżeli zarówno z argumentów, że mamy porównanie
są same-- lub są 1.
I pionowy pasek, OR, da us 1, jeżeli co najmniej jeden z nich jest 1.
Więc w zasadzie dokładnie jakie słowa oznaczać.
I, jeśli dwa bity są 1, 1 i 1 daje nam 1.
Ale z lub, jeżeli jest to 0 lub 1, lub 1 lub 1, w każdym przypadku,
mamy 1 jako jeden z nich.
Więc potem dostanie 1.
PUBLICZNOŚCI: Co masz na myśli które mówi, że to daje 1?
>> CAMILLE REKHSON: wynik. Rodzaj, jak ty
would-- jeśli nie 0 i 1, Wynikiem tego będzie 1-- lub 0
i 1 z wynikiem że będzie 0, przepraszam.
Tak, to był rodzaj z Wynikiem ekspresji.
A potem, ten daszek symbolem jest XOR lub XOR.
To znaczy, wyłącznie jeden lub dokładnie jeden z dwóch argumentów jest równe 1.
A potem to daje 1.
>> Trochę falowane linii jest operatorem NOT.
Tak więc w przeciwieństwie do pozostałej nimi które działają na pary bitów
Operator nie bierze tylko jeden bit, i będzie go odwrócić.
Więc jeśli give-- jeśli nie NIE 0, to daje 1.
A jeśli nie 1, to daje 0.
Tak?
>> PUBLICZNOŚCI: Jaka jest różnica pomiędzy lub jednej linii
a lub dwoma?
CAMILLE REKHSON: Tak lub dwie linie jest logiczną OR.
Więc to dla porównania dwa pełne liczby całkowite lub two--
aby sprawdzić, czy wszystko jest równe.
Albo jak to zrobić jest równa tej, OR jest równa tego typu rzeczy.
Natomiast pojedynczego barze lub, jest robienie rzeczy bitowego.
Tak.
>> PUBLICZNOŚCI: Co masz na myśli poprzez mnożenie?
>> CAMILLE REKHSON: Tak bitowe działa bezpośrednio z bitów w formacie binarnym.
>> PUBLICZNOŚCI: O, widzę.
>> CAMILLE REKHSON: Tak, tak, pracy z 0 i 1-ki.
Zrobimy kilka przykładów tego po, tak więc nie jest to zbyt skomplikowane.
A następnie dwa ostatnie są Przesunięcie w lewo i prawo przesunięcia.
Które są w zasadzie dwa mniej niż znaki lub dwa większe niż znaki.
I przesunął się trochę podana liczba miejsc
że dajesz go w kierunku.
Więc to albo przesunąć ją w lewo lub w prawo.
Tak?
PUBLICZNOŚCI: Jaka jest składnia działa?
>> CAMILLE REKHSON: Jedziemy do przejść przez przykład w sekundę.
Więc mam nadzieję, że pomoże.
Wszelkie pytania dotyczące tylko co się dzieje tutaj, before-- OK.
Tak będzie przez kilka przykładów.
Zacznijmy z I te.
Co byśmy zrobili, gdybyśmy się 0 i 1?
>> PUBLICZNOŚCI: 0.
CAMILLE REKHSON: OK, i jeśli zrobiliśmy 1 i 1?
PUBLICZNOŚCI: 1.
CAMILLE REKHSON: Tak, co jeśli zrobiliśmy 0 lub jeden?
PUBLICZNOŚCI: 1.
CAMILLE REKHSON: Jak o 1 lub 1?
PUBLICZNOŚCI: 1.
CAMILLE REKHSON: OK, jak o 0 XOR 1?
PUBLICZNOŚCI: 1.
CAMILLE REKHSON: A 1 XOR 1?
PUBLICZNOŚCI: 0.
CAMILLE REKHSON: Chłopaki są dobre.
Jak o nie 0?
>> PUBLICZNOŚCI: 1.
CAMILLE REKHSON: a nie 1?
PUBLICZNOŚCI: 0.
CAMILLE REKHSON: OK, a następnie ten ostatni jeden to trochę jeden z biegów.
Jeśli więc początkowo ustawiona x się 8 i Następnie y x jest przesunięty w lewo 3,
co nam to daje?
>> PUBLICZNOŚCI: [niesłyszalne].
CAMILLE REKHSON: Powiedz to jeszcze raz.
PUBLICZNOŚCI: [niesłyszalne].
CAMILLE REKHSON: Tak, to faktycznie daje nam 64.
PUBLICZNOŚCI: [niesłyszalne].
CAMILLE REKHSON: Więc jestem zamiar napisać to tutaj,
więc to sprawia, że ​​trochę rozsądku.
Jeśli mamy 2 do 0, 2 do 1, 2 do 2, 2 do 3 będzie 8.
A jeśli chcemy przesunąć go jeszcze 3 bity z lewej strony, która jest 2 do 4,
2 do 5, a 2 do 6 i 2 do 6 wynosi 64.
Czy to ma sens?
Tak.
>> WIDOWNI: Czy to shift wszystkie 1-ki i 0 z liczby binarnej do the--
>> CAMILLE REKHSON: Tak.
I nie musisz się martwić, na Quiz o nich jest negatywna.
Nie będzie można poradzić sobie z Negatywne zmiany w żaden sposób.
Wszelkie inne pytania na ten temat?
Tak.
>> PUBLICZNOŚCI: Jeśli to przesunięcie w prawo, jest coś, co wasn't-- niczego,
nie był pierwotnie część rzeczy 0?
>> CAMILLE REKHSON: Tak, to będzie wystarczy dodać 0 w serwisie w oryginale.
Tak.
>> PUBLICZNOŚCI: Więc co to jest 100 przesunięta w prawo, trzy razy
CAMILLE REKHSON: 100 przesunięta w prawo
tak, by podjąć wszystkie z 1 i 0 i po prostu przenieść je
w prawo, tyle razy, ile Ci, że przesunięcie w prawo.
>> PUBLICZNOŚCI: [niesłyszalne]?
CAMILLE REKHSON: Cóż, 100-- są Mówisz o 100 binarnie,
lub 100 w po przecinku?
PUBLICZNOŚCI: Przykro mi, 100 binarnie.
>> CAMILLE REKHSON: 100 binarnie, jeśli przesunąć go do prawy--
jeśli przesunięcie w prawo raz, to stają się 10.
Jeśli przesunięcie go w prawo dwa razy, ale stałby się 001.
A potem, jeśli przesunąć go ponownie, Ci rodzaj stracić trochę.
Tak, to jest po prostu 0.
Wszelkie inne pytania w tej sprawie?
Tak.
>> PUBLICZNOŚCI: Tak więc staje się to 000.
>> CAMILLE REKHSON: Tak.
OK, więc chodźmy przez Trochę ASCII matematyki.
Więc znaków może zasadniczo traktować jako liczby całkowite
na podstawie ich wartości ASCII.
Jeśli więc siedział int A równa się 65, int B równa A plus 1, int char C równa
D minus 1, a znak D jest równa 68, co by wydrukować na dole?
>> Tak, jesteśmy drukowania these-- błogosławi you-- jesteśmy
drukując je wszystkie jako Znaki na podstawie procentowego C
Więc jesteśmy w zasadzie drukowania wartość charakter wszystkich czterech
z tych zmiennych.
Jako wskazówka, 65 jest wartość ASCII kapitału A. Może to pomogło.
Co?
>> PUBLICZNOŚCI: ABCD.
>> CAMILLE REKHSON: Tak, tak, byłoby wydrukować dokładnie
ABCD, ponieważ stawiamy int A równa wartości ASCII A.
Jeśli więc drukować że obecnie jako charakter, możemy po prostu kapitału A,
A plus 1 będzie stolicą B w ASCII.
D minus 1 będzie stolicą C w kodzie ASCII.
I 68 jest wartość ASCII D. Pytania na ASCII?
Tak.
>> PUBLICZNOŚCI: Tak, cudzysłowów wokół A robi to zmienić na ASCII?
>> CAMILLE REKHSON: To uses-- go count-- pojedyncze cudzysłowy wokół A
sprawia, że ​​postać.
A jeśli masz do czynienia z to liczby form--
Tak więc, gdy, jak w tym przypadku, to jest są traktowane jako int--
wtedy byłoby zająć z jego wartość ASCII.
Tak.
>> PUBLICZNOŚCI: Czy polecasz, że mamy tabeli odniesienia ASCII?
>> CAMILLE REKHSON: Nie think--
>> PUBLICZNOŚCI: A może tylko to mieć do czynienia z tych?
>> CAMILLE REKHSON: Myślę, że by zrobić to z prostych rzeczy.
Nie sądzę, że będzie boli spisać może
co Kapitał A i małe litery A są takie, po prostu co te zakresy są począwszy.
Ale nie sądzę, trzeba wziąć wszystko przestrzeń, aby umieścić całą tablicę ASCII.
Tak.
>> PUBLICZNOŚCI: Jaka jest różnica między mówiąc char int A i C,
jak robisz na górze?
>> CAMILLE REKHSON: Więc to tylko jak to jest przechowywane w pamięci.
Ale może to też sposób leczenia.
Jak widzimy tutaj, robimy drukuj z A jako postać.
PUBLICZNOŚCI: Więc to jest to samo, co?
CAMILLE REKHSON: Tak.
Jakieś inne pytania?
>> PUBLICZNOŚCI: Tak, procent C mówi wydrukować char?
>> CAMILLE REKHSON: Tak.
>> PUBLICZNOŚCI: Więc nawet jeśli ma tylko zdefiniowana jako liczba całkowita
jeśli spróbujemy wydrukować char jako 65, to would--
CAMILLE REKHSON: To idź do w zasadzie idzie do tabeli ASCII
i dostaje niezależnie znaków w tabeli ASCII dla tej 65.
>> PUBLICZNOŚCI: Dziękuję.
>> CAMILLE REKHSON: Tak.
Tak?
>> PUBLICZNOŚCI: Więc jeśli nie% I,% I, % I,% I, byłoby to po prostu print--
CAMILLE REKHSON: Tak, jeśli nie wszystkie 4% I na to
by wydrukować ASCII wartości wszystkich czterech z nich.
Jakieś inne pytania?
OK, więc zakres, w zasadzie to pomaga nam określić, gdzie
zmienna istnieje w programie.
Więc rozmawialiśmy o dwóch różnych rodzaje zakresie, globalne i lokalne.
>> Jeśli zmienna jest zawężona w skali globalnej, to znaczy całego programu
ma dostęp do tej zmiennej.
A jeśli na całym świecie Zakres zmienna, to
Oświadczam, przed głównej funkcji.
Tak to się robi tuż nietoperza.
I wówczas cała Program do niego dostęp.
>> Jeśli jest tylko lokalnym zakresie, że zmiennego ogranicza się do konkretnego regionu.
Więc jeśli zadeklarować w ramach pętli for, tylko, że dla pętli do niego dostęp.
Albo jeśli zadeklarować w terminie specyficzne funkcje,
tylko, że funkcja do niego dostęp.
Pytania na temat zakresu.
>> OK, więc funkcja prototypowania.
Zasadniczo, ponieważ C, kiedy kompiluje, czyta z góry na dół.
Jeśli zadeklarujesz funkcję późno w kodzie,
kompilator nie wie że funkcja istnieje.
Więc co możemy użyć to prototypy, które w zasadzie poinformować kompilator,
funkcja ta istnieje, najpierw sprawdź gdyż później w kodzie.
Więc sposób, aby zrobić prototyp funkcji
Jest dokładnie tak, jak zacząć przy pisaniu funkcji.
Podać typ zwracany, nazwa funkcji
a następnie wszelkie argumenty że funkcja przyjmuje.
>> Tak więc, aby spojrzeć na szybki przykład, w tym przypadku nasz funkcję, że używamy tutaj
jest w zasadzie funkcją kostki.
Więc biorąc w całkowitej i powrót kostkę tej liczby całkowitej.
Więc dlatego, że napisałem, że Funkcja poniżej głównej funkcji,
i chcemy użyć Wyjście that-- lub my
chcą tej funkcji w naszej głównej funkcji,
kładziemy swój prototyp sposób na początku działania programu.
A potem, kiedy wzywamy że w naszej głównej funkcji,
kompilator wie, że ta funkcja jest napisane później i będzie szukać,
i będzie go używać prawidłowo.
Pytania na temat prototypów?
Tak.
>> PUBLICZNOŚCI: Więc o co chodzi?
Nie rozumiem sensu tworzenia prototypów.
Dlaczego po prostu nie ma go tam?
>> CAMILLE REKHSON: Cóż, jeśli to tu, to kiedy
można dostać się do linii kostkę x w swojej głównej funkcji,
kompilator nie mają pojęcia, że funkcja kostki faktycznie istnieje.
>> PUBLICZNOŚCI: Nie mogłeś wystarczy umieścić go przed?
>> CAMILLE REKHSON: Jest lepsze praktyki kodowania
umieścić je na swojej głównej funkcji.
To dlatego, że będzie zrobić prototypowania.
Tylko dlatego, jeśli Ciebie miał wiele funkcji,
byłoby naprawdę bałagan się przeczytanie wszystkich tych funkcji
Zanim dojdziesz do mięsa programu.
Tak, i trzeba było q--
>> PUBLICZNOŚCI: Tak, jest deklarując zmienna u góry
tak, masz do niego dostęp, sprawiają, że zmienna globalna?
Czy to jest podobne do tego gdzie jest deklarowania
tam, tak, że wiadomo, że to będzie do niego dostęp później
i można go używać?
>> CAMILLE REKHSON: Tak.
Tak.
>> PUBLICZNOŚCI: Jeżeli the-- wszelkie dodatkowe Funkcje można klucz stworzyć zewnątrz
tej rzeczy, or--
>> CAMILLE REKHSON: Tak, jeśli jesteś tworzenie inne functions-- main
Sam jest function-- więc jeśli tworzysz inne funkcje,
powinny być one na zewnątrz.
Tak?
>> PUBLICZNOŚCI: Co to jest procent D?
CAMILLE REKHSON: Procent D to samo jako procent I.
Odnosi się do liczby całkowitej.
Tak.
>> PUBLICZNOŚCI: Więc co jest int main robisz?
Co to był za nieważne?
CAMILLE REKHSON: Void mówi zajmuje się żadnych argumentów.
PUBLICZNOŚCI: [niesłyszalne].
CAMILLE REKHSON: Czy możesz mówić trochę głośniej, przepraszam?
PUBLICZNOŚCI: Tak, przepraszam, dlaczego umieścić unieważnić dla pierwszego,
i int wejście dla drugiego?
CAMILLE REKHSON: Och, na dwa different-- za główną funkcję
w stosunku do funkcji kostki?
Tak więc w głównej funkcji używamy nieważne, ponieważ nie
ma parametry są podejmowane.
Podczas gdy w kostce Funkcja, mamy wejście.
Dlatego to mówi int, wejście, ponieważ nie są argumenty, że jesteśmy
biorąc w uruchomić naszą funkcję.
Tak.
Czy są pytania?
>> OK, a następnie szybko zmiennoprzecinkową nieścisłości.
Więc mamy nieskończenie wiele liczb rzeczywistych.
Ale są tylko skończona liczba bitów
które możemy użyć w celu wyświetlenia tych Liczby i ich reprezentować.
Tak więc to w końcu z jakiegoś niedokładności.
A twoje numery nie będzie zawsze bardzo dokładnie, co
myślisz, że są one, gdy jesteś czynienia z zmiennoprzecinkowych.
To jest po prostu coś, dobrze wiedzieć.
Pytania w tej sprawie?
Tak.
>> PUBLICZNOŚCI: Czy to odnosząc do idei bit przepełnienia
to było na wykładzie?
Było, że coś oddzielić?
>> CAMILLE REKHSON: Oni całkowicie oddzielone, tak.
Ok świetnie.
PULAK Goyal: Cześć wszystkim.
Nazywam się Pulak i będę się będzie nad wskaźnikami.
OK, więc niech najpierw pomyśleć Pamięć o tym, co wygląda.
Więc jak widać tutaj, podjąć pamięć i dzielimy go
w bandę bloków.
A my odwołać każdego blokować przez adres, prawda?
A czy ktoś pamięta, jaki rodzaj Zapis używamy do określenia adresu?
>> PUBLICZNOŚCI: szesnastkowy, 0X.
>> PULAK Goyal: szesnastkowy, prawda?
Więc 0X oznacza, że ​​jesteśmy mówić o systemie szesnastkowym.
OK, więc jak możemy stworzyć wskaźniki?
Więc bierzemy typ, my umieścić it-- dodać gwiazdkę do niego,
a następnie dodać nazwę zmiennej.
Więc przykłady, które widzieliśmy są int gwiazda x, gwiazda char y, i pływak rozpocząć z.
Więc kiedy mówię int gwiazdą x, może ktoś mi powiedzieć,
co mam niby mówisz nie?
>> PUBLICZNOŚCI: Lokalizacja dysku.
>> PULAK Goyal: Niestety, to co?
Możesz to powtórzyć?
PUBLICZNOŚCI: Lokalizacja dysku.
>> PULAK Goyal: Tak actually-- więc co Miałem na myśli, kiedy mamy gwiazda int x,
mówimy jest tworzenie wskaźnik, i to
można zapisać adresu Zmienna to int, prawda?
Więc z gwiazdą char y, tworzymy wskaźnik
które mogą przechowywać adres zmiennej, która jest char.
Więc to ma sens dla każdego?
Ok fajnie
>> OK, więc ze wskaźnikami, są dwie ważne operacje możemy zrobić.
Jest odwołanie, a Jest wyłuskania.
Tak?
>> PUBLICZNOŚCI: Czy możesz iść trochę wolniej?
>> PULAK Goyal: Jasne.
Tak, SO- Tak, zadawać pytania, jak przejść wraz jeśli you-- jeśli coś jest niejasne.
Mamy więc odwołanie i wyłuskania.
Tak więc, jeśli chcesz uzyskać adres zmiennej, a następnie użyć znaku handlowego.
Więc powiedzmy, że oświadczył, int x gdzieś.
I chcę, aby uzyskać adres, który i przekazać je, chciałbym zrobić ampersand x.
A gdy chcesz uzyskać Wartość związana z wskaźnikiem,
użyć dereference Operator, który jest gwiazdą.
>> Więc powiedzmy, że miałem gwiazda int x, i Miałem go wskazując na coś.
Jeśli chcę, aby uzyskać wartość tego, co to jest wskazując, że po prostu zrobić gwiazdki x.
Czy to jasne?
Wszelkie pytania na ten temat?
Tak.
>> PUBLICZNOŚCI: Tak generalnie, ci nie będzie w stanie zrobić w punkcie x i gwiazdy
x o tym samym x.
Czy to jest poprawne?
Gdyż jeśli x jest zmienna, to masz
zrobić w punkcie x, aby ta jest wskaźnikiem.
Ale jeśli x jest wskaźnikiem, to trzeba zrobić gwiazdki x uzyskać zmienną.
>> PULAK Goyal: Tak, więc pytanie o to, kiedy
nie używamy star-- kiedy należy użyć gwiazdki,
i kiedy używamy ampersand, i możemy
używać tego samego typu o zmiennej?
Więc zwykle, jeśli masz, Na przykład, int x,
byś się głównie za pomocą handlowe i uzyskać adresu tego.
Bo to nie robi sensu przychylne do x.
Natomiast gdybyśmy mieli gwiazda int x, chcesz używać operację wyłuskiwania
bo to nie ma sensu stosowanie co X, w tym przypadku.
Czy to ma sens?
>> PUBLICZNOŚCI: Więc nie możesz i i wskaźnik?
PULAK Goyal: Więc technicznie, w rzeczywistości
może zrobić ampersanda wyżła.
Ale to się z Zakres tej klasy.
Dla purpose-- dla swoich chłopaków " cele, gdy masz wskazówki,
chcesz użyć operatora wyłuskiwania aby uzyskać wartość związaną z tym.
A gdy masz regularne zmienne, jak int x,
chcesz użyć znaku handlowego Operator uzyskać adresu tego.
OK?
>> OK, więc spójrzmy na wskaźniki i to, co dzieje się pod wyciągiem.
Tak więc pierwszą rzeczą, jaką zrobiłem tutaj jest deklarowana int x jest równe 5.
Adres tej zmiennej jest 0x04, a wartość to 5.
Zobaczmy więc, co się dzieje, w następnej linii.
Więc teraz możemy zadeklarować wskaźnik.
Jego adres to 0x08, a jego wartością jest adres x.
Czy to ma sens dla każdego?
Wszelkie pytania na ten temat?
>> OK, a teraz zobaczmy, co dzieje się w następnej linii.
Więc z tej nowej linii, mamy adres kopia jest 0x10,
a jego wartość wynosi 5.
Więc z powodu mamy pięć Jest to powiedział, że wyłuskiwania
wskaźnik, który zadeklarowaliśmy int gwiazdę.
I tak to went-- kiedy wyłuskanie tego, to powiedział, OK, co jest w 0x04 gniazda.
I udał się do tego.
A co x jest x0-- 0x04, a wartość to 5.
Czy to ma sens?
Tak?
>> PUBLICZNOŚCI: Dlaczego adres kopii w tylko 4 bajty powyżej x wskaźnik?
>> PULAK Goyal: Tak, jest to błąd on--
>> CAMILLE REKHSON: Tak, tak, pamiętam to jest napisane w kodzie szesnastkowym.
PULAK Goyal: O, tak.
CAMILLE REKHSON: Więc to jest rzeczywiście 8 i 16
dlatego, że powiedział, że, wskaźnik, należy pamiętać,
w naszym IDE będzie długość 8 bajtów.
PULAK Goyal: Tak.
Więc po prostu się jasne, wskaźniki są długość 8 bajtów.
Int jest 4 bajty.
Więc dlatego co skoczył od 0x04 do 0x08
Jest tak, ponieważ musieliśmy zrobić skok 8 bajtów.
A potem for-- od Kopia jest tylko int,
to 4 bajty, czyli połowę z 8 bajtów.
Więc po prostu przejść do 0x10, która jest dwa z dala od 0x08.
Jakieś inne pytania?
OK, let's-- tak?
>> PUBLICZNOŚCI: Dlaczego nie jest wartość int kopii
tylko the-- dlaczego jest 5 zamiast 0x04?
>> PULAK Goyal: OK, dlaczego jest 5?
OK, więc kiedy the-- więc niech pierwszy myśleć o tym w kategoriach typów.
Więc mówię int kopię jest równa gwiazdy wskaźnika.
Więc jaki jest rodzaj wskaźnika?
Jest to int gwiazdą.
A kiedy dereference że typ staje int.
Co więc możemy spodziewać się zapisać tutaj jest rzeczywiście int.
Czy to ma sens?
PUBLICZNOŚCI: Oczywiście, trochę.
PULAK Goyal: Więc zwykle, gdy myślisz, że pod względem rodzajów,
to pomaga zrozumieć, co jest Typ wartości, które powinny iść tam.
Więc zazwyczaj można wykluczyć wiele z tych typowych błędów
przez myślenie w kategoriach typów.
Pozwól mi przejść przez trochę bardziej zjeżdżalniami.
I możemy się pytania na koniec sekcji wskaźnika.
OK, więc mamy program buggy tutaj.
I tak nie anyone-- ktoś może powiedzieć, mi co jest nie tak z tym programem?
Dobra, więc co mamy spodziewając się zrobić tutaj
jest-- to, co chcemy zrobić, jest zmienną int zabrać x
i obrócić it-- sprawiają, że równe 5 zamiast 3, a następnie wydrukować, że.
Ale to się nie dzieje.
Czy ktoś może mi powiedzieć dlaczego?
Tak?
>> PUBLICZNOŚCI: Gdy funkcja to_five trwa x jak to argumentem,
nie bierze x sobie, ale zamiast tworzy kopię, a, z niego.
I to tworzy operacje na tym.
Ale z tego powodu, nie musisz zmienić rzeczywiste wartości x.
Skoro jesteś [niesłyszalne].
>> PULAK Goyal: Prawo, Dobrze, więc kiedy zadzwonić
to_five funkcji, jakie robimy jest myślenie,
daj mi kopię tego Wartość tej funkcji.
To funkcja, a następnie, będzie i robi jakieś manipulacje.
Ale gdy wraca, to teraz się z zakresu podstawowej funkcji tutaj.
I tak x pozostaje w istocie równy 3, i drukowanie 3.
OK, więc zobaczymy jak to się dzieje.
>> OK, więc nie ma nic oświadczył.
Następnie tu x jest równe 3.
A teraz to jest-- w pozycji dwa, w jeszcze nie jest w zasięgu.
A teraz idziemy do pozycji trzy, gdzie teraz przyjmuje wartość 3.
Na czterech, teraz zmienić od a do 5.
Ale teraz, kiedy wrócić do pięć, które jest instrukcja print,
a jest teraz poza zakresem.
I x jest nadal równa 3.
Czy to ma sens dla każdego?
OK, to teraz porozmawiajmy o tym, jak możemy użyć wskaźników, aby to naprawić.
Czy ktoś ma jakieś pomysły, jak może naprawić za pomocą wskaźników?
>> PUBLICZNOŚCI: Bierzesz w int gwiazdy zamiast int dla to_five.
>> PULAK Goyal: Niestety, można mówić?
>> PUBLICZNOŚCI: Bierzesz w int gwiazdy zamiast int dla to_five.
PULAK Goyal: OK, tak.
Więc pass-- zamiast przekazywać tylko wartość, niech przekazać go przez odniesienie.
Ta nowa funkcja, prawda?
I tak przez przekazanie adresu w, my może zrobić manipulacje na adres.
A więc jesteśmy w rzeczywistości, W rzeczywistości, zmiana x.
Zobaczmy więc, jak to działa.
>> OK, więc w tym przykładzie możemy naprawić go.
Zmieniliśmy nasz podpis z to_five podjąć w int
gwiazda, a nie tylko int tutaj.
Potem wyłuskanie tego 5 A i przypisać do niego.
A teraz to będzie w rzeczywistości, wydrukować 5.
Zobaczmy więc, jak tu pracować kroki.
>> Tak więc w pierwszym etapie, nic jeszcze zgłoszone.
Więc, w drugim etapie, mówiliśmy x jest równa 3,
ale nadal jest poza zakresem.
Teraz w trzeciej linii, mamy x jest nadal równa się trzy.
A teraz, minęło in-- co przechowywane w jest teraz adres x.
Czy to ma sens wszyscy, jak dostaliśmy to?
Dobrze, mamy amper-- to jak minęliśmy znak ampersand x do funkcji
to_five.
A potem do następnej linii, co robimy, to my dereference a.
>> I wyłuskania a, jesteśmy w stanie zmianę wartości X od 3 do 5.
Ponieważ x mieszka pod tym adresem 0x12.
I w końcu, gdy Wracając do głównego,
chociaż a jest obecnie z Zakres, że posiada, w rzeczywistości, zmianie X.
I to jest 5.
Wszelkie pytania na ten temat?
Tak?
>> PUBLICZNOŚCI: Czy możesz mi powiedzieć, co ampersand x było?
Myślałem, handlowe i było jak I.
>> PULAK Goyal: Tak, więc korzystać z tego samego symbol dla wielu różnych rzeczy.
Więc, kiedy have-- w ten przypadek, kiedy trzeba,
I guess-- więc w tym przypadku, gdy masz do czynienia ze wskaźnikami,
kiedy można umieścić znaku handlowego przed z int, int, lub zmiennej char,
lub przepływu, co mówisz to, daj mi adres tego.
Ale co pan myśli, kiedy indziej należy użyć znaku handlowego jest, powiedzmy,
w instrukcji if.
Masz prawdziwe, a niektóre zmienne że oceny w pewnym Boolean,
i inne zmienne że zweryfikować pewne Boolean
i chcesz dostać i to.
Następnie należy użyć znaku handlowego.
1 głośnik: Tak, tak, właśnie dzisiaj, mamy mówił o trzech różnych zastosowań
z ampersand.
Mamy dwóch znaków handlowego, który jest co Pulak właśnie opisane.
Mamy jeden znaku handlowego, który jest to, co opisane Camille
na początku, który jest jednym znaku &.
I to jest dla bitowego AND.
I zauważyć, że zarówno AND-- warunkowe lub, przepraszam,
I logiczne i bitowe I ci, mają dwa numery, prawda?
To było coś, Ampersand coś znaku &,
coś ampersand coś.
Tutaj, kiedy tylko mają ampersanda coś, co jest wyłuskania.
>> PULAK Goyal: Tak, wielkie pytanie.
Tak.
>> PUBLICZNOŚCI: Dlaczego w kolejce 5a i gwiazda się stać N / A?
Dlaczego nie po prostu rodzaj zachowują Te same wartości z poprzedniej linii?
>> PULAK Goyal: Bo my wyszliśmy z funkcji.
A więc co happens-- tak what-- teraz jesteśmy
z zakresu stosowania tej funkcji, co dzieje się w rzeczywistości
jest te są usuwane z pamięci.
Tak.
>> PUBLICZNOŚCI: Między 3 lub 4 gwiazdki A równa się 5.
PULAK Goyal: Tak.
PUBLICZNOŚCI: Co to dokładnie oznacza?
PULAK Goyal: Co to oznacza?
PUBLICZNOŚCI: Tak.
PULAK Goyal: Tak Pytanie było, co jest
that-- co robisz w Internecie gdy mówimy, gwiazda jest równa 5?
Więc pamiętam Star operator wyłuskiwania.
Kiedy więc, w tym przypadku jest to wskaźnik.
To int gwiazdą.
Kiedy więc dereference A przez za pomocą gwiazdki, co mówimy
jest, przejdź do tego, co jest przechowywane w adres, przechowywane w A-- tak take-- więc,
teraz, ma jedne Adres przechowywane w nim.
Idź gdzie ten punktów adresowych do i teraz zmienić cokolwiek to jest do pięciu.
Tak.
>> PUBLICZNOŚCI: Czy można powiedzieć, to w prostszy sposób?
Zmianę adresu do 5.
>> PULAK Goyal: Nie jesteśmy zmianę adresu do 5.
A ma jakiś adres w tym, co jest adres zmiennej zainteresowania.
A więc to, co mówimy kiedy dereference jest,
teraz chcemy change-- jesteśmy teraz odwołanie
procentowej zmiennej bezpośrednio.
Czy to ma sens?
>> Głośnik 1: Inny sposób myślenia z jest go-- więc jest adres.
Gwiazda twierdzi, że udać się do zajęcia i spojrzeć na jego wartości.
A teraz ustawić jej wartość na 5.
Więc mówi, przejdź do adres X, które
będzie to, co jest przechowywane w sposób i zmienić go na 5.
PULAK Goyal: Tak?
PUBLICZNOŚCI: Więc sytuacja jest, gdy wskaźnik będzie, adres.
Ale wartość jest przypisany wartość na podstawie adresu.
PULAK Goyal: Tak.
Wszelkie inne pytania na ten temat?
PUBLICZNOŚCI: Mam pytanie.
PULAK Goyal: Tak, przepraszam.
PUBLICZNOŚCI: Więc kiedy store-- tak jeśli mówisz [niesłyszalne] a.
PULAK Goyal: Tak.
PUBLICZNOŚCI: Czy trzeba przechowywać X z ampersand?
Dlaczego nie można po prostu powiedzieć, x przed int [niesłyszalne]?
PULAK Goyal: SO-
PUBLICZNOŚCI: [niesłyszalne].
PULAK Goyal: Więc jest twój question-- och.
Więc pytanie brzmi, dlaczego nie we-- do to_five funkcji, dlaczego nie możemy
po prostu zdać x, prawda?
>> PUBLICZNOŚCI: Racja.
>> PULAK Goyal: OK, tak, tak, to znowu wraca do naszej dyskusji na temat typów.
Więc to_five funkcja jest obecnie spodziewa się typ int gwiazdy.
Więc co to jest typ x?
X jest tylko int.
Ale co ta funkcja oczekuje, jest int gwiazdą.
Więc to, że spodziewa się zmienną ma adres przechowywany w nim.
Więc tak you-- umieścić ampersand, a więc to,
jak przejść w adres, który jest now--
i interpretuje, że jako int gwiazdy, tak.
Świetne pytanie.
Wszelkie inne pytania w tej sprawie?
Ok fajnie.
>> OK, to teraz porozmawiajmy o wskaźnik arytmetyki.
Więc tutaj, dodawanie i odejmowanie i ustawia wskaźnik
przez I razy większa od rodzaj bajtów wskaźnika.
Warto więc przyjrzeć się, jak to wygląda.
Więc, mamy zadeklarowane int x równa 5.
A teraz mamy zamiar zadeklarować wskaźnik y, i przechodzą w adresie X istnieje.
Mamy więc, że.
Tak więc x przechowuje się 0x04.
Więc teraz, y jest równe.
A może ktoś mi powiedzieć co myślą się stanie, gdy robimy y oraz równa się 1?
Tak?
>> PUBLICZNOŚCI: Czy zmieni się na 0 razy w 0 8?
>> PULAK Goyal: Rozmiar i type--
>> PUBLICZNOŚCI: Ty jesteś w ruchu adres.
PULAK Goyal: Tak, to was-- tak.
Więc dobrze.
Tak to się zmieni do 0x08.
I because-- więc chcesz skorzystać z tej Formuła 1 razy większy od wskaźnika
i wskaźniki są size--
>> [STUDENCI szmer]
>> PULAK Goyal: Racja.
>> [STUDENCI szmer]
>> Głośnik 1: Więc typem, który wskaźnik pokazywał to--
>> PULAK Goyal: Czy, tak, tak, to jest 4 bajty.
>> Głośnik 1: Więc int są 4 bajty.
>> PULAK Goyal: Czyli gdybyśmy A-- Miejmy powiedzieć, że oświadczył, myślę, char.
Co by that-- więc powiedzmy, że mają char x równa lub coś.
I mieliśmy adres, że w 0x04, co by y oraz równa 1 teraz zrobić?
Przepraszam, co?
>> PUBLICZNOŚCI: 0x05.
PULAK Goyal: 0x05, w prawo.
Czy każdy widzi?
OK, a teraz załóżmy, że jest to pływak.
Co by się stało?
Kogokolwiek?
Więc pływaki są jak wiele bajtów?
>> PUBLICZNOŚCI: 4 bajty.
>> PULAK Goyal: Racja.
Tak więc byłoby to samo, co ten.
Chłodny.
OK, a teraz porozmawiajmy o wskaźniki i tablice.
Więc widziałem to na Poprzednie dwa zestawy p,
gdzie możemy treat-- więc tablice i wskaźniki nie są tym samym.
Ale tablice możemy traktować jako wskazówki.
Więc tutaj mamy tę tablicę Tutaj, która ma trzy otwory.
W pierwszym slot-- my mają jeden, dwa i trzy.
>> Więc jeśli we-- więc możemy przypisać że mówiąc, mamy tablicę,
wyłuskanie tego.
A potem, kiedy wyłuskiwania , że to, co mamy rzeczywiście robi
odnosi się do tej samej szczeliny.
Tak gwiazda tablica jest równa 1.
Mamy could- jak można piszemy that-- co
alternatywny sposób możemy napisać, że?
>> PUBLICZNOŚCI: Array 0 równa 1.
>> PULAK Goyal: Dokładnie, nie każdy widzi?
Tak samo z tutaj.
Więc kiedy mamy tablicę plus 1, mamy do-- tak even--
pamiętam z arytmetyki, że tak mówił o, gdy robimy plus 1
lub przenieść go przez 4 bajty, prawda.
Czy każdy widzi?
A to z boku, kiedy wyłuskiwania że możemy ustawić, że do 2.
A to, jak ustawić następny blok do 2.
I tak alternatywny sposób napisać byłoby również wspornik tablicy
0 Uchwyt jest równa 1.
>> PUBLICZNOŚCI: Czy potrzebujesz nawiasy?
>> PULAK Goyal: Tak, dlatego, że jesteś wyłuskania całej ilości
Tablica plus 1.
OK, a samo na tablicy plus 2.
Wszelkie pytania na ten temat?
Tak.
PUBLICZNOŚCI: Więc tablica jest automatycznie ustawiany na 0?
>> PULAK Goyal: Array jest-- Przepraszam, co?
>> PUBLICZNOŚCI: Array 0.
Adres tablicy jest po prostu 0.
>> PULAK Goyal: Więc pytanie było, jest adresem tablicy tylko 0?
Tak więc, nie, tablica ma jakiś adres.
Kiedy więc wyłuskanie tego, that's-- tak można myśleć about--
dosłownie jak wskazując kursorem do początku tablicy.
Tak, że ma jakiś adres.
Nie wiemy, co to jest.
Ale kiedy dereference nim wiemy to początek tablicy.
I tak, kiedy poruszamy się przez 1, po prostu przesuwając
w stosunku do których, że adres był.
Jakieś inne pytania?
Tak?
>> PUBLICZNOŚCI: Więc jeśli nie Wspornik tablicy oraz 1--
PULAK Goyal: Niestety, Ja-- można mówić?
PUBLICZNOŚCI: Tak, jeśli nie Wspornik tablicy [niesłyszalne].
Więc jeśli umieścisz pointer--
PULAK Goyal: Niestety, nie mogę Cię usłyszeć.
Czy możesz powiedzieć to jeszcze raz?
>> PUBLICZNOŚCI: Jesteś OK.
>> PULAK Goyal: OK, przepraszam.
Ok fajnie.
Any-- tak.
Więc kiedy idziesz w uchwycie tablicy 3--
>> PULAK Goyal: Tak.
>> PUBLICZNOŚCI: --isn't there-- nie to cztery miejsca takich jak 0, 1, 2 i 3?
Dlaczego nie int tablicy 2?
>> PULAK Goyal: Nie, tak po prostu konwencja od C jest-- kiedy zadeklarować tablicę,
we-- numer kładziemy tam to, ile slotów chcemy.
A indeksy tablicy są faktycznie tablica 0, tablica 1 i tablica 2.
Więc to tylko konwencja na jak deklarowania tablic.
Tak, jakieś inne pytania?
Tak.
PUBLICZNOŚCI: Więc nadal jesteśmy mówić o wskazówki, prawda?
PULAK Goyal: Tak.
PUBLICZNOŚCI: Czy możesz jeszcze zrobić gwiazda na tablicy 0 równa się 1?
PULAK Goyal: Nie, nie, SO- OK, więc pytanie było mogłem
po prostu zrobić gwiazdy wspornik tablicy zero, a potem mówią, że równy 1.
Tak więc, nie, co mówimy tutaj jest to, że możemy think--
tablice możemy traktować jako wskazówki.
Więc have-- co mamy Powiedzenie to mamy dwa sposoby
do teraz odwoływać się do tego samego bloku.
Więc doing-- jeśli masz tablicę zerowy, rodzaj, który jest obecnie int.
A jeśli zdecydujesz się na gwiazdę, która, masz nieprawidłowy rzeczy.
Więc to, co mówimy tu jest istnieją dwa alternatywne sposoby
odnosi się do tego samego bloku.
Możesz też zrobić tablicę Uchwyt 0 jest równa 1.
Albo możesz zrobić dereference macierz, i, że równy 0.
Więc po prostu dwa sposoby robi to samo.
Tak.
>> PUBLICZNOŚCI: Dlaczego nie jest to rozmiar int 1 dodać to--
>> PULAK Goyal: Rozmiar int 1.
>> PUBLICZNOŚCI: Bo to przesuwając jeden off.
>> PULAK Goyal: Bo to tak, jak C działa.
To tak, jak wskaźnik arytmetyka jest zdefiniowana.
To zajmie wskaźnik.
A potem cokolwiek dodać do niego, to będzie pomnożyć
o wielkości co sklep wskaźnik jest, tak.
Tak.
>> PUBLICZNOŚCI: Więc mówisz, możemy traktować wskaźniki i tablice takie same,
ale, że są one różne.
Więc co sprawia, że ​​są różne?
Co możemy nie zrobić z jeden, ale nie inne?
>> PULAK Goyal: Dla celów niniejszej klasy, myślę it's-- co zrobić you--
>> 1 głośnik: Tak, we-- OK, więc, dla Przykładowo, jeśli przydzielić pamięci
i masz wskaźnik do liczbą całkowitą, np.
Jeśli próbowałeś uruchomić robi arytmetyki wskaźników
i wykracza poza ilością pamięci Ci przydzielone, można uruchomić do błędów.
Wiemy, z tablicami, mamy powiedzieć z wyprzedzeniem, OK,
chcą allocate-- to zasadniczo mówi, chce przeznaczyć
wystarczająco dużo miejsca dla trzech liczb całkowitych.
A więc teraz możemy traktować pamięć jakby mamy wszystkie trzy z tych liczb.
Czy tego rodzaju ma sens?
>> PULAK Goyal: Tak.
Tak.
>> PUBLICZNOŚCI: Tak gwiazdą tablica, jest to, że przypisanie 1
z indeksem macierzy 0?
PULAK Goyal: Tak.
>> PUBLICZNOŚCI: Tak, to jest po Następne dwie linie w zakresie the-- I
Rozumiem, że starasz w użyciu arytmetyki wskaźników tutaj,
ale znowu nie rozumiem co wskaźnik arytmetyka jest.
Więc tablica plus 1, jesteś mówiąc, że jesteś teraz
będzie chciał rozmawiać o pierwszy indeks do tablicy.
>> PULAK Goyal: Prawo, a więc Dlatego, że działa to tablica,
tutaj, możemy myśleć jako int gwiazdy.
I tak, gdy mamy arytmetyki wskaźników na nim, pamiętaj o wzorze w którym
bierzemy the-- Myślę, że niezależnie aktualny adres,
a gdy dodamy 1 do niej rzeczywiście
pomnożyć 1 wielkością rzecz jesteśmy manipulacji.
Tak więc w tym przypadku, wielkość int.
A potem przenieść go przekazania przez tyle.
>> Głośnik 1: Więc udawaj masz gwiazdę b tablicy.
PULAK Goyal: OK, tak.
Głośnik 1: Ze swojej strony.
Przejdź tutaj.
PULAK Goyal: Albo Ja tylko tak.
Więc here-- OK, więc tablica u początek, to tylko tutaj.
Kiedy więc dereference tablicy, byliśmy tylko odnosząc się do pierwszego bloku tutaj.
Ale teraz, kiedy mam zrobić tablicę plus 1, które jest-- tej strzałki jest teraz tutaj.
Czy to ma sens?
Racja, bo ten blok jest od wielkości int, który jest 4 bajty.
I tak, co robimy, to my jesteśmy porusza ten wskaźnik przez ponad 4 bajtów.
Zawsze, gdy robimy arytmetyki na to, że będzie zawsze
przenieść go skokowo o 4 bajty.
Bo to jest jak int gwiazdy.
Czy to ma sens?
OK.
>> PUBLICZNOŚCI: Więc rzeczy w tablicy Było 5 bajtów, chcemy przenieść go 5 bytes--
>> PULAK Goyal: Dobrze, więc jeśli mieliśmy char gwiazda, chcemy przenieść go tylko o 1 bajt.
Tak więc w przypadku gwiazd char, że to po prostu przenieść go o 1.
PUBLICZNOŚCI: Aby w Następnie musisz gwiazdę.
PULAK Goyal: Tak, tak, czy to ma sens?
Głośnik 1: Możemy porozmawiać o tym później.
PULAK Goyal: Tak, tak, na pewno.
Ok fajnie.
Przejdźmy do następnej części.
Głośnik 1: Och, OK, fajnie.
Tak, to ja.
Wszystko w porządku, niesamowite.
OK, fajnie, więc teraz jesteśmy na trochę Więcej informacje na temat pamięci.
Ponadto, doceniam fakt, że że idą dość szybko.
To dużo materiału, aby uzyskać przez godzinę i pół.
Ale czy są jakieś tematy, chce iść bardziej pogłębione w,
będziemy mieć godziny pracy w tym tygodniu
gdzie można porozmawiać z nami jeden na jednego.
Albo może po prostu wymyślić u końca i będziemy rozmawiać o rzeczach.
I jak zawsze, czuję do zadawania pytań.
Niesamowite.
Więc tutaj jest nasz obraz pamięci widzieliśmy w wykładzie miliard razy.
I wiemy, że ten stos rośnie od dołu
i sterta rośnie w dół.
A jaka jest różnica między rzeczami które trzymamy na stercie i rzeczy
które trzymamy na stosie?
Ktoś rzucić coś tam.
Tak.
>> PUBLICZNOŚCI: Czy stos na rzeczy, które są po prostu
zmienne, nietrwałe, że jesteśmy po prostu deklarując przy użyciu niektórych funkcji?
Głośnik 1: Piękny, tak.
Więc za każdym razem, gdy, powiedzmy, powiedzieć, że jesteśmy w funkcji,
i po prostu mają pewne zmienne lokalne.
Ci, zamiar skończyć na stosie.
Jeśli zamiast nazywamy malloc i rzeczywiście przydzielić pamięci,
że zawsze przychodzi ze sterty.
Więc tak fajne?
>> A więc pamiętać, że jakiekolwiek pamięci które można przydzielić za pomocą malloc,
, że skończy się na stercie.
A jeśli zapomnisz za darmo to, Komputer użytkownika
Nie będziemy wiedzieć, że jesteś z nim zrobić.
Więc to po prostu będzie spędzać czas tam w pamięci.
I jesteś w istocie przecieki, że pamięć.
Tracisz go.
Bo nigdy nie powiedział, komputer, hej Skończyłem go używać, zachęcamy do korzystania,
umieścić inne rzeczy tam.
Chłodny.
Jakieś pytania?
Tak.
>> PUBLICZNOŚCI: Więc co to pamięci jest stos?
Nie dynamiczne paszy, delegowany?
Co by to nazwać?
>> Głośnik 1: Jasne, więc mogłem myśleć o tym jak zmienne lokalne.
Rzeczywiste wywołania funkcji zamiar stos.
Cokolwiek innego?
Tak?
PUBLICZNOŚCI: Jak za darmo pamięci można dodać do the--
Głośnik 1: Jasne, więc jeśli przydzielić pamięci na stercie, zadzwonić malloc.
I tak to, że daje z powrotem wskaźnik do jakiegoś adresu w pamięci.
Więc mówisz, że nazywa się ten wskaźnik, prawda?
Następnie, po prostu powiedzieć bezpłatny wskaźnik.
A to zwalnia pamięć.
Chłodny.
Inne pytania?
Tak.
>> PUBLICZNOŚCI: Co dynamicznie przydzielane na myśli?
>> Głośnik 1: dynamicznie przydzielane Oznacza, w trakcie programu.
Więc kiedy zadzwonisz malloc w w połowie programu,
na początku programu nie ma przydzielone pamięci.
I tak jak w komputerze krok po kroku tego kodeksu,
to będzie przydzielić pamięci.
Więc to, co rozumiemy przez dynamicznie.
Dobre pytanie.
Tak?
PUBLICZNOŚCI: Podczas definiowania Tablica w nawiasach kwadratowych,
robi to nadal [niesłyszalne]?
Głośnik 1: To jest dobre pytanie.
Myślę, że jeśli przydzielić tablicę, faktycznie stawia go na stosie.
Nie jestem pozytywnie że tak mnie nie cytować.
>> GŁOŚNIK 2: Myślę it-- tak stawia go na stosie.
>> Głośnik 1: Stawia go na stosie.
OK, fajnie, potwierdzone.
Inne pytania?
Tak?
>> PUBLICZNOŚCI: Kiedy delegować malloc, nie komputer automatycznie
przydzielić pamięci dla zmiennych?
1 głośnik: Tak, dla Twoje lokalne zmienne,
automatycznie umieszcza pamięci na stosie.
PUBLICZNOŚCI: Więc co jest punkt za pomocą malloc?
Głośnik 1: Jaki jest punkt za pomocą malloc?
Więc widzieliśmy kilka przykładów, takich jak, na przykład, przy użyciu swap
gdzie chcemy zakres zmienna być coś
poza tylko jego wywołania funkcji.
I chcemy coś że możemy przejść wokół
i że mamy dostęp z różnych miejsc.
To gdzie my chcemy umieścić pamięć na stercie.
Tak, że wszystkie te różne funkcje do niego dostęp.
>> PUBLICZNOŚCI: Może po prostu wyjaśnić?
>> Głośnik 1: Więc jedna opcja jest-- więc Pytanie było, możemy po prostu allocate--
Przepraszam, możemy zadeklarować zmienna globalna, zasadniczo.
To jest jedna z opcji.
Ale z wielu tych, tych, stają się bardzo brudny.
I na ogół, że od tego, jak zły projektowania.
Tak.
Fajne, jakieś inne pytania?
Niesamowite.
OK, przejściem.
Więc to jest rzeczywiście jak przydzielić pamięci.
Rozmawialiśmy o tym trochę.
Używamy tej funkcji o nazwie malloc.
I powiedzieć, jak wiele bajtów pamięci, tak jak wiele bajtów na stercie,
Ty chcesz.
I to będzie powrócić adres, więc wskaźnik do, kawałek pamięci
że to przeznaczono dla Ciebie.
Więc typu będzie nieważne gwiazdą.
To będzie wskaźnikiem do Cokolwiek zdecydujesz się umieścić tam.
Za każdym razem kiedy zadzwonić malloc, już powiedział
trzeba uwolnić go więc nie ma wycieków pamięci.
>> Co do innych rzeczy że ciebie absolutnie
musisz zrobić każdy Czas zadzwonić malloc?
OK, trzeba go uwolnić.
Co do innych rzeczy?
Sprawdź, null, piękne.
Tak, tak, to prawda znajduje się na płycie.
Jeśli chcesz spróbować przeznaczyć Pamięć i nie masz pamięci w lewo,
komputer powie, Nie mam nic do dać.
A to daje powrotem zerowy.
Pytania na ten temat?
Tak.
>> PUBLICZNOŚCI: Dlaczego miałbym kiedykolwiek chcesz zadeklarować wskaźnik z określonego typu
kiedy nieważne gwiazda może obsłużyć wszystkie rodzaje wskaźnik anyways?
Głośnik 1: Dobre pytanie.
Dlaczego mielibyśmy powiedzieć, int gwiazdę w przeciwieństwie do unieważnienia gwiazdę
kiedy nieważne gwiazda może obsługiwać wszystko?
Więc nie chcemy, aby kiedykolwiek wyraźnie rzucił wskazówek.
To jest po prostu złą praktyką.
Ale mówimy o int gwiazd tylko jako zrozumienia,
jest wskaźnikiem do liczby całkowitej.
>> PUBLICZNOŚCI: OK.
>> 1 głośnik: Tak, i to pozwala manipulować wartości w nim
jako liczby całkowite.
>> PUBLICZNOŚCI: Och, OK.
I nieważne, gwiazda nie będzie na to pozwolić?
>> Głośnik 1: To zależy od Kontekst Tak, więc nie martw się
nie martw się zbyt wiele o tam typu.
Po prostu wiem, że na ogół, malloc zwraca wskaźnik do czegoś.
Dobre pytanie.
>> PUBLICZNOŚCI: Dlaczego pomnożyć to razy 10? [NIESŁYSZALNY].
>> Głośnik 1: Jasne, więc byłem po prostu robi losowy przykład tu, gdzie
Chciałem przeznaczyć tyle pokój do przechowywania 10 liczb całkowitych.
Wystarczy przypadkowy wybór.
Tak.
Tak, o co chodzi?
>> PUBLICZNOŚCI: Co ty oznacza, sprawdzając wartość null?
Chcesz sprawdzić wskaźnik dla wartości null lub malloc?
1 głośnik: Tak, dokładnie.
Więc pytanie, co rozumiemy czekiem o wartości null?
Chcemy to-- każdej chwili nazywamy malloc a my wrócił wskaźnik,
chcemy powiedzieć, jest Wskaźnik równy null?
Więc dosłownie PTR.
Czy PTR równa null.
Tak.
PUBLICZNOŚCI: Tak, byłem rodzaju zastanawiać się, jeśli Ciebie
zainicjować wskaźnik do malloc, robi wskazywać na początku malloc?
Bo jeśli jest to array--
Głośnik 1: To jest dobre pytanie.
Tak, jeśli wywołanie malloc, wskaźnik, który it-- powiedzmy,
tak tutaj mamy przeznaczyć 10 bajtów pamięci.
Więc, przepraszam, tyle Pokój dla 10 liczb całkowitych,
mamy zamiar uzyskać adres ten pierwszy element pamięci.
To jest dobre pytanie.
Tak.
>> PUBLICZNOŚCI: Poprzez przydzielanie 10 rozpowszechnione liczby całkowite,
może faktycznie używać, wskaźnik jako like-- prawie
jak tablicy liczb całkowitych?
1 głośnik: Tak, więc można używać go jako tablica liczb całkowitych?
Tak, dokładnie, to co Pulak tylko pokazałem on-- kilka slajdy temu
gdzie mówimy, OK, to jest tak naprawdę rodzaj of-- mamy
można myśleć o nim jako tablica z 10 liczb.
To właśnie dzieje się na stercie.
PUBLICZNOŚCI: Ale nie może uzyskać dostępu to z kwadratową notacji uchwytu?
Głośnik 1: Rzeczywiście może uzyskać dostępu to z kwadratową notacji wspornika, tak.
Można traktować je tak samo.
Tak.
>> PUBLICZNOŚCI: Dlaczego miałbym wskaźnik kiedykolwiek być null?
>> Głośnik 1: Dlaczego miałbym wskaźnik kiedykolwiek być null?
Jeśli będziesz używać do wszystkich pamięć na stercie.
Jeśli twój program jest jedzenie się, jedzenie się, jedzenie pamięć,
i nie ma nic w lewo, a następnie malloc będzie say-- jeśli powiesz,
Chcę 100 więcej bajtów, to będzie powiedzieć, nie mam 100 bajtów.
Tu jest zerowa.
Oznacza to, że nie udało mi się.
Tak.
>> PUBLICZNOŚCI: W tym przypadku, null jest nic, prawda?
>> 1 głośnik: Tak, w tym Sprawa, null ma nic.
Nie masz adres.
Brak pamięci.
Dobra, przechodząc.
OK, niech naprawdę szybko mówić o przepełnienie bufora.
Kiedy możemy spotkać przepełnienia bufora?
Powiedzmy, że mamy A-- my przeznaczyć kawałek pamięci,
i będziemy pisać ciąg w.
I mamy zamiar powiedzieć, OK, mam zamiar przeznaczyć
wystarczająco dużo miejsca dla sześciu znaków.
I mam zamiar zapytać użytkownik z jakiegoś wejścia.
I dane wprowadzane przez użytkownika, na przykład, cześć.
I że doskonale pasuje w porządku, bo mamy
Pokój dla wszystkich bohaterów witam, i znak null terminator.
Dużo miejsca, nie ma problemu.
>> Ale co, jeśli dajemy możliwość za zło użytkownika do korzystania z naszego programu,
i wpisać w nie sześć znaków, czy nie pięć znaków, ale milion.
Trzymają pisania i pisania, a pisania, co się wydarzy?
Cóż my tylko dać enough-- komputer lub przykro,
tylko dał ten ciąg wystarczająco dużo miejsca dla 5 znaków.
Tak, mamy zamiar coś podobnego tego, gdzie zło osoba, która jest
wpisując w wejściu może nadpisać rozmiar bufora
i rzeczywiście można przejść obok ilości że to pierwotnie przyznane.
I co wtedy można dokonać, bardzo zła, co można zrobić,
jest zastąpienie adresu zwrotnego.
Co w zasadzie oznacza, można trochę się
Kontrola zachowań programu.
Tak więc na bardzo wysokim poziomie Przepełnienie bufora jest wtedy, gdy
można przeznaczyć pewną ilość pamięci.
A potem you-- to dlatego, że jesteś biorąc dane wprowadzone przez użytkownika lub coś
jak that-- przejść ponad granicami z tego, co już pierwotnie przydzielona
i zacząć bawić się program.
Tak?
>> PUBLICZNOŚCI: A dlaczego nie, że tylko zwraca błąd segmentacji?
>> Głośnik 1: Dlaczego nie chcieli, zwraca błąd segmentacji?
To mogło.
Czasami kompilator lub podczas jednej z Twojej starcie
faktycznie się sprawdzić to.
Jeśli pewne rzeczy się zdarzają, i jest to rodzaj niższym poziomie,
to trzeba wiedzieć.
Ale jeśli nie projektujemy te systemy prawidłowo,
to masz szansę z nie połowu i po prostu
dzięki czemu komputer take-- zły człowiek kontrolować swój komputer.
Tak.
>> PUBLICZNOŚCI: [niesłyszalne]?
Głośnik 1: Jasne.
Och, kiedy mówię, bufor, po prostu znaczy, że Ilość pamięci, które zostały przydzielone.
Więc powiedziałem, och, jakie przeznaczono sześć char-- wystarczająco dużo miejsca dla sześciu znaków.
A ja po prostu zadzwonić, że moim buforze gdzie mogę pisać informacje.
Tak.
Wszelkie inne pytania w tej sprawie?
Tak.
>> PUBLICZNOŚCI: Jak go zatrzymać?
Jak można temu zapobiec?
Głośnik 1: Awesome pytanie.
Jak można temu zapobiec?
Jak można uniknąć przepełnienia bufora?
Cóż jednym ze sposobów, aby to zrobić jest coś jak GetString, gdzie stale zwiększają
ilość pamięci, że możemy przydzielić Jeśli użytkownik wchodzi wiele tekstu.
Inną rzeczą jest, jeśli masz tylko chcą sześć znaków, zrobić szybki test.
Tylko powiedzieć, wejście sześciu znaków.
Tak.
Więc powiedzmy, że były pracy on-- jedziemy
, aby przejść do strony internetowej rzeczy trochę później w course-- ale niech
powiedzieć, że pracujesz na formularzu, byś po prostu ograniczyć, ile może wręczył.
Tak.
>> PUBLICZNOŚCI: GetString ciągnie pamięci ze stosu, tak?
Aby wyjaśnic?
Głośnik 1: Jeszcze raz?
PUBLICZNOŚCI: Czy getString podjąć pamięć ze stosu?
Głośnik 1: Wierzę Getm-- get int zajmuje pamięci ze sterty
dlatego, że nazywa alloc.
PUBLICZNOŚCI: Och.
OK.
1 głośnik: Tak, malloc i realloc.
Inne pytania?
Tak.
>> PUBLICZNOŚCI: Tak definiując wielkość buforowania
zapobiec ktoś z jest w stanie wprowadzić kod
że może prześlizgnąć się w [niesłyszalne].
>> 1 głośnik: Tak, poprzez zdefiniowanie rozmiar bufora
powiedziałeś, OK, oto jak to zrobić dużo pamięci możemy wykorzystać.
Jeśli pozwalają użytkownikowi napisać nad nim, wtedy będziesz napotkasz problemy.
Mieć sens.
Niesamowite.
Przejdźmy dalej.
W porządku.
Mówiąc o błędach, tu są niektóre Typowe komunikaty o błędach
które mogą wykazały się w czasie, kiedy kodowanie, pracuje nad swoimi zestawami problemowych.
Duża szansa, że ​​jeden z to pokazuje się na quizie
jeśli ostatnich lat jakieś wskazanie.
Tak, odpowiedzi są rodzajem tutaj na forum.
Ale nie krępuj się krzyczeć trochę więcej.
>> Dlatego może się zdarzyć błąd segmentacji?
Dlaczego można uzyskać winy segmentacji jeśli używasz programu?
>> PUBLICZNOŚCI: [niesłyszalne].
>> Głośnik 1: Dobra.
Tak, jeśli staramy się dostęp Pamięć, która nie jest nam dana.
Jeśli dereference wskaźnikiem NULL.
Na przykład, jeśli nazywamy malloc, i zapomnij sprawdzić, czy jest to null
i po prostu spróbować użyć go, komputera da nam błąd segmentacji.
Dobry.
Co z niejawne Deklaracja funkcji?
Co to znaczy?
PUBLICZNOŚCI: Próbujesz użyć funkcji, które nie zostały zdefiniowane.
Głośnik 1: Dobra.
Próbujesz użyć funkcji które nie zostały zdefiniowane.
Tak, że może być jedną z dwóch czynności.
Może to było jak na przykład Camille pokazałem wcześniej.
I masz główną funkcją który wywołuje coś o nazwie Cube.
I powiedzmy, że zapomniałem do napisania tego prototypu.
Zapomniałeś powiedzieć, hej komputer, Mam tę funkcję o nazwie Cube.
Zobaczysz go później.
Powiedzmy, że zapomniałem napisać Prototyp, możesz otrzymać ten błąd.
Inną rzeczą jest, powiedzmy, Czy próbowałeś użyć printf,
i zapomniałem włączyć biblioteka standardowa,
to powie niejawny Deklaracja funkcji.
I ostatnie, ale nie najmniej, niezdefiniowany indentyfikator.
Tak.
>> PUBLICZNOŚCI: Masz zakres problemu.
Jak być może próbujesz zadzwoń do zmiennej lokalnej, która jest
w innym rodzaju obszaru.
Głośnik 1: Świetnie, więc jeśli masz zmienna, która nie jest w zakresie,
i starasz się go używać, będziesz miał kłopoty.
I tak bardziej ogólnie, powiedzmy, próby użycia x, z coraz mówiąc int
x jest równa 5, to jesteś zamierza uruchomić w kłopoty.
Przepraszam, pytania na ten temat?
Niesamowite, chugging prawo wzdłuż.
>> OK, rekurencja, dlaczego might-- niech see-- Straciłem sch-- oh jedziemy,
tylko upewnić się, że jesteśmy mniej więcej w terminie.
Wszystko w porządku, super.
OK, rekurencja, ogólna idea rekursji, rekurencyjna funkcja
Jest to funkcja, która nazywa siebie.
OK, więc to co ja myśli, koncepcji programowej
przy czym funkcja nazywa siebie.
Co byłoby some-- co to jest dobry powód, aby użyć rekurencji?
Kiedy może być przydatne?
Albo co jest to program, który naprawdę nadaje się do rekursji?
>> PUBLICZNOŚCI: Binary wyszukiwania.
>> Głośnik 1: Przeszukiwanie binarne nadaje się do rekursji,
bo masz ten problem, że cię można rozbić na mniejsze kawałki,
i nieprzerwanie wykonywać ten sam algorytm na nim.
Prowadzi to w wielu przypadkach bardziej Elegancki kod, który jest bardziej precyzyjny.
Po prostu są przykładem poszukiwania binarnego.
Innym przykładem jest sortowanie przez scalanie.
Czasami, gdy myślisz algorytm, jak silni,
po prostu czuje rekurencyjne, prawda?
Ponieważ wiemy, że silnia od 5 jest silnia 4 razy 5.
I tak podczas konfigurowania problem w ten sposób, że po prostu czuje rekurencyjne.
Tak że byłoby świetny sposób, aby to napisać.
Pytania?
Tak.
>> PUBLICZNOŚCI: Co to jest wariant podstawowy?
>> Głośnik 1: Ach, co to wariant podstawowy?
Powiedziałem, nie zapomnij obejmuje przypadek bazowy.
Powiedzmy pisaliśmy Silnia funkcji,
i robimy silni 5.
I wiemy silni 5 jest 5 razy silnia 4,
bla, bla, bla, bla.
Skąd mamy wiedzieć, kiedy się zatrzymać?
Skąd mamy wiedzieć, że my rzeczywiście mają numer?
Bo jeśli wołała silnia, to, że nigdy nie otrzymasz odpowiedzi, prawda?
Tak więc, gdy wiemy, jak zatrzymać w przykładzie silni.
Każdy, tak.
>> PUBLICZNOŚCI: Po 1 silnia to 1.
Głośnik 1: Dobra.
Więc wiemy.
Możemy przyjąć, że 1 silnia jest równe 1.
Więc jeśli mamy do punktu, w którym my dzwoniąc silni 1,
po prostu iść do przodu i zwraca 1.
I to jest twoja sprawa bazowej.
Ponieważ wiemy, że po raz trafiliśmy, a zawsze trafi, że będziemy never--
nie będzie po prostu wracamy zawsze.
Wszelkie inne pytania dotyczące rekursji?
Tak.
>> PUBLICZNOŚCI: Więc kiedy wracasz 1, to po prostu automatycznie
będzie zatrzymać program, prawda?
>> 1 głośnik: Tak więc, gdy ci zadzwoń do zwrotu 1, if-- powiedzmy,
powiedzmy silnia 2 połączeń silnia 1, silnia z 1
po prostu oddać 1.
A teraz silnia 2 powie OK, 2 1 jest 2 razy, i powrót tą odpowiedź.
Tak.
>> PUBLICZNOŚCI: Czy mamy się martwić o zakresie w rekursji
gdy idziesz do algorytmu?
>> Głośnik 1: Ach, tak.
Tak, to nie musisz się martwić o Zakres w kontekście rekursji.
Więc tylko zmienne zdefiniowane w tym okresie funkcji
będą przydatne.
Tak dobre pytanie.
W porządku, niech ruszać dalej.
Ponieważ mamy dużo Materiał do przejść.
Ale jak powiedziałem, nie krępuj się trafić do godziny pracy, lub nam po fakcie.
>> To jest po prostu naprawdę szybka zjeżdżalnia.
Dowiedzieliśmy się wiele o wyszukuje i sortuje.
Proszę proszę proszę, Te fragmenty są w Internecie,
Wierzę w cs50.net/quizzes~~pobj.
Więc idź się z poniższej tabeli i umieścić go na swoim arkuszu przeglądu,
ponieważ nie będzie pytanie na ten temat.
Proszę nie to źle.
Tylko bardzo szybko, co to wykres oznacza,
to mówi o Big O, które znamy być górna granica an algorytmów
czas pracy.
I mamy Omega, która jest będzie dolnej granicy
o czasie pracy algorytmów.
OK?
>> PUBLICZNOŚCI: [niesłyszalne].
>> 1 głośnik: Tak, co jest ostatnią rzeczą?
Co znajduje się w theta?
To, czy we-- jedziemy tylko obchodzi w tej klasie w przypadku
gdzie nasza górna granica i Nasz dolny są takie same.
Tak, to jedyny czas, to przyjdzie się w tej klasie.
OK, mam zamiar iść dalej.
Jeżeli nie miały swoje zdjęcie, Obiecuję to będzie online.
>> OK, niesamowite, structury.
Dlaczego możemy chcieć konstrukcjom?
Co to jest przydatne powodem Może chcemy konstrukcjom.
Ktoś krzyczał coś.
Dobrze niech spojrzeć na Przykładem na pokładzie.
Powiedzmy, że mamy do czynienia z tymi wszystkimi studentami.
Jeśli robimy program dla CS50, są jak 800 osób.
Musimy write-- będziemy trzeba obsłużyć wiele informacji
o studentów.
Byłoby miło, gdyby mogliśmy rodzaju grupy
this-- wszystkich informacji ma do czynienia z konkretnym uczniem
do jednego typu danych.
Ale wiemy, że nie ma danych wpisz nazywa, student, prawda?
Mamy liczbę całkowitą, mamy pływak, mamy ciąg lub gwiazdę char,
ale my nie mamy, student.
>> Tak więc możemy zrobić, to właściwie rodzaj zdefiniować nasza struktura, nazywamy to student,
i możemy powiązać niektóre Pola z tym różne struktury.
Więc w tym przypadku, niech że mamy uczniów.
I to, że dbamy o to numer legitymacji studenckiej
i imię ucznia.
A teraz możemy powiązać tego identyfikatora i ta nazwa z danego ucznia.
Zobaczmy kilka przykładów.
>> OK, więc tutaj mogę powiedzieć, OK, niech że chcemy, aby student.
Nazywam go student 1.
I jego numer identyfikacyjny, w w tym przypadku, możemy uzyskać dostęp do
po prostu robi nazwę studenta dot pole chcemy uzyskać dostęp.
Więc to będzie po prostu być studentem 1 kropka ID, i ustawić go równa 1.
Bo pamiętam, że powiedział, że Identyfikator będzie liczbą całkowitą.
I bardzo podobnie, możemy powiedzieć, że to Nazwa studenta będzie Davin,
na przykład.
Więc może po prostu dostęp do pola z struct przy użyciu tej kropki.
Pytania na ten temat?
Tak.
>> PUBLICZNOŚCI: Czy jest jakiś sposób chronić swoje zmienne?
Czy jest jakiś sposób, aby chronić zmienne z zewnętrznie dostępne?
>> Głośnik 1: Czy mimo chronić swoje zmienne
z zewnętrznie dostępne?
Nie w zakresie CS50.
Inne pytania?
Tak.
>> PUBLICZNOŚCI: Co to jest typedef struct?
Co każdy składnik oznacza?
Głośnik 1: Ach, co jest typedef struct?
Co każdy składnik średnia z tym facetem?
>> PUBLICZNOŚCI: Tak.
>> Głośnik 1: OK, fajnie.
Więc to mówi, hej komputer, ja chcą stworzyć nową strukturę.
I mam zamiar określić definicję dla niego, tak że mogę go używać
jakby to był typ w całym moim programie.
OK, więc chcę, aby zdefiniować strukturę.
A ja teraz będzie w stanie użyć go jako typ.
A jego nazwa jest studentem.
A oto jego pola.
>> PUBLICZNOŚCI: Więc jest to, że typedef struct [niesłyszalne]?
Głośnik 1: Jeśli chcesz, aby móc używać tej struktury w całym programie,
w większości przypadków w CS50 my zrobić, musimy powiedzieć typu Def.
A to, że pozwala używać jej tak samo sposób, w jaki używamy jak int lub pływaka.
Komputer Zawsze wiesz, co to jest.
Tak.
>> PUBLICZNOŚCI: możemy napisać to w pliku nagłówka?
>> Głośnik 1: Oh, przepraszam.
Czy piszemy to w pliku nagłówka?
Możesz napisać to na górze Program, w górnej części programu c.
Tak, to będzie najbardziej rozsądne miejsce dla niego.
Powrót istnieje.
PUBLICZNOŚCI: Samo pytanie, więc przed głównym?
1 głośnik: Tak, trzeba to będzie gdzieś, że każdy może uzyskać do niego dostęp.
Więc przed głównym w Twoim przypadku, tak.
PUBLICZNOŚCI: Czy jest jakaś różnica między wprowadzenie studenta na górze i na dole?
Głośnik 1: Ach, to istnieje Różnica między wprowadzenie studenta
na górze lub na dole?
Let-- zapisać na to pytanie, a gdy mamy do połączonych listach,
zobaczymy, że, OK?
Więc trzymaj się, że w ciągu jednej sekundy.
Ostatnią rzeczą, chciałbym wspomnieć tutaj, Jest zamiast mieć strukturę
mamy wskaźnik do struktury, możemy zmienić nasze notacji
być trochę ładniejszy.
>> Można powiedzieć, powiedzmy, że mamy wskaźnik do ucznia, a nie tylko
uczeń.
Jeśli chcemy korzystać z pola, zamiast robi, dobrze pójść wyłuskanie wskaźnika,
a następnie uzyskać dostęp do nazwy pola.
Ten zapis wygląda trochę bałagan z gwiazdą w tej kropce.
Całkowicie poprawne, ale to rodzaj czystszej sposób to zrobić,
jest po prostu powiedzieć nazwę wskaźnik strzałki.
I to właściwie łączy dereferencing i dostępu w jednym pięknym symbolem.
Pytania na ten temat?
>> PUBLICZNOŚCI: Wystarczy powiedzieć, że jeszcze raz.
>> Głośnik 1: Powiedz to jeszcze raz.
>> PUBLICZNOŚCI: Dokładnie to, co właśnie powiedział.
Głośnik 1: Pewnie, dokładnie co właśnie powiedziałem.
Jeśli mamy wskaźnik do ucznia a nie samego ucznia,
mamy can-- jeden sposób, że możemy uzyskać dostęp do Pole jest wyłuskanie go, a następnie
Nazwa dostępu.
Innym, bardziej przyjemny sposób, w jaki może zrobić to, co jest po prostu
trochę cukru składniowej, jest po prostu zrobić wskaźnik nazwę strzałki.
I że ma zamiar połączyć wyłuskania i użytkowanie.
Tak, całkiem fajne.
W porządku.
>> Więc porozmawiajmy o innej kwestii.
Miejmy przejść do węzłów, które mamy zamiar używać
w związane list w ciągu sekundy.
Więc, można zauważyć, że istnieje jest węzeł słowo zarówno od dołu
i na górze.
Wcześniej, kiedy byliśmy definiowania ucznia, mieliśmy tylko studenta na dole.
Nie mieliśmy studenta na górze.
Ktoś wie dlaczego tak może być?
Jaka jest różnica?
Tak.
PUBLICZNOŚCI: Więc użyć węzła Jest to definicja węzła
więc jest to rekurencyjny rzecz?
Głośnik 1: Dobra.
Tak, musimy nasze węzłów posiada wskaźnik do innych węzłów.
Więc od kiedy korzystać z tego typu Zanim to faktycznie zdefiniowane,
musimy umieścić go na górze tak więc wie, co to jest.
PUBLICZNOŚCI: Więc nadal potrzebne jest na dole?
1 głośnik: Tak.
PUBLICZNOŚCI: Więc zawsze na dole.
Głośnik 1: zawsze na dole.
Więc wszystkie twoje będzie ma to na dole.
Jakieś inne pytania?
W porządku, więc pozwala rzeczywiście mówić o związane list bardzo szybko.
Więc związane listy are-- ich używamy zamiast tablic w niektórych przypadkach,
ponieważ wiemy, że tablice są stałej długości, natomiast związane list
możemy rozwijać się i kurczą się tak, jak chcemy.
Więc to jest przykład tego, co połączonej listy może wyglądać.
To, czego potrzebujemy, aby zobaczyć to szef listy.
Więc gdzie zaczyna się lista.
A potem węzła, każdy kolejny węzeł, jest
odpowiedzialny za wiedząc, gdzie następnego węzła jest.
Tak więc w tym przypadku, węzeł, który przechowuje 1 jest odpowiedzialny za wiedząc, gdzie 3 jest.
Osoba, która przechowuje 3 jest odpowiedzialny za wiedząc, gdzie 9 jest.
I 9 ma nikogo innego, aby wskazywać na.
To koniec listy, tak, to po prostu mówi wartość null.
OK?
>> PUBLICZNOŚCI: Jaki jest sens tego?
>> Głośnik 1: Jaki jest sens tego?
>> PUBLICZNOŚCI: Tak.
Głośnik 1: Ponieważ, niech powiedzieć, że mamy jakieś dane.
I nie wiemy dokładnie, jak wiele danych chcemy wyprzedzeniem.
Więc z tablicy, powiedzmy, gdzie chcą liczyć ludzi w pierwszym rzędzie.
Są szanse, że nie będzie się zmieniać.
Możemy tylko powiedzieć, OK, chcą tablicę wielkości sześciu.
Ale jeśli chcemy coś że to się zmieni.
>> Na przykład, powiedzmy, że starałem śledzić studentów
jak przychodzą do pokoju dla sesji przeglądarki.
Nie mam pojęcia, jak wielu z was ludzie będą wyświetlane.
Więc może Chcę strukturę danych że mogę rozszerzać i kurczyć.
Bo może ktoś będzie odejść, może ktoś przyjdzie.
I tak, w każdym czasie, Można dodać lub usunąć węzły.
Cool, wielkie pytanie.
Tak.
>> PUBLICZNOŚCI: Jeśli można użyć coś getString
który utrzymuje co pozwala uzyskać więcej danych, jak jest to potrzebne, dlaczego trzeba to też?
>> Głośnik 1: Dlaczego miałbym użyjesz listy, gdy połączone
możesz użyć czegoś takiego getString?
To jest dobre pytanie.
Pamiętaj, że Get-- jednego z upadki z getString
jest to, że nie zrobiliśmy bardzo dobra praca uwolnienia tej pamięci,
i wprowadziliśmy kilka Pamięć przecieki do programu?
Można zabrać go statycznie wielkości tablicy i stale rosnąć go.
Ale trzeba by znaleźć nowe miejsca w pamięci.
Byłoby to po prostu dużo napowietrznych.
>> Jedną z miłych rzeczy o powiązane list, w przeciwieństwie do macierzy, to tablice
znajdują się w tym samym miejscu w pamięci.
Musi być ciągła fragmenty pamięci.
Natomiast związane list, 2 i 3 maja całkowicie różnych miejscach.
Podobnie jak 2 jest tutaj, a 3 jest tutaj.
I pod warunkiem, że mają wskaźnik do siebie, to w porządku.
Wiemy, że możemy je znaleźć.
Pytanie tam?
>> PUBLICZNOŚCI: GetString jest funkcją w bibliotece CS50, prawda?
Nie występują w rzeczywistych programów.
>> Głośnik 1: Prawidłowe.
Prawda, że ​​to inna rzecz.
GetString nie istnieją poza kontekście CS50.
Tak.
>> PUBLICZNOŚCI: Tak samo fakt, że dwa może być bardzo daleko od siebie,
Czy to wpływ na efektywność dostępu do elementów na liście?
Głośnik 1: To jest dobre pytanie.
Pytanie tylko, czy to wpływ wydajność dostępu
te różne elementy na liście.
Aktualnie tak.
Ponieważ wiemy if-- niech że chcemy, aby uzyskać dostęp
drugi element tablicy, wiemy, możemy po prostu zrobić wspornik tablicy 1, w prawo.
To zawsze będzie być takie same położenie.
Ale jeśli chcemy dostać się do tego 3, nie możemy po prostu powiedzieć, przejdź się, że 3.
Musimy powiedzieć, OK, zaczynają się początek listy
a teraz mamy naprawdę przejść przez Dopóki
znaleźć numer jesteśmy zainteresowani.
>> Więc w tym przypadku możemy powiedzieć, OK jest to pierwszy numer.
Tak w zasadzie, to wskaźnik 0.
Teraz musimy znaleźć drugi numer.
To wskaźnik 1.
Tak, że rzeczywiście będzie to-- tylko dostępu, zajmie czas N.
Fajne, duże stare N. Tak.
>> PUBLICZNOŚCI: Jakie są poszczególne listy?
Tablice są każdy, czy co?
Głośnik 1: To jest dobre pytanie.
Co każdy z Struktury, że mam wyciągnąć?
Są węzły.
Tak więc każdy z nich mało Struktura składa się z dwóch części.
Posiada liczbę całkowitą, która posiada.
To rzeczywiste dane że to trzymając.
To rodzaj przydatnych części.
I to jest to, co sprawia, że ​​jest powiązana lista,
ma on wskaźnik do następnego węzła.
Niesamowite pytanie.
Dobrze, więc spójrzmy bardzo szybko spojrzeć na kilka przykładów tego, co
możemy zrobić z połączonych listach.
>> Tak więc jednym z przykładów jest bardzo szybkie, przypuśćmy, że chcemy zrobić wyszukiwania.
Jakie wyszukiwania nie może my na powiązanych list?
>> PUBLICZNOŚCI: Binary.
>> Głośnik 1: Binary.
Dlaczego nie możemy używać przeszukiwanie binarne?
>> PUBLICZNOŚCI: [niesłyszalne].
Głośnik 1: Racja, bo z binarny wyszukiwarka, musieliśmy polegać na tym,
że możemy po prostu skoczyć do tablicy w dowolnym punkcie.
Możemy tylko powiedzieć, przejdź z elementem środkowym.
Z tutaj, jak powiedział nieco wcześniej,
nie możemy po prostu przejść do element środkowy.
, Aby wybrać dowolny Element, faktycznie
przejść przez cały naszej liście.
>> Więc jeśli chcemy zrobić wyszukiwania, tym Najlepsze, co możemy zrobić, to po prostu przeszukiwanie liniowe.
Zaczynamy na czele, mamy check-- powiedzmy, że jesteśmy
poszukuje 9-- zaczynamy na czele.
Mówimy: to jest 9?
Nie.
Czy to 9?
Nie.
Czy to 9?
Tak, znaleźliśmy go.
OK, to wszystko.
Oto trochę pseudo-kodu.
Zamierzam zostawić to za Ciebie ludzie masowo na na własną rękę,
tylko dlatego, że używasz trochę mało czasu.
>> Porozmawiajmy o włożeniu.
Widzieliśmy naprawdę fajne demo to na wykładzie, gdzie powiedział:
OK, mamy tego połączonej listy gdzie wszyscy wskazując na siebie,
i ktoś wchodzi na scenę.
Jak wstawić, że Osoba do naszej połączonej listy?
Cóż, zły sposób zrobić, które to myślę, że to, co widzieliśmy pierwsze,
jest, gdy osoba przednie automatycznie
zwrócił się do nowej osoby.
A potem my niby opuszczony Druga połowa listy, prawda?
Ponieważ nie wiemy, gdzie to jest w pamięci więcej.
Więc być bardzo ostrożnym o Kolejność, w której możemy włożyć rzeczy.
>> Więc powiedzmy, chcemy umieścić 1 na przodzie naszej liście.
Po pierwsze, mamy 1 punkt w Drugi element-- lub element
który zawiera 1.
Tak, możemy to zrobić, po prostu tak, że nie jesteśmy stracić drugą połowę.
A teraz możemy mieć głowy do 1 punktu.
Więc jeszcze raz, to jest po prostu jak bardzo wysoki poziom.
W ten sposób chcemy wstawić węzeł.
Mamy dużo pseudo-kod here-- przykro,
Nie wiem, dlaczego tu jestem nazywając ją pseudo-code.
To rzeczywisty kod.
Możesz to sprawdzić później.
>> W porządku, jest bardzo quickly-- więcej pytań
na powiązanych list zanim przenieść się na kilka innych danych
struktury w naszych ostatnich 10 minut.
>> PUBLICZNOŚCI: Czy musimy teraz jak napisać go na próbę?
>> Głośnik 1: Czy musimy wiedzieć, jak to--
>> PUBLICZNOŚCI: Wpisz go na próbę.
>> Głośnik 1: musimy to-- powinieneś być przygotowany
pisać, wstawiać, usuwać i szukaj powiązanych list na teście.
To jest coś, czego mógł się spodziewać, aby to zrobić.
Wystarczy przejść nad nim.
Jeśli masz jakieś pytania na temat: Kod, strzelać TF e-mail,
przyjść do godzin pracy biura.
Jest jeszcze dużo czasu uczyć się, nie martw się.
Wszystko w porządku, każdy inny pytania o powiązanych list?
Tak.
>> PUBLICZNOŚCI: Więc jeśli nie używać wskaźnik, aby przejść do jednego z prawej strony
przed użyciem wskaźnika dla jeden na lewej stronie, to
odpowiednik usuwanie wszystko, prawda?
1 głośnik: Tak.
PUBLICZNOŚCI: [niesłyszalne].
1 głośnik: Tak, ponieważ nie możemy dostać, to w rzeczywistości jeszcze gorzej.
Ponieważ nie tylko nie wiemy gdzie to jest, nie możemy go używać,
ale we've-- nie jesteśmy uwalniając że pamięć już.
Więc to po prostu kręci i nie być przydatne, ponieważ nie możemy go znaleźć.
Tak, fajne pytanie.
>> Dobrze, porozmawiajmy o stosach.
Widzieliśmy stosy bardzo szybko.
Są pierwsi w zeszłym spośród struktur danych.
Więc myślimy o stosów w Annenberg tac, gdzie stos rzeczy na wierzchu.
A jeśli masz zamiar przychodzą się tacy, jesteś
zawsze zajmie jeden na góry, która jest najbardziej recently--
co jest rzeczą, która najbardziej Niedawno umieścić na szczycie stosu.
Tak więc można trochę pomyśleć o tego rodzaju wizualne, gdy myślisz o stosach.
A potem, mamy pojawiło coś ze szczytu stosu.
>> Jeśli are-- oh, a słowa, które używać, gdy mówimy o tych danych
struktury jest zazwyczaj, jeśli będziemy umieścić coś na stosie,
mówimy, jesteśmy przesuwając ją na stosie.
A jeśli wziąć coś ze stosu, mówimy, jesteśmy popping ze stosu.
Jeśli wybierasz się do wdrożenia stack-- które na pewno
polecam spróbować out-- jesteś będzie chciał śledzić,
powiedzmy, że używasz tablicę.
Wiem, że w wykładzie rozmawialiśmy o użyciu zarówno tablice
lub związany list do realizacji stosu.
Jeśli używasz tablica, musisz keep--
usprawiedliwienia me-- musimy śledzić od wielkości i pojemności.
Więc maksymalnej liczby że nasz stos może pomieścić.
Pytania na stosach?
>> PUBLICZNOŚCI: Jaka jest różnica od wielkości i pojemności?
Głośnik 1: Różnica między wielkość i pojemność, niesamowite pytanie.
Więc powiedzmy, że jesteśmy za pomocą tablicy, i
przeznaczyć wystarczająco dużo miejsca dla 10 liczb całkowitych.
I zaczynamy wypełniać, że się.
A my pchamy rzeczy, i pop rzeczy off.
Chcemy, aby śledzić maksymalnie Numer możemy trzymać, to pojemność.
I chcemy śledzić aktualny numer mamy, to wielkość.
Dobre pytanie.
Wszystko inne na stosach?
Dobrze, porozmawiajmy o zaskoczeniu, kolejek.
>> W przeciwieństwie do stosów, które są pierwszym w zeszłym na zewnątrz, są to pierwsze weszło, pierwsze wyszło.
Więc to jest like-- myśleć o linię.
Pomyśl o kolejce na Apple Przechowywać aby niezależnie produkt.
I pierwszą osobą w linii powinno być pierwszą osobą, która pomogło.
Tak więc pierwszą rzeczą, która jest wciśnięty jest to pierwsza rzecz, która się pojawiła.
Chłodny?
Bardzo similarly-- Och, słowa, które używamy zamiast push i pop--
których używałem, Jestem sorry-- to mówimy,
jeśli mamy coś do wprowadzenia kolejka, mówimy skolejkowany go.
Jeśli bierzemy coś z kolejka, mówimy rozkolejkowywana.
Ono.
I może być wymawiając te źle, ale masz pomysł.
I znów, podobnie jak stosy, jeśli mamy do wykonania to jako tablicy,
musimy śledzić wielkość, pojemność, a głową.
Co mam na myśli przez głowę?
Dlaczego musimy zachować utwór głowy?
>> PUBLICZNOŚCI: Bo to jest, gdy początek listy jest.
1 głośnik: Tak, w zasadzie głowa jest gdzie początek naszej kolejce jest.
Ponieważ wiemy, w przeciwieństwie do stosów, which-- Mam zamiar spróbować zmierzyć się z tym way--
Wiemy, że to zawsze będzie kurczą się w ten sposób i rozwijać w ten sposób.
Kolejki, ludzie przychodzą na koniec i pozostawić od początku,
więc musimy śledzić gdzie początek jest.
To, co mam na myśli, musimy śledzić, gdzie szef jest.
Chłodny?
W porządku.
Osiem minut, kilka więcej tematów, możemy to zrobić.
>> Dobrze, tabeli mieszania.
Rozmawialiśmy bardzo krótko o tabelach z cebulą.
Do quizu, wystarczy zrozumieć ich na wysokim poziomie.
Podstawowym założeniem jest to masz te dane.
I chcemy, aby uzyskać do niego dostęp w czasie, który jest szybciej niż coś jak powiązane
lista.
Dlatego, że powiedział, gdybyśmy byli przeszukując połączonej listy,
że może potrwać N.
Nawet dostępu mogą N Czas w połączonej listy.
Tabele hash daje nam sposób, że możemy szybszy dostęp do rzeczy, i bardziej
szybko szukać rzeczy, bez konieczności ograniczenia, z tablicy
gdzie mamy stały rozmiar.
>> Więc myślimy o strukturze danych, gdzie, gdzie umieścić go w strukturze danych
jest zależna od tego magiczna funkcja skrótu.
Więc w tym przypadku, magicznej hash Funkcja jest po prostu biorąc słowo,
sprawdzanie, co pierwsza litera jest, a a potem po prostu sortowania go alfabetycznie.
Więc zasadniczo je w różnych wiadrach.
Kiedy widzimy, banana, mówimy, OK, niech umieścić w wiadrze B.
Kiedy widzimy, Apple, niech umieścić go w wiadrze A.
Jeśli widzieliśmy moreli, niech umieścić w wiadrze A.
OK?
>> Przypuszczam więc szukaliśmy for-- I nie wiem, co jest kolejnym owocem?
Załóżmy, że szukałem pomarańczowy.
Gdzie mam szukać?
W O wiadra.
Tak, jest tylko jedno miejsce, że pomarańczowy może być, OK?
Więc powiedziałem wcześniej, co się dzieje if-- jak powiedziałem wcześniej,
powiedzmy, że stawiamy moreli in-- ale Naprawdę jest uwzględnienie faktu, że, o nie,
gdybym umieścić jagody w, to będzie sprzeczne z bananem.
Gdzie umieścić go, czy jest już coś w naszym stole?
Cóż, mamy kilka opcji.
>> Opcja numer jeden jest liniowa sondowania, co w zasadzie oznacza,
powiedzmy, że chcę spróbować umieścić jagody, i widzę, o nie,
banany już tam, Ja po prostu powiedzieć, OK, niech
mi szukać kolejnego dostępnego miejsca.
Więc idę na dół, mówię, oh, nie ma nic w wiadrze D.
Nie mogę myśleć o żadnych owoców które zaczynają się na literę D,
tak, jestem po prostu zamiar umieścić jagody tam.
Durian.
OK, więc ponieważ nie nic jeszcze nie,
Równie dobrze mogę po prostu użyć tego miejsce.
Co jest wadą, że?
>> PUBLICZNOŚCI: To nie w porządku.
>> Głośnik 1: Słucham?
PUBLICZNOŚCI: To nie w porządku.
>> Głośnik 1: To out-- Dobrze, możemy skończyć
z rzeczy, które nie są in-- przechowywane w wiaderkach, w drodze
że spodziewamy się, że będzie.
Więc jeśli szukaliśmy na jagody, zanim powiedział:
oh możemy patrzeć w jednym wiadrze.
Może to być tylko w jednym segmencie.
Ale teraz, tak naprawdę, to może być we wszystkich wiader, prawda?
>> OK, tutaj jest inna opcja, oddzielna chaining--
która jest pomysł, że będziemy użyć trochę później w P zestaw 5.
Zamiast po prostu jedno miejsce w każdym segmencie,
dlaczego nie mamy każdego segmentu jako wskaźnik do połączonej listy?
Gdzie możemy powiedzieć, OK, nie ma wiadro za wszystko, co zaczyna się na literę A.
I tam właśnie będzie związane Lista owoców, które zaczynają się na literę A.
Więc jeśli mamy nowe owoce, powiedzmy, mamy get-- mamy awokado, mamy jabłko,
powiedzmy, że mamy moreli, w jaki sposób możemy umieścić na liście?
Dobrze, że pójdziemy do schowka 0, a my wystarczy włożyć ją w naszym lubił listy,
proste.
>> Teraz wciąż powtarzają wiadro.
Możemy zaimplementować to w wielu aspektach.
Typowym sposobem, że ta rodzaj obrazu sugeruje,
to może o tablicę wskaźniki do powiązanych list.
To jeden ze sposobów możemy wdrożenie tabeli mieszania.
PUBLICZNOŚCI: Czy trzeba innego Lista ponieważ bananów i jagody są obecnie
w porządku?
Głośnik 1: Mógłbyś need-- ah, byś
potrzebujemy jeszcze liście, ponieważ banan jagodowe są w porządku?
W tym przypadku nasza funkcja skrótu, które mówi nam, gdzie umieścić rzeczy
nie dba o drugi list.
To nie dba o alphabetizing, że dba tylko o pierwszej literze.
Pytanie?
>> PUBLICZNOŚCI: Jaka jest definicja, która funkcji, a co to wygląda?
Głośnik 1: Ach, dobrze.
OK, więc nie musimy się przejmuj się zbytnio do tego quizu.
Więc nie umieścić w slajdach.
Mamy zamiar być wprowadzone do niego dla P zestaw 5.
Ale w zasadzie, to mówi, biorąc pod uwagę Nowym elementem, gdzie należy umieścić go?
Albo, powiedzmy, szukam elementem, gdzie to może być?
Tak, wielkie pytanie.
>> OK, bardzo szybko, drzew i stara.
Tak więc drzewo jest po prostu każdy rodzaj zorganizowanej strukturze danych.
I mamy zamiar zobaczyć wiele zdjęć że będzie to bardzo wyraźnie.
I trie, które widzieliśmy w klasie, Jest to bardzo szczególny rodzaj drzewa
które zasadniczo działa jak tabeli mieszania wielopoziomowe.
To bardzo fajne.
Jedziemy, aby zobaczyć go w ciągu zaledwie sekundy.
W porządku, więc niech mówić o drzewach pierwszy.
Więc to jest naprawdę typowy przykład drzewo, gdzie mamy trochę hierarchię.
Widzisz, że ktoś jest w na samej górze, prawda?
I mogę powiedzieć, góry, bo nie wyraźnie zamawiania dlatego, że
mają te strzałki na dół.
Tak, że rzeczą na górze Ja nazywam to węzła głównego.
Więc jeden jest węzeł główny.
I to, co na dole, które nic nie spadając je,
Mówię to są węzły liść.
Tak więc 8,9 5, 6, 7, OK.
I zazwyczaj mamy terminologia mogę powiedzieć to, 1 jest 3 rodzic.
Więc jest to rzecz, która przychodzi Poziom nad nim, i wskazuje na to.
1 i 3, to jest dziecko.
Jest to rzecz, która 1 punkty.
Pytanie?
>> PUBLICZNOŚCI: Czy możesz wrócić do poprzedniego slajdu, proszę?
>> Głośnik 1: Czy mogę wrócić do poprzedniego slajdu?
Pewnie.
Pytania w tej sprawie?
Albo po prostu chciał na to patrzeć?
PUBLICZNOŚCI: Ja po prostu nie dostać przez nią.
>> Głośnik 1: OK, fajnie, tak.
To wszystko będzie w Internecie, więc nie martwić się o każde słowo.
A w interesie czas, mam zamiar iść.
Czy to w porządku?
Niesamowite.
Ok fajnie.
Więc porozmawiajmy około bardzo konkretne kind--
więc mamy te ogólne Struktura drzewa,
która jest po prostu coś, co pozwala nam do rodzaju rangi rzeczy hierarchicznie.
>> Drzewa binarne są rzeczy, gdzie każdy węzeł ma co najwyżej dwoje dzieci.
OK?
A ja powiedziałem: OK, tak że wydaje aby pasowały do ​​tego opisu.
I wspomniany węzeł, a nie binarne drzewo poszukiwań.
Co znajduje się w wyszukiwanie binarne drzewo?
To klasyfikowane.
Więc wiesz, że w wyszukiwanie binarne drzewo,
wszystko do tree-- wszystko do węzłów lewej stronie jest mniejszy,
i wszystko, co do węzły prawda jest większy.
Więc to nie jest przeszukiwanie binarne drzewo.
To tylko binarne drzewo.
Mamy więc duże kategorię drzew, nieco mniejsze w kategorii
drzew binarnych, wyszukiwanie A-- binarnych drzew wyszukiwania.
Chłodny?
W porządku.
>> A teraz, większość zabawy wszystkim, mamy próby.
Wy zobaczyłem tego obrazu podczas wykładu?
Tak, powinno to wyglądać bardzo znajomo.
Przyjrzyjmy się, jak moglibyśmy właściwie wdrożyć to.
Albo rzeczywiście, zobaczmy, to w ogóle wymyślić?
Nie.
Dobrze, że nie trzeba nawet martwić, że niski poziom rzeczy.
Będziemy mieć mnóstwo czasu zająć to P zestaw 5.
Ale teraz, po prostu bardzo wysoki poziom, że wiem, że to, na co wygląda.
Opisaliśmy ją jako swego rodzaju tabeli mieszania wielopoziomowe
where-- co robi ten sklep?
Ten przechowuje nazwy Naukowcy że możemy właściwie
poszukaj po prostu rodzaj następującego po różne tabele mieszania się, wszystko w porządku?
>> A celem tego jest, w teorii, zapewniają one stałą czasową patrzeć.
Więc jeśli chcę sprawdzić, że na przykład, kto jest someone--
że Mandel jest w tym trie, mogłem bardzo szybko
w linear-- Przykro mi, w Stała czasowa, dowiedzieć się,
czy to w trie.
Ale con, jest przyjrzeć się, jak duże to jest.
Nie jesteśmy nawet przechowywania, które wiele danych, i to jest ogromny.
Więc jeden wielki con jest to, że to zużywa duże ilości pamięci.
Tak.
>> PUBLICZNOŚCI: Dlaczego to zapewnić Stała czasowa, dokładnie?
>> Głośnik 1: Jeszcze raz?
>> PUBLICZNOŚCI: Jaka jest intuicja dlaczego to zapewnia stały czas?
>> Głośnik 1: Doskonałe pytanie.
Dlaczego to zapewnić stałą czasu?
Więc co możemy zrobić jest, powiedzmy, powiedzieć, szukamy Mandel.
Wiemy, że chcemy zacząć na pierwszym poziomie w M.
Wiemy, że chcemy iść do E. So to jest jeden krok, dwa kroki, prawda?
Kierujemy go do N. kierujemy go do D. Kierujemy go do E. kierujemy go do L.
A potem następną rzeczą, możemy sprawdzić says-- ten trójkąt mówi Tak, to
w naszej tabeli.
To jest słowo.
To ważna pozycja w naszej trie.
Więc mówisz, OK, które trwało siedem kroków.
Ale jeśli dodaliśmy jak zillion więcej Naukowcy do tej struktury danych,
nie mielibyśmy do sprawdzenia zillion więcej rzeczy.
Mamy tylko kiedykolwiek będzie musiał podjąć siedem kroków, długość danej osoby
imię.
>> Tak, lubimy myśleć w czasie pracy, jak, przypuśćmy,
możemy zwiększyć rozmiar naszego struktury danych, jak długo
to będzie trwało?
W tym przypadku, jeśli dodamy kilka więcej naukowców, to nie ma znaczenia.
To jeszcze potrwa taki sam okres czasu.
Jest to stała czasowa.
Tak.
>> PUBLICZNOŚCI: Jak nie wiesz, do skanowania na inne numery?
Głośnik 1: Skąd mam wiedzieć, jak to--
PUBLICZNOŚCI: Podobnie jak pan wie, idziesz prosto z M-E, a nie M A?
Głośnik 1: Jasne.
Ponieważ wiedziałem, że jestem szukam słowa Mandel,
a ja po prostu wiem, że to M-E. Więc that-- tak, śmiało.
PUBLICZNOŚCI: Czy nie masz patrzeć na innych listach
w pozostałej części [niesłyszalne]?
>> Głośnik 1: Ach, nie mam patrzeć na the-- OK, świetnie.
To jest dobre pytanie.
To zależy, jak go zrealizować.
Jeśli będziemy realizować go jako po prostu jak szeregu tablic
gdzie wiemy, że E jest zawsze w pozycji 0,
Nie wiem, co Strona liczba jest.
Tak, możemy po prostu zrobić stałe czas, nie, nie, nie, nie.
Chłodny.
Pytanie tam?
>> PUBLICZNOŚCI: Czy stała czasowa to samo, co w czasie rzeczywistym?
Głośnik 1: Czy stała czasowa to samo jest w czasie rzeczywistym?
Nie jestem pewien, w czasie rzeczywistym jest.
PUBLICZNOŚCI: Podobnie jak czas, dosłownie rozwija drugi
przez drugie, w przeciwieństwie do bycia niezależną zmienną.
>> Głośnik 1: O, tak, to można myśleć o tym w ten sposób.
Innymi słowy, nie jest to uzależnione rozmiaru struktury danych.
To jest sposób, aby myśleć o tym.
Jakieś inne pytania?
Być może w tym czasie pierwszy Historia, skończyliśmy na czas.
Jeśli masz jakiekolwiek pytania, nie wahaj swobodnie się nas zapytać, przejdź do sekcji,
porozmawiać z TFS, biura godziny są 08:00 i 08:30
do godziny 11:00 w poniedziałek i wtorek, więc jest to trochę inny czas,
więc upewnij się, pamiętać, że.
Tak.
>> PUBLICZNOŚCI: Czy musimy wiedzieć rzeczy, jak argumentów wiersza poleceń,
ls kreska, kreska cokolwiek?
>> Głośnik 1: Linia poleceń argumenty i poleceń Linuksa,
tak, trzeba wiedzieć ci.
Very-- to jak rodzaj poziomie rzeczy omówiliśmy w rozdziale 0,
tak daleko, jak nakazuje Linux przejdź.
>> PUBLICZNOŚCI: Czy godzin w Annenberg?
Głośnik 1: Godziny urzędowania, nie jestem do końca pewien, gdzie się znajdują.
Ale można sprawdzić strona internetowa i powie to.