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 David J. малая: Добра. 4 00:00:11,650 --> 00:00:15,610 Гэта CS50, і гэта гэта канец чацвёртага тыдня. 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 Прама зараз свету ў трох і Breakout, на наступным тыдні, 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 калі я працаваў на мясцовай Графства Middlesex акруговага пракурора 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 -OK. 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 >> -wait Хвіліну. 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 >> -OK. 37 00:01:18,376 --> 00:01:18,875 Замарожванне што. 38 00:01:18,875 --> 00:01:20,160 -Tighten На што, ці не так? 39 00:01:20,160 --> 00:01:22,126 >> -векторных У на што Хлопец на заднім коле. 40 00:01:22,126 --> 00:01:24,435 >> -Zoom У прама тут, на гэтым месцы. 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 >> -Enhance Раздзел A6. 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 >> -I Узмацняецца адлюстраванне ў яе вачах. 53 00:01:42,559 --> 00:01:44,322 -Давай Запусціць гэта праз паляпшэння відэа. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, Можа вы зможаце палепшыць гэта? 55 00:01:45,210 --> 00:01:45,710 >> -hang На. 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 -Zoom У на люстэрку. 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 -Zoom На дзверы. 74 00:02:06,470 --> 00:02:06,970 Шрыфт Times 10. 75 00:02:06,970 --> 00:02:08,009 -Zoom. 76 00:02:08,009 --> 00:02:08,509 -Move В. 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 -Stop. 80 00:02:10,750 --> 00:02:11,250 -PAUSE Яго. 81 00:02:11,250 --> 00:02:13,542 -rotate Нам 75 градусаў па вертыкалі, калі ласка. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> -Stop. 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 >> Каб навесьці правы Спалучэнне algorithms-- 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 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 Enhance. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 -Freeze І павышэння. 97 00:02:40,070 --> 00:02:43,420 [END ВИДЕОВОСПРОИЗВЕДЕНИЕ] 98 00:02:43,420 --> 00:02:45,830 David J. малая: Такім чынам, гэта усе словы, але яны не былі 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 Гэта ўласны Daven CS50 ст. 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 І сапраўды, у вочы Daven ў з'яўляецца, але чатыры, можа, шэсць пікселяў 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 I / O гэта проста мудрагелісты спосаб кажучы ўваход і выхад. 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 Ну, то, як JPEG. 124 00:03:48,105 --> 00:03:50,520 Гэта вобраз, які вы маглі б ёсць або загрузіць на Facebook, 125 00:03:50,520 --> 00:03:51,690 ці ўбачыць у любым месцы сеткі. 126 00:03:51,690 --> 00:03:54,460 На самай справе, што фота мы проста піла Daven быў JPEG. 127 00:03:54,460 --> 00:03:57,570 І што цікава аб файлах, як у фармаце JPEG 128 00:03:57,570 --> 00:04:02,170 у тым, што яны могуць быць ідэнтыфікаваныя, Як правіла, з дапамогай пэўных шаблонаў бітаў. 129 00:04:02,170 --> 00:04:05,200 >> Іншымі словамі, тое, што гэта такое, што адрознівае JPEG з GIF 130 00:04:05,200 --> 00:04:08,109 ад PING ад слова дакумент з файла Excel? 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 >> Так што, калі ваш кампутар адкрывае Слова док, або калі кампутар адкрывае JPEG, 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 Ці, о, гэта выглядае як дакумент Word. 138 00:04:27,870 --> 00:04:30,480 Дазвольце мне паказаць яго карыстальніку ў выглядзе эсэ. 139 00:04:30,480 --> 00:04:33,020 >> Так, напрыклад, у фармаце JPEG, аказваецца, з'яўляюцца 140 00:04:33,020 --> 00:04:35,460 даволі складаны пад капотам. 141 00:04:35,460 --> 00:04:40,140 Але першыя тры байта амаль кожны JPEG пачаць з гэтых трох лікаў. 142 00:04:40,140 --> 00:04:44,680 Так байт нуль, адзін і два, у Найбольш кожны JPEG, 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 на самай справе тыкаць пад капот файлаў як у фармаце JPEG 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, , B, C, D, E, F, толькі па пагадненні. 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 Такім чынам, што ж JPEG выглядаць, калі вам былі выпісаць тыя першыя тры 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 Так што, калі я пішу з біты, ўяўляюць гэтыя дзесятковую numbers-- 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 David J. малая: Гэта 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, Я збіраюся напісаць, што ў HEX, 200 00:07:17,310 --> 00:07:22,311 які, калі вы ўспомніце, калі ў вас ёсць ад нуля да F, што 15 будзе? 201 00:07:22,311 --> 00:07:22,810 АЎДЫТОРЫЯ: ф. 202 00:07:22,810 --> 00:07:24,434 David J. малая: Вось і атрымліваецца, што гэта ф. 203 00:07:24,434 --> 00:07:29,140 І вы можаце працаваць, што, кажучы, добра, калі гэта 10, то ОК, F 15. 204 00:07:29,140 --> 00:07:33,250 Так сапраўды, мы можам перапісаць гэта ж набор лікаў, як F F. 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 А потым, у нас ёсць яшчэ пара F F гадоў. 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 >> А потым, вы паклалі дзве лічбы, F е ў дадзеным выпадку, то г, то F F. 215 00:08:04,210 --> 00:08:06,700 Так карацей кажучы, шаснаццатковае проста імкнецца 216 00:08:06,700 --> 00:08:11,990 каб быць карысным, таму што кожны з яго лічбы, ад нуля да F, выдатна лініі 217 00:08:11,990 --> 00:08:13,880 з узорам з чатырох бітаў. 218 00:08:13,880 --> 00:08:18,080 >> Так што калі ў вас ёсць два шаснаццатковых лічбаў, ад нуля да F, зноў і зноў, 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 >> Цяпер у фармаце JPEG не толькі фарматаў файлаў для графікі. 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 >> Так што гэта было на самай справе усталяваны ў Windows XP 227 00:08:37,580 --> 00:08:39,960 на мільёнах ПК па ўсім свеце. 228 00:08:39,960 --> 00:08:43,000 І гэта быў файл растравыя, BMP. 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 >> Так што цікава, хоць, пра гэта файле фармату, BMP, з'яўляецца 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 І вы ўбачыце, што гэта ў P набору. 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 >> Зараз Microsoft, Аўтар гэтага фармату, 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 Але вы ўбачыце, што ў P Усталяваць чатыры. 246 00:09:26,740 --> 00:09:31,450 >> Але гэта толькі сказаць, што калі ў чалавека двойчы пстрыкае некаторы .BMP файл на яго 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 пашырэнне .BMP файл у імя файла, 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 Выкажам здагадку, тут у GEdit, я проста ёсць пачатку 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 Цяпер у мяне ёсць include "structs.h", але Я вярнуся да таго, што ў адзін момант. 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 І я проста хачу, каб, выкарыстоўваючы GetString, Імя кожнага студэнта і дом, 268 00:10:25,350 --> 00:10:26,600 а затым проста раздрукаваць тыя з. 269 00:10:26,600 --> 00:10:28,630 >> Гэта накшталт як Week Адзін, Тыдзень Дзве рэчы зараз, 270 00:10:28,630 --> 00:10:30,810 дзе я проста хачу для цыкл або нешта падобнае. 271 00:10:30,810 --> 00:10:34,500 І я хачу назваць GetString некалькі раз, а затым раздрукаваць е некалькі разоў. 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 >> А цяпер, я мог бы зрабіць нешта падобнае для (INT I = 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 І потым, не імёны але дома дужкі I. 287 00:11:26,480 --> 00:11:29,930 Я раблю гэта, GetString, і хай мне вярнуцца і выправіць гэтую лінію. 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 скажам, надрукаваць гэтыя рэчы out-- так TODO пазней. 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 і, можа быць, галоўная, і можа быць, ручка Twitter, 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 Int IDS студэнтаў. 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 не як Int або радкі, а нешта высокі ўзровень, абстракцыя, так 315 00:12:45,600 --> 00:12:47,570 казаць, вядома як студэнт? 316 00:12:47,570 --> 00:12:50,220 C не прыйшоў з убудаваным Функцыянальнасць для студэнтаў, 317 00:12:50,220 --> 00:12:52,260 але што, калі я хацеў даць гэта такое? 318 00:12:52,260 --> 00:12:55,640 >> Ну, атрымліваецца, што я збіраюся адкрыць файл з імем structs.h тут, 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 А пад капотам P ўсталяваць тры, Вы ўжо рабілі гэта цяпер. 322 00:13:01,490 --> 00:13:05,920 Там няма такога паняцця, як г прамавугольніка або г авальныя на мове праграмавання C. 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 Як вы атрымліваеце на імя, і дом, і ID, 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 >> Такім чынам, у P ўсталяваць тры, калі вы яшчэ працуем над гэтым, 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 і іншыя рэчы, якія, здаецца, не прыходзяць з Week нуль, адзін ці два, 359 00:14:50,201 --> 00:14:52,950 разумею, што гэта таму, што Стэнфардзе заявіў некаторыя новыя тыпы дадзеных. 360 00:14:52,950 --> 00:14:56,160 >> І на самай справе, што гэта менавіта тое, што мы будзем зрабіць, а, у P Усталяваць чатыры, калі 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 Я быў збольшага цікава паглядзець, што шпалеры Microsoft на самай справе 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 >> Таму, калі казаць зараз малюнкаў, давайце вярнуць Daven тут 370 00:15:24,850 --> 00:15:26,890 на экране і Мікалая, і толькі нагадаю, 371 00:15:26,890 --> 00:15:30,540 што калі вы хочаце далучыцца да нас на абед у гэтую пятніцу, з галавы да нашай звычайнай URL 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 >> David J. малая: Займае больш прастору, таму што я выкарыстоўваю зменную, 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 David J. малая: Точно. 395 00:16:13,571 --> 00:16:15,090 Гэта толькі змяняе зменныя лакальна. 396 00:16:15,090 --> 00:16:18,173 Таму што ў любы час вы называеце function-- калі ў мяне быў латкі з Анненберг 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 Што падпампоўкі GET, так мы сцвярджаем? 401 00:16:26,392 --> 00:16:27,100 Аўдыторыя: Копіі. 402 00:16:27,100 --> 00:16:28,090 David J. малая: Так іх копіі. 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 Такім чынам, мы бачым гэта з нашым новы сябар, спадзяюся, GDB, 407 00:16:41,880 --> 00:16:45,180 што вы ці ТФ і СА ёсць быў правядзе Вас да наступных. 408 00:16:45,180 --> 00:16:51,210 >> Дык не падпампоўкі нагадаем выглядае like-- давайце адкрыць это-- выглядае наступным чынам. 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 >> Такім чынам, давайце паглядзім на гэта, хутка цяпло тут з GDB, у ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 Звязка пераважнай інфармацыі, Я пазбавіцца ад з кіравання L цяпер. 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 Ён пабег праграму ўнутры гэтага Праграма называецца GDB, адладчык, 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 Пойдзем да кода і ісці да noswap. 430 00:17:42,960 --> 00:17:46,930 І на самай справе, лінія 16 з'яўляецца Самае першае ў праграме. 431 00:17:46,930 --> 00:17:52,130 >> Так што цяпер, калі я пайду наперад і тып запусціць гэты раз, Enter, гэта зрабіў паўзу. 432 00:17:52,130 --> 00:17:53,080 Так што давайце капацца. 433 00:17:53,080 --> 00:17:55,716 Раздрукаваць x-- чаму х нуля? 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 David J. малая: Точно. 442 00:18:08,060 --> 00:18:11,630 GDB, па змаўчанні, спынілася выкананне непасрэдна перад лініяй 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 >> David J. малая: крыху гучней. 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 David J. малая: Не зусім кансэнсус. 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 N на наступны. 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 Але я не хачу, каб ўразіць гэта тут, таму што, калі I 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 >> David J. малая: крокі. 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 X прыйшоў першым, коска у. 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 >> Так што, калі я вярнуся ў GDB, тэмпература Цяпер адзін і цяпер з'яўляецца адным. 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 >> Так у чым жа карысць ад GDB там? 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 Гэта як Week One, тыдні дзве рэчы цяпер. струны S = GetString. 530 00:21:28,070 --> 00:21:29,700 Зараз, я яшчэ раз кажу тут. 531 00:21:29,700 --> 00:21:31,830 Радок т = GetString. 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 >> Дазвольце мне ісці наперад зараз і ўвядзіце ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Дазвольце мне ісці наперад і то сказаць : Daven і тое: Роб. 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 Так Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 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 >> Таму ў нас ёсць гэтыя дзве лініі Код, GetString выклікаецца двойчы. 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 >> Таму ў нас ёсць такі радок: струны S = GetString. 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 Так што я ведаю, што гэта, выкарыстоўваючы памяць, або RAM, у маім кампутары так ці інакш. 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 >> Ну, GetString відавочна атрымлівае радок ад карыстальніка. 577 00:23:08,700 --> 00:23:11,360 І GetString атрымаў Zamyla або Гейб або Daven. 578 00:23:11,360 --> 00:23:14,640 Так давайце абярэм першы з тых, які быў Daven. 579 00:23:14,640 --> 00:23:19,174 Так эфектыўна, што GetString атрымаў мне ў гэтым першым выпадку быў D - V-е-н. 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 David J. малая: Так, / 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 толькі таму, што байт у ASCII. 594 00:23:53,320 --> 00:23:57,030 Як, чорт вазьмі, мы збіраемся, каб адпавядаць Daven ў гэтай маленькай скрынцы тут? 595 00:23:57,030 --> 00:23:59,880 >> Ну, што ж GetString на самай справе рабіць? 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 але 0x азначае не што іншае чым "гэта шаснаццатковае." 606 00:24:28,200 --> 00:24:31,030 і я збіраюся сцвярджаць, што "D" заканчваецца ў Байт One ў памяці. 607 00:24:31,030 --> 00:24:34,210 >> Я нічога не атрымаў яшчэ адбываецца ў памяці, так Daven атрымаў першае месца 608 00:24:34,210 --> 00:24:35,509 ў Байт One. 609 00:24:35,509 --> 00:24:36,800 Гэта, тое, будзе 0x2. 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 Гэта будзе 0x4. 614 00:24:41,800 --> 00:24:43,025 Гэта будзе 0x5. 615 00:24:43,025 --> 00:24:44,025 Гэта будзе 0x6. 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 як вам, некалькі гадоў таму, будзе рэалізавалі C сабе. 620 00:24:54,960 --> 00:24:58,360 Што такое GetString верагодна returning-- таму што гэта 621 00:24:58,360 --> 00:25:00,946 адчувае, што гэта не вяртанне Daven, па сутнасці, 622 00:25:00,946 --> 00:25:03,320 таму што ён, вядома, не збіраюся каб адпавядаць у гэтым маленькім box-- 623 00:25:03,320 --> 00:25:05,090 так што GetString, верагодна, вяртаецца? 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 >> David J. малая: Размяшчэнне Daven. 627 00:25:10,540 --> 00:25:12,770 І гэта было рабіць гэта з тых часоў тыдні адзін. 628 00:25:12,770 --> 00:25:16,150 Што GetString сапраўды вяртанне не з'яўляецца радком, як такой. 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 Daven жыве ў 33 Оксфард-стрыт. 632 00:25:24,820 --> 00:25:29,310 Але больш коратка, Гэвін жыве на 0x1, Адрас Number One. 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 Калі я кажу, зразумейце мяне Радок, вы дасце мне Daven. 643 00:25:55,630 --> 00:25:57,230 Але вы сапраўды не даюць мне Daven. 644 00:25:57,230 --> 00:25:59,310 Усё, што вам даюць мне гэта адрас Daven ст. 645 00:25:59,310 --> 00:26:04,310 Як мне тады ведаць напэўна дзе Daven пачынаецца і ends-- 646 00:26:04,310 --> 00:26:07,140 гісторыя становіцца weird-- дзе Daven пачынаецца і заканчваецца, 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 >> Ну, калі вы уручаючы мне пачатак Daven, 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 Чаму Zamyla і Zamyla адрозніваецца? 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 >> David J. малая: Проста таму, што яны маюць розныя адрасы. 662 00:26:45,931 --> 00:26:48,820 Таму што, калі вы тэлефануеце GetString зноў, што я буду рабіць хутка тут, 663 00:26:48,820 --> 00:26:52,870 калі гэта другая лінія, радок т, як я зрабіў у гэтай праграме, 664 00:26:52,870 --> 00:26:55,030 роўная іншы званок GetString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 У наступны раз я называю GetString, я збіраюся 667 00:26:58,670 --> 00:27:00,190 каб атрымаць іншы ўчастак памяці. 668 00:27:00,190 --> 00:27:02,220 >> GetString дапускаецца прасіць аперацыйныя 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 D супраць гэтага і супраць гэта і V супраць гэтага. 675 00:27:17,880 --> 00:27:19,588 Ты параўноўваеш гэта ад гэтага, якая 676 00:27:19,588 --> 00:27:24,020 адкрыта даволі useful-- useless-- даволі бескарысна, таму што, хто сапраўды 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 вы зрабілі, калі ў класе CS50, і трэба было рэалізаваць 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 David J. малая: Выдатна. 694 00:28:01,670 --> 00:28:02,900 АЎДЫТОРЫЯ: [неразборліва] 695 00:28:02,900 --> 00:28:03,310 David J. малая: Так. 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 >> Аказваецца, гэта функцыя, якая пастаўляецца з C, мэта якога ў жыцці 711 00:28:43,046 --> 00:28:44,650 з'яўляецца для параўнання двух радкоў. 712 00:28:44,650 --> 00:28:48,300 І змяшаць параўноўваць, калі мы чытаем яго Чалавек старонкі або дакументы або CS50 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 David J. малая: Так, больш ці менш. 722 00:29:05,570 --> 00:29:08,640 Так што калі вы хочаце адсартаваць цэлае куча радкоў у dictionary-- 723 00:29:08,640 --> 00:29:12,975 як мы ў канчатковым выніку ўніз road-- Выдатная функцыянальнасць ў выкарыстанні патэнцыйна, 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 Char *. 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 >> Іншымі словамі, у CS50.h і як мы будзем у канчатковым рахунку бачыць, 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 Ну, тое, што я сказаў, сімвал *, а не INT * ці плаваць *, 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 GetString і захаваць значэнне ў с. 753 00:30:34,190 --> 00:30:38,800 >> І потым, чаму я гэта раблю, проста як напамін ад тыдня мінулым? 754 00:30:38,800 --> 00:30:40,960 Мы сапраўды казалі, што GetString часам вяртае нуль. 755 00:30:40,960 --> 00:30:42,793 Што гэта значыць, калі GetString вяртае нуль? 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 Або ў Mac або ПК, проста падахвочванні кампутара павесіць 766 00:31:08,360 --> 00:31:10,340 ці праграма для замарожвання, патэнцыйна. 767 00:31:10,340 --> 00:31:14,930 >> Так што цяпер, я сцвярджаю, у капіявання 0.c, што I буду капіяваць гэтыя радкі шляхам 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 Я тэлефаную наш стары сябар STRLEN. 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 David J. малая: першы сімвал т. 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 Што радок T = S сапраўды робіш? 791 00:32:09,040 --> 00:32:16,430 Калі ў нас ёсць на левай руцэ бок тут радок T = S; 792 00:32:16,430 --> 00:32:19,400 што дае мне адну скрынку тут і адна скрынка тут. 793 00:32:19,400 --> 00:32:25,530 І выкажам здагадку, гэты адрас 0x, скажам, 50 на гэты раз, адвольна. 794 00:32:25,530 --> 00:32:28,847 Што радок T = S зрабіць пад капотам? 795 00:32:28,847 --> 00:32:30,340 >> АЎДЫТОРЫЯ: [неразборліва] 796 00:32:30,340 --> 00:32:34,100 >> David J. малая: Ён захоўвае памяць звярнуцца туды, так 0x50 ідзе туды. 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 Таму што, калі адрас 0x50-- і проста, я няма шмат месца на борце тут, 802 00:32:47,680 --> 00:32:51,750 але выказаць здагадку, што гэта 0x50 сюды, дзе-то ў памяці майго кампутара. 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 >> David J. малая: сапраўды такі ж рэчы. 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, а затым ./copy-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 >> Так як жа мы пачынаем address-- ня каламбур intended-- 820 00:33:36,470 --> 00:33:39,270 як мы прыступіць да вырашэння гэта адмысловая праблема? 821 00:33:39,270 --> 00:33:44,400 Ну, у copy1.c, справы ідуць каб атрымаць крыху больш складана. 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 але калі праблема ў тым, што проста рабіць T = S за ўсё 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 >> David J. малая: Так. 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 Калі гэта струны S = GetString. 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 Гэта GetString. 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 G-A-B-е / 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 І з таму, мы называем гэта 0x50, і што будзе 51, 52. 848 00:34:53,650 --> 00:34:54,409 >> Так што гэта 0x50. 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 David J. малая: Так, мы неабходна запоўніць гэты прабел. 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 >> Як папрасіць аперацыйную сістэму не толькі для прасценькай pointer-- 867 00:35:36,080 --> 00:35:38,530 як гэта называецца, адрас, pointer-- ня 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 Да гэтага часу, я толькі атрымаў свае словы назад ўскосна шляхам выкліку GetString. 871 00:35:48,430 --> 00:35:50,740 Такім чынам, як GetString нават атрымліваючы сваю памяць? 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 Цяпер, гэта выглядае нашмат больш, загадкавае than-- і я адзіны, хто можа бачыць it-- 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 >> StrLen з х, вядома, уяўляе the-- 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 David J. малая: Проста Колькасць знакаў у с. 899 00:36:56,710 --> 00:36:59,040 Такім чынам, даўжыня з, зыходная радок. 900 00:36:59,040 --> 00:37:00,350 Такім чынам, G-A-B-E. 901 00:37:00,350 --> 00:37:02,320 Так што гэта, верагодна, чатыры ў дадзеным выпадку. 902 00:37:02,320 --> 00:37:05,485 Чаму я раблю 1 пасля называючы STRLEN з х? 903 00:37:05,485 --> 00:37:06,360 АЎДЫТОРЫЯ: [неразборліва] 904 00:37:06,360 --> 00:37:07,590 David J. малая: Для гэтага спецыяльны пусты знак. 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 CS50 прыбор, дзе памер гольца 910 00:37:24,610 --> 00:37:26,350 можа адрознівацца з майго ўласнага computer-- 911 00:37:26,350 --> 00:37:30,590 Атрымліваецца, што я магу назваць гэта Аператар SizeOf, проста спытаць кампутар, 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 І гэта будзе return-- гэта function-- так што 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 David J. малая: адрас і што? 921 00:37:53,709 --> 00:37:55,250 АЎДЫТОРЫЯ: З памяці гэта выдзелена? 922 00:37:55,250 --> 00:37:56,450 David J. малая: З памяці гэта выдзелена. 923 00:37:56,450 --> 00:37:59,189 Так што я паняцця не маю ,, шчыра кажучы, дзе гэта будзе ў канчатковым выніку. 924 00:37:59,189 --> 00:38:01,480 Я збіраюся прапанаваць, што гэта будзе ў канчатковым выніку на 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Цалкам адвольна, але дзе акрамя 0x50, 927 00:38:06,009 --> 00:38:08,800 Так як аперацыйная сістэма, што Вокны і Mac OS зрабіць для мяне, з'яўляецца 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 Дык гэта тое, што трапляе ў тут, 0x88. 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 мы, як правіла, пісаць, як 0x то. 949 00:39:15,350 --> 00:39:18,590 >> Але гэта ўсяго толькі лік, як 33 Оксфард-стрыт, 950 00:39:18,590 --> 00:39:20,530 якія, здараецца, Адрас CS будынка. 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 >> David J. малая: Чаму мы праверыць т роўны нулю? 957 00:39:30,740 --> 00:39:33,250 Калі мы чытаем documentation-- вялікі question-- для Таноса, 958 00:39:33,250 --> 00:39:37,020 ён збіраецца сказаць дробным шрыфтам, часам Таноса можа вярнуцца нуль, 959 00:39:37,020 --> 00:39:38,080 як GetString. 960 00:39:38,080 --> 00:39:41,820 І на самай справе, GetString вяртае нуль Калі, у сваю чаргу, вяртае нуль Таноса, 961 00:39:41,820 --> 00:39:43,130 таму GetString выкарыстоўвае Таноса. 962 00:39:43,130 --> 00:39:46,400 >> І што можа здарыцца, калі АС, Mac OS, Windows, незалежна, проста 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 >> Цяпер раздражняльна, Аўтары C вырашана выкарыстоўваць 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 з маленькай Gabe? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 з гэта адрас of-- 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 David J. малая: З арыгінальнага назвы Гейба. 995 00:41:14,126 --> 00:41:16,660 Так што гэта адрас гэта кавалак памяці. 996 00:41:16,660 --> 00:41:22,220 Так што, калі я кажу, т + i-- я, заўважце, проста наш стары сябар. 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 Лік, таму што яны ўсё Нумары, якія мы былі чарцёжныя як HEX. 1004 00:41:42,480 --> 00:41:43,560 Але яны проста лічбы. 1005 00:41:43,560 --> 00:41:49,960 >> Такім чынам, калі адрас т мы сказалі быў 0x88, што 0x88 плюс нуль. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Нават калі вас не задавальняе з HEX яшчэ, зрабіць здагадку. 1008 00:41:53,980 --> 00:41:54,410 >> АЎДЫТОРЫЯ: Арыгінальны. 1009 00:41:54,410 --> 00:41:55,850 >> David J. малая: Яшчэ 0x88. 1010 00:41:55,850 --> 00:41:58,910 Такім чынам, што ж * 0x88 азначае? 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 S + I азначае S, якое з'яўляецца звярнуцца сюды з маленькага г. 1014 00:42:11,586 --> 00:42:16,220 S + 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 а затым паабяцаў Claymation, што зробіць усё ў парадку. 1028 00:42:57,480 --> 00:42:57,980 Добра. 1029 00:42:57,980 --> 00:43:01,680 Такім чынам, дазвольце мне адкрыць up-- там мы ідзем. 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 0x50, 0x88, там, дзе гэта ў памяці, адрас ісці туды. 1046 00:43:38,340 --> 00:43:40,200 І вось што ў ёсць будзе, а. 1047 00:43:40,200 --> 00:43:44,920 >> Калі я зараз кажу х = Таноса (SizeOf (INT)), гэта мудрагелісты спосаб сказаць, 1048 00:43:44,920 --> 00:43:49,000 эй аперацыйная сістэма, з дапамогай Таноса, даць мне дастаткова памяці для памеру 1049 00:43:49,000 --> 00:43:52,370 з Int, які, верагодна, будзе 32 біта ці чатыры байта. 1050 00:43:52,370 --> 00:43:53,680 >> Такім чынам, што ж Таноса вярнуцца? 1051 00:43:53,680 --> 00:43:55,250 Malloc вяртае адрас. 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 >> David J. малая: Да гэтага адрасе. 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 David J. малая: 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 David J. малая: Там няма памяці для у. 1072 00:44:35,710 --> 00:44:38,215 Такім чынам, што ж у верагодна ўтрымліваюць, як мы казалі? 1073 00:44:38,215 --> 00:44:38,520 >> АЎДЫТОРЫЯ: Garbage. 1074 00:44:38,520 --> 00:44:39,480 >> David J. малая: Некаторыя значэнне смецця. 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 >> Так інтра, затым, каб Binky гэта. 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 давайце канчатковы выгляд у нашай Апошнія тры хвіліны тут у Binky, 1096 00:45:35,360 --> 00:45:37,675 ад нашага сябра, Ніка Parlante з Стэнфорда. 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 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 Гэты код вылучае два паказальніка, якія могуць паказваць на цэлых лікаў. 1108 00:45:57,930 --> 00:45:58,430 -OK. 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 Рэчы, якія яны паказваюць на называюцца pointees, і іх стварэнні гадоў 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 У pointees паасобныя. 1117 00:46:12,385 --> 00:46:14,315 Э-э, так як у такім выпадку размеркаваць pointee? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 Ну, гэты код вылучае новы цэлае pointee, 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 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 Я буду разыменовать паказальніка х да захаваць нумар 42 у яго pointee. 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 That-- гэта выдатна. 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 Я проста ўсталяваць колькасць і [POP] 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 >> -так Рабіць разнаймення на х наступным чынам стрэлкай для яго pointee. 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 >> -OK. 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 наладзе pointee асобны крок. 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 Мы вылучылі паказальніка у, але мы ніколі не ўсталяваць яго, каб паказаць на pointee. 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 Вы можаце гэта выправіць, так што ў пункту да таго ж pointee як х? 1156 00:47:33,400 --> 00:47:34,000 >> -Вядома. 1157 00:47:34,000 --> 00:47:36,780 Я буду выкарыстоўваць свой Magic Wand з Pointer уступцы. 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 Гэта не тычыцца pointees. 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 Ён мае pointee. 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 Вось ён ідзе. [POP] 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 І таму, што паказальнікі абмену што адной pointee, яны абодва ўбачыць 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 >> -But-- 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 і гэта паказвае больш да pointee. 1182 00:48:18,680 --> 00:48:20,640 Але ўказальнік і pointee паасобныя, 1183 00:48:20,640 --> 00:48:22,610 і распаўсюджаная памылка з'яўляецца стварэнне паказальнік, 1184 00:48:22,610 --> 00:48:25,000 але забыцца даць яму pointee. 1185 00:48:25,000 --> 00:48:28,170 >> Нумар Два, разнаймення паказальніка пачынаецца з паказальнікам 1186 00:48:28,170 --> 00:48:31,050 і наступным яго стрэлку над каб атрымаць доступ да яго pointee. 1187 00:48:31,050 --> 00:48:33,400 Як мы ўсе ведаем, гэта працуе толькі, калі ёсць 1188 00:48:33,400 --> 00:48:36,270 pointee, які выгляд вяртаецца да Правіла нумар адзін. 1189 00:48:36,270 --> 00:48:39,000 >> Нумар Тры, паказальнік прысвойванне аднаго паказальніка 1190 00:48:39,000 --> 00:48:42,320 і змяняе яго, каб паказаць на ж pointee як іншы паказальнік. 1191 00:48:42,320 --> 00:48:44,160 Такім чынам, пасля выканання задання, два паказальніка 1192 00:48:44,160 --> 00:48:45,910 будзе паказваць на той жа pointee. 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 [END ВИДЕОВОСПРОИЗВЕДЕНИЕ] 1197 00:48:51,110 --> 00:48:52,568 David J. малая: Вось менавіта для CS50. 1198 00:48:52,568 --> 00:48:55,110 Мы будзем бачыць вас на наступным тыдні. 1199 00:48:55,110 --> 00:48:56,064