>> ЗВУЧНИЦИ 1: Здраво на сите.
Ние ќе се обидеме да започнете.
Мислам дека луѓето се уште се случува да биде филтрирање во.
Но, во интерес на времето, па можеме да да ви момци од тука на време,
ние сме случува да се започне.
Па добредојде на CS50 квиз 0 преглед.
За оние од вас кои не се реализира сепак, имате некое прашање во средата.
Woo-Hoo.
>> Ако не сте почнати проучување уште или не сфати дека тоа постои уште,
последните тестови и сите информации во врска со Вашиот квиз се на cs50.net/quizzes.
Има некои прилично добри работи таму, минатото квизови од последните 10
години, како и информации околу овој квиз и теми
кои ќе бидат покриени.
Па ајде да започнете.
>> Па вие момци може да се сеќавам, првиот денот на класа Дејвид имаше оние светилки натаму.
Значи во суштина, сето она што оди за под хаубата на компјутер е
направено во бинарна.
Бинарни значи она што звучи како, 0 и 1 е.
Таа има две вредности кои може да се претстави.
>> Значи исто како и во првиот ден од делот кога Дејвид сврте на светлината
сијалицата претставуваат на, или 1, нашиот компјутер разбира бинарни како 0 и
1 е, вклучени или исклучени.
Основи на Бинарни.
Секое место е претставен во основа два.
Така да додадете 2 до 0 до 1 до 2 по целиот пат до.
>> Да се ​​пресмета она што вашите бинарни е да се децимала, што само ја следат оваа равенка
тип работа.
Ако имаш 1 во било која од овие места, го множи со што
засноваат тоа е во, тоа се додаде и ќе добиете децимална.
Значи ова е како да се избројат до 5 во бинарен.
Исто како и она што го правевте на последниот слајд, ова е како што би
претставуваат 1 до 5.
>> Слично на тоа, исто како што може да додадете и одземе во децимална или база 10, или
навистина било основа, да додадете на и одземе во бинарен.
Токму она што би очекувале кога ќе додадете две до, и ако тоа е еднакво на поголема
од 1, носите 1, таа да стане 0, и го стори Покрај тоа на тој начин, само
како што би се очекувало со редовни децимални или било која друга база.
Кул.
>> Значи како што реков претходно, сето она што продолжува под хаубата на нашиот компјутер
е направено во 0 и 1, или бинарни.
Така како ние да се изрази, на пример, букви, или броеви, или знаци?
И одговорот на тоа е ASCII.
>> ASCII е мапирање помеѓу карактери што нормално ќе се види во
Англиски јазик како А, Б, На C, долни, цртички, и
такво нешто.
И мапи, кои на ASCII вредност.
На ASCII вредност е само број, кој може да се разбере од вашиот компјутер.
И исто како и што можете да направите прилог и одземање со броеви, можете да направите
нив со ASCII вредности.
>> Така што во овој пример, што ова ќе испечатите?
Да, па само простор Б простор C простор Д Каде мојот глушец оди?
Забележите дека може да се дефинира int на 65.
И кога ќе се печати дека со користење на проценти C, тоа ќе го протолкува тоа како
карактер и ќе се печати А.
>> Слично на тоа, може да се прогласи тоа како знак.
И кога ќе го испечатите користење отсто Ц, тоа ќе го протолкува тоа како
проценти D. И како можете да додадете број, можете да додадете ликови се
ASCII вредности, во овој случај.
>> Па малку покажувачот за секого.
5, како стринг, не всушност изедначи 5.
Па како може да се конвертира низа 5 до број 5?
Сите идеи?
Да.
>> Значи, ако ние имаме 5 како стринг, можеме да одземе 0.
И тоа ќе ни даде 5.
И слично, ако имаме 5 како цел број, додаваат дека на низа 0.
И тоа ни дава низа 5.
Кул.
>> Сега, да се потсетиме назад кон предавање една каде ние разговаравме за алгоритми.
Така како ние всушност сакаат компјутер да го направите интересни работи?
Знаете, само додавање и одземање броеви и печатење работи надвор не е
таа возбудлива.
Обично, ние го сакаме нашиот компјутер да изврши некој вид на алгоритам.
Нешто малку повеќе комплекс од само едноставни аритметички.
>> Алгоритам е само чекор по чекор сет на инструкции за тоа како да се изврши
одреден task--
Исто како рецепт.
Може да се сеќавам на првиот ден од класа, каде Давид нас брои соба
на луѓето и колку луѓе беа во собата.
Може да се користи за да броење еден по еден.
1, 2, 3, 4.
Во тој случај, на еден линеарен пат алгоритам.
>> Но Давид претстави алгоритам за можете да ги брои луѓето во просторијата
каде што секој станува, што велите на вашиот број на друго лице, додаваат дека
број, и едно лице седнува.
И да го повтори тоа.
Тоа е еден вид на алгоритам.
Ние може да анализира како ефикасна на алгоритам е врз основа на тоа се кандидира време.
Но ние ќе разговараме малку повеќе за тоа подоцна.
>> Така што сите алгоритми може исто така да да биде напишан во pseudocode.
Pseudocode е само англиски како синтакса се користи за да ги претставуваат
програмски јазик.
На пример, ако сакаме да ве корисникот да се погоди мојот омилен број, ние
би можеле да имаат pseudocode како такви.
>> Добие на корисниците да се погоди.
Ако претпоставка е точна, да им каже тие се точни, друг да им каже
тие не се точни.
И pseudocode е начин на лесно што претставува идеја или алгоритам.
Па сега ние можеби ќе сакате да всушност пишува ова во јазикот дека компјутерот
можеби разбирање.
За да можеме да пишуваме нашите pseudocode и толкуваат дека во изворниот код.
>> Досега, изворниот код мора да се придржуваат до одреден синтаксата на
програмски јазик.
И досега, во CS50, ние сме користат главно в.
Така што ова може да биде изворниот код за в.
Подоцна во текот на курсот, ќе ноќта се во контакт со други програмски
јазици како PHP.
Или ако дури и да преземе други класи, може да направи Јава, Пајтон, па дури и OCML.
Но, во нашата в програма јазик, ова е како да се напише изворниот код за
на pseudocode алгоритам кој Јас само што е опишано претходно.
>> Па како не вашиот компјутер, всушност, се разбере тоа?
Како што реков претходно, тоа само навистина разбира нули и единици.
Па како не го добие од изворот код на нешто што може да биде
сфати?
Па, имаме нешто наречен компајлерот.
>> Ако се сеќавате назад во поголемиот дел од вашето psets, сте имале некој вид на програма
напишана во точка в датотека.
А потоа ќе напишеш направи.
Значи она што е да се прави?
>> Можете да напишете направи да компајлирате вашиот програма, бидејќи someone--
кој напиша вашата стр собата; веројатно David--
создаде направи датотека.
И кој му кажува направи да се знае да се кандидира на вашиот компајлерот, наречен ѕвекот, кој ќе
тогаш компајлирате вашиот изворен код за да се спротивстават код, кој е нули и единици
дека вашиот компјутер разбира.
Но, малку подоцна, ние ќе одиме повеќе во длабочина за компајлери.
>> Значи се потсетиме pset 0, where-- да, имате некое прашање?
>> ПУБЛИКАТА: [Беззвучен]?
>> ЗВУЧНИЦИ 1: Да.
Јас тие мислат, всушност, треба да биде онлајн.
Да.
>> ПУБЛИКАТА: Дали е тоа како [Беззвучен]?
>> ЗВУЧНИЦИ 1: Тоа не е.
На се на cs50.net/quizzes.
>> ПУБЛИКАТА: Slash квизови, коса црта 2013 година, намалување на 0, и само преку кликање
квизови 2013 и квиз 0, разгледува делот слајдови.
>> ЗВУЧНИЦИ 1: Да, па ако вие момци сакате да го повлечете го нагоре и се погледне во него на вашиот
сопствен компјутер, тоа е во ред.
Се каже дека се повторно.
>> ПУБЛИКАТА: [Беззвучен].
>> ЗВУЧНИЦИ 1: Да, [Беззвучен] е формална променлива.
О, да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ЗВУЧНИЦИ 1: Не, штрајкови не се на испит.
Жал ми е, нејзиното прашање беше, беше штрајкови на испит.
И тоа не е.
Па pset 0, вие момци треба да имаат сите спроведува нешто користење на нула.
И ние научивме некои основни програмирање градежни блокови користење на нула.
>> Па ајде да ги разгледаме во некои на овие градежни блокови
кои го сочинуваат програма.
Првиот е Булова израз.
Булова изрази се оние кои и 0 или нешто што има
две можни вредности.
Во овој случај, точно или неточно, или исклучите, а да или не.
Еден пример на едноставна, многу едноставна, програма која користи Буловата
израз тука.
>> Значи, со цел за Булова изрази за да се да биде корисно, имаме Булова оператори.
Тие се оператори кои можат да се користат да се споредуваат одредени вредности.
Па ние имаме и или не е еднакво на помалку од или еднакво на, е поголема или
еднаква на, и помалку од или поголема од.
Но, овие оператори не се многу корисни освен ако не можеме да ги комбинираат во
услови.
>> Па вие момци може да се сеќавам од нула и од вашиот стр поставува дека ние
имаше услови.
Тие се, во суштина, како вилушки во логиката на вашата програма со која
извршува во зависност од тоа дали услов е исполнет.
Значи еден од условите што ги имавме користи многу пати во овој курс е
ако, на друго место, ако и друго услови.
>> Еве еден пример за тоа како можете да го користите тоа.
Дали некој знае разликата помеѓу само со помош ако извештаи сите
пат стихови, ако, на друго место, ако и друго комбинација?
Да?
>> ПУБЛИКАТА: [Беззвучен].
>> ЗВУЧНИЦИ 1: Токму така.
Значи, ако имав ако на целиот пат оваа начин, дури и ако оваа состојба се враќа
вистина, тоа сепак ќе продолжи тестирање на следните две.
Каде што, со други-ако, на друго изјава, ако еден се враќа точно,
другите не се тестираат.
Било какви прашања во врска со тоа?
Кул.
>> Така да се користи ако-друго на друг изјава ако знаете дека тоа може само
да биде еден од овие случаи.
Па знаеме ако x е помалку од 0, тоа е дефинитивно нема да биде
е поголем од 0.
>> Следно, друга зграда блок што научивме се петелки.
Имаме три вида на јамки.
За петелки, додека петелки, и направи додека петелки.
И, генерално, кога ќе седне да напише нешто, ќе треба да одлучи
која од трите сакате да го користите.
Така како ние да се одлучи кој еден?
>> Ние генерално се користат за телефонска линија ако знаеме колку пати сакаме да iterate
преку нешто, или колку пати ние сакаме да се изврши една задача.
Ние ги користиме додека петелки, ако ние треба некои услов за да биде вистина да продолжи да работи.
И ние ги користиме направите додека многу слична на , но ние сакаме нашиот код да се кандидира на
најмалку еден време.
>> Значи направите додека, што е во не ќе секогаш работи барем едно време.
Каде што, со време, тоа не може да работи на сите ако
состојба не е задоволен.
Било какви прашања со тоа?
>> Па структурата на за телефонска линија.
Вие момци имаат сите виделе ова.
Можете да се иницијализира.
Имаш некој вид на состојба.
Така, на пример, ние може да се иницијализира како за i е еднаква на 0.
i е помал од 10.
И јас ++.
Многу едноставна дека ние сме направиле.
>> За време јамка, слично на тоа, што треба да имаат некој вид на иницијализација,
некој вид на состојба, и некој вид на ажурирање.
За да можеме да ја оствариме нашата за телефонска линија, исто така, како додека јамка со користење на овој.
И слично со направите додека јамка, ние може да има некои иницијализација,
изврши нешто, ажурирање, и потоа да ги проверите состојба.
>> Па сега функции.
Ние се стави сето заедно.
Ние можеби ќе сакате да се напише некои вид на функција.
Заедничка функција која може да веќе видовме е главен.
Главните е во функција.
Таа има враќање тип, int.
Таа има името на функцијата, главен.
И има аргументи, argc и argv.
Значи главната е само функција.
>> Други функции може да се користат, printf-- printf е function--
GetInt, toupper.
Но овие се случи да се спроведува за нас
некој вид на библиотека.
Ако вие момци се сеќавам, вклучувајќи овој CS50.h библиотека или
стандард I / O библиотека.
Да, прашање?
>> ПУБЛИКАТА: Дали е главен само својствени в?
Го прави тоа само вид на [Беззвучен]?
>> ЗВУЧНИЦИ 1: Прашањето е ако главната е вродено во в.
И да, сите функции имаат главната функција.
Тоа е вид на неопходни за компјутер да знаат каде да се почне
водење на код.
>> ПУБЛИКАТА: Значи, вие не би [Беззвучен]?
>> ЗВУЧНИЦИ 1: Не
Било какви други прашања?
Кул.
Па како можете да го користите функцијата што е напишано за вас, можете исто така да
напишете своја сопствена функција.
Ова е функција што некој имаат напишано за пресметување на волумен
на q, на пример.
Има враќање тип овде, во овој случај int, нашите име на функција q и нашите
листа на параметри.
>> И се напомене дека треба да се пишува на податоци тип на параметарот дека сакате да го
користат или на друго место на функцијата не знам каков вид на
параметар треба да се прифаќа.
Значи, во овој случај, ние сакаме цел број како наш придонес.
Па зошто можеби сакаме да го користите функции?
>> Прво на сите, одлично за организацијата.
Тие им помагаат на растури вашиот код во поорганизирани парчиња и го
полесно за читање.
Поедноставување.
Ова е добро за дизајн.
Кога сте читање на дел од кодот и главната функција е навистина,
навистина долго, тоа би можело да биде потешко да се Причината за тоа што се случува.
Па ако го прекине во функции, тоа може да биде полесно за читање.
И повторна употреба-способност.
Ако имате парче од код кој е се се нарекува или се кандидира повеќе пати,
наместо препишување тој код 10 пати во вашата главна функција, може да
сакаат да го повторна употреба.
А потоа секој пат кога ќе треба да го користат тоа парче код, јавете се на функција.
>> Па сега ако ние се сеќавам назад до нула, ние, исто така, зборуваше за неколку концепти,
еден од кои е нишките.
Нишка е концептот на повеќе секвенци на кодот
извршување во исто време.
Па се сетам на еден ден, каде Дејвид имаше вие момци брои исклучување на бројот на
луѓе во собата.
>> Во суштина, она што се случува на е на сите вас момци беа
водење посебна теми.
И оние теми кои доаѓаат заедно да се добие некој вид на одговор.
Слично на тоа, во самиот почеток, кога имате повеќе sprites, можеби
имаат мачка и куче.
И тие ќе бидат истовремено работи на свој скрипти.
Тоа е пример за нишките.
>> А другиот концепт кој беше воведен во нула беше настани.
И настани се кога повеќе делови од Вашиот код комуницираат едни со други.
Во нула, ова беше кога сте користеле емитува контрола и Кога
Добијат блокови.
>> И, исто така, во Проблем Постави 4, видовме малку на настани, како и.
Вие момци може да се користат библиотеката Gevent.
И имаше функција waitForClick во кој сте биле на чекање
за на корисникот да кликнете.
И вашиот клик, во овој случај, ќе биде случај и да чекаат за клик е вашиот
настан управувачот.
>> И, исто така, во текот на водење на вашиот psets и работат на вашиот psets, можете
би можело да дојде во контакт со некои од овие команди.
Тоа е она што сте ја внеле во вашиот терминален прозорец или што прозорец
кој се појавува на вашиот g уреди за, во суштина, отидете на вашиот компјутер.
>> Така на пример, ЛС листи содржината на директориумот.
Направи директориум создава нова папка.
ЦД, промена директориум.
РМ, се отстранат, брише датотеката или некои директориум.
А потоа отстранете директориум отстранува директориум.
>> ПУБЛИКАТА: [Беззвучен]?
>> ЗВУЧНИЦИ 1: Да, секако.
Жал ми е, прашањето е, ако би предложиле ставајќи ова
на измамник лист.
Тоа би можело да помогне.
Ако имате соба, можете да го облечете.
Тоа е, исто така, само генерално е доволно добар да се запамети, бидејќи кога ќе го користите
можеби ќе сакате да се само имаат мемориран.
Тоа ќе го направи вашиот живот многу полесно.
Дали одговорам на вашето прашање?
>> Па сега, ние разговаравме малку кратко за библиотеките.
Но двете главни оние кои ние сме биле користење на досега во тек се
стандард I / O и cs50.
Каков вид на работи се вклучени во стандардот I / O библиотека?
>> Да, досега сум користел printf.
Во cs50, ние сме се користи GetInt и GetString.
И податоци за видот низа, исто така, се случува да се прогласи во оваа cs50 библиотека.
Ние ќе разговараме малку повеќе во длабочина за како библиотеки работат и како тие
комуницирате со остатокот од вашиот код.
Но, тие се двете главни оние кои ние доаѓаат во контакт со досега во
курсот.
>> Типови.
Овие се добри да се сетам на тоа колку секој тип е претставен од страна на или како
многу бајти секоја од типот requires--
int, 4 бајти; знак, 1 бајт.
Плови е 4 бајти.
Што е двојно?
>> ПУБЛИКАТА: [Беззвучен].
>> ЗВУЧНИЦИ 1: Да, така плови но се удвои големината.
Што во врска со долго?
>> ПУБЛИКАТА: [Беззвучен].
>> ЗВУЧНИЦИ 1: Добро.
Што е време?
>> ПУБЛИКАТА: [Беззвучен].
>> ЗВУЧНИЦИ 1: Да, двојно е int.
Да.
>> ПУБЛИКАТА: [Беззвучен].
>> ЗВУЧНИЦИ 1: Долги [Беззвучен].
И потоа долго долго е двојно.
>> ПУБЛИКАТА: Не, не.
А долго е само int.
Тоа зависи од архитектура пред [Беззвучен]
и int имаат иста големина.
[Беззвучен].
>> ЗВУЧНИЦИ 1: Значи долга и еден int се исти.
И потоа долго долго е двојно int.
Кул.
И тогаш, што е последен тип?
>> ПУБЛИКАТА: покажувач.
>> ЗВУЧНИЦИ 1: Да, така научивме малку за совети.
И без оглед на она што покажувачот е покажувајќи to-- тоа би можело да биде знак ѕвезда
или int star--
тоа е секогаш 4 бајти за покажувач.
Прашања во врска со тоа?
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ЗВУЧНИЦИ 1: Значи долга и int се истата во оваа cs50 апаратот.
>> ПУБЛИКАТА: Апаратот се целосно менливи.
>> ЗВУЧНИЦИ 1: Да.
Па потоа долго долго е двојно еден int.
>> ПУБЛИКАТА: Ова е 32 битен?
>> ЗВУЧНИЦИ 1: 32-битна, да.
>> ПУБЛИКАТА: Значи [Беззвучен]?
>> ЗВУЧНИЦИ 1: Да, ако не е експлицитно се каже,
треба да преземе 32-битна.
>> ПУБЛИКАТА: Тоа ќе каже нешто како претпоставувајќи дека
архитектура како апаратот.
За 64 битна, единствените нешта што промени се копнее и совети.
Тие и двете [Беззвучен].
>> ЗВУЧНИЦИ 1: Да?
>> ПУБЛИКАТА: Прашање.
Така, на еден од практиката квизови, тоа прашува за една непотпишана int.
Па, како ќе се утврди дека од int [Беззвучен]?
>> ЗВУЧНИЦИ 1: Во непотпишана во е, исто така, 4 бајти.
Но, она што е различно за склучен int и непотпишана int?
>> ПУБЛИКАТА: [Беззвучен].
>> ЗВУЧНИЦИ 1: Право.
Еден може да претставуваат негативни вредности.
Но, како тоа да го направи тоа?
>> ПУБЛИКАТА: [Беззвучен].
>> ЗВУЧНИЦИ 1: Да, таа заштедува 1 малку да претставуваат знак.
Потпишаниот има една малку дека претставува знак.
И непотпишана само е за сите позитивни.
>> ПУБЛИКАТА: Добро.
Така да се каже дека двојно е двапати од големината на плови?
>> ЗВУЧНИЦИ 1: Двоен е двапати големина на плови, да.
>> ПУБЛИКАТА: Како покажувач на долго долго [Беззвучен]?
>> ЗВУЧНИЦИ 1: Значи, прашањето е како не на покажувачот на долг long--
како е тоа само четири бајти кога долго долго својот 8 бајти.
Значи се сеќавам она што е покажувач, во суштина, на самиот база вредност.
>> ПУБЛИКАТА: [Беззвучен].
>> ЗВУЧНИЦИ 1: Да, така покажувач е само мемориска локација.
Па тоа не е важно колку простор дека покажувачот покажува кон.
Тоа само треба 4 бајти да ги пратите на тој мемориска локација.
Било какви други прашања?
Кул.
>> Па последното нешто што треба е стандарден излез.
Вие треба да ги користите често доволно што може да се сети.
Но, ова е кога ние ги користиме printf, на пример.
И ние имаме овие променливи кои биле повикани формат кодови.
>> Значи проценти в знак, проценти јас за int, и ние исто така може да се користи проценти г.
Тоа е истото.
Но, општо земено, во CS50 ние обидете да го користите проценти i.
Ѓ проценти за плови.
Проценти ld за долго долго и проценти за стринг.
>> Слично на тоа, ние сме биле со помош на неколку на овие бегство секвенци.
На пример, обратна коса црта n за нов ред.
Ова е само за кога сте форматирање кодот за печатење ѓ.
Да?
>> ПУБЛИКАТА: Која е г проценти за?
>> ЗВУЧНИЦИ 1: Значи, прашањето е она што е процент г за?
Проценти d е за ints.
Процент d и проценти i се исти.
>> ПУБЛИКАТА: Што е разликата помеѓу обратна коса црта n и обратна коса црта R?
>> ЗВУЧНИЦИ 1: Значи, прашањето е што е Разликата меѓу реакција n и
реакција R?
Мислам дека обратна коса црта R is--
>> ПУБЛИКАТА: Значи обратна коса црта R подразбира само се враќа на почетокот на линијата
без всушност да одат на нова линија.
Значи, ако сте печатење обратна коса црта r и ви да се вратиме на почетокот на линијата
тогаш печати повеќе нешта, пребрише на работи кои се веќе на
[Беззвучен].
Каде што, n всушност оди на нова линија и оди на [Беззвучен].
>> ЗВУЧНИЦИ 1: Па, било какви други прашања?
Во ред.
Одам да го предаде на Дан, кој ќе продолжи.
>> [Аплауз]
>> ДАН: Сите Righty.
Па јас ќе се зборува за уште еден широк спектар на идеи од класа кои се
околу претставник на два недела и почетокот на тринеделниот поаѓање
со леење, што е само начин на третирање на вредноста на одреден тип како
вредност од различен тип.
За да можеме да го направите ова со знаци на ints, лебди на ints, и
долго копнее да се зголеми двојно.
>> Сите овие работи може да се користи како начин за лекување на некои нумеричка вредност
минус знак како некои други нумеричка вредност.
Па така постојат некои проблеми со ова, Се разбира, кој доаѓа кога ќе го дадат
работи како плови на ints.
Значи ова е малку чудно.
Имаме плови што е 1,31.
Ние го множи со 10.000.
А потоа ние го испечатите како int.
Она што го прави овој резултат?
10.000 пати 1,31.
Па 13.000, е дека се погоди?
>> ПУБЛИКАТА: Мислам дека тоа е 10.000.
>> ДАН: Значи јас сум таа множење со 10.000 пред јас да сум тоа кастинг.
>> ПУБЛИКАТА: О.
Немаше ли да постојат еден 9 и некои броеви 0?
>> ДАН: Може да имаат некои чудни бројки.
Па право, тоа е 1,3 пати 10.000.
Па тоа е 13.000.
И овој екстра weird--
>> ПУБЛИКАТА: 13.100.
>> ДАН: 13.100.
Ви благодариме, Роб.
И овој екстра weirdness--
овој 9,9--
е едноставно поради тоа кастинг заврши заокружување надолу каде
тоа не треба да има.
Да.
>> ПУБЛИКАТА: кастингот се случува по нешто друго?
>> ДАН: Значи, бидејќи имам во печат, што го прави ова множење пред да
го прави ова кастинг.
>> ПУБЛИКАТА: [Беззвучен].
>> Дан: Јас мислам дека ќе го дадат првиот, Да, кој ќе биде 10.000.
Нешто друго?
Кул.
Значи ова е 13.099.
Зошто се случи ова?
Непрецизност.
>> Пловки не се совршени.
Тие само може да претставуваат броеви на одреден број на значајни личности.
Значи, ако ние печати 8 потпишувањето смокви на ова плови, ние се еден вид на
грди бараат број.
А тоа е затоа 1,31 не може точно да биде претставена со едноставен
овластувањата на две во машина.
Па тој завршува земајќи најблиску Претпоставувам, која завршува
да се биде малку на ниско ниво.
Смисла?
Во ред.
>> Сега, вклучен е еден поинаков начин на прави условно извештаи, каде што сите
ние се грижиме за е еден променлива.
Така што во овој конкретен пример, ние сме добивање на цел број од корисникот.
А потоа ние сме во потрага на она што е цел број.
Веројатно, тоа е број помеѓу еден и четири.
Тоа е она што бараме.
>> Така да се направи префрлување на името на променливата.
Потоа ќе се постави случаи на можна цени тоа би можело да биде.
Така случај еден, велат дека тоа е ниска.
А потоа ќе се скрши да се излезе на прекинувачот состојба, па
не продолжувам да одам.
>> Во следните case--
така случај два и случајот three--
ако тоа е случај два тоа само се спушти до на првата линија на кодот го гледа како со
случај три додека не го гледа пауза.
Така причина што се случај еден да само печати ниска е затоа што
имаат оваа пауза тука.
Ако јас, да речеме, игнорира овој break-- ако јас фрли оваа breakaway--
тоа ќе печати ниско, а потоа тоа ќе печати средината, а потоа тоа ќе се скрши.
>> Па паузи се важен дел на прекинувачот услови и
тие треба да бидат таму.
Сите случаи кои не се наведени експлицитно се управувани од страна стандардно
случај во прекинувач и треба да се фрли.
>> ПУБЛИКАТА: Значи: 1, 2, 3, и 4 ќе биде n?
>> ДАН: Вредности дека n може да биде.
Да.
Да?
>> ПУБЛИКАТА: Значи, кога имаш дека [Беззвучен]?
>> Дан: Можете да печатите ниско, а потоа тоа ќе печати средина, и
тогаш тоа ќе се скрши.
>> ПУБЛИКАТА: Зошто тоа ќе печати средината ако [Беззвучен]?
>> ДАН: Значи сè под еден случај пред пауза потпаѓа под.
Така случај еден печатење е под случај еден како што е оваа следниов печатење.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Значи овој број е само одредена вредност, која ја оваа променлива
може да се земе, нели?
Дали тоа има смисла?
Да.
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Да, случајот двете ќе печати средината и потоа пауза.
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Мислам дека има?
Она што другите типови на податоци може да ви ги префрлиме?
>> ПУБЛИКАТА: Вие може да се префрлате над било типови на податоци.
Но, тоа само значи ништо повеќе карактери и ints и работи како што, бидејќи
ако сте префрлување во текот на покажувачот што навистина не се направи смисла,
префрлување во текот товари, ако дури и ајде да да го направите тоа, бидејќи на подвижна точка
во прецизноста, вие не би навистина сакате да го направи тоа во секој случај.
Така доста, само ints и знаци и работи како што.
>> ДАН: Да, тоа е кога имаш експлицитна вредности кога знаеш, мислам дека може да биде
дека прекинувачот е всушност корисно.
Добар?
Во ред.
>> Опсег е опсегот што декларирана променлива се протега.
Така што во овој малку парче од код Имам, тоа ќе биде полн со грешки.
А причината е што прогласи оваа int Јас во рамките на опсегот на овој за телефонска линија.
И тогаш јас се обидувам да референца дека јас надвор од тоа за телефонска линија обем.
>> Значи, во основа, може да се размислува за обемот како нешто што ви се изјасни
со внатре сет на големи загради само постои во оние големи загради.
И ако се обидете и ја користат таа променлива надвор од оние големи загради, ќе
добиете грешка од компајлерот.
Да?
>> ПУБЛИКАТА: Значи ова не функционира?
>> ДАН: Ова не функционира, да.
Жици.
Низа на char *.
Тие се исти.
Тие се само совети како да се ликови.
И сите стрингови кои што треба да заврши со обратна коса црта нула, што е само
на в конвенција.
>> Тоа се нарекува NULL терминатор.
И NULL--
капитал N, главниот град У, главниот град L, главниот град L--
не е иста како и на NULL терминатор.
Е покажувач.
Ова е карактер.
Тие се многу различни.
Се сеќавам него.
Тоа ќе биде на квиз, веројатно.
Не сум ја видел на квизот.
Да?
>> ПУБЛИКАТА: Значи NULL е, да речеме, на покажувачот?
>> ДАН: Да.
>> ПУБЛИКАТА: Што го прави [Беззвучен]?
>> ДАН: Ако, да речеме, Примерок се вика кога ќе немаат доволно меморија за да се
без оглед на големината си бара, Примерок ќе се врати NULL.
Тоа е, во основа, секогаш кога функцијата е би требало да се врати покажувач, можете
треба да се провери против NULL, бидејќи NULL е прилично good--
тоа е, на некој начин, ѓубре вредност.
Тоа е нула колку што совети се оди.
>> Секогаш кога ќе се јавите на функција, која враќа покажувач.
Сте ќе сакате да се провери да се сигурни дека тоа не е NULL покажувач
бидејќи NULL е многу честа.
Тоа е вид на ѓубре враќање.
Па ако нешто не оди право, само се врати NULL наместо тоа.
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Да, и тоа е тоа.
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: тоа правописот како оваа.
Тоа е NULL терминатор.
Тоа е со мали букви N-У-L-L ако сте го правопис.
>> ПУБЛИКАТА: И јас само отиде врати и тестирани.
И ако се обидете да се стави подвижна запирка вредност во еден гајтан, тоа ќе се развикам
велејќи изјава бара израз на цел број тип.
>> ДАН: Има да одите.
Но, да, она што беше прашањето повторно?
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Значи, капиталот N, главниот град У, главниот град L, главниот град L е вистински в работа.
Тоа е NULL покажувач и ќе биде во само да се третираат како такви.
Вие никогаш нема да се обиде и да ги запишува на NULL карактер и да видиме кој било
друг начин од ова.
Да?
>> ПУБЛИКАТА: Значи се врати во знак макс или нешто во белешките, би го
отелотворуваат истата функција како [Беззвучен]?
>> ПУБЛИКАТА: Значи ви се однесуваат на враќање знак максимум од getchar, или
што и да е?
>> ПУБЛИКАТА: Да.
>> ПУБЛИКАТА: Да, па воопшто термин за сите тие работи
се Сентинел вредности.
Значи како се враќа int макс од GetInt и знак максимум од getchar, тоа е
би требало да биде како, добро, ако овие работи се враќаат во нас,
нешто не беше во ред.
>> За покажувачи, ние едноставно се случи да имаат оваа стража вредност дека секој
се согласува на.
И ова е нешто што можете да се врати кога работите одат наопаку.
Така знак максимум е она што го користите да претставуваат нешто
како NULL или getchar.
>> ПУБЛИКАТА: Значи, ако сте тестирање getchar, може да ви само се стави NULL?
Кои ќе се направи разлика?
>> Дан: Не може само да се провери NULL.
Ќе треба да се провери знак макс бидејќи повратната вредност од функцијата е
a го карактерот на покажувачот.
Да?
>> ПУБЛИКАТА: Ова прашање бара за стринг должина.
Дали тоа вклучува NULL карактер?
>> Дан: Не
И тоа е всушност како стринг должина знае да престане, бидејќи тоа оди преку
Вашиот низа на карактери до го гледа е нулти карактер.
И тогаш тоа е како сите право, јас сум направено.
>> ПУБЛИКАТА: [Беззвучен] пет?
>> ДАН: Здраво ќе биде пет.
Да.
Па низи се континуирано блокови од меморијата.
Тие имаат брз пристап со кажување на името на низата, а потоа, во кадрава
протези, без оглед на индекс сакате да одите да, тие се индексирани од нула преку
на должината на низата минус 1.
>> И тие се декларирани од видот на нешто што сте чување во
низа, името на низата, а потоа без оглед на големината е дека низа.
Значи ова е знак низа со должина од шест дека има овие вредности.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Да.
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Ако имате она што се случува во низата веќе направени.
Па може да се определи тоа, наместо како што е, да речеме, знак, без оглед на името на вашиот
низа е, празни загради еднаква на кадрава подготвуваат H запирка Е запирка L L запирка запирка
О запирка NULL карактер и кадрава голема заграда.
Тоа, исто така, ќе работат како декларација.
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Тогаш ви треба да имаат големината веќе направени.
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Да.
Сите Righty.
Командната линија аргументи се начин на добивање на влез од корисникот, како
аргументи до главна.
Главната зема два аргументи.
Бројот на аргументи, која е донесен заедно командната линија и
низа вектор или стринг низа на сите аргументи.
>> Значи, ако јас, да речеме, се нарекува функција како што се точка 1 од вселената, 2 простор, три,
argc ќе биде 4.
И argv 0 ќе биде точка надвор.
Argv1 ќе биде 1.
argv2 ќе биде 2 argv3 ќе биде 3, во тој конкретен случај.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Последниот елемент во низа бидејќи низа е должина argc плус
еден од argb, последниот елемент е NULL покажувач на.
Тоа е argc плус 1.
Значи во случај дека само што рече, тоа ќе биде argv 0 е точка надвор.
argv 1 е 1. argv2 е 2 argv 3 е 3.
argv 4, која е една поголема од argc ќе биде NULL.
>> И тоа е NULL покажувач.
Да.
А тоа е затоа стринг е на знак ѕвезда е покажувач.
Па затоа мора да бидат од ист тип.
Да?
>> ПУБЛИКАТА: Две прашања.
Значи еден, што е разликата помеѓу ова и GetString други од еден вид
во на корисникот моторот?
И второ, дали е се чуваат во вашите неодамнешни меморија?
Па како, GetString би биде [Беззвучен]?
>> ДАН: Каде е тоа чуваат?
Не знам каде што е зачувана.
>> ПУБЛИКАТА: Значи, всушност, знаеш како било функционираат ти се јавам тоа е аргументи
се чуваат во стек?
Па argc и argv аргументи до главна и тие се на магацинот, или навистина
над она што мислите како почетокот на магацинот.
Она што беше на другата страна на прашањето?
>> ПУБЛИКАТА: Значи она што е [Беззвучен]?
>> ДАН: Да, тоа е само поинаков начин за добивање на информации од корисникот.
Малку поефикасни и ова ми е тоа е handier за скрипти затоа што
може да помине аргументи за да вашиот главен функција, наместо да се чека
за корисниците ако немаат никакви корисници.
>> ПУБЛИКАТА: И да, се низи ќе биде [Беззвучен].
Тоа ќе се сместат нешто ви треба.
>> ДАН: Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Да, argv 0 секогаш вклучува дот намали на повикот функција.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Да, секој од аргументите се заврши во NULL карактер, бидејќи тие
се стрингови.
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Да, argv argc е NULL покажувач.
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Oh yeah.
Да, жалам.
>> ПУБЛИКАТА: Значи [Беззвучен]?
>> ДАН: Значи, прашањето е, ако сте имале командната линија точка намали точка од 1, 2,
би бројот на командната линија аргументи да стојат две или тоа ќе биде три?
>> ПУБЛИКАТА: Мислам дека тоа не е е важно.
Имам навика да се каже, ах, ти не помине било командната линија аргументи кога,
Очигледно, наречен функција.
Па јас имаат тенденција да вокално исклучи функција од командната линија
аргументи иако тоа е вклучени во argv.
>> ДАН: Но, ако тоа беше на test--
yeah-- и, исто така, ако ви кажам нешто како argc еднаква на 3,
ти си во безбедна состојба.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Мислам дека ако наместо на повик на овој во argc и argv низа загради
но се чуваат на ист тип и само се нарекува им нешто различно како
и б, ќе се уште работат?
И се уште ќе работи, ќе just--
наместо користење argc-- можете да користите и b.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Значи, прашањето е GetString е ќе се сместат меморија во грамада
бидејќи GetString е char *.
Тоа продавници меморија во грамада, бидејќи тоа повикува сега Примерок рамките на реалните
имплементација на GetString.
Добро, се движат натаму.
>> Безбедност.
Така да биде навистина безбеден, ќе се потпира на не еден и ќе им овозможи на никој пристап до сите
на вашите информации, кој е зошто секој гради своите машини,
своите оперативни системи, сите нивни програми од нула, и очигледно
не се поврзете со било кој други машини преку интернет.
Значи компјутери се несигурни.
Тие навистина се.
Ние треба да му верувате на другите луѓе.
>> И идејата за безбедност е тоа што сте се обидува да го ограничи износот на
довербата што ви треба.
И еден од начините да го направите тоа е преку криптографија.
Криптографија е, во суштина, ние имаме тајни.
>> Понекогаш и ние треба да поминат наши тајни заедно со, да речеме, на интернет или
други работи.
И ние не сакаме на луѓето да знаете овие тајни.
Па ние го криптирате наши тајни во начин која се надеваме дека никој не може да дознаам.
>> Па ние used--
низ текот на оваа class--
работи како Цезар шифра и [Беззвучен], кои се и многу, многу
несигурни начини на енкрипција на нештата.
Тие се лесно да дознаам што тие и она што вашите тајни се.
Реалниот свет користи многу повеќе Слободна енкрипција шеми.
И ние нема да навлегувам во многу повеќе од тоа.
>> Дебагирање.
GDB е најдобар.
Одам да стресот на овој повторно.
Користат GDB цело време секој кога имате проблем.
Команди кои се корисни во GDB се пауза, која ќе помине или линија
број, име на функција, во суштина каде во вашиот код ќе сакате да се запре,
и да бидат способни да ја преземат контролата.
>> Печати зема променлива и отпечатоци од што и променлива е во тоа
момент во вашиот извршување.
Следна движи вашиот извршување заедно еден чекор.
И чекор чекори во функција во извршување.
>> Други работи се кандидира, кој е како што всушност се кандидира на вашиот код.
Продолжи презема сите чекори потребни да се дојде до следното брејк.
И постојат многу, многу други.
Изгледа за нив.
Тие се големи.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Да, што е дебагерот.
Па дебагерот е програма која ти овозможува да debug вашата програма.
Тоа не е програма која пронаоѓа грешки за вас, иако тоа би било одлично.
>> И последен за мене е од пребарувањето.
Па видови на пребарување, кои ние разговаравме за во оваа класа се линеарно пребарување,
што е само дека ќе се погледне низ секоја елемент на пребарување простор, еден
елемент во еден момент, додека не го најдете она што сте во потрага за или додека не се постигне
на крајот од вашето пребарување простор во кој точка да се каже дека не можете да најдете
елементот дека сте биле барате.
И ова е потребно во најдобар постојана време, која е 0 од 1 и во најлош случај линеарна
време, што е 0 на n.
>> Бинарни пребарување, што треба гадно елементи.
Да одите на средината на вашата елементи, види дали елемент што го барате
е поголем или помал од елементот дека сте во средината.
Тоа е поголем, ќе се каже дека на дното на вашето пребарување простор е вашата
моментална локација, на средината, и ќе го рестартирате процесот.
Ако е помала, ќе се погледне велат дека the-- Да, што има?
>> ПУБЛИКАТА: [Беззвучен]?
>> ДАН: Да.
Било кој вид на вид и тоа е се изучува во класа е фер игра за тестот.
>> [Смеа]
>> ДАН: И фактот дека не сте имале да го направи тоа за проблем сет, тоа е фер
игра за тестот.
>> ПУБЛИКАТА: Може да одиме над неа како to--
>> ДАН: Тоа ќе исчезнат во текот.
>> ЗВУЧНИЦИ 2: Актуелната код за [Беззвучен] е на study.cs50.net.
Значи, ако се погледне на практиката проблем во страницата на спојување вид
study.cs50.net, таму е кодот за спроведување на спојат вид.
Значи, вие не треба да ја имплементира тоа сами вечерва.
Но, бидете сигурни дека го разбирам, а отколку само да го меморирање.
>> ПУБЛИКАТА: [Беззвучен]?
>> ЗВУЧНИЦИ 2: Страната на спојување вид study.cs50.net, постои пракса
проблем кој, ако кликнете преку проблем, на самиот крај постои
решение, кое е спојување имплементација вид.
Но, бидете сигурни дека го разбирам наместо само да го меморирање
или копирање надолу.
>> ПУБЛИКАТА: А совршено валидни проблем за испит ќе биде
нешто како еве листа.
Што значи оваа листа изгледа по еден чекор од селекции вид или
вметнување вид или whatever.
Една целосна повторување на листата.
Па дури и ако не завршуваат потреба да код за тоа, треба да се разбере
доволно за да знам како тоа се случува да се модификација на оваа низа.
>> ДАН: Тоа е тоа за мене.
>> [Аплауз]
>> LUCAS: Еј секого.
Моето име е Лукас.
Одам да се зборува за рекурзија, сите видовите што научивме, и
малку на сите совети.
Во ред?
Значи прво на сите, рекурзија.
Што значи тоа да се каже дека функција е рекурзивен?
>> ПУБЛИКАТА: се нарекува себеси.
>> LUCAS: Добро, се нарекува, да.
Па како оваа слика, на пример.
Тоа е како на сликата во на сликата и така натаму.
Така на пример, може да have-- како Ден што зборуе бинарни пребарување.
Еден начин на кој бинарни пребарување е рекурзивен е фактот дека ти си
се обидува да најде број.
А ти оди кон средината.
А потоа да се провери ако броевите се во лево и во десно.
>> А потоа, ако се дознае бројот е ќе биде на левата страна, тоа е истиот
нешто што се прави од пребарувањето повторно, но само на левата страна од листата.
Па тоа е како тоа звучи како тоа е рекурзивен.
Па тоа е зошто вие момци имаат рекурзивен решение за спојување вид.
>> OK, па тука е еден пример.
Па да речеме дека сакам да го изберат сите броеви од 1 до n.
Можам да сфатат дека збирот на n број е n плус n минус 1 до 1.
Но, тогаш, ако се погледне N минус 1 плус N минус 2 плус 1, тоа е истиот
нешто како собирање броеви до n минус 1.
Па можам да кажам збирот на еднаков Збирот е еднаква на n плус збир од n минус 1.
Дали тоа има смисла?
>> И јас исто така ќе треба нешто друго наречен база случај, што е тоа што
збирот на броевите до на нула ќе биде нула.
Па штом ќе стигнете до број нула, да престанам статистиката.
Дали тоа има смисла?
>> Па еве еден пример за тоа како Јас може да се спроведе тоа.
Значи имам оваа функција во некои.
Која трае цел број n.
Па еве јас прво проверете ако n е помалку или еднаква на нула.
Па ако е помал или еднаков на нула, јас врати нула, што е нашата база на случајот.
Инаку, јас само може да се врати n плус збирот на броевите од
една до n минус еден.
Смисла?
Во ред.
>> Па еве како изгледа.
Имате сума од 2 еднаквите 2 плус сума од 1.
А некои од 1 е 1 плус збирот на 0, кое е 0.
Смисла?
Значи, ако се погледне на магацинот на вашите програмата, тоа е она што изгледа.
>> Прво, имаме главната функција.
А потоа главната функција наречен Збирот 2.
А потоа Збирот 2 се случува да се каже, ох, сума 2 еднаква 2 плус Збирот на еден.
Па јас додадете сума од 1 до магацинот.
И збирот на 1 ќе ја повика Збирот на 0, кој е, исто така, ќе треба да се додаде
на магацинот.
А потоа секоја од овие оние кои се на врвот на уште една мора да се врати
пред останатите да продолжувам да одам.
>> Така на пример, овде, збирот на 0, прво, се случува да се вратат 0.
А потоа изберете сума од 1.
Тогаш сума од 1 ќе врати 1 до сума од 2.
И конечно, сума од 2 ќе да се вратат 3 до главна.
Дали тоа има смисла?
>> Тоа е навистина важно да се разбере како магацинот работи и обидете се да
види дали тоа го прави смисла.
Добро, така што сортирање.
Значи, зошто е важно сортирање, Прво на сите?
Зошто ние треба да се грижите?
Некој?
Дај ми еден пример?
Да?
>> ПУБЛИКАТА: [Беззвучен].
>> LUCAS: Да, во ред.
Па можете да направите пребарување поефикасно.
Тоа е добар начин.
Така, на пример, имаме многу работи, всушност, во нашите животи кој
се подредени.
На пример, речници.
>> Тоа е многу важно да се имаат сите зборови во некаков ред дека ние
да пристапите лесно.
Значи тоа е она што го велат.
Можете да пребарувате поефикасно.
Мислам на тоа колку тешко ќе биде да се имаат речник во кој зборовите се во
случаен редослед.
Ќе треба да се погледне, прилично многу, секој збор се додека не се најде
зборот кој го барате.
>> Ако користите Фејсбук, исто така, кога сте во потрага на вашите пријатели, вие сте
ќе видиме дека Фејсбук ги ставаш поблиску пријател е на врвот на оние
дека не се зборува за тоа многу.
Ако одите по целиот пат до дното на твојот пријател листа, си оди за да се види
луѓе кои веројатно дури и не се сеќавам дека сте пријатели со.
И тоа е затоа што на Фејсбук видови вашите пријатели врз основа на тоа
блиски сте до нив.
>> Па организирање на податоците.
Исто така Одг.
Така што гледате дека сите pokemons имаат броеви.
И тоа е како лесна начин на пристап до податоци.
>> ПУБЛИКАТА: Пристапување Одг.
>> LUCAS: Да.
>> ПУБЛИКАТА: [Беззвучен].
>> LUCAS: Да.
Добро, така селекција вид.
Изборот вид се случува да го изберете Најмалиот несортиран вредноста на листа на секој
Времето во секоја итерација.
Тоа е вид на како вид што правиш во вашата глава кога ќе се обидуваш да се
сортирате листата на рака.
>> Во суштина, сите вие ​​направите е да се погледне за најмалите број.
Ќе го стави во Подредена листа.
А потоа ќе се погледне за Следниот најмал број.
И тогаш ќе ги прават кој и така натаму.
>> Па селекција вид е во основа изберете секој пат најмалите
несортиран вредност.
Стави на крајот на подредени дел од листата.
И да ја задржите тоа го прават.
Значи, да брзо се види она што ова изгледа како.
Па тука е сортирана и вон листа.
>> Така и за подредени на листата, тоа е првично празна.
А потоа јас ќе одам да го изберете најмалиот број тука, што е 2.
Па јас го добиете бројот 2 и го ставам во предниот дел на листата.
И тогаш јас со нетрпение за следната најмалите елемент, кој е 3.
Па јас го стави на крајот на подредени листа.
А потоа јас го правам тоа.
Сметам 4 и го стави на крајот.
Најди 5 и го стави на крајот.
>> И гледам како сите оние пати кои Сакам да кажам дека го стави на крајот е,
во основа, Замена на две вредности.
Во ред?
А потоа последната, можете само има уште еден елемент.
Па тоа е веќе сортирана.
>> Добро, така вметнување вид.
Вметнување вид ви се случува да имаат, исто така, дека нешто се има подредени и
на несортиран листа.
Единственото нешто е тоа што секој пат кога сте додавање елемент на подредени
листа, само изберете елемент кој е во предниот дел на несортиран листата.
А потоа ви се случува да се најде она што позиција што треба да биде во сортирани
дел од листата.
>> Ајде да видиме што тоа е така тоа го прави повеќе смисла.
Значи на почетокот, на пример, јас се обидувам да го вметнете број три во
сортирани дел од листата.
Па листата не мора ништо.
Па јас само може да се стави на бројот 3.
>> Сега, сакам да го додадете бројот 5 на на сортирани дел од листата.
Така јас гледам на бројот 5.
Забележувам дека тоа е поголем од 3.
Па знам дека тоа мора да биде по 3.
Па да го ставам 3 и 5.
>> Тогаш сакам да внесете го бројот 2.
Забележувам дека бројот 2 е, всушност, трае тогаш и 3 и 5.
Па јас всушност треба да се стави сето тоа на начин на почетокот на листата.
Па морам да, вид на, промена на сите елементи во подредени листа, па можам
направи простор за бројот 2.
>> Тогаш јас се види бројот 6.
Гледам дека тоа треба да биде по 5.
Па јас го стави таму.
И на крај, гледам во бројот 4.
И јас се забележи што треба да биде помеѓу 3 и 5.
А потоа го ставив таму и промена сите други елементи.
Смисла?
>> Меур вид.
Така меур вид е во основа она што си ќе do-- ние го нарекуваме меур
вид затоа што одат преку list-- тоа е всушност подобро ако јас само се покаже
ви се допаѓа this--
и ви се случува да се споредуваат соседни броеви.
И ви се случува да се разменуваат своите позиции и ако тие не се
во вистинската цел.
>> Значи, во основа, она што се случува да се се случи е тука, на пример,
имаш 8 и 6.
Вие знаете дека по некаков ред, ќе всушност ќе биде 6 и 5, нели?
Па ви се случува да се разменуваат на наредби.
Потоа гледам 8 и 4 овде.
И јас го прават истото.
Јас се разменуваат повторно.
И, конечно, 2 и 8.
Јас, исто така ги трампа.
>> Таа се вика меур Сортирај бидејќи по секоја од овие повторувања, всушност,
најголем број од листата добива сите на начин да се на крајот на листата.
Дали тоа има смисла?
Бидејќи се држи Замена на тоа и се движи кон десно.
>> Добро, така што ова е втор повторување.
Тоа ќе биде истото.
Ќе се направи една swap и тогаш последен.
Јас дека нема свопови и на листата се подредени.
Значи во меур Сортирај, ние во основа ги задржи минува низ листата и Замена на
работи додека не забележите дека јас не направив било свопови тоа го прават повторување, што
значи дека листата е веќе сортирана.
Смисла?
>> Ајде да зборуваме малку за трчање време.
Па вие момци се сеќавам Биг О, Омега, и Тета?
Да?
Добро, што е Биг О, прв од сите?
>> ПУБЛИКАТА: [Беззвучен].
>> LUCAS: Да, таа е наречена најлош случај траење, што само значи дека тоа е
колку очекувате програма да се земе да се кандидира.
Како во поглед of--
во овој case-- n.
Бројот на елементи во листа во најлош случај.
Како, во најлош можен случај.
>> Значи за меур Сортирај, на пример, имаме Биг О од n квадрат.
Зошто имаме тоа?
Зошто е меур Сортирај Биг О Н плоштад?
>> ПУБЛИКАТА: [Беззвучен].
>> LUCAS: Да, така најлош случај ќе биде што треба да направите n повторувања.
Така што секоја од повторувања ќе донесе најголемиот елемент на крајот
на листата.
Па најлош случај е дека имам да го направите тоа нешто n пати.
А за секое од тие времиња, морам да направи N свопови, бидејќи морам да се споредуваат
секој два елементи.
Па тоа е зошто тоа е n квадрат бидејќи тоа е n пати n.
>> Потоа, селекција вид е исто така n квадрат затоа што, за секој повторување, морам да
погледне во секој елемент во листата.
А потоа да најде најмалиот, што значи дека јас треба да
се погледне преку n елементи.
И морам да го направи тоа n пати, бидејќи Морам да изберете сите n елементи.
>> На вметнување вид е исто така n квадрат бидејќи најлошото сценарио ќе
да биде еден, морам да вметнете n броеви, нели?
Па јас веќе знаете дека јас ќе одам да има n повторувања.
Но за секој од тие броеви, ако имав да се погледне во сите на броеви во
на подредени листа и го стави сите на патот на предната страна, која ќе биде n квадрат
бидејќи тоа ќе биде n пати n повторно.
Смисла?
Што е со омега?
>> ПУБЛИКАТА: [Беззвучен].
>> LUCAS: Тоа е најдоброто сценарио.
Па тоа е како, во многу пати за сортирање, најдобар случај е
кога на листата е веќе сортирана.
Така што навистина не треба да се направи нешто.
Меур Сортирај има најдобар сценарио на n.
Дали ви момци знам зошто?
>> ПУБЛИКАТА: [Беззвучен].
>> LUCAS: Да, ако ги пратите на дали податоците дажби имале свопови или
не, ако имате нешто како во собата да се точно ако имаше повторување, ако
Листата е веќе сортирани, во основа, што ќе се случи е јас ќе одам да
обидете се да се разменуваат на секои две соседните елементи.
Одам да се види дека нема свопови.
И јас само се врати веднаш.
>> Па тоа значи дека јас само мораше да одат низ листата едно време.
Па тоа е n, бидејќи гледам на n елементи.
Зошто изборот вид n плоштад?
>> Да, дури и ако на листата се подредени, за секој повторување на селекција вид, јас
треба да изберете најмалку елемент.
Па тоа значи дека имам надвор да се погледне на сите елементи во несортиран
листа и се најде на минимум за секоја итерација.
Дали тоа има смисла?
>> И вметнување меч е N бидејќи во случај што јас се обидувам да го вметнете
броеви и сите на броеви, кога обидете се да ги вметнете, гледам дека тие
се во право позиција.
Јас не треба да одат проверите сите други броеви во несортиран листа.
Па тоа е зошто тоа ќе биде n.
Смисла?
И она што е тета?
>> ПУБЛИКАТА: [Беззвучен].
>> LUCAS: Што, ми е жал?
Велат дека тоа повторно.
>> ПУБЛИКАТА: [Беззвучен].
>> LUCAS: Токму така.
Така можете да видите дека само избор се чуваат во Merge вид имаат thetas.
И тоа е затоа што имате само тета ако двата Big O и Омега се исти.
Во ред.
И, конечно, се спојат вид е во дневникот n.
>> И тогаш, како Дан беше велејќи: Спојување вид е вид на како истиот начин на кој
правиш бинарни пребарување.
Па ќе го добиете листа.
И си оди за да се намали на половина.
И потоа да ги сече во помали половини.
И потоа да ги спојат.
Вие момци се сеќавам дека, нели?
Добро, како што тој велеше.
>> Добро, совети.
Значи она што е покажувач?
>> ПУБЛИКАТА: [Беззвучен].
>> LUCAS: Еден адреса.
Во ред.
Знам дека Дејвид покажува еден куп на видеа на binky и работите покажувајќи
едни со други.
Но, јас сакам да мислам на совети само како адреса.
Па тоа е променлива што се случува за да ја запази адреса.
>> Па тоа е само оваа специјална променлива што е четири бајти долго.
Запомнете, дека покажувачот да се е секогаш четири бајти долго за нашата 32-битна
машина, така и во случајот со апаратот.
И тоа само има локација на променлива во внатрешноста на неа.
>> Добро, така што оваа меморија, во основа.
Па секој блок од меморија, всушност, има етикета, која е адресата на
slotty меморија.
Па тоа значи дека може да има покажувач укажува на
било која од овие адреси.
Значи причината зошто ние ќе користат покажувачи е ако јас треба да се запамети локацијата
дека специфични променлива е меморија.
>> А вие момци се сеќавам дека еден од оние случаи беше ако имам функција
ако имам навистина сакате да swap за reals, јас, всушност,
треба да се испрати покажувач.
Не променлива.
Дали ви момци се сеќавам дека?
Разликата between--
она што е името?
Повикувајќи од вредност и повикување со упатување, нели?
>> Во ред, да.
Викни од вредност.
Кога само испрати променливата на функционира сте само испраќање на вредност.
Значи ти си, всушност испраќање копија на променлива.
И вашата програма не се грижам за ако истата променлива всушност
прави копија.
>> И повикувајќи со повикување значи дека Јас сум, всушност, испраќа копија од
Покажувач на таа променлива.
Па тоа значи дека јас сум испраќање на локација на таа променлива.
Па имам чувство на локацијата на променлива, кога ќе се јавите на функцијата
со покажувачи, јас сум во можност да всушност промена на податоците, која беше во главната.
Смисла?
>> Иако, на покажувачот е копија, покажувачот се уште има вистинска адреса на
променливата што сакам да се промени.
Смисла?
>> Па создавање совети.
Се сеќавам, на покажувачот секогаш имаат од типот дека тоа покажува
да, а потоа ѕвезда.
И тогаш ќе го стави името.
Па се сеќавам дека секогаш кога имате без оглед на ѕвезда, тоа е како покажувач
дека без оглед на променливата внесете дека сте имале.
>> Значи тука во ѕвезда, на пример, тоа е покажувач и цел број.
А потоа знак ѕвезда е покажувач знак ѕвезда и така натаму.
Да?
>> ПУБЛИКАТА: Што ако имаме покажувачот до n ѕвезда х.
Знам дека создава покажувач на x.
Дали тоа, исто така, се изјасни х цел број?
>> LUCAS: Добро, така што кога ќе се каже N ѕвезда x, не сте создавање на покажувачот на
променливата x.
Сте создавање покажувач име х.
>> ПУБЛИКАТА: [Беззвучен].
>> LUCAS: Значи, кога велам N ѕвезда x, јас сум велејќи дека, еј, во меморијата, јас ќе одам да
се добие една од овие три кутии.
И јас одам да се каже дека се случува да биде x, кое е
ќе биде покажувач.
И нешто интересно за покажувачи е дека ние се каже дека тие имаат
4 бајти за 32-битна машина.
А причина за тоа е затоа што 4 бајти се 32-бита.
>> И машини кои се 64 парчиња, всушност, имаат совети адреси
кои се 64 парчиња долго.
Па тоа само значи дека големината на адреси во машина е поинаква.
>> Па Препораки и Dereferencing.
Постојат два оператори кои вие момци треба да се запамети.
Првиот е симболот.
Вториот е ѕвезда.
Не се збунети од страна на ѕвездата и ова ѕвезда, бидејќи се сеќавам дека, во
овој случај, ќе мора N ѕвезда.
>> Тоа е како целата работа заедно.
Нема n простор ѕвезда.
Па тоа значи дека тоа е тип.
Запомнете, дека кога имате променливата ѕвезда, ти си
зборуваме за тип.
>> Кога имаш само ѕвезда, а потоа името на променливата, тоа значи дека
ќе бидете dereferencing покажувачот, кој значи дека сте во потрага на
покажувач, наоѓање на адреса е што укажува, се случува на таа адреса,
и да гледа во кога имате таму.
Па јас кажам моите ученици дека кога имате ѕвезда, треба да мислат дека тоа е
кратенка од содржината на.
>> Значи, ако имате покажувач и ќе направи ѕвезда покажувач, тоа е
содржина на покажувачот.
А ти оди да што и да се покажува кон и се погледне на постојана содржина.
И симболот е иста нешто што се адреса на.
>> Па ако имам променлива a-- како, да кажам дека не int a еднаква 3--
ако сакам да се најде на адресата на која променлива меморија, јас само може да се направи
симболот на.
Па тоа е адресата на а.
Смисла?
>> Па еве еден пример.
Ова е исчезнати int b и int в.
Па int a еднаква 3 значи дека Одам да одите на меморија.
И јас одам да се најде слот и го стави на број 3 тука.
>> А потоа int b е еднаква на 4.
Одам да го прават истото.
Оди до меморијата и се стави број 4 во еден од кутии.
И int еднаква на 5.
Најде друг кутија и го стави на бројот 5.
>> Па што прави на оваа линија? N ѕвезда годишно еднаква на симболот на.
Значи прво на сите, n ѕвезда на годишно ниво.
Што го прави тоа?
>> ПУБЛИКАТА: [Беззвучен].
>> LUCAS: Да, па N ѕвезда на годишно ниво, прво, декларира покажувач кој се нарекува годишно.
И тогаш тоа е давање на вредноста на што покажувачот да биде на адресата на а.
Па симболот на.
Потоа, ако го направам ѕвезда ФБ, она што е ѕвезда Гр?
>> Ох, извинете.
Ова е, исто така, водат за исчезнати. N ѕвезда Гр.
Мислам ѕвезда компјутер.
Многу ми е жал.
Тоа е истото.
Но, сега сум добра AR создавање на покажувачот да б а потоа покажувач на в.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> LUCAS: Да.
Значи, ако одат на меморија и да одите кутија која е одредници за годишно,
ти си, всушност ќе види адреса на.
Во ред?
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> LUCAS: Да, покажувачот е адреса.
Никогаш не заборавајте дека.
Тоа е како најважен дел за совети.
Има чување и адреса на некои променлива.
Нешто друго?
Било какви други прашања?
Во ред.
>> Па Покажувачи и низи.
Запомнете дека кога правам int низа 3, основа, она што јас го правам е јас сум, вид
на, објавувајќи покажувач.
Па низа е вид на како покажувач кон специфичен простор во меморијата во која јас
доделени три слота за цели броеви.
Дали тоа има смисла?
>> Значи, кога јас int низа 3, она што јас сум Притоа, во основа, е создавање на три
слотови во меморијата.
Па јас само се најде три слотови во меморијата.
Значи, ако јас се направи, тогаш, ѕвезда низа, таа во основа значи дека содржината на низа,
што значи дека ги избрише покажувач, одам на тоа место дека тоа посочувајќи,
и јас се стави на број еден.
>> И тогаш, ако го направам ѕвезда низа плус 1, тоа е исто што и прави низа
загради еден, што само значи одам на место дека тоа е покажувајќи кон.
А потоа плус 1 прави ме префрлат една позиција.
Па одам на оваа позиција, всушност, и го стави на број два.
>> А потоа, конечно, кога правам низа плус 2, одам до местото каде
укажувањето на низа е.
И тогаш јас се пресели во меморија блокови.
А потоа го ставам број три тука.
Да?
>> ПУБЛИКАТА: Значи ѕвезда низа е едноставно велејќи дека првата точка.
И можете да додадете 1, само затоа што ние сме само навистина
референцирање дека првата адреса.
>> LUCAS: Да.
Зошто ние, на пример, велат низа 0, низа 1, и низа 2?
Јас велам, зошто го правиш 0, 1, 2, 3, наместо на 1, 2, 3?
Една од причините е, еден, компјутерски програмери сакаат да започнете
сметано од 0.
Две е затоа што кога ќе се направи низа 0, тоа е исто што и прави низа
плус 0, што значи дека одат таа позиција, и не ми се
прескокнете некој меморија блокови.
Па јас не се движат на мемориската блокови.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> LUCAS: Значи таа прашуваат што е разликата помеѓу прави
овој или прави Примерок.
Една од разликите е дека int низа 3 е создавање на
низа на магацинот.
И кога правам Примерок тоа, создава на грамада.
Дали тоа има смисла?
>> Па како не Примерок всушност работат?
Па зошто дури и треба да се користи Примерок?
Компајлерот вид на фигури сите променливи што ќе прогласи.
И тој создава простор за сите од нив во магацинот.
Така што сите на вашите променливи се случува да се биде некаде во магацинот.
Па тука е на животната средина променливи.
>> Значи, во основа, простор за оние варијабли во меморија се доделува на
компајлирате време.
Па тоа значи дека вашиот компјутер има да ги знаат сите од овие променливи
однапред.
Тоа не треба да се знае што вредност ви се случува да се стави во нив.
Но треба да се знае како колку меморија ви е потребна.
>> Но сега да речеме дека, на пример, сте создавање на низа или со земање на
стринг кој сте преземање од корисникот.
Ти не знаеш колку долго низа се случува да биде, на пример.
Значи, вие не знаете колку меморија блокови ќе се доделат, нели?
>> Така што навистина не се направи смисла за можете да се каже стави 100 карактери.
И тогаш, што ако корисникот пишува 150?
Ви се случува да се зезнав.
>> Значи, во основа, не можете да бидете сигурни за тоа како колку меморија што треба да се доделат
кога ќе ги собере на програмата.
Можете само знам дека на кандидира време.
Па тоа е зошто ти мораш грамада.
Па грамада се случува да имаат меморија дека сте распределба во
Времетраењето на програмата работи.
>> Значи, во основа, кога ќе го направите Примерок, што што го правиш е распределбата на меморија на
траење, што значи дека ќе бидете одлучувате во тој момент дека сте
треба да имаат дека меморијата.
Па тоа е кога сте го распределба.
Дали тоа има смисла?
>> Па се сеќавам, магацинот има променливи кои се креирани за компајлирање време.
А потоа грамада има променливи кои се креирани како да одиш
со Примерок, на пример.
>> ПУБЛИКАТА: [Беззвучен]?
>> LUCAS: Значи GetString е ќе ја повика Примерок.
Нека ми зборува за Примерок, и Ќе објасни GetString.
Па Примерок е истото како распределбата на меморија.
Па затоа се случува да се распределат меморија грамада.
И тоа се случува да се врати покажувач каде што меморија распределени во.
>> Па кога ќе do--
тука за example--
N ѕвезда покажувач.
И тогаш покажувачот еднаква Примерок големината на инч пати 10.
Јас сум создавање на покажувачот.
И тогаш јас сум давање дека покажувач вредноста на кој што Примерок
ми даваат.
>> Па јас барам Примерок можете да ги распредели простор за 10 цели броеви.
Тоа е она што го кажува.
Примерок и ми дава назад Покажувач на тоа место.
Смисла?
Во ред.
Јас и GetString е, во основа, се прави повик за Примерок па можете да ги распредели
меморија за време на траење.
>> Секогаш се сеќавам да се провери за ништовни бидејќи Примерок се случува да се врати нула
ако не може да се алоцира меморија.
Да речеме дека ве прашам за смешна количина на меморија.
Вашиот компјутер не ќе биде може да се доделат онолку.
>> Па Примерок е само ќе да се врати нула.
Значи секогаш се сеќавам да се провери дали покажувачот што сте ја добиле од Примерок е
нула или не, бидејќи, ако е така, можеби ќе се dereferencing покажувач и
предизвикува несакани грешки.
И на крај, не заборавајте вашата слободна меморија.
>> Примерок е создавање меморија во грамада.
И треба да се ослободи меморија пред програмата завршува.
Добро, тоа е се за мене.
Жал ми е, Роб.
Благодарност.
>> [Аплауз]
>> LUCAS: Секое последните прашања пред Роб доаѓа?
Не?
Да?
>> ПУБЛИКАТА: Јас не гледам ова онлајн.
Дали сте го подигнале уште?
>> LUCAS: Мислам дека Дејв е подигнете наскоро.
>> ДЕЈВ: Ќе бидат објавени.
>> LUCAS: Ќе биде онлајн.
>> ПУБЛИКАТА: Тоа е до.
>> LUCAS: Тоа е се?
Во ред.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> LUCAS: Да, треба да се ослободи сите меморија што се става во грамада.
>> ПУБЛИКАТА: [Беззвучен]?
>> LUCAS: Да.
Секое време да ги имаме култура Примерок, треба да имаат култура слободен
откако ќе престанете да го користите таа променлива.
Па Примерок и слободни се секогаш заедно.
Нивните најдобри пријатели.
Да.
Роб?
>> Роб: Ќе одам брзо.
А исто така и видео ќе биде ставен.
Имам микрофон натаму.
>> Добро, така недела пет нешта.
Првото нешто што го имаме е оџакот.
Па се сеќавам дека постои само еден оџак рамка на активен повик функција.
Ќе видиме дека во една секунда.
И исто така се сеќавам она што всушност оди во секоја магацинот рамка се случува да бидат
локални променливи на нашите функции, аргументите кои се пренесуваат во нашата
функции, заедно со неколку други работи што навистина не
треба да се грижите.
>> Па еве еден пример на програма, каде што, известување, главниот е printfing враќање
вредноста на foo 4.
foo е само ќе се вратат на вредноста на бар 4 запирка 6.
И бар се случува да го поставите на некои локални променлива n еднакво на 4 пати 6.
А потоа се врати n.
>> Значи, да се погледне на магацинот во текот на вистински повторување на оваа програма.
Така што на дното на нашите оџак.
Се сеќавам дека магацинот порасне.
Па на дното на нашите оџакот, ние имаат магацинот рамка за главната.
Кога на програмата ќе почне, главните е секогаш ќе биде на
дното на нашиот оџак.
>> И она што е внатре на нашите магацинот рамка за главната?
Па дури иако не постојат локални променливи до главна, како што реков претходно,
ние сме argc и rgv преземањето на просторот во внатрешноста на главниот магацинот рамка.
Значи главната сега ќе повик на функција foo.
А тоа значи foo ќе добие своја магацинот рамка.
>> Па сега сме во внатрешноста на функција foo.
И она што треба да одат во на Foo магацинот рамка?
Па, foo има аргумент n.
И n е еднакво на 4, бидејќи тоа е она што Главната поминува како аргумент на Foo.
>> Па сега foo ќе ја повика бар.
Она што се случува да имаат бар во на нејзините "магацинот рамка?
Таа има x еднакво на 4 y еднаква на шест.
Тоа не е сè, дека ние сме случува да имаат во магацинот рамка, бидејќи бар
исто така има и локална променлива n.
И n ние ќе се постави еднакво на 24.
>> Па сега бар ќе се вратат n.
Па бар се враќа 24 до магацинот рамка foo.
И бидејќи бар е сега се враќаат, што значи ние сме пукање на магацинот рамка
за бар исклучување на магацинот.
Така што сите на меморија, која бар биле користење е сега надвор од магацинот.
>> Сега, foo е, исто така, ќе да се вратат 24 до главна.
Па сега дека foo се враќа, меморијата дека foo е користење во својата "
магацинот рамка е, исто така, нема.
И сега, главната се случува да се јавите printf.
Значи printf е само уште една функција.
Кога ние го нарекуваме printf, тоа се случува да биде друг магацинот рамка за printf
повик на функција.
>> Што поминува printf?
Тоа е она што се случува да одат на нејзиниот магацинот рамка.
Во најмала рака, ние сме полагање тој процент јас обратна коса црта n и
аргументот 24.
Тоа би можело да има повеќе во неа е оџакот рамка ако printf се случува да биде со користење на некои
локални променливи.
Ние не знаеме.
>> Но сето тоа оди во printf на магацинот рамка.
Тоа се случува да се изврши на printf.
Тогаш printf е направено.
Тоа ќе се врати.
Конечно, главниот е завршена.
Главните ќе се вратат.
И тогаш нашата програма е направено.
Да?
>> ПУБЛИКАТА: Дали сте се види [Беззвучен]
аргументи [Беззвучен]
параметри?
>> ROB: Значи постои суптилната разлика меѓу аргументи и параметри.
И навистина, во заеднички зборува, луѓето имаат тенденција само да ги измеша цело време.
Но параметри се формално име на нештата.
>> Па argc и argv се параметри на главната.
Аргументи се она што всушност помине во оние параметри.
Па таму кога ќе се јавам на foo од 4, 4 е аргумент сум поминува во.
И параметарот n, во внатрешноста на foo, се нафрла врз вредност 4
од 4 е аргумент.
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: n е локална променлива да се забрани.
n е уште локално до foo, но тоа е параметар за foo.
Тоа не е локална променлива.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: foo е само повикување бар и враќање она бар враќа.
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: Да, само за да видам повеќе магацинот рамки.
Да?
>> ПУБЛИКАТА: Зошто е наречен foo пред printf?
>> ROB: Зошто беше foo нарекува пред printf?
Па јас би можеле да имаат, наместо тоа, направи нешто како int x е еднаква на foo од 4
и потоа печатени x.
Но наместо тоа, јас се комбинираат функција јавете се во аргумент printf.
>> Но забележете дека не можеме, всушност, извршување на повик на printf додека не
дознаам што foo од 4 е.
Па ние си оди за да се оцени тоа.
И само еднаш дека е направено се случува да се врати и да се оцени тоа.
Да?
>> ПУБЛИКАТА: Бидејќи и бар [Беззвучен]
вредност, зошто ние не треба [Беззвучен]?
>> ROB: Тие целосно треба да биде int.
Дека не бил фатен во текот повеќе минува.
Така треба да биде int бар и int foo бидејќи и на оние
се враќаат цели броеви.
Празнина е само ако тие не се случува да се вратат вистинските вредности.
Да?
>> ПУБЛИКАТА: Ако сте имале линија над враќање, [Беззвучен]?
>> ROB: А линија над возврат?
>> ПУБЛИКАТА: Да.
Како ако не printf и [Беззвучен] тоа ќе печати двапати?
>> ROB: Значи во внатрешноста на foo?
Ако имавме printf тука?
>> ПУБЛИКАТА: Да.
>> ROB: Значи, ако имавме printf право тука, тоа ќе печати еднаш.
Бидејќи ние се јавувате на foo еднаш право тука, тогаш ние ќе ја погоди printf.
Тогаш ние ќе го наречеме бар.
А потоа foo ќе се вратат.
И тоа е тоа.
Ние само некогаш судрите на printf еднаш.
Да?
>> ПУБЛИКАТА: [Беззвучен]
printf повик foo бидејќи ние сме првата повикувајќи printf, а потоа ние сме полагање
аргументите.
>> ROB: Значи во теорија, не е printf повик foo?
Па нема.
Само цел дека в се случува да се извршување на овие работи е, пред да можеме да
јавете се на функција, сите аргументи на функција треба да
целосно да се оценува.
Така е тоа потполно оценува?
Да, тоа е само низа.
Тоа е само вредност.
>> Тогаш ние треба целосно да оцени ова.
Откако ова е направено, сега сите своите аргументи се евалуираат.
И сега ние може да го направи повик за printf.
Да?
>> ПУБЛИКАТА: Едно прашање.
Ако имате празнина функција, мора да имате враќање запирка?
>> Роб: Не враќање запирка ако имате празнина функција.
Во ред.
Па сега некои куп работи.
Па грамада е како ние ќе се справи со динамичен управување со меморијата.
И тоа директно во спротивност со магацинот кој ние би го нарекол автоматски
управување со меморијата.
>> Па на магацинот, никогаш не навистина имаат да се справи со тоа како локални променливи
се турка и појави надвор сите овие магацинот рамки и сите тие работи.
Вие не треба да се грижите за тоа.
Тоа е автоматски.
Па грамада е прирачник.
И [Беззвучен]
доаѓа од овие функции Примерок и бесплатно.
>> Значи тука е друга програма.
Сите ние сме прави е mallocing цел број.
Ние сме го складирање ѕвезда х.
Се разбира, ние треба да се провери да се види дали x е нула.
Тогаш ние ќе треба да се постави само што x е да се покажува на 50.
Печати она што x е да се покажува, печатење x, и тогаш слободно x.
>> Па, како е ова навистина се случува да се погледне ако ја гледаме нашата магацинот и грамада?
Па ние ќе се започне одново.
На дното на нашите магацинот како порано.
Се сеќавам дека ти грамада директно противи на оџакот?
Значи ние се случува да имаат врвот на нашата куп таму.
>> Па на дното на нашите оџакот, имаме нашите магацинот рамка за главната.
Што има простор за argc, argv, а ние Сега имаме локална променлива X, кој
е int ѕвезда.
Па ние си оди за да iterate преку оваа програма.
Првото нешто што го имаме е повик за Примерок.
>> Па ние сме правење на повик да Примерок.
Примерок е во функција.
Тоа се случува да се добие магацинот рамка.
Што полагање да Примерок?
Тоа се случува да одат во на магацинот рамка.
Ние поминува големината на n, што е 4.
Така што е предадена Примерок.
>> Што Примерок направам?
Тоа ни ја зграпчува некои простор на грамада.
Значи ние се случува да одат на грамада.
И ние си оди за да го дофати 4 бајти од грамада.
Па да му даде произволна адреса.
0x123 Само се преправаат дека тоа е адреса, кој е на куп.
>> Значи она што е, всушност, во внатрешноста на кој регионот на меморијата на адресата Ox123?
Ѓубре.
Така што не се чуваат ништо во него.
Па колку што ние знаеме, тоа може да биде ништо.
Вие не треба да се претпостави дека е нула.
Тоа е повеќето не нула веројатно.
>> Па сега Примерок враќа.
И што правиме кога Примерок враќа?
Ние во собата што се враќа.
Ние во собата x еднакви со она што тоа се враќа.
Па што е тоа враќање?
Тоа е враќање 0x123 бидејќи тоа е адреса на блок од меморија што
само распределени во грамада.
>> Па се врати 0x123 x е сега ќе треба да се постави еднаква на 0x123 која, сликовито,
ние често се подготви како x имаат вистински arrow покажувајќи на тој блок.
Но x е само зачувување на таа адреса.
Па сега ние треба да се провери ако x е нула.
Тоа не е нула.
Ние се преправаме дека тоа Примерок успеа.
>> Па сега ѕвезда x е еднаква на 50.
Па ѕвезда се сеќава тоа значи одат на таа адреса.
Па 0x123 Ние ќе се одат на таа адреса.
Така што нè носи до таму.
Што правиме на таа адреса?
Ние сме чување на 50.
>> Па по оваа линија, тоа е она што работите се случува да изгледа.
Па сега тоа е веќе ѓубре таму.
Сега знаеме дека 50 е во тоа што особено адреса, бидејќи
ние го поставите на тоа.
Во ред?
Па сега ние ќе се печати ѓ.
>> Значи прво ние ќе печати ѕвезда х.
Значи она што е ѕвезда X?
Повторно, ѕвезда x значи да одат во нешто што x е да се покажува.
Значи x е чување 0x123 Оди до тоа.
Добиеме 50.
Па печати ѓ тоа.
И тоа значи дека тој се случува да се печати 50.
И тогаш тоа се враќа.
>> И тогаш имаме вториот printf.
Ние сме сега проценти стр.
Ако не сте го виделе, тоа е колку ќе печати покажувач.
Значи имаме проценти I, процент ѓ, и сите оние кои се веќе.
Значи проценти стр, печати покажувач.
>> Значи x е покажувач.
Значи, ако ние се случува да се печати x себе, ние сме печатење она што е, всушност, во
x, која е 0x123 Па првите печати ѓ се случува да се печати 50.
Вториот печатење ѓ се случува да се печати 0x123 Да?
>> ПУБЛИКАТА: Дали користите проценти x да се печати покажувач?
>> ROB: Значи го користите проценти x да се печати покажувач?
Па можете да но проценти x е само, Општо земено, за пример ако имате некои
број и сакате да печатите како хексадецимално.
Тоа е само како да го направите тоа.
>> Каде што, г проценти би печати како децимална.
Кои беа добиеме проценти d. јас е само цел број.
проценти p е специјално за совети.
>> Значи x е покажувач.
Ние сакаме да се користи проценти стр.
Но проценти x може да работи.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: Да.
Барем за овој call-- па јас не се вклучи во тука.
Но, овие два аргументи се нужно во внатрешноста на оваа оџакот рамка
заедно со сите локални променливи printf се случува да биде во употреба.
И потоа на следниот повик на printf сега внатрешноста на printf магацинот рамка е
проценти стр обратна коса црта n и без оглед на вредноста на x е, кое е 0x123.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> Роб: Ќе печати нешто што изгледа вака.
>> ПУБЛИКАТА: [Беззвучен].
>> ROB: Значи тоа отпечатоци во форма адреса.
Тоа изгледа како адреса.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: Зошто е она?
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: Зошто е овој покажувач 4 бајти?
Па така постојат бројни на 0 е во предниот дел на оваа.
Така што е навистина 0x0000000123.
На 64-битен систем, ќе има целиот куп на повеќе нули.
Да?
>> ПУБЛИКАТА: [Беззвучен].
>> ROB: Значи првата printf се случува да print--
>> ПУБЛИКАТА: [Беззвучен].
>> ROB: Да, тоа се случува да се печати што x е да се покажува.
Ѕвезда вели дека она што е оваа нешто што укажува.
Земи го.
Па што е тоа што укажува?
50.
Земи го.
Тоа е она што ние ќе треба да се печати.
Каде што, на следната, ние сме само печатење х себе.
Она што е внатре на f?
0x123.
Во ред.
>> А потоа, конечно, имаме бесплатно.
Што поминува за да се ослободи?
Ние сме минува х.
Тоа време, всушност, се прикажува тоа во магацинот рамка.
>> Па ние сме полагање на вредност 0x123 да се ослободи.
Па сега слободно знае, добро, Морам да одам до грамада
и слободна дека меморијата.
Тоа е веќе користење на она што е на адреса 0x123.
>> Така слободно се случува да се ослободи дека од грамада.
Сега нашата куп е празна повторно.
Ние немаме меморија протекување.
Сега слободно ќе се вратат.
Забележете дека x е уште 0x123.
Но, тоа е сега не е валиден меморија.
Ние треба повеќе не dereference х.
Да?
>> ПУБЛИКАТА: Дали се вратат 0 излишни?
>> ROB: Дали returen 0 излишни?
Да.
Ние само се стави дека таму, бидејќи имаме враќање еден за воздух.
Па тоа е како, да, да вклучи и враќање 0.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: Значи по слободен x, што се случува ако ние се обидуваме да dereference на покажувачот?
Можно е дека ништо не е во ред.
Можно е дека ние се уште ќе добиете 50.
>> Можно е, исто така, дека тоа е меморија сега се користи за нешто друго.
Така што е недефинирано однесување.
И недефинирани значи нешто може да се случи.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> Роб: Не, па ако се додели x на нешто друго.
Па ако тука рековме x е еднаква на Примерок нешто else--
Примерок големина event--
потоа дека оригиналниот блок меморија не е ослободен.
И официјално го загуби.
Тоа е меморија излегуваат во јавноста.
Ја изгубивме сите референци на тој блок од меморија.
Значи не постои начин ние некогаш може да го ослободи.
Добро, така што потоа се врати 0 значи направено.
>> Добро, па оџакот претекување.
Што е идејата тука?
Па се сеќавам, куп се случува долу.
Магацинот се случува до.
Значи ова е пример од предавање, Мислам, каде што главните е само ќе
јавите на оваа функција foo, кој ќе да се нарекува рекурзивно одново и
одново.
>> Па магацинот рамки се случува да се работат иста.
Значи ние се случува да се започне со главните како на дното магацинот рамка.
Потоа главни се случува да се јавите на foo, која се случува да се добие магацинот рамка.
>> Тогаш foo се случува да се јавите на foo повторно, се случува да се
друг магацинот рамка.
А потоа, повторно, и повторно, и повторно, и повторно се додека, конечно, трчаме
во грамада.
Значи ова е како да се добие магацинот претекување.
И во овој момент, можете СКГ вина.
Или сакате навистина СКГ мана пред овој момент, но да.
>> ПУБЛИКАТА: Дали основни депонија на исто како СКГ грешка?
>> ROB: Значи ќе видите сегментација грешка јадро фрлени.
Ќе добие основни депонија кога ќе СКГ вина.
И тоа е како депонија на сите содржината на вашиот тековната меморија, така
дека можете да се обидете и да ги идентификуваат зошто СКГ обвини.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: Значи сегментација грешка средства има оџакот претекување.
Па не мора да значи.
А сегментација грешка значи дека ти си допирање меморија на начин
не треба да биде.
Значи еден начин тоа да се случи е, кога да магацинот претекување, ние започнуваме допирање
меморија на начин на кој ние не треба да биде.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: Значи во внатрешноста на бесконечна јамка.
Како, ова е како рекурзивен бесконечно јамка и така ние се уште
магацинот рамка секој пат.
Но само во внатрешноста на редовна бесконечна додека one--
добро, ајде да не дури и печати f--
направи нешто.
Сеедно.
>> Ние нема да се добива друг магацинот рамка.
Ние сме само ќе да се задржи looping во текот на оваа единствена настава.
Магацинот не е во пораст.
Тоа е фактот дека секој рекурзивен повик ни дава магацинот рамка.
Тоа е причината зошто ние се добие оџакот претекување.
Да?
>> ПУБЛИКАТА: Значи, ако ти рече да се добие додека јамка, а потоа [Беззвучен]?
>> ROB: Значи, ако внатрешноста на додека јамка имаше printf, сеуште ќе
не СКГ вина.
Јас едноставно не сакаат да ги мешаме работите.
Тоа би јамка.
Ќе добиете еден оџак рамка за printf.
>> Тогаш printf ќе се врати.
Тогаш би јамка повторно.
Ќе добиете еден оџак рамка за printf.
Тоа ќе се вратат.
Еден магацинот рамка.
Па вие не сте добивање на овој бескраен натрупување магацинот рамки.
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: Да.
Значи ова магацинот претекување се случува бидејќи ниту еден од овие
повици кон foo се враќаат.
Значи, ако ние се вратат, тогаш ќе започне губење на магацинот рамки.
И тогаш ние не би магацинот претекување.
И тоа е причината зошто ви е потребна база случај за вашите лични функции.
Да?
>> ПУБЛИКАТА: Дали потенцијалната големина и магацинот за грамада исти за
сите програми?
>> ROB: Приближно.
Е потенцијалната големина на магацинот и грамада исти за сите програми?
Грубо.
Има некои рандомизација да каде што магацинот почнува и
каде грамада започнува.
Ако се случи да имаат едночудо глобални променливи и работите, можеби
се далеку од некои простор за вашиот грамада.
>> На 64-битен систем, вие буквално имаат бесконечна меморија.
Има само толку многу.
Меѓу 32 бита и 64 бита, што значајна разлика.
>> Ви се случува да се добие целина многу повеќе магацинот и грамада простор на 64-битна
систем, бидејќи таму е само уште адреси што тие можат да го користат.
Но на индивидуален систем, тоа ќе биде приближно иста количина на оџакот
и грамада простор.
Во ред.
>> Па последната работа е компилација.
Така што треба да знаете овој процес.
Постојат четири големи чекори.
Значи првиот треба да биде лесно да се запомни.
Претходна обработка.
Тоа го има префиксот пред во неа.
Значи станува збор, пред сè друго.
>> Она е да се запамети е хаш.
Па хаш дефинира и хаш вклучува во сите од нив.
Тоа се сите пред-процесор директиви.
Овие се работите што пред-процесор се грижи за.
>> Значи она што не пред-процесор направам?
Тоа е навистина глупава работа.
Сето тоа е во состојба да се сите овие копија, и сече, паста и операции.
>> Па хаш вклучува стандардни I0 точка ч.
Што е тоа го прават?
Тоа е грабање на стандард I0 точка ж поднесе и вметнување во врвот
каде што се вели хаш вклучува стандард I0 точка ч.
>> И секоја хаш се дефинира дека ние сме види, што е тоа го прават?
Нејзините копирање на вредноста што хаш дефиниран е дефинирана како и вметнување дека
каде и да сте со користење на вредност.
Па препроцесори само навистина едноставен текст, базирани на операции.
Таа не прави ништо паметни.
Па се друго е посложена.
>> Па сега дека препроцесори е да се направи, ние всушност ги собере.
Значи она што не составувањето значи?
Ние сме сега се случува од C код да асемблерски код.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: Да, ние фатени тоа.
Па составувањето.
Одиме од C до собранието.
Па ова е вистински јазик промени.
Составувањето на себе значи одат од повисоко ниво јазик да
пониско ниво јазик.
>> И c е на високо ниво јазик во споредба со собранието.
Што е монтажа?
Нејзините упатства кои се, прилично многу, направени за вашиот процесор.
Но вашиот компјутер уште не не разбирам собранието.
Тоа само што ја разбира оние кои и нули.
Па следниот чекор е монтажа, која нè носи од овие упатства кои
вашиот процесор разбира и, всушност, преведува нив, да
на оние кои и нули.
>> Значи C до собранието на бинарни.
Но, јас немаат извршна уште.
Значи мислам на cs50 библиотека.
Ние сме ви се предвидени со бинарни за овој cs50 библиотека, која има GetString
и GetInt и сето тоа.
>> Но cs50 library--
и на itself-- не е извршна.
Тоа не имаат главната функција.
Тоа е само еден куп на бинарни дека можете да го користите.
Така ги поврзува е тоа како ние ги собере сите на овие различни бинарни датотеки
во вистински извршна.
Онаа што може да внесете дот намали точка надвор.
>> Значи ова е како на датотеката која сте напиша, - без оглед на вашата програма is--
Ceaser точка в.
Но, сега тоа е се составени до бинарни.
Па Ceaser точка о.
И ова е нашиот cs50 библиотеки бинарна.
И тие се во комбинација во една извршна.
Да?
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: Значи прво вклучуваат, се сеќавам, хаш вклучуваат е всушност
пред-процесор чекор.
Но тоа е посебен.
Ако не сте користење на било функции кои се надвор од вашата една датотека тогаш,
Не, вие не треба да се поврзе ништо бидејќи имате сè.
>> Тоа, рече, printf се поврзани со.
Ако некогаш сте се користи printf, тоа е нешто што треба да се поврзани во
затоа што не си се напише тоа.
И, всушност, printf е автоматски поврзани во.
Знаеш како е на командната линија или кога што пишувате се направи, ќе видите дека има
цртичка л cs50, која има линк во cs50 библиотека?
Printf, и работи како што, се случува да бидат поврзани во автоматски.
Било какви други прашања за ништо?
>> ПУБЛИКАТА: [Беззвучен]?
>> ROB: Поврзување?
Имаме еден куп на различни бинарни датотеки.
Ова е канонски пример кои ги користиме е cs50 библиотека.
Имаме составил и дава на вас бинарни за овој cs50 библиотека.
>> Сакате да го користите GetString во својата програма.
А ти оди и го користат GetString.
Но без мојот бинарен код за GetString, кога ќе компајлирате вашиот код
надолу, не, всушност може да се кандидира на вашиот програма, бидејќи GetString String е
уште не се целосно дефинирани.
>> Тоа е само кога ќе се водат во мојот бинарен која содржи GetString дека сега, сите
право, јас всушност може да изврши GetString.
Мојата датотека е завршена.
И можам да ја извршите оваа.
Да?
>> ПУБЛИКАТА: Дали поврзува конвертирате бинарен на извршна?
Па дури и ако немате други библиотеки, нема да се уште да биде
потребно да се преведе на [Беззвучен]?
>> ROB: Значи извршна се уште е во бинарен.
Тоа е само комбинирање целина куп на бинарни датотеки.
>> ПУБЛИКАТА: Ви благодарам многу.
>> ROB: Нема проблем.
Било какви други прашања?
Инаку, ние сме сите во собата.
Во ред.
Благодарност.
>> [Аплауз]
>> ПУБЛИКАТА: Ви благодариме.
>> ROB: Да.