>> СПІКЕР 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, C о, падкрэсліваюць, працяжнік, і
нічога падобнага.
І ён адлюстроўвае, што ў значэнне ASCII.
Значэнне ASCII гэта проста лік, што можна зразумець, кампутары.
І гэтак жа, як вы можаце зрабіць даданне і адніманне з лікамі, вы можаце зрабіць
іх са значэннямі ASCII.
>> Такім чынам, у гэтым прыкладзе, што гэта будзе раздрукаваць?
Так, так проста прастору B прастору C прастору D. Дзе мая мыш ісці?
Звярніце ўвагу, вы можаце вызначыць Int на 65.
І пры друку, што з дапамогай адсоткаў C, гэта будзе інтэрпрэтаваць, што, як
характар ​​і раздрукуюць А.
>> Акрамя таго, вы можаце абвясціць гэта як сімвал.
І калі вы раздрукаваць яго з дапамогай адсоткаў C, гэта будзе інтэрпрэтаваць, што, як
адсоткаў D. І гэтак жа, як вы можаце дадаць лік, вы можаце дадаць сімвалы
Значэння ASCII, у гэтым выпадку.
>> Так трохі паказальнік для ўсіх.
5, у выглядзе радка, ня фактычна роўная 5.
Так як мы можам пераўтварыць Радок 5 да цэлага 5?
Любыя ідэі?
Так.
>> Так што, калі ў нас ёсць 5 у выглядзе радка, мы можам адняць 0.
І што дасць нам 5.
І сапраўды гэтак жа, калі ў нас ёсць 5 як цэлае, дадаць, што ў радок 0.
І гэта дае нам радок 5.
Прахладны.
>> Цяпер успомніце назад у лекцыі той, дзе мы гаварылі пра алгарытмаў.
Так як жа мы на самай справе хочам кампутар каб рабіць цікавыя рэчы?
Вы ведаеце, проста складанне і адніманне нумары і друку рэчы з ня
што цікава.
Як правіла, мы хочам, каб наш кампутар да выконваць свайго роду алгарытм.
Што-то крыху больш складана чым проста просты арыфметыкі.
>> Алгарытм проста крок за крокам набору інструкцый для выканання, як
пэўны task--
гэтак жа, як рэцэпт.
Магчыма, вы памятаеце першы дзень Клас, дзе Давід Падлічым нумар
людзей і колькі людзей былі ў пакоі.
Вы маглі б быць выкарыстаны для падліку адзін за адным.
1, 2, 3, 4.
У гэтым выпадку лінейны алгарытм часу.
>> Але Давід ўвёў алгарытм Вы злічыць людзей у нумары
дзе ўсе ўстаюць, вы Прамоўце Лік іншай асобе, дадаць, што
лік, і адзін чалавек садзіцца.
І вы паўтарыць гэта.
Гэта адзін тып алгарытму.
Мы можам прааналізаваць, як эфектыўна ап Алгарытм заснаваны на гэта падчас выканання.
Але мы пагаворым крыху пра гэта крыху пазней.
>> Такім чынам, усе алгарытмы могуць таксама запісаць у псевдокоде.
ПСЕВДОКОД проста англійская як сінтаксіс, які выкарыстоўваецца для прадстаўлення
мова праграмавання.
Напрыклад, калі мы хацелі спытаць карыстальніка адгадаць мой любімы нумар, мы
псевдокод можа мець як такой.
>> Атрымаць карыстальнікі думаю.
Калі здагадка дакладная, сказаць ім, яны маюць рацыю, інакш сказаць ім
яны не правільна.
І псевдокод гэта спосаб лёгка прадстаўляючы ідэю або алгарытм.
Так што цяпер мы маглі б на самай справе пісаць гэта на мове, што кампутар
маглі б разуменне.
Такім чынам, мы можам запісаць наш псевдокод і інтэрпрэтаваць, што ў зыходным кодзе.
>> Пакуль, зыходны код павінен прытрымлівацца ў пэўнай сінтаксісам
мова праграмавання.
І да гэтага часу, у CS50, мы выкарыстоўвалі ў асноўным у.
Так што гэта можа быць зыходны код у.
Пазней у ходзе, вы ноччу прыходзяць у кантакт з іншымі праграмавання
Мовы, як PHP.
Ці, калі вы нават прымаць іншыя класы, вам можа зрабіць Java, Python, ці нават OCML.
Але ў нашай мове з праграмы, гэта як мы маглі б напісаць зыходны код для
алгарытм псевдокод, што Я толькі што апісаў раней.
>> Так як жа ваш кампутар на самай справе зразумець, што?
Як я ўжо казаў, гэта толькі сапраўды разумее нулі і адзінкі.
Так, як гэта атрымаць ад крыніцы Код да таго, што можа быць
зразумеў?
Ну, у нас ёсць што называецца кампілятар.
>> Калі вы памятаеце таму ў большасць psets, вы былі нейкія праграмы
напісана ў кропка C File.
І тады вы павінны ўвесці марку.
Дык што ж рабіць рабіць?
>> Вы можаце ўвесці марку, каб кампіляваць Праграма таму someone--
той, хто напісаў свой р набор; верагодна David--
стварыў зрабіць файл.
І што кажа зрабіць, каб ведаць, каб запусціць свой кампілятар, называецца звон, што воля
скампіляваць зыходны код аб'екта Код, які нулі і адзінкі
што ваш кампутар разумее.
Але крыху пазней, мы пойдзем больш падрабязна аб кампілятараў.
>> Так ўспомніць PSET 0, where-- так, ў вас ёсць пытанне?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> СПІКЕР 1: Так.
Я думаю, што яны на самой справе павінны быць онлайн.
Так.
>> АЎДЫТОРЫЯ: Гэта як [неразборліва]?
>> СПІКЕР 1: Гэта не так.
Знаходзяцца на cs50.net/quizzes.
>> АЎДЫТОРЫЯ: Slash віктарыны, слэш 2013, слэш 0, і проста націсніце праз
віктарыны 2013 і віктарыны 0, перагледзець раздзел слайды.
>> СПІКЕР 1: Так, так што калі вы, хлопцы, жадаеце пацягніце яго ўверх і паглядзець на яго на вашым
уласны кампутар, гэта таксама добра.
Сказаць, што зноў.
>> АЎДЫТОРЫЯ: [неразборліва].
>> СПІКЕР 1: Так, [неразборліва] з'яўляецца фіктыўная пераменная.
О, так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дынамік 1: Не, забастоўкі ня на экзамене.
На жаль, яе пытанне было, быў ўдары па іспыту.
І гэта не так.
Так PSET 0, вы, хлопцы, павінны мець усе рэалізаваны небудзь праз драпіну.
І мы даведаліся некаторыя асновы праграмавання будаўнічыя блокі, якія выкарыстоўваюць драпіны.
>> Такім чынам, давайце зірнем на некаторыя з гэтых будаўнічых блокаў
, Якія складаюць праграму.
Упершыню гэта лагічны выраз.
Лагічныя выразы з'яўляюцца тыя, і 0-х ці ўсё, што мае
два магчымых значэння.
У гэтым выпадку, сапраўдным або ілжывым, або выключыць, і так ці не.
Прыклад просты, вельмі просты, праграма, якая выкарыстоўвае лагічны
выраз тут.
>> Так для таго, каб лагічных выразаў у быць карысна, у нас ёсць лагічныя аператары.
Гэтыя аператары, якія можна выкарыстоўваць параўнаць пэўныя значэння.
Таму ў нас ёсць і ці не роўна, менш або роўна, або больш, чым
роўныя, і менш, чым або больш, чым.
Але гэтыя аператары не вельмі карысна калі мы не можам аб'яднаць іх у
ўмовы.
>> Так вы, хлопцы, памятаеце з нуля і з вашага р ўсталёўвае, што мы
было ўмовы.
Яны, па сутнасці, як відэльцы ў логіка вашай праграмы, што
выконвае ў залежнасці ад таго ўмова выконваецца.
Так адным з умоў, якія мы мелі выкарыстоўваць шмат разоў у гэтым курсе
калі, то ў іншым месцы, калі, і ў іншым месцы ўмовы.
>> Вось прыклад таго, як Вы маглі б выкарыстоўваць гэта.
Хто-небудзь ведае розніцу паміж толькі з дапамогай калі заявы ўсіх
аж вершах, калі, яшчэ, калі, і яшчэ ў спалучэнні?
Так?
>> АЎДЫТОРЫЯ: [неразборліва].
>> СПІКЕР 1: Точно.
Так што, калі ў мяне было, калі ўсё, аж гэтым чынам, нават калі гэта ўмова вяртання
праўда, ён усё роўна будзе працягваць тэставання ў бліжэйшыя два.
У той час як, з яшчэ-калі, да ELSE асабістых дадзеных, калі адзін вяртае ісціну,
астатнія не правяраў.
Любыя пытанні аб тым, што?
Прахладны.
>> Такім чынам, вы карыстаецеся, калі-інакш з ELSE заяву, калі вы ведаеце, што ён можа толькі
быць адным з гэтых выпадкаў.
Такім чынам, мы ведаем, калі х менш 0, гэта дакладна не будзе
больш, чым 0.
>> Далей, яшчэ адным будаўнічым блокам што мы даведаліся з'яўляюцца завесы.
У нас ёсць тры тыпу цыклаў.
Для завес, у той час як завесы, і зрабіць у той час як завесы.
І ўвогуле, калі вы садзіцеся ў нешта напісаць, вы павінны вырашыць,
які з трох вы хочаце выкарыстаць.
Так як жа нам вырашыць, які?
>> Мы наогул выкарыстоўваем для цыклу, калі мы ведаем, колькі разоў мы хочам ітэрацыі
праз тое ці колькі разоў мы хочам, каб выканаць задачу.
Мы выкарыстоўваем у той час як завесы, калі нам патрэбныя стан, каб быць праўдай, каб працягваць працаваць.
І мы выкарыстоўваем зрабіць у той час як вельмі падобны на у той час як, але мы хочам, каб наш код для запуску на
меры адзін раз.
>> Так што ў той час, усё, што знаходзіцца ў волю заўсёды выконваюцца хоць бы адзін раз.
У той час як, з той час, яго не можа працаваць наогул, калі
ўмова не выканана.
Любыя пытанні з гэтым?
>> Так структура для цыклу.
Вы, хлопцы, усе бачылі гэта.
Вы ініцыялізаваць яго.
У вас ёсць свайго роду стане.
Так, напрыклад, мы маглі б ініцыялізаваць як для я роўная 0.
я менш за 10.
І я ++.
Вельмі просты, што мы зрабілі.
>> Некаторы час цыклу, гэтак жа, у вас ёсць мець свайго роду ініцыялізацыі,
свайго роду стане, і свайго роду абнаўлення.
Так што мы можам рэалізаваць нашы цыкле таксама як час цыкла з дапамогай гэтага.
І сапраўды гэтак жа з спраў у той час як завесы, мы маглі б мець некаторую ініцыялізацыю,
выканаць тое, абнавіць яго, і Затым праверце стан.
>> Так што цяпер функцыі.
Ставім ўсе разам.
Мы, магчыма, захочаце напісаць некаторыя выгляд функцыі.
Агульныя функцыі, якія вы, магчыма, ўжо бачылі гэта галоўны.
Асноўны з'яўляецца функцыяй.
Ён мае тып якое вяртаецца значэння, унутр.
Ён мае імя функцыі, асноўны.
І яна мае аргументы, ARGC і ARGV.
Так галоўны гэта проста функцыя.
>> Іншыя функцыі, якія вы выкарыстоўвалі, printf-- Е з'яўляецца function--
GetInt, ToUpper.
Але гэта, аказваецца, быў рэалізаваны для нас
свайго роду бібліятэкі.
Калі вы, хлопцы, памятаеце уключаючы гэтая бібліятэка CS50.h або
Стандарт I / O бібліятэка.
Так, пытанне?
>> Залы: асноўны проста ўласціва з?
Ці мае гэта толькі часткова [неразборліва]?
>> СПІКЕР 1: Пытанне ў тым, калі галоўны ўласцівая ст.
І так, усё функцыі значыць асноўную функцыю.
Гэта свайго роду неабходныя для кампутара ведаць, з чаго пачаць
выканання кода.
>> АЎДЫТОРЫЯ: Дык вы не захацелі [неразборліва]?
>> СПІКЕР 1: N:
Яшчэ пытанні?
Прахладны.
Гэтак жа, як вы можаце выкарыстоўваць функцыю што напісана для вас, вы можаце таксама
напісаць сваю ўласную функцыю.
Гэта функцыя, што хто мог бы напісалі для разліку аб'ёму
з д, напрыклад.
Там у які вяртаецца тып тут, у гэтым выпадку Int, наша імя функцыі д і нашы
Спіс параметраў.
>> І звярніце ўвагу, што ў вас ёсць, каб запісаць дадзеныя тып параметру, які патрабуецца
выкарыстоўваць або функцыя не ведаць, якія
параметр павінен я быць прыняцце.
Так, у дадзеным выпадку, мы хочам цэлае, як наш ўваход.
Дык чаму можа мы хочам выкарыстоўваць функцыі?
>> Перш за ўсё, выдатна падыходзіць для арганізацыі.
Яны дапамагаюць разбіць свой код у больш арганізаванай кавалкі і зрабіць
яго было прасцей чытаць.
Спрашчэнне.
Гэта добра для дызайну.
Калі вы чытаеце кавалак кода і асноўная функцыя сапраўды,
вельмі доўга, гэта можа быць складаней Прычына пра тое, што адбываецца.
Так што калі вы разбіць яго на функцый, гэта можа быць больш зручным для чытання.
І паўторна-здольнасць.
Калі ў вас ёсць кавалак кода, які быўшы называецца або запусціць некалькі разоў,
замест перазапісу, што код 10 разоў у асноўнай функцыі, вы маглі б
хочаце выкарыстоўваць яго.
І тады кожны раз, вы павінны выкарыстоўваць, што кавалак кода, выклікаць функцыю.
>> Так што цяпер, калі мы ўспомнім, назад нуля, мы таксама казалі пра некалькі канцэпцый,
адзін з якіх разьбы.
Тэма з'яўляецца паняцце кратнага паслядоўнасці кода
выкананне адначасова.
Так ўспомніце дня, дзе Дэвід быў Вы, хлопцы, адлічыць колькасць
людзі ў пакоі.
>> Па сутнасці, што адбываецца на ўсе з вас, хлопцы былі
працуе асобныя патокі.
І гэтыя тэмы ішлі разам каб атрымаць свайго роду адказ.
Сапраўды гэтак жа ў пустым, калі ў вас ёсць некалькі спрайты, можа
ёсць котка і сабака.
І яны былі б адначасова працуюць ўласныя скрыпты.
Гэта з'яўляецца прыкладам разьбы.
>> І іншае паняцце, што было уведзены ў пустым была падзеі.
І падзеі, калі некалькі частак ваш код мець зносіны адзін з адным.
У нуля, гэта было, калі вы выкарыстоўвалі кантроль і вяшчання Калі я
Атрымаеце блокаў.
>> А таксама, у задачы Набор 4, мы бачылі трохі падзей, а таксама.
Вы, хлопцы, маглі б выкарыстоўваць Бібліятэка Gevent.
І была функцыя waitForClick у якім вы чакалі
для карыстальніка, каб націснуць кнопку.
І ваш пстрычка, у гэтым выпадку, было б падзей і чакаць клік гэта ваш
апрацоўшчык падзей.
>> А таксама, па ўсёй паказ psets і працуе на вашых psets, вы
магчыма, ўступаюць у кантакт з Некаторыя з гэтых каманд.
Гэта тое, што вы набралі ў ваша акно тэрмінала або што акно
што з'яўляецца на вашым г праўку, істотна перайдзіце кампутар.
>> Так, напрыклад, LS пералічвае змесціва каталога.
Стварэнне каталога стварае новую тэчку.
CD, змяніць каталог.
RM, выдаліць, выдаляе файл ці некаторыя каталог.
А потым выдаліць каталог выдаляе каталог.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> СПІКЕР 1: Так, вядома.
На жаль, пытанне было, калі вас б прапанаваць пакласці гэта
на шпаргалку.
Гэта магло б дапамагчы.
Калі ў вас ёсць нумар, вы можаце паставіць яго на.
Гэта таксама проста, як правіла досыць добра запомніць, таму што, калі вы выкарыстоўваеце яго
Вы маглі б хацець проста значыць ён запомніў.
Гэта зробіць вашу жыццё нашмат прасцей.
Я адказаў на ваша пытанне?
>> Так што цяпер, мы крыху пагаварылі коратка пра бібліятэкі.
Але два галоўных тыя, якія мы былі выкарыстоўваючы да гэтага часу ў ход ідуць
стандарт ўводу / высновы і CS50.
Якія рэчы ўключаныя у стандартнай бібліятэцы ўводу / высновы?
>> Так, да гэтага часу мы выкарыстоўвалі Printf.
У CS50, мы выкарыстоўвалі GetInt і GetString.
І тып дадзеных радок таксама адбываецца , Які быў абвешчаны ў гэтым CS50 бібліятэкі.
Мы пагаворым яшчэ трохі ў глыбіні аб як бібліятэкі працуюць і як яны
ўзаемадзейнічаць з астатняй часткай кода.
Але тыя, з'яўляюцца двума асноўнымі тыя, якія мы ўступаюць у кантакт з да гэтага часу ў
Вядома.
>> Віды.
Гэта добра, каб памятаць, колькі кожны тып прадстаўлены ці як
колькасць байт кожны тып requires--
Int, 4 байта; сімвал, 1 байт.
Паплавок складае 4 байта.
Што такое двайны?
>> АЎДЫТОРЫЯ: [неразборліва].
>> СПІКЕР 1: Так, так паплавок але падвоіць памер.
А як наконт тых часоў?
>> АЎДЫТОРЫЯ: [неразборліва].
>> СПІКЕР 1: OK.
Што такое доўга?
>> АЎДЫТОРЫЯ: [неразборліва].
>> СПІКЕР 1: Так, два разы на Int.
Так.
>> АЎДЫТОРЫЯ: [неразборліва].
>> СПІКЕР 1: Лонг [неразборліва].
А потым доўга доўга удвая больш, чым.
>> АЎДЫТОРЫЯ: Не, няма.
Доўгая проста унутр.
Гэта залежыць ад архітэктуры да [неразборліва]
і Int маюць аднолькавы памер.
[Неразборліва].
>> СПІКЕР 1: Так доўга і Int аднолькавыя.
А потым вельмі доўга ўдвая унутр.
Прахладны.
І потым, што гэта апошні тып?
>> АЎДЫТОРЫЯ: Паказальнік.
>> СПІКЕР 1: Так, так мы даведаліся Крыху пра паказальнікаў.
І незалежна ад таго, паказальнік паказваючы to-- яго можа быць знак зоркі
або Int star--
гэта заўсёды 4 байта для паказальніка.
Пытанні аб тым, што?
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> СПІКЕР 1: Так доўга і Int з'яўляюцца тое ж самае ў гэтым CS50 прылады.
>> АЎДЫТОРЫЯ: Прыбор цалкам ўзаемазаменныя.
>> СПІКЕР 1: Так.
Так потым доўга доўга двайны унутр.
>> АЎДЫТОРЫЯ: Гэта 32 біт?
>> СПІКЕР 1: 32 біт, так.
>> АЎДЫТОРЫЯ: Так [неразборліва]?
>> СПІКЕР 1: Так, калі гэта не так відавочна кажуць, вас
павінны ўзяць на сябе 32 біт.
>> АЎДЫТОРЫЯ: Было б нешта сказаць як мяркуючы
Архітэктура як прыбора.
Для 64-бітнай, толькі тое, што Змена з'яўляюцца прагне і паказальнікі.
Як яны [неразборліва].
>> СПІКЕР 1: Да?
>> АЎДЫТОРЫЯ: Вопрос.
Так на адным з практыкі віктарыны, ён просіць аб непадпісаным Int.
Так як жа, што вызначаецца ад Int [неразборліва]?
>> СПІКЕР 1: без знака у таксама 4 байта.
Але чым адрозніваюцца падпісаны Int і без знака Int?
>> АЎДЫТОРЫЯ: [неразборліва].
>> СПІКЕР 1: Права.
Можна ўявіць адмоўныя значэння.
Але як гэта зрабіць?
>> АЎДЫТОРЫЯ: [неразборліва].
>> СПІКЕР 1: Так, гэта эканоміць 1 біт для прадстаўлення знака.
Падпісаны мае адзін біт, што ўяўляе сабой знак.
І без знака проста ўсе станоўчыя.
>> АЎДЫТОРЫЯ: ОК.
Дык вы кажаце, што нумар на дваіх чалавек у два разы больш паплаўком?
>> СПІКЕР 1: Двухмесны ў два разы Памер цэлага, так.
>> АЎДЫТОРЫЯ: Як паказальнік каб доўга доўга [неразборліва]?
>> СПІКЕР 1: Такім чынам, пытанне ў тым, як робіць паказальнік на доўгі long--
Як гэта толькі чатыры байта, калі вельмі доўга яе 8 байт.
Так што памятаеце, што гэта паказальнік, па сутнасці справы, на вельмі базавага значэння.
>> АЎДЫТОРЫЯ: [неразборліва].
>> СПІКЕР 1: Так, так паказальнік гэта проста вочка памяці.
Так што не мае значэння, як шмат месца што паказальнік накіраваны ў.
Гэта неабходна толькі 4 байта, каб адсочваць з гэтай вочка памяці.
Яшчэ пытанні?
Прахладны.
>> Так апошняе, што ў мяне ёсць выкарыстоўваецца стандартны вывад.
Вы павінны выкарыстоўваць іх часта Дастаткова таго, што вы можаце ўспомніць.
Але гэта, калі мы выкарыстоўваем Е, напрыклад.
І ў нас ёсць гэтыя запаўняльнікі, называліся коды фармату.
>> Так працэнтаў з гольца, адсоткаў я для міжнар, і мы можам таксама выкарыстоўваць працэнтную в.
Гэта тое ж самае.
Але, як правіла, у CS50 мы паспрабуйце выкарыстоўваць працэнтную I.
Працэнт е для паплаўка.
Працэнт Л.Д. доўга доўга і адсоткаў з для радка.
>> Сапраўды гэтак жа, мы выкарысталі некалькі гэтыя кіраўнікі паслядоўнасці.
Напрыклад, зваротны слэш н для новай лініі.
Гэта проста, калі вы фарматаванне ваш код для друку ф.
Так?
>> АЎДЫТОРЫЯ: Што такое адсоткаў сут на працягу?
>> СПІКЕР 1: Такім чынам, пытанне з'яўляецца тое, што адсоткаў сут на працягу?
Працэнт г для цэлых лікаў.
Працэнт D і I адсоткаў аднолькавыя.
>> АЎДЫТОРЫЯ: У чым розніца паміж зваротны слеш н і зваротны г?
>> СПІКЕР 1: Такім чынам, пытанне ў чым Розніца паміж люфта п і
люфт г?
Я думаю, зваротнай касой р is--
>> АЎДЫТОРЫЯ: Так зваротны слеш г ўсяго толькі мае на ўвазе, вяртаецца ў пачатак радка
фактычна не збіраюся з новага радка.
Так што, калі вы друкуеце зваротнай касой г і вы вярнуцца да пачатку радка
затым раздрукаваць больш матэрыялу, перазапісу матэрыял, які ўжо на
[Неразборліва].
У той час як, н фактычна ідзе на новы лініі і ідзе ў [неразборліва].
>> СПІКЕР 1: Ну, любыя іншыя пытанні?
Добра.
Я збіраюся перадаць яго далей, каб Дэн, які будзе працягвацца.
>> [Апладысменты]
>> Дэн: Усе правша.
Так што я буду казаць пра іншую шырынёй Дыяпазон ідэй з класа, якія
прыкладна прадстаўнік тыдні два і пачатак тры тыдні, пачынаючы з
з ліцця, які проста спосаб лячэння значэнне пэўнага тыпу, як
значэнне іншага тыпу.
Такім чынам, мы можам зрабіць гэта з знакаў у Інтс, ўсплывае на цэлых лікаў, і
доўгія прагне падвоіць.
>> Усе гэтыя рэчы можна выкарыстоўваць у якасці спосабаў лячэння некаторы лікавае значэнне
мінус сімвал, як некаторыя іншыя лікавае значэнне.
Такім чынам, ёсць некаторыя пытанні, з гэтым, з Вядома, якіх прыходзіць, калі вы прыводзіце
рэчы, як паплавок на цэлых лікаў.
Так што гэта крыху дзіўна.
У нас ёсць паплавок, які з'яўляецца 1,31.
Памножым яго на 10 тысяч.
А потым мы друкуем яго ў якасці міжнар.
Што гэта выйсце?
10000 раз 1,31.
Так 13000, у тым, што адгадаць?
>> Залы: Я думаю, што гэта 10000.
>> Дэн: Так што я памножыўшы яго на 10 тысяч да Я ліцця яго.
>> АЎДЫТОРЫЯ: Ох.
Не было там быць адзін 9 і некаторыя 0 лічбы?
>> Дэн: Вы, магчыма, некаторыя дзіўныя лічбы.
Так правільна, гэта ў 1,3 разы 10000.
Дык вось 13000.
І гэты дадатковы weird--
>> АЎДЫТОРЫЯ: 13100.
>> Дэн: 13100.
Дзякуй, Боб.
І гэты дадатковы weirdness--
гэта 9,9--
проста таму, што гэтага ліцця скончыў акруглення ўніз, дзе
яно не павінна быць.
Так.
>> АЎДЫТОРЫЯ: ліццё адбываецца пасля ўсё астатняе?
>> Дэн: Так таму што ў мяне гэта ў друку, гэта робіць гэты множанне перад ім
робіць гэты кастынг.
>> АЎДЫТОРЫЯ: [неразборліва].
>> Дэн: Я думаю, што гэта паставіць пад першым, ды, які будзе 10000.
Што яшчэ?
Прахладны.
Так што гэта 13099.
Чаму гэта адбываецца?
Недакладнасць.
>> Паплаўкі не ідэальныя.
Яны могуць толькі прадстаўляць ліку ў пэўную колькасць ўважаецца лічбаў.
Так што, калі мы раздрукаваць 8 SIG інжыр на гэта паплавок, мы атрымліваем свайго роду
пачварны погляд нумар.
І гэта таму, што 1,31 не можа дакладна быць прадстаўлены просты
ступенямі двойкі ў машыне.
Так што ў рэшце рэшт прымаючы бліжэй думаю, што ў канчатковым выніку
быць крыху нізка.
Сэнс?
ОК.
>> Зараз, перайшлі ў іншы спосаб робіць ўмоўныя аператары, дзе ўсё
мы клапоцімся аб тым, адна пераменная.
Такім чынам, у гэтым канкрэтным прыкладзе, мы атрымліваючы цэлы лік ад карыстальніка.
А потым мы глядзім на што гэта цэлае з'яўляецца.
Як мяркуецца, гэта лік ад аднаго да чатырох.
Гэта тое, што мы просім.
>> Такім чынам, вы зрабіць перамыкач імя зменнай.
Тады вы стварылі выпадкі можна шануе гэта магло быць.
Так выпадку, калі адзін, кажуць, што гэта нізка.
І тады вы парушыце выйсці стану перамыкача, так
Вы не працягваць.
>> У наступным case--
так справа два і справа three--
калі гэта справа два ён проста падае да Першы радок кода ён бачыць, як з
трехмодовом, пакуль не ўбачыць перапынак.
Так што прычына вы атрымліваеце выпадак адзін на толькі друк нізкі таму, што I
ёсць гэты перапынак тут.
Калі я, скажам, ігнараваць гэты break-- калі я кінуў гэтую breakaway--
было б надрукаваць нізкі, і тады было б друкаваць сярэдзіну, і тады было б зламіць.
>> Так перапынкі з'яўляюцца важнай часткай з пераключэння ўмовы і
яны павінны быць там.
Любыя выпадкі, якія відавочна не агаворана апрацоўваюцца па змаўчанні
Справа ў камутатары і павінны быць пададзеныя.
>> АЎДЫТОРЫЯ: Так 1, 2, 3, і 4 будзе н?
>> Дэн: Значэнні, н можа быць.
Так.
Так?
>> АЎДЫТОРЫЯ: Такім чынам, калі ў вас ёсць што [неразборліва]?
>> Дэн: Вы б надрукаваць нізкі, а затым было б надрукаваць сярэдзіну, і
то было б зламіць.
>> Зала: А чаму б раздрукаваць сярэдні калі [неразборліва]?
>> Дэн: Так што ўсё пад выпадку да перапынку трапляе пад.
Так справа адзін прынт пад выпадак адзін, як гэта наступныя друкаваныя.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Так гэты лік толькі прыватным значэнне, гэтая пераменная
можна ўзяць, ці не так?
Ці мае гэта сэнс?
Так.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Так, справа два будзе друкаваць сярэдняга, а затым разбіць.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Я думаю, што любы?
Якія яшчэ тыпы дадзеных Вы можаце перайсці?
>> АЎДЫТОРЫЯ: Вы можаце перамыкацца ў адносінах да любых тыпах дадзеных.
Але гэта значыць толькі нічога над сімвалаў і Інтс і ўсё ў такім духу, што, паколькі
калі вы пераключэнні паказальнік што на самой справе не мае сэнсу,
пераключэння нагрузак, калі ён нават давайце Вы робіце гэта, таму што з якая плавае кропкай
у дакладнасці, вы не будзеце сапраўды хачу зрабіць гэта ў любым выпадку.
Так у значнай ступені, усяго Інтс і сімвалы і ўсё ў такім духу.
>> Дэн: Так, гэта калі ў вас ёсць відавочнае значэння, што вы ведаеце, я думаю, што, можа быць
што пераход на самай справе карысна.
Добра?
ОК.
>> Сфера з'яўляецца дыяпазон, што заявіў пераменная распаўсюджваецца.
Такім чынам, у гэтай маленькай кавалак кода ў мяне ёсць, было б поўна памылак.
А прычына ў тым, я абвясціў гэтую Int я ў рамках гэтага цыкла.
А потым я спрабую спасылацца, што я за межамі, што для сферы завесы.
>> Так у асноўным, вы можаце думаць аб рамкі як усе, што вы аб'яўляеце
з ўнутры набору фігурных дужках толькі існуе ў тых фігурныя дужкі.
А калі паспрабаваць і выкарыстоўваць гэтую зменную за межамі тых фігурныя дужкі, вы будзеце
атрымаеце памылку ад кампілятара.
Так?
>> АЎДЫТОРЫЯ: Так што гэта адзін не працуе?
>> Дэн: Гэта не працуе, так.
Радка.
Радок сімвал *.
Яны сапраўды гэтак жа.
Яны проста паказальнікі на знакі.
І любыя радкі, якія вы павінны павінны скончыцца з зваротнай касой рысы нулявы, які знаходзіцца ўсяго
з канвенцыя.
>> Яна называецца NULL тэрмінатар.
І NULL--
капітал N, капітал U, капітал L, капіталу L--
гэта не тое ж самае, NULL тэрмінатар.
Гэта паказальнік.
Гэта сімвал.
Яны вельмі розныя.
Памятаеце гэта.
Гэта будзе на віктарыне, напэўна.
Я не бачыў віктарыну.
Так?
>> АЎДЫТОРЫЯ: Так NULL, скажам, паказальнік?
>> Дэн: Так.
>> АЎДЫТОРЫЯ: Што робіць [неразборліва]?
>> Дэн: Калі, скажам, Таноса выклікаецца, калі вам не хапае памяці, каб атрымаць
незалежна ад памеру вы просіце, Таноса вернецца NULL.
Гэта, у асноўным, кожны раз, калі функцыя павінна вяртаць паказальнік, вы
трэба праверыць супраць NULL, таму што NULL з'яўляецца даволі good--
гэта, свайго роду, значэнне смецця.
Гэта нулявы наколькі паказальнікі ісці.
>> Кожны раз, калі вы выклікаеце функцыю, што вяртае паказальнік.
Вы будзеце жадаць, каб праверыць, што ўпэўнены, што гэты паказальнік ня NULL
таму NULL з'яўляецца вельмі распаўсюджаным з'явай.
Гэта свайго роду вяртанне смецця.
Так што калі што-то не ідуць прама, проста вярнуць NULL замест.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Так, і што гэта такое.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Загавор, так як гэта.
Гэта NULL тэрмінатар.
Гэта маленькая N-U-L-L, калі вы правапіс яго.
>> АЎДЫТОРЫЯ: І я проста пайшоў таму і праверыў яго.
І калі вы паспрабуеце паставіць з якая плавае кропкай Значэнне ў перамыкач, ён будзе крычаць на вас
кажучы, зацвярджэнне патрабуе выраз цэлага тыпу.
>> DAN: Там вы ідзяце.
Але так, якой было пытанне?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Так сталіца N, капітал U, капітал L, капіталу L з'яўляецца актуальнай з рэччу.
Гэта паказальнік NULL і будзе разглядацца толькі ў якасці такіх.
Вы ніколі не паспрабаваць і заклінанні NULL характар ​​і паглядзець любы
іншага шляху, акрамя гэтага.
Так?
>> АЎДЫТОРЫЯ: Так вяртання на персанаж макс або то ў заўвагах, ці так
ўвасабляюць тую ж самую функцыю як [неразборліва]?
>> АЎДЫТОРЫЯ: Дык вы маеце на ўвазе вяртанне сЬаг макс ад GetChar, або
тое, што гэта?
>> АЎДЫТОРЫЯ: Так.
>> АЎДЫТОРЫЯ: Так, так што агульная тэрмін для ўсіх тых рэчаў,
дазорцы значэння.
Так як вяртанне цэлалікавае макс ад GetInt і сімвал макс ад GetChar, гэта
павінен быць, як, усё ў парадку, калі гэтыя рэчы вяртаюцца да нас,
то пайшло не так.
>> Для паказальнікаў, мы як раз ёсць гэта дазорнай значэнне, што кожны
узгадняе.
І гэта тое, што вам вярнуцца калі справы ідуць дрэнна.
Так сімвал макс гэта тое, што мы выкарыстоўваем каб ўяўляць сабой нешта
як NULL або GetChar.
>> АЎДЫТОРЫЯ: Так што, калі вы тэстуеце GetChar, можа вы проста пакласці NULL?
Б, што змяніць сітуацыю?
>> Дэн: Вы не маглі б проста праверыць NULL.
Вы павінны былі б праверыць сЬаг макс таму Вяртаецца значэнне з функцыі
персанаж не з'яўляецца паказальнікам.
Так?
>> АЎДЫТОРЫЯ: задае гэтае пытанне для даўжыні радка.
Якія ўключаюць у сябе нулявой сімвал ці што?
>> DAN: Няма
І гэта на самай справе, як даўжыня радка ведае, каб спыніць, таму што ён праходзіць праз
Ваш масіў сімвалаў да ён бачыць пусты знак.
А потым гэта як, усё Добра, я зрабіў.
>> АЎДЫТОРЫЯ: [неразборліва] пяць?
>> Дэн: Добры дзень бы пяць.
Так.
Так масівы бесперапыннасць блокі памяці.
Яны маюць імгненны доступ, кажучы Імя масіва, а затым, у кучаравых
дужкі, што індэкс вы хочаце пайсці каб, яны індэксуюцца з нуля праз
даўжыня масіва мінус 1.
>> І яны абвешчаныя па тыпу рэч, якая вы захоўваеце ў
Масіў, імя масіва, а затым што памер гэтага масіва.
Так што гэта сімвал масіў даўжыні шэсць, што мае гэтыя значэння.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Так.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Калі ў вас ёсць тое, што адбываецца у масіў ўжо зрабіў.
Такім чынам, вы можаце паказаць гэта замест гэтага як, скажам, знак, што назва вашай
масіў, пустыя дужкі роўная кучаравыя рыхтавацца H коска E коска L коскі L коску
O коска NULL характар і фігурная дужка.
Гэта таксама будзе працаваць у якасці дэкларацыі.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Тады вы павінны мець памер ужо зрабіў.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Так.
Усе правша.
Аргументы каманднага радка з'яўляюцца адным са спосабаў атрыманне дадзеных ад карыстальніка ў якасці
Аргументы галоўны.
Галоўная прымае два аргументу.
Лік аргументаў, што ў цяперашні час прайшлі ўздоўж каманднага радка і
вектар радкоў або масіў радкоў з усіх аргументаў.
>> Так што, калі я, скажам, называецца такая функцыя, як кропка з 1 прасторы, 2 прасторы, тры,
агдс будзе 4.
І агду 0 будзе кропка з.
Argv1 будзе 1.
argv2 б 2. argv3 будзе 3, у гэтым канкрэтным выпадку.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: апошні элемент у масіве таму што масіў даўжынёй агдс плюс
адзін з ARGB, апошні элемент з'яўляецца паказальнікам NULL.
Гэта агдс плюс 1.
Такім чынам, у выпадку, што я толькі што сказаў, гэта будзе агду 0 з'яўляецца кропка з.
агду 1 студзеня argv2 з'яўляецца 2. агду 3 з'яўляецца 3.
агду 4, які з'яўляецца адным больш, чым агдс будзе NULL.
>> І гэта NULL паказальнік.
Так.
І гэта таму, што радок сімвал зорка паказальнік.
Такім чынам, ён павінен быць таго ж тыпу.
Так?
>> АЎДЫТОРЫЯ: Два пытання.
Так адзін, у чым розніца паміж Гэтая і іншыя GetString чым аднаго тыпу
у карыстацкім рухавіка?
І два, гэта захоўваецца ў Ваш нядаўні памяці?
Так як, GetString б быць [неразборліва]?
>> Дэн: Дзе гэта захоўваецца?
Я не ведаю, дзе ён захоўваецца.
>> АЎДЫТОРЫЯ: Так, на самай справе, вы ведаеце, як любы функцыянаваць вы называеце гэта аргументы
захоўваюцца ў стэку?
Так агдс і агду аргументы ў асноўны і яны ў стэку, або сапраўды
ледзь вышэй, што вы думаеце, як пачатак стэка.
Тое, што было іншая частка пытання?
>> АЎДЫТОРЫЯ: Так у чым жа [неразборліва]?
>> Дэн: Так, гэта проста іншы спосаб атрымання дадзеных ад карыстальніка.
Гэтая песня трохі больш эфектыўным і гэта зручней для сцэнарыяў, таму што вас
можа проста перадаць аргументы ваш галоўны Функцыя замест таго, каб чакаць,
для карыстальнікаў, калі ў вас няма ніякіх карыстальнікаў.
>> АЎДЫТОРЫЯ: І так, атрымаць радкі будзе [неразборліва].
Было б захоўваць рэчы вам трэба.
>> Дэн Да?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Так, агду 0 заўсёды ўключае кропка слэш выкліку функцыі.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Так, кожны з аргументаў скончылася ў NULL характару, таму што яны
з'яўляюцца радкамі.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Так, агду агдс з'яўляецца паказальнікам NULL.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: О, так.
Так, шкада.
>> АЎДЫТОРЫЯ: Так [неразборліва]?
>> Дэн: Такім чынам, пытанне, калі ў вас каманднага радка кропка слэш кропку з 1, 2,
б колькасць каманднага радка Аргументы быць два ці было б тры?
>> Залы: Я думаю, што гэта не мае вялікага значэння.
Я, як правіла, кажуць, о, вы не прайшлі любыя аргументы каманднага радка, калі,
Відавочна, вы выклікалі функцыю.
Так што я, як правіла, вусна выключыць Функцыя з каманднага радка
Аргументы хоць гэта ўключаны ў ARGV.
>> Дэн: Але калі гэта было на test--
yeah-- а таксама, калі вы кажаце, то як агдс роўны 3,
вы знаходзіцеся ў бяспечнай стоячы.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Я думаю, што калі замест выкліку гэтага у ARGC і струнных агду дужках
але захаваў тыя ж тыпы і проста называецца ім-то іншае, як
і б, ці будзе гэта ўсё яшчэ працуе?
І гэта было б па-ранейшаму працаваць, Вы б просто--
замест выкарыстання argc-- Вы б выкарыстоўваць і б.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Так што пытанне GetString з'яўляецца збіраецеся захоўваць памяць у кучы
таму GetString з'яўляецца сімвал *.
Ён захоўвае памяць, у кучы, таму што называе цяпер Таноса ў фактычны
Рэалізацыя GetString.
ОК, як рухацца далей.
>> Бяспеку.
Такім чынам, каб быць па-сапраўднаму бяспечным, вы не спадзявацца на няма адзін, і вы не дазволіць ні адной доступ да любога
Вашай інфармацыі, і менавіта таму кожны будуе свае ўласныя машыны,
іх уласныя аперацыйныя сістэмы, усе іх праграмы з нуля, і, відавочна,
не падпісацца любым іншым машын праз Інтэрнэт.
Так кампутары небяспечна.
Яны на самай справе.
Мы павінны давяраць іншым людзям.
>> А ідэя бяспекі з'яўляецца тое, што вы спрабуючы абмежаваць колькасць
Давер, які вам трэба.
І адным са сродкаў вы, што праз крыптаграфіі.
Крыптаграфія, па сутнасці, у нас ёсць сакрэты.
>> Часам мы павінны прайсці нашы сакрэты разам праз, скажам, інтэрнэт ці
іншыя рэчы.
І мы не хочам, каб людзі ведаць гэтыя сакрэты.
Такім чынам, мы зашыфраваць нашы сакрэты ў шляху што мы спадзяемся, што ніхто не можа высветліць.
>> Такім чынам, мы used--
праз ходзе гэтай class--
рэчы, як шыфр Цэзара і [Неразборліва], якія з'яўляюцца вельмі, вельмі
небяспечныя спосабы шыфравання рэчы.
Іх лёгка зразумець, што яны і што вашыя дадзеныя знаходзяцца.
Рэальны свет выкарыстоўвае значна больш складаныя схемы шыфравання.
І мы не зможам атрымаць у значна больш, чым гэта.
>> Адладка.
GDB з'яўляецца лепшым.
Я збіраюся гэта падкрэсліць яшчэ раз.
Выкарыстоўвайце GDB ўвесь час кожны Час у вас ёсць праблемы.
Каманды, якія з'яўляюцца карыснымі ў GDB з'яўляюцца зламаць, якія вы перадаеце радок
лік, імя функцыі, па сутнасці дзе ў кодзе вы хочаце спыніць,
і быць у стане ўзяць пад кантроль.
>> Друк займае зменную і друкуе усё, што пераменная у тым, што
кропка ў выкананні.
Далей перамяшчае выкананне а таксама адзін крок.
І крок крокі ўнутры функцыі ў вашым выкананні.
>> Іншыя рэчы працаваць, які з'яўляецца, як вы на самой справе запусціць свой код.
Працягнуць прымае ўсе меры, неабходныя каб дабрацца да наступнай кропкі супыну.
І ёсць многія, многія іншыя.
Шукайце іх.
Яны выдатна.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Так, які з'яўляецца адладчык.
Так адладчык гэта праграма, якая дазваляе адладжваць праграму.
Гэта не праграма, якая знаходзіць памылкі для Вы, тым не менш, што было б выдатна.
>> І апошняе, для мяне з'яўляецца пошук.
Так тыпаў пошуку, што мы гаварылі аб гэтага класа лінейны пошук,
які з'яўляецца толькі, што вы глядзіце праз кожны элемент прасторы пошуку, адзін
элемент, у той час, пакуль вы не знойдзеце тое, што Вы шукаеце або пакуль вы не дасягнеце
канец вашай прасторы пошуку, пры якім момант вы сказаць, што вы не маглі знайсці
элемент, які вы шукалі.
І гэта займае ў лепшым выпадку пастаяннае час, які з'яўляецца 0 1, і ў горшым выпадку лінейных
Час, якое роўна 0 н.
>> Бінарны пошук, які неабходны брудныя элементы.
Вы ідзяце ў сярэдзіне вашых элементаў, гл, калі элемент вы шукаеце
больш ці менш, чым элемент што вы ў сярэдзіне.
Гэта гэта больш, вы кажаце, што дно з гэтай катэгорыі прастору гэта ваш
бягучае месцазнаходжанне, сярэдні, і вы перазапусціць працэс.
Калі ён менш, вы паглядзіце сказаць што the-- так, у чым справа?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> Дэн: Так.
Любы выгляд роду, які вучылі ў клас справядлівая гульня для тэсту.
>> [Смех]
>> Дэн: А тое, што ў вас не было зрабіць гэта для набору праблем, гэта справядліва
Гульня для выпрабаванні.
>> АЎДЫТОРЫЯ: Ці можам мы пайсці па ім, як to--
>> Дэн: Гэта ўжо не будзе больш.
>> СПІКЕР 2: Фактычны код для [Неразборліва] на study.cs50.net.
Так што, калі вы паглядзіце на праблемы практыкі на старонцы сартавання зліццём з
study.cs50.net, ёсць код для рэалізацыі сартавання зліццём.
Такім чынам, вы не павінны ажыццяўляць гэта сябе сёння ўвечары.
Але пераканайцеся, што вы разумееце яго, а чым проста запамінаючы яго.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> СПІКЕР 2: На старонцы сартаванне зліццём на study.cs50.net, існуе практыка
Праблема, што, калі вы пстрыкніце па Праблема, у самым канцы ёсць
Рашэнне, якое з'яўляецца зліццё Рэалізацыя роду.
Але пераканайцеся, што вы разумееце яго а не проста запамінаць яго
або капіюючы яе ўніз.
>> АЎДЫТОРЫЯ: І цалкам справядліва Праблема для здачы іспыту будзе
нешта накшталт вось спіс.
Што гэта спіс выглядаць пасля адзін крок Вылучаныя роду або
сартаванне ўстаўкамі або любы іншы.
Адзін поўны ітэрацыя спісу.
Так што нават калі вы не ў канчатковым выніку трэба Код для яго, вы павінны зразумець, гэта
дастаткова, каб ведаць, як гэта адбываецца каб быць змены гэтага масіва.
>> DAN: Вось гэта для мяне.
>> [Апладысменты]
>> LUCAS: Прывітанне ўсім.
Мяне клічуць Лукас.
Я збіраюся казаць аб рэкурсіі, усё расліны, якія мы вынялі, і
трохі усіх паказальнікаў.
ОК?
Такім чынам, перш за ўсё, Рэкурсія.
Што гэта значыць сказаць, што функцыя з'яўляецца рэкурсыўнай?
>> АЎДЫТОРЫЯ: Званкі сябе.
>> LUCAS: ОК, называе сябе, так.
Так любіце гэтую фатаграфію, напрыклад.
Гэта як на малюнку ўнутры карціны і гэтак далей.
Так, напрыклад, вы можаце have-- Дана што казаў пра бінарнага пошуку.
Адзін са спосабаў, у якіх двайковы пошук рэкурсіўная з'яўляецца тое, што вы
спрабуючы знайсці шэраг.
Так вы ідзяце ў сярэдзіне.
І тады вы пераканайцеся, што лічбы там У злева і справа.
>> І потым, калі вы даведаліся нумар будзе злева, гэта тое ж самае
рэч, як раз рабіць пошук, але толькі злева ад спісу.
Дык вось, як гэта гучыць як гэта рэкурсіўная.
Дык вось чаму вы, хлопцы, ёсць рэкурсіўная рашэнне для сартавання зліццём.
>> Такім чынам, вось прыклад.
Так скажам, што я хачу, каб выбраць ўсе лікі ад 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 пакласці вашыя бліжэй адзін знаходзіцца на вяршыні тых
што вы не кажаце з, што нашмат.
Калі вы прайсці ўвесь шлях да дна спіс сяброў, вы будзеце бачыць
людзі, што вы, верагодна, нават не памятаеце, што вы сябры с.
І гэта таму, што Facebook гатункаў вашыя сябры, заснаваныя на тым, як
зачыніць вы да іх.
>> Так арганізацыі дадзеных.
Таксама Pokemon.
Такім чынам, вы бачыце, што ўсе Покемон маюць нумары.
І гэта, як лёгка спосаб доступу да дадзеных.
>> АЎДЫТОРЫЯ: Доступ 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.
І тады я паклаў яго туды і зрух ўсе астатнія элементы.
Сэнс?
>> Bubble Сартаваць.
Так пузырьковый сартавання ў асноўным тое, што вы збіраецца do-- мы называем гэта бурбалка
Сартаваць таму што вы ідзяце праз list-- гэта на самай справе лепш, калі я проста паказаць
Хочаце это--
і вы збіраецеся параўноўваць суседнія колькасці.
І вы збіраецеся абмяняць іх пазіцыі, калі яны не
у правільным парадку.
>> Так у асноўным, што збіраецца адбудзецца тут, напрыклад,
ў вас ёсць 8 і 6.
Вы ведаеце, што парадак сартавання будзе на самай справе быць 6 і 5, ці не так?
Так што вы збіраецеся памяняць загады.
Потым я бачу 8 і 4 тут.
І я раблю тое ж самае.
Я памяняць зноў.
І, нарэшце, 2 і 8.
Я таксама памяняць іх месцамі.
>> Яна называецца Bubble Сартаваць таму што пасля кожны з гэтых ітэрацый, на самай справе,
Найбольшая колькасць у спісе атрымлівае ўсё шлях да канца спісу.
Ці мае гэта сэнс?
Таму што ён трымае замены яго і перасоўванне яго направа.
>> Такім чынам, гэта другая ітэрацыя.
Было б тое ж самае.
Я зраблю адзін своп і то апошні.
Я, што няма свопы і спіс сартуецца.
Такім чынам, у Bubble Сартаваць, мы ў асноўным трымаць перажывае спісу і перапампоўкі
рэчы, пакуль я не заўважыў, што я не рабіў любыя свопы робяць гэтую ітэрацыю, якая
азначае, што спіс ужо адсартаваны.
Сэнс?
>> Давайце трохі пагаворым пра час працы.
Так вы, хлопцы, памятаеце Вялікі O, Omega, і Тэта?
Так?
Добра, што Вялікі О, у першую чаргу?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Так, гэта называецца горшым выпадку выканання, які проста азначае, што гэта
колькі вы чакаеце праграму ўзяць для запуску.
Як, з пункту гледжання of--
у гэтым case-- п.
Лік элементаў у Спіс у горшым выпадку.
Маўляў, у горшым выпадку.
>> Такім чынам, для Bubble Сартаваць, напрыклад, У нас ёсць вялікія O н плошчы.
Чаму ў нас, што?
Чаму Bubble Сартаваць Big O н квадрат?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Так, так у горшым выпадку будзе што я павінен буду зрабіць п ітэрацый.
Такім чынам, кожны з ітэрацый збіраецца прывесці да самага вялікага элемент у канец
з спісу.
Так у горшым выпадку з'яўляецца тое, што ў мяне ёсць зрабіць гэтую рэч п разоў.
І для кожнага з тых часоў, я павінен зрабіць п свопы таму што я павінен параўнаць
кожны з двух элементаў.
Дык вось чаму ён н квадрат таму што гэта п раз п.
>> Тады, выбар роду таксама н плошчы таму, што для кожнай ітэрацыі, я павінен
глядзець на кожнага элемента у спісе.
А потым знайсці найменшы, Гэта азначае, што я павінен
праглядаць п элементаў.
І што я павінен зрабіць, што п раз, таму што Я павінен выбраць усе п элементаў.
>> Сартаванне ўстаўкамі таксама н плошчы таму што ў горшым выпадку будзе
быць, адзін, я павінен ўставіць п лікаў, ці не так?
Так што я ўжо ведаю, што я збіраюся мець п ітэрацый.
Але для кожнага з гэтых лікаў, калі б мне давялося глядзець на ўсе нумары ў
адсартаваны спіс і паклаў яго ўсю дарогу ў пярэдняй, што будзе н плошчы
таму што гэта будзе п раз п разоў.
Сэнс?
Як наконт амега?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Гэта ў лепшым выпадку.
Так што гэта, як, у шмат разоў для сартаванне, у лепшым выпадку з'яўляецца
калі спіс ужо адсартаваны.
Такім чынам, вы сапраўды не маюць нічога рабіць.
Bubble Сартаваць мае лепшы сцэнар н.
Як вы, хлопцы, ведаеце, чаму?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Так, калі вам адсочваць Ці рацыён дадзеных было ніякіх свопов або
ня, калі ў вас ёсць што-то накшталт усталяваны ў праўда, калі б была ітэрацыі, калі
Спіс ужо адсартаваныя, у асноўным, што здарыцца, я буду
паспрабуйце памяняць кожны два суседніх элементаў.
Я збіраюся бачыць, што няма свопы.
І я проста вярнуць адразу.
>> Дык гэта значыць, што я проста павінен быў прайсці праз спіс адзін раз.
Так што гэта н таму я гляджу у п элементаў.
Чаму выбар роду п квадрат?
>> Так, нават калі спіс адсартаваны, для Кожная ітэрацыя выбару роду, я
павінны выбраць мінімальны элемент.
Такім чынам, што азначае, што ў мяне ёсць, каб шукаць на ўсіх элементаў у малокомплектных
пералічыць і знайсці мінімум для кожнай ітэрацыі.
Ці мае гэта сэнс?
>> І ўстаўкі меч п, таму што ў справа, што я спрабую ўставіць
нумары і ўсе нумары, калі я паспрабуйце ўставіць іх, я бачу, што яны
знаходзяцца ў правільным становішчы.
Я не павінен пайсці праверыць усе іншыя Лічбы ў малокомплектных спіс.
Дык вось чаму ён будзе н.
Сэнс?
І што тэта?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Што, прабачце?
Скажыце гэта яшчэ раз.
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Дакладна.
Такім чынам, вы можаце бачыць, што толькі выбар захоўваецца ў Merge роду маюць thetas.
І гэта таму, што ў вас ёсць толькі тэта калі абодва Big O і Амега аднолькавыя.
ОК.
І, нарэшце, сартаванне зліццём ёсць у лог п.
>> А потым, як казаў Дэн, сартаванне зліццём накшталт як такім жа чынам, што
вы бінарны пошук.
Такім чынам, вы атрымаеце спіс.
І вы збіраецеся разрэзаць напалову.
І тады вы скараціць іх у невялікіх паловак.
І тады вы аб'яднаеце іх.
Вы, хлопцы, памятаеце, што, ці не так?
ОК, як ён казаў.
>> ОК, паказальнікі.
Так што гэта паказальнік?
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: адрас.
ОК.
Я ведаю, што Дэвід паказвае кучу відэа Бинки і рэчы, якія паказваюць
адзін да аднаго.
Але мне падабаецца думаць, паказальнікаў толькі як адрас.
Так што гэта зменная, якая будзе захоўваць адрасы.
>> Так што гэта проста гэта спецыяльная пераменная гэта значыць задоўга чатыры байта.
Памятаеце, што паказальнік да чаго гэта заўсёды чатыры байта доўгія для нашай 32-біт
Машына так і ў выпадку з прыбор.
І гэта як раз мае месца зменнай ўнутры яго.
>> ОК, так што гэтая памяць, у асноўным.
Такім чынам, кожны блок памяці на самай справе мае этыкетка, якая з'яўляецца адрас
slotty памяці.
Такім чынам, што азначае, што ў мяне можа быць паказальнік, які паказвае на
любы з гэтых адрасоў.
Так што прычына, чаму мы будзем выкарыстоўваць паказальнікі з'яўляецца калі мне давядзецца запамінаць размяшчэнне
што канкрэтная пераменная памяці.
>> І вы, хлопцы, памятаеце, што адзін з тых, выпадкі былі, калі ў мяне ёсць функцыя
калі ў мяне ёсць на самой справе хачу, каб вы своп для рэчыўных лікаў, я на самой справе
павінны паслаць паказальнік.
Ня пераменная.
Вы, хлопцы, памятаеце вы, што?
Розніца between--
як называецца?
Выклік па значэнні і выкліку па спасылцы, ці не так?
>> ОК, так.
Так што тэлефануйце па значэнні.
Калі вы проста адправіць зменную функцыянаваць вы проста даслаўшы значэнне.
Такім чынам, вы на самой справе адпраўкі копія зменнай.
І ваша праграма не магла клапаціцца менш о, калі тая ж пераменная фактычна
робіць копію.
>> І, заклікаючы спасылка азначае, што Я на самой справе напрамкі копіі
паказальнік на гэтую зменную.
Дык гэта значыць, што я пасылаю Размяшчэнне гэтай зменнай.
Так адчуваю я маю размяшчэнне зменная, калі я тэлефаную функцыя
з паказальнікамі, я ў стане на самай справе змяніць дадзеныя, якія былі ў асноўнай.
Сэнс?
>> Хоць, паказальнік з'яўляецца копіяй, паказальнік ўсё яшчэ мае рэальны адрас
зменная, што я хачу змяніць.
Сэнс?
>> Так стварэння паказальнікаў.
Памятаеце, паказальнік заўсёды ёсць тып, які ён, паказваючы
каб затым зорачку.
І тады вы паставіць імя.
Так што памятаеце, што кожны раз, калі ў вас ёсць усе зоркі, гэта як паказальнік на
што ўсё, што пераменная увядзіце што вы мелі.
>> Такім чынам, тут, у зорку, напрыклад, гэта ўказальнік і цэлы лік.
І тады сімвал зорка паказальнік сімвал зоркі і гэтак далей.
Так?
>> АЎДЫТОРЫЯ: Што рабіць, калі ў нас ёсць паказальнік на п здымацца х.
Я ведаю, што стварае паказальнік на х.
Ці значыць гэта таксама абвясціць х цэлае?
>> LUCAS: ОК, так што, калі вы кажаце, н-зоркавы х, вы не ствараеце паказальнік
пераменная х.
Вы ствараеце паказальнік з імем х.
>> АЎДЫТОРЫЯ: [неразборліва].
>> LUCAS: Таму калі я кажу н зорны х, я кажучы, эй, у памяці, я збіраюся
атрымаць адзін з гэтых трох скрынак.
І я хачу сказаць, што, што будзе х, які з'яўляецца
будзе паказальнік.
І нешта цікавае пра паказальніках з'яўляецца тое, што мы кажам, што ў іх ёсць
4 байта для 32-бітнай машыне.
І прычына, што тлумачыцца тым, што 4 байта 32-біт.
>> І машыны, якія 64 біт на самай справе ёсць паказальнікі адрасы
, Што ў 64 біта.
Дык гэта проста азначае, што памер адрасы ў машыне адрозніваецца.
>> Так Супастаўленне і разнаймення.
Ёсць два аператара, што вы, хлопцы, павінны памятаць.
Першы Ампэрсанд.
Другой зоркай.
Не палохайцеся гэтай зоркі і гэта зоркі, таму што памятаеце, што, у
гэты выпадак, у вас ёсць п зорку.
>> Гэта як усё гэта разам.
Там няма н Space Star.
Дык гэта значыць, што гэта тып.
Памятаеце, што, калі ў вас ёсць пераменная зорка, ты
казаць пра тып.
>> Калі ў вас ёсць толькі зорку, а затым Імя зменнай, гэта азначае, што
вы разнаймення паказальніка, які азначае, што вы глядзіце на
паказальнік, знайсці адрас, гэта паказваючы на, збіраецца на гэты адрас,
і, гледзячы на ​​кожны раз, калі у вас там.
Таму я кажу сваім студэнтам, што, калі ў вас ёсць зоркі, вы павінны думаць, што гэта
абрэвіятура ўтрымання.
>> Так што калі ў вас ёсць паказальнік, і вы зрабіць зорку паказальнік, гэта
змест паказальніка.
Так вы ідзяце ў тое, што ён, паказваючы на і паглядзець на пастаянным змесце.
І Ампэрсанд тое ж самае рэчы, як адрас.
>> Так што, калі ў мяне ёсць пераменная A-- як, давайце сказаць, што я зрабіў Int роўная 3--
калі я хачу, каб знайсці адрас, што пераменная памяці, я магу проста зрабіць
Ампэрсанд.
Так што гэта адрас.
Сэнс?
>> Дык вось прыклад.
Гэта адсутнічае цэлалікавае б і цэлалікавае гр.
Так Int роўная 3 азначае, што Я збіраюся пайсці ў памяці.
І я збіраюся знайсці слот і справа тут лік 3.
>> А потым Int б роўная 4.
Я збіраюся зрабіць тое ж самае.
Да памяці і паставіць шэраг 4 ў ​​адным з скрынь.
І Int роўная 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.
Так Таноса тое ж самае як размеркаванне памяці.
Так ён збіраецца вылучыць памяці ў кучы.
І ён збіраецца вяртаць паказальнік на дзе, што памяць была выдзелена ў.
>> Такім чынам, калі вы do--
тут example--
н зорка паказальнік.
А потым паказальнік роўны Таноса памер цалевых раз 10.
Я ствараю паказальнік.
І тады я задаю гэты паказальнік значэнне паказальніка, што Malloc
дае мне.
>> Вось я і пытаю Таноса вы можаце вылучыць прастору для 10 цэлых лікаў.
Вось што ён казаў.
І Таноса дае мне паказальнік да таго месца.
Сэнс?
ОК.
Я І GetString з'яўляецца, у асноўным, робяць тэлефануйце ў Таноса так што вы можаце вылучыць
памяці падчас выканання.
>> Заўсёды памятайце, каб праверыць на нуль таму Таноса збіраецца вярнуцца нуль
калі ён не можа вылучыць памяць.
Давайце выкажам здагадку, што вы просіце смешна аб'ём памяці.
Кампутар не будзе магчымасць выдзяляць так шмат.
>> Так Таноса толькі збіраецца вярнуцца нуль.
Так заўсёды памятаць, каб праверыць, калі паказальнік, які вы атрымалі ад Таноса з'яўляецца
NULL ці не, таму што, калі гэта, можна быць разнаймення паказальніка і
выклікаючы пабочных памылкі.
І, нарэшце, не забудзьцеся Ваш вольнай памяці.
>> Malloc стварае памяць у кучы.
І вы павінны вызваліць памяць перш чым праграма сканчаецца.
Добра, гэта ўсё для мяне.
На жаль, Роб.
Дзякуючы.
>> [Апладысменты]
>> LUCAS: Любыя апошнія пытанні перад Роб прыходзіць?
Няма?
Так?
>> АЎДЫТОРЫЯ: я не бачыў гэта адзін онлайн.
Вы загрузілі яго яшчэ?
>> LUCAS: Я думаю, што Дэйв загрузкі яго ў бліжэйшы час.
>> DAVE: Гэта будзе размешчана.
>> LUCAS: Гэта будзе онлайн.
>> АЎДЫТОРЫЯ: Гэта залежыць.
>> LUCAS: Гэта залежыць?
ОК.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> LUCAS: Так, вы павінны вызваліць усіх памяць, якая змяшчаецца ў кучы.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> LUCAS: Так.
Кожны раз, калі ў вас ёсць культуры Таноса, Вы павінны мець культуру бясплатна
пасля спынення выкарыстання гэтай зменнай.
Так Таноса і вольныя заўсёды разам.
Іх лепшыя сябры.
Так.
Роб?
>> ROB: Я пайду хутка.
А таксама відэа будзе мірыцца.
У мяне ёсць мікрафон на.
>> Такім чынам, тыдзень пяць матэрыял.
Першае, што мы павінны гэта стэк.
Так што памятаеце, што ёсць толькі адзін стэк кадраў у выпадку актыўнага выкліку функцыі.
Мы ўбачым, што ў секунду.
А таксама памятаць, што насамрэч адбываецца у кожным кадры стэка збіраюцца быць
лакальныя зменныя нашых функцый, аргументы, якія перадаюцца ў наш
функцыі, разам з парай іншыя рэчы, якія вы сапраўды не
трэба турбавацца аб.
>> Дык вось прыклад праграмы, дзе, апавяшчэнне, асноўнай з'яўляецца printfing вяртанне
Значэнне Foo 4.
Foo толькі збіраецца вярнуцца Значэнне бар 4 коскі 6.
І бар збіраецца ўсталяваць некаторыя мясцовыя пераменная п роўная 4 разы 6.
А потым вярнуцца н.
>> Такім чынам, давайце зірнем на стэк на працягу фактычны ітэрацыі гэтай праграмы.
Такім чынам, ёсць падстава нашага стэка.
Памятаеце, што стэк расце ўверх.
Так у ніжняй часткі нашага стэка, мы ёсць фрэйм ​​стэка для асноўнага.
Пры запуску праграмы, галоўным заўсёды будзе ў
Дно нашай стэка.
>> І тое, што ўнутры нашага стэк выклікаў для асноўнай?
Такім чынам, нават пры тым, што не існуе ніякага мясцовага зменныя ў асноўным, як я ўжо казаў,
мы агдс і RGV займаючы месца ўнутры асноўнага кадра стэка.
Так галоўны цяпер збіраецца выклікаць функцыю Foo.
А гэта значыць, Foo збіраецца атрымаць свой уласны кадр стэка.
>> Так што цяпер мы ўнутры функцыя Foo.
І тое, што трэба ісці ў фрэйм ​​стэка класа Foo?
Ну, Foo мае аргументаў н.
І н роўная 4 з, што тое, што Асноўны праходзіць у якасці аргументу Foo ст.
>> Так што цяпер Foo збіраецца назваць бар.
Што бар прыйдзецца ўнутры яго 'кадра стэка?
Ён мае х, роўнае 4 Y, роўным шасці.
Гэта яшчэ не ўсё, што мы збіраемся мець ў кадры стэка, таму што бар
таксама мае лакальную зменную п.
І н мы збіраемся ўсталяваць роўным 24.
>> Так што цяпер бар збіраецца вярнуцца н.
Так бар вяртаецца 24 да кадр стэка нешта.
І таму, што бар цяпер вяртаецца, што азначае, што мы выскокваюць кадр стэка
для панэлі з стэка.
Так уся памяць, што бар быў выкарыстоўваючы цяпер з стэка.
>> Зараз, Foo таксама збіраецца вярнуцца 24 на галоўную.
Так што цяпер Foo вяртаецца, памяць што Foo выкарыстаў у сваёй '
кадр стэка таксама сышоў.
А цяпер, галоўны збіраецца патэлефанаваць Printf.
Так Е з'яўляецца толькі адна функцыя.
Калі мы называем Е, гэта будзе іншы фрэйм ​​стэка для Printf
выклік функцыі.
>> Што мы перадаем Printf?
Гэта тое, што збіраецца пайсці на яго кадра стэка.
Па крайняй меры, мы перадаем што адсоткаў я зваротны слэш н і
аргумент 24.
Гэта можа мець больш у гэта кадр стэка калі Е, здараецца, выкарыстоўваючы некаторыя
лакальныя зменныя.
Мы не ведаем.
>> Але ўсё, што ідзе ў Е-ых стэк выклікаў.
Гэта збіраецца выканаць Printf.
Тады Е зроблена.
Ён вернецца.
Нарэшце, галоўны робіцца.
Галоўная вернецца.
І тады наша праграма.
Так?
>> АЎДЫТОРЫЯ: Вы бачыце [неразборліва]
Аргументы [неразборліва]
параметры?
>> ROB: Так што ёсць тонкае адрозненне паміж аргументамі і параметрамі.
І сапраўды, у агульнай кажуць, людзі, як правіла, проста змешваць іх ўвесь час.
Але параметры фармальнае назваць рэчы.
>> Так агдс і агду з'яўляюцца Параметры На галоўную.
Аргументы, што вы на самой справе прайсці ў якасці гэтых параметраў.
Так што, калі я тэлефаную Foo з 4, 4 гэта аргумент я перадаю ў.
І параметр N, усярэдзіне Foo, прымае значэнне 4
з 4 быў аргумент.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: н з'яўляецца лакальнай зменнай у бар.
н-ранейшаму мясцовага да Foo, але гэта параметр, каб Foo.
Гэта не лакальная пераменная.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Foo проста выклікае бар і вяртання безадносна штрых аддачу.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Так, проста каб паглядзець, шматразовага стэк кадраў.
Так?
>> Зала: А чаму быў Foo называецца да Printf?
>> ROB: Чаму Foo выклікаецца перад Printf?
Так што я мог мець, а не, то зрабілі як Int х роўная Foo з 4
а затым друкуецца х.
Але замест гэтага, я сумяшчаў функцыі патэлефанаваць у аргумент Е.
>> Але звярніце ўвагу, што мы не можам на самай справе выканаць выклік ня PRINTF пакуль мы
высветліць, што Foo 4 з'яўляецца.
Так што мы збіраемся ацаніць гэты.
І толькі адзін раз, што робіцца збіраюцца вярнуцца і ацаніць гэта.
Так?
>> АЎДЫТОРЫЯ: Паколькі і бар [неразборліва]
Значэнне, чаму б нам не мець [неразборліва]?
>> ROB: Яны цалкам павінны быць унутр.
Гэта не быў злоўлены за некалькі праходаў.
Так і павінна быць Int бар і Int Foo, так як абодва з іх
вяртаюцца цэлыя.
Пустата, толькі калі яны не збіраюцца вярнуцца фактычныя значэння.
Так?
>> АЎДЫТОРЫЯ: Калі вы мелі радок вышэй вяртанне [неразборліва]?
>> ROB: лінія над наўзамен?
>> АЎДЫТОРЫЯ: Так.
Як калі б вы зрабілі Е і [неразборліва], будзе раздрукаваць два разы?
>> ROB: Так ўнутры Foo?
Калі б мы мелі Printf прама тут?
>> АЎДЫТОРЫЯ: Так.
>> ROB: Дык што, калі ў нас быў PRINTF права тут, будуць друкавацца адзін раз.
Так мы называем Foo раз прама тут, тады мы будзем ударыў Printf.
Тады мы будзем называць бар.
А потым Foo вернецца.
І вось менавіта.
Мы толькі калі сутыкаюцца з Е адзін раз.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]
Е выкліку Foo, таму што мы першыя называючы Printf а затым мы перадаем
аргументы.
>> ROB: Так у тэорыі, ня Е выкліку Foo?
Дык не.
Проста парадак, што з будзе выканаць гэтыя рэчы ёсць, перш чым мы зможам
выклікаць функцыю, усе аргументы да функцыі павінны
быць цалкам ацэнены.
Так як гэта цалкам ацэнены?
Так, гэта проста радок.
Гэта проста значэнне.
>> Тады мы павінны цалкам ацаніць гэта.
Як толькі гэта будзе зроблена, цяпер усё яе аргументы ацэньваюцца.
І зараз мы можам зрабіць тэлефануйце ў Е.
Так?
>> АЎДЫТОРЫЯ: Адно пытанне.
Калі ў вас ёсць функцыя пустэч, павінны ў вас ёсць зваротны коскі?
>> ROB: Вы не вяртанне коскі калі ў вас ёсць функцыя пустэч.
ОК.
Так што цяпер некаторыя куча матэрыял.
Так кучы, як мы збіраемся мець справу з кіравання дынамічнай памяццю.
І гэта наўпрост кантрастуе з стэк, які мы б назвалі аўтаматычны
кіраванне памяццю.
>> Так у стэку, вы ніколі не павінны справу з тым, як лакальных зменных
штурхаюць і выштурхваецца ўсе гэтыя кадры стэка і ўсё такое.
Вы не павінны турбавацца пра гэта.
Гэта аўтаматычны.
Так куча ўручную.
І [неразборліва]
паступае з гэтых функцый Таноса і бясплатна.
>> Дык вось яшчэ праграма.
Усё, што мы робім, mallocing цэлым лікам.
Мы захоўваць яго ў зорным х.
Вядома, мы павінны праверыць каб убачыць, калі х з'яўляецца несапраўдным.
Тады мы ідзем проста ўсталяваць, што х паказвае на 50.
Друкуйце тое, што х паказвае на, друк х, а затым бясплатна х.
>> Так як гэта на самай справе будзе выглядаць калі мы паглядзім на нашу стэка і кучы?
Такім чынам, мы пачнем зноў.
У ніжняй частцы нашай стэк, як і раней.
Памятаеце, што цябе куча непасрэдна выступае супраць стэк?
Такім чынам, мы будзем мець верх нашага кучы там.
>> Так у ніжняй часткі нашага стэка, у нас ёсць наш кадр стэка для асноўнага.
Гэта мае месца для ARGC, ARGV, і мы цяпер маюць лакальную зменную х, якія
з'яўляецца Int зорка.
Такім чынам, мы збіраемся для перабору з дапамогай гэтай праграмы.
Першае, што мы маем, заклік да Таноса.
>> Такім чынам, мы робім выклік Таноса.
Malloc з'яўляецца функцыяй.
Гэта збіраецца атрымаць кадр стэка.
Што мы пераходзе да Malloc?
Гэта збіраецца ісці ўнутр з кадра стэка.
Мы праходжання памер п, што на 4.
Так што перадаецца Таноса.
>> Што Таноса рабіць?
Яна захоплівае нам некаторы прастору ў кучы.
Такім чынам, мы збіраемся пайсці ў кучы.
І мы збіраемся захапіць 4 байта з кучы.
Так што давайце проста даць, што адвольны адрас.
0x123 Проста рабіць выгляд, што гэта адрас, які знаходзіцца на кучы.
>> Дык што ж такое на самай справе ўнутры, што вобласць памяці ў адрасным Ox123?
Смецце.
Такім чынам, мы яшчэ не запісалі нічога ў ёй.
Такім чынам, наколькі мы ведаем, яго можа быць што заўгодна.
Вы не павінны лічыць, што гэта нулявы.
Гэта, хутчэй за ўсё, не роўная нулю.
>> Так што цяпер Malloc вяртаецца.
І што ж нам рабіць, калі Malloc вяртаецца?
Але няхай будзе, што ён вяртае.
Пакладзем х, роўныя, што яна вяртаецца.
Дык што ж гэта вяртанне?
Гэта вяртанне 0x123 так як гэта адрас блока памяці, які яго
проста вылучаецца ў кучы.
>> Так вярнуцца 0x123 х цяпер збіраецца быць усталяваны роўны 0x123, якія, вобразна,
мы часта маляваць як х, якія маюць фактычнае стрэлка, якая паказвае на гэты блок.
Але х проста захоўваць гэты адрас.
Так што цяпер мы павінны праверыць, калі х з'яўляецца несапраўдным.
Гэта не нуль.
Мы робім выгляд, што што Таноса ўдалося.
>> Так што цяпер зорка х роўная 50.
Так зорка памятае гэта азначае пайсці на гэты адрас.
Так 0x123 Мы збіраемся пайсці на гэты адрас.
Так што падводзіць нас там.
Што мы робім па гэтым адрасе?
Мы захоўвання 50.
>> Такім чынам, пасля гэтай лініі, гэта значыць тое, што рэчы будуць выглядаць.
Так што цяпер гэта ўжо не смецце там.
Цяпер мы ведаем, што 50 заключаецца ў тым, прыватнасці адрас, таму што
мы ўсталёўваем яго ў тым, што.
ОК?
Так што цяпер мы збіраемся друкаваць ф.
>> Такім чынам, спачатку мы збіраемся друкаваць зоркі х.
Так што ж такое зорка х?
Зноў жа, зорка х азначае пайсці рэч, якая х паказвае на.
Так х захоўвання 0x123 Перайсці да гэтага.
Мы атрымліваем 50.
Так раздрукаваць е, што.
А гэта значыць, што гэта збіраецца друкаваць 50.
А потым, што вяртае.
>> І тады ў нас ёсць другая Printf.
Цяпер мы адсоткаў р.
Калі вы яшчэ не бачылі яго, што гэта проста, як вы надрукаваць паказальнік.
Таму ў нас ёсць працэнтнае I, працэнтаў е, і ўсе тыя, якія ўжо.
Так адсоткаў р, друкаваць паказальнік.
>> Так х з'яўляецца паказальнікам.
Так што, калі мы збіраемся друкаваць х сабе, Мы друкуем тое, што на самой справе ўнутры
х, што 0x123 Такім чынам, першы друк е збіраецца друкаваць 50.
Другая друк е збіраецца друкаваць 0x123 Да?
>> АЎДЫТОРЫЯ: Вы карыстаецеся адсоткаў х надрукаваць паказальнік?
>> ROB: Так што вы карыстаецеся адсоткаў х надрукаваць паказальнік?
Такім чынам, вы можаце, але адсоткаў х проста, наогул, для, як калі ў вас ёсць некаторыя
цэлае, і вы хочаце надрукаваць гэта як шаснаццатковае.
Вось толькі, як ты гэта робіш.
>> Прымаючы пад увагу, адсоткаў г будзе раздрукаваць у выглядзе дзесятковых лікаў.
Гэта былі мы атрымаць адсоткаў г. я проста цэлае.
адсоткаў р спецыяльна для паказальнікаў.
>> Так х з'яўляецца паказальнікам.
Мы хочам выкарыстоўваць працэнтную р.
Але адсоткаў х мог працаваць.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Так.
Па крайняй меры, для гэтага call-- таму я не ўключаць яго ў тут.
Але гэтыя два аргументу абавязкова ўнутры гэтага кадра стэка
разам з любымі лакальных зменных Е, здараецца, выкарыстоўваючы.
І тады, пры наступным выкліку PRINTF зараз ўнутры Printf кадр стэка з'яўляецца
адсоткаў р зваротны слеш н і незалежна ад значэнне х, якое з'яўляецца 0x123.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Гэта будзе друкаваць тое які выглядае наступным чынам.
>> АЎДЫТОРЫЯ: [неразборліва].
>> ROB: Так ён друкуе яго ў адраснай форме.
Гэта падобна на адрас.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Чаму што?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Чаму гэта паказальнік 4 байта?
Такім чынам, ёсць цэлая куча з 0. перад гэтым.
Так што гэта сапраўды 0x0000000123.
На 64-бітнай сістэме, не было б цэлая куча больш нулёў.
Так?
>> АЎДЫТОРЫЯ: [неразборліва].
>> ROB: Такім чынам, першы Е збіраецца print--
>> АЎДЫТОРЫЯ: [неразборліва].
>> ROB: Так, гэта будзе раздрукаваць што х паказвае на.
Зорка кажа, што гэта рэч паказваючы.
Захопіце яго.
Дык што ж гэта, паказваючы на?
50.
Захопіце яго.
Гэта тое, што мы збіраемся друкаваць.
Прымаючы пад увагу, наступны, мы проста друк х сабе.
Што знаходзіцца ўнутры F?
0x123.
ОК.
>> І вось, нарэшце, у нас ёсць вольная.
Што мы перадаем вызваліць?
Мы праходжання х.
У той час я фактычна адлюстроўваецца гэта ў кадры стэка.
>> Так мы перадаем значэнне 0x123 вызваліць.
Так што зараз бясплатна ведае, усё ў парадку, Я павінен ісці да кучы
і бясплатна, што памяць.
Гэта ўжо не выкарыстоўваць тое, што з'яўляецца па адрасе 0x123.
>> Так бясплатна збіраецца выпусціць што з кучы.
Цяпер наша куча зноў пусты.
У нас няма ніякіх уцечак памяці.
Зараз бясплатна вернецца.
Звярніце ўвагу, што да гэтага часу х 0x123.
Але што зараз не сапраўдныя памяці.
Мы павінны больш разыменовывания х.
Так?
>> Залы: вярнуцца 0 залішнім?
>> ROB: Ці з'яўляецца RETUREN 0 лішнім?
Так.
Мы проста пакласці, што там, таму што у нас ёсць вяртанне адзін для паветра.
Так што гэта, як, так, дазваляе ўключаць вяртанне 0.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Такім чынам, пасля свабодных х, што адбудзецца, калі мы спробе разнаймення паказальніка?
Цалкам магчыма, што ўсё ідзе як трэба.
Цалкам магчыма, што мы ўсё роўна атрымаеце 50.
>> Магчыма, таксама, што гэтая памяць у цяперашні час выкарыстоўваецца для іншага.
Так што гэта нявызначаны паводзіны.
І не вызначана азначае нічога можа здарыцца.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Не, так што калі вы прызначаеце х на іншае.
Так што, калі тут мы сказалі х роўная Таноса то else--
Таноса памер event--
тое, што зыходны блок памяці не вызваляецца.
І мы афіцыйна страціў яго.
Гэта значыць ўцечка памяці.
Мы страцілі ўсе спасылкі ў гэтым блоку памяці.
Так што няма ніякага спосабу, мы можам альбо вызваліць яго.
Такім чынам, затым вярнуцца 0 сродкі зрабілі.
>> Добра, так перапаўнення стэка.
У чым ідэя тут?
Так што памятаеце, куча ідзе ўніз.
Стэк расце.
Так што гэта быў прыклад з лекцыі, Я думаю, дзе асноўным толькі збіраецца
Выклікайце гэтую функцыю Фу, якая збіраецца называць сябе рэкурсіўна над і
зноў і зноў.
>> Так стэк кадраў збіраюцца працаваць сапраўды гэтак жа.
Такім чынам, мы збіраемся пачаць з галоўнай ў якасці ніжняга кадра стэка.
Тады галоўны збіраецца патэлефанаваць Foo, які збіраецца атрымаць кадр стэка.
>> Тады Foo збіраецца патэлефанаваць Foo зноў, якая збіраецца атрымаць
іншы фрэйм ​​стэка.
І тады зноў, і зноў, і зноў, і зноў, пакуль, у рэшце рэшт, мы не запусціць
ў кучу.
Так што гэта, як мы атрымліваем перапаўненне стэка.
І ў гэты момант, вы SEG няспраўнасць.
Ці вы сапраўды SEG віны перад гэтая кропка, але так.
>> АЎДЫТОРЫЯ: дампа памяці Ці жа, як SEG віне?
>> ROB: Такім чынам, вы ўбачыце сегментацыю Ядро віна скідалі.
Вы атрымліваеце дамп калі Вы SEG няспраўнасць.
І гэта як звалку ўсё змесціва вашай бягучай памяці так
што вы можаце паспрабаваць і вызначыць чаму вы SEG парушанымі.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Так сродак памылкі сегментацыі ёсць перапаўненне стэка.
Так што не абавязкова.
Сегментацыя віна азначае, што вы дотыку памяці такім чынам,
Вы не павінны быць.
Так адзін з спосабаў такога выпадку, калі Вы перапаўнення стэка, мы пачынаем кранальна
памяці такім чынам, што мы не павінны быць.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Так ўнутры бясконцага цыклу.
Маўляў, гэта як рэкурсыўнай бясконцага завесы і такім чынам мы атрымліваем яшчэ адзін
фрэйм ​​стэка кожны раз.
Але толькі ўнутры рэгулярным бясконцая, а одно--
добра, давайце нават не друкаваць F--
што-то рабіць.
Незалежна.
>> Мы не збіраемся атрымліваць іншы фрэйм ​​стэка.
Мы проста будзем працягваць зацыклення над гэтай адной інструкцыі.
Стэк не расце.
Гэта тое, што кожны рэкурсіўны выклік дае нам фрэйм ​​стэка.
Вось чаму мы атрымліваем перапаўненне стэка.
Так?
>> АЎДЫТОРЫЯ: Так што, калі вы сказалі, каб атрымаць у той час як цыкл, а затым [неразборліва]?
>> ROB: Так што калі ўнутры той час цыклу быў Е, вы ўсё яшчэ будзе
ня SEG віна.
Я проста не хачу, каб заблытаць рэчы.
Было б цыкл.
Вы б атрымаць адзіную стос кадр для Printf.
>> Тады Е вернецца.
Тады вы зноў б пятлю.
Вы б атрымаць адзіную стос кадр для Printf.
Гэта вернецца.
Аднамесны кадр стэка.
Дык вы не атрымліваеце гэта бясконцая нагрувашчванне кадры стэка.
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Так.
Так што гэта перапаўненне стэка адбываецца таму ні адзін з іх
званкі на Foo вяртаюцца.
Так што, калі мы вернемся, то мы б пачынаюць губляць кадры стэка.
І тады мы б не перапаўнення стэка.
І вось чаму вам патрэбен базавы варыянт для вашых асабістых функцый.
Так?
>> АЎДЫТОРЫЯ: Ці з'яўляецца дадзены патэнцыйны памер і стэк для кучы ж для
усе праграмы?
>> ROB: Груба.
Ці з'яўляецца дадзены патэнцыйны памер стэка і куча аднолькавыя для ўсіх праграм?
Груба.
Існуе некаторая рандомизации да дзе пачынаецца стэка і
дзе куча пачынаецца.
Калі вам пашчасціла мець кучу глабальныя зменныя і рэчы, вы маглі б
забраць з некаторага прасторы для кучы.
>> На 64-бітнай сістэме, вы практычна маюць бясконцую памяць.
Там проста так шмат.
Паміж 32 біт і 64 біт, што значная розніца.
>> Вы збіраецеся атрымаць нашмат больш стэк і куча месца на 64-бітнай
Сістэма таму што проста больш адрасоў, якія яны могуць выкарыстоўваць.
Але на індывідуальнай сістэмы, яна будзе быць прыкладна такое ж колькасць стэка
і куча прастору.
Добра.
>> Так апошняе, што з'яўляецца кампіляцыя.
Такім чынам, вы павінны ведаць гэты працэс.
Ёсць чатыры вялікія крокі.
Такім чынам, першы варта лёгка запомніць.
Папярэдняя апрацоўка.
Ён мае прэфікс папярэдне ў ім.
Так справа даходзіць да ўсяго астатняга.
>> Важна памятаць, хэш.
Так хэш вызначае і хэш ўключае ва ўсіх тых.
Гэта ўсё папярэдне працэсар дырэктывы.
Гэта тыя рэчы, што папярэдняй апрацоўкі клапоціцца аб.
>> Такім чынам, што ж папярэдне працэсар рабіць?
Гэта сапраўды тупы рэч.
Усё гэта здольна ўсе з іх капіявання, і выразаць і ўстаўляць аперацыі.
>> Так хэш ўключае стандартны i0 кропка гадзіну.
Што гэта робіць?
Гэта захоп стандартны i0 кропка гадзіну падаць і ўставіць яго ў верхняй
там, дзе яна кажа хэш ўключае Стандарт i0 кропка ч.
>> І любы хэш вызначыць, што мы бачыў, што тое, што робіш?
Яго капіяванне значэння, што хэш- вызначана вызначаецца як і ўстаўка, што
ўсюды, дзе вы выкарыстоўваеце значэнне.
Так препроцессор проста робіць сапраўды Аперацыі, заснаваныя просты тэкст.
Ён нічога не робіць смарт.
Так усё астатняе больш складаным.
>> Так што цяпер препроцессор зрабіць, мы на самай справе кампіляцыі.
Такім чынам, што ж кампіляцыі на ўвазе?
Цяпер мы збіраемся з С-код у кодзе зборкі.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Так, мы злавілі, што.
Так кампіляцыі.
Мы збіраемся ад з да зборкі.
Так што гэта фактычнае змена мовы.
Кампіляцыя сябе азначае пераход ад на мове высокага ўзроўню ў
ніжэй узровень мовы.
>> І з з'яўляецца мове высокага ўзроўню у параўнанні са сходу.
Што такое зборка?
Яго інструкцыі, якія, у значнай шмат, зрабіў для вашага працэсара.
Але кампутар ўсё яшчэ робіць не разумею зборку.
Гэта разумее толькі нулі і адзінкі.
Так што наступны крок гэта зборка, якая прыводзіць нас ад гэтых інструкцый,
ваш працэсар разумее і фактычна перакладае іх, каб
адзінкі і нулі.
>> Так C да зборкі ў двайковы.
Але ў мяне няма выкананы яшчэ.
Так што думайце бібліятэкі CS50.
Мы падалі вам двайковага для гэта CS50 бібліятэка, якая мае GetString
і GetInt і ўсё такое.
>> Але CS50 library--
ў і з у тым: ці не з'яўляецца выкананым.
Гэта не мае галоўную функцыю.
Гэта проста куча двайковы што вы можаце выкарыстоўваць.
Так звязванне як мы збіраем усё з гэтых розных бінарных файлаў
ў фактычны выкананы файл.
Той, які вы можаце ўвесці кропка слэш кропку з.
>> Так што гэта, як файл, які напісаў, - усё, што ваша праграма is--
Цэзар кропка з.
Але цяпер ён быў складзены ўніз ў двайковы.
Так Цэзар кропка а.
І гэта наша CS50 бібліятэкі бінарны.
І яны спалучаючыся ў адзіны выкананы файл.
Так?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Такім чынам, спачатку ўключаюць, памятаеце, хэш ўключаюць фактычна
папярэдняй апрацоўкі крок.
Але гэта асобная.
Калі вы не выкарыстоўваеце любыя функцыі, якія знаходзяцца за межамі вашага адным файле, то,
не, вы не павінны звязаць нічога так у вас ёсць усё.
>> Тым не менш, Е ўвязваецца ст.
Калі Вы ніколі не выкарыстоўваць Printf, гэта тое, што , Які павінен быць звязаны ў
таму што вы не пішаце, што.
І на самай справе, Е аўтаматычна звязаны ў.
Вы ведаеце, як у камандным радку ці калі вы ўводзіце зрабіць, вы бачыце, што ёсць
працяжнік л CS50, які мае спасылку ў бібліятэцы CS50?
Printf, і ўсё ў такім духу, што адбываецца , Звязаны аўтаматычна.
Любыя іншыя пытанні па тэме?
>> АЎДЫТОРЫЯ: [неразборліва]?
>> ROB: Звязванне?
У нас ёсць цэлы букет розныя бінарныя файлы.
Гэта кананічны прыклад што мы выкарыстоўваем гэта бібліятэка CS50.
Мы сабралі і дадзена вам у двайковы для гэтага CS50 бібліятэкі.
>> Вы хочаце выкарыстоўваць GetString у вашай праграме.
Так вы ідзяце і выкарыстоўваць GetString.
Але без майго двайковым кодзе для GetString, пры кампіляцыі кода
ўніз, вы не змаглі запусціць свой Праграма таму GetString Радок
яшчэ не цалкам вызначаны.
>> Гэта толькі пры спасылцы на мой двайковы што ўтрымлівае GetString што зараз, усе
Добра, я магу на самой справе выканаць GetString.
Мой файл завершана.
І я магу запусціць гэты.
Так?
>> АЎДЫТОРЫЯ: Ці канвертаваць лінковка бінарны да выкананых?
Так што нават калі ў вас няма сябра бібліятэкі, ці не будзе яшчэ будзе
неабходна перавесці [Неразборліва]?
>> ROB: Так выкананы па-ранейшаму ў двайковай сістэме.
Гэта проста аб'яднанне цэлае куча выкананых файлаў.
>> АЎДЫТОРЫЯ: Вялікі дзякуй.
>> ROB: Няма праблем.
Яшчэ пытанні?
У адваротным выпадку, мы ўсё гатова.
Добра.
Дзякуючы.
>> [Апладысменты]
>> Залы: Дзякуй.
>> ROB: Так.