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 Девід Дж Малан: Це як першокурсник семінар сьогодні. 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 Так що, якщо ви коли-небудь спостерігав Телевізор або кіно, в якому 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 -Добре, Тепер давайте отримати хороший погляд на вас. 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 >> -Почекай хвилинку. 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 -Добре, Що заморозити. 29 00:01:13,558 --> 00:01:14,820 -Tighten На що, чи не так? 30 00:01:14,820 --> 00:01:16,530 -векторних У тому, що на хлопець із заднього колеса. 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 >> -Я Посилюється деталі, і-- я думаю, що є 40 00:01:33,642 --> 00:01:35,433 достатньо, щоб підвищити, відпустіть її, щоб мій екран. 41 00:01:35,433 --> 00:01:37,080 -Я Посилюється відображення в її очі. 42 00:01:37,080 --> 00:01:38,830 >> -Давай Це запустити це через поліпшення відео. 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 >> -Я Працюю на цьому відображенні. 46 00:01:44,010 --> 00:01:44,995 >> Відображення -Someone в. 47 00:01:44,995 --> 00:01:45,495 -відображення. 48 00:01:45,495 --> 00:01:47,399 -Є Є відображенням обличчя людини. 49 00:01:47,399 --> 00:01:48,065 -The Відображення. 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 -Постой На секунду, я підвищення. 60 00:02:00,050 --> 00:02:00,924 -zoom На двері. 61 00:02:00,924 --> 00:02:01,700 -кратного 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 Почекай, стоп. 66 00:02:04,690 --> 00:02:05,190 -Stop. 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 -Stop. 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 >> Гей, може бути, ми можемо використовувати Прадіпа Метод вересня бачити у вікна. 73 00:02:18,776 --> 00:02:20,372 -Це Програмне забезпечення стан мистецтва. 74 00:02:20,372 --> 00:02:21,845 >> -The Власне вимкнений. 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 >> [КІНЕЦЬ ПЕРЕГЛЯДУ] 84 00:02:37,180 --> 00:02:41,160 >> Девід Дж Малан: Гаразд, всі ті слова, насправді. 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 модні речі, як власні, і г-вісь, 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 І це те, що є звані пікселів, Р-І-Х-E-L-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 або РК-телевізори, якщо у вас є одним у вашому номері або вдома, 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 >> Таким чином, в завдання Набір 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 Колір, вірно? 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 Девід Дж Малан: Ще біт, ага більше даних, більше біт. 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, і дійсно, в задачі Набір 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 Виявляється, що перший три байти в image-- JPEG 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 з деякими моделями 0 і 1, так що Windows, і Mac OS, і прошивкою, 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 через F, де F представляє те, що десяткове число, як швидко розсудливість 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, 1с і і десятковій, 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 і просто ці моделі 0 і 1. 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, це 1 111, який чотири біта. 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 а що відбувається , Метою яких вибачте, в двійковому, 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 У нас є ще один F є, більше того там два. 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 збирається почати шукати в задачі Набір 4 this-- 243 00:10:18,990 --> 00:10:22,120 і проблема Набір 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 і Ден впроваджує в 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 в 0 і 1, в кінцевому рахунку ,. 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 і 1 під капотом. 277 00:12:00,130 --> 00:12:02,970 І люди вирішили те, що конвенції є, 278 00:12:02,970 --> 00:12:08,340 Які моделі 0 і 1 представляють Слово файл в порівнянні файл 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 Це насправді хороший переходити в даний час в С, який має тільки пару 283 00:12:18,012 --> 00:12:20,220 З додаткових функцій, які ми не дивилися на. 284 00:12:20,220 --> 00:12:24,230 Це досить маленький мову і один з симпатичні риси о С є структурою. 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 >> Девід Дж Малан: Так, вибачте. 296 00:12:50,200 --> 00:12:50,660 >> АУДИТОРІЯ: Вік. 297 00:12:50,660 --> 00:12:52,980 >> Девід Дж Малан: вік або день народження те ж саме, так. 298 00:12:52,980 --> 00:12:53,557 Що ще? 299 00:12:53,557 --> 00:12:54,390 АУДИТОРІЯ: Ідентифікаційний номер? 300 00:12:54,390 --> 00:12:57,460 Девід Дж Малан: Так ідентифікаційний номер, може бути, номер телефону, може бути, гуртожиток, або будинок, 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 Ми могли б мати програму так, щоб має, скажімо, INT основний (порожнечу). 306 00:13:15,670 --> 00:13:18,920 І якщо я хочу, щоб представляти студент, я міг би, наприклад, 307 00:13:18,920 --> 00:13:24,330 рядок називається ім'я для цього студента, рядок називається гуртожитки для цього студента, 308 00:13:24,330 --> 00:13:26,900 може бути, INT називається ID для цього студента. 309 00:13:26,900 --> 00:13:30,840 І тому, що я використовую рядок, я потрібно повернутися і поставити 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 INT id2. 321 00:14:04,190 --> 00:14:06,540 І ми зробили пішов по цій дорозі до 322 00:14:06,540 --> 00:14:10,890 і яке ж було наше рішення, що, здається, щоб бути свого роду хаком пасти копіювання 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 Девід Дж Малан: Так, ми могли б використовувати масив. 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 А ви, людина, повинні мати відстежувати, що ОК 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 >> Чому я не можу просто оголосити змінну називається студентом і називають це S. 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 Студенти, усередині яких є ім'я, є ідентифікатором, є гуртожиток, 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 >> Так С має цю функцію під назвою структура. 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 Виявляється - і це одна навіть простіше, ніж той, за участю ідентифікатор 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, CHAR і і плавати і всі ці інші, які існують, 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 Девід Дж Малан: Це актуально, що? 384 00:16:59,350 --> 00:17:00,559 АУДИТОРІЯ: Це в IDE. 385 00:17:00,559 --> 00:17:02,475 Девід Дж Малан: Так, що в моїй фактичної IDE. 386 00:17:02,475 --> 00:17:05,690 І давайте не будемо зупинятися на IDE, так як це просто інструмент, який я використовую. 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 Я не просто мати доступ до Int, і символ, і поплавок, і рядок, 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 три різні студентів в моїй програмі, я 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, перш ніж, і ніколи не використовував структур? 427 00:18:55,130 --> 00:18:55,510 Так? 428 00:18:55,510 --> 00:18:56,417 >> Аудиторія: .name. 429 00:18:56,417 --> 00:18:57,500 Девід Дж Малан: The .name. 430 00:18:57,500 --> 00:19:01,220 Але це не надто багато стрибком, тому що тепер студенти дужки I 431 00:19:01,220 --> 00:19:02,590 дає I-й студент. 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 >> Девід Дж Малан: Так, точно, це новий спосіб 447 00:19:44,530 --> 00:19:46,370 що ми бачимо два, Ще одна особливість C, 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 до цієї нової функції, званої е відкритий для відкритого файлу є ш. 467 00:20:37,700 --> 00:20:39,430 Що ж, можливо, позначають? 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 >> Девід Дж Малан: Це дозволяє Ви пишете у файл. 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 Якщо ви хочете написати в Файл, ви використовуєте цитату кінець цитати "ж". 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 Якщо Printf просто роздрукувати отформатированную рядок, 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 Девід Дж Малан: Роздрукуйте отформатированная рядок у файлі. 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 Тоді ми просто повинні формат рядок, як Printf. 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 Якщо я друкую Ls в моєму каталозі, зауважити, що я не 503 00:22:04,380 --> 00:22:09,360 є файл з ім'ям students.csv, просто не існує, не існує. 504 00:22:09,360 --> 00:22:14,965 Так що, якщо зараз я скомпілювати цю програму, зробити Структури 1 ,. / Структури-1, 505 00:22:14,965 --> 00:22:20,570 і я збираюся йти вперед і ввести в Енді, який живе в Берклі в Єльському університеті. 506 00:22:20,570 --> 00:22:26,350 Ми збираємося, щоб мати Роба, який живе в Тайер в ці дні. 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 Але якщо я типу Ls зараз, є 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 >> Девід Дж Малан: Хороший вопрос. 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 Ви б використовувати цитату кінець цитати "а" для Append, 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 >> Девід Дж Малан: Ах, гарне питання. 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 ОК, ну, що нового? 569 00:25:00,370 --> 00:25:02,920 ОК, близько. 570 00:25:02,920 --> 00:25:04,750 Це було чарівно. 571 00:25:04,750 --> 00:25:07,280 Добре, тепер у нас є, щоб оновити. 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, або чисел, або те, що програма. 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 відбувається знову тут Вогню і Лід в Кембриджі, Ситар в Нью-Хейвені. 584 00:25:38,150 --> 00:25:43,150 Зареєструватися на сайті CS50s якнайскоріше приєднатися до студентам і співробітникам 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, якщо Я перекомпілювати програму понеділок 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 Девід Дж Малан: Вірно. 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 Перша називалася років, другий був викликаний 616 00:27:03,950 --> 00:27:08,530 т, що конкретно я був Порівняння тут, на лінії 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 >> Девід Дж Малан: Точно, я був Порівнюючи місце в пам'яті 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 >> Девід Дж Малан: Так, давайте перебору рядка. 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 Девід Дж Малан: Так, зворотний слеш нулю, і в цей момент в будь-якому рядки 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.c робить. 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 Девід Дж Малан: адреса, адреса адресу першого символу 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 адресу, але Н-У-Л-Л, що знову-таки, 672 00:29:35,510 --> 00:29:36,990 деякі особливе значення? 673 00:29:36,990 --> 00:29:37,890 >> АУДИТОРІЯ: Помилка. 674 00:29:37,890 --> 00:29:38,600 >> Девід Дж Малан: Це помилка. 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 >> Тепер з'ясовується, С поставляється з Функція, яка робить цю ітерацію. 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 І справді, якщо ми позбудемося помилки перевірки, як це виглядає тиждень 1 коду 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 і копіювання S в нього. 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 >> Девід Дж Малан: Рівне, т стає адреса с. 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 за меншою вартістю з, те, що отримує зберігається тут не буде мама 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 Я стверджую, з моєї Printf, я збирається отримати вигоду копіювання т. 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 >> АУДИТОРІЯ: м? 746 00:33:06,514 --> 00:33:08,722 Девід Дж Малан: Це виглядає як це копіювання який? 747 00:33:08,722 --> 00:33:09,486 АУДИТОРІЯ: м. 748 00:33:09,486 --> 00:33:10,450 Девід Дж Малан: Е-е, м. 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 Що потрібно, щоб переписати або змінити по відношенню до S і T і мама 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 >> Девід Дж Малан: Так, так що це одне тут просто 759 00:33:34,030 --> 00:33:40,860 необхідно отримати змінилося, метою яких виправити this-- необхідно отримати змінений на літери М. 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 Так що з і т насправді, відповідно з цією програмою, 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 Девід Дж Малан: Нам потрібно що? 791 00:35:01,420 --> 00:35:01,820 АУДИТОРІЯ: Шматок пам'яті. 792 00:35:01,820 --> 00:35:03,280 Девід Дж Малан: Ми повинні інший шматок пам'яті, вірно? 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 А потім, коли я змінити копію, я не хочу, щоб змінити цю копію тут. 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 і називають це S. 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 На правій стороні, м Alloc, або Танос, 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 >> Девід Дж Малан: Рівне, для цього значення дозорного. 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 це оператор в С, 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 Лінія 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 >> Девід Дж Малан: Це покажчик. 876 00:38:59,881 --> 00:39:02,610 Це адреса Перший символ ми набрали в. 877 00:39:02,610 --> 00:39:04,780 Добре, що це т? 878 00:39:04,780 --> 00:39:05,660 >> АУДИТОРІЯ: [нерозбірливо] 879 00:39:05,660 --> 00:39:07,950 >> Девід Дж Малан: 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 Так що, якщо їй це адресу першого характер цього шматка пам'яті, 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 Якщо це їй, а ви говорите * S * S, ніби як жолобів і сходів, 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 >> Якщо в цей цикл, Я продовжую збільшуючи I, 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 Це як Оксфорд-стріт, Вулиця, що будівля КС на. 913 00:40:34,030 --> 00:40:36,490 У CS будівлі знаходиться в 33 Оксфорд-стріт. 914 00:40:36,490 --> 00:40:39,870 Так що, якщо ви повинні були зробити 33 Оксфорд-стріт плюс 1, 915 00:40:39,870 --> 00:40:42,870 що приносить вам 34 Оксфорд Вулиця, то 35 Оксфорд-стріт, 916 00:40:42,870 --> 00:40:46,380 потім 36 Оксфорд-стріт, всі ті, будівлі насправді - якщо вони існують. 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 ОК, багато, щоб переварити. 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 є те, що збирається скористатися всі букви або просто-- 927 00:41:15,575 --> 00:41:17,283 >> Девід Дж Малан: Ах, дуже гарне питання. 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, ви отримуєте назад Столиця М, де ви покласти його? 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 першої літери якщо ви не ітерації з I або а 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 >> Девід Дж Малан: Ах, гарне питання. 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 Но-- особливо, коли ми отримуємо пізніше в ході в 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 Я реалізував 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 >> Девід Дж Малан: Рівне, коли ви проходите змінні в функції, чи аргументи 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 >> [Реле ГОЛОСИ] 1016 00:45:12,620 --> 00:45:15,244 >> Девід Дж Малан: Чому б нам просто не передати його адреси, вірно? 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 І, на жаль, автори З міг би вибрати інший символ 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 Тому той факт, що я кажучи INT зірки кошти 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 TMP залишається незмінним, оскільки це просто тимчасове ціле, 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 Ну, якщо замість цього я проходження в а і б НЕ 1 і 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 >> Девід Дж Малан: Де він приймає аргумент. 1078 00:48:07,603 --> 00:48:09,985 Так що, якщо я прокрутки вгору на головну, я не може просто передати по х і у, 1079 00:48:09,985 --> 00:48:12,820 і я обіцяю, останній шматок нового синтаксису сьогодні. 1080 00:48:12,820 --> 00:48:17,200 Мені потрібно пройти в НЕ х і у, але також адреса хну. 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 це з'ясовує для вас, що адреса X, 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 Так що це ще кут Еліота їдальні. 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 Нішат Мехта, він посадив мене в кут Еліот Д. Хол за обідом, 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 зробив наш друг, Нік Parlante. 1112 00:49:37,030 --> 00:49:41,440 Ось програма, що на двох верхніх Лінії оголошує змінну х і у. 1113 00:49:41,440 --> 00:49:44,780 Обидва з яких є адреси цілих чисел, AKA покажчики. 1114 00:49:44,780 --> 00:49:48,125 Ми тоді виділити достатньо пам'ять для зберігання Int 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 Дайте мені чотири байти пам'яті, це розмір з Int, 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 Девід Дж Малан: Я не покласти що-небудь в у. 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 Це деяке значення сміття і також не Бінки знаю. 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 >> Гей, Бінки, прокинутися. 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 >> -Добре, Добре, я бачу два покажчики, але вони 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 >> -Добре, А цей код виділяє нова число pointee, 1152 00:51:11,960 --> 00:51:15,050 і ця частина комплекту х, щоб вказати на нього. 1153 00:51:15,050 --> 00:51:16,240 >> Гей, що виглядає краще. 1154 00:51:16,240 --> 00:51:17,743 Так що це щось робити. 1155 00:51:17,743 --> 00:51:23,580 >> -Добре, Я буду разименованія покажчика х до зберегти номер 42 в його pointee. 1156 00:51:23,580 --> 00:51:27,130 Для цього трюку, мені потрібне моє Чарівна паличка разименованія. 1157 00:51:27,130 --> 00:51:30,200 >> -Ваш Чарівна паличка разименованія? 1158 00:51:30,200 --> 00:51:32,310 Е-е, що це здорово. 1159 00:51:32,310 --> 00:51:34,270 >> -Це Те, що код виглядає. 1160 00:51:34,270 --> 00:51:35,970 Я просто встановити кількість і-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> Гей, подивіться там йде. 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 через інший покажчик, у. 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 А потім взяти паличку разименованія і просто-- 1169 00:52:00,380 --> 00:52:01,646 >> [Звуковий сигнал] 1170 00:52:01,646 --> 00:52:04,080 >> Ох, гей, що не працює. 1171 00:52:04,080 --> 00:52:06,470 Скажіть, ну, Бінки, я не думаю разименованія 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 Гей, ви шукаєте там добре, Бінки. 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 Таким чином, ви можете спробувати паличку разименованія знову відправити 13 протягом. 1190 00:52:47,779 --> 00:52:51,110 >> Ох, добре, тут йде. 1191 00:52:51,110 --> 00:52:52,330 >> Гей, подивися на це. 1192 00:52:52,330 --> 00:52:53,570 Тепер разименованія робіт з у. 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 >> -But-- 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, покажчик разименованія починається з покажчиком 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 >> [КІНЕЦЬ ПЕРЕГЛЯДУ] 1215 00:53:43,475 --> 00:53:44,830 >> Девід Дж Малан: Ось це для 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 >> [Електронний відтворення музики] 1220 00:53:56,435 --> 00:57:22,775