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