1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [Тыдзень 2, працяг] 2 00:00:02,270 --> 00:00:04,220 [David J. малая, Гарвардскі універсітэт] 3 00:00:04,220 --> 00:00:06,880 [Гэта CS50. - CS50.TV] 4 00:00:06,880 --> 00:00:10,990 Добра. Гэта CS50, і гэта ў канцы тыдня 2. 5 00:00:10,990 --> 00:00:14,410 Калі вы плануеце быць галодным ў гэты час заўтра, 6 00:00:14,410 --> 00:00:18,620 ведаць, што мы збіраемся правесці як невялікай групай заўтра, чацвер, 1:15 вечара. 7 00:00:18,620 --> 00:00:21,360 Там ёсць URL тут, калі вы хочаце, каб RSVP. 8 00:00:21,360 --> 00:00:26,740 Месцы абмежаваныя, так што даруйце, калі форма запоўненая да таго часу вы запоўніце гэта. 9 00:00:26,740 --> 00:00:29,300 Іншы URL, аднак, што можа быць цікава гэта. 10 00:00:29,300 --> 00:00:32,369 У амаль праз месяц, курс будзе даступная 11 00:00:32,369 --> 00:00:36,890 Усё больш шырока праз EDX, праз якія людзі ў Інтэрнэце будзе мець магчымасць сачыць разам, 12 00:00:36,890 --> 00:00:39,380 ўдзельнічаць у працэсе дастаткова актыўна, на самай справе. 13 00:00:39,380 --> 00:00:42,270 Яны буду выкарыстоўваць CS50 і CS50 Appliance Абмеркаваць 14 00:00:42,270 --> 00:00:45,490 і самыя розныя праграмныя сродкі, якія мы ўжо выкарыстоўвалі ў гэтым семестры. 15 00:00:45,490 --> 00:00:48,710 І адна з ініцыятыў, якія мы хацелі б ўзяць у якасці эксперыменту ў гэтым годзе 16 00:00:48,710 --> 00:00:51,930 , Каб убачыць, як шмат зместу, якое мы можам перавесці 17 00:00:51,930 --> 00:00:53,960 у іншых вусных і пісьмовых моў. 18 00:00:53,960 --> 00:00:57,500 Так што, калі вы маглі б мець зацікаўленасць ва ўдзеле ў гэтым праекце 19 00:00:57,500 --> 00:01:02,270 якім мы будзем прадастаўляць англійскай стэнаграмы і субтытры для лекцый курса 20 00:01:02,270 --> 00:01:05,450 і шортах і семінарах і секцыях і да т.п., 21 00:01:05,450 --> 00:01:08,200 калі вы свабодна гаварыць і пісаць свабодна нейкую іншую мову, 22 00:01:08,200 --> 00:01:12,290 мы хацелі б звярнуцца да вас у гэты праект, у якім вы ўзяць на сябе адну або некалькі відэа, 23 00:01:12,290 --> 00:01:15,200 пераводзячы іх на мову, вы ведаеце дастаткова добра. 24 00:01:15,200 --> 00:01:18,700 >> Каб даць вам прадстаўленне аб інтэрфейсе, там гэтым вэб-інтэрфейс 25 00:01:18,700 --> 00:01:22,090 , Якія мы будзем выкарыстоўваць, што створыць істотна карыстацкага інтэрфейсу, як гэта. 26 00:01:22,090 --> 00:01:24,290 Гэта было мне выкладанні некаторых Дзень усіх Святых назад, 27 00:01:24,290 --> 00:01:27,390 і на правай баку ў чорным побач з гэтымі пазнакамі часу, 28 00:01:27,390 --> 00:01:31,210 Вы ўбачыце розныя рэчы, якія выйшлі з маіх вуснаў у той дзень, 29 00:01:31,210 --> 00:01:34,850 , А затым пад ім вы зможаце перавесці на іншую мову 30 00:01:34,850 --> 00:01:38,690 менавіта тое, што адлюстраванне паміж імі, у дадзеным выпадку, ангельскай і, скажам, іспанскай мовы. 31 00:01:38,690 --> 00:01:40,440 Так што гэта на самай справе вельмі зручны інструмент. 32 00:01:40,440 --> 00:01:43,370 Вы можаце перамоткі назад і наперад вельмі лёгка з дапамогай спалучэнняў клавіш. 33 00:01:43,370 --> 00:01:47,490 Так што, калі вы хочаце прыняць удзел у гэтым эксперыменце, і вашы словы бачыў і чытаў 34 00:01:47,490 --> 00:01:51,850 на патэнцыйна тысячы людзей там, калі ласка, не саромейцеся ўдзельнічаць. 35 00:01:51,850 --> 00:01:54,350 Адно слова пра кацяня з панядзелка. 36 00:01:54,350 --> 00:02:00,350 Каб мы адправілі занадта страшна паведамленне, разумеем, што, як працоўны час прапануюць 37 00:02:00,350 --> 00:02:03,300 а таксама раздзелы прапануюць, дызайн, вядома, вельмі шмат 38 00:02:03,300 --> 00:02:07,360 , Што студэнты супрацоўнічаюць і казаць, каб працаваць праз праблемы наборы 39 00:02:07,360 --> 00:02:11,260 і праблемы разам, а на самай справе проста лінія зводзіцца да таго, 40 00:02:11,260 --> 00:02:16,010 зноў, работа, якую вы ў канчатковым выніку прадставіць, павінны быць вашай уласнай. 41 00:02:16,010 --> 00:02:18,860 І, шчыра кажучы, у працоўны час гэта цалкам нармальна, 42 00:02:18,860 --> 00:02:22,240 гэта цалкам можна чакаць нават пабалбатаць з некаторымі адзін побач з вамі. 43 00:02:22,240 --> 00:02:24,370 >> Калі ён або яна змагаецца з некаторымі тэму і вы, як: 44 00:02:24,370 --> 00:02:27,940 "Ну, што ж, дазвольце мне даць вам прадстаўленне аб некаторай радкі кода, які я напісаў," гэта нармальна, 45 00:02:27,940 --> 00:02:31,250 што адбываецца, і гэта вельмі спрыяе, я думаю, з працэсам навучання. 46 00:02:31,250 --> 00:02:36,750 Там, дзе лінія перасекла атрымлівае, калі галава нахіленая роду тут для занадта многіх секунд 47 00:02:36,750 --> 00:02:41,160 ці хвілін для таго, каб сапраўды толькі што былі магчымасці для разблакавання вашага сябра, 48 00:02:41,160 --> 00:02:44,160 і, вядома, калі усё становіцца абмен па электроннай пошце і Dropbox і да т.п., 49 00:02:44,160 --> 00:02:45,640 там таксама ёсць лініі. 50 00:02:45,640 --> 00:02:48,620 Такім чынам, усе сродкі адчуваць сябе камфортна і натхняе мець зносіны з сябрамі 51 00:02:48,620 --> 00:02:52,810 і аднакласнікам аб psets і больш і проста разумею, што тое, што вы ў канчатковым выніку прадставіць 52 00:02:52,810 --> 00:02:57,340 павінна быць сапраўды прадукт вашага творчасці, а не нехта іншы. 53 00:02:57,340 --> 00:03:00,490 І вось адна з прадметна-арыентаваных задач для pset2, 54 00:03:00,490 --> 00:03:04,740 які выйдзе позна ўвечары заўтра, пагрузіцца ў свет крыптаграфіі, 55 00:03:04,740 --> 00:03:08,970 , Якая з'яўляецца мастацтвам шыфравання або скремблирования інфармацыі, 56 00:03:08,970 --> 00:03:12,600 і гэта ў канчатковым рахунку ставіцца да свету бяспекі. 57 00:03:12,600 --> 00:03:16,560 Цяпер, бяспеку для большасці з нас прыходзіць у выглядзе даволі свецкага механізмаў. 58 00:03:16,560 --> 00:03:19,050 Ва ўсіх нас ёсць імёны карыстальнікаў і паролі, 59 00:03:19,050 --> 00:03:23,450 і ва ўсіх нас ёсць вельмі дрэнныя імёны карыстальнікаў і паролі, хутчэй за ўсё. 60 00:03:23,450 --> 00:03:28,240 >> Калі ваш пароль гэтак жа на некалькіх вэб-сайтах, што, верагодна, не лепшая ідэя, 61 00:03:28,240 --> 00:03:30,070 як мы абмяркуем бліжэй да канца семестра. 62 00:03:30,070 --> 00:03:34,720 Калі ваш пароль запісваецца на запіскі - не жарт - на вашым маніторы, 63 00:03:34,720 --> 00:03:38,350 гэта таксама не абавязкова лепшы дызайн, але даволі распаўсюджаная з'ява. 64 00:03:38,350 --> 00:03:42,470 І калі вы не выкарыстоўваеце крыптаграфію для шыфравання пароляў, 65 00:03:42,470 --> 00:03:44,210 яны асабліва ўразлівыя. 66 00:03:44,210 --> 00:03:47,270 Так што калі вы думаеце, што быць супер разумны, маючы схаваны дакумент Word 67 00:03:47,270 --> 00:03:49,910 дзесьці на вашым цвёрдым дыску, які мае ўсе вашы паролі 68 00:03:49,910 --> 00:03:53,670 але гэта ў тэчцы, што ніхто не збіраецца зазірнуць, што таксама не вельмі надзейны механізм. 69 00:03:53,670 --> 00:03:56,990 І тое, што pset2 прадставіць гэта мастацтва крыптаграфіі 70 00:03:56,990 --> 00:04:02,010 і скремблирования інфармацыі, так што такія рэчы, як паролі ўсё больш бяспечнай. 71 00:04:02,010 --> 00:04:05,790 Кантэкст тут з'яўляецца тое, што з небяспечнай дадзеных 72 00:04:05,790 --> 00:04:07,930 прыходзіць магчымасць зашыфраваць яго і, каб засакрэціць яго. 73 00:04:07,930 --> 00:04:11,470 І вось гэты, напрыклад, з'яўляецца прыкладам зашыфраванае паведамленне. 74 00:04:11,470 --> 00:04:14,700 Гэта на самой справе нешта гаворыць на англійскай мове, але гэта відавочна не цалкам відавочная. 75 00:04:14,700 --> 00:04:18,279 І мы прайшлі поўны круг сёння, каб дражніць адзін ад аднаго, што гэта сакрэтнае паведамленне тут. 76 00:04:18,279 --> 00:04:23,490 Але ў рэальным свеце кампутараў, рэчы, нават не падобна, што яны могуць быць ангельскія фразы. 77 00:04:23,490 --> 00:04:28,430 Напрыклад, гэта тое, што вы можаце знайсці на стандартнай Linux ці Mac або UNIX кампутар 78 00:04:28,430 --> 00:04:32,070 у файл, які быў калісьці называлі файла пароляў. 79 00:04:32,070 --> 00:04:34,200 >> У цяперашні час гэта былі перамешчаныя ў іншыя месцы. 80 00:04:34,200 --> 00:04:39,210 Але калі вы паглядзіце ў патрэбным месцы ў сістэме, вы ўбачыце не толькі ваша імя карыстальніка 81 00:04:39,210 --> 00:04:43,400 або іншых людзей у сістэме, але вы ўбачыце, зашыфраваную версію пароля. 82 00:04:43,400 --> 00:04:47,980 Сапраўды, слова склеп там мяркуе, што наступныя рэчы ў зашыфраваным выглядзе, 83 00:04:47,980 --> 00:04:52,680 і гэты шэраг, здавалася б, выпадковых літар і знакаў і лічбаў і г.д. 84 00:04:52,680 --> 00:04:56,480 могуць быць расшыфраваны толькі ў цэлым ведаючы некаторыя таямніцы - 85 00:04:56,480 --> 00:04:58,840 сакрэтнае слова, сакрэтны нумар - 86 00:04:58,840 --> 00:05:03,160 і так на самай справе, мастацтва крыптаграфіі ў канчатковым рахунку, зводзіцца да таго, давяраць нейкі 87 00:05:03,160 --> 00:05:05,650 і ведаючы тое, што хтосьці не робіць. 88 00:05:05,650 --> 00:05:10,090 Такім чынам, мы разгледзім гэта ў трохі больш падрабязна сёння і ў PSET ў будучыні. 89 00:05:10,090 --> 00:05:12,200 А зараз некалькі слоў пра Pass / Fail. 90 00:05:12,200 --> 00:05:15,360 Тым больш, што некаторыя з вас нырнуў у pset1, тэхніка, 91 00:05:15,360 --> 00:05:19,080 і цалкам новы свет для сябе, разумееш, што расчараванне і разгубленасць 92 00:05:19,080 --> 00:05:21,700 і толькі тэхнічныя цяжкасці, цалкам можна чакаць, 93 00:05:21,700 --> 00:05:24,180 Асабліва з першым PSET, дзе ёсць так шмат усяго новага, 94 00:05:24,180 --> 00:05:27,730 толькі знаёміцца ​​з Л. і кампакт-дыск, і ўсе гэтыя таемныя каманды 95 00:05:27,730 --> 00:05:33,050 і новую сераду, і гэта асобна ад фактычнага матэрыялу і праграмаванне сябе. 96 00:05:33,050 --> 00:05:36,940 Так разумею таксама, што ёсць, вядома, працоўныя гадзіны, якія існуюць у якасці апорнай канструкцыі. 97 00:05:36,940 --> 00:05:38,880 >> Раздзелы пачаць у бліжэйшую нядзелю. 98 00:05:38,880 --> 00:05:42,960 Але самае галоўнае, калі вы адчуваеце сябе проста, што гэта не свет для вас, 99 00:05:42,960 --> 00:05:44,710 разумееш, што гэта сапраўды проста трэба час. 100 00:05:44,710 --> 00:05:48,600 І калі б не гэтая магчымасць гадоў таму для мяне ўзяць клас прыдатны / не прыдатны, 101 00:05:48,600 --> 00:05:50,990 Шчыра кажучы, я ніколі б нават ступіць у класе. 102 00:05:50,990 --> 00:05:53,690 І вы можаце змяніць гэта да, скажам, пяты панядзелак вядома, 103 00:05:53,690 --> 00:05:58,280 так што калі вы на краі цяпер, разумееш, што замест галавы ў некаторых іншых вод у цэлым, 104 00:05:58,280 --> 00:06:01,260 гэтага, вядома, разглядаць толькі змены ў залік / незалік. 105 00:06:01,260 --> 00:06:04,570 Зноў жа, гэта не зусім гэтую культуру тут, у Гарвардзе прымаць рэчы залік / незалік 106 00:06:04,570 --> 00:06:08,670 так як усё на самой справе хоча дасягнуць або overachieve, 107 00:06:08,670 --> 00:06:11,130 але, шчыра кажучы, гэта выдатны спосаб паспрабаваць нешта з 108 00:06:11,130 --> 00:06:16,720 якія не могуць быць вам знаёмыя, і вы будзеце ў канчатковым выніку робяць, у большасці выпадкаў, цалкам нармальна, 109 00:06:16,720 --> 00:06:18,210 магчыма, многае да вашага здзіўлення. 110 00:06:18,210 --> 00:06:20,980 І больш канкрэтна, тое, што я думаю, што прыдатны / не прыдатны наогул робіць, 111 00:06:20,980 --> 00:06:22,940 Асабліва, як вы, магчыма, выпрабавалі з pset0, 112 00:06:22,940 --> 00:06:26,560 калі вы пакладзеце ў 10 гадзін, 15 гадзін, 25 гадзін у некаторых PSET 113 00:06:26,560 --> 00:06:29,920 і вы проста біцца галавой аб сцяну, і яна становіцца супер позна ўначы 114 00:06:29,920 --> 00:06:33,950 але вы зрабілі PSET 90% шляху, і вы проста не магу зразумець адну рэч, 115 00:06:33,950 --> 00:06:36,520 прыдатны / не прыдатны сапраўды здымае вастрыню класа, як гэта, 116 00:06:36,520 --> 00:06:39,100 дзе вы можаце сартаваць радасна кажуць: "Добра, я ведаю, што гэта не ідэальны, 117 00:06:39,100 --> 00:06:42,350 Але я працаваў ад сваёй задніцы на гэта, я вельмі шчаслівая з тым, дзе гэта скончылася ", 118 00:06:42,350 --> 00:06:44,850 і што будзе адпавядаць чаканням за залік / незалік. 119 00:06:44,850 --> 00:06:47,540 Так што майце гэта на ўвазе. Добра. 120 00:06:47,540 --> 00:06:50,520 >> Так што тыя з вас, хто спрабаваў выкарыстаць Гарвардскага універсітэта Wi-Fi, 121 00:06:50,520 --> 00:06:54,780 ведаю, што ёсць CS50 SSID, Wi-Fi злучэнне, якія плаваюць вакол 122 00:06:54,780 --> 00:06:56,490 што вы маглі б лепш поспеху. 123 00:06:56,490 --> 00:07:00,130 Гэта крыху парадаксальна, што пароль для гэтага, калі вы хацелі б паспрабаваць падключэнні да гэтага 124 00:07:00,130 --> 00:07:08,350 для лепшай хуткасці - і дайце нам ведаць, калі гэта не лепш - 12345, на ўсім шляху да 8 125 00:07:08,350 --> 00:07:10,910 таму што 8 з'яўляецца больш бяспечнай, чым 5. 126 00:07:10,910 --> 00:07:16,910 Так што калі вам патрэбен Wi-Fi пароль, падлучыцца да бесправаднога CS50 тут, 12345678, 127 00:07:16,910 --> 00:07:20,380 і паведамленне пра CS50 Абмеркаваць калі вы да гэтага часу перыядычна ўзнікаюць праблем падлучэння, 128 00:07:20,380 --> 00:07:25,420 і мы дамо паўнамоцтвы, якія будуць ведаць гэта прастора. Добра. 129 00:07:25,420 --> 00:07:32,230 Так хутка тізер, асабліва для тых з вас, хто вентылятара хлопчыкаў і дзяўчынак ўсіх Яблык рэчы. 130 00:07:32,230 --> 00:07:37,460 Тое, што я выкапаў з некалькі гадоў таму быў гэты файл тут, iUnlock.c, 131 00:07:37,460 --> 00:07:39,930 толькі выгляд робяць больш канкрэтныя і больш складаныя 132 00:07:39,930 --> 00:07:42,560 некаторыя з найбольш асноўных праграм C мы ўжо пісалі. 133 00:07:42,560 --> 00:07:46,910 Так я адкрыў гэты файл, iUnlock.c. Ён даступны на старонцы Лекцыі на сённяшні дзень. 134 00:07:46,910 --> 00:07:49,810 На левай баку вы ўбачыце доўгі спіс функцый. 135 00:07:49,810 --> 00:07:53,230 Такім чынам, чалавек, які напісаў гэта напісаў шмат функцый, больш, чым проста асноўны. 136 00:07:53,230 --> 00:07:57,340 Ён выкарыстаў цэлую кучу бібліятэк тут, і калі мы пачнем прагорткі, 137 00:07:57,340 --> 00:08:04,890 што гэта на самай справе самы першы, я лічу, крэк для арыгінальнага iPhone. 138 00:08:04,890 --> 00:08:09,830 >> Калі Вы хацелі зрабіць джейлбрейк арыгінальны iPhone, а гэта значыць непрывязаныя джейлбрейк ад AT & T 139 00:08:09,830 --> 00:08:13,710 і фактычна ўсталяваць спецыяльнае праграмнае забеспячэнне на ім і рабіць тое, што Яблык не хачу, каб людзі робяць, 140 00:08:13,710 --> 00:08:18,480 кто-то ўзяў час, каб высветліць, як менавіта яны могуць выкарыстоўваць праграмныя памылкі, 141 00:08:18,480 --> 00:08:22,690 памылкі, памылкі, у праграмным забеспячэнні Apple, і такім чынам нарадзіўся iUnlock.c-- 142 00:08:22,690 --> 00:08:26,760 што калі вы сабралі яго на свой кампутар і ўсталяваць яго на iPhone 143 00:08:26,760 --> 00:08:29,430 , Які быў падлучаны да кампутара з дапамогай, скажам, кабель USB, 144 00:08:29,430 --> 00:08:32,450 гэта дасць вам адміністрацыйнай або прывілеі на вашым iPhone 145 00:08:32,450 --> 00:08:34,620 і дазваляюць зрабіць вельмі многае, што вы хочаце. 146 00:08:34,620 --> 00:08:36,400 І вось там быў гэты займальны кошкі-мышкі 147 00:08:36,400 --> 00:08:39,340 паміж Яблыкам і астатняга свету, у прыватнасці, так як яны, як і шматлікія кампаніі, 148 00:08:39,340 --> 00:08:43,350 спрабуюць заблакаваць свае рэчы ўніз, так што вы можаце зрабіць толькі з ім, што яны маюць намер. 149 00:08:43,350 --> 00:08:47,360 Але дзякуючы такім людзям, як гэта і разумення нізкага ўзроўню дэталяў - 150 00:08:47,360 --> 00:08:50,830 і ў гэтым выпадку C праграмавання - і шмат знаёмых канструкцый 151 00:08:50,830 --> 00:08:55,280 што мы пачалі гуляць, вы зможаце па-сапраўднаму выкарыстоўваюць апаратную 152 00:08:55,280 --> 00:08:59,250 такім чынам, вы лічыце патрэбным, і не абавязкова некаторых юрыдычнай асобай. 153 00:08:59,250 --> 00:09:01,600 Так, напрыклад, я паняцця не маю, што ўсё гэта робяць, 154 00:09:01,600 --> 00:09:03,580 але GetVersion гучыць даволі проста, 155 00:09:03,580 --> 00:09:05,710 і, падобна, гэта функцыя, што гэты чалавек напісаў. 156 00:09:05,710 --> 00:09:09,250 Гэта зойме нейкае цэлае лік у якасці аргументу, нічога не вяртае, 157 00:09:09,250 --> 00:09:13,710 але, здаецца, завесы з цыклу тут і, калі ўмова, калі ўмова перапынку, 158 00:09:13,710 --> 00:09:16,770 і так ці інакш звязана з нумарамі версій, калі пракруціць ўніз, 159 00:09:16,770 --> 00:09:19,650 хоць многія з гэтых ключавых слоў будзе новы. 160 00:09:19,650 --> 00:09:22,590 І ёсць шмат функцый тут мы ніколі не бачылі і не маглі б ніколі не ўбачыць 161 00:09:22,590 --> 00:09:24,350 на працягу семестра. 162 00:09:24,350 --> 00:09:29,160 >> У рэшце рэшт, гэта варта тым жа правілам і логіцы, што мы гулялі з да гэтага часу. 163 00:09:29,160 --> 00:09:34,340 Так што гэта занадта стары, каб зламаць ваш iPhone або 3s 4s 5s або неўзабаве гэтыя дні, 164 00:09:34,340 --> 00:09:38,830 але ведаю, што ўсё гэта вельмі атрыманыя з гэтага свету, што мы нырнулі. 165 00:09:38,830 --> 00:09:42,280 Давайце зірнем на некалькі больш просты прыклад: 166 00:09:42,280 --> 00:09:46,260 гэта, проста сагрэцца з некаторымі сінтаксісу, а таксама некаторыя іншыя тыпы дадзеных 167 00:09:46,260 --> 00:09:48,910 што мы казалі, але сапраўды не бачыў у C. 168 00:09:48,910 --> 00:09:53,670 Гэты файл называецца positive1.c, і ў каментарах на вяршыні, 169 00:09:53,670 --> 00:09:56,070 гэта проста патрабуе, каб карыстальнік забяспечыць станоўчае лік. 170 00:09:56,070 --> 00:09:59,910 Так што гэта прыклад зрабі той час як цыкл, які добры для карыстальнікаў інтэрактыўных праграм 171 00:09:59,910 --> 00:10:02,070 дзе вы павінны сказаць карыстачу, каб нешта зрабіць, 172 00:10:02,070 --> 00:10:05,530 і калі яны не супрацоўнічаюць вы крычаць на іх або адхіліць іх ўводу. 173 00:10:05,530 --> 00:10:10,480 Справа ў кропку: я збіраюся рабіць радках 19 да 24 174 00:10:10,480 --> 00:10:14,620 тых часоў, пакуль карыстач не даў мне станоўчае лік. 175 00:10:14,620 --> 00:10:21,340 Гэтая дэталь тут, на лініі 18, чаму я заяўляю, п вышэй за ўсё гэтага цыклу пабудаваць 176 00:10:21,340 --> 00:10:26,870 у адрозненне ад прама побач з лініяй 22, дзе я на самой справе клапоцяцца, каб атрымаць п? Так. 177 00:10:26,870 --> 00:10:29,330 [Студэнт] Scope. >> Так, так што гэтае пытанне з вобласці бачнасці. 178 00:10:29,330 --> 00:10:31,770 І з пункту гледжання непрафесіяналы, што робіць вобласць ставіцца? 179 00:10:34,880 --> 00:10:41,560 Так. >> [Неразборліва адказ студэнта] >> Ці можаце вы гаварыць гучней? 180 00:10:41,560 --> 00:10:45,440 [Студэнт] Дзе можна атрымаць доступ да гэтай зменнай. >> Perfect. 181 00:10:45,440 --> 00:10:47,610 Дзе Вы можаце атрымаць доступ да пэўнай зменнай. 182 00:10:47,610 --> 00:10:50,990 І наогул, правіла да гэтага часу было, што сфера некаторыя зменныя 183 00:10:50,990 --> 00:10:56,140 вызначаецца самай апошняй фігурныя дужкі, што вы бачылі. 184 00:10:56,140 --> 00:11:03,070 >> І таму ў дадзеным выпадку, калі я зрабіў памылку, абвясціўшы п на лініі 22, што лінія будзе працаваць. 185 00:11:03,070 --> 00:11:10,840 Я хацеў бы атрымаць цэлы лік, і я б паставіў яго ў гэтай зменнай п у радку 22, 186 00:11:10,840 --> 00:11:17,060 але якая радок кода цяпер не ведаю, што я кажу? >> [Студэнт] 25. 187 00:11:17,060 --> 00:11:23,840 [Малая] 25, і аказваецца, што 24, а таму, што ў гэтым выпадку ён выходзіць за межы фігурныя дужкі. 188 00:11:23,840 --> 00:11:28,550 Так што проста трохі непрыемнасць, але вельмі лёгка вырашаецца проста абвясціць зменную 189 00:11:28,550 --> 00:11:30,700 за межамі самой функцыі. 190 00:11:30,700 --> 00:11:32,760 Пазней мы ўбачым, сёння вы можаце зрабіць яшчэ адзін крок 191 00:11:32,760 --> 00:11:34,940 і вы нават можаце атрымаць крыху гультаяваты. 192 00:11:34,940 --> 00:11:39,660 І гэта не рэкамендуецца наогул, але вы можаце нават атрымаць лянівага 193 00:11:39,660 --> 00:11:44,150 і пакласці зменную ў глабальным маштабе, так бы мовіць, не ўнутры функцыі, а не ўнутры цыклу, 194 00:11:44,150 --> 00:11:49,800 але ў самім файле, за межамі ўсіх функцый вы напісалі, як я зрабіў тут, на лініі 15. 195 00:11:49,800 --> 00:11:55,220 Гэта, як правіла, з неадабрэннем, але разумею, што гэтае рашэнне часам да іншых праблемах, 196 00:11:55,220 --> 00:11:56,910 як мы ў канчатковым рахунку бачыць. 197 00:11:56,910 --> 00:11:59,500 Так што цяпер мы пакінем гэта так, але давайце паглядзім, калі мы можам перапісаць гэта 198 00:11:59,500 --> 00:12:02,360 толькі, каб пачаць выказаць сябе крыху па-іншаму. 199 00:12:02,360 --> 00:12:05,550 Гэтая праграма, проста каб быць ясна, з'яўляецца positive1. 200 00:12:05,550 --> 00:12:11,980 Дазвольце мне ісці наперад тут і ў маім акне тэрмінала зрабіць positive1, Enter. 201 00:12:11,980 --> 00:12:15,080 Кампілюе парадку. Я збіраюся запусціць positive1, націсніце Enter. 202 00:12:15,080 --> 00:12:19,250 Я патрабую, каб вы даць мне цэлае станоўчае лік. Я скажу -1. Гэта не працуе. 203 00:12:19,250 --> 00:12:22,340 0, 99. Гэта падобна на працу. 204 00:12:22,340 --> 00:12:25,310 Можа быць, не самы строгі тэст, але па крайняй меры гэта добрая праверка наяўнасці свядомасці 205 00:12:25,310 --> 00:12:27,100 што мы знаходзімся на правільным шляху. 206 00:12:27,100 --> 00:12:29,570 >> Так што цяпер дазвольце мне ісці наперад і адкрыць версію 2 гэтага, 207 00:12:29,570 --> 00:12:32,800 і чым адрозніваецца ўжо? 208 00:12:32,800 --> 00:12:39,030 Ён рэалізуе тую ж самую рэч, але тое, што скача, як выразна ў гэты раз? 209 00:12:40,790 --> 00:12:47,090 Гэта BOOL ў зялёны колер. Ён будзе выдзелены зялёным колерам, гэта ключавое слова вядома як лагічны, які з'яўляецца тыпам дадзеных. 210 00:12:47,090 --> 00:12:50,510 Яна не прыходзіць пабудаваны ў для ўсіх версій C. 211 00:12:50,510 --> 00:12:52,650 Вам неабходна ўключыць канкрэтную бібліятэку. 212 00:12:52,650 --> 00:12:56,460 У нашым выпадку, я ўключыў CS50 бібліятэку, так што ў нас ёсць доступ да BOOL. 213 00:12:56,460 --> 00:12:59,860 Але ў радку 18, мы, здаецца, ёсць лагічнае значэнне тут называюць ўдзячныя. 214 00:12:59,860 --> 00:13:02,190 Я мог бы назваць гэта што заўгодна, але я назваў яго ўдзячная 215 00:13:02,190 --> 00:13:04,750 проста выгляд перадаюць сэнсавае значэнне. 216 00:13:04,750 --> 00:13:07,700 Такім чынам, першапачаткова на лініі 18, я, мабыць, не ўдзячны 217 00:13:07,700 --> 00:13:12,230 таму што лагічнае значэнне ўдзячныя ініцыялізуецца ілжывым у радку 18. 218 00:13:12,230 --> 00:13:16,500 І тады здаецца, што я зрабіў тут у радках з 21 па 23 219 00:13:16,500 --> 00:13:19,200 гэта я толькі часткова перапісаць маю логіку. 220 00:13:19,200 --> 00:13:26,100 Так што не функцыянальна розныя, але ў радку 22 цяпер я магу праверыць, калі Int карыстальнік прадаставіў 221 00:13:26,100 --> 00:13:31,360 больш 0, то я проста змяніць значэнне ўдзячныя праўда. 222 00:13:31,360 --> 00:13:35,590 А навошта мне гэта рабіць? Таму што ў радку 25, па-відаць, я збіраюся праверыць стан. 223 00:13:35,590 --> 00:13:39,760 У гэтага цыкла ў той час як ўдзячны з'яўляецца ілжывым. 224 00:13:39,760 --> 00:13:42,960 Так што я прапанаваў гэта ў якасці альтэрнатывы версія 1 225 00:13:42,960 --> 00:13:47,050 таму што гэта па меншай меры трохі больш інтуітыўным, магчыма, гэта крыху больш абгрунтаванай на англійскай мове. 226 00:13:47,050 --> 00:13:51,980 Такім чынам, выканайце наступныя дзеянні, пакуль вы не ўдзячныя або пры ўдзячныя з'яўляецца ілжывым. 227 00:13:51,980 --> 00:13:56,220 І на гэты раз я таксама, мабыць, не люблю ўспамінаць тое, што карыстач набраў у 228 00:13:56,220 --> 00:14:00,050 таму што апавяшчэння няма зменнай п, так на самай справе, маленькая белая хлусня там. 229 00:14:00,050 --> 00:14:03,290 >> Функцыянальна праграма трохі адрозніваецца, як толькі мы пяройдзем да ніжняй яго 230 00:14:03,290 --> 00:14:04,960 таму што я не памятаў, што п. 231 00:14:04,960 --> 00:14:09,120 Але я хацеў паказаць тут, што, хоць мы бачылі GetInt 232 00:14:09,120 --> 00:14:13,780 і GetString выкарыстоўваецца на правы бок знака роўнасці да гэтага часу 233 00:14:13,780 --> 00:14:17,310 так што мы памятаем значэнне, тэхнічна, гэта не строга абавязкова. 234 00:14:17,310 --> 00:14:20,290 Калі па якіх-небудзь прычынах вы проста не клапоцяцца, каб захаваць значэнне, 235 00:14:20,290 --> 00:14:25,540 Вы проста хочаце праверыць значэнне, заўважылі, што мы можам проста напісаць гэта як GetInt, 236 00:14:25,540 --> 00:14:27,320 адкрытая дужках, побач хлопец. 237 00:14:27,320 --> 00:14:30,570 Гэтая функцыя будзе вяртаць значэнне, як мы ўжо казалі. 238 00:14:30,570 --> 00:14:32,220 Гэта будзе вярнуць вам Int. 239 00:14:32,220 --> 00:14:34,460 І таму, калі вы ў думках думаю, што гэта адбудзецца, 240 00:14:34,460 --> 00:14:38,190 пры ўводзе ў 99, GetInt вяртае лік 99, 241 00:14:38,190 --> 00:14:41,840 і так канцэптуальна, гэта як бы мой код быў на самай справе гэтага. 242 00:14:41,840 --> 00:14:45,950 Так, калі 99 сапраўды больш 0, то ўдзячны становіцца сапраўдным, 243 00:14:45,950 --> 00:14:50,810 Затым лінія 25 рэалізуе ох, мы зрабілі, таму што я зараз ўдзячны, 244 00:14:50,810 --> 00:14:53,970 і ў радку 26, мы проста кажам: "Дзякуй за натуральнае!" 245 00:14:53,970 --> 00:14:55,960 Як бы там ні здарылася быць. 246 00:14:55,960 --> 00:14:59,140 Зараз давайце зробім невялікі сінтаксічны цукар тут, так бы мовіць. 247 00:14:59,140 --> 00:15:04,670 Давайце паглядзім, калі мы можам прыбіраць гэтую лінію 25 з гэтым трэці і апошні варыянт, у positive3. 248 00:15:04,670 --> 00:15:13,600 >> Звярніце ўвагу, з той толькі розніцай, што зараз гэта радок кода? >> [Студэнт] 25. >> [Малая] Так, 25. 249 00:15:13,600 --> 00:15:17,680 І мы сапраўды не бачыў гэты трук, але яго мы бачылі клічнік у панядзелак, 250 00:15:17,680 --> 00:15:21,070 , Які пазначае, што? >> [Студэнт] Не. >> Ня або адмаўленне. 251 00:15:21,070 --> 00:15:23,510 Так што бярыце лагічнае значэнне і перавярнуць яго значэнне. 252 00:15:23,510 --> 00:15:25,810 Праўда, становіцца ілжывым, ілжывае становіцца сапраўдным. 253 00:15:25,810 --> 00:15:30,420 Так што гэта, я хацеў бы прапанаваць, нават крыху больш інтуітыўным спосабам напісання кода 254 00:15:30,420 --> 00:15:33,430 таму што я да гэтага часу ўдзячны ініцыялізацыі ілжывым, я ўсё яшчэ раблю наступнае, 255 00:15:33,430 --> 00:15:36,010 Я паставіў ўдзячныя дакладна, калі прыйдзе час, 256 00:15:36,010 --> 00:15:40,880 але цяпер вы сапраўды можаце проста перавесці гэты код вусна злева направа, 257 00:15:40,880 --> 00:15:45,630 а (благодарны!), таму што выбуху або клічнік пазначае паняцце не 258 00:15:45,630 --> 00:15:47,580 так што пакуль не ўдзячныя. 259 00:15:47,580 --> 00:15:49,900 Такім чынам, яшчэ раз, мы не ўведзены новыя паняцці як такога. 260 00:15:49,900 --> 00:15:53,730 Мы гаварылі пра лагічных назад, калі мы гулялі з нуля, 261 00:15:53,730 --> 00:15:56,720 але разумею, зараз мы можам проста пачаць пісаць наш код па-рознаму. 262 00:15:56,720 --> 00:16:01,060 Такім чынам, асабліва ў pset1 калі вы, здаецца, спрабуе высветліць спосаб, каб напісаць некалькі праграм, 263 00:16:01,060 --> 00:16:04,340 Шанцы Вам пашанцавала, таму што там можа быць любы лік рашэнняў 264 00:16:04,340 --> 00:16:06,110 што вы можаце выпадкова сустрэць. 265 00:16:06,110 --> 00:16:10,500 Напрыклад, гэта знаходзіцца ўсяго ў 3 нават для простых праграм. Добра. 266 00:16:10,500 --> 00:16:14,200 А зараз успомнім ў панядзелак мы выйшлі на гэтую цыдулку з вяртаннем значэння. 267 00:16:14,200 --> 00:16:18,450 Такім чынам, у першы раз, калі мы напісалі праграму, якая не проста асноўны; 268 00:16:18,450 --> 00:16:22,550 яна таксама мае сваю ўласную функцыю, якую я напісаў тут. 269 00:16:22,550 --> 00:16:26,810 Такім чынам, у радку 31 па 34 я рэалізаваў функцыю куб. 270 00:16:26,810 --> 00:16:30,240 Гэта не комплекс. Гэта проста * а * а ў гэтым выпадку. 271 00:16:30,240 --> 00:16:34,750 Але, што важна пра яго, што я бяру ўваход у выглядзе 272 00:16:34,750 --> 00:16:39,180 і я вяртаюся выхад у выглядзе * а *. 273 00:16:39,180 --> 00:16:43,560 Так што цяпер у мяне ёсць магчымасць, гэтак жа, як я раней з prinf адзін, 274 00:16:43,560 --> 00:16:47,240 для выкліку гэтай функцыі, выклікаўшы функцыю куб. 275 00:16:47,240 --> 00:16:51,970 >> І куб функцыя прымае некаторыя ўваход, і куб функцыя вяртае некаторы выхад. 276 00:16:51,970 --> 00:16:56,960 У адрозненне ад Printf проста нешта зрабіў. 277 00:16:56,960 --> 00:17:00,840 Яна не вяртае нічога, што мы клапаціліся аб, хоць, як у бок яно вяртае значэнне; 278 00:17:00,840 --> 00:17:03,110 Вы проста ўвогуле ігнаруюць яго. 279 00:17:03,110 --> 00:17:06,510 Printf проста нешта зрабіў. Гэта быў пабочны эфект друку на экране. 280 00:17:06,510 --> 00:17:11,770 У адрозненне ад тут, у нас ёсць куб функцыі, якія на самай справе вяртае нешта. 281 00:17:11,770 --> 00:17:15,520 Так што для тых, хто знаёмы з гэтым, гэта даволі простая ідэя. 282 00:17:15,520 --> 00:17:19,640 Але для тых, хто менш знаёмы з гэтай ідэяй якія праходзяць у ўваходы і выхады вяртаюцца, 283 00:17:19,640 --> 00:17:21,950 Давайце паспрабуем проста нешта супер проста. 284 00:17:21,950 --> 00:17:25,490 Хто-небудзь зручныя падышоўшы на этапе коратка? 285 00:17:25,490 --> 00:17:28,040 Вы павінны быць знаёмыя з камерай на вас. Да? Добра. 286 00:17:28,040 --> 00:17:31,240 Як цябе клічуць? >> [Студэнт] Кен. >> Кен. Добра. Кен, давай ўверх. 287 00:17:31,240 --> 00:17:35,050 Кен будзе функцыя выгляду тут. 288 00:17:35,050 --> 00:17:38,720 Давайце пойдзем далей і зрабіць гэта. Давайце трохі фантазіі. 289 00:17:38,720 --> 00:17:42,260 Вельмі прыемна. Сардэчна запрашаем у цэнтры сцэны. Добра. 290 00:17:42,260 --> 00:17:46,640 Давайце хіт гэтай кнопкі тут. Добра. 291 00:17:46,640 --> 00:17:49,820 Так што тут у вас ёсць сучасны дошцы, 292 00:17:49,820 --> 00:17:53,470 і што я з'яўляецца асноўнай функцыяй, напрыклад, 293 00:17:53,470 --> 00:17:56,460 і ў мяне няма IPad ў руках. 294 00:17:56,460 --> 00:17:59,710 >> Я сапраўды не памятаю, як - Ну, я не магу сказаць. 295 00:17:59,710 --> 00:18:02,480 Я сапраўды не маюць добры почырк, 296 00:18:02,480 --> 00:18:05,520 і г.д. Таму я хачу, каб нешта надрукаваць на экране для мяне. 297 00:18:05,520 --> 00:18:12,040 Я які з'яўляецца асноўнай праграме, і я буду ў вас кажуць, што гэта 298 00:18:12,040 --> 00:18:16,720 запісаўшы яе ў маёй курынай нуля, а затым міма вас ўваход. 299 00:18:16,720 --> 00:18:20,400 Так па-дурному, хоць гэта практыкаванне, паняцце функцыі і выкліку функцыі 300 00:18:20,400 --> 00:18:22,400 і вяртанне функцыяй сапраўды зводзіцца да гэтага. 301 00:18:22,400 --> 00:18:26,260 Я галоўны, я толькі што напісаў Printf, цытата-канец цытаты нешта на экране, 302 00:18:26,260 --> 00:18:29,110 Я іду ў гэтую праграму, і як толькі Printf выклікаецца, 303 00:18:29,110 --> 00:18:32,880 ён прымае адзін аргумент або адзін параметр часам у падвойныя двукоссі. 304 00:18:32,880 --> 00:18:35,880 Вось гэта аргумент. Я перадаю яго Кен. 305 00:18:35,880 --> 00:18:39,020 Ён уяўляе сабой чорны скрыню, напісаў некалькі гадоў назад 306 00:18:39,020 --> 00:18:41,510 якія, відавочна, ведае толькі як друкаваць рэчы на ​​экране. 307 00:18:41,510 --> 00:18:43,150 Такім чынам выканаць. 308 00:18:49,280 --> 00:18:51,280 Гэта не дрэнна. Вельмі добра. 309 00:18:51,280 --> 00:18:55,510 Так што цяпер Кен робіцца выкананне. Яму трэба, каб перадаць мне нічога наўзамен? 310 00:18:55,510 --> 00:18:57,470 Не тое, што мы бачылі да гэтага часу. 311 00:18:57,470 --> 00:19:00,460 Зноў жа, Printf ці на самай справе вяртае лік, але мы збіраемся ігнараваць, што на дадзены момант 312 00:19:00,460 --> 00:19:03,470 таму што мы ніколі не выкарыстоўвалі яго. Дык вось яно што для Кена. 313 00:19:03,470 --> 00:19:08,580 І вось цяпер асноўныя бярэ на сябе кантроль над праграмай яшчэ раз 314 00:19:08,580 --> 00:19:11,060 таму што радкі кода, Printf, ажыццяўляецца выкананне. 315 00:19:11,060 --> 00:19:14,050 І мы рухаемся да нашай чынам, выкананне любых іншых ліній ёсць. 316 00:19:14,050 --> 00:19:17,320 Такім чынам, цяпер давайце паспрабуем трохі іншы прыклад. 317 00:19:17,320 --> 00:19:24,940 На гэты раз тут, давайце спачатку ачысціць экран, і на гэты раз мы будзем рабіць вымярэння кубатуры функцыі, 318 00:19:24,940 --> 00:19:27,080 але на гэты раз, я думаю, выходную значэнне. 319 00:19:27,080 --> 00:19:29,180 >> Так што давайце ісці наперад і рабіць гэта. 320 00:19:29,180 --> 00:19:35,790 Цяпер у мяне ёсць радок кода, якая кажа х атрымлівае куб х. 321 00:19:41,370 --> 00:19:46,370 Радок кода, нагадаем, выглядае наступным чынам: х = куба (х); 322 00:19:46,370 --> 00:19:50,930 Так як гэта будзе працаваць? Давайце пойдзем далей і даць вам белы экран. 323 00:19:50,930 --> 00:19:54,070 Я збіраюся запісаць зараз значэнне х, 324 00:19:54,070 --> 00:20:01,400 якія ў дадзены момант часу, здараецца, скажам, 2, каб трымаць яго простая. 325 00:20:01,400 --> 00:20:06,150 Я напісаў на лістку паперы значэнне 2, які з'яўляецца маім значэння х. 326 00:20:06,150 --> 00:20:10,920 Я перадаю яго Кен. >> А я проста пішу адказ? >> Так, давайце проста напісаць адказ. 327 00:20:12,760 --> 00:20:18,940 Добра. І цяпер ён павінен вярнуць мне што-небудзь. Perfect. Прыемна пераход. 328 00:20:18,940 --> 00:20:23,120 Так што цяпер ён працягвае мне назад значэнне 8 у дадзеным выпадку, і што мне з ім рабіць? 329 00:20:23,120 --> 00:20:28,250 На самай справе - паглядзім, атрымаць гэта права. Што я буду з ёй рабіць? 330 00:20:28,250 --> 00:20:33,440 Цяпер я збіраюся прыняць гэта значэнне і на самай справе захоўваць яго ў тыя ж біты ў памяці. 331 00:20:33,440 --> 00:20:35,170 Але заўважце, я трохі змагаюцца тут. 332 00:20:35,170 --> 00:20:38,210 Я крыху зьбянтэжаны, таму што дзе ж я на самой справе запісаць значэнне х, 333 00:20:38,210 --> 00:20:43,150 таму што я толькі што зрабіў фізічна руку Кен лісток паперы, які быў значэнне 2, 334 00:20:43,150 --> 00:20:46,590 які быў х, і, сапраўды, гэта менавіта тое, што адбылося. 335 00:20:46,590 --> 00:20:50,210 Вось і атрымліваецца, што пры выкліку функцыі, і вы перадаеце ў якасці аргументу 336 00:20:50,210 --> 00:20:53,290 напрыклад, прывітанне, свет, ці вы перадаеце ў якасці аргументу як 2, 337 00:20:53,290 --> 00:20:57,110 Як правіла, вы перадаеце копію гэтага аргументу. 338 00:20:57,110 --> 00:21:00,730 І гэтак жа, як я запісаў нумар 2 тут і перадаў яго Кен, 339 00:21:00,730 --> 00:21:04,720 , Што павінна азначаць, што ў мяне яшчэ ёсць копія значэння 2 дзесьці 340 00:21:04,720 --> 00:21:08,890 таму што сапраўды, цяпер, калі я атрымаў назад значэнне 8, мне трэба вярнуцца ў аператыўнай памяці 341 00:21:08,890 --> 00:21:12,130 і фактычна запісаць 8, дзе я калісьці быў нумар 2. 342 00:21:12,130 --> 00:21:16,950 Такім чынам, візуальна, памятаеце пра гэта паняцці праходзіць у літаральным сэнсе, копію значэння. 343 00:21:16,950 --> 00:21:20,780 >> Кен робіць сваю справу, працягвае мне ў адказ нешта - у гэтым выпадку значэнне, напрыклад, 8 - 344 00:21:20,780 --> 00:21:24,980 а то ў мяне нешта зрабіць з гэтым значэннем, калі я хачу захаваць яго ваколіцах. 345 00:21:24,980 --> 00:21:29,650 Так што ўсё гэта вернецца, каб быць занадта добра знаёмыя ў хуткім часе. 346 00:21:29,650 --> 00:21:34,920 Дзякуй вам вялікі за гэта дэма тут, Кен. [Апладысменты] 347 00:21:34,920 --> 00:21:36,920 Вельмі добра зроблена. 348 00:21:36,920 --> 00:21:42,690 Давайце паглядзім, як гэта ў канчатковым выніку звязана з некаторымі з выкліку функцыі, што мы робім тут. 349 00:21:42,690 --> 00:21:47,910 Дазвольце мне ісці наперад і вярнуць нас да вымярэння кубатуры прыклад. 350 00:21:47,910 --> 00:21:53,300 Звярніце ўвагу, што калі мы сапраўды хочам пачаць прымаць гэта далей, 351 00:21:53,300 --> 00:21:57,570 мы збіраемся павінны памятаць пра тое, што колькасць х, што гэта перадаецца тут 352 00:21:57,570 --> 00:22:01,530 адрозніваецца ад таго, што на самой справе перадаецца ў функцыю. 353 00:22:01,530 --> 00:22:05,880 Такім чынам, яшчэ раз, гэта праходзіць міма копіі стане вельмі дарэчныя ў адну хвіліну. 354 00:22:05,880 --> 00:22:09,580 Давайце зірнем на тое, што не зусім правільна працаваць яшчэ. 355 00:22:09,580 --> 00:22:13,250 Я збіраюся ісці наперад і адкрыць Трэці прыклад памылкі, якая з'яўляецца недасканалай па сваёй прыродзе, 356 00:22:13,250 --> 00:22:18,550 і гэта завецца buggy3 і рэалізуе замены. 357 00:22:18,550 --> 00:22:25,110 Тут у нас ёсць асноўныя функцыі, якія х і ў адвольна усталёўваецца ў 1 і 2, адпаведна. 358 00:22:25,110 --> 00:22:27,700 Мы маглі б выкарыстоўваць GetInt, але нам проста трэба простае практыкаванне, 359 00:22:27,700 --> 00:22:30,170 такім чынам, гэта жорстка, як 1 і 2. 360 00:22:30,170 --> 00:22:35,340 У радках 21 і 22, мы, мабыць, раздрукуйце х і у, 1 на лінію. 361 00:22:35,340 --> 00:22:39,720 Затым у радку 23, я сцвярджаю, я абмен гэтымі значэннямі, кропка, кропка, кропка. 362 00:22:39,720 --> 00:22:44,170 Я мабыць выкліку функцыі ў радку 24 званым своп, які прымае 2 аргументаў. 363 00:22:44,170 --> 00:22:48,300 Гэта цалкам законна для функцый ўзяць 2 аргументы. Мы бачылі Printf гэта зрабіць ужо. 364 00:22:48,300 --> 00:22:51,830 >> Такім чынам, своп-відаць, мае х і у, і, як мяркуе яго назва, 365 00:22:51,830 --> 00:22:54,670 Я спадзяюся, што ён збіраецца памяняць гэтыя 2 значэння. 366 00:22:54,670 --> 00:23:00,090 Дык вось я сцвярджаю, у радку 25 "перастаноўкі"! і я перадрукаваць х і ў 367 00:23:00,090 --> 00:23:03,070 пры ўмове, што яны сапраўды былі памянялі месцамі. 368 00:23:03,070 --> 00:23:06,080 Але калі я сапраўды запусціць гэтую праграму - дазвольце мне адкрыць акно тэрмінала, 369 00:23:06,080 --> 00:23:09,860 дазвольце мне зрабіць buggy3 - як вынікае з назвы, гэта не скончыцца добра 370 00:23:09,860 --> 00:23:15,770 таму што, калі я ударыў Enter, заўважылі, што х = 1, у = 2, 371 00:23:15,770 --> 00:23:19,420 і ўсё ж у канцы праграмы, яны ўсё яшчэ, па сутнасці, тое ж самае. 372 00:23:19,420 --> 00:23:22,960 Такім чынам, на аснове дэманстрацыі толькі цяпер з Кеном, тое, што адбываецца на самай справе? 373 00:23:22,960 --> 00:23:28,710 Давайце пагрузіцца ў гэтую своп функцыі. Гэта супер кароткія. Гэта ўсяго толькі некалькі радкоў кода доўга. 374 00:23:28,710 --> 00:23:34,520 Але тое, што асноўная праблема заснавана на просты гісторыі, расказанай тут з Кеном? 375 00:23:34,520 --> 00:23:36,670 Чаму падпампоўкі не працуе? 376 00:23:36,670 --> 00:23:39,660 [Студэнт] вы захоўваеце на копію, а не зменная. 377 00:23:39,660 --> 00:23:43,980 Менавіта так. Мы захоўванні на копію, а не саму зменную. 378 00:23:43,980 --> 00:23:47,170 Іншымі словамі, своп-відаць, мае 2 аргументу, INT, 379 00:23:47,170 --> 00:23:49,370 і гэта ўмоўна называць а і б, 380 00:23:49,370 --> 00:23:54,420 і тут я прайшоў па х і у, якія з'яўляюцца адпаведна 1 і 2, 381 00:23:54,420 --> 00:23:58,770 але я не ў літаральным сэнсе якая праходзіць у х, я не ў літаральным сэнсе якая праходзіць у у, 382 00:23:58,770 --> 00:24:01,450 Я перадаю копіі х і копію у. 383 00:24:01,450 --> 00:24:04,510 Гэта амаль як калі б вы скапіявалі і ўставілі ў своп 384 00:24:04,510 --> 00:24:07,810 значэння, якія вы хочаце, каб ён на самай справе маніпуляваць. 385 00:24:07,810 --> 00:24:14,480 Так што, калі гэта так, калі я пачала праграмы выканання радкі 35, то 36, 386 00:24:14,480 --> 00:24:18,650 калі я дабіраюся да лініі 37, на дадзены момант у гэтай гісторыі, што значэнне? 387 00:24:21,040 --> 00:24:25,050 У гэты момант у гісторыі, радок 37, што з'яўляецца значэнне ў гэтай кропцы? >> [Студэнт] 1. 388 00:24:25,050 --> 00:24:29,280 [Малая] Яна проста павінна быць 1, правы, таму што х быў прыняты ў якасці першага аргументу, 389 00:24:29,280 --> 00:24:33,080 і гэтая функцыя проста адвольна называе свой першы аргумент. 390 00:24:33,080 --> 00:24:38,200 Сапраўды гэтак жа ёсць у другога аргументу, і гэта проста адвольна выкліку 2. б аргумент. 391 00:24:38,200 --> 00:24:40,990 >> Гэтая дыхатамія на самай справе даволі проста растлумачыць. Падумайце пра гэта. 392 00:24:40,990 --> 00:24:43,320 Ніхто з нас не сустракаў чалавека, які напісаў Printf, 393 00:24:43,320 --> 00:24:50,770 таму, вядома, ён або яна не ведае, што нашы зменныя праз 30 гадоў будуць называць. 394 00:24:50,770 --> 00:24:56,650 Так што павінна быць адрозненне паміж, што вы называеце зменныя ў функцыях вы пішаце 395 00:24:56,650 --> 00:25:02,080 і што вы называеце зменныя ў функцыях вы тэлефануеце ці выкарыстанне. 396 00:25:02,080 --> 00:25:05,340 Такім чынам, іншымі словамі, я напісаў мае зменныя х і у, 397 00:25:05,340 --> 00:25:08,890 Але калі нехта іншы напісаў своп функцыі, ён або яна, вядома, не ведаў бы, 398 00:25:08,890 --> 00:25:10,690 што мае зменных будзе называцца, 399 00:25:10,690 --> 00:25:13,830 так разумею, што гэта, чаму ў вас ёсць гэтая дваістасць імёнаў. 400 00:25:13,830 --> 00:25:16,750 Тэхнічна, я мог бы зрабіць гэта, супадзенне, 401 00:25:16,750 --> 00:25:20,080 але яны будуць па-ранейшаму перадаецца ў якасці копіі. 402 00:25:20,080 --> 00:25:23,650 Было б проста чыстае супадзенне эстэтычна, калі гэты чалавек, які напісаў своп 403 00:25:23,650 --> 00:25:26,150 былі выкарыстаныя тыя ж імёны. 404 00:25:26,150 --> 00:25:32,370 Такім чынам, на дадзены момант у гэтай гісторыі, радок 37, 1, B 2, а цяпер я пераходжу да памяняць іх месцамі. 405 00:25:32,370 --> 00:25:34,900 Перш за ўсё, дазвольце мне на самай справе зрабіць гэта значна прасцей. 406 00:25:34,900 --> 00:25:36,690 Я не ведаю, што тыя 3 радкі кода рабілі. 407 00:25:36,690 --> 00:25:41,210 Дазвольце мне зрабіць гэта: B = A, A = B; зроблена. 408 00:25:41,210 --> 00:25:44,690 Чаму гэта зламаны, лагічна? 409 00:25:46,490 --> 00:25:48,900 Гэта свайго роду інтуітыўныя рэчы, ці не так? 410 00:25:48,900 --> 00:25:52,560 Так а становіцца Коммерсанта і Коммерсанта становіцца, 411 00:25:52,560 --> 00:25:57,730 але праблема ў тым, што як толькі лінія 37 выконвае, што значэнне А і В? 412 00:25:57,730 --> 00:26:03,410 Тое ж самае, 1, таму што вы сходу, так бы мовіць, вы змянілі б роўным. 413 00:26:03,410 --> 00:26:08,890 Таму, як толькі лінія 37 была выкананая, гэта выдатна, зараз у вас ёсць 2 асобніка № 1 414 00:26:08,890 --> 00:26:13,350 Унутры гэтай функцыі, так што потым, калі вы кажаце ў радку 38 = B, 415 00:26:13,350 --> 00:26:17,640 Вы відаў разьбовых таму што вы проста прысваенні 1 да 1. 416 00:26:17,640 --> 00:26:20,580 Ты накшталт страціў значэнне, якое вы клапаціліся аб. 417 00:26:20,580 --> 00:26:23,220 Такім чынам, у арыгінальную версію гэтай, звярніце ўвагу, што я зрабіў. 418 00:26:23,220 --> 00:26:26,850 Замест гэтага я была трэцяя радок кода, якая выглядала наступным чынам. 419 00:26:26,850 --> 00:26:28,580 Я заяўляю, часовых зменных. 420 00:26:28,580 --> 00:26:32,170 >> Tmp гэта вельмі распаўсюджанае імя для часовай зменнай, і гэта Int 421 00:26:32,170 --> 00:26:34,580 таму што ён павінен адпавядаць таму, што я хачу зрабіць копію. 422 00:26:34,580 --> 00:26:39,770 Я захоўваю копіі ўнутры TMP, таму, як толькі лінія 37 была выкананая, 423 00:26:39,770 --> 00:26:45,860 Значэнне гэта - хуткая праверка наяўнасці свядомасці - 1, значэнне Ь 2, 424 00:26:45,860 --> 00:26:48,970 і значэнне TMP таксама 1. 425 00:26:48,970 --> 00:26:52,060 Так што цяпер я выканаю лініі 38. 426 00:26:52,060 --> 00:27:00,540 Як толькі лінія 38 выконваецца, прымае значэнне б. І У 2, так што цяпер 2. 427 00:27:00,540 --> 00:27:05,210 Такім чынам, на дадзены момант у гэтай гісторыі, роўна 2, B 2, а TMP 1, 428 00:27:05,210 --> 00:27:11,060 так што зараз лагічна, мы можам значэння проста пляснуць TMP ў у б і мы зрабілі. 429 00:27:11,060 --> 00:27:12,800 Такім чынам, мы вырашылі гэтую праблему. 430 00:27:12,800 --> 00:27:17,720 На жаль, калі я запускаю гэтую праграму ў такім выглядзе, гэта на самай справе не памяняць любыя значэння. 431 00:27:17,720 --> 00:27:20,100 Але каб быць зразумелым, чаму? 432 00:27:23,660 --> 00:27:26,450 Я усталяваў лагічныя задачы з усяго хвіліну назад, 433 00:27:26,450 --> 00:27:31,020 але зноў жа, калі я запускаю гэтую праграму, х і у, застаюцца нязменнымі 434 00:27:31,020 --> 00:27:33,310 Да канца выканання праграмы. 435 00:27:33,310 --> 00:27:37,220 [Неразборліва каментар студэнт] >> Мы не вярнуліся нічога, так што гэта праўда. 436 00:27:37,220 --> 00:27:39,670 Але, аказваецца, ёсць невялікая праблема тут, таму што да гэтага часу, 437 00:27:39,670 --> 00:27:44,170 Адзінае, што мы змаглі вярнуць гэта адно, і гэта абмежаванне C. 438 00:27:44,170 --> 00:27:49,070 Вы можаце вярнуць толькі сапраўды адно значэнне, і ў гэтым выпадку я трохі затрымаўся тут 439 00:27:49,070 --> 00:27:53,310 таму што я мог вярнуць новае значэнне х, ці я мог бы вярнуць новае значэнне ў, 440 00:27:53,310 --> 00:27:55,190 але я хачу і назад. 441 00:27:55,190 --> 00:27:58,650 Такім чынам, вяртання не простае рашэнне тут. 442 00:27:58,650 --> 00:28:01,710 Але праблема ў корані чаму? Што мы на самай справе памяняліся месцамі? 443 00:28:01,710 --> 00:28:04,190 [Студэнт] а і б. >> А і б. 444 00:28:04,190 --> 00:28:08,230 Але і б з'яўляюцца копіямі х і у, якая азначае, што мы толькі што зрабілі ўсе гэтыя работы, 445 00:28:08,230 --> 00:28:11,650 Мы толькі што правялі 3 хвіліны гаворым аб функцыі падпампоўкі і ўсе 3 з гэтых зменных, 446 00:28:11,650 --> 00:28:15,420 і гэта выдатна, зусім правільна ў ізаляцыі, 447 00:28:15,420 --> 00:28:20,740 але і сферу б толькі ў гэтых радках. 448 00:28:20,740 --> 00:28:24,790 >> Так як цыкл, калі вы аб'явіце цэлае я ўнутры цыклу, 449 00:28:24,790 --> 00:28:28,760 Аналагічна, калі вы аб'явай і б ўнутры функцыі, якія вы напісалі, 450 00:28:28,760 --> 00:28:33,320 яны сапраўдныя толькі ўнутры гэтай функцыі, а значыць, як толькі своп зрабіць выкананне 451 00:28:33,320 --> 00:28:38,470 і мы пераходзім ад лініі 24 у лінію 25, х і ў не змянілася. 452 00:28:38,470 --> 00:28:42,790 Вы проста марна шмат часу, абмен копіямі зменных. 453 00:28:42,790 --> 00:28:47,010 Вось і атрымліваецца, што рашэнне гэта на самай справе, не відавочна. 454 00:28:47,010 --> 00:28:50,670 Гэта не зусім дастаткова, каб вяртаць значэння, таму што мы можам толькі вярнуць значэнне 1, 455 00:28:50,670 --> 00:28:53,470 і я сапраўды хачу памяняць х і ў ў той жа час, 456 00:28:53,470 --> 00:28:55,210 так што мы збіраемся мець, каб вярнуцца да гэтага. 457 00:28:55,210 --> 00:29:01,020 Але цяпер разумею, што пытанне прынцыпова вынікае з таго факту, што А і У з'яўляюцца копіямі 458 00:29:01,020 --> 00:29:03,630 і яны знаходзяцца ў сваёй уласнай вобласці. 459 00:29:03,630 --> 00:29:05,050 Давайце паспрабуем вырашыць гэта ў некаторым родзе. 460 00:29:05,050 --> 00:29:11,250 Дазвольце мне на самай справе пракруціць таму тут і адкрыць, скажам, чацвёрты варыянт гэтага, buggy4. 461 00:29:11,250 --> 00:29:13,370 Што з гэтай нагоды? 462 00:29:13,370 --> 00:29:17,810 Гэта падобныя, але больш простую задачу, каб глядзець на, перш чым прыняць ўдар на яе рашэнне. 463 00:29:17,810 --> 00:29:24,190 Гэтая праграма называецца прырашчэннем, і ён, відавочна, ініцыялізуе цэлы лік х 1 у радку 18. 464 00:29:24,190 --> 00:29:28,150 Я тады сцвярджаць, х = 1, тады я прэтэндаваць "інкрэмент ..." 465 00:29:28,150 --> 00:29:33,730 Затым я выклікаю прырост, але затым у лініях 22 і 23, я сцвярджаю, што гэта было павялічваецца, 466 00:29:33,730 --> 00:29:40,220 Я сцвярджаю х зараз бы гэта ні было - 2, па-відаць, - але гэтая праграма глючыць. 467 00:29:40,220 --> 00:29:42,610 У чым праблема? 468 00:29:43,440 --> 00:29:50,160 Так. >> [Неразборліва адказ студэнта] >> Менавіта так. 469 00:29:50,160 --> 00:29:52,490 Такім х было абвешчана, відавочна, у радку 18. 470 00:29:52,490 --> 00:29:54,700 Гэта значыць, у фігурных дужках асноўнага аўтара. 471 00:29:54,700 --> 00:29:58,440 Так што адназначнага адказу тут з'яўляецца тое, што ў той час як х існуе тут, 472 00:29:58,440 --> 00:30:03,930 яна не існуе ў радку 32, так што гэтая праграма на самай справе нават не будзе кампілявацца. 473 00:30:03,930 --> 00:30:07,940 Кампілятара, калі я спрабую кампіляцыі дадзенага кода будзе крычаць на мяне 474 00:30:07,940 --> 00:30:14,100 Аб некаторых неаб'яўленай ідэнтыфікатар ці нешта ў гэтым родзе. На самай справе, давайце паспрабуем. 475 00:30:14,100 --> 00:30:18,470 Гэта робіць buggy4. Там яна ёсць. 476 00:30:18,470 --> 00:30:22,110 Выкарыстанне 'X' неаб'яўленай ідэнтыфікатар ў радку 32. 477 00:30:22,110 --> 00:30:25,580 А на самай справе, давайце будзем больш выразна тут сёння, так што гэта карысна 478 00:30:25,580 --> 00:30:27,580 ў працоўны час і дома. 479 00:30:27,580 --> 00:30:29,300 >> Звярніце ўвагу, што гэта трохі загадкава напісана. 480 00:30:29,300 --> 00:30:37,270 Але тое, што Clang мае крычаў на нас, сказаўшы buggy4.c: 32:5, на самай справе карысна. 481 00:30:37,270 --> 00:30:42,050 Гэта азначае, што памылка ў радку 32 на пазіцыю сімвала 5. 482 00:30:42,050 --> 00:30:46,700 Такім чынам, 1, 2, 3, 4, 5. Гэта, на самай справе, дзе праблема. 483 00:30:46,700 --> 00:30:49,790 А таксама, таксама майце на ўвазе, у працоўны час і на хаце, мне пашанцавала тут. 484 00:30:49,790 --> 00:30:52,990 У мяне ёсць адна памылка. Гэта збіраецца быць адносна лёгка выправіць. 485 00:30:52,990 --> 00:30:55,990 Але калі вы атрымаеце ўвесь экран поўны пераважная паведамленні пра памылкі, 486 00:30:55,990 --> 00:31:00,330 яшчэ раз усвядоміць, што ніжні можна проста быць сімптомам самых верхніх адзін. 487 00:31:00,330 --> 00:31:03,450 Так заўсёды ганяцца за вашы памылкі зверху ўніз 488 00:31:03,450 --> 00:31:05,820 таму што там можа быць проста эфект ланцужку 489 00:31:05,820 --> 00:31:09,240 , Які прапаную вам мець нашмат больш праблем, чым вы на самой справе. 490 00:31:09,240 --> 00:31:15,150 Такім чынам, як мы можам гэта выправіць, калі маёй мэтай з'яўляецца, каб павялічыць х? >> [Студэнт] Зрабіць х глабальнай. 491 00:31:15,150 --> 00:31:17,060 Такім чынам, мы можам зрабіць глабальнае х. 492 00:31:17,060 --> 00:31:20,480 Давайце ярлык, які я папярэджваў аб больш ранніх, але чорт вазьмі, нам проста трэба хутка выправіць, 493 00:31:20,480 --> 00:31:25,730 так што давайце проста скажам, Int х тут. Гэта робіць х глабальнай. 494 00:31:25,730 --> 00:31:31,800 Так што цяпер асноўным мае да іх доступ і прырашчэнне мае да іх доступ, 495 00:31:31,800 --> 00:31:34,110 і таму дазвольце мне ісці далей і сабраць гэта цяпер. 496 00:31:34,110 --> 00:31:37,630 Зрабіць buggy4, Enter. Здаецца, для кампіляцыі цяпер. 497 00:31:37,630 --> 00:31:41,230 Давайце запусцім buggy4. І, здаецца, на самай справе працуе. 498 00:31:41,230 --> 00:31:45,150 Гэта адна з гэтых рэчаў, якія рабіць, як я кажу, а не як я раблю, 499 00:31:45,150 --> 00:31:47,010 як я толькі што зрабіў тут, таму што ў цэлым, 500 00:31:47,010 --> 00:31:50,440 нашы праграмы збіраюцца атрымаць значна цікавей і нашмат даўжэй, чым гэта, 501 00:31:50,440 --> 00:31:56,390 і калі ваша рашэнне жыццёвых праблем проста пакласці ўсе зменныя ў пачатак файла, 502 00:31:56,390 --> 00:31:59,690 Вельмі хутка ў праграмы атрымліваюць жудасна цяжка кіраваць. 503 00:31:59,690 --> 00:32:02,190 Гэта становіцца ўсё цяжэй прыдумляць новыя імёны зменных, 504 00:32:02,190 --> 00:32:05,240 становіцца ўсё цяжэй зразумець, што пераменная рабіць тое, што, 505 00:32:05,240 --> 00:32:08,460 і г.д. Увогуле, гэта не вельмі добрае рашэнне. 506 00:32:08,460 --> 00:32:10,030 Так давайце зробім гэта лепш. 507 00:32:10,030 --> 00:32:12,160 Мы не хочам выкарыстоўваць глабальную зменную тут. 508 00:32:12,160 --> 00:32:16,240 >> Я хачу, каб павялічыць х, так што я мог бы, відавочна - 509 00:32:16,240 --> 00:32:18,670 У рэшце рэшт, гэта накшталт дурной гісторыі, таму што мы проста робім гэта - 510 00:32:18,670 --> 00:32:24,450 але калі б я не ведаў пра тое, што аператар або я не змог змяніць яго ў асноўны сабе, 511 00:32:24,450 --> 00:32:30,730 Як яшчэ я мог ажыццяўляць Кен сюды на гэты раз не ў кубе, але для павелічэння? 512 00:32:31,380 --> 00:32:33,190 Як змяніць гэтую рэч тут? Так. 513 00:32:33,190 --> 00:32:38,480 [Студэнт] Pass х, а затым вярнуцца [неразборліва] >> Добра, добра. 514 00:32:38,480 --> 00:32:41,900 Так чаму б мне не прайсці ў х, а затым, а не вяртаць яго, 515 00:32:41,900 --> 00:32:44,870 чаму я не проста вярнуць х + 1. 516 00:32:44,870 --> 00:32:47,710 Яшчэ пара рэчаў трэба мяняць тут. Я знаходжуся на правільным шляху. 517 00:32:47,710 --> 00:32:49,770 Што яшчэ трэба наладзіць? Нехта іншы. Так. 518 00:32:49,770 --> 00:32:51,740 [Неразборліва адказ студэнта] 519 00:32:51,740 --> 00:32:54,730 Мне трэба, каб змяніць тып звароту прыросту таму што гэта не ануляваць. 520 00:32:54,730 --> 00:32:57,780 Пустэча нічога не сродак вяртаецца, але ясна, цяпер гэта, 521 00:32:57,780 --> 00:32:59,830 так што гэта трэба змяніць, каб - >> [студэнт] Int. 522 00:32:59,830 --> 00:33:02,740 INT ў адпаведнасць з тым, што я на самой справе вяртання. 523 00:33:02,740 --> 00:33:05,180 Цяпер нешта яшчэ па-ранейшаму багі тут. Так. 524 00:33:05,180 --> 00:33:08,400 [Неразборліва адказ студэнта] >> [малая] Так што мне трэба павялічваць х? 525 00:33:08,400 --> 00:33:12,080 [Неразборліва адказ студэнта] >> [малая] Ах, так мне трэба перадаць х. 526 00:33:12,080 --> 00:33:16,660 Так што мне трэба зрабіць гэта тут. >> [Неразборліва каментар студэнт] 527 00:33:16,660 --> 00:33:20,050 [Малая] Такім чынам, прататып, я павінен змяніць гэта тут. 528 00:33:20,050 --> 00:33:22,930 Такім чынам, гэта павінна стаць INT, гэта павінна стаць - 529 00:33:22,930 --> 00:33:25,620 хм, я на самой справе ёсць памылка тут. Давайце выправім гэта ў першую чаргу. 530 00:33:25,620 --> 00:33:29,590 Што гэта на самай справе быць? Гэта павінна быць нешта Int. 531 00:33:29,590 --> 00:33:32,700 Гэта можа быць х, але, шчыра кажучы, калі пачаць называць ўсіх вашых зменных х, 532 00:33:32,700 --> 00:33:35,390 гэта будзе ўсё менш і менш ясна, што ёсць што. 533 00:33:35,390 --> 00:33:39,560 >> Так што давайце проста адвольна выбраць розныя наймення для майго дапаможныя функцыі, 534 00:33:39,560 --> 00:33:41,940 Функцыі я пішу. Мы будзем называць яго, ці мы маглі б назваць гэта - 535 00:33:41,940 --> 00:33:45,010 Давайце назавем гэта лік будзе яшчэ больш відавочным. 536 00:33:45,010 --> 00:33:47,560 І тады я павінен вярнуць усё, што нумар плюс 1, 537 00:33:47,560 --> 00:33:50,740 і цяпер я павінен змяніць 1 рэч, тут і яшчэ адна рэч тут. 538 00:33:50,740 --> 00:33:54,350 Што я павінен змяніць у радку 21 у першую чаргу? >> [Неразборліва адказ студэнта] 539 00:33:54,350 --> 00:33:57,610 [Малая] Я павінен прызначыць яго на х. Я не магу проста патэлефанаваць прырашчэнне (х). 540 00:33:57,610 --> 00:34:01,960 Мне трэба памятаць адказ на змяненне значэння х на левай баку. 541 00:34:01,960 --> 00:34:04,680 І хоць х зараз знаходзіцца на левай і правай, гэта цалкам нармальна 542 00:34:04,680 --> 00:34:08,860 таму што правая частка запускаецца на выкананне першага затым атрымлівае пляснуўся ў левай рэч - 543 00:34:08,860 --> 00:34:10,600 х у гэтым выпадку. 544 00:34:10,600 --> 00:34:12,159 І тады, нарэшце, гэта лёгка выправіць цяпер. 545 00:34:12,159 --> 00:34:17,230 Гэта павінна проста адпавядаць таму, што вось унізе, унутр нумар. 546 00:34:17,230 --> 00:34:20,570 Такім чынам, цэлы букет змяненняў сапраўды дурное функцыі 547 00:34:20,570 --> 00:34:24,420 але прадстаўнік рэчаў, якія мы больш хочам зрабіць. 548 00:34:24,420 --> 00:34:27,090 Так што buggy4. Я дзесьці нашкодзіла. 549 00:34:27,090 --> 00:34:30,139 О, мой Бог. Пяць памылак у 6-малыя праграмы. 550 00:34:30,139 --> 00:34:35,690 Так што ж здарылася на лініі 18, сімвал 5? 551 00:34:35,690 --> 00:34:39,610 Так што я павінен заявіць пра гэта, унутр. 552 00:34:39,610 --> 00:34:41,920 Давайце паглядзім. Ёсць цэлая куча іншых памылак. 553 00:34:41,920 --> 00:34:47,010 О, Божа мой - 19, 18, 21 - але, зноў жа, давайце проста ачысціць экран, кіраванне L тут, 554 00:34:47,010 --> 00:34:49,380 і перазапусціць Clang. 555 00:34:49,380 --> 00:34:51,340 Такім чынам, 5 задач на самай справе проста, што 1. 556 00:34:51,340 --> 00:34:57,520 Такім чынам, цяпер давайце запусцім buggy4, Enter. Вось так, х быў павялічаны правільна. 557 00:34:57,520 --> 00:35:02,720 Добра. Любыя пытанні аб тым, як павялічыць лік? Так. 558 00:35:02,720 --> 00:35:09,870 [Неразборліва пытанне студэнта] >> Добры пытанне. 559 00:35:09,870 --> 00:35:14,220 Як гэта, што я магу проста змяніць х на нумар, і праграма будзе ведаць адразу ж? 560 00:35:14,220 --> 00:35:16,200 >> Зноў жа, думаю пра яго, як гэта абстракцыя. 561 00:35:16,200 --> 00:35:21,600 Так што, калі я галоўны і Кен прырост, шчыра кажучы, я не хвалюе, што Кен называе свой iPad. 562 00:35:21,600 --> 00:35:26,570 Мяне не хвалюе, што ён называе ўсё, што мае дачыненне да яго рэалізацыі гэтай функцыянальнасці. 563 00:35:26,570 --> 00:35:33,340 Гэта дэталі рэалізацыі, якія я, галоўнае, не трэба клапаціцца пра. 564 00:35:33,340 --> 00:35:38,250 І так проста змяніўшы яго паслядоўна ўнутры функцыі - тут нумар і нумар тут - 565 00:35:38,250 --> 00:35:40,960 Усё гэта займае так шмат часу, як я перакампіляваць. 566 00:35:40,960 --> 00:35:44,180 Гэта накшталт як калі вы думаеце пра многіх з нас, тых, у каго правы кіроўцы 567 00:35:44,180 --> 00:35:46,770 якія заехалі або калі вы нават заехаў у аўтамабіль, 568 00:35:46,770 --> 00:35:50,950 Большасць з нас не ведаюць, як машына працуе пад капотам. 569 00:35:50,950 --> 00:35:54,970 І літаральна, калі вы адкрываеце капот, большасць з нас - я ў тым ліку - 570 00:35:54,970 --> 00:35:56,940 не збіраецца ведаю, што мы глядзім на, 571 00:35:56,940 --> 00:35:59,220 накшталт як вы можаце адчуваць сябе ў такія рэчы, як гэта прама цяпер. 572 00:35:59,220 --> 00:36:01,480 Але мы сапраўды не павінны клапаціцца, як машына працуе, 573 00:36:01,480 --> 00:36:05,970 мы не павінны клапаціцца, што ўсе стрыжні і поршняў і кабеляў ўнутры аўтамабіля 574 00:36:05,970 --> 00:36:08,160 на самай справе робіць. 575 00:36:08,160 --> 00:36:12,770 Так нешта кшталту, што вы называеце поршань тут не мае значэння ў дадзеным выпадку. Тая ж самая ідэя. 576 00:36:12,770 --> 00:36:25,300 Так. >> [Неразборліва пытанне студэнта] 577 00:36:25,300 --> 00:36:29,180 Калі ёсць некалькі відаў пераменная момант ха назад, 578 00:36:29,180 --> 00:36:32,150 Вы, праграміст, давядзецца мяняць іх паўсюль. 579 00:36:32,150 --> 00:36:36,600 Ці вы маглі б зрабіць літаральна файлаў, меню, а затым Знайсці, Замяніць - нешта ў гэтым родзе - 580 00:36:36,600 --> 00:36:39,170 але вы будзеце мець, каб зрабіць гэтыя змены самастойна. 581 00:36:39,170 --> 00:36:47,450 Вы павінны быць паслядоўныя. >> [Студэнт] Пры наяўнасці некалькіх зменных [неразборліва] 582 00:36:47,450 --> 00:36:53,100 Вызначаным парадку, як тут, калі б гэта было Int іншы нумар? >> [Студэнт] Правільна. 583 00:36:53,100 --> 00:36:56,590 [Малая] Так. Замовіць мае значэнне, калі вы выклікаеце функцыю. 584 00:36:56,590 --> 00:37:00,050 >> Так што калі я тэлефанавалі прырост тут нешта ў гэтым коскі, 585 00:37:00,050 --> 00:37:01,680 ёсць прамое адлюстраванне. 586 00:37:01,680 --> 00:37:05,690 Першая зменная, як там гэта завецца, зрабіў копію першага аргументу тут. 587 00:37:05,690 --> 00:37:07,760 Выбачайце. Гэта не павінна быць круглых дужках. 588 00:37:07,760 --> 00:37:11,490 Другі аргумент лініі з другім. Так парадку, ды, пытанняў. Добра. 589 00:37:11,490 --> 00:37:17,020 Выбачайце. Я ўзяў доўгі шлях, каб дабрацца там. Іншыя пытанні? Добра. 590 00:37:17,020 --> 00:37:20,610 Такім чынам, давайце паглядзім, калі мы не можам намаляваць карціну таго, што адбываецца на самай справе тут 591 00:37:20,610 --> 00:37:23,090 пад капотам, так бы мовіць. 592 00:37:23,090 --> 00:37:26,640 Гэта прастакутнік, які можа прадстаўляць памяці кампутара. 593 00:37:26,640 --> 00:37:30,970 Нават калі вы не ўяўляеце, як памяць працуе ці як RAM работ, 594 00:37:30,970 --> 00:37:33,940 па крайняй меры, выказаць здагадку, што ў вас ёсць пучкі яна ў гэтыя дні. 595 00:37:33,940 --> 00:37:36,280 У вас ёсць мегабайт гэта, у вас ёсць гігабайты гэта, 596 00:37:36,280 --> 00:37:40,870 і мы ведаем, ад тыдня 0 байт, што менавіта тое, што? >> [Студэнт] 8 біт. 597 00:37:40,870 --> 00:37:42,950 8 біт, ці не так? Такім чынам, 8 нулёў і 1. 598 00:37:42,950 --> 00:37:45,880 Такім чынам, калі ваш кампутар мае гігабайт аператыўнай памяці, 2 гігабайтамі аператыўнай памяці ў гэтыя дні, 599 00:37:45,880 --> 00:37:55,030 ў вас ёсць мільярд або 2 млрд. байт памяці, або прыкладна 8000000000 або 16000000000 біт 600 00:37:55,030 --> 00:37:56,890 ўнутры кампутара. 601 00:37:56,890 --> 00:38:00,590 У адрозненне ад невялікай прыклад Wooly Вілі, гэта не магнітныя часціцы звычайна больш. 602 00:38:00,590 --> 00:38:04,450 Усё часцей - у наўтбуках, па меншай меры, - гэта цвёрдацельныя назапашвальнікі SSD, 603 00:38:04,450 --> 00:38:08,580 што проста не маюць якія рухаюцца частак. Гэта ўсё электронныя. Гэта ўсё электрычнасць аснове. 604 00:38:08,580 --> 00:38:14,060 Так што думайце гэтага прамавугольніка, як толькі прадстаўляе 1 або 2 гігабайтамі памяці, што ў вас ёсць. 605 00:38:14,060 --> 00:38:16,020 >> Так што гэта кавалак памяці. 606 00:38:16,020 --> 00:38:19,830 Свет інфарматыкі роду адгароджана 607 00:38:19,830 --> 00:38:22,950 ўчасткі памяці, каб зрабіць розныя рэчы. 608 00:38:22,950 --> 00:38:27,190 Напрыклад, калі гэта аператыўнай памяці кампутара, як гэта было прапанавана прастакутнік там, 609 00:38:27,190 --> 00:38:31,130 Аказваецца, што па дамове, у верхняй частцы вашай памяці, так бы мовіць, 610 00:38:31,130 --> 00:38:33,660 , Як правіла, тое, што называецца тэкставы сегмент. 611 00:38:33,660 --> 00:38:36,740 Такія 0 і 1, што вы сабралі. 612 00:38:36,740 --> 00:38:39,020 Таму, калі мы глядзелі пад капотам на тое, што a.out ёсць, 613 00:38:39,020 --> 00:38:41,980 Усе гэтыя 0 і 1, калі вы запускаеце праграму, 614 00:38:41,980 --> 00:38:46,290 тых, 0 і 1 загружаецца з жорсткага дыска ў тое, што называецца RAM, 615 00:38:46,290 --> 00:38:49,320 і ў аператыўнай памяці, яны змяшчаюцца ў верхняй частцы. 616 00:38:49,320 --> 00:38:52,770 У той жа час, у вас ёсць іншыя рэчы: ініцыялізацыя дадзеных, ініцыялізацыю дадзеных. 617 00:38:52,770 --> 00:38:57,510 Гэтыя 2 валка памяці звярніцеся да глабальныя зменныя, якія вы не часта карыстаецеся 618 00:38:57,510 --> 00:39:00,760 але часам, калі вы гэта зробіце, яны ў канчатковым выніку там таксама. 619 00:39:00,760 --> 00:39:04,260 Тады ёсць некаторыя іншыя рэчы: зменныя асяроддзі, якія мы не будзем марнаваць шмат часу на, 620 00:39:04,260 --> 00:39:06,860 але затым 2 важныя рэчы, якія будуць вяртацца на працягу семестра, 621 00:39:06,860 --> 00:39:08,550 стэка і кучы. 622 00:39:08,550 --> 00:39:12,210 Таму большасць з памяці кампутара захоўваецца пры запуску праграмы 623 00:39:12,210 --> 00:39:15,370 за тое, што называецца стэкам і тое, што называецца кучай. 624 00:39:15,370 --> 00:39:18,840 Мы не збіраемся казаць пра кучы сёння, але мы будзем казаць пра стэку. 625 00:39:18,840 --> 00:39:24,600 Стэк азначала выклікаць ва ўяўленні візуальныя ад сталовай латкі зала ежы ў доме Mather 626 00:39:24,600 --> 00:39:28,110 ці там, дзе вы будзеце дзе персанал сталовай чысціць іх кожны дзень, 627 00:39:28,110 --> 00:39:30,180 яны складаюць іх ад падлогі на ўверх, 628 00:39:30,180 --> 00:39:34,550 і, аналагічна, у памяці, ёсць такая ідэя паставіць нешта на стэку, 629 00:39:34,550 --> 00:39:36,860 пакласці нешта на стэку, пакласці нешта ў стэку. 630 00:39:36,860 --> 00:39:38,240 І што ж мы маем на ўвазе пад гэтым? 631 00:39:38,240 --> 00:39:41,860 >> Давайце павялічыць толькі на ніжнюю палову гэтай карціне, аператыўнай памяці кампутара, 632 00:39:41,860 --> 00:39:44,330 прапанаваць наступнае. 633 00:39:44,330 --> 00:39:48,170 Аказваецца, што калі вы запускаеце праграму, як a.out або прывітанне - 634 00:39:48,170 --> 00:39:50,100 незалежна ад праграмы з'яўляецца тое, што вы напісалі - 635 00:39:50,100 --> 00:39:54,020 Зноў жа, тыя 0 і 1 загружаецца з жорсткага дыска, які доўгі захоўванне, 636 00:39:54,020 --> 00:39:57,230 застаецца там, нават калі вы відэлец, загружаецца ў аператыўную памяць. 637 00:39:57,230 --> 00:40:00,610 RAM хутчэй, чым жорсткія дыскі - гэта менш, чым жорсткія дыскі - 638 00:40:00,610 --> 00:40:03,300 але гэта там, дзе праграмы жыць, пакуль вы працуеце іх. 639 00:40:03,300 --> 00:40:08,230 Такім чынам, вы двойчы пстрыкніце праграму на Mac ці PC, яна загружаецца з жорсткага дыска ў аператыўную памяць. 640 00:40:08,230 --> 00:40:11,520 Як толькі ён будзе загружаны ў аператыўную памяць, 0 і 1 пайсці на шлях зверху, 641 00:40:11,520 --> 00:40:16,610 так званых тэкставых сегментаў, але потым, як толькі ваша праграма фактычна пачынае працаваць, 642 00:40:16,610 --> 00:40:21,360 Асноўная функцыя называецца, а галоўнае, як мы бачылі, часта мае лакальныя зменныя, 643 00:40:21,360 --> 00:40:24,870 і яна мае цэлых і радкоў і сімвалаў і таму падобнае. 644 00:40:24,870 --> 00:40:29,180 Так што калі вашы праграмы, якія вы напісалі або праграмы, якія вы падвойным пстрычцы 645 00:40:29,180 --> 00:40:32,970 выкарыстоўваць некаторыя зменныя ўнутры асноўнага, 646 00:40:32,970 --> 00:40:37,240 яны ў канчатковым выніку ў ніжняй частцы вашага стэка памяці, так бы мовіць. 647 00:40:37,240 --> 00:40:39,410 Больш канкрэтна, што ж гэта на самай справе азначае? 648 00:40:39,410 --> 00:40:48,450 Гэта проста азначае, што калі мы збіраемся лік байт аператыўнай памяці на вашым кампутары, 649 00:40:48,450 --> 00:40:55,750 заўважыць, што гэта можа быць нумар байта 0, гэта можа быць нумар байта 1, 2, 3, 4, 5, 6, 650 00:40:55,750 --> 00:41:01,480 усё, аж да 2 млрд. будзе ўсю дарогу там на самым версе. 651 00:41:01,480 --> 00:41:05,880 Такім чынам, іншымі словамі, калі мы гаворым аб аператыўнай памяці або памяці ў байтах, 652 00:41:05,880 --> 00:41:11,500 гэта проста азначае, што хтосьці вырашыў, што нумараваць кожны з гэтых участкаў памяці. 653 00:41:11,500 --> 00:41:16,650 Таму, калі вам трэба 32 біта для Int ці вам трэба 8 біт на знак, 654 00:41:16,650 --> 00:41:18,840 дзе яны ў канчатковым выніку ў памяці? 655 00:41:18,840 --> 00:41:22,350 >> Канцэптуальна, яны проста ў канчатковым выніку ў ніжняй частцы гэтай рэчы, званай стэкам. 656 00:41:22,350 --> 00:41:25,870 Але што цікава зараз, калі асноўныя выклікае функцыю - 657 00:41:25,870 --> 00:41:28,750 выкажам здагадку, што функцыя завецца Фу, проста адвольнае назва - 658 00:41:28,750 --> 00:41:32,330 што адбываецца, з'яўляецца асноўным знаходзіцца ў ніжняй частцы гэтага стэка памяці; 659 00:41:32,330 --> 00:41:35,680 Foo зараз змяшчаецца ў верхняй частцы галоўнага ў памяці. 660 00:41:35,680 --> 00:41:40,990 Такім чынам, любыя лакальныя зменныя, Foo была ў канчатковым выніку роду канцэптуальна вышэй, чым у асноўнай. 661 00:41:40,990 --> 00:41:47,070 Калі Foo выклікае іншую функцыю пад назвай бара, гэтыя зменныя ў канчатковым выніку тут. 662 00:41:47,070 --> 00:41:50,120 Калі бары называе нешта яшчэ, тут, тут, тут. 663 00:41:50,120 --> 00:41:53,830 Так што ж цікавага аб запуску праграмы з'яўляецца тое, што, як вы выклікаеце функцыі 664 00:41:53,830 --> 00:41:57,750 і як гэтыя функцыі выклікаць функцыі і як гэтыя функцыі называюць функцыямі, 665 00:41:57,750 --> 00:42:01,470 Вы ствараеце гэты стэк функцый у памяці. 666 00:42:01,470 --> 00:42:06,890 І толькі адзін раз функцыя вяртае вы пачнеце атрымліваць гэтую памяць назад. 667 00:42:06,890 --> 00:42:10,860 Такім чынам, адным з самых простых спосабаў запусціць з памяці ў кампутарнай праграме 668 00:42:10,860 --> 00:42:14,360 , Каб напісаць функцыі, якія ніколі не вернуцца. 669 00:42:14,360 --> 00:42:18,900 Так, напрыклад, давайце прадэманстраваць, як шмат з наўмысна багі праграмы. 670 00:42:18,900 --> 00:42:22,230 Дазвольце мне ісці наперад і рабіць # ўключыць , 671 00:42:22,230 --> 00:42:25,000 Int асноўных (несапраўднымі), 672 00:42:25,000 --> 00:42:32,940 і я збіраюся рабіць, а (2> 1), які, верагодна, ніколі не будзе змяняцца на нас, 673 00:42:32,940 --> 00:42:37,560 і дазвольце мне цяпер ісці наперад і рабіць Printf. 674 00:42:37,560 --> 00:42:40,700 На самай справе, гэта будзе менш візуальна цікавым. Давайце зробім гэта. 675 00:42:40,700 --> 00:42:50,240 Для Int = 0;> 0 - давайце рабіць гэтую памылку - я + +. 676 00:42:50,240 --> 00:42:52,720 І давайце не Printf тут. Давайце практыкаваць тое, што я прапаведаваў. 677 00:42:52,720 --> 00:43:00,190 Давайце тут метад, несапраўднымі хор, і мы будзем казаць Int я, 678 00:43:00,190 --> 00:43:06,830 і тады я буду казаць Printf - не, давайце зробім гэта больш цікава. 679 00:43:06,830 --> 00:43:15,790 Давайце на самай справе не друкуе наогул нічога. Давайце проста гэта зрабіць: хор (I). 680 00:43:15,790 --> 00:43:20,390 Добра. Так што гэта багі, таму што навошта? 681 00:43:20,390 --> 00:43:23,380 Я прыдумляю, як я іду, таму што праграма на самай справе не робяць нічога цікавага. 682 00:43:23,380 --> 00:43:25,320 >> Але гэта не мэта. 683 00:43:25,320 --> 00:43:29,630 Мэта складаецца ў тым, каб напісаць праграму, асноўнай функцыяй якога робіць тое, што, па-відаць? 684 00:43:30,720 --> 00:43:32,860 Патэлефануйце сябе. А на самай справе, мы не маем патрэбу ў пятлю. 685 00:43:32,860 --> 00:43:37,200 Давайце нават спрасціць гэты раз, каб не выпускаць з ўвазе сапраўды фундаментальная памылка. 686 00:43:37,200 --> 00:43:39,640 Галоўныя выклікі хорам спяваць хорам, 687 00:43:39,640 --> 00:43:41,440 Затым я зрабіў нешта неразумнае і я павінен быў хор хор выкліку 688 00:43:41,440 --> 00:43:43,760 таму што я меркаваў, хтосьці яшчэ збіраецца ажыццявіць гэта, можа быць, 689 00:43:43,760 --> 00:43:47,210 і зараз гэта не будзе сабраць яшчэ. Мне трэба зрабіць што? 690 00:43:47,210 --> 00:43:49,970 Мне трэба прататып, памятаю. 691 00:43:49,970 --> 00:43:56,110 Таму мне трэба, каб тут пустэча хору (INT я); 692 00:43:56,110 --> 00:43:59,210 Так што цяпер, калі я іду сюды - на самай справе, давайце выкарыстоўваць вялікія вокны. 693 00:43:59,210 --> 00:44:01,980 Давайце пойдзем далей і зрабіць хорам. 694 00:44:01,980 --> 00:44:06,490 Давайце пойдзем далей і зрабіць хорам. 695 00:44:06,490 --> 00:44:08,370 Выкарыстанне неаб'яўленай ідэнтыфікатар я. 696 00:44:08,370 --> 00:44:12,500 О, гэта было па-дурному. Нам не патрэбныя аргументы. Давайце проста гэта зрабіць. 697 00:44:12,500 --> 00:44:16,370 Шкада, што мы пачалі гэты шлях. Было б значна прасцей напісаць праграму. 698 00:44:16,370 --> 00:44:25,590 Там жа. Зараз давайце пяройдзем да маіх акно тэрмінала, паўторна Clang, і тут мы ідзем. 699 00:44:25,590 --> 00:44:28,460 Гэта было сапраўды хутка. 700 00:44:28,460 --> 00:44:31,150 Што на самай справе толькі што адбылося, праўда? 701 00:44:31,150 --> 00:44:33,730 Ну, цяпер я дадам друку лініі, таму мы можам бачыць. 702 00:44:33,730 --> 00:44:43,490 Дазвольце мне сказаць, Е ("я тут") - не зменныя. Мы пакінем гэта так. 703 00:44:43,490 --> 00:44:47,480 Дазвольце мне зрабіць паўторна. Дазвольце мне паўторна хор. 704 00:44:47,480 --> 00:44:57,380 І ... давай. Працягвайце. 705 00:44:57,380 --> 00:44:59,930 Як у баку, чаму яна не пацярпела крах? 706 00:44:59,930 --> 00:45:02,080 Памылкі сегментацыі адбылося супер хуткі раней. 707 00:45:02,080 --> 00:45:06,570 [Неразборліва адказ студэнта] >> Менавіта так. Так што гэта займае час, каб надрукаваць, ці не так? 708 00:45:06,570 --> 00:45:08,610 Гэта зойме больш працы з боку кампутара. 709 00:45:08,610 --> 00:45:10,620 І вось гэта: памылкі сегментацыі. 710 00:45:10,620 --> 00:45:12,340 >> Так заўважыце, як хутка запускаць праграмы. 711 00:45:12,340 --> 00:45:14,130 Калі вы не друкуе нічога, супер хутка. 712 00:45:14,130 --> 00:45:18,770 Але мы ўсё ж атрымалі гэтую памылку сегментацыі, таму што тое, што адбываецца? 713 00:45:18,770 --> 00:45:21,210 Калі вы думаеце пра тое, як памяць кампутара выкладваецца, 714 00:45:21,210 --> 00:45:28,740 У гэтым выпадку, каб быць асноўным, але вось давайце проста называць гэты хор, і давайце называць гэта хор. 715 00:45:28,740 --> 00:45:34,550 І зараз, калі я раблю сваю эстэтыку права, гэта проста будзе сказаць, хор, хор, хор, 716 00:45:34,550 --> 00:45:40,550 хор, хор, хор, хор, да млоснасці, і ў рэшце рэшт, тое, што адбудзецца? 717 00:45:40,550 --> 00:45:45,630 Калі вялікая карціна, у літаральным сэнсе, гэта тое, што проста адбываецца канцэптуальна? 718 00:45:46,520 --> 00:45:48,630 Стэк перарасход кучы. 719 00:45:48,630 --> 00:45:51,940 Або, што яшчэ горш, вы проста захопленыя ўсё, уключаючы тэкст сегмента, 720 00:45:51,940 --> 00:45:54,590 якая з'яўляецца 0 і 1, якія прадстаўляюць вашу праграму. 721 00:45:54,590 --> 00:45:57,080 Карацей кажучы, гэта проста супер, супер дрэннага. 722 00:45:57,080 --> 00:45:58,830 Ваша праграма выйшла з-пад кантролю. 723 00:45:58,830 --> 00:46:01,220 Вы выкарыстоўваеце спосаб больш памяці, чым меркавалася 724 00:46:01,220 --> 00:46:03,960 ўсё з-за дурной памылкі ў дадзеным выпадку, 725 00:46:03,960 --> 00:46:08,040 ці ў дадзеным выпадку цалкам свядома зрабілі функцыю, якая называе сябе. 726 00:46:08,040 --> 00:46:09,500 Дык вось, гэта не так ужо дрэнна. 727 00:46:09,500 --> 00:46:13,800 Функцыі, якія называюць сябе сапраўды мае вялікую сілу, калі вы выкарыстоўваеце яго правільна. 728 00:46:13,800 --> 00:46:15,800 Я не выкарыстоўваў яго правільна тут. 729 00:46:15,800 --> 00:46:19,780 Так што не ўсё так дрэнна, але тое, што я ніколі не перастануць называць сябе 730 00:46:19,780 --> 00:46:23,520 з'яўляецца фундаментальнай слабасцю тут гэтай праграмы. 731 00:46:23,520 --> 00:46:26,400 Дык куды мы ідзём з усім гэтым? Што на самай справе адбываецца? 732 00:46:26,400 --> 00:46:30,340 Калі я называю прырашчэнне функцыі, як мы рабілі ў тых прыкладах, 733 00:46:30,340 --> 00:46:33,420 У мяне ёсць значэнне, як 1, што я праходжу цалі 734 00:46:33,420 --> 00:46:37,570 Я праходжу ў копіі нумар 1, так адбываецца наступнае. 735 00:46:37,570 --> 00:46:44,240 Пойдзем у прырашчэння, напрыклад, гэты хлопец прама тут. 736 00:46:44,240 --> 00:46:46,870 Вось што на самой справе адбываецца. 737 00:46:46,870 --> 00:46:53,400 Калі я называю прырост і я праходжу па х, графічна, што адбываецца вось гэта. 738 00:46:53,400 --> 00:46:59,520 >> Калі ў мяне ёсць кошт 1 захоўваецца тут, і я на самай справе клічуць прырост, 739 00:46:59,520 --> 00:47:04,330 якая цяпер называецца хор - Ipad кідае мяне тут. 740 00:47:04,330 --> 00:47:09,760 Давайце назавем гэта прырашчэнне, і мы не ведаем, што гэта наступная функцыя будзе. 741 00:47:09,760 --> 00:47:14,840 Так што ж на самай справе адбываецца дзесьці тут у асноўным у мяне ёсць кавалак памяці 742 00:47:14,840 --> 00:47:17,000 , Які захоўваецца нумар 1. 743 00:47:17,000 --> 00:47:19,380 Калі я называю прырост, я выкарыстоўваю іншую частку памяці, 744 00:47:19,380 --> 00:47:21,230 але зараз у мяне ёсць копія 1. 745 00:47:21,230 --> 00:47:26,660 Калі я павялічыць гэта значэнне, гэта становіцца 2, 746 00:47:26,660 --> 00:47:30,560 але што адбываецца потым, як толькі прырост прыбытку? 747 00:47:30,560 --> 00:47:33,630 Гэтая памяць проста атрымлівае вярнуў да аперацыйнай сістэме, 748 00:47:33,630 --> 00:47:37,450 якое азначае, што ўсё, што вы зрабілі нічога карыснага. 749 00:47:37,450 --> 00:47:43,120 1, які быў першапачаткова ўтрымліваліся ў асноўным па-ранейшаму на самай справе. 750 00:47:43,120 --> 00:47:44,890 Дык куды мы ідзём з гэтым? 751 00:47:44,890 --> 00:47:49,770 Аказваецца, што ў памяці ў вас ёсць гэтая спіна да спіны паслядоўнасць байтаў 752 00:47:49,770 --> 00:47:53,050 што вы можаце пакласці рэчы ў, і аказваецца, што мы ўжо бачылі нешта 753 00:47:53,050 --> 00:47:55,390 які ўключае ў сябе навядзенне спіной да спіны, каб спіна да спіны. 754 00:47:55,390 --> 00:47:59,860 Што ўяўляе сабой радок, грунтуючыся на тыдні 1, і цяпер тыдзень 2? 755 00:48:00,020 --> 00:48:01,980 Гэта проста набор знакаў. 756 00:48:01,980 --> 00:48:04,310 Вось і атрымліваецца, як вы можаце паставіць нумары ў памяці, 757 00:48:04,310 --> 00:48:06,990 Сапраўды гэтак жа вы можаце пакласці знакаў у памяці. 758 00:48:06,990 --> 00:48:10,530 І як толькі мы пачынаем пакласці знакаў у памяці спіной да спіны, каб спіна да спіны, 759 00:48:10,530 --> 00:48:13,620 Аказваецца, што з дапамогай найпростых рэчаў, як для цыклу або час цыклу, 760 00:48:13,620 --> 00:48:17,170 мы можам паўтараць злева направа па знакаў у радку 761 00:48:17,170 --> 00:48:20,600 і пачаць масажуючы іх у розныя персанажы ў цэлым - 762 00:48:20,600 --> 00:48:23,370 можа стаць B, B мог бы стаць C - 763 00:48:23,370 --> 00:48:27,780 так што ў канчатковым рахунку, мы можам прыняць ангельскае прапанову, што на самой справе мае сэнс 764 00:48:27,780 --> 00:48:30,310 і канвертаваць кожную з гэтых лістоў па адным 765 00:48:30,310 --> 00:48:34,400 пешшу праз нашу памяць кампутара злева направа на самай справе шыфравання. 766 00:48:34,400 --> 00:48:35,810 Такім чынам, давайце зробім наш пяціхвілінны перапынак тут, 767 00:48:35,810 --> 00:48:40,730 і калі мы вернемся, мы пачнем гэты працэс скремблирования інфармацыі. 768 00:48:42,020 --> 00:48:43,520 >> Добра. 769 00:48:43,520 --> 00:48:48,070 Перш чым мы паглыбімся ў некаторыя шыфравання і гэтыя рэчы называюцца масівамі, 770 00:48:48,070 --> 00:48:51,470 Дазвольце мне паўзу на любыя пытанні, таму што я адчуваю, што я сапраўды добры ап'янеў 771 00:48:51,470 --> 00:48:54,080 некаторыя з гэтых пытанняў. Так што давайце зафіксуем цяпер, калі мы можам. 772 00:48:54,080 --> 00:48:58,700 Мы толькі што казалі аб вяртанні каштоўнасцяў, пра якія мы казалі аргументы, 773 00:48:58,700 --> 00:49:03,250 і мы гаварылі пра гэта паняцці, якое мы вернемся ў бліжэйшыя тыдні, 774 00:49:03,250 --> 00:49:08,720 прагляду памяці цэлую кучу гэтых складзеных латках, так бы мовіць, 775 00:49:08,720 --> 00:49:12,660 знізу на уверх, так, што кожны латок, які атрымлівае пакласці ў стэк 776 00:49:12,660 --> 00:49:16,530 ўяўляе сабой функцыю, якая ў цяперашні час называецца. 777 00:49:17,900 --> 00:49:20,260 Ёсць пытанні? 778 00:49:20,260 --> 00:49:22,640 Дазвольце мне задаць пытанне тут. 779 00:49:22,640 --> 00:49:27,890 Дазвольце мне спрасціць гэта да таго, што было да некаторых з нашых ранніх Q & A. 780 00:49:27,890 --> 00:49:35,570 Той факт, што прырост мае адкрытую дужку, унутр нумар, закрыты дужках - 781 00:49:35,570 --> 00:49:39,110 Што ж Int ліку ўяўляюць? 782 00:49:39,110 --> 00:49:42,790 [Студэнт] аргумент. >> Аргумент. Добра. Але тое, што аргумент? 783 00:49:42,790 --> 00:49:46,370 [Неразборліва адказ студэнта] >> Што гэта такое? >> [Студэнт] Тое, што вы перадаеце цалі 784 00:49:46,370 --> 00:49:49,940 Такім чынам, тое, што вы перадаеце цалі І наогул, гэта проста ўваход. 785 00:49:49,940 --> 00:49:52,450 Калі б вы пісалі функцыі і мэты, якія функцыянуюць у жыцці 786 00:49:52,450 --> 00:49:55,770 павінен зрабіць нешта крыху іншае кожны раз, калі вы выкарыстоўваеце яго, 787 00:49:55,770 --> 00:50:00,110 , То адзіны спосаб, каб гэта адбылося на самай справе, здавалася б даць яму ўваход 788 00:50:00,110 --> 00:50:03,510 так што ён можа зрабіць нешта іншае з дапамогай гэтага ўкладу кожны раз. 789 00:50:03,510 --> 00:50:06,650 >> Такім чынам, вы павінны вызначыць дзве рэчы, калі функцыя прымае ўваход. 790 00:50:06,650 --> 00:50:09,590 Вы павінны паказаць імя, якое вы хочаце даць, што ўваходны 791 00:50:09,590 --> 00:50:12,700 выключна для вашага зручнасці, каб вы маглі звярнуцца да яго 792 00:50:12,700 --> 00:50:16,540 У функцыі, якія вы самі пішаце, як я зрабіў тут, у радку 32. 793 00:50:16,540 --> 00:50:20,800 Але вы таксама павінны паказаць яго тып, таму што C з'яўляецца мовай праграмавання 794 00:50:20,800 --> 00:50:25,940 што менавіта патрабуецца, калі вы хочаце зменнай, вы павінны паведаміць кампутара, які тып дадзеных яна ёсць, 795 00:50:25,940 --> 00:50:30,200 У большай часткі так, каб ён не ведае, колькі бітаў вылучыць для гэтай зменнай 796 00:50:30,200 --> 00:50:33,020 таму што гэта можа быць 6 - прабачце, гэта не будзе 6. 797 00:50:33,020 --> 00:50:37,080 Гэта можа быць 16, можа быць 8, гэта можа быць 32, нават 64, 798 00:50:37,080 --> 00:50:39,130 але кампутар павінен ведаць. 799 00:50:39,130 --> 00:50:43,180 Цяпер, унутр на левай баку ўяўляе тое, што, у адрозненне ад? 800 00:50:46,350 --> 00:50:48,850 [Неразборліва адказ студэнта] >> Што гэта такое? >> [Студэнт] Тып функцыі. 801 00:50:48,850 --> 00:50:53,610 Тып функцыі і, больш канкрэтна, тыпу сваёй прадукцыі. Права. 802 00:50:53,610 --> 00:50:57,380 Такім чынам, у той час як рэч у дужках прадстаўляе свой ўваход, калі такія маюцца, 803 00:50:57,380 --> 00:50:59,660 рэч, каб левая прадстаўляе сваю прадукцыю. 804 00:50:59,660 --> 00:51:03,530 І ў гэтым выпадку, па-відаць прырост вяртае цэлае, 805 00:51:03,530 --> 00:51:07,690 і так Int з'яўляецца тыпам вяртаецца гэтай функцыяй. 806 00:51:07,690 --> 00:51:09,340 Што гэта значыць вярнуць? 807 00:51:09,340 --> 00:51:15,090 Літаральна, вы выкарыстоўваеце ключавое слова вяртанне і тое, калі тое, што вы вяртаеце 808 00:51:15,090 --> 00:51:18,600 справа ад ключавога слова з'яўляецца цэлым лікам, 809 00:51:18,600 --> 00:51:21,660 тое, што сапраўды адпавядае таму, што мы абяцалі. 810 00:51:21,660 --> 00:51:26,410 Вы не маглі б зрабіць нешта накшталт гэтага - Добры дзень, свет - таму што гэта радок. 811 00:51:26,410 --> 00:51:28,860 >> Відавочна, гэта не з'яўляецца цэлым лікам. 812 00:51:28,860 --> 00:51:33,140 Карацей кажучы, цяжар на самай справе на нас, праграмістаў, для пэўнасці 813 00:51:33,140 --> 00:51:37,770 аб тым, што мы вяртаемся, і тады на самай справе ісці аб вяртанні яго. 814 00:51:37,770 --> 00:51:43,440 Кантэкст тут, зараз, у тым, што памяць кампутара складае адзін гігабайт, 2 гігабайта - 815 00:51:43,440 --> 00:51:45,920 што заўгодна, - можа быць, гэта больш, можа быць, гэта менш, 816 00:51:45,920 --> 00:51:49,050 але кампутар разглядае яе як якія маюць розныя часткі. 817 00:51:49,050 --> 00:51:51,200 Нешта ідзе туды, нешта яшчэ адбываецца там, наверсе, 818 00:51:51,200 --> 00:51:54,290 розныя рэчы ідзе ў сярэдзіне, і сёння мы толькі пачынаем распавядаць гісторыю, 819 00:51:54,290 --> 00:51:56,340 але мы вернемся да гэтага з цягам часу. 820 00:51:56,340 --> 00:51:59,980 У цяперашні час, толькі кавалак памяці мы сапраўды клапоцімся аб тым, тэкставы сегмент 821 00:51:59,980 --> 00:52:03,360 таму што толькі што ўяўляе 0 і 1, што Clang быў сігнал. 822 00:52:03,360 --> 00:52:06,050 Такім чынам, калі вы запусціце каманду на клавіятуры, як a.out 823 00:52:06,050 --> 00:52:09,110 ці вы двойчы пстрыкніце значок на Mac OS або Windows, 824 00:52:09,110 --> 00:52:11,880 Ваша праграма загружаецца з жорсткага дыска ў аператыўную памяць 825 00:52:11,880 --> 00:52:16,330 і ён пляснуўся ў верхняй частцы аператыўнай памяці кампутара, так бы мовіць. 826 00:52:16,330 --> 00:52:20,450 Між тым, як ваша праграма пачынае працаваць і асноўныя выклікаецца 827 00:52:20,450 --> 00:52:23,640 У праграме вы пісалі або праграмы Microsoft ці Apple, піша, 828 00:52:23,640 --> 00:52:27,860 любога з яе лакальныя зменныя ў канчатковым выніку там на дне памяці кампутара. 829 00:52:27,860 --> 00:52:33,230 Але калі асноўныя выклікі іншую функцыю, якая сама па сабе мае пераменныя або аргументы, яны ў канчатковым выніку над ім. 830 00:52:33,230 --> 00:52:36,680 І калі гэтая функцыя выклікае тое, што яны ў канчатковым выніку над ім, над ім, над ім. 831 00:52:36,680 --> 00:52:41,460 >> І толькі адзін раз у функцыі ажыццяўляецца выкананнем ці стэк латкоў, так бы мовіць, 832 00:52:41,460 --> 00:52:43,240 пачынаюць атрымліваць усё ніжэй і ніжэй. 833 00:52:43,240 --> 00:52:48,250 І гэта тое, што тады, у двух словах, тлумачыць, чаму, калі вы тэлефануеце кубе 834 00:52:48,250 --> 00:52:51,550 ці вы тэлефануеце прырост, вы перадаеце копію значэння. 835 00:52:51,550 --> 00:52:55,520 А што гэта азначае, што наглядна гэта тое, што вы літаральна напісання нумар 1 836 00:52:55,520 --> 00:53:00,460 У другой частцы памяці, змены, што з 1 па 2 у выпадку прырашчэння 837 00:53:00,460 --> 00:53:04,820 ці 8 у выпадку куба, а затым кідалі, што памяць далёка 838 00:53:04,820 --> 00:53:09,140 як толькі павелічэння або вяртання куб функцыі. Пытанне. 839 00:53:09,140 --> 00:53:12,900 [Студэнт] Дзе глабальныя зменныя захоўваюцца? 840 00:53:12,900 --> 00:53:18,100 Глабальныя зменныя захоўваюцца ў тое, што ў цяперашні час называецца ініцыялізуецца дадзеныя або неинициализированных дадзеных, 841 00:53:18,100 --> 00:53:21,920 розніца ў тым, калі ў вас ёсць глабальная зменная і вы прызначаеце яго адразу ж значэнне 842 00:53:21,920 --> 00:53:24,640 з знак роўнасці, яна заканчваецца на вяршыні, 843 00:53:24,640 --> 00:53:29,200 і калі вы проста кажаце Int х, без значэння, гэта сканчаецца крыху ніжэй, у аператыўнай памяці 844 00:53:29,200 --> 00:53:31,710 Проста па дамове. 845 00:53:31,710 --> 00:53:34,940 Іншыя пытанні? Добра. 846 00:53:34,940 --> 00:53:37,340 Такім чынам, гэтая карціна будзе вяртацца, як мы атрымаем больш магутны 847 00:53:37,340 --> 00:53:39,170 з тым, што мы можам зрабіць з кампутарам, 848 00:53:39,170 --> 00:53:42,720 але цяпер, давайце кароткае ўвядзенне ў крыптаграфію, 849 00:53:42,720 --> 00:53:46,080 пэўны тып шыфравання, не вырашае ўсіх праблем у свеце 850 00:53:46,080 --> 00:53:47,720 але вырашыць некаторыя з іх. 851 00:53:47,720 --> 00:53:51,700 У гэтым выпадку тут, у нас ёсць тое, што называецца сакрэтным ключом. 852 00:53:51,700 --> 00:53:56,410 Сакрэтным ключом, як вынікае з назвы, адбываецца яе бяспекі ад таямніцай. 853 00:53:56,410 --> 00:54:00,690 >> Напрыклад, калі вы былі яшчэ ў пачатковай школе, і вы праходзілі крыху любоўны ліст тайнага 854 00:54:00,690 --> 00:54:04,850 да хлопчыка або дзяўчынку вы ціснулі на, калі вы хацелі перадаць гэтую запіску па аўдыторыі, 855 00:54:04,850 --> 00:54:08,380 Вы, верагодна, не будзе пісаць такую ​​запіску на англійскай мове або што ваш родную мову. 856 00:54:08,380 --> 00:54:13,340 Замест гэтага, вы можаце зашыфраваць або вы можаце проста адправіць ім тэкставае паведамленне ў гэтыя дні. 857 00:54:13,340 --> 00:54:15,460 Але вы маглі б на самай справе перадаюць іх да ведама ўсім класе. 858 00:54:15,460 --> 00:54:18,700 І зрабіць гэта надзейна такім чынам, што вашы сябры і настаўнікі 859 00:54:18,700 --> 00:54:22,650 Не ведаю, што вы пішаце, вы можаце прыдумаць досыць просты алгарытм, 860 00:54:22,650 --> 00:54:25,920 Малады хоць вы маглі б быць, проста караскацца слова. 861 00:54:25,920 --> 00:54:28,130 Такім чынам, замест таго, каб пісаць вы можаце напісаць б, 862 00:54:28,130 --> 00:54:30,220 замест б вы маглі б напісаць с, 863 00:54:30,220 --> 00:54:32,140 замест таго, каб з вамі маглі б напісаць D, і гэтак далей. 864 00:54:32,140 --> 00:54:34,360 Ці вы маглі б прыдумаць больш складаны пераклад 865 00:54:34,360 --> 00:54:36,720 лістоў у розныя літары. 866 00:54:36,720 --> 00:54:39,740 Але загваздка ў тым, хлопчык ці дзяўчынка, якім вы адпраўляеце гэтую нататку 867 00:54:39,740 --> 00:54:45,020 трэба ведаць нешта, што і, відавочна? >> [Студэнт] Што вы адпраўляеце. 868 00:54:45,020 --> 00:54:49,720 Які ваш сакрэт, як і тое, што ў тым, што адпаведнасць паміж а і Ь і з і д ы. 869 00:54:49,720 --> 00:54:54,650 Гэта толькі даданне 1 да кожнай з літар, каб перайсці ад А да Б, В да С? 870 00:54:54,650 --> 00:54:56,670 Гэта больш складаны, чым гэта? 871 00:54:56,670 --> 00:55:01,540 >> Такім чынам, вы і ваш раздушыць павінны мець гэтую сакрэтную інфармацыю, 872 00:55:01,540 --> 00:55:03,190 але ёсць віды Catch-22 тут. 873 00:55:03,190 --> 00:55:06,830 Калі гэта ў першы раз вы адпраўляеце гэтую любоў ліст праз клас, 874 00:55:06,830 --> 00:55:10,720 Як гэта хлопчык ці дзяўчынка будзе ведаць, у чым сакрэт нават ёсць? 875 00:55:10,720 --> 00:55:13,930 Так што сакрэтны ключ шыфравання не вырашае ўсіх праблем у свеце, 876 00:55:13,930 --> 00:55:16,320 і ёсць на самой справе сувязь тут, што мы вернемся да да канца семестра. 877 00:55:16,320 --> 00:55:25,110 Сапраўды гэтак жа большасць з нас не ведае, што хтосьці працуе, напрыклад, на Amazon.com, 878 00:55:25,110 --> 00:55:28,190 і ўсё ж многія з нас, напэўна, купіў матэрыял у Amazon.com, 879 00:55:28,190 --> 00:55:31,990 і нас вучылі лічыць, што гэтыя транзакцыі электроннай гандлю знаходзяцца ў бяспецы. 880 00:55:31,990 --> 00:55:36,470 URL, верагодна, кажа HTTPS, ёсць, можа быць, дурны маленькі значок замка дзесьці, 881 00:55:36,470 --> 00:55:39,930 ёсць нейкая крыптаграфіі забеспячэнні інфармацыі аб крэдытнай карце 882 00:55:39,930 --> 00:55:42,160 паміж вамі і Amazon.com. 883 00:55:42,160 --> 00:55:45,430 І ўсё ж, калі крыптаграфія ўключае ў сябе веданне нейкі сакрэт 884 00:55:45,430 --> 00:55:48,620 І ўсё ж я не ведаю нікога, на Амазонцы, і я, вядома, не задаволіў любы сакрэт 885 00:55:48,620 --> 00:55:52,710 з кімсьці на Amazon, як мой кампутар або мой браўзэр гэта робіць? 886 00:55:52,710 --> 00:55:55,720 Аказваецца, ёсць іншыя віды крыптаграфіі наогул, што вырашыць гэтую праблему. 887 00:55:55,720 --> 00:55:57,670 Але на сённяшні дзень, мы засяродзімся на просты 888 00:55:57,670 --> 00:56:00,290 , Дзе можна арганізаваць загадзя ведаць некаторыя таемныя 889 00:56:00,290 --> 00:56:03,760 +1 Ці як некаторы адлюстраванне паміж а і б а. 890 00:56:03,760 --> 00:56:05,840 І працэс крыптаграфіі звычайна ўключае ў сябе гэтае. 891 00:56:05,840 --> 00:56:08,620 У вас ёсць звычайны тэкст, намаляваны тут, на левым, 892 00:56:08,620 --> 00:56:12,930 вы запускаеце яго праз нейкі алгарытм або працэдура шыфравання - 893 00:56:12,930 --> 00:56:15,100 Можа быць, гэта проста становіцца B, B становіцца з - 894 00:56:15,100 --> 00:56:17,490 і тады вы ў канчатковым выніку з зашыфраванага тэксту. 895 00:56:17,490 --> 00:56:20,380 Між тым, як толькі ваш раздушыць атрымлівае гэтую таямніцу, звярніце ўвагу, 896 00:56:20,380 --> 00:56:24,200 Ён або яна павінен расшыфраваць яго, як правіла заднім ходам, што алгарытм 897 00:56:24,200 --> 00:56:27,190 такім чынам, каб вярнуць звычайны тэкст. 898 00:56:27,190 --> 00:56:28,960 Ёсць фізічныя ўвасаблення гэтага. 899 00:56:28,960 --> 00:56:31,680 >> Напрыклад, гэта колца дэкодэр сакрэт, 900 00:56:31,680 --> 00:56:35,110 і гэта кольца ў тым сэнсе, што ёсць два набору тут. 901 00:56:35,110 --> 00:56:38,490 На знешняй перыферыі гэтай рэччу, ёсць літары ад А да Z, 902 00:56:38,490 --> 00:56:40,340 хоць яны ў выпадковым парадку, 903 00:56:40,340 --> 00:56:42,880 і з унутранага боку, там на самай справе некаторыя лічбы 904 00:56:42,880 --> 00:56:46,620 такія, што з гэтым кальцом Вы можаце ўключыць выгляд звонку, але не ўнутры 905 00:56:46,620 --> 00:56:49,140 для таго, каб выбудаваць нумары з літарамі. 906 00:56:49,140 --> 00:56:53,020 З фільма пад назвай Калядная гісторыя, вы ўбачыце, што мала Ральф 907 00:56:53,020 --> 00:56:58,000 так не цярпелася высветліць, што сакрэтнае паведамленне Little Orphan Annie была для яго 908 00:56:58,000 --> 00:57:02,570 што было паведамлена, я думаю, у выглядзе лікавых паведамленні на скрынкі ад шматкоў 909 00:57:02,570 --> 00:57:07,220 і трэба было сабраць усе маленькія карты, якія прыйшлі ў збожжавых вокны, 910 00:57:07,220 --> 00:57:09,770 Вы павінны былі адправіць ім па пошце, вы павінны былі вярнуцца таямніцу кольца дэкодэр 911 00:57:09,770 --> 00:57:13,910 так што вы можаце, нарэшце, высветліць, што адлюстраванне паміж літарамі і лічбамі 912 00:57:13,910 --> 00:57:15,550 або літар і літар. 913 00:57:15,550 --> 00:57:19,520 Як у кампутары мы можам ісці аб рэалізацыі або якія прадстаўляюць такія рэчы? 914 00:57:19,520 --> 00:57:22,560 Нам трэба знайсці спосаб выказаць сябе крыху больш гнутка 915 00:57:22,560 --> 00:57:25,080 чым нашы зменныя да гэтага часу дазволіў. 916 00:57:25,080 --> 00:57:29,000 У нас былі цэлымі, у нас былі знакі, якія мы мелі паплаўкі і двухмесныя і некаторыя іншыя, 917 00:57:29,000 --> 00:57:34,200 але гэтыя асобныя часткі памяці, якая на самай справе не дазваляюць выказаць рэчы 918 00:57:34,200 --> 00:57:36,440 як словы і прапановы і фразы. 919 00:57:36,440 --> 00:57:38,630 На самай справе, мы называлі такія радкі рэчы, 920 00:57:38,630 --> 00:57:42,660 але мы абяцаем, што гэта сапраўды проста спрашчэнне CS50 бібліятэкі 921 00:57:42,660 --> 00:57:45,540 што мы маем намер адхіліце. 922 00:57:45,540 --> 00:57:47,500 І так, давайце пачнем рабіць гэта тут. 923 00:57:47,500 --> 00:57:49,840 Дазвольце мне ісці наперад і адкрываць файл - 924 00:57:49,840 --> 00:57:54,100 Усе гэтыя файлы даступныя, як звычайна, онлайн - званыя array.c 925 00:57:54,100 --> 00:57:58,960 вырашыць праблему, не звязаных з радкамі, але гэта малюе карціну тут 926 00:57:58,960 --> 00:58:01,520 пра тое, як мы маглі б выкарыстоўваць тое, што называецца масівам. 927 00:58:01,520 --> 00:58:04,050 >> Масіў ўяўляе сабой тып дадзеных. 928 00:58:04,050 --> 00:58:10,730 Гэта тып зменнай роду, які мае некалькі меншыя тыпы дадзеных ўнутры яго 929 00:58:10,730 --> 00:58:12,680 спіной да спіны, каб спіна да спіны. 930 00:58:12,680 --> 00:58:16,980 Так, напрыклад, калі мы хочам напісаць невялікую праграму, якая дае вам ваш тэст сярэдняга 931 00:58:16,980 --> 00:58:19,780 на курс, як 50, якая мае 2 віктарыны, 932 00:58:19,780 --> 00:58:23,450 Вы можаце вельмі лёгка напісаць гэтую праграму, заснаваную нават на некаторых з матэрыялу на мінулым тыдні 933 00:58:23,450 --> 00:58:28,830 з дапамогай GetInt і некалькі зменных: Int quiz1, унутр quiz2. 934 00:58:28,830 --> 00:58:30,550 І гэта даволі проста. 935 00:58:30,550 --> 00:58:33,500 Гэта можа быць 10, 20 радкоў кода, максімальная рэалізацыя праграмы 936 00:58:33,500 --> 00:58:38,940 , Які просіць карыстальніка ў працягу 2 балаў віктарыны і затым вылічае іх сярэдняе 937 00:58:38,940 --> 00:58:42,020 , Складаючы іх разам, дзелячы на ​​2, а затым друку вынікаў. 938 00:58:42,020 --> 00:58:46,400 Мы маглі б зрабіць гэта даволі лёгка зараз, пасля некаторага колькасці хвілін. 939 00:58:46,400 --> 00:58:49,450 Але праблема ў тым, што выкажам здагадку, што 50 было 3 ці 4 віктарыны. 940 00:58:49,450 --> 00:58:52,830 Выкажам здагадку, што вы хацелі выкарыстоўваць тую ж праграму для класа, які быў штотыднёвыя віктарыны. 941 00:58:52,830 --> 00:58:55,100 Падумайце аб класе, які штотыднёвыя віктарыны. 942 00:58:55,100 --> 00:58:58,840 Калі ёсць 16 або так тыдняў у семестр, зараз у вас ёсць 16 зменных: 943 00:58:58,840 --> 00:59:03,030 quiz1 Int, Int quiz2, унутр quiz3, унутр quiz4. 944 00:59:03,030 --> 00:59:06,870 Як толькі вы пачынаеце бачыць гэтую надмернасць, гэта скапіяваць і ўставіць код, 945 00:59:06,870 --> 00:59:09,810 ён павінен пачаць рабіць вы хочаце там было лепш. 946 00:59:09,810 --> 00:59:13,610 І на шчасце, таму што масівы ёсць. Так давайце зробім гэта. 947 00:59:13,610 --> 00:59:16,700 Па-першае, дазвольце мне прадставіць вельмі простую рэч, што мы не выкарыстоўвалі да гэтага часу, 948 00:59:16,700 --> 00:59:18,820 але вы ўбачыце, што часам у кодзе. 949 00:59:18,820 --> 00:59:21,270 >> Гэта тое, што звычайна называецца сталай. 950 00:59:21,270 --> 00:59:24,410 Так што гэта пастаянная у тым сэнсе, што гэта значэнне ніколі не мяняецца. 951 00:59:24,410 --> 00:59:26,450 Чалавечыя канвенцыі пры стварэнні пастаяннай 952 00:59:26,450 --> 00:59:30,420 з'яўляецца выкарыстанне усіх вялікіх літар проста так, што ён сапраўды вылучаецца ў кодзе, 953 00:59:30,420 --> 00:59:34,270 і спецыяльныя ключавыя словы, якія вы выкарыстоўваеце ў З # вызначыць. 954 00:59:34,270 --> 00:59:39,970 Таму мы кажам, # вызначыць, то прастора, то слова, якое вы хочаце выкарыстоўваць для назвы канстанты 955 00:59:39,970 --> 00:59:41,730 , А затым значэнне канстанты. 956 00:59:41,730 --> 00:59:44,710 Звярніце ўвагу, што гэта адрозніваецца ад прысваення нешта зменная. 957 00:59:44,710 --> 00:59:46,430 Там няма знака роўнасці, няма коскі. 958 00:59:46,430 --> 00:59:49,140 Гэта тое, што вядома як дырэктыва препроцессора, 959 00:59:49,140 --> 00:59:50,840 але пра гэта ў іншы раз. 960 00:59:50,840 --> 00:59:56,350 На дадзены момант, гэта стварае нязменнае значэнне, званае віктарыны 961 00:59:56,350 --> 00:59:58,290 , Фактычнае лікавае значэнне 2. 962 00:59:58,290 --> 01:00:02,180 Такім чынам, усюды, дзе ёсць тэсты, віктарыны, тэсты на працягу ўсяго гэтага файла, 963 01:00:02,180 --> 01:00:04,230 вось толькі нумар 2. 964 01:00:04,230 --> 01:00:06,550 Калі я гляджу на асноўныя Цяпер, давайце паглядзім, як гэта працуе. 965 01:00:06,550 --> 01:00:09,770 Спачатку гэта выглядае трохі загадкава, але гэта ўсё рэчы з тыдні 1. 966 01:00:09,770 --> 01:00:12,210 Спытаеце ў карыстальніка класах. Як мы гэта робім? 967 01:00:12,210 --> 01:00:17,350 У радку 22 - гэта сапраўды сакавітыя часткі - я заяўляю, паплавок 968 01:00:17,350 --> 01:00:23,240 але не толькі адным паплаўком. Я абвясціўшы, хутчэй, масіў значэнняў з якая плавае кропкай. 969 01:00:23,240 --> 01:00:27,700 Гэта пераменная будзе называцца класах, як гэта маецца на ўвазе тут, 970 01:00:27,700 --> 01:00:31,420 але толькі частка новага сінтаксісу, то гэтыя квадратныя дужкі. 971 01:00:31,420 --> 01:00:37,280 Той факт, што я сказаў паплавок класах, а затым адкрыць дужку, а затым нумар - 972 01:00:37,280 --> 01:00:40,980 заўважыць, калі гэта пастаянная гэта так жа, як мы зрабілі гэта - 973 01:00:40,980 --> 01:00:46,840 гэта азначае: "Гэй, кампутар, дайце мне 2 паплаўка і давайце калектыўна называюць іх ацэнкі." 974 01:00:46,840 --> 01:00:51,780 >> Гэта ў адрозненне ад значна больш працаёмкі працэс наступным чынам: паплавок Grade1; 975 01:00:51,780 --> 01:00:54,580 grade2 плаваць, і гэтак далей. 976 01:00:54,580 --> 01:00:58,310 Такім чынам, масіў дазваляе нам рэалізаваць гэтую ідэю, але значна менш неахайна, 977 01:00:58,310 --> 01:01:04,560 такім чынам, што мы можам напісаць 1 радок кода, а не, скажам, 16 на 16-тыднёвы семестр. 978 01:01:04,560 --> 01:01:09,060 Я не хачу, каб закадаваць 2, таму што, калі вы думаеце пра гэта цяпер лагічна, 979 01:01:09,060 --> 01:01:12,560 Выкажам здагадку, у наступным годзе CS50 зменаў да 3 віктарыны замест 980 01:01:12,560 --> 01:01:15,010 і ў мяне быў нумар 2 тут, у мяне быў нумар 2 тут, 981 01:01:15,010 --> 01:01:17,210 У мяне быў нумар 2 тут, нумар 2 тут. 982 01:01:17,210 --> 01:01:19,890 Яна становіцца вельмі стомным і вельмі лёгка сапсаваць 983 01:01:19,890 --> 01:01:26,550 і выпадкова змяніць значэнне 1 да 3 і прапусціць некаторыя іншыя значэнні 2. 984 01:01:26,550 --> 01:01:30,660 Так што я збіраюся замест абстрактнага гэта адлегласць і выкарыстоўваць гэтую канстанту, якая, 985 01:01:30,660 --> 01:01:32,520 як мяркуе яго назва, ніколі не мяняецца. 986 01:01:32,520 --> 01:01:35,870 І цяпер незалежна ад таго, ці ёсць у нас розныя віктарыны гэтым ці наступным годзе, 987 01:01:35,870 --> 01:01:39,380 Я проста змяніць яго ў адным месцы, тут на вяршыні. 988 01:01:39,380 --> 01:01:41,230 Так што ўсё канстанты. 989 01:01:41,230 --> 01:01:47,100 Між тым, новая канцэптуальная асаблівасць складаецца ў тым масіва. 990 01:01:47,100 --> 01:01:55,030 Такім чынам, у квадратных дужках даць мне гэта шмат плавае і дазваляе мне калектыўна называюць іх класах тут. 991 01:01:55,030 --> 01:01:56,720 Такім чынам, цяпер давайце паглядзім, што я збіраюся рабіць. 992 01:01:56,720 --> 01:01:59,220 Тут, у радку 24 з'яўляецца пачаткам цыклу. 993 01:01:59,220 --> 01:02:03,380 >> Гэта сапраўды нічога асаблівага. Гэта толькі з дапамогай віктарын, а не жорстка ліку. 994 01:02:03,380 --> 01:02:06,740 Але няма нічога інтэлектуальна розных там з мінулага тыдня. 995 01:02:06,740 --> 01:02:11,650 Гэта проста Printf, таму Е ("Віктарына #% сут% D:") 996 01:02:11,650 --> 01:02:16,670 таму што я проста хачу, каб раздрукаваць даць мне віктарыны № 1 з 2, а затым 2 з 2. 997 01:02:16,670 --> 01:02:18,480 Так што гэта чыста эстэтычная рэч. 998 01:02:18,480 --> 01:02:21,000 Але самае цікавае зараз знаходзіцца ў радку 27. 999 01:02:21,000 --> 01:02:27,840 Для таго, каб запоўніць адну з двух запаўняльнікаў з якая плавае кропкай, 1000 01:02:27,840 --> 01:02:29,640 Вы зноў выкарыстоўваць квадратныя дужкі. 1001 01:02:29,640 --> 01:02:35,170 У гэтым выпадку, я выкарыстоўваю я, таму што гэта цыкл пачаўся з я, якое значэнне роўнае, па-відаць? 1002 01:02:35,170 --> 01:02:36,670 [Студэнт] 0. >> [Малая] 0. 1003 01:02:36,670 --> 01:02:40,990 Такім чынам, на першай ітэрацыі гэтага цыклу, гэта як калі б я напісаў гэта ў кодзе, 1004 01:02:40,990 --> 01:02:46,310 але на другі ітэрацыі гэтага цыклу, гэта як калі б я напісаў гэта ў сваім кодзе. 1005 01:02:46,310 --> 01:02:49,970 Але тое, што я выкарыстоўваю зменную выдатна, таму што, як вынікае з назвы, 1006 01:02:49,970 --> 01:02:52,600 гэта змена яго значэння на кожнай ітэрацыі, 1007 01:02:52,600 --> 01:02:55,900 так што я запаўненне гэтага масіва адным месцы за адзін раз. 1008 01:02:55,900 --> 01:02:57,380 Што гэта масіў выглядае? 1009 01:02:57,380 --> 01:03:01,570 Таму я звярнуў супер просты прастакутнік на экране тут раней была для гэтага прычына. 1010 01:03:01,570 --> 01:03:05,590 Масіў гэта проста кавалак памяці быў яшчэ адзін кавалак памяці 1011 01:03:05,590 --> 01:03:08,570 быў яшчэ адзін кавалак памяці і так далей. 1012 01:03:08,570 --> 01:03:13,120 Так што, калі мой масіў памерам 2 у гэтым выпадку тут, усё, што я буду рабіць 1013 01:03:13,120 --> 01:03:20,200 , Увёўшы ў маёй ацэнкі віктарыны падабаецца тут, - я атрымаў 100 на адзін, а затым я атрымаў 99 на гэтым - 1014 01:03:20,200 --> 01:03:24,970 Затым гэтая памяць не можа нават быць выкарыстаны, таму што я толькі спытаў кампутара 1015 01:03:24,970 --> 01:03:26,840 для масіва памерам 2. 1016 01:03:26,840 --> 01:03:28,600 Гэтыя квадраты ўсё яшчэ там, ці не так? 1017 01:03:28,600 --> 01:03:32,670 У вас яшчэ ёсць 2 гігабайта аператыўнай памяці, нават калі вы толькі просяць 2 паплаўка. 1018 01:03:32,670 --> 01:03:36,840 Такім чынам, ідэя масіваў з'яўляецца тое, што кампутар проста бярэ кавалак памяці 1019 01:03:36,840 --> 01:03:41,340 , А затым размяркоўвае дробныя кавалкі спіна да спіны, каб спіна да спіны. 1020 01:03:41,340 --> 01:03:43,310 І гэта ўсё, што масіў. 1021 01:03:43,310 --> 01:03:47,350 >> Гэта бесперапынны кавалак памяці, унутры якой вы можаце пакласці рэчы. 1022 01:03:47,350 --> 01:03:50,700 Гэта адбываецца, каб потым зрабіць толькі некалькі сумна арыфметыка. 1023 01:03:50,700 --> 01:03:54,640 Калі я пракруціць ўніз тут, гэта дзе я тады ітэрацыі па масіве. 1024 01:03:54,640 --> 01:03:58,020 Я прыдумаў сумаванне ўсіх значэнняў у масіве, 1025 01:03:58,020 --> 01:04:02,470 а потым выкарыстоўваць круглы функцыю тут на самай справе рабіць сума дзеліцца на віктарыны. 1026 01:04:02,470 --> 01:04:06,320 Але дазвольце мне махнуць рукой на што як свайго роду досыць арыфметычных цяпер. 1027 01:04:06,320 --> 01:04:08,370 Але ўсё, што робіць для мяне, у канчатковым рахунку, вылічэнне сярэдняга. 1028 01:04:08,370 --> 01:04:13,580 Такім чынам, спачатку тэст, плюс другі тэст дзеліцца на 2, а затым раздрукаваць яго, як Int. 1029 01:04:13,580 --> 01:04:17,280 Але давайце цяпер пераход да іншай прыклад называецца string1, 1030 01:04:17,280 --> 01:04:20,700 які малюе аналагічную карціну, але з выкарыстаннем радкоў. 1031 01:04:20,700 --> 01:04:23,940 Дазвольце мне ісці наперад і спрасціць гэты на імгненне. 1032 01:04:23,940 --> 01:04:27,090 Прабачце водступ на дадзены момант. 1033 01:04:27,090 --> 01:04:30,870 Звярніце ўвагу на лінію 19 з гэтага прыкладу, я атрымліваю радок ад карыстальніка. 1034 01:04:30,870 --> 01:04:34,640 Але звярніце ўвагу на тое, што я раблю ў наступным ліній 22 і далей. 1035 01:04:34,640 --> 01:04:41,250 На самай справе я ітэрацыя ад Я да - і гэта новы трук - StrLen, даўжыня радка. 1036 01:04:41,250 --> 01:04:44,880 Гэта функцыя, якая пастаўляецца з C, што калі вы перадаеце яго радка, 1037 01:04:44,880 --> 01:04:47,730 ён кажа вам, колькі знакаў у гэтай радку. Вось і ўсё. 1038 01:04:47,730 --> 01:04:51,550 А тое, што гэта StrLen замест таго, каб даўжыня радка проста таму, што гэта больш кароткім. 1039 01:04:51,550 --> 01:04:55,100 Трыццаць гадоў таму, людзям падабалася пісаць рэчы, як лаканічна наколькі гэта магчыма, 1040 01:04:55,100 --> 01:04:57,630 таму мы захавалі гэтую канвенцыю тут. 1041 01:04:57,630 --> 01:05:00,660 я + + азначае толькі тое павялічваем я ў кожнай ітэрацыі. 1042 01:05:00,660 --> 01:05:02,990 А цяпер заўважаю гэта, што сапраўды цікава. 1043 01:05:02,990 --> 01:05:09,180 У радку 24, я кажу: "Кампутар, дай мне характарам, 8 біт, і называем яго з". 1044 01:05:09,180 --> 01:05:12,630 Але што гэта на правай баку кажаце? 1045 01:05:13,490 --> 01:05:16,530 У ангельскай мове, што гэта ўяўляеце? 1046 01:05:16,530 --> 01:05:18,730 [Студэнт] Першы знак у масіве. 1047 01:05:18,730 --> 01:05:20,790 Менавіта так. Дайце мне першы знак у масіве. 1048 01:05:20,790 --> 01:05:24,090 Або, у больш агульным, дай мне-й знак у масіве. 1049 01:05:24,090 --> 01:05:26,100 І разумею, што гэта важна цяпер, як камп'ютэрныя навукі, 1050 01:05:26,100 --> 01:05:27,890 мы на самай справе пачынаючы з 0. 1051 01:05:27,890 --> 01:05:29,720 >> Вы не павінны меркаванні цяпер, каб пачаць гэта рабіць. 1052 01:05:29,720 --> 01:05:34,160 Цяпер вы павінны паводзіць сябе ў адпаведнасці з чаканнямі кампутар і лічыць ад 0 1053 01:05:34,160 --> 01:05:38,180 таму што [0] будзе першы знак у радку, 1054 01:05:38,180 --> 01:05:42,150 [1] будзе другі, [2] будзе трэцім, і гэтак далей. 1055 01:05:42,150 --> 01:05:49,720 Такім чынам, гэтая праграма, калі я скампіляваць яго, гэта зноў string1, так што string1, 1056 01:05:49,720 --> 01:05:54,670 і зараз я сутыкнуўся string1 ў маім акне тэрмінала. 1057 01:05:54,670 --> 01:05:58,330 Ён чакае ўводу, так што я збіраюся ўвесці Давіда, Enter 1058 01:05:58,330 --> 01:06:02,540 і зараз яна друкуе Дэвід усё на розных лініях, таму што паведамленне, што я раблю. 1059 01:06:02,540 --> 01:06:05,820 Я друк аднаго знака за адзін раз. 1060 01:06:05,820 --> 01:06:10,100 Мы не будзем удавацца ў падрабязнасці сёння на гэтым, але я выдаліў гэтую хвіліну таму тут галачку. 1061 01:06:10,100 --> 01:06:15,480 Аказваецца, што калі карыстальнік няправільна, спаборнасці, або проста блытаюць, 1062 01:06:15,480 --> 01:06:20,210 Вы можаце фактычна не даюць радкі некаторай даўжыні. 1063 01:06:20,210 --> 01:06:22,860 Калі вы націснеце не тую клавішу на клавіятуры, вы можаце не даюць радок на ўсіх, 1064 01:06:22,860 --> 01:06:26,950 або калі вы злы, вы можаце паспрабаваць, каб ўставіць у кошт гігабайта аб эсэ 1065 01:06:26,950 --> 01:06:29,290 каб запоўніць гэты радок, і калі кампутар працуе з памяці, 1066 01:06:29,290 --> 01:06:32,710 Аказваецца, што мы збіраемся вярнуць гэта спецыяльнае значэнне, званае NULL. 1067 01:06:32,710 --> 01:06:35,580 Такім чынам, на дадзены момант, проста ведаю, што ёсць гэта спецыяльнае значэнне, званае NULL 1068 01:06:35,580 --> 01:06:39,580 , Што дазволіць нам праверыць, калі мы з памяці, між іншым. 1069 01:06:39,580 --> 01:06:45,630 Але калі я адкрываю зараз string2, звернеце ўвагу на адно адрозненне тут. 1070 01:06:45,630 --> 01:06:48,210 Звярніце ўвагу на адно адрозненне тут з string2. 1071 01:06:48,210 --> 01:06:51,340 З string2, гэты цыкл трохі адрозніваецца. 1072 01:06:51,340 --> 01:06:55,010 >> Дазвольце мне выдаліць нулі, так што мы можам казаць пра тых, хто ў іншы раз. 1073 01:06:55,010 --> 01:06:57,800 Чым адрозніваецца цыкл на гэты раз? 1074 01:06:59,620 --> 01:07:01,670 Я магу вярнуцца да папярэдняга прыкладу. 1075 01:07:01,670 --> 01:07:08,580 Дык вось версія 2, гэта версія 1. 1, 2. 1076 01:07:08,580 --> 01:07:11,980 1, 2. 1077 01:07:13,520 --> 01:07:16,660 StrLen выклік дзе? 1078 01:07:16,660 --> 01:07:18,860 Гэта ў першай частцы цыклу. 1079 01:07:18,860 --> 01:07:21,830 Любыя думкі аб тым, чаму я гэта раблю? Так. 1080 01:07:21,830 --> 01:07:24,560 [Студэнт] Такім чынам, вы не выклікаеце функцыю кожны раз. 1081 01:07:24,560 --> 01:07:26,440 [Малая] Такім чынам, мы не выклікаем функцыю кожны раз. Менавіта так. 1082 01:07:26,440 --> 01:07:28,300 Нагадаем, з завесамі на тое, што яны супер проста 1083 01:07:28,300 --> 01:07:31,770 Як толькі вы, здаецца, разумею, што гэта ініцыялізацыя, ўмова і абнаўлення. 1084 01:07:31,770 --> 01:07:34,750 Праблема ў тым, што ўмова адбываецца на кожнай ітэрацыі цыклу. 1085 01:07:34,750 --> 01:07:40,010 І таму ў дадзеным прыкладзе, што такое дрэнна пра тое, што гэта маё стан? 1086 01:07:40,010 --> 01:07:41,830 [Студэнт] Вы тэлефануеце StrLen. 1087 01:07:41,830 --> 01:07:44,340 [Малая] Вы тэлефануеце StrLen зноў і зноў, і зноў. 1088 01:07:44,340 --> 01:07:47,410 Але як толькі я набраў у Дэвіда, даўжыня гэтага радка роўны 5, 1089 01:07:47,410 --> 01:07:49,650 і ён не збіраецца мяняць на кожнай ітэрацыі 1090 01:07:49,650 --> 01:07:51,670 таму што радок па-ранейшаму D - V-я-д. 1091 01:07:51,670 --> 01:07:55,320 Так што гэта намёк на тое, што збіраецца станавіцца ўсё больш важнай ідэяй 1092 01:07:55,320 --> 01:08:00,410 вядомы як дызайнерскае рашэнне, дзе толькі не робяць кампутар рабіць непатрэбную працу. 1093 01:08:00,410 --> 01:08:03,920 >> Гэтак жа, як папярэдні прагляд pset2, pset2 ў стандартным выданні 1094 01:08:03,920 --> 01:08:07,030 збіраецца кінуць вам выклік на самай справе рэалізацыі некаторага ліку шыфраў, 1095 01:08:07,030 --> 01:08:10,410 некаторы колькасць алгарытмаў шыфравання, так што вы можаце не толькі зашыфраваць 1096 01:08:10,410 --> 01:08:13,840 і дэшыфраванні сакрэтных паведамленняў гэтак жа, як адной Ральф там дэкадаваць. 1097 01:08:13,840 --> 01:08:16,810 У хакерам выданне pset2, мы збіраемся пайсці крыху далей. 1098 01:08:16,810 --> 01:08:19,649 Мы збіраемся перадаць вам файл з фактычнымі кампутарнай сістэмы 1099 01:08:19,649 --> 01:08:23,479 , Які змяшчае цэлую кучу імёнаў і фактычнай зашыфраваныя паролі, 1100 01:08:23,479 --> 01:08:26,939 і задачы для хакера выданне будзе узломваць гэтыя паролі 1101 01:08:26,939 --> 01:08:33,200 і высветліць, што крыптаграфія і таемныя, што быў выкарыстаны для стварэння самай справе гэтыя паролі. 1102 01:08:33,200 --> 01:08:36,109 І мы збіраемся зрабіць гэта з дапамогай новай функцыі тут C 1103 01:08:36,109 --> 01:08:40,630 што я дам вам толькі дэма вядомы як аргументы каманднага радка. 1104 01:08:40,630 --> 01:08:44,229 Аказваецца, як некаторыя з вас, магчыма, бачылі ў раздзеле або ў падручніках, 1105 01:08:44,229 --> 01:08:48,260 Асноўным не заўсёды павінна быць пустэча ў дужках. 1106 01:08:48,260 --> 01:08:52,430 Аказваецца, што асноўная можна таксама запісаць як гэта, з двума аргументамі, 1107 01:08:52,430 --> 01:08:56,870 ARGC і ARGV, дзе ARGC лік слоў 1108 01:08:56,870 --> 01:09:00,020 што вы ўводзіце пасля назвы праграмы на вашым каманднага радка 1109 01:09:00,020 --> 01:09:03,420 і ARGV з'яўляецца фактычным слоў. 1110 01:09:03,420 --> 01:09:07,540 І, як квадратныя дужкі там прапануюць, ARGV мабыць масіва. 1111 01:09:07,540 --> 01:09:12,210 Гэта збіраецца быць радком пасля радка пасля радка ў памяці. 1112 01:09:12,210 --> 01:09:16,010 >> Так што мы збіраемся быць у стане зрабіць, пачынаючы з PSET 2, нешта накшталт гэтага. 1113 01:09:16,010 --> 01:09:21,350 Калі я раблю argv1, які з'яўляецца прыкладам мы вернемся да ў панядзелак, і запусціць яго, 1114 01:09:21,350 --> 01:09:23,370 заўважыць, што гэта не падобна, каб зрабіць што-небудзь яшчэ. 1115 01:09:23,370 --> 01:09:25,490 Ён проста выводзіць сваё імя. 1116 01:09:25,490 --> 01:09:31,479 Але калі я развітваюся класа, звярніце ўвагу, што гэтая праграма па-відаць ітэрацыі 1117 01:09:31,479 --> 01:09:35,479 над кожным з слоў, якія былі надрукаваныя ў камандным радку. 1118 01:09:35,479 --> 01:09:41,630 І сродкі, з дапамогай якіх мы зможам атрымаць доступ да слоў, якія карыстальнік ўвёў у камандным радку 1119 01:09:41,630 --> 01:09:49,160 з'яўляецца змена асноўнага адпраўной гэты ўік-энд ад Int асноўных (несапраўднымі) на Int асноўных (агдс, ARGV) 1120 01:09:49,160 --> 01:09:52,050 і, такім чынам, народзіцца аргументы каманднага радка. 1121 01:09:52,050 --> 01:09:57,100 І як толькі вы атрымаеце сапраўды складаная ў гэтым, вы зможаце напісаць сапраўды трып праграм 1122 01:09:57,100 --> 01:09:59,610 такіх, як гэты вось, які ідзе вышэй і па-за 1123 01:09:59,610 --> 01:10:03,940 некаторыя функцыі, якія мы зрабілі да гэтага часу, але ўсё даволі магутны. 1124 01:10:03,940 --> 01:10:08,950 >> Такім чынам, мы пакінем гэта з гэтым на экране, і мы будзем бачыць Вас у панядзелак. 1125 01:10:17,570 --> 01:10:20,000 >> [CS50.TV]