Tip:
Highlight text to annotate it
X
>> Выступоўца 1: Прывітанне ўсім.
Мы збіраемся, каб пачаць.
Я думаю, што людзі ўсё яшчэ ідуць каб фільтраваць цалі
Але ў мэтах эканоміі часу, таму мы можам атрымаць вы, хлопцы адсюль на час,
мы збіраемся пачаць.
Так што сардэчна запрашаем да CS50 Віктарына 0 водгукаў.
Для тых з вас, хто не зразумеў, тым не менш, у вас ёсць пытанне ў сераду.
Ву-ху.
>> Калі вы яшчэ не пачалі вывучаць яшчэ і не зразумеў, што гэта існуе яшчэ,
апошнія віктарыны і ўся інфармацыя аб ваш тэст знаходзяцца на cs50.net/quizzes.
Там-то даволі добры матэрыял там, апошнія віктарыны ад апошніх 10
гадоў, а таксама інфармацыю пра гэта віктарыны і тэмах
, Якія будуць пакрытыя.
Так што давайце пачнем.
>> Дык вы, хлопцы, магчыма, памятаеце, першая дзень класа Давіда былі тыя лямпы на.
Так па сутнасці, усё, што адбываецца пад капотам кампутара з'яўляецца
зроблена ў двайковай сістэме.
Двайковай азначае, што гэта гучыць як, 0 і 1 ст.
Ён мае два значэння, што могуць быць прадстаўлены.
>> Гэтак жа, як у першы дзень раздзел калі Дэвід уключыў святло
лямпа для прадстаўлення на, або 1, наш кампутар разумее двайковы, як 0 і
1 х, уключаны або выключаны.
Асновы Binary.
Кожнае месца прадстаўлена ў базе два.
Такім чынам, вы дадайце 2 да 0 да 1 да 2 на ўсім шляху ўверх.
>> Для разліку, што ваш бінарны з'яўляецца дзесятковай, вы проста вынікаеце гэта раўнанне
увядзіце рэч.
Калі ў вас ёсць 1 у любым з гэтых месцаў, Вы памножце яго на ўсе
засноўваць гэта ў, дадаць яго, і Вы атрымліваеце дзесятковай.
Так што гэта, як вы лічыце да 5 у двайковым выглядзе.
Гэтак жа, як тое, што мы рабілі на апошні слайд, гэта, як вы б
ўяўляюць з 1 па 5.
>> Сапраўды гэтак жа, як і вы можаце дадаваць і адняць у дзесятковай або падставай 10, або
сапраўды любы падстава, на можна дадаць і адняць у двайковай сістэме.
Дакладна, што вы чакалі б, калі вы дадаць двух да, калі ён роўны больш
чым 1, вы носіце 1, зрабіць яго 0, і зрабіць тым дадаткам, што шлях, як раз
як вы чакалі б з рэгулярным дзесятковай або любы іншы базы.
Крута.
>> Так як я ўжо казаў, усё, што працягваецца пад капотам нашага кампутара
гэта робіцца ў 0 і 1-х, або двайковы.
Так як жа мы выказваем, напрыклад, літар або лічбаў або знакаў?
І адказ на гэтае пытанне ASCII.
>> ASCII з'яўляецца адлюстраваннем паміж знакамі што мы звычайна бачым у
Англійская мова, як х, B, Сі, падкрэсліваюць, працяжнік і
нешта ў гэтым родзе.
І ён адлюстроўвае, што ў значэнне ASCII.
Значэнне ASCII гэта проста лік, што можна зразумець вашым кампутарам.
І гэтак жа, як вы можаце зрабіць дадатак і адніманне з лікамі, вы можаце зрабіць
іх са значэннямі ASCII.
>> Такім чынам, у гэтым прыкладзе, што гэта будзе раздрукаваць?
Так, так што проста прастору У прасторы З прастору Д. Дзе мая мыш ісці?
Звярніце ўвагу, вы можаце вызначыць Int ў 65.
І пры друку, што з дапамогай адсоткаў C, гэта будзе інтэрпрэтаваць, што, як
характар і раздрукуе А.
>> Акрамя таго, вы можаце абвясціць гэта як знак.
І калі вы раздрукаваць яго з дапамогай адсоткаў З, ён будзе інтэрпрэтаваць, што, як
адсоткаў Д. І гэтак жа, як вы можаце дадаць лік, вы можаце дадаць сімвалы
Значэнні ASCII, у дадзеным выпадку.
>> Так маленькі паказальнік для ўсіх.
5, у выглядзе радка, ня фактычна раўняцца 5.
Так як мы можам пераўтварыць Радок 5 да цэлага 5?
Ёсць ідэі?
Так.
>> Так што, калі ў нас ёсць 5 у выглядзе радка, мы можам адняць 0.
І гэта дасць нам 5.
І сапраўды гэтак жа, калі ў нас ёсць 5 як цэлы лік, дадаць, што ў радок 0.
І гэта дае нам радок 5.
Крута.
>> Цяпер успомніце да лекцыі той, дзе мы казалі аб алгарытмах.
Так як жа мы на самай справе хочам кампутар каб рабіць цікавыя рэчы?
Ведаеш, проста складанне і адніманне нумары і друку рэчы не з'яўляецца
што цікава.
Як правіла, мы хочам, каб наш кампутар да выконваць нейкую алгарытму.
Нешта крыху больш складана чым проста просты арыфметыкі.
>> Алгарытм проста крок за крокам набор інструкцый па тым, як выканаць
пэўная задача -
сапраўды гэтак жа як рэцэпт.
Магчыма, вы памятаеце першы дзень клас, дзе Давід нам разлічваць нумар
людзей і колькі людзей былі ў пакоі.
Вы маглі б быць выкарыстаны для падліку адзін за адным.
1, 2, 3, 4.
У гэтым выпадку лінейны алгарытм раз.
>> Але Давід увёў алгарытм Вы для падліку людзей у нумары
дзе ўсе ўстаюць, вы сказалі, вас Лік іншай асобе, дадаць, што
лік, і адзін чалавек садзіцца.
І вы паўтарыць.
Гэта адзін тып алгарытму.
Мы можам прааналізаваць, наколькі эфектыўна Алгарытм заснаваны на гэта падчас выканання.
Але мы пагаворым крыху пра гэта крыху пазней.
>> Такім чынам, усе алгарытмы могуць таксама запісаць у псевдокоде.
Псевдокод проста Англійская як сінтаксіс, які выкарыстоўваецца для прадстаўлення
мова праграмавання.
Напрыклад, калі мы хацелі спытаць карыстальніка адгадаць мой любімы нумар, мы
псевдокод можа мець у якасці такіх.
>> Атрымаць карыстальнікі думаю.
Калі здагадка дакладная, сказаць ім, яны маюць рацыю, інакш сказаць ім
яны не правільна.
І псевдокод гэта спосаб лёгка прадстаўляючы ідэю або алгарытм.
Так што цяпер мы маглі б на самай справе пісаць гэта на мове, што кампутар
можа зразумець.
Такім чынам, мы маглі б напісаць наш псевдокод і інтэрпрэтаваць, што ў зыходны код.
>> Да гэтага часу, зыходны код павінен прытрымлівацца ў пэўнай сінтаксісам
мова праграмавання.
І да гэтага часу, у CS50, мы выкарыстоўвалі ў асноўным у.
Так што гэта можа быць зыходны код у.
Пазней у ходзе, вы ноччу прыходзяць у кантакт з іншымі праграмавання
Мовы, як PHP.
Ці, калі вы нават узяць іншага класа, вы можа зрабіць Java, Python, ці нават OCML.
Але ў нашай мове З праграма, гэта як мы маглі б напісаць зыходны код для
алгарытм псевдокод, што Я толькі што апісаў раней.
>> Так як жа ваш кампутар на самай справе зразумець, што?
Як я ўжо казаў, гэта толькі сапраўды разумее нулі і адзінкі.
Так, як гэта атрымаць ад крыніцы Код да таго, што можа быць
зразумеў?
Ну, у нас ёсць што-то называецца кампілятар.
>> Калі вы памятаеце яшчэ ў большую частку свайго psets, вы былі нейкія праграмы
напісана ў дот C File.
А потым вы павінны ўвесці марку.
Так што ж рабіць робіш?
>> Вы можаце ўвесці марку для кампіляцыі Праграма таму, што нехта -
той, хто напісаў свой р набор; верагодна, Дэвід -
стварыў файл макіяж.
І гэта кажа зрабіць, каб ведаць для запуску кампілятар, называецца звон, што воля
затым скампіляваць зыходны код для аб'екта Код, які нулі і адзінкі
што ваш кампутар разумее.
Але крыху пазней, мы пойдзем больш падрабязна аб кампілятараў.
>> Так ўспомніць PSET 0, дзе - так, ў вас ёсць пытанне?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> СПІКЕР 1: Так.
Я думаю, што яны на самой справе павінны быць у рэжыме онлайн.
Так.
>> АЎДЫТОРЫЯ: Гэта як [неразборліва]?
>> Выступоўца 1: Гэта не так.
Знаходзяцца на cs50.net/quizzes.
>> АЎДЫТОРЫЯ: Slash віктарыны, слэш 2013, слэш 0, і проста націсніце праз
віктарыны 2013 і віктарыны 0, перагледзець раздзел слайдаў.
>> Выступоўца 1: Так, так што калі вы, хлопцы, жадаеце пацягніце яго ўверх і глядзець на яго на вашым
уласны кампутар, гэта таксама добра.
Сказаць, што зноў.
>> АЎДЫТОРЫЯ: [неразборліва].
>> Выступоўца 1: Так, [неразборліва] з'яўляецца фіктыўная пераменная.
О, так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Выступоўца 1: Не, забастоўкі ня на экзамене.
На жаль, яе пытанне было, быў ўдары па іспыту.
І гэта не так.
Так PSET 0, вы, хлопцы, павінны мець усе рэалізаваны што-небудзь праз драпіну.
І мы даведаліся асновы праграмавання будаўнічыя блокі, выкарыстоўваючы драпіны.
>> Такім чынам, давайце зірнем на некаторыя з гэтых будаўнічых блокаў
, Якія складаюць праграму.
Па-першае, гэта лагічны выраз.
Лагічныя выразы з'яўляюцца тыя, і 0-х ці ўсё, што мае
два магчымых значэння.
У гэтым выпадку, сапраўдным або ілжывых, або выключыць, і так ці не.
Прыклад просты, вельмі просты, праграма, якая выкарыстоўвае лагічны
выраз тут.
>> Таму для таго, для лагічных выразаў быць карысна, у нас ёсць лагічныя аператары.
Гэтыя аператары, якія можна выкарыстоўваць параўнаць пэўныя значэння.
Таму ў нас ёсць і ці ня роўнае, менш або роўна, або больш, чым
роўныя, і менш, чым або больш.
Але гэтыя аператары не вельмі карысна калі мы не зможам аб'яднаць іх у
ўмовы.
>> Дык вы, хлопцы, памятаеце з нуля і з вашага р ўсталёўвае, што мы
былі ўмовы.
Яны, па сутнасці, як відэльцаў ў логіка вашай праграмы, што
выконвае ў залежнасці ад таго ўмова.
Так адным з умоў, якія мы мелі выкарыстоўваць шмат разоў у гэтым курсе з'яўляецца
калі, яшчэ, умовы, калі, і ў іншым месцы.
>> Вось прыклад таго, як Вы маглі б выкарыстоўваць гэта.
Хто-небудзь ведае розніцу паміж толькі з дапамогай калі заявы ўсе
аж вершах, калі, яшчэ, калі і яшчэ разам узятыя?
Да?
>> АЎДЫТОРЫЯ: [неразборліва].
>> СПІКЕР 1: Цалкам дакладна.
Так што, калі ў мяне было, калі ўсё, аж гэта чынам, нават калі гэта ўмова верне
праўда, ён усё роўна будзе працягваць тэставання наступныя два.
Прымаючы пад увагу, з яшчэ-калі, яшчэ заяву, калі той, вяртае ісціну,
астатнія не правяраў.
Любыя пытанні аб тым, што?
Крута.
>> Такім чынам, вы карыстаецеся, калі-інакш з ELSE заяву, калі вы ведаеце, што гэта можа толькі
быць адным з гэтых выпадкаў.
Такім чынам, мы ведаем, калі х менш 0, гэта дакладна не будзе
большае за 0.
>> Далей, іншы будаўнічы блок што мы даведаліся з'яўляюцца завесы.
У нас ёсць тры тыпу цыклаў.
Для завес, а завесы, і зрабіць у той час як завесы.
І наогул, калі вы садзіцеся ў нешта напісаць, вы павінны вырашыць,
які з трох вы хочаце выкарыстаць.
Так як жа нам вырашыць, які?
>> Мы наогул выкарыстоўваем для цыклу, калі мы ведаем, колькі разоў мы хочам перабраць
праз што-небудзь ці колькі разоў мы хочам, каб выканаць задачу.
Мы выкарыстоўваем у той час як завесы, калі нам патрэбныя стан, каб быць праўдай, каб працягваць працаваць.
І мы выкарыстоўваем зрабіць у той час як вельмі падобны на у той час як, але мы хочам, каб наш код працаваць на
бы ў адным тайме.
>> Так што ў той час, усё, што ў волю заўсёды выконваюцца хоць бы адзін раз.
Прымаючы пад увагу, з час, гэта не могуць працаваць наогул, калі
ўмова не выконваецца.
Ёсць пытанні з гэтым?
>> Так структура цыклу.
Вы, хлопцы, усе бачылі гэта.
Вы ініцыялізаваць яго.
У вас ёсць нейкія ўмовы.
Так, напрыклад, мы маглі б ініцыялізаваць як для г роўная 0.
я менш за 10.
І я + +.
Вельмі просты, што мы зрабілі.
>> Для нейкі час цыклу, так жа, у вас ёсць каб мець нейкі ініцыялізацыі,
нейкая стане, і нейкая абнаўлення.
Такім чынам, мы можам рэалізаваць нашу цыкл таксама як час цыкла з дапамогай гэтага.
І сапраўды гэтак жа з спраў у той час як цыкл, мы маглі б мець некаторую ініцыялізацыю,
выканаць нешта, абнаўляць яго, і Затым праверце стан.
>> Так што цяпер функцыі.
Мы пакласці ўсе разам.
Мы маглі б напісаць некаторыя выгляд функцыі.
Агульныя функцыі, якія вы, магчыма, ўжо бачылі з'яўляецца асноўным.
Галоўная функцыя.
Ён мае які вяртаецца тып, унутр.
Ён мае імя функцыі, асноўнай.
І яна мае аргументы, ARGC і ARGV.
Так галоўны гэта проста функцыя.
>> Іншыя функцыі, якія вы, магчыма, выкарыстоўвалі, Е - Е з'яўляецца функцыяй -
GetInt, ToUpper.
Але гэта, аказваецца, быў рэалізуецца для нас
нейкая бібліятэкі.
Калі вы, хлопцы памятаюць уключаючы гэтая бібліятэка CS50.h або
стандартная бібліятэка ўводу / высновы.
Так, пытанне?
>> Залы: асноўны проста ўласціва з?
Ці ёсць гэта толькі часткова [неразборліва]?
>> Выступоўца 1: Пытанне ў тым, калі асноўны ўласцівая ст.
І так, усе функцыі значыць асноўную функцыю.
Гэта свайго роду неабходныя для кампутара ведаць, з чаго пачаць
выканання кода.
>> АЎДЫТОРЫЯ: Такім чынам, вы не [неразборліва]?
>> Выступоўца 1: Не.
Любыя іншыя пытанні?
Крута.
Гэтак жа, як вы можаце выкарыстоўваць функцыю што напісана для вас, вы можаце таксама
напісаць сваю ўласную функцыю.
Гэта функцыя, што хтосьці мог бы напісалі для разліку аб'ёму
з Q, напрыклад.
Там у які вяртаецца тып тут, у гэтым выпадку унутр, наша імя функцыі д і нашы
Спіс параметраў.
>> І заўважце, што вы павінны напісаць дадзеныя тып параметру, які патрабуецца
выкарыстоўваць або функцыя не ведаць, якія
параметр павінен я быць прыняцце.
Так, у дадзеным выпадку, мы хочам цэлае, як наш ўваход.
Дык чаму можа мы хочам выкарыстоўваць функцыі?
>> Перш за ўсё, выдатна падыходзіць для арганізацыі.
Яны дапамагаюць разбіць свой код у больш арганізаванай кавалкі і зрабіць
яго было прасцей чытаць.
Спрашчэнне.
Гэта добра для дызайну.
Калі вы чытаеце кавалак кода і асноўная функцыя сапраўды,
вельмі доўга, гэта можа быць цяжэй разважаць пра тое, што адбываецца.
Так што калі вы разбіць яго на функцый, гэта можа быць больш зручным для чытання.
І паўторнае выкарыстанне здольнасці.
Калі ў вас ёсць кавалак кода, які будучы называецца або запусціць некалькі разоў,
замест перапісвання гэты код у 10 разоў у асноўнай функцыі, вы, магчыма,
хочаце выкарыстоўваць яго.
А потым кожны раз, калі вам трэба выкарыстоўваць, што кавалак кода, выклічце функцыю.
>> Так што цяпер, калі ўспомніць, да нуля, мы таксама казалі пра некалькі канцэпцый,
адзін з якіх разьбы.
Тэма з'яўляецца паняцце кратнага паслядоўнасці кода
выкананне адначасова.
Так ўспомніце дня, дзе Дэвід быў вы, хлопцы, адлічыць колькасць
людзі ў пакоі.
>> Па сутнасці, што адбываецца на гэта ўсё з вас, хлопцы былі
працуе асобных патокаў.
І гэтыя ніткі збіраюцца разам каб атрымаць нейкую адказ.
Сапраўды гэтак жа ў пустым, калі ў вас ёсць некалькі спрайт, вы, магчыма,
ёсць котка і сабака.
І яны былі б адначасова працуюць ўласныя скрыпты.
Гэта з'яўляецца прыкладам разьбы.
>> А другі канцэпцыяй, якая была ўведзена ў пустым было падзеі.
І падзеі, калі некалькі частак ваш код мець зносіны адзін з адным.
У нуля, гэта было, калі вы выкарыстоўвалі вяшчання кантролю і Калі я
Атрымлівайце блокаў.
>> А таксама, у задачы Набор 4, мы бачылі трохі падзей, а таксама.
Вы, хлопцы, магчыма, выкарыстоўваў бібліятэка Gevent.
І была функцыя waitForClick , У якой вы чакалі
для карыстальніка, каб націснуць кнопку.
І ваш клік, у гэтым выпадку, было б падзея і чакаць клік вашага
апрацоўшчык падзей.
>> А таксама, па ўсёй паказ psets і працуе на вашых psets, вы
маглі прыйсці ў кантакт з некаторыя з гэтых каманд.
Гэта тое, што вы набралі ў ваша акно тэрмінала або што акно
што з'яўляецца на вашым г рэдагавання, каб, па сутнасці, перайдзіце кампутар.
>> Так, напрыклад, LS пералічаныя змесціва каталога.
Стварыць каталог ствараецца новая папка.
CD, змяніць каталог.
RM, выдаліць, выдаляе файл ці некаторыя каталог.
А потым выдаліць каталог выдаляе каталог.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Выступоўца 1: Так, вядома.
На жаль, пытанне было, калі вы хацеў бы прапанаваць пакласці гэта
на шпаргалку.
Гэта магло б дапамагчы.
Калі ў вас ёсць нумар, вы можаце паставіць яго на.
Гэта таксама проста, як правіла дастаткова добра запомніць, таму што калі вы выкарыстоўваеце яе
Вы можаце проста ўжо гэта запомніў.
Гэта зробіць вашу жыццё нашмат прасцей.
Я адказаў на ваша пытанне?
>> Так што цяпер, мы трохі пагаварылі коратка аб бібліятэках.
Але два галоўных тыя, якія мы былі выкарыстоўваючы да гэтага часу ў курс,
стандартны I / O і CS50.
Якія рэчы ўключаныя у стандартнай бібліятэцы ўводу / высновы?
>> Так, да гэтага часу мы выкарыстоўвалі Printf.
У CS50, мы выкарыстоўвалі GetInt і GetString.
І тып дадзеных радок таксама адбываецца , Які быў абвешчаны ў гэтым CS50 бібліятэкі.
Мы пагаворым крыху больш у глыбіню аб як бібліятэкі працуюць і як яны
ўзаемадзейнічаць з астатняй часткай кода.
Але тыя, з'яўляюцца двума асноўнымі тыя, якія мы ўступаюць у кантакт з тых часоў у
Вядома.
>> Віды.
Гэта добра, каб успомніць, колькі кожны тып прадстаўлены ці як
колькасць байт кожнага з тыпу патрабуецца -
унутр, 4 байта; сімвал, 1 байт.
Паплавок складае 4 байта.
Што такое двайное?
>> АЎДЫТОРЫЯ: [неразборліва].
>> Выступоўца 1: Так, так што паплавок але падвоіць памер.
А як наконт тых часоў?
>> АЎДЫТОРЫЯ: [неразборліва].
>> Выступоўца 1: ОК.
Што такое доўга?
>> АЎДЫТОРЫЯ: [неразборліва].
>> Выступоўца 1: Так, два разы на Int.
Так.
>> АЎДЫТОРЫЯ: [неразборліва].
>> Выступоўца 1: Лонг [неразборліва].
А потым вельмі доўга удвая больш, чым.
>> АЎДЫТОРЫЯ: Не, няма.
Доўгая проста унутр.
Гэта залежыць ад архітэктуры да [неразборліва]
і унутр маюць аднолькавы памер.
[Неразборліва].
>> Выступоўца 1: Так доўга і унутр аднолькавыя.
А потым вельмі доўга у два разы больш унутр.
Крута.
І потым, што гэта апошні тып?
>> АЎДЫТОРЫЯ: Паказальнік.
>> Выступоўца 1: Так, так мы даведаліся крыху пра паказальнікаў.
І незалежна ад таго, паказальнік паказваючы на - гэта можа быць знак зоркі
або ўнутры зорка -
гэта заўсёды 4 байта для паказальніка.
Пытанні аб тым, што?
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Выступоўца 1: Так доўга і унутр з'яўляюцца тое ж самае ў гэтым CS50 прылады.
>> АЎДЫТОРЫЯ: Прыбор цалкам ўзаемазаменныя.
>> Выступоўца 1: Так.
Так потым доўга доўга двайны унутр.
>> АЎДЫТОРЫЯ: Гэта 32 біт?
>> Выступоўца 1: 32 біт, так.
>> АЎДЫТОРЫЯ: Так [неразборліва]?
>> СПІКЕР 1: Так, калі гэта не так відавочна сказаць, што вы
павінны ўзяць на сябе 32 біта.
>> АЎДЫТОРЫЯ: Было б нешта сказаць як мяркуючы
архітэктура, як машыны.
Для 64 біт, толькі тое, што Змена з'яўляюцца прагне і паказальнікі.
Як яны [неразборліва].
>> СПІКЕР 1: Да?
>> АЎДЫТОРЫЯ: Вопрос.
Так на адным з практыкі віктарыны, ён пытаецца пра без знака Int.
Такім чынам, як бы, што вызначаецца ад Int [неразборліва]?
>> СПІКЕР 1: без знака у таксама 4 байта.
Але чым менавіта адрозніваецца падпісаны Int і без знака Int?
>> АЎДЫТОРЫЯ: [неразборліва].
>> СПІКЕР 1: Дакладна.
Можна ўявіць адмоўныя значэння.
Але як гэта зрабіць?
>> АЎДЫТОРЫЯ: [неразборліва].
>> Выступоўца 1: Так, гэта эканоміць 1 трохі прадстаўляць знак.
Падпісаны мае адзін біт, што ўяўляе сабой знак.
І без знака проста ўсё станоўчыя бакі.
>> АЎДЫТОРЫЯ: ОК.
Дык вы кажаце, што нумар на дваіх чалавек у два разы больш паплаўком?
>> Выступоўца 1: Двухмесны ў два разы памер паплаўка, так.
>> АЎДЫТОРЫЯ: Як працуе паказальнік каб вельмі доўга [неразборліва]?
>> Выступоўца 1: Так што пытанне ў тым, як робіць паказальнік на доўгі доўгі -
як у тым, што толькі чатыры байта, калі доўгі доўгі яе 8 байт.
Так што памятаеце, што гэта паказальнік, па сутнасці, у самым базавай значэння.
>> АЎДЫТОРЫЯ: [неразборліва].
>> Выступоўца 1: Так, так што паказальнік гэта проста вобласць памяці.
Так што не мае значэння, колькі месца што паказальнік накіраваны ў.
Гэта неабходна толькі 4 байта, каб адсочваць гэтай вочку памяці.
Любыя іншыя пытанні?
Крута.
>> Такім чынам, апошняе, што ў мяне ёсць выкарыстоўваецца стандартны вывад.
Вы павінны выкарыстоўваць іх часта Дастаткова таго, што вы можаце ўспомніць.
Але гэта, калі мы выкарыстоўваем Е, напрыклад.
І ў нас ёсць гэтыя запаўняльнікі, называліся коды фармату.
>> Так працэнтаў з голец, адсоткаў я для INT, і мы можам таксама выкарыстоўваць працэнтную в
Ён тое ж самае.
Але, наогул, у CS50 мы спрабуюць выкарыстоўваць працэнтную I.
Працэнт е для паплаўка.
Працэнт Л.Д. доўга доўга і адсоткаў з для радка.
>> Сапраўды гэтак жа, мы выкарысталі некалькі гэтыя кіраўнікі паслядоўнасці.
Напрыклад, зваротная касая рыса п для новай лініі.
Гэта толькі для таго, калі вы фарматаванне код для друку ф.
Да?
>> АЎДЫТОРЫЯ: Што такое адсоткаў сут на працягу?
>> Выступоўца 1: Такім чынам, пытанне гэта тое, што з'яўляецца адсотка г для?
Працэнт г для цэлых лікаў.
Працэнт г і працэнтаў я тое ж самае.
>> АЎДЫТОРЫЯ: У чым розніца паміж касая рыса п і зваротны г?
>> Выступоўца 1: Такім чынам, пытанне ў чым Розніца паміж зазору п і
люфт г?
Я думаю, што зваротны слеш г -
>> АЎДЫТОРЫЯ: Так касая рыса т проста азначае, вяртаецца ў пачатак радка
фактычна не збіраюся з новага радка.
Так што калі вы друкуеце зваротнай касой г і вы вярнуцца да пачатку радкі
то вы друкуеце больш матэрыялу, перазапісу матэрыял, які ўжо на
[Неразборліва].
У той час як, н фактычна ідзе на новы лініі і ідзе ў [неразборліва].
>> Выступоўца 1: Ну, усе іншыя пытанні?
Добра.
Я збіраюся перадаць яго далей, каб Дэн, які будзе працягвацца.
>> [Апладысменты]
>> Дадзены: Усе правша.
Так што я буду казаць пра іншае шырока Круг ідэй ад класа, якія
прыкладна прадстаўнік другога тыдня і пачатак тры тыдні, пачынаючы ад
з ліццём, што проста спосаб лячэнні значэнне пэўнага тыпу,
значэнне іншага тыпу.
Так што мы можам зрабіць гэта з дапамогай знакаў на Інтс, ўсплывае на цэлых лікаў, і
доўгія прагне ў два разы.
>> Усе гэтыя рэчы можна выкарыстоўваць у якасці спосабаў лячэння некаторы лікавае значэнне
мінус сімвал, як некаторыя іншыя лікавае значэнне.
Такім чынам, ёсць некаторыя праблемы з гэтым, з Курс, які прыходзіць, калі вы прыводзіце
рэчы, як паплавок у цэлых лікаў.
Так што гэта крыху дзіўна.
У нас ёсць паплавок, які з'яўляецца 1,31.
Памножым яго на 10 тысяч.
А потым мы друкуем яго ў выглядзе цэлага ліку.
Што гэта выйсце?
10000 раз 1,31.
Так 13,000, з'яўляецца тое, што думаю?
>> Залы: Я думаю, што гэта 10000.
>> Дадзены: Так што я памножыўшы яго на 10 000 да Я прывядзення яго.
>> АЎДЫТОРЫЯ: Ох.
Не было там быць адным 9 і некаторыя 0 лічбы?
>> Дадзены: Вы, магчыма, некаторыя дзіўныя лічбы.
Так правільна, гэта ў 1,3 разы 10000.
Дык вось 13000.
І гэтая дадатковая дзіўна -
>> АЎДЫТОРЫЯ: 13100.
>> Дадзены: 13100.
Дзякуй, Роб.
І гэтая дадатковая дзівацтва -
гэта 9,9 -
проста таму, што гэта ліццё ў канчатковым выніку акруглення, дзе
ён не павінен мець.
Так.
>> АЎДЫТОРЫЯ: ліццё адбываецца пасля ўсё астатняе?
>> Дадзены: Так таму што ў мяне гэта ў друку, ён робіць гэта памнажэнне перад ім
робіць гэты кастынг.
>> АЎДЫТОРЫЯ: [неразборліва].
>> Дэн: Я думаю, што гэта паставіць пад першым, ды, што было б 10000.
Што-небудзь яшчэ?
Крута.
Так што гэта 13099.
Чаму гэта адбываецца?
Недакладнасць.
>> Паплаўкі не ідэальныя.
Яны могуць толькі прадстаўляць ліку ў пэўную колькасць значных лічбаў.
Так што, калі мы раздрукаваць 8 інжыр на гэта паплавок, мы атрымліваем свайго роду
пачварны погляд лік.
І гэта таму, 1.31 не можа дакладна быць прадстаўлены просты
ступенямі двойкі ў машыне.
Так што ў рэшце рэшт прымаючы бліжэй думаю, што ў канчатковым выніку
быць трохі нізка.
Сэнс?
ОК.
>> Цяпер перайшлі з'яўляюцца іншы спосаб робіць ўмоўныя аператары, дзе ўсё
мы клапоцімся аб тым, адна пераменная.
Такім чынам, у гэтым канкрэтным прыкладзе, мы атрыманне цэлы лік ад карыстальніка.
А потым мы глядзім на што гэта цэлае з'яўляецца.
Як мяркуецца, гэты лік ад аднаго да чатырох.
Гэта тое, што мы просім.
>> Такім чынам, вы зрабіць перамыкач імя зменнай.
Тады вы стварылі выпадках магчымага шануе гэта магло быць.
Так выпадку, калі адзін, кажуць, што гэта нізка.
А потым вы парушыце выйсці стану перамыкача так
Вы не працягваць ісці.
>> У наступным выпадку -
так справа два выпадкі тры -
калі гэта справа двух ён проста падае да Першы радок кода ён бачыць, як з
выпадку тры, пакуль не ўбачыць перапынак.
Так што прычына вы атрымліваеце выпадак адзін на толькі раздрукаваць нізкай таму, што я
ёсць гэты перапынак тут.
Калі б я, скажам, праігнараваў гэты перапынак - калі я кінуў гэтую адрыў -
было б надрукаваць нізкім, і тады было б раздрукаваць сярэдзіну, і тады было б зламіць.
>> Так перапынкі з'яўляюцца важнай часткай з пераключэння ўмовы і
яны павінны быць там.
Любыя выпадкі, якія не ўказаныя відавочна апрацоўваюцца па змаўчанні
выпадак у камутатары і павінен быць кінуты.
>> АЎДЫТОРЫЯ: Так 1, 2, 3, і 4 будзе п?
>> Дадзены: Значэнні, н могуць быць.
Так.
Да?
>> АЎДЫТОРЫЯ: Дык што, калі ў вас ёсць што [неразборліва]?
>> Дадзены: Вы б надрукаваць нізкай, а затым было б друкаваць сярэдзіну, і
то было б зламаць.
>> Зала: А чаму б раздрукаваць сярэдні калі [неразборліва]?
>> Дадзены: Так што ўсё пад выпадку да перапынку трапляе пад.
Так справа адным друку пад выпадак адзін, як гэта наступнае друку.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Так гэты лік толькі прыватным значэнне, што гэтая пераменная
можна ўзяць, ці не так?
Ці мае гэта сэнс?
Так.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Так, справа двух будзе друкаваць сярэдні, а затым перапынак.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Я думаю, што любы?
Якія яшчэ тыпы дадзеных Вы можаце перайсці?
>> АЎДЫТОРЫЯ: Вы можаце перамыкацца Над любым тыпы дадзеных.
Але гэта значыць толькі нічога над знакаў і Інтс і ўсё ў такім духу, таму што
калі вы пераход на паказальнік што на самой справе не мае сэнсу,
пераключэння нагрузак, калі ён нават давайце Вы робіце гэта, з-за якая плавае кропкай
у дакладнасці, вы б не сапраўды хачу зрабіць гэта ў любым выпадку.
Так даволі шмат, проста INTS і сімвалы і ўсё ў такім духу.
>> Дадзены: Так, гэта калі ў вас ёсць відавочнае значэнні, якія вы ведаеце, я думаю, што, можа быць
што пераход на самай справе карысна.
Добра?
ОК.
>> Сфера з'яўляецца дыяпазон, які заявіў пераменная распаўсюджваецца.
Такім чынам, у гэтай маленькай кавалак кода ў мяне ёсць, было б поўна памылак.
І прычына я абвясціў гэтую Int я ў рамках гэтага цыкла.
А потым я спрабую спасылацца, што я за межамі, што для сферы завесы.
>> Так у асноўным, вы можаце думаць аб рамкі як усё, што вы аб'явіць
з унутраным наборам фігурных дужках толькі існуе ў тых фігурныя дужкі.
А калі паспрабаваць і выкарыстоўваць гэтую зменную за межамі тых фігурныя дужкі, вы будзеце
атрымаеце памылку ад кампілятара.
Да?
>> АЎДЫТОРЫЯ: Так што гэта адна не працуе?
>> Дадзены: Гэта не працуе, так.
Радка.
Радок з *.
Яны сапраўды гэтак жа.
Яны проста паказальнікі на сімвалы.
І любыя радкі, якія вы павінны павінны скончыць з зваротнай касой рысы нулявы, які знаходзіцца ўсяго
з канвенцыяй.
>> Яна называецца NULL тэрмінатар.
І NULL -
капіталу N, капітал U, капітал L, капіталу L -
гэта не тое ж самае NULL тэрмінатар.
Гэта паказальнік.
Гэта сімвал.
Яны вельмі розныя.
Памятаеце пра гэта.
Гэта будзе на віктарыне, напэўна.
Я не бачыў віктарыну.
Да?
>> АЎДЫТОРЫЯ: Так NULL, скажам, паказальнік?
>> Дадзены: Так.
>> АЎДЫТОРЫЯ: Што робіць [неразборліва]?
>> Дадзены: Калі, скажам, Таноса называецца, калі вы бракуе памяці, каб атрымаць
незалежна ад памеру вы просіце, Таноса вернецца NULL.
Гэта, у асноўным, кожны раз, калі функцыя павінна вяртаць паказальнік, вы
трэба праверыць супраць NULL, таму што NULL з'яўляецца вельмі добрым -
гэта, свайго роду, значэнне смецця.
Гэта нулявы наколькі паказальнікі ісці.
>> Кожны раз, калі вы выклікаеце функцыю, што вяртае паказальнік.
Вы будзеце жадаць, каб праверыць, каб быць упэўнены, што гэты паказальнік ня NULL
таму NULL з'яўляецца вельмі распаўсюджаным з'явай.
Гэта свайго роду вяртанне смецця.
Так што, калі нешта не ідуць прама, проста вярнуць NULL замест гэтага.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Так, і што гэта такое.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Загавор, так як гэта.
Гэта NULL тэрмінатар.
Гэта ніжні рэгістр N-U-L-L, калі вы прамаўляю.
>> АЎДЫТОРЫЯ: І я проста пайшоў назад і правяраў.
А калі паспрабаваць паставіць з якая плавае кропкай шануеце ў перамыкач, ён будзе крычаць на вас
кажучы, зацвярджэнне патрабуе выраз цэлага тыпу.
>> Дадзены: Там вы ідзяце.
Але так, то, што зноў быў пытанне?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Так сталіца N, капітал U, капітал L, капіталу L з'яўляецца актуальнай з рэччу.
Гэта паказальнік NULL і будзе разглядацца толькі ў якасці такіх.
Вы ніколі не паспрабаваць і загавораў NULL характар і паглядзець любы
Іншага шляху, чым гэтая.
Да?
>> АЎДЫТОРЫЯ: Так вяртанні на персанаж Макс або нешта ў заўвагах, ці не праўда
ўвасабляюць тую ж самую функцыю як [неразборліва]?
>> АЎДЫТОРЫЯ: Дык вы маеце на ўвазе вяртанне сімвал макс ад GetChar або
што гэта такое?
>> АЎДЫТОРЫЯ: Так.
>> АЎДЫТОРЫЯ: Так, так што агульная тэрмін для ўсіх тых рэчаў,
з'яўляюцца дазорцы значэння.
Так як вяртанне Int макс ад GetInt і сімвал макс ад GetChar, гэта
павінен быць, як, усё ў парадку, калі гэтыя рэчы вяртаюцца да нас,
нешта пайшло не так.
>> Для паказальнікаў, мы проста пашчасціла мець гэта дазорнай значэнне, што кожны
узгадняе.
І гэта тое, што вам вярнуцца калі справы ідуць дрэнна.
Так сімвал макс гэта тое, што мы выкарыстоўваем прадстаўляць нешта
як NULL або GetChar.
>> АЎДЫТОРЫЯ: Дык што, калі вы тэстуеце GetChar, не маглі б вы проста паставіць NULL?
Ці будзе гэта мець значэнне?
>> Дадзены: Вы не маглі б проста праверыць NULL.
Вы павінны былі б праверыць сЬаг макс паколькі вяртаецца значэнне з функцыі з'яўляецца
персанаж не з'яўляецца паказальнікам.
Да?
>> АЎДЫТОРЫЯ: Гэтае пытанне задае для даўжыні радка.
Ці значыць гэта, ўключаюць нулявы сімвал?
>> Дадзены: Не.
І гэта на самай справе, як даўжыня радка ведае, што трэба спыніцца, таму што яна праходзіць праз
Ваш масіў сімвалаў, пакуль ён бачыць пусты знак.
А потым гэта ўсё роўна, усё Добра, я зрабіў.
>> АЎДЫТОРЫЯ: [неразборліва] пяць?
>> Дадзены: Добры дзень бы пяць.
Так.
Так масівы бесперапыннасць блокі памяці.
Яны маюць імгненны доступ, кажучы, што імя масіва, а затым, у фігурных
падцяжкі, што індэкс вы хочаце пайсці каб, яны індэксуюцца з нуля праз
даўжыня масіва мінус адзін.
>> І яны абвешчаныя па тыпу рэч, якая вы захоўваеце ў
масіў, імя масіва, а затым незалежна ад памеру мае гэтага масіва.
Так што гэта сімвал масіў даўжыні шэсць, што мае гэтыя значэння.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Так.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Калі ў вас ёсць тое, што адбываецца ў масіў ўжо зрабіў.
Такім чынам, можна паказаць гэта замест гэтага як, сказаць, сімвал, што імя вашага
масіў, пустыя дужкі роўная кучаравыя дужка Н коска E коска L коска L коска
Аб коска нулявы сімвал і фігурная дужка.
Гэта было б таксама працаваць у якасці дэкларацыі.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Тады вы павінны мець памер ужо зрабіў.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Так.
Усе правша.
Аргументы каманднага радка з'яўляюцца адным са спосабаў атрыманне дадзеных ад карыстальніка ў якасці
Аргументы асноўнай.
Галоўная прымае два аргументу.
Лік аргументаў, што ў цяперашні час прайшоў уздоўж каманднага радка і
вектар радкоў або масіў радкоў з усіх аргументаў.
>> Так што калі я, скажам, называецца функцыю, напрыклад, кропка з 1 прастору, 2 прастору, тры,
агдс будзе 4.
І агду 0 будзе кропка па-за.
Argv1 б 1.
argv2 будзе 2. argv3 будзе 3, у гэтым канкрэтным выпадку.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Апошні элемент у масіве таму што масіў даўжынёй агдс плюс
адзін з ARGB, апошні элемент з'яўляецца паказальнікам NULL.
Гэта агдс плюс 1.
Такім чынам, у выпадку, што я толькі што сказаў, гэта будзе агду 0 з'яўляецца кропка па-за.
агду 1 роўна 1. argv2 з'яўляецца 2. агду Сакавік 3.
агду 4, які з'яўляецца адным больш, чым агдс будзе NULL.
>> І гэта паказальнік NULL.
Так.
І гэта таму, што радок сімвал зорка паказальнік.
Такім чынам, ён павінен быць таго ж тыпу.
Да?
>> АЎДЫТОРЫЯ: Два пытання.
Так што, якая розніца паміж гэта і GetString акрамя аднаго тыпу
у карыстацкім рухавіка?
І два, яна захоўваецца на працягу Ваш нядаўні памяці?
Так як, GetString б быць [неразборліва]?
>> Дадзены: Дзе гэта захоўваецца?
Я не ведаю, дзе ён захоўваецца.
>> АЎДЫТОРЫЯ: Такім чынам, на самай справе, вы ведаеце, як любы функцыянуюць вы называеце гэта аргументы
захоўваюцца ў стэку?
Так агдс і агду аргументы На галоўную і яны ў стэку, або сапраўды
ледзь вышэй, што вы думаеце, як пачатак стэка.
Якая была іншая частка пытання?
>> АЎДЫТОРЫЯ: Так у чым жа [неразборліва]?
>> Дадзены: Так, гэта проста іншы спосаб атрымання дадзеных ад карыстальніка.
Гэта адно гэта крыху больш эфектыўныя і гэта зручней для сцэнарыяў, таму што вам
можаце проста перадаць аргументы ваш галоўны Функцыя замест таго, каб чакаць,
для карыстальнікаў, калі ў вас няма ніякіх карыстальнікаў.
>> АЎДЫТОРЫЯ: І так, атрымаць радкоў будзе [неразборліва].
Было б захоўваць рэчы трэба.
>> Дадзены: Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Так, агду 0 заўсёды ўключае кропка слэш выкліку функцыі.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Так, кожны з аргументаў скончылася ў пусты знак, таму што яны
з'яўляюцца радкамі.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Так, агду агдс з'яўляецца паказальнікам NULL.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: О так.
Так, шкада.
>> АЎДЫТОРЫЯ: Так [неразборліва]?
>> Дадзены: Такім чынам, пытанне, калі ў вас каманднага радка кропка слэш кропку з 1, 2,
б колькасць каманднага радка Аргументы быць два ці гэта будзе тры?
>> Залы: Я думаю, што гэта не мае вялікага значэння.
Я, як правіла, кажуць, о, вы не прайшлі Усе аргументы каманднага радка, калі,
відавочна, вы назвалі функцыю.
Так што я, як правіла, вусна выключыць Функцыя з каманднага радка
аргументы, нават калі гэта ўключаны ў ARGV.
>> Дадзены: Але калі б гэта было на тэст -
так - а таксама, калі вы нешта сказаць як агдс роўна 3,
вы знаходзіцеся ў бяспечнай рэпутацыяй.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Я думаю, што калі замест выкліку гэтага у ARGC і радок агду дужках
але захаваў тыя ж тыпы і проста называецца ім нешта іншае, як
і б, ці будзе гэта ўсё яшчэ працуе?
І гэта будзе па-ранейшаму працаваць, вы б проста -
замест выкарыстання ARGC - вы будзеце выкарыстоўваць і б.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Такім чынам, пытанне GetString з'яўляецца збіраецеся захоўваць памяць у кучы
таму GetString з'яўляецца сімвал *.
Ён захоўвае памяць у кучы, таму што гэта называе цяпер Таноса ў фактычны
рэалізацыя GetString.
ОК, як рухацца далей.
>> Бяспеку.
Такім чынам, каб быць па-сапраўднаму бяспечным, вы належыце на ні ў адзін і вы дазваляеце ніхто не доступ да любога
Вашай інфармацыі, таму кожны будуе свае машыны,
іх уласныя аперацыйныя сістэмы, усе іх праграмы з нуля, і, відавочна,
ня падлучыцца да любым іншым машын праз Інтэрнэт.
Так кампутары не ўпэўненыя ў сабе.
Яны на самай справе.
Мы павінны давяраць іншым людзям.
>> А ідэя бяспекі з'яўляецца тое, што вы спрабуючы абмежаваць колькасць
спадзяюся, што вам трэба.
І адным са сродкаў, якія вы робіце, што праз крыптаграфіі.
Крыптаграфія, па сутнасці, у нас ёсць сакрэты.
>> Часам мы павінны перадаць нашы сакрэты разам праз, скажам, у Інтэрнэце або
іншае.
І мы не хочам, каб людзі ведаць гэтыя сакрэты.
Такім чынам, мы зашыфраваць нашы сакрэты ў шляху што мы спадзяемся, што ніхто не можа высветліць.
>> Таму мы выкарысталі -
праз ходзе гэтага класа -
рэчы, як шыфр Цэзара і [Неразборліва], якія абодва вельмі, вельмі
небяспечныя спосабы шыфравання рэчы.
Яны лёгка высветліць, што яны і што вашыя дадзеныя знаходзяцца.
Рэальны свет выкарыстоўвае значна больш складаныя схемы шыфравання.
І мы не зможам атрымаць у значна больш, чым гэта.
>> Адладка.
GDB з'яўляецца лепшым.
Я збіраюся гэта падкрэсліць яшчэ раз.
Выкарыстоўвайце GDB ўвесь час кожны раз у вас ёсць праблемы.
Каманды, якія з'яўляюцца карыснымі ў GDB з'яўляюцца зламаць, якія вы перадаеце радок
лік, імя функцыі, па сутнасці дзе ў кодзе вы хочаце спыніць,
і быць у стане ўзяць пад кантроль.
>> Надрукаваць прымае зменную і друкуе што б гэта ні пераменная у тым, што
паказаць у вашым выкананні.
Наступная рухаецца ваша выкананне ўздоўж аднаго кроку.
І кроку крокаў ўнутры функцыі ў вашым выкананні.
>> Іншыя рэчы, запускаюцца, які з'яўляецца, як вы на самой справе запусціць свой код.
Працягнуць прымае ўсе меры, неабходныя каб дабрацца да наступнай кропкі супыну.
І ёсць многія, многія іншыя.
Паглядзіце іх.
Яны з'яўляюцца вялікімі.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Так, які з'яўляецца адладчык.
Так адладчык гэта праграма, якая дазваляе адладкі праграмы.
Гэта не праграма, якая знаходзіць памылкі для Вы, тым не менш, што было б выдатна.
>> І апошняе, для мяне, гэта пошук.
Так тыпы пошуку, што мы казалі а ў гэтым класе з'яўляюцца лінейны пошук,
які знаходзіцца за ўсё ў тым, што вы глядзіце праз кожны элемент прасторы пошуку, аднаго
элемент, у той час, пакуль вы не знойдзеце тое, што Вы шукаеце або, пакуль не дасягне
канец вашай прасторы пошуку, пры якім Кропка вы кажаце, што вы не змаглі знайсці
элемент, які вы шукалі.
І гэта адбываецца ў лепшым выпадку пастаяннае час, які з'яўляецца 0 з 1, а ў горшым лінейных
час, якое роўна 0 н.
>> Бінарны пошук, які мае патрэбу брудныя элементы.
Вы ідзяце ў сярэдзіне вашых элементаў, см. калі элемент вы шукаеце
больш або менш, чым элемент што вы ў сярэдзіне.
Гэта гэта больш, вы кажаце, што дно вашага прасторы пошуку з'яўляецца ваш
бягучае месцазнаходжанне, сярэдні, і вы перазапусціць працэс.
Калі ён менш, вы паглядзіце сказаць што - так, у чым справа?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дадзены: Так.
Любы выгляд роду, які вучылі ў клас з'яўляецца сумленнай гульнёй для тэсту.
>> [Смех]
>> Дадзены: А тое, што ў вас не было зрабіць гэта за праблемы, усталяванага, гэта справядліва
Гульня для тэсту.
>> АЎДЫТОРЫЯ: Мы можам пайсці па гэтым, як -
>> Дадзены: Гэта ўжо не будзе больш.
>> СПІКЕР 2: Фактычны код [Неразборліва] на study.cs50.net.
Так што, калі вы паглядзіце на праблемы практыкі на старонцы сартавання зліццём у
study.cs50.net, ёсць код для рэалізацыі зліцця роду.
Такім чынам, вы не павінны ажыццяўляць сам сёння.
Але пераканайцеся, што вы разумееце яго, а чым проста запомніць яго.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> СПІКЕР 2: На старонцы сартаванне зліццём на study.cs50.net, існуе практыка
праблема, якая, калі вы націснеце праз Праблема, у самым канцы ёсць
рашэнне, якое з'яўляецца зліццём Рэалізацыя роду.
Але пераканайцеся, што вы разумееце яго а не проста запомніць яго
або капіюючы яе ўніз.
>> АЎДЫТОРЫЯ: І цалкам дапушчальна Праблема для здачы іспыту будзе
нешта накшталт вось спіс.
Што гэта спіс выглядаць пасля адзін крок Вылучаныя роду або
сартаванне ўстаўкамі або любы іншы.
Адзін поўны ітэрацыя спісу.
Так што нават калі вы не ў канчатковым выніку неабходнасці Код для яго, вы павінны разумець, гэта
дастаткова, каб ведаць, як гэта будзе быць змены ў гэтым масіве.
>> Дадзены: Вось і ўсё для мяне.
>> [Апладысменты]
>> LUCAS: Прывітанне ўсім.
Мяне клічуць Лукас.
Я збіраюся казаць аб рэкурсіі, усё расліны, якія мы навучыліся, і
Трохі ўсіх паказальнікаў.
ОК?
Такім чынам, перш за ўсё, Рэкурсія.
Што гэта значыць сказаць, што функцыя з'яўляецца рэкурсіўнай?
>> АЎДЫТОРЫЯ: Называе сябе.
>> LUCAS: Добра, называе сябе, так.
Так любіце гэтую фатаграфію, напрыклад.
Гэта як на малюнку ўнутры карціны і так далей.
Так, напрыклад, вы можаце мець - Дана што казаў пра бінарнага пошуку.
Адзін са спосабаў, у якіх двайковы пошук рэкурсіўная з'яўляецца тое, што вы
спрабуючы знайсці шэраг.
Дык вы ідзяце ў сярэдзіне.
І тады вы праверыць, калі гэтыя нумары там у левай і ў правай.
>> І потым, калі вы даведаліся гэты лік будзе злева, гэта тое ж самае
рэч, як раз рабіць пошук, але толькі з левага боку спісу.
Дык вось, як гэта гучыць як быццам гэта рэкурсіўным.
Дык вось чаму вы, хлопцы, рэкурсіўная рашэнне для сартавання зліццём.
>> Такім чынам, вось прыклад.
Так скажам, што я хачу, каб выбраць ўсе лікі ад 1 да п.
Я разумею, што сума п лік п плюс н мінус 1 да 1.
Але тады, калі я гляджу на п мінус 1 плюс н мінус 2 плюс 1, гэта тое ж самае
паняцці, як падвядзенне нумары да н мінус 1.
Таму я магу сказаць суму роўнай суме роўна п плюс сума п мінус 1.
Ці мае гэта сэнс?
>> І я таксама павінен быў бы нешта яшчэ называецца базавы варыянт, які з'яўляецца тое, што
сума лікаў да да нуля будзе роўная нулю.
Таму, як толькі я дабяруся да колькасці нуля, я перастанем лічыць.
Ці мае гэта сэнс?
>> Такім чынам, вось прыклад таго, як Я магу ажыццявіць гэта.
Так што я гэтую функцыю ў некаторых.
Гэта займае цэлае н.
Дык вось я спачатку праверыць, калі п менш або роўная нулю.
Такім чынам, калі гэта менш або роўна нуля, я вярнуць нуль, які з'яўляецца нашым базавым сцэнаром.
У адваротным выпадку, я магу проста вярнуцца н плюс сума лікаў ад
ад аднаго да н мінус адзін.
Сэнс?
ОК.
>> Такім чынам, вось як ён выглядае.
У вас ёсць суму 2 роўна 2 плюс сума 1.
І некаторыя з 1 Студзень плюс сума 0, які роўны 0.
Сэнс?
Так што, калі мы паглядзім на стэк вашага Праграма, гэта тое, што ён выглядае.
>> Па-першае, у нас ёсць асноўную функцыю.
А потым асноўная функцыя называецца сума 2.
А потым сума 2 збіраецца сказаць, ну, сума 2 роўная 2 плюс сума аднаго.
Так што я дадаць суму 1 у стэк.
І сума 1 збіраецца назваць суму 0, які таксама будзе дададзены
ў стэк.
І тады кожны з гэтых тыя, якія на іншы прыйдзецца вярнуцца
да таго, як астатнія могуць працягваць ісці.
>> Так, напрыклад, тут, сума 0, Спачатку збіраецца вяртаць 0.
А потым выбраць суму 1.
Тады сума 1 збіраецца вяртае 1 у суме 2.
І, нарэшце, сума 2 збіраецца вярнуцца 3 да асноўнай.
Ці мае гэта сэнс?
>> Гэта сапраўды важна, каб зразумець, як стэк працуе і паспрабаваць
ўбачыць, калі гэта мае сэнс.
Такім чынам, сартавання.
Дык чаму ж сартаванне важна, у першую чаргу?
Чаму мы павінны клапаціцца?
Любы?
Прывядзіце мне прыклад?
Да?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Так, добра.
Такім чынам, вы можаце шукаць больш эфектыўна.
Гэта добры спосаб.
Так, напрыклад, у нас ёсць шмат рэчы, на самай справе, у нашым жыцці, што
сартуюцца.
Напрыклад, слоўнікі.
>> Гэта вельмі важна, каб усе слова ў нейкі парадак, што мы
можа лёгка атрымаць доступ.
Дык вось што ён казаў.
Вы можаце шукаць больш эфектыўна.
Падумайце аб тым, як цяжка было б мець слоўнік, у якім словы знаходзяцца ў
выпадковым парадку.
Вы павінны глядзець на, у значнай ступені, кожнае слова, пакуль не знойдзеце
слова, якое вы шукаеце.
>> Калі вы выкарыстоўваеце Facebook таксама, калі Вы глядзіце на сваіх сяброў, вы
ўбачым, што Facebook Put Your бліжэй адзін знаходзіцца на вяршыні тых
што вы не кажаце з, што шмат.
Калі вы прайсці ўвесь шлях да дна ваш спіс сяброў, вы будзеце бачыць,
людзі, што вы, верагодна, нават не памятаеце, што вы сябры з.
І гэта таму, што Facebook віды вашыя сябры на аснове, як
адлегласцю да іх.
>> Так арганізацыі дадзеных.
Таксама Покемон.
Такім чынам, вы бачыце, што ўсе Покемоны маюць нумары.
І гэта, як лёгка Спосаб доступу да дадзеных.
>> АЎДЫТОРЫЯ: Доступ Pokemon.
>> LUCAS: Так.
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Так.
Такім чынам, выбар роду.
Роду Выбар збіраецца выбраць маленькі малокомплектных значэнне спісу кожнага
час у кожнай ітэрацыі.
Гэта накшталт як тых, што вы робіце ў вашай галаве, калі вы спрабуеце
адсартаваць спіс пад рукой.
>> У прынцыпе, усё, што вам зрабіць, гэта паглядзець для найменшай нумарам.
Вы ставіце яго ў адсартаваным спісе.
А потым вы паглядзіце на Наступны найменшая колькасць.
А потым вы працягваеце рабіць што і так далей.
>> Так выбар роду ў асноўным вы выбраць кожны раз, калі маленькі
малокомплектных значэнне.
Пакладзеце ў канцы адсартаваны частка спісу.
І працягваць рабіць гэта.
Так што давайце хутка ўбачыць, што гэта выглядае.
Дык вось сартуюцца і малокомплектных спіс.
>> Такім чынам, для адсартаваны з спісу, гэта першапачаткова пусты.
А потым я збіраюся выбраць Найменшая колькасць тут, што на 2.
Так што я атрымаць нумар 2, і я паставіў ў пярэдняй частцы спісу.
А потым я гляджу на наступны па велічыні элемент, які з'яўляецца 3.
Так што я паклаў яго ў канцы з Адсартавана спісу.
І тады я працягваць рабіць гэта.
Я лічу, 4 і паклаў яго ў канцы.
Знайсці 5 і паклаў яго ў канцы.
>> І паглядзім, як усе тыя часы, што Я кажу, што пакласці яго ў канцы ёсць,
у асноўным, абмен двух значэнняў.
ОК?
І тады апошні, вы проста ёсць яшчэ адзін элемент.
Так што гэта ўжо адсартаваныя.
>> Такім чынам, сартаванне ўстаўкамі.
Сартаванне ўстаўкамі вы будзеце мець таксама што рэч таго адсартаваны і
малокомплектных спіс.
Адзінае, што кожны раз, што Вы дадаеце элемент у адсартаваны
Спіс, вы проста выбраць элемент, знаходзіцца ў пярэдняй часткі малокомплектных спіс.
А потым вы збіраецеся знайсці тое, што пазіцыянаваць гэта павінна быць у адсартаваны
частка спісу.
>> Давайце паглядзім, што гэта так гэта мае больш сэнсу.
Гэта значыць першапачаткова, напрыклад, я спрабую ўставіць нумар тры ў
сартуюцца частка спісу.
Так што спіс не мае нічога.
Так што я магу проста паставіць нумар 3.
>> Цяпер я хачу, каб дадаць нумар 5 да адсартаваны частка спісу.
Так я гляджу на нумар 5.
Я заўважаю, што гэта больш, чым 3.
Так што я ведаю, што гэта павінна быць пасля 3.
Так што я паклаў 3 і 5.
>> Тады я хачу, каб ўставіць нумар 2.
Я заўважаю, што лік 2 на самай справе апошні затым абодва 3 і 5.
Так што я на самой справе павінны паставіць усё гэта спосаб у пачатку спісу.
Так што я павінен, накшталт, перакласці ўсе элементы ў адсартаваным спісе, таму я магу
вызваліць месца для ліку 2.
>> Потым я бачу лік 6.
Я бачу, што гэта павінна быць пасля 5.
Так што я паклаў яго там.
І, нарэшце, я гляджу на колькасці 4.
І я заўважаю, ён павінен быць паміж 3 і 5.
І тады я паклаў яго туды і зрух ўсе астатнія элементы.
Сэнс?
>> Бурбалка Сартаваць.
Так пузырьковый сартавання ў асноўным тое, што ты збіраецеся рабіць - мы называем гэта бурбалка
роду, таму што вы ідзяце па спісе - гэта на самай справе лепш, калі я проста паказаць
Вам падабаецца гэты -
і вы збіраецеся параўноўваць суседнія колькасці.
І вы збіраецеся абмяняць іх пазіцыі, калі яны не
у правільным парадку.
>> Так у асноўным, тое, што збіраецца здарыцца, вось, напрыклад,
ў вас ёсць 8 і 6.
Вы ведаеце, што парадак сартавання будзе на самай справе быць 6 і 5, ці не так?
Так што вы збіраецеся памяняць загады.
Потым я бачу 8 і 4 тут.
І я раблю тое ж самае.
Я памяняць зноў.
І, нарэшце, 2 і 8.
Я таксама памяняць іх месцамі.
>> Яна называецца Bubble Сартаваць таму што пасля кожны з гэтых ітэрацый, на самай справе,
Найбольшая колькасць у спісе атрымлівае ўсё аж да канца спісу.
Ці мае гэта сэнс?
Таму што ён трымае замены яго і перасоўванне яго направа.
>> Такім чынам, гэта ўжо другі ітэрацыі.
Было б тое ж самае.
Я зраблю адзін своп і то апошнім.
Я, што няма свопы і спіс сартуецца.
Такім чынам, у пузырьковый сартавання, мы ў асноўным трымаць перажывае спісу і перапампоўкі
рэчы ніколі, пакуль я заўважаю, што я не рабіў любыя свопы робяць, што ітэрацыі, якія
азначае, што спіс ужо адсартаваны.
Сэнс?
>> Давайце трохі пагаворым аб падчас працы.
Так што вы, хлопцы, памятаеце Вялікі О, Амега, і Тэта?
Да?
Добра, што Big O, у першую чаргу?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Так, гэта называецца горшым выпадку выканання, які проста азначае, што гэта
колькі вы чакаеце праграму прыняць бегчы.
Як, з пункту гледжання -
у дадзеным выпадку - н.
Элементаў у лік пералічыць у горшым выпадку.
Маўляў, у горшым магчымым выпадку.
>> Такім чынам, для пузырьковый сартавання, напрыклад, у нас ёсць Big O н плошчы.
Чаму ў нас, што?
Чаму Bubble Сартаваць Вялікі Аб н квадрат?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Так, так што ў горшым выпадку будзе што мне давядзецца зрабіць п ітэрацый.
Такім чынам, кожны з ітэрацый збіраецца прывесці самы вялікі элемент у канец
з спісу.
Такім чынам, у горшым выпадку з'яўляецца тое, што ў мяне ёсць зрабіць гэтую рэч п раз.
І для кожнага з тых часоў, я павінен зрабіць п свопы таму што я павінен параўнаць
кожны з двух элементаў.
Дык вось чаму ён н квадрат таму што гэта п раз п.
>> Тады, выбар роду таксама н плошчы таму што, для кожнай ітэрацыі, я павінен
глядзець на кожны элемент у спісе.
А потым знайсці самы маленькі, Гэта азначае, што я павінен
праглядаць п элементаў.
І што я павінен зрабіць, што п раз, таму што У мяне ёсць, каб выбраць усе п элементаў.
>> Сартаванне ўстаўкамі таксама н плошчы таму што найгоршы сцэнар будзе
быць, адзін, я павінен ўставіць п колькасці, праўда?
Так што я ўжо ведаю, што я збіраюся мець п ітэрацый.
Але для кожнага з гэтых лікаў, калі я меў глядзець на ўсе нумары ў
адсартаваны спіс і паклаў яго на ўсім шляху спераду, што будзе н плошчы
таму што ён будзе п раз п зноў.
Сэнс?
А як наконт амега?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Гэта ў лепшым выпадку.
Так што гэта, як, у шмат разоў для сартаванне, у лепшым выпадку сцэнар
калі спіс ужо адсартаваны.
Такім чынам, вы сапраўды не маюць нічога рабіць.
Бурбалка Сартаваць мае лепшае сцэнар н.
Вы, хлопцы, ведаеце, чаму?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Так, калі вам адсочваць Ці рацыён дадзеных было ніякіх свопов або
ня, калі ў вас ёсць што-то накшталт набору для праўда, калі б была ітэрацыі, калі
Спіс ужо адсартаваныя, у асноўным, што адбываецца, дык гэта я збіраюся
паспрабуйце памяняць кожныя два суседнія элементы.
Я збіраюся бачыць, што няма свопы.
І я проста вярнуцца адразу ж.
>> Дык гэта значыць, што я проста павінен быў прайсціся па спісе адзін раз.
Так што гэта п, таму што я з нецярпеннем у п элементаў.
Чаму выбар роду п квадрат?
>> Так, нават калі спіс адсартаваны, для кожны ітэрацыя выбару роду, я
павінны выбраць мінімальны элемент.
Дык гэта значыць, што ў мяне ёсць, каб шукаць на ўсіх элементаў у малокомплектных
пералічыць і знайсці мінімум для кожнай ітэрацыі.
Ці мае гэта сэнс?
>> І ўстаўкі меч п, таму што ў бывае, што я спрабую ўставіць
нумары і ўсе нумары, калі я спробе ўставіць іх, я бачу, што яны
ў патрэбным становішчы.
Я не павінен пайсці праверыць усе іншыя Лічбы ў малокомплектных спіс.
Дык вось чаму ён будзе н.
Сэнс?
І тое, што тэта?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Што, прабачце?
Скажы гэта яшчэ раз.
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Цалкам дакладна.
Такім чынам, вы можаце бачыць, што толькі выбар захоўваецца ў Merge роду маюць thetas.
І гэта таму, што ў вас ёсць толькі тэта калі абодва Big O і Амега аднолькавыя.
ОК.
І, нарэшце, сартаванне зліццём ёсць у часопісе п.
>> А потым, як казаў Дэн, сартаванне зліццём накшталт як так жа, як
Вы робіце бінарны пошук.
Такім чынам, вы атрымаеце спіс.
І вы збіраецеся разрэзаць напалову.
І тады вы скараціць іх у меншых за палову.
І тады вы аб'яднаеце іх.
Вы, хлопцы, памятаеце, што, ці не так?
ОК, як ён казаў.
>> ОК, паказальнікі.
Так што ж такое паказальнік?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: адрас.
ОК.
Я ведаю, што Дэвід паказвае кучу відэа Бинки і рэчаў, якія паказваюць
адзін да аднаго.
Але мне падабаецца думаць, паказальнікаў як толькі адрас.
Так што гэта зменная, якая будзе захоўваць адрасы.
>> Так што гэта проста гэта спецыяльная пераменная то ёсць чатыры байта.
Памятаеце, што паказальнік да чаго гэта заўсёды чатыры байта доўгія для нашага 32-бітнай
Машына так і ў выпадку з прыбор.
І гэта як раз мае месца зменнай ўнутры яго.
>> ОК, так што гэтая памяць, у асноўным.
Такім чынам, кожны блок памяці на самай справе мае этыкетка, якая з'яўляецца адрасам
slotty памяці.
Дык гэта значыць, што ў мяне можа быць паказальнік, які паказвае на
любы з гэтых адрасоў.
Так што прычына, чаму мы будзем выкарыстоўваць паказальнікі з'яўляецца калі я павінен памятаць размяшчэнне
што канкрэтны пераменная з'яўляецца памяццю.
>> І вы, хлопцы, памятаеце, што адзін з тых, выпадкі былі, калі ў мяне ёсць функцыя
калі я на самой справе хачу, каб вы своп для рэчыўных лікаў, я на самой справе
павінны паслаць паказальнік.
Не зьмяніў.
Вы, хлопцы, памятаеце вы, што?
Розніца паміж -
як называецца?
Выклік па значэнні і выклік па спасылцы, ці не так?
>> Добра, так.
Так называюць па значэнні.
Калі вы проста адправіць зменную функцыянаваць вы проста даслаўшы значэнне.
Такім чынам, вы на самой справе адпраўкі копія зменнай.
І ваша праграма не магла клапаціцца менш о, калі тая ж пераменная фактычна
робіць копію.
>> І называючы па спасылцы азначае, што Я на самой справе напрамкі копіі
паказальнік на гэтую зменную.
Дык гэта значыць, што я пасылаю Размяшчэнне гэтай зменнай.
Так адчуваю мяне ёсць размяшчэнне зменная, калі я выклікаць функцыю
з паказальнікамі, я ў стане на самай справе змяніць дадзеныя, якія былі ў асноўнай.
Сэнс?
>> Хоць, паказальнік ўяўляе сабой копію, Паказальнік ўсё яшчэ мае рэальны адрас
зменная, што я хачу змяніць.
Сэнс?
>> Так стварэння паказальнікаў.
Памятаеце, паказальнік заўсёды ёсць тып, які ён, паказваючы
да а затым зоркай.
І тады вы паставіць імя.
Таму памятайце, што кожны раз, калі ў вас ёсць усе зоркі, гэта як паказальнік на
што ўсё, што пераменная тып, які ў вас быў.
>> Такім чынам, тут у зорку, напрыклад, гэта паказальнік і цэлае.
А потым сімвал зорка паказальнік сімвал зоркі і гэтак далей.
Да?
>> АЎДЫТОРЫЯ: Што рабіць, калі ў нас ёсць паказальнік на п да зоркавы х.
Я ведаю, што стварае паказальнік на х.
Ці значыць гэта таксама заяўляюць х цэлае?
>> LUCAS: Такім чынам, калі вы кажаце, н-зоркавы х, вы не ствараеце паказальнік на
пераменная х.
Вы ствараеце паказальнік з імем х.
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Таму калі я кажу н зорка х, я кажучы, эй, у памяці, я збіраюся
атрымаць адзін з гэтых трох скрынках.
І я хачу сказаць, што, што будзе х, што з'яўляецца
будзе паказальнік.
І нешта цікавае пра паказальніках з'яўляецца тое, што мы гаворым, што ў іх ёсць
4 байта для 32-бітнай машыне.
І прычына, што тлумачыцца тым, што 4 байта 32 біта.
>> І машыны, якія 64 біт на самай справе ёсць паказальнікі адрасы
што 64 біта.
Дык гэта проста азначае, што памер адрасы ў машыне адрозніваецца.
>> Так Супастаўленне і разнаймення.
Ёсць два аператара, што вы, хлопцы, павінны памятаць.
Першы Ампэрсанд.
Другой зоркай.
Не палохайцеся гэтай зоркі, і гэта зоркі, таму што памятаеце, што, у
У гэтым выпадку ў вас ёсць п зорку.
>> Гэта як усё гэта разам.
Там няма н Space Star.
Дык гэта значыць, што гэта тып.
Памятаеце, што, калі ў вас ёсць пераменная зорка, ты
казаць аб тыпе.
>> Калі вы толькі зоркі, а затым Імя зменнай, гэта азначае, што
вы яго разнаймення, якія азначае, што вы глядзіце на
паказальнік, знайсці адрас, гэта паказваючы на, ідучы па гэтым адрасе,
і, гледзячы на ўсялякі раз, калі у вас там.
Таму я кажу сваім студэнтам, што, калі ў вас ёсць зорка, вы павінны думаць, што гэта
абрэвіятура ўтрымання.
>> Так што калі ў вас ёсць паказальнік, і вы зрабіць зорка паказальнік, гэта
ўтрыманне паказальніка.
Дык вы ідзяце ў тое, што ён, паказваючы на і паглядзець на пастаянным змесце.
І Ампэрсанд тое ж самае рэчы, як адрас.
>> Так што, калі ў мяне ёсць пераменная а - як, давайце сказаць, што я зрабіў унутр роўна 3 -
калі я хачу знайсці адрас, што пераменная памяці, я магу проста зрабіць
Ампэрсанд.
Так што гэта адрас.
Сэнс?
>> Дык вось прыклад.
Гэта адсутнічае дзесятковага б і INT с.
Так унутр роўная 3 азначае, што Я збіраюся пайсці ў памяці.
І я збіраюся знайсці слот і справа тут лік 3.
>> А потым унутр б роўна 4.
Я збіраюся зрабіць тое ж самае.
Да памяці і паставіць шэраг 4 у адным з скрынь.
І унутр роўная 5.
Знайсці іншую скрынку і паставіць нумар 5.
>> Так што ж гэтая лінія робіш? н зорка гадавых роўная Ампэрсанд а.
Такім чынам, перш за ўсё, п зорка гадавых.
Што ён робіць?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Так, так што п зорка гадавых, па-першае, аб'яўляе паказальнік пад назвай гадавых.
А потым ён прысваення значэнні што паказальнік быць адрас.
Так Ампэрсанд.
Тады, калі я зорка Pb, што гэта зорка рь?
>> Ой, прабачце.
Гэта таксама адсутнічае. н зорка рь.
Я маю на ўвазе зоркі шт.
Мне вельмі шкада.
Гэта тое ж самае.
Але зараз у мяне ўсё добра ар стварэння паказальнік б а затым паказальнік на с.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> LUCAS: Так.
Так што, калі вы ідзяце ў памяці і вы ідзяце ў акно, якое з'яўляецца пазначэнне для гадавых,
вы на самой справе збіраецца убачыць адрас.
ОК?
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> LUCAS: Так, паказальнік з'яўляецца адрасам.
Ніколі не забывайце, што.
Гэта як самы важны частка аб паказальнікаў.
Там гэта захоўванне і адрас некаторай зменнай.
Што-небудзь яшчэ?
Любыя іншыя пытанні?
ОК.
>> Так Паказальнікі і масівы.
Памятаеце, што, калі я раблю дзесятковага масіў 3, у асноўным, тое, што я раблю, я, добры
з, абвясціўшы ў паказальнік.
Так масіў накшталт як паказальнік на асаблівае месца ў памяці, у якой я
выдзелена тры слота для цэлых лікаў.
Ці мае гэта сэнс?
>> Таму, калі я дзесятковага масіў 3, тое, што я знаходжуся робіць, у асноўным, з'яўляецца стварэнне трох
слоты ў памяці.
Так што я проста знайсці тры слота памяці.
Так што калі я раблю, то, зорка масіў, гэта у асноўным азначае ўтрыманне масіва
што азначае сціраю паказальнік, я іду да таго месца, што гэта, паказваючы на,
і я паставіў нумар адзін.
>> І потым, калі я зорка масіў плюс 1, што тое ж самае, як рабіць масіў
дужкі адзін, які проста азначае, я іду ў месца, якое ён, паказваючы на.
І тады плюс 1 маркі мне перайсці на адну пазіцыю.
Так я іду на гэтую пасаду, на самай справе, і паставіць нумар два.
>> І вось, нарэшце, калі я раблю Масіў плюс 2, я іду туды, дзе
паказваючы масіва ў.
А потым я перайду да блокаў памяці.
А потым я паклаў тут нумар тры.
Да?
>> АЎДЫТОРЫЯ: Так зорка масіў проста заявіўшы, што самы першы пункт.
І вы можаце дадаць 1, толькі таму, што мы толькі сапраўды
спасылаючыся, што першы адрас.
>> LUCAS: Так.
Чаму мы, напрыклад, сказаць, масіў 0, масіў 1, і масіў 2?
Я кажу, навошта ты 0, 1, 2, 3 замест 1, 2, 3?
Адной з прычын з'яўляецца, адзін, кампутар праграмісты аддаюць перавагу пачынаць
адлік ад 0.
Два адбываецца таму, што, калі вы робіце масіў 0, гэта тое ж самае, робяць масіў
плюс 0, што азначае, я іду ў што пазіцыя, і я не
прапускаць любыя блокі памяці.
Так што я не перамяшчаць любыя блокі памяці.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> LUCAS: Так яна просіць, што з'яўляецца розніца паміж рабіць
гэта ці рабіць Таноса.
Адно з адрозненняў у тым, што унутр масіў 3 стварае
Масіў у стэку.
І калі я раблю Таноса, гэта стварае ў кучы.
Ці мае гэта сэнс?
>> Так як жа Таноса самай справе працуе?
Дык чаму ж мы нават трэба выкарыстоўваць Таноса?
Ваш кампілятар роду дзеячаў з усіх зменныя, якія вы абвешчаныя.
І ён стварае прастору для ўсіх з іх у стэку.
Так ўсе зменныя збіраюцца быць недзе ў стэку.
Дык вось зменныя асяроддзі.
>> Так у асноўным, месцы для гэтых зменных ў памяці вылучаецца пры
час кампіляцыі.
Дык гэта значыць, што кампутар мае ведаць усе гэтыя зменныя
загадзя.
Для гэтага не трэба ведаць, што такое значэнне вы збіраецеся пакласці ў іх.
Але для гэтага трэба ведаць, як аб'ём памяці вам трэба.
>> Але цяпер давайце скажам, што, напрыклад, вы ствараеце масіў або прымаць
Радок, вы прымаеце ад карыстальніка.
Вы не ведаеце, як доўга радок будзе, напрыклад.
Такім чынам, вы не ведаеце дакладна, колькі блокі памяці вы вылучаеце, ці не так?
>> Так што на самай справе не мае сэнсу для Вы сказаць пакласці 100 знакаў.
А што потым, калі карыстальнік піша 150?
Вы збіраецеся быць п'яным.
>> Так у асноўным, вы не можаце быць упэўненыя ў тым, як аб'ём памяці трэба вылучыць
пры кампіляцыі праграмы.
Вы проста ведаеце, што на час выканання.
Дык вось чаму ў вас ёсць куча.
Так куча будзе мець памяць што вы выдзяленні падчас
працягласць выканання праграмы.
>> Так у асноўным, калі вы робіце Таноса, што што вы робіце, вылучаючы памяць на
выканання, што азначае, што вы вырашыўшы прама ў той момант, што вы
павінны мець гэтую памяць.
Дык вось, калі вы выдзяленні яго.
Ці мае гэта сэнс?
>> Так што памятаеце, стэк мае зменныя што ствараюцца на час кампіляцыі.
А потым куча мае зменныя што ствараюцца, як вы ідзяце
з Таноса, напрыклад.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> LUCAS: Так GetString з'яўляецца буду называць Таноса.
Дазвольце мне казаць пра Таноса, і Я растлумачу GetString.
Так Таноса тое ж самае як размеркаванне памяці.
Так што гэта збіраецца вылучыць памяці ў кучы.
І ён збіраецца вяртаць паказальнік на дзе, што памяць была выдзелена ў.
>> Так што, калі вы робіце -
вось напрыклад -
н зорка паказальнік.
А потым паказальнік роўна Таноса памер цалевых раз 10.
Я ствараю паказальнік.
І тады я задаю гэтае паказальнік, каб значэнне паказальніка, што Таноса
дае мне.
>> Вось я і пытаюся Таноса вы можаце вылучыць прастору для 10 цэлых лікаў.
Вось што ён кажа.
І Таноса дае мне назад паказальнік да таго месца.
Сэнс?
ОК.
Я І GetString з'яўляецца, у асноўным, робяць патэлефанаваць у Таноса так што вы можаце вылучыць
памяці падчас выканання.
>> Заўсёды памятайце, каб праверыць наяўнасць нулявых таму Таноса збіраецца вярнуцца нуль
калі ён не можа вылучыць памяць.
Давайце выкажам здагадку, што вы просіце смешна аб'ём памяці.
Ваш кампутар не будзе магчымасць вылучаць так шмат.
>> Так Таноса толькі збіраецца вярнуцца пустым.
Так заўсёды памятаць, каб праверыць, калі паказальнік, які вы атрымалі ад Таноса з'яўляецца
нуль ці не, таму што, калі гэта, можна быць разнаймення паказальніка і
выклікаючы пабочных недахопаў.
І, нарэшце, не забудзьцеся ваша вольнай памяці.
>> Malloc стварае памяць у кучы.
І ў вас ёсць, каб вызваліць памяць перш чым праграма сканчаецца.
Добра, гэта ўсё для мяне.
На жаль, Роб.
Дзякуючы.
>> [Апладысменты]
>> LUCAS: Любы апошнія пытанні перад Роб прыходзіць?
Няма?
Да?
>> АЎДЫТОРЫЯ: я не бачыў гэты онлайн.
Вы загрузілі яго яшчэ?
>> LUCAS: Я думаю, што Дэйв загрузіўшы яго ў бліжэйшы час.
>> DAVE: Гэта будзе размешчана.
>> LUCAS: Гэта будзе ў Інтэрнэце.
>> АЎДЫТОРЫЯ: Гэта залежыць.
>> LUCAS: Гэта залежыць?
ОК.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> LUCAS: Так, вы павінны вызваліць усе памяці, які ставіцца ў кучы.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> LUCAS: Так.
Кожны раз, калі ў вас ёсць культура Таноса, вы павінны мець культуру бясплатна
пасля спынення выкарыстання гэтай зменнай.
Так Таноса і вольныя заўсёды разам.
Іх лепшыя сябры.
Так.
Роб?
>> ROB: Я пайду хутка.
А таксама відэа будзе мірыцца.
У мяне ёсць мікрафон на.
>> Такім чынам, тыдзень пяць матэрыял.
Першае, што мы маем, з'яўляецца стэк.
Таму памятайце, што ёсць толькі адзін стэк кадраў у выпадку актыўнага выкліку функцыі.
Мы ўбачым, што ў секунду.
А таксама памятаць, што ў рэчаіснасці адбываецца у кожным кадры стэка будуць
лакальныя зменныя нашых функцый, аргументы, якія перадаюцца ў нашу
Функцыі, разам з парай іншыя рэчы, якія на самай справе не
трэба турбавацца аб.
>> Такім чынам, вось прыклад праграмы, дзе, Адзначым, асноўным з'яўляецца printfing вяртанне
Значэнне Foo 4.
Foo толькі збіраецца вярнуцца Значэнне бар 4 коска 6.
І бар збіраецца ўсталяваць некаторыя мясцовыя пераменная п роўная 4 разы 6.
А потым вярнуцца н.
>> Такім чынам, давайце зірнем на стос ўсёй фактычнай ітэрацыі гэтай праграмы.
Такім чынам, ёсць падстава нашай стэка.
Памятаеце, што стэк расце ўверх.
Так у ніжняй часткі нашага стэка, мы ёсць фрэйм стэка для асноўнага.
Пры запуску праграмы, асноўнай заўсёды будзе на
Дно нашай стэка.
>> І тое, што ўнутры нашага стэк рамкі для асноўнай?
Таму, нават калі няма мясцовага зменныя ў асноўным, як я ўжо казаў,
у нас ёсць ARGC і RGV займаюць прастору ўнутры асноўнага кадра стэка.
Так галоўны цяпер збіраецца выклікаць функцыю Foo.
А гэта значыць, Foo збіраецца атрымаць свой уласны кадр стэка.
>> Так што цяпер мы ўнутры функцыя Foo.
І тое, што павінен пайсці ў кадр стэка Foo ў?
Ну, Foo мае аргументаў н.
І н роўная 4, так як гэта тое, што Асноўны праходзіць у якасці аргументу Foo ст.
>> Так што цяпер Foo збіраецца патэлефанаваць бар.
Што бар будзе мець ўнутры яго «кадра стэка?
Ён мае х, роўнае 4 Y, роўным шасці.
Гэта яшчэ не ўсё, што мы збіраемся мець ў кадры стэка, таму што бар
таксама мае лакальную зменную н.
І н мы збіраемся усталёўваецца роўным 24.
>> Так што цяпер бар збіраецца вярнуцца н.
Так бар вяртаецца 24 да стэк кадраў Foo.
І таму, што бар цяпер вяртаецца, што азначае, што мы выскокваюць кадр стэка
для бар з стэка.
Так уся памяць, што бар быў выкарыстоўваючы цяпер з стэка.
>> Цяпер, Foo таксама збіраецца вярнуцца 24 на галоўную.
Так што цяпер Foo вяртаецца памяць што Foo выкарыстаў у сваёй '
кадр стэка таксама сышоў.
А цяпер, галоўным збіраецца патэлефанаваць Printf.
Так Е з'яўляецца яшчэ адным функцыя.
Калі мы называем Printf, што гэта збіраецца быць іншы кадр стэка для Printf
выклік функцыі.
>> Што мы перадаем Printf?
Гэта тое, што збіраецца пайсці на яго кадры стэка.
Па крайняй меры, мы перадаем што адсоткаў я зваротны слэш п і
аргумент 24.
Гэта можа мець больш гэта кадр стэка калі Е, здараецца, выкарыстоўваючы некаторыя
лакальныя зменныя.
Мы не ведаем.
>> Але ўсё, што адбываецца ў Е-ых стэк кадра.
Гэта збіраецца выканаць Printf.
Тады Е робіцца.
Ён вернецца.
Нарэшце, галоўны робіцца.
Галоўная вернецца.
А потым наша праграма.
Да?
>> АЎДЫТОРЫЯ: Вы бачыце [неразборліва]
аргументы [неразборліва]
параметры?
>> Роб: Так што ёсць тонкае адрозненне паміж аргументамі і параметрамі.
І сапраўды, у агульнай кажуць, людзі, як правіла, проста змешваць іх ўвесь час.
Але параметры фармальнае назваць з рэчаў.
>> Так агдс і агду з'яўляюцца Параметры На галоўную.
Аргументы, што вы на самай справе прайсці ў якасці гэтых параметраў.
Так што, калі я тэлефаную Foo з 4, 4 з'яўляецца аргументам я перадаю цалі
А параметр п, усярэдзіне Фу, прымае значэнне 4
з 4 быў аргумент.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Н з'яўляецца лакальнай зменнай у бар.
н-ранейшаму мясцовага да Foo, але гэта параметр Foo.
Гэта не лакальная пераменная.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Foo проста выклікае бар і вяртанне безадносна бар аддачу.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Так, проста каб паглядзець, некалькі накладваць рамкі.
Да?
>> Зала: А чаму быў Foo называецца да Printf?
>> Роб: Чаму Foo выклікаецца перад Printf?
Так што я мог бы, замест гэтага, зрабіў нешта як Int х роўная Foo 4
а затым друкуецца х.
Але замест гэтага, я аб'яднаў функцыі патэлефанаваць у аргумент Е.
>> Але звярніце ўвагу, што мы не можам на самай справе ня выконваць выклік Е, пакуль мы
высветліць, што Foo 4 ёсць.
Так што мы збіраемся ацаніць гэты.
І толькі адзін раз гэта будзе зроблена збіраюцца вярнуцца і ацаніць гэта.
Да?
>> АЎДЫТОРЫЯ: Паколькі і бар [неразборліва]
значэнне, чаму б нам не мець [неразборліва]?
>> Роб: Яны цалкам павінны быць унутр.
Гэта не быў злоўлены за некалькі праходаў.
Так і павінна быць унутр бар і унутр Foo, так як абодва з іх
вяртаюцца цэлыя лікі.
Пустата, толькі калі яны не збіраюцца вярнуцца фактычныя значэння.
Да?
>> АЎДЫТОРЫЯ: Калі ў вас ёсць радок вышэй вяртанне, [неразборліва]?
>> Роб: лінія над наўзамен?
>> АЎДЫТОРЫЯ: Так.
Як калі б вы Printf і [неразборліва], б раздрукаваць два разы?
>> Роб: Так ўнутры Foo?
Калі б мы мелі Printf прама тут?
>> АЎДЫТОРЫЯ: Так.
>> Роб: Дык што, калі ў нас быў Printf права тут, было б надрукаваць адзін раз.
Так мы называем Foo раз права тут, то мы патрапілі ў Printf.
Тады мы назавем бар.
А потым Foo вернецца.
І гэта ўсё.
Мы толькі калі-небудзь сутыкацца Е адзін раз.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]
Е выкліку Foo, таму што мы спачатку называючы Printf а затым мы перадаем
аргументы.
>> Роб: Так у тэорыі, ня Е выкліку Foo?
Дык не.
Проста парадак, што з будзе выканаць гэтыя рэчы, перш чым мы зможам
выклікаць функцыю, усе аргументы да функцыі павінны
быць цалкам ацэнены.
Так як гэта цалкам ацэньваць?
Так, гэта проста радок.
Гэта проста значэнне.
>> Тады мы павінны цалкам ацаніць гэтага.
Як толькі гэта будзе зроблена, цяпер усё яго аргументы ацэньваюцца.
І зараз мы можам зрабіць патэлефанаваць у Е.
Да?
>> АЎДЫТОРЫЯ: Адно пытанне.
Калі ў вас ёсць функцыя несапраўдным, павінны ў вас ёсць зваротны коскі?
>> ROB: Вы не вяртанне коскі калі ў вас ёсць функцыя пустэч.
ОК.
Так што цяпер некаторыя куча матэрыял.
Так куча, як мы збіраемся мець справу з кіраваннем дынамічнай памяці.
І гэта наўпрост кантрастуе з стэк, які мы б назвалі аўтаматычны
кіраванне памяццю.
>> Так у стэку, вы ніколі не павінны мець справу з тым, як лакальныя зменныя
штурхаюць і выштурхваецца ўсё гэтыя кадры стэка і ўсё такое.
Вы не павінны турбавацца пра гэта.
Гэта адбываецца аўтаматычна.
Так куча ўручную.
І [неразборліва]
паступае з гэтых функцый Таноса і бясплатна.
>> Такім чынам, вось іншая праграма.
Усё, што мы робім, mallocing цэлым лікам.
Мы захоўваць яго ў зорным х.
Вядома, мы павінны праверыць каб убачыць, калі х роўна нулю.
Тады мы збіраемся проста ўсталяваць, што х паказвае на 50.
Друкуйце тое, што х паказвае на, друк х, а затым бясплатна х.
>> Так як жа гэта на самай справе будзе выглядаць калі мы паглядзім на наш стэк і кучу?
Такім чынам, мы пачнем зноў.
Дно нашай стэк, як раней.
Памятаеце, што цябе куча непасрэдна выступае супраць стэк?
Такім чынам, мы будзем мець верх нашага кучы там.
>> Такім чынам, ніжняя нашага стэка, у нас ёсць наш кадр стэка для асноўнага.
Яна мае месца для ARGC, ARGV, і мы цяпер маюць лакальную зменную х, якія
з'яўляецца унутр зорка.
Так што мы збіраемся для ітэрацыі з дапамогай гэтай праграмы.
Першае, што мы маем, заклік да Таноса.
>> Такім чынам, мы робім выклік Таноса.
Malloc з'яўляецца функцыяй.
Гэта збіраецца атрымаць кадр стэка.
Што мы пераходзе да Таноса?
Гэта збіраецца зайсці ўнутр з кадра стэка.
Мы перадаем памер п, што на 4.
Так што перадаецца Таноса.
>> Што Таноса рабіць?
Яна захоплівае нам месца на кучы.
Так што мы збіраемся пайсці ў кучы.
І мы збіраемся, каб захапіць 4 байта з кучы.
Так што давайце проста даць, што адвольны адрас.
0x123 Проста рабіць выгляд, што з'яўляецца рашэння, што з'яўляецца ў кучы.
>> Так што ж такое на самай справе ўнутры, што вобласць памяці ў адрасным Ox123?
Смецце.
Такім чынам, мы нічога не захоўваецца ў ёй.
Такім чынам, наколькі мы ведаем, гэта можа быць што заўгодна.
Вы не павінны лічыць, што гэта нулявы.
Гэта, хутчэй за ўсё, не роўная нулю.
>> Так што цяпер Malloc вяртаецца.
І што ж нам рабіць, калі Malloc вяртаецца?
Мы ўсталявалі, што яна вяртае.
Пакладзем х роўную той, што яна вяртаецца.
Дык што ж гэта вяртанне?
Гэта вяртанне 0x123 так як гэта адрас блока памяці, што яна
проста вылучаецца ў кучы.
>> Так вярнуцца 0x123 х цяпер збіраецца быць усталяваны роўны 0x123, якія, вобразна,
мы часта маляваць як х, які мае фактычны стрэлка, якая паказвае на гэтым блоку.
Але х проста захоўваць гэты адрас.
Так што цяпер мы павінны праверыць, калі х роўна нулю.
Гэта не нуль.
Мы робім выгляд, што гэта Таноса ўдалося.
>> Так што цяпер зорка х роўна 50.
Так зорка памятае гэта азначае, пайсці на гэты адрас.
Так 0x123 Мы збіраемся пайсці на гэты адрас.
Так што падводзіць нас там.
Што мы робім па гэтым адрасе?
Мы захоўвання 50.
>> Такім чынам, пасля гэтай лініі, гэта тое, што усё будзе выглядаць.
ня Так што цяпер гэта ўжо не смецце там.
Цяпер мы ведаем, што 50 заключаецца ў тым, прыватнасці адрас, таму што
мы ўсталявалі яго на гэта.
ОК?
Так што цяпер мы збіраемся друкаваць ф.
>> Такім чынам, спачатку мы збіраемся друкаваць зорка х.
Так што ж такое зорка х?
Зноў жа, зоркі х сродкі ідуць на рэч, якая х паказвае на.
Так х захоўвання 0x123 Да, што.
Мы атрымліваем 50.
Так друкаваць е, што.
А гэта значыць, што гэта збіраецца друкаваць 50.
А потым, што вяртае.
>> А то ў нас другі Printf.
Цяпер мы адсоткаў р.
Калі вы яшчэ не бачылі яго, гэта проста, як вы надрукаваць паказальнік.
Таму ў нас ёсць адсоткаў I, працэнтаў е, і ўсе тыя, якія ўжо.
Так адсоткаў р, друкаваць паказальнік.
>> Так х з'яўляецца паказальнікам.
Так што, калі мы збіраемся друкаваць х сам па сабе, Мы друкуем тое, што на самой справе ўнутры
х, які з'яўляецца 0x123 Таму першае, друк е збіраецца друкаваць +50.
Другая друк е збіраецца друкаваць 0x123 Да?
>> АЎДЫТОРЫЯ: Вы карыстаецеся адсоткаў х надрукаваць паказальнік?
>> Роб: Дык што вы карыстаецеся адсоткаў х надрукаваць паказальнік?
Такім чынам, вы можаце, але адсоткаў х проста, наогул, для, як калі ў вас ёсць некаторыя
цэлы лік, а вы хочаце надрукаваць гэта як шаснаццатковае.
Вось толькі, як ты гэта робіш.
>> Прымаючы пад увагу, адсоткаў г будзе друкаваць як дзесятковыя.
Гэта былі мы атрымаць адсоткаў г. я проста цэлы лік.
адсоткаў р спецыяльна для паказальнікаў.
>> Так х з'яўляецца паказальнікам.
Мы хочам выкарыстаць працэнтаў з.
Але працэнтаў х маглі б працаваць.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Так.
Па крайняй меры, для гэтага выкліку - так што я не ўключыць яго ў тут.
Але гэтыя два аргументу абавязкова ўнутры гэтага кадра стэка
разам з любымі лакальных зменных Е, здараецца, выкарыстоўваючы.
А потым пры наступным выкліку Printf зараз ўнутры Е кадры стэка з'яўляецца
адсоткаў р касая рыса п і незалежна ад значэнне х, якое з'яўляецца 0x123.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Гэта будзе нешта надрукаваць які выглядае наступным чынам.
>> АЎДЫТОРЫЯ: [неразборліва].
>> Роб: Так ён друкуе яго ў адраснай форме.
Падобна на тое адрасы.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Чаму што?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Чаму гэты паказальнік 4 байта?
Такім чынам, ёсць цэлая куча з 0-х гадоў перад гэтым.
Так што гэта сапраўды 0x0000000123.
На 64-бітнай сістэме, не было б цэлая куча больш нулямі.
Да?
>> АЎДЫТОРЫЯ: [неразборліва].
>> Роб: Такім чынам, першы Е збіраецца друкаваць -
>> АЎДЫТОРЫЯ: [неразборліва].
>> Роб: Так, гэта будзе друк што х паказвае на.
Зорка кажа, што гэта рэч паказваючы на.
Паказаць.
Дык што ж гэта, паказваючы на?
50.
Паказаць.
Гэта тое, што мы збіраемся друкаваць.
Прымаючы пад увагу, наступны, мы толькі друк х сабе.
Што знаходзіцца ўнутры е?
0x123.
ОК.
>> І вось, нарэшце, у нас ёсць бясплатна.
Што мы перадаем вызваліць?
Мы перадаем х.
У той час я фактычна адлюстроўваецца гэта ў кадры стэка.
>> Так мы перадаем значэнне 0x123 вызваліць.
Так што зараз бясплатна ведае, усё ў парадку, Я павінен ісці да кучы
і бясплатна, што памяць.
Гэта ўжо не выкарыстоўваюцца, што з'яўляецца па адрасе 0x123.
>> Так бясплатна збіраецца выпусціць што з кучы.
Цяпер наша куча зноў пусты.
У нас няма ніякіх уцечак памяці.
Зараз бясплатна вернецца.
Звярніце ўвагу, што х-ранейшаму 0x123.
Але гэта цяпер не дзейнічае памяці.
Мы больш не павінны разыменовать х.
Да?
>> Залы: вярнуцца 0 залішнім?
>> Роб: Ці з'яўляецца RETUREN 0 залішнім?
Так.
Мы проста пакласці, што там, таму што у нас ёсць зваротны адзін для паветра.
Так што гэта, як, ды, дазваляе ўключаць вяртанне 0.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Так пасля бясплатнай х, што адбываецца, калі мы стараемся разыменовать?
Цалкам магчыма, што ўсё ідзе не так.
Цалкам магчыма, што мы ўсё роўна атрымаеце 50.
>> Магчыма таксама, што гэтая памяць ў цяперашні час выкарыстоўваецца для чагосьці яшчэ.
Так што гэта нявызначаны паводзіны.
І не вызначана азначае нічога можа здарыцца.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Не, так што калі вы прызначаеце х на нешта іншае.
Так што, калі тут мы сказалі х роўная Таноса нешта яшчэ -
Памер Таноса падзея -
тое, што зыходны блок з памяці не вызваляецца.
І мы афіцыйна страціў яго.
Гэта значыць ўцечка памяці.
Мы страцілі ўсе спасылкі ў гэтым блоку памяці.
Так што няма ніякага спосабу, мы можам калі-небудзь вызваліць яго.
Такім чынам, затым вярнуцца 0 азначае зрабілі.
>> Добра, перапаўнення стэка.
У чым ідэя тут?
Так што памятаеце, куча ідзе ўніз.
Стэк расце.
Так што гэта быў прыклад з лекцыі, Я думаю, дзе асноўны толькі збіраецца
Выклікайце гэтую функцыю Фу, якая збіраецца называць сябе рэкурсіўна зноў і
зноў і зноў.
>> Так накладваць рамкі збіраюцца працаваць сапраўды гэтак жа.
Так што мы збіраемся пачаць з галоўнай ў якасці ніжняга кадра стэка.
Тады асноўны збіраецца патэлефанаваць Foo, які збіраецца атрымаць кадр стэка.
>> Тады Foo збіраецца патэлефанаваць Foo зноў, які збіраецца атрымаць
іншы кадр стэка.
А потым зноў, і зноў, і зноў, ня і зноў, пакуль, у рэшце рэшт, мы бяжым
ў кучу.
Так што гэта, як мы атрымліваем перапаўненне стэка.
І ў гэты момант, вы SEG няспраўнасць.
Ці вы сапраўды SEG віну перад гэтая кропка, але так.
>> АЎДЫТОРЫЯ: дампа памяці ці жа, як сегмента віне?
>> Роб: Такім чынам, вы ўбачыце, сегментацыю Ядро віна дэмпінгавых цэнах.
Вы атрымліваеце дамп, калі Вы SEG няспраўнасць.
І гэта як звалку ўсё змесціва вашай бягучай памяці, так
што вы можаце паспрабаваць і вызначыць чаму вы SEG парушанымі.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Так значыць, памылкі сегментацыі ёсць перапаўненне стэка.
Так што не абавязкова.
Сегментацыя віна азначае, што вы кранальная памяць такім чынам,
вы не павінны быць.
Так адзін з спосабаў, што гэта адбудзецца ў тым, калі Вы перапаўнення стэка, мы пачынаем кранальна
памяць такім чынам, што мы не павінны быць.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Так ўнутры бясконцага цыклу.
Маўляў, гэта як рэкурсіўнай бясконцага завесы і такім чынам мы атрымліваем яшчэ адзін
Стэк кадр кожны раз.
Але толькі ўнутры рэгулярным бясконцы час як адзін -
добра, давайце нават не друкаваць е -
нешта рабіць.
Якая розніца.
>> Мы не збіраемся атрымліваць іншы кадр стэка.
Мы проста будзем трымаць зацыкленне над гэтым адной інструкцыі.
Стэк не расце.
Гэта тое, што кожны рэкурсіўны выклік дае нам фрэйм стэка.
Вось чаму мы атрымліваем перапаўненне стэка.
Да?
>> АЎДЫТОРЫЯ: Дык што, калі вы сказалі, каб атрымаць у той час як цыкл, а затым [неразборліва]?
>> Роб: Так што калі ўнутры той час цыклу быў Е, вы ўсё роўна б
ня SEG няспраўнасць.
Я проста не хачу, каб заблытаць рэчы.
Было б пятля.
Вы атрымалі б адзін стэк кадр для Printf.
>> Тады Е вернецца.
Тады вы зноў бы цыкл.
Вы атрымалі б адзін стэк кадр для Printf.
Гэта вернецца.
Аднамесны кадр стэка.
Дык вы не атрымліваеце гэта бясконцая нагрувашчванне кадры стэка.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Так.
Так што гэта перапаўненне стэка адбываецца таму ні адзін з іх
званкі на Foo вяртаюцца.
Так што, калі мы вернемся, то мы б пачынаюць губляць кадры стэка.
І тады мы б не перапаўнення стэка.
І менавіта таму вам патрэбен базавы варыянт для вашых асабістых функцый.
Да?
>> АЎДЫТОРЫЯ: Ці з'яўляецца дадзены патэнцыйны памер і стэк для кучы ж для
усе праграмы?
>> Роб: Груба.
Ці з'яўляецца дадзены патэнцыйны памер стэка і куча аднолькавыя для ўсіх праграм?
Груба.
Існуе некаторая рандомизация па дзе пачынаецца стэка і
дзе пачынаецца куча.
Калі вам пашчасціла мець кучу глабальныя зменныя і рэчы, вы, магчыма,
адабраць у некаторага прасторы для вашага кучы.
>> На 64-бітнай сістэме, вы практычна маюць бясконцую памяць.
Там проста так шмат.
Паміж 32 біт і 64 біт, што значная розніца.
>> Вы збіраецеся атрымаць нашмат больш стэк і куча месца на 64-бітнай
Сістэма таму што проста больш адрасоў, якія яны могуць выкарыстоўваць.
Але на індывідуальнай сістэмы, ён будзе быць прыкладна такое ж колькасць стэка
і куча прасторы.
Добра.
>> Так апошняе, што з'яўляецца кампіляцыя.
Такім чынам, вы павінны ведаць, гэты працэс.
Ёсць чатыры вялікія крокі.
Такім чынам, першы варта быць лёгка запамінальным.
Папярэдняя апрацоўка.
Ён мае прэфікс папярэдне ў ім.
Так справа даходзіць да ўсяго астатняга.
>> Важна памятаць, хэш.
Так хэш вызначае і хэш ўключае ва ўсіх тых.
Гэта ўсё папярэдне працэсар дырэктывы.
Гэта тыя рэчы, што препроцессор клапоціцца аб.
>> Такім чынам, што ж препроцессор рабіць?
Гэта сапраўды нямы рэч.
Усё гэта здольна да ўсё з іх капіяваць і выразаць і ўстаўляць аперацыі.
>> Так хэш ўключае стандартны i0 кропка ч.
Што гэта робіш?
Гэта захоп стандартны i0 кропка г файл і ўставіць яго ў верхняй
там, дзе яна кажа хэш ўключае Стандарт i0 кропка ч.
>> І любы хэш вызначыць, што мы відаць, што гэта за справы?
Яго капіявання значэння, што хэш вызначаецца вызначаецца як і ўстаўка, што
ўсюды, дзе вы выкарыстоўваеце значэнне.
Так препроцессор проста робіць сапраўды просты тэкставы аснове аперацый.
Ён нічога не робіць смарт.
Так усё астатняе Чым складаней.
>> Так што цяпер препроцессор зроблена, мы на самай справе кампіляцыі.
Такім чынам, што ж компилирование на ўвазе?
Цяпер мы збіраемся ад З-код у асэмблеры.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Так, мы злавілі гэтага.
Так кампіляцыі.
Мы збіраемся ад з да зборкі.
Так што гэта фактычнае змена мовы.
Кампіляцыя сябе азначае пераход ад мова больш высокага ўзроўню, каб
мова нізкага ўзроўню.
>> І з гэта мова высокага ўзроўню у параўнанні са сходу.
Што такое зборка?
Яго інструкцыі, якія, у значнай шмат, зроблена для вашага працэсара.
Але кампутар усё яшчэ робіць не разумею зборкі.
Гэта разумее толькі нулі і адзінкі.
Так што наступны крок гэта зборка, якая прыводзіць нас ад гэтых інструкцый,
ваш працэсар разумее і фактычна перакладае іх, каб
тыя, і нулі.
>> Так C да зборкі ў двайковы фармат.
Але ў мяне няма выкананы яшчэ.
Так што думайце бібліятэкі CS50.
Мы падалі вам двайковага для гэта CS50 бібліятэка, якая мае GetString
і GetInt і ўсё такое.
>> Але бібліятэка CS50 -
само па сабе - не з'яўляецца выкананым.
Гэта не мае асноўную функцыю.
Гэта проста куча двайковы што вы можаце выкарыстоўваць.
Так звязванне, як мы сабраць разам усе з гэтых розных бінарных файлаў
у рэальны выкананы файл.
Той, які вы можаце ўвесці кропка слэш кропку па-за.
>> Так што гэта, як файл, які вы пісаў, - усё, што ваша праграма -
Цэзар кропка з.
Але цяпер гэта быў складзены да двайковы.
Так Цэзар кропка а.
І гэта нашы CS50 бібліятэкі бінарны.
І яны спалучаючыся ў адзін выкананы файл.
Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Такім чынам, спачатку ўключаюць, памятаеце, хэш ўключаюць на самай справе
препроцессор крок.
Але гэта асобная.
Калі вы не карыстаецеся любыя функцыі, якія знаходзяцца за межамі вашага адным файле, то,
няма, вам не трэба перайсці па спасылцы нічога паколькі ў вас ёсць усё.
>> Тым не менш, Е ў цяперашні час звязаны цалі
Калі вы калі-небудзь выкарыстоўваць Printf, гэта тое, што , Які павінен быць звязаны ў
таму што вы не пішаце, што.
І на самай справе, Е аўтаматычна звязаныя цалі
Вы ведаеце, як у камандным радку ці калі ўводзе зрабіць, вы бачыце, што ёсць
працяжнік л CS50, які мае спасылку ў бібліятэцы CS50?
Printf, і ўсё ў такім духу, што адбываецца , Звязаныя аўтаматычна.
Любыя іншыя пытанні аб чым-небудзь?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Роб: Сувязь?
У нас ёсць цэлы букет розныя бінарныя файлы.
Гэта кананічны прыклад што мы выкарыстоўваем гэта бібліятэка CS50.
Мы сабралі і дадзена вам у двайковы для гэтага CS50 бібліятэкі.
>> Вы хочаце выкарыстоўваць GetString ў вашай праграме.
Дык вы ідзяце і выкарыстоўваць GetString.
Але без майго двайковым кодзе для GetString, пры кампіляцыі кода
ўніз, вы не змаглі запусціць свой Праграма таму GetString Радок
яшчэ не цалкам вызначаны.
>> І толькі калі вы звязваеце ў маёй двайковы які змяшчае GetString, што зараз, усе
Добра, я магу на самой справе выканаць GetString.
Мой файл завершана.
І я магу запусціць гэты.
Да?
>> АЎДЫТОРЫЯ: Ці ёсць сувязь пераўтварыць двайковы да выкананых?
Так што нават калі ў вас няма сябра бібліятэкі, не было яшчэ быць
Неабходна перавесці [Неразборліва]?
>> Роб: Так выкананым па-ранейшаму ў двайковай сістэме.
Гэта проста аб'яднанне цэлае куча выкананых файлаў.
>> АЎДЫТОРЫЯ: Вялікі дзякуй.
>> Роб: Няма праблем.
Любыя іншыя пытанні?
У адваротным выпадку, мы ўсё гатова.
Добра.
Дзякуючы.
>> [Апладысменты]
>> Залы: Дзякуй.
>> Роб: Так.