>> [Мусиц плаиинг]
Давид Ј Малан: Ово је као бруцош Семинар данас.
ОК.
Дакле, врло кишно напоље.
Ово има тенденцију да се деси средом, али све више прилика
за питања данас.
Почнимо са ствари са филмом за који тренутак.
Али ми ћемо почети отмено као и увек.
>> Ово је ЦС50, а ово је крај недеље 4.
Дакле, ако сте икада гледали ТВ или филм у коме
има неки експерти рачунара и полиција, или ФБИ-или нека агенција
покушава да ухвати неки противник, добро, ти си
Вероватно чули израз "унапреди" при чему је техничар некако
магично зумира бесконачно далеко да види криминалце
идентитет или регистарске таблице чак иу треперења огледала
или одсјај нечијег ока.
И заиста, хајде да погледамо неколико таквих сцена из Холивуда.
[ВИДЕО РЕПРОДУКЦИЈА]
ОК, сада идемо добро погледам.
>> -Задржати.
Рун то назад.
>> -Сачекај минут.
Иди десно.
>> Ето, замрзавање то.
-Цео екран.
ОК, замрзавање то.
-Тигхтен Се на то, хоћеш ли?
-Вецтор У оном Момак је задњи точак.
-Зоом У управо овде на овом месту.
-Са Правом опремом, слика могла да се увећа и изоштрио.
-Шта је ово?
-То Је побољшање програма.
Можеш ли јасно да се било?
-Не знам.
Хајде да га побољша.
>> -Енханце Дио А6.
>> -Ја Енханцед детаље, и-- Мислим да је
Довољно да побољша, пустите га на мој екран.
-Ја Енханцед одраз у њеном оку.
>> Пусти Води овоме Видео побољшање.
Едгар, можете да побољшате ово?
>> -Сачекај.
>> -Била Сам радио на овом размишљање.
>> -Неко Је одраз.
-Рефлецтион.
Ту је одраз човековом лицу.
-Тхе Одраз.
Ту је одраз.
-Зоом У на огледалу.
Ти се види одраз.
Могу ли да побољшате слику одавде?
Можеш ли га побољшати овде?
Можеш ли га побољшати?
Можеш ли то побољшати?
>> Можемо ли побољшати ово?
>> Можеш ли га побољшати?
Држи на тренутак, ја ћу повећати.
-Зоом У на вратима.
-Тимес 10.
-Зоом.
-Уселити се.
-Више.
Чекај, стани.
Престани.
-Паусе Га.
РОТАТЕ УС 75 степени око вертикалне, молим те.
Престани.
Вратите се на делу о врата, поново.
>> -Имам Слику појачивач који може да БИТМАП?
>> Хеј, можда можемо да користимо ПРАДЕЕП Сен начин да се види у прозорима.
Ово софтвер је стате оф тхе арт.
>> -У Еигенвалуе је искључен.
>> -Са Десне стране комбинација алгоритхм--
>> -Он Је узети елиминација алгоритми на следећи ниво,
и могу их користити за побољшати ову фотографију.
>> -Лоцк На и увећање З-оса.
>> -Енханце.
Стој и побољшати.
>> [Крај репродукције]
>> Давид Ј Малан: У реду, сви они су заправо речи.
Они само нанизани заједно у начин на који то заправо није разумно.
И, у ствари, ЦС50 и курсеви воле тежи да уништи много ТВ и филмове
за тебе.
Јер кад те компјутерских стручњака се звецкање са термине и говори
фанци ствари као што су еигенвецторс, и З-оса,
и било који број осталих заправо више технички услови,
они стварно само низање речи заједно пречесто.
Да ли је то један од наших нада је да, као нуспојава узимања курсева
овако, више људи у свет заиста бити у стању да одмери у
и само имао мало утицаја на квалитет и тачност тих филмова?
>> У ствари, хајде да погледамо реалности.
Дакле, овде је особље фотографија Мери, један од наших момака наставе.
И претпостављам да је осумњичен за нешто.
Па ипак, постоји трачак неки доказ у оку,
или у одраз њених наочара.
Па, ако тачно онако како филмовима предлаже, где се увећа и "побољшати",
ово је колико информација је у Мари лице
када снимите слику са тим оригиналној резолуцији.
>> А, у ствари, можете видети ове тачке.
А ово су шта су називају пиксели П-И-Кс-Е-Л-С,
што је само квадрат типично то је тачка која компонује слику.
И назад у дану, и заправо чак и данас са неким од данашње ЛЕД телевизора
или ЛЦД телевизори, ако имаш један у својој соби или код куће,
ако одете до Супер близу њега, и поготово ако је то нешто старији ТВ
можете вероватно чак виде ове тачкице и то је оно што компонује слику.
>> И нема више Информације од овога.
Могли би "побољшати", у смислу глетовање ствари изнова и некако
закључујете врста, врста шта Боја треба да буде Марије око следећи
тако да није заправо тако пикселизирана.
Али, ако сам стално у зумирање, тамо је негативац у свом оку.
Као да је све Информације имамо.
Не можете креирати информације из ничега.
Постоји само коначан број битова тамо.
>> Дакле, у Проблем сет 4, гдје имате прилику
да се играју са оваквом свету.
У Проблем Сет 4, ви ћете истражила свет графику и форензике,
и заправо пишу код да опорави изгубљене слике.
Ви ћете писати код који манипулише постојеће слике
и на крају разумети шта је дешава испод хаубе.
>> И, испоставило се, то је у ствари није све тако компликовано.
На пример, ако бисмо желели да представља насмејано лице где
са овим црним пиксела, или ти црне тачке,
Па, једноставно може да представља их као истински битмап.
А ако сте икада чули да израз Битмап, можда
сада почиње да се направи мало више смисла данас.
>> Већ знамо шта мало је.
То је 0 или 1.
И мапа је само нешто као комад папира
који вам даје упутства и има мозда мрежа од к и и координата.
Дакле, овде је битмапа.
То је мапа бита при чему је 1 је наизглед
ће представљати бели пиксел, а 0 ће представљати црну пиксел.
Али ми свакако могли да окренемо око.
То није ни битно толико док смо доследни.
А ево како, у бинари-- унутра меморије рачунара, или чак унутар
од датотеци на ваш хард дриве-- могао чувате
најједноставније насмејано лице слике.
Али, шта смо, наравно, недостаје на овој слици?
Боја, зар не?
То је очигледно следећи корак или побољшање да побољшају са бојом.
Дакле, нажалост, са само једним бит 0 или 1, можемо да представљају боје.
То би могло бити црвена, или плаве или црна, или бела или зелена, или розе,
или било парова боја.
Али зарад једноставности, ми ћемо само претпоставити црно-бело.
>> Дакле, шта логично требамо ако Желим да спроведе боје на слици?
Шта треба да урадимо?
Као да ограничавајући фактор овде је да са једним мало можете само
представљају две државе, 0 или 1, бела или црно, шта желите да урадите?
Публика: Више података.
Давид Ј Малан: Више бита, иеах више података, више бита.
И, заиста, то је тачно како боја слике су заступљени.
Уместо да користе једну мало, а 0 или 1 за сваки пиксел, свака тачка,
само користите више.
Можда сте користили 8, можда, чешће користити 24, и заиста, у Проблем Сет
4, хоћеш ли играти са фајл формат који користи 24 бита обично.
>> Али већина вас вероватно упознат са ЈПЕГ слику.
Ако сте икада узети фотографија на вашем телефону,
или уплоадед или видео нешто на Фацебоок, Флицкр или било који број
сајтова фото-басед, ти си Вероватно види ЈПЕГ слике раније.
И испоставило се, ово је фајл Формат ћемо користити у ПСет 4,
чиме ћеш морају да се опорави слике
да сам случајно сам брисања корумпиран меморијске картице у фотоапарату,
ако хоћете.
>> И испоставило се да, иако ЈПЕГ је прилично сопхистицатед--
то је много софистицираније од црне и беле тачке
смо видели малочас, јер је стварно фанци алгоритми који
се користи за компресију у ЈПЕГ формату, тако да можете имати лепо,
квалитет слике али користећи релативно мали број бита.
И ми ћемо се вратити на компресија убрзо.
Испоставило се да је први три бајта ЈПЕГ имаге--
без обзира шта сте узели фотографију од-- су вредности 255, 216, 255.
>> Другим речима, ако вас само види тај образац битова,
представља овде као три бајтова или 24 бита укупно,
са великом вероватноћом можете закључити да гледате њега ово прва три
бајтова ЈПЕГ формату.
И то је оно што је познато као потпис на ЈПЕГ.
Много формата датотека тамо имају тенденцију да почне
са одређеним обрасцима 0с и 1с, тако да Виндовс и Мац ОС, и иОС,
и Андроид знам какав датотеке су су, поред тзв филе
екстензија која много фајлова има.
Ако сте .јпг, то је још један траг на рачунар.
>> Дакле, хајде да погледамо сада ово мало више технички.
Ми знамо децимала Систем је 0 до 9.
Знамо бинарни је 0 и 1.
А ако мислите назад у ПСет 0, имали смо се рвати са,
за мало, нешто зове хексадецимална,
где имате 16 цифара, уместо 10 или уместо 2.
И они цифре, по обичају, су од 0 до 9 и онда
кроз ф, где је ф представља оно децимални број, као брз разум
цхецк?
Дакле, 15.
И мора представљати 10, само природа наручивање које сам дао.
То је само произвољна конвенција, али је прилично стандардан.
>> Дакле, ако погледамо овај образац три битес-- хајдемо
само почети да погледам у начин у складу са колико
компјутерски научници генерално погледај и размисли о датотекама.
Ви свакако можете мислити о датотеке у 0с, и 1с, и ​​децимале,
али у стварности, склони смо да користимо бинарни или типичније хекадецимал--
вратио из ПСет 0.
Дакле, дозволите ми предлажемо да 255, 216, 255 и су само ови обрасци 0с и 1с.
И ово можете проверити да ли желите да урадите математику од недеље 0.
Али, за сада, само претпоставити да је то заиста тачно.
Управо сам поново написана три децимале бројеви као три бинарне вредности.
Сада шта ћу да урадим је само додајте мало белог простора,
само због читљивости екипе.
И обавештење, ја ћу да помера ствари распада.
Дакле пре, после, пре, после.
Ја радим ништа занимљиво друго не само ширење ствари тако
да обавештење сваки сет од осам бита је сада два комплета четири бита.
Ово је корисно, јер хексадецималном Посебно је модеран
јер сваки ХЕКС број 0 путем Ф, или још специфичније 0 до 15,
могу бити представљени са тачно четири бита.
Другим речима, у хексадецималном ако вас Желим да представљају 0, то је само 0000,
четири нуле.
А ако желите да заступа 15, то је 1111, што је четири бита.
А ако то урадите математику, ако је ово оне мјесто,
ово је место 16с, који ће дати тебе--
радије да иде да-- Жао ми је, у бинарном,
то ће вам дати 15, оне место, Твос место, четири и осмице место.
Дакле, дозволите ми да предложе да је сет од четири бита са леве стране
је оно што ћемо звати ф.
То је највећи број који сте може представљати са четири бита.
А ми већ знамо из хексадецималном, ф је највећа цифра у хексадецималном.
Имамо још једну ф тамо, више тамо два.
А за сада, само се на вери да сам учинио право математике
као и да лева половина тих битова, 1101,
је иста ствар као д у хексадецималном.
И десна рука, 1000, само 8.
>> И да је један је лако видети, зар не?
Тхе 8 репресентс-- је у праву испод тог осмице месту.
Дакле, имамо једну у колони осмица и ништа у четири, двоје или оних.
Дакле, сада више конвенционално, људи имају тенденцију да пишем цифре хексадецималне овако,
само их мљацкати заједно, и онда их префикс са 0к.
То не значи ништа друго него визуелни траг на хуман--
ево хексадецимална валуе-- јер не би иначе било очигледно.
>> Што ће рећи, на крају, да образац нула и јединица,
или образац хексадецималном цифре еквивалентно да сте
ће почети да траже Проблем у сету 4 је ово--
и проблем сет 4 Спец ће ходати сте кроз ово у више детаил--
али схватите као врсту Арцане као ово може да изгледа на први поглед,
ћеш почети видим овај пуно.
И у ствари, чак иу ГДБ је отклањање грешака смо увели у понедељак
и Дан уводи у ПСет 3, иде да вам често показују хексадецималне вредности
само зато што имају тенденцију да буду више конвенционални од децималне или бинарна
у свету рачунара.
Сада ставимо ово у контекст.
Многи од вас можда сећате замислим овде, која је дошла од чега?
Виста па чак и раније него да, Виндовс Виста урадио ову деби.
Дакле, ово је лепа пејзаж.
У ствари, ако поке око онлине-- Мислим да је то Википедиа артицле,
где је неко врло невероватно изашли наћи ова локација у свету подесити
његов или њен камера Управо право место--
а ово данас изгледа као-- али потпуно је исто подешавање.
Ова слика је, међутим, у датотеци формату зове Битмап б-м стр.
И ми ћемо да се супер летимичан поглед на шта то значи.
>> Али Битмап је само другачији начин представљају слике још увек користе пиксела
у 0с и 1с, на крају.
Али, у први поглед, има интересантнији потпис
на почетку датотеке.
То није само три бајтова, а ту је
гомила образаца бајтова који су предодређени значење.
На пример, негде у Првих неколико бајтова битмап слике
ће бити величине од слика, ширина слике,
висина слике, тако корисне метаподатке, ако хоћете.
Корисне информације да Пхотосхоп или било графика програм користите
Можда стварно стало.
>> Дакле, више о томе у Проблем Сет 4, али ово
само да кажем да на крају дана
сви формати датотека коју сте користили за године-- Мицрософт Ворд фајлове,
Бројеви фајлова, Екцел филес, било који број формата датотека
да можда има неки Познато филе ектенсион
су само 0с и 1с испод хаубе.
И људи су одлучили шта су конвенције,
шта обрасци 0с и 1с представљају Ворд филе у односу Екцел фајл,
у односу на било који број других формата.
Дакле, у ПСет 4, имаћете прилика да се играју са тим.
>> Али, шта то значи да имамо градитеља.
То је заправо лепо Сегуе сада у Ц, који има само неколико
од додатне карактеристике које нисмо гледали још.
То је прилично мали језик и један од фини карактеристике о Ц је структура.
На пример, ако вас желео да репресент-- хајдемо
да сте хтели да имају променљиву која представља студента у неком програму.
Можда сте писали курс регистрација програма, или језгро за куповину
алат, или тако нешто.
Који су делови података везаних ученику који долазе у обзир?
Као студент је заступљена са које вредности?
Да?
Имате име као студент.
Шта још не типичан ученик има?
>> ПУБЛИКА: [неразумљиво]
>> Давид Ј Малан: Па, жао ми је.
>> ПУБЛИКА: Године.
>> Давид Ј Малан Ан старост или рођендан еквивалентно, да.
Шта даље?
ПУБЛИКА: ИД број?
Давид Ј Малан: Тако се један број, можда број телефона, можда спаваоница или кућа,
или колеџ, или тако нешто.
Било који број комада података који можда ћете морати у вашој листи контаката
је оно што би дефинисати студента.
Дакле, ако смо хтели да урадимо, у шифрама, бисмо могли да урадимо нешто једноставно овако.
Можда имамо програм, тако да има рецимо, инт маин (воид).
А ако хоћу да представљају студент Можда имају на пример,
стринг позвао назив за студента, стринг позвао спаваоница за студента,
Можда инт зове ИД за студента.
И зато ја користим стринг, ја треба да се врати и стави ЦС50.х.
Можда ћу морати стдио.х.
Дакле, дозволите ми да превентивно ли они и ја сам ће назвати студент.ц за сада
и спаси ово.
>> И сада могу да урадим нешто са ових варијабли.
И ми ћемо само да напишем да је као коментар у псеудо код,
јер то није интересантно оно што ми радимо за сада.
У реду, тако да је ово програм који некако чува студент.
Оно што желим да радим ако желите да сачувате два студента?
Дакле, мој први инстинкт иде да је све у реду, чекај мало,
ако имам још један студент зашто не само уради стринг наме 2, ниска спаваоница 2,
Инт ид2.
И ми смо урадили нема овим путем прије
и оно што је наше решење за оно што изгледа да буде нека врста хацкисх Цопи Пасте
посао овде?
ПУБЛИКА: Низ.
Давид Ј Малан: Да, можемо користити низ.
Овог врло брзо постаје незграпан.
Морате да те некако произвољно почетак именовања свих ових варијабли.
А ти, људски, морати да задржи трацк то ОК име2 одговара
са дорм2 одговара ид2.
То је само постаје хаос.
Дакле, то је много лакше, сјећам од пре неколико недеља,
само да морају да зову именима стринг а можда нам три таква.
А онда можда имамо стринг ученичких и студентских домова и имају
три од њих, или са константа, инт исказнице и имају три таква.
Али чак и сада ово изгледа мало траљаво, у реду.
Говоримо о студентима и иет Ја сам стварно пребивалиште на ниском нивоу
Детаљи имплементације.
Ученик је име и спаваоница и ИД.
>> Зашто не могу да само прогласити променљиву зове ученик и позвати га с.
А ако желим још једну студент, зашто не бих то назвао Т.
Или ако желим гомилу ученика, зашто не бих ја
да имам целу класу студенти, и то је тројица.
Другим речима, зашто не могу да дођем са својом тип података, назван
Студенти, од којих је у име, је лична, је спаваоница,
је било који број других области.
И испоставило се да вам може да уради управо то.
>> Дакле, Ц има ову функцију која се зове струцт.
То је особина језик који нам омогућава да управо то урадите.
Ја ћу ићи напред и отвори струцтс.х
где ћемо видети након дефинисања студента.
Испоставило се да - и ово је чак једноставнији него онај који укључује идентификацију
малочас.
Ако желите да смислимо Ваш домаћи тип података,
а поред ИНТ, и цхар и флоат и све ове друге које постоје,
то можете да урадите буквално писање типедеф струцт,
онда нека цурли протезе, унутар којих сте
листу варијабле које желите да повезују са овом новом цустом података
тип као име и дому, и онда после заграда
дајете име на нови тип података.
Тако, на пример, ученик.
>> А шта је лепо о томе сада да ако погледамо одговарајући код,
Конвенција, први од свега, јесте да стави ово
у фајл под називом нешто дот х, заглавље фајл који немамо
почео се користи превише.
Али ћемо да почне коришћењем сада доста.
И шта можемо да урадимо са овим, на крају, у ових неколико линија кода
се прогласи управо то тип података, студент.
А сада да га користи.
>> Ја ћу да идем у фајл под именом струцтс1.ц.
И хајде да погледамо Неколико карактеристика овде.
Дакле, ствари овде је углавном познато, и ми ћемо
вратити на оно што није познато за који тренутак.
Ово је, наравно, укључујући и моју властиту заглавље датотеке, што је ново и,
осим ПСет 3 где, опозив, имамо хелперс.х.
Дакле, можда се сећате #инцлуде хелперс.х.
>> Зашто мада ја користећи цитате уместо под углом загради?
Када ћу изабрати између њих?
Скоро увек изгледам користити Угаоне заграде.
И онда, одједном се линија шест Ја користим наводнике.
Зашто би то могао бити?
Да?
>> ПУБЛИКА: [неразумљиво]
Давид Ј Малан: То је стварни, шта?
ПУБЛИКА: То је у вашем ИДЕ.
Давид Ј Малан: Да, то је у мом стварном ИДЕ.
И да се не задржавамо на ИДЕ, јер то је само алат који ја користим.
То је у мојој струје директоријум, конкретно.
Дакле, струцтс.х је мој лични фајл није инсталирана у ИДЕ,
у самим оперативним системом, а то је у мом тренутном директоријуму.
Дакле, Конвенција је ако желите да укључите свој хеадер филе,
користите само наводнике.
>> Оно што ми зовемо ову ствар линија 8, уопштено говорећи?
Ово је шта?
#дефине нешто.
Ово представља константе, зар не?
Ако желите да имају вредност у вашем програму
да користи цела гомила времена, то је
добро конвенција да га фактор се, прогласи га, са симболом хасх
дефинисати, онда, по обичају, у свим велика слова ворд-- иако то није
строго неопходно, али то је људски конвенција
да искористи константе тако да искочити
на тебе висуалли-- простора и онда је вредност желите да будете
еквивалент име да стална је.
Не зарез, али једноставно пратити тај образац тамо.
>> Дакле, оно што ја радим у овом стварном кода.
Дакле, хајде да погледамо Главни програм овде.
У складу 12 јер ја укључују струцтс.х,
Сада имам магично на мој Одлагање нови тип података.
Не само да имају приступ инт, и знак, и пловак, и гудачки,
плава и други.
Сада имам приступ тип ученик података.
Дакле, у реду 12, ја комбиновањем два идејама-- један обичај податке Тип и два,
помоћу низа.
И тако у овом програму, ако Желим да заиста подржи
три различита студенти у свом програму, ја
може једноставно рећи да ми променљиву тзв ученика, од којих свака
је ученика типа који је мој тип обичај података.
И, посебно, дај ми три оних у мом низу.
>> И шта сад да радимо у овом програму?
Ево само за петље итератинг од 0 до 3, јер је то
која је вредност ученика.
Само због чега корисника дај ми име ученика.
А онда у реду 17, да имају углавном познати линију.
Ми имамо нашег старог пријатеља ГетСтринг на десној страни.
А шта комад синтаксе је очигледно ново,
ако никада нисте програмирали у Ц пре, и никада нису користили Структуре?
Да?
>> ПУБЛИКА Тхе .наме.
ДАВИД Ј. Малан Тхе .наме.
Али то није превише скок, јер сада студенти изједначи И
даје ученику и-тог.
И ако желе да роне унутар те структуре,
користите само једну период и затим име променљиве унутра,
или имовине у које желите да добијете приступ.
Слично онда, ако сам тада покрене корисник, дај спрата ученика,
сте на сличан начин можете сачувати да стринг у дому променљиве унутар
те студентске структуре.
>> И сада се ствари мало допадне.
И ово ће изгледати у можда много ускоро.
Али видећете ово далеко у ПСет 4, па хајде да поглед на њега сада.
Испоставило се да је у реду 23 кроз 38, шта мислиш да можда радим?
Ја сам уклонио коментаре за данас, али верзија
кода за онлајн Референтна има све коментаре.
Шта чини да радим?
>> ПУБЛИКА: Савинг датотеку са свима информације које је корисник ушла.
>> Давид Ј Малан: Да, тацно, ово је нови начин
да видимо два, Друга карактеристика Ц,
при чему могу створити своје фајлове.
До сада, скоро сваки програм си написао је без држављанства.
Чим се то ради ради, то је то.
Нема меморије или сећања на њега.
Нема фајл сачуван.
Али, ако не желите да саве улаз који има
догодило, као у игри или програму овако, испада да можемо учинити.
И ви ћете видети више у ПСет 4 и у одељку.
Али ова линија 23 у суштини креира фајл који се зове студентс.цсв.
А можда сте већ видели ово.
Чак и ако никада нисте студирали ЦС раније, ЦСВ је раздвојене зарезима варијабле.
То је као веома сиромашан човек је верзија Екцел фајл,
што значи да се може отворити у Екцел и Аппле Нумберс,
и има редове и колоне.
Али то није власништво Формат попут Мицрософт или Аппле-а.
То је само зарези одвајању вриједности које ћемо видети у тренутку.
>> И само да претпоставите.
У реду 23, на самом крај, други аргумент
на ову нову функцију која се зове Ф отворен за Филе Опен је в.
Шта би в означавају?
Да?
>> ПУБЛИКА: То вам омогућава да пишете у фајл?
>> Давид Ј Малан: Омогућава пишете на фајл.
Дакле, постоји неколико варијанти да можемо прикључити овде.
Али ако само желите да прочитате фајл, који је погледај
и прочитао га у меморију, те користите само под знацима навода "Р".
Ако желите да пишете до датотека, користите под знацима навода "В".
Ту је додати и пар других ствари
ако желите да измените постојеће датотеке.
Сада ћемо виђати ово ствар, онда ћемо се вратити на линију 24.
НУЛЛ, испоставило се, није посебна вредност која
може да се врати одређеним функцијама ако нешто кренуло вронг--
ако фајл не постоји, ако сте понестане меморије,
или гомила других грешака.
Али за сада, хајде да претпоставимо да је ова је само конвенционална провера грешке.
Овде у линији 26, ја итератинг од 0 до 3 над свим мојим ученицима.
И ово је нека врста врста новог функције, фпринтф,
али само да претпоставите.
Ако је само штампани иф форматиран стринг
Шта фпринтф вероватно значи?
ПУБЛИКА: Штампање у датотеку.
Давид Ј Малан: Штампање форматиран низ у датотеку.
То је оно што додатно Ф средство је филе.
И нови први аргумент мора да буде променљива која представља ваш фајл.
Онда имамо само формат ниска као принтф.
И иако је ово синтакса је нова, ово само
значи плуг у име ученика, плуг-у студентском дому, а затим
са фцлосе, затворите датотеку.
А онда ластли-- ово је нова па ћемо се вратити на ово
пре него што сам ослобађање лонг-- студент из разлога
што се десило изнад тамо.
Али ми ћемо се вратити да је пре лонг--
то је зато што како је ГетСтринг заправо раде испод хаубе.
>> Дакле, хајде да бацимо поглед овде.
Ако куцам лс у свом именику, приметити да не
имате фајл под називом студентс.цсв, Једноставно не постоји, не постоји.
Дакле, ако ја сада саставити овај програм, чине струцт-1,. / струцт-1,
и ја идем напред и укуцајте Анди, који живи у Берклију на Иале.
Ми ћемо имати Роб ко Живи у Тхаиер ових дана.
И хајде да смислимо где је, ја мислим, Марија је у Матхер,
ако сам добро запамтио.
>> Дакле, ништа се не чини да се деси.
Али ако куцам сада лс, има студентс.цсв.
Идемо напред и отворен студентс.цсв.
Ово је опет веома лаган филе формат.
Али ја једноставно нисам усвојила конвенцију да имам два редове и колоне овде.
Прва колона је Прва имена људи.
Друга колона је ученик спаваоница или колеџ, или дом, или шта све не.
И сад сам спасила ово стално у датотеци.
>> Дакле, то није све толико интересантно.
Али ово је само одскочна даска сада да могу да настави информација
трајно.
Дакле, хајде да видимо шта сада више можемо урадити са овим и другим карактеристикама.
Али прво, има ли питања?
То је много, и то је било брзо.
Али видећете много више у ПСет 4, такође.
Да?
>> ПУБЛИКА: Да ли постоји начин да се наставите са додавањем имена тог фајла?
>> Давид Ј Малан: Добро питање.
Да ли постоји начин да се настави додајући имена тог фајла?
Да.
А, у ствари, ако на крају до ре-отварање датотеке,
коју ће користити цитат под знацима навода "а" за додати,
што би само додати нову линију, а Нова линија опет и опет, управо тако.
Добро питање.
Остала питања?
Да?
ПУБЛИКА: Ако сте пуштали Програм поново сада,
ће задржати додајући имена у филе или би отворити нову датотеку?
>> Давид Ј Малан: Ах, добро питање.
Ако поново у праву водио програм Сада, можда откуцао у новим именима,
би додати датотеке или замените датотеку?
Ово друго, јер сам не користите Аппенд режим.
И зато што сам слепо отварање датотеке за писање,
то је само ће да замените датотеку.
Тако да заиста би требало да урадите је да приложи, ако желим да заиста имају дугорочну
baza podataka.
>> Сада ЦСВ је корисно, искрено, чак и за слично ако сте вритинг--
а ми на крају ћете видети касније у семестру када је
користимо ЦСВ извештаји за друге сврхе.
Ако желите да сачувате све људе који су се регистровали за неки догађај,
или се пријавили за ваш студент група, или нешто слично,
складиштење података у оваквој формата је супер згодно.
Јер, буквално, ако И били су преузети ову датотеку.
Могао бих и доубле-- хајде да пробамо ово стварно
ако имам Екцел или Нумберс овде.
>> Идем да десним кликом или контрола кликните мој досије.
Упс.
Кликните десним тастером миша или контрола кликните мој досије.
Хајде, мој миш не сарађује.
Довнлоад-- Идем у преузети све фајлове овде тако
само да могу да узмем ово.
И да видимо да ли ово ради студентс.цсв-- први пут
Ја сам активиран.
Сада желе да виде своје контакте.
Сада, морам да се региструјете.
Погледајте како је лако користити ЦСВ извештаји?
Да, кееп ит уп то дате.
У реду, сада смо спремни за класу.
У реду, Ох, шта има ново?
У реду, у непосредној близини.
То је магичан.
У реду, сада морамо да упдате.
А сада, заборавио шта филе сам првобитно отворен,
али оно што у-- тамо идемо.
У реду, тако да сада имамо Екцел фајл.
Хвала вам.
>> У реду, па шта сам урадио био лакши део.
Наравно да сам могао пре-инсталлед Екцел или бројеви, или било шта друго програма.
Али, ово је лепо, јер сада могу манипулисати
подаци у стандардном формату.
>> Тако да сада идемо контекст пребаците где смо стали
Последњи пут, који је требало да почне да скине помоћне точкове.
Али прво, ниси види ово и раније ручак
се понови овде Фире и Хокеј у Кембриџу, Ситар у Нев Хавен.
Пријавите се на ЦС50с сајту ЛОЛ да се придруже ЦС50 студената и особља.
>> Дакле, узели смо обуку точкова офф на понедељак као фолловс--
стринг проглашен у ЦС50с библиотека за неко време.
И то је лепо, јер омогућава да разговарамо о варијабли као
комплетне речи и реченице и још много тога.
Али испоставило се низ не постоји.
То је само синоним, или алиас, да смо створили нешто што
заправо је мало више технички зове цхар *.
>> И заиста, видели смо пример програма за понедјељак
који нису понашали толико смо очекивали.
Ово је фајл, упоредите-0.
И сећам се да упоредите-0, ако Ја рецомпиле програм у понедељак
и покрените упоредите-0 и укуцајте маму у мала слова, и мама малим словима поново.
Програм сам инсистирао тип различите ствари,
иако мама, сва у мала слова, је идентично визуелно.
Дакле, шта је био кратак одговор зашто рачунар мисли
те две жице се разликују?
Да?
>> ПУБЛИКА: [неразумљиво]
Давид Ј Малан: Тако је.
Дакле, мама, први пут Ја га укуцајте је да будете
чува негде у мом рачунару меморије, али на другој локацији
него други пут куцам у мами.
Сада је свакако може бити оптимизован.
Рачунар би могао бити паметан и реализовати те две жице, хеј,
они су идентични.
Да не редундантно га чувате.
Али компјутери не ради то Оптимизација осим ако реци им да.
Дакле, по дефаулту, они су само завршити
на два различита места у меморији.
И тако да будем јаснији, када смо упоредили две жице,
Први се звао с, други се звао
Т, шта је конкретно био сам упоређујући овде он лине 13?
Да.
>> ПУБЛИКА: То је место у меморији да ће варијабла указати на.
>> Давид Ј Малан: Тачно, ја сам био поредећи место у меморији
да те варијабле истакао да.
Дакле, конкретно, ако мама била у бите број 1 и 2, и 3,
и 4-- јер се сетим косу црту 0 мора бити скроз на крају.
А друга инстанца Мама, м-О-м, је био на адреси 10, 11, 12 и 13.
Ја сам у односу 1, та адреса, та локација у меморији,
против 10, што је очито није исто.
1 није 10.
>> Дакле, ово је лепо у томе то је прилично једноставан.
Али то је проблематично уколико се не можемо изгледа да упореди конце.
Тако фундаменталли-- и на овако ниском нивоу,
ако сте желели да спроведу програм за поређење
два одвојена речи које је корисник откуца за квалитет,
да ли се построје цхар за Чар, само у општим цртама,
шта треба да урадимо, очигледно?
Није довољно само погледај те две адресе.
Шта треба да урадимо?
Да?
>> ПУБЛИКА: прелазили преко стринг [неразумљиво].
>> Давид Ј Малан: Да, хајде да Посматрајте кроз низ.
Хајде да користи за петље, а вхиле петље, или све што сте највише одговара.
И ако имамо две жице негдје у меморији, хајде да погледамо једни их
први карактер, онда свака друга карактер, онда трећи, четврти и,
и пето, док смо ударили шта посебна Сентинел вредност?
ПУБЛИКА: [неразумљиво]
Давид Ј Малан: Да, обрнута коса црта нула, на којој тачки у оба стринг
можемо одлучити то је то.
Да ли смо упарен сваки карактер?
Ако не, ретурн фалсе.
Ако је тако, ретурн труе.
И то је управо оно што ова верзија програма упоредите-1.ц ради.
Она је идентична са оним што Погледао понедељак, осим да сам
се отарасили речи стринг-- иако да нема функционалну импацт-- све
Радим сада је уклањање неки визуелни точкови обуке,
али да се јасно види да је С и Т су адресе.
И то је оно што је звезда, Звездица, представља
је адреса, иначе познат више технички као показивач.
>> Дакле, када сам изјављујем а на линија 9 и рећи цхар * с,
то не значи да ми низ.
То значи да ми променљиву чија сврха у животу је да сачувате адресу.
Зато што сам ја хтео да ставио адреса стринга у томе.
И заиста, ГетСтринг, да се јасно, не враћа стринг.
То не врати маму обрнута коса црта нула, само по себи.
Шта конкретно ГетСтринг и прецизно се вратите?
ПУБЛИКА: [неразумљиво]
Давид Ј Малан Ан адреса, адреса првог карактера
у неком низу је стечен.
И сада видимо посебан поново кључна реч.
И, алудирао сам на то раније.
Ово ће бити добра конвенција да ћемо опет и опет видим.
Гледам да се уверите да а није ништаван и т није нула.
Јер, на основу мог стварно брзо помиње раније,
шта би могло значити ако ГетСтринг врати не адреса, али Н-У-Л-Л, који је опет,
нека посебна вредност?
>> ПУБЛИКА: Грешка.
>> Давид Ј Малан: То је грешка.
Нешто није у реду.
А шта обично може десити, поготово
са стрингс-- што може бити непознатог дужине у адванце--
можда компјутери ' оут оф мемори, можда
сте укуцали у таквом дуго реч или реченица
или залепио тако велику есеј Једноставно нема довољно меморије.
И тако ГетСтринг не могу вратити адреса целе ствари,
тако да само враћа ништа.
И каже грешка што се догодило враћањем посебну НУЛЛ вредност.
То је нула адреса, да тако кажем.
>> Сада испада да, Ц долази са функција која вам то итерација.
Не морамо да спроведе ово са фор петљу или вхиле петље сами.
Можемо користити функцију, зове језгровито,
промешајте цомп, или стринг цомпаре, чија је сврха у животу је да управо то.
Ви му дати два савете, две адресе, и то ће ићи на те адресе
а затим упоредите писмо за Писмо за писмо за квалитет,
заустављање само када шта је истина?
Када интуитивно треба мешати цомп престану итератинг, само да буде јасно?
Када погоди обрнуту косу црту 0 у било стринг у ком тренутку може да одлучи
је све упарен, или Да ли је постојао несклад?
>> Дакле, ако останемо ово сада и покушајте наша мала капитализација игра,
тако да упоредите-1, ./цомпаре-1, и тип маму малим словима оба пута.
Сада је иста ствар.
И ако то урадим поново са мала слова и онда можда великим словима.
Сада је то заиста прави разлику између великих и малих слова.
Дакле, није све тако тешко или магично, али то не објашњава сада
шта се дешава испод хаубе.
>> Дакле, шта више можемо извући од ове врсте лекције?
Дакле, хајде да погледамо ово.
Ја идем напред и написати Брзо програм овде зове цопи-0.
А сада идемо напред и заправо хајде да урадимо ово-- са копијом-0,
Погледајмо шта имамо овде.
Први пут сам реци корисника, реци нешто.
Онда сам се низ и ја га чува у с.
Онда сам проверите да ли ови једнако једнако НУЛЛ, само се врати 1.
Дакле, ово је само стандардни провера грешке.
Ништа занимљиво се десило.
У ствари, ако се ослободимо грешке провере, ово изгледа као недеље 1 код
овог тренутка.
Али сам почео да добијем мало боље о томе.
>> Сада у реду 16, пре недељу дана, можда Пре чак и неколико дана или минута,
могло би се рећи линија 16 је стварајући променљиву зове т
и копирање с у њу.
И то је савршено разумно понети.
Али будите прецизнији сада.
Шта се дешава у реду 16?
Оно што је узимајући копира са десна на лево?
Да?
ПУБЛИКА: Да ли је Т добивање адресу с?
>> Давид Ј Малан: Тачно, Т добија адресу с.
Тако да је сада јасно, ако одем назад на том ранијем примеру
и ја извући ствар сам откуца.
И оно што сам откуцао у-- ево ова, и овде
је оно што сам откуцао у Сомевхере ин меморије, мама и онда обрнуту косу црту
0 који је додао за мене.
Оно што чувају овде, сећам се, то је у локацији 1, 2, 3, 4,
то је оно што је тренутно у с.
Дакле, ако он лине 16, кажем дај ми друга променљива зове т и продавница
у у вредности од с, што се складишти овде неће мама
већ само број 1.
>> Дакле, ако ми гледамо испред себе у овом програму Сада, шта ће се десити?
Тако приметити да постоји ова функција да би могао
су користили ово пре неког времена за Цезара, или Вигенере, или можда уопште не.
Тврдим са мојим принтф, ја сам ће да искористи копирање т.
Први у реду 19, брз разум цхецк, стрлен проверава дужину т.
Зато што не желим да покушати да искористе нешто
Ако нема жица тамо.
Ако корисник само притисните Ентер, нема ста да се искористи.
Дакле, ја не желим да радим лине 21.
Дакле, линија 21 је капитализацијом који писмо, наводно, у т?
>> ПУБЛИКА: м?
Давид Ј Малан: Изгледа као да је копирање којих је један?
ПУБЛИКА: м.
Давид Ј Малан Ух, м.
У реду, тако да у првој м, јер најаве да сам
пролази на тоуппер, који ако никада нисам видела да је
само функција у искористи као свој улаз.
Т носач нула значи дати ја нуле карактер т.
А како ово промена слика, да буде јасно?
Шта треба да се поново написана или мењане у односу на С и Т и маме
обрнута коса црта нула.
>> ПУБЛИКА: [неразумљиво]
>> Давид Ј Малан: Да, Дакле, ова овде једноставно
треба да се променио да-- поправити ово-- треба да се мења у великим м.
Али сада, погледајте касније у Програм, ако исписати
С и Т, као што сам овде чисти, пази шта је ће се догодити штампање С и Т.
Тако да цопи-0, ./цопи-0.
Пусти ме само напред и унесите у мамом у свим малим словима.
Обратите пажњу и оригинал и копија су капитализовани.
Zašto?
Па, С и Т су обе указују на, ако хоћете, исти комад меморије.
И искрено, ово постаје Заиста унинтерестинг-- чињеницу
да користимо адреса нула овде.
Мислим, стварно не занима где је ствар је у меморији.
Жао ми је што сам брисање мало превише.
Али ја стварно не занима где су ствари у меморији.
И тако, заиста оно програмери имају тенденцију да размишљају о
је да када говоримо о адреса, или показивач,
кога брига где је у меморији.
Не занима ме да ли је у бајт један или једна милијарда.
Само ми је стало да ово променљива је ефективно
указујући на том меморију.
И тако, убудуће, уместо куиббле над произвољним меморијске адресе, хајдемо
само почети да скрене савете као показивача, као стрелице.
Па шта с и т заиста, према овом програму,
јер како сам створио т, то је само два одвојена варијабле
указујући на истом меморију.
И не занима ме где су.
Дакле, можемо апстрактан далеко тај детаљ.
>> Па како да поправим ово?
Ако желим да напишем верзију копије програм који заправо копира стринг
и искоришћава само копија, само интуитивно,
оно мора бити ингредиент нашем решење?
ПУБЛИКА: [неразумљиво]
Давид Ј Малан: Треба нам шта?
ПУБЛИКА: меморију.
Давид Ј Малан: Морамо још један комад сећања, зар не?
Ми не знамо како да урадите то још, нужно.
Али некако ми ово да се деси да је оригинална мама малим словима
завршава на тај екстра меморију.
И онда када сам променити копију, ја не желите да промените ову копију овде.
Ја уместо желите да промените само ово копију тако да је оригинал непромењена.
>> Дакле, хајде да видимо како бисмо могли да урадимо ово.
Ин цопи-1, који је већ је одузет коментар,
али је коментарисао на мрежи.
Уместо тога урадите ово фолловинг-- линије су идентични, дај ми низ
и позвати га с.
Али сада хајде да погледамо један од наших најбољих сложен, али последњи сложености
за неко време, ред 16 ради управо то.
Дакле, ако ваш удобан са слика коју смо управо древ--
дај ми нови комад меморије, цопи све у њој,
хајде да видимо како можемо превести то код.
>> Па ред 16, на лијевој страни, Чар * Т ми даје ову кутију овде.
То је све што ради.
На десној страни, м Аллоц, или маллоц,
је алокација меморије, супер фенси, криптичног начин само кажем
дај ми меморију.
Колико меморије нам је потребно?
Па, је нека врста великог изражавања.
Али да видимо шта овде пише.
Дакле, ово је, наравно, је да ми дужина низ с.
Дакле, мама би требало да буде шта?
Дакле, само три, зар не? мама је три карактера.
Не бројим обрнута коса црта нула када вас
говорити о дужини стринга је то заправо људска видљиве писма.
Тако мама, па то ми даје 3.
Али чекај мало, сада сам додао 1.
Зашто ја заправо желим да издвојити 4 бајта, а не само 3?
Да?
>> ПУБЛИКА: За сентинел вредност?
>> Давид Ј Малан: Тачно, за тај сентинел вредности.
За обрнуте косе црте нула, Морам 4 Битес Тотал.
Дакле, ми треба дужину од низа плус 1.
И онда само због доброг меасуре-- иако на овом систему,
то увек бити 1-- говорим помножите то од величине цхар.
Испоставило се да је сизеоф оператор у Ц који
Само те да говори број бајтова који је
потребно за одређену врсту података.
То не ради за низове, обично, понекад не.
Али у општем случају, бр.
Али ће ми рећи колико бајтова, Чар је, што испада је увек 1.
Дакле, ово је као множењем са 1.
>> Тако Супер загонетан потрази линија кода.
Али, све што ради је даје ми комад меморије.
Али, да ли вам се чини да се копира нешто у том меморију?
Не још.
И тако оно што радим на линији 22, и 23, 24, 25, па, ја једноставно урадим ово.
И ово је нека врста стара школа ствари сада.
Ово је као ПСет 2, где је само се селимо ствари
око у меморији, односно у низовима.
>> Дакле, ја итератинг од 0 до дужина Стринг с.
И ја копирање и-ти карактер у с у и-том карактера у т.
И зато што сам, програмер, је Сигурно да издвоји тачно онолико бајтова
као што ми треба, то је савршено један-на-један везу.
И цопи маму у мала слова на нови.
И онда на крају, ја ову линију.
Тако ефекат је једини да искористи ову т овде.
Тако много да апсорбује, али ако само узети у обзир
шта се заиста дешава на испод хаубе
тек креће ових бајтова около, све то
Потребно је да се реши овај проблем само да нам овај комад меморије.
Сада на ризик огромна, да ти покажем
један пример да је готово идентични, осим овога
линија кода.
Дакле, ово је верзија хакер овог програма, ако хоћете.
Али хајде да дестилирати је у шта се дешава.
Линија 24 се користи да се ово Т носач ја добија ова конзола и.
Сада, ја мењам ово Много више загонетан Стар Т
Плус 1 једнако звездице С Плус 1.
>> Дакле, шта се дешава и зашто да имамо карактер звезда?
Видели смо звезду раније, и то се користи овде другачије.
Раније смо видели цхар *, сада видим звезда на почетку, и то је у реду.
Зато што се испоставило смо може закључити само врста
од оних први принципи шта се дешава.
Дакле, само да буде јасно, шта је с?
Прошле недеље, то је стринг.
То више не довољно.
Шта је ова, конкретно?
>> ПУБЛИКА: [неразумљиво]
>> Давид Ј Малан: То је показивач.
То је адреса Први знак да откуца.
ОК, шта је т?
>> ПУБЛИКА: [неразумљиво]
>> ДАВИД Ј. Малан Тхе адреса првог бајта
у т, који комад меморије прерасподјела.
Тако испада да кад Посматрајте од 0 он до низа
ленгтх-- пре свега, ја почиње на 0, јер је
ове старе школе за ствари петље.
Дакле, само за једноставност, хајдемо Претпостављам да је прва линија кода
је заиста само ово, зар не.
Ако и је нула, нула и додао нешто вероватно
неће имати ефекта.
>> Па шта је ово изрека?
Испоставило се да је звезда оператер у том контексту
је дереференце оператер, који је само
фенси начин да се каже го на следећу адресу.
Дакле, ако с је адреса први лик у овом комаду меморије,
* с средства иду тамо.
И зато смо извући слика на овај начин,
можете усвојити Следећи ментални модел.
Ако је ово а, а ви кажете * с * с, нешто као падобрани и мердевина,
ако се сећате игру из детињства, је као фоллов стрелу и отићи
на адресу.
>> * т је иста ствар.
Дакле, почните овде, идите на свом комад.
Ја не могу да скренем на овај екран тако.
* Т значи да одем одавде.
А онда, за петљу је само рекавши да се овај лик овде,
се овај лик овде, померите овај лик овде.
Али како то да урадим Инкрементација?
Морам да поништи оно што сам управо обрисан.
То је оно што се обично назива показивач аритметика, која
значи математику са адресе.
>> Ако у ово петље, Стално се увецава и,
и с је адреса и т је адреса, ако само задржати додајући 1,
то само значи кретати напред, и напред и доставља у меморији.
То је као Окфорд Стреет, Тхе улица да је зграда ЦС је на.
ЦС зграде је на 33 Окфорд Стреет.
Дакле, ако сте били да урадите 33 Окфорд Стреет, плус 1,
која вас доводи до 34 Окфорд Улица, затим 35 Окфорд Стреет,
затим 36 Окфорд Стреет, шта год они зграде су заправо - ако постоје.
И тако, то је све што радимо овде са показивачем аритметике.
>> Дакле, то је супер волшебни начин од себе изражавања.
Али све што се дешава испод хаубе
је само након ове адресе, изгледа овако карту, ако хоћете,
или након стрелице као смо нацртан на екрану.
У реду, доста за варење.
Свако питање о синтакси, концепти, показивачи, маллоц, или слично.
Да, овде прво.
>> ПУБЛИКА: Па где је каже * Т једнака тоуппер * т,
је да ће да искористе сва писма или само--
>> Давид Ј Малан Ах, Стварно добро питање.
Дакле, у овој линији овде, 31, ће ово да искористи
прво слово или све слова.
Дакле, хајде да одговорим на то питање тако што ћете назад на прву принципима.
И први принципи овде мислим само иди са основним дефиницијама
шта је уплетен.
Дакле, тоуппер је функција да капитализовано цхар.
То је све.
* Т значи ићи на фирст-- идите на адресу у т.
Дакле, на слици, ако је ово комад меморије издвојили смо са маллоц,
и ово је т, * Т знаци иду овде.
>> У међувремену, ти пролазу та вредност, мала слова м
да тоуппер, ви се вратимо Цапитал М, где си га ставља?
Ти стављајући га у тој истој локацији.
И тако од тој логици оних основне дефиниције То је само
капитализацијом прво слово осим ако поновити са И или
фор петља или вхиле петље, не иде да уради ништа више него што га питате.
Добро питање.
Да?
>> ПУБЛИКА: Зашто сте користити дереференце метод него
Низ?
>> Давид Ј Малан: Ах, добро питање.
Зашто би сте користили Дереференце метод уместо метода арраи?
Не посебног разлога, да будем искрен.
И, у ствари, за ово врста пример, право,
Само тврдећи чинећи Програм компликованија,
више очи застакљивање преко, људи провјерава
јер ово изгледа супер волшебни, али иако ради исту ствар.
И тако, искрено, ово је непотребно визуелно комплексно решење
проблему.
>> Још увек је добар дизајн, пет од пет за пројектовање,
да ли је у конзолу Ознака или показивач нотација.
Али- нарочито када дођемо Касније у току у ПСет 5
кад смо спроведе ту речник који Ја сам поменуо неколико тимес--
ми заправо ћемо брига о низак ниво меморијске адресе
да ми заиста разумемо шта се дешава.
>> Али, за сада, испоставља се да је ово линија кода овде заградама
стварно не постоје.
Они су оно што се зове синтаксичких шећер, који
је само чудно кул начин рекавши да преводилац претвара угласте заграде да буде
да математички израз.
Дакле, то је људски конвенција бити у стању да само пишем
ови врло разумљив заградама.
Али шта преводилац, цланг, заиста ради у било које време
пишете шта је истакнут у складу 24, испод хаубе је стварно
то претварање ово.
То је само више угодно као човека да чита и пише код слично линији 24.
Али на крају они тренинг точкови превише отпасти
када сопствена удобност све јачи.
>> У реду, тако да је ово онда се сетим је врста највећи проблем
смо налетели на.
И то је оно што је изазвало ову целину проклети разговор о тројкама,
и адресе и копирање ствари.
То је зато што се саплео ово глупо, глупо питање, при чему
Имплементиран сам логицалли-- са Лаурен овде на демо и сок од поморанџе
у милк-- савршено алгоритмички исправна функција
за замене две варијабле ' вредности, али та проклета ствар
није имао упорна, или стална, ефекат на мом коду.
>> А зашто је то било?
Укратко, зашто је ово имплементација свап
логички исправан, али нема утицаја на варијабли које се доносе на њега,
као кии за главни?
Шта је суштина питања?
Да?
ПУБЛИКА: Зато што је променљива копије променљиве у пролазу
кроз функцију.
>> Давид Ј Малан: Тачно, када прођете варијабли у функцији, или аргументи
у функцији, они су доноси копију, која
значи добијате идентична лоокинг образац бита за оба Кс и И,
позвао овде и б.
И ви можете учинити ништа желите са тим копијама,
али они ће имати нема Ефекат на позивање функције.
А, у ствари, нацртао слика на екрану, опозив
Последњи пут, при чему вас ако стварно мислим о томе шта је
дешава се испод хоод-- ако ово је меморија рачунара,
и овде је комад меморија се користи за главни,
ово је комад меморија се користи за свап,
па чак и ако главни има две варијабле, Кс и И,
Свап можда има идентичан гледа вредности, оба су 1 и 2,
али су потпуно си различити комади меморије.
>> Дакле, потребан нам је решење за ово.
И искрено, изгледа да смо сада имам решење за овај проблем, зар не.
Ако сада имамо могућност да манипулишу ствари путем адресе
и на неки начин падобрани и мердевине стил, следите ове стрелице
и било где желимо у меморији, зар не можемо да
реши овај проблем пролази од магистралног да мењате
не вредности желимо да Свап, али само интуитивно
Шта смо могли проћи да уместо замене?
>> [Ставим Воицес]
>> Давид Ј Малан: Зашто не бисмо пасс то адресе, зар не?
Зашто не дајемо свап А благо карта, ако хоћете,
који га води до стварне вриједности Кс и И.
Идемо замена, заиста променити те оригиналне бита, а не
само у пролазу копије бита.
И тако, у ствари, то је оно што је ће бити решење.
Ова верзија је овде јасно лоша и погрешна.
А сада, на први поглед, што изгледа као да смо додао гомилу звезда случајно
и прешли наше прсте да ће саставити.
Али, то би сада саставити.
>> Али, хајде да видимо шта ово значи.
И, нажалост, аутори Ц могла су изабрали други симбол
да ово мало јаснија, али оператор звезда
има другачије значење у два различитим контекстима.
И видели смо обоје, али хајде да разликујемо.
>> Дакле, горе на врху, када сам променио и б
од тога инт је у лоше Верзија за инт старс, А и Б,
претходно били бројеви.
Шта су А и Б сада у добро, зелена верзија?
Они су адресе.
Адресе шта, да буде јасно?
Адресе целих бројева.
Дакле, чињеница да сам рекавши Инт звезд средства
ово је адреса цео број, конкретно.
>> Дакле, сада приметити у линијама кода, нешто изменио.
тмп остаје исти, јер то је само привремено цео број,
нема меморије магија постоји.
Али сада треба звезду.
А, у ствари, сваки друго помињање А и Б,
Приметићете да све то мења од црвене до зелене
је да сам префикса те променљиве са звездама.
Зато што не желите да копирате А и Б.
Јер ако сам само цопи а и б и свап А и Б, шта ја заправо замене?
Само адресе, желим да заменимо шта је на тим адресама.
Желим да идем тамо.
И тако је оператер звездице у мом функције,
не унутар листе параметара, значи идеш на те адресе
и заправо мењају те вредности.
>> Дакле, шта слику Сада изгледа као уместо тога.
Па, ако уместо тога сам пролазу у за А и Б не 1 и 2--
Заправо треба да додам једна дефиниција овде.
Дакле, претпостављам да овај комад меморије је на локацији 10.
>> Ово је на локацији 11, али ово је помало поједностављења,
Сада имам два избора ја проћи х и и или да донесу своје адресе?
Ако прођем своје адресе овако, управо сам
сада треба да спроведу Свап по зеленој код
тако да када види и када га види Б, не само копирати А и Б
и померите млеко и сок од наранџе.
Млеко и сок од поморанџе метафора сада поквари,
јер су пехари течних и не мапама.
Уместо тога треба да иде да се обрати 10 и ми
Морам да идем да се бави 11, и затим извршите да замене логику.
>> Дакле, логика је иста, али потребан нам је мало другачији начин
приступа тих варијабли.
И тако на крају, оно што је Програм треба да изгледа као ово.
У свап.ц буквално копирао и залепио зелену верзију.
Али морам да једну промену.
Није довољно само променити свап.
Шта друго линија кода морам да променим?
Да?
>> ПУБЛИКА: Где је потребно аргументе.
>> Давид Ј Малан: Где потребно је његов аргумент.
Дакле, ако сам дођите до главног, ја Не могу само проћи у Кс и И,
и, обећавам, последњи комад нове синтаксе данас.
Морам да прође у не Кс и година али је адреса к и и.
И испоставило се, симбол да су аутори изабрали Ц
је ако користите амперсанд овде, не да треба мешати са битовима амперсанд,
ако користите амперсанд овде и један Амперсанд овде,
ово схвати за вас, која је адреса од к,
можда је 10, што је адреса и, можда је
11, и пролази онима у крилу.
>> Тако много да апсорбује све одједном.
Али да видимо брзо у наши преостала четири минута
где ствари могу кренути наопако.
И успут, у ствари Узео сам ову слику,
ЕЦ је ову слику пре годину или две.
Дакле, ово је вратио кутак од Елиот трпезарији.
Показивачи су можда најтежи тема које смо покрили у ЦС50.
Дакле, ако бринете врста нагиба је као да је
више од Хоцкеи Стицк овако, схватити
Некако смо ближи врхунац у Услови идејног сложености.
>> И довести до ово фото, јер кунем
За Бога, у јесен 1996. године, када сам узео ЦС50 са мојим демонстратор,
Нисхат Мехта, он ме је сео у угао Елиот Д. Халл током ручка,
или вечеру, или нешто да покушам да ми помогне да схвате савете.
И ово је место где сам ја био недеља након је уведен у предавању када је
На крају сам схватио савете.
И ја сам се надам да је ово ће кликнути далеко раније за вас.
Али схватите ово апсолутно међу су софистицираније теме
ми смо гледали.
Али то је међу најмоћније.
И када га добијете, то је стварно све само да коначно дошао заједно.
Дакле, будите уверени да не ради треба да све лавабоа у данас.
>> Дакле, овде је задњи програм ћемо да погледамо.
И ми ћемо завршити са брзе три минута Цлаиматион
маде би нашег пријатеља, Ницк Парланте.
Ево програм, који на врху два линија декларише променљиву к и и.
Оба су адресе за целих, ака показивачи.
Затим смо издвојити довољно меморија за складиштење инт
и чувајте адресу тог сећања на к.
Дакле, то је још једноставније него рецимо пре.
Дај ми четири бајта меморије, То је величина инт,
и ставио ту адресу у к.
Ова линија овде значи идите на адресу у к
и ставити значење живот, број 42 тамо.
Али ова линија ме брине.
Стар И значи отићи на адресу у и, и стави несрећан број 13 тамо.
Зашто је то опасно, у овом тренутку у стори-- мада брзо рекао
у нашим последњим минута овдје-- зашто је лоше
да кажем, идите на адресу у И?
>> ПУБЛИКА: Немате [неразумљиво].
Давид Ј Малан: Немам стави нешто у и.
Дакле, шта је вредност и, у овом тренутку у причи?
Немамо појма.
То је нека вредност смеће и нити Бинки зна.
Ако бисмо могли завршити на овој поруци.
>> [ВИДЕО РЕПРОДУКЦИЈА]
>> Хеј, Бинки, пробуди се.
Време је за показивач забаве.
>> -Шта је ово?
Сазнајте више о тројкама?
Ох, добро.
>> Па, да почнемо, ваљда смо Требаће пар савета.
>> -ОК.
Овај код додељује две тројке што може да укаже на целих бројева.
>> ОК, добро видим да је два показивачи, али су
Изгледа да није показујући на било шта.
>> -Тако је.
У почетку показивачи не указују на било шта.
У ствари, они указују на су зове поинтеес и постављање их
представља одвојени корак.
>> Ох, да, да.
Знала сам да.
У поинтеес су одвојени.
Па како издвојити поинтее?
>> ОК, и овог законика додељује нова цео поинтее,
и овај део комплета х да укаже на то.
>> Хеј, то изгледа боље.
Тако да то уради нешто.
>> ОК, ја ћу дереференце показивачем Кс да сачувате број 42 у својој поинтее.
За овај трик, треба ми мој чаробни штапић за дереференцинг.
>> Твој чаробни штапић од дереференцинг?
Ух, то, то је супер.
>> Ово је оно што код изгледа.
Само ћу поставити број и--
>> [Поп звук]
>> Хеј, гледај тамо иде.
Дакле, радећи на Дереференце к следи стрелице за приступ поинтее.
У овом случају, да складиште 42 унутра.
Хеј, покушајте да га користи за чување броја 13. кроз други показивача и.
>> -ОК.
Идем тамо да и, и добити број 13 поставку.
А онда се штапић од дереференцинг и само--
>> [БУЗЗЕР Соунд]
>> Ох, хеј то није успело.
Рецимо, ух, Бинки, не знам Мислим дереференцинг
и је добра идеја, јер постављање горе уз поинтее је посебан корак.
И не мислим да смо икада то урадили.
>> Хмм, добра ствар.
>> -Да, Издвојила се показивач, и, али нисмо га поставили да укаже на поинтее.
>> Хмм, врло пажљиви.
Хеј, добро изгледаш ту, Бинки.
Можеш ли то поправити тако да и бодова на исти поинтее као к.
>> Наравно, ја користим свој чаробни штапић од показивача задатка.
>> -Је Ли то це бити Проблем, као пре?
>> Не, то не додирује поинтеес.
Само један показивач мења да укаже на исти ствар--
>> [Пуцкетање]
--ас друго.
>> -Ох сад видим.
Сада и указује на истом месту као и к.
Па, чекај, сада год је фиксна.
Има поинтее.
Дакле, можете пробати штап од Поново дереференцинг послати 13 овер.
>> Ох, ОК, ево иде.
>> Хеј, погледај то.
Сада дереференцинг радове на год.
И зато су показивачи деле да једном поинтее, обојица виде 13.
>> Да, дељење, ух, како год.
Дакле, идемо сада пребацити места?
>> Ох, гледај смо више времена.
>> -Ali--
>> -Само Запамтите три правила показивача.
Број 1, основна структура је да имате показивач,
и указује на преко поинтее.
Али показивач и поинтее су одвојени.
А честа грешка је да се успостави показивач
али заборавити да му дати поинтее.
>> Број 2, показивач дереференцинг почиње у показивача
и прати његову стрелу преко за приступ поинтее.
Као што сви знамо, ово ради само ако постоји је поинтее, која врста врати
да Правило број 1.
>> Број 3, показивач Задатак траје један показивач
и мења га да се укаже на Исто поинтее као још један показивач.
Дакле, после задатка, два показивачи
ће указати на исти поинтее, понекад то се зове дељење.
И то је све што је потребно, заиста.
Збогом сада.
>> [Крај репродукције]
>> Давид Ј Малан: То је то за ЦС50.
Захваљујући професору Ницк Парланте.
Видимо се следеће недеље.
>> [ЕЛЕКТРОНСКИ мусиц плаиинг]