Tip:
Highlight text to annotate it
X
>> ПРЕДСЕДНИК 1: Здраво свима.
Ми ћемо да почнемо.
Мислим да људи и даље иде да се филтрирање ин
Али, у интересу времена, тако да можемо добити момци одавде на време,
ћемо почети.
Дакле, добродошли на ЦС50 квиз 0 рецензије.
За оне од вас који нису схватили ипак, имате питање у среду.
Јупи.
>> Ако нисте почели још студира или нису схватили да је ово још постоји,
Протеклих квизови и све информације о Ваш квиз су на цс50.нет/куиззес.
Има неке прилично добре ствари тамо, Протеклих тестови из последњег 10.
године, као и информације о овом квизу и темама
који ће бити покривени.
Дакле, хајде да почнемо.
>> Дакле, ви можда сећате, први дан од класе Давида имао те лампе на.
Па у суштини, све то иде на под хауба од рачунара је
учињено у бинарни.
Бинарни значи оно што звучи као, 0 и 1 је је.
Она има две вредности које могу бити представљени.
>> Дакле, баш као у првом дану члана када Дејвид окренуо на светло
сијалица за представљање на, или 1, наш рачунар схвата као бинарну 0 је и
1 је, или искључити.
Основе бинарни.
Свако место је представљен у основи два.
Дакле, додати 2 до 0 до 1 до 2 скроз горе.
>> Да израчунамо колики је бинарни децимално, само пратите ове једначине
укуцајте ствар.
Ако имате 1 у било којој од тих места, ти га помножити год
заснивате то је у, додајте га, и добијате децималу.
Дакле, ово је како се рачунати до 5. у бинарни.
Баш као што смо радили на последњи слајд, то је како би
представљају од 1 до 5.
>> Слично томе, баш као можете да додате и одузмите у децималном или базом 10, или
стварно свака база, на могу додати и одузимање у бинарни.
Управо оно што сте очекивали када сте додајте два горе, ако је то једнако веће
од 1, носите 1, чине га 0, и урадити додавањем на тај начин, само
као што би очекивали са редовном децималне или било које друге базе.
Цоол.
>> Дакле, као што сам раније рекао, све што иде на испод хаубе нашег рачунара
се врши у 0 и 1 је, или бинарни.
Па како ми изражавамо, на пример, слова или бројева, или ликови?
А одговор на то је АСЦИИ.
>> АСЦИИ је мапирање између знакова да би ми нормално видимо у
Енглески језик као да, Б је, Ц је, наглашавају, цртице, а
тако нешто.
И то мапс то АСЦИИ вредности.
АСЦИИ вредност је само број који може разумети ваш рачунар.
И баш као што можете да урадите и додавање одузимање са бројевима, можете да урадите
их са АСЦИИ вредностима.
>> Дакле, у овом примеру, шта ће ово одштампати?
Да, па само простор Б Ц простор простор Д Где је мој миш ићи?
Обавештење можете да дефинишете инт на 65 година.
А када штампате да се користи посто Ц, то ће протумачити као да
карактер и да ће одштампати А.
>> Слично томе, можете да прогласи то као знак.
А када га одштампате помоћу одсто Ц, то ће протумачити као да
посто Д. И баш као што можете да додате број, можете додати ликови су
АСЦИИ вредности, у овом случају.
>> Дакле, мало показивач за свакога.
5, као стринг, не заправо једнака 5.
Дакле, како да конвертујете стринг 5 до цео број 5?
Нека идеја?
Да.
>> Дакле, ако имамо 5 као стринг, можемо одузети 0..
И да ће нам дати 5.
И слично, ако имамо 5 тако цео број, додају да на ниске 0.
И то нам даје стринг 5.
Цоол.
>> Сада, сећам назад на предавање онај у коме разговарали смо о алгоритмима.
Па како ми заправо желимо рачунар да раде занимљиве ствари?
Знате, само додајући и одузимајући бројеви и штампање ствари ван није
то узбудљиво.
Обично, желимо нашу рачунара на обављају неку врсту алгоритма.
Нешто мало сложенији него само простом математиком.
>> Алгоритам је само корак по корак скуп упутстава како да се изврши
одређени задатак -
баш као рецепт.
Можда се сећате првог дана класа где је Дејвид нас рачунати собу
људи и колико је људи били у соби.
Можда се користи за бројање један по један.
1, 2, 3, 4.
У том случају, линеарно време алгоритам.
>> Али Давид уведен је алгоритам за да бројимо људе у соби
где свако устане, кажете ваше број другој особи, додати да
број горе, а једна особа седне.
И ти то поновити.
То је једна врста алгоритма.
Можемо анализирати колико је ефикасна Алгоритам се заснива на то време анализе.
Али, ми ћемо причати мало више о томе касније.
>> Дакле, сви алгоритми могу такође бити написан у псеудокоду.
Псеудокод је само енглески као синтакса се користи за представљање
програмски језик.
На пример, ако бисмо желели да питате корисника Претпостављам да је мој омиљени број, ми
можда има Псеудокод као што су.
>> Набавите корисници погоди.
Ако је претпоставка тачна, реци им они су тачно, друго им кажем
нису тачни.
И Псеудокод је начин лако представља идеју или алгоритам.
Дакле, сада ћемо можда желети да се заиста пишу то на језику који рачунар
Можда разумевање.
Тако смо могли писати нашу Псеудокод и тумаче да у изворни код.
>> До сада, изворни код мора придржавати на одређену синтакси
програмски језик.
И сада, у ЦС50, ми смо Користим углавном ц.
Дакле, ово може бити извор број за ц.
Касније у току, можете доћи ноћ у контакт са другим програмима
језицима као што су ПХП.
Или ако сте чак и да друге класе, ви могли да ураде Јава, Питхон, или чак ОЦМЛ.
Али у нашем језику ц програма, ово је како бисмо могли писати изворни код за
Псеудокод алгоритам који Само сам описао раније.
>> Дакле, како се ваш рачунар заправо Разумем да?
Као што сам раније рекао, то само стварно разуме нула и јединица.
Па како то добити из извора код за нешто што се може
разумео?
Па, ми имамо нешто зове компајлер.
>> Ако се сећате уназад у већини вашем псетс, имали сте неку врсту програма
написан у тачка ц фајлу.
А онда би тип Марка.
Дакле, шта се направи ради?
>> Можете да упишете марку да састави свој програм, јер је неко -
ко год је написао свој п скуп; Вероватно Давид -
створио маке фајл.
И то говори учинити да знају да покренете свој компајлер, зове звека, који ће
онда компајлирати изворни код на објекту код, који је нула и јединица
да рачунар разуме.
Али мало касније, ми ћемо ићи више у дубину око компајлера.
>> Дакле, сећате псет 0, где - да, Имате питање?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ПРЕДСЕДНИК 1: Да.
Мислим да они заправо би требало да буде на мрежи.
Да.
>> ПУБЛИКА: Да ли је то као [ИНАУДИБЛЕ]?
>> ПРЕДСЕДНИК 1: Није.
Су на цс50.нет/куиззес.
>> ПУБЛИКА: Сласх квизове, сласх 2013, сласх 0, а само кликните кроз
квизови 2013 и квиз 0, прегледате одељак слајдова.
>> ПРЕДСЕДНИК 1: Да, па ако ви желите да повуците га и погледајте га на
сопствене рачунар, то је у реду.
Реци то поново.
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ПРЕДСЕДНИК 1: Да, [ИНАУДИБЛЕ] је вештачка варијабла.
Ох, да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> СПЕАКЕР 1: Не, штрајкови нису на испиту.
Извини, њено питање је било, је напади на испиту.
И то није.
Дакле псет 0, ви момци треба да имају све имплементиран нешто користећи огреботину.
И научили смо неке основне програме градивни блокови користећи огреботину.
>> Па хајде да погледамо неке од ових градивних блокова
који чине програм.
Прво је Булова израз.
Логички изрази су они и 0 је или било шта што има
две могуће вредности.
У овом случају, тачно или нетачно, или искључите, а да или не.
Пример једноставног, врло једноставна, Програм који користи Боолеан
израз овде.
>> Тако да би за Булових израза за бити корисно, имамо Булове операторе.
То су оператери који се могу користити упоредити одређене вредности.
Дакле, имамо и или не једнако, мање од или једнак, већа од или
једнака, и мање од или већа од.
Али ови оператори нису од велике користи осим ако можемо да их комбинујете у
условима.
>> Дакле, ви можда сећате из нуле и из п поставља да смо
су услови.
Они су, у суштини, као виљушке у логика вашег програма који
извршава у зависности од тога да ли услов је испуњен.
Дакле, један од услова које смо имали користи много пута у овом курсу је
ако, друго, ако, и друго услови.
>> Ево пример како можете користити да.
Да ли неко зна разлику између само ако користите све изјаве
скроз доле стиховима ако, друго, ако, и друго у комбинацији?
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ПРЕДСЕДНИК 1: Управо тако.
Дакле, ако сам имао ако скроз доле ово начин, чак и ако овај услов повратка
истина, он ће и даље наставити тестирање следећа два.
Док, с друго-ако, друго изјава, ако неко враћа труе,
остали нису тестирани.
Сва питања у вези тога?
Цоол.
>> Дакле, ви користите ако-друго неког друго Изјава ако знате да је то само може
бити један од тих случајева.
Дакле, ми знамо, ако је к мање од 0, то је дефинитивно неће бити
већи од 0.
>> Даље, други градивни блок да смо научили су петље.
Имамо три врсте петљи.
За петље, док петље, и радим док петљи.
И уопште, кад седнете да напишем нешто, морате да одлучите
који од тројице који желите да користите.
Па како да се одлучи који?
>> Ми обично користимо за петљу ако знамо колико пута желимо да вршите итерацију
кроз нешто или колико пута желимо да изврши задатак.
Ми користимо вхиле петље ако нам треба неки услов да би било истинито да ради.
И ми користимо урадимо док веома сличан док, али ми желимо да наша код да ради на
бар једном.
>> Дакле, да, док, све што је у До ће увек раде на најмање један пут.
Док, са време, он не може покренути ако уопште
услов није задовољен.
Има ли питања са да?
>> Дакле, структура за петље.
Ви сте сви видели ово.
Ти га покрене.
Имате неку врсту стања.
Тако, на пример, можемо иницијализовати као за и износи 0..
и је мање од 10.
И ја +.
Врло једноставно онај који смо урадили.
>> За вхиле, слично, имате да имају неку врсту иницијализација,
нека стања, и неки упдате.
Дакле, можемо имплементирати нашу за петљу такође као вхиле користи ово.
И слично са раде док петља, можемо имати неку иницијализацију,
изврши нешто, ажурирање, и затим проверите стање.
>> Тако да сада функционише.
Ми смо ставили све заједно.
Ми можда желети да напише неки врста функције.
Заједнички функција које ћете можда Видели већ је главни.
Главна је функција.
Има повратни тип, инт.
Она има име функције, главни.
И она има аргументе, аргц и аргв.
Дакле, главни је само функција.
>> Остале функције које сте можда користе, иф - иф је функција -
Тонирана, тоуппер.
Али то се деси да су били спроводи за нас
нека врста библиотеке.
Ако ви сећате, укључујући ово ЦС50.х библиотека или
стандардни И / О библиотека.
Да, питање?
>> ПУБЛИКА: Да ли је главни управо инхерентна ц?
Да ли је то само врста [ИНАУДИБЛЕ]?
>> ПРЕДСЕДНИК 1: Питање је ако главни је инхерентна у ц.
И да, све функције имају главну функцију.
Некако је потребно за рачунар да знам одакле да почнем
ради код.
>> ПУБЛИКА: Дакле, ви не би [ИНАУДИБЛЕ]?
>> ПРЕДСЕДНИК 1: Не
Има ли још питања?
Цоол.
Дакле, баш као можете да користите функцију који је написан за вас, можете такође
напиши своје функције.
Ово је функција да би неко могао су написали да израчуна обим
од К, на пример.
Постоји тип повратак овде, у овом случају инт, наше име функције к и наш
листа параметара.
>> И имајте на уму да морате да напишете податке тип параметра који желите да
користити или друго функција не Знам какав
параметар треба да буде прихватање.
Дакле, у овом случају, желимо цео број као наш улаз.
Па зашто можда желимо да користимо функције?
>> Пре свега, одличан за организацију.
Они помажу разбити свој код у више организован комаде и правити
лакше за читање.
Поједностављење.
То је добро за дизајн.
Када читате део кода и главна функција је стварно,
заиста дуго, можда је теже Разлог томе шта се дешава.
Дакле, ако сте га разбити у функцијама, да би било лакше за читање.
И поновну употребу-способност.
Уколико имате комад кода који је већ био назива или покренути више пута,
уместо преписивање тај код 10 пута у вашем главном функцији, да би могао
желе да га поново користите.
И онда сваки пут морате да користите да део кода, позовите функцију.
>> Тако да сада ако се вратимо на нуле запамтите, такође смо разговарали о неколико концепата,
од којих се навоја.
Тема је концепт вишеструких секвенце кода
извршавање у исто време.
Дакле, мислим да назад првог дана, где Давид је имао ви одбројавати број
људи у соби.
>> У суштини, оно што се дешава на је све вас момци су били
ради посебне теме.
И те теме су долазили заједно добити неку врсту одговора.
Слично томе, у нуле, када имате више спритес, ви можда
имају мачку и пса.
И они ће бити истовремено ради своје скрипте.
То је пример навоја.
>> И други концепт који је уведен у нуле био догађаји.
И догађаји су када више делова Ваш код комуницирају једни са другима.
У Огреби, то је било када сте користили емитују контролу и када сам
Примите блокова.
>> И такође, у 4. сету проблема, видели смо мало догађаја, као и.
Ви можда користе Гевент библиотека.
И било је функција ваитФорЦлицк у којој сте чекали
за корисника да кликне.
И ваш клик, у овом случају, било би догађај и чекати клику је ваш
догађај руковалац.
>> И такође, током трчање своје псетс и раде на својим псетс, ви
Можда су дошли у контакт са неке од ових команди.
То је оно што сте унели у свој прозор терминала или шта год прозор
који се појављује на вашем г Измени да, у суштини, навигацију рачунар.
>> Тако на пример, ЛС листе Садржај директоријума.
Направите директоријум креира нови фолдер.
ЦД, промена директоријум.
РМ, уклоните, брише фајл или неки директоријум.
А затим уклоните директоријум уклања директоријум.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ПРЕДСЕДНИК 1: Да, наравно.
Жао нам је, питање је да ли сугеришу стављање ово
на преварити Схеет.
То би могло да помогне.
Ако имате собу, можете га ставити на.
Такође је само генерално довољно добро да запамтите, јер када га користите
можда ћете желети да само су га запамтио.
То ће учинити ваш живот много лакше.
Да ли да одговорим на ваше питање?
>> Дакле, сада, разговарали смо мало укратко о библиотекама.
Али две главне оне које смо били користећи сада у току су
стандардни И / О и ЦС50.
Какве ствари су укључени у стандардној И / О библиотеци?
>> Да, до сада смо користили принтф.
У ЦС50, користили смо Затамњена и ГетСтринг.
И тип података стринг такође дешава да буде проглашена у овом ЦС50 библиотеци.
Ми ћемо разговарати мало више у дубину око како библиотеке раде и како они
интеракцију са остатком вашег кода.
Али то су два главна оне које смо ми су дошли у контакт са до сада у
курс.
>> Типови.
То су добри да се сетим колико сваки тип је представљен или како
многи бајтова сваки од типа захтева -
инт, 4 бајта, Чар, 1 бајт.
Флоат је 4 бајта.
Шта је дупло?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ПРЕДСЕДНИК 1: Да, па пловак али удвостручи величину.
Шта је требало?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ПРЕДСЕДНИК 1: У реду.
Шта је требало?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ПРЕДСЕДНИК 1: Да, дупло је инт.
Да.
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ПРЕДСЕДНИК 1: Дуга [ИНАУДИБЛЕ].
И онда дуго дуго је дупло.
>> ПУБЛИКА: Не, не.
Дугачак је само инт.
То зависи од архитектури пре [ИНАУДИБЛЕ]
и инт имају исту величину.
[ИНАУДИБЛЕ].
>> ПРЕДСЕДНИК 1: Тако дуго и инт су исти.
И онда дуго дуго је двоструко инт.
Цоол.
И онда, шта је последњи тип?
>> ПУБЛИКА: Поинтер.
>> ПРЕДСЕДНИК 1: Да, тако смо научили мало о показивача.
И без обзира на то шта је показивач указујући на - њега могао бити знак звезда
или инт звезда -
увек је 4 бајта за показивачем.
Питања о томе?
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ПРЕДСЕДНИК 1: Тако дуго и кам су исти у овом ЦС50 апарата.
>> ПУБЛИКА: Апарат је потпуно заменљиви.
>> ПРЕДСЕДНИК 1: Да.
До тада дуго дуго је двоструко инт.
>> ПУБЛИКА: Ово је 32-битни?
>> ПРЕДСЕДНИК 1: 32 бита, да.
>> ПУБЛИКА: Па [ИНАУДИБЛЕ]?
>> ПРЕДСЕДНИК 1: Да, ако то не експлицитно кажу, ви
треба да преузме 32 бит.
>> ПУБЛИКА: Било би рекао нешто као претпоставку
архитектура као апарата.
За 64 бита, једине ствари које промена су чезне и показивачи.
Обојица [ИНАУДИБЛЕ].
>> ПРЕДСЕДНИК 1: Да?
>> ПУБЛИКА: Питање.
Дакле, на једној од праксе квизове, она пита о једном унсигнед инт.
Па како ће да се одреди од инт [ИНАУДИБЛЕ]?
>> ПРЕДСЕДНИК 1: унсигнед у је такође 4 бајта.
Али оно што је другачије у вези потписан инт и унсигнед инт?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ПРЕДСЕДНИК 1: Тако је.
Оне могу представљати негативне вредности.
Али како то да урадим?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ПРЕДСЕДНИК 1: Да, то штеди 1 битни да представља знак.
Потписан је један бит који представља знак.
И непотписани само је све позитиви.
>> ПУБЛИКА: У реду.
Дакле, ви кажете да је двоструко два пута величине флоат?
>> ПРЕДСЕДНИК 1: Двоструки је два пута величине флоат, да.
>> ПУБЛИКА: Како показивач да дуго дуго [ИНАУДИБЛЕ]?
>> ПРЕДСЕДНИК 1: Дакле, питање је како ради показивач на дуго дуго -
како је то само четири бајта када дуго дуго њени 8 бајтова.
Дакле, запамтите шта је показивач, у суштини, на самом базне вредности.
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ПРЕДСЕДНИК 1: Да, тако показивач је само сећање локација.
Дакле, није битно колико простора који показивач указује на.
То само треба 4 бајта да пратите те меморијске локације.
Има ли још питања?
Цоол.
>> Дакле, последња ствар коју ја имам је стандардни излаз.
Требало би да их користе често довољно да можете да се сетите.
Али, то је кад користимо принтф, на пример.
И ми имамо те чувара места који Звали кодови формата.
>> Дакле, посто Ц Чар, посто сам за инт, и ми такође могу да користе одсто д.
То је иста ствар.
Међутим, генерално, у ЦС50 ми покушајте да користите одсто и.
Проценат ф за флоат.
Проценат ЛД за дуго дуго и посто с за стринг.
>> Слично томе, ми смо користили неколико ових низова.
На пример, обрнута коса црта н за нову линију.
Ово је само за када сте форматирање Ваш код за штампање ф.
Да?
>> ПУБЛИКА: Шта је проценат д за?
>> ПРЕДСЕДНИК 1: Дакле питање је оно што је проценат д за?
Проценат д је за интс.
Проценат Д и проценат ја су исти.
>> ПУБЛИКА: Која је разлика између косих н и р обрнута коса црта?
>> ПРЕДСЕДНИК 1: Дакле, питање је шта је Разлика између зазора н и
Зазор р?
Мислим косих р -
>> ПУБЛИКА: Дакле, обрнута коса црта р просто подразумева враћа на почетак линије
без одласка у нову линију.
Дакле, ако сте одштампали инверзна коса црта р и ви да се вратимо на почетак линије
онда одштампате више ствари, ви препишете ствари које је већ на
[ИНАУДИБЛЕ].
Док, н заправо иде на нови линија и иде на [ИНАУДИБЛЕ].
>> ПРЕДСЕДНИК 1: Па, каквих питања?
У реду.
Идем да га руку на Дан који ће се наставити.
>> [Апплаусе]
>> ДАН: У реду.
Па ја ћу говорити о другом широк Распон идеја из класе који су
отприлике две недеље представник и Почетак недеље три поласка
са ливење, што је само начин третирање вредност одређеног типа као
Вредност различитог типа.
Дакле, можемо да урадимо то са цхарс до интс, плута на интс, и
дуге чезне да се удвостручи.
>> Све ове ствари може да се користи као начин лечења неку бројчану вредност
минус Чар као неки други нумеричка вредност.
Дакле, постоје неки проблеми са овим, од Наравно, који долази када се баци
ствари као пловак на интс.
Дакле, ово је мало чудно.
Имамо пловак који је 1.31.
Ми га помножити са 10.000.
А онда смо га одштампате као инт.
Шта ова излаз?
10.000 пута 1.31.
Дакле 13.000, то је претпоставка?
>> ПУБЛИКА: Мислим да је 10.000.
>> ДАН: Па ја то помножи са 10.000 пре него што сам га ливење.
>> ПУБЛИКА: О.
Зар не би било бити један 9 и неке бројеве 0?
>> ДАН: Можда има неке чудне цифара.
Дакле у праву, то је 1,3 пута 10.000.
Дакле, то је 13.000.
И ово екстра чудно -
>> ПУБЛИКА: 13.100.
>> ДАН: 13.100.
Хвала, Роб.
И ово екстра необичност -
ово 9,9 -
је једноставно зато што то ливење завршио заокруживање доле где
то не би требало да има.
Да.
>> ПУБЛИКА: Ливење деси после било шта друго?
>> ДАН: Па зато што имам ово у штампи, она да ли то множење пре њега
чини овај кастинг.
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ДАН: Ја мислим да би прво цаст, да, што би било 10,000.
Још нешто?
Цоол.
Дакле, ово је 13.099.
Зашто се то дешава?
Непрецизност.
>> Поплавки нису савршени.
Они могу да представљају само бројеве одређени број значајних личности.
Дакле, ако смо одштампали 8 сиг смокве на ово пловак, добијамо неку врсту
ружно гледа број.
А то је зато што не могу тачно 1,31 бити представљени симпле
Овлашћења два у машини.
Тако да заврши узимање најближи Претпостављам, који се завршава
бити мало низак.
Смисла?
У реду.
>> Сада, замењен су другачији начин ради условне исказе где сви
ми бринемо о је један променљива.
Дакле, у овом конкретном примеру, ми смо добијање цео број од корисника.
И онда гледамо шта да цео је.
По свој прилици, то је број између једне и четири.
То је оно што тражимо.
>> Дакле, радите на прекидач име променљиве.
Онда подесите случајеве могуће вредности то може бити.
Дакле случају једна, кажу да је то лоше.
А онда се пробије да изађу прекидача стању тако
не настави.
>> У следећем случају -
тако случај два и три случаја -
ако је то случај два то само пада на Прва линија кода је види као са
случају три док не види паузу.
Дакле, разлог што се случај један до само за штампање низак је, јер сам
има овде ову паузу.
Ако ја, рецимо, игнорисали ову паузу - ако сам бацио ову отцепљење -
било би штампање низак, а онда би принт средину, а онда би сломити.
>> Дакле, паузе су важан део од услова и пребаците
треба да буду тамо.
Било случајеви који нису експлицитно наведени бави се подразумевано
случај у прекидачу и треба да се баци.
>> ПУБЛИКА: Дакле 1, 2, 3, и 4 ће бити н?
>> ДАН: Вредности које могу бити Н.
Да.
Да?
>> ПУБЛИКА: Дакле, када имате да [ИНАУДИБЛЕ]?
>> ДАН: Ти би одштампате низак, а затим било би штампање средину, и
онда би сломити.
>> ПУБЛИКА: Зашто би то принт средњи ако [ИНАУДИБЛЕ]?
>> ДАН: Значи, све под предмету пре паузе падне испод.
Дакле, случај један отисак је испод случај један као што је то следећи штампа.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Значи, овај број је само посебан вредност да ова променљива
може узети, зар не?
Да ли то смисла?
Да.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Да, случај два би одштампали средњи и онда пауза.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Ја мислим да сваки?
Које друге врсте података може да се пребаците преко?
>> ПУБЛИКА: Можете да пребаците преко било ког типа података.
Али то само значи ништа над карактера и интс и такве ствари, јер
ако пребацивање преко показивача да заиста не смисла,
пребацивање оптерећења, ако је чак и хајде да то урадите, због плутајуће тачке
у прецизности, ви не би стварно Желим да се то уради у сваком случају.
Па прилично, само Интс и знакова и слично.
>> ДАН: Да, то је када имате експлицитна Вредности које знаш, ја мислим, могу бити
да прекидач је заправо корисно.
Добро?
У реду.
>> Обим је опсег да прогласио променљива продужава.
Дакле, у овом малом комаду кода имам, било би пуно грешака.
А разлог је сам прогласио овај инт и у оквиру овог за петље.
И онда ја покушавам да референце које ја ван да за обим петље.
>> Дакле, у основи, можете да размислите о обиму као нешто што сте прогласи
са унутар скупа заграда само постоји унутар тих заграда.
А ако покушате и користе ту променљиву изван тих заграда, ви ћете
добити грешку од компајлера.
Да?
>> ПУБЛИКА: Дакле, овај не ради?
>> ДАН: Ово не ради, да.
Стрингс.
Стринг знак *.
Они су управо исти.
Они су само показивачи на ликовима.
И било жице које имате треба да се заврши са обрнуту косу црту нула, која је само
Ц конвенција.
>> То се зове НУЛЛ терминатор.
И НУЛЛ -
капитал Н, капитал У, капитал Л, Л капитал -
није исто као НУЛЛ терминатор.
Ово је показивач.
То је карактер.
Они су веома различити.
Запамтите то.
То ће бити на квизу, вероватно.
Нисам видео квиз.
Да?
>> ПУБЛИКА: Дакле НУЛЛ је, рецимо, показивач?
>> ДАН: Да.
>> ПУБЛИКА: Шта значи [ИНАУДИБЛЕ]?
>> ДАН: Ако, рецимо, маллоц се зове када сте немају довољно меморије да се
год величина питате за, маллоц враћа НУЛЛ.
То је, у основи, кад год је функција требало да се врати показивач, ви
Потребно је да проверите против НУЛЛ јер НУЛЛ је прилично добра -
то је, на неки начин, вредност смеће.
То је нула што се тиче показивачи ићи.
>> Кад год позовете функцију, да враћа показивач.
Ти ћеш желети да проверите да буде да ли да показивач није НУЛЛ
јер НУЛЛ је веома чест.
То је нека врста повратка смеће.
Дакле, ако нешто није у реду ићи, само врати НУЛЛ уместо.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Да, и то је то.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Спелл га као ово.
То је НУЛЛ терминатор.
То је мала слова Н-У-Л-Л ако ти га правопис.
>> ПУБЛИКА: И ја само отишао назад и тестирали.
А ако покушате да ставите плутајуће тачке вреднују у прекидач, она ће викати на тебе
говорећи, изјава захтева израз целобројног типа.
>> ДАН: Изволи.
Али да, шта је опет питање?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Значи велико Н, капитал У, капитал Л, Л је капитал стварна ц ствар.
То је НУЛЛ показивач и воља само да се третира као што је.
Ви никада неће покушати и правописа НУЛЛ карактер и видети било
други начин од овога.
Да?
>> ПУБЛИКА: Дакле, повратак у цхар мак или нешто у белешкама, зар не
оличавају исту функцију као [ИНАУДИБЛЕ]?
>> ПУБЛИКА: Дакле, мислите да Чар повратку из макс гетцхар, или
шта год да је?
>> ПУБЛИКА: Да.
>> ПУБЛИКА: Да, тако општи термин за све те ствари
су Сентинел вредности.
Дакле, као враћају инт мак из Затамњена Чар и максимално од гетцхар, то је
требало да буде као, у реду, ако ове ствари се враћају на нас,
нешто је кренуло наопако.
>> За савете, ми се десити да имају ово сентинел вредност да сви
уговара.
И ово је ствар коју вратити када ствари крену наопако.
Дакле, Чар макс је оно што ми користимо да представља нешто
као НУЛЛ или гетцхар.
>> ПУБЛИКА: Дакле, ако сте тестирања гетцхар, могао си само ставити НУЛЛ?
Желите да направите разлику?
>> ДАН: Ниси могао само да проверим НУЛЛ.
Ти би да проверите Чар мак јер Повратна вредност из функције је
лик не показивач.
Да?
>> ПУБЛИКА: Ово питање тражи за дужине.
Да ли то укључује НУЛЛ карактер?
>> ДАН: Не
И то је заправо како дужине зна да се заустави јер иде кроз
Ваша низ карактера до она види НУЛЛ карактер.
И онда је то, све у праву, ја сам готов.
>> ПУБЛИКА: [ИНАУДИБЛЕ] пет?
>> ДАН: Добро би било пет.
Да.
Дакле, низови су континуирано блокови меморије.
Они имају тренутни приступ рекавши назив низа, а затим, у чекињастим
протеза, шта год индекс желите да идете да, они индексирани од нуле до
дужина низа минус 1.
>> И они су прогласили по врсти Оно што сте складиштење у
низ, име низа, а затим без обзира на величину је тог низа.
Дакле, ово је знак низ дужине шест који има ове вредности.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Да.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Ако имате шта се дешава у низ већ направљен.
Дакле, можете да одредите ово уместо тога као, кажу, Чар, без обзира име вашег
низ је, празне заграде једнако Цурли Браце Д Е зарез зарез зарез Л Л зарез
О зарез НУЛЛ карактер и коврџава браце.
То би такође ради као декларацији.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Онда морате да имате величина већ направљен.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Да.
У реду.
Аргументе командне линије су начин добијање унос од корисника, као
Главни аргументи.
Главни узима два аргумента.
Број аргумената који се прошао дуж командне линије и
ниска вектор или ниска низ од свих аргумената.
>> Дакле, ако ја, рецимо, зове функцију као што је дот од 1 простор, 2 простора, три,
аргц би бити 4.
И аргв 0 ће бити тачка напоље.
Аргв1 ће бити 1.
аргв2 би 2. аргв3 би 3, у том конкретном случају.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: последњи елемент низа јер је дужина низа аргц плус
један од аргб, последњи елемент је НУЛЛ показивач.
То је аргц, плус 1.
Дакле, у случају да сам управо рекао, то би се аргв 0 је тачка ван.
аргв 1 је 1. аргв2 је 2. аргв 3 је 3..
аргв 4, који је један већи него би аргц бити НУЛЛ.
>> И то је НУЛЛ показивач.
Да.
А то је зато што је ниска Чар звезда је показивач.
Тако да мора бити истог типа.
Да?
>> ПУБЛИКА: Два питања.
Па један, шта је разлика између ово и ГетСтринг осим једног типа
у корисничком мотору?
И два, она је ускладиштена у Ваша недавна меморија?
Па као, ГетСтринг би бити [ИНАУДИБЛЕ]?
>> ДАН: Где се чувају?
Ја не знам где је складиште.
>> ПУБЛИКА: Па, у ствари, ви знате како било функцију можете позвати га аргументи
се чувају у стеку?
Тако аргц и аргв су аргументи за главни и они су на стек, или стварно
само изнад шта мислите како почетак стека.
Шта је други део у питању?
>> ПУБЛИКА: Па шта је [ИНАУДИБЛЕ]?
>> ДАН: Да, то је само другачији начин добијања унос од корисника.
Овај је мало ефикаснији и то је практичнији за скрипти јер вам
могу само да прође аргументе на ваш главни функција уместо да сачека
за кориснике ако немате никакве корисника.
>> ПУБЛИКА: И да, добити жице би [ИНАУДИБЛЕ].
То би држати ствари која вам је потребна.
>> ДАН: Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Да, аргв 0 увек укључује тачка коса црта од позива функције.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Да, сваки од аргумената су завршио у НУЛЛ карактер, јер су
су ниске.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Да, аргв аргц је НУЛЛ показивач.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: О, да.
Да, извини.
>> ПУБЛИКА: Па [ИНАУДИБЛЕ]?
>> ДАН: Значи, питање је да ли сте имали командна линија тачка сласх тачку од 1, 2,
би број командне линије аргументи бити два или три би било?
>> ПУБЛИКА: Мислим да се то не деси стварно битно.
Склон сам да кажем, ох, ти није прошао било аргументе командне линије када,
Очигледно, ти се зове функцију.
Тако сам тенденцију да вербално искључује Функција из командне линије
аргументи иако је укључени у аргв.
>> ДАН: Али, ако је то било на тесту -
да - и ако кажете нешто као аргц једнако 3,
ви сте у сигурном положају.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Ја мислим да ако уместо позивања ово у аргц и аргв гудачки заградама
али задржао исте врсте и управо звао им нешто другачије као
и б, ће и даље радити?
И даље ће радити, само би -
уместо да користите аргц - требало би да употребите и б.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Значи, питање је ГетСтринг је ће за складиштење меморије у гомили
јер ГетСтринг је знак *.
Он чува сећање на гомилу, јер му позива сада маллоц у стварни
имплементација ГетСтринг.
У реду, идемо даље.
>> Безбедност.
Дакле, да буде заиста безбедан, можете се ослонити на НО један и дозволите нико приступ било
ваших информација, због чега је свако гради своје машине,
њихови оперативни системи, све њихове програми из нуле, и очигледно
не повежете на било које друге машине преко интернета.
Дакле, компјутери су несигурни.
Они су стварно.
Морамо да верујемо друге људе.
>> А идеја о безбедности је да си ти покушавајући да ограниче количину
верујем да вам је потребна.
А један од начина да радите је кроз криптографије.
Криптографија је, у суштини, имамо тајне.
>> Понекад морамо да прође наше тајне заједно кроз, рецимо, интернета или
друге ствари.
А ми не желимо људе да знају ове тајне.
Тако смо шифровали своје тајне у начин да се надамо нико не може да схвати.
>> Дакле, ми смо користили -
кроз ток ове класе -
ствари као што су Цезар и шифри [ИНАУДИБЛЕ], који су обоје врло, врло
несигурних начина криптовање ствари.
Они су лако схватити шта они су и шта су твоје тајне.
Стварни свет користи много више компликоване шеме за шифровање.
И нећемо ући у много више од тога.
>> Отклањање грешака.
ГДБ је најбољи.
Ја ћу поново нагласити ово.
Користите гдб све време сваки пут када имате проблем.
Команде које су корисне у ГДБ су бреак, који сте прошли или линију
број, име функције, у суштини где у вашем коду желите да зауставите,
и бити у стању да преузме контролу.
>> Штампа узима променљиву и исписује шта год да је променљива је у то
указују на вашем извршења.
Следећа креће ваш извршење дуж једном кораку.
И степ кораке унутар функције у извршењу.
>> Друге ствари су покренути, која је како Ви заправо покренути свој код.
Наставити предузима све кораке који су потребни да се до следеће паузе тачку.
А постоје многи, многи други.
Погледајте их.
Они су велики.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Да, то је за отклањање грешака.
Дакле, за отклањање грешака је програм који вам омогућава да дебуг ваш програм.
То није програм који проналази грешке за ти, мада то би било сјајно.
>> И последњи за мене је претраживање.
Тако су врсте претреса да смо разговарали о у овој класи су линеарно претраживање,
који је само да се осврнемо кроз сваки елемент за претрагу простора, један
елеменат у време, док не пронађете оно што тражите или док не дођете
крај вашег простора за претрагу на којој ПОИНТ кажете да нисте могли наћи
елемент који сте тражили.
И то траје у најбољем константном времену, који је 0 од 1 и по најгорем линеарних
време, што је 0 н.
>> Бинарни претраживање, који треба Прљаве елементи.
Ти иди на средину ваших елемената, види ако елеменат тражите
је већа или мања од елемента да сте на средини.
То је већи, ви кажете да дно вашег простора за претрагу је ваш
тренутна локација, средњи, и поново покренете процес.
Ако је мањи, изгледаш рећи да - Да, шта има?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ДАН: Да.
Свака врста врста која је била учио у класа је фер игра за тест.
>> [СМЕХ]
>> ДАН: И чињеница да нисте имали да то уради за проблем постављен, то је фер
игра за тест.
>> ПУБЛИКА: Можемо ићи преко тога како да -
>> ДАН: Она ће нестати преко.
>> ПРЕДСЕДНИК 2: Стварни број за [ИНАУДИБЛЕ] је на студи.цс50.нет.
Дакле, ако се осврнемо на проблем праксе у стапање методу странице
студи.цс50.нет, постоји код за спровођење стапања врсте.
Дакле, не морате да имплементира то сами вечерас.
Али проверите да ли сте га разумели, а него само га напамет.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ПРЕДСЕДНИК 2: стапања врста страна на студи.цс50.нет, постоји пракса
проблем који, ако кликнете кроз Проблем, на самом крају постоји
решење, које је стапање врста имплементација.
Али проверите да ли сте га разумели а не само да је памћење
или га копирате доле.
>> ПУБЛИКА: И савршено валидан Проблем за испит ће бити
нешто као ово је списак.
Шта ова листа изгледа као после један корак од селекције врсте или
убацивање врста или шта год.
Једна пуна итерација листе.
Дакле, чак и ако не завршити потребе да кода за њега, потребно је да га разумеју
довољно да знам како то иде да се модификовање овај низ.
>> ДАН: То је то за мене.
>> [Апплаусе]
>> Луцас: Хеј свима.
Моје име је Лукас.
Ја ћу говорити о рекурзије, све сорте које смо научили, и
Мало свих показивача.
ОК?
Дакле, пре свега, рекурзије.
Шта то значи да се каже да функција је рекурзивна?
>> ПУБЛИКА: Позиви се.
>> ЛУЦАС: У реду, себе назива, да.
Дакле, као што овој слици, на пример.
То је као на слици у на слике и тако даље.
Тако, на пример, можете да имате - као Дан који је говорио о бинарном претрази.
Један од начина на који је бинарни претрагу рекурзивни је чињеница да сте
покушава да нађе број.
Дакле, идете у средину.
И онда ви проверите да ли су бројеви тамо у лево и десно у.
>> А онда ако сазнате број је ће бити на левој страни, то је исто
ствар као поново раде, али претрагу само на леве стране листе.
Дакле, тако је то звучи као да је рекурзивна.
Зато ви имате рекурзивно решење за обједињавање врсте.
>> У реду, ево примера.
Дакле, рецимо да желим да изаберете сви бројеви од 1 до н.
Ја могу да схватим да збир н број је н плус н минус 1 до 1.
Али онда, ако погледам н минус 1 плус н 2 минус 1 плус, то је исти
ствар као сумирањем бројеве до н минус 1.
Тако да могу рећи збир равноправног суме једнак н плус збир н минус 1.
Да ли то смисла?
>> И ја бих још нешто зове базни случај, а то је да
збир бројева уп на нулу ће бити нула.
Дакле, чим дођем до броја нула, ја зауставити бројање.
Да ли то смисла?
>> Дакле, овде је пример како Ја могу да спроведу то.
Па ја имам ову функцију у неким.
То траје природан број н.
Дакле, овде сам први пут проверити да ли је н мање или једнако нули.
Дакле, ако је мање или једнако нули, ја врати нулу, што је наш основни случај.
Иначе, ја само могу да се врате Н плус збир бројева из
један до н минус један.
Смисла?
У реду.
>> Дакле, ево како изгледа.
Имате збир 2 једнакима 2 плус збир 1.
А неки од 1 је 1 плус збир од 0, који је 0.
Смисла?
Дакле, ако погледамо гомиле вашем Програм, то је оно што изгледа.
>> Прво, имамо главну функцију.
А онда главна функција зове сума 2.
А онда сума 2 ће рећи, ох, сума 2 једнако 2 плус збир једне.
Тако сам додати суму од 1 до стека.
А сума од 1 ће позвати збир 0, који је такође ће бити додат
на стеку.
А свака од ових оне који су на врху другог морају да се врате
пре него што су они други могу да наставим.
>> Тако на пример, овде, збир 0, Прво, ће да се врати 0.
А онда изабрати суму од 1.
Тада збир 1 ће врати 1 до збира 2.
И на крају, сума од 2 иде да се врати у главни 3..
Да ли то смисла?
>> Заиста је важно да разумете како стек ради и покушајте да
видим да то има смисла.
У реду, тако сортирање.
Па зашто је важно сортирање, прво?
Зашто би требало да нам је стало?
Било ко?
Дајте ми један пример?
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ЛУЦАС: Да, у реду.
Дакле, можете да тражите ефикасније.
То је добар начин.
Тако, на пример, имамо доста ствари, заправо, у нашим животима да
су поредани.
На пример, речници.
>> Веома је важно да имају све речи у неком реду који смо
може лако приступити.
Дакле, то је оно што је говорио.
Можете претраживати ефикасније.
Размислите о томе како би било тешко да се речник у које речи у
случајан поредак.
Мораћете да погледате, прилично, сваки реч док не пронађете
реч коју тражите.
>> Ако користите Фацебоок, такође, када гледаш својим пријатељима, ти си
идемо да видимо да је Фацебоок Стави ближе пријатељ је на врху оне
да не причам да то много.
Ако идете скроз на дно Ваша листа пријатеља, идете да видите
људи који вероватно ни не запамтите да сте пријатељи са.
А то је зато што Фацебоок врсте ваши пријатељи на основу тога колико
затворили сте на њих.
>> Тако организовање података.
Такође Покемон.
Па видиш да сви Покемонс имају бројеве.
И то је као једноставан начин приступа подацима.
>> ПУБЛИКА: Приступ Покемон.
>> Луцас: Да.
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> Луцас: Да.
У реду, тако да избор врста.
Избор врста ће изабрати Најмања вредност мусиц листе сваког
Време у свакој итерацији.
То је као нека врста врста којом се бавите у твојој глави када покушавате да
сортирали листу по руци.
>> У суштини, све што урадите је да погледате за најмањи број.
Ти га ставити у сортиране листе.
А онда тражити следећи најмањи број.
И онда ви наставите да радите то и тако даље.
>> Дакле, избор врста је у основи ви изаберите сваки пут најмањег
некласификовани вредност.
Стави на крају сортед део листе.
И наставите да радите то.
Дакле, хајде да видимо шта брзо ово изгледа.
Дакле, овде је сортирана и некласификовани листа.
>> Дакле, за сортиран листе, то је у почетку празан.
А онда ћу да изаберете Најмањи број овде, који је 2..
Тако сам добио број 2 и ја ставио у предњем делу листе.
А онда сам тражити следећи најмањи елемент, који је 3.
Па сам га ставио на крају од сортиране листе.
И онда ја наставим да радим то.
Сматрам 4 и ставио га на крају.
Пронађите 5 и стави га на крају.
>> А погледајте како све то време да Кажем ставио га на крају је,
у основи, замене две вредности.
ОК?
А онда последњи, само имају још један елемент.
Дакле, то је већ сортирају.
>> У реду, тако уметање врста.
Убацивање врста ћеш имати да ствар има сортирана и
мусиц листе.
Једина ствар је да сваки пут када ви додајући елемент за сортиране
листа, само одабрати елемент који је испред некласификовани листе.
А онда ћеш знати, позиционира то би требало да буде у поредани
део листе.
>> Хајде да видимо шта је то толико ово има више смисла.
Дакле у почетку, на пример, ја покушавам да убаците број три у
сортирана део листе.
Дакле, листа нема ништа.
Тако сам само да ставите број 3.
>> Сада, желим да додате број 5 на сортиран део листе.
Тако сам погледати на број 5.
Приметио сам да је већа од 3.
Тако да знам да то мора да буде после 3.
Зато сам ставио 3 и 5.
>> Онда желите да уметнете број 2.
Приметио сам да је број 2 је заправо трајати затим и 3. и 5..
Па ја стварно морам да га ставите све начин на почетку листе.
Зато морам да, некако, пребаци све елементи у сортиране листе тако да могу
ослободили простор за број 2.
>> Онда видим број 6.
Видим да би требало да буде после 5.
Тако да сам га ставио тамо.
И на крају, ја погледајте број 4.
И ја приметио то треба бити између 3 и 5.
И онда сам га ставио тамо и смена сви остали елементи.
Смисла?
>> Буббле Сорт.
Дакле мехур врста је у суштини оно што сте да уради - ми то зовемо мехур
врста јер идете кроз листу - то је заправо боље да сам само показати
ти ово свиђа -
и ти ћеш да упоредите суседне бројеве.
И ти ћеш да мењате своје позиције, ако нису
у правом редоследу.
>> Дакле, у основи, оно што се дешава у деси је овде, на пример,
имате 8 и 6.
Ви знате да ће сортиране Ред заправо бити 6 и 5, зар не?
Дакле, идете да мењате наређења.
Онда видим 8 и 4 овде.
И ја радим исту ствар.
Ја опет замене.
И на крају, 2 и 8.
Ја сам их такође мењате.
>> То се зове Буббле Сортирај јер после сваки од ових итерација, заправо,
највећи број у листи добија све пут до краја листе.
Да ли то смисла?
Зато што држи га замене и преласка на десно.
>> У реду, тако да је ово друга итерација.
Било би исто.
Урадићу једну замену и онда последњи.
Ја да не постоје свопови а листа је сортирана.
Дакле, у Буббле Сорт, ми у основи задржати иде кроз листу и замене
ствари док сам приметио да ја нисам урадио било свопови то ради итерацију, који
значи да је списак већ сортирана.
Смисла?
>> Хајде да причамо мало о покретању време.
Дакле, да ли ви сећате Велики О, Омега, и Тета?
Да?
У реду, шта је Биг О, пре свега?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ЛУЦАС: Да, то се зове најгори случај рунтиме, који само значи да је
колико очекујете програм да се покрене.
Као, у смислу -
у овом случају - н.
Број елемената у листу у најгорем случају.
Као, у најгорем могућем случају.
>> Дакле, за Буббле Сорт, на пример, имамо Биг О Н квадрата.
Зашто имамо то?
Зашто је Буббле Сорт Биг О Н квадрат?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ЛУЦАС: Да, тако ће бити најгори случај да ћу морати да урадим н итерација.
Дакле, сваки од итерација ће доносе највећи елемент до краја
листе.
Дакле, најгори случај је да ја имам да уради ту ствар н пута.
И за сваки од тих времена, морам да урадите н свопова јер морам да упоредите
свака два елемента.
Зато што је н квадрат јер је н пута н.
>> Затим, избор врста је такође н квадрат јер, за сваку итерацију, морам да
погледајте сваки елемент у листи.
А онда наћи најмањи, што значи да морам да
погледати кроз н елемената.
И ја морам да урадим да н пута јер Морам да изаберете све н елемената.
>> Врста убацивања је такође н квадрат јер најгори сценарио ће
бити, један, морам да убаците н бројева, зар не?
Тако сам већ знао да ћу да н итерација.
Али, за сваки од тих бројева, ако сам имао да погледате све бројеве у
сортирана листа и ставио га скроз у предњем, који ће бити н квадрат
јер ће се н пута н поново.
Смисла?
Шта је омега?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> Луцас: То је најбољи сценарио.
Дакле, то је као, у много пута за сортирање, најбољи сценарио је
када је листа сортирана већ.
Тако да не стварно имати да уради било шта.
Буббле Сортирај има најбоље сценарио н.
Да ли ви знате зашто?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ЛУЦАС: Да, ако пратите да ли подаци следовање имали свопови или
не, ако имате нешто као сет за важи ако је било итерације, уколико
Листа је сортирана већ, у основи, шта ће се десити је да ћу се
покушати да замени свака два суседне елементе.
Идем да видим да нема свопови.
И ја само вратити одмах.
>> Дакле, то значи да сам само морао да проћи кроз листу једном.
Дакле, то је зато што сам н погледати у н елемената.
Зашто избор врста н средити?
>> Да, чак и ако је листа сортирана, за свака итерација избор врсте, ја
да изаберете минимални елемент.
То значи да морам напоље да погледам на свим елементима у некласификовани
навести и пронађу минимум за сваке итерације.
Да ли то смисла?
>> И мач је уметање јер н у случај да ја покушавам да убаците
бројеви и све бројеве, када сам покушати да их убаците, ја видим да они
су у правом положају.
Ја не морам да проверим све друге бројеви у некласификовани листи.
Зато ће бити н.
Смисла?
А шта је тета?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ЛУЦАС: Шта, жао?
Реци то поново.
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> Луцас: Тачно.
Дакле, можете видети да је само избор чувају у Мерге сорт имају тхетас.
А то је зато што имате само тета ако су оба Биг О и Омега су исти.
У реду.
И коначно, спојити врсте је у лог н.
>> А онда, као Дан је говорио, Мерге сорт је врста као што исти начин на који
ти бинарну претрагу.
Тако добијате листу.
И ти ћеш да смањи на пола.
А онда их исећи у мањим половине.
А онда их обједините.
Ви се сећате да је, зар не?
У реду, како је говорио.
>> Ок, показивачи.
Дакле, шта је показивач?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> Луцас: адреса.
У реду.
Знам да Дејвид показује гомилу видео за Бинки и ствари које указују
међусобно.
Али ја волим да мислим о показивача као само адреса.
Дакле, то је променљива која се дешава за чување адресу.
>> Дакле, то је само овај посебан променљива који је дугачак четири бајта.
Запамтите, да показивач на било шта је увек четири бајта дуга за наше 32-бит
Машина тако случај са апарат.
И то само има положај од променљиве унутар ње.
>> У реду, тако да је ово сећање, у основи.
Дакле, сваки блок меморије заправо има ознака, који је адреса
слотти меморија.
Дакле, то значи да ја могу имати показивач показује на
било који од ових адреса.
Дакле, разлог зашто ћемо користити показиваче је ако морам да се сетим локацију
да специфична променљива је меморија.
>> И ви се сећате да је један од оних случајева је било, ако имам неку функцију
ако сам заиста желите да свап за реалних бројева, ја заправо
морају да пошаљете показивач.
Не променљива.
Да ли ви сећате тога?
Разлика између -
како се зове?
Позивање по вредности и позивом позивањем, зар не?
>> ОК, да.
Тако зову по вредности.
Када пошаљете само променљиву на функционише само шаљете вредност.
Дакле, ви заправо шаљете копија променљиве.
И твој програм није брига о ако иста променљива заправо
прави копију.
>> И зове по референци значи да Ја заправо шаљем копију
Поинтер на ту променљиву.
Дакле, то значи да шаљем локација тог променљиве.
Тако осетити имам локације променљива, када позовем функцију
са показивачима, ја сам у стању да се заиста променили податке који је био главни у.
Смисла?
>> Мада, показивач је копија, показивач даље има реалну адресу
променљива која желим да променим.
Смисла?
>> Тако стварање показиваче.
Запамтите, показивач увек Тип који је то показује
да и онда звезда.
А онда сте ставили име.
Дакле, запамтите да кад год имате год звезда, то је као показивач на
да шта год променљива укуцајте који сте имали.
>> Дакле, овде у звезду, на пример, то је показивач и цео број.
А онда Чар звезда је показивач Чар звезда и тако даље.
Да?
>> ПУБЛИКА: Шта ако имамо показивач на н стар к.
Знам да креира показивач на к.
Да ли то такође прогласи к цео број?
>> ЛУЦАС: У реду, тако да када кажете н стар к, Ви не правите показивач на
променљива к.
Ти стварање показивача по имену к.
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> Луцас: Дакле, када кажем Н к звездице, ја сам говорећи, хеј, у сећању, ја ћу да
добити једну од ове три кутије.
И ја ћу да кажем да је ће бити к, што је
ће бити показивач.
И нешто занимљиво о показивача је да кажемо да они имају
4 бајта за 32-битну машину.
А разлог за то је зато што 4 бајта су 32-бита.
>> И машине које су 64 бита заправо имају показиваче адресе
који су дуго 64 бита.
Дакле, то само значи да је величина адресе у машини је другачија.
>> Тако Позивање и Дереференцинг.
Постоје два оператера који ви треба да запамтите.
Први је амперсанд.
Други је звезда.
Немојте се мешати у то стар и ово стар јер не заборавите да, у
овај случај, имате н звезду.
>> То је као целу ствар заједно.
Нема простора н звезда.
Дакле, то значи да је то тип.
Запамтите, када сте променљива звезда, ти си
говори о типу.
>> Када сте управо звезда и онда назив променљиве, то значи да
ви дереференцинг показивач, који значи да гледаш
показивач, проналажење адреса је указујући да, иде на ту адресу,
и гледа кад год имате тамо.
Па ја кажем мојим студентима да када имате звезда, требало би да размислите да је
скраћеница од садржаја.
>> Дакле, ако имате показивач и ви урадите звездице показивач, то је
садржај показивача.
Дакле, идете на све што се указује на и погледајте константном садржају.
А амперсанд је исти ствар као адресу.
>> Дакле, ако имам променљиву А - као, хајде да кажу да сам кам једнака 3 -
ако желим да пронађе адресу која променљива меморија, ја само могу да урадим
амперсанд.
Дакле, то је адреса.
Смисла?
>> Дакле, овде је пример.
Овај недостаје инт б и ц инт.
Дакле, инт једнак 3 значи да Ја идем у меморији.
И ја ћу да нађем место и стави број 3 овде.
>> А онда инт р износи 4.
Ја ћу да урадим исту ствар.
Иди на меморију и ставите број 4 у једном од кутије.
И инт износи 5.
Пронађи још кутију и ставите број 5.
>> Дакле, шта је то линија ради напољу? н звезда годишње једнака амперсанд а.
Дакле, пре свега, н звезда годишње.
Шта то ради?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> ЛУЦАС: Да, тако н звезда годишње, прво, декларише показивач зове годишње.
А онда је додељивање вредности да показивач буде адреса.
Тако амперсанд.
Затим, ако ја урадим звездице ПБ, шта је звезда ПБ?
>> Ох, извините.
Ово је такође нестао. н звезда пб.
Мислим звезде ком.
Тако ми је жао.
То је иста ствар.
Али сада сам добро ар стварање показивач то б а затим показивач на ц.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> Луцас: Да.
Дакле, ако идете на меморију и одете у кутија која је ознака за годишње,
ви заправо идете да виде адресу.
ОК?
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ЛУЦАС: Да, показивач је адреса.
Никада не заборавите то.
То је као најважнији део око показивача.
Ту је и чување адреса на неку променљиву.
Још нешто?
Има ли још питања?
У реду.
>> Тако Показивачи и низови.
Запамтите да када радим инт низ 3, у основи, оно што ја радим је да сам, некако
од, проглашавајући у показивачем.
Дакле, низ је врста као показивач на специфично место у меморији у којој сам
издвојила три слота за целих бројева.
Да ли то смисла?
>> Дакле, када ја инт низ 3, шта сам ради, у основи, ствара три
слотова у меморији.
Тако да сам само наћи три слота за меморију.
Дакле, ако ја, онда, звезда низ, она у основи значи садржај низа,
што значи да избрише показивач, ја идем на том месту да то указује на,
и ја ставио број један.
>> А онда, ако ја урадим звезда низ плус 1, то је иста ствар као и ради низ
заграде један, који управо значи идем место да се то показује у.
А онда, плус 1 марки ми пребаци једну позицију.
Зато идем на ову позицију, заправо, и ставио број два.
>> А онда, на крају, кад радим низ плус 2, идем где
Арраи је показујући на.
А онда сам се пресели у меморијских блокова.
И онда сам ставио број три овде.
Да?
>> ПУБЛИКА: Дакле, звезда низ је једноставно изговарањем прву тачку.
И можете да додате 1, само зато ми смо само стварно
референцирање тај први адресу.
>> Луцас: Да.
Зашто, на пример, кажу низ 0, низ 1, 2 и низ?
Кажем, зашто радиш 0, 1, 2, 3 уместо 1, 2, 3?
Један од разлога је, један, компјутер програмери воле да почне
рачунајући од 0.
Два је јер када то урадите низ 0, то је иста ствар као и ради низ
плус 0, што значи да иду у који положај, а ја не
прескочите било које меморијске блокове.
Тако да не крећу никакве меморијске блокове.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> Луцас: Она пита шта је разлика између радим
ово или радите маллоц.
Једна од разлика је да инт низ 3 ствара
низ на стек.
А кад ја радим маллоц, то ствара на гомили.
Да ли то смисла?
>> Па како маллоц заправо раде?
Па зашто ми још треба користити маллоц?
Ваш компајлер врста личности из свих променљиве које сте декларисали.
И он ствара простор за све Од њих у стеку.
Значи све ваше варијабли ће да буде негде у стеку.
Дакле, овде је променљиве окружења.
>> Дакле, у основи, простор за те променљиве у меморији се издваја у
саставити време.
Дакле, то значи да ваш рачунар има да знају све те променљиве
унапред.
То не треба да зна шта вредност идете да стави у њих.
Али то мора да зна како много меморије вам је потребно.
>> Али сада хајде да кажемо да је, на пример, правите низ или узимање
стринг који узимате од корисника.
Ви не знате колико дуго низ ће бити, на пример.
Дакле, ви не знате тачно колико меморијски блокови ли издвојити, зар не?
>> Тако да заиста не смисла за Ви кажете да стави 100 карактера.
И онда шта ако корисник пише 150?
Ти ћеш бити пијан.
>> Дакле, у основи, не можете бити сигурни како много меморије вам је потребно да се издвоји
када компајлирате програм.
Ви само знате да на време извршавања.
Зато имате гомилу.
Дакле, гомила ће имати меморију да сте током додјеле
трајање програма трчања.
>> Дакле, у основи, када то урадите маллоц, шта радите је додели меморију на
рунтиме, што значи да сте одлучивање право у том тренутку да сте
треба да имају ту меморију.
Тако да је, када сте га доделу.
Да ли то смисла?
>> Дакле запамтите, стек има променљиве који су креирани на компајлирања.
И онда гомила има променљиве који су креирани као идете
са маллоц, на пример.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> Луцас: Тако је ГетСтринг ће позвати маллоц.
Пусти ме да причам о маллоц, и Објаснићу ГетСтринг.
Дакле маллоц је иста ствар као алокације меморије.
Дакле, то ће да издвоји меморија на гомили.
И то ће вратити показивач на где да меморија је додељен на.
>> Дакле, када то урадите -
овде пример -
н звезда показивач.
А онда показивач једнако маллоц величина инча пута 10.
Правим показивач.
И онда ја ту додељивање показивач вредност показивача који маллоц
је давање ме.
>> Па питам маллоц можете доделити простор за 10 целих бројева.
То је оно што каже.
И маллоц ми даје назад Поинтер на том месту.
Смисла?
У реду.
Ја И ГетСтринг је, у основи, ради позвати да маллоц тако да можете доделити
меморија за време рада.
>> Увек имајте на уму да проверите за нулл јер маллоц ће вратити нулл
ако то не може да додели меморију.
Рецимо да питате за смешно количина меморије.
Рачунар неће бити у стању да издвоји толико.
>> Дакле маллоц се само иде да се врати нулл.
Дакле, увек имајте на уму да проверите да ли показивач који сте добили од маллоц је
нула или не, јер, ако је, да би могао бити дереференцинг показивач и
изазива нежељене грешке.
И на крају, не заборавите Ваш слободне меморије.
>> Маллоц ствара сећање на гомили.
И морате да ослободите меморију пре него што програм заврши.
У реду, то је све за мене.
Извини, Роб.
Хвала.
>> [Апплаусе]
>> Луцас: Било последњих питања пре Роб долази?
Не?
Да?
>> ПУБЛИКА: Ја нисам видео ово један мрежи.
Да ли сте га уплоадед још?
>> Луцас: Ја мислим да је Дејв уплоад га ускоро.
>> Даве: То ће бити објављени.
>> Луцас: Биће мрежи.
>> ПУБЛИКА: То је горе.
>> Луцас: То је горе?
У реду.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> ЛУЦАС: Да, требало би да ослободи све меморија која се ставља у гомили.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> Луцас: Да.
Сваки пут када имате културу маллоц, требало би да имате културу бесплатан
након што престанете да користите променљиву.
Тако маллоц и фрее су увек заједно.
Њихови најбољи пријатељи.
Да.
Роб?
>> РОБ: Ја ћу ићи брзо.
А такође видео ће бити постављена.
Ја имам микрофон на.
>> У реду, па недеље пет ствари.
Прва ствар што имамо је стек.
Дакле, не заборавите да постоји само један стек рам по активног позива функције.
Видећемо да за секунд.
А такође се сећате шта заправо иде у сваком кадру стека ће бити
локалне променљиве наших функција, аргументи који су прошли у наш
функције, заједно са пар друге ствари које стварно не
треба да бринете.
>> Дакле, овде је пример програма где, обавештење, главни је принтфинг повратак
вредност ФОО 4.
трла је само да се врати Вредност бар 4. запета 6.
И бар ће поставити неке локалне променљива н једнако 4 пута 6.
А онда се врати н.
>> Па хајде да погледамо на стек током стварна итерација овог програма.
Дакле, ту је дно нашег стека.
Запамтите да стек расте нагоре.
Дакле, на дну нашег стека, ми имају стек оквир за главни.
Када програм почиње, главни увек ће бити на
дно нашег стека.
>> А шта је унутар наше стек оквир за главни?
Дакле, иако не постоје локални варијабли главни, као што сам раније рекао,
имамо аргц и ргв заузимају простор унутар главног стек оквира.
Дакле, главни је сада ће позовите функцију фоо.
А то значи да ће се трла добити свој стек оквир.
>> Дакле, сада смо унутар функција ФОО.
А шта треба да иде у Фоо је стек оквир?
Па, трла има аргумент н.
И н је једнако 4, јер то Главни пролази као аргумент Фоо екипе.
>> Дакле, сада трла ће позвати бар.
Шта је трака ће имати унутра од свог "стека кадру?
Она има к једнака 4 и једнака шест.
То није све што ћемо имати у стек оквира, јер трака
такође има локалног променљиву н.
И н ћемо поставити једнака 24.
>> Дакле, сада бар ће да се врати н.
Тако бар се враћа на 24 стек оквир ФОО.
И зато бар сада враћа, да значи да смо кокичара стек оквир
за бар офф стека.
Дакле, све је меморија која трака је била користећи је сада ван стека.
>> Сада, трла се такође дешава да се врати у главни 24.
Дакле, сада је трла враћа, меморија да трла користио у свом '
стек оквир је такође нестао.
А сада, главни ће позвати принтф.
Тако је само још један иф функција.
Када зовемо принтф, то ће бити други стек оквир за принтф
позив функције.
>> Шта ми пролазе принтф?
То је оно што се дешава да иде на свом стацк рам.
У најмању руку, ми пролази да посто сам бацксласх н и
Аргумент 24.
То можда има више у то стацк фраме ако иф деси да се користи неки
локалне променљиве.
Ми не знамо.
>> Али, све то иде у принтф-их стек оквир.
То ће извршити принтф.
Онда иф урадио.
Она ће се вратити.
Коначно, главни је урађено.
Главни ће се вратити.
И онда наш програм је завршен.
Да?
>> ПУБЛИКА: Да ли видите [ИНАУДИБЛЕ]
аргументи [ИНАУДИБЛЕ]
параметри?
>> РОБ: Дакле, постоји суптилна разлика између аргумената и параметара.
И заиста, у заједничком говоре, људи имају тенденцију да их само мешају све време.
Али параметри су формални Назив ствари.
>> Тако аргц и аргв су параметри за главни.
Аргументи су оно што заправо проћи у као тим параметрима.
Тако да када ја зовем фоо од 4, 4 је аргумент сам пролазећи ин
И параметар н, унутар трла, преузима вредност 4.
пошто је 4. аргумент.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: н је локална променљива за бар.
н је увек локална за фоо, али то је параметар на фоо.
То није локална променљива.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: трла се само зове бар и повратак обзира бар повратак.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: Да, само да видим више стек оквире.
Да?
>> ПУБЛИКА: Зашто је трла зове пре принтф?
>> РОБ: Зашто је трла звао пре принтф?
Тако сам могао да, уместо тога, уради нешто као инт к једнако фоо од 4
и затим штампа к.
Али уместо тога, у комбинацији сам функцију позвати у принтф аргумент.
>> Али приметите да ми не можемо заправо изврши позив принтф док не
схватим шта трла 4 је.
Дакле, идемо да процени ово.
И само једном да је готово идете да се врате и процени ово.
Да?
>> ПУБЛИКА: Како и бар [ИНАУДИБЛЕ]
вредност, зашто ми не имамо [ИНАУДИБЛЕ]?
>> РОБ: Они би требало да буду потпуно Инт.
То није био ухваћен у више пролази.
Дакле, требало би да буде кам-бар и кам трла јер како оних
се враћају целе бројеве.
Празнина је једино ако они неће да се врате стварне вредности.
Да?
>> ПУБЛИКА: Ако сте имали линију изнад повратак, [ИНАУДИБЛЕ]?
>> РОБ: линија изнад повратка?
>> ПУБЛИКА: Да.
Као, ако ниси принтф и [ИНАУДИБЛЕ], би то двапут штампају?
>> РОБ: Тако унутар ФОО?
Ако смо имали принтф овде?
>> ПУБЛИКА: Да.
>> РОБ: Дакле, ако смо имали право принтф овде, то би једном одштампате.
Пошто смо се позивају фоо једном у праву овде, онда ћемо погодио принтф.
Онда ћемо позвати бар.
А онда ће се вратити трла.
И то је то.
Ми само икада наићи принтф једном.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]
принтф позивајући фоо јер смо прво смо позивајући принтф а онда смо, пролазећи
аргументи.
>> РОБ: Дакле, у теорији, није принтф зове фоо?
Тако да нема.
Само поредак који ц ће извршава ове ствари је, пре него што можемо
позовите функцију, све аргументе функцији морају
бити потпуно оценити.
Тако је ово потпуно оцењује?
Да, то је само низ.
То је само вредност.
>> Онда морамо да потпуно процени ово.
Када се то уради, сада све његови аргументи се оцењују.
И сада можемо направити позвати на принтф.
Да?
>> ПУБЛИКА: Једно питање.
Ако имате воид функцију, мора имате повратну зарез?
>> РОБ: Ти не повратак зарез ако имате воид функцију.
У реду.
Тако да сада неки гомила ствари.
Дакле, гомила је како ћемо се носити са управљањем динамичке меморије.
И то директно у супротности са стек који смо назвали аутоматски
управљање меморијом.
>> Дакле, на стек, ви никада стварно имате да се баве како су локалне променљиве
се гура и убацио ван све ови стек оквире и све те ствари.
Не морате да бринете о томе.
То је аутоматски.
Дакле, гомила је приручник.
И [ИНАУДИБЛЕ]
долази од ових функција маллоц и фрее.
>> Дакле, овде је други програм.
Све што радимо је маллоцинг цео број.
Ми смо га складиштење у стар к.
Наравно, морамо да проверимо да видим да ли је к нула.
Онда ћемо само поставити шта к је указујући на до 50 година.
Штампање шта к указује да, штампање к, а затим слободан к.
>> Па како је то заправо ће изгледати Ако погледамо наше гомиле и гомиле?
Тако ћемо поново почети.
Доњи нашег стека као и раније.
Запамтите да те директно хеап противи штос?
Тако ћемо имати врх наше гомиле тамо.
>> Дакле, дно нашег стека, имамо наш стек оквир за главни.
Она има простор за аргц, аргв, а ми сада имају локалну променљиву к, који
је инт звезда.
Тако ћемо поновити кроз овај програм.
Прва ствар што имамо је позив за маллоц.
>> Дакле, ми правимо позив маллоц.
Маллоц је функција.
То ће добити стек оквир.
Шта ми пролази да маллоц?
То ће ићи унутра стека оквира.
Ми смо пролазећи величину н, што је 4.
Тако да је прошао на маллоц.
>> Шта маллоц радим?
То нам граби простор на гомили.
Тако ћемо ићи у гомили.
И ми ћемо да зграби 4 бајта из гомиле.
Дакле, хајде да само дају да произвољан број.
0к123 Само претварати да је адресу која је на гомили.
>> Дакле, шта је заправо унутар које област меморије на адреси Ок123?
Смеће.
Дакле, ми нисмо ништа чувају у њој.
Дакле, колико знамо, то може бити било шта.
Не треба претпоставити да је нула.
То је највероватније није нула.
>> Дакле, сада маллоц враћа.
А шта да радимо кад маллоц враћа?
Поставили смо шта се враћа.
Ми смо поставили к једнак ономе она се враћа.
Дакле, шта је то враћа?
То враћа 0к123 јер то је адреса блока меморије да
само издваја у гомили.
>> Дакле, вратите 0к123 Кс је сада ће бити постављен једнака 0к123 које, сликовито,
ми често извући као к има стварни арров указујући на том блоку.
Али к је само чување ту адресу.
Тако да сада морамо да проверимо да ли је к нула.
То није нула.
Ми се претварамо да је маллоц успела.
>> Дакле, сада звезда к једнако 50.
Дакле, звезда сећа то значи иди на ту адресу.
Дакле 0к123 Идемо у иди на ту адресу.
Тако да нас доводи тамо горе.
Шта радимо на тој адреси?
Ми складиштење 50.
>> Дакле, након ове линије, то је оно ствари ће изгледати.
Дакле, сада то више није смеће тамо.
Сада знамо да је у то 50 Посебно јер адреса
смо га поставили на то.
ОК?
Дакле, сада ћемо да одштампате ф.
>> Дакле, прво ћемо да одштампате звезде к.
Дакле, шта је звезда к?
Опет, звезда к средства иду у ствар која указује на к.
Дакле, к је чување 0к123 Го то да.
Добијамо 50.
Дакле, принт Ф то.
А то значи да ће за штампање 50.
И онда то враћа.
>> И онда имамо другу принтф.
Сада смо посто стр.
Ако нисте видели, то је колико сте одштампали показивач.
Дакле, имамо и проценат, проценат ф, и сви они већ.
Па посто п, одштампајте показивач.
>> Дакле, к је показивач.
Дакле, ако ћемо да одштампате к себи, смо штампање шта је заправо унутра
к, који је 0к123 Дакле први штампање Ф ће да штампа 50.
Други штампање ф иде Да бисте одштампали 0к123?
>> ПУБЛИКА: Да ли користите одсто к да одштампате показивач?
>> РОБ: Дакле, да ли користите одсто к да одштампате показивач?
Тако можете, али посто к је само, генерално, јер као ако имате неки
цео број и желите да одштампате она као хексадецимални.
То је само начин да то урадите.
>> Док, посто би д принт као децимала.
То смо били добили одсто пом. Ја је само цео број.
проценат п је посебно за тројке.
>> Дакле, к је показивач.
Ми желимо да користимо одсто стр.
Али посто х могао да ради.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: Да.
Барем за овај позив - па сам није га укључити овде.
Али ова два аргументи су нужно унутар овог оквира стека
заједно са свим локалним варијаблама принтф се дешава да се користи.
И онда следећи позив за сада принтф унутар принтф стек оквира је
посто п косих н и шта год вредност к је, што је 0к123.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: То ће штампати нешто да изгледа овако.
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> РОБ: Тако да га штампа у облику адресе.
Изгледа као адресу.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: Зашто је шта?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: Зашто је овај показивач 4 бајта?
Дакле, постоји гомила од 0-их испред ове.
Дакле, то је заиста 0к0000000123.
На 64-битном систему, не би било цела гомила више нула.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> РОБ: Тако прво иф ће штампати -
>> ПУБЛИКА: [ИНАУДИБЛЕ].
>> РОБ: Да, то ће за штампање шта је к указује на.
Звезда каже шта је ово ствар указујући на.
Ухвати га.
Дакле, шта је то указује на?
50.
Ухвати га.
То је оно што ћемо штампати.
Док, следећи, ми смо Само штампање к себи.
Шта је унутар ф?
0к123.
У реду.
>> И онда, коначно, имамо слободан.
Шта ми пролази да ослободимо?
Пролазимо к.
То време сам заправо приказује она у стек оквира.
>> Тако смо, пролазећи вредност 0к123 на слободан.
Дакле, сада бесплатно зна, у реду, Морам да идем до гомиле
и бесплатан је меморија.
То више не користи, шта је на адреси 0к123.
>> Дакле, слободно ће да објави да из гомиле.
Сада наша куча је опет празан.
Немамо меморије цурења.
Сада бесплатно ће се вратити.
Обратите пажњу да је к још 0к123.
Али то је сада не важи меморије.
Ми више не треба дереференце х.
Да?
>> ПУБЛИКА: Да ли се вратити 0 редундантне?
>> РОБ: Да ли ретурен 0 редундантне?
Да.
Ми само стави да постоји, јер имамо повратну једну за ваздух.
Дакле, то је као, да, омогућава укључују повратак 0.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: Дакле, после слободног к, шта се дешава ако трудимо се да дереференце показивача?
Могуће је да ништа не крене наопако.
Могуће је да ћемо и даље ћете добити 50.
>> Могуће је, такође, да је меморија сада се користи за нешто друго.
Дакле, то је недефинисан понашање.
И недефинисан значи ништа може да се деси.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: Не, па ако доделите к на нешто друго.
Дакле, ако овде смо рекли к једнак маллоц нешто друго -
маллоц величина догађај -
онда то оригинални блок од меморија није ослобођен.
И ми смо званично је изгубили.
То је осипање меморије.
Изгубили смо све референце у том блоку меморије.
Дакле, не постоји начин смо икада да га ослободи.
У реду, па онда врати 0 значи учинио.
>> У реду, тако Стацк Оверфлов.
Шта је идеја овде?
Дакле запамтите, гомила иде доле.
Стек иде горе.
Дакле, ово је пример из предавања, Мислим, где је главни само да
зовемо функција фоо, који се дешава да се позове рекурзивно над и
изнова.
>> Дакле Стацк оквири ће раде потпуно исто.
Дакле, ми ћемо почети са главни као доње стек оквира.
Затим главни ће звати фоо, који ће добити стек оквир.
>> Онда трла ће звати фоо Поново, који ће добити
други стек оквир.
А онда опет, и опет, и опет, и поново до, на крају, ми смо покренули
у гомили.
Дакле, ово је како смо добили Стацк Оверфлов.
И у овом тренутку, ви СЕГ грешку.
Или ви стварно бих СЕГ грешку пре ова тачка, али да.
>> ПУБЛИКА: Да ли је језгро депоније исто као сег грешком?
>> РОБ: Тако ћете видети сегментацију кривица језгро бачена.
Добијате језгро депоније када ти СЕГ грешку.
И то је као депоније за све Садржај вашег тренутног меморије тако
да можете да покушате и идентификују зашто ти СЕГ окривио.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: Тако сегментација грешка значи постоји Стацк Оверфлов.
Дакле, не нужно.
Сегментација грешка значи да сте дирљиво сећање на начин
Ви не би требало да буде.
Дакле, један начин да се то догоди је, када Ви Стацк Оверфлов, почињемо дирљиво
меморија на начин који не би требало да буде.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: Тако унутар бесконачној петљи.
Као, то је као рекурзивне Инфините петља и тако смо добили још један
стек оквир сваки пут.
Али само унутар редовног бесконачно, док један -
добро, хајде да чак не штампају ф -
уради нешто.
Како год.
>> Нећемо да се добијање други стек оквир.
Само ћемо да лоопинг над овом једном инструкцијом.
Стек не расте.
То је чињеница да сваки рекурзивни позив нам даје оквир стека.
Зато смо добили Стацк Оверфлов.
Да?
>> ПУБЛИКА: Дакле, ако сте рекли да се док петља а затим [ИНАУДИБЛЕ]?
>> РОБ: Дакле, ако унутар вхиле петље било је иф, још увек би
не СЕГ грешку.
Ја само нисам хтео да збуни ствари.
То би петља.
Ти би се само једна гомила оквир за принтф.
>> Тада ће се вратити иф.
Онда би опет петљу.
Ти би се само једна гомила оквир за принтф.
Она ће се вратити.
Самац стек оквир.
Дакле, ви не добијате ово бесконачна гомилају стек оквире.
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: Да.
Дакле, ово се дешава Стацк Оверфлов јер нико од њих
позиви ФОО се враћају.
Дакле, ако се вратимо, онда би почети губљења стек оквире.
И онда ми не би Стацк Оверфлов.
И то је разлог зашто вам је потребна основни случај за личне функције.
Да?
>> ПУБЛИКА: Да ли је величина и потенцијал стек за гомиле исти за
сви програми?
>> РОБ: Грубо.
Да ли је потенцијал величина стека и куча исти за све програме?
Отприлике.
Постоје неки насумичне да где почиње и стек
где почиње гомила.
Ако вам се деси да имате цео много глобалне променљиве и ствари, да би могао
одузети од неког простора за ваш гомили.
>> На 64-битном систему, ви практично има бесконачну меморију.
Постоји само толико.
Између 32 бита и 64 бита, што је значајна разлика.
>> Ти ћеш добити много више стек и гомила простора на 64-битном
систем јер има само још адресе да могу да користе.
Али на индивидуалном систему, она ће бити приближно иста количина стека
и гомила простора.
У реду.
>> Дакле, последња ствар је компилација.
Дакле, требало би да знате овај процес.
Постоје четири велике кораке.
Дакле, прво треба један бити лако за памћење.
Пред-обрада.
Она има префикс предприступних у њему.
Тако да долази пре свега.
>> Ствар коју треба запамтити је тараба.
Дакле хасх хасх дефинише и укључује у свима.
То су све унапред процесор директиве.
То су ствари које унапред процесор брине о.
>> Дакле, шта пре процесор уради?
То је стварно глупо.
Све то је у стању да се свих ових копија, и рез, и Пасте операције.
>> Дакле хасх укључује стандардну и0 дот х.
Шта је то радиш?
То је зграбио стандардне И0 дот х филе и налепите га у врх
где год пише тараба укључује стандардни И0 тачка х.
>> И свака тараба дефинисати које смо види, шта је то ради?
Његова копирање вредност коју хеш дефинисан је дефинисан као и лепљење да
где год да се користи вредност.
Дакле препроцессор само ради стварно једноставан текст заснива пословање.
Он не ради ништа паметно.
Дакле, све остало је више компликује.
>> Дакле, сада је Препроцессор урадили, ми заправо саставити.
Дакле, шта значи састављање?
Сада ћемо из ц кодом до окупљања код.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: Да, ухватили смо то.
Тако састављања.
Идемо од ц до окупљања.
Дакле, ово је стварна промена језика.
Састављање се подразумева одлазак из језик на виши ниво
језика нижи ниво.
>> И Ц је језик високог нивоа у односу на скупштини.
Шта је монтажа?
Његове инструкције које су, прилично много, направљен за ваш ЦПУ.
Али ваш рачунар и даље ради не разумем скупштина.
Он разуме само јединице и нуле.
Дакле, следећи корак је монтажа, која доводи нас у овим упутствима које
ваш процесор разуме и заправо преводи их, да
они и нуле.
>> Дакле Ц до окупљања у бинарни.
Али ја не морам још једну извршну.
Дакле, мислим да је ЦС50 библиотеке.
Ми смо вам опремљен за бинарни ово ЦС50 библиотека, која има ГетСтринг
и Тонирана и све то.
>> Али ЦС50 библиотека -
само по себи - није извршна.
То нема главну функцију.
То је само гомила бинарни које можете да користите.
Дакле, повезивање је како смо заједно донети сви од ових различитих бинарних фајлова
у стварном извршне.
Један који можете да упишете дот сласх тачку напоље.
>> Дакле, ово је као датотеку коју написао, - без обзира на ваше програм -
Цеасер тачка ц.
Али сада је урађен доле у бинарни.
Дакле Цеасер тачка О.
А ово је наше ЦС50 библиотеке бинарни.
И они се комбинују у једну извршну.
Да?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: Дакле прво обухватају, запамтите, хасх укључују заправо
пре процесор корак.
Али то је посебна.
Ако не користите никакве функције које су изван вашег једној датотеци онда,
Не, не морате ништа да повеже јер имате све.
>> То је рекао, иф се везује за
Ако сте икада користили принтф, то је нешто који треба да буду повезани у
јер ви нисте написали да.
И, у ствари, принтф се аутоматски повезани ин
Знаш како у командној линији или када куцате направите, ви видите да имате
повлака сам ЦС50, који има везу у ЦС50 библиотеци?
Принтф, и сличне ствари, иде да се повежу у аутоматски.
Има ли још питања о било чему?
>> ПУБЛИКА: [ИНАУДИБЛЕ]?
>> РОБ: Повезивање?
Имамо гомилу различите бинарне датотеке.
Ово је канонски пример да ми користимо је ЦС50 библиотека.
Ми смо саставили и дати вам на бинарни за овај ЦС50 библиотеку.
>> Желите да користите ГетСтринг у свом програму.
Тако ти иди и користите ГетСтринг.
Али без мог бинарног кода за ГетСтринг, када компајлирате свој код
доле, не може стварно извршавати своје Програм зато ГетСтринг Стринг је
још није у потпуности дефинисан.
>> То је само када се повежете на мом бинарни који садржи ГетСтринг да сада, сви
у праву, ја заправо могу извршава ГетСтринг.
Мој фајл је комплетан.
И ја могу покренути ово.
Да?
>> ПУБЛИКА: Да ли повезивање цонверт бинарни извршних?
Дакле, чак и ако немате други библиотеке, не би то и даље бити
неопходно превести [ИНАУДИБЛЕ]?
>> РОБ: Тако извршна је још увек у бинарни.
То је само комбиновањем целину гомила бинарне.
>> ПУБЛИКА: Хвала вам пуно.
>> РОБ: Нема проблема.
Има ли још питања?
Иначе, сви смо поставили.
У реду.
Хвала.
>> [Апплаусе]
>> ПУБЛИКА: Хвала.
>> РОБ: Да.