>> [Мусиц плаиинг]
>> Даг Ллоид: показивачи, ту смо.
Ово ће вероватно бити најтеже теме
да говоримо о у ЦС50.
А ако сте прочитали ништа о тројкама
пре него што можда мало застрашивање иде у овај видео.
Истина је показивачи Да ли дозвољавате могућност
да можда зезнути гадно кад си
рад са варијабли, и података, и изазива ваш програм да се сруши.
Али они у ствари стварно корисно и они нас заиста одличан начин омогућити
да прође податке назад и назад између функција,
да смо иначе не можемо да урадимо.
>> И оно што стварно желите да урадите овде је воз
да имаш добар показивач дисциплину, тако које можете користити савете ефикасно
да ваши програми који много боље.
Као што сам рекао показивачи нам дати другачији начин да се прође података између функција.
Сада, ако се сећате из један ранији видео када
причали смо о променљива обим, поменуо сам
да су сви подаци које смо проћи између Функције у Ц доноси вредност.
И не могу да користе да термин, шта сам тамо мислио
је да смо пролазе копије података.
Када смо проћи променљиву у функцији, Ми заправо не пролази променљиву
функцији, зар не?
Пролазимо копију да су подаци у функцији.
Функција ради оно што хоће а обрачунава неку вредност,
и можда ћемо користити тај вредности када га враћа.
>> Био је један изузетак ово правило о положеном по вредности,
па ћемо се вратити на оно што је је мало касније у овом видеу.
Ако користимо уместо савете употребе варијабли,
или уместо променљиве сами или копије варијабли,
сада можемо проћи променљиве око између функција на другачији начин.
То значи да ако направимо промена у једне функције,
та промена ће заправо узети утицати у другачију функцију.
Опет, то је нешто што нисмо могли да урадимо раније,
а ако сте икада покушали да мењате вредност две променљиве у функцији,
сте приметили овај проблем врста ситне, зар не?
>> Ако желимо да заменимо Кс и И, и ми проследите их на функцију која се зове замена,
унутар функције замијенити променљиве уради размену вредности.
Један постаје два, два постаје један, али ми не стварно
мења ништа у оригиналу функција, у саговорником.
Зато што не можемо, ми смо само рад са копијама њима.
Са показивачима Иако, можемо у ствари пролазе Кс и И у функцији.
Та функција може да уради нешто са њима.
И те променљиве вредности заправо може променити.
Дакле, то је сасвим промена наша способност да радимо са подацима.
>> Пре него што зароните у показивачи, мислим да је вредно
узимање неколико минута на вратимо на основе овде.
И да погледамо како компјутерске меморије радови
јер ова два предмета иду да заправо бити прилично међусобно повезани.
Као што вероватно знате, на вашем рачунарском систему
имате хард диск или можда ССД диск,
нека врста складишта филе лоцатион.
Обично је негдје у насеље 250 гигабајта
да можда неколико терабајта сада.
И то је место где све своје фајлова на крају ливе,
чак и када је затворен рачунар искључен, можете га поново укључите
и наћи ћеш ти фајлови постоје опет када поново покренете систем.
Али дискова, као хард диск, су ХДД или ССД диск, ССД,
само складишни простор.
>> Ми заправо не може ништа са подаци који се у хард диску,
или солид стате уређајем.
Да би се заиста променити података или преместите га около,
морамо да га преселе у РАМ меморија директног приступа.
Сада РАМ-а, имате много мање у рачунару.
Можете имати негде у насеље 512 мегабајта
ако имате старији рачунар, да можда два, четири, осам, 16,
можда чак и мало више гигабајта РАМ-а.
Дакле, то је много мањи, али то је где су сви испарљивих података постоји.
То је место где можемо да променимо ствари.
Али, када се окренемо наше рачунар, све податке у РАМ је уништен.
>> Зато морамо да имамо хард диск за трајнији локацији тога,
тако да Он постоји било би бити стварно лоше ако сваки пут ми
се наше рачунар, сваки фајл у нашем систему је уништено.
Тако радимо унутар РАМ-а.
И сваки пут када говоримо о меморија, прилично, у ЦС50,
говоримо о РАМ-а, а не хард диск.
>> Дакле, када се ствари у меморију, заузима одређену количину простора.
Све врсте података које смо радили са
заузимају другачији количине простора у РАМ.
Дакле, сваки пут када направите цео вариабле, четири бајта меморије
се издвојила у РАМ тако да може да ради са тим цео број.
Можете прогласи цео број, промените га, га доделити
на вредност 10 повећаваног са једним, тако даље и тако даље.
Све што треба да се деси у РАМ и добићете четири бајта
за рад са за сваки цео број који сте креирали.
>> Свака вам знак створити добија један бајт.
То је само колико простора има потребно да сачувате карактер.
Сваки пловак, прави број, добија четири бајта
осим ако је дупли прецизност флоатинг поинт
број, који вам омогућава да имају прецизније или више бројева
после децималног зареза без губитка прецизности,
који заузимају осам бајтова меморије.
Лонг чезне, стварно велики целих, Такође заузимају осам бајтова меморије.
Колико бајтова меморије Не Жице заузимају?
Па хајде да стави иглу у том питању за сада, али ћемо се вратити на то.
>> Дакле, вратимо се на ову идеју меморије као велики низ бајтова величине ћелија.
То је заиста све што је, то је само огроман број ћелија,
као и сваки други низ који сте упознати са и види,
осим сваког елемента је један бајт гола.
И баш као низ, сваки елемент има адресу.
Сваки елемент низа има индекс, и ми
могу користити тај индекс да уради тзв директног приступа на низ.
Ми не морамо да се крећу од почетак низа,
Посматрајте кроз сваки један елемент тога,
да пронађу оно што тражите.
Можемо само рећи, хоћу да се до 15. елеменат или елеменат 100..
И можете само да прође у том броју и добити вредност коју тражите.
>> Слично сваки локација у меморији има адресу.
Дакле, ваше сећање можда изгледа отприлике овако.
Ево мали комад меморија, ово је 20 бајтова меморије.
Првих 20 бајтова јер је мој обраћа на дну
су 0, 1, 2, 3, и тако на све путу до 19 година.
И када прогласити променљиве и када почнем да радим са њима,
Систем ће се поставити осим мало простора за мене
У овом меморије за рад са мојим варијабли.
Дакле, могло би се рећи, цхар ц једнако капитал Х. и шта ће се десити?
Па систем ће се издвојено за мене један бајт.
У овом случају то је изабрао бајтова више четири, бајт на адреси четири,
и то ће чувања резултата Писмо капитал Х у ту за мене.
Ако сам тада рекао инт брзину ограничење једнако 65, то је
да издвоји четири бајтова меморије за мене.
И то ће третирати оне четири бајта као једну јединицу
јер оно што радимо витх је цео број овде.
И то ће да сачувате 65 унутра.
>> Сада већ сам некако Говорим ти мало лаж,
у праву, јер знамо да рачунари раде у бинарном.
Они не разумеју нужно шта је капитал Х
или шта је 65, само су разумеју бинарне, нула и јединица.
И тако заправо оно што смо складиштење тамо
није слово Х и број 65, туку бинарни прикази
него, што изгледам мало нешто овако.
А нарочито у контекст интегер променљиве,
то неће само испљунути, то неће да се третира као један четири
бајтова комад нужно, то заправо догађа
да га третирају као један бајт четири комадића, што може да изгледа отприлике овако.
А ни то није потпуно тачно било,
због нечега што се зове биг ендиан, која нисмо
ће добити у, али Ако сте радознали о,
можете да прочитате горе на мало и велики биг ендиан.
Али због овог аргумента, због овог видеа,
хајде да претпоставимо да је, Чињеница, како би број 65
бити заступљена у меморија на сваком систему,
мада то није сасвим тачно.
>> Али хајде да ствари само да ослободити од свих бинарних у потпуности,
и само размишља Х и 65, то је много лакше
да размишљају о томе као да као људско биће.
У реду, тако да се чини можда мало случајно да И'ве- мој систем
није ми бајтова 5, 6, 7, и 8 да сачувате цео.
Постоји разлог за то, такође, што нећемо ући одмах, али довољно
је рећи да оно што рачунар ради овде
је вероватно добар потез на свом делу.
Да не ми меморију која је нужно бацк то бацк.
Иако ће то учинити сада ако желим да се још један низ,
зове презиме, и ја желим ставити Лојд тамо.
Ја ћу морати да стане један карактер, свако писмо које је
ће захтевати један карактер, један бајт меморије.
Дакле, ако сам могао ставити Ллоид у мом низу овако сам прилично добро да иде, зар не?
Шта недостаје?
>> Запамтите да сваки низ радимо са у Ц завршава са обрнуте косе црте нула,
и ми не можемо да изоставити овде, такође.
Морамо да издвоји један бајт меморије да одржи тако смо
знам када је наш низ заврши.
Дакле, да поновим овај аранжман од тога како ствари
налазе у меморији моћи бити мало случајан,
али то је заправо како већина системи су дизајнирани.
Да бисте их построје на умно од четири, опет из разлога
да не треба да ући сада.
Али ово, па сам га довољно рећи да после ове три линије кода,
то је оно што меморија може да изгледа.
Ако треба меморијских локација 4, 8, 12 и држати своје податке,
то је оно што ме сећање може да изгледа.
>> И само бити посебно педантан овде, када
говоримо о меморији Обично адресе
учинити помоћу хексадецималне ознаке.
Па зашто не бисмо претворити све од њих од децимале до хексадецималном
само зато што је то генерално како смо се односе на меморију.
Дакле, уместо да буде 0 путем 19, оно што имамо је нула
к нула нула к1 кроз три.
То су 20 бајтова меморије које смо су или гледамо на овој слици
баш овде.
>> Дакле, све то што је рекао, идемо корак даље од меморије за секунду
и натраг у тројкама.
Овде је најважније ствар коју треба запамтити
као што почнете да радите са показивачима.
Показивач није ништа више од адресе.
Ја ћу поново, јер кажу је толико важно,
показивач није ништа више од адресе.
Показивачи су адресе на локације у знак сећања где променљиве живе.
Знајући да је надамо се постаје мало лакше радити са њима.
Још једна ствар коју волим да урадите је да некако имам
дијаграма визуелно представља оно што је догађа са различитим линија кода.
И ми ћемо урадити пар пута у тројкама,
и када говоримо о динамички алокација меморије као добро.
Зато што мислим да ови дијаграми може бити посебно корисно.
>> Дакле, ако кажем на пример, инт у мом коду, шта се дешава?
Па шта се дешава у основи се Идем меморије издвајају за мене,
али ја ни не волим да размисли о томе тако, ја
Волим да мислим о томе као кутија.
Имам кутију и то је зелене боје јер ја
може ставити целих бројева у зеленим кутијама.
Ако је лик сам можда има плаву кутију.
Али, ја увек кажем, ако сам стварање кутија која може да држи цели бројеви
та кутија је зелене боје.
Претпостављам стално маркер и пишем к на страни тога.
Дакле, имам кутију која се зове К, у коју могу ставити целе бројеве.
Дакле, када кажем инт к, то је шта се дешава у мојој глави.
Ако кажем К једнако пет, шта ја то радим?
Па, ја стављам пет у кутији, зар не.
Ово је прилично једноставна, ако Кажем инт, направите кутију која се зове К.
Ако кажем К износи 5, стави пет у кутију.
Надам се да то није превише скока.
Ево где ствари иду још мало интересантно мада.
Ако кажем инт * ПК, па чак и ако не знаш шта то нужно значи,
јасно је да има нешто везе са цео број.
Зато ћу обојити ова кутија зелено-исх,
Знам да има нешто везе са целим бројем,
али то није сама по себи цео број, зато што је инт звезда.
Има нешто мало другачије о томе.
Дакле, цео број умешан, али иначе је
не превише различит од оно што смо причали.
То је кутија, његова добио етикету, она носи ознаку ПК,
и то је у стању да држи инт звезде, без обзира оне јесу.
Имају нешто са целих бројева, јасно.
Ево иако је последња линија.
Ако кажем ПК = & К, хеј, шта се догодило, зар не?
Дакле, ово случајни број, наизглед случајно број, бива бачен у кутију тамо.
Све то је, је ПК добија адресу к.
Дакле, ја вири где је к живи у меморији, његову адресу, адресу њених бајтова.
Све што радим је да кажем та вредност је оно што ћу
ставити у моје кутије која се зове пк.
И зато што су ове ствари су показивачи, и зато тражимо
у низу попут Зеро Кс осам нула Ц седам четири осам
два нула је вјероватно није баш смисла.
Када смо генерално визуелизацију показивачи, ми стварно тако показивачима.
Пк нам даје информацију Морамо да нађемо к у меморији.
Дакле, у основи ПК има стрелицу у њој.
А ако ходамо дужину те стрелице, замислите
то је нешто што можете ходати по, ако ходати дуж стрелице,
на самом врху тог стрелице смо наћи локацију у меморији
где је к живи.
И то је заиста важно јер кад знамо где је к живи,
можемо почети да радимо са подацима унутар тој меморијској локацији.
Иако смо добија Теени бит испред себе за сада.
>> Дакле, шта је показивач?
Показивач је податак чије вредност је меморијска адреса.
То је било то Зеро Кс осам нула стуфф дешава, то је сећање адреса.
То је локација у меморији.
И тип показивач описује врсту
података ћете наћи на да је меморија адреса.
Дакле, ту је део у праву Инт звездице.
Ако пратим ту стрелу, то је да ме доведе до локације.
И та локација, оно што сам ће тамо наћи у мом примеру,
је зелено боје кутија.
То је цео број, то је оно што ћете наћи ако одем на ту адресу.
Тип података показивач описује шта
наћи ћете у тој меморијској адреси.
Ево иако је стварно супер ствар.
Показивачи омогућавају нам да прође варијабле између функција.
И заправо прође променљиве и не пролазе њихове копије.
Јер ако знамо тачно где у меморији да пронађе променљиву,
не треба да направите копију да, управо смо да идемо на тој локацији
и рад са том променљиве.
Дакле, у суштини тројкама врста од направити окружење рачунара
много више као у стварном свету, зар не.
>> Дакле, овде је аналогија.
Рецимо да имам свеску, у праву, а то је пуна нота.
И ја бих волео да га ажурирати.
Ви сте функција која ажурирање белешке, зар не.
На путу смо били раде сада, шта
деси се да ћете узети моју свеску, ћете ићи на копирање продавницу,
ћете направити копију Ксерок свака страна на нотебоок.
Ти ћеш оставити своју свеску назад на мом столу када завршите,
ћете ићи и прецртати ствари у мојој Нотебоок који су застарели или погрешно,
а онда ћу се вратити проћи у ми штос Ксерок страница
то је реплика својој бележници са промене које сте направили на њега.
И у том тренутку, то је до мене као позивање функција, као саговорника,
да одлучи да узме своје белешке и интегришу их у својој бележници.
Дакле, постоји много корака укључени овде, зар не.
Као не би било боље ако само кажем, хеј, можете
упдате моју свеску за ја, ти предам моју свеску,
и узмете ствари и Буквално их прецртати
и ажурирати своје белешке у својој свесци.
А онда ми моју свеску назад.
То је мало шта показивачи нам омогућити да радимо,
они чине ово окружење пуно више личи како смо раде у стварности.
>> У реду, тако да је шта показивач се, хајде да разговарамо
како показивачи раде у Ц, и Како можемо да почнемо да радимо са њима.
Тако да је веома једноставна показивач у Ц зове Нулл Поинтер.
У Нулл Поинтер указује на ништа.
То вероватно изгледа као да је заправо није јако корисна ствар,
али као што ћемо видети Мало касније, чињеница
да је ово Нулл Поинтер постоји заправо заиста може доћи у руци.
И кад год направите показивач и не подесите своју вредност иммедиатели-
пример подешавања Одмах његова вредност
ће бити пар слајдова назад где сам рекао ПК једнако & К,
ПК добија Адрес К, као видећемо шта то значи,
видећемо како код који схортли- ако не подесили њену вредност на нечему
Одмах смислено, Увек би требало да
сет показивач да укаже на нулл.
Требало би поставити је да се укаже на ништа.
>> То је веома разликује од само остављајући вредност као што је
и онда прогласи показивач и само под претпоставком
то је нула, јер је то ретко истина.
Тако да увек треба поставити вредност показивач
нулл ако не подесите вредност нешто смислено одмах.
Можете проверити да ли вредности показивач је нулл помоћу оператора једнакости
(==), Баш као да поредите било цео вредности или вредности карактер помоћу (==)
као.
То је посебна врста константа Вредност коју можете да користите за тестирање.
Дакле, то је врло једноставна показивач, нулта показивач.
Други начин да се створи показивач је за издвајање
адреса променљиве сте већ направили,
и ово урадите помоћу & адреса оператер екстракција.
Који смо већ видели раније у првом дијаграму примеру показао.
Дакле, ако је к променљива која имамо већ креиран од типа интегер,
онда и к је показивач на цео број.
& х ис- сећам, и иде за издвајање адреса ствар на десној страни.
А пошто показивач је само адреса, него и к је показивач на цео број
чија је вредност у којој Меморија Кс животима.
То је адреса к екипе.
Дакле, и к је адреса к.
Узмимо ову један корак даље и повезивање са нечим
Ја алудирао у претходном видеу.
Ако дол је низ дублу, а затим и обр квадрат носач сам је показивач
да дупло.
ОК.
арр квадратних брацкет сам, ако ар је низ дублу,
онда арр квадратних конзолу и је и-тх Елемент тог низа,
и & арр квадратних конзолу сам је где у меморије и-ти елемент арр постоји.
>> Дакле, шта је овде импликација?
Низови име, импликација из свега овога,
је то име низ је заправо сама показивач.
Ви сте радили са показивачима Алл Алонг
сваки пут када сте користили низ.
Запамти од примера на променљиве обима,
пред крај видеа сам представити пример где имамо функцију
назива скуп Инт а функција названа скуп низа.
А твој изазов да се утврди да ли је или не, или оно што је
вриједности које смо се штампају крај функције,
на крају главног програма.
>> Ако се сећате из тог примера или ако сте гледали видео,
знате да када ли- позив на Сет Инт ефикасно ради ништа.
Али позив да подесите низ ради.
И некако напоменуто преко тога да је то био случај у то време.
Само сам рекао, добро је то низ, то је Посебан, знате, постоји разлог.
Разлог је тај низ је Име је заиста само показивач,
и ту је посебна квадрат носач синтакса
Да ствар много лепше радити.
И они чине идеја о поинтер много мање застрашујући,
и зато они некако ми од представила на тај начин.
Али стварно низови су само показивачи.
И зато, када смо направио промену у низу,
када смо прошли низ као параметар до функције или као аргумент
до функције, садржај низа заправо променило иу позвани
и у саговорником.
Који за сваку другу врсту променљива смо видели није био случај.
Дакле, то је нешто што треба имати на смета када радите са показивачима,
је да је име једног низ ствари показивач
на првом елементу тог низа.
>> ОК, сада имамо све ово чињенице, хајде да наставимо, у реду.
Зашто ми бринемо о где је нешто живи.
Па као што сам рекао, то је прилично корисно знати где је нешто живи
тако да можете отићи тамо и промените је.
Рад са њим и стварно има ствар која вас
Желим да урадим том променљиве ефекта преузимања, а не ступи на снагу на некој копији тога.
Ово се зове дереференцинг.
Идемо у вези и мењамо ту вредност.
Дакле, ако имамо показивач и то се зове ПЦ, а то указује на карактер,
онда можемо рећи * и * ком ком је Име шта ћемо наћи ако идемо
на адреси ком.
Шта ћемо тамо наћи је лик и * ком је како се односе на податке у томе
локација.
Дакле, могли бисмо рећи нешто слично * ком = Д или тако нешто,
а то значи да шта год био на меморијској адреси пц,
год карактер је био раније тамо је сада Д Ако кажемо * ПЦ = д.
>> И ево нас опет са нека чудна ствар, Ц, у праву.
Тако смо видели раније као * некако део тип података,
и сада се користи у мало другачији контекст
за приступ подацима на локацији.
Знам да је мало збуњујуће и То је заправо део овог целине
Као, зашто показивачи имају митологију око њих као толико сложен,
је нека врста проблема синтаксе, искрено.
Међутим * се користи у оба контекста, и као део имена типа,
па да видимо мало касније нешто друго, такође.
И сада је дереференце оператер.
Тако то иде са референтним, она приступа податке
на локацији показивача, и вам омогућава да га манипулише по вољи.
>> Ово је врло слично посетите свог суседа, у реду.
Ако знате шта ваши комшија живи, ти си
не дружиш са комшијом.
Знаш да се деси знају где живе,
али то не значи да је врлина да то знање
сте у интеракцији са њима.
Ако желите да комуницирате са њима, мораш да одеш у своју кућу,
мораш да одеш тамо где живе.
А када то урадите, онда можете интеракцију
са њима баш као да желиш да.
А слично је варијабли, морате да одете на њихову адресу
Ако желите да их интеракцију, не можете једноставно знати адресу.
И тако идете на адресу е користити *, оператор Дереференце.
Шта мислиш да се догађа ако покушамо и дереференце
показивач чија је вредност нулл?
Подсетимо да је нулл показивач указује на ништа.
Дакле, ако сте покушали да дереференце ништа или идите на адресу ништа,
Шта мислиш да се догађа?
Па ако погодили сегментације кривица, ти би био у праву.
Ако покушате и дереференце нула показивач,
патите а сегментацију кривица. Али чекајте,
нисам ти рекао, да ако не идеш
да подесите вредност ваших поинтер на нешто смислено,
ви треба да подесите нулл?
Ја сам и заправо сегментације крив је нека врста доброг владања.
>> Да ли сте икада проглашена променљиву и одмах није додељен своју вредност?
Тако сте рекли инт к; немаш заправо доделили свега
а касније у коду, можете одштампати вредност к,
имајући увек не додељен је на све.
Често ћете добити нула, али понекад
Можда мало случајни број, а немаш појма одакле је дошао.
Слично се ствари десити са показивачима.
Када одредите показивач инт * пк на пример,
а ви не доделите вредност, добијате четири бајта за меморију.
Без обзира четири бајтова меморија систем може
сматрају да имају неку смислену вредност.
А можда су нешто што је већ тамо да
више није потребан неко други функција, тако да само
год подаци су били тамо.
>> Шта ако сте покушали да урадите Дереференце нека адреса коју Немој- било
Већ бајтова и информације у Ето, то је сада у показивачем.
Ако покушате и дереференце тог показивача, можда се петљају са неким меморије
да нисте намеравали да неред са њим све.
А у ствари можете да урадите нешто заиста поражавајуће,
као бреак други програм, или сломити другу функцију,
или уради нешто што злонамерни нисте намеравате да урадите уопште.
И то је разлог зашто је заправо добра идеја
да подесите савете нулл ако вас да их није подешен на нешто смислено.
То је вероватно боље у крај дана за ваш програм
срушити онда за то да уради Нешто што зезне
други програм или неку другу функцију.
То понашање је вероватно и мање идеално него само пада.
И то је разлог зашто је заправо добра навика
да уђу у своје савете за подешавање нулл ако их не сет
у смислене вредности одмах, вредност да знате
и да безбедно може ли дереференце.
>> Дакле, вратимо се сада и погледај у укупном синтакси ситуације.
Ако кажем Инт * стр ;, шта сам урадио?
Оно што сам урадио је то.
Знам да је вредност п је адреса јер су сви показивачи су само
адресе.
Могу дереференце стр коришћењем * оператера.
У том контексту овде, на самом Топ сећам се * је део типа.
Инт * је тип података.
Али ја могу дереференце стр помоћу оператора *,
и ако то уради, ако одем на ту адресу, шта ћу наћи на тој адреси?
Наћи ћу цео број.
Дакле, Инт * п је у основи говорећи, п је адреса.
Могу дереференце п и ако Ја, ја ћу наћи цео број
на тој меморијској локацији.
>> У реду па сам рекао да је био још један нервира ствар са звездама
и овде је где је нервира ствар са звездама је.
Да ли сте икада покушали да се изјасни више променљиве истог типа
на истој линији кода?
Дакле, за тренутак, претварати да је линија, код Ја имам ту у зелено
није ту и само каже инт к, и, з ;.
Шта би то значило је заправо створити три интегер променљиве за тебе,
један је Кс, једна се зове и, а један по имену з.
То је начин да се то уради без морате да поделите на три линије.
>> Ево где звезде добити опет нервира ипак,
јер је заправо део * од обоје имена типа и део
варијабилног имена.
И тако ако кажем Инт * пк, пи, ПЗ, шта сам заиста добити је показивач на цео број
зове пк и два цела броја, ПИ и ПЗ.
И то је вероватно није шта желимо, то није добро.
>> Дакле, ако желим да се створи више савете на истој линији, истог типа,
и звезде, шта заправо треба да кажемо је Инт * ПА, ПБ *, * ком.
Сада пошто си рекао да а сад ти ово говорим,
вероватно никада неће учинити.
И то је вероватно искрено добра ствар, зато што нехотице можда
изоставити звезду, тако нешто.
То је вероватно најбоље да можда прогласити показивачи на појединим линијама,
али то је само још један од оних досадних синтаксе
ствари са звездама које чине показивачи тако тешко радити.
Зато што је само овај синтактичка неред морате да радите преко.
Са пракси ради заиста постати друга природа.
И даље праве грешке са њим још увек након програмирања за 10 година,
па немојте се љутити ако се нешто деси за вас, то је прилично уобичајено искрено.
То је стварно нека врста грешка у синтакси.
>> ОК, некако обећао да ћемо поново
концепт колика је стринг.
Па ако сам вам рекао да је ниска, стварно сам некако
лагао цијело вријеме.
Нема података зове тип ниска, ау ствари сам
споменуо у једном од наших Најстарији видео на типове података,
да низ је тип података који је створена за вас у ЦС50.х.
Морате да #инцлуде ЦС50.х како би га користили.
>> Па стринг заиста само алиас за нешто
назива цхар, А показивач на карактер.
Па показивачи, опозив, су само бави.
Дакле, шта је величина у бајтова низу?
Па то је четири или осам.
А разлог зашто сам рекао четири или осам је зато што она заправо
зависи од система, Ако користите ЦС50 ИДЕ, инт * је величине цхар
* Је осам, то је 64-битни систем.
Сваки адреса у меморији је дуга 64 бита.
Ако користите уређај ЦС50 или користећи било 32-битну машину,
а ви сте чули тај израз 32-бит машина, што је 32-битни машина?
Па то само значи да сваки адреса у меморији је дуга 32 бита.
И тако 32 бита је четири бајта.
Дакле, цхар је четири или осам бајтова зависности од вашег система.
И заиста било типови података, и показивач на сваком подацима
тип, пошто су сви показивачи су само адресе, четири или осам бајтова.
Дакле, хајде да поново ово дијаграм па да закључимо
овај видео са мало вежбе овде.
Дакле, овде је дијаграм смо стали са на самом почетку видеа.
Дакле, шта се сада дешава ако кажем * пк = 35?
Дакле, шта значи када кажем, * ПК = 35?
Узмите мало.
* ПК.
У контексту овде, ис дереференце оператер.
Дакле, када је дереференце оператор користи,
идемо на адресу указао на од ПК, и мењамо оно што смо открили.
Тако * ПК = 35 ефективно да ли то на слици.
Дакле, то је у основи синтактички идентична од Рекавши к = 35.
>> Још један.
Ако кажем инт м, креирам нова променљива под називом м.
Нова кутија, то је зелена кутија, јер то ће држати цео број,
и то је обележено м.
Ако кажем М = 4, Ставила сам цео у тој кутији.
Ако рецимо ПК = & м, како се Дијаграм промена?
ПК = & м да ли се сећате шта је & Оператер ради или се зове?
Имајте на уму да неко променљиве име & је адреса у име променљиве.
Дакле, оно што говорите је ПК добија адресу метара.
И тако ефикасно шта деси дијаграм је да пк дуже нема бодова
к, али указује на м.
>> Опет показивачи су веома незгодно да раде са
и они су се доста пракса, већ зато што
њихове способности да вам дозволи да прође података између функција
и заправо имају оне Промене ступају на снагу,
узимајући главу око је заиста важно.
То је вероватно најкомпликованији тему смо разговарали о у ЦС50,
али је вредност те да добити од коришћења савете
далеко превазилази компликација која долазе из њих уче.
Дакле, желим вам најбоље срећа учење о тројкама.
Ја сам Доуг Ллоид, ово је ЦС50.