>> [За възпроизвеждане на музика]
>> Дейвин: Добре, момчета.
Така че това е преглед за първата викторина.
Дали всеки е готов за викторината в сряда?
ALLISON: Woo!
STUDENT: Woo!
Дейвин: Да.
ALLISON: Да!
Дейвин: Този човек е готов.
Това момче, две ръце, хубаво.
Така преглед тест днес, че ще за около час и половина.
Отиваме да премине всички основни концепции, които трябва да знаете за теста.
Отиваме да разясни някои кодиране от примери за ръце, които са на всеки тест.
И ако имате въпроси, не се колебайте да вдигнете ръката си и всичко,
подобно.
Е, логистика около викторина онлайн.
Така че отиваме да се разделят хората нагоре в различни стаи.
Тя се основава на тяхното име.
Така че, ако имате някакви въпроси за това къде да отида или за какъв материал е, като,
официалната дума от това, което се случва да бъде на теста, проверете онлайн.
И това е всичко, до дата.
Така че, ако не са налице въпроси започнем с това, ние ще започнем.
И тук е Алисън.
>> [Пляска]
>> ALLISON: Добре, благодаря, Роб.
Оценявам го.
Дейвин трябвало да обърна за това.
Това е неизчерпателен списък на теми, както винаги, като Дейвин току-що каза.
Консултирайте се с документацията онлайн викторина за нула.
Но това е доста much-- това е на учебния план
е всичко, което сме преминали през този момент.
Всичко тук е честна игра, както и всичко останало
които може да са били споменати в лекция.
>> Раздел My тук, е просто много на преглед.
Има няколко упражнения че вие ​​може да работим.
Но за по-голямата част, ние наистина Искам да стигнем до Дейвин с тези код
от ръчни упражнения.
>> Така че аз отивам да се лети през това.
Ако имате някакви въпроси, да ме спрете.
Вдигнете ръка.
Обещавам ти, че най-вероятно ще се видим.
Ако не, просто го размахват.
Отивам да се говори бързо.
Надявам се, че всички са ОК с това.
>> OK, специална дума, Дейвин очевидно Забравих да прелистите тези пързалки.
[Смее се] Вие сте в беда, човече.
Така че съвети за викторина нула, практикуват кодиране на хартия.
Вие, момчета, ще получите някои практикуват с тази сега с Дейвин,
така че няма да бъде напълно от себе си.
Мисля, че ние всъщност ще чрез тези две функции.
Така че ще бъде добре подготвен там.
>> Да е запознат с проблемните комплекти.
Има въпроси на предишни тестове
че ще поиска от вас, например, да се кодира нещо много подобно на Марио.
Така че е много добре запознат с проблема си поставя, както и
тъй като въпросите, които ви помоля в началото на формата
че можете да попълните, ще ви служи много добре.
>> Направете предишния викторина под времевите ограничения.
Тези тестове са дълги.
Времето минава много бързо.
И често не осъзнават колко бързо той отива, докато всъщност
постави себе си в рамките на тези ограничения.
Така че, ако можете просто да обособяването, знаете, 75 минути или довечера или утре
да вземе един от тези тестове под че ще бъде в много по-добра форма.
>> И също така, създаването на своя референтен лист.
Не забравяйте, че можете да получите един страница отпред и отзад
като отправна точка за вашето викторина в сряда.
Създаване това е чудесен начин да се учи.
Всичко, което ви е трудно да с което искате да включите там.
Всичко, което си TFS са били, като това е наистина важно.
Трябва да знаете, това са може би неща, които имат там
тях, ако не разполагате с наизуст.
Дори и ако не ги знам наистина Е, понякога го има там
е просто вид на комфорт за вас, което знам, викторини са стресиращи.
Така че всяка комфорт ще получите може да помогне.
Добре, също така, се спи и яде и като обикновените неща
че ние ви кажа за викторини.
>> Така потегляне лесно, типове данни и размери.
Както казах, това е просто ще да ми се хвърлят много неща
тук, че вие ​​трябва да знаете.
Така че ние имаме нашите символа които са един байта, целочислени
които са четири байта, дълъг дълга, които са осем байта.
По принцип, това е точно за вас Искам да държат по-големи числа.
Плувки, които са четири, двойки, които са осем.
Отново, просто ви дава повече пространство за вашите плувки.
И след това въведете звезда, така че всеки показалеца на 32-битова машина,
който е всички вие трябва да се знае, е четири байта.
>> Така че всички неща, които трябва да знам, може би нещата
искате да имате по справка лист.
OK, двоично преобразуване двоичен, конвертиране
да шестнадесетичен, напред и назад, всички неща, които трябва да знаете.
Така че от двоичен в десетичен.
Вие, момчета, искате да вземете бърз минути и се опитайте да разбера всеки от тях
и след това да ми каже какви са те?
>> Аз също имам бонбони в чантата ми, така че всеки, който отговори получава бонбони, между другото.
И аз имам много от него.
Позволете ми да вземете това.
Отивам да дам това на Гейб.
Така че можете да се раздават бонбони който е хубаво и кооперация.
>> OK, видях ръка има в гърба.
>> STUDENT: Да, първата е 42.
>> ALLISON: Да, първият е на 42 г. вярна.
STUDENT: [недоловим].
[Смях]
ALLISON: Втори една, там обратно в жълто?
STUDENT: 110010.
ALLISON: Правилно, а това последният, тук на дъното?
Също така, да, знаете ли искаш?
Просто хвърля бонбони.
Какво ще кажете за бонбони за всички?
>> STUDENT: [недоловим], когато сме готови.
>> ALLISON: Шшт.
И тогава последният.
Кой иска да отговори?
Точно там.
>> STUDENT: 11100.
>> ALLISON: 11100, погледнете това.
Браво, страхотна работа, всички.
ОК, всеки вид се разбере процеса за правене на това?
Ти, като се започне от двоичен в десетичен начина, по който съм склонен да го направя, е написването на
правомощията на две.
Затова казвам, OK, 0 по 2. 0, така че това е 0, 1 пъти 2 към първата,
е 2 ще нататък по този начин.
Има ли някой да ми изрично да искате проверете пример за двоичен?
OK, хладно.
>> Decimal да двоичен е много подобна.
Склонен съм да се пишат на правомощията на две.
Започнете с това, което е най-великият, но не излиза покрай десетичната
това, което търсите.
И тогава вид на работата си назад добавяне на нещата, колкото е необходимо.
>> И след това с допълнение, че е точно като нормална допълнение.
Ако някога има случай, когато сте добавяне на два 1s, очевидно става 2.
2 в двоичен сега е 1 0, така че трябва да носите със себе си една в следващата колона.
Cool.
>> Шестнадесетичен, това може да бъде нещо че е малко по-малко позната.
Така че, както Роб беше просто да ми кажеш предварително, трик си за този
е просто да го разделим в четири байтови парчета, OK?
Bits, съжалявам.
Виждаш ли?
Благодарение Роб.
Това е причината да сме тук. [NOISE] ОК, така че ние просто се разделяме
в четири бита парчета.
Така че с бинарни файлове за шестнадесетичен, погледнем първо 4,
което е, ако имаме четири 1s в ред, кой номер е, че символизира?
>> STUDENT: F.
>> ALLISON: Така че в този случай, какво е 11111111 or-- нали?
STUDENT: FF.
ALLISON: Perfect, FF.
Толкова велика, бонбони за вас.
Сега, за това как шестнадесетичен за двукомпонентни, ние Просто мисля, че за това нещо в обратна посока.
За всеки номер или писмо, че ние имаме в нашата шестнадесетичен
просто го превръща в своята четири малко [Смее се], за да си четири битова реализация.
Така 5, в този случай, това, което е 5, ако ние сме го представлява с четири бита?
>> STUDENT: 010?
Мм-хм.
И след това, което е всъщност 10, ще бъде?
1010.
Така че ние имаме, че тук.
Така конвертиране между шестнадесетичен и двоичен всъщност не е толкова лошо.
Ако се вгледате в него в четири бита парчета, ще бъде златен.
Everyone-- нали?
>> ROB: Това е глупаво, но аз винаги си спомням
А, тъй като е трябвало да бъде 10.
И двоичен е само 10 10, so--
>> ALLISON: А, там отиваме.
>> ROB: Хей.
>> ALLISON: Хей, бонбони за Роб.
Има не е шоколад неща там.
Така че може да има някои.
Така ASCII математика.
Дръж.
Така ASCII математика, като вас, момчета Вероятно добре си спомням
р зададете 2 с Visioneer и Цезар, ти направи много за това.
Не забравяйте, че героите са принципно само номера.
Така че ние можем да направим по математика с тях, точно както правим по математика с цели числа.
>> Така че ние имаме малко по- просто нещо тук.
Ние имаме някои в А това е инициализира с 65.
И B, равна на стойността на ASCII A плюс 1, Чар C равно на D минус 1,
Чар и D, равна на 68.
Така че след това ние ще се печата всички от тях, както виждаме тук.
И може ли някой да ми каже какво това ще отпечата?
STUDENT: [недоловим].
ALLISON: Точно така Едно нещо е да забележите, е
че ние сме отпечатване герои всеки път, тук.
Ние сме за определяне макар A и B са цели числа, когато ние ги декларираните по-горе.
Ние сме ги отпечатвате като герои от процента на C и нашата декларация ФОРМАТ,
така че всички те ще се отпечатат като герои.
И разбира се, на ASCII стойност 65 воля отпечатате като A. Стойността на ASCII от А плюс 1
ще бъде 66, което би горди да B. Така че в действителност, ние
получите A B C D. Всеки добър там?
Всякакви въпроси?
Awesome.
>> OK, обхват.
Така обхват е очевидно много Важно е да се разбере, тук.
Много от вас, ако можете има несъставящи грешки,
и тя казва, че не е нужно достъп до някои променлива,
това е може би, защото сте то е дефинирано в една линия
и след това се опита да го отворите от него, или обратното.
>> Така обхват в същността си, той просто определя къде
ние казваме променлива съществува, когато ние можете да го промените, ако можем да го отворите.
Това е просто вид казвайки това са единствените места, където можете да имат достъп
за тази променлива.
>> Така че двете сфери, които говорят за по време на клас са глобални и местни.
Така глобални променливи говорим за когато са ги дефинира по-горе основен.
Това означава, че цялата си програма има достъп до нея,
и тя съществува толкова дълго, като пистите на програмата, OK?
Local означава, че е повече се ограничава до област.
Така че всеки път, когато имате конкретни функции като суап, ние винаги говорим.
Ние винаги говорим за суап с A и B. A и B съществува в рамките на тази функция.
Те не съществуват никъде другаде.
>> Както е добре, когато имате, ако изявления или за електрически вериги.
Всеки път, когато имаме, например, в а за линия имаме INT I е равна на 0.
Имаме някакво условие и ние го актуализира.
I съществува само в рамките на скоби на тази за контур.
Ако се опитате да получите достъп до нея на друго място, компилаторът ще ти крещя.
Тя ще бъде като това, което се опитваш да направиш?
Това не съществува.
Така че двамата различни видове обхват.
Това прави ли смисъл за всички?
>> Така например тук, това е просто някаква проста програма.
Какво Мислите ли, че е няма да се случи във всяка точка
че ние се опитваме да печатате?
Така че този тук, какво ще се случи?
STUDENT: Това ще отпечата три.
ALLISON: Точно така.
Това ще отпечата три.
Какво ще кажете за тук?
STUDENT: Той няма да работи.
ALLISON: Той няма да работи.
Вие сте извън обхват, нали?
Локална променлива не съществува извън тези скоби, нали?
И тогава какво ще кажеш за тук?
>> STUDENT: [недоловим].
>> ALLISON: Какво?
Роб, отидете.
>> ROB: Току-що каза.
Глобалните променливи трябва да бъдат глобална променлива долна черта.
>> ALLISON: Ах, да, съжалявам.
Благодаря, Роб.
Роб като нашия резидент компилатор.
Той просто ще крещи по нас, когато ние нужда от него. [Смее се] Да,
трябва да бъде глобална променлива черта.
Така се предполага, че е глобална долна
променлива, какво ще се случи тук?
STUDENT: Това ще работи.
ALLISON: Той ще работи.
Така че това ще отпечата, така че просто един много прост пример.
OK, прототипи.
Така че, очевидно, ние наистина подчертае за вас, момчета
да функционира, ако го смисъл в своите програми.
Но, разбира се, когато да направите свои собствени функции,
обикновено ще ги определи след основното.
И ще се опитам да ги наричаме в основния.
И ако не използвате прототип, компилаторът ще ти крещя.
>> Prototype е основно просто казвам ви компилатор
че имам тази функция под основната.
Отивам да го наречем, преди да го определи.
Просто се държа.
Обещавам, че това е определено, а вие ще имате всичко, което ви трябва.
>> Така че начина, по който го направи, е просто да се върнеш тип, вашето име функция, вашият вход
списък.
Това е в основата на първа линия на Вашата декларация функция.
Това е наистина всичко, което е.
Но това е само една общ вид на формат.
>> Така че в нашия пример тук, които вие трябва да
видяхме в раздел в някакъв момент, ние имаме
някои инт куб че Отнема известно INT на входа.
И ние имаме нашата основна функция, която призовава куб.
И куб се определя след факта.
>> Така че, ако ние не разполагаме с инт куб вход в горната част, когато се обадихме куб
в рамките на основната ни компилатор ще се сърди на нас.
Тя ще бъде като това, което искаш да кажеш?
Cube не съществува.
Аз не знам това, което искат.
И аз съм просто ще спре.
>> Но тъй като ние направихме нашия прототип в горната част, казахме,
Знаете ли, когато видите куб, не се притеснявайте за това.
Обещавам това е определено по-късно.
И това ще ви позволи да направите това, което искате.
Така че, ако някога има функция който е обявен, след като сте го наричат
за първи път, трябва да го прототип на върха.
>> Да?
>> ROB: Той е издялан, cubing.
>> ALLISON: О, Боже мой.
Аз не have-- Габе, помислих си аз бяхте ни коректор.
ОК момчета, носят с мен, тук.
Надявам се, че всички все идеята.
ОК, така че това трябва да има бил издялан, кубчета.
Но идеята остава същата.
Всяка функция, която ние се обаждате след факта, трябва да има прототип.
Всеки добър с това?
Всякакви други правописни грешки?
OK.
Всички печатни грешки тук преди да започнем, Роб?
[Смее се] ОК, така structs.
По принцип, structs ви позволяват да създадете свой собствен тип данни.
Толкова много, като INT или Чар или поплавък, това е просто друг тип.
Харесва ми да мисля за него като, като, създадете свой собствен тип данни.
Така че ви позволява да направите това.
И тя притежава различни видове данни.
>> Така че, ако си спомняте, в масив, ние може да има само неща от подобен тип.
Structs ни позволяват да държи множествена неща от различни видове.
Така че в този случай тук, ние има структура, наречена Student,
име тук на дъното.
И ние имаме някои INT номер и някакво име низ.
Така че това е просто друг тип данни.
Сега имаме вид на данни, наречена Student.
>> Така че, тъй като ние можем да мислим за него като просто друг вид данни,
можем да декларираме променливи както всеки друг.
Така че, вместо просто като, като, като INT студент, ние просто трябва един студент,
Студент 1.
О, виж.
Това е Роб.
Така че тук ние сме обявяване на структура, или променлива
наречена студент 1 от тип ученик.
Така че ще има идентификатор и име, свързано с него.
>> И начина, по който достъп до тях елементи в нашата структура
е с оператора на точка тук.
Така че в този случай, ние обявен някои студент 1.
Ние назначен ID да бъде 1.
И ние назначен името да бъде Роб.
ОК, всеки добър с това?
Използвайте го само like-- нали?
>> STUDENT: Да, typedef-- когато ние трябва да използваме typedef?
>> ALLISON: Значи просто typedef казва that-- Роб, вие
може да ме коригира, за това дали съм wrong-- но typedef е просто всъщност обявяване
то като вид, който можете да използвате, нали?
>> ROB: Да, това е основно, така че това е просто създаване на
псевдоним или прякор за тип.
Така че можете да напишете, че [недоловим].
Така [недоловим] съществува, и сега ние просто трябва
[Недоловим] средства точно същото нещо.
И така, ето, ние сме написали, аз мисля, някои структура тип 2 [недоловим].
Така че това е просто псевдоним за даден тип.
>> STUDENT: String [недоловим] библиотека бе напечатан като Чар звезда.
>> ALLISON: За нашите цели тук, ако сте обявяване на структура,
просто правя typedef структура.
ОК, така че преди това е просто един нормален променлива тук.
Ние го отворите с една точка.
ако имаме указател към на структура, ние можем действително
използвате стрелка, което е много готино.
>> Така че в този случай, ние имаме указател към студент 1, който е от тип ученик.
Не забравяйте, че с указател строителството,
искате Какъвто и тип показалеца сочи да бъде в началото.
Така че ние имаме някакъв студент 1, тук.
И тъй като този студент Сега един е остър,
всъщност можем да отидем студент име 1 стрелка вместо точка, защото това е указател,
и възлага на Роб.
И сега, ако искаме да промени Rob да Дейвин,
това е просто ви показвам различен начин да го направя.
>> Така че вместо да се използва стрелката, вие може also-- Ще завърша това и след това
вземе, че question-- можехте също направи препратка студент 1.
Това казва като отидете каквото и да е студент 1, което
ще бъде наш студент структура.
Достъп до него с една точка и елемента това, което искате, и след това я прехвърли.
Имаше един въпрос.
STUDENT: Да, така че как така имате да използвате [недоловим], когато сте
прави студент звезда без [Недоловим] студент?
ALLISON: Тъй като този е създаването на показалеца.
ROB: Отиваме да говорим за това.
ALLISON: Отиваме да говорим за това по-късно в рамките на прегледа.
Така че просто се задържи тази мисъл.
Ако все още ви притеснява в край, хайде говори с един от нас.
>> Така че те правят точно същото нещо.
Ние просто ви показва две различни начини, за да го направя.
Student 1 сега е указател, така че можете да получите достъп до елемента Име
в структура със стрелка.
Или можете сочен показалеца, и След това го отворите, както обикновено.
Ли, че има смисъл да се всеки един?
Ако целият показалеца нещата са малко по- объркващо, Гейб ще говорим за това,
и тогава може би това ще направи по-дълбок смисъл.
Да?
>> STUDENT: Да, така че как е този различен от?
ALLISON: В предишния?
Така ученикът 1 в тази случай не е указател.
Това е просто действителната структура.
>> STUDENT: OK.
>> ALLISON: Като има предвид това е указател към структура.
>> STUDENT: Добре, но го прави вид свърши работа на едно и също [недоловим].
>> ALLISON: Той ефективно работи по същия начин.
Вашият синтаксис е просто различен.
STUDENT: OK.
>> ALLISON: Да, те са фактически същият.
Това е просто в зависимост от контекста, Вие може да искате една върху друга.
Да?
>> STUDENT: Когато правиш препратки към 1--
ALLISON: Мм-хм?
STUDENT: Защо правиш имат скоби?
ALLISON: Защото студент 1 е показалецът.
Така че ще трябва да се уверете, че сте просто dereferencing показалеца.
>> STUDENT: OK.
>> ALLISON: Така че в този случай тук, скоби около него
означава, че вие ​​сте dereferencing студент 1.
Така че, ти започваш да се където студент 1 точки, което е вашата структура.
Така че сега можете да се сетите за него като че структура,
така че можем да използваме нашата нормална експлоатация точка.
Всякакви други въпроси?
Cool, страхотно.
>> Така че последното нещо, мисля, че е последният ми слайд, уо!
ОК, така че с плаваща запетая неточности.
Говорихме накратко за това по време на лекция.
По принцип, ние имаме безкрайно много реални числа.
И ако някой от вас, момчета Обичам математиката, има
всички видове готини неща с нас.
>> Но има безкрайно много реални числа.
Но те са само ограничен много бита, които имаме.
Значи винаги ще има неточност, е всичко.
И това е, това е просто вид като нещо, което трябва да знаете.
Това, че ние може да ви попитам защо плаваща запетая неточността съществува?
Така че просто нещо, което трябва да знаете.
И с това, аз съм завъртане то към показалки.
>> Binky: Здравейте, момчета.
Моето име Binky.
Отивам да говоря за указатели.
Да, така указатели е всъщност любимата ми част от този курс.
Така, само за да стане ясно какво Allison говори за тук, така че причината
why-- единствената разлика тук, Голямата разлика е начин
ние заявяваме неща.
Така студент звезда означава това е показалец към студент.
Като има предвид, пързалка и преди, студент е действителната структура, като действително студент,
съдържащо някое от тези неща.
>> И причината, поради която ние искам to-- да, Дейвин?
>> Дейвин: Какво стрелката означава това?
>> Binky: Средствата за стрелки точно същата като тази.
Така че наистина не трябва стрелката.
Например, ако сте само програма в C, можете просто да използвате това.
За съжаление, аз не какво е това.
Можете просто да използвате този синтаксис.
>> Но някои хора, когато те са проектиране C,
те разбрали, че хората използва, че синтаксис толкова много,
че те ще искал просто да излезе с синтаксис структура за него.
И това се състоя в под формата на стрела.
И това е много хубаво, защото тя символизира нещо
като ние всъщност след тази стрелка, този указател,
към малко място в паметта.
И когато стигнем там, ние искаме да поглед към името на този ученик,
ако това има смисъл.
OK?
>> Така че точно това е един и същ.
Това е точно същото нещо като това.
Те се съставят точно същото, нали?
И тук причината защо ние изчистване нещо, е така, защото в този случай,
ни променлива е действително само променлива показалка.
Така че ние имаме само малко пространство в памет, която държи показалеца.
Ние наистина не са на всяко пространство че притежава действителната структура.
>> Така че това трябва да бъде направено на два етапа.
Ние трябва да създадем памет, за да постави структура вътре.
И ние трябва да се създаде памет, за да поставите курсора вътре.
Така че те са основно две различни променливи, тук.
Един от тях е от тип студент, освен това не може да кажем, да има име.
А другият е на студент звезда тип.
И тогава студентски 1 точки там, ако това има смисъл.
OK?
>> Така че причината, поради която ние използваме указатели е така, защото всичко
в компютър, всяка променлива в компютъра има две неща.
Тя има своя стойност.
И това си има адрес.
И един добър начин да се концептуализира това е там
много проблеми, когато опитате да използвате функции.
И ние ще се опитаме да гледам в един от тях.
А именно, че ще мисля за памет, кутии.
>> Ти винаги си мислех за променливи когато ти казват Na равнява 5.
Мислиш ли, че от пускането 5 в кутия.
И какво, ако искате да премине че INT в функция?
Ти просто pass-- аз не know-- х в дадена функция.
Но това, което се случва, е обикновено като хора, вие
би си помислил нещо подобно съм преминаване на кутията на лице.
И това не е така наистина се случи в компютрите.
Какво се случва, е, че можете да копирате стойността на полето кутия на лицето.
>> Така че това, което аз се опитвам да кажа е, че ако имате function-- sorry-- тук,
ако имаме функция като пет до там, ако се опитате да премине променлива,
това е просто ще копирате.
Ако инициализира NX в размер на 3, то се случва да копирате тази стойност до променлива
до там.
Добре, и това е един вид на причината Ето защо искаме да използваме указатели.
Тъй като вместо като само стойността,
вместо просто да минава само стойността на функцията,
искаме да премине от справка.
Това, което наричаме пас на позоваване вид да даде поле на функцията,
така че функция може също промяна на стойностите в тази кутия.
>> ОК, така че просто някои основни показалка неща, е да се създадат насоки,
можете просто да го декларира тип, и сложите звезда веднага след него.
И на вид е просто това, което сочеше.
Така че, ако това е инт звезда, Ако пък сочеше едно цяло число.
Ако това е знак звезда, Ако пък сочи диаграма.
И ако това е студент звезда, Ако пък сочеше студент.
OK?
>> И те са отдавна всички 4 байта.
Поради тази променлива тя всъщност не
трябва да държи Чар, пад, или студент.
Той само трябва да притежава адрес.
Ето защо всички те са 4 байта дълго в нормална 32-битова машина.
OK?
Така че тук, х е променлива, която сочи до инт. у точки към Чар. Z точки
на плувка.
Всякакви въпроси тук?
Cool.
И там са две различни символи, които имат
трябва да имате предвид, когато идва на показалеца.
Така съотнасяне и dereferencing са големите.
Така амперсант НА име на променлива ви дава?
STUDENT: Адрес.
Binky: Адрес.
Така че, ако вие декларирате, инт на се равнява на 5, а след това амперсанд
на ще ви дам адреса.
И всъщност можете да опитате да отпечатате, че и да видим
какъв адрес в паметта променливата има.
И тогава dereferencing-- така че е съотнасяне
получаване на address-- dereferencing е точно обратното.
ОК, точно като пъти е противоположна на разделяне,
звезда е обратното на амперсанд.
Така dereferencing средства отиват там.
Така че, ако ви дам star-- I не know-- 50, това е
Ще се опитам да отида на адреса на номер 50 в на вашия компютър.
OK, и защо ние виждаме че те са противоположности?
Защото това, което се случва, ако го направите нещо като звезда Амперсант а?
Е, амперсанд а дава адрес на променлива, адреса на.
Но звезда означава отида там.
>> И така, какво ще стане, ако отидете на адреса на?
Ти просто стигнем до, нали?
Така че отидете на адреса на а е едно и също нещо като.
Ето защо те обикновено са отнесен до same-- това
и това са посочени като противоположни оператори.
OK?
Така готино.
>> Под предния капак, например, ако ние заявяваме INT х е равно на 5,
имаме променлива.
И не забравяйте, че казах всеки variable-- и това е нещо добро
да се запази в mind-- има две различни неща, свързани с.
Той има адресирано и стойност.
OK?
>> Така стойността в този случай е 5.
И адреса is-- да кажем, аз съм направи нещо up-- е 0x04.
И единствената причина, защо ние обикновено представляват адреси в шестнадесетичен
е един, защото това е като добро.
Тя върви добре с двоичен.
Това е лесно да конвертирате от и към двоичен.
И това не стане твърде голяма, ако имате много голям брой.
Така че ние бихме искали да използваме шестнадесетичен в печатарските адреси.
Но аз може да представлява това като цяло.
Това е добре.
>> И затова има адрес 4 и на стойност 5.
И тогава казах инт звезда показалка.
Така че това е различен вид, предизвестие.
Int показалеца звезда се равнява адреса на х.
И така, какво ще бъде стойността на КОП?
Това ще бъде най- адрес на х, тук долу.
ОК, така че стойността ще да бъде същият като адреса.
Това е задачата работи правя.
И тогава КОП ще има свой собствен адрес, който се оказва,
в този случай 8, OK?
>> И след това да създадете нов число копие.
И аз казвам инт копие равнява отида там.
Така че отивам до каква КОП се посочи.
Е, какво има този КОП?
PTR е 0x04.
Какво се случва, ако се опитам да отида там?
Аз ще намерите човек, който има адрес х и който има адрес 4.
И кой има справяне четири е х.
Това прави ли смисъл?
Да?
>> STUDENT: В този случай, е курсора в комин?
>> Binky: В този случай, it's-- добър въпрос.
Аз наистина не мисля за това при извършване на тези адреси.
Но ако това е така, всичко, те са локални променливи,
тогава х ще живее in-- всичко ще живее в стека.
Така че всичко, което се случва да сочи към стека.
Можете да получите само на куп, когато да започнете да използвате изчистване, нали?
>> Така че, ако си спомняте стак е всеки път ти се обадя функция във вашата програма,
като, например основен, или друга функция, като ФОРМАТ.
Всички местни променливи ще се постави в стека рамка.
И започваш да се получи като прибрана в стека.
Това е, което се нарича стак.
И всички тези локални променливи ще бъде там.
И heap-- и отиваме да се говори повече за това later--
купчината е мястото, където всички динамично разпределени живота памет.
Cool?
>> Ходим на този слайд.
Да?
>> STUDENT: Защо не е Int копие връщане 0x04?
>> Binky: Защо не е Int копие връщане 0x04?
>> STUDENT: Защо да не е, че [недоловим]?
>> Binky: Защото това, което е на стойност КОП?
>> STUDENT: 0x04.
>> Binky: 0x04.
Какво се случва, ако отидете в 0x04?
Какво ще получите?
>> STUDENT: О, OK.
Binky: Виждате ли?
Студентът: Да.
Binky: Така получавате 5.
Така копие ще има 5, ако това има смисъл.
Да?
>> STUDENT: Можем ли да са придобили 5 в полето за стойност [недоловим]
Ако сложим инт копирате [недоловим].
>> Binky: Int-- ние би, да.
Това щеше да направи почти едно и също нещо.
Но по този начин, ние можем да преминат адресира до функции.
И това е готино нещо ние ще направим точно сега.
>> Така че този вид упражнения винаги идва on-- много обикновено идва на тестове.
Така че това е наистина добре да се опитаме да направя този вид на нещо си.
Така че се опитват да следите какво адреса е и искате стойностите на променливите
са във всяка точка.
Така че това е точно това, което ние ще направим.
Тук имаме стъпки, едно, две, три, четири, пет.
Едно, две, три, четири, пет.
И ние отиваме, за да следите на стойностите на х и.
>> И така, какво се прави, ако това е бъги код, ние се опитваме да направим, за да пет.
Така че ние се опитваме да получите в променлива и променя своята стойност до 5.
И помнете ми аналогия на наличието на кутия и подаде кутията с някого?
Така че основното е тази кутия, наречена х.
И съдържа стойността 3.
И аз се опитвам да се предаде това поле, за да до пет.
>> И аз искам до пет, за да промените стойността на това поле 5.
И тогава аз просто отпечата стойността на х.
Това е, което ми function-- това е, което аз се опитвам да направя.
Аз просто се опитвам да се актуализира стойността на х до 5.
Ясно ли е каква е функцията прави?
>> ОК, така че това, което се случва да бъде най- стойности на х и точно тук,
на първа линия, непосредствено преди първия line-- бих say-- на програмата?
>> STUDENT: Вероятно боклук.
>> Binky: Просто боклук неща.
Така че аз съм сложил N / A. Така ние наистина не знам.
Подобно, а дори не все още съществува, защото не сме призовани да пет.
Int една не е обявена.
И х ще съществува тук, но ние не сме наистина
носи никаква стойност за него, така че OK?
>> И след това, какво ще бъде стойности на х и в номер две?
>> STUDENT: [недоловим].
>> Binky: Значи х ще бъде 3.
Това е лесно, защото ние сме възлагане 3 към него.
И все още не съществува защото просто живее в пет.
Така че аз отивам да имат 3 и нищо.
или като боклук, независимо, всъщност не е определено.
И сега, това е важна линия.
Ето, ние ще всъщност се обадя до пет.
И не забравяйте това, което казах.
Ние никога няма да премине в наказателното поле.
Ние само трябва да копирате стойността на кутията на друго поле.
Това е всички компютри се, копират неща от едно място на друго.
>> Така че до пет, какво всъщност прави е копира стойността на х в.
Така че това, което се случва тук?
Стойностите на х и.
3 и 3, ние просто ще копирате то над от х до.
Cool.
>> Сега сме тук.
И сега отиваме да актуализира равнява на 5.
Какво ще се случи в четвърти ред?
>> STUDENT: [недоловим].
>> Binky: а се обновява, но х не се актуализират.
Защото х все още живее в основния, това е напълно различен блок от паметта.
Това е различен променлива.
а е друга променлива.
Те се случи да имат същата стойност, защото аз
копирани върху стойността на х до.
Но сега, когато аз правя равнява на 5, то наистина не се осъществи х по никакъв начин.
Това е по-сложни част.
Има ли смисъл на всички?
Да?
STUDENT: Още един въпрос, имате 3.
Защо е already-- О, не, това е 3.
За съжаление, няма значение.
Четох 5.
>> Binky: Да, 3, 3.
>> STUDENT: [недоловим], да.
Binky: И тогава ние присвоите 5 до а, но наистина не се променят х.
Добър?
Студентът: Да.
Binky: Да?
Можеш ли да обясниш отново как а получава копиран [недоловим]?
>> Binky: ОК, така че, когато ти се обадя до пет на х, така че тази линия на код тук.
за пет от х, какво е х?
х е само на 3 в този момент, нали?
Така бихте могли просто да се мисли за въвеждане 3 тук и забравят за х.
Просто сложете 3 тук.
Например, ние отиваме да копирате на стойност на х към INT, който е там.
OK?
>> Така стойността на х е 3.
Отиваме към копие 3 до едно.
И всичко това друг блок памет, тази друга променлива
наречено ще има 3, както добре.
Това прави ли смисъл?
Да?
>> STUDENT: Ако ви дам пет като го има като цяло число х вместо,
ще се определи, че всичко?
>> Binky: Ако това е integer-- не, че няма да оправи всичко.
Така че това е много добър въпрос.
Това всъщност няма значение какво ти се обадя тези променливи.
Отново, това ще бъде въпрос на обхват, защото те не са една и съща х.
Те са напълно различни места в паметта.
STUDENT: [недоловим].
Binky: Така че това не е така наистина значение какво им се обадя.
Това не оправя нещата, нали?
Още въпроси?
Да?
>> STUDENT: Как е обратно номер пет [недоловим]?
Binky: ОК, ние все още не са направили това.
Нека да отидем до номер пет, тогава.
>> STUDENT: [недоловим]?
>> Binky: Какво?
>> STUDENT: Имате ли връщане на всички?
Binky: Ние нямаме връщане, а не на основната.
Но основните връща 0 автоматично ако не върне нищо.
Да?
>> STUDENT: Може ли да се направи main-- или може ли да се направи до пет възвръщаемост?
>> Binky: Ние може да има до пет върне, да.
Но тогава ще трябва да зададете х се равнява на стойността връщане на до пет,
което би било малко различна програма.
Тя ще работи.
Но това, което искаме да направим, е това, което е нарича промяна нещо на място.
Така че ние искаме действително да промени тази кутия и не се тревожи
за да се налага да се върне стойности или нещо подобно.
OK?
>> Това е точно като функция суап Дейвид показа в лекция, освен, че съм
само се занимават с една променлива.
И той използва две, така инт а и б и След временно променлива и какво ли още не.
OK?
Така че това, което е на последния ред?
След пет се връща, това е просто А се случва да си отиде.
Ние няма да има вече, и само х ще продължават да живеят на.
>> И познайте какво? х не се променя стойността си,
В края на краищата, защото ние сме само промяна на стойността на.
Ето защо х е 3 през цялото време.
OK?
Добре.
Така че тази програма не постигне това, което искахме.
Сега нека да го оправя.
>> И програмата за корекция е с помощта на указатели.
Това, което правим е, че ние имаме три линии, които са различни.
Първите е, че ние не сме преминаващи х.
Ние сме преминаване на адреса на х.
Така че, вместо да копирате върху стойността на полето,
Аз съм все още продължава да копира нещо.
Но аз съм копиране върху адреса на кутията.
>> Така че, ако премине на адреса на полето до пет, след това до пет
ще бъде в състояние да установи, че в памет и променя своята стойност.
>> Така че и след това там, имам че вече не е Int.
а е инт звезда.
Това е указател към цяло число.
И след това, защото аз съм прехвърляха адрес тук и след това, което правя
не е равнява 5, защото а държи адрес.
Така че това, което искам да направя е да отида там и да актуализиране на съдържанието на този адрес
с 5.
>> ОК, така че нека да мине през Всички линии една по една.
Така че, когато започна тук, все още има N / A, N / A, N / A
за всичко в първия линия, защото не съм наистина
обявен неща все още.
И след това втора линия, имам х размер на 3.
A INT звезда не съществуват, едно и също нещо, както преди.
>> Сега става интересно.
Така че аз отивам да мине.
И нека да приемем, че на адреса на х е 12 в шестнадесетичен вид.
Нека просто да приемем това.
Направих го нагоре.
Така че това, което съм аз, минаваща тук е на пет.
Аз съм минаваща 12.
>> Така че каква стойност е една имате?
>> STUDENT: [недоловим].
>> Binky: Моля?
>> STUDENT: [недоловим].
Binky: Да, като, за да позволим на Предполагам, че ние сме тук, сега.
Питам.
>> STUDENT: [недоловим].
>> Binky: Тя е била започната.
>> STUDENT: [недоловим].
Binky: Защото минахме нещо на функцията.
Да?
>> STUDENT: Адрес на х.
Binky: Това ще има адреса на х.
И адреса на х е 12, добре.
Така х ще бъде 3, защото ние наистина не са се променили х още.
И тогава ще е 0x12, така адреса на х, защото това е
това, което минахме до пет.
>> И тогава какво ще се случи ако се опитаме да отидем там?
Какво ще да се намери?
Така че, ако се опитате да отпечатате звезда на, ние ще следваме този адрес
и да получите стойността вътре.
А стойността е просто една и съща стойност, че Х
има, защото това е най- адрес на х, която ще бъде 3.
Дали сме добри?
>> OK, и то сега, ние всъщност отиде там.
И ние се актуализира независимо е в този адрес 12.
Ние го направи пет.
Така че сега х, така и звезда са 5.
>> Защо е това?
Тъй като адреса на х е 12.
И има и 12, както е неговата стойност.
Така че, ако ние следваме 12, ние сме Просто ще намерите х.
Така че каквото и да правим с звезда ще се случи
Х, защото съдържа адреса на х.
OK?
>> И това е като същността на поправката.
Така че сега ние сме в състояние, от до пет, всъщност
достъп до паметта, която е живяла в основния.
Така че тази памет не живее, за да пет, като преди, този адрес 12.
И ние бяхме в състояние да отида там и променете стойността си до 5.
>> И тогава, когато се върнем, ние забравяме за една.
Забравяме за звезда.
И х е още пет.
Така че, ако искате да изпълнява функция суап
просто ще направи точно същото нещо, с изключение, което трябва да INT звезди тук,
и така нататък и така нататък.
OK?
Дали сме добри?
Cool.
>> Така показалеца аритметика.
Това е малко по-сложен въпрос.
Така се оказва, че указатели са само числа.
Можете да мислите за тях като цели числа.
Тъй като в паметта, трябва като памет адрес нула, едно, две, три,
четири, пет.
Така можем да обобщим памет адреси.
>> И това е обикновено това, което правите, когато вие сте и масив, например.
Един масив е точно като съседна блок на паметта, на много символи,
например, много от цели числа.
Така че, ако искате да отидете на второ инт или на третата ПНА,
можете просто да обобщим нещо за първи адрес, и ти започваш да отида там.
Така че това е наистина полезно за това.
>> И нещо, за да се запази предвид, обаче, е
че това не е точно като нормална аритметика в смисъл,
че ако имаш работа с, да речем, пад на звезда, и се добавя 1 към него,
тогава не започваш да се добави 1 на адреса,
ти започваш да добавите 4 към адреса.
Тъй като едно цяло число е 4 байта.
>> Така че това е точно като ходене на масив.
Ако имаме масив от много цели числа и След това ние се опитваме да отидете на втория,
това е основно само сумиране на адрес на първия плюс 1.
Но това няма да be-- просто да кажем, че адресът на първия е 4.
Тук, в този случай.
И ако обобщим, така че това е това, което се случва.
Имаме Int.
Int х е равно на пет.
X има стойност 5.
И ние се инициализира този указател, инт у инт звезда у равнява на адреса на х.
>> Нека предположим, адреса на х е 4.
Какво ще се случи сега, ако аз сума се добавя 1 на у?
Това се случва всъщност сума 4 вместо само един.
Така че аз добавите 1, но всъщност прибавя 4, защото компютъра умен.
Така че това се случва наистина да добавите, като I пъти размера на вида на показалеца.
OK?
>> Така че, ако го бяха знак, например, ако това беше знак звезда Y,
и ако ние добавихме един, то това би е 5, защото Чар е с дължина един байт.
Добър?
>> И накрая, ние трябва да указатели и масиви.
Оказва се, че всеки път, имаш работа с масив,
вие всъщност се занимават с показалец.
Много хубаво концептуална причина за това е, че масиви са много големи.
Така че не забравяйте, че казах, че всеки път, когато мине неща наоколо,
копирате всичко.
Така че, ако имате масив това е много, много голям,
вие наистина не искате да копирайте всичко, всеки път,
го Заобикаля към друг функция, защото това е просто
огромно количество работа.
Така че това, което правите е просто минало адреса на първия байт.
И тогава функцията ще има достъп всички елементи в този масив.
Така премина масива от неговия адрес, така че адресът на първия байт.
>> Така че, ако ние заявяваме инт масив 3, тук, ние знаем,
как да получите достъп до първия елемент използване нотация скоба.
Ако си спомняте скобата нотация, масив скоба 0 е равна на 1.
Е, това би било точно същото като просто отидете там и сложи 1.
OK, е точно същото нещо.
Така скоба нотация тук ще бъде същата като тази линия.
>> И познайте какво нотация скоба за масив скоба 1 ще бъде?
Той просто ще бъде едно и също нещо като това.
Така добавите един към масив.
Преминаване една по памет.
Отиди там и сложи 2.
OK?
И тази линия е едно и също нещо.
Искаме да отидете на трета кутия, така масив плюс 2.
Отиди там и сложи 3.
Така в паметта, което е ще се случи е, че ние сме
няма да има 1, 2 и 3, като три елемента на този масив.
>> Бихме могли да са направили това с помощта познатата ни скоба нотация.
Аз просто искам вие да знаете че те са едно и също нещо.
OK, въпроси за това?
Ница.
Сега, аз отивам да се предаде то към Хана,
>> Хана: Уау, Йе-хау.
>> Binky: Да поговорим за памет и чл неща.
[Аплодисменти]
>> Хана: Hi, хладно, така че ние сме ще говорим малко по-
за памет, който току-що Адресати на използване на указатели.
Така че има две основни части на памет, която ние сме загрижени.
Имаме стека, което расте в дъното, и куп, които
слиза от върха.
И стека ще се проведе всички наши инстанция променливи.
Така всеки призовава към функция получава своя собствена малка рамка на стека.
Така че, както споменах по-рано Габе, ако ние обадете се отново и отново, функцията,
отиваме да подредят нещата в стека.
>> И по същия начин, на куп, който започва от върха
ще държи всички на паметта че сме динамично разпредели.
И така, както ние динамично памет,
това ще слезе към дъното.
Двойка неща, за да бъдат наясно кога ние сме с помощта на комина и на куп,
със стак, ако имаме твърде many-- нека say-- рекурсивни повиквания,
и ние се обаждате функция отново и отново, и отново, и отново,
и това е стифиране, стифиране, подреждане нагоре.
И това се случва да се блъсне в купчината.
Отиваме да тече от паметта.
Това ще доведе до проблем за компютъра.
И това се нарича стека преливане.
Така че определено ви нещо трябва да е наясно и да се опитват да избегнат.
И купчината, трябва да се помни Не случайно изтече памет.
Всеки път, когато използвате изчистване, не забравяйте да освободи този спомен.
Просто противен случай, тя ще е на куп губи,
и компютърът няма да знаят, че той е свободен да използва тази памет.
Така че тези, които са няколко неща да бъдат много внимателни, когато с
сте се занимават с комина и куп.
Всички въпроси, с това?
Awesome.
>> OK, хладно.
Така че този вид има едни и същи идея стека преливане, където
отиваме отвъд на границите на това, което памет
е, че ние би трябвало да бъде в състояние да използвате.
Така че, например, буфер, или може просто да мисля за него като масив.
И ние казахме, ОК, ние ще създаване на този хубав малък масив.
Това ще бъде низ.
Или тя ще се съхранява знаци.
И това е просто щях да кажа здрасти.
И това е неопределен.
Това е всичко.
>> Но ако бях някой зъл и исках да направи нещо лошо с този масив, какво
Което можех да направя е да се опитаме да пиша след края на низа.
И както ще видите, ако Пиша достатъчно далеч,
Аз всъщност може да засегне обратен адрес.
И ако аз започвам да се отрази обратен адрес,
Аз се отрази на начина на програмата действително работи.
И вместо да се завърне, можете знаете, щастлив низ като здравей, аз
може да направи нещо лошо, като отидете на някъде другаде в компютъра си, все още
памет, променете го, каквото си искам да направя.
Така че това е, което това ще изглежда като е, ако аз просто вид го напълни
със случайна стойност боклук, в този случай, просто.
И тогава, когато аз всъщност стигнах до адреса на паметта,
Аз започнах да я изпълва с нещо че направих това, което исках да направя.
Всички въпроси с препълване на буфера?
Страхотно, летящ право чрез тези неща.
>> ОК, така че ние говорихме много около показалеца с Гейб.
Как да се получи в действителност указател?
Как да получите на адрес в паметта?
Е, можем да използваме тази хубава извикване на функция изчистване, които
ще се получи малка част от паметта,
специално в грамада, както обсъждахме,
и това ще ви даде обратно показалеца на този адрес в паметта.
А аргументът, че ние трябва да се даде на изчистване
е колко място в паметта, което искаме.
>> Така че можете да видите размера в байтове.
Да кажем, например, или Всъщност, в този пример,
заделяме достатъчно пространство за 10 числа.
Така че най-вероятно това, което ще искате да се сложи тук е масив от 10 числа.
Така че ние го дам размер на цели числа, които Научихме е колко байта?
STUDENT: 4.
Хана: 4, красива, и ние искам 10 от тези в един ред,
така че имаме достатъчно пространство, за да съхранява всички 10 числа, в този случай.
Нещо супер важно, всеки път, когато се обадя изчистване,
трябва да се провери за нищожна.
Ако не се проверява за нищожна, добре, изчистване ако изтече на пространството
и вече не може да ви даде всеки повече памет, тя ще се върне нула.
Така че, ако не се провери, изчистване може да се върне нула.
И след това, ако ние се опитваме да сочен нулев указател,
ние ще получим грешка сегментация, които ние ще говорим за сега.
Awesome.
>> OK, въпроси с изчистване?
Да?
>> STUDENT: Има ли проверка на нула [Недоловим] не го правете на теста?
>> Хана: Разбира се, въпросът е пък matter-- на теста,
ще получите точки изключва, ако не проверява за нищожна?
Да, вие ще получите точки от ако не се проверява за нищожна.
Всеки път, когато ти се обадя изчистване, както на викторина и вашите psets и в реалния живот,
трябва да се провери за нищожна.
Добър въпрос.
>> ГАБЕ: Какво става, ако не се освободи?
Хана: Гейб иска да знае какво ще стане ако не го направим безплатно.
Тогава ще имаме памет течове в нашата купчина.
Всякакви други въпроси?
Да?
>> STUDENT: Може you-- отидем препълване на буфера много бързо отново?
>> Хана: Разбира се.
Въпросът е можем ли да отидем препълване на буфера наистина бързо.
Нека се върнем към тези пързалки.
Просто така буфер, можете мисля за него като масив, нали?
Имате малко пространство в паметта.
И когато за първи път се създаде нашата масив, знаем масиви са с фиксирани размери,
или ни буфер има фиксиран размер.
>> Така че нека да кажем, че в този случай, ние имаме само достатъчно пространство, за да напишете низ здрасти.
Ако отидем минало, граница, ако отидем минало какво ни масив казахме, че може да държи,
ние всъщност може да започне писане в паметта
че компютърът не искат от нас да напише в.
И по-специално, ако се удари нещо като завръщане
Адрес на функцията, която, като всяка друга част от паметта,
е просто някъде в компютър, можете всъщност
промени това и да започнете да правите зло.
Отговор на въпроса ви?
Страхотно, нещо друго?
Да?
>> STUDENT: Така стека [недоловим], можете каза отида от дъното върви нагоре.
В стека обхват, прави паметта премине от, като,
отгоре надолу, отнасящи се до всяка почивка?
>> Хана: Как you-- направя отложи за Rob на този един.
>> ROB: Тя ще се развива в същото посока, както стека расте.
Хана: OK.
ROB: Така че аз се обърквам.
Това ще бъде абстракция.
Хана: OK.
ROB: Това е вярно.
Така че, ако топчето се разраства , а след това го generally--
не трябва да бъде по този начин. но вие може да обяви INT х.
След това можете да декларира INT база.
Тогава INT х цяло ще бъде по-ниска в стека от INT база.
Но това е просто факт.
Това не е като едно важно нещо семена.
>> ROB: Така че въпросът отново беше просто това, което се случва всеки кадър се изгражда.
Така че всяка функция получава малка част от стека.
И както и да отидеш до, в рамките на този малко парче, в рамките на тази рамка,
ще кажа, че променливи в тази рамка да се движи нагоре.
Въпрос?
>> ROB: Просто да бъде на микрофон.
Хана: О, да.
ROB: Ще говоря в теб.
Хана: О, да, OK.
ROB: Изключение е за масиви и structs,
където масиви, нисша индекс в масива,
и в structs по-висок поле в structs
са гарантирани за да бъде на по-ниски адреси от по-късен стойност в масива.
Така че тези, които са гарантирани.
Но каквито и да било конкретни променливи в рамките на, като INT х и инт у рамките на функция,
там не е необходима връзка между техните адреси.
Хана: Друг въпрос тук?
STUDENT: Така че в буфер поток, само препълване на буфера
само се е случило, когато са, като, възложени
размер на масив че тогава е по-голям?
Например, може ли?
Така че, ако питате за нещо от user--
>> Хана: Мм-хм.
STUDENT: Може ли те насила ви дам нещо обратно
че е по-голям, отколкото каквото и сте разпределени за тях?
Хана: Разбира се, така че въпрос е основно,
може потребителят да ви даде повече, отколкото си поиска?
Студентът: Да.
Хана: Добре, бихте могли да се предотврати потребителят да прави това.
Трябва задължително да се каже, не го правят дай ми повече от х броя от байтове
Аз само ви дава възможност за х броя байтове, х брой символи.
Така че това е нещо, което искате да се предотврати.
Да?
Каква е разликата между стека преливане и препълване на буфера?
>> Хана: ОК, така че топчето overflow-- ох, какво
е разликата между стак преливник и препълване на буфера?
Така че ние искаме да се мисли за стек преливане случва, когато сме в действителност
подреждане на тези извиквания.
Да кажем, че имате рекурсивни функции, защото ние знаем, че всяко ваше време
наричаме функция, тя е получава своя собствена рамка на стека.
>> Така че ние се натрупват твърде висока, и След това започваме да прелее.
И ние използваме прекалено много памет, А ние не са навсякъде наляво.
Ние получаваме тази грешка.
>> Препълване на буфера е в рамките на програмата.
Ние искаме да не е задължително да има изчерпване на паметта по същия начин,
че бихме могли, ако ние сме подреждане толкова много извиквания на функции,
но пишем покрай паметта че ние знаем, ние можем да използваме.
И това ни позволява да правим зло.
Така ли?
>> ROB: Да, може да искате просто да се повтаря това,
но можете също така да мисля на купчина преливник
тъй като специфичен вид от препълване на буфера.
Или можете просто да мисля за вашата стека като наистина голям буфер.
Тогава, когато прелее стека, това е нещо като препълване на буфера.
Но купчина преливник е просто специфичен термин, използван, когато топчето
се прелива.
>> Хана: Добре, така да се Повтарям за видеото,
то можеш да се сетиш на стека преливане като специфичен вид препълване на буфера.
Cool?
Всякакви други въпроси, преди да продължи?
Awesome.
>> OK, хладно, така че нека да говорим за някои често срещани съобщения за грешка.
Това е нещо, което има появиха на множество тестове,
така че нещо, което си струва като втори поглед.
Сигурен съм, че сте се срещнали поне някои от тях
като правиш проблема си поставя.
Така че се уверете, че можете да говорите за тях на теста.
>> Така че първата е сегментиране вина.
И това е всеки път, когато пробвате достъп до паметта
че не ти е позволено да имат достъп.
Така че migh съм виждал това, например, при пробив.
Ако се открие сблъсък върне нула, а след това
Опитах се да направя нещо с тази нищожна стойност,
компютърът ще даде вие вина сегментация.
Така един, важно нещо, за да направи, за да се опита да избегне този
е винаги да се проверява за нищожна.
>> Може би сте виждали имплицитно декларация на функция.
Така че това е, което се случва, когато Алисън ви показахме
как да се направи прототип, нали?
Така че нека да кажем, че имаме някои функция, която ние определяме.
Да кажем, че куб.
Това важи в долната на нашата функция, с основна.
>> Ако забравите да кажете на компютъра за куб, когато основната опитва да набере куб,
компютърът ще бъде, като, о, Боже.
Нямам представа какво означава това.
Аз не знам какво да правя, тук.
Така че прототипът казва не се притеснявай.
Отивам да ви кажа.
>> Той ще дойде.
Не крещи по мен.
Не ми даде мълчаливо декларация на функция.
Така че, ако можете да получите тази грешка, един нещо, което ще искате да направите,
, е да се уверете, че имате си прототип.
OK?
>> И накрая, но не на последно място, недекларирания идентификатор
е по същество, когато се опитате да използвате променлива, която не е обявена.
Така изведнъж да започнете казвайки като п плюс плюс.
И компютърът казва какво е п?
Вие никога не ми каза, п е нещо.
>> Така че едно нещо, което трябва да се уверете, че сте направил е кажете на компютъра какво е п.
Така например, п може да бъде цяло число.
И тогава ще се избегне тази грешка.
Всякакви въпроси относно общите грешки?
Да?
>> STUDENT: За неявните декларация на функция,
биха могли също така да бъде, че се пропусне един на библиотеките е трябвало
да се включи, а от прототип?
>> Хана: Добре, така че въпрос е, може ли
също така да получите тази грешка, ако Забравих да включва библиотека.
>> Студентът: Да.
>> Хана: Абсолютно, защото по същия начин
че искаме да поставяме нашите прототипи преди основната функция,
ако имаме библиотека, които ще по същество включва прототипи,
включва определения на функциите.
Голям въпрос.
>> STUDENT: За сегментиране вина, които също ще
се случи, ако ние, като се опита за достъп до променлива,
като, по различен [недоловим] отколкото беше обявено в?
Хана: Разбира се, това би ни получите грешка сегментация
ако се опитаме да имат достъп до променлива извън обхвата?
Дали това е въпрос?
Студентът: Да.
Хана: Beautiful.
Така че най-вероятно, ти започваш да се получи недекларирания грешка идентификатор вместо това.
Така че това е просто щях да кажа Аз не знам какво е това.
Cool, нещо друго?
Да, добре, красива.
>> All righty, така рекурсия.
Така че аз споменах няколко пъти че бихме могли да получите купчина преливник
защото ние се обаждате ни рекурсивни функции толкова много пъти.
Ние получаваме всички тези чипове рамки, дрън, дрън, дрън.
Какво още е рекурсивна функция?
Е, рекурсивно функция е всяка функция, която нарича себе си.
>> Някои неща, за да бъдат наясно, когато прилагат рекурсивна функция,
не забравяйте да включите база случай.
База случай е точка, в която можем да свърши.
Така, например, ако ние сме за кодиране, , Да речем, на Фибоначи рекурсивно
ние искаме да се уверите, че когато стигнем или първото число на Фибоначи 0,
тези две числа са тези случаи, защото тези, които не са зависими
за неща, които са били преди.
Тези, които имат свои собствени ценности.
>> Някои плюсове на рекурсия, което е въпрос, който съм виждал в последните тестове.
Те могат да доведат до по- стегнат, елегантен код.
И много функции, а много различни алгоритми,
всъщност се поддават на рекурсия.
Тяхната дефиниция може да бъде рекурсивни и на себе си.
Така Фибоначи е един.
Факторен е един.
Обединяване на подреждане е one-- всички неща, които можете да погледнете.
OK, някакви въпроси?
Да?
>> STUDENT: Има случай в корнер подобно на база случай?
Или е, че за някои други вид [недоловим]?
>> Хана: Разбира се, така че ъглов случай е any-- така
е ъглов случай същите като базов модел?
Случай ъгъл е нещо, което си код може да се държи малко по-различно.
Base случай е нещо свързано, в че те са като особени случаи
че искате да погледнете.
Но идеята за базов модел е, че искате рекурсивна функция
да спре в някакъв момент.
Тя не може да се запази, наричаща себе си завинаги.
Това трябва да спре в някакъв момент.
>> Роб: Да, често, вашите основни случаи може да бъде примери за ъглови бази.
>> Хана: Да, готино, нещо?
>> STUDENT: Бихте ли обяснили основава малко повече?
Аз не разбирам [Недоловим] базови случаи.
>> Хана: От базови случаи?
>> STUDENT: Базови случаи, да.
>> Хана: О, да, разбира се.
Нека да видим.
Имаме ли тебешир тук?
Да, ние правим.
ОК, така че наистина бързо, аз ще опитам да напиша достатъчно голям
така че можете да видите на екрана.
Нека поговорим за това, наистина бързо, Фибоначи.
Така че аз ще ви дам последователността на Фибоначи.
Можете да се запознаете с това определение.
>> По същество, всеки брой в последователността е сумата на предишните две числа.
ОК, така че начинът, по който аз що описах Фибоначи,
можете да чуете на рекурсия, нали?
Когато казах, всеки номер е сума на предишните две числа,
бихме могли да кажем OK.
Е, тото Фибоначи number-- така че нека
кажем, че имаме тази функция наречен fib-- ПИБ п
ще бъде равна на ПИБ п минус 1 plus-- съжалявам,
ние ще преминете към следващия ред над here-- ПИБ п минус 2.
>> ОК, така че това работи чудесно, ако сте гледа, например, нула, едно,
две, три, четири, Петият брой на Фибоначи,
където може да се каже, че 5 е равно на 2 плюс 3.
Но какво, ако сте в началото?
Какво става, ако сте просто се разхождаш тези първи две стойности?
>> За да се получи това един, не можеш казват, добави предишните две,
защото това нула and-- аз не знам.
Така че в някакъв момент, ние трябва да се спре.
В един момент, ние трябва да кажем, че тези два просто имат свои собствени определения.
Номер 0 Фибоначи е 0.
И първото число на Фибоначи е 1.
>> Така че начина, по който може да се кодира това, аз бих казал, ако п е по-малко от двама души,
след това просто се върнете п.
И това ще бъде моята база случай.
Ето как аз знам, за да спре с рекурсивни функции.
Ясно ли е?
Awesome.
Всичко друго на рекурсия?
Beautiful.
>> Нека най-бързо се говори за търсене и сортиране, управлявани пъти.
И тогава аз ще дам някои Дейвин време, за да говорим за кодиране примери.
Така че тук са основният търсенето и видове, които трябва да знаете за.
Guarantee-- Не мога да гарантирам, защото аз не съм видял quiz--
но това идва викторина след тест след откажат.
Така че определено използвате тази диаграма.
Например, вземете тази карта.
Сложете го на вашия мамят лист.
Вие ще бъдете щастлив човек.
>> Това ни казва времената навечерието на всяка на тези сортирате и търсене алгоритми.
Така линейно търсене, можете да видите серия време, и същото с двоично търсене.
Отидете над това, което тези алгоритми направя, общата идея.
Погледнете някои Псевдокод, ако не и самия код.
>> Вие ще видите, че балон вид има горна свързан в най-лошия случай на N квадрат.
Така че, ако нашата гама е напълно назад преди искахме да го оправи,
ние ще кажем, че това е ще отнеме н квадрат стъпки.
Но в най-добрия случай, така че долна граница за най-добрия случай
ще бъде, ако това е вече перфектно подредени.
След това всичко, което трябва да направите, е да провери, че тя е сортиран.
Има ли въпрос тук?
>> STUDENT: Кога ще искате да използвате нещо?
Сортът.
Просто съм любопитен.
>> Хана: Кога бихте искате да използвате селекция вид?
Това?
Този, който е н квадрат и в двата случая?
>> STUDENT: [недоловим].
>> Хана: Така че това е много по-различна.
Ако имате конкретни изисквания за вашата програма,
като такива неща, ако ние просто каза приложи search-- sorry--
изпълнение нещо, ще Вероятно искате да отидете
за един от тези, които има най- добрия случай на N,
или долна граница в най-добрия случай на п.
Но може да има някои неща, като, да речем,
суапове са наистина скъп поради някаква причина.
Тогава вие ще искате да направите, Метод на мехурчето, защото
трябва да се направи толкова много суапове, такива неща.
Всеки other-- нали?
>> STUDENT: Ще бъде ли [недоловим] да кажа, че [недоловим]?
Хана: Това е едно нещо, че ще ви кажа,
ако търсите по изпълнението.
Начинът, по който бих всъщност мисля за това, защо това е п
квадрат е, че ние трябва да тичам чрез нашия масив с дължина N,
всеки път, когато прави най-много, п суапове.
И ние трябва да направим този процес н пъти.
>> Така че, когато трябва да се направи най-много, н суапове и за п минава през масива,
там ще бъде п квадрат.
Но да, това ще бъде разкрито чрез това двойно за контур,
тъй като въпросът asked-- или вложени за контур, трябва да кажа.
OK?
>> И след това се сливат нещо, което е най-бързият вид сега,
или, че ние сме обхванати в CS50, Знам, че основният алгоритъм е
тази идея за пробив в сортирани парчета и след това
сливане заедно тези сортирани бита.
И ще ни накара да влезете н влезете п.
Всички въпроси, свързани с търсене и видове, преди да го предадат?
Нека да видим.
>> О, свързани списъци.
За съжаление, аз имам още един въпрос.
Добре, страхотно, свързани списъци.
Проблем с масиви, те имат фиксиран размер.
Така че, ако ти не знаеш колко е голям вашият принос ще бъде,
вие не искате да се създаде масив.
Защото, ако ние създаваме масив, който е твърде малък,
ние може да се сблъскате с препълване на буфера.
>> Така че вместо това, бихме могли да направим нещо със свързани списъци, които
ни позволява да имат динамично размер на структурата на данните
която ще ни позволи да се съхранява по-гъвкав количество данни.
Така че в рамките на всеки възел в нашия свързан списък, ние имаме две части.
Имаме реалната стойност, която съхранява.
Така че това е просто нещо, което би виж в масива, например.
И тогава ние също така да следите на указател към следващото нещо в паметта.
>> За разлика от масивите, които Ние всички знаем, че ще
да be-- масив елементи са един след друг в memory-- свързани
списъци могат да бъдат навсякъде в паметта.
Те са произволни места.
Така че, ако бяхме да всъщност отиде да ги намерим,
трябва да се следи за следващото нещо в нашия списък.
>> И тогава, за да се знае където този списък като цяло е,
всичко, което трябва да следите е Първият елемент в нашата свързан списък.
И това ще ни позволи да изпълнят.
>> Така че това е начина, по който може да се определи режим.
Това е една чудесна възможност да се възползват от structs.
Тъй като имате тази идея, добре, за даден възел, имам две парчета.
Имам действително самата стойност.
И тогава имам указател към Следващият елемент в свързан списък.
Така че, виждате ли, ние имаме цяло число N, който ще бъде действителната стойност,
и след това указател към възел, наречен по-нататък.
Така че ще бъде следващият елемент в нашата свързан списък.
STUDENT: Да?
Трябва ли да се уточни, че звездата е като структура?
>> Хана: Да, така че, тъй като това е почти като един вид,
тя изглежда като рекурсивно дефиниция, че
Трябва да знаете какво възел е в намирането на възел.
Тъй като това не е така в действителност знам какво възел е напълно
докато стигнем до края на this-- и след това просто да го наречем
на node-- вътре на това определение, ние трябва да го наричаме структура възел.
Голям въпрос.
Нещо друго?
Да?
>> STUDENT: Защо правим Трябва да кажа възел два пъти?
Защото, когато бяхме в [недоловим] ние просто трябваше да го направя в точка и запетая,
но сега ние трябва да се намери, че структура на възел? [Недоловим].
Хана: Така че аз вярвам, в последния пример,
ние просто създаване на вас по всяко време Исках да използвам един студент, след това, можете
трябваше да се използва структура node-- Аз съм sorry-- структура студент.
Това ни позволи да, след факта, просто използване възел добавите нов тип, по същество.
Това има смисъл?
Така че ние ще трябва да се върна и погледнете в кода преди.
Но аз предполагам, че ние не използваме typedef.
И ние зададе въпроса, Защо ние трябва да използваме typedef?
Typedef ни позволява да се избегне Думата структура в началото.
Да?
STUDENT: Какъв вид въпроси ще излезе
от гледна точка по отношение на възли и свързани списъци?
>> Хана: Така че едно нещо е, че ние може да се каже как може да ви търси чрез свързан списък?
Добре, защото това е малко по-сложно
отколкото ако сме търсите чрез масив.
Ние можем просто погледнете елемент нула, елемент един, елемент на две, дрън, дрън,
бла.
Ако искате да търсите чрез свързан списък,
щяхме всъщност трябва да следват този малък лабиринт от указатели.
Така че нека всъщност отидете чрез това наистина бързо.
Какво можем да направим в поръчате to-- нека да кажем,
искам просто да превъртите през ни изцяло свързан списък.
Ние ще започнем от главата.
И тогава, за да се преминете към следващия елемент,
вместо просто увеличаване с една като бихме могли да излязат чрез масив,
ние всъщност ще следвайте следващата показалеца,
така че ние можем да намерим къде в паметта на следващия елемент.
Така че аз знам, че не е достатъчно, за да вземете всичко това точно сега,
но вие ще имате тези пързалки.
Така че можете да минете през това е малко по-бавно.
Но по същество това, което искаме да направите е да следвате тези насоки
чрез съвкупността от свързания списък.
Така че това е въпрос, може да бъде поискано.
>> Нещо, което да забележите, с вмъкване, нека да кажем,
ние искахме да постави нов елемент в предната част на нашия свързан списък.
Ние трябва да бъдем много внимателни, за реда, в който
преотстъпва указателите.
Защото нека да кажа, че току-що каза OK.
Направете точка на главата на този нов елемент.
Просто се уверете, да го насочи към едно След това, ние сме по същество губи останалата част от нашия списък,
защото аз не си спомням когато два живота.
>> Така че ние трябва да направим в много специфична цел.
Първо, ние правим новото елемент точка на главата.
И след това ние правим главата сочи към новия елемент.
Така че нека да видим това, което изглежда като че с arrows-- просто като това.
Така че първо трябва новото елемент точка на стария главата.
И сега, ние имаме на главата сочи към новата първия елемент.
Всички въпроси, с това?
>> OK тук е някакъв код отново, нещо, да погледнем малко по-късно.
И сега аз ще го предам на Дейвин за GDB и малко на практика
кодиране на хартия.
Beautiful.
>> ROB: И Роб.
>> Хана: О, Дейвин и Роб.
Съжалявам.
>> STUDENT: Woo!
>> ROB: Благодаря.
>> Дейвин: Искате ли да се каже, всичко много бързо?
ROB: Да, да.
Дейвин: След като съм се.
OK, докато Роб поставя микрофон, така че това, което е GDB?
Всеки трябва да види в GDB клас, а също и в работно време.
И вие трябва да го използвате.
Така че това, което е GDB?
Някой?
>> STUDENT: Това е дебъгер.
>> Дейвин: Това е дебъгер.
И какво прави той ви позволи да направите?
Например, защо ни харесва GDB?
STUDENT: За да се забави програмата.
Дейвин: Добре, така че можете да се разхождате през него като човешко темпо.
И така, какви са някои команди можете да направите?
Е, пауза е вероятно любимата си команда.
Защото това ви дава възможност да се прекъсне програма и всъщност минеш през нея
ред по ред.
>> Run ви позволява да го стартирате.
На следващо място, като чрез засилване.
Каква е между следващия и стъпка?
Чакай, да кажем, че на глас.
Това беше вярно.
>> STUDENT: [недоловим].
>> Дейвин: Да, страхотно.
Така че, като, следващата и стъпка, ако you're-- да речем, че има функция, която
дефинира.
Да кажем, че някои хора в основната си функция, а ти просто се разхождаш следващата, следващата,
следващата.
Вие всъщност ще изпълнява тази функция,
но вие ще скочи върху него.
Ако ви удари стъпка, или ите или каквото и да сте
Ще действително да скочи в тази функция,
и след това можете да натиснете следващия за да видите различни призиви
вътре в тази конкретна функция.
Така ли?
>> STUDENT: Има ли начин да скочи, като, се оттегли?
Дейвин: Finish, да, завърши с вас скочи.
Така че това ще завърша, че функция, и тогава вие сте
ще се върне в основния, например.
Print ще го отпечатате едно и също време.
Нещо, което се използва винаги е дисплей.
Display ще го разпечатате непрекъснато по време на цялата
на вашата програма.
>> Например, ако сте в за линия, и вие
Искам да видя как се променя нещо, и вие не искате да, като, постоянно
се прави като на печат, печат, печат, дисплей
ще покаже, че променлива непрекъснато, всеки път, когато ви удари Next.
И продължи.
Така GBD, че е GDB.
>> STUDENT: Какво е човекът където [недоловим]?
Дейвин: Какво е това?
>> STUDENT: Какво е the-- местните променливи.
ROB: Има нещо, което всъщност като местните жители или нещо такова.
I can't--
>> Дейвин: То може да бъде нещо такова, да.
>> Хана: В местните жители?
>> Дейвин: Това е всичко.
Това е един.
ROB: Beautiful.
>> Дейвин: Да.
>> STUDENT: Какво не продължава да направя?
>> Дейвин: Той continues-- така че това е просто ще продължат програмите си.
Така че, ако ви се счупи и удари продължи, това ще
просто да използват тази програма, докато той отново удари, че почивка.
Така например, ако сте прекъсна функция,
и ти започваш да се направи като за линия или нещо подобно,
и ви удари продължи, тя ще продължи и да се върнете към тази почивка.
Или там не е почивка, че ще продължи и да завърши програмата.
>> ROB: Така че просто искал работят спирки при първата точка на прекъсване
ви удари, ако след това хит продължи, тя ще се запази
Ще докато тя е следващата точка на прекъсване.
И след това продължи, ще отида към следващата точка на прекъсване.
Дейвин: Всякакви други въпроси, свързани с GDB?
Така че аз мисля, че в миналото, ние сме ви попита какво
GDB е и да дава Например на някои неща, които можете
може да се направи с GDB, така реално просто, но да.
Има и да отидете.
И възли?
>> ROB: Да, така в коя посока е?
STUDENT: Това беше.
Дейвин: Изчакайте.
ROB: Този човек?
Дейвин: Ето един.
ROB: Този човек, о, аз не осъзнават.
Така че ние не са ясно на какво the-- аз не
знам кой was-- но въпросът.
Ние не знаем точно какво питаха за него, така че просто
да се изясни нещо.
Така че, на първо място, както казах и преди, typedef сте винаги само с
създадете псевдоним за тип.
Така че точно тук, прякора сме създаване е за този вид структура възел.
>> Така че, на първо място, пренебрегвайки този възел в typedef, така че тази структура възел къдрава
подпре до следващия къдрава скоба е тип структура възел.
И ние трябва да този възел там, защото ние
трябва да позоваване възел в тук.
Така че с този вид на рекурсивни структура, трябва да се даде тази структура име,
или друго, което не може каже структура възел тук.
Докато преди с ученик когато бяхме написали, аз мисля,
ние не трябва да се каже, студент там, защото ние
не трябва да се каже структура студент в самата структура.
Така че това е рекурсивни че ни кара да се каже възел там.
>> Този възел е само името, което сте като възел за typedef.
Така че не е възел същият като този възел.
Но тази структура възел е същата като тази структура възел.
Дейвин: Така че всеки път, когато ти се обадя, като възлова точка в основната си функция,
вие няма да Трябва да кажа, структура възел.
Можете просто да се каже възел, защото възел е different-- е основно
вие казвате, OK.
Вместо да се налага да се обадя структура на възел в моя код,
Аз просто искам да го преименувате като възел, за да е по-лесно.
>> ROB: Ако винаги използвате typedef, то това
е единственото място, където ще трябва да декларира променлива със структура на възел
звезда, да.
>> Дейвин: ОК, така че последната част Трудно е да се научи because--
ROB: Какво?
>> Дейвин: Тъй като това е кодиране на хартия.
Така че всяка година имаме код по въпросите на хартия.
Така че аз мисля, че през миналата година, 12 от 80 точки са код на хартия.
Година преди това, 10 от 80, година по-рано, че 20 от 100,
толкова много от тях.
Значи ще трябва да бъде в състояние за кодиране на тези функции на ръка.
>> Така че аз помислих, бихме могли да преминат през няколко от тях и да видим колко хора го правят,
вид на разходка из ги бавно с хората.
Така че, като цяло, и strlen atoi са били много популярни.
Миналата година, мисля, че имахме GetPositiveInt и RandomInt.
Но Pow, така че властта, също положителен също.
Нека просто да мине през може би един или два от тях заедно.
Какво правят хората искат да видят?
>> STUDENT: Atoi.
Студентът: Да.
Дейвин: Atoi?
STUDENT: [недоловим].
Дейвин: Добре, аз ще да го направи на дъската.
Имате ли предпочитания ако аз го правя тук или там?
Там, Гейб казва там.
>> ROB: И това е общи мисли на тези, кодиращи въпроси.
Опитайте се да напиша нещо.
Не го оставите празно.
>> Дейвин: Да.
ROB: Ако можете да получите върнете тип вярна,
или може би бихме могли да го дам вас, но ако можете, като,
напиши общата функция подписа, Ако можете да получите на базови случаите вярна,
или ъглови случаи, или спомняйки си чек за нищожна,
толкова дълго, колкото имате някаква неща, а след това може би ние
може да ви даде няколко точки за проблема.
Не просто да го оставите празно.
>> Дейвин: Да, и ако са просто напълно
объркани как да всъщност се превръща в код.
Ако пишете Псевдокод, това е доста добре.
Така че това е като, че е шест точка въпрос, и пишете правилно Псевдокод,
вие ще получите най-малко две точки.
Така че не просто ги оставете полето празно.
Опитайте се да сложите нещо.
>> ROB: тя трябва да бъде на правилно Псевдокод, все пак.
>> Дейвин: Да.
ROB: Така че ние като цяло са по-малко снизходителен с бъгове в Псевдокод.
Дейвин: ОК, така че вие, момчета, Исках да видя atoi.
ОК, така че просто really-- И така, какво искате да направите,
ти започваш да бъде дава някакво число.
Но това число не е щеше да бъде едно цяло число, нали?
Какво е това щеше да бъде?
>> STUDENT: [недоловим].
>> Дейвин: Това ще бъде низ, нали?
Така че, ако ти е дадено на string-- нека say--
>> ROB: Трябва ли да спра редактор?
Мога да дръпнете up--
>> Дейвин: О, вие искате да го направите on--
>> ROB: Бихте ли предпочели борда?
>> Дейвин: Какво искаш да направиш?
Искам да кажа, искаш да го направиш на ръка?
Или искаш да го направите с помощта на компютър?
>> ROB: Направи го с ръка.
>> Дейвин: [смее се]
ROB: Направи го с ръка.
>> Дейвин: ОК, така че това ще бъде atoi.
Така че това, което е it-- Искам да кажа, ние ще Вероятно ти дам това.
Но това, което е тя ще се върне?
>> STUDENT: Int.
>> Дейвин: Той ще се върне INT, нали?
So-- Аз не искам да го направя там.
Аз ще го направя тук.
>> ROB: Можете да го дръпнете надолу и след това натиснете на него.
>> Дейвин: Да.
[Смее се] промяна Game.
ОК, така че това ще бъде INT atoi, и какво е то ще отнеме?
A Чар звезда, така че просто низ, звезда и, по този начин.
>> ROB: Nice звезда, хубаво.
Дейвин: Това не може да бъде там, OK.
ROB: Да.
Дейвин: ОК, така че на първо нещо, което искате да do-- I
не знам дали някой погледна в solutions-- на практика
но това, което ще искате да направите, е да сте
ще искам да имам една линия, защото вие сте
ще искате да всъщност стъпка през този низ.
Така helpful-- така че нека да кажем, отиваме към по контур,
и ние отиваме да се засили чрез всеки елемент на низа.
Колко време е това?
Колко пъти са отиваме да превъртите в това за цикъл?
STUDENT: Sterln?
Дейвин: Sterln, да.
Така че нека да кажем, дължина инт равнява sterln ите.
И просто любопитни, защо тя е винаги вид на по-добре да направите това извън контура?
Например, защо е по-добре да се обадя тази функция извън линия?
Просто проверете бърз здрав разум?
Така ли?
STUDENT: Значи вие не трябва да го проверява.
Можете просто [недоловим].
>> Дейвин: Точно така, да, точно това, което казва тя.
Така че ние не трябва да го проверява.
Така например, ако се обаждам тази функция в една линия,
След това аз ще се запази обадите тази функция няколко пъти.
И това се случва, за да намалите ефективността на вашата програма.
Така че това е винаги полезно да го декларира отвън.
>> ROB: Това е казал на някой от тези проблеми,
почти толкова дълго, колкото можете да получите работен разтвор, можете да получите пълен кредит.
Така че не се притеснявайте, ако вашият проект е абсолютно ужасяващи.
Това може да ни накара да разстрои четене вашия код.
Но докато тя работи, вие ще получите точки.
>> Дейвин: Да.
ОК, така че след това аз отивам да Декларирам, някои променливи.
Това е просто ще се обадя INT сума.
И аз отивам да зададете тази равно на нула, като това.
И това е просто ще да бъде запазено.
Така че това ще бъде това, което аз отивам да се върне.
Така че аз отивам в крайна сметка върне сума от тази програма.
Така че аз имам тези две променливи.
Имам дължина.
Имам сума.
А сега нека да се потопите в нашата поредица.
>> Така че ви позволява да има ни за контур.
Така четири INT I е равна на 0 W, докато I е по-малко от дължината I плюс плюс.
И now--
ROB: Ница.
Дейвин: Добре, а сега тук идва месото на нашия код.
Така че всъщност можете да направите това в общи линии в един ред.
Така Дали някой има идея от това, което ние ще направим следващата стъпка?
ОК, така че това е ОК.
Така че ние сме прави, за да се каже сума equals-- позволете ми да махам този over-- сума
се равнява на сума 10 пъти plus-- ние сме ще вземе и аз минус едно
цитат 0 един цитат направено подобно.
ROB: Много интуитивен.
>> Дейвин: го смачкват.
ОК, така someone-- аз го имам, аз го имам.
ОК, така че това е ясно върви нагоре.
Какво означава това?
Така Някой знае ли какво означава това?
Всеки ли може да видите това?
Не, никой не може да види това, OK.
Отивам to--
>> ROB: Отивам да напишете формула точно тук.
Дейвин: OK, Роб ще го направя на компютъра, което е забавно.
ROB: О, Боже мой.
Или няма да го направя.
Дейвин: Готовност.
STUDENT: Аз имам един въпрос.
Дейвин: Да, разбира се.
STUDENT: [недоловим]?
Дейвин: Добре, така че всъщност, подобни, просто като цяло,
ако ви се налага да се сложи, като, в тази декларация инт
I е равна дължина 0 запетая равнява sterln, that--
>> STUDENT: [недоловим].
>> Дейвин: Това е добре, защото that--
STUDENT: Защо бихте дори трябва да се използва дължина?
Защо не може просто [недоловим] sterln S, като през цялото време [недоловим]?
>> Дейвин: Искаш да кажеш, точно тук?
>> Студентът: Да.
Дейвин: Защото всеки време това за цикъл писти,
това ще се оцени това състояние.
STUDENT: Точно така.
Дейвин: И ако имате sterln там, то е
Ще трябва да се обадя в действителност тази функция на всеки един момент.
Така че, вместо просто сравнявайки го с пад,
ти започваш да се наричаш функция и след това да се сравни
към стойността на замяна.
Да, толкова е просто, да.
>> Nice, OK, така че сега всеки може да го види.
Какво does-- това е като, това е то.
Това е най-сладко, точно тук.
Какво означава това?
Какво правя?
Да, една идея?
Така ли?
>> STUDENT: Добре, така че когато сте въвеждане на масив,
ти започваш да се случва от ляво на дясно,
така че вие ​​ще трябва да се случва в десетична от бутона [недоловим].
Дейвин: Точно така.
STUDENT: Така че всеки един трябва да се размножават
това, което видях като стойността на INT от времето, когато стигнем да се движат, че над една.
>> Дейвин: Perfect, съвършен, така например, нека
да кажа, че е дал you-- съм щях да пиша тук.
Не, аз не съм.
Отивам да пиша тук.
Да кажем, че ви е дал 76, нали?
Да кажем, че ти дам 76.
Това е низ да започнем с това, OK?
>> Така дължина е какво?
2, нали?
Сума е 0.
След това скочи в нашата за контур.
OK, първата итерация на това, какво той щеше да бъде?
Това ще бъде сума е 0.
Така обобщи пъти 10 0.
Това е безсмислено.
Тогава какво означава това правя?
STUDENT: [недоловим].
>> Дейвин: Това ще се превърне, че характер в цяло число, нали?
Това е нещо като с проблем set-- този light--
това е нещо като с проблем настроено на Visioneer.
Вие сте се занимават със стойности ASCII.
Така че, ако ти дам, като, един седем, но това е знак,
и искате да знаете, Добре, какво цифра е това?
Да, може, да.
Така че това, което цифра е това?
Можете да изваждате 0 от нея, но Трябва да извадим 0, характера.
>> А там, където някои хора се спънал, те са
като, добре, добре, трябва ли да се знае стойностите на ASCII за този тест?
Не, определено не Трябва да знаете ASCII
стойности, като, с малки букви А, главни A, равна на нула.
>> ROB: Няма причина да се някога сложи това на мамят лист.
>> Дейвин: Определено не губете пространство с това.
Можете да literally-- просто вместо да се каже 48, като чак до
там, което е еквивалентно на казва един, един апостроф,
като, че точно същото.
>> ROB: Вие почти можеше да мисли за него като if-- Бог, ми трябва,
oops-- бихте могли почти мисля за него като ако имаме нещо подобно хашиш
дефинира 0 до 48.
Това няма да работи.
Но мисля, че за него като апостроф 0 апостроф, както и за всички герои.
Мислете за това като постоянна, че декларира, че ASCII стойност.
>> Дейвин: Да.
ОК, така че за първи път чрез, така че с 76-- така за първи път през,
това е само символ 7 минус характера 0,
и тези, които са седем integers-- добре, тези,
седем места от всеки друг на графиката ASCII или каквото.
Така че ще се върне INT 7.
Така че сега, сумата се равнява на 7.
>> ОК, добре, нека да скочи в това за цикъл отново.
OK, сега това е сума пъти 10.
Значи вие сте ефективно преместване на 7 наляво.
Това прави ли смисъл?
Ти си ефективно тя се движи наляво.
>> И тогава add-- това ще бъде 6 минус 0.
Това е 6.
Така че това ще бъде 70 плюс 6.
76, това е вашия номер.
Така че, независимо от какъв номер Дадох ти, това е просто бавно
ще се премести на по-големи стойности наляво, един фактор от 10
всеки път, когато в за линия, и след това се добавя на колкото е необходимо.
>> В гърба?
STUDENT: Ние не трябва да правим всяка проверка в програмата?
>> ROB: Значи доколкото проверка се отнася и за програмата,
ние ще ви кажа доста много това, което трябва да се провери.
Ако не ви кажа, нищо, а след това като цяло
Предполагам, че трябва да се провери повечето неща.
Както може би, само за да бъдат безопасни, можете може би трябва да се провери, хей, е и нула?
Тогава аз нямам идея какво да се върнат.
Но ние ще ви кажа, този вид на нещо.
0, аз не знам.
>> Дейвин: И защо ще искате да провери отново дали и се равнява на нула?
STUDENT: [недоловим].
Дейвин: Заради Чар звезда.
Това е една показалка.
Така че напълно приемливо декларация, бих могъл да кажа, OK,
S е равна на нула, тъй като тя може да бъде указател към нула.
Така че всеки път, когато имате указатели по пътя си по този начин,
може би трябва да се провери.
Защото, ако не се покажат, че и тогава след това отидете във вашата за контур,
и сте doing-- махам надолу.
Scoot надолу.
>> ROB: Съжаляваме, това е всичко.
>> Дейвин: И така, като, ако е нула, а след това
направите това, какво грешка отиваш да получите?
STUDENT: Вие ще получите комплект вина.
Дейвин: Вие ще зададете виновен, нали, защото сте
се опитва да индексира в нула.
Значи ще се опитам да се индексират в паметта, които не притежавате.
Така че това, ако това е нищожна, и можете да направите това, вие ще цикъл.
>> ROB: Аз също мисля, че на изпита, в който ние попита този въпрос, ние ви кажа
че може просто да се предположи, е положително число.
Тъй като се очаква и atoi да се справят с отрицателните числа,
така че ще трябва да специален случай.
Хей, е първият знак тире, като в този случай, OK,
сега тя е отрицателно число.
Ще ви кажа, тези видове неща.
Ние ще ви кажа това, което трябва да се справят.
Дейвин: Да.
Така че аз съм сигурен, че някои хора могат да have-- Ако сте започнали да търсите в старите изпити,
Вие сте виждали sterln.
Това е популярна.
И аз мисля, че в sterln, трябваше да направи тази проверка за нищожна, връщането
0 или нещо подобно.
Както и, че трябва да се провери за нищожна.
И ако не сте, че е точка на разстояние от теста.
Така или иначе, прави всички чувствам ОК с atoi?
Някой може ли да искате да отида части отново?
ROB: О, да, мисля, че Ние също така да ви кажа ли
може да се предположи, че всичко is-- че те всъщност въвеждане на номер,
че не е нужно да се притесняваш, като писма са в низа, така.
Дейвин: Да.
Да?
STUDENT: Можете ли да отидете над още един момент, когато
използвате двойни кавички и апостроф?
>> Дейвин: Разбира се, така че двойните кавички, много просто, е двойни кавички са струни.
Така че, ако се удвои цитат нищо, че е низ.
Така че, като, ако имах тази 0 над тук, и аз го направих това, че е низ.
Това вече не е герой.
Така че аз не мога да намеря тази стойност на моя ASCII диаграма, защото това е един низ, да.
>> OK, всички други въпроси?
Да?
>> STUDENT: Значи вие сте вече отговорих на този,
но като, когато сме в действителност написването на тази на теста,
искаш да пиша с черта нули [недоловим]?
Дейвин: No.
Въпросът е трябва ли сложи черта през нулите
да посочи дали те са нули?
Не, ние ще го разбера.
Да, благодаря, те са добри.
Добре, нещо друго?
Някой може ли да искате to-- така че аз мисля, че ние сме тече малко с течение на времето.
Искате ли да видите още един, или?
STUDENT: RandomInt.
>> Дейвин: RandomInt, OK, точно така.
Така че нека да направим RandomInt.
Аз ще го направя тук.
Така RandomInt всъщност е много по-просто.
Мисля atoi е може би най-трудно че сме попита в предишните години.
STUDENT: [недоловим].
>> Дейвин: Какво?
ROB: Аз виждам, ако това е вид на видимата от тук.
Дейвин: тя е?
ROB: Аз не мисля, че е going-- мисля че ще избяга в дясно.
Дейвин: ОК, така че аз ще направя това.
И след това просто го сложи на екрана.
>> ROB: Добре.
>> Дейвин: Искаш ли да бъдеш мой писар?
>> ROB: Да.
>> Дейвин: Ница.
ОК, мога ли да изтриете това?
>> Студентът: Да.
>> Дейвин: Това е толкова трудно.
(ПЕЕ) Правиш какво правиш.
И правиш това, което не е така.
Добре.
>> Добре, ако си спомням правилно, за викторина на RandomInt бях като,
Добре, аз ще ви дам два номера, като на един и б.
И аз искам да ми даде RandomInt между тези числа.
Така RandomInt ще да вземе две numbers--
така RandomInt-- и това е ще се върне на инт.
>> Така че това, което е стойността на замяна?
Току-що ви казах.
Int, нали?
Подобно на това, както и след това, че е ще отнеме две цели числа.
Така че това ще отнеме инт А и INT б, като това.
Така че това, което е RandomInt ще направя, е, че ще
да се върне някаква случайна стойност между тези две стойности.
Така че това ще бъде по-голяма от по-малко от б.
Така че аз мисля, че най-вероятно може да се предположи, че а е по-малката от двете стойности.
Така че, ако ние се занимават с случайността, какво функция
видяхме, че ни дава случайни неща?
STUDENT: Drand.
Дейвин: Drand, точно така.
Така че, ти започваш да се вероятно искате да използвате вашия drand.
Така че може да се каже инт случаен принцип, и ние ще само да кажа, че е равен на 0 в момента.
И те са отиваме да се каже, OK, случайни равни drand 48.
И какво означава това се върнете?
Какво прави тази функция ви даде?
>> STUDENT: Между 0 и 1.
>> Дейвин: Да, между 0 и 1.
Така че това ще be--
>> ROB: И това is-- мисля ние ще ви кажа това.
Например, можете да използвате drand 48.
Можете да проверите това на последната изпита.
Но ние сигурно ще ви каже, да използвате drand 48, които
връща плувка между 0 и 1.
>> Дейвин: Да, да, аз съм сигурен, че на изпита
той ви казва, че най-вероятно искате да използвате drand, да.
Така че ще се върне някаква стойност между 0 и 1.
И след това, което сте ще искате да направя?
Е, искате да се размножават по-- чакай, аз мисля, че е като това, съжалявам.
Аз просто ще го направя.
Не знам.
>> Така б минус.
Така че, защо б минус?
Така че нека да кажем, че drand дава назад на int-- OK, аз просто ще свърши останалото,
така плюс.
Така че това, което does-- у е б минус.
Така че нека да кажем, че drand дава назад максималната стойност, която би могла да
ти дам.
Какво, че ще бъде?
STUDENT: 1.
>> Дейвин: 1, нали?
Така че, ако това е едно, а ти си се умножи по б минус,
добре, че е само разлика между минус A.
И ако тогава се добави, че обратно върху, който е какво?
Това е в общи линии да б.
Това прави ли смисъл?
>> Студентът: Да.
>> Дейвин: Така че, ако това е максимумът стойността, която тя би могла да бъде,
това ще бъде една.
И тогава това е само разлика между двете.
Добавяне на, така че това е ще се върне на случаен принцип.
И в случай, че ъгъл drand дава назад 1,
случаен просто ще бъде ефективно вграж.
Но това е максимумът може да бъде.
Така че, ако това ще бъде по-малко от това, така че нека да кажем, че това е като 0.9,
така че след това 0,9 пъти б минус а ще бъде по-малко
от разликата между б минус.
>> И след това, ако се добави, че към А, след това тази стойност е
ще бъде по-голяма, отколкото, защото добавяте нещо към него,
но тя ще бъде по-малко от б.
Така че, ти започваш да се получи случайно номер, защото се обаждате drand.
И това ранд, че на случайни числа е ще бъде някъде по средата на
и б.
Това прави ли смисъл?
>> ROB: Само за да го сложи в конкретни числа, така че
нека да кажем, че искаме да вземем една случайно число между 7 и 10.
Така б минус е нашата гама.
Така че има набор от три номера, които искаме да избирате.
И след това се умножи че между 0 и 1, 1,
ако след това ни дава some-- нека да кажем, че ни дава 1.5.
>> След 1.5, искаме да отидем 7-10.
Така 1.5 плюс 7 ни носи обратно в нашата 7 до 10 кръг.
И след това ние сме го приберете вътре цяло число, така че скъсен до 8.
И тогава ние просто се върне това.
Така б минус е нашата гама.
а то се измества нагоре в цифрите че искаме в рамките на този диапазон.
Така че между 7 и 10, и тогава ние може да се върне това, което в крайна сметка с.
>> Дейвин: Да, хубаво.
>> ROB: Благодаря ви.
>> Дейвин: Да, какво има?
>> STUDENT: Трябва ли да го ползвате за всякакъв вид Грешки ASCII когато we're-- ако drand е
връщане на плувка [недоловим].
>> ROB: Така че просто като Роб каза, защото случайно не е едно цяло число,
така drand ще бъде плувка.
Така че и след това се умножава по.
И вие може да получите някои вид на плувка номера.
И след това ще се съкрати.
>> STUDENT: OK.
Дейвин: Да.
ROB: И ако компилатора са да предупредя вас за, като загуба на точност,
просто хвърлени пад в там, и след това е добре.
Дейвин: Да?
>> STUDENT: ще го има на същата вероятност за получаване,
като, б или [недоловим]?
>> ROB: Така is-- съм всъщност wondering-- е RandomInt трябвало
да бъде номер от по-малко от б?
Например, ако това е между 7 и 10, какви са възможностите?
7, 8 и 9, или 7, 8, 9, 10?
Дейвин: забравям.
На проблем set--
>> ROB: Аз мисля, че е 7, 8, 9.
>> Дейвин: Той изрично казва нечии включително и един Изключителната.
>> ROB: Да.
>> Дейвин: Но аз don't-- съм not--
>> ROB: Така че аз мисля, че това е които не са включени в този случай,
има равен вероятност на 7, 8 и 9.
Няма никаква вероятност от 10.
Дейвин: Да?
STUDENT: Аз имам един въпрос.
Ние искаме да се дефинира функция връща не една стойност, но масив.
Тогава какво ще бъде синтаксис, след като се върне?
>> Дейвин: ОК, така че след това ви would-- след завръщането?
Така че нека да кажем, че е обявил масив някъде там.
Тогава просто ще се върне името на масива.
>> STUDENT: Добре, благодаря ви.
След това просто се върна с A--
Дейвин: О, чакайте, толкова съжалявам.
Въпросът е как искаш да се върне масив.
>> ROB: Въпреки че не може да бъде обявена за масив
на стека или нещо подобно.
Тя би трябвало да бъде нещо malloced, защото изчистване
Ето как можете да получите около автоматично разпределение на паметта.
>> Дейвин: Да.
ROB: Как можете да получите около местен обхват.
>> Дейвин: Но вие ще просто се върнете си name--
>> STUDENT: [недоловим] това не е един стойност, например, два номера, така че
[Недоловим].
>> Дейвин: Не можете да се върнете няколко номера.
Вие не можете да, като, return--
>> STUDENT: Говорих за връщане масив или нещо подобно.
>> Дейвин: Да, така че въпросът е мога ли да се върнете няколко стойности.
Вие не можете да се върнете няколко стойности.
Вие не можете да, като, да върне след това върнете б или нещо подобно.
Защото след като се върнете, вие върнат от функцията.
И тогава функцията е направено, и като Роб каза, е в стека.
>> Така че всичко, което памет точно получава връща към компютъра.
Всичко бива забравено, основно.
Така че, ако искате да се върнете многократно ценности, които трябва да се върне масив,
И начина, по който прави това е mallocing.
И тогава ще се върне х подобно.
По принцип, просто се върнете името.
И когато се върнете нещо подобно, вие сте
всъщност не връща стойност.
>> Така че нека да кажем, че се съхраняват стойностите в масив.
Вие не сте в действителност връщане на тези ценности.
Например, ако аз се върнах на INT, аз съм наистина връщане копия на стойностите.
Но, ако аз трябваше да се върне нещо подобно на това,
Аз съм връщане на референтната към тези ценности.
Така че аз съм връщане, общо взето, по- памет адрес на стойностите.
Това прави ли смисъл?
Студентът: Да.
Дейвин: Ница.
Да?
>> STUDENT: Когато сте използване drand тук,
Имате ли да се сложи Srand преди това?
>> Дейвин: Не, не, аз не мисля така.
>> ROB: Да, така че имате да се каже нищо за Srand?
По подразбиране от вас никога не казва Srand изобщо е просто да се направи Srand на нула.
Така drand по своя собствена воля работа.
И това автоматично ще семена с текущото време, е това, което го използва.
Дейвин: Да?
STUDENT: ли [недоловим] с цифрите?
Дейвин: Да, можете.
STUDENT: Така бихте могли да се каже, като 4 пъти 2.
Работата е там, че не можем да приемем, тогава INT е четири байта.
The only--
>> Дейвин: Искам да кажа, за теста можете.
[Смее се]
>> ROB: Мм, не.
Дейвин: Да, да можете.
Ако те питат колко е голям пад е, не може да бъде, като, четири или осем.
ROB: О, така че ако въпрос е специално
като, ако това е проблем за кодиране, трябва да се каже, размер на инт.
Ако това е маса, или тя казва колко байта,
Вие не трябва да попълнят в размер на цели числа.
>> УЧЕНИЦИ: [смее се]
>> Дейвин: Добре, така че защо да е размер на INT важно тук?
Така както, ако отиваме на 32-битов процесор или нещо подобно,
След това ще бъде четири байта.
Но на някои от по-новите неща, той може да бъде това?
Тя може да бъде осем, нали?
Така this-- ако просто трудно код четири, след това на някои машини, той ще работи.
Някои машини, няма да работят.
Но ако на теста ние сме като колко голям е инт?
Сложете четири.
ROB: Точно така.
Дейвин: Да?
STUDENT: Значи, защото ние сме обявяване [Недоловим] вътре във функция,
трябва да сложим 3 вътре тази функция?
Или можем да го използвате навън?
Дейвин: Можете да го използвате извън тази функция.
Така той иска безплатно.
>> STUDENT: Загуба песен на мястото, където [недоловим].
>> ROB: О, фрий не happen-- това е част от магията на изчистване
е, че вие ​​не сте ограничена до местната обхват.
Вие имате пълен контрол над колко дълго си променливи живеят.
Така че ние наричаме изчистване тук, може да да бъде напълно самостоятелна функция.
Тя може да бъде 10 часа по-късно че ние най-накрая се обаждате безплатно.
>> Дейвин: Така например, като, няколко седмици от сега, когато най-накрая
направете си речник правопис psets, започваш
да има някаква функция, която създава т възли.
Значи mallocing тона възли в тази функция.
И след това по-късно в отделна функция, вие сте
ще искате да освободи всички тези възли.
Така че можете да буквално преминава към освободи указател, така че адрес на паметта
на това, което malloced.
И това ще се оправи.
Вие не трябва да се освободи, като в една и съща функция.
Да?
>> STUDENT: Така изчистване променлива [недоловим] навън?
Е, че това, което казвате?
Дейвин: Чакай, казваш това?
Извинете.
>> STUDENT: Ако променлива изчистване може да бъде безплатно навсякъде в кода,
След това те могат да бъдат достъпни навсякъде в кода?
Можеш ли да ги задържи местното?
>> Дейвин: О, тя попита: като, променливата, like--
>> ROB: Значи вие все още трябва да има някаква справка
до блок от паметта на изчистване на.
Така че тук, ние сме връщане х.
STUDENT: О.
ROB: Ако не се върне х тук, а това са просто нищожни
тогава няма да има достъп до показалеца, който е malloced,
и това е изтекла памет.
>> STUDENT: OK.
>> Дейвин: Така като, нека да ви кажа, има това като, точно тук.
ROB: No.
Дейвин: В моята основна функция, не мога просто се обадете тази х и да бъде, като, OK,
в тази функция, аз направих това.
>> ROB: Точно така.
>> Дейвин: Така че аз отивам да се обадя х в, като, основен или нещо подобно.
Вие не може да направи това.
Ти започваш да се върне нещо.
Но какво ли ще се върне?
Ти започваш да се върне адрес на паметта.
И тъй като се върнете с памет адрес, който може да бъде достъпен другаде.
Всякакви други въпроси?
Да?
>> STUDENT: Дали функцията по-горе е проверка за [недоловим]?
>> Дейвин: Защо не трябва да направя това?
STUDENT: [недоловим].
Дейвин: Защото си не mallocing нищо.
Така че това е not-- Да, това е не като низ с.
Това е показалеца някъде.
Това са само ценности.
STUDENT: OK.
Дейвин: Да.
Нещо друго?
ROB: Да?
STUDENT: Но когато [недоловим]?
>> ROB: Така че, за да се освободи памет, бихме казали тук.
Така че х е нашата показалеца блока на паметта.
Освобождаваме че показалка.
И не е задължително да го направите тук.
Можем да го направим навсякъде.
Но ти се обадя само безплатно на нещо, което изчистване възвръщаемост.
Така изчистване, тук, се върна това, което се съхранява в х.
Така че ние можем да се обаждате безплатно на х.
Всякакви последните въпроси?
>> Дейвин: Всички последните въпроси?
Така ли?
>> STUDENT: За съжаление, може ли отново да се обясни Затова ли ще освободи там?
Защо [недоловим]?
>> Дейвин: Защото тук?
>> STUDENT: Да, като веднага след.
Дейвин: Вероятно не искам безплатно от тук.
ROB: Може би не би.
Дейвин: Да, това ще направя нищо.
Това би, като, да създавате памет, направете нещо за него,
и след това незабавно да забравите за нея, да.
>> ROB: Но можем да направим, като, тук по някаква причина.
Можем да кажем, инт звезда у равнява връщане масив.
Направи някои неща с Y, може би отпечатате съдържанието.
И тогава, най-накрая, ние сме направили.
Ние можем да освободим г.
STUDENT: [недоловим].
Дейвин: Трябва ли да превъртите надолу?
Благодаря.
ROB: Ница.
>> Дейвин: Добре, това е всичко.
ROB: Добре, добре.
Добър късмет.
>> Дейвин: Ако имате въпроси, пишете ни.
Добър късмет.