Tip:
Highlight text to annotate it
X
>> GŁOŚNIK 1: Witam wszystkich.
Mamy zamiar zacząć.
Myślę, że ludzie są nadal w toku do filtrowania w.
Ale w interesie czasu, więc możemy Ci faceci z tego na czas,
mamy zamiar rozpocząć.
Tak więc zapraszamy do przeglądu CS50 Quiz 0.
Dla tych z Was, którzy nie zdali sobie sprawę, jeszcze, masz pytanie w środę.
Woo-hoo.
>> Jeśli nie masz jeszcze i zaczął studiować nie zorientował się, że to jeszcze nie istnieje,
Wcześniejsze testy i wszystkie informacje o quiz są na cs50.net/quizzes.
Istnieje kilka bardzo dobrych rzeczy na nie, Wcześniejsze testy z ostatnich 10
lat, a także informacje o tym quizie i tematów
które będą objęte.
Więc zaczynajmy.
>> Tak chłopaki mogą pamiętać, pierwszy dzień z klasy Dawida miał te lampy na.
Więc w zasadzie wszystko, co wykracza na pod maską komputera jest
wykonane w formacie binarnym.
Binary oznacza to, co brzmi jak, 0 i 1 jest.
Posiada dwie wartości może być reprezentowany.
>> Tak więc, podobnie jak w pierwszym dniu sekcji kiedy David włączone światła
żarówka przedstawiają dalej, lub 1, nasz komputer rozumie się plik binarny i jako 0
Nr 1, lub wyłączyć.
Podstawy binarnych.
Każde miejsce jest reprezentowany w bazie dwa.
Więc dodać 2 do 0 do 1 do 2, aż do góry.
>> Aby obliczyć, jaki jest twój binarny dziesiętny, po prostu po tej równanie
typu rzeczy.
Jeśli masz 1 w jednym z tych miejsc, należy pomnożyć go przez co
oprzeć to, dodaj go i masz przecinek.
Tak to jest jak się liczy do 5 w formacie binarnym.
Podobnie jak to, co robiliśmy na Ostatnie zdjęcie, to jak byś
stanowią od 1 do 5.
>> Podobnie, tak jak można dodawać i odejmowanie w postaci dziesiętnej lub zasadą 10, lub
naprawdę każda baza, można dodać na i odejmowanie w systemie binarnym.
Dokładnie to, czego można się spodziewać po dodać dwa do góry, jeśli jest równa większa
od 1, nosisz 1, sprawiają, że 0, i czy dodanie w ten sposób, po prostu
jak można się spodziewać z regularnym dziesiętny lub inny bazowej.
Fajne.
>> Tak jak mówiłem wcześniej, wszystko, przechodzi pod maską naszego komputera
odbywa się w 0 i 1, albo binarny.
Jak więc wyrazić, na przykład, liter lub cyfr, lub znaków?
A odpowiedź na to jest ASCII.
>> ASCII jest mapowanie między znakami które normalnie zobaczyć w
Język angielski, jak jest, B, C jest, podkreślenia, myślniki i
coś w tym stylu.
I mapy, które do wartości ASCII.
Wartość ASCII jest tylko numer, który może być rozumiane przez komputer.
I jak można zrobić, dodawanie i odejmowanie z numerów, można to zrobić
ich wartości ASCII.
>> Tak więc w tym przykładzie, jaki będzie to wydrukować?
Tak, tak, tylko przestrzeń przestrzeń przestrzeń B C D. Gdzie moja mysz iść?
Zauważyć można określić int na 65.
I podczas drukowania, że z pomocą procent C, będzie to interpretować, że jako
znaków i wydrukować A.
>> Podobnie, można zadeklarować go jako char.
A kiedy go wydrukować za pomocą procent C, będzie to interpretować, że jako
procent D. I jak można dodać Numer można dodawać znaki są
Wartości ASCII, w tym przypadku.
>> Więc trochę wskaźnik dla wszystkich.
5, jako ciąg znaków, nie faktycznie równa 5.
Więc jak możemy przekształcić ciąg 5 do liczby całkowitej 5?
Jakieś pomysły?
Tak.
>> Więc jeśli mamy 5 jako ciąg znaków, możemy odjąć 0.
I że da nam 5.
I podobnie, jeśli mamy 5 jako całkowitą, dodać, że do łańcucha 0.
A to daje nam ciąg 5.
Fajne.
>> Teraz przypominam sobie z powrotem tam gdzie wykład jednego rozmawialiśmy o algorytmach.
Jak więc naprawdę chcesz komputer robić ciekawe rzeczy?
Wiesz, tylko dodawanie i odejmowanie numery i druk rzeczy nie jest
że ekscytujące.
Zwykle chcemy nasz komputer do wykonać jakiś algorytm.
Coś nieco bardziej skomplikowane niż tylko prostej arytmetyki.
>> Algorytm jest tylko krok po kroku komplet z instrukcjami, jak wykonać
pewne zadanie -
Podobnie jak przepis.
Może pamiętasz pierwszy dzień klasy, w których Dawid nam liczyć pokój
ludzi i jak wiele osób były w pokoju.
Możesz być używane do liczenia jeden po drugim.
1, 2, 3, 4.
W tym przypadku algorytm czasu liniowego.
>> Ale David przedstawił algorytm można policzyć ludzi w pokoju
gdzie każdy wstaje, można powiedzieć swoje numer do innej osoby, należy dodać, że
Numer w górę, a jedna osoba siada.
I powtórzyć.
To jest jeden rodzaj algorytmu.
Możemy analizować jak skuteczne Algorytm oparty jest na to czas pracy.
Ale pogadamy trochę Więcej o tym później.
>> Więc wszystkie algorytmy mogą również być napisany w pseudokodzie.
Pseudokod jest tylko angielski jak Składnia używana do reprezentowania
język programowania.
Na przykład, jeśli chcemy zadać użytkownikowi odgadnąć mój ulubiony numer, my
Pseudokod może mieć jako takie.
>> Otrzymuj użytkownicy odgadnąć.
Jeśli przypuszczenie jest poprawna, powiedz im, są poprawne, powiedz im jeszcze
nie są one poprawne.
I pseudokod jest sposób łatwo reprezentujących pomysł lub algorytm.
Więc teraz możemy chcieć rzeczywiście napisać to w języku, że komputer
może zrozumieć.
Więc możemy napisać nasz Pseudokod i interpretacji, że do kodu źródłowego.
>> Do tej pory, należy stosować kod źródłowy pewnym składni
język programowania.
I do tej pory, w CS50, mamy był używany głównie c.
Więc może to być kod źródłowy C.
Później w trakcie, to w nocy przyjdzie w kontakt z innymi programowania
Języki, takie jak PHP.
Lub, jeśli nawet przyjąć inne klasy, wy może zrobić, Java, Python, a nawet OCML.
Jednak w naszym c języku programowania, to jak możemy napisać kod źródłowy
pseudokod, że algorytm Właśnie opisano wcześniej.
>> Więc w jaki sposób komputer faktycznie Rozumiesz to?
Tak jak mówiłem wcześniej, to tylko naprawdę rozumie zer i jedynek.
Więc jak to się od źródła Kod do czegoś, co może być
rozumieć?
Cóż, mamy coś zwany kompilator.
>> Jeśli pamiętacie z powrotem większość swojego psets, miałeś jakiś program
zapisane w pliku dot c.
A następnie należy wpisać markę.
Więc co zrobić robi?
>> Możesz wpisać markę skompilować program, bo ktoś -
kto napisał swój zestaw p; Prawdopodobnie David -
utworzony plik make.
I to mówi zrobić, aby wiedzieć, aby uruchomić kompilator, zwany dzyń, że wola
następnie skompilować kod źródłowy do obiektu Kod, który jest zer i jedynek
że komputer rozumie.
Ale trochę później, pójdziemy więcej w głębi o kompilatory.
>> Więc przypomnieć pset 0, gdzie - tak, masz pytanie?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> 1 głośnik: Tak.
Myślę, że rzeczywiście powinny być online.
Tak.
>> PUBLICZNOŚCI: Czy jak [niesłyszalne]?
>> GŁOŚNIK 1: Nie jest.
Są na cs50.net/quizzes.
>> PUBLICZNOŚCI: Slash quizy, slash 2013, slash 0, i po prostu klikać
2013 i quizy Quiz 0, przeglądu slajdów sekcji.
>> 1 głośnik: Tak, tak, jeśli chcecie wyciągnij go i patrzeć na swoje
własny komputer, to też dobrze.
Powiedz to jeszcze raz.
>> PUBLICZNOŚCI: [niesłyszalne].
>> 1 głośnik: Tak, [niesłyszalne] jest zmienna manekin.
Och, tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> 1 głośnik: Nie, strajki nie są na egzaminie.
Niestety, jej pytanie było, było Strajki na egzaminie.
I to nie jest.
Więc pset 0, chłopaki powinni mieć wszystko wdrożone coś używając podstaw.
I dowiedzieliśmy się podstawowe programowanie bloki przy użyciu podstaw.
>> Warto więc spojrzeć na niektóre z tych bloków
, które składają się na program.
Pierwszym z nich jest wyrażenie logiczne.
Wyrażenia logiczne są te i 0 jest lub coś, co ma
dwie możliwe wartości.
W tym przypadku, prawda czy fałsz, włączyć lub wyłączyć, i tak lub nie.
Przykład prostego, bardzo prosty, program, który korzysta z Boolean
Wyrażenie tutaj.
>> Tak, aby dla wyrażeń logicznych do być przydatne, mamy operatorów logicznych.
Są to napędy, które mogą być stosowane porównać pewne wartości.
Więc mamy i czy nie równe, mniej niż lub równy lub większy niż
równą lub mniejszą niż lub większe niż.
Ale te podmioty nie są bardzo przydatne chyba, że możemy połączyć je w
warunki.
>> Tak chłopaki mogą pamiętać od podstaw i od p ustawia że
miał warunki.
Są one w istocie, jak widły w Logika programu, który
wykonywana w zależności od tego, czy warunek jest spełniony.
Tak więc jednym z warunków, które mieliśmy używane wiele razy w tym kursie jest
if, else, warunki wtedy i else.
>> Oto przykład, jak możesz użyć.
Czy ktoś zna różnicę między tylko za pomocą instrukcji if wszystkie
dół wersów, jeśli inny, czy, a jeszcze w połączeniu?
Tak?
>> PUBLICZNOŚCI: [niesłyszalne].
>> GŁOŚNIK 1: Dokładnie.
Więc gdybym miał, jeśli w dół to sposób, nawet jeżeli ten warunek powraca
prawdziwe, to nadal testy dwóch następnych.
Natomiast z innego-jeśli jeszcze oświadczenie, jeśli jeden zwraca true,
inni nie są testowane.
Wszelkie pytania o to?
Fajne.
>> Więc używać if-else o else oświadczenie, jeśli wiesz, że to może tylko
jeden z tych przypadków.
Wiemy więc, jeśli x jest mniejsza niż 0, to na pewno nie będzie
większy niż 0.
>> Następnie kolejna budulcem , że dowiedzieliśmy się pętle.
Mamy trzy rodzaje pętli.
Pętli, podczas gdy pętle, i robić podczas pętli.
I na ogół, kiedy siadasz do coś napisać, musisz zdecydować
który z trzech, którego chcesz użyć.
Jak więc zdecydować, który z nich?
>> Ogólnie używamy pętli, jeśli wiemy, ile razy chcemy iteracji
przez coś lub ile razy chcemy, aby wykonać zadanie.
Używamy pętli while, jeśli potrzebujemy warunek, aby być prawdziwe, aby utrzymać funkcjonowanie.
I używamy zrobić, gdy bardzo podobne do jednocześnie, ale chcemy, aby nasz kod do uruchomienia w
najmniej jeden raz.
>> Więc podczas gdy, co jest na wolę zawsze uruchamiać co najmniej jeden raz.
Natomiast z czas, to może nie działać w ogóle, jeśli
warunek nie jest spełniony.
Wszelkie pytania z tym?
>> Tak więc struktura pętli.
Macie wszystko widziałem tego.
Zainicjować go.
Masz jakiś warunek.
Tak więc, na przykład może to zainicjować jak dla i jest równa 0.
i mniej niż 10.
I + +.
Bardzo prosta, które zrobiliśmy.
>> Do pętli while, podobnie, masz mieć jakiś inicjalizacji
jakiś stan, a jakaś aktualizacja.
Więc możemy realizować naszą pętlę również dla w pętli podczas korzystania z tego.
I podobnie z wykonania pętli while, możemy mieć pewne inicjalizacji,
wykonać coś, zaktualizować go i następnie sprawdzić stan.
>> Tak teraz działa.
Stawiamy wszystko razem.
Może chcemy napisać jakiś rodzaj funkcji.
Wspólna funkcja to polubisz Widziałeś już jest główny.
Głównym jest funkcja.
Ma typu zwrot, int.
Ma nazwę funkcji, główne.
I ma argumentów argc i argv.
Tak właśnie jest główną funkcją.
>> Inne funkcje mogą już używane, printf - printf jest funkcja -
GetInt, toupper.
Ale to się stało, że był realizowane przez nas
jakieś biblioteki.
Jeśli faceci pamiętać w tym Ta biblioteka CS50.h lub
Standardowa biblioteka wejścia / wyjścia.
Tak, pytanie?
>> PUBLICZNOŚCI: Czy główny po prostu nieodłącznym c?
Czy to po prostu rodzaj [niesłyszalne]?
>> GŁOŚNIK 1: pytanie jeśli głównym jest nieodłączną c.
I tak, wszystkie funkcje mają główną funkcję.
To rodzaj niezbędnych do komputera wiedzieć, od czego zacząć
uruchomienie kodu.
>> PUBLICZNOŚCI: Więc nie będzie [niesłyszalne]?
>> 1 głośnik: Nie
Wszelkie inne pytania?
Fajne.
Więc jak można użyć funkcji , który jest przeznaczony dla Ciebie, możesz również
Napisać własną funkcję.
Jest to funkcja, że ktoś może Napisałem do obliczenia objętości
o Q, na przykład.
Jest to rodzaj powrotu tutaj, w tym przypadku int, nasza nazwa funkcji q i nasze
lista parametrów.
>> I pamiętać, że musisz napisać dane Typ parametru, który chcesz
korzystać albo funkcja nie wiedzieć, jakiego rodzaju
Parametr należy akceptować.
Tak więc, w tym przypadku chcemy całkowitą od naszego wejścia.
Dlaczego więc możemy użyć funkcji?
>> Przede wszystkim, wielki dla organizacji.
Pomagają zerwać swój kod do bardziej zorganizowane kawałki i zrobić
czytelności.
Uproszczenie.
To jest dobre dla projektu.
Kiedy czytasz kawałek kodu i główną funkcją jest naprawdę,
bardzo długo, może to być trudniejsze do Powodem tego, co się dzieje.
Więc jeśli rozbicie go na funkcje, może to być łatwiejsze do odczytania.
I ponowne-umiejętność.
Jeśli masz kawałek kodu, który winien być zwana lub uruchomić wiele razy,
zamiast przepisywania że kod 10 razy w swojej głównej funkcji, to polubisz
chcesz go ponownie użyć.
, A następnie za każdym razem, musisz użyć, że kawałek kodu, wywołania funkcji.
>> Więc teraz, jeśli pamiętamy z powrotem do zera, rozmawialiśmy także o kilku koncepcjach,
z których jedna jest gwint.
Wątek jest pojęcie wielokrotności Sekwencje kodu
wykonanie w tym samym czasie.
Więc wracam do pierwszego dnia, gdy Dawid miał chłopaki odliczać liczbę
osób w pokoju.
>> Zasadniczo, co się dzieje na to wszystko z was byli
uruchomione osobne wątki.
I te wątki przychodzili razem dostać jakąś odpowiedź.
Podobnie w Scratch, gdy masz liczne duchy, to polubisz
mieć kota i psa.
I będą one jednocześnie prowadzenie własnych skryptów.
To jest przykład gwintów.
>> Oraz inne, które to pojęcie wprowadzony w początku było wydarzenia.
I wydarzenia są, gdy wiele części kod komunikować się ze sobą.
Na początku, kiedy to był używany transmitowane kontrolę i Kiedy
Otrzymuj bloków.
>> A także, w Problem Zestaw 4, widzieliśmy Trochę wydarzeń, jak również.
Wy mogły stosować Biblioteka Gevent.
I nie było funkcja waitForClick , w którym czekali
przez użytkownika do kliknięcia.
I click, w tym przypadku, będzie Impreza i czekać na kliknięcie jest twój
obsługi zdarzeń.
>> A także, przez wyświetlanie psets i pracuje *** swoimi psets, ty
mogła stykać się z niektóre z tych poleceń.
To jest to, co wpisane w swoje okno terminala lub cokolwiek okno
który pokazuje się na g do edycji, zasadniczo, nawigacja komputer.
>> Tak na przykład, LS wymienia Zawartość katalogu.
Dodać katalog tworzy nowy folder.
CD, zmień katalog.
RM, usunąć, usuwa plik lub jakiś katalog.
A następnie usunąć katalog usuwa katalog.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> 1 głośnik: Tak, na pewno.
Przepraszam, jeśli pytanie było sugeruje wprowadzenie tego
na ściągawki.
To może pomóc.
Jeśli masz pokój, można umieścić go na.
To także tylko ogólnie wystarczająco dobry pamiętać, bo gdy go użyć
może chcesz po prostu są to na pamięć.
Że twoje życie będzie o wiele łatwiejsze.
Czy mogę odpowiedzieć na to pytanie?
>> Więc teraz, rozmawialiśmy trochę krótko o bibliotekach.
Ale dwa główne z nich, że byli przy użyciu dotychczas w ramach są
Standard I / O i CS50.
Jakie rzeczy są w standardowym I / O bibliotece?
>> Tak, do tej pory używaliśmy printf.
W CS50, używaliśmy GetInt i GetString.
I ciąg dzieje również typ danych należy uznać w tej bibliotece CS50.
Porozmawiamy trochę bardziej w głębi o jak biblioteki i jak one działają
współdziałać z resztą kodu.
Ale to są dwa główne z nich, że my, które wchodzą w kontakt z dotychczasowego
Oczywiście.
>> Typy.
Te są dobre, aby pamiętać, jak wiele Każdy typ jest przedstawiony i jak
wiele bajtów każdego typu wymaga -
int, 4 bajty; char 1 bajt.
Pływak jest 4 bajty.
Co to jest podwójna?
>> PUBLICZNOŚCI: [niesłyszalne].
>> 1 głośnik: Tak, tak, pływak ale dwukrotnie rozmiar.
Co o długo?
>> PUBLICZNOŚCI: [niesłyszalne].
>> GŁOŚNIK 1: OK.
Co to jest długo?
>> PUBLICZNOŚCI: [niesłyszalne].
>> 1 głośnik: Tak, dwukrotnie int.
Tak.
>> PUBLICZNOŚCI: [niesłyszalne].
>> GŁOŚNIK 1: Długi [niesłyszalne].
A potem długo, długo to dwukrotnie.
>> PUBLICZNOŚCI: Nie, nie.
Długo to tylko int.
To zależy od architektury przed [niesłyszalne]
i int mają ten sam rozmiar.
[Niesłyszalne].
>> 1 głośnik: Tak długo i Int. są takie same.
A potem długo, długo jest podwójnie int.
Fajne.
A następnie, jaki jest ostatni typ?
>> PUBLICZNOŚCI: Pointer.
>> 1 głośnik: Tak, tak, my nauczyliśmy Trochę o wskazówki.
I niezależnie od tego, co jest wskaźnikiem wskazuje - to mógłby być gwiazdą char
lub int star -
to zawsze 4 bajty na wskaźnik.
Pytania o to?
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> 1 głośnik: Tak długo, i int są samo w tym urządzeniu CS50.
>> PUBLICZNOŚCI: urządzenia są całkowicie wymienne.
>> 1 głośnik: Tak.
Więc potem długo długo jest podwójna int.
>> PUBLICZNOŚCI: To jest 32-bitowy?
>> 1 głośnik: 32 bit, tak.
>> PUBLICZNOŚCI: Tak [niesłyszalne]?
>> 1 głośnik: Tak, jeśli nie wyraźnie powiedzieć, ty
należy przyjąć 32 bit.
>> PUBLICZNOŚCI: To coś powiedzieć jak przy założeniu,
architektury, jak urządzenia.
Dla 64 bit, tylko rzeczy, które Zmiany są długościami i wskaźnikami.
Oboje [niesłyszalne].
>> 1 głośnik: Tak?
>> PUBLICZNOŚCI: Pytanie.
Tak więc w jednym z praktycznych konkursy, prosi o unsigned int.
Tak jak by to określić z int [niesłyszalne]?
>> 1 głośnik: niepodpisany w to również 4 bajty.
Ale to, co jest inne o podpisane int i int?
>> PUBLICZNOŚCI: [niesłyszalne].
>> GŁOŚNIK 1: Prawo.
Można reprezentować wartości ujemne.
Ale jak to zrobić?
>> PUBLICZNOŚCI: [niesłyszalne].
>> 1 głośnik: Tak, to oszczędność 1 nieco do reprezentowania znak.
Podpisany ma jeden kawałek, który reprezentuje znak.
I to wszystko bez znaku tylko pozytywy.
>> PUBLICZNOŚCI: OK.
Więc można powiedzieć, że jest dwukrotnie dwukrotnie większy od pływaka?
>> GŁOŚNIK 1: Pokój jest dwa razy rozmiar pływaka, tak.
>> PUBLICZNOŚCI: W jaki sposób wskaźnik na długo, długo [niesłyszalne]?
>> GŁOŚNIK 1: Więc pytanie jest w jaki sposób wskaźnik na długo, długo -
w jaki sposób jest to, że gdy tylko cztery bajty Dawno jej 8 bajtów.
Więc pamiętaj, co jest wskaźnikiem, zasadniczo na samym wartości bazowej.
>> PUBLICZNOŚCI: [niesłyszalne].
>> 1 głośnik: Tak, tak, wskaźnik jest tylko miejsce w pamięci.
Więc nie ma znaczenia, ile miejsca że wskaźnik wskazuje.
Potrzebuje tylko 4 bajty, aby śledzić z tego miejsca pamięci.
Wszelkie inne pytania?
Fajne.
>> Więc ostatnią rzeczą, jaką mają jest standardowe wyjście.
Należy używać ich częściej na tyle, że można zapamiętać.
Ale to jest, gdy używamy printf, na przykład.
I mamy te symbole zastępcze, które nazywano kody formatów.
>> Więc procent c char, procent i do int, i możemy również użyć procent d..
To jest to samo.
Jednakże, na ogół, że w CS50 spróbuj użyć procent i..
Procent f dla pływaka.
Procent ld na długo długo i procent a dla łańcucha.
>> Podobnie, używaliśmy kilku te sekwencje.
Na przykład, lewy ukośnik n dla nowej linii.
To jest tylko dla kiedy formatowanie Twój kod do wydruku f.
Tak?
>> PUBLICZNOŚCI: Co to jest procent D?
>> GŁOŚNIK 1: Więc pytanie jest to, co jest procent D?
Procent d jest na wskazówki.
Procent di procent i są takie same.
>> PUBLICZNOŚCI: Jaka jest różnica między odwrotny ukośnik lewy ukośnik n i r?
>> GŁOŚNIK 1: Więc pytanie, co jest Różnica między n i luzu
luz r.?
Myślę, że backslash r. jest -
>> PUBLICZNOŚCI: Więc po prostu oznacza, lewy ukośnik r. powraca na początek linii
bez faktycznie dzieje się w nowej linii.
Więc jeśli wydrukować backslash r i wróć do początku wiersza
następnie wydrukować więcej rzeczy, zastąpisz rzeczy, które już na
[Niesłyszalne].
Mając na uwadze, n faktycznie idzie do nowego linia i idzie do [niesłyszalne].
>> GŁOŚNIK 1: No, jakieś inne pytania?
Dobrze.
Mam zamiar oddać go do Dan, który będzie kontynuowany.
>> [Aplauz]
>> DAN: W porządku.
Więc będę mówić o kolejnym szeroko Zakres pomysłów z klasy, które są
grubsza przedstawiciel tydzień dwa i Początek trzech tygodni ruszania
z odlewu, który jest po prostu sposobem na leczenia wartość określonego typu,
Wartość innego typu.
Więc możemy to zrobić ze znakami na ints, unosi się wskazówki, i
long long podwoi się.
>> Wszystko to może być stosowane jako sposoby leczenia jakąś wartość liczbową
minus char, jak niektóre inne wartość numeryczna.
Tak więc istnieją pewne problemy z tym, z Oczywiście, która pojawia się, gdy rzucisz
rzeczy, jak pływak do wskazówki.
Więc to jest trochę dziwne.
Mamy pływaka, który jest 1.31.
Mnożymy ją przez 10.000.
A potem wydrukować go jako int.
Co to wyjście?
10000 razy 1,31.
Tak 13.000, jest to, że przypuszczenie?
>> PUBLICZNOŚCI: Myślę, że to 10,000.
>> DAN: Więc jestem przemnożenie przez 10000 zanim ja rzucając go.
>> PUBLICZNOŚCI: Och.
Nie będzie tam jeden 9 i niektóre numery? 0
>> DAN: Możesz mieć jakieś dziwne cyfry.
Więc dobrze, że to 1,3 razy 10000.
Więc to jest 13000.
I ta dodatkowa dziwne -
>> PUBLICZNOŚCI: 13100.
>> DAN: 13100.
Dziękujemy, Rob.
I ta dodatkowa niesamowitość -
to 9,9 -
jest po prostu dlatego, że to odlew skończyło się zaokrąglenie w dół, gdzie
nie powinien mieć.
Tak.
>> PUBLICZNOŚCI: odlew dzieje po cokolwiek innego?
>> DAN: Tak, bo mam to w druku, to Czy to mnożenie przed nim
Czy to odlew.
>> PUBLICZNOŚCI: [niesłyszalne].
>> DAN: Myślę, że to rzucić pierwszy, Tak, co byłoby 10000.
Coś jeszcze?
Fajne.
Więc to jest 13099.
Dlaczego tak się dzieje?
Brak precyzji.
>> Pływaki nie są doskonałe.
Mogą reprezentować tylko numery pewna liczba cyfr znaczących.
Jeśli więc wydrukować 8 sig figi na ten pływak, mamy coś w rodzaju
brzydkie patrząc numer.
A to dlatego, że nie można dokładnie 1,31 reprezentowana przez prosty
Uprawnienia dwa urządzenia.
Tak to się kończy przy najbliżej przypuszczam, która kończy się
jest trochę niski.
Ma sens?
OK.
>> Teraz włącza się inny sposób robi instrukcji warunkowych, w których wszystkie
dbamy o to pojedyncza zmienna.
Zatem w tym szczególnym przykładzie mamy się liczbę całkowitą od użytkownika.
A następnie patrzymy na co to jest liczba całkowita.
Przypuszczalnie jest to liczba od jednego do czterech.
To, co mamy z prośbą o.
>> Więc zrobić przełącznik nazwa zmiennej.
Następnie skonfigurować sprawy z możliwości wartości, to może być.
Więc jednym przypadku, powiedzieć, że jest niski.
A następnie zerwać się wydostać stanu przełącznika,
nie poddawać się.
>> W kolejnym przypadku -
więc sprawa dwa i sprawa trzy -
jeśli jest to tylko przypadek dwa spada do Pierwsza linia kodu widzi, jak z
przypadku trzy, aż widzi przerwę.
Więc powód masz przypadek jeden do wydruku jest tylko niska, bo
tu mamy tę przerwę.
Jeśli, powiedzmy, zignorował tę przerwę - gdybym rzucił tę ucieczkę -
to drukować niskie, a następnie, że będzie wydrukować środku, a następnie to przełamać.
>> Tak przerwy są ważną częścią warunki i przełącznika
powinny być.
Przypadki, które nie zostały wyraźnie określone są obsługiwane przez domyślne
przypadku, w przełączniku i powinny być oddane.
>> PUBLICZNOŚCI: Tak 1, 2, 3, i 4, będzie n?
>> DAN: Wartości N może być.
Tak.
Tak?
>> PUBLICZNOŚCI: Więc gdy masz że [niesłyszalne]?
>> DAN: Można by drukować niskie, a następnie to wydrukować środku, i
wtedy to przełamać.
>> PUBLICZNOŚCI: Po co drukować środkowy, jeśli [niesłyszalne]?
>> DAN: Więc wszystko w ramach sprawy zanim przerwy podlega.
Więc sprawa jest pod jednym przypadku druku jeden, jak to jest następujące druku.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Więc ten numer jest po prostu szczególności wartość, że ta zmienna
może, prawda?
Czy to ma sens?
Tak.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Tak, sprawa będzie drukować dwa średnim, a następnie złamać.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Myślę, że każdy?
Jakie inne typy danych można przełączyć?
>> PUBLICZNOŚCI: Można przełączać ponad wszelkie typy danych.
Ale to tylko oznacza nic ponad znaków i ints i takie tam, bo
jeśli przełączenie na wskaźnik że naprawdę nie ma sensu,
przełączanie ładunku, jeśli nawet miejmy to zrobić, bo z zmiennoprzecinkowych
w precyzyjnym, to nie bardzo chcesz to zrobić tak.
Tak bardzo dużo, tylko ints i znaki i takie tam.
>> DAN: Tak, to jest, gdy masz wyraźne Wartości, które wiedzą, jak sądzę, może być
że przełącznik jest rzeczywiście użyteczne.
Dobry?
OK.
>> Zakres to zakres, który oświadczył, Zmienna obejmuje.
Tak więc w tym małym kawałkiem kodu, co mam, byłoby pełne błędów.
A powodem jest to int i oświadczył, I w ramach tego na pętli.
A następnie staram się odwoływać, że i na zewnątrz, że w zakresie pętli.
>> Więc w zasadzie, można myśleć o zakresie jak wszystko, co można zadeklarować
z wewnątrz zestawu klamrach tylko istnieje w tych klamrach.
A jeśli spróbujesz użyć tej zmiennej poza tymi klamrach, będziesz
pojawia się błąd od kompilatora.
Tak?
>> PUBLICZNOŚCI: Więc ten nie działa?
>> DAN: To nie działa tak.
Struny.
Ciąg char *.
Są dokładnie takie same.
Oni są tylko wskaźniki do znaków.
I wszystkie łańcuchy, które masz powinny zakończyć z backslash zera, co jest po prostu
Konwencja c.
>> To się nazywa terminator NULL.
I NULL -
Kapitał N, U kapitału, kapitał L, kapitał L -
nie jest taki sam, jak NULL terminator.
To jest wskazówka.
To jest znak.
Są one bardzo różne.
Pamiętam.
To będzie na quizie, prawdopodobnie.
Nie widziałem w quizie.
Tak?
>> PUBLICZNOŚCI: Więc NULL jest, powiedzmy, wskaźnik?
>> DAN: Tak.
>> PUBLICZNOŚCI: Co robi [niesłyszalne]?
>> DAN: Jeśli, powiedzmy, malloc nazywa po nie ma wystarczającej ilości pamięci, aby uzyskać
niezależnie od wielkości prosisz, malloc zwraca NULL.
To jest, w zasadzie, gdy funkcja jest powinien zwrócić wskaźnik, można
trzeba sprawdzić przed NULL, ponieważ NULL jest całkiem dobry -
jest to, w pewnym sensie, wartość śmieci.
To w miarę zera wskaźniki iść.
>> Zawsze, gdy wywołanie funkcji, która zwraca wskaźnik.
Będziesz chciał sprawdzić się pewien, że wskaźnik nie jest NULL
ponieważ NULL jest bardzo powszechne.
To coś w rodzaju powrotu śmieci.
Więc jeśli coś nie poszło dobrze, tylko zwrócić NULL zamiast.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Tak, i to jest to.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Zaklęcie to, jak ten.
To terminator NULL.
To małe litery N-U-L-L, jeśli jesteś pisowni go.
>> PUBLICZNOŚCI: A ja po prostu poszedłem powrotem i przetestowane.
A jeśli spróbujesz umieścić zmiennoprzecinkowych wartość do przełącznika, to będzie krzyczeć na ciebie
mówiąc, stwierdzenie wymaga wyrażenia z integer.
>> DAN: Proszę bardzo.
Ale tak, co znowu było pytanie?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Więc kapitał N, U kapitału, kapitał L, L jest kapitał rzeczywisty c rzecz.
Jest i będzie wskaźnik NULL traktować tylko jako takie.
Że nigdy nie spróbować i pisowni NULL i widać żadnych znaków
inny sposób niż ten.
Tak?
>> PUBLICZNOŚCI: Więc wracając do char max lub coś w notatkach, prawda
zawierać tę samą funkcję jako [niesłyszalne]?
>> PUBLICZNOŚCI: Więc to dotyczy powrót char max z getchar, lub
co to jest?
>> PUBLICZNOŚCI: Tak.
>> PUBLICZNOŚCI: Tak, tak ogólnie termin dla tych wszystkich rzeczy
są wartości wskaźnikowe.
Tak jak powrót int max od GetInt i char max z getchar, to
powinien być jak, dobrze, jeśli te rzeczy wracają do nas,
coś poszło nie tak.
>> Dla wskaźników, my akurat mamy Wartość ta, że każdy wartownik
zgadza się na.
I to jest rzecz, powrót gdy coś pójdzie nie tak.
Tak char max co używamy do reprezentowania coś
jak NULL lub getchar.
>> PUBLICZNOŚCI: Więc jeśli badania getchar, można po prostu umieścić NULL?
Czy to coś zmienia?
>> DAN: Nie można po prostu sprawdzić NULL.
Trzeba by sprawdzić char max bo Wartość zwracana przez funkcję jest
nie charakter wskaźnika.
Tak?
>> PUBLICZNOŚCI: To pytanie zadaje na długość łańcucha.
Czy to m.in. znak NULL?
>> DAN: Nie.
I to jest rzeczywiście, jak długość ciągu wie, aby zatrzymać, ponieważ przechodzi przez
Twoja tablica znaków, aż do widzi znak NULL.
I wtedy to jest jak wszystkie Dobra, skończę.
>> PUBLICZNOŚCI: [niesłyszalne] pięć?
>> DAN: Witaj będzie pięć.
Tak.
Więc tablice są ciągłe bloki pamięci.
Mają natychmiastowy dostęp mówiąc Nazwa tablicy, a następnie, w nawiasach
szelki, co indeks chcesz iść do, oni indeksowane od zera przez
długość tablicy minus 1.
>> A oni zadeklarowane przez typ rzeczą, że jesteś przechowywania
Tablica, nazwa tablicy, a następnie bez względu na rozmiar jest z tej tablicy.
Więc to jest tablica char długości sześć, że ma następujące wartości.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Tak.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Jeśli masz to, co dzieje na tablicy już.
Tak można określić to, a nie jak powiedzieć, char, co nazwa Twojego
tablica jest puste nawiasy równa kręcone E klamra H przecinek przecinek przecinek Dz.U. L przecinek
O przecinek znak NULL i nawias klamrowy.
, Które również działa jako deklaracja.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Wtedy musisz mieć Rozmiar już.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Tak.
W porządku.
Argumenty wiersza poleceń są sposobem uzyskanie danych od użytkownika, jak
argumenty głównym.
Głównym przyjmuje dwa argumenty.
Liczbę argumentów, który jest przeszedł wzdłuż linii poleceń, a
wektor łańcuch lub tablicę ciągów wszystkich argumentów.
>> Tak więc, jeśli, na przykład, o nazwie funkcję, taką jak dot z 1 miejsca, 2 przestrzeni, trzy,
argc będzie 4.
I argv 0 będzie kropka się.
Argv1 będzie 1.
argv2 będzie 2. argv3 będzie 3, w tym konkretnym przypadku.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: ostatni element w tablicy bo tablica jest długość argc Plus
jeden z aRGB, ostatni element jest wskaźnikiem NULL.
To argc Plus 1.
Tak więc w przypadku, że po prostu powiedział, że będzie argv 0 jest kropka się.
argv 1 to 1. argv2 jest 2. argv 3 jest 3.
argv 4, który jest większy niż argc będzie NULL.
>> I to jest wskaźnik NULL.
Tak.
A to dlatego, że łańcuch jest gwiazda char jest wskaźnik.
Musi więc być tego samego typu.
Tak?
>> PUBLICZNOŚCI: Dwa pytania.
Tak jeden, jaka jest różnica między tej GetString inne niż jeden typ
w silniku użytkownika?
A dwa, to jest przechowywane w swoje ostatnie wspomnienie?
Więc jak, by GetString być [niesłyszalne]?
>> DAN: Gdzie to jest zapisane?
Nie wiem, gdzie jest przechowywany.
>> PUBLICZNOŚCI: Tak, faktycznie, wiesz, jak każdy Funkcja, którą nazywamy To argumenty
przechowywane na stosie?
Tak argc i argv są główne argumenty i są w stos, czy naprawdę
tuż powyżej, co myślisz, jak początek stosu.
Jaka była druga część pytania?
>> PUBLICZNOŚCI: Więc co jest [niesłyszalne]?
>> DAN: Tak, to jest po prostu inny sposób uzyskiwania danych od użytkownika.
Ten jest nieco bardziej wydajny i to bardziej poręczne dla skryptów, ponieważ
może tylko przekazywać argumenty do głównego Funkcja zamiast czekać
dla użytkowników, jeśli nie ma żadnych użytkowników.
>> PUBLICZNOŚCI: I tak, dostać sznurki byłby [niesłyszalne].
To przechowywanie rzeczy trzeba.
>> DAN: Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Tak, argv 0 zawiera zawsze kropka ukośnik z wywołania funkcji.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Tak, każdy z argumentów są zakończył się w znak NULL, ponieważ
są ciągami.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Tak, argv argc jest wskaźnikiem NULL.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: O tak.
Tak, przepraszam.
>> PUBLICZNOŚCI: Tak [niesłyszalne]?
>> DAN: Więc pytanie jest jeśli miał Polecenie Linia kropka slash kropki na 1, 2,
by liczba linii poleceń Argumenty są dwa lub byłoby trzy?
>> PUBLICZNOŚCI: Myślę, że tak nie jest naprawdę znaczenia.
Staram się powiedzieć, oh, nie przechodzi wszelkie argumenty linii komend, kiedy,
Oczywiście, o nazwie funkcji.
Więc staram się wokalnie wykluczyć Funkcja z wiersza poleceń
argumenty, mimo że jest zawarte w argv.
>> DAN: Ale jeśli to było na teście -
Tak - a także, jeśli coś powiedzieć jak argc jest równe 3,
jesteś w bezpiecznej sytuacji.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Myślę, że jeśli zamiast nazywać to w nawiasach argc i argv ciąg
ale zachowali te same typy i tak zwane im coś innego, jak
oraz b, to jeszcze działa?
I to nadal działa, jesteś po prostu -
Zamiast stosowania argc - można użyć i b..
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Więc pytanie jest GetString będzie przechowywać pamięć na stercie
bo GetString jest char *.
Przechowuje pamięć na stercie, ponieważ wzywa teraz malloc ciągu rzeczywista
Realizacja GetString.
OK, przejdziemy.
>> Bezpieczeństwa.
Więc być naprawdę bezpieczny, możesz polegać na nr jeden i pozwalasz nikt dostęp do dowolnego
swoich danych, dlatego każdy buduje swoje maszyny,
własne systemy operacyjne, wszystkie ich programów od podstaw, i oczywiście
nie podłączać do innych urządzeń za pośrednictwem Internetu.
Więc komputery są niepewne.
Oni naprawdę są.
Musimy zaufać innym ludziom.
>> I idea bezpieczeństwa jest to, że jesteś próbując ograniczać ilość
zaufanie, że trzeba.
A jednym ze sposobów to zrobić jest przez kryptografii.
Kryptografia jest, zasadniczo, mamy tajemnic.
>> Czasami musimy przekazać nasze tajemnice wraz z, powiedzmy, w Internecie lub
innych rzeczy.
A my nie chcemy ludzi poznać te tajemnice.
Więc szyfrować nasze sekrety w sposób Mamy nadzieję, że nikt nie może dowiedzieć się.
>> Więc korzystaliśmy -
przez kurs tej klasy -
rzeczy, jak szyfr Cezara i [Niesłyszalne], które są bardzo, bardzo
niezabezpieczone sposoby szyfrowania rzeczy.
Są proste, aby dowiedzieć się, co oni są i co twoje sekrety są.
Prawdziwy świat używa dużo więcej skomplikowane systemy szyfrowania.
I nie będzie w o wiele więcej niż to.
>> Debugowanie.
GDB jest najlepszy.
Idę podkreślić to jeszcze raz.
Używać GDB cały czas każdy czas masz problem.
Polecenia, które są przydatne w GDB są złamać, które można przejść albo linię
Numer, nazwa funkcji, w zasadzie gdzie w kodzie chcesz zatrzymać,
i być w stanie przejąć kontrolę.
>> Drukuj trwa zmienną i drukuje cokolwiek to jest, że zmienna
wskazać w swoim wykonaniu.
Następny przenosi swoje wykonanie po jednym kroku.
I kroki krok wewnątrz funkcji w twoim wykonaniu.
>> Inne rzeczy są prowadzone, co jest, jak faktycznie uruchomić kod.
W dalszym ciągu podejmuje wszelkie kroki niezbędne aby dostać się do następnego punktu przerwania.
I wiele, wiele innych.
Szukać ich.
Są świetne.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Tak, co jest debugger.
Więc debugger to program, który umożliwia debugowanie programu.
To nie jest program, który wyszukuje błędy w Ci jednak, że byłoby świetnie.
>> I dla mnie to ostatni wyszukiwania.
Więc rodzaje poszukiwań, że rozmawialiśmy o w tej klasie są wyszukiwanie liniowe,
która jest po prostu, że patrzysz przez każdy element przestrzeni poszukiwań, jeden
elementem w czasie, aż znajdziesz to, co szukasz lub aż do
koniec swojej przestrzeni poszukiwań, w którym punkt, który mówi, że nie można znaleźć
Element, który szukałeś.
I ma to w najlepszym czasie stałym, co jest z 1 i 0 w najgorszym liniowych
Czas, który wynosi 0 n.
>> Binary search, która musi Elementy podłe.
Idziesz do połowy swoich elementów, sprawdzić, czy element szukasz
jest większa lub mniejsza niż element że jesteś w środku.
To jest większy, można powiedzieć, że dno swojej przestrzeni poszukiwań jest twój
aktualna lokalizacja, w środku, i ponownie uruchomić proces.
Jeśli jest mniejszy, wyglądasz powiedzieć że - tak, o co chodzi?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> DAN: Tak.
Każdy rodzaj sortowania, które zostało prowadzone w Klasa jest uczciwa gra dla testu.
>> [Śmiech]
>> DAN: A fakt, że nie mieli zrobi to za problem ustawić, to sprawiedliwe
gry do testów.
>> PUBLICZNOŚCI: Czy możemy przejść *** tym, jak -
>> DAN: To będzie już koniec.
>> Głośnik 2: Kod do faktycznej [Niesłyszalne] jest na study.cs50.net.
Więc jeśli spojrzeć na problem praktyce w stronę scalania sortowania
study.cs50.net istnieje kod za wdrożenie seryjnej rodzaju.
Więc nie masz do wykonania to sam dzisiaj.
Ale upewnij się, że rozumiesz to raczej niż tylko zapamiętując go.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> Głośnik 2: strona seryjnej sortowania na study.cs50.net istnieje praktyka
problem, że po kliknięciu przez Problem, na samym końcu jest
rozwiązanie, które jest scalanie implementacja sortowania.
Ale upewnij się, że go rozumiem zamiast po prostu go na pamięć
lub kopiując go.
>> PUBLICZNOŚCI: I całkowicie poprawny Problem do egzaminu będzie
coś tu jest lista.
Co to lista wyglądać po jeden etap pozycje rodzaju lub
wstawiania sortowania lub cokolwiek.
Jeden pełny iteracja listy.
Więc nawet jeśli nie kończy się konieczności Kod do niego, trzeba go zrozumieć
wystarczy wiedzieć, jak to się dzieje do modyfikowania tej tablicy.
>> DAN: To jest to dla mnie.
>> [Aplauz]
>> LUCAS: Hej wszystkim.
Nazywam się Lucas.
Będę mówić o rekursji, wszystko sortuje, że nauczyliśmy się i
Trochę wszystkich wskaźników.
OK?
Więc przede wszystkim, rekurencja.
Co to znaczy, że Funkcja rekurencyjna?
>> PUBLICZNOŚCI: zwraca się.
>> LUCAS: OK, domaga się, tak.
Tak jak tego obrazu, na przykład.
To tak jak na zdjęciu w środku z obrazu i tak dalej.
Tak na przykład, możesz mieć - jak Dan który mówił o poszukiwaniu binarnym.
Jednym ze sposobów, w którym binarne wyszukiwania jest rekurencyjna jest fakt, że jesteś
starając się znaleźć numer.
Więc idź do środka.
A następnie sprawdzić, czy numery w lewo i w prawo.
>> A następnie, jeśli okaże się, że numer jest będzie po lewej stronie, to samo
coś jak robi poszukiwania ponownie, ale tylko po lewej listy.
Tak to jest, jak się wydaje jak to jest rekurencyjna.
To dlatego macie rekurencyjne roztwór do seryjnej rodzaju.
>> OK, oto przykład.
Powiedzmy, że chcę, aby wybrać wszystkie liczby od 1 do n.
Mogę zrozumieć, że suma n liczba jest n oraz n minus 1 do 1.
Ale potem, jeśli patrzę na n minus 1 plus n minus 2 plus 1, to samo
coś jak zsumowanie liczb do n minus 1.
Więc mogę powiedzieć, sumę równą sumie równa n plus suma n minus 1.
Czy to ma sens?
>> I ja też miałby coś innego nazywane to przypadku podstawa, która jest
suma liczb górę zero będzie równa zero.
Tak szybko, jak dostać się do liczby zero, przestać liczyć.
Czy to ma sens?
>> Tak tu jest przykładem tego, jak Mogę realizować to.
Więc mam tej funkcji w niektórych.
Że bierze całkowitą n.
Więc ja najpierw sprawdzić, czy n jest mniejsza lub równa zeru.
A więc, jeśli jest mniejsza lub równa zeru, to powrót do zera, co jest naszym przypadku podstawa.
W przeciwnym razie, może po prostu wrócić n oraz Suma z liczby
jeden na jeden minus n.
Ma sens?
OK.
>> Więc oto jak to wygląda.
Masz sumę 2 równa 2 plus suma 1.
A niektóre z 1 jest 1 plus Suma 0, co oznacza 0..
Ma sens?
Więc jeśli spojrzymy na stosie Twojego Program jest to, na co wygląda.
>> Po pierwsze, mamy główną funkcję.
A następnie główna funkcja zwana suma 2.
A następnie suma 2 jest powiedzieć, oh, suma 2 wynosi 2 plus sumę jednego.
Więc dodać sumę 1 do stosu.
I suma 1 zamierza zadzwonić sumę 0, który również zostanie dodany
w stos.
, A następnie każda z nich są te, które na drugim wrócić
przed innymi te mogą iść dalej.
>> Tak na przykład, tutaj, suma 0, pierwsze, zamierza powrócić 0.
A następnie wybrać sumę 1.
Następnie suma 1 będzie powrót 1 do sumy 2.
I wreszcie, suma 2 idzie 3. powrót do głównego.
Czy to ma sens?
>> To naprawdę ważne, aby zrozumieć, w jaki sposób Stos działa i spróbować
zobaczyć, czy to ma sens.
OK, więc sortowanie.
Więc dlaczego jest sortowanie ważne, Przede wszystkim?
Dlaczego powinno nas to obchodzi?
Ktoś?
Daj mi przykład?
Tak?
>> PUBLICZNOŚCI: [niesłyszalne].
>> Lucas: Tak, OK.
Więc można szukać bardziej efektywnie.
To jest dobry sposób.
Tak więc, na przykład, mamy dużo rzeczy, w rzeczywistości, w naszym życiu, że
są klasyfikowane.
Na przykład słowniki.
>> To bardzo ważne, aby mieć wszystko słowa w jakiejś kolejności, że
może przejść łatwo.
Więc to, co mówił.
Możesz szukać bardziej efektywnie.
Pomyśl o tym, jak trudno byłoby mieć słownika słów, które są
kolejności losowej.
Musisz patrzeć, dość dużo, każde słowo, aż znajdziesz
Słowo, które szukasz.
>> Jeśli używasz Facebooka również, gdy patrzysz na swoich znajomych, że jesteś
żeby zobaczyć, że Facebook Połóż bliżej przyjaciel jest na szczycie tych
że nie rozmawiać, że dużo.
Jeśli pójdziesz, aż do dna Twoja przyjaciółka, masz zamiar zobaczyć
ludzi, że prawdopodobnie nawet nie pamiętaj, że jesteś przyjacielem.
A to dlatego, że Facebook rodzaju znajomych w oparciu o jak
zamknij jesteś do nich.
>> Więc organizacji danych.
Również Pokemon.
Więc widać, że wszystkie stworki mają numery.
I to jest, jak łatwo sposób dostępu do danych.
>> PUBLICZNOŚCI: Dostęp Pokemon.
>> LUCAS: Tak.
>> PUBLICZNOŚCI: [niesłyszalne].
>> LUCAS: Tak.
OK, więc wybór sortowania.
Wybór sortowania będzie wybrać Najmniejszy nieposortowane wartość każdej listy
Czas w każdej iteracji.
To trochę tak jak w rodzaju, co robisz w twojej głowie, gdy próbujesz
sortować listę na rękę.
>> Zasadniczo, wszystko co musisz zrobić to spojrzeć dla najmniejszego numeru.
Można umieścić go w posortowanej listy.
A następnie szukać następna najmniejsza liczba.
A potem dalej robić to i tak dalej.
>> Tak więc wybór jest w zasadzie można sortować za każdym razem wybrać najmniejszy
Wartość nieposortowane.
Umieścić na końcu posortowane część listy.
I robić to.
Więc szybko zobaczyć, co to wygląda.
Więc tutaj jest klasyfikowane i nieposortowane listy.
>> Więc dla posortowane z listy, jest początkowo pusty.
A potem mam zamiar wybrać Najmniej tutaj, które jest 2.
Więc mam numer 2 i umieścić w przód listy.
A potem patrzę następna najmniejsza Element, który jest 3.
Więc umieścić go na końcu od sortowanej listy.
A potem robić to.
Uważam, 4 i umieścić go na końcu.
Znajdź 5 i umieścić go na końcu.
>> I zastanowić się, jak te wszystkie razy, że Mówię, umieścić go na końcu jest,
w zasadzie, wymieniając dwie wartości.
OK?
A następnie ostatni, po prostu jeszcze jeden element.
Tak to już posortowane.
>> OK, więc wprowadzenie sortowania.
Wstawiania sortowania będziesz mieć również że sprawa posiadania sortowane i
nieposortowane listy.
Jedyną rzeczą jest to, że za każdym razem, dodajesz element do sortowane
lista, wystarczy wybrać element, który jest z przodu listy nieposortowanych.
A potem będziesz znaleźć to, co pozycji powinny być sortowane w
część listy.
>> Zobaczmy co to jest tak to więcej sensu.
Więc początkowo, na przykład, próbuję aby wstawić numer trzy w
sortowane część listy.
Więc lista nie ma nic.
Więc może po prostu umieścić numer 3.
>> Teraz chcę dodać numer 5 do posortowane częścią listy.
Więc patrzę na numer 5.
Zauważyłem, że jest większy niż 3.
Tak, wiem, że to musi być po 3.
Włożyłem więc 3 i 5.
>> Następnie chcę wstawić numer 2.
Zauważyłem, że liczba 2 jest rzeczywiście trwa to zarówno 3 i 5.
Więc tak naprawdę trzeba go umieścić wszystkie sposób na początku listy.
Więc muszę, rodzaj, przesunięcie wszystkich elementów w posortowanej listy, więc można
zrobić miejsce na 2 numer.
>> Wtedy widzę numer 6.
Widzę, że powinno być po 5.
Więc ja ją tam umieścić.
I wreszcie, patrzę na numer 4.
I zauważyłem, że powinny wynosić od 3 do 5 lat.
, A następnie umieścić go tam i przesunięcie Wszystkie pozostałe elementy.
Ma sens?
>> Bubble Sort.
Więc sortowanie bąbelkowe jest w zasadzie to, co masz zrobić - nazywamy to bańka
sortowania, ponieważ można przejść przez liście - to faktycznie lepiej, gdyby po prostu pokazać
lubisz to -
i masz zamiar porównać sąsiednie numery.
I masz zamiar zamienić ich pozycji, jeśli nie są one
w odpowiedniej kolejności.
>> Więc w zasadzie, co się zdarzyć się tutaj, na przykład
masz 6 i 8.
Wiesz, że posortowanych będzie faktycznie 6 i 5, prawda?
Więc masz zamiar zamienić zleceń.
Wtedy widzę 8 i 4 tutaj.
I zrobić to samo.
I znowu zamienić.
I wreszcie, 2 i 8.
Ja też zamienić je.
>> To się nazywa Bubble Sortuj ponieważ po każdy z tych iteracji właściwie
Najwięcej na liście dostaje wszystko aż do końca listy.
Czy to ma sens?
Ponieważ utrzymuje go wymieniać i przeniesienia go na prawo.
>> OK, więc to jest druga iteracja.
Byłoby to samo.
Zrobię jedną partycję wymiany i to ostatnie.
I, która nie ma Wymiany i lista jest posortowana.
Więc w Bubble Sortuj, to w zasadzie utrzymać przejście przez listy i zamiana
rzeczy, dopóki nie zauważy, że nie zrobiłem wszelkie swapy robić iteracji, które
Oznacza to, że lista jest już posortowana.
Ma sens?
>> Porozmawiajmy trochę o czas pracy.
Więc chłopaki pamiętam Big O, Omega i Theta?
Tak?
OK, co to jest Big O, przede wszystkim?
>> PUBLICZNOŚCI: [niesłyszalne].
>> Lucas: Tak, to się nazywa najgorszym przypadku czas pracy, co oznacza po prostu, że jest to
ile można się spodziewać program podjąć, aby uruchomić.
Podobnie jak w zakresie od -
w tym przypadku - brak.
Liczba elementów w listy w najgorszym przypadku.
Jak, w najgorszym możliwym przypadku.
>> Tak na bańki Sort, na przykład mamy Big O n placu.
Dlaczego mamy to?
Dlaczego Bubble Sortuj Big O n kwadrat?
>> PUBLICZNOŚCI: [niesłyszalne].
>> Lucas: Tak, tak, w najgorszym przypadku będzie że będę musiał zrobić n iteracji.
Tak więc każdy z iteracji zamierza doprowadzenia do wielkości elementu do końca
z wykazu.
Więc w najgorszym przypadku jest to, że mam zrobić to coś n razy.
I dla każdego z tych czasów, muszę zrobić n swapy bo muszę porównać
każde dwa elementy.
Więc dlatego to n do kwadratu bo to n razy n.
>> Następnie wybór sortowania jest również n kwadrat ponieważ dla każdej iteracji, muszę
spojrzeć na każdego elementu z wykazu.
A następnie znaleźć najmniejszy, co oznacza, że muszę
patrzeć przez n elementów.
I muszę zrobić n razy, ponieważ Muszę zaznaczyć wszystkie n elementów.
>> Wstawiania sortowania jest również n kwadrat ponieważ najgorszym przypadku będzie
być jeden, muszę wstawić liczby n, prawda?
Tak, już wiem, że będę mieć n iteracji.
Ale każda z tych liczb, gdybym miał spojrzeć na wszystkie numery w
sortowanie listy i umieścić go na drodze z przodu, że plac będzie n
ponieważ będzie ponownie n n razy.
Ma sens?
Co omega?
>> PUBLICZNOŚCI: [niesłyszalne].
>> LUCAS: To najlepszy scenariusz.
Więc jak to jest, w wielu czasach dla sortowania, sprawa jest najlepszym scenariuszem
gdy lista jest już posortowana.
Tak naprawdę nie ma nic zrobić.
Bubble Sortuj ma najlepszy scenariusz n.
Czy wiecie dlaczego?
>> PUBLICZNOŚCI: [niesłyszalne].
>> Lucas: Tak, jeśli śledzić czy racje miał żadnych danych lub swapy
Nie, jeśli masz coś takiego zestawu do prawdziwe, czy nie było iteracji, jeżeli
Lista jest już posortowane, w zasadzie, co się wydarzy to będę
spróbuj zamienić każde dwa sąsiednie elementy.
Idę zobaczyć, że nie ma swap.
A ja po prostu wrócić od razu.
>> Więc oznacza to, że po prostu musiałem przejść na liście jeden raz.
Więc to jest n bo patrzę na n elementów.
Dlaczego wybór sortowania n do kwadratu?
>> Tak, nawet jeśli lista jest posortowana, dla każde powtórzenie wyboru rodzaju, że
należy wybrać najmniejszy element.
Więc to oznacza, że mam się patrzeć na wszystkich elementach w nieposortowane
listy i znaleźć minimum dla każdej iteracji.
Czy to ma sens?
>> Miecz i wstawiania bo n tak, że staram się włożyć
numery i wszystkie numery, kiedy spróbuj je wstawić, widzę, że
znajdują się w prawidłowym położeniu.
Nie muszę iść sprawdzić wszystkie inne numery na liście sortowane.
Więc dlatego to będzie brak.
Ma sens?
I to, co jest theta?
>> PUBLICZNOŚCI: [niesłyszalne].
>> LUCAS: Co, przepraszam?
Powiedz to jeszcze raz.
>> PUBLICZNOŚCI: [niesłyszalne].
>> LUCAS: Dokładnie.
Więc widać, że tylko wybór przechowywane w seryjnej sortowania mają Thetas.
A to dlatego, że masz tylko theta jeśli zarówno duże O i omega są takie same.
OK.
I ostatecznie, scalanie sortowania w dzienniku n.
>> A potem, jak Dan mówił, sortowania korespondencji seryjnej jest jakby ten sam sposób,
robisz wyszukiwanie binarne.
Więc masz listę.
I masz zamiar przeciąć na pół.
A potem je wyciąć w mniejszych połówek.
A następnie je połączyć.
Wy pamiętać, że nie jest?
OK, jak mówił.
>> OK, wskaźniki.
Tak więc to, co jest wskaźnikiem?
>> PUBLICZNOŚCI: [niesłyszalne].
>> LUCAS: adres.
OK.
Wiem, że Dawid pokazuje kilka filmy Binky i rzeczy, wskazując
nawzajem.
Ale lubię myśleć o wskaźniki jedynie jako adres.
Więc jest to zmienna, która będzie zapisać adres.
>> Więc to jest po prostu to specjalna zmienna czyli cztery bajty.
Pamiętaj, że do niczego jest wskaźnik zawsze cztery bajty dla naszej 32-bit
Maszyna tak w przypadku Urządzenie.
I to właśnie ma miejsce zmiennego wewnątrz niego.
>> OK, więc to jest pamięć, w zasadzie.
Więc każdy blok pamięci faktycznie ma Etykieta, która jest adres
Pamięć slotty.
Więc to oznacza, że mogę mieć wskaźnik, wskazujący
każdy z tych adresów.
Więc dlatego użyjemy wskaźników jest jeśli mam pamiętać lokalizację
że zmienna jest specyficzna pamięć.
>> A wy pamiętać, że jednym z tych, przypadków było, jeśli mam funkcji
jeśli rzeczywiście chcą się Swap dla liczb rzeczywistych, faktycznie
wysłać wskaźnik.
Nie zmiennej.
Czy macie pamiętać, że?
Różnica między -
jaka jest nazwa?
Rozmowa wartości i wywołanie przez odniesienie, prawda?
>> OK, tak.
Tak nazywamy wartością.
Po prostu wyślij do zmiennej funkcjonować jesteś po prostu wysyłając wartość.
Więc faktycznie wysyłanie kopia zmiennej.
I program to nie obchodzi o tym, czy faktycznie taka sama zmienna
tworzy kopię.
>> I wywołanie przez odwołanie oznacza, że Jestem rzeczywiście przesłanie kopii
wskaźnika do tej zmiennej.
Więc oznacza to, że wyślę Lokalizacja tej zmiennej.
Więc wyczuć Mam lokalizację zmienna, gdy wywołanie funkcji
ze wskaźnikami, jestem w stanie rzeczywiście zmienić dane, które w głównym.
Ma sens?
>> Choć wskaźnik jest kopia, wskaźnik nadal ma prawdziwy adres
zmienna, że chcę zmienić.
Ma sens?
>> Więc tworzenie wskazówek.
Pamiętaj, że zawsze mają wskaźnik typ, który to wskazuje
się, a następnie gwiazdą.
A następnie umieścić nazwę.
Więc pamiętaj, że gdy masz co gwiazdy, to jest jak wskaźnik do
że bez względu na zmienne wpisz, że masz.
>> Więc w gwiazdę, na przykład, jest wskaźnik i całkowitą.
A następnie char gwiazda jest wskaźnik gwiazdka char i tak dalej.
Tak?
>> PUBLICZNOŚCI: Co zrobić, jeśli mamy wskaźnik do n do gwiazdy x.
Wiem, że tworzy wskaźnik do x.
Czy to również oświadczyć x liczby całkowitej?
>> LUCAS: OK, więc kiedy mówisz n gwiazda X, nie tworzymy wskaźnik do
zmiennej x.
Tworząc wskaźnik o nazwie X.
>> PUBLICZNOŚCI: [niesłyszalne].
>> LUCAS: Więc kiedy mówię n gwiazda X, jestem mówiąc, hej, w pamięci, mam zamiar
jeden z tych trzech pól.
I mam zamiar powiedzieć, że będzie x, który jest
będzie wskaźnik.
I coś ciekawego na temat wskaźników jest to, że możemy powiedzieć, że mają
4 bajty na komputerze 32-bitowym.
A powodem tego jest, ponieważ 4 bajty są 32-bitowe.
>> I maszyny, które są w rzeczywistości 64 bitów Wskaźniki mają adresy
że to 64 bitów.
Tak, to po prostu oznacza, że wielkość Adresy w urządzeniu jest inna.
>> Więc Odwoływanie i dereferencji.
Istnieją dwa podmioty, które chłopaki powinni pamiętać.
Pierwszy jest Ampersand.
Drugi jest gwiazdą.
Nie należy się martwić o to, że gwiazdy i gwiazdkowy hotel, bo pamiętam, że w
W tym przypadku, masz n gwiazdę.
>> To jak wszystkiego razem.
Nie ma n space star.
Więc oznacza to, że jest to rodzaj.
Pamiętaj, że gdy masz gwiazda zmienna, jesteś
mówić o rodzaju.
>> Gdy tylko gwiazda, a następnie Nazwa zmiennej, oznacza to, że
jesteś dereferencji wskaźnika, który Oznacza to, że patrzysz na
wskaźnik, znalezienie adresu to wskazując, będzie ten adres,
i patrząc na ilekroć masz tam.
Więc mówię moim studentom, że gdy masz gwiazda, warto pomyśleć, że jest to
skrót od treści.
>> Więc jeśli masz wskaźnik i Czy Star wskaźnik, to
Zawartość wskaźnika.
Więc idź do tego, co to jest, wskazując na i spojrzeć na stałej zawartości.
I znaku handlowego jest sam rzecz jak adres.
>> Więc jeśli mam zmienną - jak, niech powiedzieć, że zrobiłem int wynosi 3 -
jeśli chcę, aby znaleźć adres, który zmienna pamięci, mogę tylko zrobić
Ampersand.
Więc to jest adres.
Ma sens?
>> Więc oto przykład.
To brakuje int int b i c.
Tak int równa 3 oznacza, że Mam zamiar udać się do pamięci.
I mam zamiar znaleźć gniazdo i umieścić numer 3 tutaj.
>> A następnie int b wynosi 4.
Mam zamiar zrobić to samo.
Idź do pamięci i umieścić numer 4, w jednym z pól.
I int równa 5.
Znajdź inne pole i umieścić numer 5.
>> Więc co to jest linia robi? n gwiazda pa równa ampersand A.
Więc przede wszystkim n gwiazda rocznie.
Co on robi?
>> PUBLICZNOŚCI: [niesłyszalne].
>> Lucas: Tak, tak, n-gwiazdkowy rocznie, po pierwsze, deklaruje wskaźnik o nazwie pa.
A potem to przypisanie wartości że wskaźnik jest adres.
Więc Ampersand.
Następnie, jeśli to zrobię gwiazdki Pb, co to jest gwiazda pb?
>> Och, przepraszam.
Jest również brakuje. n gwiazda pb.
To znaczy gwiazda pc.
Tak mi przykro.
To jest to samo.
Ale teraz jestem dobry ar tworząc wskaźnik do b, a następnie wskaźnik do C.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> LUCAS: Tak.
Więc jeśli się do pamięci i przejść do Okno to jest oznaczenie na skali,
jesteś rzeczywiście będzie zobacz adresu.
OK?
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> Lucas: Tak, wskaźnik jest adres.
Nigdy nie zapominaj o tym.
To jest jak najbardziej istotne część o wskazówki.
Jest przechowywania i adres w pewnej zmiennej.
Coś jeszcze?
Wszelkie inne pytania?
OK.
>> Tak, wskaźniki i tablice.
Pamiętaj, że gdy robię int tablicy 3, w zasadzie, co robię, to jestem, rodzaj
o, deklarując się wskaźnik.
Tak więc tablica jest trochę jak wskaźnik do szczególne miejsce w pamięci, w którym
przydzielone trzy sloty dla liczb całkowitych.
Czy to ma sens?
>> Więc kiedy mam int tablicy 3, co mam robi, w zasadzie, jest stworzenie trzech
Szczeliny w pamięci.
Więc po prostu znaleźć trzy gniazda pamięci.
Więc jeśli tak, to, tablica gwiazda, to Oznacza, zawartość tablicy,
co oznacza, że usunięcie wskaźnika, idę w tym miejscu, że to wskazując,
i umieścić numer jeden.
>> A następnie, jeśli to zrobię tablicę STAR plus 1, to jest to samo, co robi tablicę
wsporniki jeden, co oznacza po prostu idę do miejsce, że to wskazuje na.
A następnie dodać 1 marki mi przesunąć się o jedną pozycję.
Więc idę do tej pozycji, w rzeczywistości, i umieścić numer dwa.
>> I w końcu, kiedy nie Tablica plus 2, pójdę tam, gdzie
wskazujące tablicowej, która na.
, A następnie przenieść do bloków pamięci.
A następnie umieścić numer trzy tutaj.
Tak?
>> PUBLICZNOŚCI: Więc tablica jest po prostu gwiazda mówiąc, że pierwszy punkt.
I można dodać 1, tylko dlatego, jesteśmy tylko bardzo
odwołującego, że pierwszy adres.
>> LUCAS: Tak.
Dlaczego, na przykład, że szereg 0, tablica 1 i tablica 2?
Mówię, dlaczego robisz 0, 1, 2, 3, zamiast z 1, 2, 3?
Jednym z powodów jest to, jednym, komputer programiści wolą zacząć
licząc od 0.
Dwa, ponieważ kiedy robisz tablicę 0, to jest to samo, co robi tablicę
oraz 0, co oznacza, idę do że stanowisko, a ja nie
pominąć żadnych bloków pamięci.
Więc nie przenieść żadnych bloków pamięci.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> LUCAS: Więc ona pyta, co jest Różnica między robi
to czy robi malloc.
Jedną z różnic jest to, że int tablica 3 jest tworzenie
tablica na stosie.
A kiedy ja malloc, to tworzy na stercie.
Czy to ma sens?
>> Więc w jaki sposób malloc rzeczywiście działa?
Dlaczego więc nawet trzeba używać malloc?
Twój rodzaj kompilatora figur wszystkie zmienne, które zadeklarowane.
I tworzy przestrzeń dla wszystkich z nich w stosie.
Więc wszystkie zmienne będą być gdzieś w stosie.
Więc tutaj jest zmienne środowiskowe.
>> Więc w zasadzie miejsca dla tych zmiennych w pamięci przeznaczono na
kompilacji.
Więc oznacza to, że komputer ma znać wszystkich tych zmiennych
wcześniej.
Nie musisz wiedzieć, co wartość masz zamiar umieścić w nich.
Ale to musi wiedzieć, jak ilość pamięci trzeba.
>> Ale teraz powiedzmy, że, na przykład, Tworząc tablicę lub przy
Ciąg, który bierzesz od użytkownika.
Nie wiem, jak długo ciąg dzieje się, na przykład.
Więc nie wiem dokładnie ile bloki pamięci przydzielić, prawda?
>> Więc to nie ma sensu można powiedzieć, umieścić 100 znaków.
I co wtedy, gdy użytkownik pisze 150?
Idziesz do przykręcenia.
>> Więc w zasadzie, nie możesz być pewien, w jaki sposób ilość pamięci należy przydzielić
podczas kompilacji programu.
Po prostu wiem, że na czas wykonywania.
Więc dlatego masz kupę.
Tak kupa będzie mieć pamięć że jesteś w trakcie przydzielania
czas trwania biegu programu.
>> Więc w zasadzie, kiedy robisz malloc, co robisz jest podziału na pamięć
czas pracy, co oznacza, że jesteś Decydując się jak w tej chwili, że
powinien mieć tę pamięć.
Tak to jest kiedy przyznawanie.
Czy to ma sens?
>> Więc pamiętaj, stos ma zmienne , które są tworzone na kompilacji.
A następnie stos ma zmienne które są tworzone, jak przejść
z malloc, na przykład.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> LUCAS: Więc jest GetString Zadzwonię do malloc.
Pozwól mi mówić o malloc i Wytłumaczę GetString.
Malloc jest tak samo w alokacji pamięci.
Więc to będzie przeznaczyć pamięci na stercie.
I to się zwraca wskaźnik do gdzie, że pamięć została przydzielona na.
>> Gdy tak robisz -
tutaj na przykład -
n wskaźnik gwiazdki.
A następnie wskaźnik wynosi malloc rozmiar razy calowe 10.
Tworzę wskaźnik.
A potem ja przypisanie tego wskaźnika do wartość wskaźnika, że malloc
to daje mi.
>> Więc pytam malloc można przydzielić miejsce dla 10 liczb całkowitych.
To jest to, co mówi.
I malloc daje mi z powrotem wskaźnika do tego miejsca.
Ma sens?
OK.
I I GetString jest, w zasadzie, robi zadzwoń do malloc więc można przydzielić
pamięci podczas wykonywania.
>> Zawsze pamiętaj, aby sprawdzić wartość null ponieważ malloc będzie zwracać wartość NULL
jeśli nie można przydzielić pamięci.
Powiedzmy, że prosisz o śmieszne ilość pamięci.
Komputer nie będzie w stanie przeznaczyć tak dużo.
>> Tak właśnie dzieje się malloc do zwróci null.
Więc zawsze pamiętać, aby sprawdzić, czy wskazówka, że masz z malloc jest
zerowy lub nie, bo jeśli tak jest, to polubisz być dereferencji wskaźnika i
powodowania uszkodzeń ubocznych.
I w końcu, nie zapomnij Twój wolnej pamięci.
>> Malloc jest tworzenie pamięci na stercie.
I trzeba zwolnić pamięć przed zakończeniem programu.
OK, to wszystko dla mnie.
Niestety, Rob.
Dzięki.
>> [Aplauz]
>> Lucas: Jakieś ostatnie pytania przed Rob przychodzi?
Nie?
Tak?
>> PUBLICZNOŚCI: nie widzę ta w trybie online.
Czy wysłał go jeszcze?
>> LUCAS: Myślę, że Dave jest przesłać go szybko.
>> DAVE: To będzie pisał.
>> LUCAS: To będzie w trybie online.
>> PUBLICZNOŚCI: To zależy.
>> LUCAS: on jest?
OK.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> Lucas: Tak, należy uwolnić wszystkie pamięci, która jest umieszczona w sterty.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> LUCAS: Tak.
Za każdym razem, że masz malloc kultury, powinieneś mieć kulturę bezpłatny
po zatrzymaniu za pomocą tej zmiennej.
Więc malloc i wolne są zawsze razem.
Ich najlepsi przyjaciele.
Tak.
Rob?
>> ROB: Pójdę szybko.
A także film będzie znosić.
Mam mikrofon na.
>> OK, więc tydzień pięć rzeczy.
Pierwszą rzeczą, jaką mamy, jest stos.
Więc pamiętaj, że jest tylko jeden stos Ramka na aktywnym funkcji.
Zobaczymy, że w sekundę.
A także pamiętać, co naprawdę idzie w każdej ramce stos będą
lokalne zmienne z naszych funkcji, argumenty, które są przekazywane do naszego
Funkcje, wraz z parą inne rzeczy, tak naprawdę nie
trzeba się martwić.
>> Więc oto przykładowy program w którym, Ogłoszenie, głównym jest printfing powrót
wartość foo 4.
foo jest tylko zamiar wrócić wartość bar 4 przecinek 6.
I bar będzie ustawić niektóre lokalne Zmienna n równa się 4 razy 6.
A następnie powrócić n.
>> Więc spójrzmy na stosie przez Rzeczywisty iteracja tego programu.
Więc jest na dole naszego stosu.
Pamiętaj, że stos rośnie.
Tak na dole stosu naszego, że posiada ramkę stosu dla Głównym.
Po uruchomieniu programu, głównym zawsze będzie wynosić
Dno naszego stosu.
>> I to, co jest wewnątrz naszego stos ramki na główną?
Więc nawet jeśli nie ma lokalnych zmiennych do głównej, jak powiedziałem wcześniej,
mamy argc i RGV zajmowania miejsca wewnątrz głównej ramki stosu.
Głównym jest teraz tak będzie wywołać funkcję foo.
A to oznacza, foo będzie uzyskać własną ramkę stosu.
>> Więc teraz jesteśmy wewnątrz bla funkcji.
I co musi iść w Foo ramka stosu?
Cóż, bla ma n argumentów.
A n jest równe 4, ponieważ to właśnie Głównym argumentem jest przepuszczenie jak Foo.
>> Więc teraz foo będzie wywołać bar.
Co to jest pasek będzie miał w środku jego 'ramce stosu?
Ma x równe 4 r równą sześciu.
To nie wszystko, że będziemy mieć w ramce stosu, ponieważ bar
posiada zmienną lokalną n.
I n będziemy równy 24.
>> Więc teraz bar będzie powrócić n.
Tak bar wraca 24 do Ramka bla stos.
A ponieważ bar jest teraz wraca, że Oznacza jesteśmy popping ramkę stosu
na bar od stosu.
Więc pamięć, że wszystko było bar użyciu jest teraz ze stosu.
>> Teraz zamierza także foo 24 powrót do głównego.
Więc teraz, że bla wraca pamięć że bla używał w swoich "
Ramka stosu jest również zniknął.
A teraz, głównym będzie printf.
Więc jest to tylko kolejny printf funkcja.
Kiedy wzywamy printf, to będzie kolejna ramka stosu dla printf
Wywołanie funkcji.
>> Co my przechodząc printf?
To, co się dzieje, aby przejść na jego ramce stosu.
Przynajmniej, przekazujemy że procent i interpretacja odwrotnego ukośnika n i
Argument 24.
To może mieć więcej w to ramki stosu jeśli printf dzieje się za pomocą niektórych
zmienne lokalne.
Nie wiemy.
>> Ale wszystko idzie w printf-tych stos ramki.
To będzie wykonać printf.
Następnie printf zrobił.
Powróci.
Wreszcie głównym odbywa.
Głównym powróci.
I wtedy nasz program jest wykonywana.
Tak?
>> PUBLICZNOŚCI: Widzisz [niesłyszalne]
argumenty [niesłyszalne]
parametry?
>> ROB: Tak jest subtelna różnica między argumentami i parametrami.
I rzeczywiście, w wspólnej mowie, ludzie mają tendencję po prostu wymieszać je cały czas.
Ale parametry formalne Nazwa rzeczy.
>> Tak argc i argv są Parametry do głównego.
Argumenty są co faktycznie przekazać w jak tych parametrów.
Tak więc, kiedy wywołać foo z 4, 4 jest argumentem olewam w.
I n parametrów, wewnątrz bla, nabiera wartości 4
od 4 był argumentem.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: n jest zmienną lokalną do baru.
n jest nadal lokalne do foo, ale jest to parametr do foo.
To nie jest zmienna lokalna.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Dzwonię foo oraz bar powrót cokolwiek bar zyski.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Tak, tylko, aby zobaczyć wielu stos ramek.
Tak?
>> PUBLICZNOŚCI: Dlaczego bla nazwie przed printf?
>> ROB: Dlaczego foo wezwany przed printf?
Więc mogło, zamiast zrobić coś jak int x równa się foo z 4
a następnie drukowane X.
Ale zamiast tego, że w połączeniu z funkcji zadzwoń do argumentu printf.
>> Zauważmy jednak, że w rzeczywistości nie możemy wykonać połączenie do printf Dopóki
dowiedzieć się, co jest bla 4.
Więc idziemy do oceny tego.
I tylko raz, że będą zrobione wrócić i ocenić to.
Tak?
>> PUBLICZNOŚCI: Ponieważ zarówno bar [niesłyszalne]
wartość, to dlaczego nie mamy [niesłyszalne]?
>> ROB: powinny być one całkowicie int.
Że nie został złapany na wielokrotne przejścia.
Tak powinno być int bar i int bla, ponieważ oba te
wracają liczby całkowite.
Nieważne jest tylko wtedy, gdy oni nie dzieje powrót wartości rzeczywistych.
Tak?
>> PUBLICZNOŚCI: Jeśli masz powyżej linii powrót, [niesłyszalne]?
>> ROB: linia powyżej zamian?
>> PUBLICZNOŚCI: Tak.
Jak, jeśli nie printf i [niesłyszalne], to wydrukować dwa razy?
>> ROB: Tak wewnątrz foo?
Gdybyśmy mieli printf tutaj?
>> PUBLICZNOŚCI: Tak.
>> ROB: Jeśli więc miał prawo printf tu, by drukować raz.
Od wzywamy foo raz w prawo tutaj, a następnie będziemy hit printf.
Następnie zadzwonimy poprzeczkę.
A następnie będzie bla powrócić.
I to jest to.
Tylko kiedykolwiek spotkać printf raz.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]
printf wywołanie foo ponieważ jesteśmy pierwszy wywołanie printf a następnie przekazujemy
argumenty.
>> ROB: Tak w teorii, nie jest printf wywołanie foo?
Więc nie ma.
Właśnie obciążenie c będzie wykonywania tych rzeczy jest, zanim można
wywołania funkcji, wszystkie argumenty do funkcji muszą
być całkowicie ocenione.
Więc jest to całkowicie oceniane?
Tak, to tylko ciąg.
To właśnie wartość.
>> Następnie musimy całkowicie ocenę tego produktu.
Gdy to nastąpi, teraz wszystkie jej argumenty są oceniane.
A teraz możemy zadzwoń do printf.
Tak?
>> PUBLICZNOŚCI: Jedno pytanie.
Jeśli masz funkcję void, musi masz powrotny średnik?
>> ROB: Ty nie średnik powrót jeśli masz funkcję void.
OK.
Teraz niektóre sterty rzeczy.
Tak kupa jest jak jedziemy do czynienia z zarządzaniem pamięcią dynamiczną.
I to bezpośrednio z kontrastów stos, który nazwalibyśmy automatyczne
zarządzanie pamięcią.
>> Więc na stosie, nigdy tak naprawdę nie ma do czynienia z tym, jak zmienne lokalne
są pchane i pojawiło się wszystko te ramki stosu i wszystkie rzeczy.
Nie musisz się o to martwić.
To jest automatyczne.
Tak kupa jest instrukcja.
I [niesłyszalne]
pochodzi z tych funkcji malloc i free.
>> Tak tu jest inny program.
Wszystko co robimy jest mallocing całkowita.
Jesteśmy przechowywanie go w gwiazdy x.
Oczywiście, musimy sprawdzić aby sprawdzić, czy x jest null.
Wtedy będziemy po prostu ustawić co x wskazuje na 50.
Drukuj to, co x wskazuje, print x, a następnie wolne x.
>> Tak jak jest to w rzeczywistości będzie wyglądać jeśli spojrzymy na nasz stosu i sterty?
Więc zacznijmy jeszcze raz.
Dno naszego stosu, jak wcześniej.
Pamiętaj, że cię kupa bezpośrednio sprzeciwia się stos?
Więc będziemy mieć Najwięcej naszych kupa tam góry.
>> Tak więc dolny naszego stosu mamy Ramka stosu dla naszego głównego.
Ma miejsca dla argc, argv, a my teraz mają zmienną lokalną x, które
jest int gwiazdki.
Więc idziemy do iteracji w ramach tego programu.
Pierwszą rzeczą, jaką mamy, jest wywołanie malloc.
>> Więc robimy wywołanie malloc.
Malloc jest funkcją.
To będzie dostać ramkę stosu.
Co my przechodząc do malloc?
Że idzie do środka ramki stosu.
Przekazujemy rozmiaru n, która jest 4.
Tak, że przechodzi do malloc.
>> Co malloc zrobić?
To chwyta nam trochę miejsca na stercie.
Więc mamy zamiar udać się do sterty.
I mamy zamiar chwycić 4 bajty z hałdy.
Więc po prostu dać, że arbitralne adres.
0x123 Wystarczy udawać, że jest adres, który jest na stercie.
>> Tak więc to, co jest wewnątrz, że faktycznie obszar pamięci od adresu Ox123?
Śmieci.
Więc nie mamy nic w nim przechowywane.
Tak daleko, jak wiemy, to może być cokolwiek.
Nie należy zakładać, że jest zerem.
To najprawdopodobniej nie zero.
>> Więc teraz malloc zwraca.
I co zrobimy, gdy powraca malloc?
Ustalamy, co zwraca.
Stawiamy X równą co to wraca.
Więc co to jest powrót?
To powrót 0x123 ponieważ jest adres bloku pamięci że
tylko przydzielone na stercie.
>> Więc powrót 0x123 X jest teraz będzie ustawiony równe 0x123, które obrazowo,
my często wyciągnąć jak rzeczywista x ma strzałka skierowana do tego bloku.
Ale x jest po prostu przechowywanie tego adresu.
Teraz musimy sprawdzić, czy x jest null.
To nie jest wartość null.
Udajemy, że malloc udało.
>> Teraz gwiazda x równa się 50.
Tak wspomina to znaczy gwiazda przejść do tego adresu.
Więc 0x123 Zamierzamy przejść do tego adresu.
Czeka nas więc, że tam.
Co my robimy na tym adresem?
Jesteśmy przechowywania 50.
>> Więc po tej linii, to jest to, co rzeczy będą wyglądać.
Więc teraz to już nie jest śmieci tam.
Teraz wiemy, że jest, że 50 szczególności adres, ponieważ
ustawiamy go do tego.
OK?
Więc teraz mamy zamiar wydrukować f.
>> Więc najpierw będziemy drukować gwiazda X.
Więc co jest gwiazda x?
Ponownie gwiazdkowy x oznacza iść do rzeczą, że x wskazuje.
Więc x jest przechowywanie 0x123 Go do tego.
Dostajemy 50.
Więc drukować f to.
A to oznacza, że będzie drukować 50.
A następnie, że wraca.
>> A potem mamy drugi printf.
Jesteśmy teraz procent p.
Jeśli nie widziałeś, to , jak można wydrukować wskaźnik.
Więc mamy procent i, procent f, a wszystkie te wcześniej.
Więc procent p, wydrukować wskaźnik.
>> Więc x jest wskaźnikiem.
Więc jeśli mamy zamiar drukować x sobie, mamy do drukowania, co faktycznie jest w środku
x, który jest 0x123 więc pierwszy print f będzie drukować 50.
Drugi druk f będzie wydrukować 0x123 Tak?
>> PUBLICZNOŚCI: Używasz procent x wydrukować wskaźnik?
>> ROB: Tak używasz procent x wydrukować wskaźnik?
Tak można, ale procent x jest tylko, ogólnie, dla jak, jeśli masz jakiś
całkowitą i chcesz wydrukować to w systemie szesnastkowym.
To jest po prostu, jak to zrobić.
>> Natomiast procent d by wydrukować jako po przecinku.
Że były mamy procent d. I jest po prostu liczbą całkowitą.
p jest w szczególności procent dla wskaźników.
>> Więc x jest wskaźnikiem.
Chcemy wykorzystać procent p.
Ale procent x mógł pracować.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Tak.
Przynajmniej na to wezwanie - więc nie obejmują go tutaj.
Ale te dwa argumenty muszą wewnątrz tej ramki stosu
oraz wszelkich zmiennych lokalnych printf dzieje się przy użyciu.
A potem następne wywołanie printf teraz wewnątrz ramki jest printf stosu
procent str. odwrotny ukośnik n i co wartość x to, co jest 0x123.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: To będzie coś wydrukować który wygląda tak.
>> PUBLICZNOŚCI: [niesłyszalne].
>> ROB: Tak drukuje je w formie adresu.
To wygląda jak adres.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Dlaczego jest to, co?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Dlaczego jest to wskaźnik 4 bajty?
Tak więc istnieje cała masa z 0 jest przed tym.
Więc jest to naprawdę 0x0000000123.
W systemie 64-bitowym, byłoby cała masa więcej zer.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne].
>> ROB: Więc najpierw printf będzie drukować -
>> PUBLICZNOŚCI: [niesłyszalne].
>> ROB: Tak, to będzie do druku co x wskazuje.
Gwiazda mówi, co to jest co wskazuje.
Chwycić go.
Więc co to jest, wskazując na?
50.
Chwycić go.
To, co mamy zamiar drukować.
Natomiast kolejna, jesteśmy tylko drukowanie x sobie.
Co jest w środku f?
0x123.
OK.
>> A potem, w końcu, mamy wolne.
Co my przechodząc uwolnić?
Przekazujemy x.
I rzeczywiście, że wyświetlany czas to w ramce stosu.
>> Więc my przekazujemy wartość 0x123 uwolnić.
Więc teraz za darmo wie, wszystko w porządku, Muszę iść do sterty
i wolne, że pamięć.
To już nie używa, co jest pod adresem 0x123.
>> Tak wolny będzie zwolnić że ze sterty.
Teraz nasza kupa jest pusty ponownie.
Nie mamy wycieki pamięci.
Teraz za darmo powróci.
Zauważ, że x jest nadal 0x123.
Ale to nie jest teraz ważne pamięci.
Już nie powinno nieprawidłowego x.
Tak?
>> PUBLICZNOŚCI: Czy powrót 0 zbędny?
>> ROB: Czy returen 0 zbędny?
Tak.
Po prostu umieścić, że nie, bo mamy powrócić do powietrza.
Więc jak to jest, tak, pozwala obejmują zwrot 0.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Tak po wolnej x, co się stanie, jeśli staramy się nieprawidłowego wskaźnika?
Jest możliwe, że nic się nie uda.
Jest możliwe, że będziemy jeszcze dostać 50.
>> Jest to możliwe, również, że pamięć jest obecnie wykorzystywane do czegoś innego.
Więc jest to niezdefiniowane zachowanie.
I nieokreślone coś znaczy może się zdarzyć.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Nie, jeśli więc przypisać x do czegoś innego.
Więc jeśli tu powiedzieliśmy x jest równa coś malloc indziej -
Rozmiar malloc wydarzenie -
następnie, że przy bloku z pamięci nie zostanie uwolniony.
I mamy oficjalnie stracił.
Że jest wyciek pamięci.
Straciliśmy wszystkie odwołania do tego bloku pamięci.
Tak więc nie ma mowy, że może nigdy uwolnić go.
OK, a następnie powrót na 0 oznacza zrobić.
>> W porządku, więc przepełnienie stosu.
Co to za pomysł tutaj?
Więc pamiętaj, kupa spada.
Stos idzie w górę.
Więc to był przykład z wykładu, Myślę, gdzie głównym jest po prostu będzie
wywołać tę funkcję foo, która zamierza nazywać się rekursywnie *** i
na nowo.
>> Więc stosu ramki będą działa dokładnie tak samo.
Więc mamy zamiar rozpocząć z głównym od dolnej ramy stosu.
Wtedy głównym będzie wywołać foo, który dostanie ramkę stosu.
>> Wtedy foo będzie wywołać foo ponownie, co będzie się
kolejna ramka stosu.
I znowu, i znowu, i znowu, i znowu, aż w końcu, prowadzimy
w kupie.
Tak to jest jak mamy przepełnienie stosu.
I w tym momencie, to seg winy.
Lub chcesz naprawdę seg winy przed ten punkt, ale tak.
>> PUBLICZNOŚCI: Czy zrzutu pamięci same, jak winy segmencie?
>> ROB: Tak zobaczysz segmentacji Rdzeń wina po cenach dumpingowych.
Masz zrzut kiedy Ci seg winy.
I to jest jak wysypisko wszystkich zawartość bieżącej pamięci tak
że można spróbować zidentyfikować dlaczego seg nic zarzucić.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Tak Segmentacja oznacza błąd jest przepełnienie stosu.
Więc niekoniecznie.
Błąd segmentacji oznacza, że jesteś wzruszające pamięci w sposób
nie powinno być.
Tak więc jednym ze sposobów, że dzieje się, gdy Ci przepełnienie stosu, zaczynamy dotykając
pamięć w sposób, który nie powinien być.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Tak wewnątrz nieskończonej pętli.
Jak to jest jak cyklicznej nieskończoności pętli i tak mamy kolejny
stos ramki każdym razem.
Ale wewnątrz regularne nieskończony, a jeden -
dobrze, niech nawet nie drukować f -
coś zrobić.
Cokolwiek.
>> Nie będziemy się coraz kolejna ramka stosu.
Jesteśmy po prostu się utrzymać zapętlenie na tej jednej instrukcji.
Stosu nie rośnie.
To fakt, że każdy rekurencyjne połączenie daje nam ramkę stosu.
Dlatego mamy przepełnienie stosu.
Tak?
>> PUBLICZNOŚCI: Więc jeśli mówi się dostać pętla, a następnie [niesłyszalne]?
>> ROB: Tak, jeśli wewnątrz pętli while było printf, nadal byłoby
nie seg winy.
Ja po prostu nie chce mylić rzeczy.
Byłoby pętli.
Można dostać jeden stos ramki dla printf.
>> Następnie printf wróci.
Wtedy bym ponownie pętlę.
Można dostać jeden stos ramki dla printf.
To powrót.
Pojedyncze ramki stosu.
Tak nie dostaniesz to nieskończona piętrzą się ramki stosu.
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Tak.
Tak to się dzieje, przepełnienie stosu , ponieważ żaden z tych
wywołania foo wracają.
Więc jeśli wrócimy, to byłoby rozpocząć utraty ramek stosu.
I wtedy nie będzie przepełnienie stosu.
I dlatego trzeba sprawę podstawową dla własnych funkcji.
Tak?
>> PUBLICZNOŚCI: Czy wielkość i potencjał stosu na stos samym do
wszystkie programy?
>> ROB: Mniej więcej.
Jest potencjał wielkości stosu i kupie takie same dla wszystkich programów?
Mniej więcej.
Istnieją pewne randomizacji do gdzie stos i rozpoczyna
gdzie zaczyna się kupa.
Jeśli zdarzy się, że całe mnóstwo zmienne globalne i rzeczy, to polubisz
zabrać z jakiegoś miejsca do sterty.
>> W systemie 64-bitowym, to praktycznie ma nieskończoną pamięć.
Jest tylko tyle.
Między 32 bitów i 64 bitów, które Jest znacząca różnica.
>> Masz zamiar dostać dużo więcej stosu i sterty na przestrzeni 64-bitowej
System, ponieważ jest po prostu więcej adresów, które mogą korzystać.
Ale na indywidualnym systemie, to będzie w przybliżeniu takie same ilości stosu
i przestrzeń sterty.
Dobrze.
>> Więc ostatnią rzeczą jest kompilacja.
Tak więc należy wiedzieć na ten proces.
Istnieją cztery wielkie kroki.
Więc najpierw trzeba być łatwe do zapamiętania.
Wstępne przetwarzanie.
Ma w nim pre prefiksu.
Więc to jest przed wszystkim innym.
>> Rzeczą do zapamiętania jest to skrót.
Tak definiuje i hash hash zawiera w każdym z nich.
Te są wstępnie procesor dyrektyw.
To są rzeczy, które pre-procesor zajmuje.
>> Więc co pre-procesor zrobić?
To naprawdę głupie rzeczy.
Wszystko to jest w stanie z nich są Kopiowanie i cięcia, i wklejanie.
>> Więc Hash zawiera standardowe i0 dot h.
Co to robi?
To chwytając standardowy i0 dot h pliku i wklejenie go do góry
wszędzie tam, gdzie jest napisane Hash zawiera średnia i0 kropki h.
>> I każdy hash określić, że mamy widziałem, co to robi?
Jego kopiowanie wartość hash zdefiniowana jest zdefiniowany jako a wklejenie, że
wszędzie tam, gdzie używasz wartości.
Tak naprawdę nie tylko preprocesora Prosty tekst oparty operacji.
Nie robi nic inteligentnego.
Więc wszystko jest bardziej skomplikowane.
>> Więc teraz, że preprocesor jest zrobić, faktycznie kompilacji.
Więc co Kompilowanie oznacza?
Jesteśmy teraz dzieje z kodu c do kodu montażowej.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Tak, złapaliśmy to.
Więc kompilacji.
Jedziemy od c do montażu.
Więc to jest rzeczywista zmiana języka.
Kompilacja się oznacza przejście od na wyższy poziom języka
język niższy poziom.
>> C jest językiem wysokiego poziomu w stosunku do zespołu.
Co to jest zespół?
Jego instrukcje, które są, całkiem dużo, wykonane na CPU.
Ale komputer nadal nie nie rozumiem montaż.
Rozumie tylko zer i jedynek.
Tak więc następny etap montażu, co prowadzi nas z tych instrukcji, które
Twój procesor rozumie i właściwie tłumaczy je, aby
z zer i jedynek.
>> Więc C do montażu na binarny.
Ale nie mam jeszcze plik wykonywalny.
Tak, że biblioteki CS50.
Mamy ci z binarnego na Biblioteka ta CS50, który ma GetString
i GetInt i to wszystko.
>> Ale biblioteka CS50 -
sama w sobie - nie jest wykonywalny.
To nie ma podstawowych funkcji.
To tylko kilka dwójkowy które można użyć.
Więc powiązanie jest jak zebranie wszystkich tych różnych plików binarnych
do rzeczywistego pliku wykonywalnego.
Jeden, że można wpisać kropka slash kropki na zewnątrz.
>> Tak to jest jak plik, który napisał, - bez względu na program -
Cezara dot c.
Ale teraz zostały zestawione w dół do binarnego.
Więc Ceaser kropka o.
I to jest nasze biblioteki CS50 binarny.
A oni są połączone do pojedynczego pliku wykonywalnego.
Tak?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Więc najpierw obejmują, pamiętam, Hash obejmują faktycznie
Etap wstępnego procesora.
Ale to osobna.
Jeśli nie używasz żadnych funkcji, które są poza twoim jednym pliku, a następnie,
nie, nie trzeba łączyć wszystko skoro masz wszystko.
>> Powiedział, że printf jest związana w.
Jeśli kiedykolwiek użyć printf, to jest coś , który musi być związany
dlatego, że nie napisał, że.
I rzeczywiście, printf automatycznie połączone w.
Wiesz, jak w linii poleceń lub gdy wpiszesz zrobić, widzisz, że mają
kreska l CS50, która ma związek w bibliotece CS50?
Printf, i takie tam, będzie być związany automatycznie.
Wszelkie inne pytania dotyczące czegokolwiek?
>> PUBLICZNOŚCI: [niesłyszalne]?
>> ROB: Łączenie?
Mamy całą masę różne pliki binarne.
Ten przykład jest kanoniczna że używamy jest biblioteka CS50.
Zebraliśmy i podawany do binarny dla tej biblioteki CS50.
>> Chcesz korzystać GetString w programie.
Więc idź i użyj GetString.
Ale bez mojego kodu binarnego dla GetString, podczas kompilowania kodu
w dół, nie można faktycznie uruchomić swoje Program, ponieważ ciąg jest GetString
nie są jeszcze w pełni zdefiniowane.
>> To tylko wtedy, gdy odwołuje się w moim binarnym że zawiera GetString że teraz wszystko
Dobra, może faktycznie wykonać GetString.
Mój plik jest kompletny.
I mogą uruchomić to.
Tak?
>> PUBLICZNOŚCI: Czy łączenie konwersji binarny do pliku wykonywalnego?
Więc nawet jeśli nie mają innego biblioteki, nie będzie on już być
konieczne tłumaczenie [niesłyszalne]?
>> ROB: Tak wykonywalny jest nadal w systemie binarnym.
To właśnie połączenie w całość kilka plików binarnych.
>> PUBLICZNOŚCI: Dziękuję bardzo.
>> ROB: Nie ma problemu.
Wszelkie inne pytania?
W przeciwnym razie, mamy wszystko ustawione.
Dobrze.
Dzięki.
>> [Aplauz]
>> PUBLICZNOŚCI: Dziękuję.
>> ROB: Tak.