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