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, Реј Santoya беше на банкомат. 9 00:00:23,145 --> 00:00:23,644 -Да. 10 00:00:23,644 --> 00:00:27,030 Значи, прашањето е, она што правел во 09:16? 11 00:00:27,030 --> 00:00:29,720 >> -Shooting 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 >> -Wait. 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 >> -Bring Лицето нагоре на цел екран. 19 00:00:47,805 --> 00:00:48,680 >> -His Очила. 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 >> -Тоа Е безбол тим Nuevitas. 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 >> [END репродукција] 26 00:01:06,670 --> 00:01:07,628 >> Дејвид MALAN: Во ред. 27 00:01:07,628 --> 00:01:11,210 Ова е CS50 и ова е малку повеќе на [Беззвучен] со која сте 28 00:01:11,210 --> 00:01:12,890 dabbling со проблем во собата четири. 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 Но, ние тоа го правеше на минатата среда по пат на некои claymation прво. 34 00:01:28,150 --> 00:01:30,190 Па ова, да се потсетиме, е Binky, а ние го користи 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 Дејвид MALAN: еднаш се каже? 52 00:02:08,050 --> 00:02:08,860 ПУБЛИКАТА: Прогласувањето покажувачи? 53 00:02:08,860 --> 00:02:11,776 Дејвид MALAN: Прогласувањето покажувачи и ајде да го насочите малку повеќе. 54 00:02:11,776 --> 00:02:14,050 ПУБЛИКАТА: [Беззвучен] адреса x и y тогаш. 55 00:02:14,050 --> 00:02:15,300 Дејвид MALAN: И потоа се обрати. 56 00:02:15,300 --> 00:02:18,550 Толку посебно она што го правиме ние се декларираат две променливи. 57 00:02:18,550 --> 00:02:21,252 Овие променливи, иако, се случува да биде од тип int ѕвезда, која 58 00:02:21,252 --> 00:02:23,210 поконкретно значи тие се случува да се сместат 59 00:02:23,210 --> 00:02:26,450 на адреса на int, соодветно, x и y. 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 Бр 63 00:02:33,120 --> 00:02:35,030 Тоа е само т.н. вредности ѓубре. 64 00:02:35,030 --> 00:02:38,120 Ако не ви се всушност доделите променлива, што и да е во RAM меморија 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 ќе бидат клучни за тоа зошто Binky загуби главата минатата недела. 68 00:02:47,060 --> 00:02:49,980 >> Значи ова е claymation инкарнација на овој 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 или Mac OS или Windows, еј, дај ми некои меморија, 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 Дејвид MALAN: Колку? 82 00:03:21,994 --> 00:03:25,280 Колку во бајти, и да е така, ова, повторно, добро смислена пример, е само велејќи, 83 00:03:25,280 --> 00:03:27,360 дај ми на големината на int. 84 00:03:27,360 --> 00:03:30,550 Сега, големината на int е четири бајти или 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 Дејвид MALAN: На адреса. 92 00:03:45,901 --> 00:03:47,580 Адресата на дека парче од четири бајти. 93 00:03:47,580 --> 00:03:48,190 Токму така. 94 00:03:48,190 --> 00:03:51,430 И така тоа е она што се чуваат во крајна линија во x и тоа е причината зошто ние навистина не 95 00:03:51,430 --> 00:03:55,240 гајле што бројот на кои адреса е, без разлика дали е или OX1 OX2 96 00:03:55,240 --> 00:03:57,110 или некои криптичната хексадецимална адреса. 97 00:03:57,110 --> 00:03:59,850 Ние само се грижат сликовито дека таа променлива x е сега 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 >> ПУБЛИКАТА: Адресата на x е на 42. 107 00:04:22,360 --> 00:04:24,300 >> Дејвид MALAN: Адресата на x е на 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 Значи ние треба да tweak малку. 111 00:04:29,860 --> 00:04:31,032 Да? 112 00:04:31,032 --> 00:04:36,044 >> ПУБЛИКАТА: Вредноста дека покажувачот x е да се покажува кон е 42. 113 00:04:36,044 --> 00:04:36,710 Дејвид MALAN: Во ред. 114 00:04:36,710 --> 00:04:40,840 Вредноста што покажувачот x е укажува на, да речеме, ќе биде 42, 115 00:04:40,840 --> 00:04:44,165 или поинаку кажано, ѕвездата x вели, да одат во која било адреса 116 00:04:44,165 --> 00:04:48,340 е во х, без разлика дали е 1 Оксфорд Улица или 33 Оксфорд Стрит 117 00:04:48,340 --> 00:04:51,850 или OX1 или ox33, без оглед на дека нумерички адреса е, 118 00:04:51,850 --> 00:04:54,380 ѕвезда x е dereferencing на x. 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 и главата Binky е појави надвор во овој момент, 125 00:05:11,120 --> 00:05:15,290 бидејќи лоши работи се случуваат кога ви dereference вредности ѓубре 126 00:05:15,290 --> 00:05:18,210 или можете dereference неважечки покажувачи, и велам неважечки 127 00:05:18,210 --> 00:05:21,020 бидејќи во овој момент во приказна, она што е внатре на y? 128 00:05:21,020 --> 00:05:24,440 Што е вредноста на y базирана на изминатите неколку чекори? 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 Дејвид MALAN: адреса. 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 милијарди ако имате две свирки на RAM меморија, 138 00:05:41,500 --> 00:05:44,289 или нула до 4 милијарди ако сте доби четири гигабајти RAM меморија. 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 како резултат на тоа и навистина, тоа е што се случи таму да Binky. 157 00:06:33,840 --> 00:06:37,210 Па на крајот, Binky фиксна овој проблем со тоа. 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 y е еднаков х само значи дека без оглед на адреса е Х, исто така, го стави во y. 161 00:06:45,580 --> 00:06:48,740 >> И така сликовито, ние сме отсликуваа оваа со две стрелки 162 00:06:48,740 --> 00:06:51,570 од x и y од покажување на истото место. 163 00:06:51,570 --> 00:06:55,760 Па семантички, x е еднаква на y, бидејќи и двете од овие 164 00:06:55,760 --> 00:07:00,300 складирање на истиот адреса, ergo посочувајќи на 42, 165 00:07:00,300 --> 00:07:04,910 и сега, кога ќе се каже ѕвезда y, одете на адресата во y, 166 00:07:04,910 --> 00:07:06,790 ова има една интересна ефект. 167 00:07:06,790 --> 00:07:10,320 Па ја адресата во y е истото како и адреса во х. 168 00:07:10,320 --> 00:07:15,060 Па ако може да се каже да одат на адреса во y и промена на вредноста на 13, 169 00:07:15,060 --> 00:07:17,140 кој друг ќе влијае? 170 00:07:17,140 --> 00:07:21,100 X е, точката D, така да се каже, треба да бидат погодени, како и. 171 00:07:21,100 --> 00:07:24,340 >> И навистина, како Ник нацрта оваа слика во claymation беше токму тоа. 172 00:07:24,340 --> 00:07:28,665 И покрај тоа што го следат на покажувачот y, ние заврши на истото место, 173 00:07:28,665 --> 00:07:32,780 и така ако ние требаше да се печати надвор x или y pointee е, 174 00:07:32,780 --> 00:07:35,720 тогаш ќе се види вредноста на 13. 175 00:07:35,720 --> 00:07:37,927 Сега, велам pointee да биде во согласност со видео. 176 00:07:37,927 --> 00:07:39,760 Програмери, во мојата знаење, всушност никогаш не 177 00:07:39,760 --> 00:07:42,460 каже зборот pointee, она што се посочува 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 Така било какви прашања за claymation или покажувачи Примерок или само уште? 181 00:07:54,190 --> 00:07:54,850 Не? 182 00:07:54,850 --> 00:07:55,470 Во ред. 183 00:07:55,470 --> 00:07:58,560 >> Значи без понатамошно ado, ајде да ги разгледаме 184 00:07:58,560 --> 00:08:00,700 од каде што тоа е всушност се користат за некое време. 185 00:08:00,700 --> 00:08:03,580 Па имавме оваа библиотека CS50 тоа е мора сите овие функции. 186 00:08:03,580 --> 00:08:06,810 Сме користи GetInt многу, GetString, веројатно GetLongLong порано 187 00:08:06,810 --> 00:08:09,840 во мојата pset еден или така, но она што всушност се случува? 188 00:08:09,840 --> 00:08:12,920 Па, ајде да се земе брз поглед под хаубата на програма со која 189 00:08:12,920 --> 00:08:17,017 инспирира зошто ние ви даде на CS50 библиотека, и навистина како на минатата недела, 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 се случува во библиотеката CS50, 193 00:08:23,690 --> 00:08:27,250 и покрај тоа што сега ќе почнат да се движат подалеку од тоа за повеќето програми. 194 00:08:27,250 --> 00:08:29,460 >> Значи ова е програма наречена scanf 0. 195 00:08:29,460 --> 00:08:30,510 Тоа е супер краток. 196 00:08:30,510 --> 00:08:33,909 Тоа само ги има овие линии, но тоа воведува функција наречена scanf 197 00:08:33,909 --> 00:08:36,909 дека ние сме всушност ќе се види во момент во внатрешноста на библиотеката CS50, 198 00:08:36,909 --> 00:08:38,600 иако во малку поинаква форма. 199 00:08:38,600 --> 00:08:41,330 Значи оваа програма на линија 16 е прогласување на променлива x. 200 00:08:41,330 --> 00:08:43,150 Па ми даде четири бајти за int. 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 Scanf, а потоа забележите дека е потребно формат низа, исто како printf, 205 00:08:53,230 --> 00:08:57,480 % i значи int, и тоа трае Вториот аргумент кој изгледа малку 206 00:08:57,480 --> 00:08:58,260 фанки. 207 00:08:58,260 --> 00:09:01,880 Тоа е симболот x, и да се потсетиме, ние само го виде тоа уште минатата недела. 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 Дејвид MALAN: Адресата на. 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 па така ова е клучна, бидејќи Целта scanf во животот 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 дека swap функција која се обиде да се спроведе без никаков напор 222 00:09:36,080 --> 00:09:37,110 беше само скршени. 223 00:09:37,110 --> 00:09:42,470 Сетете се дека со функција на размената, ако ние само прогласи А и Б како ints, 224 00:09:42,470 --> 00:09:47,040 ние успешно се разменуваат со две променливи во внатрешноста на swap 225 00:09:47,040 --> 00:09:50,080 Исто како и со млеко и ОВ, но штом трампа врати, 226 00:09:50,080 --> 00:09:55,200 каков беше резултатот во однос да x и y, оригиналниот вредности? 227 00:09:55,200 --> 00:09:55,700 Ништо. 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 Значи ова е проблематично ако сакаат да имаат функција како scanf 236 00:10:13,650 --> 00:10:17,170 во животот, чија цел е да ги скенира внес на корисникот од тастатурата 237 00:10:17,170 --> 00:10:22,010 а потоа се пополни во празни места, па за да зборувате, што е, да даде како променлива x 238 00:10:22,010 --> 00:10:25,410 вредност, затоа што ако јас се само да го помине на X да scanf, 239 00:10:25,410 --> 00:10:28,790 ако сметате дека логиката на минатата недела, scanf може да прави што сака 240 00:10:28,790 --> 00:10:33,100 со копија на X, но тоа не може постојано се менува, освен ако не им даде на x 241 00:10:33,100 --> 00:10:37,120 scanf мапа на богатство, така да се каже, каде што х означува место, при што 242 00:10:37,120 --> 00:10:41,860 ние помине во адресата на x, така што scanf можат да одат таму, а всушност се промени 243 00:10:41,860 --> 00:10:42,920 вредноста на x. 244 00:10:42,920 --> 00:10:45,080 И така навистина, сите дека оваа програма не 245 00:10:45,080 --> 00:10:53,180 ако јас се направи scanf 0, во мојот извор Директориум 5м, направи scanf 0, 246 00:10:53,180 --> 00:10:57,730 дот црта scanf, број Ве молиме 50, благодарение на 50. 247 00:10:57,730 --> 00:11:01,020 >> Па тоа не е се што се интересни, но она што е навистина се случува 248 00:11:01,020 --> 00:11:04,820 е дека веднаш штом ќе се јавам scanf тука, вредноста на x 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 се чини дека ние навистина не треба CS50 библиотека на веќе сите. 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 >> Ајде да погледнеме во оваа верзија сега тоа е мојот обид да reimplement GetString. 265 00:11:46,450 --> 00:11:48,437 Ако scanf има сето ова функционалност изградена во, 266 00:11:48,437 --> 00:11:51,270 зошто сме биле dabbling со овие обука тркала како GetString? 267 00:11:51,270 --> 00:11:55,450 Па, тука е можеби мојата едноставна верзија на GetString 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 ајде да се обидеме да ги позајмите, оваа лекција scanf % s ова време, а потоа положи во тампон. 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 Дејвид MALAN: Точно, бидејќи овој пат, знак 281 00:12:29,920 --> 00:12:34,080 Ѕвездата е веќе покажувач, адреса, по дефиниција на таа ѕвезда се таму. 282 00:12:34,080 --> 00:12:37,530 И ако scanf очекува на адреса, доволно е само да се помине во тампон. 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 валидна нешто во C, но за сега, ајде да ја задржиш едноставен 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 Направи scanf 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 Да речеме scanf-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 CS50 проект има различни прилагодувања за конфигурација 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 Бр 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 Се одржа надолу команда-V предолго, јасно. 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 на char ѕвезда тампон на линија 16? 336 00:14:39,240 --> 00:14:41,820 Значи она што сум јас добивам кога Изјавувам покажувач? 337 00:14:41,820 --> 00:14:47,440 Сите јас сум добивање на е четири byte вредност на наречен тампон, но она што е во него 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 Бидејќи секое време ви се декларирате променлива во C, тоа е само некои вредност на ѓубрето, 341 00:14:54,170 --> 00:14:56,220 и ние сме почнуваат да патување во текот на оваа реалност. 342 00:14:56,220 --> 00:14:59,720 Сега, кога ќе ти речам scanf, на оваа адреса 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 Кои чекори пропуштив, исто како и ние испуштени со првиот пример Binky е? 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 >> Дејвид MALAN: алокација на меморијата. 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 Па, внатрешноста на YouTube и во внатрешноста на видео плеери 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 На YouTube или кој и да е, ќе почне читање на бајти од таа низа, 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 Значи, тоа е да се каже, јас може да се помине на scanf токму тој збор 392 00:17:24,530 --> 00:17:30,670 И така сега, ако јас се направи оваа програма, направи scanf 2, точка црта scanf 2, 393 00:17:30,670 --> 00:17:35,386 и тип во здраво светот, Внесете, дека time-- 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 и така кога ќе притиснете Enter, што ќе се случи? 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 S-E-N-T-E-N-C-E, реченица. 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 of-- 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 но ова се чини да се ограничи функцијата GetString за добивање 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 Со спроведување getstring овој начин. 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 Дејвид MALAN: Апсолутно. 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 1.000? 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 Дејвид MALAN: Токму така. 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 тоа. 474 00:21:17,390 --> 00:21:21,490 Значи ова е токму оној вид на работи дека библиотеката обидува CS50 475 00:21:21,490 --> 00:21:24,750 да ни помогне со и ние ќе само поглед во некои од основните имплементација 476 00:21:24,750 --> 00:21:29,790 тука, но ова е CS50 точката C. Ова е датотеката што е создадено на CS50 ИРО 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 по природа на постоење на цртичка L CS50 знаме со ѕвекот, 480 00:21:38,780 --> 00:21:42,300 ако, пак, дојдете преку сите овие функции, тука е GetString, 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 но решив во спроведување на библиотеката CS50 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 и ние сме само ќе да го направите ова iteratively. 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 Еве една променлива n со што јас ќе одам да се задржи 501 00:22:32,070 --> 00:22:36,200 пратите на колку бајти се всушност во тампон или дека корисникот има отчукува. 502 00:22:36,200 --> 00:22:39,900 Ако не сте виделе тоа порано, може да се каже дека со променлива како int 503 00:22:39,900 --> 00:22:46,370 е непотпишана, која како што сугерира името, значи тоа е не-негативен, и зошто би 504 00:22:46,370 --> 00:22:50,590 Што некогаш сум сакаат да се мачат специфицирање дека не е само int int, 505 00:22:50,590 --> 00:22:52,540 но тоа е една непотпишана int? 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 >> Дејвид MALAN: Да. 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 По правило, на int може да се грубо негативни 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 Значи, велејќи непотпишана, сега мојот int може биде помеѓу 0 и околу 4 милијарди долари. 522 00:23:35,350 --> 00:23:39,280 >> Значи тука е само на int C за причини ние нема да се влезе само сега како 523 00:23:39,280 --> 00:23:42,280 зошто тоа е, наместо на int на знак, но тука е 524 00:23:42,280 --> 00:23:44,630 суштината на она што се случува на, а некои од вас 525 00:23:44,630 --> 00:23:48,340 може да се користат, на пример, fgetc функцијата, дури и во pset четири 526 00:23:48,340 --> 00:23:51,580 или после тоа, ние ќе го видите повторно во проблем во собата пет, 527 00:23:51,580 --> 00:23:55,410 fgetc е убаво, бидејќи како што е името вид на, вид arcanely сугерира, 528 00:23:55,410 --> 00:23:57,940 тоа е функција која добива лик и така, 529 00:23:57,940 --> 00:24:00,690 што е фундаментално различно за она што го правиме во GetString 530 00:24:00,690 --> 00:24:03,110 е тоа што не сте користење scanf на ист начин. 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 функција realloc каде realloc Ви овозможува да се реалоцираат на парче меморија 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 се знае дека она GetString е тоа е тоа е вид 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 а потоа го кажувам realloc да им даде самата дека многу повеќе меморија. 555 00:25:17,480 --> 00:25:19,720 >> Сега, како настрана, таму и други функции во тука 556 00:25:19,720 --> 00:25:23,680 дека ние нема да се погледне во секој детал освен да се покаже во GetInt, 557 00:25:23,680 --> 00:25:26,150 ние ги користиме во GetString GetInt. 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 Но, јас ќе се одложи на коментарите како да зошто, а потоа ние ги користиме оваа братучед на scanf 564 00:25:37,850 --> 00:25:42,100 наречен sscanf и испоставува дека sscanf, или стринг scanf, 565 00:25:42,100 --> 00:25:45,310 Ви овозможува да ги погледнеме на линија која корисникот ги внеле во и нека 566 00:25:45,310 --> 00:25:49,610 се анализира тоа во суштина и што сум прави тука е јас кажувам sscanf, 567 00:25:49,610 --> 00:25:54,440 се анализира она што корисникот има внеле во и бидете сигурни дека% i, 568 00:25:54,440 --> 00:25:59,250 таму е цел број во неа, а ние нема да се влезе денес точно зошто таму е исто така 569 00:25:59,250 --> 00:26:03,760 на% c тука, но тоа во мало страница ни се да се открие ако корисникот има отчукува 570 00:26:03,760 --> 00:26:06,050 во нешто лажен по број. 571 00:26:06,050 --> 00:26:11,766 Така од причина што GetInt и GetString ти кажам да се обидете повторно, обидете се повторно, обидете се повторно 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 >> Whew. 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 но сега со pset четири и пет и pset надвор ќе видите дека тоа е повеќе до 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 Било какви прашања во врска со GetString или GetInt? 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 >> Дејвид MALAN: Добро прашање. 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 ние сме за да се јавите или Примерок realloc, туку целосна пресуда 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 Излезе на сите вас, иако check50 не ти реков колку, 610 00:27:47,800 --> 00:27:50,050 се пишува кабриолет код од една недела, 611 00:27:50,050 --> 00:27:53,630 дури и ако сите тестови се check50 поминаа, па дури и ако вие и вашиот ТФ 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 за користење на библиотеката CS50, биле протекување меморија. 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 Сте повика GetString и GetInt и GetFloat, 618 00:28:12,110 --> 00:28:15,270 но со GetString, сте никогаш наречен unGetString или Испрати 619 00:28:15,270 --> 00:28:19,890 Стринг назад или слично, но ние сме виделе дека GetString прави алоцирам меморија 620 00:28:19,890 --> 00:28:22,810 по пат на Примерок или ова функција realloc, што е само 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 Тоа не се случува да се скрши IDE или забават работите надолу, 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 Ако некогаш сте виделе глупави малку плажа топката во Mac OS или песочен часовник 631 00:28:45,640 --> 00:28:51,160 на Windows, каде тоа е вид на забавување или размислување или размислување 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 ќе имаат можност да се кандидира во CS50 доколку 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 е некои супер корисни совети кои ќе биде корисно ниту за pset четири 647 00:29:39,810 --> 00:29:41,510 или секако pset пет. 648 00:29:41,510 --> 00:29:44,250 Па valgrind е алатка кои можат да се користат да се погледне 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 Трчате valgrind а потоа, дури и иако тоа е малку опширниот, 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 Valgrind па потоа ќе ја изршува вашата програма и на самиот крај на вашата програма 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 >> Па еве еден пример на мојот има рок оваа програма, со рок valgrind, 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 дека не треба да има, valgrind да ви кажам дека. 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 Слично како GDB, може да помогне ви точка во вистинската грешка. 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 Те повика Примерок или ќе се нарекува GetString и на оперативниот систем 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 Изјавува, многу сличен на во примерот Binky, 698 00:31:59,620 --> 00:32:02,682 покажувач наречен X кој ќе за чување на адресата на int. 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 Некој? 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 >> ПУБЛИКАТА: [Беззвучен] пати поголема од големината на int 705 00:32:16,623 --> 00:32:19,175 што е за 10 пати поголема од таа [Беззвучен] 706 00:32:19,175 --> 00:32:20,800 Дејвид MALAN: Добар и дозволете ми да резимираме. 707 00:32:20,800 --> 00:32:25,480 Па одвои доволно простор за 10 броеви или 10, што е големината на int, 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 Дејвид MALAN: Да. 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 Зошто? 725 00:33:09,096 --> 00:33:10,910 >> ПУБЛИКАТА: Поради тоа што не е внатре. 726 00:33:10,910 --> 00:33:12,390 >> Дејвид MALAN: Тоа не е внатре дека парче на меморија. 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 Ми се чини дека да се обиде да направи CS50 ИРО несреќата со впишување лажни вредности, 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 >> Па ајде да се обидеме valgrind за ова, и тука е 741 00:33:50,610 --> 00:33:52,870 каде што ќе се преоптовари од страна на излез моментално. 742 00:33:52,870 --> 00:34:00,810 Така бидете меморија чек valgrind течење еднаква со целосни точки коса црта меморија. 743 00:34:00,810 --> 00:34:03,040 И еве зошто јас ветувам ова ќе победат. 744 00:34:03,040 --> 00:34:05,700 Еве што valgrind, тука е она што програмер, неколку години ago- 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 е ID на процес на програмата ние едноставно се кандидира, единствениот идентификатор 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 Ако јас сега повторување направи меморија точка коса црта, Ајде да се кандидира valgrind повторно на неа, 768 00:35:11,520 --> 00:35:14,990 зголеми мојот прозорец и притиснете Enter. 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 Дејвид MALAN: Тоа е тешко за промена на големината. 799 00:36:36,128 --> 00:36:38,660 Вие не може да ја смените големината на низа, всушност, само по себе 800 00:36:38,660 --> 00:36:43,040 во C. Може да се доделат уште низа, се движи сè од стариот 801 00:36:43,040 --> 00:36:45,380 во новата, а сега има некои екстра простор, 802 00:36:45,380 --> 00:36:47,469 но тоа не е како јазик како Java или Пајтон 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 ad nauseam до крајот на низа. 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 тоа. 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 >> Дејвид MALAN: покажувач. 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 Тоа е лесно да се спроведе int. 843 00:38:40,690 --> 00:38:44,000 Можете само да се каже int n и потоа добивате 4 бајти за int, 844 00:38:44,000 --> 00:38:49,089 но како можам да добијам на int, го нарекуваат n, а потоа покажувач, ајде да го наречеме следната. 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 >> Дејвид MALAN: Значи симболот ние ќе ги искористиме за да се ја добиете адресата на еден јазол потенцијално. 850 00:39:00,940 --> 00:39:02,740 Но, ние треба уште една карактеристика на C со цел 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 ПУБЛИКАТА: А struct. 854 00:39:09,710 --> 00:39:10,626 Дејвид MALAN: А struct. 855 00:39:10,626 --> 00:39:14,310 Потсетиме од минатата недела, ќе воведе struct, овој релативно едноставни клучни зборови 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 Тоа доаѓа со int и плови и знак и такви, но тоа не доаѓа со студентот, 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 но клучен збор, која што е важно е само фактот што рековме struct 864 00:39:33,300 --> 00:39:37,590 а потоа ние го нарече ученик и во внатрешноста на студентот е име и куќа 865 00:39:37,590 --> 00:39:39,390 или dorm или слично. 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 доби двете int и еден покажувач, знаеш што, јас сум 869 00:39:48,440 --> 00:39:51,540 ќе се изјасни за struct нарекува јазол. 870 00:39:51,540 --> 00:39:55,630 Јас сум исто така, во него, требаше да се каже дека еден јазол, овој правоаголник, има int 871 00:39:55,630 --> 00:39:59,730 и ние ќе го наречеме n и тоа што има следниот покажувач. 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 Тоа не е само за да се укажува на int сама за себе. 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 дека еден јазол, ние треба да се каже, ќе содржи int n наречен 880 00:40:26,270 --> 00:40:31,070 и покажувач наречен следната и тип на структура на податоци на која 881 00:40:31,070 --> 00:40:35,770 дека покажувачот поени е очигледно ќе биде struct јазол. 882 00:40:35,770 --> 00:40:41,550 >> Значи ова е annoyingly опширниот и само за да бидат педантни, 883 00:40:41,550 --> 00:40:44,100 Затоа не можеме да само да го кажам ова, која искрено 884 00:40:44,100 --> 00:40:46,860 изгледа многу повеќе може да се чита, е затоа што се потсетиме дека C прочита 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 структура, ние треба да го направите ова, каде што велиме struct јазол на врвот, која 889 00:41:02,120 --> 00:41:06,770 ни дава повеќе начин на опишување на овој работа, а потоа внатре велиме struct јазол, 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 користење на клучни зборови struct заедно. 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 >> Па ако претпоставиме сега можеме да се спроведување на оваа работа во C, 896 00:41:25,010 --> 00:41:28,040 како тоа го правиме, всушност, почне traversing ова? 897 00:41:28,040 --> 00:41:32,360 Па, всушност, сите ние треба да направите е iterate од лево кон десно и само 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 Дејвид MALAN: Давид. 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 Некој друг би сакале да forcefully-- Качи. 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 Дејвид MALAN: А ти си? 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 Дејвид MALAN: Тејлор. 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 Кажеш да започнете со mallocing 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 Дејвид MALAN: Виножито? 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 Бр 981 00:44:17,150 --> 00:44:19,060 Е 55 помалку од 17? 982 00:44:19,060 --> 00:44:19,720 Бр 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 Дејвид MALAN: Значи меѓу Тејлор левата рака и рацете Виножито тука, 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 >> Дејвид MALAN: Токму така. 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 TIFFANY: Тифани. 1013 00:45:15,490 --> 00:45:16,000 Дејвид MALAN: Жал ми е? 1014 00:45:16,000 --> 00:45:16,470 TIFFANY: Тифани. 1015 00:45:16,470 --> 00:45:16,880 Дејвид MALAN: Тифани. 1016 00:45:16,880 --> 00:45:17,110 Во ред. 1017 00:45:17,110 --> 00:45:19,071 Тифани е malloced со вредност 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 >> Дејвид MALAN: Џејк. 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 >> Дејвид MALAN: Започнете со најлева. 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 >> Дејвид MALAN: Во ред. 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 Дејвид MALAN: Во ред. 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 Дејвид MALAN: Совршен, освен Binky е главата само вид на паѓале, нели? 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 Дејвид MALAN: Ништо не е што укажува на Џејк сега. 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 Дејвид MALAN: Не можам се добие дека се блиску до тебе. 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 >> Дејвид MALAN: Во ред. 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 но тоа е во ред, бидејќи сега, второто чекор, ние може да го ажурира страна на David 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 >> Дејвид MALAN: Ерик? 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 Бр 1083 00:47:21,530 --> 00:47:22,160 Помалку од девет? 1084 00:47:22,160 --> 00:47:22,410 Бр 1085 00:47:22,410 --> 00:47:23,050 Помалку од 17? 1086 00:47:23,050 --> 00:47:23,550 Бр 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 Дејвид MALAN: Сју. 1091 00:47:26,880 --> 00:47:27,379 Алекс: Алекс. 1092 00:47:27,379 --> 00:47:28,790 Дејвид MALAN: Сју, Алекс, а? 1093 00:47:28,790 --> 00:47:29,290 Ерик: Ерик. 1094 00:47:29,290 --> 00:47:30,120 Дејвид MALAN: Ерик. 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 Добро. 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 Дејвид MALAN: Да. 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 Значи, ако сте се сведува на Јадење сала Mather неодамна, 1144 00:49:20,920 --> 00:49:23,320 што ќе се сетите дека нивните Купишта на коцки, како таков, 1145 00:49:23,320 --> 00:49:26,300 сме ја позајмиле од овие Annenberg пред класа. 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 >> Значи тоа е она што ние би го нарекол во компјутерски науки на податоци структура LIFO. 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 Секој пат кога се чисти пепелниците и стави на freshest оние на врвот, 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 Ако имате приказ на случај млеко и секој пат кога CVS 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 Ако сте еден од оние луѓе кои сака да се редат надвор од Apple продавници 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 Тоа не е LIFO. 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 Тоа е, наместо FIFO. 1188 00:51:24,280 --> 00:51:26,110 Прв дојден, прв надвор. 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 слично како приказ на случај Mather е може да ја ограничи големината на магацинот, 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 Види ya тогаш. 1219 00:52:49,045 --> 00:52:53,704 >> [Музички] 1220 00:52:53,704 --> 00:56:08,448