>> Дејвид MALAN: Здраво, и добредојде назад кон CS50.
Значи ова е крајот на недела четири.
Само една објава во прв план.
Па т.н. петта понеделник е доаѓа до ова доаѓа понеделникот.
Ова е можност да се смени од SAT / UNSAT на писмо одделение, или од
писмо одделение SAT / UNSAT.
Annoyingly, тој процес не бара потпис, затоа што мора да се пополни
по една од тие розова додавање / капка форми.
>> Затоа што технички, SAT / UNSAT верзија и писмо одделение верзија
имаат различни каталог броеви.
Но нема ништо страшно.
Само дојде до мене или да му ја одземеш или да Лорен во кој било момент.
Или ни e-mail ако немате вид на документација што треба денес, и ние
ќе бидете сигурни да ви помогне да ги преземат грижи за тоа пред понеделник.
>> Сите во право, па денес -
всушност, постои малку на ехо.
Можеме тон ме долу малку?
OK.
Така, денес, ние се воведе тема познат како покажувачи.
И јас ќе признаам дека ова е еден од повеќе комплексни теми кои ние се стремат да
покрие во оваа класа, или навистина било воведен курс кој го користи В
>> Но земајте мојот збор за тоа, особено ако вашиот ум се чувствува малку повеќе свиткана
денес и во неделите што доаѓаат.
Тоа не е претставник од вас добивање било полошо во овој тоа само значи дека
тоа е особено софистициран тема дека јас ветувам, за неколку недели
оттаму, ќе изгледа премногу неверојатно јасна во минатото.
>> Јас уште се сеќавам на овој ден.
Седев во Елиот Јадење сала, седи до мојот ТФ Nishat Мехта,
кој бил жител на Елиот куќа.
И поради некоја причина, овој тема само кликне.
Што да се каже дека сум премногу се бореше со него за некои износот на време, но јас
ќе дадам се од себе за да се избегне било каква борба со тема која во крајна линија
е доста моќен.
>> Всушност, една од темите ние ќе разговараме во недели да дојде е дека
на безбедноста, и како можете да всушност искористат машини во начини
кои не биле наменети.
И оние експлоатација обично се резултат на грешки, грешки кои ние
луѓе прават со тоа што не разбирање на некои на основните имплементација
детали преку кои програми се направени.
>> Сега да се направи ова изгледа сè повеќе и повеќе корисник пријателски, мислев дека сум се играат 10
Вториот преглед на малку claymation фигура наречена Binky кој беше донесен во
живот од страна или од наш пријател на Стенфорд, Професорот Ник Parlante.
Па дозволете ми да ви даде оваа закачка на Binky тука.
>> [Видео репродукција]
>> -Еј, Binky.
Се разбудам.
Тоа е време за покажувачот забава.
>> -Што е тоа?
Учат за покажувачи?
Ох, goodie.
>> [Крај видео репродукција]
>> Дејвид MALAN: Тоа е Стенфорд компјутерски науки.
Толку повеќе за тоа да дојде.
>> [Аплауз]
>> Дејвид MALAN: За жал, Ник.
>> Па се потсетиме дека последен пат заврши на ова навистина возбудливо cliffhanger
при што оваа функција само не работат.
Најмалку интуитивно, го почувствува како тоа треба да работат.
Едноставно Замена на вредности на два цели броја.
Но се потсетиме дека кога ние отпечатени на оригинални вредности во главната, една и
две, тие се уште еден и две, а не два и еден.
>> Па да ми всушност се префрлат во текот на апаратот.
И напишав се малку на скелетни код во унапредат овде, каде што тврдат дека x
ќе биде 1, y ќе биде 2.
Јас потоа печати од двете на нивните вредности со печатените ѓ.
>> Јас тогаш тврдат долу тука дека ние ќе ги трампа.
Ти оставив празно место тука за нас да пополнете денес во само еден миг.
Тогаш, јас ќе одам да се тврди дека две променливи се заменети.
Тогаш јас ќе одам да се печати нив повторно.
И така се надевам, јас треба да видите 1, 2.
2, 1.
Тоа е супер едноставен цел во моментов.
>> Па, како да одиме за Замена две променливи?
Па ако јас предложи тука дека овие чаши би можеле да претставуваат меморија во компјутерот.
Ова е неколку каснувања, овој е уште неколку каснувања.
Ние би можеле да имаат волонтер ајде и ни се меша некои пијалаци, ако познато?
Ајде горе.
Што е вашето име?
>> JESS: Џес.
>> Дејвид MALAN: Jess?
Ајде горе, Џес.
Ако не ти пречи, ние треба да се стави на Google Стакло за вас, па можеме да
овековечи ова.
Добро, стакло.
Снимате видео.
И OK, ние сме добро да се одат со Jess тука.
Сите во право.
Убаво да ви се исполнат.
>> Па што јас би сакал да го направите тука - ако може, многу брзо -
само да ни истура половина чаша од портокал сок и половина чаша млеко,
претставува ефикасно броевите 1 во една чаша и 2 во другата чаша.
>> Ова ќе биде добра снимка.
>> JESS: Извини.
>> Дејвид MALAN: Не, не.
Тоа е во ред.
Убаво.
Сите права, па ние имаме четири бајти во вредност од сок од портокал.
Ние ќе го нарече вредност 1.
Сега уште четири бајти во вредност од млеко.
Ќе го наречеме вредност 2.
Значи x и y, соодветно.
>> Добро, па сега ако задачата при рака - за вас, Џес, во присуство на сите
на своите соученици -
е да се разменуваат вредностите на x и y, како дека сакаме сок од портокал во
други чаша и млекото во оваа чаша, како може да ви - пред навистина да сте го стори
тоа - се обратите за тоа?
>> Добро, мудра одлука.
Значи ви треба малку повеќе меморија.
Па ајде да ги распредели на привремена чаша, ако сакате.
А сега продолжи да се разменуваат со x и y.
>> Одличен.
Така многу добро направено.
Ви благодарам многу, Џес.
Тука сте.
А малку сувенир.
>> Добро, па очигледно, супер едноставна идеја.
Сосема интуитивно дека ние треба малку повеќе простор за складирање - во оваа форма,
чаша - ако ние всушност сакате да го разменуваат овие две променливи.
Па ајде да го прават токму тоа.
До тука во меѓу каде што тврдат дека јас сум ќе треба да се прават некои Замена, јас ќе
оди напред и да прогласи Temp.
И јас ќе го постави еднаква на, да речеме, х.
>> Тогаш јас ќе одам да се промени вредноста на x исто како и Jess го направи овде со
млеко и сок од портокал да биде еднаква на y.
И јас одам да се промени Y за да биде еднаква да не x, бидејќи ние сега ќе биде
заглавени во круг, туку Темп.
Каде што привремено - или каде што Џес привремено се стави на сок од портокал
пред clobbering дека чаша со млеко.
>> Па дозволете ми да оди напред сега и прават ова.
Таа се вика noswap.c.
И сега дозволете ми да се кандидира без swap.
И навистина ме види, ако јас се прошири прозорец малку, дека
x е 1, y е 2.
А потоа x е 2, y е 1.
>> Но се сети дека во понеделникот го правевме работи малку поинаку при што можам
наместо да спроведува помошна функција, ако сакате, дека е всушност празнина.
Се јавив го трампа.
Го дадов два параметри, и јас го повикував им и јас ги повика б.
>> Искрено, јас би можеле да ги наречеме x и y.
Нема ништо запирање мене од тоа го прават.
Но јас би рекол тоа е тогаш малку двосмислена.
Бидејќи се потсетиме за понеделник дека ние тврди дека овие параметри беа
копии на вредностите помина внатре
Па тоа само мензи со вашиот умот, мислам дека, ако користите
иста променливи.
>> Па јас наместо ќе ги наречам со и б, само за јасност.
Но ние би можеле да ги наречеме и повеќето нешто што сакаме.
И јас одам да го копирате и залепите ефикасно овој код од таму горе
долу во тука.
Бидејќи јас само видов дека навистина функционира.
Па тоа е во прилично добра форма.
И јас ќе ги променам моите x на, мојата x на, мојот Y за да б и мојот Y за да б.
>> Значи со други зборови, точно истата логика.
Точната истото што Џес го направи.
И тогаш едно нешто што треба да направите до тука, се разбира, е сега се повикаат на таа
функција, или јавете се на оваа функција.
Па јас ќе го наречеме оваа функција со две влезови, x и y, и притиснете Save.
>> Сите во право, толку фундаментално истото.
Всушност, јас сум веројатно го направија програма непотребно сложени од
пишување функција која е само преземање некои шест линии на код а јас
претходно спроведени ова во само три.
>> Па дозволете ми да оди напред сега и римејк ова, не прават трампа.
Сите во право, јас зезнав тука.
Ова треба да биде грешка која можеби види повеќе најчесто како вашиот
програми се посложени.
Но, има лесен фикс.
Дозволете ми да дојдете назад до тука.
>> И она што е на првата грешка што го гледам?
Имплицитна декларација.
Што значи дека обично укажуваат на тоа?
О, јас заборавив на прототип.
Јас заборавив да учат на компајлерот дека трампа се случува да постои, иако тој
не постои на самиот почеток на програмата.
Па јас сум само ќе кажам празнина, swap, int, а int б, точка-запирка.
>> Па јас не одам да го reimplement.
Но, сега тоа се совпаѓа она што е овде долу.
И известување, отсуството на точка-запирка тука, што не е потребно кога
спроведување.
>> Па да ми римејк ова, не прават трампа.
Многу подобра форма.
Се кандидира без swap.
И тоа по ѓаволите.
Сега ние сме назад каде што бевме во понеделникот, каде што нешто не трампа.
>> И она што е интуитивен објаснување за зошто е тоа така?
Да?
>> СТУДЕНТСКИ: [нечујни].
>> Дејвид MALAN: Токму така.
Па a и b се копии на x и y.
И всушност, во секое време сте биле повикувајќи функција досега дека
поминува променливи како ints -
само како swap очекува тука -
вие момци се поминува во копии.
>> Сега тоа значи дека тој зема малку на време, дел од секундата, за
компјутер за копирање на делови од еден променлива во битови на друг.
Но тоа не е толку голем договор.
Но тие се сепак копија.
>> И така сега, во контекст на swap, Јас сум во фактот успешно
менување на a и b.
Всушност, ајде да го направите брзо разумност провери.
Печати ѓ на е% i, нова линија.
И plug ајде во.
Сега ајде да го прават истото со b.
И ајде да го стори истото нешто овде.
>> И сега, дозволете ми да копирате истите тие линии повторно на дното на функцијата
по моите три линии на интересни би можеле да имаат погубен, а
печати a и b уште еднаш.
Па сега ајде да се направи ова, не прават трампа.
Дозволете ми да се направи терминал прозорец малку повисоки, така што можеме да видиме
повеќе од тоа одеднаш.
>> И да ја стартувате без swap.
x е 1, y е 2. a е 1, б е 2.
И тогаш, е 2, б е 1.
Па тоа е работа, исто како и на Jess не тука во внатрешноста на swap.
Но, се разбира, тоа е без ефект на променливи во главниот.
>> Па видовме еден трик со која ние би можеле да го надминете овој, нели?
Кога сте соочени со оваа опсегот прашање, што може само залог и бидете x
и y каков вид на променливи наместо неа?
>> Вие би можеле да ги направат глобална.
Ги стави во самиот врв на датотеката како што направивме, дури и во игра на 15.
Ние ги користиме на глобалната променлива.
Но во контекст на натпреварот беше 15, тоа е разумно да се има глобална
Променлива претставува одбор, бидејќи интегритет на 15.c е за сите
за спроведување на таа игра.
Тоа е она што постои датотеката да се направи.
>> Но во овој случај тука, јас сум повикувајќи функција swap.
Сакам да се разменуваат со две променливи.
И тоа треба да почне да се чувствува само невешт ако решение на сите наши
проблеми кога трчаме во опсегот прашања е да се направи тоа глобален.
Затоа што многу брзо нашата програма е ќе стане доста неред.
И ние го направи тоа многу ретко како резултат во 15.c.
>> Но излегува постои подобар начин заедно.
Дозволете ми да всушност се вратиме и да го избришете печати ѓ, само да се поедностави овој код.
И дозволете ми да предложи Ова, всушност, е лошо.
Но, ако јас наместо додадете во некои звезди и ѕвездите, јас наместо да се претвори оваа
функција во оној кој е всушност во функција.
>> Па да ми се вратиш тука и да признаеме велејќи звезди е секогаш тешко,
па јас ќе кажам ѕвезди.
Јас само ќе fess до оној.
Сите во право.
И сега, она што сум јас ќе да го стори наместо неа?
>> Значи прво на сите, јас ќе одам да одредите дека наместо полагање на int во
на swap функција, јас сум, наместо оди да се каже int ѕвезда.
Сега, она што го прави ѕвезда укажуваат?
Ова е тоа што идејата за показател дека Binky, на claymation карактер, беше
се однесува на моментот кога пред.
>> Па ако се каже int ѕвезда, значењето на ова сега е дека нема да биде
донесен во од неговата вредност.
Тоа не се случува да бидат копирани внатре
Наместо тоа, на адресата на е ќе треба да се донесе внатре
>> Па се потсетиме дека во внатрешноста на вашиот компјутер е целиот куп на меморијата, инаку
познат како RAM меморија.
И дека RAM меморија е само целиот куп на бајти.
Значи, ако вашиот Mac или вашиот компјутер има два гигабајти, имаш 2
милијарди бајти меморија.
>> Сега ајде да претпоставиме дека само за да задржи работи убаво и уредно, ние
додели на адреса -
голем број -
на секој бајт на RAM меморија во вашиот компјутер.
Уште првиот бајт од оние 2 милијарди по број нула.
На следната е бајт број еден, број две, по целиот пат за нагоре, точка точка
точка, на околу 2 милијарди долари.
>> Така што можете број на бајти на меморија во вашиот компјутер.
Па ајде да се претпостави дека тоа е она што ние подразбираме под некоја адреса.
Значи кога ќе видам int ѕвезда на, она што се случува да биде усвоен во замена сега е
адресата на.
Не и нејзината вредност, но без оглед на поштенскиот адреса е, така да се каже -
нејзината локација во RAM меморија.
>> И слично за б, јас ќе одам да се каже истото.
Int, ѕвезда, б.
Како настрана, технички ѕвезда би можеле да одат на други локации.
Но ние ќе се стандардизираат на ѕвездата да се биде веднаш до тип на податок.
>> Па разменуваат потпис сега значи, дај ми го адресата на некоја int, и повик
кои се однесуваат на.
И ми даде уште една адреса на int и повик таа адреса б.
>> Но сега мојата код овде мора да се промени.
Бидејќи ако Изјавувам int Temp -
која се уште е од типот int -
но јас сместат во неа, каков вид на вредност?
Да биде јасно, сум ставање на со го кодот како што е напишано во моментов?
>> Јас сум ставање на локација во.
Но јас не се грижат за локација сега, нели?
Temp постои само на Jess третина чаша постоеле, за каква цел?
Да зачувам вредност.
Млеко или сок од портокал.
Не да всушност чување на адресата на било кој од овие работи, кои се чувствува
малку нелогично во оваа реална свет контекст во секој случај.
>> Значи, навистина, она што сакам да го стави во temp не е адреса на, но
содржината на.
Па ако некој е број како 123, ова е на 123. бајт од меморија дека само
се случува да биде окупатор, дека вредноста во се случува да биде окупаторска.
>> Ако сакам да одам на таа адреса, Јас треба да се каже ѕвезда на.
Слично на тоа, ако јас се да се промени она што е на адресата А, си ги променам
ова за да започнете.
Ако сакам да ги чувате во она што е во локација А со она што е на местото
на б, ѕвезда б ѕвезда.
>> Значи на кратко, дури и ако тоа не е сосема тоне во уште - и јас не би се очекувало
на тоа дека таа толку брзо -
сфатат дека сите што јас го правам е prefixing овие ѕвезди на моите променливи,
изрека не го дофати вредности.
Не го менувајте вредности.
Туку, одете на тие адреси и да добијат вредност.
Оди на таа адреса и промени вредноста таму.
>> Па сега дозволете ми да дојдете назад до врвот, само за да го надминете овој линија тука, да
промена на прототип да се совпаѓаат.
Но јас сега треба да се направи една друга работа.
Интуитивно, ако јас сум смени видови на аргументи дека трампа очекува,
што друго ми е потребно да промени во мојот код?
>> Кога ќе се јавам, swap.
Затоа што токму сега, она што сум Јас поминува да се разменуваат со уште?
Вредноста на x и вредноста на y, или на млеко и сок од портокал.
Но јас не сакаат да го направат тоа.
Јас наместо сакаат да го поминат во што?
На локацијата на x и на локацијата на y.
Кои се нивните поштенски адреси, така да се каже.
>> Па да го направите тоа, тука е и симболот.
Симболот вид на звучи како адреса.
толку n, симболот, адресата на x и адреса на y.
Па тоа е намерно кои ние ги користиме ampersands кога повикувате на функцијата,
и ѕвездите кога прогласување и кога спроведување на функцијата.
>> И само мислам на симболот на адреса на операторот, и ѕвезда како
одат таму оператор -
или, правилно, dereference оператор.
Па тоа е многу скапо на зборови само за да велат дека сега, се надевам, swap се случува
да биде точна.
>> Дозволете ми да оди напред и да се направи -
ајде да всушност се преименува датотеката, за да не оваа програма се уште да се нарече без swap.
Тврдам дека ние ќе го наречеме swap.c сега.
Така осигурајте, трампа.
Дот, коса црта, трампа.
>> И сега навистина, x е 1, y е 2.
А потоа, x е 2, y е еден.
Па ајде да видиме ако не можеме да го направите ова малку поинаку за тоа што е
случува тука.
Прво, дозволете ми да зумирате на нашите цртање екранот овде.
И дозволете ми да предложат за миг - и кога јас исцртување тука ќе биде отсликано
таму сега - дозволете ми да предложи тука е целиот куп на меморија, или
RAM меморија, во внатрешноста на мојот компјутер.
>> И тоа ќе биде залак број, да речеме, 1.
Ова ќе биде бајти број 2.
И јас ќе се направи целиот куп повеќе, и потоа еден куп на точка точка точки да
укажуваат на тоа дека има 2 милијарди на овие работи.
4, 5, и така натаму.
>> Па така постојат првите пет бајти на меморија на компјутерот ми е.
Сите нели?
Многу малку од 2 милијарди долари.
Но сега јас ќе одам да предложи следниве.
Одам да предложи дека x се случува да се чување на број 1, а y се случува
за чување на број 2.
И дозволете ми да оди напред сега и претставува овие вредности како што следи.
>> Ајде да го направиме ова како што следи.
Дај ми само една секунда.
Една секунда.
OK.
Сакам да се направи ова малку -
ајде да го направите ова повторно.
Инаку јас ќе одам да и користење на истите броеви, ненамерно,
повеќе пати.
>> Па само така имаме различни броеви да се зборува за, ајде да ги наречеме овој бајт
број 123, 124, 125, 126, и точка точка точка.
И дозволете ми да тврдат дека сега ќе одам да стави вредност 1 тука, а вредноста 2
тука, инаку позната како x и y.
Па тоа само така се случува, дека ова е х, ова е г.
>> И само од страна на некои случајни шанса, компјутер, на оперативниот систем,
се случи да се стави x на локација број 123.
И y заврши на локација 124 -
По ѓаволите.
Јас треба да имаат фиксни ова.
О човек, дали јас навистина сакате да го направите ова?
Да, сакам да го надминете овој и б соодветна за овој денес.
Жал ми е, нови во ова.
>> 127, 131, и јас не сакам да бидат на овој комплекс, но зошто никако не можев да го промените
броеви таму?
Затоа што сакам на ints да всушност ќе биде четири бајти.
Па ајде да бидеме супер анален за ова.
Така што ако 1 случува да се решат 123, 2 ќе биде на адресата
127, бидејќи тоа е само 4 разделбите далеку.
Тоа е се.
И ние ќе заборавите на сите на други адреси во светот.
>> Значи x е на локација 123, y е на локација 127.
И сега, она што јас всушност сакате да направите?
Кога ќе се јавам трампа сега, она што е всушност се случува?
Па, кога ќе се јавам, swap, јас сум поминува во на адреса на x и адреса на y.
Така на пример, ако овие две парчиња на хартија сега претставуваат два
аргументи a и b да се разменуваат, она што сум јас случува да пишувате на Првиот од овие,
што јас ќе одам да се јавите однесуваат како?
>> Точно, 123.
Значи ова тврдам е.
Ова е параметар на.
Јас сум ставање на адреса на x во таму.
>> Што е тоа?
>> Не, не.
Тоа е во ред.
Сè уште добри, сеуште добар.
Значи ова е.
И сега на вториот лист хартија, ова ќе биде б, и она што сум јас
ќе треба да се пишува на ова парче на хартија?
127.
>> Па единственото нешто што се промени, откако нашите претходни кажувам на оваа приказна е,
наместо дословно 1 и 2, јас сум ќе помине во 123 и 127.
И јас сум сега се случува да се стави овие во внатрешноста на ова поле, во ред?
Така што црна кутија сега претставува на swap функција.
>> Во меѓувреме, ајде сега има некој спроведување на swap функција.
Би некој овде сакале да волонтираат?
Ајде горе.
Што е вашето име?
Чарли.
Во ред, Чарли.
Ајде горе.
>> Па Чарли се случува да се игра улогата на нашата црна кутија.
И Чарли, она што јас би сакал да го стори сега е спроведување трампа на таков начин
дека, со оглед овие две адреси, сте биле всушност ќе
за промена на вредности.
И јас ќе шепот во увото како да се кандидира на ТВ тука.
>> Така одат напред, а ти си на црната кутија.
Стигнат до таму.
Кои вредности гледате за, и Кои вредности гледате за б?
>> CHARLIE: a е 123 а b е 127.
>> Дејвид MALAN: Добро, точно.
Сега пауза таму за само еден миг.
Првото нешто што ви се случува да се направи сега, според код - што
Јас сега ќе се повлече на екранот -
ќе биде да одвои малку малку на меморија се нарекува Temp.
Па јас ќе одам да се оди напред и да ви даде дека меморијата.
>> Значи ова се случува да биде една третина променлива дека имате достапни за
те повика Temp.
И она што ви се случува да се напише на температура парче хартија?
>> CHARLIE: покажувачи, нели?
>> Дејвид MALAN: Добро, добро, не нужно покажувачи.
Па линија на кодот кој јас сум Нагласени на десната страна,
ајде да почнеме таму.
Таа вели дека ѕвездата на.
Па во моментов чување бројот 123.
И само интуитивно, што ја ѕвездата 123 значи?
>> Но конкретно, ако е 123, ѕвезда на значи што?
На вредноста на.
Или повеќе случајно, оди таму.
Значи, да ми предложи, држејќи го за во вашата рака, оди напред и да се третираат дека
како и покрај тоа е мапа.
И себе си одиме во текот на компјутер меморија, и да се најде ни што е
на локација 123.
Токму така.
>> Така можеме да видиме на локација 123 е она што, очигледно?
Добро, така што вредност сега сте ќе се стави во Temp?
Токму така.
Така одат напред и го правам тоа.
И напишете број 1 на парче хартија, која во моментов наслов Temp.
>> И сега следниот чекор кој сте ќе треба да се спроведе
се случува да биде она.
Па, на десната страна од следната линија на кодот е ѕвезда б. б од
Се разбира, продавници адреса.
Која се обраќа на 127.
Ѕвезда б значи она, повремено зборува?
>> Оди до таа локација.
Па оди напред и да се најде ни она што е на локација 127.
OK.
Се разбира, на локација 127, се уште е вредност 2.
Значи она што ви се случува сега продавницата на сé што е локацијата во?
Па ѕвезда средство одат на локацијата на.
Што е локацијата на?
>> Токму така.
Па сега, ако сакате да го промените она што е на таа локација -
Јас ќе одам напред и да ја стартувате на гума се тука.
И сега стави повторно на четка.
Она што бројот што ви се случува да се напише во таа празна кутија сега?
>> Токму така.
Па оваа линија код, да биде јасно - нека ме запираат што Чарли прави и
се истакне тука, она што тој е само направено е пишува во таа кутија на локација 123
вредноста која претходно беше на б.
И така сега сме спроведува навистина оваа втора линија на код.
>> Сега, за жал, има уште една линија останатите.
Сега што е во Temp, буквално?
Тоа е очигледно број еден.
Тоа не е адреса.
Тоа е само број, вид на променлива од една недела.
>> И сега кога ќе се каже ѕвезда б, тоа значи дека одат на адреса б, кој е од
Се разбира тука.
Значи откако ќе одам таму -
Јас ќе одам напред и избрише она што е, всушност, таму - и што сте
ќе пишувам сега на локација 127?
>> CHARLIE: Темп, кој е еден.
>> Дејвид MALAN: Темп, кој е еден.
И што се случува со температура на крајот?
Па, ние навистина не знам.
Ние навистина не се грижат.
Секое време сме спроведува функција Досега, сите локални променливи имате
се навистина на локално ниво.
И тие само ќе исчезнат.
Тие се рекултивираните од страна на оперативниот системот на крајот.
>> Значи фактот дека temp се уште има вредност 1 е вид на фундаментално
интересни за нас.
Сите во право, па аплауз ако ние би можеле за Чарли.
Многу добро направено.
>> Добро, така што повеќе не ова значи дека можеме да направиме?
Значи излегува дека ние сме биле кажувам неколку бели лаги
за сосема извесно време.
Всушност, излегува дека низа, сето ова време, не е навистина
секвенца од знаци по себе.
Тој вид на е дека интуитивно.
>> Но технички гледано, стринг е тип на податок дека ние прогласена во внатрешноста на
на CS50 библиотека да се поедностави светот за првите неколку недели од класа.
Што низа навистина е е адресата на лик некаде во RAM меморија.
А низа е навистина голем број, како и 123 или 127, што се случува да ги демаркираат
каде што низа почнува во Вашиот компјутер меморија.
>> Но тоа не претставува на стринг, само по себе, себе.
И можеме да го гледаат ова како што следи.
Дозволете ми да оди напред и да се отворат некој код кој е меѓу
денес е изворниот код примери.
И јас одам да се оди напред и да се отвори до, да речеме, да ги споредиме-0.c.
Ова е кабриолет програма што се случува да се спроведува како што следи.
>> Во прв план.
Одам да се каже нешто.
Тогаш јас ќе одам да се оди напред и да добие стринг од корисникот
во кои следната линија.
Тогаш јас ќе одам да го кажам уште еднаш.
Тогаш јас ќе одам да се добие уште стринг од корисникот.
>> И известување, јас сум покажува еден од стрингови во променлива наречена с, и
друга од овие стрингови во променлива наречен т.
И сега ќе одам да се тврди, многу разумно, дека ако е еднаква еднаква т,
конците се исти.
Можете да напишете истото.
Друго, жиците се не е иста работа.
>> Впрочем, ако ние влез две ints, две карактери, две пловки, две двојки, било од
типови на податоци ние разговаравме за досега да ги споредите -
потсетиме ние направивме многу јасно пред некое време дека вие не го направите ова, бидејќи
еден знак за еднаквост е, се разбира операторот за доделување.
Така што ќе биде бубачка.
>> Ние ги користиме на еднакви знак за еднаквост, кои навистина ги споредува
работи за вистинска еднаквост.
Но јас тврдат дека ова е грешка.
Ако одам напред и да направат споредба на нула, а потоа направете точка коса црта споредуваат нула.
И јас напишеш во, да речеме, здраво.
А потоа нека каже здраво повторно.
Буквално иста работа, на компјутерот побарувања Јас ја внеле различни нешта.
>> Сега можеби и јас само погрешиле нешто.
Јас ќе напишеш моето име тоа време.
Мислам, здраво.
Здраво.
Тоа е различно секој пат.
>> Па, зошто е тоа така?
Што навистина се случува под хаубата?
Па, она што навистина се случува под хаубата е стринг тогаш
Јас ја внеле во кои прв пат на пример е зборот здраво, се разбира.
Но, ако ние ги претставуваме овој под капакот на моторот, да се потсетиме дека
стринг е во низа.
И ние рековме колку во минатото.
>> Значи, ако јас привлече таа низа вака, јас сум ќе претставуваат нешто сосема
слични на она што го правевме пред еден миг.
И таму е всушност нешто специјални тука, исто така.
Она што не може да се одреди беше на на крајот на секој стринг?
Да, ова нула обратна коса црта, која е само начинот на претставување,
буквално, 00000000.
Осум 0 битови по ред.
>> Не знам, искрено, она што е по ова.
Тоа е само еден куп повеќе RAM меморија внатрешноста на мојот компјутер.
Но, ова е низа.
Ние разговаравме за низи порано.
И ние обично зборуваат за низи како локација нула,
потоа една, потоа две.
Но тоа е само за погодност.
И тоа е сосема релативна.
>> Кога сте всушност добивање на меморијата од на компјутер, тоа е се разбира сите
2 милијарди некои чудни бајти, потенцијално.
Значи, навистина под капакот на моторот, сето ова време, да.
Ова многу добро може да биде заградата нула.
Но ако копате уште подлабоко под капакот на моторот, тоа е навистина
решавање број 123.
Ова е адреса 124.
Ова е адреса 125.
>> И јас не завинтвам тоа време.
Овие се сега една бајти за разлика од која причина?
Колку е голема е знак?
А знак е само еден бајт.
Еден int е обично четири бајти.
Па тоа е зошто не сум направил тоа 123, 127, 131 и така натаму.
Сега можам да го задржи по математика поедноставно и само го прават плус 1.
И ова е сега она што навистина се случува на под хауба.
>> Па кога ќе изјавите нешто како ова, низа с, ова е всушност -
што се испоставува -
знак ѕвезда.
Ѕвезда, секако, значи адреса, ака покажувач.
Па тоа е адресата на нешто.
Што е тоа на адреса на?
>> И -
Јас сум единствениот кој може да се види многу важна точка сум одлуки, или мислите дека
Јас сум одлуки.
Па низа -
Тажната работа е имам монитор право, таму каде што
можеше да се види тоа.
>> Сите во право, па низа s е она што Јас прогласи претходно.
Но излегува, благодарение на малку магија во CS50 библиотека, сето ова
Времето низа има буквално е знак ѕвезда.
Ѕвездата повторно значи покажувачот или адреса.
Фактот дека тоа е flanking на Зборот знак значи тоа е
адреса на некој лик.
>> Па ако добиете низа се нарекува, и јас напишеш во H-Е-Л-Л-О, да предложи сега она што се
низа буквално се враќаат на сите овој пат, иако ние сме прилично
премногу едноставната светот?
Што значи да се добие низа, всушност, се врати како нејзиното враќање вредност?
>> 123 во овој случај, на пример.
Ние претходно изјави дека се низа едноставно враќа стринг, на низа
карактери.
Но тоа е малку бела лага.
Начинот на кој се низа навистина функционира под капакот на моторот е тоа добива
стринг од корисникот.
Тоа plops ликовите што тој или таа видови во меморијата.
Таа го става обратна коса црта нула на крајот на оние секвенца од карактери.
>> Но тогаш што ли се добие низа буквално се вратат?
Тоа буквално се враќа на адресата на Уште првиот бајти во RAM меморија која
што се користи за таа сила.
И излегува дека само со враќање една адреса на
првиот карактер во стрингот, тоа е доволни за наоѓање на интегритет на
на стрингот.
>> Со други зборови, да добијат низа не мора да се вратат 123 и 124 и 125.
Тоа не мора да ми даде долг листа на сите на бајти кои
мојата низа е користење.
Бидејќи еден, тие се сите назад да се врати.
И две, врз основа на прво обраќање, јас може да дознаам каде што низа завршува.
Како?
>> Посебните null карактер, обратна коса црта нула на крајот.
Значи со други зборови, ако ќе помине околу -
во внатрешноста на променливи -
адреса на знак, и да се претпостави дека на крајот од ниту еден стринг, било
секвенца од знак што ние, луѓето мислам на стрингови, ако се претпостави дека
на крајот од секоја таква низа има нула обратна коса црта, ти си златен.
Затоа што секогаш може да се најде на крајот од стрингот.
>> Сега што е навистина, тогаш ќе на во оваа програма?
Зошто е оваа програма, Споредба-0.c, кабриолет?
Што, всушност, се споредува?
Да?
>> СТУДЕНТСКИ: [нечујни].
>> Дејвид MALAN: Токму така.
Тоа е споредување на локации на жиците.
Значи, ако корисникот има внеле во здраво еднаш, како што го направив, меморија може да заврши
во потрага како оваа.
Ако корисникот потоа видови во Здраво повторно, но со повик да се добие низа, повторно, c е
не е особено умен, освен ако не учат тоа да биде умен, со пишување на код.
>> C -
и компјутери воопшто -
ако сте тип во зборот Здраво повторно, знаете што ви се случува да се добие.
Ти си само ќе добие втор низа на меморија, која, да, се случува да биде
чување на H-Е-Л-Л-О и така натаму.
>> Тоа се случува да изгледаат исти нас луѓето, но оваа адреса
не може да биде 123.
Тоа би можело само така се случи дека оперативен систем има некои достапни
простор за пример на локација -
да речеме нешто произволно, како ова е локација 200.
И ова е локација 201.
И ова е локација 202.
Ние немаме идеја каде тоа е ќе биде во меморијата.
>> Но, она што ова значи е дека она што е ќе треба да се чуваат во крајна линија во С?
Бројот 123.
Она што се случува да се чуваат во т, во овој арбитрарен пример?
Бројот 200.
И сето тоа значи дека тогаш е очигледно, 123 не се еднакви 200.
И така ова ако никогаш состојба оценува за вистина.
Затоа стани стринг е со користење на различни делови од меморијата секој пат.
>> Сега може да се види ова, повторно во уште еден пример.
Дозволете ми да оди напред и да се отвори копи-0.c.
Тврдам дека овој пример се случува да се обидете - но не успеваат - да го умножувате две жици
како што следи.
>> Одам да се каже нешто на корисникот.
Јас сум тогаш ќе добие низа и го нарекуваат s.
И сега, јас го правам ова чек тука.
Ние спомна ова време назад.
Но, кога може да добијат низа враќање нула, друг специјален знак, или специјални
симбол да речеме.
Ако тоа е надвор од меморија.
>> На пример, ако корисникот е навистина да биде тешко и видови на крволочен
број на карактери на тастатура и хитови Enter.
Ако тоа бројот на карактери едноставно не може се вклопуваат во RAM меморија за она луд
причина, и да добијат низа може многу добро се вратат нула.
>> Или ако вашиот самата програма прави многу на други работи и таму е само
не е доволно меморија за да добиете низа за да се успее, Тоа може да заврши
до враќање нула.
Но, да бидеме попрецизни како на она што е оваа.
Што е податочен тип на s навистина?
Char ѕвезда.
>> Значи излегува сега можеме да лупам се врати на слој на нула.
Испоставува, нула е - да, очигледно посебен симбол.
Но што е тоа навистина?
Навистина, нула е само симбол дека ние луѓето користат за да претставуваат нула, како и.
>> Значи авторите на Ц, и компјутери поопшто, одлучи години
дека, знаеш што.
Зошто не можеме да се осигура дека нема корисник податоци е секогаш, некогаш, некогаш
се чуваат на bye нула?
Всушност, дури и во мојата арбитрарен пример пред, јас не почни нумерирање на
бајти на нула.
Почнав на еден.
Бидејќи знаев дека луѓе во светот одлучија да го задржуваме нула
бајт во RAM меморија на сите граѓани како нешто посебно.
>> Причината е, во секое време сакате да сигнал дека нешто не е во ред
во однос на адреси, ќе се врати нула - инаку позната како нула -
и затоа што знам дека нема legit податоци на адреса нула, јасно
тоа значи грешка.
И тоа е причината зошто ние, од конвенцијата, проверете за ништовни и да се врати нешто
како еден од оние случаи.
>> Значи, ако ние движете надолу за сега, ова е само тогаш некои грешка проверка, само во случај
нешто не беше во ред со [? спасување?]
целосно и прикази од програмата со враќање рано.
Оваа линија сега може да се препишува и повторно како овој, што значи што?
На левата страна, ми даде уште една покажувач кон карактер, и го нарекуваат т.
Што сум јас чување во внатрешноста на T, врз основа на оваа една линија код?
>> Јас сум складирање на локацијата.
Конкретно на локацијата тоа беше во с.
Значи, ако корисникот има внеле во здраво, и дека првиот здраво се случува да се заокружи
тука, а потоа бројот 123 е ќе се врати од се
Стринг и да се чуваат -
како што рековме порано -
во с.
>> Кога јас сега прогласи уште еден покажувач на на знак и го нарекуваат т, она што бројот е
буквално случува да се заокружи во т во зависност од приказната?
Па 123.
>> Толку технички сега двете s и т се укажува на точната
исто делови од меморијата.
Па се забележи она што јас ќе одам да направите сега за да се докаже дека оваа програма е кабриолет.
>> Прво, ќе одам да се тврди, со печати ѓ, Капитализиране
копија на стрингот.
Тогаш јас ќе одам да направите малку грешка проверка.
Одам да бидете сигурни.
Ајде да бидете сигурни дека стрингот t е на Најмалку поголема од нула во должина,
па има некои карактер постои всушност да профитираат.
>> И тогаш можеби ќе споменеме ова од претходните примери.
2 горниот - кој е во на ctype.h датотека.
Т заградата нула ми дава нула карактер на стрингот t.
И 2 горниот на таа иста вредност, на Се разбира, се конвертира во големи букви.
>> Така интуитивно, овој истакнат линија на кодот е Капитализиране на првиот
писмо во т.
Но тоа не е Капитализиране, интуитивно, на првата буква во с.
Но, ако сте размислување напред, она што сум јас за да ја видите кога ќе ја извршите оваа програма
и печати од двете оригинални, s, а т.н. копија, Т?
>> Тие се, всушност, ќе биде ист.
И зошто се тие случува да бидат исти?
Тие се двете укажува на токму истото.
Па ајде да го направите тоа.
>> Направи копија нула.
Се компајлира во ред.
Дозволете ми да се кандидира копија нула.
Дозволете ми да напишеш нешто како здраво во сите мали потоа притиснете Enter.
И таа тврди дека и оригиналниот сигнал s и копија се навистина идентични.
>> Значи она што навистина се случило овде?
Дозволете ми да ја прецрта оваа слика само да ја раскаже приказната во
малку поинаков начин.
Што навистина се случува во позадината на качулка кога Изјавувам нешто како
знак почетокот с, или низа с, Јас сум добивање на покажувачот -
кој се случува да биде четири бајти во CS50 апаратот
и во многу компјутери.
И јас одам да се јавите овој s.
И ова во моментов има некоја непозната вредност.
>> Кога ќе се декларирате променлива, освен ако се стави вредност таму, кои
знае што е таму.
Тоа би можело да има некои случајна секвенца на битови од претходната извршување.
Значи, кога јас, во мојата линија на кодот не добие стринг, и тогаш чување на враќање
вредност во с добијат низа некако -
и ние ќе крајот кора назад како да се добие низа дела, некако доделува на
низа што веројатно изгледа малку вака.
H-Е-Л-Л-О, обратна коса црта нула.
>> Да претпоставиме дека ова е адреса 123 само првиот конзистентност.
Па се низа се враќа, во Нагласени линија таму, тоа се враќа на
број што рековме, 123.
Така што навистина се случува во внатрешноста на е тука?
>> Па, она што навистина се случува внатрешноста на s е 123.
Но, искрено, јас сум добивање малку збунет од страна на сите овие адреси,
сите овие произволни броеви.
123, 124, 127.
Па ајде всушност се поедностави светот малку.
>> Кога зборуваме за покажувачи, искрено, да нас луѓето, кој е грижам се грижи каде
работите се во меморијата?
Тоа е сосема произволна.
Тоа се случува да зависи од тоа колку многу RAM корисникот има.
Тоа се случува да зависи од тоа кога во текот на денот ќе ја стартувате програмата, можеби, и
она влез на корисникот ти дава.
Ние сме живеалиште на неважни детали.
>> Значи, да се апстрактни далеку и да кажам дека, кога ќе се кандидира на линија на кодот како овој,
знак ѕвезда ги добива враќање вредност на Get стринг.
Зошто да не, наместо само нацрта она што ние ги повикуваат покажувач како иако тоа е
покажувајќи кон нешто?
Така тврдам дека сега е горе постои покажувачот -
под хауба тоа е адреса.
Но тоа е само укажува на првиот бајт во
стринг кој е се врати.
>> Ако јас сега се врати на код овде, она што се случува во овој линија?
Па, во овој истакнат линија сега, Јас сум прогласување очигледно друг
променлива наречена т.
Но тоа е, исто така, покажувач, па ќе одам да го нацрта тоа што, во теорија, точната
иста големина кутија.
И јас одам да го наречеме т.
>> И сега ако ние се вратиме на кодот повторно, кога чување на внатрешноста на т,
она што сум јас технички ставање во внатрешноста на Т?
Па технички, оваа беше бројот 123.
Значи, навистина јас треба да се пишува бројот 123 таму.
Но, ајде да се земе тоа повисоко ниво.
т, ако тоа е само покажувач, интуитивно, е токму тоа.
Тоа е сето она што е да се биде чуваат во таму.
>> Па сега во последните интересни насоки на код, кога јас всушност се обратите за
Капитализиране на нула карактер во т, што се случува?
Па, т заградата нула е сега посочувајќи на она што карактер, веројатно?
>> Тоа е покажувајќи на час.
Бидејќи т заградата нула -
потсетиме, ова е старата синтакса. т заградата нула само значи дека ако т е стринг, т
заградата нула значи добивање на нула лик во таа сила.
Така што тоа навистина значи е да отидете на оваа низа -
и да, ова може да биде 123, ова може да биде 124.
Но тоа е сите роднина, се сеќавам.
Секогаш кога зборуваме за низа, имаме предност на зборуваме за
во однос индекси.
>> Па сега ние само може да се претпостави дека т заградата нула е часот.
Значи, ако јас го нарекувам 2 горниот на неа, она што е навистина прави е Капитализиране
на мали h до големи Х Но, се разбира, она што е а?
Тоа е посочувајќи на истиот ебам стринг.
>> Значи ова е сето она што е се случува во овој код досега.
Значи она што е тогаш импликација?
Како да ја поправите овие два проблема?
Како да се споредуваат со реалните жици?
>> И интуитивно, како би да одите за споредување на два
жици за вистинска еднаквост?
>> Што значи ако двата стрингови се еднакви?
Јасно е дека не дека нивните адреси се Еднакви во меморија, затоа што тоа е ниска
ниво на имплементација детали.
Сите ликови се исти.
Значи, да ми предложи, и дозволете ми да се воведе во верзија еден од compare.c
тука, па спореди-1.в.
>> Дозволете ми да предложи дека ние се уште се покажувач кој се нарекува с, и се чува во него
врати вредност на Get стринг.
Ајде да го прават истото со т.
Па никој од кодот е поинаква.
Одам да додадете малку повеќе грешка проверка сега.
Па сега дека ние сме вид на пилинг назад овој слоеви во CS50 на она што низа
всушност е, ние треба да биде повеќе во анален за правење на сигурни дека ние не го злоупотребувајте
невалидни вредности како ништовни.
>> Па јас сум само ќе да се провери.
Ако s не еднакви ништовни и Т не еднакви на нула, што значи дека ние сме во ред.
Се низа не завинтвам добивање или на оние жици.
А вие можеби може да се погоди сега, она што се STR CMP веројатно направам?
Стринг споредуваат.
>> Значи, ако сте програма во Java пред, ова е како еднаквите метод во
стринг класа.
Но, за оние од вас кои не имаат програмиран пред,
ова е само една функција в.
Тоа се случува да дојде во датотека наречена string.h.
Тоа е каде што е декларирана.
>> И гудачки споредба -
Јас всушност се заборави неговото користење, но не е важно тоа.
Потсетиме дека можеме да направиме човек, се промешува споредуваат.
И ова се случува да се донесе до Линукс програмерите прирачник.
А тоа е, искрено, малку криптичната.
Но гледам дека овде, Да.
Морам да вклучуваат string.h.
>> И вели дека овде под опис ", на низа споредите функција споредува
двете низи S1 и S2. "И S1 и S2 се очигледно две
аргументи предадена внатре
Јас навистина не се сеќавам што const е, но сега забележите -
и може да се види ова веќе кога сте го користите човекот страници ако
сето тоа -
кој знак ѕвезда е само синоним со стринг.
>> Па тоа го споредува две жици, S1 и S2 и го враќа цел број помал
од или еднакво на или поголема од нула ако S1 е пронајден, односно, да биде
помала или одговара, или да биде поголема од С2.
Тоа е само многу сложен начин да се каже дека низа споредба враќа
нула ако две жици се интуитивно идентични, карактер за
карактер за карактер.
>> Го враќа негативен број, ако s, а по азбучен ред, би требало
да дојде пред т.
Или враќа позитивен број, ако Додади би требало да дојде по т
по азбучен ред.
Така е и со оваа едноставна функција, може да можете, на пример, сортирате
целиот куп на зборови?
>> Значи во оваа нова верзија, јас ќе одам да се оди напред и да направат compare1.
Точка коса црта споредите еден.
Ќе напишеш во здраво во сите мали букви.
Одам да напишеш во здраво во сите мали букви повторно.
И за среќа сега сфаќа Јас ја внеле истото.
>> Во меѓувреме, ако јас напишеш во здраво во долниот случај и ЗДРАВО во горниот случај и
споредуваат нив, Јас ја внеле различни нешта.
Бидејќи не само што се адреси различни, но ние сме во споредба
различни карактери повторно и повторно.
>> Па ајде да одиме и да ја поправите еден друг проблем сега.
Дозволете ми да се отвори верзија на еден од примерок, кој сега се обраќа
ова прашање како што следува.
А овој се случува да се погледне малку посложени.
Но ако мислите дека за тоа што проблемот ние треба да се реши, се надевам дека ова ќе биде
јасно во само еден миг сега.
>> Значи ова првата линија, знак почеток т, во однос на Едноставен некој може да предложи
она што оваа линија тука значи?
Char ѕвезда т, што е тоа што прави?
>> Добар.
Креирај покажувач на некои место во меморијата.
И дозволете ми да насочите тоа малку.
Декларирате променлива што ќе ја складира адреса на некои знак во меморијата, само
да биде малку повеќе правилно.
>> Добро, па сега на десната страна, јас сум никогаш не видел една од овие функции
пред, Примерок.
Но, она што би можело да значи?
Распределбата на меморија.
>> Така што излезе, до сега, ние не навистина имаше моќен начин на
поставување на оперативниот систем, ми даде некои меморија.
Наместо тоа, ние сега имаме функција наречена Примерок кои го прави токму тоа.
Иако ова е малку одвраќање токму сега, забележите дека во
меѓу двете загради е само ќе биде број.
Каде што сум ја внеле во прашање ознаки може да биде бројот.
>> И дека бројот значи, ми даде 10 бајти.
Дај ми 20 бајти.
Ми даде 100 бајти.
И Примерок ќе стори сé за да побара од оперативниот систем -
Linux, во овој случај -
еј, се нивните 100 бајти на RAM меморија на располагање?
Ако е така, се врати оние бајти за мене од страна на враќање на адресата на која
оние бајти, можеби?
Самиот првиот.
>> Па тука исто така - и ова е доминантна во C, секој пат кога сте
се занимаваат со адреси?
Ти си речиси секогаш се занимаваат со Првата таква адреса, без разлика колку големи
парче меморија сте се раце назад, така да се каже.
>> Значи, да се нурне во тука.
Јас се обидувам да се распредели како многу бајти, точно?
Добро.
Стринг должина на е - нека направи конкретен пример.
Ако s е здраво, H-Е-Л-Л-О, она што е стринг должина од с, очигледно?
Па тоа е пет.
Но јас го правам плус 1 за тоа, зошто?
Зошто сакам шест бајти наместо на пет?
На нула карактер.
>> Не сакам да ја напушти исклучите оваа специјални null карактер.
Затоа што ако јас се направи копија од Здраво и само го прават H-Е-Л-Л-О, но јас не се стави
тој посебен карактер, компјутерот не може да има, случајно, обратна коса црта
нула таму за мене.
И така ако јас се обидувам да дознаам должината на копија, јас би помислил дека
тоа е 20 карактери долг, или еден милион карактери if јас никогаш не само да се случи
да ја погоди обратна коса црта нула.
>> Па ние треба шест бајти за чување H-Е-Л-Л-О, обратна коса црта нула.
И тогаш ова е само да биде супер анален.
Да претпоставиме дека ќе заборавам што со големина на знак е.
Ние ги велејќи дека тоа е еден бајт.
И тоа обично е.
Во теорија, тоа би можело да биде нешто различно, во различни Mac или
различни компјутер.
>> Така што се претвора таму е ова оператор наречен sizeof дека ако го давате на
името на типот податоци - како знак, или int, или плови -
тоа ќе ти кажам, динамично, колку бајти на знак зазема на овој
особено компјутер.
>> Па ова е ефективно само како да кажеш пати 1 или
пати воопшто ништо.
Но јас сум тоа го правам само за да биде супер анален, дека само во случај знак се разликува
на вашиот компјутер против рудникот, на овој начин математика е секогаш ќе до одјавување.
>> И на крај, тука долу се провери за ништовни, кој е секогаш добра пракса - повторно,
било кое време ние сме се занимаваат со покажувачи.
Ако Примерок не беше во можност да даде мене шест разделбите - која е
малку веројатно, но само во случај -
се врати еден веднаш.
А сега, оди напред и да ја копирате на стринг како што следи.
И ова е познато синтакса, иако во поинаква улога.
>> Одам да се оди напред и да добијат низа Должината на s и чувајте го во n.
Јас сум тогаш ќе iterate од i изнесува нула до и вклучувајќи n,
е поголема или еднаква на.
Така што на секоја итерација, ја ставив на ith карактер на е во ith
карактер на т.
>> Значи она што е навистина се случува под на хаубата тука?
Па ако ова, на пример, е на -
и јас го внеле во зборот H-Е-Л-Л-О и таму е обратна коса црта нула.
И повторно, ова е и покажувајќи тука.
И тука сега е т.
>> И ова е да се покажува сега да се копија на меморијата, нели?
Примерок ми даде цела парче на меморија.
Не знам на почетокот она што е во која било од овие локации.
Па ќе одам да се мисли на овие како цела група на прашалници.
>> Но веднаш штом почнам looping од нула на до преку должината на с, т
заградата нула и т заградата 1 -
и јас ќе се стави ова сега на надземни -
т заградата нула и S заградата нула значи што јас ќе одам да се копирање
iteratively h за тука, Е-Л-Л-О. Плус, бидејќи јас го направи плус
1, обратна коса црта нула.
>> Па сега во случај на споредиме-1.в, на крајот, ако јас печати од
капитализација на t, ние треба да види дека s е непроменета.
Дозволете ми да оди напред сега и направете го тоа.
Така бидете copy1.
Точка коса црта copy1.
Одам да напишеш во здраво, Enter.
И сега забележите, само копија се капитализирани.
Затоа што јас навистина имаат две делови од меморијата.
>> За жал, можете да направите некои прилично лошо и прилично опасни работи тука.
Дозволете ми да се повлече до еден пример тука сега, кој ни дава пример за неколку
различни линии.
Па само интуитивно тука, на првата линија на код, int ѕвезда x, е прогласување на
променлива наречена х.
И она што е типот податоци на таа променлива?
Што е податоци за видот на таа променлива?
Тоа не беше cliffhanger.
>> Тип на податок е int ѕвезда.
Па што значи тоа? X ќе чување на адресата на инт.
Едноставно како што.
Y се случува за чување на адреса на инт.
Што е третата линија на код прави таму?
Тоа е издвојување колку бајти, најверојатно?
Четири.
Поради големината на int е обично четири, Примерок од четири дава
ми ја враќа адресата на парче меморија, прв од чии бајти е
складираат сега во х.
>> Сега ние сме се движат малку брзо.
Ѕвезда х значи што?
Тоа значи одат на таа адреса и го стави она што бројот таму?
Стави го бројот 42 таму.
Ѕвезда y значи одат на она што е на y и ставете број 13 таму.
>> Но, чекајте.
Она што е во y во моментот?
Што адресата е y складирање?
Ние не знаеме, нели?
Ние никогаш не сме еднаш го користите на задачата оператор вклучуваат y.
Па у како што е најавено на втората линија на кодот е само некои ѓубре вредност, голема
прашалник така да се каже.
Тоа би можело да се укажува случајно за нешто во меморија, која
генерално е лошо.
>> Па штом ние хит таа линија таму, ѕвезда y изнесува 13, нешто лошо,
нешто многу лошо е за да се случи да Binky.
Да видиме што се случува да се заокружи се случува да Binky тука, во овој момент
или па изгледа.
>> [Видео репродукција]
>> -Еј, Binky.
Се разбудам.
Тоа е време за покажувачот забава.
>> -Што е тоа?
Учат за покажувачи?
Ох, goodie.
>> -Па, да започнеме, претпоставувам дека ние сме ќе треба неколку совети.
>> -Во ред.
Овој код доделува две совети кои може да укажуваат на цели броеви.
>> -Добро, добро, гледам два покажувачи.
Но, тие не се чини дека се што укажува на ништо.
>> -Така е.
Првично, показалки не укажуваат на ништо.
Работите што се укаже на се нарекуваат pointees, и поставување на нив е
одделни чекор.
>> -Ох, нели, нели.
Знаев дека.
На pointees се одвоени.
Па, како да одвои pointee?
>> -Во ред.
Па, овој код доделува нова цели броеви pointee, и овој дел ги поставува x
да се укаже на тоа.
>> -Еј, кој изгледа подобро.
Така да тоа се направи нешто.
>> -Во ред.
Јас ќе dereference на покажувачот на X да ја запази бројот 42 во своето pointee.
За овој трик, ќе ми треба моето магично стапче на dereferencing.
>> -Твојата магично стапче на dereferencing?
Ух, тоа е одлично.
>> -Тоа е она што го кодот личи.
Јас само ќе се постави на број, и -
>> -Еј, погледнете.
Таму оди.
Така прави dereference на X следува на стрелката за да пристапите до своите pointee.
Во овој случај, за да ја запази 42 во таму.
Еј, обидете се со користење него за чување на број 13 преку други покажувач, г.
>> -Во ред.
Јас само ќе одам во текот тука за да y и Земи го бројот 13 се постави.
А потоа се стапот на dereferencing и само -
Стој!
>> -О, еј.
Тоа не се работи.
Да речеме, Binky, јас не мислам на dereferencing y е добра идеја,
затоа поставување на pointee е посебна чекор.
И јас не мислам дека ние некогаш го направив тоа.
>> -Хм.
Добра поента.
>> -Да, ние доделени на покажувачот y.
Но никогаш не сме го поставите тоа да укажуваат на pointee.
>> -Хм.
Многу капацитет.
>> -Еј, дали сте во потрага добро таму, Binky.
Можете да го поправам така што y поени на истиот pointee како x?
>> -Секако.
Јас ќе користам моето магично стапче на покажувачот задача.
>> -Дали е тоа ќе биде проблем како и пред тоа?
>> -Не.
Ова не допре pointees.
Тоа го менува едно покажувачот да укаже на истото како друг.
>> -Ох, јас не гледам.
Сега y укажува на истото место како и х.
Па почекајте.
Сега y е фиксна.
Таа има pointee.
Па може да се обидете стапче на dereferencing повторно
да се прати 13 завршена.
>> -Во ред.
Овде оди.
>> -Еј, погледнете во тоа.
Сега dereferencing дела на y.
И затоа покажувачи се делат дека еден pointee, тие
и двете се види 13.
>> -Да.
Споделување.
Whatever.
Значи одиме прекинувач места сега?
>> -Ох, не гледам.
Ние сме надвор од времето.
>> -Но -
>> -Само сети се на три покажувачот правила.
Број еден, основната структура е дека имате покажувач.
И тоа укажува текот на pointee.
Но на покажувачот и pointee се одвоени.
И честа грешка е да се постави покажувач, туку да
заборавајте да го даде pointee.
>> Број два, покажувачот dereferencing започнува на покажувачот и го следи неговото
стрелката околу пристап до своите pointee.
Како што сите знаеме, ова работи само ако има е pointee, кој добива назад кон
Правило број еден.
>> Број три, покажувач задача зема еден покажувач и промени тоа да се укаже на
исто pointee како уште еден покажувач.
Па по задача, двете насоки ќе
укажуваат на истото pointee.
Понекогаш тоа се нарекува споделување.
И тоа е сè што постои на неа, навистина.
Bye bye сега.
>> [Крај видео репродукција]
>> Дејвид MALAN: Значи повеќе на покажувачи, повеќе на Binky следната недела.
Ќе се видиме во понеделник.