[Powered by Google Translate] David J. малая: Усё правільна.
Гэта CS50, і гэта ў канцы другога тыдня.
Калі вы плануеце быць галодным вакол гэтага заўтра час, ведаюць, што мы збіраемся
правесці як невялікай групай заўтра, чацвер, 1:15 PM.
Там ёсць URL тут, калі вы хочаце, каб RSVP.
Месцы абмежаваныя, так што даруйце, калі форма запоўненая да таго часу вы
запоўніць гэтую анкету.
Іншы URL, хоць гэта можа быць цікава гэта.
>> Так што амаль на працягу месяца, курс будзе даступная
Усё больш шырока праз EDX, праз якія людзі ў інтэрнэце будзе
магчымасць сачыць разам, удзельнічаць у працэсе дастаткова актыўна, на самай справе.
Яны буду выкарыстоўваць CS50 і CS50 Appliance Абмеркаваць і большасць
розныя праграмныя сродкі, якія мы ўжо выкарыстоўвалі ў гэтым семестры.
І адна з ініцыятыў, якія мы хацелі б ўзяць у якасці эксперыменту ў гэтым годзе
, Каб убачыць, як шмат зместу, якое мы можам перавесці ў іншыя кажуць і
пісьмовых моў.
Так што, калі вы маглі б мець зацікаўленасць ва ўдзеле ў гэтым праекце, у выніку чаго
мы дамо англійскай стэнаграмы і субтытры для курса
Лекцыі і шорты і семінараў, секцый і да т.п. -
калі вы свабодна гаварыць і пісаць свабодна на іншай мове, мы б
любіце займацца вы ў гэтым праекце, у якім вы ўзяць на сябе адну або некалькі
Відэа, пераводзячы іх на мову, вы ведаеце дастаткова добра.
Каб даць вам прадстаўленне аб інтэрфейсе, там гэтым вэб-інтэрфейс
, Якія мы будзем выкарыстоўваць, што створыць істотна карыстацкага інтэрфейсу, як гэта.
Гэта было мне выкладанні некаторых Дзень усіх Святых назад.
А на правай баку там у чорным побач з гэтымі пазнакамі часу,
Вы ўбачыце розныя рэчы, якія выйшлі з маіх вуснаў у той дзень.
І тады пад ім, вы зможаце перавесці на іншую мову.
Менавіта тое, што адлюстраванне паміж імі, у дадзеным выпадку, ангельскай
і, скажам, іспанскай мовы.
Так што гэта на самай справе вельмі зручны інструмент.
Вы можаце перамоткі назад і наперад вельмі лёгка з дапамогай спалучэнняў клавіш.
Так што, калі вы хочаце прыняць удзел у гэтым эксперыменце, і вашы словы
бачыў і чытаў, патэнцыйна тысячы людзей там, калі ласка адчуваюць
бясплатнае ўдзел.
>> Зараз некалькі слоў пра кацяня з панядзелка, каб мы адправілі празмерна
страшна паведамленні.
Разумею, што як офісныя гадзіны прапанаваць і як раздзелы выказаць здагадку,
Дызайн, вядома, вельмі шмат зрабіць, каб студэнты супрацоўнічаюць і
кажуць, каб працаваць праз праблемы мностваў і праблемы разам.
І сапраўды лініі проста зводзіцца да, зноў жа, праца, якую вы ў канчатковым выніку
павінны прадставіць павінна быць вашай уласнай.
І так будзе, шчыра кажучы - у працоўны час, гэта цалкам нармальна -
гэта цалкам і варта было чакаць, нават - пабалбатаць з некаторымі
сябры побач з Вамі.
Калі ён або яна змагаецца з некаторай тэме, і вы, як: ой, ну хай
мне даць вам зірнуць на некаторыя радкі кода, які я напісаў.
Гэта нармальна.
Гэта бывае.
І гэта вельмі спрыяльны, я думаю, з працэсам навучання.
Там, дзе лінія, зноў жа, атрымлівае перайшлі, калі галава нахіленая роду больш
тут занадта шмат секунд ці хвілін, якія сапраўды мець толькі
была магчымасць разблакоўкі для вашага сябра.
І, вядома, калі усё становіцца абмен па электроннай пошце і Dropbox і
як, там таксама ёсць лініі.
Такім чынам, усе сродкі, адчуваць сябе камфортна і адчуваць рэкамендуецца мець зносіны з сябрамі
і аднакласнікам аб psets і многае іншае.
І гэтак жа, разумею, што тое, што вы ў канчатковым выніку прадставіць, павінны быць сапраўды
прадукт вашага творчасці, а не нехта іншы.
>> Так, у тым жа ключы з прыемныя істоты, вы можаце
ведаю гэтага хлопца тут.
Так што гэта жудасна кепскай фільм з гадоў таму.
Хто тут бачыў Касмічныя яйкі?
Добра.
Так што добры нумар тут.
Такім чынам, гэта нашы выдатныя акадэмічныя спосаб ўвядзення Сёння ў канчатковым рахунку,
Паняцце крыптаграфіі.
І таму адным з вобласці канкрэтных задач для PSET 2, які прыйдзе
позна ўначы заўтра, пагрузіцца ў свет крыптаграфіі, якая
гэта мастацтва шыфравання або скремблирования інфармацыі.
І гэта ў канчатковым выніку звязана з светам бяспекі.
>> Цяпер бяспеку для большасці нас прыходзіць у выглядзе даволі свецкага механізмаў.
Ва ўсіх нас ёсць імёны карыстальнікаў і паролі.
І ва ўсіх нас ёсць вельмі дрэнныя імёны карыстальнікаў і паролі, хутчэй за ўсё.
Калі ваш пароль гэтак жа на некалькіх вэб-сайтах, што, верагодна, не
лепшая ідэя, так як мы абмяркуем бліжэй да канца семестра.
Калі ваш пароль запісваецца на запіскі - не жарт - на
маніторы, то гэта таксама не абавязкова лепшы дызайн, але даволі распаўсюджанае
з'яве.
І калі вы не выкарыстоўваеце крыптаграфію для шыфравання пароляў, яны
Асабліва можна перамагчы.
Так што калі вы думаеце, што быць супер разумны, маючы схаваныя словы
дакумент дзесьці на вашым цвёрдым дыску, які мае ўсе вашы паролі, але
ён знаходзіцца ў тэчцы, што ніхто не збіраецца зазірнуць, што таксама не вельмі
бяспечны механізм.
І тое, што PSET 2 будзе ўвесці гэта мастацтва крыптаграфіі і
скремблирования інфармацыі, так што такія рэчы, як паролі
Тым больш бяспечным.
Такім чынам, каб матываваць гэта вельмі рэальныя праблемы з вельмі не ў рэальным свеце
Сцэнар, дазвольце мне пазнаёміць вас з адным з нашых любімых кліпаў вось з гэтага
Фільм, Касмічныя яйкі.
>> [Прайграванне відэа]
-Шлем, вы злыдзень, што адбываецца?
Што вы робіце з маёй дачкой?
-Дазвольце мне прадставіць бліскучы малады пластычны хірург, д-р Філіп
Schlotkin, найвялікшым чалавекам носа ва ўсім
Сусвет і Беверлі-Хілз.
-Ваша Высокасць.
Нос працу?
Не разумею.
Яна ўжо была носа.
Гэта быў салодкі 16 гэтага.
-Не, гэта не тое, што вы думаеце.
Гэта значна, значна горш.
Калі вы не дасце мне спалучэнні з шчытом паветра, д-р Schlotkin будзе
даць вашай дачкі назад яе стары нос.
-Не!
Дзе ты гэта ўзяў?
-Усё ў парадку.
Я раскажу.
-Не, тата, няма.
Вы не павінны.
-Ты правы, мая дарагая.
Я буду сумаваць па вашых новым носам.
Але я не буду казаць ім камбінацыі ні на што.
-Вельмі добра.
Доктар Schlotkin, справа ваша.
-З задавальненнем.
-Не!
Пачакайце, пачакайце.
Я раскажу.
-Я ведаў, што ён будзе працаваць.
Добра, дайце яго мне.
-Спалучэнне з'яўляецца адным.
-One.
-Два.
Тры
-Тры.
Чатыры.
Пяць
-Пяць.
-Такім чынам, камбінацыя адзін, два, тры, чатыры, пяць.
Гэта самае дурное спалучэнне я калі-небудзь чуў у сваім жыцці.
Гэта такая рэч, ідыёт будзе мець на сваім багажы.
-Дзякую вас, ваша высокасць.
-Што ты зрабіў?
-Я выключыў сцяну.
-Не, ты гэтага не зрабіў.
Вы выключылі ўвесь фільм.
-Павінна быць, я націснуў не на тую кнопку.
-Ну, паклаў яго назад.
Пакласці фільм назад.
-Так, сэр.
Так, сэр.
-Хадзем, Эрна.
Ну, Гретхен.
Вядома, вы ведаеце, я ўсё роўна прыйдзецца выставіць вам рахунак за гэта.
-Ну, гэта спрацавала?
Дзе вароты?
-Гэта спрацавала, сэр.
Мы маем камбінацыю.
-Выдатна.
Цяпер мы можам узяць кожны апошні глыток свежага паветра з планеты Druidia.
Якая камбінацыя?
-Адзін, два, тры, чатыры, пяць.
-Адзін, два, тры, чатыры, пяць?
-Так.
-Гэта дзіўна.
У мяне тая ж камбінацыя на мой багаж.
Падрыхтоўка Spaceball 1 для неадкладнага ад'езду.
-Так, сэр.
-І змяніць камбінацыю на мой багаж.
-Ой!
[END прайграванне відэа]
>> David J. малая: дзіўны фільм, які вы павінны зараз усё бачаць.
Такім чынам, кантэкст тут з'яўляецца тое, што з небяспечнай дадзеныя паступаюць магчымасць
зашыфраваць яго і, каб засакрэціць яго.
І вось гэты, напрыклад, з'яўляецца прыкладам зашыфраванае паведамленне.
Гэта на самой справе нешта гаворыць на англійскай мове.
Але гэта відавочна не цалкам відавочная.
І мы прайшлі поўны круг сёння, каб дражніць адзін ад аднаго, што гэта сакрэт
паведамленне тут.
Але ў рэальным свеце кампутараў, рэчы, нават не падобна, што яны могуць
быць ангельскія фразы.
Напрыклад, гэта тое, што вы можаце знайсці на стандартнай Linux ці Mac або
Unix кампутары ў файл, які быў калісьці называлі файла пароляў.
У цяперашні час, гэта былі перамешчаныя ў іншыя месцы.
Але калі вы паглядзіце ў патрэбным месцы ў сістэме, вы ўбачыце не толькі вашы
Імя карыстальніка або іншых людзей у сістэме, але вы ўбачыце,
зашыфраваную версію пароля.
Сапраўды, слова склеп там мяркуе, што наступныя рэчы ў зашыфраваным выглядзе.
І гэты шэраг, здавалася б, выпадковых літар і знакаў і лічбаў
г.д. могуць быць расшыфраваны толькі ў цэлым ведаючы некаторыя таямніцы -
сакрэтнае слова, сакрэтны нумар.
І сапраўды, мастацтва крыптаграфіі ў канчатковым рахунку, зводзіцца да таго, давяраю некаторых
роду і, ведаючы тое, што хтосьці не робіць.
Мы разгледзім гэта ў трохі больш падрабязна сёння і ў PSET ў будучыні.
>> А зараз некалькі слоў пра Pass / Fail.
Такім чынам, у прыватнасці, як некаторыя з вас нырнуў у PSET 1, прылада і
Вельмі новы свет для сябе, зразумеў, што расчараванні і
блытаніну і проста тэхнічных цяжкасцяў варта чакаць.
Асабліва з першым PSET, дзе ёсць так шмат усяго новага, проста атрымліваю
знаёмы з Ls і кампакт-дыск, і ўсе гэтыя таемныя каманды ў новых умовах.
І гэта асобна ад фактычнага матэрыялу і праграмаванне сябе.
Так разумею і тое, што ёсць, вядома, працоўныя гадзіны, якія існуюць як
Падтрымка структуры.
Раздзелы пачаць у бліжэйшую нядзелю.
Але самае галоўнае, калі вы адчуваеце сябе проста, што гэта не
свет для цябе, разумееш, што гэта сапраўды проста трэба час.
І калі б не гэтая магчымасць гадоў таму для мяне ўзяць клас
прыдатны / не прыдатны, калі шчыра, я ніколі б нават ступіць у класе.
І вы можаце змяніць гэта да, скажам, пяты панядзелак курс.
Так што калі вы на краі цяпер, разумееш, што замест галавы ў некаторых іншых
вод у цэлым, не толькі, вядома, разгледзець змены ў залік / незалік.
Зноў жа, гэта не зусім гэтую культуру тут, у Гарвардзе прымаць рэчы
прыдатны / не прыдатны, так як усё на самой справе хоча дасягнуць або overachieve.
Але, шчыра кажучы, гэта выдатны спосаб паспрабаваць нешта, што, магчыма, не
быць вам знаёмыя.
І вы будзеце ў канчатковым выніку робяць у большасці выпадкаў досыць добра, можа быць,
шмат да вашага здзіўлення.
І больш канкрэтна, тое, што я думаю, што прыдатны / не прыдатны наогул робіць,
Асабліва, як вы, магчыма, выпрабавалі з PSET 0, калі вы размясцілі
У 10 гадзін, 15 гадзін, 25 гадзін у некаторых PSET - і вы проста стукаць
галавой аб сцяну,
і яна становіцца супер позна ўначы,
але вы зрабілі PSET як 90% шляху,
Вы ведаеце, вы проста не можаце зразумець адну рэч -
прыдатны / не прыдатны сапраўды здымае вастрыню класа, як гэта, дзе вы можаце сартаваць
з радасна сказаў добра, я ведаю, што гэта не ідэальна.
Але я рабіў сваю задніцу на гэты конт.
Я вельмі задаволены, дзе ўсё гэта скончылася.
І гэта будзе адпавядаць чаканням для прыдатны / не прыдатны.
Так што майце гэта на ўвазе.
>> Добра.
Так што тыя з вас, хто спрабаваў выкарыстаць Гарвардскага універсітэта Wi-Fi ведаць
што ёсць CS50 SSID, Wi-Fi злучэнне плаваюць вакол, што вы
магчыма, пашанцуе больш для.
Гэта крыху парадаксальна, што пароль для гэтага - калі вы хацелі б паспрабаваць
падлучэнне да гэтага для лепшай хуткасці і дайце нам ведаць, калі гэта не лепш -
адзін, два, тры, чатыры, пяць, аж да васьмі, таму што восем з'яўляецца
больш бяспечным, чым пяць гадоў.
Так што калі вам патрэбен Wi-Fi пароль, падлучыцца да бесправаднога CS50 тут.
Адзін, два, тры, чатыры, пяць, шэсць, сем, восем.
І паведамленні CS50 Абмеркаваць калі вы да гэтага часу перыядычна ўзнікаюць праблем падлучэння,
і мы дамо паўнамоцтвы, якія будуць ведаць гэта прастора.
>> Добра.
Так хутка тізер, асабліва для тых з вас, хто вентылятара хлопчыкаў ці дзяўчынак
ўсіх Яблык рэчы.
Тое, што я выкапаў з некалькі гадоў таму быў гэты файл тут, ilock.c, проста каб
выгляд зрабіць больш канкрэтнымі і больш складаныя некаторых з больш фундаментальных C
праграмы мы пісалі.
Так я адкрыў гэты файл, ilock.c.
Ён даступны на старонцы лекцыі на сённяшні дзень.
З левага боку, вы ўбачыце доўгі спіс функцый.
Такім чынам, чалавек, які напісаў гэта напісаў шмат функцый,
больш, чым проста асноўны.
Ён выкарыстаў цэлую кучу бібліятэк тут.
І калі мы пачнем прагорткі, што гэта на самай справе з'яўляецца вельмі
Па-першае, я лічу, русіфікатар для арыгінальнага iPhone.
Калі Вы хацелі зрабіць джейлбрейк арыгінальны iPhone, а гэта значыць непрывязаныя джейлбрейк
ад AT & T і фактычна ўсталяваць спецыяльнае праграмнае забеспячэнне на ім і рабіць рэчы
, Што Яблык не хачу, каб людзі робяць -
Ну, хтосьці знайшоў час, каб высветліць, як менавіта яны могуць выкарыстоўваць
праграмныя памылкі, памылкі, памылкі, праграмнага забеспячэння Apple.
І такім чынам нарадзілася ilock.c.
Вось калі б ён быў скампіляваны на кампутары і ўсталяваць яго на iPhone, што
быў падлучаны да кампутара з дапамогай, скажам, кабель USB, гэта дасць вам
адміністрацыйныя або прывілеі на вашым iPhone і дазваляе зрабіць вельмі многае,
што вы хочаце.
>> І вось там быў гэты займальны кошкі-мышкі паміж Apple, і
астатняга свету, у прыватнасці, так як яны, як і шматлікія кампаніі, спрабуюць заблакаваць
свае рэчы ўніз, так што вы можаце рабіць з ім, што яны маюць намер.
Але дзякуючы такім людзям, як гэта і свайго разумення нізкага ўзроўню
дэталі і, у дадзеным выпадку, C праграмавання і шмат знаёмых канструкцый
што мы пачалі гуляць, вы зможаце па-сапраўднаму рычагі
апаратнага такім чынам, вы лічыце патрэбным, і не абавязкова некаторых юрыдычнай асобай.
Так, напрыклад, я паняцця не маю, што ўсё гэта робяць.
Але GetVersion гучыць даволі проста.
І, падобна, гэта функцыя, што гэты чалавек напісаў.
Вазьмі свайго роду цэлае ў якасці аргументу, нічога не вяртае, але
здаецца, завесы з цыклу тут і, калі ўмова, калі ўмова,
разарваць, і як-то ставіцца да нумара версіі.
Калі мы пракруціць ўніз -
хоць многія з гэтых ключавых слоў будзе новая, і ёсць
шмат функцый тут мы ніколі не бачылі і не маглі б калі-небудзь убачыць больш
семестра -
У рэшце рэшт, гэта варта тым жа правілам і логіцы, што мы былі
гуляць з да гэтага часу.
Так што гэта занадта стары, каб зламаць ваш iPhone або 3s 4s 5s або неўзабаве, у нашы дні,
але ведаю, што ўсё гэта вельмі атрыманыя з гэтага свету, які мы
нырнуў.
>> Такім чынам, давайце зірнем на некалькі больш просты прыклад.
Гэта адна, проста каб сагрэцца з некаторымі сінтаксісу, а таксама некаторыя іншыя дадзеныя
Тып, што мы казалі, але сапраўды не бачыў у С. Такім чынам, гэта
Размовы называецца positive1.c.
І ў каментарах на вяршыні, гэта проста патрабуе, каб карыстальнік падаваў
станоўчае лік.
Так што гэта прыклад зрабі той час як цыкл, які добры для карыстальнікаў інтэрактыўнага
праграм, дзе вы павінны сказаць карыстачу, каб нешта зрабіць.
І калі яны не супрацоўнічаюць, вы крычаць на іх або адхіліць іх ўводу.
Справа ў кропку, я збіраюся зрабіць лініі ад 19 да 24 так доўга, як карыстальнік
не даў мне станоўчае лік.
Зараз гэтая дэталь тут, на лініі 18, чаму я заяўляю, п вышэй за ўсё гэтага
цыкл канструкцыя, у адрозненне ад прама побач з лініяй 22, дзе я
на самай справе клапоцяцца, каб атрымаць п?
Да?
[Неразборліва]
>> David J. малая: Так, так што гэтае пытанне з вобласці бачнасці.
І ў тэрмін непрафесіянала, што робіць вобласць ставіцца?
Да?
[Неразборліва]
David J. малая: Ці можаце вы гаварыць гучней?
Выступоўца 1: Дзе можна атрымаць доступ да пэўнай зменнай.
David J. малая: Perfect.
Дзе Вы можаце атрымаць доступ да пэўнай зменнай.
І наогул, правіла да гэтага часу было, што сфера прымянення некаторых
Зменная вызначаецца самай апошняй фігурныя дужкі, што вы бачылі.
І таму ў дадзеным выпадку, калі я зрабіў памылку, абвясціўшы п на лініі 22,
, Што лінія будзе працаваць.
Я хацеў бы атрымаць цэлы лік, і я б паставіў яго ў гэтай зменнай п ў радку 22.
Але якія радкі кода, цяпер паняцця не маю, пра што я кажу?
Такім чынам, 25, і аказваецца, што 24, а таксама, таму што ў гэтым выпадку ён выходзіць за межы
у фігурныя дужкі.
Так што проста трохі непрыемнасць, але вельмі лёгка вырашаецца проста абвясціўшы
зменную за межамі самой функцыі.
>> Зараз мы ўбачым пазней сёння, вы можаце зрабіць яшчэ адзін крок.
І вы можаце нават атрымаць трохі гультаяваты -
і гэта не рэкамендуецца, у агульным -
але вы можаце нават атрымаць лянівага і пакласці зменную ў глабальным маштабе, так бы мовіць, не
ўнутры функцыі, а не ўнутры цыклу, але ў самім файле, па-за
ўсіх функцый вы напісалі, як я зрабіў тут, на лініі 15.
Але гэта, як правіла, з неадабрэннем.
Але разумею, што гэтае рашэнне часам да іншых праблемах, як мы
у канчатковым рахунку бачыць.
Такім чынам, на дадзены момант, мы пакінем гэта так.
Але давайце паглядзім, калі мы можам перапісаць гэта толькі пачатак выказаць сябе
крыху па-іншаму.
>> Такім чынам, гэтая праграма, проста каб быць ясна, з'яўляецца positive1.
Дазвольце мне ісці наперад тут і ў маім акне тэрмінала зрабіць positive1, Enter.
Кампіляцыя, добра.
Я збіраюся запусціць positive1, націсніце Enter.
Я патрабую, каб вы даць мне цэлае станоўчае лік.
Я скажу -1.
Гэта не працуе.
0, 99, што, здаецца, працуе.
Можа быць, не самы строгі тэст.
Але па крайняй меры гэта добрая праверка наяўнасці свядомасці, што мы знаходзімся на правільным шляху.
Так што цяпер дазвольце мне ісці наперад і адкрыць другі варыянт гэтага.
І чым адрозніваецца ўжо?
Ён рэалізуе тое ж самае.
Але тое, што скача, як выразна ў гэты раз?
Так, так гэта BOOL ў зялёны колер.
Gedit быў выдзелены зялёным колерам гэта ключавое слова вядома як лагічны,
, Які з'яўляецца тыпам дадзеных.
Яна не прыходзіць пабудаваны ў для ўсіх версій C. Неабходна ўключыць
канкрэтнай бібліятэкі.
У нашым выпадку, я ўключыў CS50 бібліятэкі, так што мы
мець доступ да BOOL.
Але ў радку 18, мы, здаецца, ёсць лагічнае значэнне тут называюць ўдзячныя.
Так што я мог бы назваць гэта нічога.
Але я назваў гэта ўдзячная проста выгляд перадаюць сэнсавае значэнне.
Такім чынам, першапачаткова на лініі 18, я, мабыць, не ўдзячны, таму што
Лагічнае значэнне ўдзячныя ініцыялізуецца ілжывым у радку 18.
І тады здаецца, што я зрабіў тут у радках з 21 па 23 гэта я толькі што
выгляд перапісаць маю логіку.
Так што не функцыянальна розныя.
Але ў радку 22 цяпер, я магу праверыць, калі Int карыстальнік прадаставіў больш
0, то я проста змяніць значэнне ўдзячныя праўда.
А навошта мне гэта рабіць?
Таму што ў радку 25, па-відаць, я збіраюся праверыць стан.
У гэтага цыкла ў той час як ўдзячны з'яўляецца ілжывым.
>> Так што я прапаную гэта ў якасці альтэрнатывы версію, таму што яна, па меншай меры
трохі больш інтуітыўна, можа быць.
Гэта крыху больш абгрунтаванай на англійскай мове.
Такім чынам, выканайце наступныя дзеянні, пакуль вы не ўдзячныя або пры ўдзячныя з'яўляецца ілжывым.
І на гэты раз я таксама, мабыць, не люблю ўспамінаць тое, што карыстач набраў
У апавяшчэнні, таму што няма зменнай п.
Такім чынам, на самай справе, я -
маленькая белая хлусня там.
Функцыянальна праграма трохі адрозніваецца, як толькі мы атрымаем на дно
гэта таму што я не памятаў, што п.
Але я хацеў паказаць тут, што, хоць мы бачылі і GetInt
GetString выкарыстоўваецца на правы бок знака роўнасці да гэтага часу, так што
Мы памятаем значэнне, тэхнічна, гэта не строга абавязкова.
Калі па якіх-небудзь прычынах вы проста не клапоцяцца, каб захаваць значэнне, вы проста хочаце
для праверкі значэння, заўважылі, што мы можам проста напісаць гэта як GetInt адкрытым
хлопец, побач хлопец.
Гэтая функцыя будзе вяртаць значэнне, як мы ўжо казалі.
Гэта будзе вярнуць вам Int.
І таму, калі вы ў думках думаю, што гэта адбудзецца, калі я друкую ў 99, GetInt
вяртае лік 99.
І так канцэптуальна, гэта як бы мой код быў на самай справе гэтага.
Так, калі 99 сапраўды больш 0, то ўдзячны становіцца сапраўдным.
Тады лінія 25 рэалізуе ох, мы зрабілі, таму што я цяпер ўдзячная.
А ў радку 26, мы проста гаворым, дзякуй за натуральнае, якой бы яна
давялося быць.
>> Зараз давайце зробім невялікі сінтаксічны цукар тут, так бы мовіць.
Давайце паглядзім, калі мы можам прыбіраць гэтую лінію 25 з гэтай трэцяй і апошняй дысперсіі
У positive3.
Так заўважыць той толькі розніцай, што цяпер радкі кода?
Так, так 25.
І мы сапраўды не бачыў гэты трук толькі пакуль.
Але мы бачылі клічнік у панядзелак, які пазначае, што?
Дык не, або адмаўленне.
Так што бярыце лагічнае значэнне і перавярнуць яго значэнне.
Праўда, становіцца ілжывым.
Ілжывыя становіцца сапраўдным.
Так што гэта, я хацеў бы прапанаваць, нават крыху больш інтуітыўным спосабам
напісанне кода, таму што я да гэтага часу ўдзячны ініцыялізацыі ілжывым.
Я ўсё яшчэ раблю наступнае.
Я паставіў ўдзячныя дакладна, калі прыйдзе час.
Але цяпер вы сапраўды можаце проста перавесці гэты код вусна злева направа,
хоць і не ўдзячныя.
З-за выбуху, або клічнік, пазначае паняцце няма, так што пакуль
Ня ўдзячныя.
>> Такім чынам, яшчэ раз, мы не ўведзены новыя паняцці як такога.
Мы гаварылі пра лагічных назад, калі мы гулялі з нуля.
Але разумею, зараз мы можам проста пачаць пісаць наш код у
па-рознаму.
Такім чынам, асабліва ў pset1, калі вы, здаецца, спрабуе высветліць спосаб
напісаць праграму, напэўна вам пашанцавала, таму што гэта будзе любая
шэраг рашэнняў, якія вы можаце выпадкова сустрэць.
Напрыклад, гэта ўсяго толькі тры нават для простых праграм.
Добра.
А зараз успомнім ў панядзелак, мы выйшлі на гэтую цыдулку з вяртаннем значэння.
Так, у першы раз, мы напісалі праграму, якая не проста галоўнай,
яна таксама мае сваю ўласную функцыю, якую я напісаў тут.
Такім чынам, у адпаведнасці з 31 па 34, я рэалізаваў функцыю куб.
Гэта не комплекс.
Гэта ўсяго толькі разу ў раз, і ў гэтым выпадку.
Але, што важна пра яго, што я бяру ўваходу ў форме і
Я вяртаюся выхад у форме разу ў раз.
>> Так што цяпер у мяне ёсць магчымасць, гэтак жа, як я раней з Printf адзін, тэлефанаваць
гэтую функцыю, выклікаўшы функцыю куб.
І куб функцыя прымае некаторыя ўваход.
І куб функцыя вяртае некалькі выходных.
І наадварот, Printf проста нешта зрабіў.
Яна не вяртае нічога, што мы клапаціліся аб - хоць, як
ў бок, яна вяртае значэнне.
Вы проста ўвогуле ігнаруюць яго.
Printf проста нешта зрабіў.
Гэта быў пабочны эфект друку на экране.
У адрозненне ад тут, у нас ёсць куб функцыі, якія
на самай справе вяртае нешта.
>> Так што гэта наогул -
для тых, хто знаёмы з гэтым, гэта даволі простая ідэя.
Але для тых, хто менш знаёмы з гэтай ідэяй якія праходзяць у ўваходы і атрыманне
назад выхадаў, давайце паспрабуем проста нешта супер проста.
Хто-небудзь зручныя падышоўшы на этапе коратка?
Вы павінны быць знаёмыя з камерай на вас, як добра.
Так.
Добра, што вас клічуць?
KEN: Кен.
David J. малая: Кен.
Добра, Кен.
Падымайся.
Так што Кен будзе функцыя выгляду тут.
І давайце ісці наперад і рабіць гэта.
Давайце трохі фантазіі.
Вельмі прыемна.
Сардэчна запрашаем у цэнтры сцэны.
Добра.
Давайце хіт гэтай кнопкі тут.
Добра.
Так што тут у вас ёсць сучасны дошцы.
І тое, што я з'яўляецца асноўнай функцыяй, напрыклад.
І я не маю IPad ў руках.
Я сапраўды не памятаю, як - ну, на самай справе, не магу сказаць.
Я сапраўды не маюць добры почырк.
І таму я хачу, каб вы нешта надрукаваць на экране для мяне.
>> Так што я з'яўляючыся асноўнай праграмы.
І я хачу, каб ты сказаў гэта, напісаўшы яго ў маёй курынай нуля і
Затым міма вас ўваход.
Гэтак жа дурное, хоць гэта практыкаванне, паняцце функцый і выкліку
Функцыя і вяртанне функцыяй сапраўды зводзіцца да гэтага.
Я на-Майне.
Я толькі што напісаў Е ("нешта") на экране.
Я бягу гэтай праграмы.
І як толькі Printf выклікаецца, яна прымае адзін аргумент - ці адзін параметр,
часам -
ў падвойныя двукоссі.
Вось гэта аргумент.
Я перадаю яго Кен.
Зараз ён з'яўляецца чорнай скрыняй напісаў некалькі гадоў назад, па-відаць
ведае толькі як друкаваць рэчы на ​​экране.
>> Такім чынам, выкананне.
Гэта не дрэнна.
Так, вельмі добра.
Так што цяпер Кен робіцца выкананне.
Яму трэба, каб перадаць мне нічога наўзамен?
Такім чынам, не тое, што мы бачылі да гэтага часу.
Зноў жа, Printf ці на самай справе вяртае лік.
Але мы збіраемся ігнараваць, што на дадзены момант, таму што мы ніколі не выкарыстоўвалі яго.
Дык вось яно што для Кена.
І вось цяпер асноўныя вяртаецца выканаць -
Асноўнымі бярэ на сябе кіраванне праграмай зноў, таму што радкі кода,
Printf, ажыццяўляецца выкананне.
І мы ідзем аб нашым шляху выканання любых іншых ліній ёсць.
>> Добра.
Такім чынам, цяпер давайце паспрабуем трохі іншы прыклад.
І на гэты раз тут, давайце спачатку ачысціць экран тут.
І на гэты раз мы будзем рабіць вымярэння кубатуры функцыі.
Але на гэты раз, я думаю, выходную значэнне.
Так што давайце ісці наперад і рабіць гэта.
Так што зараз у мяне ёсць радок кода, якая кажа, х = куба (х).
Так што на самай справе let's -
радок кода, нагадаем, выглядае наступным чынам.
х = куба (х).
Так як гэта будзе працаваць?
Так што давайце ісці наперад і даць вам белы экран.
І я збіраюся пісаць цяпер да значэння х, якія ў дадзены момант
Час здараецца, скажам, 2, захаваць яго простым.
Так што я запісаў на паперцы значэнне 2,
, Які з'яўляецца маім значэння х.
Я перадаю яго Кен.
KEN: А я проста пішу адказ?
David J. малая: Так, давайце проста напісаць адказ.
Добра.
І цяпер ён павінен вярнуць мне што-небудзь.
Так што -
дасканалай.
Прыемна пераход.
>> Так што цяпер ён працягвае мне назад значэнне 8, у дадзеным выпадку.
І што мне рабіць з ім?
Ну, на самой справе, давайце паглядзім.
Атрымаць гэта права.
Што я буду з ёй рабіць?
Цяпер я збіраюся прыняць гэта значэнне і на самай справе захоўваць яго ў тых
тыя ж біты ў памяці.
Але заўважце, я трохі змагаюцца тут.
Я крыху зьбянтэжаны, таму што дзе я на самай справе пісаць значэнне х?
Таму што я толькі што зрабіў фізічна руку Кен паперы
, Якія мелі значэнне 2, якое было х.
І сапраўды, гэта менавіта тое, што адбываецца.
Вось і атрымліваецца, што пры выкліку функцыі, і вы перадаеце ў якасці аргументу
як "прывітанне свет" ці вы перадаеце ў якасці аргументу, як 2, як правіла, вы
якая праходзіць у копіі гэтага аргументу.
І гэтак жа, як я запісаў нумар 2 тут і перадаў яго Кена, якія павінны
азначае, што ў мяне яшчэ ёсць копія значэння 2 недзе.
Таму што сапраўды, цяпер, калі я атрымаў назад значэнне 8, мне трэба, каб вярнуцца ў
RAM і фактычна запісаць 8, дзе я калісьці быў нумар 2.
>> Такім чынам, візуальна памятаю гэта паняцце праходзіць у літаральным
копію значэння.
Кен робіць сваю справу, працягвае мне ў адказ нешта - у дадзеным выпадку,
значэння, як 8.
А то ў мяне нешта зрабіць з гэтым значэннем, калі я
хочаце захаваць яго вакол.
Так што ўсё гэта будзе занадта добра знаёмыя ў хуткім часе.
Дзякуй вам вялікі за гэта дэма тут, Кен.
Добра.
Вельмі добра зроблена.
Такім чынам, давайце паглядзім, як гэта ў канчатковым выніку звязана з некаторымі з функцый
выкліку, што мы робім тут.
Такім чынам, дазвольце мне ісці наперад і вярнуць нас да вымярэння кубатуры прыклад.
І звярніце ўвагу, што калі мы сапраўды хочам пачаць прымаць гэта далей, мы збіраемся
мець, каб памятаць пра тое, што колькасць х які перадаецца ў
тут адрозніваецца ад таго, што на самой справе перадаецца ў функцыю.
Такім чынам, яшчэ раз, гэта прыняты копія стане зусім
дарэчныя ў адну хвіліну.
>> Такім чынам, давайце зірнем на тое, што не зусім правільна працаваць яшчэ.
Я збіраюся ісці наперад і адкрыць Трэці прыклад памылкі, якая
недасканалая па сваёй прыродзе.
І гэта называецца buggy3, і рэалізуе замены.
Такім чынам, тут мы маем асноўныя функцыі, якія х і ў адвольна ініцыялізуецца
1 і 2, адпаведна.
Мы маглі б выкарыстоўваць GetInt, але нам проста трэба простае практыкаванне.
Такім чынам, гэта жорстка, як 1 і 2.
У радках 21 і 22, мы, мабыць, раздрукуйце х і у, па адным на радок.
Затым у радку 23, я сцвярджаю, я абмен гэтымі значэннямі, кропка, кропка, кропка.
Я мабыць выкліку функцыі ў радку 24 завецца своп
, Якая прымае два аргументу.
Гэта цалкам законна для функцыі прымаюць два аргументу.
Мы бачылі Printf гэта зрабіць ужо.
Такім чынам, своп-відаць, мае х і у.
І, як мяркуе яго назва, я спадзяюся, што гэта будзе
памяняць гэтыя два значэнні.
Тады я прэтэндаваць на лініі 25, памяняліся месцамі.
І я перадрукаваць х і ў у здагадцы, што
яны сапраўды былі памянялі месцамі.
Але калі я сапраўды запусціць гэтую праграму -
Дазвольце мне адкрыць акно тэрмінала.
Дазвольце мне зрабіць buggy3.
Як вынікае з назвы, гэта не скончыцца добра.
Таму што, калі я ударыў Enter, заўважыў, што х 1.
у-2.
І ўсё ж у канцы праграмы, яны ўсё яшчэ, па сутнасці, тое ж самае.
>> Такім чынам, на аснове дэманстрацыі толькі цяпер з Кеном, тое, што адбываецца на самай справе?
Ну, давайце пагрузіцца ў гэтую своп функцыі.
Гэта супер кароткія.
Гэта ўсяго толькі некалькі радкоў кода доўга.
Але тое, што фундаментальныя праблемы на аснове простую гісторыю распавёў
тут з Кеном?
Чаму падпампоўкі не працуе?
[Неразборліва]
Менавіта так.
Такім чынам, мы захоўванні на копію, а не саму зменную.
Іншымі словамі, своп-відаць, мае два аргументу, Int.
І гэта ўмоўна назваць і б.
І тут, я прайшла па х і у, якія з'яўляюцца адпаведна 1 і 2.
Але я не ў літаральным сэнсе якая праходзіць у х.
Я не літаральна праходзіць у год.
Я перадаю копіі х і копію у.
Гэта ўсё роўна, амаль як калі б вы скапіявалі і ўставілі ў памяняйце значэння,
Вы хочаце, каб на самой справе маніпуляваць.
Так што, калі гэта так, калі я, праграму, пачаць выкананне
радок 35, то 36 -
калі я дабіраюся да лініі 37, на дадзены момант у гэтай гісторыі, што значэнне?
У гэты момант у гісторыі, радок 37, што з'яўляецца значэнне ў гэтай кропцы?
Так яно і павінна быць проста 1.
Правільна?
Паколькі х быў прыняты ў якасці першага аргументу.
І гэтая функцыя проста адвольна называе свой першы аргумент,.
Сапраўды гэтак жа гэта ў, другі аргумент.
І гэта проста адвольна выкліку 2. б аргумент.
>> Зараз гэтая дыхатамія на самай справе даволі проста растлумачыць.
Падумайце пра гэта.
Ніхто з нас не сустракаў чалавека, які напісаў Printf.
Так што, вядома, ён або яна не ведае, што нашы зменныя праз 30 гадоў збіраюцца
называецца.
Так што павінна быць адрозненне паміж, што вы называеце зменныя ў
Функцыі вы пішаце і што вы называеце зменныя ў функцыях вы
пазваніўшы або выкарыстання.
Такім чынам, іншымі словамі, я напісаў мае зменных х і у.
Але калі нехта іншы напісаў своп функцыі, ён або яна, вядома,
не ведаю, што маё зменных будзе называцца.
Так разумею, што гэта, чаму ў вас ёсць гэтая дваістасць імёнаў.
Тэхнічна я мог зрабіць гэта выпадкова.
Але яны ўсё роўна перадаецца ў якасці копіі.
Было б проста чыстае супадзенне эстэтычна, калі гэты чалавек, які напісаў
падпампоўкі выкарыстоўвалі тыя ж імёны.
>> Добра.
Такім чынам, на дадзены момант у гэтай гісторыі, радок 37, 1.
Ь 2.
А цяпер я пераходжу да памяняць іх месцамі.
Ну, па-першае, дазвольце мне на самай справе зрабіць гэта значна прасцей.
Я не ведаю, што гэтыя тры радкі кода рабілі.
Дазвольце мне зрабіць гэта.
б атрымлівае.
атрымлівае б.
Гатова.
Чаму гэта зламаны, лагічна?
Гэта свайго роду інтуітыўныя рэчы, ці не так?
Такім чынам, становіцца б.
І б становіцца.
Але праблема ў тым, што як толькі радку 37 выконваецца, то, што
Значэнне і б?
Тое ж самае, 1.
Таму што вы сходу, так бы мовіць, вы змянілі б роўным.
Таму, як толькі лінія 37 выкананая, гэта выдатна.
Зараз у вас ёсць дзве копіі нумарам 1 ўнутры гэтай функцыі.
Такім чынам, калі вы кажаце ў радку 38, б атрымлівае, ну, ты накшталт на нітах.
Таму што вы проста прысваенні 1 да 1.
Ты накшталт страціў значэнне, якое вы клапаціліся аб.
>> Такім чынам, у арыгінальную версію гэтай, звярніце ўвагу, што я зрабіў.
Замест гэтага я была трэцяя радок кода, якая выглядала наступным чынам.
Я заяўляю, часовая зменная - TMP з'яўляецца вельмі распаўсюджаным назвай
для часовых зменных.
Гэта Int таму што ён павінен адпавядаць таму, што я хачу зрабіць копію.
Я захоўваю копіі ўнутры TMP. Таму, як толькі лінія 37 была выкананая,
Значэнне гэта -
хуткая праверка спраўнасці -
1.
Значэнне Ь 2.
І каштоўнасць TMP таксама 1.
Так што цяпер я выканаю лініі 38.
Таму, як толькі лінія 38 выконваецца, прымае значэнне б.
І У 2.
Такім чынам, у цяперашні час 2.
Такім чынам, на дадзены момант у гэтай гісторыі, роўна 2, б = 2,
і TMP 1.
Так што цяпер лагічна, мы можам значэння проста пляснуць TMP ў ў б.
І мы зрабілі.
>> Такім чынам, мы вырашылі гэтую праблему.
На жаль, калі я запускаю гэтую праграму ў такім выглядзе, гэта на самай справе не памяняць
любыя значэння.
Але каб быць зразумелым, чаму?
Я усталяваў лагічныя задачы з усяго хвіліну таму.
Але зноў жа, калі я запускаю гэтую праграму, х і у, застаюцца нязменнымі да канца
праграмы выканання.
[Неразборліва]
David J. малая: Такім чынам, мы не вярнулі нічога.
Так што гэта праўда.
Але, аказваецца, ёсць невялікая праблема тут, таму што да гэтага часу,
Адзінае, што мы змаглі вярнуць гэта адно.
І гэта абмежаванне C. Вы можаце вярнуць толькі сапраўды адно значэнне,
У гэтым выпадку, я трохі затрымаўся тут
таму што я мог вярнуць новае значэнне х, ці я мог бы вярнуцца
Новае значэнне у.
Але я хачу, і назад.
Такім чынам, вяртання не простае рашэнне тут.
Але праблема ў корані чаму?
Што мы на самай справе памяняліся месцамі?
а і б.
Але і б з'яўляюцца копіямі х і у, якая азначае, што мы толькі што зрабілі ўсё гэта
працаваць - мы толькі што правялі, як тры хвіліны казаць пра своп
функцыю, і ўсе тры з гэтых зменных.
І гэта выдатна, зусім правільна ў ізаляцыі.
Але і сферы B, толькі ў гэтых радках тут.
Так як цыкл, калі вы аб'явіце цэлае я ўнутр для
пятлю - так жа, калі вы аб'яўленні і б ўнутры функцыі, што
Вы напісалі, што яны сапраўдныя толькі ўнутры гэтай функцыі.
Гэта азначае, як толькі своп зрабіць выкананне, і мы ідзем ад лініі 24 да
радок 25, х і ў не змянілася.
Вы проста марна шмат часу, абмен копіямі зменных.
>> Вось і атрымліваецца, што рашэнне гэта на самай справе, не відавочна.
Гэта не зусім дастаткова, каб вяртаць значэння, таму што мы можам
вяртаць толькі адно значэнне.
І я сапраўды хачу, каб абмяняць х і ў ў той жа час.
Так што мы збіраемся вярнуцца да гэтага.
Але цяпер разумею, што пытанне прынцыпова звязана з тым,
што А і У з'яўляюцца копіямі.
А яны ў сваю сферу.
Ну, давайце паспрабуем вырашыць гэта ў некаторым родзе.
Дазвольце мне на самай справе пракруціць таму тут і адкрыць, скажам, чацвёрты варыянт
гэта, buggy4.
А што з гэтай нагоды?
Гэта падобныя, але больш простую задачу, каб глядзець на, перш чым прыняць ўдар на
яе рашэння.
Гэтая праграма называецца прырашчэннем.
І ён, відавочна, ініцыялізуе цэлы лік х 1 у радку 18.
Я тады сцвярджаць, х 1.
Я тады прэтэнзіі прырашчэння, кропка, кропка, кропка.
Затым я выклікаю прырост.
Але тады ў радках 22 і 23, я сцвярджаю, што гэта было павялічваецца.
Я сцвярджаю х зараз бы гэта ні было, 2 меркавана.
>> Але гэтая праграма глючыць.
У чым праблема?
Да?
[Неразборліва]
David J. малая: Цалкам дакладна.
Такім х была абвешчаная відавочна ў радку 18.
Гэта значыць, у фігурных дужках асноўнага аўтара.
Такім чынам, просты адказ у тым, што, ну, х існуе тут.
Яна не існуе ў радку 32.
Такім чынам, гэтая праграма на самай справе нават не будзе кампілявацца.
Кампілятара, калі я спрабую кампіляцыі гэтага кода, будзе крычаць на мяне
Аб некаторых неаб'яўленай ідэнтыфікатар ці нешта ў гэтым родзе.
На самай справе, давайце паспрабуем.
Гэта робіць buggy4.
Там яна ёсць.
Выкарыстанне неаб'яўленых х ідэнтыфікатар ў радку 32.
А на самай справе, давайце будзем больш выразна тут сёння, так што гэта карысна
працоўны час і дома.
Звярніце ўвагу, што гэта трохі загадкава напісана.
Але тое, што Clang мае крычаў на нас, сказаўшы:
buggy4.c: 32:5, на самай справе карысна.
Гэта азначае, што памылка ў радку 32 на пазіцыю сімвала пяць.
Такім чынам, адзін, два, тры, чатыры, пяць.
Гэта, на самай справе, дзе праблема.
А таксама мець на ўвазе, у працоўны час і дома, мне пашанцавала тут.
У мяне ёсць адна памылка.
Гэта збіраецца быць адносна лёгка выправіць.
Але калі вы атрымаеце ўвесь экран поўны пераважная паведамленні пра памылкі, зноў жа,
разумеюць, што самы ніжні можна проста быць сімптомам
самы верхні з іх.
Так заўсёды ганяцца за вашы памылкі зверху ўніз.
Таму што там можа быць проста ланцужком эфект, прапаную вам
ёсць нашмат больш праблем, чым вы на самой справе.
>> Такім чынам, як мы можам гэта выправіць, калі маёй мэтай з'яўляецца, каб павялічыць х?
Што гэта?
Добра.
Такім чынам, мы можам зрабіць глабальнае х.
Давайце ярлык, які я папярэджваў раней.
Але чорт вазьмі, нам проста трэба хутка выправіць.
Так што давайце проста скажам, Int х тут.
Гэта робіць х глабальнай.
Так што цяпер асноўным мае да яго доступ.
І прырост мае да яго доступ.
І таму дазвольце мне ісці далей і сабраць гэта цяпер.
Зрабіць buggy4, Enter.
Здаецца, для кампіляцыі цяпер.
Давайце запусцім buggy4, і здаецца, на самай справе працуе.
Цяпер гэта адна з гэтых рэчаў -
Рабі, як я кажу, а не як я раблю, як я толькі што зрабіў тут.
Таму што ў цэлым нашы праграмы збіраюцца атрымаць значна больш цікавым і
значна даўжэй, чым гэта.
І калі ваша рашэнне жыццёвых праблем з'яўляецца проста ах, пакласці ўсе
зменных у пачатак файла, вельмі хутка робяць праграмы атрымаць
вельмі цяжка кіраваць.
Гэта становіцца ўсё цяжэй прыдумляць новыя імёны зменных.
Гэта становіцца ўсё цяжэй зразумець, што пераменная робіць.
>> А так увогуле, гэта не вельмі добрае рашэнне.
Так давайце зробім гэта лепш.
Мы не хочам выкарыстоўваць глабальную зменную тут.
Я хачу, каб павялічыць х.
Так што я мог бы, відавочна -
У рэшце рэшт, гэта свайго роду дурныя гісторыі, таму што мы проста робім гэта.
Але калі б я не ведаў пра тое, што аператар, ці я не дазволілі
змяніць яго ў асноўны сабе, як яшчэ я мог ажыццяўляць Кен тут, гэта
Час не куба, але для павелічэння?
Як змяніць гэтую рэч тут?
Так.
[Неразборліва]
David J. малая: Добра, добра.
Так чаму б мне не прайсці ў X?
І тады, а не вяртаць яго, чаму б мне не зрабіць вяртанне х + 1?
Цяпер, некалькі рэчаў павінны змяніць тут.
Я знаходжуся на правільным шляху.
Што яшчэ трэба наладзіць?
Нехта іншы.
Да?
[Неразборліва]
David J. малая: Мне трэба змяніць тып звароту прыросту
таму што гэта не ануляваць.
Пустэча азначае, што нічога не вяртаецца.
Але, відавочна, цяпер ён ёсць.
Так што трэба змяніць у цэлае, каб быць паслядоўным з тым, што
Я на самой справе вяртання.
>> Цяпер нешта яшчэ па-ранейшаму багі тут.
Да?
[Неразборліва]
David J. малая: Так што мне трэба павялічваць х?
[Неразборліва]
David J. малая: Ах, так што мне трэба прайсці х.
Так што мне трэба зрабіць гэта тут.
Такім чынам, прататып, я павінен змяніць гэта тут.
Такім чынам, гэта павінна стаць Int.
Гэта павінна стаць -
хм.
Я на самой справе ёсць памылка тут.
Давайце выправім гэта ў першую чаргу.
Што гэта на самай справе быць?
Так што гэта павінна быць нешта Int.
Гэта можа быць х.
Але, шчыра кажучы, калі вы пачынаеце заклікаючы ўсіх вашых зменных х, ён збіраецца атрымаць
ўсё менш і менш ясна, што ёсць што.
Так што давайце проста адвольна выбраць розныя наймення для майго
дапаможныя функцыі, функцыі я пішу.
Мы будзем называць яго.
Ці мы маглі б назваць яго - давайце назавем гэта even_number быць яшчэ больш відавочнай.
І тады я павінен вярнуць усё, што нумар плюс 1.
А цяпер я павінен змяніць адну рэч тут і адно
Іншая рэч, якую тут.
Што я павінен змяніць у радку 21 у першую чаргу?
Я павінен прызначыць яго на х.
Таму я не магу проста патэлефанаваць прырашчэнне х.
Мне трэба памятаць адказ на змяненне значэння х на
з левага боку.
І хоць х зараз знаходзіцца на левай і правай, гэта цалкам нармальна, таму што
правая частка запускаецца на выкананне першага затым атрымлівае шлёпнуўся ў левую
рукі рэч, х у гэтым выпадку.
І тады, нарэшце, гэта лёгка выправіць цяпер.
Гэта павінна проста адпавядаць таму, што гэта ўнізе.
Int нумар.
>> Добра.
Такім чынам, цэлы букет змяненняў сапраўды дурное функцыі.
Але прадстаўнік рэчаў, якія мы больш хочам зрабіць.
Так што buggy4.
Я дзесьці нашкодзіла.
О, мой Бог.
Пяць памылак у, быццам бы, шэсць радка.
Так што ж здарылася на лініі 18, сімвал 5?
Добра.
Так што я павінен заявіць пра гэта Int.
Добра.
Такім чынам, давайце паглядзім, цэлая куча іншых памылак.
О, мой бог.
19, 18, 21.
Але, зноў жа, давайце проста ачысціць экран -
Упраўленне L тут - і паўторныя Clang.
Такім чынам, пяць праблем на самай справе толькі гэта.
Такім чынам, цяпер давайце запусцім buggy4, Enter.
Вось так.
х быў павялічаны правільна.
>> Добра.
Любыя пытанні аб тым, як павялічыць лік?
Да?
SPEAKER 2: Чаму гэта, што вы можаце проста змяніць X на нумар у зменную
імя, і ён будзе ведаць, што вы маеце на ўвазе?
David J. малая: Добры пытанне.
Як гэта, што я магу проста змяніць х на нумар і праграма будзе ведаць,
адразу?
Такім чынам, яшчэ раз, думаць пра яго, як гэта абстракцыя.
Так што, калі я галоўны і Кен дадатковых, шчыра кажучы, мне ўсё роўна
што Кен называе сваю Ipad.
Мяне не хвалюе, што ён называе ўсё, што мае дачыненне да яго ажыццяўленню
з гэтай функцыі.
Так што гэта дэталь рэалізацыі, што я, галоўнае, не
павінны клапаціцца аб.
І так проста змяніўшы яго паслядоўна ўнутры функцыі, колькасць тут
і нумар тут, гэта ўсё, што займае так шмат часу, як я перакампіляваць.
Гэта накшталт як калі вы думаеце пра - многія з нас, тых, у каго кіроўцы
Ліцэнзіі хто ездзіў, або калі вы нават заехаў у аўтамабіль -
Большасць з нас не ведаюць, як машына працуе пад капотам.
І літаральна, калі вы адкрываеце капот, большасць з нас - я ў тым ліку -
не збіраецца ведаю, што мы глядзім.
Накшталт як вы можаце адчуваць сябе ў такія рэчы, як гэта прама цяпер.
Але мы сапраўды не павінны клапаціцца, як машына працуе.
Мы не павінны клапаціцца, што ўсе стрыжні і поршняў і кабеляў ўнутры
машына на самай справе робіць.
>> Так нешта кшталту, што вы называеце поршань не мае значэння
Тут у гэтым выпадку.
Тая ж самая ідэя.
Да?
[Неразборліва]
David J. малая: Калі б было больш выкарыстанні пераменнага моманту ха назад,
Вы, праграміст, давядзецца мяняць іх паўсюль.
Ці вы маглі б зрабіць літаральна файлаў, меню, а затым Знайсці / Замяніць,
нешта накшталт гэтага.
Але вы будзеце мець, каб зрабіць гэтыя змены самастойна.
Вы павінны быць паслядоўныя.
[Неразборліва]
David J. малая: вызначаным парадку, як тут?
Калі б гэта было Int іншы нумар?
Так.
Такім чынам, парадак мае значэнне, калі вы выклікаеце функцыю.
Так што калі я тэлефанавалі прырост тут нешта ў гэтым коскі,
ёсць прамое адлюстраванне.
Першая зменная, як там гэта завецца, зробленая копія 1.
Аргумент тут.
На жаль, гэтага не павінна быць круглых дужках.
Другі аргумент лініі з другім.
>> Так парадку, ды, пытанняў.
Добра.
Выбачайце, што я ўзяў доўгі шлях, каб дабрацца там.
Іншыя пытанні?
Добра.
Такім чынам, давайце паглядзім, калі мы не можам намаляваць карціну таго, што адбываецца на самай справе
Тут пад капотам, так бы мовіць.
Так што гэта прастакутнік, які можа прадстаўляць памяці кампутара.
Так што нават калі вы не ведаеце, як працуе памяць або як RAM працы, па меншай меры,
Выкажам здагадку, што ў вас ёсць пучкі яна ў гэтыя дні.
У вас ёсць мегабайты яго.
У вас ёсць гігабайты яго.
І мы ведаем, ад тыдня нуля, што байт менавіта тое, што?
8 біт.
Права, такім чынам, 8 нулёў і адзінак.
Такім чынам, калі ваш кампутар мае гігабайт аператыўнай памяці, два гігабайта аператыўнай памяці ў гэтыя дні, у вас ёсць
млрд., або 2 млрд. байт памяці, або прыкладна 8 млрд., або 16000000000
бітаў, усярэдзіне кампутара.
Цяпер, у адрозненне ад маленькіх Woolly напрыклад Вілі, гэта не магнітныя часціцы
Звычайна больш.
Усё часцей у наўтбуках па крайняй меры, гэта цвёрдацельныя назапашвальнікі SSD, што
проста не маюць якія рухаюцца частак.
Гэта ўсё электронныя.
Гэта ўсё электрычнасць аснове.
Так што думаю, хоць, гэта проста прастакутнік, як якія прадстаўляюць адну ці дзве
гігабайтамі памяці, якая ў вас ёсць.
>> Так што гэта кавалак памяці.
Зараз у свеце камп'ютэрных навук мае выгляд адгароджана кавалкі
памяці, каб зрабіць розныя рэчы.
Так, напрыклад, калі гэта аператыўнай памяці кампутара - як гэта было прапанавана
Прастакутнік там - Атрымліваецца, што па дамове, у верхняй частцы вашай памяці, таму
казаць, як правіла, тое, што называецца тэкставы сегмент.
Тыя нулёў і адзінак, што вы сабралі.
Таму, калі мы глядзелі пад капотам на тое, што a.out ёсць усе
нулёў і адзінак -
Пры запуску праграмы, гэтыя нулі і адзінкі загружаецца з жорсткага
дыск у тое, што называецца аператыўнай памяці.
І ў памяці, яны змяшчаюцца ў верхняй частцы.
Цяпер Тым часам, у вас ёсць іншыя рэчы.
Ініцыялізаваць дадзеных, неинициализированных дадзеных.
Гэтыя два валка памяці звярніцеся да глабальныя зменныя, якія
вы не часта выкарыстоўваеце.
Але часам, калі вы гэта зробіце, яны ў канчатковым выніку там таксама.
Тады ёсць некаторыя іншыя рэчы.
Зменныя асяроддзя, якія мы не будзем марнаваць шмат часу на.
Але затым дзве важныя рэчы, якія будуць вяртацца на працягу ўсяго гэтага
семестра, стэка і кучы.
>> Таму большасць з памяці кампутара захоўваецца пры запуску праграмы
тое, што называецца стэкам і тое, што называецца кучай.
І мы не збіраемся казаць пра кучы сёння, але мы будзем
казаць пра стэку.
І стэка прызначана выклікаць ва ўяўленні візуальныя падобных сталовай
еду ў латках Mather дом, ці там, дзе вы будзеце, дзе
Персанал сталовай чысціць іх кожны дзень.
Яны складаюцца іх ад падлогі ўверх.
І сапраўды гэтак жа ў памяці, ёсць такая ідэя паставіць нешта на
стэк, паставіўшы нешта на стэку, пакласці нешта ў стэку.
І што ж мы маем на ўвазе пад гэтым?
Ну, давайце павялічыць толькі на ніжнюю палову гэтай карціны, вашага кампутара
RAM, прапанаваць наступнае.
Аказваецца, што калі вы запускаеце праграму, як a.out або прывітанне, незалежна ад
Праграма з'яўляецца тое, што вы напісалі,
Зноў жа, тыя нулёў і адзінак загружаецца з жорсткага дыска - які з'яўляецца
працяглага захоўвання, застаецца там, нават калі вы відэлец -
загружаюцца ў аператыўную памяць.
RAM хутчэй, чым цвёрдыя дыскі.
Гэта менш, чым цвёрдыя дыскі.
Але гэта там, дзе праграмы жыць, пакуль вы працуеце іх.
>> Такім чынам, вы двойчы пстрыкніце праграму на Mac або ПК - яна загружаецца з
жорсткага дыска ў аператыўную памяць.
Як толькі ён будзе загружаны ў аператыўную памяць, нулёў і адзінак пайсці на тое, як зверху,
так званы тэкставы сегмент.
Але тады, як толькі ваша праграма фактычна пачынае працаваць, асноўная
Функцыя называецца.
А галоўнае, як мы бачылі, часта мае лакальныя зменныя.
І яна мае цэлых і радкоў і сімвалаў і таму падобнае.
Так што калі вашы праграмы, якія вы напісалі або праграмы, якія ў вас ёсць
падвойным пстрычцы выкарыстоўваць некаторыя зменныя ўнутры асноўнага, яны ў канчатковым выніку на
ніжняй частцы стэка памяці, так бы мовіць.
Цяпер больш канкрэтна, што ж гэта на самай справе азначае?
Гэта проста азначае, што калі мы будзем нумараваць рэчы -
калі мы збіраемся лік байт аператыўнай памяці на кампутары, заўважылі, што
гэта можа быць нулявым байты колькасці.
Гэта можа быць Байт нумар адзін, два, тры, чатыры, пяць, шэсць, усе
аж да падабаецца -
2000000000 будзе ўсю дарогу там на самым версе.
Такім чынам, іншымі словамі, калі мы гаворым аб аператыўнай памяці або памяці ў байтах, ён
проста азначае, што хтосьці вырашыў, што нумар кожнага з
гэтыя кавалкі памяці.
>> Таму, калі вам трэба 32 біта для Int, ці вам трэба 8 біт на знак, дзе
яны ў канчатковым выніку ў памяці?
Ну канцэптуальна, яны проста ў канчатковым выніку ў ніжняй частцы гэтага
тое, што называецца стэк.
Але што цікава зараз, калі асноўныя выклікае функцыю.
Няхай функцыя завецца Фу, проста адвольнае імя.
Што адбываецца, з'яўляецца асноўным знаходзіцца ў ніжняй частцы гэтага стэка памяці.
Foo зараз змяшчаецца ў верхняй частцы галоўнага ў памяці.
Такім чынам, любыя лакальныя зменныя, Foo была ў канчатковым выніку роду канцэптуальна вышэй
тыя, у асноўным.
Калі Foo выклікае іншую функцыю пад назвай бара, гэтыя зменныя ў канчатковым выніку тут.
Калі бары называе нешта яшчэ, тут, тут, тут.
Так што ж цікавага аб запуску праграмы з'яўляецца тое, што вы называеце функцый,
і як гэтыя функцыі выклікаць функцыі, а таксама функцыі, якія выклікаюць функцыі,
Вы ствараеце гэты стэк функцый у памяці.
І толькі адзін раз функцыя вяртае вы пачнеце атрымліваць гэтую памяць назад.
Такім чынам, адным з самых простых спосабаў запусціць з памяці ў кампутары праграмы з'яўляецца
напісаць функцыі, якія ніколі не вернуцца.
>> Так, напрыклад, давайце прадэманстраваць, як шмат з
наўмысна памылкі праграмы.
Дазвольце мне ісці наперад і рабіць # ўключыць , Int асноўных (несапраўднымі).
І я збіраюся рабіць, а (2> 1), які, верагодна, ніколі не будзе
зменіцца на нас.
І дазвольце мне цяпер ісці наперад і рабіць Printf.
На самай справе, гэта будзе менш візуальна цікавым.
Давайце зробім гэта.
Для Int (я = 0; I> 0).
Давайце зробім гэтую памылку, я + +.
І давайце не Printf тут.
Давайце практыкаваць тое, што я прапаведаваў.
Давайце метад тут.
Пустэча хор, і мы будзем казаць Int я.
А потым я збіраюся сказаць, Printf -
ой, давайце зробім гэта больш цікава.
Давайце на самай справе не друкуе наогул нічога.
Давайце проста гэта зрабіць.
Хор (I).
>> Добра.
Так што гэта багі, таму што навошта?
Я прыдумляю, як я іду, таму што праграма не робіць нічога
цікавасць.
Але гэта не мэта.
Мэта складаецца ў тым, каб напісаць праграму, асноўнай функцыяй якога робіць тое, што, па-відаць?
Патэлефануйце сябе.
А на самай справе, мы не маем патрэбу ў пятлю.
Давайце нават спрасціць гэты раз, каб не губляць з ўвазе на самой справе
фундаментальную памылку.
Галоўныя выклікі хорам спяваць хорам.
Тады я зрабіў глупства, і я павінен быў хор хор выклік, таму што я меркаваў,
кто-то яшчэ збіраецца рэалізаваць гэта магчыма.
І зараз гэта не будзе сабраць яшчэ.
Мне трэба зрабіць што?
Мне трэба прататып, памятаю.
Таму мне трэба, каб тут пустэча хору (INT я);.
>> Так што цяпер, калі я іду сюды -
на самай справе, давайце выкарыстоўваць вялікія вокны.
Давайце пойдзем далей і зрабіць хорам.
Выкарыстанне невядомыя разыгрывае я.
О, гэта было па-дурному.
Нам не патрэбныя аргументы.
Давайце проста гэта зрабіць.
Шкада, што мы пачалі гэты шлях.
Было б значна прасцей напісаць праграму.
Так і тут.
Зараз давайце пяройдзем да маіх акно тэрмінала, паўторныя Clang.
І тут мы ідзем.
Гэта было сапраўды хутка.
Што на самай справе толькі што адбылося, праўда?
Ну, цяпер я дадам друку лініі, так што мы можам бачыць.
Такім чынам, дазвольце мне сказаць Printf, скажам так, я тут.
Добра, не зменныя, мы пакінем гэта так.
Дазвольце мне зноў запусціць зрабіць.
Дазвольце мне паўтор прыпева.
І давай.
Працягвайце.
Як у баку, чаму яна не пацярпела крах?
Памылкі сегментацыі адбылося супер хуткі раней.
[Неразборліва]
David J. малая: Цалкам дакладна.
Так што гэта займае час, каб надрукаваць.
Гэта зойме больш працы з боку кампутара.
І гэта так.
Сегментацыя віна.
>> Так заўважыце, як хутка запускаць праграмы.
Калі вы не друкуе нічога, супер хутка.
Але мы ўсё ж атрымалі гэтую памылку сегментацыі, таму што тое, што адбываецца?
Ну, калі вы думаеце пра тое, як памяць кампутара выкладзена, гэта
бывае асноўным.
Але тут -
Давайце проста называць гэты хор, і назавем гэты хор.
І зараз, калі я раблю сваю эстэтыку права, гэта як раз збіраўся сказаць хорам,
хор, хор, хор, хор, хор, хор, да млоснасці.
І ў рэшце рэшт, што ж будзе далей?
Калі карціна літаральна гэта тое, што проста адбываецца канцэптуальна?
Стэк перарасход кучы.
Або, таго горш, вы проста захопленыя ўсё, уключаючы тэкставы сегмент, які з'яўляецца
нулёў і адзінак, якія прадстаўляюць вашу праграму.
Карацей кажучы, гэта проста супер, супер дрэннага.
Правільна?
Ваша праграма выйшла з-пад кантролю.
Вы выкарыстоўваеце спосаб больш памяці, чым вы разлічвалі ўсё з-за дурной
памылка, у гэтым выпадку.
Ці ў дадзеным выпадку, цалкам свядома зрабілі функцыю, якая называе сябе.
Зараз гэта не так ужо дрэнна.
Функцыі, якія называюць сябе сапраўды мае вялікую сілу
калі вы выкарыстоўваеце яго правільна.
Я не выкарыстоўваў яго правільна тут.
>> Так што не ўсё так дрэнна.
Але тое, што я ніколі не перастануць называць сябе з'яўляецца фундаментальным
Слабасць тут гэтай праграмы.
Дык куды мы ідзём з усім гэтым?
Ну, а што адбываецца на самай справе?
Калі я называю прырашчэнне функцыі, як мы рабілі ў тых прыкладах,
У мяне ёсць значэнне, як 1, што я праходжу цалі
Я праходжу ў копію нумар адзін.
Такім чынам, адбываецца наступнае.
Так што давайце ісці ў крок прыклад.
І гэты хлопец прама тут.
Такім чынам, вось што на самой справе адбываецца.
Калі я патэлефанаваў прырост, і я праходжу па х, наглядна тое, што
адбываецца тут, гэта -
калі ў мяне ёсць кошт 1 захоўваецца тут, і я на самай справе клічуць прырост, які
цяпер называецца хор -
Так, кінуўшы мяне тут.
Такім чынам, давайце называць гэта прырашчэнне.
І мы не ведаем, што гэта наступная функцыя збіраецца быць.
Так што ж на самай справе адбываецца дзесьці тут у асноўным, у мяне ёсць кавалак
памяці, якая захоўвае нумар 1.
Калі я называю прырост, я выкарыстоўваю іншую частку памяці, але цяпер я
ёсць копія 1.
Калі я павялічыць гэта значэнне, гэта становіцца 2 - жудасна напісаных на
Экран тут.
Але тое, што адбываецца, як толькі прырост прыбытку?
Гэтая памяць проста атрымлівае вярнуў да аперацыйнай сістэме, якая азначае, што ўсе
Вы зрабілі нічога карыснага.
Той, які быў першапачаткова змяшчаецца ў асноўны па-ранейшаму на самай справе.
>> Дык куды мы ідзём з гэтым?
Ну, атрымліваецца, што ў памяці ў вас ёсць гэтая спіна да спіны паслядоўнасць
байтаў, якія Вы можаце пакласці рэчы цалі
І атрымліваецца, што мы ўжо бачылі нешта, што ўключае ў сябе паклаўшы
рэчаў спіна да спіны, каб спіна да спіны.
Што ўяўляе сабой радок, заснаваныя на тыдзень адну, то тыдні два?
Так што гэта проста набор знакаў.
Вось і атрымліваецца, як вы можаце пакласці нумароў у памяці, гэтак жа вы можаце
пакласці знакаў у памяці.
І як толькі мы пачынаем пакласці знакаў у памяці спіной да спіны, каб вярнуцца да
назад, то атрымліваецца, што з дапамогай найпростых рэчах, як цыкл або
час цыклу, мы можам паўтараць -
злева направа па знакаў у радку -
і пачаць масажуючы іх у розныя персанажы ў цэлым.
Можа стаць B. B можа стаць C. Так што ў канчатковым выніку, мы можам узяць
Англійская прапанову, якое сапраўды мае сэнс і пераўтворыць кожны з гэтых
літары па адной за раз, ідучы праз нашу памяць кампутара застаецца
Права на самай справе шыфравання.
>> Такім чынам, давайце зробім наш пяціхвілінны перапынак тут, і калі мы вернемся, мы будзем
пачаць гэты працэс скремблирования інфармацыі.
>> Добра.
Таму, перш чым пагрузіцца ў некаторых крыпта і гэтыя рэчы называюцца масівамі, дазвольце мне
Паўза на любыя пытанні, таму што я адчуваю, што я сапраўды збольшага заблытанай некаторыя з
гэтыя тэмы.
Так што давайце зафіксуем цяпер, калі мы можам.
Такім чынам, мы толькі што гаварылі аб вяртанні каштоўнасцяў.
Мы гаварылі пра аргументаў.
І мы гаварылі пра гэта паняцці, якое мы вернемся ў бліжэйшыя тыдні
прыйшоў, прагляду памяці цэлую кучу гэтых стэкамі
Латкі, так бы мовіць.
Знізу на уверх, так, што кожны латок, які атрымлівае пакласці ў стэк ўяўляе
функцыя, якая ў цяперашні час называецца.
Ёсць пытанні?
Так як пра - дайце мне паспрабаваць задаць пытанне.
Я ўсё псуе, але цяпер it's - you've ўсе бачылі твар хлопчыка.
Такім чынам, мы вернемся да гэтага.
>> Такім чынам, дазвольце мне задаць пытанне тут.
Дазвольце мне спрасціць гэта да таго, што было да некаторых з нашых ранніх Q & A.
І той факт, што прырост мае адкрытую дужку, унутр нумар, закрыты
дужках.
Што Int ліку ўяўляюць?
[Неразборліва]
David J. малая: аргумент.
Добра, але што гэта аргумент?
[Неразборліва]
David J. малая: Выбачайце, што гэта такое?
Выступоўца 3: Нешта вы перадаеце цалі
David J. малая: Добра.
Такім чынам, тое, што вы перадаеце цалі
І наогул, гэта проста ўваход.
Калі вы пішаце функцыі і мэты, функцыі ў жыцці, каб зрабіць
нешта крыху інакш кожны раз, калі вы выкарыстоўваеце яго, то адзіным спосабам для
Каб гэта адбылося на самай справе, здавалася б даць яму ўваход так, каб яна
можа зрабіць нешта іншае з дапамогай гэтага ўкладу кожны раз.
>> Такім чынам, вы павінны вызначыць дзве рэчы, калі функцыя прымае ўваходы.
Вы павінны паказаць імя, якое вы хочаце даць, што ўваход толькі для
вашага зручнасці, каб вы маглі спасылацца на яго ў функцыю, якую
самі пішаце, як я зрабіў тут, у радку 32.
Але вы таксама павінны паказаць яго тып, таму што C з'яўляецца мовай праграмавання
што менавіта патрабуецца
што калі вы хочаце зменнай, вы павінны паведаміць кампутара, што
тып дадзеных, гэта,
У большай часткі так, каб ён не ведае, колькі біт
вылучыць для гэтай зменнай.
Таму што гэта можа быць шэсць -
Выбачайце, гэта не будзе шэсць.
Гэта можа быць 16.
Гэта можа быць 8.
Гэта можа быць 32, нават 64.
Але кампутар павінен ведаць.
Цяпер Int на левы бок ўяўляе тое, што, у адрозненне ад?
[Неразборліва]
David J. малая: Што гэта?
[Неразборліва]
David J. малая: тып функцыі і, больш канкрэтна,
Тып выпускаемай прадукцыі.
Права.
Такім чынам, у той час як рэч у дужках прадстаўляе свой ўваход, калі такія маюцца,
рэч, каб левая прадстаўляе сваю прадукцыю.
І ў гэтым выпадку, па-відаць прырост вяртае цэлае.
І так Int з'яўляецца тып вяртаецца гэтай функцыяй.
>> Што гэта значыць вярнуць?
Літаральна, вы выкарыстоўваеце ключавое слова вяртання.
І потым, калі тое, што вы вяртаецеся ў правым ключавое слова
лік, тое, што сапраўды адпавядае таму, што мы абяцалі.
Вы не маглі б зрабіць нешта накшталт гэтага -
Прывітанне, свет -
таму што гэта радок.
Відавочна, гэта не з'яўляецца цэлым лікам.
Карацей кажучы, цяжар на самай справе на нас, праграмістаў, каб быць канкрэтным, як
да таго, што мы вяртаемся, і тады на самай справе ісці аб вяртанні яго.
І тады, каб зрабіць трохі больш выразныя кантэксце -
Вось ён зноў.
Кантэксту -
Вялікім сюрпрызам ў бліжэйшыя адну хвіліну.
Кантэкст тут, зараз, у тым, што памяць кампутара, зноў жа,
гігабайт, два гігабайта, што заўгодна.
Можа быць, гэта іншае.
Можа быць, гэта менш.
Але кампутар разглядае яе як якія маюць розныя часткі.
Нешта ідзе туды.
Нешта яшчэ адбываецца там.
Розныя рэчы ідзе ў сярэдзіне.
І сёння, мы проста пачынаем распавядаю гэтую гісторыю.
>> Але мы вернемся да гэтага з цягам часу.
У цяперашні час, толькі кавалак памяці мы сапраўды клапоцімся аб тым, тэкставы сегмент
таму што толькі што ўяўляе нулёў і адзінак
Clang, што быў сігнал.
Такім чынам, калі вы запусціце каманду на клавіятуры, як a.out, ці вы двойчы
пстрыкніце па значку на Mac OS або Windows, вашы праграмы загружаецца з жорсткага
дыска ў аператыўную памяць.
І яна пляснулася ў верхняй частцы аператыўнай памяці кампутара, так бы мовіць.
Цяпер Між тым, як ваша праграма пачынае працаваць і асноўныя выклікаецца ў
Вы пісалі праграмы або праграмы Microsoft ці Apple, піша, любога з яе
лакальныя зменныя ў канчатковым выніку там на дне памяці кампутара.
Але калі асноўная выклікае іншую функцыю, якая сама па сабе мае пераменныя або
аргументамі, яны ў канчатковым выніку над ім.
І калі гэтая функцыя выклікае тое, што яны ў канчатковым выніку над ім,
над ім, над ім.
І толькі адзін раз у функцыі ажыццяўляецца выкананне робіць чаркі латкоў, так
казаць, пачынаюць атрымліваць усё ніжэй і ніжэй.
І гэта тое, што тады, у двух словах, тлумачыць, чаму, калі вы тэлефануеце куба -
ці вы тэлефануеце прырост -
вы перадаеце копію значэння.
А што гэта азначае, што наглядна гэта тое, што вы літаральна напісання
нумар 1 у іншую частку памяці, якая змяняецца ад 1 да 2, у выпадку
прырост -
ці 8, у выпадку куба -
, А затым кідалі, што памяць далёка, як толькі павелічэнне або кубе
Функцыя вяртае.
>> Пытанне.
[Неразборліва]
David J. малая: дзе - глабальныя зменныя захоўваюцца ў тое, што
у цяперашні час завецца ініцыялізуецца дадзеныя або неинициализированных дадзеных.
Розніца ў тым, калі ў вас ёсць глабальная зменная, і вы прызначаеце яго
адразу ж значэнне з знака роўнасці, яна заканчваецца на вяршыні.
А калі проста сказаць Int х коскі без значэння, гэта сканчаецца трохі
ніжэй у памяці проста канвенцыі.
Іншыя пытанні.
Добра.
>> Такім чынам, гэтая карціна будзе вяртацца, як мы атрымаем больш магутны з тым, што мы можам зрабіць
з кампутарам.
Але цяпер, давайце кароткае ўвядзенне ў крыптаграфію, спецыфічны тып
крыптаграфіі, што не вырашае ўсіх праблем у свеце, але ніяк вырашыць
некаторыя з іх.
У гэтым выпадку тут, у нас ёсць тое, што называецца сакрэтным ключом шыфравання.
І сакрэт крыптаграфіі ключ, як вынікае з назвы, адбываецца яе бяспекі
ад таямніцай.
Так, напрыклад, калі вы яшчэ ў пачатковай школе, і вы перадаеце
Маленькі сакрэт любоўны ліст да хлопчыка або дзяўчынку вы драбнення на - калі вы
хацеў перадаць, што праз аўдыторыяй, вы, верагодна, не будзе пісаць
такая запіска на англійскай мове або што ваш родную мову, а, хутчэй, вы
можа зашыфраваць яго.
Ці вы можаце проста адправіць ім тэкставае паведамленне ў гэтыя дні.
Але вы маглі б на самай справе перадаюць іх да ведама ўсім класе.
І зрабіць гэта бяспечна, так што вашыя сябры і настаўнікі
Не ведаю, што вы пішаце, вы можаце прыдумаць досыць просты
Алгарытм -
Малады хоць вы маглі б быць -
проста караскацца слова.
Такім чынам, замест таго, каб пісаць, вы можаце напісаць B. Замест B, вы можаце напісаць
C. Замест C, вы можаце напісаць D, і гэтак далей.
Ці вы маглі б прыдумаць больш складаны пераклад лістоў
розных літар.
Але загваздка ў тым, хлопчык ці дзяўчынка, якім вы адпраўляеце гэтую запіску неабходна
нешта ведаць.
Якія гэта тое, што, відавочна?
Як і тое, што ваш сакрэт.
Маўляў, што гэта такое супастаўленне Як і сняданак і Cs і Ds?
Гэта толькі дадаўшы да яго адзін, так бы мовіць, да кожнай з літар, каб перайсці ад
А ў B, B у C?
Гэта больш складаны, чым гэта?
Такім чынам, вы і ваш раздушыць трэба, каб у гэтай сакрэтнай інфармацыі.
Але ёсць свайго роду хітрыкі-22 тут.
Калі гэта ў першы раз вы адпраўляеце гэтую любоў праз лісты
класа, як тое, што хлопчык ці дзяўчынка будзе ведаць, у чым сакрэт нават ёсць?
Так што сакрэтны ключ шыфравання не вырашае ўсіх праблем у свеце.
І там на самай справе адносіны, якія мы вернемся да да
семестра канца.
>> Акрамя таго, ёсць ні адзін з нас, верагодна, ніколі не паслаў -
Аналагічна, большасць з нас не ведае, што хтосьці працуе, напрыклад, на
Amazon.com.
І тым не менш, многія з нас, напэўна, купіў матэрыял на Amazon.com.
І нас вучылі лічыць, што гэтыя электроннай камерцыі
бяспеку транзакцый.
Правільна?
URL, верагодна, кажа HTTPS.
Там у, можа быць, дурны маленькі значок замка недзе.
Там нейкая крыптаграфіі забеспячэння вашай крэдытнай карты
паміж вамі і Amazon.com.
І яшчэ, калі крыптаграфія ўключае ў сябе ведаючы некаторыя таямніцы, і ўсё ж я не
ведаю нікога, на Амазонцы, і я, вядома, не задаволіў любой
таямніцу з кімсьці на Amazon, як мой кампутар або мой браўзэр гэта робіць?
Што ж, аказваецца, ёсць іншыя віды крыптаграфіі ў цэлым, якія вырашаюць
гэтай праблеме.
Але на сённяшні дзень, мы засяродзімся на просты, дзе вы можаце задаволіць у
прасоўванне ведаць некаторыя таямніцы, як плюс 1 або некаторы адлюстраванне паміж Як і сняданак.
>> І працэс крыптаграфіі звычайна ўключае ў сябе гэтае.
У вас ёсць звычайны тэкст, намаляваны тут, на левым.
Вы запускаеце яго праз нейкі алгарытм або працэдура
для шыфравання.
Можа быць, гэта проста становіцца B, B становіцца C. І тады вы ў канчатковым выніку з
зашыфраваны тэкст.
Між тым, як толькі ваш раздушыць атрымлівае таемныя запіскі, ён ці яна павінны затым
расшыфраваць яго, як правіла заднім ходам, што алгарытм так, каб атрымаць
Рэзервовае просты тэкст.
Зараз ёсць фізічнае ўвасабленне гэтага.
Напрыклад, гэта маленькі сакрэт кольца дэкодэр.
І гэта кольца ў тым сэнсе, што ёсць два набору тут.
На знешняй перыферыі гэтай рэччу, ёсць літары ад А да Z,
хоць яны ў выпадковым парадку.
І з унутранага боку, там на самай справе некаторыя лікі, такія, што з гэтай
Кальцо, вы можаце ўключыць выгляд звонку, але не ўнутры для таго, каб выстраіцца
Нумары з літарамі.
І ў кліпе вы збіраецеся паглядзець - некаторыя з якіх вы, магчыма, бачылі 24/7
вакол каляднага сезону з фільма пад назвай Калядная гісторыя.
Вы ўбачыце, што мала Ральф так не цярпелася высветліць, што сіротка
Сакрэтная паведамленне Эні была для яго, што было паведамлена, я думаю, у
выглядзе лічбавых паведамленняў на серыйны акно.
І трэба было акумуляваць усе маленькія карты, якія прыйшлі
ў скрынкі ад шматкоў.
Трэба было, каб адправіць іх сюды
Вы павінны былі атрымаць назад таямніцу кольца дэкодэр, так што вы можаце, нарэшце, зразумець
, Што адлюстраванне паміж літарамі і лічбамі,
або літар і літар.
Такім чынам, я даю вам гэты кароткі кліп з Калядная гісторыя матываваць PSET 2 і
наша дыскусія, у момант, масіваў.
Такім чынам, тут мы маем Ральф.
>> [Прайграванне відэа]
-Хай будзе вядома ўсім і кожнаму, што Ральф Паркер сапраўдным прызначаны
член маленькі круг сірот Эні сакрэтна і мае права на ўсе
ўшанаванні і перавагі, якія адбываюцца з імі.
-Подпіс, Little Orphan Annie.
Контрассигнуют, П'ер Андрэ!
У чарнілаў!
Дасягненні і перавагі, ужо ва ўзросце дзевяці гадоў.
Давай, давай скончым з гэтым.
Мне не патрэбныя ўсё такое іншае аб кантрабандыстаў і піратаў.
-Слухай заўтра ноччу для заключных прыгод The ​​Black
Пірацкі карабель.
Цяпер прыйшоў час для тайнага паведамленні Эні для вас членамі
Тайнага Круга.
Памятаеце, што дзеці, толькі сябры тайны гурток Эні можа дэкадаваць
Сакрэт Эні паведамленні.
Памятаеце, Эні залежыць ад вас.
Ўсталяваць кантакты з B2.
Вось паведамленне.
12, 11 -
-Я у першым пасяджэнні тайным.
-14, 11, 18, 16 -
-П'ер быў у выдатнай сёння голас.
Я магу сказаць, што сёння паведамленне было сапраўды важна.
-3, 25.
Вось паведамленне ад Annie сябе.
Памятаеце, нікому не кажыце.
-90 Секунд праз, я ў адзіную пакой у доме, дзе дзевяцігадовы хлопчык
мог сядзець у адзіноце і дэкадаванні.
Ага, Б. Я пайшоў да іншага.
E. Першае слова будзе.
S. Ён ішоў лягчэй.
U.
-Ой, ды добра, Ральф.
Я павінен ісці.
-Я спушчуся, штат Масачусэтс.
-Вось выдатна.
-T, О. Абавязкова.
Будзьце ўпэўненыя, да чаго?
Што Little Orphan Annie спрабую сказаць?
Будзьце ўпэўненыя, да чаго?
-Ральф!
Рэндзі павінен ісці.
Не маглі б вы выйсці?
-Усё ў парадку, мама.
Я зараз выйду.
-Я атрымліваю бліжэй.
Напруга было жахлівым.
Што гэта было?
Лёс планеты будзе на валаску.
-Ральф!
Рэндзі павінен сысці.
-Я б адразу, з розуму сысці.
-Ну і справы, амаль няма.
Мае пальцы лёталі.
Мой розум быў сталёвы пастку.
Кожны часу вібрацыі.
Гэта было амаль ясна.
Так, так, так, так.
-Будзьце ўпэўненыя, каб піць Ovaltine.
Ovaltine?
Вашывай камерцыйнай?
Сын сука.
[END прайграванне відэа]
>> David J. малая: То бок, у нас ёсць крыптаграфіі.
Так як у кампутары, мы можам ісці аб рэалізацыі або
якія прадстаўляюць такія рэчы?
Што ж, нам патрэбен спосаб выказаць сябе крыху больш гнутка, чым
нашы зменныя да гэтага часу дазволіў.
У нас былі цэлыя.
У нас былі знакі.
У нас былі паплаўкі і двухмесныя і некаторыя іншыя.
Але гэтыя асобныя часткі памяці, якая на самай справе не дазваляюць нам
выказаць рэчы, як словы і прапановы і фразы.
На самай справе, мы называлі такія радкі рэчы.
Але мы абяцалі, што гэта сапраўды проста спрашчэнне CS50
бібліятэкі, якія мы маем намер адхіліце.
>> І так, давайце пачнем рабіць гэта тут.
Дазвольце мне ісці наперад і адкрываць файл -
Усе гэтыя файлы даступныя як звычайныя онлайн -
называецца array.c вырашыць праблему не звязаных з радка, але што малюе
Карціна тут пра тое, як мы маглі б выкарыстоўваць тое, што называецца масівам.
Масіў ўяўляе сабой тып дадзеных.
Гэта тып зменнай, свайго роду, які мае некалькі меншыя тыпы дадзеных
ўнутры яго спіна да спіны, каб спіна да спіны.
Так, напрыклад, калі мы хочам напісаць невялікую праграму, якая дае Вам
Тэст сярэднім на курс, як 50, які мае два віктарыны, вы можаце вельмі лёгка
напісаць гэтую праграму - на аснове нават на некаторых з матэрыялу на мінулым тыдні -
з дапамогай GetInt і некалькі зменных.
Quiz1 Int, Int quiz2, і гэта даволі проста.
Гэта можа быць 10, 20 радкоў кода, не больш, рэалізаваць праграму, якая запытвае
Карыстальнік на працягу двух балаў віктарыны і затым вылічае іх сярэдняе, дадаўшы іх
разам, падзяліўшы на два, а затым друку вынікаў.
Мы маглі б зрабіць гэта даволі лёгка зараз, пасля
некаторы колькасць хвілін.
>> Але праблема ў тым, што выкажам здагадку, што 50 было тры ці чатыры віктарыны.
Выкажам здагадку, што вы хацелі выкарыстоўваць тую ж праграму для класа, які быў
штотыднёвыя віктарыны.
Падумайце аб класе, які штотыднёвыя віктарыны.
Калі ёсць накшталт 16 ці каля таго тыдняў у семестр, зараз у вас ёсць 16 зменных -
quiz1 Int, Int quiz2, унутр quiz3, унутр quiz4.
Як толькі вы пачынаеце бачыць гэтую надмернасць, гэта капіяванне і ўстаўка
кода, ён павінен пачаць рабіць вы хочаце там было лепш.
І на шчасце, таму што масівы, ёсць.
Так давайце зробім гэта.
Па-першае, дазвольце мне прадставіць вельмі простую рэч, што мы не выкарыстоўвалі да гэтага часу,
але вы ўбачыце, што часам у кодзе.
Гэта тое, што звычайна называецца сталай.
Так што гэта пастаянная у тым сэнсе, што гэта значэнне ніколі не мяняецца.
Чалавечыя канвенцыі пры стварэнні пастаяннай складаецца ў выкарыстанні ўсіх капітальных
літары, проста так, што ён сапраўды вылучаецца ў кодзе.
А адмысловыя ключавыя словы, якія вы выкарыстоўваеце ў З # вызначыць.
Так што, калі вы кажаце # вызначыць, то прастора, то слова, якое вы хочаце выкарыстоўваць для
пастаянную назву, а затым значэнне канстанты.
Такім чынам, апавяшчэнне, гэта адрозніваецца ад прысваення нешта зменная.
Там няма знака роўнасці.
Там няма коскі.
Гэта тое, што вядома як дырэктыва препроцессора, але больш на
ў іншы раз.
>> На дадзены момант, гэта стварае нязменнае значэнне, званае віктарыны, фактычныя
лікавае значэнне 2.
Такім чынам, усюды, дзе ёсць тэсты, віктарыны, тэсты на працягу ўсяго гэтага файла, гэта
толькі нумар 2.
Цяпер, калі я гляджу на асноўныя Цяпер, давайце паглядзім, як гэта працуе.
Па-першае, гэта выглядае трохі загадкава.
Але гэта ўсё рэчы з тыдні адзін.
Спытаеце ў карыстальніка класах.
Як мы гэта робім?
Ну, а ў радку 22 -
гэта сапраўды сакавітыя часткі -
Я заяўляю з якая плавае кропкай, а не проста адным паплаўком.
Я абвясціўшы, хутчэй, масіў значэнняў з якая плавае кропкай.
Гэта пераменная будзе называцца класах, як гэта маецца на ўвазе тут.
Але толькі частка новага сінтаксісу, то гэтыя квадратныя дужкі, той факт,
што я сказаў паплавок класах, а затым адкрыць дужку, а пасля колькасць.
Звярніце ўвагу, калі гэта ўвесь час, гэта так жа, як мы зрабілі гэта.
Гэта азначае, эй кампутар, дайце мне два паплаўка, і давайце калектыўна называюць
іх ацэнкі.
Гэта ў адрозненне ад значна больш працаёмкі працэс, як гэта.
Паплавок Grade1, плаваць grade2, і гэтак далей.
Такім чынам, масіў дазваляе нам рэалізаваць гэтую ідэю, але значна менш неахайна, у
такім чынам, што мы можам напісаць адзін радок кода, а не, скажам, 16 на 16
тыдзень семестра.
Так што я не хачу жорсткі код 2, таму што калі вы думаеце пра гэта цяпер
лагічна - выкажам здагадку, у наступным годзе CS50 зменаў да 3 віктарыны замест гэтага.
І ў мяне быў нумар 2 тут.
У мяне быў нумар 2 тут.
Яна становіцца вельмі стомным і вельмі лёгка сапсаваць і выпадкова змяніць
адно значэнне на 3 і прапусціць некаторыя іншыя значэнні 2.
Так што я збіраюся замест абстрактнага гэта адлегласць і выкарыстоўваць гэтую канстанту, якая, як і яе
назва, ніколі не мяняецца.
І цяпер, незалежна ад таго, ці будзем мы мець розныя віктарыны гэтым ці наступным годзе, я
проста змяніць яго ў адным месцы, тут на вяршыні.
>> Так што ўсё канстанты.
Між тым, новая канцэптуальная асаблівасць складаецца ў тым масіва.
Такім чынам, у квадратных дужках даць мне гэта шмат плавае і дазваляе мне калектыўна
называць іх класах тут.
Такім чынам, цяпер давайце паглядзім, што я збіраюся рабіць.
Тут, у радку 24 з'яўляецца пачаткам цыклу.
Гэта сапраўды нічога асаблівага.
Гэта толькі з дапамогай тэстаў, а не жорстка ліку.
Але няма нічога інтэлектуальна розных там з мінулага тыдня.
Гэта проста Printf.
Такім чынам, Е ("тэст нумар% сут% D"), таму што я проста хачу, каб раздрукаваць даць мне віктарыны
нумар аднаго з двух, а затым два з двух.
Так што гэта чыста эстэтычная рэч.
Але самае цікавае зараз знаходзіцца ў радку 27.
Для таго, каб запоўніць адну з двух запаўняльнікаў з якая плавае кропкай
значэнне, вы зноў выкарыстоўваць квадратныя дужкі.
У гэтым выпадку, я выкарыстоўваю я, таму што гэта цыкл пачаўся з роўнай я
Якое значэнне, па-відаць?
0.
>> Такім чынам, на першай ітэрацыі гэтага цыклу, гэта, як быццам я
напісаў гэта ў кодзе.
Але на другі ітэрацыі гэтага цыклу, гэта, як быццам я
напісаў гэта ў сваім кодзе.
Але тое, што я выкарыстоўваю зменную выдатна, таму што, як вынікае з назвы
мяркуе, што гэта змена яго значэння на кожнай ітэрацыі.
Так што я запаўненне гэтага масіва адным месцы за адзін раз.
Што гэта масіў выглядае?
Ну, чаму я намаляваў гэта супер просты прастакутнік на экране тут
Перад менавіта па гэтай прычыне.
Масіў гэта проста кавалак памяці быў яшчэ адзін кавалак памяці,
быў яшчэ адзін кавалак памяці, і гэтак далей.
Так што, калі мой масіў памерам 2, у дадзеным выпадку тут, усё, што я зрабіў бы па
увод у маёй ацэнкі віктарыны, як тут.
Я атрымаў 100 на гэтым.
А потым я атрымаў 99 на гэтым.
Тады гэтая памяць не можа нават быць выкарыстаны, таму што я толькі спытаў
кампутар масіў памерам 2.
Гэтыя квадраты ўсё яшчэ там.
Правільна?
У вас яшчэ ёсць два гігабайта аператыўнай памяці, нават калі вы толькі
просіць двума паплаўкі.
Такім чынам, ідэя масіваў з'яўляецца тое, што кампутар проста бярэ кавалак памяці
, А затым размяркоўвае дробныя кавалкі спіна да спіны, каб спіна да спіны.
І гэта ўсё, што масіў.
Гэта бесперапынны кавалак памяці, унутры якой вы можаце пакласці рэчы.
>> Зараз гэта адбываецца тады рабіць толькі некаторыя сумна арыфметыка.
Калі я пракруціць ўніз тут, гэта дзе я тады ітэрацыі па масіве.
Я прыдумаў сумаванне ўсіх значэнняў у масіве.
І тады я выкарыстаць круглыя ​​функцыю тут на самай справе рабіць
сума дзеліцца на віктарыны.
Але дазвольце мне махнуць рукой на што як свайго роду досыць арыфметычных цяпер.
Але ўсё, што робіць для мяне, у канчатковым рахунку, вылічэнне сярэдняга.
Такім чынам, спачатку тэст Плюс другое віктарына, падзеленая на 2, а затым друку
яго, як Int.
>> Але давайце цяпер пераход да іншай прыклад называецца string1,
які малюе аналагічную карціну, але з выкарыстаннем радкоў.
Дазвольце мне ісці наперад і спрасціць гэты на імгненне.
І даруй водступ на дадзены момант.
Звярніце ўвагу на лінію 19 з гэтага прыкладу, я атрымліваю радок ад карыстальніка.
Але звярніце ўвагу на тое, што я раблю ў наступным ліній 22 і далей.
На самай справе я ітэрацыя ад Я да - і гэта новы трук -
StrLen, даўжыня радка.
Гэта функцыя, якая пастаўляецца з C, што калі вы перадаеце яго радка, ён кажа
Вам, колькі знакаў у гэтай радку.
Вось і ўсё.
Той факт, што гэта StrLen, а даўжыня радка проста таму, што гэта
больш кароткім.
30 гадоў таму, людзям падабалася пісаць рэчы, як лаканічна, наколькі магчыма.
Такім чынам, мы захавалі гэтую канвенцыю тут.
я + + азначае толькі тое павялічваем я ў кожнай ітэрацыі.
А цяпер заўважаю гэта, што сапраўды цікава.
Такім чынам, у радку 24, я кажу кампутар, дайце мне характар, восем
бітаў, і называюць гэта ст.
Але што гэта на правай баку кажаце?
У ангельскай мове, што гэта ўяўляеце?
[Неразборліва]
David J. малая: Цалкам дакладна.
Дайце мне першы знак у масіве.
Або, у больш агульным, дай мне I-ы знак у масіве.
І разумею, што гэта важна цяпер, як камп'ютэрныя навукі, мы на самай справе
пачынаючы з 0.
Вы не павінны меркаванні цяпер, каб пачаць гэта рабіць.
Цяпер вы павінны паводзіць сябе ў адпаведнасці з чаканнямі кампутара і
лічыць з нуля, таму што [0] будзе першым
знакаў у радку.
[1] будзе другі.
[2] будзе трэцім, і гэтак далей.
Такім чынам, гэтая праграма, калі я скампіляваць яго - гэта, зноў жа, string1.
>> Так што string1.
А цяпер я бягу string1 ў маім акне тэрмінала.
Ён чакае ўводу, так што я збіраюся ўвесці, скажам, Давіда.
Enter.
І цяпер ён друкуе DAVID усё на розных лініях, таму што
заўважыць, што я раблю.
Я друк аднаго знака за адзін раз.
Цяпер мы не будзем удавацца ў падрабязнасці сёння на гэтым.
Але я выдаліў гэтую хвіліну таму тут галачку.
Аказваецца, што калі карыстальнік няправільна, спаборнасці, ці проста
замяшанні, вы можаце фактычна не даюць радкі некаторай даўжыні.
Калі вы націснеце не тую клавішу на клавіятуры, вы маглі б даць
Радок не на ўсіх.
Ці, калі вы злы, вы можаце паспрабаваць, каб ўставіць у кошт гігабайта аб
эсэ для запаўнення гэтага радка.
І калі на кампутары не хапае памяці, то атрымліваецца, што мы збіраемся
вярнуць гэта спецыяльнае значэнне, званае нулявое.
Такім чынам, на дадзены момант, проста ведаю, што ёсць гэта спецыяльнае значэнне, званае нулявое, што
дазволіць нам праверыць, калі мы з памяці, між іншым.
>> Але калі я адкрываю зараз string2, звернеце ўвагу на адно адрозненне тут.
Звярніце ўвагу на адно адрозненне тут з string2.
З string2, гэты цыкл трохі адрозніваецца.
Дазвольце мне выдаліць нулі, так што мы можам казаць пра тых, хто ў іншы раз.
Але чым жа адрозніваецца цыкла на гэты раз?
І я магу вярнуцца да папярэдняга прыкладу.
Так што гэта другі варыянт.
Гэта версія аднаго.
Адзін, два, раз-два.
Так StrLen выклік дзе?
Гэта ў першай частцы цыклу.
Любыя думкі аб тым, чаму я гэта раблю?
Так.
[Неразборліва]
David J. малая: Так што мы не выклікаем функцыю кожны раз.
Менавіта так.
Нагадаем, з завесамі на тое, што яны супер проста, як толькі вы роду
разумею, што гэта ініцыялізацыі
стане, і абнаўленне.
Праблема ў тым, што ўмова адбываецца на кожным
ітэрацыі цыклу.
І таму ў дадзеным прыкладзе, што такое дрэнна пра тое,
што гэта маё стан?
Вы тэлефануеце StrLen зноў і зноў, і зноў.
Але як толькі я набраў у DAVID, даўжыня гэтага радка роўна пяці.
І ён не збіраецца мяняць на кожнай ітэрацыі цыклу, паколькі
Радок па-ранейшаму D - V-I-D. Так што гэта намёк на тое, што збіраецца стаць
больш важная ідэя вядомая як дызайнерскае рашэнне, дзе - проста не
прымусіць кампутар рабіць непатрэбную працу.
>> Цяпер жа, як папярэдні прагляд PSET 2, PSET 2 у стандартным выданні
збіраюся кінуць вам выклік на самай справе рэалізацыі некаторага ліку шыфраў, некаторыя
колькасць алгарытмаў шыфравання, так што вы можаце як шыфраванне і дэшыфраванне
сакрэтныя паведамленні, падобную на тую, Ральф там дэкадаваць.
У хакерам выданне PSET 2, мы збіраемся пайсці крыху далей.
Мы збіраемся перадаць вам файл з фактычнымі кампутарную сістэму, якая ўтрымлівае
цэлую кучу імёнаў і фактычнай зашыфраваныя паролі, і задача
для хакера выданне будзе узломваць гэтыя паролі і фігуры
, Што крыптаграфія і таемныя, што была выкарыстаная на самай справе
генераваць гэтыя паролі.
І мы збіраемся зрабіць гэта з дапамогай новай функцыі тут C, што я дам
Вы толькі дэма-версія, вядомая як аргументы каманднага радка.
>> Вось і атрымліваецца, як некаторыя з вас, магчыма, бачылі ў раздзеле або ў падручніках,
Асноўным не заўсёды павінна быць пустэча ў дужках.
Аказваецца, што асноўная можна таксама запісаць як гэта, з двума аргументамі,
ARGC і ARGV, дзе ARGC лік слоў, якія вы ўводзіце пасля
Праграмы імя ў камандным радку.
І ARGV з'яўляецца фактычным слоў.
І, як квадратныя дужкі там прапануюць, ARGV мабыць масіва.
Гэта збіраецца быць радком пасля радка пасля радка ў памяці.
Так што мы збіраемся быць у стане зрабіць, пачынаючы з PSET 2,
нешта накшталт гэтага.
Калі я раблю argv1, які з'яўляецца прыкладам мы вернемся да ў панядзелак, і запусціце
гэта, заўважце, што гэта не падобна, каб зрабіць што-небудзь яшчэ.
Ён проста выводзіць сваё імя.
Але калі я развітваюся класа, звярніце ўвагу, што гэтая праграма па-відаць ітэрацыі
над кожным з слоў, якія былі надрукаваныя ў камандным радку.
І сродкі, з дапамогай якіх мы зможам атрымаць доступ да слоў, якія карыстальнік мае
друкуецца ў радку з'яўляецца змяненне асноўнага, пачынаючы гэты ўік-энд, ад Int
асноўных (несапраўднымі) у цэлае асноўныя (агдс, ARGV).
І, такім чынам народзіцца аргументы каманднага радка.
І як толькі вы атрымаеце сапраўды складаная ў гэтым, вы будзеце мець магчымасць пісаць
сапраўды трып праграм, такіх, як гэты вось, які ідзе вышэй і па-за
некаторыя функцыі, якія мы зрабілі да гэтага часу, але ўсё даволі магутны.
>> Такім чынам, мы пакінем гэта з гэтым на экране.
І мы будзем бачыць Вас у панядзелак.