>> ПРЕДСЕДНИК 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 библиотеку.
>> Желите да користите ГетСтринг у свом програму.
Зато иди и користите ГетСтринг.
Али без мог бинарног кода за ГетСтринг, када компајлирати свој код
доле, не можете заиста водите ваш програм, јер је ГетСтринг Стринг
још није у потпуности дефинисан.
>> То је само када се повежете на мом бинарном који садржи ГетСтринг да сада, сви
Добро, заправо могу да извршава ГетСтринг.
Мој фајл је завршена.
И ја могу покренути ово.
Да?
>> Публика: Да ли је повезивања цонверт бинарни да извршна?
Па чак и ако немате други библиотеке, не би она и даље бити
неопходно превести [неразумљиво]?
>> Роб: Тако извршна је још увек у бинарни.
То је само комбинујући целину гомила бинарних.
>> ПУБЛИКА: Хвала ти пуно.
>> Роб: Нема проблема.
Има ли још питања?
У супротном, сви смо поставили.
У реду.
Хвала.
>> [АППЛАУСЕ]
>> Публика: Хвала.
>> Роб: Да.