1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] David J. Малан: Все правильно. 2 00:00:08,160 --> 00:00:11,170 Це CS50, і це в кінці другого тижня. 3 00:00:11,170 --> 00:00:14,650 Якщо ви плануєте бути голодним навколо цього завтра час, знають, що ми збираємося 4 00:00:14,650 --> 00:00:18,920 провести як невеликою групою завтра, четвер, 1:15 PM. 5 00:00:18,920 --> 00:00:21,460 Там є URL тут, якщо ви хочете, щоб RSVP. 6 00:00:21,460 --> 00:00:25,270 Місця обмежені, так що вибачте, якщо форма заповнена до того часу ви 7 00:00:25,270 --> 00:00:26,680 заповнити цю анкету. 8 00:00:26,680 --> 00:00:29,400 Інший URL, хоча це може бути цікаво це. 9 00:00:29,400 --> 00:00:32,409 >> Так що майже протягом місяця, курс буде доступна 10 00:00:32,409 --> 00:00:36,090 Все більш широко через EDX, через які люди в інтернеті буде 11 00:00:36,090 --> 00:00:39,580 можливість стежити разом, брати участь у процесі досить активно, насправді. 12 00:00:39,580 --> 00:00:43,070 Вони буду використовувати CS50 і CS50 Appliance Обговорити і більшість 13 00:00:43,070 --> 00:00:45,840 різні програмні засоби, які ми вже використали в цьому семестрі. 14 00:00:45,840 --> 00:00:49,030 І одна з ініціатив, які ми хотіли б взяти в якості експерименту в цьому році 15 00:00:49,030 --> 00:00:53,120 , Щоб побачити, як багато змісту, який ми можемо перевести в інші говорять і 16 00:00:53,120 --> 00:00:54,110 письмових мов. 17 00:00:54,110 --> 00:00:58,000 Так що, якщо ви могли б мати зацікавленість в участі в цьому проекті, в результаті чого 18 00:00:58,000 --> 00:01:02,090 ми надамо англійською стенограми і субтитри для курсу 19 00:01:02,090 --> 00:01:05,190 Лекції та шорти та семінарів, секцій тощо - 20 00:01:05,190 --> 00:01:08,700 якщо ви вільно говорити і писати вільно на іншій мові, ми б 21 00:01:08,700 --> 00:01:12,240 любите займатися ви в цьому проекті, в якому ви взяти на себе одну або кілька 22 00:01:12,240 --> 00:01:15,340 Відео, переводячи їх на мову, ви знаєте досить добре. 23 00:01:15,340 --> 00:01:19,050 Щоб дати вам уявлення про інтерфейсі, там даному веб-інтерфейс 24 00:01:19,050 --> 00:01:22,330 , Які ми будемо використовувати, що створить істотно користувальницького інтерфейсу, як це. 25 00:01:22,330 --> 00:01:24,520 Це було мені викладанні деяких Хеллоуїн назад. 26 00:01:24,520 --> 00:01:27,710 А на правій стороні там в чорному поруч з цими мітками часу, 27 00:01:27,710 --> 00:01:31,300 Ви побачите різні речі, які вийшли з моїх уст в той день. 28 00:01:31,300 --> 00:01:34,660 І тоді під ним, ви зможете перекласти іншою мовою. 29 00:01:34,660 --> 00:01:37,840 Саме те, що відображення між ними, в даному випадку, англійської 30 00:01:37,840 --> 00:01:38,660 і, скажімо, іспанської мови. 31 00:01:38,660 --> 00:01:40,480 Так що це насправді дуже зручний інструмент. 32 00:01:40,480 --> 00:01:43,690 Ви можете перемотування назад і вперед дуже легко за допомогою сполучень клавіш. 33 00:01:43,690 --> 00:01:46,710 Так що, якщо ви хочете взяти участь в цьому експерименті, і ваші слова 34 00:01:46,710 --> 00:01:50,730 бачив і читав, потенційно тисячі людей там, будь ласка відчувають 35 00:01:50,730 --> 00:01:51,960 безкоштовну участь. 36 00:01:51,960 --> 00:01:56,940 >> Тепер кілька слів про кошеня з понеділка, щоб ми відправили надмірно 37 00:01:56,940 --> 00:01:58,120 страшно повідомленні. 38 00:01:58,120 --> 00:02:02,130 Розумію, що як офісні годинники запропонувати і як розділи припустити, 39 00:02:02,130 --> 00:02:05,110 Дизайн, звичайно, дуже багато зробити, щоб студенти співпрацюють і 40 00:02:05,110 --> 00:02:09,250 кажуть, щоб працювати через проблеми множин і проблеми разом. 41 00:02:09,250 --> 00:02:13,630 І дійсно лінії просто зводиться до, знову ж таки, робота, яку ви в кінцевому підсумку 42 00:02:13,630 --> 00:02:16,420 повинні представити повинно бути вашої власної. 43 00:02:16,420 --> 00:02:19,080 І так буде, чесно кажучи - в робочий час, це абсолютно нормально - 44 00:02:19,080 --> 00:02:21,560 це повністю і слід було очікувати, навіть - побалакати з деякими 45 00:02:21,560 --> 00:02:22,370 друзі поруч з Вами. 46 00:02:22,370 --> 00:02:25,240 Якщо він чи вона бореться з деякою темі, і ви, як: ой, ну нехай 47 00:02:25,240 --> 00:02:27,750 мені дати вам поглянути на деякі рядки коду, який я написав. 48 00:02:27,750 --> 00:02:28,290 Це нормально. 49 00:02:28,290 --> 00:02:28,700 Це буває. 50 00:02:28,700 --> 00:02:31,580 І це дуже сприятливий, я думаю, з процесом навчання. 51 00:02:31,580 --> 00:02:35,270 Там, де лінія, знову ж таки, отримує перейшли, коли голова нахилена роду більш 52 00:02:35,270 --> 00:02:38,800 тут занадто багато секунд або хвилин, які дійсно мати тільки 53 00:02:38,800 --> 00:02:41,250 була можливість розблокування для вашого друга. 54 00:02:41,250 --> 00:02:43,870 І, звичайно, коли все стає обмін електронною поштою і Dropbox і 55 00:02:43,870 --> 00:02:45,350 як, там теж є лінії. 56 00:02:45,350 --> 00:02:48,940 Таким чином, всі кошти, відчувати себе комфортно і відчувати рекомендується спілкуватися з друзями 57 00:02:48,940 --> 00:02:51,270 і однокласникам про psets і багато іншого. 58 00:02:51,270 --> 00:02:54,680 І так само, розумію, що те, що ви в кінцевому підсумку уявити, повинні бути дійсно 59 00:02:54,680 --> 00:02:57,780 продукт вашої творчості, а не хтось інший. 60 00:02:57,780 --> 00:03:01,010 >> Так, в тому ж ключі з приємні істоти, ви можете 61 00:03:01,010 --> 00:03:02,820 знаю цього хлопця тут. 62 00:03:02,820 --> 00:03:06,180 Так що це жахливо паскудної фільм з років тому. 63 00:03:06,180 --> 00:03:08,680 Хто тут бачив Космічні яйця? 64 00:03:08,680 --> 00:03:09,120 Добре. 65 00:03:09,120 --> 00:03:10,220 Так що хороший номер тут. 66 00:03:10,220 --> 00:03:13,840 Таким чином, це наші чудові академічні спосіб введення Сьогодні в кінцевому рахунку, 67 00:03:13,840 --> 00:03:15,130 Поняття криптографії. 68 00:03:15,130 --> 00:03:19,010 І тому одним з області конкретних завдань для PSET 2, який прийде 69 00:03:19,010 --> 00:03:22,770 пізно вночі завтра, поринути у світ криптографії, яка 70 00:03:22,770 --> 00:03:26,380 це мистецтво шифрування або скремблювання інформації. 71 00:03:26,380 --> 00:03:30,160 І це в кінцевому підсумку пов'язане зі світом безпеки. 72 00:03:30,160 --> 00:03:34,440 >> Тепер безпеку для більшості нас приходить у вигляді досить мирської механізмів. 73 00:03:34,440 --> 00:03:36,920 У всіх нас є імена користувачів і паролі. 74 00:03:36,920 --> 00:03:41,350 І у всіх нас є дуже погані імена користувачів і паролі, швидше за все. 75 00:03:41,350 --> 00:03:45,250 Якщо ваш пароль так само на декількох веб-сайтах, що, ймовірно, не 76 00:03:45,250 --> 00:03:47,920 краща ідея, так як ми обговоримо ближче до кінця семестру. 77 00:03:47,920 --> 00:03:51,680 Якщо ваш пароль записується на записки - не жарт - на 78 00:03:51,680 --> 00:03:55,130 моніторі, то це теж не обов'язково кращий дизайн, але досить поширене 79 00:03:55,130 --> 00:03:56,140 явищу. 80 00:03:56,140 --> 00:04:00,420 І якщо ви не використовуєте криптографію для шифрування паролів, вони 81 00:04:00,420 --> 00:04:01,610 Особливо вразливі. 82 00:04:01,610 --> 00:04:04,670 Так що якщо ви думаєте, що бути супер розумний, маючи приховані слова 83 00:04:04,670 --> 00:04:07,740 документ десь на вашому жорсткому диску, який має всі ваші паролі, але 84 00:04:07,740 --> 00:04:10,550 він знаходиться в папці, що ніхто не збирається заглянути, що теж не дуже 85 00:04:10,550 --> 00:04:11,540 безпечний механізм. 86 00:04:11,540 --> 00:04:15,100 І те, що PSET 2 буде ввести це мистецтво криптографії та 87 00:04:15,100 --> 00:04:18,300 скремблювання інформації, так що такі речі, як паролі 88 00:04:18,300 --> 00:04:19,500 Тим більш безпечним. 89 00:04:19,500 --> 00:04:24,500 Таким чином, щоб мотивувати це дуже реальні проблеми з дуже не в реальному світі 90 00:04:24,500 --> 00:04:28,740 Сценарій, дозвольте мені познайомити вас з одним з наших улюблених кліпів ось з цього 91 00:04:28,740 --> 00:04:29,895 Фільм, Космічні яйця. 92 00:04:29,895 --> 00:04:30,565 >> [ВІДТВОРЕННЯ ВІДЕО] 93 00:04:30,565 --> 00:04:32,995 -Шолом, ви лиходій, що відбувається? 94 00:04:32,995 --> 00:04:34,730 Що ви робите з моєю дочкою? 95 00:04:34,730 --> 00:04:38,960 -Дозвольте мені представити блискучий молодий пластичний хірург, д-р Філіп 96 00:04:38,960 --> 00:04:43,290 Schlotkin, найбільшим людиною носа у всьому 97 00:04:43,290 --> 00:04:45,526 Всесвіт і Беверлі-Хіллз. 98 00:04:45,526 --> 00:04:46,450 -Ваше Високість. 99 00:04:46,450 --> 00:04:47,380 Ніс роботу? 100 00:04:47,380 --> 00:04:48,035 Не розумію. 101 00:04:48,035 --> 00:04:49,480 Вона вже була носа. 102 00:04:49,480 --> 00:04:51,490 Це був солодкий 16 цього. 103 00:04:51,490 --> 00:04:53,090 -Ні, це не те, що ви думаєте. 104 00:04:53,090 --> 00:04:55,150 Це набагато, набагато гірше. 105 00:04:55,150 --> 00:04:59,860 Якщо ви не дасте мені поєднанні з щитом повітря, д-р Schlotkin буде 106 00:04:59,860 --> 00:05:04,135 дати вашої дочки назад її старий ніс. 107 00:05:04,135 --> 00:05:05,385 -Ні! 108 00:05:08,202 --> 00:05:10,186 Де ти це взяв? 109 00:05:10,186 --> 00:05:11,178 -Все в порядку. 110 00:05:11,178 --> 00:05:11,674 Я розповім. 111 00:05:11,674 --> 00:05:12,666 Я розповім. 112 00:05:12,666 --> 00:05:14,154 -Ні, тато, немає. 113 00:05:14,154 --> 00:05:15,150 Ви не повинні. 114 00:05:15,150 --> 00:05:16,460 -Ти права, моя дорога. 115 00:05:16,460 --> 00:05:18,450 Я буду сумувати за вашим новим носом. 116 00:05:18,450 --> 00:05:21,550 Але я не буду говорити їм комбінації ні на що. 117 00:05:21,550 --> 00:05:23,100 -Дуже добре. 118 00:05:23,100 --> 00:05:25,510 Доктор Schlotkin, справа ваша. 119 00:05:25,510 --> 00:05:26,760 -З задоволенням. 120 00:05:30,560 --> 00:05:31,180 -Ні! 121 00:05:31,180 --> 00:05:33,450 Зачекайте, зачекайте. 122 00:05:33,450 --> 00:05:34,770 Я розповім. 123 00:05:34,770 --> 00:05:36,400 Я розповім. 124 00:05:36,400 --> 00:05:38,630 -Я знав, що він буде працювати. 125 00:05:38,630 --> 00:05:42,040 Добре, дайте його мені. 126 00:05:42,040 --> 00:05:46,890 -Поєднання є одним. 127 00:05:46,890 --> 00:05:47,290 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 129 00:05:48,183 --> 00:05:48,950 -Два. 130 00:05:48,950 --> 00:05:49,370 -Два. 131 00:05:49,370 --> 00:05:50,450 -Два. 132 00:05:50,450 --> 00:05:50,715 Три 133 00:05:50,715 --> 00:05:51,380 -Три. 134 00:05:51,380 --> 00:05:52,390 -Три. 135 00:05:52,390 --> 00:05:53,200 Чотири. 136 00:05:53,200 --> 00:05:53,720 Чотири. 137 00:05:53,720 --> 00:05:55,830 Чотири. 138 00:05:55,830 --> 00:05:56,580 П'ять 139 00:05:56,580 --> 00:05:57,120 -П'ять. 140 00:05:57,120 --> 00:05:58,560 -П'ять. 141 00:05:58,560 --> 00:06:03,770 -Таким чином, комбінація один, два, три, чотири, п'ять. 142 00:06:03,770 --> 00:06:06,745 Це найдурніше поєднання я коли-небудь чув у своєму житті. 143 00:06:06,745 --> 00:06:09,290 Це така річ, ідіот буде мати на своєму багажі. 144 00:06:09,290 --> 00:06:11,540 -Дякую вам, ваша високість. 145 00:06:11,540 --> 00:06:12,940 -Що ти зробив? 146 00:06:12,940 --> 00:06:14,230 -Я вимкнув стіну. 147 00:06:14,230 --> 00:06:14,630 -Ні, ти цього не зробив. 148 00:06:14,630 --> 00:06:15,430 Ви вимкнули весь фільм. 149 00:06:15,430 --> 00:06:16,722 -Мабуть, я натиснув не на ту кнопку. 150 00:06:16,722 --> 00:06:18,078 -Ну, поклав його назад. 151 00:06:18,078 --> 00:06:18,805 Покласти фільм назад. 152 00:06:18,805 --> 00:06:19,080 -Так, сер. 153 00:06:19,080 --> 00:06:19,270 Так, сер. 154 00:06:19,270 --> 00:06:19,830 -Ходімо, Ерна. 155 00:06:19,830 --> 00:06:20,270 Ну, Гретхен. 156 00:06:20,270 --> 00:06:22,850 Звичайно, ви знаєте, я все одно доведеться виставити рахунок за це. 157 00:06:27,400 --> 00:06:28,325 -Ну, це спрацювало? 158 00:06:28,325 --> 00:06:29,550 Де ворота? 159 00:06:29,550 --> 00:06:29,910 -Це спрацювало, сер. 160 00:06:29,910 --> 00:06:30,770 Ми маємо комбінацію. 161 00:06:30,770 --> 00:06:31,390 -Дуже добре. 162 00:06:31,390 --> 00:06:35,630 Тепер ми можемо взяти кожен останній ковток свіжого повітря з планети Druidia. 163 00:06:35,630 --> 00:06:36,550 Яка комбінація? 164 00:06:36,550 --> 00:06:38,805 -Один, два, три, чотири, п'ять. 165 00:06:38,805 --> 00:06:40,610 -Один, два, три, чотири, п'ять? 166 00:06:40,610 --> 00:06:41,070 -Так. 167 00:06:41,070 --> 00:06:41,760 -Це дивно. 168 00:06:41,760 --> 00:06:45,200 У мене та ж комбінація на мій багаж. 169 00:06:45,200 --> 00:06:47,800 Підготовка Spaceball 1 для негайного від'їзду. 170 00:06:47,800 --> 00:06:48,536 -Так, сер. 171 00:06:48,536 --> 00:06:52,350 -І змінити комбінацію на мій багаж. 172 00:06:52,350 --> 00:06:53,250 -Ой! 173 00:06:53,250 --> 00:06:55,020 [END ВІДТВОРЕННЯ ВІДЕО] 174 00:06:55,020 --> 00:06:57,470 >> David J. Малан: дивовижний фільм, який ви повинні тепер всі бачать. 175 00:07:00,600 --> 00:07:06,540 Таким чином, контекст тут є те, що з небезпечною дані надходять можливість 176 00:07:06,540 --> 00:07:07,790 зашифрувати його і, щоб засекретити його. 177 00:07:07,790 --> 00:07:11,060 І ось цей, наприклад, є прикладом зашифроване повідомлення. 178 00:07:11,060 --> 00:07:12,980 Це насправді щось говорить англійською мовою. 179 00:07:12,980 --> 00:07:14,750 Але це явно не цілком очевидна. 180 00:07:14,750 --> 00:07:17,360 І ми пройшли повне коло сьогодні, щоб дратувати один від одного, що це секрет 181 00:07:17,360 --> 00:07:18,380 повідомлення тут. 182 00:07:18,380 --> 00:07:22,370 Але в реальному світі комп'ютерів, речі, навіть не схоже, що вони можуть 183 00:07:22,370 --> 00:07:23,440 бути англійські фрази. 184 00:07:23,440 --> 00:07:27,500 Наприклад, це те, що ви можете знайти на стандартній Linux або Mac або 185 00:07:27,500 --> 00:07:32,080 Unix комп'ютері в файл, який був колись називали файлу паролів. 186 00:07:32,080 --> 00:07:34,170 В даний час, це були переміщені в інші місця. 187 00:07:34,170 --> 00:07:38,660 Але якщо ви подивитеся в потрібному місці в системі, ви побачите не тільки ваші 188 00:07:38,660 --> 00:07:41,430 Ім'я користувача або інших людей в системі, але ви побачите, 189 00:07:41,430 --> 00:07:43,410 зашифровану версію пароля. 190 00:07:43,410 --> 00:07:47,800 Дійсно, слово склеп там припускає, що наступні речі в зашифрованому вигляді. 191 00:07:47,800 --> 00:07:52,030 І цей ряд, здавалося б, випадкових літер та символів і цифр 192 00:07:52,030 --> 00:07:56,370 т.д. можуть бути розшифровані тільки в цілому знаючи деякі таємниці - 193 00:07:56,370 --> 00:07:58,600 секретне слово, секретний номер. 194 00:07:58,600 --> 00:08:02,760 І дійсно, мистецтво криптографії в кінцевому рахунку, зводиться до того, довіряю деяких 195 00:08:02,760 --> 00:08:05,700 роду і, знаючи те, що хтось не робить. 196 00:08:05,700 --> 00:08:10,010 Ми розглянемо це в трохи більш докладно сьогодні і в PSET в майбутньому. 197 00:08:10,010 --> 00:08:11,860 >> А тепер кілька слів про Pass / Fail. 198 00:08:11,860 --> 00:08:15,250 Таким чином, зокрема, як деякі з вас пірнув у PSET 1, пристрій і 199 00:08:15,250 --> 00:08:18,390 Дуже новий світ для себе, зрозумів, що розчарування і 200 00:08:18,390 --> 00:08:21,340 плутанину і просто технічних труднощів слід очікувати. 201 00:08:21,340 --> 00:08:24,410 Особливо з першим PSET, де є так багато всього нового, просто отримую 202 00:08:24,410 --> 00:08:28,830 знайомий з Ls і компакт-диск, і всі ці таємні команди в нових умовах. 203 00:08:28,830 --> 00:08:32,679 І це окремо від фактичного матеріалу та програмування себе. 204 00:08:32,679 --> 00:08:35,960 Так розумію і те, що є, звичайно, робочі години, які існують як 205 00:08:35,960 --> 00:08:36,770 Підтримка структури. 206 00:08:36,770 --> 00:08:38,620 Розділи почати в найближчу неділю. 207 00:08:38,620 --> 00:08:41,990 Але найголовніше, якщо ви відчуваєте себе просто, що це не 208 00:08:41,990 --> 00:08:44,420 світ для тебе, розумієш, що це дійсно просто потрібен час. 209 00:08:44,420 --> 00:08:47,520 І якби не ця можливість років тому для мене взяти клас 210 00:08:47,520 --> 00:08:50,840 придатний / не придатний, якщо чесно, я ніколи б навіть ступити в класі. 211 00:08:50,840 --> 00:08:53,520 І ви можете змінити це до, скажімо, п'ятий понеділок курс. 212 00:08:53,520 --> 00:08:57,110 Так що якщо ви на краю тепер, розумієш, що замість голови в деяких інших 213 00:08:57,110 --> 00:09:01,000 вод в цілому, не тільки, звичайно, розглянути зміни в залік / незалік. 214 00:09:01,000 --> 00:09:03,750 Знову ж таки, це не зовсім цю культуру тут, в Гарварді приймати речі 215 00:09:03,750 --> 00:09:08,080 придатний / не придатний, так як все насправді хоче досягти або overachieve. 216 00:09:08,080 --> 00:09:11,470 Але, відверто кажучи, це прекрасний спосіб спробувати щось, що, можливо, не 217 00:09:11,470 --> 00:09:13,110 бути вам знайомі. 218 00:09:13,110 --> 00:09:17,090 І ви будете в кінцевому підсумку роблять в більшості випадків досить добре, може бути, 219 00:09:17,090 --> 00:09:18,040 багато до вашого подив. 220 00:09:18,040 --> 00:09:20,850 І більш конкретно, то, що я думаю, що придатний / не придатний взагалі робить, 221 00:09:20,850 --> 00:09:23,350 Особливо, як ви, можливо, випробували з PSET 0, якщо ви розмістили 222 00:09:23,350 --> 00:09:27,200 В 10 годин, 15 годин, 25 годин в деяких PSET - і ви просто стукати 223 00:09:27,200 --> 00:09:28,180 головою об стіну, 224 00:09:28,180 --> 00:09:29,850 і вона стає супер пізно вночі, 225 00:09:29,850 --> 00:09:31,880 але ви зробили PSET як 90% шляху, 226 00:09:31,880 --> 00:09:33,780 Ви знаєте, ви просто не можете зрозуміти одну річ - 227 00:09:33,780 --> 00:09:36,830 придатний / не придатний дійсно знімає гостроту класу, як це, де ви можете сортувати 228 00:09:36,830 --> 00:09:39,150 з радісно сказав добре, я знаю, що це не ідеально. 229 00:09:39,150 --> 00:09:40,470 Але я працював свою дупу на цей рахунок. 230 00:09:40,470 --> 00:09:42,410 Я дуже задоволений, де все це закінчилося. 231 00:09:42,410 --> 00:09:44,780 І це буде відповідати очікуванням для годен / не придатний. 232 00:09:44,780 --> 00:09:46,850 Так що майте це на увазі. 233 00:09:46,850 --> 00:09:47,140 >> Добре. 234 00:09:47,140 --> 00:09:50,980 Так що ті з вас, хто намагався використовувати Гарвардського університету Wi-Fi знати 235 00:09:50,980 --> 00:09:54,780 що є CS50 SSID, Wi-Fi з'єднання плаваючі навколо, що ви 236 00:09:54,780 --> 00:09:56,520 можливо, пощастить більше для. 237 00:09:56,520 --> 00:09:59,430 Це трохи парадоксально, що пароль для цього - якщо ви хотіли б спробувати 238 00:09:59,430 --> 00:10:03,080 підключення до цього для кращої швидкості і дайте нам знати, якщо це не краще - 239 00:10:03,080 --> 00:10:09,240 один, два, три, чотири, п'ять, аж до восьми, тому що вісім є 240 00:10:09,240 --> 00:10:10,270 більш безпечним, ніж п'ять років. 241 00:10:10,270 --> 00:10:15,520 Так що якщо вам потрібен Wi-Fi пароль, підключитися до бездротового CS50 тут. 242 00:10:15,520 --> 00:10:16,950 Один, два, три, чотири, п'ять, шість, сім, вісім. 243 00:10:16,950 --> 00:10:20,440 І повідомленням CS50 Обговорити якщо ви досі періодично виникаючих проблем підключення, 244 00:10:20,440 --> 00:10:24,880 і ми дамо повноваження, які будуть знати цей простір. 245 00:10:24,880 --> 00:10:25,180 >> Добре. 246 00:10:25,180 --> 00:10:30,350 Так швидко тизер, особливо для тих з вас, хто вентилятора хлопчиків або дівчаток 247 00:10:30,350 --> 00:10:31,900 всіх Яблуко речі. 248 00:10:31,900 --> 00:10:37,566 Те, що я викопав з кілька років тому був цей файл тут, ilock.c, просто щоб 249 00:10:37,566 --> 00:10:40,930 вид зробити більш конкретними і більш складні деяких з більш фундаментальних C 250 00:10:40,930 --> 00:10:42,350 програми ми писали. 251 00:10:42,350 --> 00:10:44,360 Так я відкрив цей файл, ilock.c. 252 00:10:44,360 --> 00:10:46,830 Він доступний на сторінці лекції на сьогоднішній день. 253 00:10:46,830 --> 00:10:49,470 З лівого боку, ви побачите довгий список функцій. 254 00:10:49,470 --> 00:10:51,860 Таким чином, чоловік, який написав це написав багато функцій, 255 00:10:51,860 --> 00:10:53,290 більше, ніж просто основний. 256 00:10:53,290 --> 00:10:55,490 Він використовував цілу купу бібліотек тут. 257 00:10:55,490 --> 00:11:00,450 І якщо ми почнемо прокрутки, що це насправді є дуже 258 00:11:00,450 --> 00:11:04,670 По-перше, я вважаю, русифікатор для оригінального iPhone. 259 00:11:04,670 --> 00:11:08,000 Коли б Ви хотіли зробити джейлбрейк оригінальний iPhone, а це значить неприв'язаних джейлбрейк 260 00:11:08,000 --> 00:11:11,800 від AT & T і фактично встановити спеціальне програмне забезпечення на ньому і робити речі 261 00:11:11,800 --> 00:11:13,510 , Що Яблуко не хочу, щоб люди роблять - 262 00:11:13,510 --> 00:11:17,020 Ну, хтось знайшов час, щоб з'ясувати, як саме вони можуть використовувати 263 00:11:17,020 --> 00:11:20,880 програмні помилки, помилки, помилки, програмного забезпечення Apple. 264 00:11:20,880 --> 00:11:22,650 І таким чином народилася ilock.c. 265 00:11:22,650 --> 00:11:26,670 От якби він був скомпільований на комп'ютері і встановити його на iPhone, що 266 00:11:26,670 --> 00:11:29,810 був підключений до комп'ютера за допомогою, скажімо, кабель USB, це дасть вам 267 00:11:29,810 --> 00:11:33,360 адміністративні або привілеї на вашому iPhone і дозволяє зробити дуже багато, 268 00:11:33,360 --> 00:11:34,170 що ви хочете. 269 00:11:34,170 --> 00:11:36,740 >> І ось там був цей захоплюючий кішки-мишки між Apple, і 270 00:11:36,740 --> 00:11:39,920 решти світу, зокрема, так як вони, як і багато компаній, намагаються заблокувати 271 00:11:39,920 --> 00:11:43,220 свої речі вниз, так що ви можете робити з ним, що вони мають намір. 272 00:11:43,220 --> 00:11:46,620 Але завдяки таким людям, як це і свого розуміння низького рівня 273 00:11:46,620 --> 00:11:50,580 деталі і, в даному випадку, C програмування і багато знайомих конструкцій 274 00:11:50,580 --> 00:11:54,630 що ми почали грати, ви зможете по-справжньому важелі 275 00:11:54,630 --> 00:11:59,050 апаратного таким чином, ви вважаєте за потрібне, і не обов'язково деяким юридичною особою. 276 00:11:59,050 --> 00:12:01,360 Так, наприклад, я поняття не маю, що все це роблять. 277 00:12:01,360 --> 00:12:03,220 Але GetVersion звучить досить просто. 278 00:12:03,220 --> 00:12:05,480 І, схоже, це функція, що ця людина написала. 279 00:12:05,480 --> 00:12:09,240 Візьми свого роду ціле в якості аргументу, нічого не повертає, але 280 00:12:09,240 --> 00:12:13,080 здається, петлі з циклу тут і, якщо умова, якщо умова, 281 00:12:13,080 --> 00:12:15,620 розірвати, і якось відноситься до номера версії. 282 00:12:15,620 --> 00:12:16,700 Якщо ми прокрутити вниз - 283 00:12:16,700 --> 00:12:19,570 хоча багато з цих ключових слів буде нова, і є 284 00:12:19,570 --> 00:12:22,590 багато функцій тут ми ніколи не бачили і не могли б коли-небудь побачити більше 285 00:12:22,590 --> 00:12:23,830 семестру - 286 00:12:23,830 --> 00:12:27,150 Зрештою, це слід тим же правилам і логіці, що ми були 287 00:12:27,150 --> 00:12:28,760 грати з досі. 288 00:12:28,760 --> 00:12:34,220 Так що це занадто старий, щоб зламати ваш iPhone або 3s 4s 5s або незабаром, у наші дні, 289 00:12:34,220 --> 00:12:37,320 але знаю, що все це дуже отримані з цього світу, який ми 290 00:12:37,320 --> 00:12:38,430 пірнув. 291 00:12:38,430 --> 00:12:41,900 >> Отже, давайте поглянемо на декілька більш простий приклад. 292 00:12:41,900 --> 00:12:46,100 Це одна, просто щоб зігрітися з деякими синтаксису, а також деякі інші дані 293 00:12:46,100 --> 00:12:49,240 Тип, що ми говорили, але дійсно не бачив в С. Таким чином, це 294 00:12:49,240 --> 00:12:51,680 Файл називається positive1.c. 295 00:12:51,680 --> 00:12:55,120 І в коментарях на вершині, це просто вимагає, щоб користувач надавав 296 00:12:55,120 --> 00:12:55,960 позитивне число. 297 00:12:55,960 --> 00:12:59,530 Так що це приклад зроби той час як цикл, який хороший для користувачів інтерактивного 298 00:12:59,530 --> 00:13:01,980 програм, де ви повинні сказати користувачеві, щоб щось зробити. 299 00:13:01,980 --> 00:13:05,190 І якщо вони не співпрацюють, ви кричати на них або відхилити їх введення. 300 00:13:05,190 --> 00:13:11,610 Справа в точку, я збираюся зробити лінії від 19 до 24 так довго, як користувач 301 00:13:11,610 --> 00:13:14,310 не дав мені позитивне число. 302 00:13:14,310 --> 00:13:20,400 Тепер ця деталь тут, на лінії 18, чому я заявляю, п вище всього цього 303 00:13:20,400 --> 00:13:24,490 цикл конструкція, на відміну від прямо поруч з лінією 22, де я 304 00:13:24,490 --> 00:13:26,880 насправді піклуються, щоб отримати п? 305 00:13:26,880 --> 00:13:27,330 Так? 306 00:13:27,330 --> 00:13:27,780 [Нерозбірливо] 307 00:13:27,780 --> 00:13:29,040 >> David J. Малан: Так, так що це питання з області видимості. 308 00:13:29,040 --> 00:13:30,850 І в термін непрофесіонала, що робить область відноситься? 309 00:13:34,690 --> 00:13:36,610 Так? 310 00:13:36,610 --> 00:13:37,860 [Нерозбірливо] 311 00:13:40,040 --> 00:13:41,105 David J. Малан: Чи можете ви говорити голосніше? 312 00:13:41,105 --> 00:13:43,450 Виступаючий 1: Де можна отримати доступ до конкретної змінної. 313 00:13:43,450 --> 00:13:45,170 David J. Малан: Perfect. 314 00:13:45,170 --> 00:13:47,360 Де Ви можете отримати доступ до конкретної змінної. 315 00:13:47,360 --> 00:13:50,400 І взагалі, правило досі було, що сфера застосування деяких 316 00:13:50,400 --> 00:13:55,860 Змінна визначається самою останньою фігурні дужки, що ви бачили. 317 00:13:55,860 --> 00:14:02,010 І тому в даному випадку, якщо я зробив помилку, оголосивши п на лінії 22, 318 00:14:02,010 --> 00:14:03,010 , Що лінія буде працювати. 319 00:14:03,010 --> 00:14:10,990 Я хотів би отримати ціле число, і я б поставив його в цій змінній п у рядку 22. 320 00:14:10,990 --> 00:14:16,900 Але які рядки коду, тепер поняття не маю, про що я кажу? 321 00:14:16,900 --> 00:14:22,650 Таким чином, 25, і виявляється, що 24, а також, тому що в цьому випадку він виходить за межі 322 00:14:22,650 --> 00:14:23,610 у фігурні дужки. 323 00:14:23,610 --> 00:14:27,280 Так що просто трохи неприємність, але дуже легко вирішується просто оголосивши 324 00:14:27,280 --> 00:14:30,140 змінну за межами самої функції. 325 00:14:30,140 --> 00:14:32,600 >> Зараз ми побачимо пізніше сьогодні, ви можете зробити ще один крок. 326 00:14:32,600 --> 00:14:34,860 І ви можете навіть отримати трохи лінивий - 327 00:14:34,860 --> 00:14:37,320 і це не рекомендується, загалом - 328 00:14:37,320 --> 00:14:42,260 але ви можете навіть отримати ледачого і покласти змінну в глобальному масштабі, так би мовити, не 329 00:14:42,260 --> 00:14:46,670 всередині функції, а не всередині циклу, але в самому файлі, поза 330 00:14:46,670 --> 00:14:49,600 всіх функцій ви написали, як я зробив тут, на лінії 15. 331 00:14:49,600 --> 00:14:51,160 Але це, як правило, з несхваленням. 332 00:14:51,160 --> 00:14:55,680 Але розумію, що це рішення іноді до інших проблем, як ми 333 00:14:55,680 --> 00:14:56,620 в кінцевому рахунку бачити. 334 00:14:56,620 --> 00:14:58,130 Таким чином, на даний момент, ми залишимо це так. 335 00:14:58,130 --> 00:15:01,030 Але давайте подивимося, якщо ми можемо переписати це тільки початок виразити себе 336 00:15:01,030 --> 00:15:01,990 трохи по-іншому. 337 00:15:01,990 --> 00:15:05,330 >> Таким чином, ця програма, просто щоб бути ясно, є positive1. 338 00:15:05,330 --> 00:15:11,810 Дозвольте мені йти вперед тут і в моєму вікні терміналу зробити positive1, Enter. 339 00:15:11,810 --> 00:15:12,740 Компіляція, добре. 340 00:15:12,740 --> 00:15:14,910 Я збираюся запустити positive1, натисніть Enter. 341 00:15:14,910 --> 00:15:16,820 Я вимагаю, щоб ви дати мені ціле позитивне число. 342 00:15:16,820 --> 00:15:18,260 Я скажу -1. 343 00:15:18,260 --> 00:15:18,910 Це не працює. 344 00:15:18,910 --> 00:15:22,150 0, 99, що, здається, працює. 345 00:15:22,150 --> 00:15:23,570 Може бути, не найсуворіший тест. 346 00:15:23,570 --> 00:15:26,480 Але принаймні це гарна перевірка осудності, що ми знаходимося на правильному шляху. 347 00:15:26,480 --> 00:15:29,240 Так що тепер дозвольте мені йти вперед і відкрити другий варіант цього. 348 00:15:29,240 --> 00:15:32,500 І чим відрізняється вже? 349 00:15:32,500 --> 00:15:35,140 Він реалізує те ж саме. 350 00:15:35,140 --> 00:15:40,660 Але те, що стрибає, як чітко в цей раз? 351 00:15:40,660 --> 00:15:42,560 Так, так це BOOL в зелений колір. 352 00:15:42,560 --> 00:15:45,980 Gedit був виділений зеленим кольором це ключове слово відоме як логічний, 353 00:15:45,980 --> 00:15:47,000 , Який є типом даних. 354 00:15:47,000 --> 00:15:51,080 Вона не приходить побудований в для всіх версій C. Необхідно включити 355 00:15:51,080 --> 00:15:52,010 конкретної бібліотеки. 356 00:15:52,010 --> 00:15:54,770 У нашому випадку, я включив CS50 бібліотеки, так що ми 357 00:15:54,770 --> 00:15:56,460 мати доступ до BOOL. 358 00:15:56,460 --> 00:15:59,810 Але в рядку 18, ми, здається, є логічне значення тут називають вдячні. 359 00:15:59,810 --> 00:16:01,040 Так що я міг би назвати це нічого. 360 00:16:01,040 --> 00:16:04,500 Але я назвав це вдячна просто вид передають смислове значення. 361 00:16:04,500 --> 00:16:07,930 Таким чином, спочатку на лінії 18, я, мабуть, не вдячний, тому що 362 00:16:07,930 --> 00:16:12,150 Логічне значення вдячні ініціалізується помилковим у рядку 18. 363 00:16:12,150 --> 00:16:16,890 І тоді здається, що я зробив тут в рядках з 21 по 23 це я тільки що 364 00:16:16,890 --> 00:16:18,610 вид переписати мою логіку. 365 00:16:18,610 --> 00:16:21,020 Так що не функціонально різні. 366 00:16:21,020 --> 00:16:26,940 Але в рядку 22 зараз, я можу перевірити, якщо Int користувач надав більше 367 00:16:26,940 --> 00:16:31,120 0, то я просто змінити значення вдячні правда. 368 00:16:31,120 --> 00:16:32,290 А навіщо мені це робити? 369 00:16:32,290 --> 00:16:35,600 Тому що в рядку 25, мабуть, я збираюся перевірити стан. 370 00:16:35,600 --> 00:16:39,380 У цього циклу в той час як вдячний є хибним. 371 00:16:39,380 --> 00:16:43,610 >> Так що я пропоную це в якості альтернативи версію, тому що вона, принаймні 372 00:16:43,610 --> 00:16:45,130 трохи більше інтуїтивно, може бути. 373 00:16:45,130 --> 00:16:46,900 Це трохи більш обгрунтованою на англійській мові. 374 00:16:46,900 --> 00:16:51,710 Таким чином, виконайте такі дії, поки ви не вдячні або при вдячні є хибним. 375 00:16:51,710 --> 00:16:55,890 І на цей раз я теж, мабуть, не люблю згадувати те, що користувач набрав 376 00:16:55,890 --> 00:16:57,730 У повідомленні, тому що немає змінної п. 377 00:16:57,730 --> 00:16:58,650 Таким чином, на самом деле, я - 378 00:16:58,650 --> 00:17:00,080 маленька біла брехня там. 379 00:17:00,080 --> 00:17:02,770 Функціонально програма трохи відрізняється, як тільки ми отримаємо на дно 380 00:17:02,770 --> 00:17:04,819 це тому що я не пам'ятав, що п. 381 00:17:04,819 --> 00:17:09,579 Але я хотів показати тут, що, хоча ми бачили і GetInt 382 00:17:09,579 --> 00:17:13,920 GetString використовується на праву сторону знаку рівності досі, так що 383 00:17:13,920 --> 00:17:17,160 Ми пам'ятаємо значення, технічно, це не строго обов'язково. 384 00:17:17,160 --> 00:17:20,950 Якщо з якихось причин ви просто не піклуються, щоб зберегти значення, ви просто хочете 385 00:17:20,950 --> 00:17:25,710 для перевірки значення, помітили, що ми можемо просто написати це як GetInt відкритим 386 00:17:25,710 --> 00:17:27,000 хлопець, поруч хлопець. 387 00:17:27,000 --> 00:17:30,460 Ця функція буде повертати значення, як ми вже говорили. 388 00:17:30,460 --> 00:17:32,010 Це буде повернути вам Int. 389 00:17:32,010 --> 00:17:36,450 І тому, якщо ви подумки думаю, що це станеться, коли я друкую в 99, GetInt 390 00:17:36,450 --> 00:17:38,160 повертає число 99. 391 00:17:38,160 --> 00:17:41,330 І так концептуально, це як би мій код був насправді цього. 392 00:17:41,330 --> 00:17:45,880 Так, якщо 99 дійсно більше 0, то вдячний стає істинним. 393 00:17:45,880 --> 00:17:50,420 Тоді лінія 25 реалізує ох, ми зробили, бо я тепер вдячна. 394 00:17:50,420 --> 00:17:54,590 А в рядку 26, ми просто говоримо, спасибі за натуральне, якою б вона 395 00:17:54,590 --> 00:17:55,710 трапилося бути. 396 00:17:55,710 --> 00:17:58,900 >> Тепер давайте зробимо невеликий синтаксичний цукор тут, так би мовити. 397 00:17:58,900 --> 00:18:02,990 Давайте подивимося, якщо ми можемо прибирати цю лінію 25 з цієї третьої й останньої дисперсії 398 00:18:02,990 --> 00:18:04,640 У positive3. 399 00:18:04,640 --> 00:18:08,250 Так помітити тією лише різницею, що тепер рядки коду? 400 00:18:11,930 --> 00:18:13,260 Так, так 25. 401 00:18:13,260 --> 00:18:15,520 І ми дійсно не бачив цей трюк тільки поки. 402 00:18:15,520 --> 00:18:19,510 Але ми бачили знак оклику в понеділок, який означає, що? 403 00:18:19,510 --> 00:18:20,970 Так ні, або заперечення. 404 00:18:20,970 --> 00:18:23,460 Так що беріть логічне значення і перевернути його значення. 405 00:18:23,460 --> 00:18:24,390 Правда, стає помилковим. 406 00:18:24,390 --> 00:18:25,500 Помилкові стає істинним. 407 00:18:25,500 --> 00:18:28,910 Так що це, я хотів би запропонувати, навіть трохи більш інтуїтивним способом 408 00:18:28,910 --> 00:18:32,200 написання коду, тому що я до сих пір вдячний ініціалізації помилковим. 409 00:18:32,200 --> 00:18:33,530 Я все ще роблю таке. 410 00:18:33,530 --> 00:18:35,700 Я поставив вдячні вірно, коли прийде час. 411 00:18:35,700 --> 00:18:40,690 Але тепер ви дійсно можете просто перевести цей код усно зліва направо, 412 00:18:40,690 --> 00:18:42,550 хоча і не вдячні. 413 00:18:42,550 --> 00:18:46,170 Через вибух, або знак оклику, позначає поняття немає, так що поки 414 00:18:46,170 --> 00:18:47,010 Не вдячні. 415 00:18:47,010 --> 00:18:49,740 >> Отже, ще раз, ми не введені нові поняття як такого. 416 00:18:49,740 --> 00:18:53,230 Ми говорили про логічних тому, коли ми грали з нуля. 417 00:18:53,230 --> 00:18:55,690 Але розумію, тепер ми можемо просто почати писати наш код у 418 00:18:55,690 --> 00:18:56,550 по-різному. 419 00:18:56,550 --> 00:19:00,010 Таким чином, особливо в pset1, якщо ви начебто намагається з'ясувати спосіб 420 00:19:00,010 --> 00:19:03,400 написати програму, напевно вам пощастило, тому що це буде будь-яка 421 00:19:03,400 --> 00:19:05,780 ряд рішень, які ви можете випадково зустріти. 422 00:19:05,780 --> 00:19:09,850 Наприклад, це всього лише три навіть для найпростіших програм. 423 00:19:09,850 --> 00:19:10,180 Добре. 424 00:19:10,180 --> 00:19:13,860 А тепер згадаємо в понеділок, ми вийшли на цю записку з поверненням значення. 425 00:19:13,860 --> 00:19:18,280 Так, в перший раз, ми написали програму, яка не просто головною, 426 00:19:18,280 --> 00:19:22,240 вона також має свою власну функцію, яку я написав тут. 427 00:19:22,240 --> 00:19:26,640 Таким чином, у відповідності з 31 по 34, я реалізував функцію куб. 428 00:19:26,640 --> 00:19:27,800 Це не комплекс. 429 00:19:27,800 --> 00:19:29,830 Це всього лише разу в раз, і в цьому випадку. 430 00:19:29,830 --> 00:19:34,920 Але, що важливо про нього, що я беру входу в формі і 431 00:19:34,920 --> 00:19:38,910 Я повертаюся вихід у формі разу в раз. 432 00:19:38,910 --> 00:19:43,940 >> Так що тепер у мене є можливість, так само, як я раніше з Printf один, дзвонити 433 00:19:43,940 --> 00:19:47,120 цю функцію, викликавши функцію куб. 434 00:19:47,120 --> 00:19:49,470 І куб функція приймає деякі вхід. 435 00:19:49,470 --> 00:19:52,030 І куб функція повертає кілька вихідних. 436 00:19:52,030 --> 00:19:56,660 І навпаки, Printf просто щось зробив. 437 00:19:56,660 --> 00:19:59,490 Вона не повертає нічого, що ми дбали про - хоча, як 438 00:19:59,490 --> 00:20:00,820 в сторону, вона повертає значення. 439 00:20:00,820 --> 00:20:02,650 Ви просто взагалі ігнорують його. 440 00:20:02,650 --> 00:20:04,000 Printf просто щось зробив. 441 00:20:04,000 --> 00:20:06,220 Це був побічний ефект друку на екрані. 442 00:20:06,220 --> 00:20:09,480 На відміну від тут, у нас є куб функції, які 443 00:20:09,480 --> 00:20:11,400 насправді повертає щось. 444 00:20:11,400 --> 00:20:12,960 >> Так що це взагалі - 445 00:20:12,960 --> 00:20:15,260 для тих, хто знайомий з цим, це досить проста ідея. 446 00:20:15,260 --> 00:20:18,460 Але для тих, хто менш знайомий з цією ідеєю проходять в входи і отримання 447 00:20:18,460 --> 00:20:21,700 назад виходів, давайте спробуємо просто щось супер просто. 448 00:20:21,700 --> 00:20:25,180 Хто-небудь зручні підійшовши на етапі коротко? 449 00:20:25,180 --> 00:20:27,460 Ви повинні бути знайомі з камерою на вас, як добре. 450 00:20:27,460 --> 00:20:27,640 Так. 451 00:20:27,640 --> 00:20:28,610 Добре, що вас звуть? 452 00:20:28,610 --> 00:20:29,020 KEN: Кен. 453 00:20:29,020 --> 00:20:29,420 David J. Малан: Кен. 454 00:20:29,420 --> 00:20:29,810 Гаразд, Кен. 455 00:20:29,810 --> 00:20:31,060 Піднімайся. 456 00:20:31,060 --> 00:20:34,660 Так що Кен буде функція виду тут. 457 00:20:34,660 --> 00:20:35,760 І давайте йти вперед і робити це. 458 00:20:35,760 --> 00:20:38,790 Давайте трохи фантазії. 459 00:20:38,790 --> 00:20:39,770 Дуже приємно. 460 00:20:39,770 --> 00:20:41,010 Ласкаво просимо в центрі сцени. 461 00:20:41,010 --> 00:20:41,980 Добре. 462 00:20:41,980 --> 00:20:45,590 Давайте хіт цієї кнопки тут. 463 00:20:45,590 --> 00:20:46,420 Добре. 464 00:20:46,420 --> 00:20:49,490 Так що тут у вас є сучасний дошці. 465 00:20:49,490 --> 00:20:53,050 І те, що я є основною функцією, наприклад. 466 00:20:53,050 --> 00:20:55,990 І я не маю IPad в руках. 467 00:20:55,990 --> 00:20:59,000 Я дійсно не пам'ятаю, як - ну, насправді, не можу сказати. 468 00:20:59,000 --> 00:21:02,200 Я дійсно не мають гарний почерк. 469 00:21:02,200 --> 00:21:05,260 І тому я хочу, щоб ви щось надрукувати на екрані для мене. 470 00:21:05,260 --> 00:21:07,470 >> Так що я будучи основної програми. 471 00:21:07,470 --> 00:21:15,060 І я хочу, щоб ти сказав це, написавши його в моїй курячої нуля і 472 00:21:15,060 --> 00:21:16,600 Потім повз вас вхід. 473 00:21:16,600 --> 00:21:20,000 Так само безглуздо, хоча це вправа, поняття функцій і виклику 474 00:21:20,000 --> 00:21:22,260 Функція та повернення функцією дійсно зводиться до цього. 475 00:21:22,260 --> 00:21:23,120 Я на-Майні. 476 00:21:23,120 --> 00:21:26,270 Я тільки що написав Е ("щось") на екрані. 477 00:21:26,270 --> 00:21:27,470 Я біжу цієї програми. 478 00:21:27,470 --> 00:21:30,900 І як тільки Printf викликається, вона приймає один аргумент - або один параметр, 479 00:21:30,900 --> 00:21:31,660 іноді - 480 00:21:31,660 --> 00:21:32,780 в подвійні лапки. 481 00:21:32,780 --> 00:21:33,960 Ось це аргумент. 482 00:21:33,960 --> 00:21:35,740 Я передаю його Кен. 483 00:21:35,740 --> 00:21:39,390 Тепер він є чорним ящиком написав деяку кількість років тому, по-видимому 484 00:21:39,390 --> 00:21:41,070 знає тільки як друкувати речі на екрані. 485 00:21:41,070 --> 00:21:42,320 >> Таким чином, виконання. 486 00:21:48,842 --> 00:21:49,900 Це не погано. 487 00:21:49,900 --> 00:21:50,890 Так, дуже добре. 488 00:21:50,890 --> 00:21:52,900 Так що тепер Кен робиться виконання. 489 00:21:52,900 --> 00:21:55,810 Йому потрібно, щоб передати мені нічого взамін? 490 00:21:55,810 --> 00:21:57,240 Таким чином, не те, що ми бачили досі. 491 00:21:57,240 --> 00:21:59,230 Знову ж таки, Printf Чи насправді повертає число. 492 00:21:59,230 --> 00:22:01,640 Але ми збираємося ігнорувати, що на даний момент, тому що ми ніколи не використовували його. 493 00:22:01,640 --> 00:22:03,400 Так ось воно що для Кена. 494 00:22:03,400 --> 00:22:06,650 І ось тепер основні повертається виконати - 495 00:22:06,650 --> 00:22:09,630 Основними бере на себе управління програмою знову, тому що рядки коду, 496 00:22:09,630 --> 00:22:11,010 Printf, здійснюється виконання. 497 00:22:11,010 --> 00:22:13,890 І ми йдемо про наш шлях виконання будь-яких інших ліній є. 498 00:22:13,890 --> 00:22:14,130 >> Добре. 499 00:22:14,130 --> 00:22:17,080 Отже, тепер давайте спробуємо трохи інший приклад. 500 00:22:17,080 --> 00:22:22,430 І на цей раз тут, давайте спочатку очистити екран тут. 501 00:22:22,430 --> 00:22:24,670 І на цей раз ми будемо робити виміри кубатури функції. 502 00:22:24,670 --> 00:22:27,350 Але на цей раз, я думаю, вихідне значення. 503 00:22:27,350 --> 00:22:28,630 Так що давайте йти вперед і робити це. 504 00:22:28,630 --> 00:22:35,680 Так що тепер у мене є рядок коду, яка говорить, х = куба (х). 505 00:22:35,680 --> 00:22:36,930 Так що насправді let's - 506 00:22:41,450 --> 00:22:43,940 рядок коду, нагадаємо, виглядає наступним чином. 507 00:22:43,940 --> 00:22:45,960 х = куба (х). 508 00:22:45,960 --> 00:22:48,100 Так як це буде працювати? 509 00:22:48,100 --> 00:22:50,820 Так що давайте йти вперед і дати вам білий екран. 510 00:22:50,820 --> 00:22:55,000 І я збираюся писати тепер до значення х, які в даний момент 511 00:22:55,000 --> 00:23:01,080 Час трапляється, скажімо, 2, зберегти його простим. 512 00:23:01,080 --> 00:23:04,890 Так що я записав на папірці значення 2, 513 00:23:04,890 --> 00:23:06,100 , Який є моїм значення х. 514 00:23:06,100 --> 00:23:08,250 Я передаю його Кен. 515 00:23:08,250 --> 00:23:09,200 KEN: А я просто пишу відповідь? 516 00:23:09,200 --> 00:23:12,660 David J. Малан: Так, давайте просто написати відповідь. 517 00:23:12,660 --> 00:23:13,030 Добре. 518 00:23:13,030 --> 00:23:16,280 І тепер він повинен повернути мені що-небудь. 519 00:23:16,280 --> 00:23:17,560 Так що - 520 00:23:17,560 --> 00:23:18,170 досконалою. 521 00:23:18,170 --> 00:23:18,840 Приємно перехід. 522 00:23:18,840 --> 00:23:21,970 >> Так що тепер він простягає мені назад значення 8, у даному випадку. 523 00:23:21,970 --> 00:23:23,220 І що мені робити з ним? 524 00:23:23,220 --> 00:23:26,130 Ну, насправді, давайте подивимося. 525 00:23:26,130 --> 00:23:26,640 Отримати це право. 526 00:23:26,640 --> 00:23:27,880 Що я буду з нею робити? 527 00:23:27,880 --> 00:23:31,900 Тепер я збираюся взяти це значення і насправді зберігати його в тих 528 00:23:31,900 --> 00:23:33,400 ті ж біти в пам'яті. 529 00:23:33,400 --> 00:23:35,030 Але зауважте, я трохи борються тут. 530 00:23:35,030 --> 00:23:38,280 Я трохи збентежений, бо де я насправді писати значення х? 531 00:23:38,280 --> 00:23:41,840 Тому що я тільки що зробив фізично руку Кен папері 532 00:23:41,840 --> 00:23:44,400 , Які мали значення 2, яке було х. 533 00:23:44,400 --> 00:23:46,300 І дійсно, це саме те, що відбувається. 534 00:23:46,300 --> 00:23:50,100 Ось і виходить, що при виклику функції, і ви передаєте в якості аргументу 535 00:23:50,100 --> 00:23:54,130 як "привіт світ" або ви передаєте в якості аргументу, як 2, як правило, ви 536 00:23:54,130 --> 00:23:56,720 проходить в копії цього аргументу. 537 00:23:56,720 --> 00:24:01,020 І так само, як я записав номер 2 тут і передав його Кена, які повинні 538 00:24:01,020 --> 00:24:04,760 означає, що в мене ще є копія значення 2 десь. 539 00:24:04,760 --> 00:24:08,140 Бо дійсно, тепер, коли я отримав назад значення 8, мені потрібно, щоб повернутися в 540 00:24:08,140 --> 00:24:12,010 RAM і фактично записати 8, де я колись був номер 2. 541 00:24:12,010 --> 00:24:15,720 >> Таким чином, візуально пам'ятаю це поняття проходить в буквальному 542 00:24:15,720 --> 00:24:16,730 копію значення. 543 00:24:16,730 --> 00:24:19,570 Кен робить свою справу, простягає мені у відповідь щось - в даному випадку, 544 00:24:19,570 --> 00:24:20,820 значення, як 8. 545 00:24:20,820 --> 00:24:22,660 А то у мене щось зробити з цим значенням, якщо я 546 00:24:22,660 --> 00:24:24,880 хочете зберегти його навколо. 547 00:24:24,880 --> 00:24:29,470 Так що все це буде дуже добре знайомі незабаром. 548 00:24:29,470 --> 00:24:33,082 Спасибі вам велике за це демо тут, Кен. 549 00:24:33,082 --> 00:24:34,820 Добре. 550 00:24:34,820 --> 00:24:36,720 Дуже добре зроблено. 551 00:24:36,720 --> 00:24:40,610 Отже, давайте подивимося, як це в кінцевому підсумку пов'язане з деякими з функцій 552 00:24:40,610 --> 00:24:42,270 виклику, що ми робимо тут. 553 00:24:42,270 --> 00:24:47,610 Отже, дозвольте мені йти вперед і повернути нас до вимірювання кубатури приклад. 554 00:24:47,610 --> 00:24:53,080 І зверніть увагу, що якщо ми дійсно хочемо почати приймати це далі, ми збираємося 555 00:24:53,080 --> 00:24:57,050 мати, щоб пам'ятати про те, що число х який передається в 556 00:24:57,050 --> 00:25:01,390 тут відрізняється від того, що насправді передається в функцію. 557 00:25:01,390 --> 00:25:03,940 Отже, ще раз, це прийнятий копія стане зовсім 558 00:25:03,940 --> 00:25:05,620 доречні в одну хвилину. 559 00:25:05,620 --> 00:25:09,320 >> Отже, давайте поглянемо на те, що не зовсім правильно працювати ще. 560 00:25:09,320 --> 00:25:11,790 Я збираюся йти вперед і відкрити третій приклад помилки, яка 561 00:25:11,790 --> 00:25:13,560 недосконала за своєю природою. 562 00:25:13,560 --> 00:25:18,070 І це називається buggy3, і реалізує заміни. 563 00:25:18,070 --> 00:25:23,500 Таким чином, тут ми маємо основні функції, які х і у довільно ініціалізується 564 00:25:23,500 --> 00:25:24,720 1 і 2, відповідно. 565 00:25:24,720 --> 00:25:27,590 Ми могли б використовувати GetInt, але нам просто потрібно проста вправа. 566 00:25:27,590 --> 00:25:29,680 Таким чином, це жорстко, як 1 і 2. 567 00:25:29,680 --> 00:25:35,330 У рядках 21 і 22, ми, мабуть, роздрукуйте х і у, по одному на рядок. 568 00:25:35,330 --> 00:25:39,620 Потім у рядку 23, я стверджую, я обмін цими значеннями, крапка, крапка, крапка. 569 00:25:39,620 --> 00:25:43,030 Я мабуть виклику функції в рядку 24 називається своп 570 00:25:43,030 --> 00:25:44,000 , Яка приймає два аргументи. 571 00:25:44,000 --> 00:25:46,430 Це абсолютно законно для функції приймають два аргументи. 572 00:25:46,430 --> 00:25:48,220 Ми бачили Printf це зробити вже. 573 00:25:48,220 --> 00:25:50,370 Таким чином, своп-видимому, має х і у. 574 00:25:50,370 --> 00:25:53,010 І, як припускає його назва, я сподіваюся, що це буде 575 00:25:53,010 --> 00:25:54,320 поміняти ці два значення. 576 00:25:54,320 --> 00:25:57,560 Тоді я претендувати на лінії 25, помінялися місцями. 577 00:25:57,560 --> 00:26:01,570 І я передрукувати х і у в припущенні, що 578 00:26:01,570 --> 00:26:02,830 вони дійсно були поміняні місцями. 579 00:26:02,830 --> 00:26:04,370 Але якщо я дійсно запустити цю програму - 580 00:26:04,370 --> 00:26:06,060 Дозвольте мені відкрити вікно терміналу. 581 00:26:06,060 --> 00:26:07,750 Дозвольте мені зробити buggy3. 582 00:26:07,750 --> 00:26:09,970 Як випливає з назви, це не скінчиться добре. 583 00:26:09,970 --> 00:26:14,690 Тому що, коли я вдарив Enter, зауважив, що х 1. 584 00:26:14,690 --> 00:26:15,720 у-2. 585 00:26:15,720 --> 00:26:19,160 І все ж в кінці програми, вони все ще, по суті, те ж саме. 586 00:26:19,160 --> 00:26:22,760 >> Таким чином, на основі демонстрації тільки зараз з Кеном, те, що відбувається насправді? 587 00:26:22,760 --> 00:26:24,660 Ну, давайте зануритися в цю своп функції. 588 00:26:24,660 --> 00:26:25,800 Це супер короткі. 589 00:26:25,800 --> 00:26:28,020 Це всього лише кілька рядків коду довго. 590 00:26:28,020 --> 00:26:32,810 Але те, що фундаментальні проблеми на основі просту історію розповів 591 00:26:32,810 --> 00:26:34,270 тут з Кеном? 592 00:26:34,270 --> 00:26:36,115 Чому підкачки не працює? 593 00:26:36,115 --> 00:26:37,365 [Нерозбірливо] 594 00:26:39,840 --> 00:26:40,460 Саме так. 595 00:26:40,460 --> 00:26:43,610 Таким чином, ми зберіганні на копію, а не саму змінну. 596 00:26:43,610 --> 00:26:46,810 Іншими словами, своп-видимому, має два аргументи, Int. 597 00:26:46,810 --> 00:26:49,370 І це умовно назвати і б. 598 00:26:49,370 --> 00:26:54,430 І тут, я пройшла по х і у, які є відповідно 1 і 2. 599 00:26:54,430 --> 00:26:56,580 Але я не в буквальному сенсі проходить в х. 600 00:26:56,580 --> 00:26:58,410 Я не буквально проходить в рік. 601 00:26:58,410 --> 00:27:01,230 Я передаю копії х і копію у. 602 00:27:01,230 --> 00:27:05,180 Це все одно, майже як якби ви скопіювали і вставили в поміняйте значення, 603 00:27:05,180 --> 00:27:07,440 Ви хочете, щоб насправді маніпулювати. 604 00:27:07,440 --> 00:27:11,970 Так що, якщо це так, коли я, програму, розпочати виконання 605 00:27:11,970 --> 00:27:14,140 рядок 35, то 36 - 606 00:27:14,140 --> 00:27:17,740 коли я добираюся до лінії 37, на даний момент в цій історії, що значення? 607 00:27:20,740 --> 00:27:24,850 У цей момент в історії, рядок 37, що є значення в цій точці? 608 00:27:24,850 --> 00:27:25,980 Так воно і повинно бути просто 1. 609 00:27:25,980 --> 00:27:26,170 Вірно? 610 00:27:26,170 --> 00:27:29,100 Оскільки х був прийнятий в якості першого аргументу. 611 00:27:29,100 --> 00:27:33,150 І ця функція просто довільно називає свій перший аргумент,. 612 00:27:33,150 --> 00:27:35,130 Точно так само це у, другий аргумент. 613 00:27:35,130 --> 00:27:37,930 І це просто довільно виклик другого б аргумент. 614 00:27:37,930 --> 00:27:40,510 >> Тепер ця дихотомія насправді досить просто пояснити. 615 00:27:40,510 --> 00:27:40,880 Подумайте про це. 616 00:27:40,880 --> 00:27:42,980 Ніхто з нас не зустрічав людину, яка написала Printf. 617 00:27:42,980 --> 00:27:49,880 Так що, звичайно, він або вона не знає, що наші змінні через 30 років збираються 618 00:27:49,880 --> 00:27:50,710 називається. 619 00:27:50,710 --> 00:27:55,110 Так що має бути різниця між, що ви називаєте змінні в 620 00:27:55,110 --> 00:27:59,960 Функції ви пишете і що ви називаєте змінні у функціях ви 621 00:27:59,960 --> 00:28:01,770 зателефонувавши або використання. 622 00:28:01,770 --> 00:28:05,120 Отже, іншими словами, я написав мої змінних х і у. 623 00:28:05,120 --> 00:28:08,060 Але якщо хтось інший написав своп функції, він або вона, звичайно, 624 00:28:08,060 --> 00:28:10,480 не знаю, що моє змінних буде називатися. 625 00:28:10,480 --> 00:28:13,850 Так розумію, що це, чому у вас є ця двоїстість імен. 626 00:28:13,850 --> 00:28:16,800 Технічно я міг зробити це випадково. 627 00:28:16,800 --> 00:28:19,750 Але вони все одно передається в якості копії. 628 00:28:19,750 --> 00:28:22,940 Було б просто чистий збіг естетично, якщо це чоловік, який написав 629 00:28:22,940 --> 00:28:25,590 підкачки використовували ті ж імена. 630 00:28:25,590 --> 00:28:25,930 >> Добре. 631 00:28:25,930 --> 00:28:29,010 Таким чином, на даний момент в цій історії, рядок 37, 1. 632 00:28:29,010 --> 00:28:30,410 Ь 2. 633 00:28:30,410 --> 00:28:32,040 А тепер я переходжу до поміняти їх місцями. 634 00:28:32,040 --> 00:28:34,730 Ну, по-перше, дозвольте мені насправді зробити це набагато простіше. 635 00:28:34,730 --> 00:28:36,500 Я не знаю, що ці три рядки коду робили. 636 00:28:36,500 --> 00:28:37,370 Дозвольте мені зробити це. 637 00:28:37,370 --> 00:28:38,850 б отримує. 638 00:28:38,850 --> 00:28:40,170 отримує б. 639 00:28:40,170 --> 00:28:41,450 Готово. 640 00:28:41,450 --> 00:28:43,540 Чому це зламаний, логічно? 641 00:28:46,980 --> 00:28:48,590 Це свого роду інтуїтивні речі, чи не так? 642 00:28:48,590 --> 00:28:50,640 Таким чином, стає б. 643 00:28:50,640 --> 00:28:52,450 І б стає. 644 00:28:52,450 --> 00:28:55,410 Але проблема в тому, що як тільки рядку 37 виконується, те, що 645 00:28:55,410 --> 00:28:58,170 Значення і б? 646 00:28:58,170 --> 00:28:59,070 Те ж саме, 1. 647 00:28:59,070 --> 00:29:03,460 Тому що ви відразу, так би мовити, ви змінили б рівним. 648 00:29:03,460 --> 00:29:06,000 Тому, як тільки лінія 37 виконана, це здорово. 649 00:29:06,000 --> 00:29:09,940 Тепер у вас є дві копії номером 1 всередині цієї функції. 650 00:29:09,940 --> 00:29:14,720 Отже, коли ви говорите в рядку 38, б отримує, ну, ти ніби на болтах. 651 00:29:14,720 --> 00:29:17,370 Тому що ви просто присвоєння 1 до 1. 652 00:29:17,370 --> 00:29:20,400 Ти начебто втратив значення, яке ви дбали про. 653 00:29:20,400 --> 00:29:22,910 >> Таким чином, в оригінальну версію цієї, зверніть увагу, що я зробив. 654 00:29:22,910 --> 00:29:26,620 Замість цього я була третя рядок коду, яка виглядала наступним чином. 655 00:29:26,620 --> 00:29:29,910 Я заявляю, тимчасова змінна - TMP є дуже поширеним назвою 656 00:29:29,910 --> 00:29:31,240 для тимчасових змінних. 657 00:29:31,240 --> 00:29:34,280 Це Int тому що він повинен відповідати тому, що я хочу зробити копію. 658 00:29:34,280 --> 00:29:39,720 Я зберігаю копії всередині TMP. Тому, як тільки лінія 37 була виконана, 659 00:29:39,720 --> 00:29:41,390 Значення це - 660 00:29:41,390 --> 00:29:42,970 швидка перевірка справності - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 Значення Ь 2. 663 00:29:45,780 --> 00:29:48,470 І цінність TMP також 1. 664 00:29:48,470 --> 00:29:51,470 Так що тепер я виконаю лінії 38. 665 00:29:51,470 --> 00:29:57,180 Тому, як тільки лінія 38 виконується, приймає значення б. 666 00:29:57,180 --> 00:29:58,510 І В 2. 667 00:29:58,510 --> 00:30:00,500 Таким чином, в даний час 2. 668 00:30:00,500 --> 00:30:03,110 Таким чином, на даний момент в цій історії, дорівнює 2, б = 2, 669 00:30:03,110 --> 00:30:05,130 і TMP 1. 670 00:30:05,130 --> 00:30:09,330 Так що тепер логічно, ми можемо значення просто грюкнути TMP в в б. 671 00:30:09,330 --> 00:30:10,690 І ми зробили. 672 00:30:10,690 --> 00:30:12,170 >> Отже, ми вирішили цю проблему. 673 00:30:12,170 --> 00:30:16,040 На жаль, коли я запускаю цю програму в такому вигляді, це насправді не поміняти 674 00:30:16,040 --> 00:30:17,700 будь-які значення. 675 00:30:17,700 --> 00:30:18,950 Але щоб бути зрозумілим, чому? 676 00:30:23,420 --> 00:30:26,310 Я встановив логічні задачі з усього хвилину тому. 677 00:30:26,310 --> 00:30:31,150 Але знову ж, якщо я запускаю цю програму, х і у, залишаються незмінними до кінця 678 00:30:31,150 --> 00:30:33,834 програми виконання. 679 00:30:33,834 --> 00:30:34,760 [Нерозбірливо] 680 00:30:34,760 --> 00:30:36,030 David J. Малан: Таким чином, ми не повернули нічого. 681 00:30:36,030 --> 00:30:36,960 Так що це правда. 682 00:30:36,960 --> 00:30:39,880 Але, виявляється, є невелика проблема тут, тому що до цих пір, 683 00:30:39,880 --> 00:30:42,460 Єдине, що ми змогли повернути це одне. 684 00:30:42,460 --> 00:30:46,540 І це обмеження C. Ви можете повернути тільки дійсно одне значення, 685 00:30:46,540 --> 00:30:48,970 У цьому випадку, я трохи застряг тут 686 00:30:48,970 --> 00:30:51,805 тому що я міг повернути нове значення х, або я міг би повернутися 687 00:30:51,805 --> 00:30:53,160 Нове значення у. 688 00:30:53,160 --> 00:30:54,330 Але я хочу, і назад. 689 00:30:54,330 --> 00:30:58,010 Таким чином, повернення не просте рішення тут. 690 00:30:58,010 --> 00:30:59,770 Але проблема в корені чому? 691 00:30:59,770 --> 00:31:03,270 Що ми насправді помінялися місцями? 692 00:31:03,270 --> 00:31:04,010 а і б. 693 00:31:04,010 --> 00:31:07,670 Але і б є копіями х і у, яка означає, що ми тільки що зробили все це 694 00:31:07,670 --> 00:31:10,080 працювати - ми тільки що провели, як три хвилини говорити про своп 695 00:31:10,080 --> 00:31:11,680 функцію, і всі три з цих змінних. 696 00:31:11,680 --> 00:31:15,090 І це чудово, абсолютно правильно в ізоляції. 697 00:31:15,090 --> 00:31:20,230 Але і сфери B, тільки в цих рядках тут. 698 00:31:20,230 --> 00:31:24,130 Так як цикл, якщо ви оголосите ціле я всередину для 699 00:31:24,130 --> 00:31:27,400 петлю - так само, якщо ви оголошенні і б всередині функції, що 700 00:31:27,400 --> 00:31:30,550 Ви написали, що вони дійсні тільки всередині цієї функції. 701 00:31:30,550 --> 00:31:35,020 Це означає, як тільки своп зробити виконання, і ми йдемо від лінії 24 до 702 00:31:35,020 --> 00:31:38,380 рядок 25, х і у не змінилося. 703 00:31:38,380 --> 00:31:42,580 Ви просто даремно багато часу, обмін копіями змінних. 704 00:31:42,580 --> 00:31:46,490 >> Ось і виходить, що рішення це насправді, не очевидно. 705 00:31:46,490 --> 00:31:49,210 Це не цілком достатньо, щоб повертати значення, тому що ми можемо 706 00:31:49,210 --> 00:31:50,320 повертати тільки одне значення. 707 00:31:50,320 --> 00:31:53,370 І я дійсно хочу, щоб обміняти х і у в той же час. 708 00:31:53,370 --> 00:31:55,020 Так що ми збираємося повернутися до цього. 709 00:31:55,020 --> 00:31:58,770 Але зараз розумію, що питання принципово пов'язане з тим, 710 00:31:58,770 --> 00:32:00,660 що А і В є копіями. 711 00:32:00,660 --> 00:32:03,450 А вони в свою сферу. 712 00:32:03,450 --> 00:32:04,980 Ну, давайте спробуємо вирішити це в деякому роді. 713 00:32:04,980 --> 00:32:09,200 Дозвольте мені насправді прокрутити назад тут і відкрити, скажімо, четвертий варіант 714 00:32:09,200 --> 00:32:11,170 це, buggy4. 715 00:32:11,170 --> 00:32:13,230 А що з цього приводу? 716 00:32:13,230 --> 00:32:16,690 Це схожі, але більш просту задачу, щоб дивитися на, перш ніж прийняти удар на 717 00:32:16,690 --> 00:32:17,530 її вирішення. 718 00:32:17,530 --> 00:32:19,440 Ця програма називається приростом. 719 00:32:19,440 --> 00:32:24,320 І він, очевидно, ініціалізує ціле число х 1 у рядку 18. 720 00:32:24,320 --> 00:32:25,950 Я тоді стверджувати, х 1. 721 00:32:25,950 --> 00:32:28,020 Я тоді претензії прирощення, крапка, крапка, крапка. 722 00:32:28,020 --> 00:32:29,460 Потім я викликаю приріст. 723 00:32:29,460 --> 00:32:33,480 Але тоді в рядках 22 і 23, я стверджую, що це було збільшується. 724 00:32:33,480 --> 00:32:37,780 Я стверджую х зараз би це не було, 2 імовірно. 725 00:32:37,780 --> 00:32:39,770 >> Але ця програма глючить. 726 00:32:39,770 --> 00:32:41,020 У чому проблема? 727 00:32:43,450 --> 00:32:44,418 Так? 728 00:32:44,418 --> 00:32:45,668 [Нерозбірливо] 729 00:32:49,260 --> 00:32:49,850 David J. Малан: Абсолютно вірно. 730 00:32:49,850 --> 00:32:52,430 Таким х була оголошена явно в рядку 18. 731 00:32:52,430 --> 00:32:54,410 Тобто в фігурних дужках основного автора. 732 00:32:54,410 --> 00:32:58,470 Таким чином, проста відповідь у тому, що, ну, х існує тут. 733 00:32:58,470 --> 00:33:01,510 Вона не існує в рядку 32. 734 00:33:01,510 --> 00:33:03,710 Таким чином, ця програма насправді навіть не буде компілюватися. 735 00:33:03,710 --> 00:33:07,910 Компілятора, коли я намагаюся компіляції цього коду, буде кричати на мене 736 00:33:07,910 --> 00:33:13,190 Про деякі неоголошений ідентифікатор або щось в цьому роді. 737 00:33:13,190 --> 00:33:13,870 У самому справі, давайте спробуємо. 738 00:33:13,870 --> 00:33:15,235 Це робить buggy4. 739 00:33:17,780 --> 00:33:18,190 Там вона є. 740 00:33:18,190 --> 00:33:22,030 Використання неоголошених х ідентифікатор в рядку 32. 741 00:33:22,030 --> 00:33:25,700 А насправді, давайте будемо більш чітко тут сьогодні, так що це корисно 742 00:33:25,700 --> 00:33:27,140 робочий час і вдома. 743 00:33:27,140 --> 00:33:29,000 Зверніть увагу, що це трохи загадково написано. 744 00:33:29,000 --> 00:33:31,560 Але те, що Clang має кричав на нас, сказавши: 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, насправді корисно. 746 00:33:36,970 --> 00:33:41,970 Це означає, що помилка в рядку 32 на позицію символу п'ять. 747 00:33:41,970 --> 00:33:44,670 Таким чином, один, два, три, чотири, п'ять. 748 00:33:44,670 --> 00:33:46,640 Це, справді, де проблема. 749 00:33:46,640 --> 00:33:49,710 А також мати на увазі, в робочий час і вдома, мені пощастило тут. 750 00:33:49,710 --> 00:33:50,740 У мене є одна помилка. 751 00:33:50,740 --> 00:33:52,660 Це збирається бути відносно легко виправити. 752 00:33:52,660 --> 00:33:56,220 Але якщо ви отримаєте весь екран повний переважна повідомлення про помилки, знову ж таки, 753 00:33:56,220 --> 00:33:59,240 розуміють, що самий нижній можна просто бути симптомом 754 00:33:59,240 --> 00:34:00,320 самий верхній з них. 755 00:34:00,320 --> 00:34:03,560 Так завжди ганятися за ваші помилки зверху вниз. 756 00:34:03,560 --> 00:34:06,720 Тому що там може бути просто ланцюжком ефект, пропоную вам 757 00:34:06,720 --> 00:34:09,030 є набагато більше проблем, ніж ви насправді. 758 00:34:09,030 --> 00:34:14,989 >> Отже, як ми можемо це виправити, якщо моєю метою є, щоб збільшити х? 759 00:34:14,989 --> 00:34:15,370 Що це? 760 00:34:15,370 --> 00:34:15,620 Добре. 761 00:34:15,620 --> 00:34:16,679 Таким чином, ми можемо зробити глобальне х. 762 00:34:16,679 --> 00:34:18,860 Давайте ярлик, який я попереджав раніше. 763 00:34:18,860 --> 00:34:20,550 Але чорт візьми, нам просто потрібно швидко виправити. 764 00:34:20,550 --> 00:34:23,949 Так що давайте просто скажемо, Int х тут. 765 00:34:23,949 --> 00:34:25,600 Це робить х глобальної. 766 00:34:25,600 --> 00:34:28,460 Так що тепер основним має до нього доступ. 767 00:34:28,460 --> 00:34:31,780 І приріст має до нього доступ. 768 00:34:31,780 --> 00:34:33,860 І тому дозвольте мені йти далі і зібрати це зараз. 769 00:34:33,860 --> 00:34:36,330 Зробити buggy4, Enter. 770 00:34:36,330 --> 00:34:37,440 Здається, для компіляції зараз. 771 00:34:37,440 --> 00:34:40,949 Давайте запустимо buggy4, і здається, насправді працює. 772 00:34:40,949 --> 00:34:42,780 Тепер це одна з цих речей - 773 00:34:42,780 --> 00:34:45,870 Роби, як я кажу, а не як я роблю, як я тільки що зробив тут. 774 00:34:45,870 --> 00:34:49,239 Тому що в цілому наші програми збираються отримати набагато більш цікавим і 775 00:34:49,239 --> 00:34:50,440 набагато довше, ніж це. 776 00:34:50,440 --> 00:34:53,199 І якщо ваше рішення життєвих проблем є просто ах, покласти все 777 00:34:53,199 --> 00:34:57,550 змінних в початок файлу, дуже швидко роблять програми отримати 778 00:34:57,550 --> 00:34:59,700 жахливо важко керувати. 779 00:34:59,700 --> 00:35:02,050 Це стає все важче вигадувати нові імена змінних. 780 00:35:02,050 --> 00:35:05,240 Це стає все важче зрозуміти, що змінна робить. 781 00:35:05,240 --> 00:35:08,250 >> А так в загальному, це не дуже гарне рішення. 782 00:35:08,250 --> 00:35:09,780 Так давайте зробимо це краще. 783 00:35:09,780 --> 00:35:11,920 Ми не хочемо використовувати глобальну змінну тут. 784 00:35:11,920 --> 00:35:14,050 Я хочу, щоб збільшити х. 785 00:35:14,050 --> 00:35:16,050 Так що я міг би, очевидно - 786 00:35:16,050 --> 00:35:18,450 Зрештою, це свого роду дурні історії, тому що ми просто робимо це. 787 00:35:18,450 --> 00:35:22,050 Але якби я не знав про те, що оператор, або я не дозволили 788 00:35:22,050 --> 00:35:27,700 змінити його в основний собі, як ще я міг здійснювати Кен тут, це 789 00:35:27,700 --> 00:35:31,450 Час не куба, але для збільшення? 790 00:35:31,450 --> 00:35:32,700 Як змінити цю річ тут? 791 00:35:32,700 --> 00:35:33,025 Так. 792 00:35:33,025 --> 00:35:34,275 [Нерозбірливо] 793 00:35:37,430 --> 00:35:38,000 David J. Малан: Гаразд, добре. 794 00:35:38,000 --> 00:35:40,490 Так чому б мені не пройти в X? 795 00:35:40,490 --> 00:35:44,390 І тоді, а не повертати його, чому б мені не зробити повернення х + 1? 796 00:35:44,390 --> 00:35:46,370 Тепер, кілька речей повинні змінити тут. 797 00:35:46,370 --> 00:35:47,530 Я перебуваю на правильному шляху. 798 00:35:47,530 --> 00:35:48,910 Що ще потрібно налаштувати? 799 00:35:48,910 --> 00:35:49,470 Хтось інший. 800 00:35:49,470 --> 00:35:49,882 Так? 801 00:35:49,882 --> 00:35:51,530 [Нерозбірливо] 802 00:35:51,530 --> 00:35:53,520 David J. Малан: Мені потрібно змінити тип повернення збільшення 803 00:35:53,520 --> 00:35:54,590 тому що це не анулювати. 804 00:35:54,590 --> 00:35:56,650 Порожнеча означає, що нічого не повертається. 805 00:35:56,650 --> 00:35:57,600 Але, очевидно, тепер він є. 806 00:35:57,600 --> 00:36:01,280 Так що потрібно змінити в ціле, щоб бути послідовним з тим, що 807 00:36:01,280 --> 00:36:02,580 Я насправді повернення. 808 00:36:02,580 --> 00:36:04,580 >> Зараз щось ще, як і раніше баггі тут. 809 00:36:04,580 --> 00:36:04,982 Так? 810 00:36:04,982 --> 00:36:06,590 [Нерозбірливо] 811 00:36:06,590 --> 00:36:07,630 David J. Малан: Так що мені потрібно збільшувати х? 812 00:36:07,630 --> 00:36:10,336 [Нерозбірливо] 813 00:36:10,336 --> 00:36:11,880 David J. Малан: Ах, так що мені потрібно пройти х. 814 00:36:11,880 --> 00:36:13,300 Так що мені потрібно зробити це тут. 815 00:36:17,590 --> 00:36:19,690 Таким чином, прототип, я повинен змінити це тут. 816 00:36:19,690 --> 00:36:21,290 Таким чином, це має стати Int. 817 00:36:21,290 --> 00:36:22,820 Це повинно стати - 818 00:36:22,820 --> 00:36:23,670 хм. 819 00:36:23,670 --> 00:36:24,710 Я насправді є помилка тут. 820 00:36:24,710 --> 00:36:25,780 Давайте виправимо це в першу чергу. 821 00:36:25,780 --> 00:36:27,990 Що це насправді бути? 822 00:36:27,990 --> 00:36:29,330 Так що це має бути щось Int. 823 00:36:29,330 --> 00:36:30,340 Це може бути х. 824 00:36:30,340 --> 00:36:33,120 Але, відверто кажучи, якщо ви починаєте закликаючи всіх ваших змінних х, він збирається отримати 825 00:36:33,120 --> 00:36:35,250 все менш і менш ясно, що є що. 826 00:36:35,250 --> 00:36:38,210 Так що давайте просто довільно вибрати різні іменування для мого 827 00:36:38,210 --> 00:36:40,220 допоміжні функції, функції я пишу. 828 00:36:40,220 --> 00:36:41,100 Ми будемо називати його. 829 00:36:41,100 --> 00:36:44,500 Або ми могли б назвати його - давайте назвемо це even_number бути ще більш явною. 830 00:36:44,500 --> 00:36:47,610 І тоді я повинен повернути все, що номер плюс 1. 831 00:36:47,610 --> 00:36:49,720 А тепер я повинен змінити одну річ тут і одне 832 00:36:49,720 --> 00:36:50,700 Інша річ, яку тут. 833 00:36:50,700 --> 00:36:54,150 Що я повинен змінити в рядку 21 в першу чергу? 834 00:36:54,150 --> 00:36:55,390 Я повинен призначити його на х. 835 00:36:55,390 --> 00:36:57,480 Тому я не можу просто зателефонувати прирощення х. 836 00:36:57,480 --> 00:37:01,000 Мені потрібно пам'ятати відповідь на зміну значення х на 837 00:37:01,000 --> 00:37:02,020 з лівого боку. 838 00:37:02,020 --> 00:37:04,930 І хоча х зараз знаходиться на лівій і правій, це абсолютно нормально, тому що 839 00:37:04,930 --> 00:37:08,370 права частина запускається на виконання першого потім отримує гепнувся в ліву 840 00:37:08,370 --> 00:37:10,240 руки річ, х в цьому випадку. 841 00:37:10,240 --> 00:37:11,900 І тоді, нарешті, це легко виправити зараз. 842 00:37:11,900 --> 00:37:15,080 Це повинно просто відповідати тому, що це внизу. 843 00:37:15,080 --> 00:37:17,120 Int номер. 844 00:37:17,120 --> 00:37:17,320 >> Добре. 845 00:37:17,320 --> 00:37:20,290 Таким чином, цілий букет змін дійсно нерозумно функції. 846 00:37:20,290 --> 00:37:24,250 Але представник речей, які ми більше хочемо зробити. 847 00:37:24,250 --> 00:37:25,490 Так що buggy4. 848 00:37:25,490 --> 00:37:26,485 Я десь напартачили. 849 00:37:26,485 --> 00:37:27,520 О, мій Бог. 850 00:37:27,520 --> 00:37:29,660 П'ять помилок у, начебто, шість рядки. 851 00:37:29,660 --> 00:37:36,500 Так що ж трапилося на лінії 18, символ 5? 852 00:37:36,500 --> 00:37:36,970 Добре. 853 00:37:36,970 --> 00:37:39,330 Так що я повинен заявити про це Int. 854 00:37:39,330 --> 00:37:39,630 Добре. 855 00:37:39,630 --> 00:37:41,790 Отже, давайте подивимося, ціла купа інших помилок. 856 00:37:41,790 --> 00:37:42,230 О, мій бог. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Але, знову ж таки, давайте просто очистити екран - 859 00:37:46,020 --> 00:37:48,660 Управління L тут - і повторні Clang. 860 00:37:48,660 --> 00:37:51,340 Таким чином, п'ять проблем насправді тільки це. 861 00:37:51,340 --> 00:37:53,500 Отже, тепер давайте запустимо buggy4, Enter. 862 00:37:53,500 --> 00:37:54,150 Ось так. 863 00:37:54,150 --> 00:37:57,434 х був збільшений правильно. 864 00:37:57,434 --> 00:37:58,420 >> Добре. 865 00:37:58,420 --> 00:38:01,700 Будь-які питання про те, як збільшити число? 866 00:38:01,700 --> 00:38:02,896 Так? 867 00:38:02,896 --> 00:38:06,864 SPEAKER 2: Чому це, що ви можете просто змінити X на номер в змінну 868 00:38:06,864 --> 00:38:08,860 ім'я, і ​​він буде знати, що ви маєте на увазі? 869 00:38:08,860 --> 00:38:09,600 David J. Малан: Хороше питання. 870 00:38:09,600 --> 00:38:13,130 Як це, що я можу просто змінити х на номер і програма буде знати, 871 00:38:13,130 --> 00:38:13,990 відразу? 872 00:38:13,990 --> 00:38:16,120 Отже, ще раз, думати про нього, як це абстракція. 873 00:38:16,120 --> 00:38:20,110 Так що, якщо я головний і Кен додаткових, чесно кажучи, мені все одно 874 00:38:20,110 --> 00:38:21,540 що Кен називає свою Ipad. 875 00:38:21,540 --> 00:38:25,350 Мене не хвилює, що він називає все, що має відношення до його здійснення 876 00:38:25,350 --> 00:38:26,550 з цієї функції. 877 00:38:26,550 --> 00:38:32,130 Так що це деталь реалізації, що я, головне, не 878 00:38:32,130 --> 00:38:33,010 повинні піклуватися про. 879 00:38:33,010 --> 00:38:37,440 І так просто змінивши його послідовно всередині функції, кількість тут 880 00:38:37,440 --> 00:38:41,340 і номер тут, це все, що займає так багато часу, як я перекомпілювати. 881 00:38:41,340 --> 00:38:43,820 Це ніби як якщо ви думаєте про - багато хто з нас, тих, у кого водія 882 00:38:43,820 --> 00:38:46,590 Ліцензії хто їздив, або якщо ви навіть в'їхав в автомобіль - 883 00:38:46,590 --> 00:38:50,710 Більшість з нас не знають, як машина працює під капотом. 884 00:38:50,710 --> 00:38:54,710 І буквально, якщо ви відкриваєте капот, більшість з нас - я в тому числі - 885 00:38:54,710 --> 00:38:56,580 не збирається знаю, що ми дивимося. 886 00:38:56,580 --> 00:38:58,850 Ніби як ви можете відчувати себе в такі речі, як це прямо зараз. 887 00:38:58,850 --> 00:39:01,380 Але ми дійсно не маємо дбати, як машина працює. 888 00:39:01,380 --> 00:39:05,000 Ми не повинні піклуватися, що всі стержні і поршнів і кабелів усередині 889 00:39:05,000 --> 00:39:07,700 машина насправді робить. 890 00:39:07,700 --> 00:39:11,360 >> Так щось подібне, що ви називаєте поршень не має значення 891 00:39:11,360 --> 00:39:11,920 Тут в цьому випадку. 892 00:39:11,920 --> 00:39:12,490 Та ж сама ідея. 893 00:39:12,490 --> 00:39:12,670 Так? 894 00:39:12,670 --> 00:39:13,920 [Нерозбірливо] 895 00:39:25,250 --> 00:39:29,530 David J. Малан: Якби було більше використанні змінного моменту ха назад, 896 00:39:29,530 --> 00:39:32,220 Ви, програміст, доведеться міняти їх всюди. 897 00:39:32,220 --> 00:39:35,230 Або ви могли б зробити буквально файлів, меню, а потім Знайти / Замінити, 898 00:39:35,230 --> 00:39:36,270 щось на зразок цього. 899 00:39:36,270 --> 00:39:40,110 Але ви будете мати, щоб зробити ці зміни самостійно. 900 00:39:40,110 --> 00:39:41,200 Ви повинні бути послідовні. 901 00:39:41,200 --> 00:39:42,450 [Нерозбірливо] 902 00:39:47,200 --> 00:39:48,960 David J. Малан: визначеному порядку, як тут? 903 00:39:48,960 --> 00:39:52,660 Якби це було Int інший номер? 904 00:39:52,660 --> 00:39:52,940 Так. 905 00:39:52,940 --> 00:39:56,430 Таким чином, порядок має значення, коли ви викликаєте функцію. 906 00:39:56,430 --> 00:40:00,350 Так що якщо я дзвонили приріст тут щось в цьому коми, 907 00:40:00,350 --> 00:40:01,400 є пряме відображення. 908 00:40:01,400 --> 00:40:04,490 Перша змінна, як там це називається, зроблена копія першої 909 00:40:04,490 --> 00:40:05,480 Аргумент тут. 910 00:40:05,480 --> 00:40:07,280 На жаль, цього не повинно бути круглих дужках. 911 00:40:07,280 --> 00:40:09,300 Другий аргумент лінії з другим. 912 00:40:09,300 --> 00:40:11,220 >> Так порядку, так, питань. 913 00:40:11,220 --> 00:40:11,490 Добре. 914 00:40:11,490 --> 00:40:13,360 Вибачте, що я взяв довгий шлях, щоб дістатися там. 915 00:40:13,360 --> 00:40:14,610 Інші питання? 916 00:40:16,460 --> 00:40:16,850 Добре. 917 00:40:16,850 --> 00:40:20,300 Отже, давайте подивимося, якщо ми не можемо намалювати картину того, що відбувається насправді 918 00:40:20,300 --> 00:40:22,160 Тут під капотом, так би мовити. 919 00:40:22,160 --> 00:40:26,310 Так що це прямокутник, який може представляти пам'яті комп'ютера. 920 00:40:26,310 --> 00:40:31,240 Так що навіть якщо ви не знаєте, як працює пам'ять або як RAM роботи, принаймні, 921 00:40:31,240 --> 00:40:33,590 Припустимо, що у вас є пучки вона в ці дні. 922 00:40:33,590 --> 00:40:34,740 У вас є мегабайти його. 923 00:40:34,740 --> 00:40:35,760 У вас є гігабайти його. 924 00:40:35,760 --> 00:40:40,690 І ми знаємо, від тижня нулю, що байт саме те, що? 925 00:40:40,690 --> 00:40:41,280 8 біт. 926 00:40:41,280 --> 00:40:42,730 Право, таким чином, 8 нулів і одиниць. 927 00:40:42,730 --> 00:40:46,300 Отже, якщо ваш комп'ютер має гігабайт оперативної пам'яті, два гігабайти оперативної пам'яті в ці дні, у вас є 928 00:40:46,300 --> 00:40:54,450 млрд. або 2 млрд. байт пам'яті, або приблизно 8 млрд., або 16 млрд 929 00:40:54,450 --> 00:40:56,560 бітів, всередині комп'ютера. 930 00:40:56,560 --> 00:40:59,710 Тепер, на відміну від маленьких Woolly наприклад Віллі, це не магнітні частинки 931 00:40:59,710 --> 00:41:00,560 Зазвичай більше. 932 00:41:00,560 --> 00:41:04,470 Все частіше в ноутбуках принаймні, це твердотільні накопичувачі SSD, що 933 00:41:04,470 --> 00:41:05,560 просто не мають рухомих частин. 934 00:41:05,560 --> 00:41:06,710 Це всі електронні. 935 00:41:06,710 --> 00:41:08,070 Це все електрику основі. 936 00:41:08,070 --> 00:41:12,360 Так що думаю, хоча, це просто прямокутник, як представляють одну або дві 937 00:41:12,360 --> 00:41:13,930 гігабайтами пам'яті, яка у вас є. 938 00:41:13,930 --> 00:41:15,500 >> Так що це шматок пам'яті. 939 00:41:15,500 --> 00:41:20,460 Зараз у світі комп'ютерних наук має вигляд відгороджена шматки 940 00:41:20,460 --> 00:41:22,570 пам'яті, щоб зробити різні речі. 941 00:41:22,570 --> 00:41:25,930 Так, наприклад, якщо це оперативної пам'яті комп'ютера - як це було запропоновано 942 00:41:25,930 --> 00:41:30,400 Прямокутник там - Виходить, що за угодою, у верхній частині вашої пам'яті, тому 943 00:41:30,400 --> 00:41:33,170 говорити, як правило, те, що називається текстовий сегмент. 944 00:41:33,170 --> 00:41:35,910 Ті нулів і одиниць, що ви зібрали. 945 00:41:35,910 --> 00:41:39,040 Тому, коли ми дивилися під капотом на те, що a.out є всі 946 00:41:39,040 --> 00:41:40,360 нулів і одиниць - 947 00:41:40,360 --> 00:41:44,000 При запуску програми, ці нулі і одиниці завантажується з жорсткого 948 00:41:44,000 --> 00:41:46,290 диск в те, що називається оперативної пам'яті. 949 00:41:46,290 --> 00:41:48,950 І в пам'яті, вони містяться у верхній частині. 950 00:41:48,950 --> 00:41:50,330 Тепер Тим часом, у вас є інші речі. 951 00:41:50,330 --> 00:41:53,060 Ініціалізований даних, неініціалізованих даних. 952 00:41:53,060 --> 00:41:56,440 Ці два валки пам'яті, звертайтеся до глобальні змінні, які 953 00:41:56,440 --> 00:41:57,530 ви не часто використовуєте. 954 00:41:57,530 --> 00:42:00,630 Але іноді, якщо ви це зробите, вони в кінцевому підсумку там також. 955 00:42:00,630 --> 00:42:01,620 Тоді є деякі інші речі. 956 00:42:01,620 --> 00:42:04,130 Змінні середовища, які ми не будемо витрачати багато часу на. 957 00:42:04,130 --> 00:42:06,120 Але потім дві важливі речі, які будуть повертатися протягом усього цього 958 00:42:06,120 --> 00:42:08,130 семестру, стека і купи. 959 00:42:08,130 --> 00:42:12,280 >> Тому більшість з пам'яті комп'ютера зберігається при запуску програми 960 00:42:12,280 --> 00:42:14,880 те, що називається стеком і те, що називається купою. 961 00:42:14,880 --> 00:42:16,940 І ми не збираємося говорити про купу сьогодні, але ми будемо 962 00:42:16,940 --> 00:42:18,180 говорити про стек. 963 00:42:18,180 --> 00:42:22,910 І стека призначена викликати в уяві візуальні подібних їдальнею 964 00:42:22,910 --> 00:42:26,120 їду в лотках Mather будинок, або там, де ви будете, де 965 00:42:26,120 --> 00:42:27,810 Персонал їдальнею чистити їх кожен день. 966 00:42:27,810 --> 00:42:30,180 Вони складаються їх від підлоги вгору. 967 00:42:30,180 --> 00:42:33,800 І точно так само в пам'яті, є така ідея поставити щось на 968 00:42:33,800 --> 00:42:36,740 стек, поставивши щось на стеку, покласти щось у стеці. 969 00:42:36,740 --> 00:42:38,000 І що ж ми маємо на увазі під цим? 970 00:42:38,000 --> 00:42:41,430 Ну, давайте збільшити тільки на нижню половину цієї картини, вашого комп'ютера 971 00:42:41,430 --> 00:42:43,990 RAM, запропонувати наступне. 972 00:42:43,990 --> 00:42:48,300 Виявляється, що коли ви запускаєте програму, як a.out або привіт, незалежно від 973 00:42:48,300 --> 00:42:49,920 Програма є те, що ви написали, 974 00:42:49,920 --> 00:42:53,030 Знову ж таки, ті нулів і одиниць завантажується з жорсткого диска - який є 975 00:42:53,030 --> 00:42:56,190 тривалого зберігання, залишається там, навіть коли ви вилку - 976 00:42:56,190 --> 00:42:57,220 завантажуються в оперативну пам'ять. 977 00:42:57,220 --> 00:42:59,020 RAM швидше, ніж жорсткі диски. 978 00:42:59,020 --> 00:43:00,700 Це менше, ніж жорсткі диски. 979 00:43:00,700 --> 00:43:03,490 Але це там, де програми жити, поки ви працюєте них. 980 00:43:03,490 --> 00:43:06,380 >> Таким чином, ви двічі клацніть програму на Mac або ПК - вона завантажується з 981 00:43:06,380 --> 00:43:07,750 жорсткого диска в оперативну пам'ять. 982 00:43:07,750 --> 00:43:11,760 Як тільки він буде завантажений в оперативну пам'ять, нулів і одиниць піти на те, як зверху, 983 00:43:11,760 --> 00:43:13,130 так званий текстовий сегмент. 984 00:43:13,130 --> 00:43:17,040 Але тоді, як тільки ваша програма фактично починає працювати, основна 985 00:43:17,040 --> 00:43:18,140 Функція називається. 986 00:43:18,140 --> 00:43:21,070 А головне, як ми бачили, часто має локальні змінні. 987 00:43:21,070 --> 00:43:24,560 І вона має цілих і рядків і символів тощо. 988 00:43:24,560 --> 00:43:28,300 Так що якщо ваші програми, які ви написали або програми, які у вас є 989 00:43:28,300 --> 00:43:33,680 подвійному клацанні використовувати деякі змінні усередині основного, вони в кінцевому підсумку на 990 00:43:33,680 --> 00:43:37,020 нижній частині стека пам'яті, так би мовити. 991 00:43:37,020 --> 00:43:39,160 Тепер більш конкретно, що ж це насправді означає? 992 00:43:39,160 --> 00:43:44,080 Це просто означає, що якщо ми будемо нумерувати речі - 993 00:43:44,080 --> 00:43:49,380 якщо ми збираємося число байт оперативної пам'яті на комп'ютері, відмітили, що 994 00:43:49,380 --> 00:43:51,650 це може бути нульовим байтом числа. 995 00:43:51,650 --> 00:43:56,130 Це може бути байтом номер один, два, три, чотири, п'ять, шість, усі 996 00:43:56,130 --> 00:43:57,290 аж до подобається - 997 00:43:57,290 --> 00:44:01,520 2 млрд буде всю дорогу там на самому верху. 998 00:44:01,520 --> 00:44:05,960 Отже, іншими словами, коли ми говоримо про оперативну пам'ять або пам'яті в байтах, він 999 00:44:05,960 --> 00:44:09,680 просто означає, що хтось вирішив, що номер кожного з 1000 00:44:09,680 --> 00:44:11,110 ці шматки пам'яті. 1001 00:44:11,110 --> 00:44:16,950 >> Тому, коли вам потрібно 32 біта для Int, або вам потрібно 8 біт на символ, де 1002 00:44:16,950 --> 00:44:18,320 вони в кінцевому підсумку в пам'яті? 1003 00:44:18,320 --> 00:44:20,650 Ну концептуально, вони просто в кінцевому підсумку в нижній частині цього 1004 00:44:20,650 --> 00:44:21,780 те, що називається стек. 1005 00:44:21,780 --> 00:44:25,670 Але що цікаво тепер, коли основні викликає функцію. 1006 00:44:25,670 --> 00:44:28,830 Нехай функція називається Фу, просто довільне ім'я. 1007 00:44:28,830 --> 00:44:32,480 Що відбувається, є основним знаходиться в нижній частині цього стека пам'яті. 1008 00:44:32,480 --> 00:44:35,630 Foo тепер поміщається у верхній частині головного в пам'яті. 1009 00:44:35,630 --> 00:44:40,020 Таким чином, будь-які локальні змінні, Foo була в кінцевому підсумку роду концептуально вище 1010 00:44:40,020 --> 00:44:40,770 ті, в основному. 1011 00:44:40,770 --> 00:44:46,920 Якщо Foo викликає іншу функцію під назвою бару, ці змінні в кінцевому підсумку тут. 1012 00:44:46,920 --> 00:44:49,790 Якщо барі називає щось ще, тут, тут, тут. 1013 00:44:49,790 --> 00:44:53,900 Так що ж цікавого про запуск програми є те, що ви називаєте функцій, 1014 00:44:53,900 --> 00:44:57,720 і як ці функції викликати функції, а також функції, які викликають функції, 1015 00:44:57,720 --> 00:45:00,980 Ви створюєте цей стек функцій в пам'яті. 1016 00:45:00,980 --> 00:45:06,740 І тільки один раз функція повертає ви почнете одержувати цю пам'ять назад. 1017 00:45:06,740 --> 00:45:11,190 Таким чином, одним з найпростіших способів запустити з пам'яті в комп'ютері програми є 1018 00:45:11,190 --> 00:45:14,170 написати функції, які ніколи не повернуться. 1019 00:45:14,170 --> 00:45:16,650 >> Так, наприклад, давайте продемонструвати, як багато з 1020 00:45:16,650 --> 00:45:18,460 навмисне помилки програми. 1021 00:45:18,460 --> 00:45:24,690 Дозвольте мені йти вперед і робити # включити , Int основних (недійсними). 1022 00:45:24,690 --> 00:45:31,270 І я збираюся робити, а (2> 1), який, імовірно, ніколи не буде 1023 00:45:31,270 --> 00:45:33,370 зміниться на нас. 1024 00:45:33,370 --> 00:45:37,720 І дозвольте мені тепер іти вперед і робити Printf. 1025 00:45:37,720 --> 00:45:39,950 Насправді, це буде менш візуально цікавим. 1026 00:45:39,950 --> 00:45:40,460 Давайте зробимо це. 1027 00:45:40,460 --> 00:45:44,840 Для Int (я = 0; I> 0). 1028 00:45:44,840 --> 00:45:49,740 Давайте зробимо цю помилку, я + +. 1029 00:45:49,740 --> 00:45:51,150 І давайте не Printf тут. 1030 00:45:51,150 --> 00:45:52,550 Давайте практикувати те, що я проповідував. 1031 00:45:52,550 --> 00:45:54,090 Давайте метод тут. 1032 00:45:54,090 --> 00:46:00,860 Порожнеча хор, і ми будемо говорити Int я. 1033 00:46:00,860 --> 00:46:02,295 А потім я збираюся сказати, Printf - 1034 00:46:04,871 --> 00:46:06,790 ой, давайте зробимо це більш цікаво. 1035 00:46:06,790 --> 00:46:08,350 Давайте насправді не друкує взагалі нічого. 1036 00:46:08,350 --> 00:46:10,530 Давайте просто це зробити. 1037 00:46:10,530 --> 00:46:11,780 Хор (I). 1038 00:46:16,630 --> 00:46:17,000 >> Добре. 1039 00:46:17,000 --> 00:46:20,040 Так що це баггі, бо навіщо? 1040 00:46:20,040 --> 00:46:22,850 Я придумую, як я йду, тому що програма не робить нічого 1041 00:46:22,850 --> 00:46:23,420 інтерес. 1042 00:46:23,420 --> 00:46:24,670 Але це не мета. 1043 00:46:24,670 --> 00:46:30,440 Мета полягає в тому, щоб написати програму, основною функцією якого робить те, що, мабуть? 1044 00:46:30,440 --> 00:46:31,370 Зателефонуйте себе. 1045 00:46:31,370 --> 00:46:32,600 А насправді, ми не потребуємо петлю. 1046 00:46:32,600 --> 00:46:36,070 Давайте навіть спростити цей раз, щоб не втрачати з уваги насправді 1047 00:46:36,070 --> 00:46:37,310 фундаментальну помилку. 1048 00:46:37,310 --> 00:46:39,200 Головні виклики хором співати хором. 1049 00:46:39,200 --> 00:46:41,760 Тоді я зробив дурість, і я повинен був хор хор виклик, тому що я припускав, 1050 00:46:41,760 --> 00:46:43,550 хтось ще збирається реалізувати це можливо. 1051 00:46:43,550 --> 00:46:45,960 І тепер це не буде зібрати ще. 1052 00:46:45,960 --> 00:46:48,340 Мені потрібно зробити що? 1053 00:46:48,340 --> 00:46:49,700 Мені потрібно прототип, пам'ятаю. 1054 00:46:49,700 --> 00:46:55,520 Тому мені потрібно, щоб тут порожнеча хору (INT я);. 1055 00:46:55,520 --> 00:46:57,470 >> Так що тепер, якщо я йду сюди - 1056 00:46:57,470 --> 00:46:59,030 насправді, давайте використовувати великі вікна. 1057 00:46:59,030 --> 00:47:01,670 Давайте підемо далі і зробити хором. 1058 00:47:01,670 --> 00:47:06,000 Давайте підемо далі і зробити хором. 1059 00:47:06,000 --> 00:47:08,302 Використання невідомі розігруючий я. 1060 00:47:08,302 --> 00:47:09,860 О, це було нерозумно. 1061 00:47:09,860 --> 00:47:11,020 Нам не потрібні аргументи. 1062 00:47:11,020 --> 00:47:13,680 Давайте просто це зробити. 1063 00:47:13,680 --> 00:47:14,550 Шкода, що ми розпочали цей шлях. 1064 00:47:14,550 --> 00:47:16,160 Було б набагато простіше написати програму. 1065 00:47:16,160 --> 00:47:20,100 Так і тут. 1066 00:47:20,100 --> 00:47:23,870 Тепер давайте перейдемо до моїх вікно терміналу, повторні Clang. 1067 00:47:23,870 --> 00:47:26,900 І тут ми йдемо. 1068 00:47:26,900 --> 00:47:28,020 Це було дійсно швидко. 1069 00:47:28,020 --> 00:47:30,690 Що насправді тільки що сталося, правда? 1070 00:47:30,690 --> 00:47:33,430 Ну, тепер я додам друку лінії, так що ми можемо бачити. 1071 00:47:33,430 --> 00:47:41,330 Отже, дозвольте мені сказати Printf, скажімо так, я тут. 1072 00:47:41,330 --> 00:47:43,470 Гаразд, не змінні, ми залишимо це так. 1073 00:47:43,470 --> 00:47:44,860 Дозвольте мені знову запустити зробити. 1074 00:47:44,860 --> 00:47:47,940 Дозвольте мені повтор приспіву. 1075 00:47:47,940 --> 00:47:51,235 І давай. 1076 00:47:53,880 --> 00:47:55,130 Продовжуйте. 1077 00:47:57,630 --> 00:47:59,750 Як осторонь, чому вона не зазнала краху? 1078 00:47:59,750 --> 00:48:02,050 Помилки сегментації відбулося супер швидкий раніше. 1079 00:48:02,050 --> 00:48:04,250 [Нерозбірливо] 1080 00:48:04,250 --> 00:48:04,830 David J. Малан: Абсолютно вірно. 1081 00:48:04,830 --> 00:48:06,350 Так що це займає час, щоб надрукувати. 1082 00:48:06,350 --> 00:48:08,370 Це займе більше роботи з боку комп'ютера. 1083 00:48:08,370 --> 00:48:09,550 І це так. 1084 00:48:09,550 --> 00:48:10,620 Сегментація вина. 1085 00:48:10,620 --> 00:48:12,140 >> Так помітите, як швидко запускати програми. 1086 00:48:12,140 --> 00:48:14,110 Якщо ви не друкує нічого, супер швидко. 1087 00:48:14,110 --> 00:48:18,100 Але ми все ж отримали цю помилку сегментації, тому що те, що відбувається? 1088 00:48:18,100 --> 00:48:21,310 Ну, якщо ви думаєте про те, як пам'ять комп'ютера викладено, це 1089 00:48:21,310 --> 00:48:22,890 буває основним. 1090 00:48:22,890 --> 00:48:23,800 Але тут - 1091 00:48:23,800 --> 00:48:28,670 Давайте просто називати цей хор, і назвемо цей хор. 1092 00:48:28,670 --> 00:48:33,420 І тепер, якщо я роблю свою естетику права, це як раз збирався сказати хором, 1093 00:48:33,420 --> 00:48:38,060 хор, хор, хор, хор, хор, хор, до нудоти. 1094 00:48:38,060 --> 00:48:39,920 І в кінці кінців, що ж буде далі? 1095 00:48:39,920 --> 00:48:46,690 Якщо картина буквально це те, що просто відбувається концептуально? 1096 00:48:46,690 --> 00:48:48,320 Стек перевитрата купи. 1097 00:48:48,320 --> 00:48:52,400 Або, того гірше, ви просто захоплені всі, включаючи текстовий сегмент, який є 1098 00:48:52,400 --> 00:48:54,530 нулів і одиниць, які представляють вашу програму. 1099 00:48:54,530 --> 00:48:56,690 Коротше кажучи, це просто супер, супер поганого. 1100 00:48:56,690 --> 00:48:56,860 Вірно? 1101 00:48:56,860 --> 00:48:58,620 Ваша програма вийшла з-під контролю. 1102 00:48:58,620 --> 00:49:02,840 Ви використовуєте спосіб більше пам'яті, ніж ви розраховували все через дурної 1103 00:49:02,840 --> 00:49:03,920 помилка, в цьому випадку. 1104 00:49:03,920 --> 00:49:08,160 Або в даному випадку, абсолютно свідомо зробили функцію, що називає себе. 1105 00:49:08,160 --> 00:49:09,210 Тепер це не так уже й погано. 1106 00:49:09,210 --> 00:49:12,540 Функції, які називають себе дійсно має велику силу 1107 00:49:12,540 --> 00:49:13,700 коли ви використовуєте його правильно. 1108 00:49:13,700 --> 00:49:15,650 Я не використовував його правильно тут. 1109 00:49:15,650 --> 00:49:16,940 >> Так що не все так погано. 1110 00:49:16,940 --> 00:49:20,620 Але те, що я ніколи не перестануть називати себе є фундаментальним 1111 00:49:20,620 --> 00:49:23,050 Слабкість тут цієї програми. 1112 00:49:23,050 --> 00:49:25,090 Так куди ми йдемо з усім цим? 1113 00:49:25,090 --> 00:49:26,230 Ну, а що відбувається насправді? 1114 00:49:26,230 --> 00:49:30,010 Коли я називаю приріст функції, як ми робили в тих прикладах, 1115 00:49:30,010 --> 00:49:33,290 У мене є значення, як 1, що я проходжу дюйма 1116 00:49:33,290 --> 00:49:35,820 Я проходжу в копію номер один. 1117 00:49:35,820 --> 00:49:37,080 Таким чином, відбувається наступне. 1118 00:49:37,080 --> 00:49:40,390 Так що давайте йти в крок приклад. 1119 00:49:40,390 --> 00:49:44,230 І цей хлопець прямо тут. 1120 00:49:44,230 --> 00:49:46,800 Отже, ось що насправді відбувається. 1121 00:49:46,800 --> 00:49:50,770 Коли я подзвонив приріст, і я проходжу по х, наочно те, що 1122 00:49:50,770 --> 00:49:53,660 відбувається тут, це - 1123 00:49:53,660 --> 00:50:00,240 якщо у мене є вартість 1 зберігається тут, і я насправді звуть приріст, який 1124 00:50:00,240 --> 00:50:02,680 тепер називається хор - 1125 00:50:02,680 --> 00:50:04,010 Так, кинувши мене тут. 1126 00:50:04,010 --> 00:50:06,750 Отже, давайте називати це прирощення. 1127 00:50:06,750 --> 00:50:09,420 І ми не знаємо, що це наступна функція збирається бути. 1128 00:50:09,420 --> 00:50:14,270 Так що ж насправді відбувається десь тут в основному, у мене є шматок 1129 00:50:14,270 --> 00:50:16,670 пам'яті, яка зберігає номер 1. 1130 00:50:16,670 --> 00:50:19,730 Коли я називаю приріст, я використовую іншу частину пам'яті, але тепер я 1131 00:50:19,730 --> 00:50:20,840 є копія 1. 1132 00:50:20,840 --> 00:50:25,480 Коли я збільшити це значення, це стає 2 - жахливо написаних на 1133 00:50:25,480 --> 00:50:26,420 Екран тут. 1134 00:50:26,420 --> 00:50:30,550 Але те, що відбувається, як тільки приріст прибутку? 1135 00:50:30,550 --> 00:50:34,610 Ця пам'ять просто отримує повернув до операційної системи, яка означає, що всі 1136 00:50:34,610 --> 00:50:37,470 Ви зробили нічого корисного. 1137 00:50:37,470 --> 00:50:43,460 Той, який був спочатку міститься в основній і раніше насправді. 1138 00:50:43,460 --> 00:50:44,650 >> Так куди ми йдемо з цим? 1139 00:50:44,650 --> 00:50:49,400 Ну, виходить, що в пам'яті у вас є ця спина до спини послідовність 1140 00:50:49,400 --> 00:50:50,940 байтів, які Ви можете покласти речі дюйма 1141 00:50:50,940 --> 00:50:53,760 І виходить, що ми вже бачили щось, що включає в себе поклавши 1142 00:50:53,760 --> 00:50:55,100 речей спина до спини, щоб спина до спини. 1143 00:50:55,100 --> 00:51:00,170 Що являє собою рядок, засновані на тиждень одну, то тижнів зо два? 1144 00:51:00,170 --> 00:51:01,840 Так що це просто набір символів. 1145 00:51:01,840 --> 00:51:05,290 Ось і виходить, як ви можете покласти номерів в пам'яті, так само ви можете 1146 00:51:05,290 --> 00:51:06,900 покласти символів у пам'яті. 1147 00:51:06,900 --> 00:51:09,810 І як тільки ми починаємо покласти символів у пам'яті спиною до спини, щоб повернутися до 1148 00:51:09,810 --> 00:51:12,800 назад, то виходить, що за допомогою найпростіших речах, як цикл або 1149 00:51:12,800 --> 00:51:14,510 час циклу, ми можемо повторювати - 1150 00:51:14,510 --> 00:51:17,130 зліва направо по символів в рядку - 1151 00:51:17,130 --> 00:51:20,720 і почати масажуючи їх у різні персонажі в цілому. 1152 00:51:20,720 --> 00:51:25,550 Може стати B. B може стати C. Так що в кінцевому підсумку, ми можемо взяти 1153 00:51:25,550 --> 00:51:28,830 Англійська пропозицію, яка дійсно має сенс і перетворює кожен з цих 1154 00:51:28,830 --> 00:51:32,440 літери по одній за раз, йдучи через нашу пам'ять комп'ютера залишається 1155 00:51:32,440 --> 00:51:34,300 Право насправді шифрування. 1156 00:51:34,300 --> 00:51:36,590 >> Отже, давайте зробимо наш п'ятихвилинну перерву тут, і коли ми повернемося, ми будемо 1157 00:51:36,590 --> 00:51:39,060 почати цей процес скремблювання інформації. 1158 00:51:41,640 --> 00:51:43,180 >> Добре. 1159 00:51:43,180 --> 00:51:48,440 Тому, перш ніж поринути в деяких крипто і ці речі називаються масивами, дозвольте мені 1160 00:51:48,440 --> 00:51:51,610 Пауза на будь-які питання, тому що я відчуваю, що я дійсно почасти заплутаною деякі з 1161 00:51:51,610 --> 00:51:52,230 ці теми. 1162 00:51:52,230 --> 00:51:53,940 Так що давайте зафіксуємо тепер, якщо ми можемо. 1163 00:51:53,940 --> 00:51:56,480 Таким чином, ми тільки що говорили про повернення цінностей. 1164 00:51:56,480 --> 00:51:58,630 Ми говорили про аргументів. 1165 00:51:58,630 --> 00:52:02,330 І ми говорили про це поняття, яке ми повернемося в найближчі тижні 1166 00:52:02,330 --> 00:52:07,140 прийшов, перегляду пам'яті цілу купу цих стеками 1167 00:52:07,140 --> 00:52:08,540 Лотки, так би мовити. 1168 00:52:08,540 --> 00:52:13,460 Знизу на вгору, так, що кожен лоток, який отримує покласти в стек являє 1169 00:52:13,460 --> 00:52:15,160 функція, яка в даний час називається. 1170 00:52:17,970 --> 00:52:20,300 Є питання? 1171 00:52:20,300 --> 00:52:22,890 Так як про - дайте мені спробувати поставити запитання. 1172 00:52:22,890 --> 00:52:25,520 Я все псує, але тепер it's - you've всі бачили обличчя хлопчика. 1173 00:52:25,520 --> 00:52:27,020 Таким чином, ми повернемося до цього. 1174 00:52:27,020 --> 00:52:29,700 >> Отже, дозвольте мені поставити запитання тут. 1175 00:52:29,700 --> 00:52:34,810 Дозвольте мені спростити це до того, що було до деяких з наших ранніх Q & A. 1176 00:52:34,810 --> 00:52:41,730 І той факт, що приріст має відкриту дужку, внутр номер, закритий 1177 00:52:41,730 --> 00:52:42,260 дужках. 1178 00:52:42,260 --> 00:52:46,370 Що Int числа представляють? 1179 00:52:46,370 --> 00:52:47,250 [Нерозбірливо] 1180 00:52:47,250 --> 00:52:47,870 David J. Малан: аргумент. 1181 00:52:47,870 --> 00:52:50,732 Добре, але що це аргумент? 1182 00:52:50,732 --> 00:52:51,620 [Нерозбірливо] 1183 00:52:51,620 --> 00:52:52,500 David J. Малан: Вибачте, що це таке? 1184 00:52:52,500 --> 00:52:53,150 Виступаючий 3: Щось ви передаєте дюйма 1185 00:52:53,150 --> 00:52:53,570 David J. Малан: Добре. 1186 00:52:53,570 --> 00:52:54,780 Таким чином, те, що ви передаєте дюйма 1187 00:52:54,780 --> 00:52:56,560 І взагалі, це просто вхід. 1188 00:52:56,560 --> 00:52:59,860 Якщо ви пишете функції та цілі, функції в житті, щоб зробити 1189 00:52:59,860 --> 00:53:03,290 щось трохи інакше кожен раз, коли ви використовуєте його, то єдиним способом для 1190 00:53:03,290 --> 00:53:07,710 Щоб це відбулося насправді, здавалося б надати йому вхід так, щоб вона 1191 00:53:07,710 --> 00:53:10,180 може зробити щось інше за допомогою цього вкладу кожного разу. 1192 00:53:10,180 --> 00:53:13,590 >> Таким чином, ви повинні визначити дві речі, коли функція приймає входи. 1193 00:53:13,590 --> 00:53:17,240 Ви повинні вказати ім'я, яке ви хочете дати, що вхід тільки для 1194 00:53:17,240 --> 00:53:20,790 вашої зручності, щоб ви могли посилатися на нього в функцію, яку 1195 00:53:20,790 --> 00:53:23,610 самі пишете, як я зробив тут, в рядку 32. 1196 00:53:23,610 --> 00:53:27,840 Але ви також повинні вказати його тип, тому що C є мовою програмування 1197 00:53:27,840 --> 00:53:28,840 що саме потрібно 1198 00:53:28,840 --> 00:53:31,810 що якщо ви хочете змінної, ви повинні повідомити комп'ютера, що 1199 00:53:31,810 --> 00:53:32,790 тип даних, це, 1200 00:53:32,790 --> 00:53:35,540 У більшій частині так, щоб він не знає, скільки біт 1201 00:53:35,540 --> 00:53:37,230 виділити для цієї змінної. 1202 00:53:37,230 --> 00:53:38,600 Тому що це може бути шість - 1203 00:53:38,600 --> 00:53:39,990 Вибачте, це не буде шість. 1204 00:53:39,990 --> 00:53:41,050 Це може бути 16. 1205 00:53:41,050 --> 00:53:41,630 Це може бути 8. 1206 00:53:41,630 --> 00:53:44,410 Це може бути 32, навіть 64. 1207 00:53:44,410 --> 00:53:45,820 Але комп'ютер повинен знати. 1208 00:53:45,820 --> 00:53:49,110 Тепер Int на ліву сторону представляє те, що, на відміну від? 1209 00:53:52,825 --> 00:53:53,780 [Нерозбірливо] 1210 00:53:53,780 --> 00:53:54,570 David J. Малан: Що це? 1211 00:53:54,570 --> 00:53:55,390 [Нерозбірливо] 1212 00:53:55,390 --> 00:53:57,920 David J. Малан: тип функції і, більш конкретно, 1213 00:53:57,920 --> 00:53:59,755 Тип продукції. 1214 00:53:59,755 --> 00:54:00,220 Право. 1215 00:54:00,220 --> 00:54:04,220 Таким чином, у той час як річ в дужках представляє свій вхід, якщо такі є, 1216 00:54:04,220 --> 00:54:06,640 річ, щоб ліва представляє свою продукцію. 1217 00:54:06,640 --> 00:54:10,560 І в цьому випадку, мабуть приріст повертає ціле. 1218 00:54:10,560 --> 00:54:14,590 І так Int є тип повертається цією функцією. 1219 00:54:14,590 --> 00:54:16,090 >> Що це значить повернути? 1220 00:54:16,090 --> 00:54:19,810 Буквально, ви використовуєте ключове слово повернення. 1221 00:54:19,810 --> 00:54:24,640 І потім, якщо те, що ви повертаєтеся в правому ключове слово 1222 00:54:24,640 --> 00:54:28,340 число, те, що дійсно відповідає тому, що ми обіцяли. 1223 00:54:28,340 --> 00:54:31,110 Ви не могли б зробити щось на зразок цього - 1224 00:54:31,110 --> 00:54:32,280 Привіт, світ - 1225 00:54:32,280 --> 00:54:33,500 тому що це рядок. 1226 00:54:33,500 --> 00:54:35,440 Очевидно, це не є цілим числом. 1227 00:54:35,440 --> 00:54:40,450 Коротше кажучи, тягар насправді на нас, програмістів, щоб бути конкретним, як 1228 00:54:40,450 --> 00:54:44,730 до того, що ми повертаємося, і тоді насправді йти про повернення його. 1229 00:54:44,730 --> 00:54:49,030 І тоді, щоб зробити трохи більш чіткі контексті - 1230 00:54:49,030 --> 00:54:50,080 Ось він знову. 1231 00:54:50,080 --> 00:54:51,060 Контексту - 1232 00:54:51,060 --> 00:54:52,830 Великим сюрпризом у найближчі одну хвилину. 1233 00:54:52,830 --> 00:54:57,720 Контекст тут, зараз, в тому, що пам'ять комп'ютера, знову ж таки, 1234 00:54:57,720 --> 00:54:59,070 гігабайт, два гігабайти, що завгодно. 1235 00:54:59,070 --> 00:54:59,630 Може бути, це інше. 1236 00:54:59,630 --> 00:55:00,540 Може бути, це менше. 1237 00:55:00,540 --> 00:55:03,750 Але комп'ютер розглядає її як мають різні розділи. 1238 00:55:03,750 --> 00:55:04,860 Щось іде туди. 1239 00:55:04,860 --> 00:55:06,020 Щось ще відбувається там. 1240 00:55:06,020 --> 00:55:07,540 Різні речі йде в середині. 1241 00:55:07,540 --> 00:55:09,300 І сьогодні, ми просто починаємо розповідаю цю історію. 1242 00:55:09,300 --> 00:55:11,130 >> Але ми повернемося до цього з часом. 1243 00:55:11,130 --> 00:55:15,000 В даний час, тільки шматок пам'яті ми дійсно дбаємо про те, текстовий сегмент 1244 00:55:15,000 --> 00:55:17,160 тому що тільки що представляє нулів і одиниць 1245 00:55:17,160 --> 00:55:18,460 Clang, що був сигнал. 1246 00:55:18,460 --> 00:55:21,570 Отже, коли ви запустите команду на клавіатурі, як a.out, або ви двічі 1247 00:55:21,570 --> 00:55:25,350 клацніть по значку на Mac OS або Windows, ваші програми завантажується з жорсткого 1248 00:55:25,350 --> 00:55:26,930 диска в оперативну пам'ять. 1249 00:55:26,930 --> 00:55:30,850 І вона шубовснула у верхній частині оперативної пам'яті комп'ютера, так би мовити. 1250 00:55:30,850 --> 00:55:35,470 Тепер Між тим, як ваша програма починає працювати і основні викликається в 1251 00:55:35,470 --> 00:55:39,240 Ви писали програми або програми Microsoft або Apple, пише, будь-якого з її 1252 00:55:39,240 --> 00:55:42,930 локальні змінні в кінцевому підсумку там на дні пам'яті комп'ютера. 1253 00:55:42,930 --> 00:55:46,490 Але якщо основна викликає іншу функцію, яка сама по собі має змінні або 1254 00:55:46,490 --> 00:55:48,340 аргументами, вони в кінцевому підсумку над ним. 1255 00:55:48,340 --> 00:55:50,670 І якщо ця функція викликає те, що вони в остаточному підсумку над ним, 1256 00:55:50,670 --> 00:55:51,840 над ним, над ним. 1257 00:55:51,840 --> 00:55:56,100 І тільки один раз в функції здійснюється виконання робить стопки лотків, так 1258 00:55:56,100 --> 00:55:58,320 говорити, починають отримувати все нижче і нижче. 1259 00:55:58,320 --> 00:56:03,370 І це те, що тоді, в двох словах, пояснює, чому, коли ви дзвоните куба - 1260 00:56:03,370 --> 00:56:04,660 або ви дзвоните приріст - 1261 00:56:04,660 --> 00:56:06,490 ви передаєте копію значення. 1262 00:56:06,490 --> 00:56:09,840 А що це означає, що наочно це те, що ви буквально написання 1263 00:56:09,840 --> 00:56:14,540 номер 1 в іншу частину пам'яті, яка змінюється від 1 до 2, у випадку 1264 00:56:14,540 --> 00:56:15,360 приріст - 1265 00:56:15,360 --> 00:56:17,450 або 8, в разі куба - 1266 00:56:17,450 --> 00:56:21,450 , А потім кидали, що пам'ять далеко, як тільки збільшення або кубі 1267 00:56:21,450 --> 00:56:23,410 Функція повертає. 1268 00:56:23,410 --> 00:56:24,267 >> Питання. 1269 00:56:24,267 --> 00:56:25,517 [Нерозбірливо] 1270 00:56:28,090 --> 00:56:29,970 David J. Малан: де - глобальні змінні зберігаються в те, що 1271 00:56:29,970 --> 00:56:32,960 в даний час називається инициализируются дані або неініціалізованих даних. 1272 00:56:32,960 --> 00:56:35,900 Різниця в тому, якщо у вас є глобальна змінна, і ви призначаєте його 1273 00:56:35,900 --> 00:56:39,530 відразу ж значення з знака рівності, вона закінчується на вершині. 1274 00:56:39,530 --> 00:56:43,390 А якщо просто сказати Int х коми без значення, це закінчується трохи 1275 00:56:43,390 --> 00:56:46,670 нижче в пам'яті просто конвенції. 1276 00:56:46,670 --> 00:56:49,308 Інші питання. 1277 00:56:49,308 --> 00:56:49,750 Добре. 1278 00:56:49,750 --> 00:56:53,040 >> Таким чином, ця картина буде повертатися, як ми отримаємо більш потужний з тим, що ми можемо зробити 1279 00:56:53,040 --> 00:56:53,830 з комп'ютером. 1280 00:56:53,830 --> 00:56:58,790 Але зараз, давайте короткий вступ в криптографію, специфічний тип 1281 00:56:58,790 --> 00:57:01,910 криптографії, що не вирішує всіх проблем у світі, але ніяк вирішити 1282 00:57:01,910 --> 00:57:02,480 деякі з них. 1283 00:57:02,480 --> 00:57:06,090 У цьому випадку тут, у нас є те, що називається секретним ключем шифрування. 1284 00:57:06,090 --> 00:57:10,430 І секрет криптографії ключ, як випливає з назви, відбувається її безпеки 1285 00:57:10,430 --> 00:57:11,330 від таємницею. 1286 00:57:11,330 --> 00:57:14,720 Так, наприклад, якщо ви ще в початковій школі, і ви передаєте 1287 00:57:14,720 --> 00:57:18,040 Маленький секрет любовний лист до хлопчику чи дівчинці ви дроблення на - якщо ви 1288 00:57:18,040 --> 00:57:20,820 хотів передати, що через аудиторією, ви, ймовірно, не буде писати 1289 00:57:20,820 --> 00:57:24,120 така записка на англійській мові або що ваша рідна мова, а, швидше, ви 1290 00:57:24,120 --> 00:57:25,800 може зашифрувати його. 1291 00:57:25,800 --> 00:57:27,820 Або ви можете просто відправити їм текстове повідомлення в ці дні. 1292 00:57:27,820 --> 00:57:30,310 Але ви могли б насправді передають їх до відома всьому класі. 1293 00:57:30,310 --> 00:57:33,820 І зробити це безпечно, так що ваші друзі і вчителі 1294 00:57:33,820 --> 00:57:36,820 Не знаю, що ви пишете, ви можете придумати досить простий 1295 00:57:36,820 --> 00:57:37,800 Алгоритм - 1296 00:57:37,800 --> 00:57:39,290 Молодий хоча ви могли б бути - 1297 00:57:39,290 --> 00:57:40,780 просто дертися слова. 1298 00:57:40,780 --> 00:57:44,390 Таким чином, замість того щоб писати, ви можете написати B. Замість B, ви можете написати 1299 00:57:44,390 --> 00:57:46,670 C. Замість C, ви можете написати D, і так далі. 1300 00:57:46,670 --> 00:57:50,020 Або ви могли б придумати більш складний переклад листів 1301 00:57:50,020 --> 00:57:51,300 різних букв. 1302 00:57:51,300 --> 00:57:55,440 Але заковика в тому, хлопчик чи дівчинка, яким ви відправляєте цю записку необхідно 1303 00:57:55,440 --> 00:57:56,850 щось знати. 1304 00:57:56,850 --> 00:57:59,620 Які це те, що, очевидно? 1305 00:57:59,620 --> 00:58:01,400 Як і те, що ваш секрет. 1306 00:58:01,400 --> 00:58:04,620 Мовляв, що це таке зіставлення Як і сніданок і Cs і Ds? 1307 00:58:04,620 --> 00:58:08,780 Це тільки додавши до нього один, так би мовити, до кожної з букв, щоб перейти від 1308 00:58:08,780 --> 00:58:09,730 А в B, B в C? 1309 00:58:09,730 --> 00:58:11,350 Це більш складний, ніж це? 1310 00:58:11,350 --> 00:58:16,450 Таким чином, ви і ваш розчавити потрібно, щоб у цій секретної інформації. 1311 00:58:16,450 --> 00:58:18,170 Але є свого роду виверти-22 тут. 1312 00:58:18,170 --> 00:58:20,760 Якщо це в перший раз ви відправляєте цю любов через листи 1313 00:58:20,760 --> 00:58:25,590 класу, як те, що хлопчик чи дівчинка буде знати, в чому секрет навіть є? 1314 00:58:25,590 --> 00:58:28,450 Так що секретний ключ шифрування не вирішує всіх проблем у світі. 1315 00:58:28,450 --> 00:58:30,490 І там насправді стосунки, які ми повернемося до до 1316 00:58:30,490 --> 00:58:31,370 семестру кінця. 1317 00:58:31,370 --> 00:58:35,970 >> Крім того, є жоден з нас, ймовірно, ніколи не послав - 1318 00:58:35,970 --> 00:58:39,453 Аналогічно, більшість з нас не знає, що хтось працює, наприклад, на 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 І тим не менш, багато хто з нас, напевно, купив матеріал на Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 І нас вчили вважати, що ці електронної комерції 1322 00:58:45,670 --> 00:58:47,060 безпеку транзакцій. 1323 00:58:47,060 --> 00:58:47,210 Вірно? 1324 00:58:47,210 --> 00:58:49,310 URL, ймовірно, говорить HTTPS. 1325 00:58:49,310 --> 00:58:51,590 Там в, може бути, дурний маленький значок замку десь. 1326 00:58:51,590 --> 00:58:54,680 Там якась криптографії забезпечення вашої кредитної картки 1327 00:58:54,680 --> 00:58:56,980 між вами і Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 І ще, якщо криптографія включає в себе знаючи деякі таємниці, і все ж я не 1329 00:59:00,410 --> 00:59:03,330 знаю нікого, на Амазонці, і я, звичайно, не влаштував будь 1330 00:59:03,330 --> 00:59:07,350 таємницю з кимось на Amazon, як мій комп'ютер або мій браузер це робить? 1331 00:59:07,350 --> 00:59:10,100 Що ж, виявляється, є інші види криптографії в цілому, які вирішують 1332 00:59:10,100 --> 00:59:10,740 цій проблемі. 1333 00:59:10,740 --> 00:59:13,610 Але на сьогоднішній день, ми зосередимося на простій, де ви можете влаштувати в 1334 00:59:13,610 --> 00:59:18,480 просування знати деякі таємниці, як плюс 1 або деяке відображення між Як і сніданок. 1335 00:59:18,480 --> 00:59:20,710 >> І процес криптографії звичайно включає в себе це. 1336 00:59:20,710 --> 00:59:23,550 У вас є звичайний текст, зображений тут, на лівому. 1337 00:59:23,550 --> 00:59:26,260 Ви запускаєте його через якийсь алгоритм або процедура 1338 00:59:26,260 --> 00:59:27,670 для шифрування. 1339 00:59:27,670 --> 00:59:31,390 Може бути, це просто стає B, B стає C. І тоді ви в кінцевому підсумку з 1340 00:59:31,390 --> 00:59:32,260 зашифрований текст. 1341 00:59:32,260 --> 00:59:36,450 Тим часом, як тільки ваш розчавити отримує таємні записки, він або вона повинні потім 1342 00:59:36,450 --> 00:59:39,950 розшифрувати його, як правило заднім ходом, що алгоритм так, щоб отримати 1343 00:59:39,950 --> 00:59:41,640 Резервне простий текст. 1344 00:59:41,640 --> 00:59:43,860 Тепер є фізичне втілення цього. 1345 00:59:43,860 --> 00:59:46,720 Наприклад, це маленький секрет кільця декодер. 1346 00:59:46,720 --> 00:59:50,060 І це кільце в тому сенсі, що є два набори тут. 1347 00:59:50,060 --> 00:59:53,630 На зовнішній периферії цією річчю, тобто букви від А до Z, 1348 00:59:53,630 --> 00:59:55,110 хоча вони у випадковому порядку. 1349 00:59:55,110 --> 00:59:58,410 І з внутрішньої сторони, там насправді деякі числа, такі, що з цієї 1350 00:59:58,410 --> 01:00:02,940 Кільце, ви можете включити вигляд зовні, але не всередині для того, щоб вишикуватися 1351 01:00:02,940 --> 01:00:04,110 Номери з буквами. 1352 01:00:04,110 --> 01:00:08,290 І в кліпі ви збираєтеся подивитися - деякі з яких ви, можливо, бачили 24/7 1353 01:00:08,290 --> 01:00:11,120 навколо різдвяного сезону з фільму під назвою Різдвяна історія. 1354 01:00:11,120 --> 01:00:16,050 Ви побачите, що мало Ральфі так не терпілося з'ясувати, що сирітка 1355 01:00:16,050 --> 01:00:19,810 Секретне повідомлення Енні була для нього, що було повідомлено, я думаю, в 1356 01:00:19,810 --> 01:00:22,810 вигляді цифрових повідомлень на серійний вікно. 1357 01:00:22,810 --> 01:00:26,760 І треба було акумулювати всі маленькі карти, які прийшли 1358 01:00:26,760 --> 01:00:27,480 в коробки від пластівців. 1359 01:00:27,480 --> 01:00:28,320 Потрібно було, щоб відправити їх сюди 1360 01:00:28,320 --> 01:00:31,060 Ви повинні були отримати назад таємницю кільця декодер, так що ви можете, нарешті, зрозуміти 1361 01:00:31,060 --> 01:00:34,190 , Що відображення між буквами і цифрами, 1362 01:00:34,190 --> 01:00:35,420 або букв і букв. 1363 01:00:35,420 --> 01:00:39,790 Таким чином, я даю вам цей короткий кліп з Різдвяна історія мотивувати PSET 2 і 1364 01:00:39,790 --> 01:00:42,340 наша дискусія, в момент, масивів. 1365 01:00:42,340 --> 01:00:43,773 Таким чином, тут ми маємо Ральфі. 1366 01:00:43,773 --> 01:00:44,126 >> [ВІДТВОРЕННЯ ВІДЕО] 1367 01:00:44,126 --> 01:00:47,470 -Да буде відомо всім і кожному, що Ральф Паркер справжнім призначений 1368 01:00:47,470 --> 01:00:50,690 член маленький коло сиріт Енні секретно і має право на всі 1369 01:00:50,690 --> 01:00:53,500 почесті і переваги, що відбуваються з ними. 1370 01:00:53,500 --> 01:00:56,040 -Підпис, Little Orphan Annie. 1371 01:00:56,040 --> 01:00:58,730 Контрассигнуются, П'єр Андре! 1372 01:00:58,730 --> 01:01:00,150 В чорнила! 1373 01:01:00,150 --> 01:01:02,910 Досягнення і переваги, вже у віці дев'яти років. 1374 01:01:09,970 --> 01:01:10,730 Давай, давай покінчимо з цим. 1375 01:01:10,730 --> 01:01:15,000 Мені не потрібні все таке інше про контрабандистів і піратів. 1376 01:01:15,000 --> 01:01:17,624 -Слухай завтра вночі для заключних пригод The ​​Black 1377 01:01:17,624 --> 01:01:19,710 Піратський корабель. 1378 01:01:19,710 --> 01:01:23,380 Тепер прийшов час для таємного повідомлення Енні для вас членами 1379 01:01:23,380 --> 01:01:25,670 Таємного Круга. 1380 01:01:25,670 --> 01:01:30,260 Пам'ятайте, що діти, тільки члени таємний гурток Енні може декодувати 1381 01:01:30,260 --> 01:01:31,660 Секрет Енні повідомленні. 1382 01:01:31,660 --> 01:01:36,230 Пам'ятайте, Енні залежить від вас. 1383 01:01:36,230 --> 01:01:38,720 Встановити контакти з B2. 1384 01:01:38,720 --> 01:01:41,040 Ось повідомлення. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Я в першому засіданні таємним. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -П'єр був у відмінній сьогодні голос. 1389 01:01:51,700 --> 01:01:54,890 Я можу сказати, що сьогодні повідомлення було дійсно важливо. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 Ось повідомлення від Annie себе. 1392 01:01:58,590 --> 01:01:59,840 Пам'ятайте, нікому не кажіть. 1393 01:02:04,570 --> 01:02:08,750 -90 Секунд через, я в єдину кімнату в будинку, де дев'ятирічний хлопчик 1394 01:02:08,750 --> 01:02:12,980 міг сидіти на самоті і декодування. 1395 01:02:12,980 --> 01:02:17,130 Ага, Б. Я пішов до іншого. 1396 01:02:17,130 --> 01:02:20,330 E. Перше слово буде. 1397 01:02:20,330 --> 01:02:22,670 S. Він йшов легше. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Ой, да ладно, Ральфі. 1400 01:02:26,510 --> 01:02:28,430 Я повинен йти. 1401 01:02:28,430 --> 01:02:30,350 -Я спущуся, штат Массачусетс. 1402 01:02:30,350 --> 01:02:33,720 -Ось здорово. 1403 01:02:33,720 --> 01:02:38,270 -T, О. Обов'язково. 1404 01:02:38,270 --> 01:02:40,000 Будьте впевнені, до чого? 1405 01:02:40,000 --> 01:02:42,105 Що Little Orphan Annie намагаюся сказати? 1406 01:02:42,105 --> 01:02:43,095 Будьте впевнені, до чого? 1407 01:02:43,095 --> 01:02:43,590 -Ральфі! 1408 01:02:43,590 --> 01:02:44,580 Ренді повинен йти. 1409 01:02:44,580 --> 01:02:45,570 Не могли б ви вийти? 1410 01:02:45,570 --> 01:02:46,560 -Все в порядку, мама. 1411 01:02:46,560 --> 01:02:48,540 Я зараз вийду. 1412 01:02:48,540 --> 01:02:50,580 -Я отримую ближче. 1413 01:02:50,580 --> 01:02:52,550 Напруга було жахливим. 1414 01:02:52,550 --> 01:02:53,355 Що це було? 1415 01:02:53,355 --> 01:02:56,315 Доля планети може повиснути на волосинці. 1416 01:02:56,315 --> 01:02:56,790 -Ральфі! 1417 01:02:56,790 --> 01:02:59,165 Ренді повинен піти. 1418 01:02:59,165 --> 01:03:02,310 -Я б одразу, з глузду з'їхати. 1419 01:03:02,310 --> 01:03:04,000 -Ну і справи, майже немає. 1420 01:03:04,000 --> 01:03:05,180 Мої пальці літали. 1421 01:03:05,180 --> 01:03:07,150 Мій розум був сталевий капкан. 1422 01:03:07,150 --> 01:03:08,790 Кожен пір вібрації. 1423 01:03:08,790 --> 01:03:10,040 Це було майже ясно. 1424 01:03:10,040 --> 01:03:13,400 Так, так, так, так. 1425 01:03:13,400 --> 01:03:18,960 -Будьте впевнені, щоб пити Ovaltine. 1426 01:03:18,960 --> 01:03:20,210 Ovaltine? 1427 01:03:24,010 --> 01:03:25,260 Вошивої комерційної? 1428 01:03:28,200 --> 01:03:29,640 Син сука. 1429 01:03:29,640 --> 01:03:33,340 [END ВІДТВОРЕННЯ ВІДЕО] 1430 01:03:33,340 --> 01:03:36,040 >> David J. Малан: Тобто у нас є криптографії. 1431 01:03:36,040 --> 01:03:39,670 Так як в комп'ютері, ми можемо йти про реалізацію або 1432 01:03:39,670 --> 01:03:40,950 представляють такі речі? 1433 01:03:40,950 --> 01:03:44,430 Що ж, нам потрібен спосіб виразити себе трохи більш гнучко, ніж 1434 01:03:44,430 --> 01:03:46,420 наші змінні досі дозволив. 1435 01:03:46,420 --> 01:03:47,370 У нас були цілі. 1436 01:03:47,370 --> 01:03:48,380 У нас були символи. 1437 01:03:48,380 --> 01:03:50,790 У нас були поплавці й двомісні та деякі інші. 1438 01:03:50,790 --> 01:03:55,050 Але ці окремі частини пам'яті, яка насправді не дозволяють нам 1439 01:03:55,050 --> 01:03:58,010 висловити речі, як слова і пропозиції і фрази. 1440 01:03:58,010 --> 01:04:00,200 У самому справі, ми називали такі рядки речі. 1441 01:04:00,200 --> 01:04:03,650 Але ми обіцяли, що це дійсно просто спрощення CS50 1442 01:04:03,650 --> 01:04:07,020 бібліотеки, які ми маємо намір відігніть. 1443 01:04:07,020 --> 01:04:08,970 >> І так, давайте почнемо робити це тут. 1444 01:04:08,970 --> 01:04:11,130 Дозвольте мені йти вперед і відкривати файл - 1445 01:04:11,130 --> 01:04:13,770 Всі ці файли доступні як звичайні онлайн - 1446 01:04:13,770 --> 01:04:19,120 називається array.c вирішити проблему не пов'язаних з рядка, але що малює 1447 01:04:19,120 --> 01:04:23,040 Картина тут про те, як ми могли б використовувати те, що називається масивом. 1448 01:04:23,040 --> 01:04:25,530 Масив являє собою тип даних. 1449 01:04:25,530 --> 01:04:31,320 Це тип змінної, свого роду, який має дещо менші типи даних 1450 01:04:31,320 --> 01:04:34,150 всередині нього спина до спини, щоб спина до спини. 1451 01:04:34,150 --> 01:04:37,700 Так, наприклад, якщо ми хочемо написати невелику програму, яка дає Вам 1452 01:04:37,700 --> 01:04:42,110 Тест середньому на курс, як 50, який має два вікторини, ви можете дуже легко 1453 01:04:42,110 --> 01:04:45,170 написати цю програму - на основі навіть на деяких з матеріалу минулого тижня - 1454 01:04:45,170 --> 01:04:47,770 за допомогою GetInt і кілька змінних. 1455 01:04:47,770 --> 01:04:51,920 Quiz1 Int, Int quiz2, і це досить просто. 1456 01:04:51,920 --> 01:04:55,930 Це може бути 10, 20 рядків коду, не більше, реалізувати програму, яка запитує 1457 01:04:55,930 --> 01:05:01,170 Користувач протягом двох балів вікторини і потім обчислює їх середнє, додавши їх 1458 01:05:01,170 --> 01:05:03,850 разом, розділивши на два, а потім друку результатів. 1459 01:05:03,850 --> 01:05:06,380 Ми могли б зробити це досить легко тепер, після 1460 01:05:06,380 --> 01:05:07,510 деяка кількість хвилин. 1461 01:05:07,510 --> 01:05:11,005 >> Але проблема в тому, що припустимо, що 50 було три чи чотири вікторини. 1462 01:05:11,005 --> 01:05:13,510 Припустимо, що ви хотіли використовувати ту ж програму для класу, який був 1463 01:05:13,510 --> 01:05:14,850 щотижневі вікторини. 1464 01:05:14,850 --> 01:05:16,610 Подумайте про клас, який щотижневі вікторини. 1465 01:05:16,610 --> 01:05:20,610 Якщо є зразок 16 або близько того тижнів в семестр, тепер у вас є 16 змінних - 1466 01:05:20,610 --> 01:05:24,270 quiz1 Int, Int quiz2, внутр quiz3, внутр quiz4. 1467 01:05:24,270 --> 01:05:27,560 Як тільки ви починаєте бачити цю надмірність, це копіювання і вставка 1468 01:05:27,560 --> 01:05:31,390 коду, він повинен почати робити ви хочете там було краще. 1469 01:05:31,390 --> 01:05:33,930 І на щастя, тому що масиви, є. 1470 01:05:33,930 --> 01:05:34,980 Так давайте зробимо це. 1471 01:05:34,980 --> 01:05:38,430 По-перше, дозвольте мені представити дуже просту річ, що ми не використали досі, 1472 01:05:38,430 --> 01:05:40,140 але ви побачите, що іноді в коді. 1473 01:05:40,140 --> 01:05:42,360 Це те, що зазвичай називається постійною. 1474 01:05:42,360 --> 01:05:45,790 Так що це постійна в тому сенсі, що це значення ніколи не змінюється. 1475 01:05:45,790 --> 01:05:49,210 Людські конвенції при створенні постійної полягає у використанні всіх капітальних 1476 01:05:49,210 --> 01:05:51,940 букви, просто так, що він дійсно виділяється в коді. 1477 01:05:51,940 --> 01:05:55,960 А спеціальні ключові слова, які ви використовуєте в С # визначити. 1478 01:05:55,960 --> 01:06:00,250 Так що, якщо ви говорите # визначити, то простір, то слово, яке ви хочете використовувати для 1479 01:06:00,250 --> 01:06:03,260 постійне назву, а потім значення константи. 1480 01:06:03,260 --> 01:06:06,180 Таким чином, повідомлення, це відрізняється від присвоєння щось змінна. 1481 01:06:06,180 --> 01:06:07,020 Там немає знаку рівності. 1482 01:06:07,020 --> 01:06:08,240 Там немає коми. 1483 01:06:08,240 --> 01:06:11,410 Це те, що відомо як директива препроцесора, але більше на 1484 01:06:11,410 --> 01:06:12,210 в інший раз. 1485 01:06:12,210 --> 01:06:18,540 >> На даний момент, це створює незмінне значення, зване вікторини, фактичні 1486 01:06:18,540 --> 01:06:19,940 числове значення 2. 1487 01:06:19,940 --> 01:06:24,020 Таким чином, скрізь, де є тести, вікторини, тести на протязі всього цього файлу, це 1488 01:06:24,020 --> 01:06:25,410 тільки номер 2. 1489 01:06:25,410 --> 01:06:28,100 Тепер, якщо я дивлюся на основні Тепер, давайте подивимося, як це працює. 1490 01:06:28,100 --> 01:06:29,500 По-перше, це виглядає трохи загадково. 1491 01:06:29,500 --> 01:06:31,340 Але це все речі з тижня один. 1492 01:06:31,340 --> 01:06:32,710 Запитайте у користувача класах. 1493 01:06:32,710 --> 01:06:33,630 Як ми це робимо? 1494 01:06:33,630 --> 01:06:35,470 Ну, а в рядку 22 - 1495 01:06:35,470 --> 01:06:37,210 це дійсно соковиті частини - 1496 01:06:37,210 --> 01:06:40,960 Я заявляю з плаваючою точкою, а не просто одним поплавком. 1497 01:06:40,960 --> 01:06:44,620 Я оголосивши, швидше, масив значень з плаваючою точкою. 1498 01:06:44,620 --> 01:06:49,100 Це змінна буде називатися класах, як це мається на увазі тут. 1499 01:06:49,100 --> 01:06:53,080 Але тільки частина нового синтаксису, то ці квадратні дужки, той факт, 1500 01:06:53,080 --> 01:06:59,350 що я сказав поплавок класах, а потім відкрити дужку, а потім число. 1501 01:06:59,350 --> 01:07:02,460 Зверніть увагу, якщо це постійно, це так само, як ми зробили це. 1502 01:07:02,460 --> 01:07:06,890 Це означає, агов комп'ютер, дайте мені два поплавця, і давайте колективно називають 1503 01:07:06,890 --> 01:07:08,220 їх оцінки. 1504 01:07:08,220 --> 01:07:11,920 Це на відміну від набагато більш трудомісткий процес, як це. 1505 01:07:11,920 --> 01:07:15,850 Поплавок Grade1, плавати grade2, і так далі. 1506 01:07:15,850 --> 01:07:20,010 Таким чином, масив дозволяє нам реалізувати цю ідею, але набагато менш неохайно, в 1507 01:07:20,010 --> 01:07:24,630 таким чином, що ми можемо написати один рядок коду, а не, скажімо, 16 на 16 1508 01:07:24,630 --> 01:07:25,740 тиждень семестру. 1509 01:07:25,740 --> 01:07:29,950 Так що я не хочу жорсткий код 2, тому що якщо ви думаєте про це зараз 1510 01:07:29,950 --> 01:07:34,160 логічно - припустимо, в наступному році CS50 змін до 3 вікторини замість цього. 1511 01:07:34,160 --> 01:07:35,510 І в мене був номер 2 тут. 1512 01:07:35,510 --> 01:07:36,600 У мене був номер 2 тут. 1513 01:07:36,600 --> 01:07:37,580 У мене був номер 2 тут. 1514 01:07:37,580 --> 01:07:38,560 У мене був номер 2 тут. 1515 01:07:38,560 --> 01:07:43,180 Вона стає дуже виснажливим і дуже легко зіпсувати і випадково змінити 1516 01:07:43,180 --> 01:07:47,690 одне значення на 3 і пропустити деякі інші значення 2. 1517 01:07:47,690 --> 01:07:52,460 Так що я збираюся замість абстрактного це відстань і використати цю константу, яка, як і її 1518 01:07:52,460 --> 01:07:54,120 назву, ніколи не змінюється. 1519 01:07:54,120 --> 01:07:57,710 І тепер, незалежно від того, чи будемо ми мати різні вікторини цьому або наступному році, я 1520 01:07:57,710 --> 01:08:01,210 просто змінити його в одному місці, тут на вершині. 1521 01:08:01,210 --> 01:08:02,720 >> Так що всі константи. 1522 01:08:02,720 --> 01:08:08,680 Тим часом, нова концептуальна особливість полягає в тому масиву. 1523 01:08:08,680 --> 01:08:14,660 Таким чином, у квадратних дужках дати мені це багато плаває і дозволяє мені колективно 1524 01:08:14,660 --> 01:08:16,630 називати їх класах тут. 1525 01:08:16,630 --> 01:08:17,990 Отже, тепер давайте подивимося, що я збираюся робити. 1526 01:08:17,990 --> 01:08:20,359 Тут, у рядку 24 є початком циклу. 1527 01:08:20,359 --> 01:08:22,260 Це дійсно нічого особливого. 1528 01:08:22,260 --> 01:08:25,060 Це тільки за допомогою тестів, а не жорстко числа. 1529 01:08:25,060 --> 01:08:27,790 Але немає нічого інтелектуально різних там з минулого тижня. 1530 01:08:27,790 --> 01:08:29,040 Це просто Printf. 1531 01:08:29,040 --> 01:08:35,490 Таким чином, Е ("тест номер% сут% D"), тому що я просто хочу, щоб роздрукувати дати мені вікторини 1532 01:08:35,490 --> 01:08:38,050 номер одного з двох, а потім два з двох. 1533 01:08:38,050 --> 01:08:39,850 Так що це чисто естетична річ. 1534 01:08:39,850 --> 01:08:42,500 Але найцікавіше зараз знаходиться в рядку 27. 1535 01:08:42,500 --> 01:08:48,310 Для того, щоб заповнити одну з двох заповнювачів з плаваючою точкою 1536 01:08:48,310 --> 01:08:51,029 значення, ви знову використовувати квадратні дужки. 1537 01:08:51,029 --> 01:08:55,620 У цьому випадку, я використовую я, тому що це цикл почався з рівною я 1538 01:08:55,620 --> 01:08:57,560 Яке значення, мабуть? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Таким чином, на першій ітерації цього циклу, це, як ніби я 1541 01:09:01,350 --> 01:09:02,689 написав це в коді. 1542 01:09:02,689 --> 01:09:05,580 Але на другий ітерації цього циклу, це, як ніби я 1543 01:09:05,580 --> 01:09:07,750 написав це в своєму коді. 1544 01:09:07,750 --> 01:09:10,750 Але те, що я використовую змінну чудово, тому що, як випливає з назви 1545 01:09:10,750 --> 01:09:14,300 припускає, що це зміна його значення на кожній ітерації. 1546 01:09:14,300 --> 01:09:17,370 Так що я заповнення цього масиву одному місці за один раз. 1547 01:09:17,370 --> 01:09:18,910 Що це масив виглядає? 1548 01:09:18,910 --> 01:09:21,430 Ну, чому я намалював це супер простий прямокутник на екрані тут 1549 01:09:21,430 --> 01:09:23,350 Перед саме з цієї причини. 1550 01:09:23,350 --> 01:09:27,279 Масив це просто шматок пам'яті послідував ще один шматок пам'яті, 1551 01:09:27,279 --> 01:09:30,109 пішов ще один шматок пам'яті, і так далі. 1552 01:09:30,109 --> 01:09:35,260 Так що, якщо мій масив розміром 2, в даному випадку тут, все, що я зробив би по 1553 01:09:35,260 --> 01:09:37,590 введення в моєї оцінки вікторини, як тут. 1554 01:09:37,590 --> 01:09:39,430 Я отримав 100 на цьому. 1555 01:09:39,430 --> 01:09:42,020 А потім я отримав 99 на цьому. 1556 01:09:42,020 --> 01:09:46,040 Тоді ця пам'ять не може навіть бути використаний, тому що я тільки запитав 1557 01:09:46,040 --> 01:09:48,689 комп'ютер масив розміром 2. 1558 01:09:48,689 --> 01:09:50,180 Ці квадрати все ще там. 1559 01:09:50,180 --> 01:09:50,340 Вірно? 1560 01:09:50,340 --> 01:09:52,500 У вас ще є два гігабайти оперативної пам'яті, навіть якщо ви тільки 1561 01:09:52,500 --> 01:09:53,979 просить двома поплавками. 1562 01:09:53,979 --> 01:09:58,710 Таким чином, ідея масивів є те, що комп'ютер просто бере шматок пам'яті 1563 01:09:58,710 --> 01:10:03,230 , А потім розподіляє дрібні шматки спина до спини, щоб спина до спини. 1564 01:10:03,230 --> 01:10:04,740 І це все, що масив. 1565 01:10:04,740 --> 01:10:09,080 Це безперервний шматок пам'яті, всередині якої ви можете покласти речі. 1566 01:10:09,080 --> 01:10:12,400 >> Тепер це відбувається тоді робити лише деякі нудно арифметика. 1567 01:10:12,400 --> 01:10:16,170 Якщо я прокрутіть вниз тут, це де я тоді ітерації по масиву. 1568 01:10:16,170 --> 01:10:19,410 Я придумав підсумовування всіх значень у масиві. 1569 01:10:19,410 --> 01:10:22,390 І тоді я використовувати круглі функцію тут насправді робити 1570 01:10:22,390 --> 01:10:23,940 сума ділиться на вікторини. 1571 01:10:23,940 --> 01:10:27,450 Але дозвольте мені махнути рукою на що як свого роду досить арифметичних зараз. 1572 01:10:27,450 --> 01:10:30,010 Але все, що робить для мене, в кінцевому рахунку, обчислення середнього. 1573 01:10:30,010 --> 01:10:33,640 Отже, спочатку тест Плюс другий вікторина, розділена на 2, а потім друку 1574 01:10:33,640 --> 01:10:34,700 його, як Int. 1575 01:10:34,700 --> 01:10:39,030 >> Але давайте тепер перехід до іншої приклад називається string1, 1576 01:10:39,030 --> 01:10:42,370 який малює аналогічну картину, але з використанням рядків. 1577 01:10:42,370 --> 01:10:45,550 Дозвольте мені йти вперед і спростити цей на мить. 1578 01:10:45,550 --> 01:10:48,340 І прости відступ на даний момент. 1579 01:10:48,340 --> 01:10:52,280 Зверніть увагу на лінію 19 з цього прикладу, я отримую рядок від користувача. 1580 01:10:52,280 --> 01:10:55,780 Але зверніть увагу на те, що я роблю в наступному ліній 22 і далі. 1581 01:10:55,780 --> 01:11:00,260 Насправді я ітерація від Я до - і це новий трюк - 1582 01:11:00,260 --> 01:11:02,730 StrLen, довжина рядка. 1583 01:11:02,730 --> 01:11:07,010 Це функція, яка поставляється з C, що якщо ви передаєте його рядки, він говорить 1584 01:11:07,010 --> 01:11:08,950 Вам, скільки символів в цьому рядку. 1585 01:11:08,950 --> 01:11:09,440 Ось і все. 1586 01:11:09,440 --> 01:11:12,520 Той факт, що це StrLen, а довжина рядка просто тому, що це 1587 01:11:12,520 --> 01:11:13,040 більш коротким. 1588 01:11:13,040 --> 01:11:17,100 30 років тому, людям подобалося писати речі, як лаконічно, наскільки можливо. 1589 01:11:17,100 --> 01:11:19,080 Таким чином, ми зберегли цю конвенцію тут. 1590 01:11:19,080 --> 01:11:21,730 я + + означає лише те збільшуємо я в кожній ітерації. 1591 01:11:21,730 --> 01:11:24,310 А тепер помічаю це, що дійсно цікаво. 1592 01:11:24,310 --> 01:11:28,730 Таким чином, у рядку 24, я кажу комп'ютер, дайте мені характер, вісім 1593 01:11:28,730 --> 01:11:30,770 бітів, і називають це в. 1594 01:11:30,770 --> 01:11:35,370 Але що це на правій стороні говорите? 1595 01:11:35,370 --> 01:11:38,150 В англійській мові, що це уявляєте? 1596 01:11:38,150 --> 01:11:40,070 [Нерозбірливо] 1597 01:11:40,070 --> 01:11:40,490 David J. Малан: Абсолютно вірно. 1598 01:11:40,490 --> 01:11:42,390 Дайте мені перший символ в масиві. 1599 01:11:42,390 --> 01:11:45,400 Або, в більш загальному, дай мені I-ий символ в масиві. 1600 01:11:45,400 --> 01:11:48,230 І розумію, що це важливо зараз, як комп'ютерні науки, ми насправді 1601 01:11:48,230 --> 01:11:49,330 починаючи з 0. 1602 01:11:49,330 --> 01:11:51,290 Ви не повинні розсуд зараз, щоб почати це робити. 1603 01:11:51,290 --> 01:11:54,580 Тепер ви повинні вести себе відповідно до очікувань комп'ютера і 1604 01:11:54,580 --> 01:11:58,010 рахувати з нуля, тому що [0] буде першим 1605 01:11:58,010 --> 01:11:59,670 символів в рядку. 1606 01:11:59,670 --> 01:12:01,320 [1] буде другий. 1607 01:12:01,320 --> 01:12:03,610 [2] буде третім, і так далі. 1608 01:12:03,610 --> 01:12:08,840 Таким чином, ця програма, якщо я скомпілювати його - це, знову ж таки, string1. 1609 01:12:08,840 --> 01:12:11,040 >> Так що string1. 1610 01:12:11,040 --> 01:12:16,730 А тепер я біжу string1 в моєму вікні терміналу. 1611 01:12:16,730 --> 01:12:19,180 Він очікує введення, так що я збираюся ввести, скажімо, Давида. 1612 01:12:19,180 --> 01:12:20,080 Enter. 1613 01:12:20,080 --> 01:12:23,350 І тепер він друкує DAVID все на різних лініях, тому що 1614 01:12:23,350 --> 01:12:24,430 помітить, що я роблю. 1615 01:12:24,430 --> 01:12:27,510 Я друк одного символу за один раз. 1616 01:12:27,510 --> 01:12:29,100 Зараз ми не будемо вдаватися в подробиці сьогодні на цьому. 1617 01:12:29,100 --> 01:12:31,610 Але я видалив цю хвилину тому тут галочку. 1618 01:12:31,610 --> 01:12:36,310 Виявляється, що якщо користувач неправильно, змагальності, або просто 1619 01:12:36,310 --> 01:12:41,780 замішанні, ви можете фактично не дають рядки деякої довжини. 1620 01:12:41,780 --> 01:12:43,640 Якщо ви натиснете не ту клавішу на клавіатурі, ви могли б дати 1621 01:12:43,640 --> 01:12:44,390 Рядок не на всіх. 1622 01:12:44,390 --> 01:12:47,790 Або, якщо ви злий, ви можете спробувати, щоб вставити у вартість гігабайта про 1623 01:12:47,790 --> 01:12:49,380 есе для заповнення цього рядка. 1624 01:12:49,380 --> 01:12:52,060 І якщо на комп'ютері не вистачає пам'яті, то виходить, що ми збираємося 1625 01:12:52,060 --> 01:12:54,310 повернути це спеціальне значення, зване нульове. 1626 01:12:54,310 --> 01:12:57,550 Таким чином, на даний момент, просто знаю, що є це спеціальне значення, зване нульове, що 1627 01:12:57,550 --> 01:13:01,000 дозволить нам перевірити, коли ми з пам'яті, між іншим. 1628 01:13:01,000 --> 01:13:07,330 >> Але якщо я відкриваю зараз string2, зверніть увагу на одна відмінність тут. 1629 01:13:07,330 --> 01:13:09,760 Зверніть увагу на одна відмінність тут з string2. 1630 01:13:09,760 --> 01:13:13,260 З string2, цей цикл трохи відрізняється. 1631 01:13:13,260 --> 01:13:16,350 Дозвольте мені видалити нулі, так що ми можемо говорити про тих, хто в інший раз. 1632 01:13:16,350 --> 01:13:18,460 Але чим же відрізняється циклу на цей раз? 1633 01:13:21,580 --> 01:13:23,160 І я можу повернутися до попереднього прикладу. 1634 01:13:23,160 --> 01:13:24,800 Так що це другий варіант. 1635 01:13:24,800 --> 01:13:27,020 Це версія одного. 1636 01:13:27,020 --> 01:13:31,935 Один, два, раз-два. 1637 01:13:35,030 --> 01:13:38,240 Так StrLen виклик де? 1638 01:13:38,240 --> 01:13:40,420 Це в першій частині циклу. 1639 01:13:40,420 --> 01:13:43,060 Будь-які думки про те, чому я це роблю? 1640 01:13:43,060 --> 01:13:43,690 Так. 1641 01:13:43,690 --> 01:13:46,010 [Нерозбірливо] 1642 01:13:46,010 --> 01:13:47,630 David J. Малан: Так що ми не викликаємо функцію кожного разу. 1643 01:13:47,630 --> 01:13:48,040 Саме так. 1644 01:13:48,040 --> 01:13:50,350 Нагадаємо, з петлями на те, що вони супер просто, як тільки ви роду 1645 01:13:50,350 --> 01:13:52,180 розумію, що це ініціалізації 1646 01:13:52,180 --> 01:13:53,330 стані, і оновлення. 1647 01:13:53,330 --> 01:13:55,430 Проблема в тому, що умова відбувається на кожному 1648 01:13:55,430 --> 01:13:56,600 ітерації циклу. 1649 01:13:56,600 --> 01:13:59,930 І тому в даному прикладі, що таке погано про те, 1650 01:13:59,930 --> 01:14:03,500 що це мій стан? 1651 01:14:03,500 --> 01:14:05,920 Ви телефонуєте StrLen знову і знову, і знову. 1652 01:14:05,920 --> 01:14:08,990 Але як тільки я набрав в DAVID, довжина цього рядка дорівнює п'яти. 1653 01:14:08,990 --> 01:14:11,560 І він не збирається міняти на кожній ітерації циклу, оскільки 1654 01:14:11,560 --> 01:14:15,560 Рядок як і раніше D - V-I-D. Так що це натяк на те, що збирається стати 1655 01:14:15,560 --> 01:14:19,650 більш важлива ідея відома як дизайнерське рішення, де - просто не 1656 01:14:19,650 --> 01:14:21,640 змусити комп'ютер робити непотрібну роботу. 1657 01:14:21,640 --> 01:14:25,630 >> Тепер же, як попередній перегляд PSET 2, PSET 2 в стандартному виданні 1658 01:14:25,630 --> 01:14:28,850 збираюся кинути вам виклик насправді реалізації деякого числа шифрів, деякі 1659 01:14:28,850 --> 01:14:32,650 кількість алгоритмів шифрування, так що ви можете як шифрування і дешифрування 1660 01:14:32,650 --> 01:14:35,530 секретні повідомлення, схожу на ту, Ральфі там декодувати. 1661 01:14:35,530 --> 01:14:38,720 У хакером видання PSET 2, ми збираємося піти трохи далі. 1662 01:14:38,720 --> 01:14:42,010 Ми збираємося передати вам файл з фактичними комп'ютерну систему, яка містить 1663 01:14:42,010 --> 01:14:45,690 цілу купу імен та фактичної зашифровані паролі, і завдання 1664 01:14:45,690 --> 01:14:49,110 для хакера видання буде зламувати ці паролі і фігури 1665 01:14:49,110 --> 01:14:53,060 , Що криптографія і таємні, що була використана насправді 1666 01:14:53,060 --> 01:14:55,080 генерувати ці паролі. 1667 01:14:55,080 --> 01:14:58,360 І ми збираємося зробити це за допомогою нової функції тут C, що я дам 1668 01:14:58,360 --> 01:15:02,200 Ви тільки демо-версія, відома як аргументи командного рядка. 1669 01:15:02,200 --> 01:15:05,930 >> Ось і виходить, як деякі з вас, можливо, бачили в розділі або в підручниках, 1670 01:15:05,930 --> 01:15:09,850 Основним не завжди повинна бути порожнеча в дужках. 1671 01:15:09,850 --> 01:15:14,060 Виявляється, що основна можна також записати як це, з двома аргументами, 1672 01:15:14,060 --> 01:15:19,690 ARGC і ARGV, де ARGC число слів, які ви вводите після 1673 01:15:19,690 --> 01:15:21,940 Програми ім'я в командному рядку. 1674 01:15:21,940 --> 01:15:24,550 І ARGV є фактичним слів. 1675 01:15:24,550 --> 01:15:29,470 І, як квадратні дужки там пропонують, ARGV мабуть масиву. 1676 01:15:29,470 --> 01:15:33,720 Це збирається бути рядком після рядка після рядка в пам'яті. 1677 01:15:33,720 --> 01:15:36,170 Так що ми збираємося бути в змозі зробити, починаючи з PSET 2, 1678 01:15:36,170 --> 01:15:37,310 щось на зразок цього. 1679 01:15:37,310 --> 01:15:42,450 Якщо я роблю argv1, який є прикладом ми повернемося до в понеділок, і запустіть 1680 01:15:42,450 --> 01:15:45,180 це, зауважте, що це не схоже, щоб зробити що-небудь ще. 1681 01:15:45,180 --> 01:15:47,050 Він просто виводить своє ім'я. 1682 01:15:47,050 --> 01:15:53,220 Але якщо я прощаюся класу, зверніть увагу, що ця програма мабуть ітерації 1683 01:15:53,220 --> 01:15:57,030 над кожним зі слів, які були надруковані в командному рядку. 1684 01:15:57,030 --> 01:16:02,050 І засоби, за допомогою яких ми зможемо отримати доступ до слів, які користувач має 1685 01:16:02,050 --> 01:16:06,780 друкується в рядку є зміна основного, починаючи цей уїк-енд, від Int 1686 01:16:06,780 --> 01:16:10,710 основних (недійсними) в ціле основні (агдс, ARGV). 1687 01:16:10,710 --> 01:16:13,700 І, таким чином народиться аргументи командного рядка. 1688 01:16:13,700 --> 01:16:17,210 І як тільки ви отримаєте дійсно складна в цьому, ви будете мати можливість писати 1689 01:16:17,210 --> 01:16:21,370 дійсно тріп програм, таких, як цей ось, який йде вище і поза 1690 01:16:21,370 --> 01:16:25,520 деякі функції, які ми зробили до сих пір, але все досить потужний. 1691 01:16:25,520 --> 01:16:27,330 >> Таким чином, ми залишимо це з цим на екрані. 1692 01:16:27,330 --> 01:16:29,160 І ми будемо бачити Вас в понеділок.