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