ЈАСОН Хирсцххорн: Добродошли до А5, сви. Имамо узбудљив седмица пред нама, углавном због тога што постоји толико много нових суочава у овој соби. То је дивно. Многи од вас су овде случајно, која је још боља. Дакле, надамо се да ћете нам се придружити задржати. Ми Ове недеље ће провести највећи део секције припрема за квиз. Дакле, по нашем дневном реду, идемо да разговарамо Мало о ресурсима за класу, али и за квиз, а затим, поново, проводе највећи део класе разговор око питања. Када смо завршили одговорили ваше питања, или ако ваша питања природно да нас доведе до неке кодирање, ја имају проблеме узорак из испитима прошлост да ћемо уживо кодирати у одељку заједно да такође довести до неке друге добре теме да покрије. Дакле, прво, као што смо прошли за Последњих пар недеља да вас подсетим момци, има тона ресурса на располагању за овај курс. Многи од њих ће бити невероватно корисно теби као да наставите да студирају за квиз 0, јер то је уторак поподне. Дакле, сви ви били студирање за мало. Постоје предавања белешке и извор код које треба дефинитивно проверити. Пази гаћице. Погледајте студи.цс50.нет. А онда, наведене у наставку, један број других ресурса. Опет, квиз 0 је сутра на 1 сат. Ако нисте урадили већ, проверите ван О квиз 0 документа о Курс страница да схватим где узимате квиз. Квиз почиње у 1:10 и завршава 70 минута касније. Дакле, ако се појавиш после 1:10, ти си ће добити да многе мање минута од 70 да преузме квиз. Дакле, проверите да ли сте тамо на време. Ако сте студент или продужетак имају неки други разлози за тестирање, то не може бити у 1 сат сутра. Али опет, проверите О квиз 0 документује да будете сигурни да знате када узимате квиз. Написао сам 75 минута овде. Мислим да је у праву, не 70. Она обухвата сав материјал од недељу дана 0 на прошлонедељном предавању у среду. И опет, за овај квиз, по то документ, добијате један двострани и 8 1/2 од 11 листа папира који сте добили користити као белешке током квиза. Многи људи, ако не и већина људи, имају утврдио да један најкориснији начин да студирају за квиз је да направи студија лист, А један-Сидер, од сопствене. Па погледајте протеклих оне ако Ви сте видели оне из прошлости. Допре до пријатељима да виде шта они стављајући на њихова. Али руке-доле, најбољи начин можете Студија је да прође кроз све и резати га на шта треба или не треба не припадају том листу папир, јер то је само стварно користан начин да се уверите идете кроз све и имају неки упознати са њом. Већина људи, налазимо, иако су су лист папира седи десно поред њих на квизу, не окрећи на њега, јер, опет, да је врло Процес иде кроз информације је помогао да га науче. Да ли неко има било каква питања о квизу 0? Има све - Нећу да радим дизањем руке. Нема везе. Хтео сам да питам ко почела да студирам. Али ја не желим да те направи сви не дигну руке. Дакле, као што сам рекао - да, Ави, само напред. АВИ: Шта би било корисно ствар да стави на једну пејџер? СТУДЕНТСКА: То је на вама. ЈАСОН Хирсцххорн: Можете добити да користите свој суд. Корисне ствари да се стави на једну пејџер, ако сте збуњени о великом О извршавања различитих типова претрага и сорте, ставити да тамо у згодан кицош графикон. На тај начин, ако сте се питали да на квиз, не морате да покушате и фигура она се, или разлог кроз рунтиме. Можете само да га копирате доле. Ако погледате квизове прошлост, много пута, дошло је време извршавања питања. Дакле, то би био добар пример ствар да се стави на једну пејџер. Друге добре ствари да се стави на, ако си збуњени о томе како да се изјасне функција или шта различити делови декларација функција су, пишу да тамо, генерички верзија а онда можда пример. Ако сте збуњени о показивача, дијаграм како показивачи рад Вероватно заиста корисно. Ако сте збуњени о рекурзије, а сампле рекурзивни функција на ту такође може доказати да буде заиста корисно. Да ли то вам дати неке идеје? АВИ: Треба да схватите Цео процес Боје и лакови, као како то све ради? ЈАСОН Хирсцххорн: Све који је покривен могао појавити на квизу. Питања - али опет, неке ствари ће бити пондерисана тешко од других. Неке ствари су дошли поново и поново у класи, у предавање, и секција. Друге ствари нису искрсло то често. Причали смо доста о # инцлуде и -Ја се нешто и шта оне значе у компилација процес. Причали смо доста о ГДБ, дрзе, оне различите заставе које користимо када смо саставити нешто, а шта маке15, на пример, стварно значи и стварно. Нисмо причамо толико о сваки корак у компилација процес. Још увек смо разговарали о томе. Дакле, то је још увек нешто што треба да буду упознати са. Али опет, нећемо бити - ствари које се појављују чешће у класи су више вероватно да ће доћи до још често и бити тешко пондерисана на квизу. Цоол. Било која друга питања у вези квиза 0? У реду, па сам ставио листу теме на табли. Прошао сам кроз градиво. Прошао сам кроз сажетку из синоћ и оне слајдове да дођу до са не-исцрпну листу тема да смо покривени до сада у ЦС50 и ствари које можда појављују на квизу. Дакле, ја не идем кроз сваки од њих. То би требало много више време него сада имамо. Али сам ставио ово овде надам се јог ваше сећање као да ствари које могу или не може да буде упознат са вама. И ја бих волео да проведе већи део одељак одговара на ваша питања у вези са Ове теме, теме које нису покривени овде. Можемо писати псеудо кода. Можемо писати прави код како би се обезбедило да сте - Ја могу да одговорим на ваше питање и помоћи сви разумеју фундаментално Многе од тих тема, тако да ћете осетити припремљена и удобан одлазак у квиз сутра. Зато прочитајте у листу. Ви надамо дошли на одељак са неким питања, као и. Када сте спремни, подигните руку и ми ћемо почети. Имајте на уму, питања имате, нема глупих питања. Чули смо да је много. А питања имате, ја сам спреман да се кладите, многих других људи и седим овде и гледао Онлине имају као добро. Тако да само могу да помогну људима постављањем питања. Маркус. Марцус: Између гомиле и куча, постоји унапред издвојено Проценат меморије који се дефинише као ово је за стек или за гомилу? Или како то иде, тачно? ЈАСОН Хирсцххорн: Одлично питање. Идем да пронађемо одакле мало. Да ли све - Будите искрени овде. Знам ја вас питам да подигну свој рука пред својим вршњацима. Али постоје људи који се осећају непријатно са стека и гомилу и волео бих да одем да и шта оне значе? Подигните руку ако - У реду. Хвала. Тако ћемо ићи преко стека и куча заиста брзо, а затим преместите у одговарајући питање. Дакле, ако смо извући кутију да представља меморије на вашем рачунару, што су неки ствари које иду у ову кутију? Главни. Главна функција. Где ићи главни? СТУДЕНТСКА: [ИНАУДИБЛЕ]. ЈАСОН Хирсцххорн: Па ми ћемо стави главни овде доле. Шта још иде у овој кутији? СТУДЕНТСКА: Функције које позивају. ЈАСОН Хирсцххорн: Функције да зовемо. И где иду? СТУДЕНТСКА: У стеку. ЈАСОН Хирсцххорн: Они иду у стеку. Тако ћемо назвати ствар овде доле стек. И до врха, имамо гомилу. Дакле, меморија није само кутија овако. Али, то је заправо прилично слична. То ће бити много више кутија и преко, у зависности од тога колико је велика ваше рачунар или колики је ваш меморија. На цитат-Ункуоте "дно" је стек. А постоји више ствари да иде на стек. И оне зависе од функције имате у вашем коду. Увек имају једну функцију у вашој код зове главни, тако да увек има одељак овде у стек посвећен главни. Ове секције у стеку се зове стек оквире. Када позовете другу функцију, кажу главни позива бинарну функцију за претрагу, смо ставили нови оквир на стек. Прецизније, ћемо поклонити комад меморије на наше рачунар за складиштење бинарни претрагу је локална променљиве и да покренете бинарну претрагу код. Тако зовемо бинарну претрагу. У овом комаду меморије, идемо да сачувате своје локалне променљиве. Идемо да сачувате своје принтф позиве. Шта год да се деси, да је функција ће бити смештене тамо. Бинарни претраживање ће да изврши. То ће да заврши извршење. Шта је реч у Ц који означава да функција треба заврши његово извршење? СТУДЕНТСКИ: Повратак. ЈАСОН Хирсцххорн: Повратак. Дакле, кад год видите изјаву повратка, су функција завршава када погоди то. Дакле, бинарни претрага ће ударити свој повратак. Овај део меморије ће у суштини бити ослобођени. И главни ће се вратити на извршење. Дакле, главни ће паузирати где год био, позив бинарни претрагу, добити неку повратну вредност, и наставити извршење. Овај стек оквир ће нестати. Ако ми зовемо рекурзивни функција, која је функција која се позива преко и преко, ми смо могли добити - кажу ми урадио бинарну претрагу рекурзивно. Можда ћемо добити бинарну верзију претраживача један, бинарни претрагу два, бинарни претрагу три, четири бинарна претрага, бинарни претрагу пет. И онда ово финале бинарни претрагу пет ће се појавити на основни случај и штос оквири ће се вратити и задржати затварање док се не вратимо на главни. Можемо ићи преко рекурзије у мало. Али све ово је да кажем, ако си називајући више функција у исто време, тамо ће бити више стека оквири на стек. Хеап, с друге стране, се овде, није за функције, не за локалне променљиве. То је за динамички додељује варијабле. Дакле, то су променљиве које могу бити иницијализован у било главни или функција која главне позиве. Било где у вашем коду, они може да буде покренут. И да иницијализује динамички додељена променљива. Шта функција у Ц не користимо? СТУДЕНТСКИ: Маллоц. ЈАСОН Хирсцххорн: Маллоц. Ти зови маллоц. Добијате простор меморије. И тај простор меморије је на гомили. И тај простор меморије остаје тамо док ти звати бесплатно. Дакле, динамички додељене променљиве у гомила ће постојати све док ти Желим им да постоје, а они неће одлази до тебе експлицитно реци им да оду. Можете их креирати у једном функцијом. Стека ту функцију је оквир ће нестати. Али то променљива ће и даље постојати у гомили док је ослобођен, потенцијално функцијом која се зове бинарни претраживање или шта год. Тако ти хеап варијабле остану тамо онолико дуго колико желите им да остану тамо. И они се ту ставили. И онда следећи пут добија тамо. Они држе добијање попуњене, а они остани тамо док ти звати бесплатно. И у суштини, гомила и стек, добијање на питање Марцус, расте једни према другима. А ако они раде у једну другу, ви сте користи сву меморију у вашем рачунар, а ваш програм ће престати јер немате никакву више меморије лево за употребу. Између њих, постоје потенцијално друге ствари. Али за оквиру овог курса, тебе Не треба да бринете о томе. Дакле, то је био одговор на твоје питање. Ништа не брините. Али то је био дугачак одговор. Све што треба да знате је гомиле и стека ће - један почиње на дну. Стек не. Куча је горе. Они ће расти ближе један другом. А ако они дирај, то је проблем. Ви понестало меморије. Али, такође, поред знајући где они су, што се чува у оба стек и хеап. Кертис. ЦУРТИС: Када су сударају, је да Стацк Оверфлов? ЈАСОН Хирсцххорн: Када су сударају, то није Стацк Оверфлов. Стацк Оверфлов је другачија област да можемо да идемо преко ако желите да. У реду, ми ћемо се на то у мало. СТУДЕНТСКА: Шта је реч зове када су хит међусобно, стек и гомила? ЈАСОН Хирсцххорн: За сада, не брини. Само знам - Ја ћу одговорити на то питање након класе. Ако наиђете на међусобно, ти понестало меморије, јер нема више простор тамо. СТУДЕНТСКИ: Извините, шта је сек грешка? ЈАСОН Хирсцххорн: Сегмент грешка може бити позван на - то зависи зашто се зове сег крив је. Понекад, твој стацк оверфлов, то ће кажу сец грешке као грешку. СТУДЕНТСКА: Шта је дереференцинг нулл променљива? Да ли је то грешка сек? ЈАСОН Хирсцххорн: Дереференцинг нулл показивач - У реду, тако да ако имате показивач који вам сет једнака нулл, показивачи, опозив, продавница меморијске адресе као њихове вредности. И нула показивач је у суштини складиштење 0, 0-ог решавање у тој променљивој. Дакле 0к, 0, 0, 0, 0, и тако даље. Тај 0-ог адреса у меморији то није у нашој слици, то је горе негде, то је резервисано за рачунар. Није нам дозвољено да га додирне. Дакле, када ваш програм се извршава, ако нешто покушава да оде у меморију адреса 0, то зна да то је празна вредност. То зна ништа би требало да буде тамо. Дакле, ако покушате и користите нешто тамо и третирају као нешто тамо или Покушавам да одем на ту локацију, ти си ће добити СЕГ грешку или грешку. Да ли то одговор на твоје питање? А сада ћемо се вратити да Стацк Оверфлов. Ствари у стеку, као момци имају видели, у - хајде да нацртате близу уп оф стек оквира. Могу сви да виде? Дакле, имамо стек оквир. Ми штедите низ у као локална променљива у овој функцији. Тако кажу наша низ има пет спотова. Свих пет они ће се чувати у том стек оквира. Ако почнемо писање изван границе овог низа - па ако почнемо писање у, рецимо да је то 0. То су пет индекси нашег низа. Ако почнемо да писање у индексу 5, који немамо када имамо низ величине 5, почнемо писање у индекс 6, 7, 8, 9, можемо добити Стацк Оверфлов грешка. Генерално то није - вероватно ћете добити у невољи ако идете преко по један. Али генерално, добићете у већина проблема ако идете преко по много и идете до сада преко да пишете преко повратне адресе које функција, која се налази на дно стека оквира. Јер, зар не? Ти - у - извините. Не "јер у праву." У стек оквира, имате Ваши локалне променљиве. На самом дну стека рам је повратна адреса. То је место где је функција иде када је готово. А ако препишете тај повратак адреса, онда када је то стек оквир, када идете кроз димњак кадрирање и извршавање сваку линију, ти си ићи на нови повратну адресу да је тамо написано уместо стваран. И тако смо видели неке безбедносне пропусте може да се деси са рачунарима. Дакле Стацк Оверфлов, укратко, када је ви препишете учествовали у стеку ви треба да користите, локална променљива ти треба да користе, и посебно када почнете да замене важне ствари као што су повратна адреса. И то је где ћете добити грешку. Или можда чак можете да почнете чак писање у - кажу бинарни претрагу је Право изнад главни. Ако овервроте много, те могли писати у главни. Али генерално, добијате грешку пре тада, зато што рачунар зна радите нешто што не би требало да ради. Да. СТУДЕНТСКА: Која је разлика између Стацк Оверфлов и буффер оверфлов? ЈАСОН Хирсцххорн: Буффер оверфлов је више генерички тип што сам управо описао. СТУДЕНТСКА: Дакле Стацк Оверфлов је Пример бафера. ЈАСОН Хирсцххорн: Управо тако. Ово је низ можемо мислити као пуфер, простор за ствари да иду унутра Ово је стек препуњен бафер. Могли бисмо да имамо гомилу преливање бафера. Ако је пуфер, који тамо често је низ гомилу, и ми овервроте те границе, онда би има гомила преливање бафера. И изван оквира овог курса, они откривена мало другачије. Компајлер има посебан начини откривања сваког. Али бафера је више генерички тип што сам описао, која је била гомила буффер оверфлов. Да ли да одговорим на ваше питање? Слатко. Да ли је било других питања у вези у стеку или гомиле? Да. СТУДЕНТСКА: Знам да морам да слободним жицама јер су у гомили а ви не желите да цури меморију. Али мораш да ослободе глобалних променљивих и такве ствари? Или су они аутоматски ослобођени? ЈАСОН Хирсцххорн: Добро питање. Дакле, у ЦС50.Х, ми стварамо ову ствар за вас зове стринг. Ниска је стварно оно? СТУДЕНТСКА: Знак звездице. ЈАСОН Хирсцххорн: Чар звезда, показивач До карактера, показивач низ знакова. То је оно што је ниска. Дакле, морамо да га ослободи, јер гетстринг, који смо користили много - Име стринг једнак гетстринг - да маллоцс за нас мало меморије на хеап а затим враћа показивач на први карактер који ниска, знак звезда. Тако наводно, ако нису писање бесплатно на било који од ваших жице који сте до сада звала, ви имате је цури мало меморије. Наравно нисмо разговарали о то, па нико није стечен у Невоља за то раде. Али иде напред, да. Када позовете гетстринг, ти си маллоцинг мало простора на гомили. А ако не слободно позовите касније да ниска, имате цурење меморије. То одговорим на ваше питање? Да СТУДЕНТСКА: Значи да се то уради, ми користимо бесплатно право пред повратак? Као, у оквиру, претпостављам да ако кажемо, као, инт главна, у оквиру обим кода који је у оквиру оне витичасте заграде, непосредно пре - Ви знате где бих обично стави повратак. Да ли ставити слободан пре тога? ЈАСОН Хирсцххорн: Дакле, ви можете ставити бесплатно где год желите да поставите бесплатан. Јер они су динамички додељују варијабле, јер они могу да живе изван опсега посебно функција, ако позовете у маллоц одвојено функцију, на пример, гетстринг, можете позвати бесплатно у главни. Не морате да га зову у специфичне функције где се маллоц зове. Али ви морате да га позовете пре главних повратка. И то заиста зависи. То зависи од тога зашто сте маллоцед да простор на првом месту. Неки људи ће позвати ослободи прилично брзо. Неки људи неће звати бесплатно до крај њиховог програма. И они ће проћи и слободан све. То зависи од тога зашто сте звали маллоц. СТУДЕНТСКА: А шта би ви рекли ако зове употреба гетстринг? Ви бих слободан шта? ЈАСОН Хирсцххорн: Дакле, синтакса за бесплатно је једноставно бесплатно, отворена заграда, близу заграда, а име показивача. Дакле, ако пишете стринг екуалс име гетстринг, ставите име овде. То је име показивача. И она зна да ослободи ту меморију. СТУДЕНТСКА: Дакле, када је ослобађа ту меморију, показивач даље указује на то место у меморији? Или је показивач такође испражњен од адреса која указује на. ЈАСОН Хирсцххорн: Треба да покушамо да. Требало би код који. Хајде да се вратимо кад стигнемо до кодирање, и хајде да код који. А ако желите да схватим одговор да да, можете да код у међувремену. Али то је велико питање. СТУДЕНТСКА: Да ли је могуће да се бесплатно нешто прерано? Дакле, још увек је потребно за ваш програм, и ослободио си тај меморијски простор? ЈАСОН Хирсцххорн: Да. То је могуће, ако нешто бесплатно а онда га поново користите, хоћеш наиђете на грешке. Али, то је на теби, јер си ослободио нешто и онда су га звали касније. Дакле, то је била грешка програмера је. Али да. Могао си написати да. Има ли још питања о - Да. СТУДЕНТСКА: Дакле, ако би требало да само ослободи га уопште пре Програм се завршава, да ли то значи, ако Програм се завршава и ви га не ослободи, да меморија и даље издваја? ЈАСОН Хирсцххорн: Ако ваш програм се завршава и заборавите да ослободите нешто, онда да је меморија широм издвојено животни век вашег програма. Када ваш програм затвара потпуно, да меморија не иде да остане тамо заувек. Рачунар је довољно паметан да зна да када програм затвори, она треба да се отараси свих меморије која био повезан са тим програмом. Међутим, постоје алатке можете да покренете на програму да открије да ли, када Програм завршио, заборавио си да ослободи неку меморију. И за следећи проблем поставити где ћете користити маллоц и користећи показивачи, бићете то ради програмира на вашем програму да видим да ли, када главни враћа, имали сте неке ствари које су оставили унфреед. Дакле, они неће остати маллоцед заувек у вашем рачунару. То би било расипнички, јер врло брзо, рачунари би понестало меморије. Али, ако они раде до краја свог програмирање и они нису ослободили и ваше Програм излази, то је и даље проблем да ће овај алат вам помоћи да се обрати. СТУДЕНТСКА: Да ли је то Валгринд? ЈАСОН Хирсцххорн: То је зове Валгринд. И ви ћете бити - СТУДЕНТСКА: Али не морамо да знамо да је за квиз, иако? Мислим, то је говорио о мало у предавању. ЈАСОН Хирсцххорн: Па Валгринд је назив тог алата. Знајући оно што ради је довољно за квиз. Али нисте га користили још у вашем Проблем сет јер нисмо имали Проблем скуп који је експлицитно бави са маллоц или користите маллоц. Дакле, ви нисте користили валгринд још. Али ће га користити пре него касније. СТУДЕНТСКА: Можете ли поновити шта је Валгринд? ЈАСОН Хирсцххорн: Извините? СТУДЕНТСКА: Можете ли поновити шта Сврха Валгринг је? ЈАСОН Хирсцххорн: Валгринд је име - као ГДБ помаже да дебуг свој програм, Валгринд помаже вам да схватите да ли ствари нису ослобођени када ваш програм затвара. Тако ћете га покренете на вашем програму. И ваш програм излази, а то ће рећи Ваш програм под називом маллоц то многи пута за оволико бајтова, и ви само се зове слободан оволико пута. И тако сте напустили ове много бајтова без ослободио. Или ћеш рећи да си ослободио све. Добар посао. СТУДЕНТСКИ: У реду. И то се зове Валгринг? ЈАСОН Хирсцххорн: В-А-Л-Г-Р-И-Н-Д. СТУДЕНТСКА: Питање око показивача. Дакле, кажете да сте н стар к једнако нешто. То је једнако, шта год да стављање постоји, да је оно што је речено у шта је к указује на, или показивач на к? ЈАСОН Хирсцххорн: Можете ли поновите питање? Можемо га извући док се то каже? СТУДЕНТСКА: У квизу, у ствари, један сте нам послали, било је као, Чар звезда истина једнако ЦС50 камење, зар не? Да ли то значи да да ЦС50 стене је оно истина указује на? ЈАСОН Хирсцххорн: Дакле, ви говорите о цхар звезде у низу, како то ради? Да. У реду. Хајде да нацртате ово овде. [РАЗГОВОР СИДЕ] ЈАСОН Хирсцххорн: Па ово променљива ће бити типа цхар звезде. Колика је променљива од типа цхар звезде? Колико бајтова? СТУДЕНТИ: Четири. ЈАСОН Хирсцххорн: То је четири бајта. Колико права је променљива типа инт звезде? СТУДЕНТИ: Четири. ЈАСОН Хирсцххорн: Четири бајта. Ако је показивач, онда је увек четири бајта, јер показивачи, њихов вредност је меморија адреса. И меморијске адресе на ЦС50 Апарат је дуг четири бајта. Дакле, када зовемо гетстринг, или када смо рецимо, стрингнаме једнако, а затим у двоструки наводници стави жицу, ми смо стављањем - добро, то је мало другачија. Ми ћемо то гетстринг као пример. Или Чар звезда нешто једнака ниску. Извини, дај ми пример да сте прочитали? СТУДЕНТСКА: Чар звезда истина једнако "ЦС50 стене" у двоструким наводницима. ЈАСОН Хирсцххорн: Дакле ова звезда, ово ћемо назвати овај променљива Кс за наше генериц сврхе. Направили смо променљиву под именом к. То је тип цхар звезда. То је показивач на низ карактера. Дакле, овде доле - Дакле, ово је како би то било раде у меморији. Ово би складиштите меморијску адресу. То би остављати меморијску адресу Први знак у низу. А онда када сте пратили показивач, што би добити први карактер. А ако читате ово свиђа ниска, ваш рачунар је паметан довољно да знате, прочитајте целу ову ствар док не стигне до затезања 0. Али ако га читате на карактер време, тако да сте итератинг кроз Овај стринг, онда само ће прочитати карактер у време док не дођете до бацксласх 0. То можда не одговорим на ваше питање, мада. СТУДЕНТСКИ: Да, али ви не имате маллоцед да простор Још за тај поинтер. ЈАСОН Хирсцххорн: Па нисам баш сигуран тачно оно што тражите у, јер ја нисам направио тај квиз. То је требало да буде од помоћи ресурса из другог ТФ. Ако креирате стринг на стек или као локалне променљиве, то ће само се низ оптужби него генерално Чар звезда указује на други стринг. Али ја не знам. То би могао бити показивач на други стринг на стек као добро. Да. СТУДЕНТСКА: Знам да треба да алоцирају меморију ако је показивач геттинг прогласила унутра друге функције. Да ли је потребно да урадите исту ствар, ако је то се прогласио унутар главни, ви га користите унутар главни? ЈАСОН Хирсцххорн: Па да. Можете да прогласи показивач на било Меморијска адреса у меморији. То може бити сећање адреса локалног променљива, мада често, људи не изјасни меморијске адресе до локалних променљивих, јер они иду далеко једном да функција враћа, који Зато смо генерално маллоц ствари. Али да, ти би могао да прогласи показивач друге локалне променљиве. То је само обично не ради. Али ја могу да погледам то специфична ствар после класе. Да. СТУДЕНТСКА: Мислим да је ово врста онога што се тражи. Изгледа чудно да се иницијализација показивач не као адреса, али као што Чини се као вредност. Чини се као да је ЦС50 шта је унутра ствар се указао да и не стварна адреса, зар не? ЈАСОН Хирсцххорн: Дакле, то је није случај, иако. То није оно што се дешава. Када прогласи цхар звезду, то је сећање адреса. Показивачи су све меморијске адресе указујући на нешто друго. То нешто друго могло да буде на стек, али скоро увек је на хеап на начин ћемо видети га користи. Али стрингнаме једнако наводнике "Гетстринг," можемо да видимо да и ми Можете погледати кроз то и код који. гетстринг стринг се не чувају у да променљива, или како год ниска име се не чувају се у то променљива, јер то није начин показивачи раде. Да ли то смисла? СТУДЕНТСКИ: Да. ЈАСОН Хирсцххорн: У реду. Надам се, да није било збуњујуће никоме. Али, ако је било, можемо опет гледати на њега у мало, јер ми у ствари идемо да код нешто што ће, надамо рад са жицама и помоћи да се осећате више удобан са њима. Било која друга питања у вези са овим Тема или друге теме које Ја ћу вратити горе? И - одмах. Да, Алден. Алден: Дакле, ово је потпуно неповезане, али можемо само ићи преко стварно брзо шта нам је потребно да знамо о разлици између 32 и 64-битни машина? ЈАСОН Хирсцххорн: Да. Дакле, 32 бита је колико бајтова? Алден: То је четири бајта. ЈАСОН Хирсцххорн: То је четири бајта. И 64 бита је колико бајтова? СТУДЕНТСКИ: Осам. ЈАСОН Хирсцххорн: Осам бајтова. Па опет, осам битова је један бајт. Ваш ЦС50 апарат је 32-битни машина. Дакле, меморијске адресе су четири бајта дуге. Постоје 2 до 32 меморијске адресе. 0 до 2 до 32 минус 1. И ја нисам позитиван, али то је вероватно обим онога што вам је потребно да Знам за 32-битну машину, која меморија адресе су, опет, четири бајта дуго, и то је максимални износ меморијских адреса. Такође, типови података - ово би могло бити нешто као добро да је вредно напоменути. Величина типа података зависи машина радите са. Дакле Чар, један лик, како је многи бајта на нашем ЦС50 апарата? Један бајт. И то је заправо један бајт као добро на 64-битном рачунару. И већина типова података су исти број бајтова на обе машине. Међутим, неки типови података ће бити другачији на обе машине. Дакле, то би било потенцијално Једина ствар коју треба да знате. Али чак и да је, ја мислим, је ван граница - Скоро сам сигуран, ако се осврнемо уназад на старим квизове, каже, претпостављам за кодирање проблема да користите 32-битни машина. Али постоје, да иду заједно са тим у случају да сте заинтересовани, постоји типови података који су исти величина на свим машинама. Ако сте видели нешто слично уинт32_т, ви може или Нисам видео да. То је тип података. То се каже, бити 32 бита, без обзира шта је машина на ово. Дакле, када су људи писања портабле код, они вероватно неће користити интс. Они уместо тога ћемо користити ове и друге податке Типови да они знају ће бити исти величина на сваком рачунару. Мадху. Мадху: Имао сам питање о компилација процес. Дакле, ако пишете програм који користи библиотека као ЦС50 или тако нешто тако, ја знам да је то библиотека мора да, у неком тренутку, бити саставио и повезан унутра Али колико се то деси током компилација вашег програма? Који део тог процеса библиотеке јавља када сте састављања свој програм? ЈАСОН Хирсцххорн: Па идемо преко Генерално кораци овог процеса. Можете написати своју датотеку ц.. У вашем ц Филе., Ви # укључити ваше заглавља библиотеке, на пример, цс50.х. Шта ли то оштар укључују линија учинити да ваш програм? Акцхар. АКЦХАР: Она додаје прототипове функције из заглавља датотеке у библиотекама. ЈАСОН Хирсцххорн: Управо тако. Она додаје те функције прототипова на вашем коду. Дакле, када је ваш код се саставља у раним фазама, компајлер зна да ове функције заиста постоје, и да негде су били дефинисани. На. Х фајлови не садрже Дефиниције за ове функције или како они заправо раде. Цс50.х само укључује нешто што каже гетстринг је права ствар која може да се деси. И стандардио.х каже принтф је права ствар која може да се деси. Заглавље Дакле, ваш језик Ц са овим. фајл се претворила у неки код машина-читљив, што је на крају бива претворен у бинарни код, 0 и 1 је је. И то је код који на крају добија погубљен. -Л ЦС50 линија - на пример, када пишете звека - а онда укључују-л ЦС50, куцате да унутра И видите да. Када пишете направите, ви ћете види ту линију овде. И ми ћемо видети да за секунд када ми код или касније, када смо код. Али да ја-ЦС50 линија ради нешто мало другачије него у # инцлуде цс50.х. Шта да-сам ЦС50 линија радим? Ави? АВИ: Желим да кажем да је то повезује библиотека функцији зову, као и. о датотекама. ЈАСОН Хирсцххорн: Па врло близу, ако не место-он. -Ја ЦС50 узима бинарни фајл и спаја га са бинарном датотеком. Дакле цс50.х, нема смисла у окретање цс50.х из Ц језика у бинарни сваки један пут да се користи. То би било глупо, јер то би губили много времена. Тако је већ саставио и претворена у извршну. И сада ће то бити спојени са датотеком на крају. Тако ти је и 1 0 да ће да се споји са својим оне и 0 је на крају. Дакле, сада ћете заиста имати стварни 1 је и 0 је да дефинише како гетстринг, на пример, радови, или како иф, , на пример, ради. А за више информација, ту је кратке компајлери који Нејт даје да требало би да проверите да иде кроз ове кораке. Али - Да. СТУДЕНТСКА: они су увек у о фајлови. када су у облику библиотеке, спреман да се споје, повезана - као они су у бинарном коду? ЈАСОН Хирсцххорн: У реду. Шта - СТУДЕНТСКА: Да ли је то увек случај за библиотеке када их повежете? ЈАСОН Хирсцххорн: Да. Дакле, ту је. Ова фајлови, који ће бити машински код, који ће такође бити тајновито вама. Не морате да бринете о онима. Али генерално, да, они ће бити у. О фајлове спреман да иде. СТУДЕНТСКА: Дакле, када сте брод на библиотека, ти само брод ч. и О.? Ви не испоручи ц или е... ЈАСОН Хирсцххорн: Па - а то је у овом кратком, као и, ако је ова информација чини се да долази мало брзо. Али на кратко компајлера говори о овом, као и. Када брод библиотеку, ако брод . ч, заглавље датотеке, оне функција прототипови, а 1 је и 0 је, то је све што треба да дају. Не морате да дају како функција ради, ц фајл.. Због тачка апстракције, или указују АПИ, тачка у овом СПЛ, Стенфорд портабл библиотека, то је за вас да не бринете о томе како нова ГРецт ради, или како преместите радове, или како додати радове. Све што треба да знате је да додатак је функција да можете користи, а то чини. Тако да заиста не треба да зна како то је написано у Ц потребно је само да Знам, овде су функције, што они учинити, а овде су је 1 и 0 је када заиста желите да их користите. Цоол. Има ли још питања о компајлера или друге теме на табли? СТУДЕНТСКА: Имам питање спровођење рекурзивне функције. Питање око рекурзије. Имао сам осећај да ће доћи до. Па хајде да брзо проћи рецурсион са специфичним пример, факторијел функција. Јер ово је пример да често долази до или се користи за илустрацију рекурзија. Дакле, "4!" се чита као 4. факторијелском. И шта значи 4 факторијел? Шта да радим? Како израчунати 4 факторијел? 4 пута 3 пута 2 пута 1. Дакле, још један начин да се напише 4 факторијел је да пишем ово. 4 пута 3 факторијел. Пошто је 3 факторијел 3 пута 2 пута 1. СО 4 пута 3 је факторијел 4 пута 3 пута 2 пута 1. То је разлог зашто је факторијел велики кандидат за рекурзије, јер је то јасно да постоји нешто што дешава изнова и изнова и изнова на мањи број ствари до дођете до краја. Када стигнете до 1, 1 факторијел је 1. Не можете ићи много даље. 0 факторијел је такође дефинисан као 1. Дакле, када се на 1 или 0, ти си на крају, и можете старт је вратити се. Дакле, ако смо хтели да пишу рекурзивна Функција за израчунавање факторијела, ћемо писати неки Псеудокод за то сада. Пре него што напишете тај Псеудокод - Даћу вам момци пар минута да напишете псеудо код или само мислим о томе - постоје две ствари сваких рекурзивни функција треба. Које су те две ствари? ЈАЦК: То мора да се позове. ЈАСОН Хирсцххорн: Ноа? О, Џек. Само напред. ЈАЦК: То мора да се позове. ЈАСОН Хирсцххорн: Па рекурзивно Функција треба рекурзивни позив, позвати на себи. То је један. А шта је друга ствар? ЈАЦК: база случај. ЈАСОН Хирсцххорн: база случај. База случај је, ту је кад станемо. Дакле, ваша функција добија се зове. Основни случај долази прво. Желите да знате да ли сте на крају. А ако нисте на крају, ви направите рекурзивни позив. А ти иди кроз ову функцију поново, проверите поново своју базу случај. Ако ниси крај, правите још један рекурзивни позив, и тако даље, и тако даље. Зато рекурзивни функција увек треба те основне предмете и оне рекурзивни позиви. Ако немате рекурзивни позив, она не би рекурзивни функција. Ако нисте имали базу случај, ти би заувек отићи и не би било крај. А база случај увек на првом месту, јер увек ће желети да проверите ако си на крају први. Дакле, пре него што урадите неке Псеудокод, зашто зар не узети мало да размислим о како рекурзивни факторијел функција ће бити написан? Такође, колико год да радите, писање она се на листу папира је шта ћеш морати да радим на квизу сутра. Дакле, вероватно добра пракса да се сигурни код пишеш доле на папиру - или можете да урадите то. Знате где су тачка-зарез се. Сећаш се синтаксу. Зато што нисте могли да имају компајлер реците ви направили грешку. Такође, у том смислу, сутра, када сте кодирање проблеме, ако су пожурили за време, или ако сте веома збуњени како да треба да написати посебну ствар у ц, она ће вам бити потребан да напише псеудо-код или писати коментаре у као добро. Зато што постоји делимичан кредит за Много питања о квизу. Дакле, можда се пожурио, или сте може само бити збуњени. Пишући у коментарима или псеудо-кодом су често начина на које можете могу да добију делимичну кредит. Дакле, не остављају нешто празно на квизу. Нема казне за стављајући ствари унутра У ствари, стављајући у псеудо-коду или коментари ће да помогне грејдер схватим да ли заиста знате шта причаш, а можда награду ти неки парцијални кредит за то. Такође, у том смислу, пишу јасно. Ако не можемо стварно шта пишеш, нећемо да те зовем сутра у поноћ на слици шта си написао. Само ћемо да скинем поена. Напишите јасно тако да можемо чути, односно, можемо прочитати шта си написао. И ако се каже две реченице, не напише пасус. Пратите упутства. Напишите јасно. И у тим коментарима напишете или Псеудокод за питања која би могла Награда делимична кредит. У реду, идемо на факторијел. Дакле, имамо функцију факторијел. Ако бих заиста пишем ово у Ц, шта ми је потребно да се стави испред имена функције? Повратни тип, који, у овом случај, ми ћемо му дати инт. А онда унутар заграда, јесте шта се унутар заграда за функција? СТУДЕНТИ: Тип аргумент. ЈАСОН Хирсцххорн: Његови аргументи. Тако ће вероватно факторијел узети аргумент. То ће вероватно узети само један аргумент. И ми ћемо рећи да ћемо се цео број се зове к. А опет, када се пише прототип функција или писање функцију у свом коду пре дефинисања, те написати тип података и име да променљива само за ту функцију. Тако да може да прође неки број у ово функција, то ће се називати к интерно. Ми имамо факторијел функцију. Требају нам две ствари, основни предмет и рекурзивни позив. Шта је основа за случај факторијел? Неко ко га је написао, а ко нема говори још, шта је база случај за факторијел? СТУДЕНТСКА: Ако је н мање од 2, 1 врате. ЈАСОН Хирсцххорн: Ако је н мање од 2, врати 1. Свиђа ми се то, јер је то брине о 0 и 1.. Тако ћемо урадити к <2, врати 1. Ако се прошли 0, ако добијемо прошло 1, ова функција ће одмах врати 1. Ако будемо прошли неки број већи него или једнако 2, идемо у имамо рекурзивни позив. И тако како је да иде на посао? Може неко други који је радио на овом који још није говорио ми дају рекурзивни позив за ову функцију у псеудокоду? Ако смо се прошли у број к и то је већа од 2, што Не желимо да урадимо? Такође смо пример написан на страна која вам може дати наговештај. СТУДЕНТСКА: Позив к пута факторијел од к минус 1? ЈАСОН Хирсцххорн: Управо тако. Идемо да се врате к пута факторијел од минус 1 к. И то, иако сам написао горе, у основи, оно што сте рекли на енглеском, ова функција факторијел ће се поново зове. То ће извршити на минус к 1. То ће се вратити са неким целим бројем, а онда ће помножите ову двојицу заједно, а вредност која ће бити вратио се год звали ово факторијел функција, која би могла бити још један пример ово факторијел функција. Тако да је пример рекурсивних функција, веома једноставан рекурзивни функција. Али ће већина њих бити овако. Ако желите добар рекурзивно изазов за квиз, покушајте кодирање бинарни претрагу рекурзивно. Јер ако јеси бинарну претрагу за Проблем сет три, вероватно јесте итеративно у вхиле петљи. Али такође може бити написан рекурзивно. Ти ћеш морати да напише свој одвојена функција која узима неки различити аргументи командне линије - или не командне линије аргументи, неки различити само редовни аргументи. Али ти би могао писати бинарну претрагу рекурзивно као добро. СТУДЕНТСКА: Па могли сте такође написао, уместо к минус 1, ви могли су, такође, написао Кс минус минус, или сте могли имати написао минус минус к. Можете ли да објасните зашто стварно брзо они ће бити различите ствари, као што је разлика између к минус минус и минус минус к? ЈАСОН Хирсцххорн: Не, ја нисам ићи у то. Али ја ћу разговарати са вама о томе после класа. к минус минус, минус минус к декрементирати к по 1. Али они то раде мало другачије. Али ја не желим да улазим у то. Остала питања у вези рекурзије или ова функција? То није баш ни Псеудокод. То је у основи број у Ц би писати за ово. ОК, било друга питања о темама овде? Да. СТУДЕНТСКА: Имам Брзо џунглу од флоатинг поинт и прецизност. ЈАСОН Хирсцххорн: Флоатинг тачка и прецизност. Може ли неко заиста брзо дај ми Рундовн флоатинг поинт и прецизност? Ви сви морали да урадите за вашу Проблем сет, тако да сте сви упознати са њом. Или можда не сви. Било ко? Дај ми почео место. Плутајући тачка и прецизност. У чему је проблем? Да. Викторија? Ванесса: Ванеса. ЈАСОН Хирсцххорн: Ванеса. Извините. Ванесса: Постоји само ограничен број бројева који се могу приказати јер си на, у нашем случај, 32-битни систем. Тако да некако морају да чине неке бројеве. ЈАСОН Хирсцххорн: Дакле, то је потпуно тачно. Постоји само одређена количина бројева који се може представити. Ако помножите два веома велики број, може потопити износ од простора имате да представљају цео број. Зато понекад користимо дуго дуго уместо инт. То има више простора. То може да држи већи број. Флоатинг поинт прецизност има везе са да, али такође има везе са Чињеница да су децимални бројеви не увек представљао. Извините. Дозволите ми да ово поново горе. Децимални број 1.0 није увек представљени као ти очекивао, 1,000000000. Је понекад представљени као 1,000000001 0,999999999 или. То може бити чак 89 бачен тамо негде. Тако ти децимални бројеви нису представљени баш као што би Очекујем да буду представљени. Дакле, у проблему сет - био је два? - Проблем сет два, где смо се бавили Бројеви у покретном зарезу, када смо хтели им да представља управо оно што смо желели им да представљају, број од пенија, или број центи, ми их помножите са 100.. Ми их заобљена. И онда ми одсећи све иза децималног зареза. То је да се обезбеди да би они заправо једнак тачно оно што смо хтели им бити једнака. Јер кад узмете нешто што је флоат и претворити га у инт, ви одсекли све на десно од децималног зареза. Јер постоји неки флоатинг поинт непрецизности, можда 100.000 представљени као 99,999999999. А ако сте само одсекли све до десно одмах, ти ћеш добили погрешан број. Да. СТУДЕНТСКА: Имао сам питање о ливење. Шта ред то десити у? Ако би урадио флоат, заграде, 1 подељен од 10, да ли је то 1 подељено са 10, онда добити 0,1, затим она у флоат? ЈАСОН Хирсцххорн: Ако урадите флоат 1 подељено са 10 - СТУДЕНТСКИ: Да, и онда је једнако - добро, то би нормално да га једнако у - Да. Желиш да се пловак направити, зар не? ЈАСОН Хирсцххорн: У реду, тако да ћемо користе да би сегуе у откривању одговори на ова питања кроз кодирање. Зато ћете вероватно имати доста ова питања, минуте и добар начин да их реше је кроз кодирање. Дакле, идемо да код ово право сада, а онда ћемо да се вратимо и кодирајте питање сте имали. Дакле, прва линија - Није требало да га написао - шта је Прва ствар коју желимо да урадимо када смо отвори нову датотеку у гедит? СТУДЕНТСКИ: Укључи. ЈАСОН Хирсцххорн: Укључи шта? СТУДЕНТСКА: ЦС50 библиотека. ЈАСОН Хирсцххорн: У реду. Шта још треба да се укључи? Само ћемо да провери шта се дешава кад баци нешто на пловак. Али, оно што нам је потребно да се укључи ако смо ће написати Ц програм? СТУДЕНТСКА: Стандардни И / О. ЈАСОН Хирсцххорн: стдио.х. Ми заправо не треба, за ово Програм, цс50.х, иако је увек корисно да га укључе. Али увек треба стдио.х. СТУДЕНТСКА: Када кодирање у Ц? ЈАСОН Хирсцххорн: Када кодирање у Ц Тако сам га сачувати као овај ц Филе.. Добијам неке лепе истицање синтаксе. Написао сам празнину у главни. Шта значи празнина? СТУДЕНТСКА: не преузима никакву командне линије аргументи. ЈАСОН Хирсцххорн: отпада средства, у овом случај, главни не преузима командне линије аргументи. У другим случајевима, то значи функцију не узима аргументе командне линије. Или функција, ако би требало да пишем празнину маин (), да би рекао главни'С не враћа ништа. Дакле, само празнина не значи ништа. Шта би ја пишем да сам се узети аргументе командне линије? СТУДЕНТСКА: инт ц лук ниска лук против ЈАСОН Хирсцххорн: инт аргц стринг аргв. Да ли је то тачно? СТУДЕНТСКА: То је Чар звезда аргв заграде. ЈАСОН Хирсцххорн: Да би могао да напише ниска аргв заграде или знак звездице аргв заграде, али морате заграде. Јер аргв је низ низова, сећам се. То није само једна жица. Тако ниска аргв је, ту је један низ назива аргв. Стринг аргв заграде се, ево низ стрингова. Дакле, инт аргц ниска аргв конзоле ће бити нешто што сам вероватно писати. Тако сте желели да сачувате у цео број? СТУДЕНТСКИ: Да, цео број. Или у флоат. ЈАСОН Хирсцххорн: У флоат? Као, пловак к једнак 1 подељен 10.. ЈАСОН Хирсцххорн: У реду. Како да одштампате плутају у принтф? Шта? СТУДЕНТСКА:% ф. ЈАСОН Хирсцххорн:% ф. Шта је цео број? Д или ја. Шта је ниска? СТУДЕНТСКИ: с. ЈАСОН Хирсцххорн: с. Како да добијем нову линију? СТУДЕНТСКА: Бацксласх н. ЈАСОН Хирсцххорн: Шта да се врате ако главне стазе исправно? СТУДЕНТСКИ: 0. Да ли треба да пишем ту линију, иако? СТУДЕНТСКИ: Не У реду, нећемо га написати, онда. Може свако да чита? Изгледа мало мали. Могу сви да виде, или треба Ја би се већи? Мислим да за камеру, ми ћемо направити то мало већи, мада. ЈАСОН Хирсцххорн: Ако желим да се окрену ово . Ц фајл у изврсни, што да напишем? СТУДЕНТСКА: Направите тест. ЈАСОН Хирсцххорн: Извините? СТУДЕНТСКА: Направите тест. ЈАСОН Хирсцххорн: Направите тест. Причали смо о ова линија раније. Звека. Шта је звека? Име компајлера. Шта је ово линија? СТУДЕНТСКА: Поставља га за коришћење ГДБ. ЈАСОН Хирсцххорн: Сетови то се за коришћење ГДБ. Ова линија, шта је то? СТУДЕНТСКА: Изворни код. ЈАСОН Хирсцххорн: То је изворна датотека, Ц фајл.. Шта ове две линије радим? Или ове две линије не. СТУДЕНТСКА: Ит имена га тестирати. ЈАСОН Хирсцххорн: Па цртица О каже, Име је нешто другачије. И ту сте га зовете теста. Ако ја нисам имао то у, шта би то име ово? СТУДЕНТСКИ: а.оут. ЈАСОН Хирсцххорн: а.оут. Шта ово ради? СТУДЕНТСКА: Линкови за математику библиотеку. ЈАСОН Хирсцххорн: Он повезује у библиотеци математике. Нисмо укључују математички библиотеку, али јер да је тако чест, они написан марка да увек укључују математика библиотека. И исто тако, ово укључује ЦС50 библиотека. У реду, тако да ако смо листу, сада имамо извршна зове теста. Да би га изврши, пишем тест. Видим да је мој плутајући тачку, како се очекује, износи 0.. Да ли то - па - СТУДЕНТСКА: Онда, ако сте ставили сада плутају, као да га баци као флоат - ЈАСОН Хирсцххорн: Цаст 1 до пловка? СТУДЕНТСКИ: Не, баци пуну ствар - Да. Ако си то урадио, зар да то чине 0.1? ЈАСОН Хирсцххорн: У реду, тако да заиста брзо, 1 подељено са 10, то су целих бројева се дели. Дакле, када сте поделили бројеве, они су 0, и штедите да 0 у флоат, јер коса црта је само цео број подела. Дакле, сада смо окрећу нешто у флоат. Хајде да видимо шта се дешава. Ми ћемо направити тест. Тако сада видимо да то није била коса црта цео број подела, то је плутајући тачка подела. Јер један од његових аргумената била цаст на пловак. Дакле, сада је говорио, третирају ово подела као да имамо посла са плутајући тачке, не са целим бројевима. И тако смо добили одговор очекујемо. Хајде да видимо шта се дешава - упс. Да сам хтео да одштампате више децималу спотова, како сам могао да урадим? СТУДЕНТСКА: тачка тачка Ф, или чак децимале колико желите. ЈАСОН Хирсцххорн: Па ја штампање 10 децималне тачке. И ми сада видимо ми смо све неке чудне ствари. И да се враћа на ваше питање о покретним зарезом непрецизност. Има чудне ствари чувају у овде. У реду, да ли то одговор на твоје питање? Шта си желиш да брзо код? СТУДЕНТСКА: Само сам хтео да видим да ли је или не, ако си ослободио неке показивач, да ли да и даље поентер је ускладиштен у то адреса оно што је била указујући на раније. ЈАСОН Хирсцххорн: У реду, па хајде да урадимо то. ЦХАР звезда ПТР, ово ствара променљиву зове ПТР типа цхар звезде. Како да напишем маллоц? Алден? Алден: Само маллоц. Али онда то мора бити величине, и у овом случају, претпостављам да бих се указује на цхар. Дакле, то би било знак. ЈАСОН Хирсцххорн: У реду, тако да више генерички, Инсиде - хајде да измените. Унутра маллоц, хоћеш број бајтова на гомиле. Генерално, оно што смо видели да смо радимо је да ћемо маллоц секвенце, на пример, или низови целих бројева. Дакле, ако желимо 10 целих бројева, или 10 знакова, 10 ће нам дати 10. А онда величина карактера ће дати нам да величина карактера, који у овај случај је 1 бајт. Добијамо 10 бајтова. Ако смо били да пишете величину инт, да би нам 40 бајтова. Тако више генерички, унутар маллоц је број бајтова желите. У овом случају, ми смо све 1 бајт. Која изгледа као уврнути коришћења од маллоц, али за наше сврхе има смисла. Дакле, то је то. Идемо на позив слободан. Ми добили ослободити од њега и ми смо поново користимо птр. А шта си хтео да проверим? СТУДЕНТСКА: Само сам хтео да проверим да ли или није било ништа у њему. ЈАСОН Хирсцххорн: Па да ли је указао на нешто? СТУДЕНТСКИ: Да, тачно, без обзира да ли ипак је имао меморијску адресу. ЈАСОН Хирсцххорн: Дакле, желите да провери вредност ПТР? СТУДЕНТСКИ: Да, тачно. ЈАСОН Хирсцххорн: Шта ја овде пишем ако желим да проверим вредност поента - шта је, Јордан рекао, вредност? Или шта се чува унутар ПТР? СТУДЕНТСКА: Меморијска адреса. ЈАСОН Хирсцххорн: Меморијска адреса. Дакле, ако ја напишем само ово, то ће дај ми вредност ПТР. И како ја одштампати Меморијска адреса? Шта је формат стринг за меморијску адресу? СТУДЕНТСКА:% с. ЈАСОН Хирсцххорн:% с. % С је ниска. % П за показивач. Да ли је то тачно? То је у реду. Дакле, ПТР једнако - још увек има нешто у њој. То је вероватно више занимљиво питање. Шта да радим линија? СТУДЕНТСКА: СЕГ грешке. ЈАСОН Хирсцххорн: Шта? СТУДЕНТСКА: Мислим да је СЕГ грешке. ЈАСОН Хирсцххорн: Хм? СТУДЕНТСКА: Мислим да ће СЕГ грешку. ЈАСОН Хирсцххорн: Па ово линија од код, стар ПТР, шта не значи звезда? СТУДЕНТСКА: Садржај. ЈАСОН Хирсцххорн: Да. Идите да се садржај. Дакле, ово ће да иде у меморији обрати тамо и дај ми то. Користио сам% ц овде, јер тамо су ликови тамо чувају. Тако ћемо да идемо на ту адресу и ми Управо сам видео - или вероватно ће бити мало другачије ово Време је да покренете програм. Али, ми ћемо ићи на ту адресу који знамо још увек постоји и видети шта је тамо. Дакле, то није СЕГ грешку. То једноставно није нам ништа. Можда су заправо нам је дао нешто, што једноставно не могу да видим. И да се враћа на ове идеје - и ми не идемо да се превише у то, јер је то изван Обим овог курса. Али смо причали овде, ако ми отишао ван граница низа од 1, нисмо могли добити у невољи. Понекад, када сте само крену са 1, радите нешто погрешно, и ви могао добити у невољи. Али не увек у невољи. Зависи колико лоша ствар ви Не, ти ћеш добити у невољи. Што не значи, бити аљкав са кодом. Али, то је да се каже, програм неће увек отказ, чак и ако се негде Ви не би требало да иде. Добар пример за то је, много људи у њиховом проблему сет 3, који је 15, није проверио границе одбора. Дакле, погледао лево, погледао на право, погледао на врху, погледао на дно. Али нисте проверите да ли врх је заправо ће бити на табли. А много људи који су то радили и окренуо да у, њихов програм је радио савршено, јер где је табла била чувају у меморији, ако је један изнад ње или проверити да меморија адреса, није било ништа посебно страшно о томе, па ваш програм није био ће викати на тебе. Али ми и даље би скинуо поене ако нисте проверили да, јер вам радили нешто што нису били требало да уради, а ти би могао имати стечен у невољи. Шансе су, међутим, вероватно није. Дакле, то је да се покаже да, да, и даље можемо ићи на њега. И ми не добијамо у Проблем у овом случају. Ако смо покушали да урадимо читати нект 100 карактера, ми бисмо вероватно упасти у невољу. И ви можете кодирати читање следеће 100 карактера ако желите тако што неки врста за петље. Да. СТУДЕНТСКА: Пошто смо били додељени да простор стварна вредност, ми не би заправо бити у стању да види ништа. Да ли треба да га пробати са подешавањем да једнако воле ц или несто? ЈАСОН Хирсцххорн: Одлично питање. Како да подесим ту вредност - шта линија кода да напишем на линији седам да урадите оно што сте рекли? СТУДЕНТСКА: Звезда ПТР једнако сингл цитат ц енд апостроф. ЈАСОН Хирсцххорн: Дакле, то је стављање карактер, Ц, на тој локацији, јер опет, да звезда значи ићи тамо. И када се користи на левој страни Оператор додељивања, која је једнака потпише, нећемо добити тај Вредност толико као што је то вредност. Сада да видимо шта се дешава. Ми смо ставили нешто тамо и то је био тамо. Звали смо слободни. Неке ствари се вероватно десило на гомили. Дакле, то није више тамо. Али опет, ми не добија у невољи за одлазак тамо. Радим ово у коду за илустрацију да доста њих питања која имате, они су стварно занимљиво одговара много времена. И они су стварно добри питања. И ви можете да их схватим на сопствени ако, на пример, нисмо у одељку. Да. СТУДЕНТСКА: Зато што не шаљете поинтер било где, да ли треба да користити маллоц? ЈАСОН Хирсцххорн: Дакле, ово сеже на својој почетној питање. [? ?] Да ли је то само локална променљива? Маллоц овде није тако убедљив. Употреба маллоц овде није да убедљив јер је то само локална променљива. СТУДЕНТСКА: Па могао си урадити Чар звезда ПТР једнако здраво? ЈАСОН Хирсцххорн: О. Зато ћемо се сада вратим на својој почетној питање. Мислим да нису били задовољни са мојим одговором. ОК? Овако? СТУДЕНТСКИ: Да. Чекај. ЈАСОН Хирсцххорн: А где Да ли желите да одштампате? Тако ћемо одштампати низ тако? СТУДЕНТСКИ: Занимљиво. ЈАСОН Хирсцххорн: Дакле, ово пише ово Аргумент је тип карактера. Дакле, ово би требало да буде лик. СТУДЕНТСКА: Само заузима прву. ЈАСОН Хирсцххорн: Па ово је оно што сам раније рекао. Као што сам рекао, то није складиштење стринг променљиве унутар показивача. То је чување - СТУДЕНТСКА: Прва вредност од ниске. ЈАСОН Хирсцххорн: адреса Први вредност низа. Ако смо били да одштампате ово, ми смо добијање вредности унутар показивача. И видећемо да је, заиста, Меморијска адреса. Да ли то смисла? Извините. Чекај, да ли то одговорим на ваше питање, иако? СТУДЕНТСКИ: Да. ЈАСОН Хирсцххорн: Ова линија кода је стварање стринг и онда још један променљива показивач који се показује на тај стринг, то низа. Да. СТУДЕНТСКА: Дакле, ако смо се једно сећање обрати даље, да ли бисмо добили х? Да ли је била ускладиштена као стринг? ЈАСОН Хирсцххорн: Као, ми смо урадили - тако да је ово вредно да радим. Ово је тачка аритметика, које ви раније видели и треба да буде релативно задовољни. Ово је слично писање - ако смо били да напише ову линију кода, видели смо низа нотацију пре. Ово би требало да нам дају други вредност у овом низу, х. Ако смо то урадили, то би такође требало да дају нас други вредност у том низу. Зато што се не иде у меморију адреса првог ствар, али меморија адресу ствари један преко. А онда су дереференцес звезда оператор да показивач. И опет, хајде да видимо. Добијамо х поново. СТУДЕНТСКА: Шта тачно дереференце значи? ЈАСОН Хирсцххорн: дереференце је фенси реч за прелазак на. Идите на то и добити оно што је тамо је да дереференце показивачем. То је само фенси реч за то. СТУДЕНТСКА: Ако бисмо хтели да печати цео низ, могли смо уради амперсанд показивач? ЈАСОН Хирсцххорн: У реду, ми смо ће паузирати овде. Ми ћемо завршити овде. Амперсанд вам даје адресу локација, тако да када радите на амперсанд променљива, она вам даје адресу где се чува та променљива. Амперсанд показивач ће вас дати адреса ПТР ПТР где је у меморији. Нећемо да идемо даље са овом примеру. Можете да схватите ово ствари на своје. Али опет, то може чак бити на рубу мало даље од онога што вам је потребно да знате за обим овог средњи рок - или овај квиз, прилично. Извините. Ми ћемо да идемо даље, јер ја бих волим да радим једну кодирање проблем пре времена је горе. А ми ћемо да се код што мислим је највише убедљив ових примери, атои. Дакле, ово је питање на квиз пре две године. И ја га имам на броду овде. Људи су се питали на квизу - они су добили мало више тескт у питање, али ја елиминисан текст јер је то било непотребно за наше потребе сада. То је била само нека позадина на шта атои урадио. Али ви сви знате и да су веома упознати са атои. Предлажем вам да ово кодирати на папиру. Такође предлажем да користите стратегију да смо прешли много у нашој секцији. Прво, проверите да ли сте разумели шта атои ради. Нацртајте слику или дође до неке ментална слика о томе у глави. Даље, написати Псеудокод за ово. На квизу, ако све што добијете је Псеудокод, барем ви стави нешто доле. А онда карта која Псеудокод на Ц. Ако имате чек у вашем Псеудокод, попут проверите да ли нешто је 1, да мапе на ако стање и тако даље. И на крају, код програма у Ц Дакле, да се вратимо на атои и пет минута да се код овог на листу папир, који је вероватно око количина времена које би узети у квиз на коду атои. Пет до 15 минута, пет до 12, на пет 10 минута, је о износу од време да ћеш потрошити на ово питање у квизу. Дакле, узмите пет минута сада, молим вас. А ако имате било каквих питања, подићи руку и ја ћу доћи око. [сиде РАЗГОВОРИ] ЈАСОН Хирсцххорн: У реду, тако који је пет минута. То је вероватно о количини пут када би потрошити на то на квизу, можда низак крај тог времена. Ми ћемо подсетимо на мало. Почнимо кодирање ово. А ако не добијемо све кроз, одговори на ово и ово квиз питање су на располагању, опет, Јесен 2011 је када је ово питање појавио на квизу. И вредело је осам поена на квизу тада. Осам бодова је на високом крају износ бодова нешто вреди. Већина питања су у опсегу од једне до шест поена. Дакле, ово је више изазован питање, сигурно. Може ли неко да почнем? Генерално, шта ћемо да желите да урадите са овим функционишу атои, логично? Шта желимо да урадимо? Тако ћемо писати неки Псеудокод. СТУДЕНТСКА: Конвертовање знакова у целим бројевима. ЈАСОН Хирсцххорн: Конвертовање знакова у целим бројевима. У реду. Дакле, колико карактера смо ће морати да прође кроз? СТУДЕНТСКА: Сви они. СТУДЕНТСКА: Сви ликови у низу. ЈАСОН Хирсцххорн: Све знакова у стрингу. Дакле, ако смо хтели да идемо кроз сваки карактер у низу, што је ствар у Ц видели смо да је дозвољено нам да идемо кроз сваки карактер у низу? СТУДЕНТИ: за петљу. ЈАСОН Хирсцххорн: за петљу. Дакле, идемо на петљи кроз сваки лик у с. Онда шта ћемо да желите да урадите када смо добили одређени карактер? Рецимо да ћемо се донела 90. Ми смо добили 9. То је карактер. Шта желимо да урадимо са који лик 9? СТУДЕНТСКА: Одузмите га од карактера 0? СТУДЕНТСКА: Додајте 0? ЈАСОН Хирсцххорн: Одузмите она од карактера 0? СТУДЕНТСКИ: Да. ЈАСОН Хирсцххорн: Зашто желите да урадите? СТУДЕНТСКА: [ИНАУДИБЛЕ] вредност. Његова вредност инт. ЈАСОН Хирсцххорн: У реду, тако да смо се карактер 9, одузмите га од карактер 0 да се Стварни цео број 9. Слатко. А како ви знате да је лик 9 минус 0 лик је 9? Шта сте графикон погледате? СТУДЕНТСКА: Постоји логично је девет места између 9 и 0. Или можете да погледате на АСЦИИ табели. ЈАСОН Хирсцххорн: АСЦИИ табела. Али да, у праву сте, као добро. Тако одузмемо 0. Тако да сада имамо цео број 9. А шта желимо да урадимо са тим? Ако имамо 90, то је први цео број смо, шта желимо да урадимо? СТУДЕНТСКА: Ја бих ставио у привременом цео низ, онда урадите математику на њега касније да га направи у крају. ЈАСОН Хирсцххорн: У реду. СТУДЕНТСКА: Можете почети крајем низ, а затим кренути напред тако да сваки пут када иде напред, ти га помножити са 10.. ЈАСОН Хирсцххорн: У реду. То звучи као прилично убедљив идеја. Можемо почети на крају нашег низа, и можемо да користимо стрленг. Можемо користити стрленг овде. Добићемо дужину наше ниске. Почињемо крајем. И + прву, ми само узети да цео број, а можда смо створити као Нови цео променљива горе врх где смо складиштење све. Тако смо петља кроз сваку цхар у с из назад на фронт, одузмемо 0, и онда ћемо га узети, а у зависности од где је, ми га помножити од снаге 10. Јер први, шта радимо помножите ригхтмост карактер? СТУДЕНТСКА: 10 до 0. ЈАСОН Хирсцххорн: 10 до 0. Шта множимо другом десни карактер по? СТУДЕНТСКА: [ИНАУДИБЛЕ]. ЈАСОН Хирсцххорн: Шта? СТУДЕНТ: 10 у 1. ЈАСОН Хирсцххорн: 10 у 1. Трећи-десни карактер? СТУДЕНТ: 10 на 2. ЈАСОН Хирсцххорн: 10 на 2. СТУДЕНТСКИ: Извините, ја не разумем шта радимо овде. ЈАСОН Хирсцххорн: У реду, хајде да се вратимо, онда. Тако ћемо добити прошао у низу. Зато пишемо атои. Тако смо се прошли у низу. Реци ми цемо се прошли у низу 90. Прва ствар коју ћемо урадити је подесити нови цео променљива да смо само ће створити као нашег новог цео број. То је оно што ћемо да се врати на крају. Ми треба да идемо кроз сваки карактер у ниска јер смо утврдили да ми је потребно да додирнете сваки и затим га додати у наш нови цео број. Али не можемо само додати као број. Не можемо само узети 9 и додај 9 нашем цео број. То зависи од тога шта место је у низу. Ми ћемо морати да се умножавају то од снаге 10. Јер то је како база 10 радова. Тако ћемо добити стварни карактер, или стварни цео број број, одузимањем карактер 0 од 9 карактера као што смо урадили са одузимањем знакова капитала из А год лик смо имали у једној од ти проблеми. Тако да заправо ћете добити број од 0 до 9 сачуван као реалан број, а ми ћемо помножите га са снагом од 10, у зависности о где смо у низу. А онда ћемо да га додате у нашу нову целобројну променљиву. Дакле, шта би то изгледати би се - ми ћемо извући овде. Ако смо се прошли у низу 90 - СТУДЕНТСКА: [ИНАУДИБЛЕ]. ЈАСОН Хирсцххорн: Али атои узима стринг. Тако ћемо ићи кроз газдинство. Ми ћемо се прошли у 90. Ми идемо са леђа на фронт. Ми узимамо 0. СТУДЕНТСКА: Жао ми је. Можда је ово глупо. Ако смо прошли узимајући у низу, зашто је 90 шта смо добијање донет? Јер 90 је цео број. ЈАСОН Хирсцххорн: Због атои траје ниска и претвара га у цео број заступање тог низа. Али стринг 90 није цео број 90 или број 90. Стринг 90 је низ од две или три карактера, радије, 9 карактер, карактер 0, и косих 0 карактер. И пишемо атои јер, за пример, када се узме команду линија аргумент, а то је сачуван у аргв, то је сачуван као стринг. Али ако желите да га третирају као број, морате да га претворите у стварна цео број. Што смо урадили један од наших проблема сетова. Што смо радили у великом броју наших проблема сетова. Свако је узео цео број као аргумент командне линије. Зато је наша функција атои узима стринг. Дакле, опет, у нашем примеру овде, ми смо одржаће последњи. Ми ћемо одузети карактер 0 од ње, јер су ликови 0 одузима од карактера 0 даје стварни број 0, према АСЦИИ математика да радимо. Јер ликови су представљени као другачије него њихов стварни - карактера, на пример, мала је 97. То није - Оопс! То није све што бисте очекивали да буде, 0, на пример. Дакле, морате да одузмете карактер да се 0. Тако ћемо да урадимо то овде да се стварни број. А онда ћемо да га помножити са снага од 10 зависности од тога где је у низу, а онда се то и додајте га у нашу носиоца место променљива тако да можемо доћи до наш финални нови цео број. Да ли то има смисла за све? Дакле, ми не идемо да се код ове сада, јер смо добијање на кратко време. Извињавам се због тајминга који. Али то је оно што, надамо се, да ли би бити у стању да уради на квизу - на најмању руку, добити ову Псеудокод написан напоље. А онда, ако смо били да напише Псеудокод, заправо, ми смо могли да урадимо ово прилично брзо. Свака линија коментара ми смо писали овде преводи као о једна линија Ц кода. Објављујући нову променљиву, писање петља, неки одузимање, неки множење, а неки задатак. Вероватно би такође желе да написати повратну линију. Ми такође желети да стави неки чекови овде. Да. СТУДЕНТСКА: Па можемо третирати а као стварне ниске? Јер знам да је то само адреса. Као, како би сте добили дужину низ се преноси кроз? ЈАСОН Хирсцххорн: Па како је дужина стринга? Стрлен. СТУДЕНТСКИ: стрлен, да. Али можете ли ставити с као Аргумент за то? ЈАСОН Хирсцххорн: Па стрлен узима Чар звезду. И следи да цхар звезду, и то одржава рачунајући све док не добије на бацксласх 0. стрлен је заправо један од других програма смо ишли у коду. То је још један добар један на коду. То је један мало лакше, јер ако ћеш мислити о томе концептуално - Управо сам то рекао наглас - стрлен следи показивач и иде и рачунајући и праћење до дођете обрнуту косу црту 0. СТУДЕНТСКИ: У реду, то сам. ЈАСОН Хирсцххорн: Па најбоље срећа на квизу 0 сутра. Ако имате било каквих питања, ја ћу бити напољу после овога. Слободно ми е-маил. Допре до сопственог ТФ ако сте не у мојој секцији, или добити мој емаил ако то желите. Ако желите да одлепим и пошаљите ми е-маил, е-маил Фреакоут, ја ћу пошаљи те назад, као, насмејано лице, или, као, шала или нешто. Дакле, слободно то урадите као добро. Срећно опет, и ја ћу видимо се следеће недеље све.