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