АНДИ Пенг: Добре. Добре дошли на четири седмици на раздел. Това е един прекрасен ден тук в Ню Хейвън така че аз наистина мисля, че редките разсейване на децата, че се присъедини към мен за точка днес, благодаря ви. Така бързо, точно преди да започнете, в дневния ред за днес. Ние ще отидем на няколко кратки съобщения. Ние имаме една наистина чалнат график идва в следващите две седмици или така, така че ние отиваме да разясни това. Второ, аз знам, любимата topic-- всеки Сигурен съм, че това се разтопи ума си по време на лекция, не се притеснявай, Аз все още вид не го получи. Това е добре. Това беше шега. Аз всъщност правя го получи. Но аз ще се уверите, че вие го получавате, също. Така че ние ще прекарат наистина, наистина добра сума време да говори за показалеца днес. Както можете да видите, Канди разговор е огромна днес. Ние наистина се случва да се запази that-- Да, точно така. Продължавайте да приемате бонбони. Отивам да ги прехвърлят около точно сега. Няма проблем. Отиваме да се опита наистина да запази хората на кръвната захар защото, че мозъкът ще изгори някои кислород днес, защото указатели са много, много трудно. След това ние ще говорим за управление на паметта, която е вид в една и съща област. И ние ще се движат за да пренасочване и файл I / O, които са само на синтаксиса, хубаво неща, които ние трябва да говорим. И след това на последно място, аз съм Ще се опитаме още веднъж да напусне като 10, 15 минути за pset4. Това е поради няколко дни, така че ние сме Ще наистина вид ви дам някои полезни съвети, ако вече се започна с това. Готино. ДОБРЕ. Така че някои съобщения за тази предстоящата седмица. Окачествяването. Аз не знам в действителност този момент колко от вас момчета всъщност са в моята можете section-- OK там? ДОБРЕ. Но, за тези от вас, които са в моята секция, само няколко коментира окачествяване. Първо, наистина добра работа за коментиране. Тези от вас, които не коментирам, вие знаеш кой си, защото вероятно имам някои точки за стил dinged тази седмица. Просто се уверете, че във всичките си програми добавете няколко коментари. Наистина, стил е много лесно да се получите правилните точки, колкото има обхват. Така че за нас, просто се уверите, че сте натура за добавяне на кратко описание във всички програмите си за това, което правите. Secondly-- това е огромен проблем за много от TAS това минало week-- така че не забравяйте да качвате правилната папка с правилно наречени програми. И причината, поради която ние питаме за това е, защото ние, в хода на категоризация, всъщност се стартира скрипт на вашия код, който изтегля автоматично всички ваши psets, работи вярност тестове на всички от тях, и след това се качи вашите резултати директно в gradebook. Въпреки това, във всеки един момент, ако име неправилно вашата програма, винтове го цялата програма за всеки. И така, с основание, тази красива скрипт че сме написали, че прави всичко това за нас, напълно катастрофи, ако не разполагате програма на име правилно. Така че просто да качите до правилните папка, ги нарича правилно, и след това живота е добър. Аз да си psets назад до вас, момчета ранни защото съм се да ги клас бързо. Да. ДОБРЕ. И също така ние ще говорим about-- Yale има много, много чалнат график в тези следващите две седмици. Така че тези от вас, момчета, най- Харвард, това не се отнася. Но за нас прекрасни деца в Йейл имаме нещо, наречено есен break-- съжалявам, Harvard-- където имаме пет почивни дни на училище. И докато това е прекрасно, това вид обърква нашия pset ритъм защото psets се дължат четвъртък, петък. И така, ако ние не сме тук Четвъртък, петък, ние не може да има работа за вас, момчета дължи в четвъртък, петък. Така че това, което ние ще направим is-- сме като 99% сигурен, че това е, което се случва, може да има известно промени, но аз мисля, че е subtle-- се ние ще have-- тази седмица е нормално. Така че ние имаме нашия раздел за Вторник, последвани от работното време през останалата част от седмицата и след това pset4 се дължи в петък. Тогава, както и вие, момчета, всички знаем, като Аз ви напомни момчета миналата седмица, ние имаме нашата викторина 0 идва в сряда. И така, да бъдеш студент себе си, Знам, че много малко от вас момчета ще бъдат действително работещи по pset5 двата дни преди викторина. Така че това, което ние ще Вероятно свърши това е, че в понеделник вечер, отиваме действително, 5:30-7:00, имат кратък преглед сесия по теми, обхванати. Неясно ако това е преглед на сесията или Q & A. Това ще бъде нещо като преглед форма, в която ще разгледаме някои теми от значение за вас, момчета. И след понеделник и вторник нощувки от тази седмица 8:00-11:00, ние ще имаме работно време. Тези работно време ще се най- вероятно да бъде повече от просто идват в, попитайте СНС вашите въпроси относно всякакви концепции вие сте объркани за, и те вид ще отида с вас и преглед на концепции за теста. Quiz 0, ако сте в Понеделник, сряда раздел, ще бъде в сряда по време class-- в сряда по време на тренировката. И тогава, ако вие сте на Вторник, раздел четвъртък, също ще бъде по време на тренировката в четвъртък. Вие наистина не може да избере кой да отидете. Ако сте понеделник, сряда, вие трябва да отидете до сряда. Ако сте във вторник, четвъртък вие трябва да отидете до четвъртък. Но след тази нощ, ни прекрасен персонал, ще има гигантски викторина класификация на парти в които ние ще се заемем вашите резултати с вас тази нощ. В колко часа? Неясно, кой знае, но това ще стане се свържем с вас в рамките на 24 часа така че вие, момчета, надявам се има някаква обратна връзка от петък. И тогава имаме наистина чалнат седмица. Така pset5 е един от най- трудните psets на годината. Така че съжалявам, момчета. Това, което ние ще се опитаме да направите, е да искаме да имаме някои действителната подкрепа, която през уикенда. Защото, както вие виждате, pset се дължи преди падането почивка. Ние не разполагаме с подкрепа за вие, момчета, през есента почивка и така ние наистина вид искам да израза това като, нека да приключваме с, нека да работим много, много трудно тези следващите две седмици, да получат този тест и се добавят тези две psets направено с и след това вие имате хубава релаксираща седем дни без да мисля за CS. Така че, за които да да се случи, ние сме най-вероятно ще се премести моята секция до неделя следобед. Тя ще бъде заснет така че няма притеснения, ако не можете да дойдете. Но онлайн снимките ще да има и достъпна така че вие ​​имате неделя Понеделник, вторник, за да работят по pset5. И след това е есента счупи и не CS и след това се върнем назад и да си в сивото. Но това ще бъде прекрасна седмица за есента почивка и ние наистина искаме да го направи като стрес безплатно за всеки, които е възможно Ето защо ние се премества на pset се дължи преди падането почивка, а не след това. Защото it's-- Искам да кажа, аз се чувствам вид като го обезсмисля като крайният срок след падането на почивка, ако има никаква подкрепа във всеки случай по време на падането почивка. Така че това е rather-- Мисля скоро бихме се съсредоточи върху това сега. Дали някой има въпроси за това график? Всичко объркващо? Да. АУДИТОРИЯ: Обичате ние все още имаме лекция на 21? АНДИ Пенг: Да. Така на 21, там ще бъде лекция, че е на живо от Харвард. Аз не знам дали Дейвид е на снимките нея или ако той всъщност лекции, но това ще бъде на разположение онлайн за вас, момчета до интернет. Така че просто се уверете, че обособяването на час някъде през есента на почивка така вие може да улавят нагоре на тази лекция. Да? АУДИТОРИЯ: Да. Извинете. Имам тук един couple-- АНДИ Пенг: Не се тревожете. Ето, вземи бонбони. АУДИТОРИЯ: Хей, аз уловени това. Така че просто да обобщим, не утре, но Сряда, след това, ние имаме викторина. АНДИ Пенг: Правилно. АУДИТОРИЯ: И това ще be-- какъв е форматът на теста? АНДИ Пенг: Oh. Така че ние ще изпратим имейл, че обхваща всичко, което по-задълбочено. Но, по същество, тя просто покрива Основните теми, които вече са обхванати през първата половина на семестъра. Ние ще трябва преглед сесии и въпрос и отговори така че няма притеснения за това. Но ние ще се случва през това също. АУДИТОРИЯ: Дали тя ще бъде, ние въвеждат нашите компютри и код there-- АНДИ Пенг: No. Това ще бъде вие ​​писане и отговарят на въпроси на ръка. АУДИТОРИЯ: Oh. АНДИ Пенг: Затова ще дам освобождава практики и неща така вие може да искате да отидете може би обратно и да пренапише Mario на ръка само да гарантира, че вие ​​имате представа за това как да направите това. Защото понякога, когато ти пиша от вас ръка забравяме запетая и неща и това е много лошо. АУДИТОРИЯ: Няма ли да бъде [недоловим]? Подобно, вие получавате точка и запетая на your-- АНДИ Пенг: Да и не. Ще поговорим по-задълбочено по отношение на начина на оформлението на викторина е и как ние ще клас. Но по същество, просто знам, че общ формат ще ви бъде момчета или устен code-- отговаряне основни въпроси. Ако ви попита, какво е библиотека? Вие, момчета, трябва да знаят какво е библиотека прави и пише, че надолу. Или мога да кажа, се напише програма, която отпечатва Hello World към екрана. Вие, момчета, ще напиша, инт основна нищожен ФОРМАТ здравей свят и запетая. Да. АУДИТОРИЯ: Така че това не се случва да бъде навсякъде [недоловим] трудност на проблема зададете? АНДИ Пенг: No. Не. Ние won't-- да. Напиши целостта на игра на 15 за 20 минути, отидете. Не, това няма да бъде толкова. Не. АУДИТОРИЯ: OK. Така, че е сряда. През това ние също седмица задали най-трудният проблем? АНДИ Пенг: No. Така че проблемът го настроите да се дължи в деня преди падането почивка. The schedule-- имейла всъщност изпратим 20 минути преди отношение на всичко това. Така че вие, момчета, просто проверяват електронната си поща. Тя ще бъде там. Да. Няма проблем. Готино. Всякакви общи въпроси, свързани с съобщения, класифициране, викторини, преди да се потопите право в указатели, които ще консумират по-голямата част от времето си точка днес? Готино. Всичко е наред. Същото направиха и вие, момчета, всички гледат тази lovely-- Аз не знам какво те го наричат. Нещото, където claymation Самата взривиха защото тя не използвайте показалеца правилно. Е, вашата програма ще Вероятно самата взриви, ако да не се използва правилно указатели, както добре. Така че ние ще направим сигурен, че няма да се случи. Днес ние ще направят някои показалеца забавно. Отивам да разясни нещата толкова гладко, колкото аз мисля, Възможно е в малък период от време. Но има толкова много за покриване че аз наистина вие искате, ако не разбираш нещо, да не само да ме продължавай. Защото ако не го направите разбирате нещо, най-вероятно няма да разберат нещо казвам след това. Така че, моля да ме спрете и да зададете въпрос. Защото всички видове на снежни топки заедно. Подобно, указатели водят в памет оловото в други неща. И така, ако вие не разбирате указатели, спрете мен и ние ще го разбера и животът ще се оправи. Готино. Така че колко от вас, момчета, в лекция, когато Давид бе споменато указатели, мозъка си вид се превърнаха в желе? Да. Good. Ние ще се опитаме да де-желе вашите мозъци днес. Отиваме да наистина систематично проверете какво точно указател е, това, което прави, и как можем да ги използваме. Така че всичко, така pointers-- обикновено с променливите ние сме били с помощта на кодиране, като променливи като цели числа или низове или плувки, всички те са по същество на стойност не им възложени, както и един адрес сочещи към тази стойност. Така че аз отивам да се направи това точно сега. Имаме почти няма тебешир, но това е ОК. Така например, обикновено начинът, по който ние сме Използвам променливи е ние създаваме Името на променливата от тип INT, нека Просто кажи. Така че тук ние имаме инт х и ние сме инициализиране, че инт до 50. Така че тук, в този блок от паметта на нашия компютри, които сме съхраняват редица 50. Така че, когато указатели влезе в игра е че компютърът ви itself-- харесват, тук, физически в твърдия диск в RAM на моя computer-- тя има само ограничен количество памет. Не може просто да се запази съхранение на неща на върха на нещата на върха на нещата и ги всички. Така че начинът, по който ние динамично разпределя памет, за да бъде в състояние да съхранявате това, което искаме и достъп до него, е от с указатели. Така че представете си в паметта си пространство, нали. Ако това е RAM на вашия компютър, имате тези малки парченца или блокове или байта памет в which-- това са само малка блокове, които са били разпределени върху твърдия диск или RAM на компютъра, и във всеки един от тези блокове можете да съхранявате различни неща. Така например, един масив в този пример тук е един байт, който е състояща се от осем бита. Броят променя в зависимост от операционната система на вашия компютър. Например, колко от вас имат чували за 32-битова срещу 64-битова операционна системи? Точно. Така че всичко, което е казвайки е, че memory-- че начинът, по който вашия компютър управлява паметта е различен. Ето защо това е наистина важно да се разбере защо паметта сама функции скоро отколкото да обърне внимание на цифрите. Така че ние не ми пука колко голям този масив е, ние просто трябва да се грижи за колко голям имаме нужда от едно цяло число, за да бъде, колко голям Нуждаем ли се от низ да, колко голям е указател? ДОБРЕ. Така че това ще бъде много по- на тежка, плътна информация. Отивам да ви дам момчета за няколко комично облекчение моменти тук. Вие, момчета, всички трябва да са в състояние да се разбере това сега. Защото ние знаем, че указатели са адреси, и тези, които са различни от променливи. ДОБРЕ. Готино. CS вицове са най-добрите, така ли? Така че начинът, по който да отидем за създаване на показалеца е много специфичен вид на синтаксис. Както при всяко създаване тип променлива, това е ще бъде определена синтаксис, които използваме, за да го създадете. Така че, когато се обявява всеки показалеца, указател е само essentially-- Мисля, че най-важното част от указатели е като има предвид, че една променлива има както и стойността на един адрес, указател е адрес. Неговата стойност е адрес. Така че това е един адрес се съхранява на различен адрес. Ако това прави никакъв смисъл. Ние ще разясни по-подробно, но това е родово формата на why-- за това как се съхранява на принтер. Така че начинът, по който можете да създадете указател е от това, независимо от вида на данните че показалецът се случва да бъде съотнасяне и then-- с star-- и след това името на показалеца. Така че тук, ако искахме за създаване на показалеца, че насочен към цяло число, и Исках името на показалеца, за да бъде х, ние ще направим инт звезден х. Да? АУДИТОРИЯ: И така, ако следния можете линия направя инт х, воля за инт звезден х показва местоположението на х можете да започнете определяне след това? АНДИ Пенг: Наистина добър въпрос. Ние ще отидем в тази Няколко плъзга по-късно. Да. И тогава едно и също нещо с Чар и също нещо поплавъци. Просто знам, че в този момент ние създадохме указател, не сме реално фигурира тя да се изравни нищо все още. Не сме всъщност го съотнесени. Същото нещо тук, когато създадете променлива, сте създали името на променливата, не сте всъщност зададете стойност към нея. Същото е и тук. ДОБРЕ. И как ще се определят стойности за указатели? Това е чрез съотнасяне и dereferencing. Така че начинът, по който можем да справки а varia-- указател, по същество се върнем на адреса в паметта на която променливата се съхранява. Така че, ако имах pointer-- аз ще изготви този път да стигнем до следващия слайд, но просто знам, че по същество, на and-- амперсанд и всичко, което variable-- прави се да ти кажа адреса на мястото, където нещо се съхранява. И dereferencing е обратното на това, което е само на звездата. Звездата просто дава действителния данни, съхранявани на този адрес. Така че един дава адрес складират на адрес, от друга страна дава действителния стойност съхранява на адреса. Така двамата даде можете различни неща. За пореден път, стъклата са всички онлайн така че не се тревожете ако вие не можете да копирате това надолу във времето. Така че нека да погледнем в този пример тук. Така че ние имаме една гигантска памет масив тук, нали? Когато ние просто трябва блокове памет, или байта памет, в която ние може да съхранява различни неща. Нека просто кажем, това са най- адресни точки в паметта. Така по всяко време имате - вижте 0x, всичко, което се казва, е, че Това е шестнадесетични цифри. Както вие, момчета, всички знаем, цифри може да се основава на различни бази. Base 10 е как ние обикновено тълкува номера. Има също така и база 2, което е двоичен. И в този случай, шестнадесетичен е база 16. Това е просто различен начин да се каже от нула до 10-- или нула до девет и след това също A, B, C, D, E, F. Също референцията различни номера. Давид мина този в лекция за кратко. Ако вие, момчета, са объркан, просто го Google. Там наистина е много лесно начини да се научи какво шестнадесетичен цифрен е. Всичко това е наистина от значение точно сега е за вас момчета, за да знаят, че шестнадесетични цифри в C казва, че обикновено you-- ви казва, че това е една показалка. Или това е адресът. Така че в този пример тук, инт х е равно на 5. Ние сме създаване на integer-- Съжалявам, променлива от тип число и ние сме го инициализиране до 5. Така че тук, на нашата вградена памет, което можем се види, че х е на адреса на 0x0 и стойността, която сте съхранява вътре в него е 5. Това би трябвало да има смисъл за всички, нали? ДОБРЕ. И тогава какво сме направили във втория ред на кода е, че сме създали указател от тип инт. Това е, което INT звезден показалеца се справя. И това се равнява на тази на амперсанд х е ви дава адреса на нещо. Така че на адреса на х в този пример е 0x0. И така, това адрес е съхранява в които указател. Това прави ли смисъл на всички? Така че мисля, че на this-- мисля за pointers-- тук в Йейл имаме система на пощенска кутия където всеки студент има мейлинг адрес, където можете да отидете в мазето на LW и може просто да отидете и да вземете от този адрес каквото ви трябва. Същото нещо се случва тук в компютър. Вие имате тези паметта байтове, които можете да съхранявате информация в, но за да се знае кои парчета информация Среща се от това, което се опитва да намери и къде, имате нужда от показалеца, че ви казва как да отида там. Така например, за мен, моята пощенска кутия, Имам конкретен пет цифрено число. Това е моя адрес. Така че мога да отида физически в паметта, Мога да погледна на адреса, Мога да отида до тази пощенска кутия и достъп до данните вътре. Това прави ли смисъл да Всички Вашият компютър е по същество прави точно същото нещо. Така че всичко, показалеца се прави е, че това е просто създаване на паметта и неговата данни памет е всъщност адреса на нещо друго. След това можете да отидете и да намерите това. Всеки добър? Всеки добър с мен досега? ДОБРЕ. Готино. Всичко е наред. Така почти същото, както преди. Така че ние имаме, първо, променлива призова х в която case-- Отивам да промените тази стойност до 5. Нека просто кажем, на адреса на този в паметта е 0x0. 00. Страхотен. И така, на втората ни ред код, ние сме Ще създадете указател наречено КОП показалка. И адреса на това, нека само да кажа, че е 0x01 в паметта. И ние действително искаме да store-- амперсанд X дава адреса на това, което е х. И адреса на х е 0x00. Така че това показалеца сега всъщност има адрес съхранява като нейната стойност на това, което е х. Всеки с мен досега? Готино. И след това, начинът, по който ние ще копирате, че, е, ако искаме да декларира и инициализира друг блок памет от тип инт. Нали така? Това ще бъде едно цяло число. Тя ще се нарича копие. И ти започваш да get-- така звезден показалеца на дава действителните данни от този адрес. Амперсант дава адреса, звездата дава данните. Така данните на показалеца. Този показалец сочи към 5. И така, тази функция here-- звездата pointer-- отива, получава каквото и да е в този блок и го съхранява тук. Всеки ясно как е станало това? Така двата оператора полето there-- амперсанд и star-- просто правя различни неща когато се използва върху указатели. Един стане ли адреса, един стане ли действителната стойност. Така че не забравяйте, когато вие, момчета, са кодиране, че вие ​​не бъркайте двете защото те са много различни. Тук имаме хубав пример за 0x01. Това е една наистина хубава малък брой да се помни. В действителния вашия компютър започваш да имат гигантски брой задника, че е нещо, това не е хубаво, не приятно. Това ще бъде някаква стойност боклук. И така, това ще е много, Наистина обърквам вашите програми. Това е много важно точно сега, че имаме основите надолу за why-- харесват, това, което се случва, когато физически сте с тези блокове от код. Everyone-- така ли? АУДИТОРИЯ: Така инт х е равно на инт копие? АНДИ Пенг: Не, защото в този случай, инт x-- стойността на x-- равнява 5, нали? И тогава инт копие равнява 5. Така че, ако ви се налага да ги приравняват към помежду си, защото те са цели числа, да, те ще оценят, за да е истина. Но ако те са низове в паметта, като този, който направи Давид време например, това е различно, защото те се позовават на адресите на местата в паметта и те ще се равняват на невярна. Така че тук би било вярно, защото вие сте директно сравняване values-- integers-- но в останалите сте справочен точки. Тъй като низ е в масив, и all-- ние ще говорим за това later-- но масив по същество е просто указател към един куп символи в паметта. Така че тези, които са малко по-различно. Но в този случай, да, бихте могли да направите това. АУДИТОРИЯ: Можете ли да обясните адреса на копие? АНДИ Пенг: Да. Така че това е just-- I не въведете стойност но това е само някои случайни друг стойност на боклука, че ние не се грижи за. Защото след като започнете програма ти осъзнаваш, че ние всъщност не ми пука какво по действителните адреси са, ние просто трябва да знаете това, което е най-адресите. Да. АУДИТОРИЯ: Звездата в непосредствена близост до INT относно втора линия, това е различно than-- АНДИ Пенг: Да. АУДИТОРИЯ: --the dereferencing и съотнасяне звезда? АНДИ Пенг: Да. Така авторите на C-- който реших да напиша на езика на C-- Не беше много умен. Те не бяха много умни, опитвайки да разбера защо трябва да правим това. Ако тя ми беше, определено бих използвате два различни герои. Но те бяха решили да използват същата. Така звездата след пад, който казва на компютъра че сте на път да създаде показалка. Но, ако се опитвате да сочен something-- с други думи, отидете на адреса и дръпнете данните от somewhere-- звездата се използва по различен начин. Така че вие, момчета, просто бъдете внимателни за не се обърква двете употреби. Готино. Да? АУДИТОРИЯ: Така че просто да се повтаря, за да уверете се, че аз съм following-- АНДИ Пенг: Totally глоба. АУДИТОРИЯ: --В лявата страна на този слайд, ние правим нещо, което знаем. Ние заявяваме цяло число [Недоловим], които са равни на 5. АНДИ Пенг: Да. АУДИТОРИЯ: Точно така. И тогава ние имаме нещо пад звезда и който казва, че, OK, вид ни харесва декларирани цяло число, сега ние сме за обявяване на показалеца. АНДИ Пенг: Правилно. Правилно. АУДИТОРИЯ: Така ли е? И нашата показалка е КОП. АНДИ Пенг: Да. Името на показалеца е КОП. Pointer. АУДИТОРИЯ: И тогава се се равнява на NX, че просто казва C че тя иска достъп до стойността на число x-- стойността, която число х е назначен. АНДИ Пенг: Бъдете внимателни, защото амперсанд х всъщност разказва you-- компютъра, който Искам да дръпнем адреса на това, което е х. Така амперсанд дава адрес, звезда дава стойност. АУДИТОРИЯ: Така че ние искаме адреса. Да кажем, че х е at-- АНДИ Пенг: Ние всъщност знам какво х е, нали? Защото знаем, че х was-- съм измислям, но нека просто кажем, произволно, че е 0x00. Нали така? Така че ние знаем адреса е 0x00, и така, когато отидем и амперсанд х, ние знаем, че това следва да оцени до 0x00. Ето защо ние се съхранява, че като стойността на нашия указател. Това прави ли смисъл? АУДИТОРИЯ: Да. И копие отива сочен ptr-- АНДИ Пенг: Точно така. АУДИТОРИЯ: --which е указател, че ние сме заяви, че ни е казва, адрес на цяло число х. АНДИ Пенг: Да. АУДИТОРИЯ: И в този един случай, звезда КОП е равна на стойността на х 5 което е равно. АНДИ Пенг: Правилно. АУДИТОРИЯ: Cool. И това е по-прост начин да се получи или че е, че само way-- АНДИ Пенг: Така че точно сега не изглежда много логично за нас да прекарват цялото това време правим този супер сложно нещо, когато всичко, което сме направили е просто създаване на две числа с стойността на 5, нали? Това няма смисъл. Но след като ние ще отидем заделяне на памет and-- пускаме разясни защо това може да е удобен и полезен по-късно. Повярвай ми, когато казвам, ние не само създадете тези произволни функции за вас момчета да учат, защото ние сме опитвайки се да се забъркваш с вас. Има действително използва за всички от тях неща и ние ще говорим за тях. АУДИТОРИЯ: Awesome. АНДИ Пенг: Да. АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Добър въпрос. АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Това не е. Това наистина не е. АУДИТОРИЯ: --two променливи които също равно [недоловим]. ДОБРЕ. АНДИ Пенг: Да. ДОБРЕ. Преди да се премине, е всеки, ясно? Знам, Taylor, имаш в малко по-късно. ОК е. Това е онлайн. Ще гледате първите 20 та и вие ще бъдете всичко добро. ДОБРЕ. Готино. Всичко е наред. Така че това е по същество един вид подобно нещо, че ние просто го направих. Това е просто в графична форма. Ако ви се налага да следите какво Просто се случи, инт х е равно на 5, всичко, което сме направили в този момент е създадете променлива наречена х от тип инт. Отиваме, за да съхраните стойност 5 вътре в него. Няма по показалеца, защото ние не сме всъщност създаде показалеца все още, нали? И тогава в следващия линия, инт звезда показалеца, това е, когато сме в действителност физически създаване на показалеца и ние сме за създаване, че равна на или съотнасяне показалеца, за да амперсанд х. Кое е мястото, където независимо в коя част памет това се случи да бъде. Аз всъщност не се притеснява изработване на стойност не и този път. Но в този случай, тази точка щяхте да сте равно на това. И тогава там долу, звездата показалка е dereferencing. Ето къде сме издърпване на информацията. Така, че стойност на х е реално ще бъде равен на 35. Така че в този момент, ние сме по същество Просто reinitialized х 35 без всъщност да докосвате х. Само през показалеца че се посочи х, всъщност ние можем да променим това, което е х. Отивам да се направи това, както добре. Така че тук сме създали някои случайни адрес тук. Нека просто кажем, 0x00 отново. Нека просто кажем, че това е адресът. И ние сме създали цяло число х име и стойността съм възложени му е 5. Във втория ред, Int pointer-- така че сега ние сме имам тази втора нещо тук се нарича pointer-- и ние ще to-- нека просто кажем, това е някакъв друг адрес оперативна памет. Така че ние ще зададете този равно на каквото и да било. И тази показалка ще точка към стойността на х И тогава, ако променим the-- ако правим звезда показалеца, че ще ходи на стойност на нашата показалка. В този случай, то се случва да проследите тази стрелка към тази стойност на х и то се случва да го смените с 35. Реално, ние просто се промени х, без да докосвате х. Чрез просто съотнасяне указатели, можем да отидем и да промените стойността на х. Това прави ли смисъл? Така че по този начин, ние всъщност може да преименувате и rechange и преназначаване стойности до неща, които ние не всъщност направим себе си. Това прави ли смисъл на всички? Готино. ДОБРЕ. Така комплекс графичен тук. Отиди ред по ред. По същество, просто направи точно едно и също нещо, че аз просто направих. Преди да се премине, I Наистина искам да просто се че всеки е наистина ясен по този въпрос. Така че тук, кодът, който имаме, е инт а в размер на 3, б равнява 4, в равнява 5. Така че ние сме създали три числа име А, В и С, които са равно на 3, 4 и 5. И тогава ние създаваме три указатели тази точка на всяко от тези променливи. И сега отиваме да разясни по същество какво се случва, когато работите върху тях. Така че да ги извади. Вземете лист paper-- аз не правя знам, ако вие всички имат хартия, но тези от вас, които не го правят, може би назаем от тези от вас, които вършат. Вземете листа хартия и отидете ред по ред. И при всяка операция, което правите, Искам вие действително да напишете което е, В и С в тази точка. И какви са адресите, какви са указателите, които водят към една, б и в в този момент? И след това се надяваме, това вид ще стъпите момчета чрез това как да се мисли за указатели. Ние няма да отида чрез всички от тях. Може би ще ви даде five-- подобни, на три минути. Първи стъпки на първия малцина. Oh. Ами сега. АУДИТОРИЯ: Във втория ред, защо Не е звездата [недоловим] променлива? АНДИ Пенг: Не забравяйте в оператори, в първата седмица, ние говорихме за това как Ако го направите, плюс равни, това просто означава равнява един плюс в. В този case-- така че това е друга начин, по който може да се използва звездата. В допълнение към съотнасяне и за обявяване на указатели, не забравяйте, че той също означава умножение. Така че в този случай, тя току-що бе бъде равнява пъти гр. Това е точно толкова различно начин на писане, че. АУДИТОРИЯ: а равнява пъти гр. АНДИ Пенг: Да. АУДИТОРИЯ: Какво означава, ако тя казва един амперсанд писмо? АНДИ Пенг: амперсанд средства започваш да that-- сте Ще мястото на показалеца е сочи и издърпване на адреса. Така амперсанд дава адреса, звезден дава действителната стойност там. АУДИТОРИЯ: Дали сме изграждане на ред по ред? АНДИ Пенг: Ти си изграждане на ред по ред. Така че просто отидете един ред време и then-- ви не е нужно да се притеснявате за завършване на цялото това нещо. Нека се опитаме да се измъкне сам може би две, три линии и тогава ще свика и да завърши това. Това е напълно ОК, ако вие се губят. Това е наистина трудно концепция. Ако вие се притесняват, че класът върви по този начин като Давид казваше: това не е така. Ние сме достигането на концептуална пик на трудност и след това ще да бъде наклонена надолу. Така че, момчета са почти там. Ние имаме много бонбони, за да получите вие, момчета, през гърбица. Мисля, че доста много след падане пробие ние ще бъдем през гърбица и животът ще се оправи отново. Така че не се тревожете изобщо. Всичко е наред. Аз ще ви дам момчета 20 още секунди да приключи. ДОБРЕ. Всичко е наред. Нека да пробождане в това. Както вие да ми даде отговор, Аз съм просто ще ги написали инча И да се надяваме we-- мога? Аз всъщност не може да го напишете инча Аз ще го направи на дъската. Така че тук, в тази първа линия имаме равнява б звезда гр. Също Elliot доведоха до едно наистина, наистина добра точка. Защото аз забравих, че в допълнение към двата начина можем да използваме символа звезда, всъщност има трети начин. Умножение. И така, просто не се объркате, защото Това е първото начин за използване на звезда. Това е просто казвам на компютъра че аз съм на път да създаде показалка. Вторият начин чрез правене Звездата на показалеца, който казва на показалеца, който искате на достъп до данните по това показалка. И след това, разбира се, има просто обикновен умножение между два номера, който ви казва че искам да се размножават двете. Така че има много начини можем да използваме символа звезда. Не се объркате. Просто се уверете, че вие, момчета, да разберат, точно това, което всички три от тях правите. Така че в този първи ред, а равнява б пъти гр. Така че нека да мине през това, което е това, което е В, което е в? И каква е показалеца на това указател към Б и показалеца, за да сус Какви са тези всички равняващо? ДОБРЕ. Така че ние започваме с размер на 3, б равнява 4, и в равнява 5, нали? Така че след тази първа линия, може някой да ми каже какво е? Да. Чувствайте се свободни да се отговори просто крещи. 20. Good. Какво е б? АУДИТОРИЯ: 4. АНДИ Пенг: Какво е в? АУДИТОРИЯ: 5. АНДИ Пенг: Yay. Good. Какви са па, Pb, и компютър? АУДИТОРИЯ: 000001 и 002? АНДИ Пенг: Да. Така вид подвеждащ въпрос но не съвсем, защото тук съм извади реални спомени. Но тъй като, за пример, не го правим всъщност знаят какви са тези номера са, ние можем просто да кажем амперсанд. Аз дори не знам дали съм може да се направи амперсанд. Това е like-- как да го направя? АУДИТОРИЯ: Подобно на съставянето осмица. АНДИ Пенг: Подобно на осем. Подобно на това. ДОБРЕ. АУДИТОРИЯ: Bingo. АНДИ Пенг: го убива. Така амперсанд един, може просто да го направя. Защото ние всъщност не интересува какво стойността на които е, и това е известно отдавна задника стойност във всеки случай, ние използваме само giong да се каже, един амперсанд. Тогава какво е пб? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Да. Готино. Всичко е наред. Лесно първа линия. Имаме това. Показалки са лесни. ОК е. На втора линия. И така, те се равнява е същото нещо като изричане на равнява пъти гр. Това е просто по-лесен начин на писане. Така че ние не се опитваме да направим точка или нещо тук. Така става с първа линия. Какво е на втора линия след като направи равнява пъти в? АУДИТОРИЯ: 100? АНДИ Пенг: Това е 100. Good. Какво ще кажете за б? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Какво ще кажете за гр? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: А какво ще кажете за указатели? Има they-- същото, нали? ДОБРЕ. Сега трета линия. Малко по-сложни. б равнява звезда годишно. Може ли някой да ми каже, на първо място, какво прави звезда па равни? АУДИТОРИЯ: Това е стойността които се съхранява при. АНДИ Пенг: Точно така. И каква е стойността които се съхранява при? АУДИТОРИЯ: 100. АНДИ Пенг: OK. И така, какво ще бъде след една изпълняващата тази линия на код? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Какво ще кажете за б? АУДИТОРИЯ: 100. АНДИ Пенг: Да. И след това всичко останало е почти без промяна, нали? Тъй като ние не го докосва. Готино. Четвърти ред. Малко по-сложно. Така pc-- още веднъж, бр е показалеца че посочи c-- равнява на годишна база. Какво е? АУДИТОРИЯ: 100. АНДИ Пенг: Какво е б? АУДИТОРИЯ: 100. АНДИ Пенг: Какво е в? АУДИТОРИЯ: 5. АНДИ Пенг: Какво е па? АУДИТОРИЯ: амперсанд а. АНДИ Пенг: п.к.? АУДИТОРИЯ: Ampersand б. АНДИ Пенг: И трудно, какво е компютър в момента? АУДИТОРИЯ: амперсанд а. АНДИ Пенг: Yay. Woo Hoo. Вие, момчета, да видят? Това е добре. Това не е твърде лошо. Ние имаме повече бонбони, ако това не е всичко Точно така, но мисля, че всичко е наред. И ние ще отидем само един още преди да бъде по-трудно от тях. Отговорите, които имам тук. По същество, знам, че това е точно като математика в този момент. Когато имате прости уравнения като един плюс б, а в пъти, че е лесно да се направи. И когато започнете да се разширява при го, просто отидете цел на операциите. Същото нещо, както преди. Следете дали вашият звезда е преди нещо. Това ви казва стойността. Ако имате и преди нещо, тя ви казва адреса. И вие трябва да зададете или указатели или тази стойност. Така че нека да преминеш тоя последната една бързо. Не и този последният, съжалявам. Всъщност, вие може да избирате. Коя Мислите ли искате да отидете над от останалите три че имаме? Не мисля, че можем да направим това само защото ние не можем просто да скочи до линията. ДОБРЕ. Вие, момчета, не разполагат с възможност за избор, това е просто третият да издържи една. Star бр равнява б пъти гр. АУДИТОРИЯ: Star пб? АУДИТОРИЯ: Star пб. АНДИ Пенг: Съжаляваме? АУДИТОРИЯ: Star пб. АНДИ Пенг: Star пб. О, моя лош. Star п.к. равнява б пъти гр. Отивам да ви дам момчета на 10 секунди. Просто мисля, че най-бързо. Това е, че имаме толкова Досега, какво ще се случи, след като сме изпълнява тази пета линия точно там? ДОБРЕ. Какво е? АУДИТОРИЯ: 100. АНДИ Пенг: 100. Какво е б сега? АУДИТОРИЯ: 500. АНДИ Пенг: Добро. Има ли някой, искам да обясня за мен, защо това е 500? Аз не се чувствам като ние всъщност не се докосваше б. Как успяваме да смените стойност на б, без да докосвате б? Да? АУДИТОРИЯ: Защото звезда п.к. означава стойността на pb-- АНДИ Пенг: Точно така. АУДИТОРИЯ: --which е б. АНДИ Пенг: Точно така. Така че тук, в нашата схема, нашият показалка пб е действително сочи към това право тук, което е действителната физическа б. И така, ако отида и правиш звезда Pb, това е след вашето стрелка на показалеца и физически промяна на стойността на б. Така че това е защо ние да б променено на 500, без всъщност да докосвате б. И след това всичко останало остава същото, защото ние не пипай там. Ето б. Готино. И тогава-- АУДИТОРИЯ: Аз просто имам един въпрос. АНДИ Пенг: Така ли? АУДИТОРИЯ: От we've-- там вече не е в амперсанд, означава ли това, амперсанд а пренасочи към едно и също нещо в момента? АНДИ Пенг: Да. Така-- АУДИТОРИЯ: Така че стрелката вид просто се движи and-- АНДИ Пенг: Така essentially-- АУДИТОРИЯ: --now не можем да access-- АНДИ Пенг: --when ние сочен в on-- I фалшификатор. Какво беше това? Третата линия? Четвърто. Четвърти ред. Всичко, което направих, беше по същество, промените тази стрелка и той да посочи към вместо. АУДИТОРИЯ: Така че ние не може да влезе в повече. АНДИ Пенг: Ако сте имали този точната номер, можете да получите достъп до нея. Но не. Ние не разполагаме с показалка сочи към гр вече. Мисля, че ако е искал отново да получите достъп до него, можете ще създаде друг указател, който отново посочи в или dereferenced това и посочи назад. Така че, не, като от момента, тримата указатели, никой от тях не говорят за гр. Всеки добър? Отговорите са онлайн. Чувствайте се свободни да, след точка, разясни последните две и тест себе си. Същите понятия, просто малко по-сложни. Просто следвайте чрез логиката на защо нещата са различни неща. И намек, указатели са тема, която ние обичаме за покриване на викторини, защото те са концептуално много предизвикателна. Така че аз бих Ви предлагам да момчета всичко преглеждат тази диаграма или наклонена черта подобни концепции за това преди викторината си следващата седмица. АУДИТОРИЯ: Извинете ме. АНДИ Пенг: Така ли? АУДИТОРИЯ: [недоловим] крайния one-- [недоловим]. АНДИ Пенг: 50,000? Аз ще трябва да го следваме обратно надолу. Но somewhere-- Мисля линията преди, по която сте създали гигант в стойност. в равнява тази гигантска нещо която е 100 пъти по 500. Не. АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Да. 100 100 пъти, което е 10,000. Което е 10,000. Така че обратно там сте умножаване б и в. Така че показалецът, който сочи към В- която е стойността на 500-- пъти A-- АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Може би това е погрешно. АУДИТОРИЯ: Не, не, това не е. [Недоловим] показалка в гр сега се сочеше A-- АНДИ Пенг: Да. Той е прав. АУДИТОРИЯ: --it е най му на по-равни а times-- това е стойността на гр. АНДИ Пенг: Може ли да се каже, че малко по- битов силен така че всеки може да ви чуе? АУДИТОРИЯ: Така показалка в гр вече сочи до каква показалеца на използвано да посоча to-- и все още does-- но те посочат едно и също нещо, което е най-а, нали? Стойност на А, обаче това е било новодефинираната. И в началото на която сте изричане на преди това е била 100 пъти стойността на б, която е 500. И така, това е все пак, че е много. 50,000. Те сте преназначаване, че на това, което памет в гр is-- показалеца в гр сочи към който е. Значи предефиниране на да бъде 50 000. АНДИ Пенг: Можеше научи точка за мен. Следващия път, всичко е ваше. Тук. Ето повече бонбони за това. Вие заслужавате бонбони за това. АУДИТОРИЯ: Аз почти настигна това. АНДИ Пенг: Вие почти настигна това. Няма проблем. Да. Но тя беше точно така. Така че това, което трябва да направите, е that-- Мисля, че ние трябва да следват факта, че указателите сега са сочещи към различни стойности. Така че value-- Съжалявам, указател на гр repointed до. И така, това измества всички наши номера. И затова, когато достъп до стойност, съхранявана там, това е различно. Това прави ли смисъл? ДОБРЕ. Готино. Всеки добър, преди да се премине? АУДИТОРИЯ: Има ли the-- когато започваш установяване на условията и реда в лявата колона, е първия ред влияе на втория ред и тогава second-- харесват, това е all-- АНДИ Пенг: Да. Така че представете си, че е код, където аз просто напечатани в равнява б пъти с, звезда се равнява на гр. Само си представете, че аз съм просто избяга този код и аз не отпечатате това, което всички тези неща са. Ако аз бях просто да отпечатате първата нещо на върха, той ще бъде тук. Ако след Тичах всички тези редове код, Какво трябва тези стойности бъде в края са това. Така че аз съм всъщност написана програма тук. Не съм направил всички размножаването. Но представете си само. Така че тук аз просто имам програма, наречена указатели. Отивам да се увеличи, ако guys-- OK. Така че аз създадох променливи, а, б и в. Аз бях избран да ги равна на 3, 4, и 5 и съм създадени съответните им указатели. И тогава тук аз съм просто ще да отпечатате това, което е, че. Така че нека да тичам, че. Мислите ли, see-- глупости. Смятате ли, момчета, да видим как е, В и С са тези стойности но техните указатели са тази гигантска стойност на боклука, че ние не се грижи за? Така че, ако бях действително да включите във всички размножаването и след това да отпечатате повторно всички това, че ще се изпълни от на това, което е в дъното това. Така че, ако вие искате да си поиграете с действително физически кодиране, вие може просто да включите всички онези инча Кодът ще бъде на линия и след това си стойности следва да се отпечатат, че след това. И тогава ще видите как показалеца адреси действително са преназначени. Така че ще видим как адрес на гр всъщност става равна на каквото и адреса на е. И те ще съвпадне каквото че голям брой е. Добър въпрос. Всеки добре ли е? Един последен призив за въпроси. ДОБРЕ. Всичко е наред. Така че се пригответе да имат своя ум взривен малко по малко повече. Масивите са всъщност само указатели. Това е всичко, те са. И не забравяйте, това, което са струни? Те са също масиви. Така че какви са струни наистина? Те са като указатели към започваща на Чар на повече символа. Така че това е само понятия, които започват да се изгради един върху друг. Така че това е why-- ви не забравяйте, в лекция, Дейвид, когато имаше това сравнение на вътр низ майка е нещо, а след това друг низ мама и вие опитайте да се равнява на двамата един към друг, те ви дават различни стойности. Това е така, защото струни от своя страна не са ценности. Всички те са са адреси на паметта char-- те са масиви от символи и масиви са само Указатели. Така че по същество, когато Давид беше comparing-- тя е ОК, ако ли да залича всичко това? Така че в лекция, когато David имаше майка равнява равнява майка, за нас, че изглежда да е едно и също нещо. Нали така? Но, в компютъра под качулка, какво всъщност се случва е, че този низ, всичко, което е е масив. С ampersand-- или, съжалявам, с нула на терминатор в края. Нали така? Обратно наклонена черта 0. Грешен наклонена черта. Така че всички те were-- всички тези две струни were-- са масив от четири крака с размери буквите на мама и майка. Но това, което наистина са масиви са само указатели към конкретно място в паметта че ви казва да започнете вашия масив. Така че в този случай, всичко това беше беше просто някаква стойност боклук, някои случайни показалка. И всичко това е бил някаква друга стойност боклук. Нека просто кажем, 0x200. И така, когато се опитате да равен ги два един до друг, те оценяват за фалшива, защото на addresses-- указателите че те were-- бяха различни. Като има предвид, че е различен, ако сте се опитва да сравни действителните числа. Подобно, ако искате да compare-- в последния example-- инт А до точка Б, те ще оценят да е вярно, както каза Елиът защото те са числа, които се съхраняват и сте оценяване само на стойностите. Тук, защото струни са масиви и всички масиви са указатели, ето защо те не са равни помежду си. Така вид объркващо, че графичен. Но нека просто да си представите. Имаме създаде масив от размер 3 с индекс от 0 до 2-- 0, 1, 2, с ценностите на 1, 2 и 3 се съхранява в тях. All масива наистина does-- тук, нека просто казват аз съм създаване на показалеца да, че това е масив достъп до стойността при Първият индекс на този масив. Така че тук ще е 0. Нали така? Всички ли се разбере как е оценена на първа линия? Страхотен. И така, ако искате да се инициализира допълнителните стойности след това, всичко, което правим, е пренасочване. Така 0, 1, 2, 1. Така че тази показалка, която някога е сочейки тук, всичко, което правим е тя движи надолу. Това е, което плюс 1 се прави. И тогава можем да сложим 2 там. Ако искахме да се сложи 3 в едно след това, ние ще изтрие тази показалка, сложи 3 в там. Това прави ли смисъл всички? Да. Знаете ли, имам един въпрос? АУДИТОРИЯ: Това е [недоловим] има въпрос, аз ще го кажа така или иначе. Не мисля, че това е всъщност един въпрос but-- на английски, масив се равнява на 1 има смисъл. Ние сме като, OK, първото нещо. Но нещата са 0 индекс [Недоловим] масива е равна на 0 да показва, че първото място. АНДИ Пенг: Да. Така че всъщност това, което правя тук е Аз не съм достъп до първия индекс. All I беше doing-- така на първо място, да ми каже какво е звезда масив направя? Какво прави една звезда, преди указател направя? АУДИТОРИЯ: Това показва показалеца. Това, което за обявяване на показалеца. Тя de-- АНДИ Пенг: Това dereferences което означава, тя отива и действително получава стойността. Нали така? Така че в този случай, искате да получите стойността тук и да зададете, че към 1. Да? Така че аз не съм actually-- аз не ми пука за индекса на това, всичко, което правя е просто итерации надолу чрез преместване ми показалеца надолу масива. И след това евентуално I трябва да го спре, нали? И начинът, по който аз спирам е, когато се удари в случая на низ, нулев терминатор. Знам, о, ако Ударих back-- ако видя наклонена черта 0, знам, че съм се направи с този и знам, че мога просто спрете итерации сам. Наистина добър въпрос. И ние наистина ще отидете по-далеч в дълбочина в това следващата седмица защото на парче, че ще ходи да включва много от използването на указатели. Но просто знам, че точно сега, това е просто различен MORE- това е просто друг начин за компютъра, за да пиша, по същество, това, което ние сме били прави. Подобно на Давид каза в лекция, начинът, по който ние достъп до масив е само чрез правене масив 0, 0 скоба, ако ние просто Исках да получите достъп до първата стойност. All компютъра прави се превръща че в това и самата итерации. Така че ние го наричаме синтактична захар, която е само един луксозен начин на казвайки удобен за потребителя начини за нас знаят как да програмирате. Но компютъра отдолу, това, което прави, това е всъщност само като указател, който е за адаптиране. Но начинът, по който ние го напиша, защото е по-лесно за нас да мисля за нещата от гледна точка на кутии и как да се движат надолу кутии, като е от скобите. За съжаление, това беше наистина, Наистина лошо but-- да. АУДИТОРИЯ: Е, как би сравните две струни да се види дали те са равни помежду си? АНДИ Пенг: И така, Давид писа тази програма в лекция така че аз съм просто ще отида над бързо и кратко. Начинът, по който би го направил е, че бихте направили в действителност Трябва да отида и да се сравни addresses-- или стойностите получен от стрелките. Така че не забравяйте, как правиш получи стойността тук? Не ми пука за адреса тук. Как да се получи в действителност стойност на каквото и да е тук? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Точно така. Така сравните звездата Тук срещу звездата тук. Това ли са равни. И тогава ще се понижат. Дали звездата тук и звездата тук равни? ДОБРЕ. Те са равни. И просто продължавай надолу докато не се удари в края на двете. И ако всички те са равни, тогава Знаете ли, че си низ е равен. И C всъщност има функция записани нарича String Comp което всъщност просто прави това за вас, така че съм " трябва да го напиша сам. Да? АУДИТОРИЯ: Мисля, че в лекция е, когато правим за сравнение. Ние наистина не се нуждаят от брояч като пи, нали? АНДИ Пенг: Вие не правите защото ние не ми пука колко кутии сме повтори сам. Всички ние се грижим е, че ние ще не спирай, докато аз знам, за да спре. И знаеш ли, за да се спре, когато има някаква индикация че сте в една нищожна терминатор. Да. Така-- АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Да. Така в случай на сравняване струни, аз наистина не интересува колко много писма are-- I трябва да се сравни ако те са истина или лъжа, ако те са равни помежду си. Не ме интересува колко писма са във всяка от тях, нали? Аз просто се грижи, че това съвпада с този и онзи, след мача и този след преса по целия път до края. Нали така? Това прави ли смисъл? Така че аз наистина не се интересува колко много писма, Току-що е грижа, че всички от буквите мач. Да. ДОБРЕ. Мога ли да се премине от това? Страхотен. Ние работите малко по къса време, така че аз ще ви позволи просто момчета кратко, за да гледат на това. Пусни го в ID си, ако момчета са любопитни. И вие може да видите това, което това ще бъде отпечатване. ДОБРЕ. Така че нещо, което ние също така ще се докоснат по битов е идеята на показалеца аритметика. Което, всичко това е, е вместо регулиране стойностите на това, което се съхранява на адреса на показалеца, това е просто всъщност променя адреса си. Така че, ако вие като човекът искаше за да регулирате показалеца ръчно, начина, по който би направил това е просто направя п пъти размера на показалеца. Нали така? Така че едно цяло число. Един int-- колко байта в паметта е едно цяло число? Това е четири, нали? Така че, ако знам, че има един набор от всичко цели числа и искам тя да сочи към този, след това, щях да знам, че просто трябва да се преместя показалеца надолу четири байта, нали? И така п пъти размера на показалеца байта обаче е много байта ти си просто ще се премести показалеца по. Така например, ако имаме масив от цели числа, първата, нека просто кажем, се съхранява като 0x00. Знаеш следващата ще бъде най- 0x04, защото това е четири байта по-късно. И този, след това ще бъде 0x08 и така нататък и така нататък. И така, момчета, да разгледаме. Всичко, което правите тук е че имате показалеца у и вие сте като добави, че за да си памет, така че можете да се движите надолу блоковете на паметта разпределени. Вид на по-високо ниво концепция. Вие, момчета, няма да има нужда да се знае за тази седмица, но това е всичко, което прави там. ДОБРЕ. Друг път шега. Две струни влизат в един бар. Един казва, бих искал един ром и ценности коксови боклук. Другият казва, че ще трябва да извините приятелят ми, той не е нулев прекратена. Вие, момчета, да го получи. Извинете. Това е как аз се запази Ще когато аз се подготвям за вписванията е да вмъкна няколко шега пързалки. Както и да е. ДОБРЕ. Преди да се премести on-- така, по същество, ние сме обхванат всички концептуалното въпроси, свързани с указатели. И тогава ние ще talk-- движещ повече, говори за това, защо е важно, че и как това се вписва в идея за управление на паметта. Но преди да продължиш напред, Някой има ли въпроси за използване на показалеца, какво се случва за когато създавате указатели, как се Цитираната всеки друго, как се dereferencing? Всякакви въпроси за че преди да се премине? ДОБРЕ. Страхотен. Така че това ни води в този Голяма висше ниво концепция на управление на паметта като цяло. Така че, по същество, в вашия компютър, има два основни типа памет или региони в която памет се съхраняват. Вие имате тук, което се нарича купчината и имате тук което се нарича стека. И ние ще говорим за стека първо, защото това е толкова по-finagley този, който ви Трябва да вид концептуално разбере какво става. Така че всичко, стека is-- мисля за то като физическа купчина памет където имате един блок от паметта която е заделена за вашата програма докато той се движи. И това е мястото, където по същество всички от вашите локални променливи се съхраняват. Така че това е просто един увеличени в картината на тази купчина. Купчината там долу, аз съм Просто приближите малко повече. Така че, по същество, в една купчина имате куп функция във вашата програма. Така че нека просто да се върна до седмица два примера където трябваше нашата основна функция както куб функция когато ние се опитахме да създадем функция, която cubed-- че взе параметри като вход, ги кубчета и се връща ги върнем към основното. Така че начинът, по който това е запазен в паметта е, че имате основната си функция тук, най-долу. И след това с всяка допълнителна функция че ти се обадя и да добавяте в началото на това, спомена само купища отгоре. Мислете за него като физическо стак. И така, имате всички вас главната променливи характеристики на основните си функции, всичко, което става тук, съхранявани. И тогава, когато ти се обади куб, тя отива и го създава копия на всички онези, параметри и тя ги съхранява горе на различно място. И така, защо ни е грижа? Причината е, че ние се грижим ние не можем просто използват параметрите here-- променливите here-- и ние ги промените, ние очакваме тях също да бъде променено тук, нали? Идеята е, че те са спасени на различни места в паметта така че, когато сте достъп до различни функции, какво мислите се случва Не всъщност се случва защото благодарение на параметъра памет бита не са свързани помежду си. И така въпросът, че е наистина важно за нас да разберем вид е, какво ще стане ако, когато работите програма, размерът на функция стека frame-- толкова физически, как много памет трябва ли да го дам? Може би това е една гигантска функция, така че ние Трябва да му се даде, че много памет. Но ако беше по-малък, ние ще нужда от мъничко. Така че идеята е, че когато работите програма размера на тази функция зависи от това колко променливи и вида на променливи че искаме да го дам. Но какво, ако броят на variables-- и техните размери, Това не е определена от вас енкодер, но се определя от действителната потребител на програмата ви. Така че, ако аз исках да се създаде функция които взеха струни от страна на потребителя, но аз всъщност не знам колко голям тези струни са, че е трудно за мен да разпредели спецификата количество памет необходимо. Нали така? Защото, ако това, ако function-- този потребител входове гигантски низ, това ще създаде грешка от това, което се нарича същество стека преливане, където можете да престъпя границите на паметта, която имате. И така, какво ще правим? Ако не можем просто да се създаде тази гигантска стека, че може да спаси всичко, какво да правим, за да се реши този проблем? Така че ние ще продължим и да поговорим за този втори тип памет и тогава можем да говорим за това как можем да използваме двете заедно за решаване на този въпрос. Така че сега ние ще се движат нагоре към различна част от паметта в нашия компютър. Това се нарича купчината. Така че всичко на куп се е басейн от наличната памет, която могат да бъдат разпределени динамично. Така че може да се промени, докато вашата програма се изпълнява. И така една област неизползвана памет, която може бъде allowed-- че може да бъде разпределена с функцията нарича изчистване, или заделяне на памет. Така че, по същество, когато можете да започнете работа с програми, можете да създадете динамично памет от купчината и да използвате, че всички тук. И така, след това, всички ваши функции Тук можете да влезете в купчината. И така, изчистване, тази идея, че David вид бързо, за кратко Споменахме в лекция, е просто начин за можете да контролирате вашата памет. Подобно, когато сте просто създаване стека функции, когато сте просто като основната си функция с вашите произволни функции, мислиш за тях като деца, които просто избяга, когато сте били прави с тях. Те бяха наистина лоши деца. Можете да ги създавате да ги научи на нещо, и след това, когато искате да достъп до тях отново те са не там, защото си памет просто избяга. Но изчистване, или на куп, е начин да има по-добри деца, където можете да създадете вид тях, да ги зададете стойности, използвате them-- който звучеше наистина bad-- ги използват обаче, което исках, но след това да бъде в състояние да контролира ги и след това освободи памет винаги, когато имате нужда от тях. Така че тогава, когато сте готови с вашия функция, децата се връщат при вас и все още имате данни, че там. Така че начинът, по който ние изчистване, както и да си, памет е с функция за невалидни звезда Размер на изчистване в байтове. Така че това е само прототип защо правим това. Така пример е ние създаваме указател на латиница int-- равни инт звездни pointer-- Размер на изчистване на инт. Така че причината, поради която ние правим размер на, а не просто number-- защото ние всички знаем, че пад е четири байта, right-- но пад е само четири байтове за някои операционни системи. Идеята за нас като програмисти е, че искате да създадете код, който може да работи на всички компютри, а не само нашите прости компютри. И така, ето защо сме искали да използваме размер на, а не само на броя четири. Това прави ли смисъл да се всички? Така размер of-- всичко това е C функция или оператор, който ви казва колко байта памет прави определен тип променлива заемат. Така че в този случай, размерът на едно цяло число е четири. Четири байта. И изчистване ще освободи до четири байта от вашата грамада След това можете да използвате във вашата основна функция, за да бъде в състояние да съхранява паметта. Всички ли ясно, че до този момент? Да? АУДИТОРИЯ: Аз съм наясно, но само за да бъде над clear-- АНДИ Пенг: OK. Totally глоба. АУДИТОРИЯ: --size на е [недоловим] всъщност може да [недоловим] и то действително ще свърши нещо, което искаме да. Това не е някаква Псевдокод. АНДИ Пенг: No. АУДИТОРИЯ: Това е като един истински thing-- АНДИ Пенг: Това е реална код. АУДИТОРИЯ: --we да го използвате. Това е действително. Готино. АНДИ Пенг: Размер на идва с C. АУДИТОРИЯ: Това прави живота ми по-щастлив. АНДИ Пенг: Да. Така че, ако сте мързеливи програмист както аз съм вид понякога, Аз не обичам запаметяването какъв размер на инт е, аз не обичам запаметяването с размера на плувка е. Размер на току-що ви казва какво това е и това е много по-лесно. Всичко е наред. Така че важно нещо че вие, момчета, всички искаме трябва да имате предвид, когато сте използване на изчистване е, че винаги трябва да се провери, за да видите дали това е нищожна. Така че, както вече казах, обратно че картината на куп. Купчината е само тази гигантска купчина от паметта, която имаш. И искате да сте в състояние да вземе парченца памет от него и да го използват, нали? Но какво, ако вие нямате повече памет в тази купчина? Какво, ако вече съм използва всички от него и се опитвам да изчистване повече? Това не съществува. Е, това е защо сте Ще получите съобщение за грешка. Ще SEG вина. Ти ще да имат вина сегментация, където можете пробвате достъп до неща, които не са там. И така начина, по който правим и че начинът, по който ние предотврати това, е, че ние проверяваме да видим дали нулевата показалеца си. Така че, ако аз трябваше да изчистване нещо а аз нямах повече памет, че ще отпечата грешка, защото показалка върна да ви е само нищожна. И така начина, по който правим this-- това е просто страхотен дизайн, Просто запомня this-- е, че всяко път, когато се опита да изчистване нищо, започваш да се наложи да проверете дали това е нищожна. Защото всеки път, когато се опитате да получаване на паметта от купчината, винаги трябва да се направи уверите, че имате памет. Това е всичко, това е. Така че доста много тези три реда код, наизуст. Всеки път, когато изчистване, ги плясване инча Вие ще се нуждаят от тях. Защото аз ви гарантирам, отиваме за да ви изпита за всеки отделен случай и вашия компютър ще се взривят, защото сте Ще се опитам да се достъп до паметта, която е Не съществува и нещата ще се катастрофа и това няма да бъде добър. Така че просто тренировка, че в мозъка ви. Изчистване, за нищожна. Good. Всичко е наред. След това ражда на въпрос на това, което се случва след като приключите с използването на този спомен. Защото цялата идея се налага изчистване беше че имаме тази грамада, че можем да вземем спомен от и след това можем да го използваме. Нали така? И след това, което ние трябва да помним, е, че след като свършим с него, ние след това да го освободи. Остави. Можем да го пусна. Или пък можете да започнете също ще протекат памет и повече лоши неща ще се случат. По същество, когато можете да започнете да докосвате с памет, лоши неща ще се случат, ако не правя нещата правилно. Така че трябва да се провери, за да видите, на първо място, ако имате на разположение паметта. И тогава, след като сте готови, който искате да го освободи и да позволи на вашата операционна система да го вземе обратно. Така че начина, по който го правим, че е само, че функция, без шупли и показалеца за тази купчина от паметта. Така че примерът е безплатно показалка. Това е доста лесно, просто, не искам да го забравя. Така че проверете дали това е нищожна, безплатно. Всеки добър? Така че още веднъж, код, който вие, момчета, може вид бързо да погледна. Знам, че е много нова и синтаксис всичко е наред, ако сте като, ах, какво означава това отново? Няма проблем. Всичко това е трябвало да бъде е показване иск, как всички тези неща може да се използва заедно. Така, че се поставя заедно като група от миналото пързалки ние просто отидох през в една програма. АУДИТОРИЯ: По някакъв начин че можем да actually-- АНДИ Пенг: По някакъв начин, че Всъщност можем да използваме. Можете да плясване, че във вашето ID, можете да го стартирате и че ще работи. АУДИТОРИЯ: OK. Така че това е реално? АНДИ Пенг: Това е реална. Да. Опитвам се да го направи, така че шрифтове са различни, така че че всеки път, когато пиша в реално Код шрифтът е код на шрифта и че бележката ми код е различен, но Аз не знам дали това наистина работи. АУДИТОРИЯ: No. Мисля, че-- АНДИ Пенг: OK. АУДИТОРИЯ: --sometimes [Недоловим] и аз съм харесват, това ще бъде наистина готин ако действително това е нещо, което може да се използва но след това не е нещо, което може да се използва. Харесва ми, че това е нещо, което може да се използва. АНДИ Пенг: OK. Да. Ще предам, че заедно. Бъдете като Давид, децата са наистина тъжно, когато пишете фалшив код. Всичко е наред. Да? АУДИТОРИЯ: Така PTR тук всъщност не е указател, това е един блок от паметта? АНДИ Пенг: Така говориш на първа линия, или този тук? Възможно ли е да говорим за това тук? АУДИТОРИЯ: The PTR е различни неща in-- АНДИ Пенг: Добре, така че тук това, което аз съм doing-- всъщност, нека просто проверете тук. Този вид връзки в добре всички понятия. Така че тук имаме инт звезда КОП. Така INT показалеца, това е, когато ние всъщност създавайки указател, който сочи към цяло число. Е, то се случва да сочи към цяло число. И ние ще изчистване, или го дам, достатъчно памет определеното за съхранение на цяло число. Така четири байта в този случай. И тогава, ако това се равнява на null-- равни равнява null-- отиваме да отпечатате. О, имате грешка, защото вие сте на паметта, нали? В противен случай на връщане на този, че просто казва на вашата програма че имаш грешка. И тогава, ако го направите имат тази памет, това е ще съхранявате каквото получите инт дава под местоположението и да го настроите като стойността на показалеца. Така че това е всъщност ще физически изтрие тази стойност и сложи каквото и да получите INT възвръщаемост. И тогава започваш да печатате каквото те влязоха. АУДИТОРИЯ: И това е ще бъде в купчината? АНДИ Пенг: Това се случва да бъде в купчината. АУДИТОРИЯ: И така, че ще бъде достъпен. АНДИ Пенг: Точно така. Ница. Good. АУДИТОРИЯ: Така че, когато се освободи КОП в този крайния етап, ние сме освобождаване на показалеца или ние сме освобождаване на блока? АНДИ Пенг: Да. Така че ние сме освобождавайки pointer-- добре, освобождавайки блока на паметта. Така че единственият начин да противодейства на достъпа паметта е от наличието на показалеца. Ако не разполагате с показалеца, вие сте като, о, аз не знам къде е, нали? Така че, ако го освободи, вие сте по същество освобождавайки че целият блок. След това компютърът ви знае, о, няма нищо използваемо тук, Мога само да сложи боклука стойности обратно в нея отново. АУДИТОРИЯ: Така числа не съществуват за това? АНДИ Пенг: съществуват ли числа? Извинете. Можете ли да перифразирам въпроса? АУДИТОРИЯ: Исках да кажа, след като се освободи показалка, цялото число, което можете да получите, ще, че все още съществува? АНДИ Пенг: Не, това няма да стане. Или най-малкото, че ще съществува във вашето памет, преди компютърът да прави независимо с него, но има Няма начин за вас да получите това. Защото ти остави показалеца. Вие не знаете къде се намира вече. Да. Отивам да се премести тук. Пфу. Така че ние сме през много концептуалното трудности на управление на паметта и ние просто ще да прекарват по същество 5, 10 минути ще над синтактични неща, които ще бъде използваема и полезна за вас, момчета, но нищо прекалено концептуално там. ДОБРЕ. Така че ние сме напълно смяна на предавките тук. Управление на паметта, трудно. Показалки, трудно. Да. Това наистина е много, много трудно. Totally глоба. Ето защо си парче е ще бъде наистина трудно. Но ако отида и ще сторя нещата, които ние сме трябвало да се направи, да направи че нещата са нулеви, не забравяйте да проверите дали нещата са нищожна, се уверете, че да се освободи памет, уверете се, че нещата не са изтичане, ще бъде добър. Ще бъде настроен. Всичко е наред. Така че ние ще се премести в тази напълно нова концепция за пренасочване. И така, преди и сега, Основният начин, че ние сме е взаимодействие с нашата програми е чрез стандартния вход и стандартния изход. Нали така? Ние като вход за употреба неща и компютъра тя плюе обратно към нас в терминала. Но има и други начини за нас, за да си взаимодействат с компютъра с нашата програми, които не са просто ме физически машинописни неща в когато съм подкана. И начина, по който направи това е чрез по-голямо от моркова и символът на тръбата. Така че ние можем да четат и пишете на файлове с помощта на това. Така че начинът, по който правим това е най- по-голяма от моркови, всичко, което се прави пише каквото си файл има в отделен файл. Така например, ако аз Исках да тече здравей свят и аз исках изхода към се записва в друг файл а не само на хартиен към мен, аз може просто да се направи по-голяма от морков, output.txt. Така че всичко, което прави, е като ми hello.world програма, и независимо от изхода е, че е спестяване във файл, наречен output.txt. Така че начинът, по който Давид стори на .csv с имената на учениците, това е същото, че вие, момчета, могат да направят. И това, което е особено полезно тук са толкова по-големи than-- двамата по-голяма от моркови знаци, които можете да приложи към изход файл, което означава, че може просто да добавите в началото на това. Можете просто да поддържа добавянето на output.txt на всяко допълнително нещо че сте прави. Или, ако започнете да попадне в по- сложни програми, двете по-голяма от моркови, че само разпечатки от съобщения за грешки. Така че имате гигантски размер на съобщения за грешки и искате да прочетете чрез всички от тях и да ви не искам да имам, за да превъртите чрез вашия терминал, всъщност можете да направите, просто по-голяма от output.txt и това ще спести всичките си грешки във файл, наречен output.txt че можете да отидете и сте прочели. АУДИТОРИЯ: Къде се съхранява текстов файл? АНДИ Пенг: Тя е запазена в същото указател, че програмата ви е. Така че просто се върна и ще я търсим. И едно и също нещо, ние може да направи за вход е че всъщност можем да предприемем съдържанието на някои файл и ние да въведете, че в нашата програма. Така че, вместо да се налага да правя команда линия аргументи за това, къде сте физически трябва да въведете неща всеки път, вие всъщност може просто да има файл с име input.txt, че просто всичко поставя инча И тогава тръба е специално готино, защото това може да отнеме на изхода на една програма и да го използвате като вход от друга програма. Така например, в Vigenere вашите момчета, има този ред на код, който момчета се изпълняват, че може би може би наистина не знам какво е това doing-- това ./generate 1,000 тръба ./42. Нали така? Така че всичко, което прави, ако ние просто да разгледаме това стъпка по стъпка, на ./generate, това означава, че аз съм използвате моята програма генерира. Това е като в 1000 на входа. Така че аз искам да генерира 1000 случайна номера и аз ще тръба that-- или аз ще използвам that-- изход като вход за моята програма, наречена находка. И аз ще се опитам да намеря 42 от цифрите, получени от тези 1,000 номера. Означава ли това ред код прави смисъл на всички останали? Така че по този начин ние сме спестяване себе си един тон от стъпки. Ние не трябва да тичам генерира, запишете файла и го сложи в находка. Ние просто да направите всичко това в един ред. Така че каквото и да генерират извежда, тя цоп връщам, за да се намери. Да? АУДИТОРИЯ: И по отношение на командването доводи линия, е that-- това е три командния ред аргументи? Това е генериране, find-- не, four-- генериране, 1000, намерите и 42? Или е the-- АНДИ Пенг: Не Така тръбата прави наистина брои като аргумент на командния ред защото компилаторът или терминал знае, че тръбата, О, аз знам, че трябва да гледа преди тръбата, защото това е моята продукция и аз трябва да се грижат за тръба, защото това е моят принос. Така че го знае that-- на ./generate и 1000, тези два командни след аргументи само за първата програма. И тогава ./find 42 са две команда линия аргументи за втората програма. Да. Всеки добър по този въпрос? Така че просто много бързо, това, което правим тези три реда код направя? Сравнително проста. Всеки, който иска да ми каже това, което на първа линия прави? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Мислете за това като just-- Какво прави по-голяма от моркови? АУДИТОРИЯ: Тя поставя нещо в следващия ред. АНДИ Пенг: И така, какво е обратното на това? АУДИТОРИЯ: Тя поставя на следващия нещо в първото нещо. АНДИ Пенг: Да. Така че всичко, което прави е, че си изпълнение на програма .hello-- Вашата рекламна програма на име здрасти. Ти ще го дам входен нарича input.txt. Нали така? Защото мисля за него като просто физически навлиза в здрасти. И тогава започваш да се спаси от изход във файл, наречен output.txt. Какво ще кажете за втората линия? Искате ли да ми кажете какво На втория ред прави? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Съжалявам. Кажи, че отново. Elliot. АУДИТОРИЯ: Така че това поставя списък с номера в находка. АНДИ Пенг: Да. Така се намери, не забравяйте, в За да стартирате откриете Трябва да знаеш къде да търсите. И така, всичко, което го прави тук е, че това е ти дава предварително назначена комплект числа, а след това да намерят върви да търсите тези за броя на 42. И след това 15. Не забравяйте, че вие, момчета тичаха това когато тества вашия код. Сега разбираш ли какво прави? АУДИТОРИЯ: Това е удар в набор от инструкции да [недоловим] през три от три, за да получите the-- да спечели играта. АНДИ Пенг: Да. АУДИТОРИЯ: Той въвежда тези, инструкции в програмата. АНДИ Пенг: Доста. Така тилда CS50. / Pset3 / 3x3, всичко, което правеше, беше, че ние създадохме текст файл, който разполага с пълната титли готови за вас, момчета. И така в продължение на играта си, за да играете, можете just-- ние просто сложи това в програмата си. Така че бяхме създали тази борда и след това ние сме извеждайки, че форума на вашия програма че тя се затича и създаде една плочка от три по три. Това е всичко, което той прави. И така всъщност е магия случва зад кулисите че вие ​​не програма, която се програмира. Но сега вие, момчета, да разберат защо ние сме го направили, така че всичко е добре. Всичко е наред. Така че, докато пренасочване е много полезен, С има общ механизъм за четене и писане файлове на своя собствена. Нищо концептуално трудно тук, така че аз съм просто ще мине през Наистина, наистина бързо. Всичко това е известно запаметяване и като се уверите, вие, момчета, са синтактично го използвате правилно. Начинът, по който ние ще направя, че е създадете препратка към файла, щяхме да отворите файла, а след това ние ще направя всичко, за четене и писане и след това затворете файла. Когато нещо, което момчета искате да имате предвид, е че докато правите това, защото ние сме затваряне и отваряне на файлове, Всички тези команди са включени в standard-- стандарта I / O библиотека. Така че се уверете, че всеки път, когато сте Правейки това, че сте included-- # included-- стандарт I / O точки часа. Така че реално бързо. Първа стъпка, която искате да създадете препратка към този файл. И сега, че ние сме направили указатели, вие момчета може да ми каже какво е това ред код се прави. Нали така? Всичко, което той прави е създаването на показалеца на име на файл от тип файл. Защото вие знаете, че това се случва да сочи към файл, а ти си Ще отворите файла. Тогава сте е open-- всички тя не е да отворите файла. Това е името на файла. И има три неща, които можете да направите. Можете да четете, пишете, или да приложи. Най-общо, момчета ще се чете или записва защото сте или ще бъде въвеждане на файл или извеждане на една. Така че доста много г и w са двамата неща, ти започваш да се използва почти. Така че в този случай, всичко, което съм направил, е създадете указател към файл с име на файла. Аз съм го отваря и аз съм reading-- съм отварянето на този файл, наречен file.txt и аз съм го прочетете. Това е всичко, което правя в този момент. И тогава това са само функционира в които можете да прочетете различни неща или напишете различни неща или да прескочите до различни места когато искате да изглеждате. Всички те са онлайн. Всичко това може просто Google. Няма нужда да ги запомня. Те просто са там, разполагаем за ваша употреба ако искате да да бъде в състояние да ги използват. Така че, ако аз исках да просто да прочетете в един символ в даден момент, Аз ще направя файл fgetc. Или, ако исках да прочетете в една линия на текст в даден момент, аз ще направя fgets. И така нататък и така нататък. Всички те просто правят различно неща, които можете да използвате, за момчета. И след това на последно място, след като аз съм приключите четене или записване, Аз съм просто ще fclose този файл. И не забравяйте, това е една на тези, запомнете, моля направите това или друго файла няма да работят. Винаги преди да отворите файл четене или четене, трябва да имате винаги го затворите, ако го отворите. Същото е и с памет, нали? Трябва да сте винаги да паметта и го безплатно. Тук трябва да винаги да отворите подаде преди да се опитате да я прочетете и винаги трябва да го затворите, след като го отворите. Така че това също е на линия. Отивам да ви предизвикателство за момчета вид се напише програма, която отпечатва hello.world във файл. Това наистина е много проста. По същество той просто включва на няколко реда код които са били просто написани преди това. Ти ще ги пуснат заедно и напишете това. Така че някои важни неща, които трябва да имате предвид, докато вие момчета се опитват да използват това. Ако всичко това е много полезно за вашия pset тази седмица, е, че fopen създава файл показалец. Това не е реално физическата файл. Всичко това сочи към файл, който искате да отворите. И вие сте по същество, когато вие използвате някоя от другите функции като fread или неуспешно или fgetc или fgets, е че ти си просто преминаване около това указател към всички тези функции. Така че не сте в действителност, като че файл и да го използвате за вашите функции, ти си просто като на показалеца и да я постави на тези функции така че можете да използвате. И ако сте пропуснали да затворите файл си, след като го използвате, Вашата програма ще протекат памет. По същество, всички, които средства е, че лоши неща ще се случат и вашата програма ще не функционира правилно. И така на pset в началото, мисля, там е кратко, където той explained-- Nate explained-- какво е Valgrind. All Valgrind е е начин за вас да уверете се, че не сте изтича памет. Така че, момчета искат да направят Сигурни ли сте, че гледате кратко тъй че тя обяснява много добре какво се случва. ДОБРЕ. Така че аз отидох чрез които наистина, наистина бързо, защото наистина искам да отида да говоря за на pset преди вас, момчета излизат. Дали някой има въпроси концептуално? Предимно всичко това е само синтаксис, който можете да използвате, за да четат или пишат файлове. И накрая, любимата на всички. Отиваме да говорим за pset сега. Така че, вдигане на ръка, колко от вие четат спец тази седмица? О, това е половината. Това е добре. Така че това всъщност е наистина, наистина забавно pset в смисъл, че се чувстваш като детектив, защото сте правиш всички тези наистина готини неща че ти не знаеш, че можеш да направиш но сега това е наистина страхотно че можете да ги направите. И това е действително много лесно, отколкото вие мислите. Така основни половини на тази програма са ти Ще изтеглите изходния код или дистрибуция код, написан от нас. И ти започваш да има една папка наречено BMP и друга папка наречено JPG. В рамките на вашата BMP, вие сте ще има три програми. Един от тях вече е написана за вас. Така copy.c е програма ние вече съм писал за теб, че ти започваш да изтеглите. Всичко, което прави е да се вземат като вход на снимка и прави копие от него като продукция. Това е всичко, този файл се прави. Но това, което искате да направите, за whodunit-- така колко от вас момчета помнят в пети клас или maybe-- можете да започнете younger-- може би трети клас, когато вие, момчета са имали тайни послания и трябваше да се сложи лист хартия върху нея да разчетат посланието? Да? Така че това е всичко, което правим само че този път за един компютър. Така че ние сме ви дали този прекрасен образ. Не изглежда като всичко друго, но отдолу това е знак, че ще ти помогне с отговора на въпроса Ви молим. По същество това, което искате да направите, е вход, който подаде, ощипвам някои неща наоколо, може би регулирате цветовете, измести неща, така че каквото посланието е да дойде сам. Така че там са скрити вътре пиксела и информация че ако пишете кода си правилно ще се декодира и да ти кажа какво е улика. И така някои полезни съвети за това как бихте отида за приближаването на това. Наистина ли искаш да се запознаят себе си с файла I / O защото сме четене от файлове и писмено на файлове. Нали така? И така всеки път, когато правим че, който включва подаде I / O. Ти ще Трябва да се запознаете с, как да се отворят снимките файлове? Как се пише до файлове като снимки? Как го правиш всички тези неща? Това ще бъде наистина полезно. Второ, как си ще бъде в състояние да се промени цветовете, които изясни тази снимка? Това е най-вероятно ще включва коригиране вашите пиксели или вашите RGB стойности някъде там, по същество. Няма по правилен начин на решаването на този толкова дълго, колкото можете can-- толкова дълго, колкото можете вид коригира тези пиксели, за да го направи изглежда като нещо, което ви интересува. Това е всичко, ние се грижим за, както добре. Така че има много начини да направите това. Просто си поиграете с него, докато можете да получите нещо, което работи. И ти ще бъде наистина изненадани как няколко реда код което трябва да направите това в действителност. Говоря като три реда код общия че трябва да се напише за да направите това. Така че, ако откриете себе си написването 40, 30 реда код, вие вероятно го правиш погрешно. Всичко, което трябва да направите, е вид поиграете с цветовете и да видим как става навън. Така че тогава ние главата в малко до по-труден проблем. Тук имаме преоразмерите когато ние сме ви питам to-- ние ти даваме като вход снимка и си преоразмеряване този образ в нещо по-големи или нещо по-малко в зависимост от размерите ние ви дават. Така че не забравяйте, в лекция Давид бързо погледна как информацията е открита от вашите компютри да кажа, че това е вид файл. Така файл Word има специална знаци пред които кажете на Вашия компютър е файл Word. Същото е и с JPEG. В този случай ние ще да ви дам един файл JPEG. Всичко, което знаем е, че JPEG файл е снимка, нали? Но компютърът разграничава то при много специфични начини. Така в началото на всеки файл, JPEG, вие сте ще има това, което се нарича растерна графика Информация за глава и заглавната част на растерна графика файл. Всички тези са са различни парчета на данни че кажете на Вашия компютър, хей, слушайте, а JPEG снимки, идващи и това са размерите или характеристики на този JPEG. Така че вие, момчета, наистина искат да знаят каква информация се съхранява вътре на тези заглавки и какъв е размерът им. Защото, когато сте стартирали чрез вашата програма, започваш да искаш да прескочим тази сума. Нали така? Защото не ви пука за модифициране на заглавната част, те е грижа за модифициране на това, което е след това. Нали така? Така че се уверете, че вие ​​знаете колко големи са тези неща. На второ място, преди да започнете опитвайки се да промените размера на изображението, вие вероятно ще искате да запишете размерите на оригинала. Нали така? Защото, ако ви кажа тази снимка е 100 на 100 пиксела, и аз искам да се направи нея четири пъти по-голям, знаете ли, че трябва да се умножете тези размери от четири. Така че след това искате изходен файл 400 от 400 пиксела, например. Така че това е наистина полезно за вас, момчета до запишете размерите на оригинала. И тогава след това, след като приключите преоразмеряване, можете да пишете нови заглавия с тези нови измерения след преоразмеряване. И начинът, по който сте физически може да създаде в големи пиксели е, че можете да напишете Новият RGB-- спомням, RGB, всичко, което е съкращение от е червен, зелен, и blue-- пиксела до вън файл. И ти започваш да искаш да имат различни количества от това, което ние наричаме подплата. Всички пълнежът е по пространства са преди и след снимки че кажа your-- по същество, че кажете вашата снимка колко голям го следва да бъде предприемането. Това е много абстрактно за много вас, ако не са чели pset спец, но то ще бъде много полезно, когато вие всъщност четене през него. Ти си като, о, да, това има смисъл. Защо трябва да направите това? Има смисъл. На последно място, това е може би един от най-разочароващ програми някога, само защото ти не можеш кажете дали това е работа, или не. All тази програма, се възстанови, е прави се, че ако работи правилно, тя трябва да бъде в състояние да се внезапно възстанови 50 изображения, които бяха загубени на нашия твърд диск. И така, проблемът с тази програма е, че не мога да го тествам защото нито вие възстановена тях, или не сте. И така, вие просто вид Трябва да си поиграете с него, и ако програмата ви е работи правилно, вие ще изведнъж се види, че в директория сте имам една гигантска сума снимки, които са вече там. Е, как ще подходим I този проблем е, че сме ще ти дам това, което е нарича card.raw файл. По същество, това е Просто повреден файл с всички снимки, запаметени, че започваш да се наложи да се възстанови от. Така че вие ​​вероятно ще искате към входа на вашия card.raw, или отворена, Вашата card.raw файл и можете да започнете ще искате да манипулирате тя да бъде в състояние да съхранява JPEG. Така че аз ще започна с проследяване и съхранение всеки отделен JPEG, докато го намерите. Ти няма да индивидуално всички Изведнъж просто създаде всички 50 JPEG. Вие ще искате да запазите следи колко сте отваряне. И след това, което искате да уверете се, когато сте писането на buffer-- вас, момчета ще знам какво говоря след като прочетете spec-- искате да уверете се, че използвате неподписан Чар буфер. И след това искам да попитам си въпроса на, колко байта са в CF-- са във файл с карта? Ето колко ти започваш да се искате да прочетете във вашия буфер. Вие ще искате да се уверите за привеждане в съответствие на две, защото тогава няма да се налага оперативна памет изтичане. Вие знаете точно колко байта, което трябва и колко байтове, които искате да имате. И накрая, вие искате да използвате функция, наречена sprint-- ите печат F-- да генерира потребителски файл имена за всеки нов JPEG, че ще намерите. Така, както можете да създавате и намерите JPEG снимки от вашата карта, започваш да искаш да да ги съхранява и да ги назове. Нали така? И така, ти започваш да се искате да използвате тази функция за създаване на имена, които може да съхранява всички ваши JPEG. И накрая, не забравяйте да затворите всяка JPEG, след като сте готови. Защото това, което сте ще направя, е, че си Ще вероятно имат някаква примка, че се изпълнява за всички ваши JPEG. Ти ще напише JPEG и да го преименувате, докато го намерите. Но след като сте готови с всеки един JPEG, трябва да го затворите, така че можете да започнете отново и да преминем към следващата картина. И така, нещо, което е наистина забавно, че сме искали да направим, защото това е определен като странен проблем но и странно да не отговарят проблем набор, е, че всички снимки, ние имаме за вас, ако се възстанови правилно, всички снимки са снимки на вашата прекрасна преподавателския състав, както от Харвард, в here-- и тук в Йейл. И ако се случи да възстановяване на всички тези снимки и идентифициране на персонала членове в тези карти, и да вземат selfies с нас, ако можете да ни намерите из университета, за всяка снимка, която представя пред нас, ние ще ви дам един гигабайт Dropbox пространство. Така че нека да направи по математика тук. Ако има 50 снимки и 50 членове на преподавателския състав, ако се случи да намерите всички 50 от ни, това е 50 гигабайта Dropbox, общо взето, ние ще ви се дава момчета. Така някои допълнителни стимули добавени ако вие не просто грижа за възстановяване на изгубени образи. Има и някои допълнителни стимули. Това е забавен проблем набор. Това наистина е така. Това е вид на разочароващо, но след това става наистина забавно, когато разбереш, Уау, това е работа и сега имат всички тези снимки че аз току-що създадена от себе си. Всякакви въпроси относно pset? За всеки, който е вече започна, ако имате въпроси, Аз ще бъда тук за няколко минути след раздел, ако искате да говорите с мен. Браво, момчета. Съжалявам, аз информация изхвърлени на вас, момчета. Показалки са наистина, наистина предизвикателна и разочароващо. И аз съм наистина се радвам, че вие, момчета останаха с мен. Ще поговорим по-задълбочено за следващата седмица тъй като ние започнем да правим хеш таблици и повече функции, които ги включват. Да. Така че, ако някой има някакви въпроси, аз ще бъда наоколо. Благодаря, че дойдохте и да вземат по- бонбони, защото има повече бонбони. Готино.