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