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 >> Давид Ј. Малан: У реду. 4 00:00:12,640 --> 00:00:14,525 Ово је ЦС50. 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 Па ми смо задовољни да најављују да ЦС50 сопствену Гхенг 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 насупрот више сцриббли. 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 И многи од предавања су Већ сада онлине са овим УРЛ. 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 попут гетСтринг, и складиштења тзв повратак 38 00:01:40,450 --> 00:01:42,910 Вредност гетСтринг у вариабле-- се зове 39 00:01:42,910 --> 00:01:47,721 С Тип стринг-- смо писање линија кода тамо горе. 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 траје све ово време са гетСтринг. 45 00:01:58,880 --> 00:02:00,380 гетСтринг, наравно, добија низ. 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 То није кутија унутар којих ставимо стринг, Давен, по себи, 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 >> Давид Ј. Малан: Тачно. 62 00:02:38,118 --> 00:02:40,690 Адреса где Давен се налази у меморији. 63 00:02:40,690 --> 00:02:44,650 А не тамо где сви Давен налази, по себи, али конкретно адреса 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 >> Давид Ј. Малан: Први знак у Давен, што у овом случају, 69 00:02:50,209 --> 00:02:53,820 Предложио сам био произвољно и нереално 1, ОКС1, 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 да бисмо могли извући са 0к као префикс, 73 00:03:01,260 --> 00:03:02,806 представља хексадецимални карактер. 74 00:03:02,806 --> 00:03:05,930 И зато што не треба да знамо где је остатак ликовима Давен 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 >> Публика: Бацксласх 0. 78 00:03:11,651 --> 00:03:12,900 Давид Ј. Малан: Да, управо тако. 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 >> Тако да свакако је у реду да се настави са коришћењем ЦС50 библиотека и то апстракција, 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 То је проглашавајући две варијабле горе врх, С и Т, и називајући гетСтринг. 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 И онда радимо, ако се с једнако једнако т, треба рећи принтф, 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 >> Јанелле: Јанелле. 106 00:04:17,779 --> 00:04:19,529 Давид Ј. Малан: Јанелле, Драго ми је да сам вас упознао. 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 Тако да ова на левој страни, а онда гетСтринг на десној страни. 115 00:04:37,760 --> 00:04:40,540 А ту је и Т на левој страни, а затим гетСтринг на десној страни. 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 >> Јанелле: У реду. 120 00:04:49,820 --> 00:04:58,890 Па, прво, то би се питате да добијете улазни низ. 121 00:04:58,890 --> 00:05:00,439 И то би сторе-- Ох, извините. 122 00:05:00,439 --> 00:05:01,230 Давид Ј. Малан: У реду. 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 Јанелле: Жао ми је. 129 00:05:07,060 --> 00:05:14,237 Тако да би га у улаз адреса није од-- сигуран. 130 00:05:14,237 --> 00:05:17,320 Ја не могу да се сетим тачно броја, али ја верујем да је почевши од 0. 131 00:05:17,320 --> 00:05:18,420 >> Давид Ј. Малан: То је све у реду, јер сам бројеве горе, 132 00:05:18,420 --> 00:05:19,650 тако да нема правог одговора. 133 00:05:19,650 --> 00:05:22,105 >> Јанелле: Полазећи од 0 луком. 134 00:05:22,105 --> 00:05:24,000 >> Давид Ј. Малан: ОК, елемент 0. 135 00:05:24,000 --> 00:05:24,765 Наравно. 136 00:05:24,765 --> 00:05:28,295 >> Јанелле: А онда ако је као само две леттер-- 137 00:05:28,295 --> 00:05:30,496 >> Давид Ј. Малан: У реду, назад на вас. 138 00:05:30,496 --> 00:05:33,629 >> Јанелле: Па елемент 0, и онда елемент 1 или 2 елемент. 139 00:05:33,629 --> 00:05:36,670 Давид Ј. Малан: А који део слика црташ сада? 140 00:05:36,670 --> 00:05:37,690 Позив на гетСтринг? 141 00:05:37,690 --> 00:05:38,830 Односно проглашење с? 142 00:05:38,830 --> 00:05:42,890 >> Јанелле: Декларација од С, верујем. 143 00:05:42,890 --> 00:05:45,980 Ох, гетСтринг, јер би то се уноси у сваки [? Ареа. ?] 144 00:05:45,980 --> 00:05:46,510 >> Давид Ј. Малан: Добро. 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 Ако је ово сећање да је враћено од гетСтринг? 154 00:06:12,670 --> 00:06:14,415 155 00:06:14,415 --> 00:06:17,610 >> Јанелле: Да ли би било заступа лука? 156 00:06:17,610 --> 00:06:18,750 >> Давид Ј. Малан: Од лука? 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 и предлажу да, ако је то с, ово је повратак вредност гетСтринг. 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 >> Јанелле: Адреса 1? 168 00:06:45,420 --> 00:06:46,420 >> Давид Ј. Малан: Тачно. 169 00:06:46,420 --> 00:06:47,190 Тако адреса 0к1. 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 када то буде затражено са гетСтринг, где је, наравно, Габе отићи? 175 00:07:01,530 --> 00:07:02,280 Па, пресумабли-- 176 00:07:02,280 --> 00:07:04,935 177 00:07:04,935 --> 00:07:05,975 >> Јанелле: Као овде? 178 00:07:05,975 --> 00:07:06,850 Давид Ј. Малан: Да. 179 00:07:06,850 --> 00:07:08,516 Јанелле: Или то је такође у истим кутијама? 180 00:07:08,516 --> 00:07:11,940 Давид Ј. Малан: Пусти ме предлаже, да, тачно, тако да у овим додатним кутијама. 181 00:07:11,940 --> 00:07:15,230 Али оно што је кључно је то да, чак и иако сам извући ово прилично близу 182 00:07:15,230 --> 00:07:18,650 заједно-- 0к1, ово је 0к2-- у стварности, 183 00:07:18,650 --> 00:07:25,750 Ово сада може бити и број 0к10, на пример, и 0к11, и 0к12, 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 >> Јанелле: 0к10? 187 00:07:30,830 --> 00:07:31,830 Давид Ј. Малан: Тачно. 188 00:07:31,830 --> 00:07:33,180 Тако 0к10. 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 >> Јанелле: Два адресе? 194 00:07:49,271 --> 00:07:50,270 Давид Ј. Малан: Тачно. 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 >> Јанелле: Да ли би било, сте укуцали исто? 201 00:08:08,405 --> 00:08:11,446 >> Давид Ј. Малан: Па ако с је 1, а т је 10? 202 00:08:11,446 --> 00:08:13,320 >> Јанелле: откуцали сте различите ствари. 203 00:08:13,320 --> 00:08:13,570 >> Давид Ј. Малан: Тачно. 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 И, наравно, када смо фиксне ово-- које сам сада ћу представљати у греен-- 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 >> Давид Ј. Малан: Тачно. 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 гетСтринг, као што ћемо видети, буквално Данас, у својој документацији, 226 00:08:59,010 --> 00:09:02,330 каже да ће се вратити као нулл посебан Сентинел вредност, 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 >> Често, ако покушате да урадите нешто са нулл укључује фунцтион-- полагања испита 231 00:09:14,250 --> 00:09:17,470 као улаз за инстанце-- ту функцију Можда ће се срушити и веома, са њим, 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 >> Сада, овде у четвртом реду, "Ако стрцмп (с, т)," Па, 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 >> Давид Ј. Малан: Да, Променио сам с, као добро. 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 >> Давид Ј. Малан: Да. 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 Или технички, ако је то момак је још увек на 0к1, 302 00:12:50,850 --> 00:12:53,052 то је као да сам имао 0к1 0к1 овде и овде. 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 од цоурсе-- и искрено, изгледа као да је низ овде, 308 00:13:05,650 --> 00:13:07,340 али сада постоји ова чудна ствар. 309 00:13:07,340 --> 00:13:11,160 Знамо да је програмски језик, Ц, нуди ову функцију, 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 >> Дакле, прво, ја добијам ослободити од ЦС50 библиотеке, 319 00:13:37,460 --> 00:13:41,170 само да изложи да с је заиста цхар звезда, само синоним. 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 О чему је стрлен? 325 00:13:51,630 --> 00:13:52,547 Шта је сизеоф (цхар)? 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 >> Давид Ј. Малан: Савршено. 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 Давид Ј. Малан: Тачно. 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 И ја прецизирајући стрлен од С, дај ми онолико бајтова колико има у С, 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 Давид Ј. Малан: Тачно. 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 >> У међувремену, само да буде супер анал, имам сизеоф (цхар), 360 00:14:52,640 --> 00:14:55,730 само у случају да неко ради ми код не на ЦС50 апарата, 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 једнако тоуппер, 369 00:15:22,520 --> 00:15:25,230 има ефекат Цапитализинг што стринг? 370 00:15:25,230 --> 00:15:26,960 т и / или с? 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 >> Давид Ј. Малан: Тачно. 396 00:16:36,700 --> 00:16:39,530 Ако бих да позовем ову функцију од анотхер-- на пример, 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 до Замени, а затим позовите Свап-- ово, наравно, је исправна верзија 400 00:16:49,860 --> 00:16:52,220 је оно што смо о томе да Југоисточна Европа није успело. 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 Биће у-- хајде да видим да ли могу наћи ово стварно фаст-- реду, [неразумљиво]. 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 >> Па, у свап.ц, који је нов и данас, приметити неколико разлика. 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 >> Давид Ј. Малан: Да. 424 00:18:03,440 --> 00:18:06,680 Тако да су амперсандс нови комад синтаксе, не само у овом програму, 425 00:18:06,680 --> 00:18:08,560 али уопште у ЦС50. 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 >> Тако да више није инт, То је адреса једног Инт. 447 00:19:04,880 --> 00:19:07,910 И слично, б је сада иде да буде адреса инт. 448 00:19:07,910 --> 00:19:12,470 Дакле, када ја сада зовем Замени од главних, Нећу дати свап 1 и 2. 449 00:19:12,470 --> 00:19:15,540 Ја ћу да га дам као Ок-нешто и вола-нешто, 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 >> Давид Ј. Малан: Тачно. 460 00:19:37,990 --> 00:19:41,560 Дакле, у овом цонтект-- а то није било најбољи дизајн одлука, додуше, 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 а ви немате тип података, попут инт, одмах лево, 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 >> Слично томе, инт температура је само Инт. 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 Када сам заправо зовем Свап овај пут, ако је Овај први траи овде представља Маин, 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 Давид Ј. Малан: Тачно. 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 Дакле, ако на крају, после све ово време сам иду у данашњем изворни код и саставити 495 00:21:15,170 --> 00:21:22,110 Свап и Рун ./свап, коначно, за Први пут ми заправо видимо да 496 00:21:22,110 --> 00:21:25,330 моје вредности су заиста је успешно заменио. 497 00:21:25,330 --> 00:21:30,860 И сада, ми чак може да потраје НАПОМЕНА ове у, рецимо, ГДБ. 498 00:21:30,860 --> 00:21:32,740 >> Па пусти ме у исти фајл. 499 00:21:32,740 --> 00:21:35,010 Пусти ме само напред и покрените ГДБ од ./свап. 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 >> Давид Ј. Малан: Тако случајних бројева, можда. 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 И је, наравно, брзо Санити провери, 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 Али инт звезда у заградама само БДП-а начин да се каже да је ово адреса. 530 00:22:43,500 --> 00:22:48,290 Није инт, то је показивач на инт, или на други начин познат као град. 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 То је Ок-нешто. 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 Али бфффф0ц4, ово су све заиста цифре хексадецималном 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 И то је у складу са нашим Раније тврде да колики је инт? 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 Амперсанд значи оно што је адреса. 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 Ако сад како размотрити гетСтринг радова, по свој прилици, то је 579 00:24:52,230 --> 00:24:56,140 био неко тражећи комад Меморија, било када је корисник стринг 580 00:24:56,140 --> 00:24:59,040 у, јер ми сигурно није знао, као што ЦС50 особље, 581 00:24:59,040 --> 00:25:02,710 колики ти Стрингс да људи ће откуцате може бити. 582 00:25:02,710 --> 00:25:07,910 >> Па хајде да, по први пут, почиње да пилинг назад како су ЦС50 Библиотека радови, 583 00:25:07,910 --> 00:25:10,990 путем неколико примера која ће нас одвести тамо. 584 00:25:10,990 --> 00:25:15,300 Дакле, ако сам отворим гедит и отвори сцанф 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 Сцанф 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 Прогласи инт, зове к. 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 >> Али сцанф можете некако мисли као о супротност принтф. 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 >> % И је баш као принтф. 598 00:25:46,550 --> 00:25:49,410 То значи да очекују корисник унели Инт. 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 Давид Ј. Малан: Тачно. 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 Сваки пут када прође само сирови променљиву, као инт, на неку другу функцију, 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 Али ако, уместо тога, ви не дај ми стварни ИНТ, 614 00:26:32,560 --> 00:26:36,640 али ми даје упутства да инт, сада, као сцанф, 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 дот сласх сцанф 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 Па, зато што једноставно, сам рекао је очекивати само инт. 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 Дакле, ако не наведете аддресс-- и Ја то зовем произвољно, тампон, 635 00:27:38,790 --> 00:27:43,370 али сам могао да зовем с, бити симпле-- и онда радим ово, објасните ми, 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 >> Давид Ј. Малан: Тачно. 645 00:28:08,890 --> 00:28:11,577 Сцанф, по логици раније, ће да преузме низ 646 00:28:11,577 --> 00:28:13,410 да људски откуцано у-- сада је стринг, 647 00:28:13,410 --> 00:28:15,790 то није број, вероватно, ако он или она цооператес-- 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 то уместо тога зове, тако буффер-- хајде да нацртате име променљиве 660 00:28:48,030 --> 00:28:53,380 сада као буффер-- ако нисам зове гетСтринг или маллоц овде, 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 Шта год да ово указује да-- а ја скренем знак питања, 666 00:29:03,883 --> 00:29:07,060 али у стварности, то ће бити нешто као ОКС1, 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 >> Дакле, ако куцам у Габе сада, то ће да покуша да стави Г-А-Б-Е / 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 Давид Ј. Малан: Добро. 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, 1.000 карактера жице, 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 Па, ево ЦС50 библиотека. 716 00:31:13,880 --> 00:31:17,220 А већина је ово само као упутства горе. 717 00:31:17,220 --> 00:31:21,670 ЦС50 библиотека, све ово време, има ову линију у ред 52. 718 00:31:21,670 --> 00:31:23,680 Ми смо видели типедеф, или видећете типедеф 719 00:31:23,680 --> 00:31:27,930 у псет 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 Давид Ј. Малан: Да. 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 Али у ЦС50.ц, које смо Никада вам се намах, 735 00:31:56,910 --> 00:32:02,100 али је био у ЦС50 апарата све Овај пут, дубоко унутар својих фолдера, 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 Али дођите до Затамњена и видети како функционише Тоноване. 740 00:32:12,670 --> 00:32:13,890 Дакле, овде је Тоноване. 741 00:32:13,890 --> 00:32:17,727 А ако сте икада заиста стало како се инт ради, овде је његова документација. 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 То је у суштини негативан 2 милијарде позитивној 2 милијарде, узми или остави. 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 Испоставило се да су сви овај пут, Тонированние има 748 00:32:30,680 --> 00:32:33,600 се враћа посебан Цонстант, НОТ НУЛЛ, 749 00:32:33,600 --> 00:32:36,760 већ инт_мак, што је Само програмер је конвенција. 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 >> Али како се спроводи Тонированние? 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 Приметићете да користимо гетСтринг. 762 00:33:00,290 --> 00:33:04,000 Дакле, то је интересантно. Тоноване позива наше функције, гетСтринг. 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 Нешто крене наопако са гетСтринг, морамо да будемо у стању да обради то. 772 00:33:23,130 --> 00:33:27,070 А разлог не вратити нулл је да, технички, нулл је показивач. 773 00:33:27,070 --> 00:33:29,120 Тоноване мора врати инт. 774 00:33:29,120 --> 00:33:31,060 Па сам произвољно сам одлучио, у суштини, 775 00:33:31,060 --> 00:33:34,600 да је 2 милијарде, узми или остави, иде да буде посебну вредност која никад не могу да 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, оба инт н и цхар ц. 781 00:33:50,120 --> 00:33:53,600 И онда ја користим ову фанки линију, ссцанф, што се испоставило 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 Па сам већ звао гетСтринг, што значи да имам стринг у меморији. 785 00:34:02,100 --> 00:34:05,020 ссцанф оно што смо позвати рашчлањивање функцију. 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 и инт а можда још један лик. 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 Уколико корисник такође откуцан на сличан 123к, да је к 799 00:34:41,570 --> 00:34:45,060 ће се завршити писмо карактера ц. 800 00:34:45,060 --> 00:34:48,739 >> Сада се испоставља да ссцанф ће ми рећи, интелигентно, 801 00:34:48,739 --> 00:34:54,750 Колико варијабли ссцанф успешно моћи да попуни. 802 00:34:54,750 --> 00:34:58,770 Па овом логиком, ако функција Ја спровођење је Тонированние, 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 шта хоћу да ссцанф вредност повратак заиста да буде? 806 00:35:08,580 --> 00:35:10,950 Ако је сврха је да се само инт од корисника? 807 00:35:10,950 --> 00:35:13,980 808 00:35:13,980 --> 00:35:19,300 >> Дакле, ако ссцанф повратка 2, шта то значи? 809 00:35:19,300 --> 00:35:21,660 Корисник откуцан у нешто као, буквално, 810 00:35:21,660 --> 00:35:24,770 123к, што је само глупост. 811 00:35:24,770 --> 00:35:27,490 То је услов грешке, и Хоћу да проверим за то. 812 00:35:27,490 --> 00:35:32,960 >> Дакле, ако је корисник то се и овој логици, шта ссцанф врате, 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 Желим да ссцанф само успех у пуњење први од својих варијабли. 819 00:35:48,580 --> 00:35:52,490 Па зато сам желе да се врате ссцанф 1. 820 00:35:52,490 --> 00:35:55,750 >> А ако је ово мало изнад главе за сада, то је потпуно у реду. 821 00:35:55,750 --> 00:36:00,030 Схватају ипак, да је један од вредности Тоноване и гетСтринг 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 као куцање стринг, када ви заиста желео инт. 829 00:36:18,900 --> 00:36:21,350 Дакле, за сада-- ћемо доћи Назад на ово пре лонг-- 830 00:36:21,350 --> 00:36:23,710 али све ово време, гетСтринг и Тоноване имају 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 Као што се сећате, од прошле Бинки тиме-- ако мој миш ће тако цооперате-- 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 да је професор Парланте се користи у циљу представља 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 >> Давид Ј. Малан: ОК, ти си успостављање адресе за ваш Кс и и променљивих. 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 Давид Ј. Малан: Добро. 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 >> Давид Ј. Малан: Савршено. 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 >> Давид Ј. Малан: и додељује га до променљиве к. 883 00:38:27,690 --> 00:38:31,650 Тако да РЕЦАП, десну страну определи довољно меморије за складиштење инт. 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 И то можда има гоне-- то је у реду. 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 Давид Ј. Малан: Добро. 897 00:39:07,750 --> 00:39:08,760 ПУБЛИКА: [неразумљиво]. 898 00:39:08,760 --> 00:39:09,760 Давид Ј. Малан: Тачно. 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 Окфорд Стреет, или ОКС1. 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 То у складу са претходна екампле-- с једне стране, 953 00:41:32,680 --> 00:41:35,830 лева страна је радиш оно што, на енглеском? 954 00:41:35,830 --> 00:41:36,493 То је-- 955 00:41:36,493 --> 00:41:37,701 ПУБЛИКА: Креирање показивач. 956 00:41:37,701 --> 00:41:40,830 Давид Ј. Малан: Креирање показивач на инт и позивајући га к. 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 И знам да само зато што ја знам инт, на ЦС50 апарата, најмање 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 >> Давид Ј. Малан: к Брацкет 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 никад се не зна пред собом зашто-- хајде да ради ово. 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.000? 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 чак ружније него гдб је излаз. 1015 00:43:52,060 --> 00:43:55,670 Али увек има линију или два која су супер корисни. 1016 00:43:55,670 --> 00:44:00,310 >> Валгринд је програм који помаже не дебуг програм, по себи, 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 Један, да ли сте нешто Аццидентал попут тоуцх меморије 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 сте звали гетСтринг у толико наших програма, 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 назад, ради уналлоц или слободан, како се зове. 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 али ако сте икада покренете свој Мац или рачунар за неко време, отварање 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 да би бити-- али није ми увијек могао бити да програми бежиш 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 Ево где је Валгринд излаз је у потпуности 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 мемори.ц. 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 Па, то и то нумбер-- може бити све-- је Инт. 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 То је оно што Валгринд заправо ми говори. 1059 00:45:55,080 --> 00:45:57,600 Поред тога, такође ће реците ми, као што ћемо видети, 1060 00:45:57,600 --> 00:46:01,490 као што покренете ово у будућем псет, ако и кад си процурела меморије, што се 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 преливање не и ИНТ, него и бафер. 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 Јер ако је то тампон, као у ИоуТубе смислу, 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 И да је функција, Ф, овде, има цхар низ, који се зове Ц, величине 12. 1094 00:47:36,640 --> 00:47:39,340 И онда је то користи Нова функција зове стрнцпи. 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 Другим речима, ако је ово лош момак ставља унутар аргваргв [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 разумљиво КСКЦД шала, док ми настављамо следећи пут. 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 >> ПРЕДСЕДНИК: А сада, Дееп мисли, према Давен Фарнхам. 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 Ветар дува, бацање ваше хаир-- Ох, недостаје ми дана вхен-- 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