1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> СПІКЕР 1: Привіт всім. 3 00:00:05,680 --> 00:00:07,530 Ми збираємося, щоб почати. 4 00:00:07,530 --> 00:00:09,330 Я думаю, що люди все ще йдуть бути фільтрації в. 5 00:00:09,330 --> 00:00:12,840 Але в цілях економії часу, тому ми можемо отримати ви, хлопці, звідси на час, 6 00:00:12,840 --> 00:00:14,110 ми збираємося почати. 7 00:00:14,110 --> 00:00:18,780 Так що ласкаво просимо до CS50 Вікторина 0 відгуків. 8 00:00:18,780 --> 00:00:23,020 Для тих з вас, хто не зрозумів, ще, у вас є питання на середу. 9 00:00:23,020 --> 00:00:25,700 Ву-ху. 10 00:00:25,700 --> 00:00:29,780 >> Якщо ви ще не почали вивчати ще й не зрозумів, що це існує поки, 11 00:00:29,780 --> 00:00:34,070 останні опитування і вся інформація про ваш тест знаходяться на cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Там-то досить хороший матеріал там, Минулі вікторини від останнього 10 13 00:00:38,090 --> 00:00:43,760 років, а також інформацію про це вікторини і темам 14 00:00:43,760 --> 00:00:46,250 , Які будуть покриті. 15 00:00:46,250 --> 00:00:48,980 Так що давайте почнемо. 16 00:00:48,980 --> 00:00:54,240 >> Так ви, хлопці, можливо, пам'ятаєте, перший день класу Давида були ті лампи на. 17 00:00:54,240 --> 00:00:59,650 Так по суті, все, що відбувається під капотом комп'ютера є 18 00:00:59,650 --> 00:01:00,860 зроблено в двійковій системі. 19 00:01:00,860 --> 00:01:04,080 Двійковій означає, що це звучить як, 0 і 1 років. 20 00:01:04,080 --> 00:01:09,290 Вона має два значення, можна уявити. 21 00:01:09,290 --> 00:01:14,675 >> Так само, як в перший день розділ коли Девід включив світло 22 00:01:14,675 --> 00:01:21,990 лампа для подання на, або 1, наш комп'ютер розуміє двійковий як 0 і 23 00:01:21,990 --> 00:01:24,110 1-х, чи ні. 24 00:01:24,110 --> 00:01:25,360 Основи Binary. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Кожне місце представлена в базі два. 27 00:01:32,470 --> 00:01:36,260 Таким чином, ви додайте 2 до 0 до З 1 по 2 всі, аж до. 28 00:01:36,260 --> 00:01:41,970 >> Щоб обчислити, що ваша програма є десяткової, ви просто прямуєте це рівняння 29 00:01:41,970 --> 00:01:42,840 Тип річ. 30 00:01:42,840 --> 00:01:49,510 Якщо у вас є 1 в будь-якому з цих місць, Ви помножте його на все 31 00:01:49,510 --> 00:01:53,820 засновувати це, додайте його, і Ви отримуєте десяткової. 32 00:01:53,820 --> 00:01:57,930 Так що це, як ви вважаєте до 5 в двійковому вигляді. 33 00:01:57,930 --> 00:02:01,400 Так само, як те, що ми робили на останній слайд, це, як ви б 34 00:02:01,400 --> 00:02:02,650 представляють з 1 по 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Точно так же, так само, як ви можете додавати і відняти в десяткового або засновувати 10, або 37 00:02:09,660 --> 00:02:13,040 дійсно будь-яку підставу, на можна додати і відняти в двійковій системі. 38 00:02:13,040 --> 00:02:18,400 Точно, що ви очікували б, коли ви додати двох до, якщо вона дорівнює більше 39 00:02:18,400 --> 00:02:24,220 ніж 1, ви носите 1, зробити його 0, і зробити додавання таким чином, просто 40 00:02:24,220 --> 00:02:29,910 як можна було б очікувати з регулярним десяткове або будь-який інший бази. 41 00:02:29,910 --> 00:02:30,970 Прохолодний. 42 00:02:30,970 --> 00:02:35,140 >> Так як я вже говорив, все, що відбувається під капотом нашого комп'ютера 43 00:02:35,140 --> 00:02:37,560 робиться в 0 і 1, або бінарний. 44 00:02:37,560 --> 00:02:43,470 Так як же ми висловлюємо, наприклад, букв або цифр або символів? 45 00:02:43,470 --> 00:02:45,560 І відповідь на це ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII є відображенням між персонажами що ми зазвичай бачимо в 47 00:02:49,380 --> 00:02:53,360 Англійська мова, як сайт, B, C о, підкреслюють, тире, і 48 00:02:53,360 --> 00:02:54,910 нічого подібного. 49 00:02:54,910 --> 00:02:57,260 І він відображає, що в значення ASCII. 50 00:02:57,260 --> 00:03:03,080 Значення ASCII це просто число, що можна зрозуміти, комп'ютері. 51 00:03:03,080 --> 00:03:07,430 І так само, як ви можете зробити додавання і віднімання з числами, ви можете зробити 52 00:03:07,430 --> 00:03:10,890 їх зі значеннями ASCII. 53 00:03:10,890 --> 00:03:14,050 >> Таким чином, в цьому прикладі, що це буде роздрукувати? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Так, так просто простір B простір C простір D. Де моя миша йти? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Зверніть увагу, ви можете визначити Int на 65. 58 00:03:43,380 --> 00:03:47,080 І при друку, що за допомогою відсотків C, це буде інтерпретувати, що, як 59 00:03:47,080 --> 00:03:49,330 характер і роздрукує А. 60 00:03:49,330 --> 00:03:52,800 >> Крім того, ви можете оголосити це як символ. 61 00:03:52,800 --> 00:03:56,860 І коли ви роздрукувати його за допомогою відсотків C, це буде інтерпретувати, що, як 62 00:03:56,860 --> 00:04:05,240 відсотків D. І так само, як ви можете додати число, ви можете додати символи 63 00:04:05,240 --> 00:04:06,878 Значення ASCII, в цьому випадку. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> Так трохи покажчик для всіх. 66 00:04:16,130 --> 00:04:19,610 5, у вигляді рядка, що не фактично дорівнює 5. 67 00:04:19,610 --> 00:04:26,610 Так як ми можемо перетворити Рядок 5 до цілого 5? 68 00:04:26,610 --> 00:04:28,930 Будь-які ідеї? 69 00:04:28,930 --> 00:04:31,630 Так. 70 00:04:31,630 --> 00:04:36,720 >> Так що, якщо у нас є 5 у вигляді рядка, ми можемо відняти 0. 71 00:04:36,720 --> 00:04:37,820 І що дасть нам 5. 72 00:04:37,820 --> 00:04:41,670 І точно так само, якщо у нас є 5 як ціле, додати, що в рядок 0. 73 00:04:41,670 --> 00:04:43,112 І це дає нам рядок 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Прохолодний. 76 00:04:48,350 --> 00:04:52,940 >> Тепер згадайте назад в лекції той, де ми говорили про алгоритмів. 77 00:04:52,940 --> 00:04:57,260 Так як же ми насправді хочемо комп'ютер щоб робити цікаві речі? 78 00:04:57,260 --> 00:05:00,460 Ви знаєте, просто додавання і віднімання номери і друку речі з НЕ 79 00:05:00,460 --> 00:05:01,730 що цікаво. 80 00:05:01,730 --> 00:05:04,620 Як правило, ми хочемо, щоб наш комп'ютер до виконувати свого роду алгоритм. 81 00:05:04,620 --> 00:05:07,820 Щось трохи складніше ніж просто простої арифметики. 82 00:05:07,820 --> 00:05:11,930 >> Алгоритм просто крок за кроком набору інструкцій для виконання, як 83 00:05:11,930 --> 00:05:14,640 певний task-- 84 00:05:14,640 --> 00:05:15,660 так само, як рецепт. 85 00:05:15,660 --> 00:05:19,990 Можливо, ви пам'ятаєте перший день Клас, де Давид Підрахуємо номер 86 00:05:19,990 --> 00:05:22,550 людей і скільки людей були в кімнаті. 87 00:05:22,550 --> 00:05:24,480 Ви могли б бути використані для підрахунку один за іншим. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 В цьому випадку лінійний алгоритм часу. 90 00:05:28,010 --> 00:05:31,710 >> Але Давид ввів алгоритм Ви порахувати людей в номері 91 00:05:31,710 --> 00:05:37,340 де всі встають, ви Вимовте Число іншій особі, додати, що 92 00:05:37,340 --> 00:05:39,200 число, і одна людина сідає. 93 00:05:39,200 --> 00:05:40,410 І ви повторити це. 94 00:05:40,410 --> 00:05:42,910 Це один тип алгоритму. 95 00:05:42,910 --> 00:05:47,520 Ми можемо проаналізувати, як ефективно ап Алгоритм заснований на це під час виконання. 96 00:05:47,520 --> 00:05:49,680 Але ми поговоримо трохи про це трохи пізніше. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> Таким чином, всі алгоритми можуть також записати в псевдокоде. 99 00:05:57,090 --> 00:06:01,120 Псевдокод просто англійську як синтаксис, використовуваний для представлення 100 00:06:01,120 --> 00:06:02,420 мова програмування. 101 00:06:02,420 --> 00:06:06,070 Наприклад, якщо ми хотіли запитати користувача вгадати мій улюблений номер, ми 102 00:06:06,070 --> 00:06:08,390 псевдокод може мати як такої. 103 00:06:08,390 --> 00:06:09,850 >> Отримати користувачі думаю. 104 00:06:09,850 --> 00:06:13,570 Якщо здогадка вірна, сказати їм, вони праві, інакше сказати їм 105 00:06:13,570 --> 00:06:15,560 вони не правильно. 106 00:06:15,560 --> 00:06:22,530 І псевдокод це спосіб легко представляючи ідею або алгоритм. 107 00:06:22,530 --> 00:06:26,910 Так що тепер ми могли б насправді писати це мовою, що комп'ютер 108 00:06:26,910 --> 00:06:27,980 могли б розуміння. 109 00:06:27,980 --> 00:06:35,660 Таким чином, ми можемо записати наш псевдокод і інтерпретувати, що у вихідному коді. 110 00:06:35,660 --> 00:06:41,320 >> Поки, вихідний код повинен дотримуватися в певній синтаксисом 111 00:06:41,320 --> 00:06:42,490 мова програмування. 112 00:06:42,490 --> 00:06:45,430 І до цих пір, в CS50, ми використовували в основному в. 113 00:06:45,430 --> 00:06:48,320 Так що це може бути вихідний код в. 114 00:06:48,320 --> 00:06:51,440 Пізніше в ході, ви вночі приходять в контакт з іншими програмування 115 00:06:51,440 --> 00:06:52,480 Мови, як PHP. 116 00:06:52,480 --> 00:06:57,540 Або, якщо ви навіть приймати інші класи, вам може зробити Java, Python, або навіть OCML. 117 00:06:57,540 --> 00:07:01,570 Але в нашій мові з програми, це як ми могли б написати вихідний код для 118 00:07:01,570 --> 00:07:04,760 алгоритм псевдокод, що Я щойно описав раніше. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Так як же ваш комп'ютер насправді зрозуміти, що? 121 00:07:11,430 --> 00:07:14,490 Як я вже говорив, це тільки дійсно розуміє нулі й одиниці. 122 00:07:14,490 --> 00:07:17,880 Так, як це отримати від джерела Код до того, що може бути 123 00:07:17,880 --> 00:07:18,960 зрозумів? 124 00:07:18,960 --> 00:07:22,920 Ну, у нас є що називається компілятор. 125 00:07:22,920 --> 00:07:28,450 >> Якщо ви пам'ятаєте назад в більшість psets, ви були якісь програми 126 00:07:28,450 --> 00:07:30,370 написано в точка C File. 127 00:07:30,370 --> 00:07:32,550 І тоді ви повинні ввести марку. 128 00:07:32,550 --> 00:07:35,970 Так що ж робити робити? 129 00:07:35,970 --> 00:07:39,970 >> Ви можете ввести марку, щоб компілювати Програма тому someone-- 130 00:07:39,970 --> 00:07:42,730 той, хто написав свій р набір; ймовірно David-- 131 00:07:42,730 --> 00:07:44,190 створив зробити файл. 132 00:07:44,190 --> 00:07:51,320 І що говорить зробити, щоб знати, щоб запустити свій компілятор, називається дзвін, що воля 133 00:07:51,320 --> 00:07:55,560 скомпілювати вихідний код об'єкта Код, який нулі й одиниці 134 00:07:55,560 --> 00:07:57,720 що ваш комп'ютер розуміє. 135 00:07:57,720 --> 00:08:01,610 Але трохи пізніше, ми підемо більш докладно про компіляторів. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> Так згадати PSET 0, where-- да, у вас є питання? 138 00:08:10,800 --> 00:08:11,620 >> АУДИТОРІЯ: [нерозбірливо]? 139 00:08:11,620 --> 00:08:12,490 >> СПІКЕР 1: Так. 140 00:08:12,490 --> 00:08:14,960 Я думаю, що вони насправді повинні бути онлайн. 141 00:08:14,960 --> 00:08:15,120 Так. 142 00:08:15,120 --> 00:08:16,572 >> АУДИТОРІЯ: Це як [нерозбірливо]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> СПІКЕР 1: Це не так. 145 00:08:20,830 --> 00:08:25,810 Знаходяться на cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> АУДИТОРІЯ: Slash вікторини, слеш 2013, слеш 0, і просто натисніть через 147 00:08:32,900 --> 00:08:35,956 вікторини 2013 і вікторини 0, переглянути розділ слайди. 148 00:08:35,956 --> 00:08:40,380 >> СПІКЕР 1: Так, так що якщо ви, хлопці, хочете потягніть його вгору і подивитися на нього на вашому 149 00:08:40,380 --> 00:08:42,740 власний комп'ютер, це теж добре. 150 00:08:42,740 --> 00:08:43,130 Сказати, що знову. 151 00:08:43,130 --> 00:08:44,546 >> АУДИТОРІЯ: [нерозбірливо]. 152 00:08:44,546 --> 00:08:48,780 >> СПІКЕР 1: Так, [нерозбірливо] є фіктивна змінна. 153 00:08:48,780 --> 00:08:49,644 О, да? 154 00:08:49,644 --> 00:08:51,372 >> АУДИТОРІЯ: [нерозбірливо]? 155 00:08:51,372 --> 00:08:54,300 >> Динамік 1: Ні, страйки не так на іспиті. 156 00:08:54,300 --> 00:08:55,950 На жаль, її питання було, був удари по іспиту. 157 00:08:55,950 --> 00:08:59,530 І це не так. 158 00:08:59,530 --> 00:09:05,780 Так PSET 0, ви, хлопці, повинні мати всі реалізовані небудь через подряпину. 159 00:09:05,780 --> 00:09:13,100 І ми дізналися деякі основи програмування будівельні блоки, що використовують подряпини. 160 00:09:13,100 --> 00:09:15,590 >> Отже, давайте поглянемо на деякі з цих будівельних блоків 161 00:09:15,590 --> 00:09:18,170 , Які складають програму. 162 00:09:18,170 --> 00:09:20,570 Вперше це логічне вираз. 163 00:09:20,570 --> 00:09:24,540 Логічні вирази є ті, і 0-х або все, що має 164 00:09:24,540 --> 00:09:25,700 два можливих значення. 165 00:09:25,700 --> 00:09:30,320 В цьому випадку, істинним або хибним, або вимкнути, і так чи ні. 166 00:09:30,320 --> 00:09:35,390 Приклад простий, дуже простий, програма, яка використовує логічне 167 00:09:35,390 --> 00:09:39,140 вираз тут. 168 00:09:39,140 --> 00:09:43,220 >> Так для того, щоб логічних виразів в бути корисно, у нас є логічні оператори. 169 00:09:43,220 --> 00:09:48,920 Ці оператори, які можна використовувати порівняти певні значення. 170 00:09:48,920 --> 00:09:52,820 Тому у нас є і чи не дорівнює, менше або дорівнює, або більше, ніж 171 00:09:52,820 --> 00:09:55,130 рівні, і менше, ніж або більше, ніж. 172 00:09:55,130 --> 00:09:59,060 Але ці оператори не дуже корисно якщо ми не можемо об'єднати їх в 173 00:09:59,060 --> 00:10:00,320 умови. 174 00:10:00,320 --> 00:10:04,370 >> Так ви, хлопці, пам'ятаєте з нуля і з вашого р встановлює, що ми 175 00:10:04,370 --> 00:10:05,400 було умови. 176 00:10:05,400 --> 00:10:09,710 Вони, по суті, як вилки в логіка вашої програми, що 177 00:10:09,710 --> 00:10:12,670 виконує в залежності від того умова виконується. 178 00:10:12,670 --> 00:10:18,150 Так однією з умов, які ми мали використовувати багато разів в цьому курсі 179 00:10:18,150 --> 00:10:21,470 якщо, то в іншому місці, якщо, і в іншому місці умови. 180 00:10:21,470 --> 00:10:24,060 >> Ось приклад того, як Ви могли б використовувати це. 181 00:10:24,060 --> 00:10:28,430 Хто-небудь знає різницю між тільки за допомогою якщо заяви всіх 182 00:10:28,430 --> 00:10:32,530 аж віршах, якщо, ще, якщо, і ще в поєднанні? 183 00:10:32,530 --> 00:10:33,013 Да? 184 00:10:33,013 --> 00:10:34,263 >> АУДИТОРІЯ: [нерозбірливо]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> СПІКЕР 1: Точно. 187 00:10:42,160 --> 00:10:50,210 Так що, якщо у мене було, якщо все, аж цьому чином, навіть якщо це умова повернення 188 00:10:50,210 --> 00:10:52,800 правда, він все одно буде продовжувати тестування в найближчі два. 189 00:10:52,800 --> 00:11:00,120 У той час як, з ще-якщо, до ELSE особистих даних, якщо один повертає істину, 190 00:11:00,120 --> 00:11:02,640 інші не перевіряв. 191 00:11:02,640 --> 00:11:05,955 Будь-які питання про те, що? 192 00:11:05,955 --> 00:11:06,890 Прохолодний. 193 00:11:06,890 --> 00:11:12,240 >> Таким чином, ви використовуєте, якщо-інакше з ELSE заяву, якщо ви знаєте, що він може тільки 194 00:11:12,240 --> 00:11:14,470 бути одним з цих випадків. 195 00:11:14,470 --> 00:11:21,550 Отже, ми знаємо, якщо х менше 0, це безумовно не буде 196 00:11:21,550 --> 00:11:22,890 більше, ніж 0. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Далі, ще одним будівельним блоком що ми дізналися є петлі. 199 00:11:31,480 --> 00:11:33,310 У нас є три типи циклів. 200 00:11:33,310 --> 00:11:35,830 Для петель, в той час як петлі, і зробити в той час як петлі. 201 00:11:35,830 --> 00:11:38,730 І взагалі, коли ви сідаєте в то написати, ви повинні вирішити, 202 00:11:38,730 --> 00:11:40,060 який із трьох ви хочете використовувати. 203 00:11:40,060 --> 00:11:41,900 Так як же нам вирішити, який? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Ми взагалі використовуємо для циклу, якщо ми знаємо, скільки разів ми хочемо ітерації 206 00:11:48,790 --> 00:11:53,650 через те чи скільки раз ми хочемо, щоб виконати завдання. 207 00:11:53,650 --> 00:11:58,830 Ми використовуємо в той час як петлі, якщо нам потрібні стан, щоб бути правдою, щоб продовжувати працювати. 208 00:11:58,830 --> 00:12:03,730 І ми використовуємо зробити в той час як дуже схожий на в той час як, але ми хочемо, щоб наш код для запуску на 209 00:12:03,730 --> 00:12:04,880 мере один раз. 210 00:12:04,880 --> 00:12:09,410 >> Так що в той час, все, що знаходиться в волю завжди виконуються хоча б один раз. 211 00:12:09,410 --> 00:12:13,120 У той час як, з той час, його не може працювати взагалі, якщо 212 00:12:13,120 --> 00:12:15,490 умова не виконана. 213 00:12:15,490 --> 00:12:16,740 Будь-які питання з цим? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> Так структура для циклу. 216 00:12:22,860 --> 00:12:23,620 Ви, хлопці, всі бачили це. 217 00:12:23,620 --> 00:12:25,320 Ви инициализировать його. 218 00:12:25,320 --> 00:12:26,600 У вас є свого роду стані. 219 00:12:26,600 --> 00:12:32,340 Так, наприклад, ми могли б ініціалізувати як для я дорівнює 0. 220 00:12:32,340 --> 00:12:34,040 я менше 10. 221 00:12:34,040 --> 00:12:35,442 І я ++. 222 00:12:35,442 --> 00:12:39,010 Дуже простий, що ми зробили. 223 00:12:39,010 --> 00:12:42,210 >> Деякий час циклу, так же, у вас є мати свого роду ініціалізації, 224 00:12:42,210 --> 00:12:44,980 свого роду стані, і свого роду оновлення. 225 00:12:44,980 --> 00:12:51,990 Так що ми можемо реалізувати наші циклі також як час циклу за допомогою цього. 226 00:12:51,990 --> 00:12:56,000 І точно так само з справ в той час як петлі, ми могли б мати деяку ініціалізацію, 227 00:12:56,000 --> 00:12:58,640 виконати те, оновити його, і Потім перевірте стан. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> Так що тепер функції. 230 00:13:05,140 --> 00:13:06,460 Ставимо все разом. 231 00:13:06,460 --> 00:13:10,140 Ми, можливо, захочете написати деякі вид функції. 232 00:13:10,140 --> 00:13:12,790 Загальні функції, які ви, можливо, вже бачили це головний. 233 00:13:12,790 --> 00:13:13,770 Основний є функцією. 234 00:13:13,770 --> 00:13:16,160 Він має тип значення, внутр. 235 00:13:16,160 --> 00:13:18,470 Він має ім'я функції, основним. 236 00:13:18,470 --> 00:13:20,810 І вона має аргументи, ARGC і ARGV. 237 00:13:20,810 --> 00:13:24,040 Так головний це просто функція. 238 00:13:24,040 --> 00:13:27,230 >> Інші функції, які ви використовували, printf-- Е є function-- 239 00:13:27,230 --> 00:13:29,330 GetInt, ToUpper. 240 00:13:29,330 --> 00:13:32,010 Але це, виявляється, був реалізовані для нас 241 00:13:32,010 --> 00:13:33,270 свого роду бібліотеки. 242 00:13:33,270 --> 00:13:37,400 Якщо ви, хлопці, пам'ятайте включаючи ця бібліотека CS50.h або 243 00:13:37,400 --> 00:13:38,510 Стандарт I / O бібліотека. 244 00:13:38,510 --> 00:13:39,200 Так, питання? 245 00:13:39,200 --> 00:13:41,610 >> Зали: основний просто притаманне с? 246 00:13:41,610 --> 00:13:44,740 Чи має це тільки частково [нерозбірливо]? 247 00:13:44,740 --> 00:13:47,370 >> СПІКЕР 1: Питання в тому, якщо головний притаманна в. 248 00:13:47,370 --> 00:13:51,460 І так, всі функції Тобто основну функцію. 249 00:13:51,460 --> 00:13:55,290 Це свого роду необхідні для комп'ютера знати, з чого почати 250 00:13:55,290 --> 00:13:55,993 виконання коду. 251 00:13:55,993 --> 00:13:58,108 >> АУДИТОРІЯ: Так ви не захотіли [нерозбірливо]? 252 00:13:58,108 --> 00:13:59,480 >> СПІКЕР 1: N: 253 00:13:59,480 --> 00:14:00,760 Ще питання? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Прохолодний. 256 00:14:04,770 --> 00:14:08,050 Так само, як ви можете використовувати функцію що написано для вас, ви можете також 257 00:14:08,050 --> 00:14:10,380 написати свою власну функцію. 258 00:14:10,380 --> 00:14:17,050 Це функція, що хтось міг би написали для розрахунку обсягу 259 00:14:17,050 --> 00:14:18,395 з д, наприклад. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Там в повертається тип тут, в цьому випадку Int, наше ім'я функції д і наші 262 00:14:29,500 --> 00:14:31,360 Список параметрів. 263 00:14:31,360 --> 00:14:34,550 >> І зверніть увагу, що у вас є, щоб записати дані тип параметра, який потрібно 264 00:14:34,550 --> 00:14:38,660 використовувати або функції не знати, які 265 00:14:38,660 --> 00:14:41,650 параметр повинен я бути прийняття. 266 00:14:41,650 --> 00:14:48,110 Так, в даному випадку, ми хочемо ціле, як наш вхід. 267 00:14:48,110 --> 00:14:50,390 Так чому може ми хочемо використовувати функції? 268 00:14:50,390 --> 00:14:52,800 >> Перш за все, відмінно підходить для організації. 269 00:14:52,800 --> 00:14:56,350 Вони допомагають розбити свій код в більш організованою шматки і зробити 270 00:14:56,350 --> 00:14:57,960 його було простіше читати. 271 00:14:57,960 --> 00:14:59,760 Спрощення. 272 00:14:59,760 --> 00:15:01,740 Це добре для дизайну. 273 00:15:01,740 --> 00:15:04,570 Коли ви читаєте шматок коду і основна функція дійсно, 274 00:15:04,570 --> 00:15:07,750 дуже довго, це може бути складніше Причина про те, що відбувається. 275 00:15:07,750 --> 00:15:11,710 Так що якщо ви розбити його на функцій, це може бути більш зручним для читання. 276 00:15:11,710 --> 00:15:12,750 І повторно-здатність. 277 00:15:12,750 --> 00:15:16,940 Якщо у вас є шматок коду, який будучи називається або запустити кілька разів, 278 00:15:16,940 --> 00:15:20,690 замість перезапису, що код 10 раз в основної функції, ви могли б 279 00:15:20,690 --> 00:15:21,440 хочете використовувати його. 280 00:15:21,440 --> 00:15:25,740 І тоді кожен раз, ви повинні використовувати, що шматок коду, викликати функцію. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> Так що тепер, якщо ми згадаємо, назад нуля, ми також говорили про декілька концепцій, 283 00:15:35,380 --> 00:15:37,680 один з яких різьби. 284 00:15:37,680 --> 00:15:41,120 Тема є поняття кратного послідовності коду 285 00:15:41,120 --> 00:15:43,040 виконання одночасно. 286 00:15:43,040 --> 00:15:47,490 Так згадайте дня, де Девід був Ви, хлопці, відрахувати кількість 287 00:15:47,490 --> 00:15:48,440 люди в кімнаті. 288 00:15:48,440 --> 00:15:50,550 >> По суті, що відбувається на всі з вас, хлопці були 289 00:15:50,550 --> 00:15:52,370 працює окремі потоки. 290 00:15:52,370 --> 00:15:55,540 І ці теми йшли разом щоб отримати свого роду відповідь. 291 00:15:55,540 --> 00:15:58,890 Точно так же в порожньому, коли у вас є кілька спрайт, може 292 00:15:58,890 --> 00:16:01,070 є кішка і собака. 293 00:16:01,070 --> 00:16:08,770 І вони були б одночасно працюють власні скрипти. 294 00:16:08,770 --> 00:16:10,020 Це є прикладом різьби. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> І інше поняття, що було введений в порожньому була події. 297 00:16:18,000 --> 00:16:22,550 І події, коли кілька частин ваш код спілкуватися один з одним. 298 00:16:22,550 --> 00:16:26,840 В нуля, це було, коли ви використовували контроль і мовлення Коли я 299 00:16:26,840 --> 00:16:29,500 Отримайте блоків. 300 00:16:29,500 --> 00:16:35,170 >> А також, в задачі Набір 4, ми бачили трохи подій, а також. 301 00:16:35,170 --> 00:16:38,250 Ви, хлопці, могли б використовувати Бібліотека Gevent. 302 00:16:38,250 --> 00:16:42,450 І була функція waitForClick в якому ви чекали 303 00:16:42,450 --> 00:16:44,300 для користувача, щоб натиснути кнопку. 304 00:16:44,300 --> 00:16:47,870 І ваш клацання, в цьому випадку, було б подій і чекати клік це ваш 305 00:16:47,870 --> 00:16:49,120 оброблювач подій. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> А також, по всій показ psets і працює на ваших psets, ви 308 00:16:58,630 --> 00:17:01,920 можливо, вступають в контакт з Деякі з цих команд. 309 00:17:01,920 --> 00:17:05,579 Це те, що ви набрали у ваше вікно терміналу або що вікно 310 00:17:05,579 --> 00:17:12,119 що з'являється на вашому г правку, істотно перейдіть комп'ютер. 311 00:17:12,119 --> 00:17:19,440 >> Так, наприклад, LS перераховує вміст каталогу. 312 00:17:19,440 --> 00:17:22,510 Створення каталогу створює нову папку. 313 00:17:22,510 --> 00:17:24,819 CD, змінити каталог. 314 00:17:24,819 --> 00:17:28,400 RM, видалити, видаляє файл або деякі каталог. 315 00:17:28,400 --> 00:17:31,050 А потім видалити каталог видаляє каталог. 316 00:17:31,050 --> 00:17:32,300 >> АУДИТОРІЯ: [нерозбірливо]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> СПІКЕР 1: Так, звичайно. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 На жаль, питання було, якщо вас б запропонувати покласти це 321 00:17:46,040 --> 00:17:48,840 на шпаргалку. 322 00:17:48,840 --> 00:17:49,440 Це могло б допомогти. 323 00:17:49,440 --> 00:17:51,490 Якщо у вас є номер, ви можете поставити його на. 324 00:17:51,490 --> 00:17:56,170 Це також просто, як правило досить добре запам'ятати, тому що, коли ви використовуєте його 325 00:17:56,170 --> 00:17:59,060 Ви могли б хотіти просто Тобто він запам'ятав. 326 00:17:59,060 --> 00:18:02,750 Це зробить ваше життя набагато простіше. 327 00:18:02,750 --> 00:18:04,000 Я відповів на ваше запитання? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> Так що тепер, ми трохи поговорили коротко про бібліотеки. 330 00:18:14,290 --> 00:18:18,570 Але два головних ті, які ми були використовуючи досі в хід йдуть 331 00:18:18,570 --> 00:18:20,860 стандарт введення / виводу і CS50. 332 00:18:20,860 --> 00:18:25,410 Які речі включені в стандартній бібліотеці вводу / виводу? 333 00:18:25,410 --> 00:18:28,410 >> Так, до цих пір ми використовували Printf. 334 00:18:28,410 --> 00:18:31,150 В CS50, ми використовували GetInt і GetString. 335 00:18:31,150 --> 00:18:37,200 І тип даних рядок також відбувається , Який був оголошений в цьому CS50 бібліотеки. 336 00:18:37,200 --> 00:18:40,250 Ми поговоримо ще трохи в глибині про як бібліотеки працюють і як вони 337 00:18:40,250 --> 00:18:41,870 взаємодіяти з іншою частиною коду. 338 00:18:41,870 --> 00:18:46,220 Але ті, є двома основними ті, які ми вступають в контакт з до цих пір в 339 00:18:46,220 --> 00:18:48,430 Звичайно. 340 00:18:48,430 --> 00:18:50,050 >> Види. 341 00:18:50,050 --> 00:18:58,120 Це добре, щоб пам'ятати, скільки кожен тип представлений або як 342 00:18:58,120 --> 00:19:02,840 кількість байт кожен тип requires-- 343 00:19:02,840 --> 00:19:04,990 Int, 4 байта; символ, 1 байт. 344 00:19:04,990 --> 00:19:06,550 Поплавок становить 4 байта. 345 00:19:06,550 --> 00:19:07,782 Що таке подвійний? 346 00:19:07,782 --> 00:19:09,032 >> АУДИТОРІЯ: [нерозбірливо]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> СПІКЕР 1: Так, так поплавок але подвоїти розмір. 349 00:19:16,240 --> 00:19:17,150 А як щодо тих пір? 350 00:19:17,150 --> 00:19:18,400 >> АУДИТОРІЯ: [нерозбірливо]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> СПІКЕР 1: OK. 353 00:19:24,680 --> 00:19:25,410 Що таке довго? 354 00:19:25,410 --> 00:19:26,660 >> АУДИТОРІЯ: [нерозбірливо]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> СПІКЕР 1: Так, два рази на Int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Так. 359 00:19:34,705 --> 00:19:36,100 >> АУДИТОРІЯ: [нерозбірливо]. 360 00:19:36,100 --> 00:19:38,030 >> СПІКЕР 1: Лонг [нерозбірливо]. 361 00:19:38,030 --> 00:19:41,860 А потім довго довго вдвічі більше, ніж. 362 00:19:41,860 --> 00:19:42,814 >> АУДИТОРІЯ: Ні, ні. 363 00:19:42,814 --> 00:19:47,107 Довга просто внутр. 364 00:19:47,107 --> 00:19:50,910 Це залежить від архітектури до [нерозбірливо] 365 00:19:50,910 --> 00:19:52,922 і Int мають однаковий розмір. 366 00:19:52,922 --> 00:19:54,172 [Нерозбірливо]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> СПІКЕР 1: Так довго і Int однакові. 369 00:20:00,920 --> 00:20:02,943 А потім дуже довго вдвічі внутр. 370 00:20:02,943 --> 00:20:03,910 Прохолодний. 371 00:20:03,910 --> 00:20:05,550 І потім, що це останній тип? 372 00:20:05,550 --> 00:20:06,510 >> АУДИТОРІЯ: Покажчик. 373 00:20:06,510 --> 00:20:10,350 >> СПІКЕР 1: Так, так ми дізналися Трохи про покажчиків. 374 00:20:10,350 --> 00:20:14,015 І незалежно від того, покажчик вказуючи to-- нього може бути символ зірки 375 00:20:14,015 --> 00:20:15,880 або Int star-- 376 00:20:15,880 --> 00:20:20,530 це завжди 4 байта для покажчика. 377 00:20:20,530 --> 00:20:21,633 Питання про те, що? 378 00:20:21,633 --> 00:20:22,116 Да? 379 00:20:22,116 --> 00:20:24,531 >> АУДИТОРІЯ: [нерозбірливо]? 380 00:20:24,531 --> 00:20:29,530 >> СПІКЕР 1: Так довго і Int є те ж саме в цьому CS50 пристрою. 381 00:20:29,530 --> 00:20:32,302 >> АУДИТОРІЯ: Прилад повністю взаємозамінні. 382 00:20:32,302 --> 00:20:33,510 >> СПІКЕР 1: Так. 383 00:20:33,510 --> 00:20:36,610 Так потім довго довго подвійний внутр. 384 00:20:36,610 --> 00:20:39,250 >> АУДИТОРІЯ: Це 32 біт? 385 00:20:39,250 --> 00:20:40,620 >> СПІКЕР 1: 32 біт, так. 386 00:20:40,620 --> 00:20:43,572 >> АУДИТОРІЯ: Так [нерозбірливо]? 387 00:20:43,572 --> 00:20:46,790 >> СПІКЕР 1: Так, якщо це не так явно говорять, вас 388 00:20:46,790 --> 00:20:47,870 повинні взяти на себе 32 біт. 389 00:20:47,870 --> 00:20:50,040 >> АУДИТОРІЯ: Було б щось сказати як припускаючи 390 00:20:50,040 --> 00:20:51,498 Архітектура як приладу. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 Для 64-бітної, тільки те, що Зміна є жадає і покажчики. 393 00:21:01,710 --> 00:21:05,614 Як вони [нерозбірливо]. 394 00:21:05,614 --> 00:21:06,590 >> СПІКЕР 1: Да? 395 00:21:06,590 --> 00:21:07,566 >> АУДИТОРІЯ: Питання. 396 00:21:07,566 --> 00:21:10,982 Так на одному з практики вікторини, він просить про непідписані Int. 397 00:21:10,982 --> 00:21:15,374 Так як же, що визначається від Int [нерозбірливо]? 398 00:21:15,374 --> 00:21:18,140 >> СПІКЕР 1: без знака в також 4 байта. 399 00:21:18,140 --> 00:21:21,172 Але чим відрізняються підписаний Int і без знака Int? 400 00:21:21,172 --> 00:21:22,422 >> АУДИТОРІЯ: [нерозбірливо]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> СПІКЕР 1: Право. 403 00:21:25,630 --> 00:21:27,570 Можна уявити негативні значення. 404 00:21:27,570 --> 00:21:28,580 Але як це зробити? 405 00:21:28,580 --> 00:21:30,536 >> АУДИТОРІЯ: [нерозбірливо]. 406 00:21:30,536 --> 00:21:36,370 >> СПІКЕР 1: Так, це економить 1 біт для представлення знака. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Підписаний має один біт, що являє собою знак. 409 00:21:45,040 --> 00:21:48,886 І без знака просто всі позитивні. 410 00:21:48,886 --> 00:21:50,365 >> АУДИТОРІЯ: ОК. 411 00:21:50,365 --> 00:21:54,230 Так ви говорите, що номер на двох чоловік в два рази більше поплавком? 412 00:21:54,230 --> 00:21:58,202 >> СПІКЕР 1: Двомісний в два рази Розмір цілого, так. 413 00:21:58,202 --> 00:22:01,639 >> АУДИТОРІЯ: Як покажчик щоб довго довго [нерозбірливо]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> СПІКЕР 1: Отже, питання в тому, як робить покажчик на довгий long-- 416 00:22:10,870 --> 00:22:13,800 Як це тільки чотири байти, коли дуже довго її 8 байт. 417 00:22:13,800 --> 00:22:17,310 Так що пам'ятайте, що це покажчик, по суті справи, на дуже базового значення. 418 00:22:17,310 --> 00:22:19,046 >> АУДИТОРІЯ: [нерозбірливо]. 419 00:22:19,046 --> 00:22:22,670 >> СПІКЕР 1: Так, так покажчик це просто осередок пам'яті. 420 00:22:22,670 --> 00:22:28,040 Так що не має значення, як багато місця що покажчик направлений в. 421 00:22:28,040 --> 00:22:32,060 Це необхідно тільки 4 байта, щоб відслідковувати з цієї комірки пам'яті. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Ще питання? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Прохолодний. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> Так останнє, що у мене є використовується стандартний висновок. 428 00:22:47,460 --> 00:22:51,020 Ви повинні використовувати їх часто Досить того, що ви можете згадати. 429 00:22:51,020 --> 00:22:54,800 Але це, коли ми використовуємо Е, наприклад. 430 00:22:54,800 --> 00:22:59,260 І у нас є ці наповнювачі, називалися коди формату. 431 00:22:59,260 --> 00:23:03,910 >> Так відсотків з гольця, відсотків я для междунар, і ми можемо також використовувати процентну д. 432 00:23:03,910 --> 00:23:05,130 Це те ж саме. 433 00:23:05,130 --> 00:23:08,200 Але, як правило, в CS50 ми спробуйте використати процентну I. 434 00:23:08,200 --> 00:23:09,860 Відсоток е для поплавка. 435 00:23:09,860 --> 00:23:15,620 Відсоток а.с. довго довго і відсотків с для рядка. 436 00:23:15,620 --> 00:23:18,550 >> Точно так же, ми використовували кілька ці керуючі послідовності. 437 00:23:18,550 --> 00:23:22,431 Наприклад, зворотну косу рису н для нової лінії. 438 00:23:22,431 --> 00:23:26,910 Це просто, коли ви форматування ваш код для друку ф. 439 00:23:26,910 --> 00:23:27,260 Да? 440 00:23:27,260 --> 00:23:28,906 >> АУДИТОРІЯ: Що таке відсотків добу протягом? 441 00:23:28,906 --> 00:23:31,850 >> СПІКЕР 1: Отже, питання є те, що відсотків на добу протягом? 442 00:23:31,850 --> 00:23:33,270 Відсоток г для цілих чисел. 443 00:23:33,270 --> 00:23:37,392 Відсоток D і I відсотків однакові. 444 00:23:37,392 --> 00:23:41,130 >> АУДИТОРІЯ: У чому різниця між зворотний слеш н і зворотний г? 445 00:23:41,130 --> 00:23:45,300 >> СПІКЕР 1: Отже, питання в чому Різниця між люфту п і 446 00:23:45,300 --> 00:23:48,615 люфт г? 447 00:23:48,615 --> 00:23:50,906 Я думаю, зворотної косою р is-- 448 00:23:50,906 --> 00:23:54,340 >> АУДИТОРІЯ: Так зворотний слеш г всього лише має на увазі, повертається в початок рядка 449 00:23:54,340 --> 00:23:56,670 фактично не збираюся з нового рядка. 450 00:23:56,670 --> 00:24:01,000 Так що, якщо ви друкуєте зворотної косою г і ви повернутися до початку рядка 451 00:24:01,000 --> 00:24:04,005 потім роздрукувати більше матеріалу, перезапису матеріал, який вже на 452 00:24:04,005 --> 00:24:04,390 [Нерозбірливо]. 453 00:24:04,390 --> 00:24:06,725 У той час як, н фактично йде на новий лінії і йде в [нерозбірливо]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> СПІКЕР 1: Ну, будь-які інші питання? 456 00:24:13,915 --> 00:24:15,430 Добре. 457 00:24:15,430 --> 00:24:18,617 Я збираюся передати його далі, щоб Ден, який буде тривати. 458 00:24:18,617 --> 00:24:25,078 >> [Оплески] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> ДЕН: Всі правша. 461 00:25:09,720 --> 00:25:18,590 Так що я буду говорити про інший шириною Діапазон ідей з класу, які 462 00:25:18,590 --> 00:25:23,220 приблизно представник тижнів два і початок три тижні, починаючи з 463 00:25:23,220 --> 00:25:28,690 з лиття, який просто спосіб лікування значення певного типу, як 464 00:25:28,690 --> 00:25:30,830 значення іншого типу. 465 00:25:30,830 --> 00:25:34,110 Таким чином, ми можемо зробити це з символів в Інтс, спливає на цілих чисел, і 466 00:25:34,110 --> 00:25:35,360 довгі жадає подвоїти. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Всі ці речі можна використовувати як способів лікування деякий числове значення 469 00:25:44,500 --> 00:25:48,370 мінус символ, як деякі інші числове значення. 470 00:25:48,370 --> 00:25:54,480 Таким чином, є деякі питання, з цим, з Звичайно, яких приходить, коли ви приводите 471 00:25:54,480 --> 00:25:57,860 речі, як поплавок на цілих чисел. 472 00:25:57,860 --> 00:26:00,500 Так що це трохи дивно. 473 00:26:00,500 --> 00:26:03,170 У нас є поплавок, який є 1,31. 474 00:26:03,170 --> 00:26:05,220 Помножимо його на 10 тисяч. 475 00:26:05,220 --> 00:26:08,380 А потім ми друкуємо його в якості міжнар. 476 00:26:08,380 --> 00:26:09,630 Що це вихід? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10000 раз 1,31. 479 00:26:14,020 --> 00:26:18,761 Так 13000, в тому, що вгадати? 480 00:26:18,761 --> 00:26:20,685 >> Зали: Я думаю, що це 10000. 481 00:26:20,685 --> 00:26:24,234 >> ДЕН: Так що я помноживши його на 10 тисяч до Я лиття його. 482 00:26:24,234 --> 00:26:25,202 >> АУДИТОРІЯ: Ох. 483 00:26:25,202 --> 00:26:27,622 Не було там бути один 9 і деякі 0 цифри? 484 00:26:27,622 --> 00:26:29,270 >> ДЕН: Ви, можливо, деякі дивні цифри. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Так правильно, це в 1,3 рази 10000. 487 00:26:37,670 --> 00:26:40,040 Так ось 13000. 488 00:26:40,040 --> 00:26:41,313 І цей додатковий weird-- 489 00:26:41,313 --> 00:26:42,160 >> АУДИТОРІЯ: 13100. 490 00:26:42,160 --> 00:26:42,650 >> ДЕН: 13100. 491 00:26:42,650 --> 00:26:44,910 Спасибі, Боб. 492 00:26:44,910 --> 00:26:46,610 І цей додатковий weirdness-- 493 00:26:46,610 --> 00:26:48,060 це 9,9-- 494 00:26:48,060 --> 00:26:53,860 просто тому, що цього лиття закінчив округлення вниз, де 495 00:26:53,860 --> 00:26:55,394 воно не повинно бути. 496 00:26:55,394 --> 00:26:55,871 Так. 497 00:26:55,871 --> 00:26:58,256 >> АУДИТОРІЯ: лиття відбувається після все інше? 498 00:26:58,256 --> 00:27:03,865 >> ДЕН: Так тому що у мене це у пресі, це робить цей множення перед ним 499 00:27:03,865 --> 00:27:05,230 робить цей кастинг. 500 00:27:05,230 --> 00:27:06,140 >> АУДИТОРІЯ: [нерозбірливо]. 501 00:27:06,140 --> 00:27:11,350 >> ДЕН: Я думаю, що це поставить під першим, да, який буде 10000. 502 00:27:11,350 --> 00:27:12,610 Що ще? 503 00:27:12,610 --> 00:27:13,330 Прохолодний. 504 00:27:13,330 --> 00:27:16,344 Так що це 13099. 505 00:27:16,344 --> 00:27:17,840 Чому це відбувається? 506 00:27:17,840 --> 00:27:18,900 Неточність. 507 00:27:18,900 --> 00:27:21,020 >> Поплавці не ідеальні. 508 00:27:21,020 --> 00:27:27,550 Вони можуть тільки уявляти числа в певну кількість значущих цифр. 509 00:27:27,550 --> 00:27:35,120 Так що, якщо ми роздрукувати 8 SIG інжир на це поплавок, ми отримуємо свого роду 510 00:27:35,120 --> 00:27:36,800 потворний погляд номер. 511 00:27:36,800 --> 00:27:45,580 І це тому, що 1,31 не може точно бути представлений простий 512 00:27:45,580 --> 00:27:49,000 ступенями двійки в машині. 513 00:27:49,000 --> 00:27:53,530 Так що в кінці кінців приймаючи ближче думаю, що в кінцевому підсумку 514 00:27:53,530 --> 00:27:55,710 бути трохи низько. 515 00:27:55,710 --> 00:27:57,730 Сенс? 516 00:27:57,730 --> 00:27:59,110 ОК. 517 00:27:59,110 --> 00:28:05,840 >> Тепер, перейшли в інший спосіб робить умовні оператори, де всі 518 00:28:05,840 --> 00:28:09,900 ми дбаємо про те, одна змінна. 519 00:28:09,900 --> 00:28:16,570 Таким чином, в цьому конкретному прикладі, ми отримуючи ціле число від користувача. 520 00:28:16,570 --> 00:28:21,070 А потім ми дивимося на що це ціле є. 521 00:28:21,070 --> 00:28:23,500 Імовірно, це число від одного до чотирьох. 522 00:28:23,500 --> 00:28:24,800 Це те, що ми просимо. 523 00:28:24,800 --> 00:28:28,450 >> Таким чином, ви зробити перемикач ім'я змінної. 524 00:28:28,450 --> 00:28:34,290 Тоді ви створили випадки можна цінує це могло бути. 525 00:28:34,290 --> 00:28:37,730 Так випадку, якщо один, кажуть, що це низько. 526 00:28:37,730 --> 00:28:41,080 І тоді ви порушите вийти стану перемикача, так 527 00:28:41,080 --> 00:28:43,270 Ви не продовжувати. 528 00:28:43,270 --> 00:28:44,830 >> У наступному case-- 529 00:28:44,830 --> 00:28:46,940 так справа два і справа three-- 530 00:28:46,940 --> 00:28:51,920 якщо ця справа два він просто падає до Перший рядок коду він бачить, як з 531 00:28:51,920 --> 00:28:55,400 трехмодовом, поки не побачить перерву. 532 00:28:55,400 --> 00:29:00,430 Так що причина ви отримуєте випадок один на тільки друк низький тому, що I 533 00:29:00,430 --> 00:29:01,890 Тобто цей перерву тут. 534 00:29:01,890 --> 00:29:05,360 Якщо я, скажімо, ігнорувати цей break-- якщо я кинув цю breakaway-- 535 00:29:05,360 --> 00:29:09,740 було б надрукувати низький, і тоді було б друкувати середину, і тоді було б зламати. 536 00:29:09,740 --> 00:29:12,200 >> Так перерви є важливою частиною з перемикання умови і 537 00:29:12,200 --> 00:29:14,340 вони повинні бути там. 538 00:29:14,340 --> 00:29:20,070 Будь-які випадки, які явно не обумовлено обробляються за замовчуванням 539 00:29:20,070 --> 00:29:26,645 Справа в комутаторі і повинні бути подані. 540 00:29:26,645 --> 00:29:31,363 >> АУДИТОРІЯ: Так 1, 2, 3, і 4 буде н? 541 00:29:31,363 --> 00:29:33,310 >> ДЕН: Значення, н може бути. 542 00:29:33,310 --> 00:29:34,654 Так. 543 00:29:34,654 --> 00:29:35,146 Да? 544 00:29:35,146 --> 00:29:37,606 >> АУДИТОРІЯ: Отже, коли у вас є що [нерозбірливо]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> ДЕН: Ви б надрукувати низький, а потім було б надрукувати середину, і 547 00:29:46,830 --> 00:29:47,400 то було б зламати. 548 00:29:47,400 --> 00:29:50,244 >> Зал: А чому б роздрукувати середній якщо [нерозбірливо]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> ДЕН: Так що все під випадку до перерви потрапляє під. 551 00:30:00,550 --> 00:30:09,390 Так справа один принт під випадок один, як це наступні друковані. 552 00:30:09,390 --> 00:30:09,890 Да? 553 00:30:09,890 --> 00:30:11,140 >> АУДИТОРІЯ: [нерозбірливо]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> ДЕН: Так це число лише приватним значення, ця змінна 556 00:30:22,170 --> 00:30:23,420 можна взяти, чи не так? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Чи має це сенс? 559 00:30:28,490 --> 00:30:28,990 Так. 560 00:30:28,990 --> 00:30:31,490 >> АУДИТОРІЯ: [нерозбірливо]? 561 00:30:31,490 --> 00:30:34,130 >> ДЕН: Так, справа два друкуватиме середнього, а потім розбити. 562 00:30:34,130 --> 00:30:35,380 >> АУДИТОРІЯ: [нерозбірливо]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> ДЕН: Я думаю, що будь-який? 565 00:30:40,050 --> 00:30:43,855 Які ще типи даних Ви можете перейти? 566 00:30:43,855 --> 00:30:46,320 >> АУДИТОРІЯ: Ви можете перемикатися по відношенню до будь-яких типів даних. 567 00:30:46,320 --> 00:30:50,905 Але це значить тільки нічого над символів і Інтс і все в такому дусі, що, оскільки 568 00:30:50,905 --> 00:30:55,600 якщо ви перемиканні покажчик що насправді не має сенсу, 569 00:30:55,600 --> 00:30:59,555 перемикання навантажень, якщо він навіть давайте Ви робите це, бо з плаваючою крапкою 570 00:30:59,555 --> 00:31:02,840 в точності, ви не будете дійсно хочу зробити це в будь-якому випадку. 571 00:31:02,840 --> 00:31:07,320 Так в значній мірі, всього Інтс і символи і все в такому дусі. 572 00:31:07,320 --> 00:31:12,360 >> ДЕН: Так, це коли у вас є явне значення, що ви знаєте, я думаю, що, може бути 573 00:31:12,360 --> 00:31:14,250 що перехід насправді корисно. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Добре? 576 00:31:18,990 --> 00:31:21,370 ОК. 577 00:31:21,370 --> 00:31:26,180 >> Сфера є діапазон, що заявив змінна поширюється. 578 00:31:26,180 --> 00:31:32,190 Таким чином, в цій маленькій шматок коду у мене є, було б повно помилок. 579 00:31:32,190 --> 00:31:41,450 А причина в тому, я оголосив цю Int я в рамках цього циклу. 580 00:31:41,450 --> 00:31:46,390 А потім я намагаюся посилатися, що я за межами, що для сфери петлі. 581 00:31:46,390 --> 00:31:50,330 >> Так в основному, ви можете думати про рамки як усі, що ви оголошуєте 582 00:31:50,330 --> 00:31:59,750 з всередині набору фігурних дужках тільки існує в тих фігурні дужки. 583 00:31:59,750 --> 00:32:04,990 А якщо спробувати і використовувати цю змінну за межами тих фігурні дужки, ви будете 584 00:32:04,990 --> 00:32:08,356 отримаєте помилку від компілятора. 585 00:32:08,356 --> 00:32:08,812 Да? 586 00:32:08,812 --> 00:32:09,724 >> АУДИТОРІЯ: Так що це один не працює? 587 00:32:09,724 --> 00:32:11,790 >> ДЕН: Це не працює, так. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Рядки. 590 00:32:18,660 --> 00:32:19,780 Рядок символ *. 591 00:32:19,780 --> 00:32:22,250 Вони точно так же. 592 00:32:22,250 --> 00:32:25,540 Вони просто покажчики на символи. 593 00:32:25,540 --> 00:32:33,000 І будь-які рядки, які ви повинні повинні закінчитися із зворотного косою риси нульовою, який знаходиться всього 594 00:32:33,000 --> 00:32:34,410 з конвенція. 595 00:32:34,410 --> 00:32:36,680 >> Вона називається NULL термінатор. 596 00:32:36,680 --> 00:32:39,050 І NULL-- 597 00:32:39,050 --> 00:32:41,670 капітал N, капітал U, капітал L, капіталу L-- 598 00:32:41,670 --> 00:32:44,290 це не те ж саме, NULL термінатор. 599 00:32:44,290 --> 00:32:46,640 Це покажчик. 600 00:32:46,640 --> 00:32:48,280 Це символ. 601 00:32:48,280 --> 00:32:49,530 Вони дуже різні. 602 00:32:49,530 --> 00:32:50,200 Пам'ятайте це. 603 00:32:50,200 --> 00:32:52,320 Це буде на вікторині, напевно. 604 00:32:52,320 --> 00:32:54,040 Я не бачив вікторину. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Да? 607 00:32:58,840 --> 00:33:01,232 >> АУДИТОРІЯ: Так NULL, скажімо, покажчик? 608 00:33:01,232 --> 00:33:01,995 >> ДЕН: Так. 609 00:33:01,995 --> 00:33:05,170 >> АУДИТОРІЯ: Що робить [нерозбірливо]? 610 00:33:05,170 --> 00:33:10,050 >> ДЕН: Якщо, скажімо, Танос викликається, коли вам не вистачає пам'яті, щоб отримати 611 00:33:10,050 --> 00:33:14,400 незалежно від розміру ви просите, Танос повернеться NULL. 612 00:33:14,400 --> 00:33:19,550 Це, в основному, всякий раз, коли функція повинна повертати покажчик, ви 613 00:33:19,550 --> 00:33:22,600 потрібно перевірити проти NULL, тому що NULL є досить good-- 614 00:33:22,600 --> 00:33:25,260 це, свого роду, значення сміття. 615 00:33:25,260 --> 00:33:27,050 Це нульовий наскільки покажчики йти. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Всякий раз, коли ви викликаєте функцію, що повертає покажчик. 618 00:33:32,250 --> 00:33:35,960 Ви будете хотіти, щоб перевірити, що упевнений, що цей курсор не NULL 619 00:33:35,960 --> 00:33:37,760 тому NULL є дуже поширеним явищем. 620 00:33:37,760 --> 00:33:40,160 Це свого роду повернення сміття. 621 00:33:40,160 --> 00:33:44,902 Так що якщо щось не йдуть прямо, просто повернути NULL замість. 622 00:33:44,902 --> 00:33:45,898 >> АУДИТОРІЯ: [нерозбірливо]? 623 00:33:45,898 --> 00:33:48,922 >> ДЕН: Так, і що це таке. 624 00:33:48,922 --> 00:33:51,750 >> АУДИТОРІЯ: [нерозбірливо]? 625 00:33:51,750 --> 00:33:52,800 >> ДЕН: Заклинання, так як це. 626 00:33:52,800 --> 00:33:54,150 Це NULL термінатор. 627 00:33:54,150 --> 00:33:56,560 Це рядкова N-U-L-L, якщо ви правопис його. 628 00:33:56,560 --> 00:33:59,860 >> АУДИТОРІЯ: І я просто пішов тому і перевірив його. 629 00:33:59,860 --> 00:34:03,010 І якщо ви спробуєте поставити з плаваючою крапкою Значення в перемикач, він буде кричати на вас 630 00:34:03,010 --> 00:34:05,916 кажучи, твердження вимагає вираз цілого типу. 631 00:34:05,916 --> 00:34:07,166 >> DAN: Там ви йдете. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Але так, який було питання? 634 00:34:12,246 --> 00:34:13,496 >> АУДИТОРІЯ: [нерозбірливо]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> ДЕН: Так столиця N, капітал U, капітал L, капіталу L є актуальною з річчю. 637 00:34:23,679 --> 00:34:29,719 Це покажчик NULL і буде розглядатися тільки в якості таких. 638 00:34:29,719 --> 00:34:33,530 Ви ніколи не спробувати і заклинання NULL характер і подивитися будь 639 00:34:33,530 --> 00:34:35,630 іншого шляху, крім цього. 640 00:34:35,630 --> 00:34:36,610 Да? 641 00:34:36,610 --> 00:34:42,490 >> АУДИТОРІЯ: Так повернення на персонаж макс або то в примітках, чи так 642 00:34:42,490 --> 00:34:43,960 втілюють ту ж саму функцію як [нерозбірливо]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> АУДИТОРІЯ: Так ви маєте на увазі повернення сЬаг макс від GetChar, або 645 00:34:54,949 --> 00:34:55,444 те, що це? 646 00:34:55,444 --> 00:34:55,940 >> АУДИТОРІЯ: Так. 647 00:34:55,940 --> 00:34:58,620 >> АУДИТОРІЯ: Так, так що загальне термін для всіх тих речей, 648 00:34:58,620 --> 00:34:59,920 дозорні значення. 649 00:34:59,920 --> 00:35:03,640 Так як повернення целочисленное макс від GetInt і символ макс від GetChar, це 650 00:35:03,640 --> 00:35:06,010 повинен бути, як, все в порядку, якщо ці речі повертаються до нас, 651 00:35:06,010 --> 00:35:07,210 Щось пішло не так. 652 00:35:07,210 --> 00:35:09,950 >> Для покажчиків, ми як раз є це дозорного значення, що кожен 653 00:35:09,950 --> 00:35:10,750 погоджує. 654 00:35:10,750 --> 00:35:13,210 І це те, що вам повернутися коли справи йдуть погано. 655 00:35:13,210 --> 00:35:15,910 Так символ макс це те, що ми використовуємо щоб являти собою щось 656 00:35:15,910 --> 00:35:18,100 як NULL або GetChar. 657 00:35:18,100 --> 00:35:23,420 >> АУДИТОРІЯ: Так що, якщо ви тестируете GetChar, може ви просто покласти NULL? 658 00:35:23,420 --> 00:35:23,910 Б, що змінити ситуацію? 659 00:35:23,910 --> 00:35:25,400 >> ДЕН: Ви не могли б просто перевірити NULL. 660 00:35:25,400 --> 00:35:30,130 Ви повинні були б перевірити сЬаг макс тому Значення, що повертається з функції 661 00:35:30,130 --> 00:35:35,416 персонаж не є покажчиком. 662 00:35:35,416 --> 00:35:35,888 Да? 663 00:35:35,888 --> 00:35:38,248 >> АУДИТОРІЯ: задає це питання для довжини рядка. 664 00:35:38,248 --> 00:35:40,136 Які включають в себе нульової символ чи що? 665 00:35:40,136 --> 00:35:41,000 >> DAN: Ні 666 00:35:41,000 --> 00:35:45,930 І це насправді, як довжина рядка знає, щоб зупинити, тому що він проходить через 667 00:35:45,930 --> 00:35:49,070 Ваш масив символів до він бачить порожній символ. 668 00:35:49,070 --> 00:35:51,030 А потім це як, все Добре, я зробив. 669 00:35:51,030 --> 00:35:52,130 >> АУДИТОРІЯ: [нерозбірливо] п'ять? 670 00:35:52,130 --> 00:35:53,990 >> ДЕН: Доброго б п'ять. 671 00:35:53,990 --> 00:35:55,240 Так. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 Так масиви безупинні блоки пам'яті. 674 00:36:02,880 --> 00:36:08,480 Вони мають миттєвий доступ, кажучи Ім'я масиву, а потім, в кучерявих 675 00:36:08,480 --> 00:36:16,720 дужки, що індекс ви хочете піти щоб, вони індексуються з нуля через 676 00:36:16,720 --> 00:36:20,100 довжина масиву мінус 1. 677 00:36:20,100 --> 00:36:23,070 >> І вони оголошені по типу річ, яка ви зберігаєте в 678 00:36:23,070 --> 00:36:29,750 Масив, ім'я масиву, а потім що розмір цього масиву. 679 00:36:29,750 --> 00:36:36,660 Так що це символ масив довжини шість, що має ці значення. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Да? 682 00:36:42,700 --> 00:36:43,950 >> АУДИТОРІЯ: [нерозбірливо]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> ДЕН: Так. 685 00:36:48,460 --> 00:36:51,340 >> АУДИТОРІЯ: [нерозбірливо]? 686 00:36:51,340 --> 00:36:56,700 >> ДЕН: Якщо у вас є те, що відбувається в масив вже зробив. 687 00:36:56,700 --> 00:37:02,260 Таким чином, ви можете вказати це замість цього як, скажімо, символ, що назва вашої 688 00:37:02,260 --> 00:37:12,200 масив, порожні дужки дорівнює кучеряве готуватися H кома E кома L коми L кому 689 00:37:12,200 --> 00:37:16,290 O кома NULL характер і фігурна дужка. 690 00:37:16,290 --> 00:37:18,180 Це також буде працювати в якості декларації. 691 00:37:18,180 --> 00:37:20,886 >> АУДИТОРІЯ: [нерозбірливо]? 692 00:37:20,886 --> 00:37:23,110 >> ДЕН: Тоді ви повинні мати розмір вже зробив. 693 00:37:23,110 --> 00:37:23,896 >> АУДИТОРІЯ: [нерозбірливо]? 694 00:37:23,896 --> 00:37:25,146 >> ДЕН: Так. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 Всі правша. 697 00:37:32,420 --> 00:37:36,430 Аргументи командного рядка є одним із способів отримання даних від користувача в якості 698 00:37:36,430 --> 00:37:39,380 Аргументи головний. 699 00:37:39,380 --> 00:37:40,600 Головна приймає два аргументи. 700 00:37:40,600 --> 00:37:47,680 Число аргументів, що в даний час пройшли вздовж командного рядка і 701 00:37:47,680 --> 00:37:55,340 вектор рядків або масив рядків з усіх аргументів. 702 00:37:55,340 --> 00:38:07,840 >> Так що, якщо я, скажімо, називається така функція, як точка з 1 простору, 2 простору, три, 703 00:38:07,840 --> 00:38:10,110 агдс буде 4. 704 00:38:10,110 --> 00:38:17,370 І агду 0 буде точка з. 705 00:38:17,370 --> 00:38:19,130 Argv1 буде 1. 706 00:38:19,130 --> 00:38:23,030 argv2 б 2. argv3 буде 3, в цьому конкретному випадку. 707 00:38:23,030 --> 00:38:23,310 Да? 708 00:38:23,310 --> 00:38:25,400 >> АУДИТОРІЯ: [нерозбірливо]? 709 00:38:25,400 --> 00:38:34,010 >> ДЕН: останній елемент в масиві бо масив довжиною агдс плюс 710 00:38:34,010 --> 00:38:41,050 один з ARGB, останній елемент є покажчиком NULL. 711 00:38:41,050 --> 00:38:42,580 Це агдс плюс 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Таким чином, у разі, що я тільки що сказав, це буде агду 0 є точка з. 714 00:38:52,150 --> 00:38:56,330 агду 1 січня argv2 є 2. агду 3 є 3. 715 00:38:56,330 --> 00:39:03,490 агду 4, який є одним більше, ніж агдс буде NULL. 716 00:39:03,490 --> 00:39:04,870 >> І це NULL покажчик. 717 00:39:04,870 --> 00:39:06,590 Так. 718 00:39:06,590 --> 00:39:11,250 І це тому, що рядок символ зірка покажчик. 719 00:39:11,250 --> 00:39:14,102 Таким чином, він повинен бути того ж типу. 720 00:39:14,102 --> 00:39:14,595 Да? 721 00:39:14,595 --> 00:39:16,074 >> АУДИТОРІЯ: Два питання. 722 00:39:16,074 --> 00:39:21,004 Так один, в чому різниця між Ця та інші GetString ніж одного типу 723 00:39:21,004 --> 00:39:22,483 в призначеному для користувача двигуна? 724 00:39:22,483 --> 00:39:25,934 І два, це зберігається в Ваше недавнє пам'яті? 725 00:39:25,934 --> 00:39:28,399 Так як, GetString б бути [нерозбірливо]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> ДЕН: Де це зберігається? 728 00:39:33,650 --> 00:39:34,905 Я не знаю, де він зберігається. 729 00:39:34,905 --> 00:39:40,000 >> АУДИТОРІЯ: Так, насправді, ви знаєте, як будь-який функціонувати ви називаєте це аргументи 730 00:39:40,000 --> 00:39:42,170 зберігаються в стеці? 731 00:39:42,170 --> 00:39:46,610 Так агдс і агду аргументи в основний і вони в стеці, або дійсно 732 00:39:46,610 --> 00:39:49,131 трохи вище, що ви думаєте, як початок стека. 733 00:39:49,131 --> 00:39:53,490 Те, що було інша частина питання? 734 00:39:53,490 --> 00:39:56,821 >> АУДИТОРІЯ: Так в чому ж [нерозбірливо]? 735 00:39:56,821 --> 00:40:00,990 >> ДЕН: Так, це просто інший спосіб отримання даних від користувача. 736 00:40:00,990 --> 00:40:06,030 Ця пісня трохи більш ефективним і це зручніше для сценаріїв, тому що вас 737 00:40:06,030 --> 00:40:10,070 може просто передати аргументи ваш головний Функція замість того, щоб чекати, 738 00:40:10,070 --> 00:40:13,400 для користувачів, якщо у вас немає ніяких користувачів. 739 00:40:13,400 --> 00:40:16,280 >> АУДИТОРІЯ: І так, отримати рядка буде [нерозбірливо]. 740 00:40:16,280 --> 00:40:17,922 Було б зберігати речі вам потрібно. 741 00:40:17,922 --> 00:40:18,834 >> ДЕН: Да? 742 00:40:18,834 --> 00:40:21,114 >> АУДИТОРІЯ: [нерозбірливо]? 743 00:40:21,114 --> 00:40:27,545 >> ДЕН: Так, агду 0 завжди включає точка слеш виклику функції. 744 00:40:27,545 --> 00:40:28,042 Да? 745 00:40:28,042 --> 00:40:29,292 >> АУДИТОРІЯ: [нерозбірливо]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> ДЕН: Так, кожен з аргументів закінчилася в NULL характеру, тому що вони 748 00:40:37,310 --> 00:40:38,310 є рядками. 749 00:40:38,310 --> 00:40:40,892 >> АУДИТОРІЯ: [нерозбірливо]? 750 00:40:40,892 --> 00:40:44,116 >> ДЕН: Так, агду агдс є покажчиком NULL. 751 00:40:44,116 --> 00:40:45,112 >> АУДИТОРІЯ: [нерозбірливо]? 752 00:40:45,112 --> 00:40:47,104 >> ДЕН: О, так. 753 00:40:47,104 --> 00:40:48,100 Так, шкода. 754 00:40:48,100 --> 00:40:49,594 >> АУДИТОРІЯ: Так [нерозбірливо]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> ДЕН: Таким чином, питання, якщо у вас командного рядка точка слеш точку з 1, 2, 757 00:41:16,340 --> 00:41:20,410 б кількість командного рядка Аргументи бути два або було б три? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> Зали: Я думаю, що це не має великого значення. 760 00:41:28,240 --> 00:41:31,370 Я, як правило, говорять, о, ви не пройшли будь-які аргументи командного рядка, коли, 761 00:41:31,370 --> 00:41:32,730 Очевидно, ви викликали функцію. 762 00:41:32,730 --> 00:41:37,950 Так що я, як правило, усно виключити Функція з командного рядка 763 00:41:37,950 --> 00:41:40,350 Аргументи хоча це включені в ARGV. 764 00:41:40,350 --> 00:41:42,600 >> ДЕН: Але якщо це було на test-- 765 00:41:42,600 --> 00:41:46,550 yeah-- а також, якщо ви говорите, то як агдс дорівнює 3, 766 00:41:46,550 --> 00:41:48,512 ви знаходитесь в безпечній стоячи. 767 00:41:48,512 --> 00:41:49,416 Да? 768 00:41:49,416 --> 00:41:50,666 >> АУДИТОРІЯ: [нерозбірливо]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> ДЕН: Я думаю, що якщо замість виклику цього в ARGC і струнних агду дужках 771 00:42:09,510 --> 00:42:14,350 але зберіг ті ж типи і просто називається їм щось інше, як 772 00:42:14,350 --> 00:42:16,640 і б, чи буде це все ще працює? 773 00:42:16,640 --> 00:42:18,790 І це було б як і раніше працювати, Ви б просто-- 774 00:42:18,790 --> 00:42:21,520 замість використання argc-- Ви б використовувати і б. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Да? 777 00:42:25,408 --> 00:42:26,658 >> АУДИТОРІЯ: [нерозбірливо]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> ДЕН: Отже питання GetString є збираєтеся зберігати пам'ять в купі 780 00:42:38,850 --> 00:42:42,280 тому GetString є символ *. 781 00:42:42,280 --> 00:42:47,530 Він зберігає пам'ять в купі, бо називає тепер Танос в фактичний 782 00:42:47,530 --> 00:42:49,258 Реалізація GetString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 ОК, як рухатися далі. 785 00:42:55,090 --> 00:42:55,950 >> Безпека. 786 00:42:55,950 --> 00:43:01,090 Таким чином, щоб бути по-справжньому безпечним, ви не покладатися на немає один, і ви не дозволить жодній доступ до будь-якого 787 00:43:01,090 --> 00:43:04,540 Вашої інформації, і саме тому кожен будує свої власні машини, 788 00:43:04,540 --> 00:43:09,580 їх власні операційні системи, всі їх програми з нуля, і, очевидно, 789 00:43:09,580 --> 00:43:13,410 не підписатися під будь-яким іншим машин через Інтернет. 790 00:43:13,410 --> 00:43:17,350 Так комп'ютери небезпечно. 791 00:43:17,350 --> 00:43:19,200 Вони насправді. 792 00:43:19,200 --> 00:43:20,940 Ми повинні довіряти іншим людям. 793 00:43:20,940 --> 00:43:26,500 >> А ідея безпеки є те, що ви намагаючись обмежити кількість 794 00:43:26,500 --> 00:43:27,540 Довіра, яку вам потрібно. 795 00:43:27,540 --> 00:43:32,080 І одним із засобів ви, що через криптографії. 796 00:43:32,080 --> 00:43:34,950 Криптографія, по суті, у нас є секрети. 797 00:43:34,950 --> 00:43:38,880 >> Іноді ми повинні пройти наші секрети разом через, скажімо, інтернет або 798 00:43:38,880 --> 00:43:39,980 інші речі. 799 00:43:39,980 --> 00:43:43,180 І ми не хочемо, щоб люди знати ці секрети. 800 00:43:43,180 --> 00:43:50,100 Таким чином, ми зашифрувати наші секрети в дорозі що ми сподіваємося, що ніхто не може з'ясувати. 801 00:43:50,100 --> 00:43:51,600 >> Таким чином, ми used-- 802 00:43:51,600 --> 00:43:54,340 через ході цієї class-- 803 00:43:54,340 --> 00:44:00,750 речі, як шифр Цезаря і [Нерозбірливо], які є дуже, дуже 804 00:44:00,750 --> 00:44:03,200 небезпечні способи шифрування речі. 805 00:44:03,200 --> 00:44:07,930 Їх легко зрозуміти, що вони і що ваші дані знаходяться. 806 00:44:07,930 --> 00:44:12,130 Реальний світ використовує набагато більш складні схеми шифрування. 807 00:44:12,130 --> 00:44:13,880 І ми не зможемо отримати в набагато більше, ніж це. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Налагодження. 810 00:44:19,430 --> 00:44:20,785 GDB є кращим. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Я збираюся це підкреслити ще раз. 813 00:44:25,810 --> 00:44:30,920 Використовуйте GDB весь час кожен Час у вас є проблеми. 814 00:44:30,920 --> 00:44:36,030 Команди, які є корисними в GDB є зламати, які ви передаєте рядок 815 00:44:36,030 --> 00:44:41,330 число, ім'я функції, по суті де в коді ви хочете зупинити, 816 00:44:41,330 --> 00:44:45,600 і бути в змозі взяти під контроль. 817 00:44:45,600 --> 00:44:54,140 >> Друк займає змінну і друкує все, що змінна в тому, що 818 00:44:54,140 --> 00:44:55,990 точка у виконанні. 819 00:44:55,990 --> 00:45:00,130 Далі переміщує виконання а також один крок. 820 00:45:00,130 --> 00:45:05,050 І крок кроки всередині функції у вашому виконанні. 821 00:45:05,050 --> 00:45:10,480 >> Інші речі працювати, який є, як ви насправді запустити свій код. 822 00:45:10,480 --> 00:45:16,630 Продовжити приймає всі заходи, необхідні щоб дістатися до наступної точки зупину. 823 00:45:16,630 --> 00:45:18,300 І є багато, багато інших. 824 00:45:18,300 --> 00:45:19,040 Шукайте їх. 825 00:45:19,040 --> 00:45:19,901 Вони прекрасно. 826 00:45:19,901 --> 00:45:20,863 Да? 827 00:45:20,863 --> 00:45:22,113 >> АУДИТОРІЯ: [нерозбірливо]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> ДЕН: Так, який є відладчик. 830 00:45:28,200 --> 00:45:34,230 Так відладчик це програма, яка дозволяє налагоджувати програму. 831 00:45:34,230 --> 00:45:39,931 Це не програма, яка знаходить помилки для Ви, тим не менш, що було б здорово. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> І останнє, для мене є пошук. 834 00:45:46,040 --> 00:45:51,470 Так типів пошуку, що ми говорили про цього класу лінійний пошук, 835 00:45:51,470 --> 00:45:55,960 який є тільки, що ви дивитеся через кожен елемент простору пошуку, один 836 00:45:55,960 --> 00:46:00,410 елемент, в той час, поки ви не знайдете те, що Ви шукаєте або поки ви не досягнете 837 00:46:00,410 --> 00:46:03,350 край вашої простору пошуку, при якому момент ви сказати, що ви не могли знайти 838 00:46:03,350 --> 00:46:06,360 елемент, який ви шукали. 839 00:46:06,360 --> 00:46:13,450 І це займає в кращому випадку постійне час, який є 0 1, і в гіршому випадку лінійних 840 00:46:13,450 --> 00:46:16,070 Час, який дорівнює 0 н. 841 00:46:16,070 --> 00:46:19,250 >> Бінарний пошук, який необхідний брудні елементи. 842 00:46:19,250 --> 00:46:24,230 Ви йдете в середині ваших елементів, см, якщо елемент ви шукаєте 843 00:46:24,230 --> 00:46:30,120 більше або менше, ніж елемент що ви в середині. 844 00:46:30,120 --> 00:46:36,510 Це це більше, ви говорите, що дно з цієї категорії простір це ваш 845 00:46:36,510 --> 00:46:41,550 поточне місце розташування, середній, і ви перезапустити процес. 846 00:46:41,550 --> 00:46:46,150 Якщо він менше, ви подивіться сказати що the-- да, в чому справа? 847 00:46:46,150 --> 00:46:47,400 >> АУДИТОРІЯ: [нерозбірливо]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> ДЕН: Так. 850 00:46:54,260 --> 00:46:58,360 Будь-який вид роду, який вчили в клас справедлива гра для тіста. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Сміх] 853 00:47:04,920 --> 00:47:10,260 >> ДЕН: А те, що у вас не було зробити це для набору проблем, це справедливо 854 00:47:10,260 --> 00:47:12,420 Гра для випробування. 855 00:47:12,420 --> 00:47:15,186 >> АУДИТОРІЯ: Чи можемо ми піти по ньому, як to-- 856 00:47:15,186 --> 00:47:17,052 >> ДЕН: Це вже не буде більше. 857 00:47:17,052 --> 00:47:20,496 >> СПІКЕР 2: Фактичний код для [Нерозбірливо] на study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Так що, якщо ви подивіться на проблеми практики на сторінці сортування злиттям з 860 00:47:32,680 --> 00:47:35,880 study.cs50.net, є код для реалізації сортування злиттям. 861 00:47:35,880 --> 00:47:38,550 Таким чином, ви не повинні здійснювати це себе сьогодні ввечері. 862 00:47:38,550 --> 00:47:42,090 Але переконайтеся, що ви розумієте його, а ніж просто запам'ятовуючи його. 863 00:47:42,090 --> 00:47:45,035 >> АУДИТОРІЯ: [нерозбірливо]? 864 00:47:45,035 --> 00:47:49,720 >> СПІКЕР 2: На сторінці сортування злиттям на study.cs50.net, існує практика 865 00:47:49,720 --> 00:47:53,570 Проблема, що, якщо ви клацніть по Проблема, в самому кінці є 866 00:47:53,570 --> 00:47:56,280 Рішення, яке є злиття Реалізація роду. 867 00:47:56,280 --> 00:47:58,510 Але переконайтеся, що ви розумієте його а не просто запам'ятовувати його 868 00:47:58,510 --> 00:47:59,760 або копіюючи її вниз. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> АУДИТОРІЯ: І абсолютно справедливо Проблема для здачі іспиту буде 871 00:48:06,340 --> 00:48:07,990 щось на зразок ось список. 872 00:48:07,990 --> 00:48:12,100 Що це список виглядати після один крок Обрані роду або 873 00:48:12,100 --> 00:48:13,330 сортування вставками або будь-який інший. 874 00:48:13,330 --> 00:48:14,940 Один повний ітерація списку. 875 00:48:14,940 --> 00:48:18,530 Так що навіть якщо ви не в кінцевому підсумку потрібно Код для нього, ви повинні зрозуміти, це 876 00:48:18,530 --> 00:48:20,440 достатньо, щоб знати, як це відбувається щоб бути зміни цього масиву. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: Ось це для мене. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [Оплески] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Привіт всім. 883 00:49:07,410 --> 00:49:08,390 Мене звуть Лукас. 884 00:49:08,390 --> 00:49:16,840 Я збираюся говорити про рекурсії, все рослини, які ми витягли, і 885 00:49:16,840 --> 00:49:18,050 трохи всіх покажчиків. 886 00:49:18,050 --> 00:49:18,740 ОК? 887 00:49:18,740 --> 00:49:20,340 Отже, перш за все, рекурсія. 888 00:49:20,340 --> 00:49:22,951 Що це означає сказати, що функція є рекурсивної? 889 00:49:22,951 --> 00:49:24,675 >> АУДИТОРІЯ: Дзвінки себе. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: ОК, називає себе, так. 891 00:49:26,500 --> 00:49:27,700 Так любите цю фотографію, наприклад. 892 00:49:27,700 --> 00:49:30,280 Це як на картинці всередині картини і так далі. 893 00:49:30,280 --> 00:49:35,740 Так, наприклад, ви можете have-- Дана що говорив про бінарного пошуку. 894 00:49:35,740 --> 00:49:41,840 Один із способів, в яких двійковий пошук рекурсивна є те, що ви 895 00:49:41,840 --> 00:49:43,130 намагаючись знайти ряд. 896 00:49:43,130 --> 00:49:44,250 Так ви йдете в середині. 897 00:49:44,250 --> 00:49:47,130 І тоді ви переконаєтеся, що цифри там В зліва і справа. 898 00:49:47,130 --> 00:49:49,650 >> І потім, якщо ви дізналися номер буде ліворуч, це те ж саме 899 00:49:49,650 --> 00:49:53,340 річ, як раз робити пошук, але тільки зліва від списку. 900 00:49:53,340 --> 00:49:57,350 Так ось, як це звучить як це рекурсивна. 901 00:49:57,350 --> 00:50:01,870 Так ось чому ви, хлопці, є рекурсивна рішення для сортування злиттям. 902 00:50:01,870 --> 00:50:04,270 >> Отже, ось приклад. 903 00:50:04,270 --> 00:50:07,280 Так скажімо, що я хочу, щоб вибрати всі числа від 1 до п. 904 00:50:07,280 --> 00:50:13,790 Я розумію, що сума п число п плюс н мінус 1 до 1. 905 00:50:13,790 --> 00:50:17,810 Але тоді, якщо я дивлюся на п мінус 1 плюс н мінус 2 плюс 1, це те ж саме 906 00:50:17,810 --> 00:50:20,680 поняття, як підсумовують номера до н мінус 1. 907 00:50:20,680 --> 00:50:25,890 Тому я можу сказати суму рівній сумі дорівнює п плюс сума п мінус 1. 908 00:50:25,890 --> 00:50:28,010 Чи має це сенс? 909 00:50:28,010 --> 00:50:32,630 >> І я також би щось ще називається базовий варіант, який є те, що 910 00:50:32,630 --> 00:50:37,440 Сума чисел на нулю дорівнюватиме нулю. 911 00:50:37,440 --> 00:50:42,770 Тому, як тільки я доберуся до числа нулю, я перестанемо вважати. 912 00:50:42,770 --> 00:50:45,330 Чи має це сенс? 913 00:50:45,330 --> 00:50:48,120 >> Так ось приклад того, як Я можу реалізувати це. 914 00:50:48,120 --> 00:50:49,860 Так що у мене цю функцію в деяких. 915 00:50:49,860 --> 00:50:51,700 Це займає ціле п. 916 00:50:51,700 --> 00:50:56,300 Так ось я спочатку перевіряю, якщо п менше або дорівнює нулю. 917 00:50:56,300 --> 00:51:00,310 Таким чином, якщо це менш або дорівнює нулю, я повернути нуль, який є нашим базовим сценарієм. 918 00:51:00,310 --> 00:51:05,690 В іншому випадку, я можу просто повернутися н плюс сума чисел від 919 00:51:05,690 --> 00:51:07,190 один до н мінус один. 920 00:51:07,190 --> 00:51:09,360 Сенс? 921 00:51:09,360 --> 00:51:10,100 ОК. 922 00:51:10,100 --> 00:51:11,610 >> Так ось, як це виглядає. 923 00:51:11,610 --> 00:51:15,260 У вас є суму 2 рівних 2 плюс сума 1. 924 00:51:15,260 --> 00:51:18,930 І деякі з 1 1 плюс Сума 0, який є 0. 925 00:51:18,930 --> 00:51:20,216 Сенс? 926 00:51:20,216 --> 00:51:25,342 Так що, якщо ми подивимося на стопку ваш Програма, це те, що він виглядає. 927 00:51:25,342 --> 00:51:26,820 >> По-перше, у нас є основною функцією. 928 00:51:26,820 --> 00:51:30,320 І тоді основна функція називається сума 2. 929 00:51:30,320 --> 00:51:36,690 І тоді сума 2 збирається сказати, о, сума 2 дорівнює 2 плюс сума одного. 930 00:51:36,690 --> 00:51:39,460 Так що я додати суму 1 в стек. 931 00:51:39,460 --> 00:51:43,860 І сума 1 збирається назвати суму 0, який також буде додано 932 00:51:43,860 --> 00:51:44,630 в стек. 933 00:51:44,630 --> 00:51:49,240 І тоді кожен з цих ті, які на другий доведеться повернутися 934 00:51:49,240 --> 00:51:52,020 до того, як інші можуть продовжувати йти. 935 00:51:52,020 --> 00:51:56,240 >> Так, наприклад, тут, сума 0, Спочатку збирається повертати 0. 936 00:51:56,240 --> 00:51:58,320 А потім вибрати суму 1. 937 00:51:58,320 --> 00:52:00,850 Тоді сума 1 збирається повернутися 1 сумі 2. 938 00:52:00,850 --> 00:52:03,900 І, нарешті, сума 2 буде повернутися 3 до основної. 939 00:52:03,900 --> 00:52:05,320 Чи має це сенс? 940 00:52:05,320 --> 00:52:09,496 >> Це дійсно важливо, щоб зрозуміти, як стек працює і спробувати 941 00:52:09,496 --> 00:52:11,980 побачити, якщо це має сенс. 942 00:52:11,980 --> 00:52:13,260 Отже, сортування. 943 00:52:13,260 --> 00:52:16,170 Так чому ж сортування важливо, в першу чергу? 944 00:52:16,170 --> 00:52:18,260 Чому ми повинні дбати? 945 00:52:18,260 --> 00:52:20,310 Будь? 946 00:52:20,310 --> 00:52:20,695 Наведіть мені приклад? 947 00:52:20,695 --> 00:52:21,040 Да? 948 00:52:21,040 --> 00:52:22,968 >> АУДИТОРІЯ: [нерозбірливо]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Так, добре. 950 00:52:24,700 --> 00:52:26,090 Таким чином, ви можете шукати більш ефективно. 951 00:52:26,090 --> 00:52:28,580 Це хороший спосіб. 952 00:52:28,580 --> 00:52:32,462 Так, наприклад, у нас є багато речі, насправді, в нашому житті, що 953 00:52:32,462 --> 00:52:32,920 сортуються. 954 00:52:32,920 --> 00:52:34,830 Наприклад, словники. 955 00:52:34,830 --> 00:52:39,210 >> Це дуже важливо, щоб все слова в якийсь порядок, що ми 956 00:52:39,210 --> 00:52:41,970 можете отримати доступ легко. 957 00:52:41,970 --> 00:52:43,280 Так ось, що він говорив. 958 00:52:43,280 --> 00:52:45,530 Ви можете шукати більш ефективно. 959 00:52:45,530 --> 00:52:48,740 Подумайте про те, як важко було б мати словник, в якому слова знаходяться в 960 00:52:48,740 --> 00:52:49,500 випадковому порядку. 961 00:52:49,500 --> 00:52:53,120 Ви повинні дивитися на, в значній мірі, кожне слово, поки не знайдете 962 00:52:53,120 --> 00:52:54,720 слово, яке ви шукаєте. 963 00:52:54,720 --> 00:52:58,710 >> Якщо ви використовуєте Facebook також, коли Ви дивіться на ваших друзів, ви 964 00:52:58,710 --> 00:53:03,540 побачите, що Facebook покласти ваші ближче один знаходиться на вершині тих 965 00:53:03,540 --> 00:53:05,470 що ви не говорите с, що набагато. 966 00:53:05,470 --> 00:53:08,080 Якщо ви пройти весь шлях до дна список друзів, ви будете бачити 967 00:53:08,080 --> 00:53:11,250 люди, що ви, мабуть, навіть не пам'ятайте, що ви друзі с. 968 00:53:11,250 --> 00:53:14,590 І це тому, що Facebook сортів ваші друзі, засновані на тому, як 969 00:53:14,590 --> 00:53:16,472 закрити ви до них. 970 00:53:16,472 --> 00:53:17,930 >> Так організації даних. 971 00:53:17,930 --> 00:53:18,450 Також Pokemon. 972 00:53:18,450 --> 00:53:21,400 Отже, ви бачите, що все Покемонів мають номери. 973 00:53:21,400 --> 00:53:27,210 І це, як легко спосіб доступу до даних. 974 00:53:27,210 --> 00:53:29,050 >> АУДИТОРІЯ: Доступ Pokemon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Так. 976 00:53:29,890 --> 00:53:32,395 >> АУДИТОРІЯ: [нерозбірливо]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Так. 978 00:53:33,460 --> 00:53:35,140 Отже, вибір роду. 979 00:53:35,140 --> 00:53:41,610 Сортувати Вибір збирається вибрати маленький несортоване значення списку кожен 980 00:53:41,610 --> 00:53:43,300 час у кожній ітерації. 981 00:53:43,300 --> 00:53:46,800 Це ніби як те, що ви робите у вашій голові, коли ви намагаєтеся 982 00:53:46,800 --> 00:53:48,430 впорядкувати список під рукою. 983 00:53:48,430 --> 00:53:51,990 >> В принципі, все, що вам зробити, це подивитися для найменшого числа. 984 00:53:51,990 --> 00:53:54,280 Ви ставите його в відсортованому списку. 985 00:53:54,280 --> 00:53:56,230 І тоді ви подивіться на Наступний найменше число. 986 00:53:56,230 --> 00:54:00,080 І тоді ви продовжуєте робити , Що і так далі. 987 00:54:00,080 --> 00:54:04,600 >> Так вибір роду в основному ви виберіть щоразу найменший 988 00:54:04,600 --> 00:54:05,750 несортоване значення. 989 00:54:05,750 --> 00:54:10,840 Покладіть в кінці упорядковано частину списку. 990 00:54:10,840 --> 00:54:12,370 І продовжувати робити це. 991 00:54:12,370 --> 00:54:15,890 Так що давайте швидко побачити, що як це виглядає. 992 00:54:15,890 --> 00:54:19,340 Так ось упорядковано і несортоване список. 993 00:54:19,340 --> 00:54:23,350 >> Таким чином, для упорядковано зі списку, це спочатку порожній. 994 00:54:23,350 --> 00:54:26,760 А потім я збираюся вибрати найменше число тут, який є 2. 995 00:54:26,760 --> 00:54:30,650 Так що я отримати номер 2, і я поставив на початку списку. 996 00:54:30,650 --> 00:54:34,910 А потім я дивлюся на наступний маленький елемент, який є 3. 997 00:54:34,910 --> 00:54:37,050 Так що я поклав його в кінці з відсортованого списку. 998 00:54:37,050 --> 00:54:38,140 І тоді я продовжувати робити це. 999 00:54:38,140 --> 00:54:40,040 Я вважаю, 4 і поклав його в кінці. 1000 00:54:40,040 --> 00:54:41,360 Знайти 5 і поклав його в кінці. 1001 00:54:41,360 --> 00:54:44,830 >> І подивимося, як все ті часи, що Я говорю покласти його в кінець, 1002 00:54:44,830 --> 00:54:46,850 в основному, обмін двох значень. 1003 00:54:46,850 --> 00:54:48,100 ОК? 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 І тоді останнє, ви просто є ще один елемент. 1006 00:54:52,825 --> 00:54:55,870 Так що це вже відсортовані. 1007 00:54:55,870 --> 00:54:57,800 >> Отже, сортування вставками. 1008 00:54:57,800 --> 00:55:03,180 Внесені роду ви будете мати також що річ у тому, сортуються і 1009 00:55:03,180 --> 00:55:04,690 несортоване список. 1010 00:55:04,690 --> 00:55:14,540 Єдине, що кожен раз, що Ви додаєте елемент в упорядковано 1011 00:55:14,540 --> 00:55:18,170 Список, ви просто вибрати елемент, який знаходиться в передній частині несортоване список. 1012 00:55:18,170 --> 00:55:20,880 А потім ви збираєтеся знайти, що Положення це повинно бути у відсортований 1013 00:55:20,880 --> 00:55:22,300 частину списку. 1014 00:55:22,300 --> 00:55:25,840 >> Давайте подивимося, що це так це має більше сенсу. 1015 00:55:25,840 --> 00:55:29,360 Тобто спочатку, наприклад, я намагаюся вставити номер три в 1016 00:55:29,360 --> 00:55:30,680 відсортований частину списку. 1017 00:55:30,680 --> 00:55:31,800 Так що список не має нічого. 1018 00:55:31,800 --> 00:55:34,160 Тому я можу тільки поставити номер 3. 1019 00:55:34,160 --> 00:55:37,480 >> Тепер я хочу, щоб додати номер 5 в відсортований частину списку. 1020 00:55:37,480 --> 00:55:38,900 Так я дивлюся на числа 5. 1021 00:55:38,900 --> 00:55:40,450 Я помічаю, що це більше, ніж 3. 1022 00:55:40,450 --> 00:55:41,980 Так що я знаю, що це має бути після 3. 1023 00:55:41,980 --> 00:55:44,100 Так що я поклав 3 і 5. 1024 00:55:44,100 --> 00:55:45,940 >> Тоді я хочу вставити номер 2. 1025 00:55:45,940 --> 00:55:51,630 Я помічаю, що число 2 насправді останній потім як 3 і 5. 1026 00:55:51,630 --> 00:55:54,580 Так що я насправді повинні поставити все це чином на початку списку. 1027 00:55:54,580 --> 00:55:59,030 Так що я повинен, начебто, перекласти всі елементи в відсортованому списку, тому я можу 1028 00:55:59,030 --> 00:56:01,970 звільнити місце для числа 2. 1029 00:56:01,970 --> 00:56:03,160 >> Потім я бачу номер 6. 1030 00:56:03,160 --> 00:56:05,450 Я бачу, що це має бути після 5. 1031 00:56:05,450 --> 00:56:06,240 Так що я поклав його там. 1032 00:56:06,240 --> 00:56:07,965 І, нарешті, я дивлюся на числа 4. 1033 00:56:07,965 --> 00:56:11,030 І я помічаю, він повинен бути між 3 і 5. 1034 00:56:11,030 --> 00:56:14,870 І тоді я поклав його туди і зрушення всі інші елементи. 1035 00:56:14,870 --> 00:56:16,120 Сенс? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> Bubble Сортувати. 1038 00:56:19,150 --> 00:56:25,730 Так бульбашкового сортування в основному те, що ви збирається do-- ми називаємо це міхур 1039 00:56:25,730 --> 00:56:30,113 Сортувати тому що ви йдете через list-- це насправді краще, якщо я просто показати 1040 00:56:30,113 --> 00:56:32,300 Хочете ето-- 1041 00:56:32,300 --> 00:56:35,030 і ви збираєтеся порівнювати сусідні числа. 1042 00:56:35,030 --> 00:56:38,410 І ви збираєтеся обміняти їх позиції, якщо вони не 1043 00:56:38,410 --> 00:56:39,190 в правильному порядку. 1044 00:56:39,190 --> 00:56:42,570 >> Так в основному, що збирається відбудеться тут, наприклад, 1045 00:56:42,570 --> 00:56:44,160 у вас є 8 і 6. 1046 00:56:44,160 --> 00:56:47,270 Ви знаєте, що порядок сортування буде насправді бути 6 і 5, чи не так? 1047 00:56:47,270 --> 00:56:49,540 Так що ви збираєтеся поміняти накази. 1048 00:56:49,540 --> 00:56:51,370 Потім я бачу 8 і 4 тут. 1049 00:56:51,370 --> 00:56:52,250 І я роблю те ж саме. 1050 00:56:52,250 --> 00:56:53,400 Я поміняти знову. 1051 00:56:53,400 --> 00:56:55,070 І, нарешті, 2 і 8. 1052 00:56:55,070 --> 00:56:56,670 Я також поміняти їх місцями. 1053 00:56:56,670 --> 00:57:01,690 >> Вона називається Bubble Сортувати бо після кожен з цих ітерацій, насправді, 1054 00:57:01,690 --> 00:57:05,910 Найбільша кількість у списку отримує все шлях до кінця списку. 1055 00:57:05,910 --> 00:57:06,940 Чи має це сенс? 1056 00:57:06,940 --> 00:57:11,880 Тому що він тримає заміни його і переміщення його вправо. 1057 00:57:11,880 --> 00:57:14,440 >> Отже, це друга ітерація. 1058 00:57:14,440 --> 00:57:17,200 Було б те ж саме. 1059 00:57:17,200 --> 00:57:20,190 Я зроблю один своп і то останній. 1060 00:57:20,190 --> 00:57:23,290 Я, що немає свопи і список сортується. 1061 00:57:23,290 --> 00:57:27,460 Таким чином, в Bubble Сортувати, ми в основному тримати переживає списку і перекачки 1062 00:57:27,460 --> 00:57:32,310 речі, поки я не помітив, що я не робив будь-які свопи роблять цю ітерацію, яка 1063 00:57:32,310 --> 00:57:34,270 означає, що список вже відсортований. 1064 00:57:34,270 --> 00:57:35,520 Сенс? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Давайте трохи поговоримо про час роботи. 1067 00:57:40,870 --> 00:57:45,165 Так ви, хлопці, пам'ятайте Великий O, Omega, і Тета? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Да? 1070 00:57:50,990 --> 00:57:53,070 Добре, що Великий О, в першу чергу? 1071 00:57:53,070 --> 00:57:54,315 >> АУДИТОРІЯ: [нерозбірливо]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Так, це називається гіршому випадку виконання, який просто означає, що це 1073 00:57:59,070 --> 00:58:03,470 скільки ви очікуєте програму взяти для запуску. 1074 00:58:03,470 --> 00:58:04,910 Як, з точки зору of-- 1075 00:58:04,910 --> 00:58:06,660 в цьому case-- п. 1076 00:58:06,660 --> 00:58:09,150 Число елементів в Список в гіршому випадку. 1077 00:58:09,150 --> 00:58:12,520 Мовляв, в гіршому випадку. 1078 00:58:12,520 --> 00:58:17,100 >> Таким чином, для Bubble Сортувати, наприклад, У нас є великі O н площі. 1079 00:58:17,100 --> 00:58:20,580 Чому у нас, що? 1080 00:58:20,580 --> 00:58:24,716 Чому Bubble Сортувати Big O н квадрат? 1081 00:58:24,716 --> 00:58:27,614 >> АУДИТОРІЯ: [нерозбірливо]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Так, так в гіршому випадку буде що я повинен буду зробити п ітерацій. 1083 00:58:35,670 --> 00:58:39,260 Таким чином, кожен з ітерацій збирається привести до найбільшого елемент в кінець 1084 00:58:39,260 --> 00:58:40,290 зі списку. 1085 00:58:40,290 --> 00:58:44,230 Так в гіршому випадку є те, що у мене є зробити цю річ п раз. 1086 00:58:44,230 --> 00:58:48,550 І для кожного з тих часів, я повинен зробити п свопи тому що я повинен порівняти 1087 00:58:48,550 --> 00:58:49,870 кожен з двох елементів. 1088 00:58:49,870 --> 00:58:53,730 Так ось чому він н квадрат бо це п раз п. 1089 00:58:53,730 --> 00:59:00,120 >> Тоді, вибір роду також н площі тому, що для кожної ітерації, я повинен 1090 00:59:00,120 --> 00:59:02,650 дивитися на кожного елемента у списку. 1091 00:59:02,650 --> 00:59:04,980 А потім знайти найменший, Це означає, що я повинен 1092 00:59:04,980 --> 00:59:06,130 переглядати п елементів. 1093 00:59:06,130 --> 00:59:11,750 І що я повинен зробити, що п раз, тому що Я повинен вибрати все п елементів. 1094 00:59:11,750 --> 00:59:18,273 >> Сортування вставками також н площі бо в гіршому випадку буде 1095 00:59:18,273 --> 00:59:20,950 бути, один, я повинен вставити п чисел, чи не так? 1096 00:59:20,950 --> 00:59:22,765 Так що я вже знаю, що я збираюся мати п ітерацій. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 Але для кожного з цих чисел, якщо б мені довелося дивитися на всі номери в 1099 00:59:29,840 --> 00:59:34,380 відсортований список і поклав його всю дорогу в передній, що буде н площі 1100 00:59:34,380 --> 00:59:36,230 бо це буде п раз п раз. 1101 00:59:36,230 --> 00:59:38,280 Сенс? 1102 00:59:38,280 --> 00:59:41,512 Як щодо омега? 1103 00:59:41,512 --> 00:59:42,886 >> АУДИТОРІЯ: [нерозбірливо]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: Це в кращому випадку. 1105 00:59:44,620 --> 00:59:48,810 Так що це, як, в багато разів для сортування, в кращому випадку є 1106 00:59:48,810 --> 00:59:50,660 коли список вже відсортований. 1107 00:59:50,660 --> 00:59:52,670 Таким чином, ви дійсно не мають нічого робити. 1108 00:59:52,670 --> 00:59:56,290 Bubble Сортувати має кращий сценарій н. 1109 00:59:56,290 --> 00:59:58,820 Як ви, хлопці, знаєте, чому? 1110 00:59:58,820 --> 01:00:00,620 >> АУДИТОРІЯ: [нерозбірливо]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Так, якщо вам відслідковувати Чи раціон даних було ніяких свопів або 1112 01:00:05,640 --> 01:00:10,533 ні, якщо у вас є щось на зразок встановлений в правда, якби була ітерації, якщо 1113 01:00:10,533 --> 01:00:15,140 Список вже відсортовані, в основному, що трапиться, я буду 1114 01:00:15,140 --> 01:00:17,890 спробуйте поміняти кожен два сусідніх елементів. 1115 01:00:17,890 --> 01:00:19,920 Я збираюся бачити, що немає свопи. 1116 01:00:19,920 --> 01:00:21,230 І я просто повернути відразу. 1117 01:00:21,230 --> 01:00:24,240 >> Так це значить, що я просто повинен був пройти через список один раз. 1118 01:00:24,240 --> 01:00:28,990 Так що це н тому я дивлюся в п елементів. 1119 01:00:28,990 --> 01:00:30,930 Чому вибір роду п квадрат? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Так, навіть якщо список відсортований, для Кожна ітерація вибору роду, я 1122 01:00:45,520 --> 01:00:47,590 повинні вибрати мінімальний елемент. 1123 01:00:47,590 --> 01:00:49,980 Отже, що означає, що у мене є, щоб шукати на всіх елементів в несортоване 1124 01:00:49,980 --> 01:00:53,350 перерахувати і знайти мінімум для кожної ітерації. 1125 01:00:53,350 --> 01:00:54,600 Чи має це сенс? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> І вставки меч п, тому що в справа, що я намагаюся вставити 1128 01:01:04,690 --> 01:01:09,320 номера і всі номери, коли я спробуйте вставити їх, я бачу, що вони 1129 01:01:09,320 --> 01:01:10,510 знаходяться в правильному положенні. 1130 01:01:10,510 --> 01:01:15,120 Я не повинен піти перевірити всі інші Цифри в несортоване список. 1131 01:01:15,120 --> 01:01:17,170 Так ось чому він буде н. 1132 01:01:17,170 --> 01:01:19,480 Сенс? 1133 01:01:19,480 --> 01:01:21,035 І що тета? 1134 01:01:21,035 --> 01:01:23,410 >> АУДИТОРІЯ: [нерозбірливо]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Що, вибачте? 1136 01:01:24,380 --> 01:01:24,960 Скажіть це ще раз. 1137 01:01:24,960 --> 01:01:25,666 >> АУДИТОРІЯ: [нерозбірливо]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Точно. 1139 01:01:26,490 --> 01:01:31,280 Таким чином, ви можете бачити, що тільки вибір зберігається в Merge роду мають thetas. 1140 01:01:31,280 --> 01:01:39,920 І це тому, що у вас є тільки тета якщо обидва Big O і Омега однакові. 1141 01:01:39,920 --> 01:01:41,520 ОК. 1142 01:01:41,520 --> 01:01:44,210 І, нарешті, сортування злиттям є в лог п. 1143 01:01:44,210 --> 01:01:48,910 >> А потім, як казав Ден, сортування злиттям ніби як таким же чином, що 1144 01:01:48,910 --> 01:01:50,320 ви бінарний пошук. 1145 01:01:50,320 --> 01:01:53,530 Таким чином, ви отримаєте список. 1146 01:01:53,530 --> 01:01:55,170 І ви збираєтеся розрізати навпіл. 1147 01:01:55,170 --> 01:02:00,580 І тоді ви скоротити їх в невеликих половинок. 1148 01:02:00,580 --> 01:02:01,730 І тоді ви об'єднаєте їх. 1149 01:02:01,730 --> 01:02:02,960 Ви, хлопці, пам'ятайте, що, чи не так? 1150 01:02:02,960 --> 01:02:04,960 ОК, як він говорив. 1151 01:02:04,960 --> 01:02:08,330 >> ОК, покажчики. 1152 01:02:08,330 --> 01:02:11,078 Так що це покажчик? 1153 01:02:11,078 --> 01:02:12,050 >> АУДИТОРІЯ: [нерозбірливо]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: адреса. 1155 01:02:12,820 --> 01:02:13,720 ОК. 1156 01:02:13,720 --> 01:02:18,530 Я знаю, що Девід показує купу відео Бінки і речі, що вказують 1157 01:02:18,530 --> 01:02:19,080 один до одного. 1158 01:02:19,080 --> 01:02:22,960 Але мені подобається думати, покажчиків лише як адреса. 1159 01:02:22,960 --> 01:02:26,110 Так що це змінна, яка буде зберігати адреси. 1160 01:02:26,110 --> 01:02:31,940 >> Так що це просто це спеціальна змінна тобто задовго чотири байти. 1161 01:02:31,940 --> 01:02:36,550 Пам'ятайте, що покажчик до чого це завжди чотири байти довгі для нашої 32-біт 1162 01:02:36,550 --> 01:02:39,370 Машина так і у випадку з прилад. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 І це якраз має місце змінної всередині нього. 1165 01:02:47,050 --> 01:02:50,240 >> ОК, так що ця пам'ять, в основному. 1166 01:02:50,240 --> 01:02:57,420 Таким чином, кожен блок пам'яті насправді має етикетка, яка є адреса 1167 01:02:57,420 --> 01:02:58,890 slotty пам'яті. 1168 01:02:58,890 --> 01:03:02,370 Отже, що означає, що в мене може бути покажчик, який вказує на 1169 01:03:02,370 --> 01:03:03,380 будь-який з цих адрес. 1170 01:03:03,380 --> 01:03:09,930 Так що причина, чому ми будемо використовувати покажчики є якщо мені доведеться запам'ятовувати розташування 1171 01:03:09,930 --> 01:03:12,300 що конкретна змінна пам'яті. 1172 01:03:12,300 --> 01:03:16,560 >> І ви, хлопці, пам'ятайте, що один з тих, випадки були, якщо у мене є функція 1173 01:03:16,560 --> 01:03:20,820 якщо у мене є насправді хочу, щоб ви своп для дійсних чисел, я насправді 1174 01:03:20,820 --> 01:03:22,110 повинні послати покажчик. 1175 01:03:22,110 --> 01:03:23,460 Чи не змінна. 1176 01:03:23,460 --> 01:03:25,200 Ви, хлопці, чи пам'ятаєте ви, що? 1177 01:03:25,200 --> 01:03:26,450 Різниця between-- 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 як називається? 1180 01:03:34,120 --> 01:03:36,010 Виклик за значенням і виклику за посиланням, чи не так? 1181 01:03:36,010 --> 01:03:36,840 >> ОК, да. 1182 01:03:36,840 --> 01:03:38,330 Так що телефонуйте за значенням. 1183 01:03:38,330 --> 01:03:43,570 Коли ви просто відправити змінну функціонувати ви просто відправивши значення. 1184 01:03:43,570 --> 01:03:45,610 Таким чином, ви насправді відправки копія змінної. 1185 01:03:45,610 --> 01:03:49,720 І ваша програма не могла піклуватися менше о, якщо та ж змінна фактично 1186 01:03:49,720 --> 01:03:51,650 робить копію. 1187 01:03:51,650 --> 01:03:56,330 >> І, закликаючи посилання означає, що Я насправді направлення копії 1188 01:03:56,330 --> 01:03:57,550 покажчик на цю змінну. 1189 01:03:57,550 --> 01:04:00,970 Так це значить, що я посилаю Розташування цієї змінної. 1190 01:04:00,970 --> 01:04:04,440 Так відчуваю я маю розташування змінна, коли я дзвоню функція 1191 01:04:04,440 --> 01:04:09,700 з покажчиками, я в змозі насправді змінити дані, які були в основний. 1192 01:04:09,700 --> 01:04:12,050 Сенс? 1193 01:04:12,050 --> 01:04:17,560 >> Хоча, покажчик є копією, покажчик все ще має реальну адресу 1194 01:04:17,560 --> 01:04:20,090 змінна, що я хочу змінити. 1195 01:04:20,090 --> 01:04:21,920 Сенс? 1196 01:04:21,920 --> 01:04:24,290 >> Так створення покажчиків. 1197 01:04:24,290 --> 01:04:28,410 Пам'ятайте, покажчик завжди є тип, який він, вказуючи 1198 01:04:28,410 --> 01:04:29,890 щоб потім зірочку. 1199 01:04:29,890 --> 01:04:31,030 І тоді ви поставити ім'я. 1200 01:04:31,030 --> 01:04:35,765 Так що пам'ятайте, що всякий раз, коли у вас є всі зірки, це як покажчик на 1201 01:04:35,765 --> 01:04:38,990 що все, що змінна введіть що ви мали. 1202 01:04:38,990 --> 01:04:42,850 >> Таким чином, тут, в зірку, наприклад, це покажчик і ціле число. 1203 01:04:42,850 --> 01:04:47,680 І тоді символ зірка покажчик символ зірки і так далі. 1204 01:04:47,680 --> 01:04:47,960 Да? 1205 01:04:47,960 --> 01:04:52,710 >> АУДИТОРІЯ: Що робити, якщо у нас є покажчик на п зніматися х. 1206 01:04:52,710 --> 01:04:55,255 Я знаю, що створює покажчик на х. 1207 01:04:55,255 --> 01:04:59,432 Чи означає це також оголосити х ціле? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: ОК, так що, коли ви говорите, н-зірковий х, ви не створюєте покажчик 1209 01:05:05,170 --> 01:05:06,000 змінна х. 1210 01:05:06,000 --> 01:05:08,170 Ви створюєте покажчик з ім'ям х. 1211 01:05:08,170 --> 01:05:09,396 >> АУДИТОРІЯ: [нерозбірливо]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Тому коли я кажу н зоряний х, я кажучи, гей, в пам'яті, я збираюся 1213 01:05:14,250 --> 01:05:16,390 отримати один з цих трьох коробок. 1214 01:05:16,390 --> 01:05:20,750 І я хочу сказати, що, що буде х, який є 1215 01:05:20,750 --> 01:05:22,000 буде покажчик. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 І щось цікаве про покажчики є те, що ми говоримо, що у них є 1218 01:05:30,640 --> 01:05:32,620 4 байта для 32-бітної машині. 1219 01:05:32,620 --> 01:05:36,320 І причина, що пояснюється тим, що 4 байта 32-біт. 1220 01:05:36,320 --> 01:05:40,490 >> І машини, які 64 біт насправді є покажчики адреси 1221 01:05:40,490 --> 01:05:43,480 , Що в 64 бита. 1222 01:05:43,480 --> 01:05:49,820 Так це просто означає, що розмір адреси в машині відрізняється. 1223 01:05:49,820 --> 01:05:52,270 >> Так Зіставлення і разименованія. 1224 01:05:52,270 --> 01:05:54,310 Є два оператора, що ви, хлопці, повинні пам'ятати. 1225 01:05:54,310 --> 01:05:55,450 Перший амперсанд. 1226 01:05:55,450 --> 01:05:56,810 Другою зіркою. 1227 01:05:56,810 --> 01:06:05,060 Не лякайтеся цієї зірки і це зірки, бо пам'ятаєте, що, в 1228 01:06:05,060 --> 01:06:06,950 цей випадок, у вас є п зірку. 1229 01:06:06,950 --> 01:06:08,700 >> Це як все це разом. 1230 01:06:08,700 --> 01:06:10,720 Там немає н Space Star. 1231 01:06:10,720 --> 01:06:12,070 Так це значить, що це тип. 1232 01:06:12,070 --> 01:06:14,870 Пам'ятайте, що, коли у вас є змінна зірка, ти 1233 01:06:14,870 --> 01:06:16,230 говорити про тип. 1234 01:06:16,230 --> 01:06:20,540 >> Коли у вас є тільки зірку, а потім Ім'я змінної, це означає, що 1235 01:06:20,540 --> 01:06:24,100 ви разименованія покажчика, який означає, що ви дивитеся на 1236 01:06:24,100 --> 01:06:28,290 покажчик, знайти адресу, це вказуючи на, збирається на цю адресу, 1237 01:06:28,290 --> 01:06:30,850 і, дивлячись на всякий раз, коли у вас там. 1238 01:06:30,850 --> 01:06:34,310 Тому я кажу своїм студентам, що, коли у вас є зірки, ви повинні думати, що це 1239 01:06:34,310 --> 01:06:36,850 абревіатура змісту. 1240 01:06:36,850 --> 01:06:39,770 >> Так що якщо у вас є вказівник, і ви зробити зірку покажчик, це 1241 01:06:39,770 --> 01:06:41,720 зміст покажчика. 1242 01:06:41,720 --> 01:06:44,580 Так ви йдете в те, що він, вказуючи на і подивитися на постійному утриманні. 1243 01:06:44,580 --> 01:06:47,730 І амперсанд те ж саме речі, як адресу. 1244 01:06:47,730 --> 01:06:52,560 >> Так що, якщо у мене є змінна A-- як, давайте сказати, що я зробив Int дорівнює 3-- 1245 01:06:52,560 --> 01:06:56,900 якщо я хочу, щоб знайти адресу, що змінна пам'яті, я можу просто зробити 1246 01:06:56,900 --> 01:06:58,240 амперсанд. 1247 01:06:58,240 --> 01:07:00,280 Так що це адреса. 1248 01:07:00,280 --> 01:07:01,530 Сенс? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Так ось приклад. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 Це відсутній целочисленное б і целочисленное гр. 1253 01:07:11,530 --> 01:07:16,520 Так Int дорівнює 3 означає, що Я збираюся піти в пам'яті. 1254 01:07:16,520 --> 01:07:19,870 І я збираюся знайти слот і справа тут число 3. 1255 01:07:19,870 --> 01:07:22,200 >> А потім Int б дорівнює 4. 1256 01:07:22,200 --> 01:07:23,100 Я збираюся зробити те ж саме. 1257 01:07:23,100 --> 01:07:25,840 До пам'яті і поставити ряд 4 в одному з ящиків. 1258 01:07:25,840 --> 01:07:27,100 І Int дорівнює 5. 1259 01:07:27,100 --> 01:07:29,740 Знайти іншу коробку і поставити ряд 5. 1260 01:07:29,740 --> 01:07:36,160 >> Так що ж це лінія робиш? н зірка річних дорівнює амперсанд а. 1261 01:07:36,160 --> 01:07:37,800 Таким чином, в першу чергу, н зіркою на рік. 1262 01:07:37,800 --> 01:07:39,050 Що він робить? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> АУДИТОРІЯ: [нерозбірливо]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Так, так н зірка річних, перший, оголошує покажчик під назвою річних. 1266 01:07:47,890 --> 01:07:53,720 А потім він присвоєння значення вказівника адресу. 1267 01:07:53,720 --> 01:07:55,790 Так амперсанд. 1268 01:07:55,790 --> 01:07:58,510 Тоді, якщо я зірка Pb, що це зірка рь? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Ой, вибачте. 1271 01:08:03,150 --> 01:08:06,330 Це також відсутня. н зірка рь. 1272 01:08:06,330 --> 01:08:07,905 Я маю на увазі зірки шт. 1273 01:08:07,905 --> 01:08:11,200 Мені дуже шкода. 1274 01:08:11,200 --> 01:08:11,940 Це те ж саме. 1275 01:08:11,940 --> 01:08:16,408 Але зараз я добре ар створення покажчик б, а потім покажчик на с. 1276 01:08:16,408 --> 01:08:16,886 Да? 1277 01:08:16,886 --> 01:08:18,136 >> АУДИТОРІЯ: [нерозбірливо]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Так. 1280 01:08:26,670 --> 01:08:32,630 Так що, якщо ви йдете в пам'яті і ви йдете в вікно, це позначення для річних, 1281 01:08:32,630 --> 01:08:37,149 ви насправді збирається побачити адресу. 1282 01:08:37,149 --> 01:08:38,399 ОК? 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 Да? 1285 01:08:43,300 --> 01:08:45,605 >> АУДИТОРІЯ: [нерозбірливо]? 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Так, покажчик є адресою. 1287 01:08:49,260 --> 01:08:50,120 Ніколи не забувайте, що. 1288 01:08:50,120 --> 01:08:52,800 Це як найважливіший частина про покажчики. 1289 01:08:52,800 --> 01:08:56,180 Там в зберіганні та адреса деякої змінної. 1290 01:08:56,180 --> 01:08:56,890 Що ще? 1291 01:08:56,890 --> 01:08:58,370 Ще питання? 1292 01:08:58,370 --> 01:08:59,189 ОК. 1293 01:08:59,189 --> 01:09:00,399 >> Так Покажчики та масиви. 1294 01:09:00,399 --> 01:09:08,189 Пам'ятайте, що, коли я роблю десяткового масив 3, в основному, те, що я роблю, я, начебто 1295 01:09:08,189 --> 01:09:12,779 з, оголосивши в покажчик. 1296 01:09:12,779 --> 01:09:18,960 Так масив ніби як покажчик на особливе місце в пам'яті, в якій я 1297 01:09:18,960 --> 01:09:21,999 виділено три слоти для цілих чисел. 1298 01:09:21,999 --> 01:09:23,430 Чи має це сенс? 1299 01:09:23,430 --> 01:09:30,250 >> Тому, коли я роблю целочисленное масив 3, то, що я робить, в основному, є створення трьох 1300 01:09:30,250 --> 01:09:31,479 слоти в пам'яті. 1301 01:09:31,479 --> 01:09:33,899 Так що я просто знайти три слота в пам'яті. 1302 01:09:33,899 --> 01:09:38,810 Так що, якщо я роблю, то, зіркою масиву, його в основному означає зміст масиву, 1303 01:09:38,810 --> 01:09:46,180 що означає стерти покажчик, я йду до того місця, що це, вказуючи на, 1304 01:09:46,180 --> 01:09:47,939 і я поставив номер один. 1305 01:09:47,939 --> 01:09:53,729 >> А потім, якщо я зірка масив плюс 1, що те ж саме, як робити масив 1306 01:09:53,729 --> 01:09:59,690 кронштейни один, який просто означає, я йду в місце, яке він, вказуючи на. 1307 01:09:59,690 --> 01:10:03,000 І тоді плюс 1 марки мені перейти на одну позицію. 1308 01:10:03,000 --> 01:10:06,510 Так я йду на цю посаду, фактично, і поставити номер два. 1309 01:10:06,510 --> 01:10:10,900 >> І ось, нарешті, коли я роблю Масив плюс 2, я йду туди, де 1310 01:10:10,900 --> 01:10:11,825 яке вказує масиву в. 1311 01:10:11,825 --> 01:10:14,690 А потім я перейду до блоків пам'яті. 1312 01:10:14,690 --> 01:10:16,240 І тоді я поклав тут число три. 1313 01:10:16,240 --> 01:10:16,600 Да? 1314 01:10:16,600 --> 01:10:21,400 >> АУДИТОРІЯ: Так зірка масив просто кажучи найперший пункт. 1315 01:10:21,400 --> 01:10:25,090 І ви можете додати 1, тільки тому, що ми тільки дійсно 1316 01:10:25,090 --> 01:10:27,295 посилаючись, що перший адресу. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Так. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Чому ми, наприклад, сказати, масив 0, масив 1, і масив 2? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Я говорю, навіщо ти 0, 1, 2, 3, а не 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Однією з причин є, одним, комп'ютер програмісти воліють, щоб почати 1323 01:10:46,550 --> 01:10:47,750 починаючи з 0. 1324 01:10:47,750 --> 01:10:52,370 Два, тому що, коли ви робите масив 0, це те ж саме, роблять масив 1325 01:10:52,370 --> 01:10:56,330 плюс 0, що означає, я йду в що позиція, і я не 1326 01:10:56,330 --> 01:10:59,320 пропускати будь-які блоки пам'яті. 1327 01:10:59,320 --> 01:11:01,750 Так що я не переміщати будь-які блоки пам'яті. 1328 01:11:01,750 --> 01:11:02,015 Да? 1329 01:11:02,015 --> 01:11:03,265 >> АУДИТОРІЯ: [нерозбірливо]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Так вона просить, що є робити різницю між 1332 01:11:12,670 --> 01:11:14,000 це чи робити Танос. 1333 01:11:14,000 --> 01:11:17,550 Одне з відмінностей полягає в тому цілочисельний масив 3 створенні 1334 01:11:17,550 --> 01:11:19,260 Масив в стеці. 1335 01:11:19,260 --> 01:11:23,080 І коли я роблю Танос, його створює в купі. 1336 01:11:23,080 --> 01:11:25,250 Чи має це сенс? 1337 01:11:25,250 --> 01:11:28,870 >> Так як же Танос насправді працює? 1338 01:11:28,870 --> 01:11:32,245 Так чому ж ми навіть потрібно використовувати Танос? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 Ваш компілятор роду діячів зі всіх змінні, які ви оголошені. 1341 01:11:39,700 --> 01:11:44,040 І він створює простір для всіх з них в стеці. 1342 01:11:44,040 --> 01:11:47,180 Так всі змінні збираються бути де в стеці. 1343 01:11:47,180 --> 01:11:49,460 Так ось змінні оточення. 1344 01:11:49,460 --> 01:11:53,850 >> Так в основному, місця для цих змінних в пам'яті виділяється на 1345 01:11:53,850 --> 01:11:55,080 час компіляції. 1346 01:11:55,080 --> 01:11:58,790 Так це значить, що ваш комп'ютер має знати всі ці змінні 1347 01:11:58,790 --> 01:11:59,790 заздалегідь. 1348 01:11:59,790 --> 01:12:02,500 Для цього не потрібно знати, що значення ви збираєтеся покласти в них. 1349 01:12:02,500 --> 01:12:05,490 Але для цього потрібно знати, як обсяг пам'яті вам потрібно. 1350 01:12:05,490 --> 01:12:09,380 >> Але тепер давайте уявимо, що, наприклад, ви створюєте масив або приймати 1351 01:12:09,380 --> 01:12:13,430 Рядок, ви приймаєте від користувача. 1352 01:12:13,430 --> 01:12:17,300 Ви не знаєте, як довго рядок буде, наприклад. 1353 01:12:17,300 --> 01:12:20,600 Так ви не знаєте точно, скільки блоки пам'яті ви виділяєте, чи не так? 1354 01:12:20,600 --> 01:12:24,120 >> Так що насправді не має сенсу для Ви сказати покласти 100 символів. 1355 01:12:24,120 --> 01:12:26,420 А що потім, якщо користувач пише 150? 1356 01:12:26,420 --> 01:12:27,670 Ви збираєтеся бути п'яним. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Так в основному, ви не можете бути впевнені в тому, як обсяг пам'яті потрібно виділити 1359 01:12:34,620 --> 01:12:35,960 при компіляції програми. 1360 01:12:35,960 --> 01:12:38,240 Ви просто знаєте, що на час роботи. 1361 01:12:38,240 --> 01:12:39,950 Так ось чому у вас купу. 1362 01:12:39,950 --> 01:12:47,610 Так купа матиме пам'ять що ви виділення під час 1363 01:12:47,610 --> 01:12:50,810 Тривалість виконання програми. 1364 01:12:50,810 --> 01:12:55,780 >> Так в основному, коли ви робите Танос, що Ви робите виділяє пам'ять в 1365 01:12:55,780 --> 01:13:00,160 виконання, що означає, що ви вирішивши право в той момент, що вам 1366 01:13:00,160 --> 01:13:02,670 повинні мати цю пам'ять. 1367 01:13:02,670 --> 01:13:04,210 Так ось, коли ви виділяючи його. 1368 01:13:04,210 --> 01:13:06,430 Чи має це сенс? 1369 01:13:06,430 --> 01:13:11,690 >> Так що пам'ятайте, стек має змінні що створюються на час компіляції. 1370 01:13:11,690 --> 01:13:14,560 А потім купа має змінні що створюються, як ви йдете 1371 01:13:14,560 --> 01:13:15,600 з Танос, наприклад. 1372 01:13:15,600 --> 01:13:16,850 >> АУДИТОРІЯ: [нерозбірливо]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: Так GetString є називатиму Танос. 1375 01:13:24,340 --> 01:13:26,710 Дозвольте мені говорити про Танос, і Я поясню GetString. 1376 01:13:26,710 --> 01:13:32,000 Так Танос те ж саме як розподіл пам'яті. 1377 01:13:32,000 --> 01:13:34,600 Так він збирається виділити пам'яті в купі. 1378 01:13:34,600 --> 01:13:40,010 І він збирається повертати покажчик на де, що пам'ять була виділена в. 1379 01:13:40,010 --> 01:13:43,090 >> Отже, коли ви do-- 1380 01:13:43,090 --> 01:13:44,910 тут example-- 1381 01:13:44,910 --> 01:13:45,830 н зірка покажчик. 1382 01:13:45,830 --> 01:13:50,520 А потім покажчик дорівнює Танос розмір дюймових раз 10. 1383 01:13:50,520 --> 01:13:52,110 Я створюю покажчик. 1384 01:13:52,110 --> 01:13:59,020 І тоді я ставлю це покажчик значення покажчика, що Malloc 1385 01:13:59,020 --> 01:13:59,680 дає мені. 1386 01:13:59,680 --> 01:14:04,150 >> Ось я і питаю Танос ви можете виділити простір для 10 цілих чисел. 1387 01:14:04,150 --> 01:14:05,390 Ось що він говорив. 1388 01:14:05,390 --> 01:14:09,020 І Танос дає мені покажчик до того місця. 1389 01:14:09,020 --> 01:14:11,460 Сенс? 1390 01:14:11,460 --> 01:14:12,270 ОК. 1391 01:14:12,270 --> 01:14:17,940 Я І GetString є, в основному, роблять телефонуйте в Танос так що ви можете виділити 1392 01:14:17,940 --> 01:14:21,680 пам'яті під час виконання. 1393 01:14:21,680 --> 01:14:26,460 >> Завжди пам'ятайте, щоб перевірити на нуль тому Танос збирається повернутися нуль 1394 01:14:26,460 --> 01:14:28,200 якщо він не може виділити пам'ять. 1395 01:14:28,200 --> 01:14:31,660 Давайте припустимо, що ви просите смішно обсяг пам'яті. 1396 01:14:31,660 --> 01:14:33,950 Комп'ютер не буде можливість виділяти так багато. 1397 01:14:33,950 --> 01:14:36,410 >> Так Танос тільки збирається повернутися нуль. 1398 01:14:36,410 --> 01:14:42,210 Так завжди пам'ятати, щоб перевірити, якщо покажчик, який ви отримали від Танос є 1399 01:14:42,210 --> 01:14:45,640 NULL чи ні, тому що, якщо це, можна бути разименованія покажчика і 1400 01:14:45,640 --> 01:14:48,340 викликаючи побічних помилки. 1401 01:14:48,340 --> 01:14:50,930 І, нарешті, не забудьте Ваш вільної пам'яті. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc створює пам'ять в купі. 1404 01:15:00,560 --> 01:15:03,436 І ви повинні звільнити пам'ять перш ніж програма закінчується. 1405 01:15:03,436 --> 01:15:05,370 Добре, це все для мене. 1406 01:15:05,370 --> 01:15:07,900 На жаль, Роб. 1407 01:15:07,900 --> 01:15:07,950 Завдяки. 1408 01:15:07,950 --> 01:15:09,878 >> [Оплески] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Будь останні питання перед Роб приходить? 1410 01:15:12,679 --> 01:15:13,138 Ні? 1411 01:15:13,138 --> 01:15:13,597 Да? 1412 01:15:13,597 --> 01:15:15,892 >> АУДИТОРІЯ: я не бачив це один онлайн. 1413 01:15:15,892 --> 01:15:17,269 Ви завантажили його ще? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Я думаю, що Дейв завантаження його найближчим часом. 1415 01:15:19,106 --> 01:15:19,880 >> DAVE: Це буде розміщена. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: Це буде онлайн. 1417 01:15:20,310 --> 01:15:21,175 >> АУДИТОРІЯ: Це залежить. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: Це залежить? 1419 01:15:22,090 --> 01:15:23,157 ОК. 1420 01:15:23,157 --> 01:15:23,644 Да? 1421 01:15:23,644 --> 01:15:27,053 >> АУДИТОРІЯ: [нерозбірливо]? 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Так, ви повинні звільнити всіх пам'ять, яка поміщається в купі. 1423 01:15:30,285 --> 01:15:31,535 >> АУДИТОРІЯ: [нерозбірливо]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Так. 1426 01:15:36,160 --> 01:15:39,980 Всякий раз, коли у вас є культури Танос, Ви повинні мати культуру безкоштовно 1427 01:15:39,980 --> 01:15:42,640 після припинення використання цієї змінної. 1428 01:15:42,640 --> 01:15:44,800 Так Танос і вільні завжди разом. 1429 01:15:44,800 --> 01:15:45,410 Їх кращі друзі. 1430 01:15:45,410 --> 01:15:46,720 Так. 1431 01:15:46,720 --> 01:15:47,970 Роб? 1432 01:15:47,970 --> 01:15:55,595 1433 01:15:55,595 --> 01:15:56,850 >> ROB: Я піду швидко. 1434 01:15:56,850 --> 01:16:00,466 А також відео буде миритися. 1435 01:16:00,466 --> 01:16:01,716 У мене є мікрофон на. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> Отже, тиждень п'ять матеріал. 1438 01:16:26,230 --> 01:16:27,970 Перше, що ми повинні це стек. 1439 01:16:27,970 --> 01:16:33,390 Так що пам'ятайте, що є тільки один стек кадрів в разі активного виклику функції. 1440 01:16:33,390 --> 01:16:34,710 Ми побачимо, що в секунду. 1441 01:16:34,710 --> 01:16:37,850 А також пам'ятати, що насправді відбувається в кожному кадрі стека збираються бути 1442 01:16:37,850 --> 01:16:41,880 локальні змінні наших функцій, аргументи, які передаються в наш 1443 01:16:41,880 --> 01:16:43,880 функції, поряд з парою інші речі, які ви дійсно не 1444 01:16:43,880 --> 01:16:45,260 потрібно турбуватися о. 1445 01:16:45,260 --> 01:16:50,950 >> Так ось приклад програми, де, сповіщення, основною є printfing повернення 1446 01:16:50,950 --> 01:16:52,830 Значення Foo 4. 1447 01:16:52,830 --> 01:16:57,930 Foo тільки збирається повернутися Значення бар 4 коми 6. 1448 01:16:57,930 --> 01:17:02,380 І бар збирається встановити деякі місцеві змінна п дорівнює 4 рази 6. 1449 01:17:02,380 --> 01:17:03,920 А потім повернутися н. 1450 01:17:03,920 --> 01:17:09,130 >> Отже, давайте поглянемо на стек на протязі фактичний ітерації цієї програми. 1451 01:17:09,130 --> 01:17:10,500 Таким чином, є підстава нашого стека. 1452 01:17:10,500 --> 01:17:12,620 Пам'ятайте, що стек росте вгору. 1453 01:17:12,620 --> 01:17:15,370 Так в нижній частині нашого стека, ми є фрейм стека для основного. 1454 01:17:15,370 --> 01:17:17,000 При запуску програми, головним завжди буде в 1455 01:17:17,000 --> 01:17:18,560 Дно нашої стека. 1456 01:17:18,560 --> 01:17:20,880 >> І те, що всередині нашого стек викликів для основної? 1457 01:17:20,880 --> 01:17:23,810 Таким чином, навіть при тому, що не існує ніякого місцевого змінні в основному, як я вже говорив, 1458 01:17:23,810 --> 01:17:29,670 ми агдс і RGV займаючи місце всередині основного кадру стека. 1459 01:17:29,670 --> 01:17:33,260 Так головний тепер збирається викликати функцію Foo. 1460 01:17:33,260 --> 01:17:35,125 А це значить, Foo збирається отримати свій власний кадр стека. 1461 01:17:35,125 --> 01:17:36,970 >> Так що тепер ми всередині функція Foo. 1462 01:17:36,970 --> 01:17:38,610 І те, що потрібно йти в фрейм стека класу Foo? 1463 01:17:38,610 --> 01:17:41,100 Ну, Foo має аргументів н. 1464 01:17:41,100 --> 01:17:45,440 І н дорівнює 4 с, що те, що Основний проходить як аргумент Foo в. 1465 01:17:45,440 --> 01:17:48,490 >> Так що тепер Foo збирається назвати бар. 1466 01:17:48,490 --> 01:17:52,070 Що бар доведеться всередині його 'кадру стека? 1467 01:17:52,070 --> 01:17:55,610 Він має х, рівне 4 Y, рівним шести. 1468 01:17:55,610 --> 01:17:58,540 Це ще не все, що ми збираємося мати в кадрі стека, тому що бар 1469 01:17:58,540 --> 01:18:00,580 також має локальну змінну п. 1470 01:18:00,580 --> 01:18:03,370 І н ми збираємося встановити рівним 24. 1471 01:18:03,370 --> 01:18:05,750 >> Так що тепер бар збирається повернутися н. 1472 01:18:05,750 --> 01:18:09,300 Так бар повертається 24 до кадр стека щось. 1473 01:18:09,300 --> 01:18:12,560 І тому, що бар тепер повертається, що означає, що ми вискакують кадр стека 1474 01:18:12,560 --> 01:18:14,250 для панелі з стека. 1475 01:18:14,250 --> 01:18:18,430 Так вся пам'ять, що бар був використовуючи тепер з стека. 1476 01:18:18,430 --> 01:18:21,550 >> Тепер, Foo також збирається повернутися 24 на головну. 1477 01:18:21,550 --> 01:18:25,470 Так що тепер Foo повертається, пам'ять що Foo використовував у своїй ' 1478 01:18:25,470 --> 01:18:27,550 кадр стека також пішов. 1479 01:18:27,550 --> 01:18:29,660 А тепер, головний збирається подзвонити Printf. 1480 01:18:29,660 --> 01:18:31,660 Так Е є тільки одна функція. 1481 01:18:31,660 --> 01:18:35,320 Коли ми називаємо Е, це буде другий фрейм стека для Printf 1482 01:18:35,320 --> 01:18:36,470 виклик функції. 1483 01:18:36,470 --> 01:18:37,990 >> Що ми передаємо Printf? 1484 01:18:37,990 --> 01:18:40,090 Це те, що збирається піти на його кадру стека. 1485 01:18:40,090 --> 01:18:44,970 Принаймні, ми передаємо що відсотків я зворотну косу риску н і 1486 01:18:44,970 --> 01:18:47,180 аргумент 24. 1487 01:18:47,180 --> 01:18:50,370 Це може мати більше в це кадр стека якщо Е, трапляється, використовуючи деякі 1488 01:18:50,370 --> 01:18:51,200 локальні змінні. 1489 01:18:51,200 --> 01:18:51,920 Ми не знаємо. 1490 01:18:51,920 --> 01:18:53,810 >> Але все, що йде в Е-их стек викликів. 1491 01:18:53,810 --> 01:18:55,740 Це збирається виконати Printf. 1492 01:18:55,740 --> 01:18:56,830 Тоді Е зроблено. 1493 01:18:56,830 --> 01:18:57,820 Він повернеться. 1494 01:18:57,820 --> 01:18:58,960 Нарешті, головний робиться. 1495 01:18:58,960 --> 01:18:59,860 Головна повернеться. 1496 01:18:59,860 --> 01:19:02,020 І тоді наша програма. 1497 01:19:02,020 --> 01:19:02,480 Да? 1498 01:19:02,480 --> 01:19:04,505 >> АУДИТОРІЯ: Ви бачите [нерозбірливо] 1499 01:19:04,505 --> 01:19:05,900 Аргументи [нерозбірливо] 1500 01:19:05,900 --> 01:19:06,830 параметри? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: Так що є тонка різниця між аргументами і параметрами. 1502 01:19:09,970 --> 01:19:14,400 І дійсно, в загальній кажуть, люди, як правило, просто змішувати їх весь час. 1503 01:19:14,400 --> 01:19:17,550 Але параметри формальне назвати речі. 1504 01:19:17,550 --> 01:19:20,180 >> Так агдс і агду є Параметри На головну. 1505 01:19:20,180 --> 01:19:23,440 Аргументи, що ви насправді пройти в якості цих параметрів. 1506 01:19:23,440 --> 01:19:28,340 Так що, коли я дзвоню Foo з 4, 4 це аргумент я передаю в. 1507 01:19:28,340 --> 01:19:31,460 І параметр N, всередині Foo, приймає значення 4 1508 01:19:31,460 --> 01:19:32,880 з 4 був аргумент. 1509 01:19:32,880 --> 01:19:35,826 >> АУДИТОРІЯ: [нерозбірливо]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: н є локальною змінною в бар. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 н раніше місцевого до Foo, але це параметр, щоб Foo. 1513 01:19:44,960 --> 01:19:48,190 Це не локальна змінна. 1514 01:19:48,190 --> 01:19:48,546 Да? 1515 01:19:48,546 --> 01:19:51,180 >> АУДИТОРІЯ: [нерозбірливо]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: Foo просто викликає бар і повернення безвідносно штрих віддачу. 1517 01:19:55,400 --> 01:19:56,786 >> АУДИТОРІЯ: [нерозбірливо]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Так, просто щоб подивитися, багаторазового стек кадрів. 1519 01:19:59,591 --> 01:20:00,082 Да? 1520 01:20:00,082 --> 01:20:03,519 >> Зал: А чому був Foo називається до Printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Чому Foo викликається перед Printf? 1522 01:20:05,920 --> 01:20:10,740 Так що я міг мати, а не, то зробили як Int х дорівнює Foo з 4 1523 01:20:10,740 --> 01:20:12,980 а потім друкується х. 1524 01:20:12,980 --> 01:20:17,900 Але замість цього, я суміщав функції подзвонити в аргумент Е. 1525 01:20:17,900 --> 01:20:23,670 >> Але зверніть увагу, що ми не можемо насправді виконати виклик не PRINTF поки ми 1526 01:20:23,670 --> 01:20:25,610 з'ясувати, що Foo 4 є. 1527 01:20:25,610 --> 01:20:27,480 Так що ми збираємося оцінити цей. 1528 01:20:27,480 --> 01:20:32,504 І тільки один раз, що робиться збираються повернутися і оцінити це. 1529 01:20:32,504 --> 01:20:32,990 Да? 1530 01:20:32,990 --> 01:20:37,364 >> АУДИТОРІЯ: Оскільки і бар [нерозбірливо] 1531 01:20:37,364 --> 01:20:41,738 Значення, чому б нам не мати [нерозбірливо]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: Вони повністю повинні бути внутр. 1533 01:20:44,400 --> 01:20:46,260 Це не був спійманий за кілька проходів. 1534 01:20:46,260 --> 01:20:49,010 Так і повинно бути Int бар і Int Foo, так як обидва з них 1535 01:20:49,010 --> 01:20:50,460 повертаються цілі. 1536 01:20:50,460 --> 01:20:54,214 Пустота, тільки якщо вони не збираються повернутися фактичні значення. 1537 01:20:54,214 --> 01:20:54,692 Да? 1538 01:20:54,692 --> 01:20:58,038 >> АУДИТОРІЯ: Якщо ви мали рядок вище повернення [нерозбірливо]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: лінія над натомість? 1541 01:21:03,730 --> 01:21:04,410 >> АУДИТОРІЯ: Так. 1542 01:21:04,410 --> 01:21:10,780 Як якщо б ви зробили Е і [нерозбірливо], буде роздрукувати два рази? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Так всередині Foo? 1544 01:21:12,992 --> 01:21:15,945 Якби ми мали Printf прямо тут? 1545 01:21:15,945 --> 01:21:16,750 >> АУДИТОРІЯ: Так. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Так що, якщо у нас був PRINTF право тут, будуть друкуватися один раз. 1547 01:21:19,510 --> 01:21:23,400 Так ми називаємо Foo раз прямо тут, тоді ми будемо вдарив Printf. 1548 01:21:23,400 --> 01:21:24,620 Тоді ми будемо називати бар. 1549 01:21:24,620 --> 01:21:25,710 А потім Foo повернеться. 1550 01:21:25,710 --> 01:21:26,275 І ось саме. 1551 01:21:26,275 --> 01:21:30,985 Ми тільки коли стикаються з Е один раз. 1552 01:21:30,985 --> 01:21:31,482 Да? 1553 01:21:31,482 --> 01:21:32,973 >> АУДИТОРІЯ: [нерозбірливо] 1554 01:21:32,973 --> 01:21:37,950 Е виклику Foo, бо ми перші називаючи Printf а потім ми передаємо 1555 01:21:37,950 --> 01:21:38,580 аргументи. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Так в теорії, чи не Е виклику Foo? 1557 01:21:40,960 --> 01:21:42,220 Так ні. 1558 01:21:42,220 --> 01:21:47,360 Просто порядок, що з буде виконати ці речі є, перш ніж ми зможемо 1559 01:21:47,360 --> 01:21:49,800 викликати функцію, всі аргументи до функції повинні 1560 01:21:49,800 --> 01:21:51,600 бути повністю оцінені. 1561 01:21:51,600 --> 01:21:53,540 Так як це повністю оцінені? 1562 01:21:53,540 --> 01:21:54,610 Так, це просто рядок. 1563 01:21:54,610 --> 01:21:55,480 Це просто значення. 1564 01:21:55,480 --> 01:21:57,200 >> Тоді ми повинні повністю оцінити це. 1565 01:21:57,200 --> 01:21:59,720 Як тільки це буде зроблено, тепер все її аргументи оцінюються. 1566 01:21:59,720 --> 01:22:01,982 І тепер ми можемо зробити телефонуйте в Е. 1567 01:22:01,982 --> 01:22:02,478 Да? 1568 01:22:02,478 --> 01:22:03,966 >> АУДИТОРІЯ: Одне питання. 1569 01:22:03,966 --> 01:22:06,942 Якщо у вас є функція пустот, повинні у вас є зворотний коми? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: Ви не повернення коми якщо у вас є функція пустот. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 ОК. 1573 01:22:14,780 --> 01:22:15,830 Так що тепер деякі купа матеріал. 1574 01:22:15,830 --> 01:22:19,640 Так купи, як ми збираємося мати справу з управління динамічною пам'яттю. 1575 01:22:19,640 --> 01:22:23,100 І це безпосередньо контрастує з стек, який ми б назвали автоматичний 1576 01:22:23,100 --> 01:22:24,100 управління пам'яттю. 1577 01:22:24,100 --> 01:22:27,140 >> Так в стеці, ви ніколи не повинні справу з тим, як локальних змінних 1578 01:22:27,140 --> 01:22:30,400 штовхають і виштовхується все ці кадри стека і все таке. 1579 01:22:30,400 --> 01:22:31,070 Ви не повинні турбуватися про це. 1580 01:22:31,070 --> 01:22:32,070 Це автоматичний. 1581 01:22:32,070 --> 01:22:36,990 Так купа вручну. 1582 01:22:36,990 --> 01:22:38,070 І [нерозбірливо] 1583 01:22:38,070 --> 01:22:41,260 надходить з цих функцій Танос безкоштовно. 1584 01:22:41,260 --> 01:22:43,550 >> Так от ще програма. 1585 01:22:43,550 --> 01:22:47,145 Все, що ми робимо, mallocing цілим числом. 1586 01:22:47,145 --> 01:22:49,360 Ми зберігати його в зоряному х. 1587 01:22:49,360 --> 01:22:52,520 Звичайно, ми повинні перевірити щоб побачити, якщо х є недійсним. 1588 01:22:52,520 --> 01:22:56,400 Тоді ми йдемо просто встановити, що х вказує на 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Друкуйте те, що х вказує на, друк х, а потім безкоштовно х. 1591 01:23:03,260 --> 01:23:08,920 >> Так як це насправді буде виглядати якщо ми подивимося на нашу стека і купи? 1592 01:23:08,920 --> 01:23:10,950 Таким чином, ми почнемо знову. 1593 01:23:10,950 --> 01:23:12,580 У нижній частині нашої стек, як і раніше. 1594 01:23:12,580 --> 01:23:15,930 Пам'ятайте, що тебе купа безпосередньо виступає проти стек? 1595 01:23:15,930 --> 01:23:18,850 Таким чином, ми будемо мати верх нашого купи там. 1596 01:23:18,850 --> 01:23:22,590 >> Так в нижній частині нашого стека, у нас є наш кадр стека для основного. 1597 01:23:22,590 --> 01:23:28,000 Це має місце для ARGC, ARGV, і ми тепер мають локальну змінну х, які 1598 01:23:28,000 --> 01:23:30,030 є Int зірка. 1599 01:23:30,030 --> 01:23:32,240 Отже, ми збираємося для перебору за допомогою цієї програми. 1600 01:23:32,240 --> 01:23:34,420 Перше, що ми маємо, заклик до Танос. 1601 01:23:34,420 --> 01:23:36,250 >> Таким чином, ми робимо виклик Танос. 1602 01:23:36,250 --> 01:23:37,100 Malloc є функцією. 1603 01:23:37,100 --> 01:23:38,770 Це збирається отримати кадр стека. 1604 01:23:38,770 --> 01:23:40,180 Що ми переході до Malloc? 1605 01:23:40,180 --> 01:23:41,610 Це збирається йти всередину з кадру стека. 1606 01:23:41,610 --> 01:23:45,130 Ми проходження розмір п, що на 4. 1607 01:23:45,130 --> 01:23:49,700 Так що передається Танос. 1608 01:23:49,700 --> 01:23:50,910 >> Що Танос робити? 1609 01:23:50,910 --> 01:23:53,820 Вона захоплює нас деякий простір в купі. 1610 01:23:53,820 --> 01:23:55,320 Отже, ми збираємося піти в купі. 1611 01:23:55,320 --> 01:23:57,990 І ми збираємося захопити 4 байта з купи. 1612 01:23:57,990 --> 01:24:01,500 Так що давайте просто дати, що довільну адресу. 1613 01:24:01,500 --> 01:24:06,680 0x123 Просто робити вигляд, що це адреса, який знаходиться на купі. 1614 01:24:06,680 --> 01:24:12,300 >> Так що ж таке насправді всередині, що область пам'яті в адресному Ox123? 1615 01:24:12,300 --> 01:24:13,080 Сміття. 1616 01:24:13,080 --> 01:24:15,270 Таким чином, ми ще не записали нічого в ній. 1617 01:24:15,270 --> 01:24:18,830 Таким чином, наскільки ми знаємо, його може бути що завгодно. 1618 01:24:18,830 --> 01:24:20,560 Ви не повинні вважати, що це нульовий. 1619 01:24:20,560 --> 01:24:23,870 Це, швидше за все, не дорівнює нулю. 1620 01:24:23,870 --> 01:24:26,260 >> Так що тепер Malloc повертається. 1621 01:24:26,260 --> 01:24:28,020 І що ж нам робити, коли Malloc повертається? 1622 01:24:28,020 --> 01:24:29,800 Покладемо, що він повертає. 1623 01:24:29,800 --> 01:24:32,290 Покладемо х, рівні, що вона повертається. 1624 01:24:32,290 --> 01:24:33,690 Так що ж це повернення? 1625 01:24:33,690 --> 01:24:38,150 Це повернення 0x123 так як це адреса блоку пам'яті, який нього 1626 01:24:38,150 --> 01:24:40,850 просто виділяється в купі. 1627 01:24:40,850 --> 01:24:47,160 >> Так повернутися 0x123 х тепер збирається бути встановлений дорівнює 0x123, які, образно, 1628 01:24:47,160 --> 01:24:52,940 ми часто малювати як х, мають фактичне стрілка, що вказує на цей блок. 1629 01:24:52,940 --> 01:24:55,820 Але х просто зберігати цю адресу. 1630 01:24:55,820 --> 01:24:58,670 Так що тепер ми повинні перевірити, якщо х є недійсним. 1631 01:24:58,670 --> 01:24:59,120 Це не нуль. 1632 01:24:59,120 --> 01:25:02,170 Ми робимо вигляд, що що Танос вдалося. 1633 01:25:02,170 --> 01:25:04,950 >> Так що тепер зірка х дорівнює 50. 1634 01:25:04,950 --> 01:25:08,450 Так зірка пам'ятає це означає піти на цю адресу. 1635 01:25:08,450 --> 01:25:12,700 Так 0x123 Ми збираємося піти на цю адресу. 1636 01:25:12,700 --> 01:25:14,660 Так що підводить нас там. 1637 01:25:14,660 --> 01:25:16,310 Що ми робимо за цією адресою? 1638 01:25:16,310 --> 01:25:19,020 Ми зберігання 50. 1639 01:25:19,020 --> 01:25:22,500 >> Таким чином, після цієї лінії, тобто те, що речі будуть виглядати. 1640 01:25:22,500 --> 01:25:24,640 Так що тепер це вже не сміття там. 1641 01:25:24,640 --> 01:25:28,910 Тепер ми знаємо, що 50 полягає в тому, Зокрема адресу, тому що 1642 01:25:28,910 --> 01:25:32,410 ми встановлюємо його в тому, що. 1643 01:25:32,410 --> 01:25:32,790 ОК? 1644 01:25:32,790 --> 01:25:34,370 Так що тепер ми збираємося друкувати ф. 1645 01:25:34,370 --> 01:25:38,490 >> Отже, спочатку ми збираємося друкувати зірки х. 1646 01:25:38,490 --> 01:25:39,640 Так що ж таке зірка х? 1647 01:25:39,640 --> 01:25:44,300 Знову ж, зірка х означає піти річ, яка х вказує на. 1648 01:25:44,300 --> 01:25:47,140 Так х зберігання 0x123 Перейти до цього. 1649 01:25:47,140 --> 01:25:48,490 Ми отримуємо 50. 1650 01:25:48,490 --> 01:25:50,540 Так роздрукувати е, що. 1651 01:25:50,540 --> 01:25:54,900 А це значить, що це збирається друкувати 50. 1652 01:25:54,900 --> 01:25:56,850 А потім, що повертає. 1653 01:25:56,850 --> 01:25:58,340 >> І тоді у нас є друга Printf. 1654 01:25:58,340 --> 01:25:59,370 Тепер ми відсотків р. 1655 01:25:59,370 --> 01:26:01,680 Якщо ви ще не бачили його, що це просто, як ви надрукувати покажчик. 1656 01:26:01,680 --> 01:26:04,960 Тому у нас є процентне I, відсотків е, і всі ті, які вже. 1657 01:26:04,960 --> 01:26:07,160 Так відсотків р, друкувати покажчик. 1658 01:26:07,160 --> 01:26:08,920 >> Так х є покажчиком. 1659 01:26:08,920 --> 01:26:13,440 Так що, якщо ми збираємося друкувати х собі, Ми друкуємо те, що насправді всередині 1660 01:26:13,440 --> 01:26:19,220 х, що 0x123 Таким чином, перший друк е збирається друкувати 50. 1661 01:26:19,220 --> 01:26:23,620 Друга печатка е збирається друкувати 0x123 Да? 1662 01:26:23,620 --> 01:26:27,460 >> АУДИТОРІЯ: Ви користуєтеся відсотків х надрукувати покажчик? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Так що ви використовуєте відсотків х надрукувати покажчик? 1664 01:26:31,200 --> 01:26:38,350 Таким чином, ви можете, але відсотків х просто, взагалі, для, як якщо у вас є деякі 1665 01:26:38,350 --> 01:26:40,325 ціле, і ви хочете надрукувати це як шістнадцяткове. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 От тільки, як ти це робиш. 1668 01:26:44,880 --> 01:26:47,160 >> Беручи до уваги, відсотків г буде роздрукувати у вигляді десяткових чисел. 1669 01:26:47,160 --> 01:26:50,310 Це були ми отримати відсотків м я просто ціле. 1670 01:26:50,310 --> 01:26:52,690 відсотків р спеціально для покажчиків. 1671 01:26:52,690 --> 01:26:54,060 >> Так х є покажчиком. 1672 01:26:54,060 --> 01:26:56,360 Ми хочемо використовувати процентну р. 1673 01:26:56,360 --> 01:26:57,937 Але відсотків х міг працювати. 1674 01:26:57,937 --> 01:26:58,414 Да? 1675 01:26:58,414 --> 01:26:59,664 >> АУДИТОРІЯ: [нерозбірливо]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Так. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 По крайней мере, для цього call-- тому я не включати його в тут. 1680 01:27:13,440 --> 01:27:19,850 Але ці два аргументи обов'язково всередині цього кадру стека 1681 01:27:19,850 --> 01:27:23,040 поряд з будь-якими локальних змінних Е, трапляється, використовуючи. 1682 01:27:23,040 --> 01:27:27,020 І тоді, при наступному виклику PRINTF зараз всередині Printf кадр стека є 1683 01:27:27,020 --> 01:27:33,960 відсотків р зворотний слеш н і незалежно від значення х, яке є 0x123. 1684 01:27:33,960 --> 01:27:34,425 Да? 1685 01:27:34,425 --> 01:27:35,675 >> АУДИТОРІЯ: [нерозбірливо]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: Це буде друкувати то який виглядає наступним чином. 1688 01:27:40,880 --> 01:27:41,846 >> АУДИТОРІЯ: [нерозбірливо]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: Так він друкує його в адресному формі. 1690 01:27:44,510 --> 01:27:47,003 Це схоже на адресу. 1691 01:27:47,003 --> 01:27:47,494 Да? 1692 01:27:47,494 --> 01:27:49,458 >> АУДИТОРІЯ: [нерозбірливо]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Чому що? 1694 01:27:51,075 --> 01:27:52,920 >> АУДИТОРІЯ: [нерозбірливо]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Чому це покажчик 4 байта? 1696 01:27:55,240 --> 01:27:58,500 Таким чином, є ціла купа з 0-их перед цим. 1697 01:27:58,500 --> 01:28:03,740 Так що це дійсно 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 На 64-бітної системі, не було б ціла купа більш нулів. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Да? 1701 01:28:11,900 --> 01:28:13,150 >> АУДИТОРІЯ: [нерозбірливо]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Отже, перший Е збирається print-- 1704 01:28:21,130 --> 01:28:21,980 >> АУДИТОРІЯ: [нерозбірливо]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Так, це буде роздрукувати що х вказує на. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Зірка каже, що це річ вказуючи. 1708 01:28:29,070 --> 01:28:30,300 Захопіть його. 1709 01:28:30,300 --> 01:28:31,455 Так що ж це, вказуючи на? 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 Захопіть його. 1712 01:28:32,410 --> 01:28:33,390 Це те, що ми збираємося друкувати. 1713 01:28:33,390 --> 01:28:37,020 Беручи до уваги, наступний, ми просто друк х собі. 1714 01:28:37,020 --> 01:28:38,850 Що знаходиться всередині F? 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 ОК. 1717 01:28:44,500 --> 01:28:46,620 >> І ось, нарешті, у нас є вільна. 1718 01:28:46,620 --> 01:28:48,040 Що ми передаємо звільнити? 1719 01:28:48,040 --> 01:28:49,470 Ми проходження х. 1720 01:28:49,470 --> 01:28:52,380 У той час я фактично відображається це в кадрі стека. 1721 01:28:52,380 --> 01:28:56,370 >> Так ми передаємо значення 0x123 звільнити. 1722 01:28:56,370 --> 01:28:59,070 Так що тепер безкоштовно знає, все в порядку, Я повинен йти до купи 1723 01:28:59,070 --> 01:29:00,050 і безкоштовно, що пам'ять. 1724 01:29:00,050 --> 01:29:03,920 Це вже не використовувати те, що є за адресою 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> Так безкоштовно збирається випустити що з купи. 1726 01:29:07,010 --> 01:29:09,490 Тепер наша купа знову порожній. 1727 01:29:09,490 --> 01:29:11,120 У нас немає ніяких витоків пам'яті. 1728 01:29:11,120 --> 01:29:12,940 Тепер безкоштовно повернеться. 1729 01:29:12,940 --> 01:29:16,130 Зверніть увагу, що до цих пір х 0x123. 1730 01:29:16,130 --> 01:29:18,240 Але що тепер не дійсні пам'яті. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Ми повинні більше разименовиванія х. 1733 01:29:23,986 --> 01:29:24,440 Да? 1734 01:29:24,440 --> 01:29:27,240 >> Зали: повернутися 0 зайвим? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: Є RETUREN 0 зайвим? 1736 01:29:28,290 --> 01:29:31,110 Так. 1737 01:29:31,110 --> 01:29:33,950 Ми просто покласти, що там, бо у нас є повернення один для повітря. 1738 01:29:33,950 --> 01:29:36,830 Так що це, як, так, дозволяє включати повернення 0. 1739 01:29:36,830 --> 01:29:37,310 Да? 1740 01:29:37,310 --> 01:29:38,560 >> АУДИТОРІЯ: [нерозбірливо]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: Таким чином, після вільних х, що станеться, якщо ми спробі разименованія покажчика? 1743 01:29:45,580 --> 01:29:47,240 Цілком можливо, що все йде як треба. 1744 01:29:47,240 --> 01:29:49,330 Цілком можливо, що ми все одно отримаєте 50. 1745 01:29:49,330 --> 01:29:53,590 >> Можливо, також, що ця пам'ять в даний час використовується для іншого. 1746 01:29:53,590 --> 01:29:57,140 Так що це невизначене поведінку. 1747 01:29:57,140 --> 01:30:00,772 І не визначено означає нічого може трапитися. 1748 01:30:00,772 --> 01:30:01,250 Да? 1749 01:30:01,250 --> 01:30:02,500 >> АУДИТОРІЯ: [нерозбірливо]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: Ні, так що якщо ви призначаєте х на інше. 1752 01:30:10,830 --> 01:30:15,870 Так що, якщо тут ми сказали х дорівнює Танос то else-- 1753 01:30:15,870 --> 01:30:17,100 Танос розмір event-- 1754 01:30:17,100 --> 01:30:20,180 те, що вихідний блок пам'яті не звільняється. 1755 01:30:20,180 --> 01:30:21,490 І ми офіційно втратив його. 1756 01:30:21,490 --> 01:30:23,150 Тобто витік пам'яті. 1757 01:30:23,150 --> 01:30:25,090 Ми втратили всі посилання в цьому блоці пам'яті. 1758 01:30:25,090 --> 01:30:26,827 Так що немає ніякого способу, ми можемо або звільнити його. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 Отже, потім повернутися 0 кошти зробили. 1761 01:30:36,630 --> 01:30:37,900 >> Гаразд, так переповнення стека. 1762 01:30:37,900 --> 01:30:39,320 У чому ідея тут? 1763 01:30:39,320 --> 01:30:41,210 Так що пам'ятайте, купа йде вниз. 1764 01:30:41,210 --> 01:30:43,480 Стек зростає. 1765 01:30:43,480 --> 01:30:48,000 Так що це був приклад з лекції, Я думаю, де основним тільки збирається 1766 01:30:48,000 --> 01:30:51,380 Викликайте цю функцію Фу, яка збирається називати себе рекурсивно над і 1767 01:30:51,380 --> 01:30:52,320 знову і знову. 1768 01:30:52,320 --> 01:30:55,370 >> Так стек кадрів збираються працювати точно так же. 1769 01:30:55,370 --> 01:30:58,130 Таким чином, ми збираємося почати з головної в якості нижнього кадру стека. 1770 01:30:58,130 --> 01:31:02,000 Тоді головний збирається подзвонити Foo, який збирається отримати кадр стека. 1771 01:31:02,000 --> 01:31:04,260 >> Тоді Foo збирається подзвонити Foo знову, яка збирається отримати 1772 01:31:04,260 --> 01:31:05,500 другий фрейм стека. 1773 01:31:05,500 --> 01:31:08,270 І тоді знову, і знову, і знову, і знову, поки, зрештою, ми не запустити 1774 01:31:08,270 --> 01:31:09,190 в купу. 1775 01:31:09,190 --> 01:31:11,990 Так що це, як ми отримуємо переповнення стека. 1776 01:31:11,990 --> 01:31:14,910 І в цей момент, ви SEG несправність. 1777 01:31:14,910 --> 01:31:17,335 Або ви дійсно SEG провини перед ця точка, але так. 1778 01:31:17,335 --> 01:31:19,660 >> АУДИТОРІЯ: дампа пам'яті чи ж, як SEG вини? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Таким чином, ви побачите сегментацію Ядро вина скидали. 1780 01:31:26,140 --> 01:31:28,760 Ви отримуєте дамп коли Ви SEG несправність. 1781 01:31:28,760 --> 01:31:32,580 І це як звалище все вміст вашої поточної пам'яті так 1782 01:31:32,580 --> 01:31:36,670 що ви можете спробувати і визначити чому ви SEG порушеними. 1783 01:31:36,670 --> 01:31:37,135 Да? 1784 01:31:37,135 --> 01:31:38,385 >> АУДИТОРІЯ: [нерозбірливо]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Так засіб помилки сегментації є переповнення стека. 1787 01:31:45,460 --> 01:31:47,060 Так що не обов'язково. 1788 01:31:47,060 --> 01:31:49,880 Сегментація вина означає, що ви дотики пам'яті таким чином, 1789 01:31:49,880 --> 01:31:50,880 Ви не повинні бути. 1790 01:31:50,880 --> 01:31:54,750 Так один із способів такого випадку, коли Ви переповнення стека, ми починаємо зворушливо 1791 01:31:54,750 --> 01:31:58,736 пам'яті таким чином, що ми не повинні бути. 1792 01:31:58,736 --> 01:31:59,208 Да? 1793 01:31:59,208 --> 01:32:00,458 >> АУДИТОРІЯ: [нерозбірливо]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Так всередині нескінченного циклу. 1796 01:32:05,830 --> 01:32:08,770 Мовляв, це як рекурсивної нескінченного петлі і таким чином ми отримуємо ще один 1797 01:32:08,770 --> 01:32:09,770 фрейм стека кожного разу. 1798 01:32:09,770 --> 01:32:13,540 Але тільки всередині регулярним нескінченна, а одно-- 1799 01:32:13,540 --> 01:32:16,390 добре, давайте навіть не друкувати F-- 1800 01:32:16,390 --> 01:32:17,040 щось робити. 1801 01:32:17,040 --> 01:32:18,390 Незалежно. 1802 01:32:18,390 --> 01:32:20,610 >> Ми не збираємося отримувати другий фрейм стека. 1803 01:32:20,610 --> 01:32:22,530 Ми просто будемо продовжувати зациклення над цієї однієї інструкції. 1804 01:32:22,530 --> 01:32:23,920 Стек не росте. 1805 01:32:23,920 --> 01:32:27,290 Це те, що кожен рекурсивний виклик дає нам фрейм стека. 1806 01:32:27,290 --> 01:32:31,231 Ось чому ми отримуємо переповнення стека. 1807 01:32:31,231 --> 01:32:31,728 Да? 1808 01:32:31,728 --> 01:32:38,189 >> АУДИТОРІЯ: Так що, якщо ви сказали, щоб отримати в той час як цикл, а потім [нерозбірливо]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Так що якщо всередині той час циклу був Е, ви все ще буде 1810 01:32:42,000 --> 01:32:42,790 НЕ SEG вина. 1811 01:32:42,790 --> 01:32:46,090 Я просто не хочу, щоб заплутати речі. 1812 01:32:46,090 --> 01:32:46,610 Було б цикл. 1813 01:32:46,610 --> 01:32:48,225 Ви б отримати єдину стопку кадр для Printf. 1814 01:32:48,225 --> 01:32:49,580 >> Тоді Е повернеться. 1815 01:32:49,580 --> 01:32:50,280 Тоді ви знову б петлю. 1816 01:32:50,280 --> 01:32:51,460 Ви б отримати єдину стопку кадр для Printf. 1817 01:32:51,460 --> 01:32:52,850 Це повернеться. 1818 01:32:52,850 --> 01:32:54,060 Одномісний кадр стека. 1819 01:32:54,060 --> 01:33:00,215 Так ви не отримуєте це нескінченне нагромадження кадри стека. 1820 01:33:00,215 --> 01:33:03,185 >> АУДИТОРІЯ: [нерозбірливо]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Так. 1822 01:33:04,040 --> 01:33:09,360 Так що це переповнення стека відбувається тому жоден з них 1823 01:33:09,360 --> 01:33:11,600 дзвінки на Foo повертаються. 1824 01:33:11,600 --> 01:33:15,250 Так що, якщо ми повернемося, то ми б починають втрачати кадри стека. 1825 01:33:15,250 --> 01:33:17,870 І тоді ми б не переповнення стека. 1826 01:33:17,870 --> 01:33:20,070 І ось чому вам потрібен базовий варіант для ваших особистих функцій. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Да? 1829 01:33:23,479 --> 01:33:27,375 >> АУДИТОРІЯ: Чи є даний потенційний розмір і стек для купи ж для 1830 01:33:27,375 --> 01:33:29,880 всі програми? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Грубо. 1832 01:33:31,910 --> 01:33:35,090 Чи є даний потенційний розмір стека і купа однакові для всіх програм? 1833 01:33:35,090 --> 01:33:37,180 Грубо. 1834 01:33:37,180 --> 01:33:40,080 Існує деяка рандомізації до де починається стека і 1835 01:33:40,080 --> 01:33:42,400 де купа починається. 1836 01:33:42,400 --> 01:33:45,870 Якщо вам пощастило мати купу глобальні змінні і речі, ви могли б 1837 01:33:45,870 --> 01:33:49,520 забрати з деякого простору для купи. 1838 01:33:49,520 --> 01:33:54,060 >> На 64-бітної системі, ви практично мають нескінченну пам'ять. 1839 01:33:54,060 --> 01:33:55,820 Там просто так багато. 1840 01:33:55,820 --> 01:33:59,250 Між 32 біт і 64 біт, що значна різниця. 1841 01:33:59,250 --> 01:34:02,350 >> Ви збираєтеся отримати набагато більше стек і купа місця на 64-бітної 1842 01:34:02,350 --> 01:34:05,810 Система бо просто більше адрес, які вони можуть використовувати. 1843 01:34:05,810 --> 01:34:09,360 Але на індивідуальної системи, вона буде бути приблизно така ж кількість стека 1844 01:34:09,360 --> 01:34:10,785 і купа простір. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 Добре. 1847 01:34:15,530 --> 01:34:18,220 >> Так останнє, що є компіляція. 1848 01:34:18,220 --> 01:34:19,810 Таким чином, ви повинні знати цей процес. 1849 01:34:19,810 --> 01:34:22,240 Є чотири великі кроки. 1850 01:34:22,240 --> 01:34:24,400 Таким чином, перший слід легко запам'ятати. 1851 01:34:24,400 --> 01:34:25,085 Попередня обробка. 1852 01:34:25,085 --> 01:34:28,390 Він має префікс попередньо в ньому. 1853 01:34:28,390 --> 01:34:32,080 Так справа доходить до всього іншого. 1854 01:34:32,080 --> 01:34:34,000 >> Важливо пам'ятати, хеш. 1855 01:34:34,000 --> 01:34:37,250 Так хеш визначає та хеш включає у всіх тих. 1856 01:34:37,250 --> 01:34:39,560 Це все попередньо процесор директиви. 1857 01:34:39,560 --> 01:34:42,030 Це ті речі, що попередньої обробки піклується о. 1858 01:34:42,030 --> 01:34:43,680 >> Отже, що ж попередньо процесор робити? 1859 01:34:43,680 --> 01:34:44,850 Це дійсно тупий річ. 1860 01:34:44,850 --> 01:34:49,380 Все це здатне всі з них копіювання, і вирізати і вставляти операції. 1861 01:34:49,380 --> 01:34:51,790 >> Так хеш включає стандартний i0 точка годину. 1862 01:34:51,790 --> 01:34:52,990 Що це робить? 1863 01:34:52,990 --> 01:34:56,610 Це захоплення стандартний i0 точка годину подати і вставити його у верхній 1864 01:34:56,610 --> 01:34:58,960 там, де вона говорить хеш включає Стандарт i0 точка ч. 1865 01:34:58,960 --> 01:35:02,480 >> І будь-який хеш визначити, що ми бачив, що те, що робиш? 1866 01:35:02,480 --> 01:35:06,730 Його копіювання значення, що хеш визначено визначається як і вставка, що 1867 01:35:06,730 --> 01:35:08,500 скрізь, де ви використовуєте значення. 1868 01:35:08,500 --> 01:35:13,400 Так препроцесор просто робить дійсно Операції, засновані простий текст. 1869 01:35:13,400 --> 01:35:15,870 Він нічого не робить смарт. 1870 01:35:15,870 --> 01:35:18,920 Так все інше більш складним. 1871 01:35:18,920 --> 01:35:22,970 >> Так що тепер препроцесор зробити, ми насправді компіляції. 1872 01:35:22,970 --> 01:35:24,320 Отже, що ж компіляції на увазі? 1873 01:35:24,320 --> 01:35:27,310 Тепер ми збираємося з С-код в коді збірки. 1874 01:35:27,310 --> 01:35:27,570 Да? 1875 01:35:27,570 --> 01:35:28,820 >> АУДИТОРІЯ: [нерозбірливо]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Так, ми зловили, що. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 Так компіляції. 1880 01:35:38,660 --> 01:35:40,310 Ми збираємося від с до збірки. 1881 01:35:40,310 --> 01:35:42,470 Так що це фактична зміна мови. 1882 01:35:42,470 --> 01:35:45,240 Компіляція себе означає перехід від на мові високого рівня в 1883 01:35:45,240 --> 01:35:47,340 нижче рівень мови. 1884 01:35:47,340 --> 01:35:50,720 >> І с є мовою високого рівня в порівнянні з зібрання. 1885 01:35:50,720 --> 01:35:52,320 Що таке збірка? 1886 01:35:52,320 --> 01:35:56,440 Його інструкції, які, в значній багато, зробив для вашого процесора. 1887 01:35:56,440 --> 01:35:59,130 Але комп'ютер все ще робить не розумію збірку. 1888 01:35:59,130 --> 01:36:01,570 Це розуміє лише нулі й одиниці. 1889 01:36:01,570 --> 01:36:06,160 Так що наступний крок це збірка, яка приводить нас від цих інструкцій, 1890 01:36:06,160 --> 01:36:08,760 ваш процесор розуміє і фактично переводить їх, щоб 1891 01:36:08,760 --> 01:36:10,820 одиниці і нулі. 1892 01:36:10,820 --> 01:36:13,570 >> Так C до збірки в двійковий. 1893 01:36:13,570 --> 01:36:15,870 Але у мене немає виконуваний ще. 1894 01:36:15,870 --> 01:36:19,550 Так що думайте бібліотеки CS50. 1895 01:36:19,550 --> 01:36:23,070 Ми надали вам довічного для це CS50 бібліотека, яка має GetString 1896 01:36:23,070 --> 01:36:24,400 і GetInt і все таке. 1897 01:36:24,400 --> 01:36:25,700 >> Але CS50 library-- 1898 01:36:25,700 --> 01:36:27,650 в і з в тому: чи не є виконуваним. 1899 01:36:27,650 --> 01:36:29,570 Це не має головну функцію. 1900 01:36:29,570 --> 01:36:32,230 Це просто купа двійковий що ви можете використовувати. 1901 01:36:32,230 --> 01:36:41,730 Так зв'язування як ми збираємо всі з цих різних бінарних файлів 1902 01:36:41,730 --> 01:36:43,110 в фактичний виконуваний файл. 1903 01:36:43,110 --> 01:36:45,900 Той, який ви можете ввести точка слеш точку з. 1904 01:36:45,900 --> 01:36:51,660 >> Так що це, як файл, який написав, - все, що ваша програма is-- 1905 01:36:51,660 --> 01:36:53,620 Цезар точка с. 1906 01:36:53,620 --> 01:36:55,100 Але тепер він був складений вниз в двійковий. 1907 01:36:55,100 --> 01:36:56,480 Так Цезар точка о. 1908 01:36:56,480 --> 01:36:59,620 І це наша CS50 бібліотеки бінарний. 1909 01:36:59,620 --> 01:37:02,284 І вони поєднуючись в єдиний виконуваний файл. 1910 01:37:02,284 --> 01:37:02,758 Да? 1911 01:37:02,758 --> 01:37:04,008 >> АУДИТОРІЯ: [нерозбірливо]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Отже, спочатку включають, пам'ятайте, хеш включають фактично 1914 01:37:12,710 --> 01:37:13,810 попередньої обробки крок. 1915 01:37:13,810 --> 01:37:14,750 Але це окрема. 1916 01:37:14,750 --> 01:37:20,730 Якщо ви не використовуєте будь-які функції, які знаходяться за межами вашого одному файлі, то, 1917 01:37:20,730 --> 01:37:26,100 ні, ви не повинні пов'язати нічого так у вас є все. 1918 01:37:26,100 --> 01:37:30,310 >> Тим не менш, Е ув'язується в. 1919 01:37:30,310 --> 01:37:32,820 Якщо Ви ніколи не використовувати Printf, це те, що , Який повинен бути пов'язаний в 1920 01:37:32,820 --> 01:37:35,740 тому що ви не пишете, що. 1921 01:37:35,740 --> 01:37:39,530 І справді, Е автоматично пов'язані в. 1922 01:37:39,530 --> 01:37:42,760 Ви знаєте, як в командному рядку або коли ви вводите зробити, ви бачите, що є 1923 01:37:42,760 --> 01:37:46,690 тире л CS50, який має посилання в бібліотеці CS50? 1924 01:37:46,690 --> 01:37:49,070 Printf, і все в такому дусі, що відбувається , Пов'язані автоматично. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Будь-які інші питання по темі? 1927 01:37:53,930 --> 01:37:56,280 >> АУДИТОРІЯ: [нерозбірливо]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: Зв'язування? 1929 01:37:58,300 --> 01:38:03,450 У нас є цілий букет різні бінарні файли. 1930 01:38:03,450 --> 01:38:06,410 Це канонічний приклад що ми використовуємо це бібліотека CS50. 1931 01:38:06,410 --> 01:38:09,960 Ми зібрали і дано вам в двійковий для цього CS50 бібліотеки. 1932 01:38:09,960 --> 01:38:12,410 >> Ви хочете використовувати GetString у вашій програмі. 1933 01:38:12,410 --> 01:38:14,750 Так ви йдете і використовувати GetString. 1934 01:38:14,750 --> 01:38:19,700 Але без мого довічним коді для GetString, при компіляції коду 1935 01:38:19,700 --> 01:38:23,140 вниз, ви не змогли запустити свій Програма тому GetString Рядок 1936 01:38:23,140 --> 01:38:25,080 ще не повністю визначені. 1937 01:38:25,080 --> 01:38:29,220 >> Це тільки при посиланні на мій двійковий що містить GetString що тепер, все 1938 01:38:29,220 --> 01:38:31,130 Добре, я можу насправді виконати GetString. 1939 01:38:31,130 --> 01:38:32,330 Мій файл завершена. 1940 01:38:32,330 --> 01:38:34,208 І я можу запустити цей. 1941 01:38:34,208 --> 01:38:34,697 Да? 1942 01:38:34,697 --> 01:38:37,631 >> АУДИТОРІЯ: Чи конвертувати лінковку бінарний до виконуваним? 1943 01:38:37,631 --> 01:38:42,032 Так що навіть якщо у вас немає друга бібліотеки, чи не буде ще буде 1944 01:38:42,032 --> 01:38:44,477 необхідно перевести [Нерозбірливо]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Так виконуваний як і раніше в двійковій системі. 1946 01:38:48,640 --> 01:38:51,750 Це просто об'єднання ціле купа виконуваних файлів. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> АУДИТОРІЯ: Величезне спасибі. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Немає проблем. 1950 01:38:58,560 --> 01:38:59,540 Ще питання? 1951 01:38:59,540 --> 01:39:02,001 В іншому випадку, ми все готово. 1952 01:39:02,001 --> 01:39:02,690 Добре. 1953 01:39:02,690 --> 01:39:02,990 Завдяки. 1954 01:39:02,990 --> 01:39:03,590 >> [Оплески] 1955 01:39:03,590 --> 01:39:04,490 >> Зали: Спасибо. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Так. 1957 01:39:05,740 --> 01:39:06,582