1 00:00:00,000 --> 00:00:00,960 2 00:00:00,960 --> 00:00:03,360 >> [Музика, яка грає] 3 00:00:03,360 --> 00:00:11,050 4 00:00:11,050 --> 00:00:12,065 >> DAVIN: Гаразд, хлопці. 5 00:00:12,065 --> 00:00:13,642 6 00:00:13,642 --> 00:00:15,350 Так що це огляд в перший вікторини. 7 00:00:15,350 --> 00:00:17,751 Всі готові до вікторина в середу? 8 00:00:17,751 --> 00:00:18,292 Елісон: Woo! 9 00:00:18,292 --> 00:00:18,743 СТУДЕНТ: Woo! 10 00:00:18,743 --> 00:00:19,242 DAVIN: Так. 11 00:00:19,242 --> 00:00:19,920 Елісон: Так! 12 00:00:19,920 --> 00:00:20,920 DAVIN: Цей хлопець готовий. 13 00:00:20,920 --> 00:00:22,200 Цей хлопець, дві руки, приємно. 14 00:00:22,200 --> 00:00:23,234 15 00:00:23,234 --> 00:00:25,900 Так вікторина огляд сьогодні, це буде бути близько години-півтори. 16 00:00:25,900 --> 00:00:27,940 Ми збираємося перейти всі основні Поняття, ви повинні знати для вікторини. 17 00:00:27,940 --> 00:00:31,434 Ми збираємося піти протягом деякого кодування по приклади рук, які на кожному вікторини. 18 00:00:31,434 --> 00:00:34,350 І якщо у вас є питання, не соромтеся підняти руку і все 19 00:00:34,350 --> 00:00:34,945 як що. 20 00:00:34,945 --> 00:00:36,695 Ну, логістика близько вікторина онлайн. 21 00:00:36,695 --> 00:00:38,450 Отже, ми збираємося розділити людей на різні номери. 22 00:00:38,450 --> 00:00:39,491 Він заснований на їх ім'я. 23 00:00:39,491 --> 00:00:43,630 Так що якщо у вас є які-небудь питання про те, де йти або про те, що матеріал, як, 24 00:00:43,630 --> 00:00:46,810 офіційне слово на тому, що відбувається щоб бути на вікторині, перевірити в Інтернеті. 25 00:00:46,810 --> 00:00:48,420 І це все в курсі. 26 00:00:48,420 --> 00:00:51,280 Так що, якщо немає запитань до Почнемо з того, що ми збираємося почати. 27 00:00:51,280 --> 00:00:52,790 28 00:00:52,790 --> 00:00:53,710 І ось Еллісон. 29 00:00:53,710 --> 00:00:56,060 30 00:00:56,060 --> 00:00:57,000 >> [Плескає] 31 00:00:57,000 --> 00:00:59,300 >> Елісон: ОК, спасибі, Роб. 32 00:00:59,300 --> 00:01:00,280 Цінуйте це. 33 00:01:00,280 --> 00:01:01,350 34 00:01:01,350 --> 00:01:03,050 Девін повинен перекинувся на це. 35 00:01:03,050 --> 00:01:07,240 Це не вичерпний список Теми, як завжди, як Девін щойно сказав. 36 00:01:07,240 --> 00:01:10,860 Зверніться до документації онлайн про вікторині нульовий. 37 00:01:10,860 --> 00:01:13,680 Але це досить much-- це на навчальній 38 00:01:13,680 --> 00:01:15,550 це все, що ми перейшли до теперішнього часу. 39 00:01:15,550 --> 00:01:18,290 Все тут чесна гра, а також що-небудь ще 40 00:01:18,290 --> 00:01:21,380 що, можливо, були згадані в доповіді. 41 00:01:21,380 --> 00:01:25,070 >> Мій розділ, тут, є просто багато огляду. 42 00:01:25,070 --> 00:01:27,775 Є пара вправ що ви, хлопці, могли б працювати. 43 00:01:27,775 --> 00:01:30,650 Але здебільшого, ми дійсно хочу, щоб дістатися до Девін з тих коду 44 00:01:30,650 --> 00:01:31,710 ручними вправ. 45 00:01:31,710 --> 00:01:33,940 >> Тому я збираюся летіти через це. 46 00:01:33,940 --> 00:01:36,330 Якщо у вас є які-небудь питання, зупинити мене. 47 00:01:36,330 --> 00:01:37,270 Підніміть руку. 48 00:01:37,270 --> 00:01:39,250 Я обіцяю, що я, ймовірно, бачити вас. 49 00:01:39,250 --> 00:01:41,042 Якщо ні, то просто махнути його навколо. 50 00:01:41,042 --> 00:01:42,250 Я буду говорити швидко. 51 00:01:42,250 --> 00:01:43,950 Я сподіваюся, що все в порядку з цим. 52 00:01:43,950 --> 00:01:48,020 >> ОК, спеціальне слово, Девін, очевидно, забув перегортати ці слайди. 53 00:01:48,020 --> 00:01:51,880 [Сміється] Ти в біді, чоловік. 54 00:01:51,880 --> 00:01:55,770 Так рад для вікторини нульовою, практиці кодування на папері. 55 00:01:55,770 --> 00:01:58,950 Ви, хлопці, збираєтеся отримати деякі практикувати с, що в даний час з Девін, 56 00:01:58,950 --> 00:02:00,655 так що ви не будете повністю самостійно. 57 00:02:00,655 --> 00:02:03,030 Я думаю, що ми насправді відбувається через цих двох функцій. 58 00:02:03,030 --> 00:02:04,500 Таким чином, ви будете добре підготовлені є. 59 00:02:04,500 --> 00:02:05,958 >> Ознайомитися зі своїми проблемними наборів. 60 00:02:05,958 --> 00:02:08,150 Там були питання на попередніх опитувань 61 00:02:08,150 --> 00:02:12,680 що проситиме вас, наприклад, для кодування до чогось дуже схоже на Маріо. 62 00:02:12,680 --> 00:02:15,060 Так будучи добре знайомий з Ваша проблема встановлює, а також 63 00:02:15,060 --> 00:02:17,827 як питання, які ми просимо Вас на початку на формі 64 00:02:17,827 --> 00:02:19,660 що ви заповнюєте, буде служити вам дуже добре. 65 00:02:19,660 --> 00:02:20,940 66 00:02:20,940 --> 00:02:23,380 >> У попереднього вікторину під тимчасові обмеження. 67 00:02:23,380 --> 00:02:25,430 Ці вікторини довгі. 68 00:02:25,430 --> 00:02:26,850 Час іде дуже швидко. 69 00:02:26,850 --> 00:02:30,480 І часто, ви не розумієте, як швидко він іде до вас насправді 70 00:02:30,480 --> 00:02:32,180 поставити себе відповідно до цих обмеженнями. 71 00:02:32,180 --> 00:02:36,500 Так що, якщо ви можете просто вирізати, ви знаєте, 75 хвилин, або сьогодні ввечері або завтра 72 00:02:36,500 --> 00:02:41,020 взяти один з цих вікторинах під що, ви будете в набагато кращій формі. 73 00:02:41,020 --> 00:02:43,060 >> А також, створюючи свій опорний лист. 74 00:02:43,060 --> 00:02:45,290 Пам'ятайте, ви отримуєте один сторінка спереду і ззаду 75 00:02:45,290 --> 00:02:47,040 в якості посилання для вашого вікторини в середу. 76 00:02:47,040 --> 00:02:49,074 Створення, що це відмінний спосіб для вивчення. 77 00:02:49,074 --> 00:02:51,990 Все, що у вас виникли проблеми з ви хочете включити там. 78 00:02:51,990 --> 00:02:55,627 Все, що ваші ТФ були, як, це дійсно важливо. 79 00:02:55,627 --> 00:02:57,960 Ви повинні це знати, є може бути, все у вас там 80 00:02:57,960 --> 00:02:59,931 якщо у вас немає їх запам'ятав. 81 00:02:59,931 --> 00:03:02,680 Навіть якщо ви знаєте їх дійсно добре, іноді маючи його на є 82 00:03:02,680 --> 00:03:07,030 це просто якась комфорту для вас, які я знаю, вікторини викликають стрес. 83 00:03:07,030 --> 00:03:09,260 Таким чином, будь комфорт ви отримаєте може допомогти. 84 00:03:09,260 --> 00:03:13,072 Гаразд, також, виспатися і їдять і як нормальні речі 85 00:03:13,072 --> 00:03:14,280 що ми говоримо вам, для вікторини. 86 00:03:14,280 --> 00:03:16,320 87 00:03:16,320 --> 00:03:18,890 >> Так, починаючи з простого, типи даних і розміри. 88 00:03:18,890 --> 00:03:22,720 Як я вже сказав, це просто буде щоб бути мені кидати багато матеріалу 89 00:03:22,720 --> 00:03:24,320 тут, що ви повинні знати. 90 00:03:24,320 --> 00:03:27,600 Тому у нас є наші символи які один байт, Інтс 91 00:03:27,600 --> 00:03:30,390 що чотири байта, довго довго, що вісім байт. 92 00:03:30,390 --> 00:03:33,280 В основному, це просто ви хочу тримати великі цілі числа. 93 00:03:33,280 --> 00:03:35,490 Пливе, які є чотири, подвоюється, які вісім. 94 00:03:35,490 --> 00:03:38,150 Знову ж, просто дає вам більш простір для ваших поплавців. 95 00:03:38,150 --> 00:03:41,290 І потім введіть зірку, так що будь покажчик на 32-бітної машині, 96 00:03:41,290 --> 00:03:44,650 який всі ви, хлопці, повинні знати, на чотири байти. 97 00:03:44,650 --> 00:03:46,542 >> Таким чином, всі речі, які ви повинні знаю, може бути, речі 98 00:03:46,542 --> 00:03:48,250 Ви хочете, щоб на Ваше посилання лист. 99 00:03:48,250 --> 00:03:50,350 100 00:03:50,350 --> 00:03:53,520 ОК, двійковий перетворення в двійковий, перетворення 101 00:03:53,520 --> 00:03:56,860 в шестнадцатеричное, назад і вперед, всі речі, які ви повинні знати. 102 00:03:56,860 --> 00:03:59,480 Так з двійкової системи числення в десяткову. 103 00:03:59,480 --> 00:04:03,309 Ви, хлопці, хочете, щоб взяти швидкий хвилину і спробувати з'ясувати, кожен з них 104 00:04:03,309 --> 00:04:04,600 а потім скажіть мені, що вони? 105 00:04:04,600 --> 00:04:06,500 106 00:04:06,500 --> 00:04:10,240 >> У мене також є цукерки в моїй сумці, так що будь хто відповідає отримує цукерки, до речі. 107 00:04:10,240 --> 00:04:13,560 108 00:04:13,560 --> 00:04:14,480 І в мене є багато чого з нього. 109 00:04:14,480 --> 00:04:15,760 110 00:04:15,760 --> 00:04:16,870 Дозвольте мені взяти це. 111 00:04:16,870 --> 00:04:18,480 Я збираюся дати це Гейб. 112 00:04:18,480 --> 00:04:21,829 Таким чином, ви можете роздавати цукерки хто добре і кооператив. 113 00:04:21,829 --> 00:04:23,490 >> ОК, я побачив руку там в спину. 114 00:04:23,490 --> 00:04:26,418 115 00:04:26,418 --> 00:04:28,370 >> СТУДЕНТ: Так, перший з них 42. 116 00:04:28,370 --> 00:04:30,280 >> Елісон: Так, перший 42, правильно. 117 00:04:30,280 --> 00:04:31,163 118 00:04:31,163 --> 00:04:32,038 СТУДЕНТ: [нерозбірливо]. 119 00:04:32,038 --> 00:04:34,810 [Сміх] 120 00:04:34,810 --> 00:04:37,030 Елісон: другий, Є ще в жовтий? 121 00:04:37,030 --> 00:04:38,910 СТУДЕНТ: 110010. 122 00:04:38,910 --> 00:04:43,410 Елісон: Правильно, і це Останній, тут, на дні? 123 00:04:43,410 --> 00:04:44,570 Крім того, так, ви знаєте, хочете? 124 00:04:44,570 --> 00:04:45,550 Просто викинути цукерки. 125 00:04:45,550 --> 00:04:46,483 Як щодо цукерок для всіх? 126 00:04:46,483 --> 00:04:47,510 >> СТУДЕНТ: [нерозбірливо], коли ми закінчимо. 127 00:04:47,510 --> 00:04:48,051 >> Елісон: Тсс. 128 00:04:48,051 --> 00:04:49,380 129 00:04:49,380 --> 00:04:50,910 І тоді останній. 130 00:04:50,910 --> 00:04:52,000 Хто хоче відповісти? 131 00:04:52,000 --> 00:04:52,744 Прямо там. 132 00:04:52,744 --> 00:04:54,480 >> СТУДЕНТ: 11100. 133 00:04:54,480 --> 00:04:56,820 >> Елісон: 11100, подивіться на це. 134 00:04:56,820 --> 00:04:58,790 Поздоровляю, відмінна робота, все. 135 00:04:58,790 --> 00:05:03,370 ОК, все начебто розумію процес для цього? 136 00:05:03,370 --> 00:05:08,700 Ви, йдучи з двійкової системи числення в десяткову так я, як правило, роблять це, як виписуючи 137 00:05:08,700 --> 00:05:09,920 повноваження 2. 138 00:05:09,920 --> 00:05:18,350 Тому я говорю, добре, 0 рази 2 в 0, так це 0, 1 раз 2 в перший, 139 00:05:18,350 --> 00:05:21,400 2 збирається і далі таким чином. 140 00:05:21,400 --> 00:05:25,790 Хтось хоче, щоб я явно чи пройти прикладу двійковий? 141 00:05:25,790 --> 00:05:26,840 142 00:05:26,840 --> 00:05:28,140 Добре, прохолодно. 143 00:05:28,140 --> 00:05:30,390 >> Десяткова двійковий дуже схожий. 144 00:05:30,390 --> 00:05:31,550 145 00:05:31,550 --> 00:05:33,630 Я, як правило, виписують повноваження 2. 146 00:05:33,630 --> 00:05:38,660 Почніть з того, який є найбільшим, але не пройти десяткової 147 00:05:38,660 --> 00:05:39,710 що ви шукаєте. 148 00:05:39,710 --> 00:05:42,870 А потім начебто працювати ваш шлях назад додавши речі по мірі необхідності. 149 00:05:42,870 --> 00:05:45,200 >> А потім з того, що це так само, як звичайною того. 150 00:05:45,200 --> 00:05:51,110 Якщо ви коли-небудь випадок, коли ви знаходитесь додавши два 1с, це, очевидно, стає 2. 151 00:05:51,110 --> 00:05:56,875 2 в двійковій тепер 1 0, так що ви повинні нести свій 1 в наступному стовпчику. 152 00:05:56,875 --> 00:05:57,375 Прохолодний. 153 00:05:57,375 --> 00:05:59,220 154 00:05:59,220 --> 00:06:03,240 >> Hexadecimal, це може бути щось що трохи менше знайомі. 155 00:06:03,240 --> 00:06:06,600 Так як Роб був просто каже мені, заздалегідь, його трюк для цього 156 00:06:06,600 --> 00:06:10,210 це просто розділити його на чотири байта шматки, ОК? 157 00:06:10,210 --> 00:06:11,050 Біти, вибачте. 158 00:06:11,050 --> 00:06:11,720 Бачити? 159 00:06:11,720 --> 00:06:12,220 Завдяки Роб. 160 00:06:12,220 --> 00:06:15,874 Ось чому ви тут. [ШУМУ] ОК, так що ми просто розбити його 161 00:06:15,874 --> 00:06:16,790 на чотири біта шматки. 162 00:06:16,790 --> 00:06:21,570 Так з довічних файлів в шістнадцятковому, ми дивимося на перший 4, 163 00:06:21,570 --> 00:06:25,573 який, якщо у нас є чотири 1с в рядок, що число Чи це символізує? 164 00:06:25,573 --> 00:06:26,540 >> СТУДЕНТ: Ф. 165 00:06:26,540 --> 00:06:32,751 >> Елісон: Так що в цьому випадку, що 11111111 ілі-- да? 166 00:06:32,751 --> 00:06:33,250 СТУДЕНТ: FF. 167 00:06:33,250 --> 00:06:34,600 Елісон: Відмінно, FF. 168 00:06:34,600 --> 00:06:36,900 Так здорово, цукерки для вас. 169 00:06:36,900 --> 00:06:41,100 Тепер, для того, як шестнадцатеричное в двійкову систему, ми просто думати про це почасти в зворотному напрямку. 170 00:06:41,100 --> 00:06:46,420 Для кожного номера або літери цього у нас в шістнадцятковому, 171 00:06:46,420 --> 00:06:53,930 просто перетворити його в його чотирьох біт [Сміється], щоб її чотири бітної перетворення. 172 00:06:53,930 --> 00:06:58,696 Так 5, в даному випадку, що якщо 5 ми представляє його з чотирма бітами? 173 00:06:58,696 --> 00:06:59,608 >> СТУДЕНТ: 010? 174 00:06:59,608 --> 00:07:00,520 Мм-ом. 175 00:07:00,520 --> 00:07:03,605 А потім, що насправді 10, буде? 176 00:07:03,605 --> 00:07:06,230 177 00:07:06,230 --> 00:07:08,040 1010. 178 00:07:08,040 --> 00:07:09,670 Таким чином, ми маємо, що, тут. 179 00:07:09,670 --> 00:07:13,990 Так конвертації між шестнадцатеричной і бінарний насправді не так уже й погано. 180 00:07:13,990 --> 00:07:16,565 Якщо ви подивитеся на нього в чотири біта шматки, буде золотий. 181 00:07:16,565 --> 00:07:18,330 182 00:07:18,330 --> 00:07:19,300 Everyone-- да? 183 00:07:19,300 --> 00:07:21,903 >> ROB: Це нерозумно, але я завжди пам'ятаю, 184 00:07:21,903 --> 00:07:23,500 , Так як передбачається, 10. 185 00:07:23,500 --> 00:07:26,230 І бінарний просто 10 жовтня, so-- 186 00:07:26,230 --> 00:07:27,310 >> Елісон: А, ось ми йдемо. 187 00:07:27,310 --> 00:07:28,615 >> ROB: Ей. 188 00:07:28,615 --> 00:07:30,020 >> Елісон: Гей, цукерки для Роба. 189 00:07:30,020 --> 00:07:31,707 190 00:07:31,707 --> 00:07:33,290 Існує не-шоколадний матеріал в там. 191 00:07:33,290 --> 00:07:34,180 Таким чином, ви можете мати деякі. 192 00:07:34,180 --> 00:07:35,790 193 00:07:35,790 --> 00:07:36,760 Так ASCII математиці. 194 00:07:36,760 --> 00:07:38,206 195 00:07:38,206 --> 00:07:38,705 Поводьтеся. 196 00:07:38,705 --> 00:07:40,630 197 00:07:40,630 --> 00:07:44,720 Так ASCII математиці, як ви, хлопці, ймовірно, добре пам'ятаю 198 00:07:44,720 --> 00:07:48,480 р встановлено 2 з Visioneer і Цезар, ти багато це зробив. 199 00:07:48,480 --> 00:07:49,610 200 00:07:49,610 --> 00:07:51,980 Пам'ятайте, персонажі принципово просто цифри. 201 00:07:51,980 --> 00:07:54,780 Таким чином, ми можемо зробити математику з ними, так само, як ми робимо математику з цілих чисел. 202 00:07:54,780 --> 00:07:58,090 >> Тому у нас є трохи проста річ тут. 203 00:07:58,090 --> 00:08:00,940 У нас є деякі в це ініціалізації до 65. 204 00:08:00,940 --> 00:08:07,440 І B дорівнює значенню ASCII А плюс 1, символ C дорівнює D мінус 1, 205 00:08:07,440 --> 00:08:09,060 і символ D дорівнює 68. 206 00:08:09,060 --> 00:08:13,130 Отже, ми збираємося друку всі вони, як ми бачимо тут. 207 00:08:13,130 --> 00:08:15,650 І хто може сказати мені, що це буде роздрукувати? 208 00:08:15,650 --> 00:08:17,335 209 00:08:17,335 --> 00:08:18,210 СТУДЕНТ: [нерозбірливо]. 210 00:08:18,210 --> 00:08:20,540 Елісон: Рівне, так Одна справа помітити це 211 00:08:20,540 --> 00:08:22,900 що ми роздруківки персонажі кожен раз, тут. 212 00:08:22,900 --> 00:08:28,290 Ми позначає хоча А і В є Інтс, коли ми оголосили їх вище. 213 00:08:28,290 --> 00:08:32,870 Ми друку їх як героїв по відсотків C і наша Printf заяву, 214 00:08:32,870 --> 00:08:34,610 таким чином, вони будуть все друкувати, як героїв. 215 00:08:34,610 --> 00:08:40,730 І, звичайно, значення ASCII 65 Воля друкувати як А. Значення ASCII з плюс 1 216 00:08:40,730 --> 00:08:43,669 буде 66, який буде з гордістю В. Таким чином, справді, ми 217 00:08:43,669 --> 00:08:49,107 отримати A B C D. Все там добре? 218 00:08:49,107 --> 00:08:49,690 Є питання? 219 00:08:49,690 --> 00:08:50,721 220 00:08:50,721 --> 00:08:51,220 Дивовижний. 221 00:08:51,220 --> 00:08:52,500 222 00:08:52,500 --> 00:08:53,455 >> ОК, сфера. 223 00:08:53,455 --> 00:08:55,090 224 00:08:55,090 --> 00:08:59,950 Так сфера, очевидно, дуже Важливо розуміти, тут. 225 00:08:59,950 --> 00:09:03,250 Багато з вас, якщо ви є компіляції помилки, 226 00:09:03,250 --> 00:09:06,085 і це говорить, що ви не повинні доступ до якої-небудь змінної, 227 00:09:06,085 --> 00:09:08,540 це, ймовірно, тому, що ви визначається його в циклі 228 00:09:08,540 --> 00:09:12,210 а потім спробував отримати доступ до його з нього, або навпаки. 229 00:09:12,210 --> 00:09:16,410 >> Так сфера по своїй суті, він просто визначає, де 230 00:09:16,410 --> 00:09:20,800 ми говоримо, змінна існує, де ми можете його змінити, де ми можемо отримати до нього доступ. 231 00:09:20,800 --> 00:09:24,550 Це просто якась говорив це єдині місця, де у вас є доступ 232 00:09:24,550 --> 00:09:26,060 в цієї змінної. 233 00:09:26,060 --> 00:09:30,080 >> Так два областей, що ми говоримо про під час занять є глобальні та локальні. 234 00:09:30,080 --> 00:09:35,080 Так глобальні змінні ми говоримо про коли ви визначаєте їх вище основною. 235 00:09:35,080 --> 00:09:38,390 Це означає, що ваш весь Програма має доступ до неї, 236 00:09:38,390 --> 00:09:42,090 і він існує доти, як програма працює, добре? 237 00:09:42,090 --> 00:09:45,100 Місцевий означає, що це більш обмежений областю. 238 00:09:45,100 --> 00:09:50,520 Тому, коли у вас є певні функції як своп, ми завжди говоримо о. 239 00:09:50,520 --> 00:09:54,380 Ми завжди говоримо про своп з А і Б. А і В існують в цій функції. 240 00:09:54,380 --> 00:09:55,690 Вони не існують ніде. 241 00:09:55,690 --> 00:09:56,860 242 00:09:56,860 --> 00:10:00,610 >> Як добре, коли у вас є, якщо заяви або для петель. 243 00:10:00,610 --> 00:10:04,670 Всякий раз, коли ми маємо, наприклад, в цикл у нас є інтервал я дорівнює 0. 244 00:10:04,670 --> 00:10:06,630 У нас є деякі умови, і ми оновлювати його. 245 00:10:06,630 --> 00:10:10,270 Я існує тільки в підтяжки, що для циклу. 246 00:10:10,270 --> 00:10:13,270 При спробі доступу до нього в іншому місці, компілятор буде кричати на вас. 247 00:10:13,270 --> 00:10:14,560 Це було б, як, що ви намагаєтеся зробити? 248 00:10:14,560 --> 00:10:15,400 Це не існує. 249 00:10:15,400 --> 00:10:16,644 250 00:10:16,644 --> 00:10:18,435 Так ось два різні типи рамки. 251 00:10:18,435 --> 00:10:19,486 252 00:10:19,486 --> 00:10:20,860 Чи має це сенс для всіх? 253 00:10:20,860 --> 00:10:23,870 254 00:10:23,870 --> 00:10:27,890 >> Так, наприклад, тут, в цьому це лише деякі прості програми. 255 00:10:27,890 --> 00:10:29,120 256 00:10:29,120 --> 00:10:32,890 Що ви, хлопці, думаєте це відбудеться в кожній точці 257 00:10:32,890 --> 00:10:34,210 що ми намагаємося друкувати? 258 00:10:34,210 --> 00:10:40,150 Так що це один тут, що станеться? 259 00:10:40,150 --> 00:10:43,047 260 00:10:43,047 --> 00:10:44,255 СТУДЕНТ: Це буде друкувати три. 261 00:10:44,255 --> 00:10:44,880 Аллісон: справа. 262 00:10:44,880 --> 00:10:45,930 Це буде друкувати три. 263 00:10:45,930 --> 00:10:47,272 Що тут? 264 00:10:47,272 --> 00:10:48,230 СТУДЕНТ: Це не буде працювати. 265 00:10:48,230 --> 00:10:48,910 Елісон: Це не буде працювати. 266 00:10:48,910 --> 00:10:50,290 Ти з області видимості, чи не так? 267 00:10:50,290 --> 00:10:55,160 Локальна змінна не існує поза цими дужок, все в порядку? 268 00:10:55,160 --> 00:10:56,462 І тоді те, що тут? 269 00:10:56,462 --> 00:10:57,850 >> СТУДЕНТ: [нерозбірливо]. 270 00:10:57,850 --> 00:10:59,210 >> Елісон: Що? 271 00:10:59,210 --> 00:10:59,900 Роб, йдуть. 272 00:10:59,900 --> 00:11:00,854 >> ROB: Я тільки що сказав. 273 00:11:00,854 --> 00:11:04,200 Глобальні змінні повинні бути Глобальна змінна підкреслення. 274 00:11:04,200 --> 00:11:05,660 >> Елісон: Ах, так, вибачте. 275 00:11:05,660 --> 00:11:06,200 Спасибі, Роб. 276 00:11:06,200 --> 00:11:07,480 277 00:11:07,480 --> 00:11:10,170 Роб, як наш резидент компілятора. 278 00:11:10,170 --> 00:11:12,684 Він просто кричати на нас, коли ми це потрібно. [Сміється] Да, 279 00:11:12,684 --> 00:11:14,225 повинна бути глобальна змінна підкреслення. 280 00:11:14,225 --> 00:11:15,760 281 00:11:15,760 --> 00:11:18,430 Так якщо припустити, що що був глобальний підкреслення 282 00:11:18,430 --> 00:11:20,260 Змінна, що станеться тут? 283 00:11:20,260 --> 00:11:21,260 СТУДЕНТ: Це буде працювати. 284 00:11:21,260 --> 00:11:22,093 Аллісон: Це буде працювати. 285 00:11:22,093 --> 00:11:24,655 Так що будемо друкувати, так що просто дуже простий приклад. 286 00:11:24,655 --> 00:11:27,650 287 00:11:27,650 --> 00:11:29,870 ОК, прототипи. 288 00:11:29,870 --> 00:11:33,680 Так, очевидно, ми дійсно підкреслити для вас, хлопці 289 00:11:33,680 --> 00:11:36,460 зробити функції, якщо він сенс в ваших програмах. 290 00:11:36,460 --> 00:11:38,460 Але, звичайно, коли тебе зробити свої власні функції, 291 00:11:38,460 --> 00:11:40,930 як правило, ви будете визначати їх після основної. 292 00:11:40,930 --> 00:11:42,430 І ви будете намагатися викликати їх в основний. 293 00:11:42,430 --> 00:11:46,030 І якщо ви не використовуєте прототип, компілятор буде кричати на вас. 294 00:11:46,030 --> 00:11:49,590 >> Прототип в основному просто говорю компілятора 295 00:11:49,590 --> 00:11:52,400 що у мене є ця функція нижче основної. 296 00:11:52,400 --> 00:11:54,970 Я буду називати його, перш ніж я його визначення. 297 00:11:54,970 --> 00:11:56,360 Тільки тримайся. 298 00:11:56,360 --> 00:12:00,660 Я обіцяю, що це визначається, і ви матиме все, що вам потрібно. 299 00:12:00,660 --> 00:12:05,900 >> Так як ми робимо це тільки ваше повернення тип, ім'я функції, ваш вхід 300 00:12:05,900 --> 00:12:06,400 Список. 301 00:12:06,400 --> 00:12:09,760 Це в основному перша лінія Вашої оголошенні функції. 302 00:12:09,760 --> 00:12:11,510 Це дійсно все це. 303 00:12:11,510 --> 00:12:14,440 Але це всього лише Взагалі-то формат. 304 00:12:14,440 --> 00:12:17,220 >> Таким чином, у нашому прикладі, які ви, хлопці, повинні 305 00:12:17,220 --> 00:12:19,700 бачили в розділі в якийсь момент, у нас є 306 00:12:19,700 --> 00:12:23,220 деякі INT куб, займає деякий Int введення. 307 00:12:23,220 --> 00:12:25,870 І у нас є наша головна Функція, яка називає куб. 308 00:12:25,870 --> 00:12:28,670 І куб визначається постфактум. 309 00:12:28,670 --> 00:12:34,450 >> Так що, якщо у нас не було введення INT куба у верхній частині, коли ми зателефонували куб 310 00:12:34,450 --> 00:12:36,620 в головному, нашого компілятора буде злитися на нас. 311 00:12:36,620 --> 00:12:38,890 Це було б, як, що ви говорите? 312 00:12:38,890 --> 00:12:40,360 Куб не існує. 313 00:12:40,360 --> 00:12:41,910 Я не знаю, що ви просите. 314 00:12:41,910 --> 00:12:43,490 І я просто хочу, стоп. 315 00:12:43,490 --> 00:12:47,330 >> Але тому, що ми зробили наш прототип у верхній частині, ми вже говорили, 316 00:12:47,330 --> 00:12:49,800 Ви знаєте, коли ви бачите куб, не хвилюйтеся про це. 317 00:12:49,800 --> 00:12:51,990 Я обіцяю, що це визначено пізніше. 318 00:12:51,990 --> 00:12:53,750 І це дам вам робити те, що ви хочете. 319 00:12:53,750 --> 00:12:57,750 Так що, якщо ви коли-небудь мати функцію який оголошений після виклику його 320 00:12:57,750 --> 00:13:00,570 вперше, необхідно Тобто це прототип на самому верху. 321 00:13:00,570 --> 00:13:01,640 322 00:13:01,640 --> 00:13:02,720 >> Да? 323 00:13:02,720 --> 00:13:04,412 >> ROB: Це квадрат, що не кубатури. 324 00:13:04,412 --> 00:13:05,855 >> Елісон: О, мій Бог. 325 00:13:05,855 --> 00:13:09,435 Я не have-- Гейб, я думав, Ви були нашим коректором. 326 00:13:09,435 --> 00:13:10,740 327 00:13:10,740 --> 00:13:12,760 ОК, хлопці, потерпіть мене, тут. 328 00:13:12,760 --> 00:13:14,440 Я сподіваюся, що кожен отримує ідею. 329 00:13:14,440 --> 00:13:15,560 330 00:13:15,560 --> 00:13:20,380 ОК, так що це повинно бути був квадрат, не в кубі. 331 00:13:20,380 --> 00:13:22,700 Але ідея залишається тією ж. 332 00:13:22,700 --> 00:13:23,702 333 00:13:23,702 --> 00:13:26,660 Будь-яка функція, яка ми називаємо після Те, повинні мати прототип. 334 00:13:26,660 --> 00:13:27,730 335 00:13:27,730 --> 00:13:28,970 Все добре з цим? 336 00:13:28,970 --> 00:13:30,730 337 00:13:30,730 --> 00:13:32,310 Будь-які інші друкарські помилки? 338 00:13:32,310 --> 00:13:32,810 Добре. 339 00:13:32,810 --> 00:13:34,730 340 00:13:34,730 --> 00:13:36,230 Опечатки тут, перш ніж почати, Роб? 341 00:13:36,230 --> 00:13:37,356 342 00:13:37,356 --> 00:13:42,380 [Сміється] Отже, структур. 343 00:13:42,380 --> 00:13:45,040 В основному, структури дозволяють Вам створити свій власний тип даних. 344 00:13:45,040 --> 00:13:49,264 Так як междунар або гольця або Поплавок, це просто ще один тип. 345 00:13:49,264 --> 00:13:51,680 Мені подобається думати про нього, як, як, створити свій власний тип даних. 346 00:13:51,680 --> 00:13:53,740 Так він дозволяє це зробити. 347 00:13:53,740 --> 00:13:56,160 І він тримає різні типи даних. 348 00:13:56,160 --> 00:14:01,030 >> Так що, якщо ви пам'ятаєте, в масиві, ми може тільки тримати речі подібного типу. 349 00:14:01,030 --> 00:14:04,660 Структури дозволяють нам тримати кратне речі з різних типів. 350 00:14:04,660 --> 00:14:08,944 Таким чином, в цьому випадку тут ми есть-структуру під назвою Student, 351 00:14:08,944 --> 00:14:10,650 названі тут в нижній частині. 352 00:14:10,650 --> 00:14:13,540 І у нас є деякі Int ідентифікатор і деякі рядок імені. 353 00:14:13,540 --> 00:14:14,620 354 00:14:14,620 --> 00:14:17,300 Так що це просто ще один тип даних. 355 00:14:17,300 --> 00:14:18,950 Тепер у нас є тип даних під назвою Student. 356 00:14:18,950 --> 00:14:20,330 357 00:14:20,330 --> 00:14:24,750 >> Так що ми можемо думати про це як ще один тип даних, 358 00:14:24,750 --> 00:14:27,760 ми можемо оголосити змінні як ми і будь-який інший. 359 00:14:27,760 --> 00:14:32,680 Таким чином, замість того, щоб просто маючи, як, INT студент, у нас просто є студент, 360 00:14:32,680 --> 00:14:33,390 студент 1. 361 00:14:33,390 --> 00:14:33,560 О, дивіться. 362 00:14:33,560 --> 00:14:34,059 Це Роб. 363 00:14:34,059 --> 00:14:35,750 364 00:14:35,750 --> 00:14:38,880 Так от ми оголошенні структури або змінна 365 00:14:38,880 --> 00:14:40,940 називається студент 1 типу студента. 366 00:14:40,940 --> 00:14:45,370 Так що це матиме ідентифікатор і ім'я, пов'язане з ним. 367 00:14:45,370 --> 00:14:48,430 >> І те, як ми до них доступ елементи всередині нашої структури 368 00:14:48,430 --> 00:14:50,100 За допомогою оператора точка, тут. 369 00:14:50,100 --> 00:14:51,910 370 00:14:51,910 --> 00:14:54,660 Таким чином, в даному випадку, ми заявив деякий студент 1. 371 00:14:54,660 --> 00:14:57,080 Ми призначений ідентифікатор, щоб бути 1. 372 00:14:57,080 --> 00:14:58,840 І ми присвоїли ім'я буде Роб. 373 00:14:58,840 --> 00:15:03,010 374 00:15:03,010 --> 00:15:04,960 ОК, все добре з цим? 375 00:15:04,960 --> 00:15:06,787 Використовуйте це просто like-- да? 376 00:15:06,787 --> 00:15:09,530 >> СТУДЕНТ: Так, typedef-- коли ми повинні використовувати ЬурейеЕ? 377 00:15:09,530 --> 00:15:13,190 >> Елісон: Так ЬурейеЕ просто каже that-- Роб, ти 378 00:15:13,190 --> 00:15:16,990 може виправити мене на це, якщо я wrong-- але ЬурейеЕ просто насправді оголошенні 379 00:15:16,990 --> 00:15:19,330 це як типу, які можна використовувати, чи не так? 380 00:15:19,330 --> 00:15:22,550 >> ROB: Так, це в основному, так що це просто створення 381 00:15:22,550 --> 00:15:24,215 псевдонім або прізвисько типу. 382 00:15:24,215 --> 00:15:25,590 Таким чином, ви можете ввести, що [нерозбірливо]. 383 00:15:25,590 --> 00:15:27,140 384 00:15:27,140 --> 00:15:30,350 Так [нерозбірливо] існує, і тепер ми просто повинні 385 00:15:30,350 --> 00:15:32,090 [Нерозбірливо] кошти рівно те ж саме. 386 00:15:32,090 --> 00:15:37,210 І ось, ми набрали, я думаю, деякі структура типу 2 [нерозбірливо]. 387 00:15:37,210 --> 00:15:40,680 Так що це просто псевдонім Для даного типу. 388 00:15:40,680 --> 00:15:44,344 >> СТУДЕНТ: String [нерозбірливо] бібліотека набралося до як напівкоксу зірки. 389 00:15:44,344 --> 00:15:51,380 390 00:15:51,380 --> 00:15:54,390 >> Елісон: Для наших цілей тут, якщо ви оголошенні-структуру, 391 00:15:54,390 --> 00:15:55,600 просто зробити ЬурейеЕ-структуру. 392 00:15:55,600 --> 00:15:57,680 393 00:15:57,680 --> 00:16:04,490 Отже, заздалегідь, це просто нормальний змінна тут. 394 00:16:04,490 --> 00:16:06,390 Ми до нього доступ з точки. 395 00:16:06,390 --> 00:16:08,580 якщо у нас є вказівник на структура, ми можемо насправді 396 00:16:08,580 --> 00:16:10,700 використовувати стрілу, яка досить прохолодно. 397 00:16:10,700 --> 00:16:17,130 >> Таким чином, в даному випадку, у нас є вказівник на студент 1, що має тип студента. 398 00:16:17,130 --> 00:16:19,020 Пам'ятаєте, з вашої Будівництво покажчик, 399 00:16:19,020 --> 00:16:23,710 Ви хочете що б не введіть покажчик вказує на бути на початку. 400 00:16:23,710 --> 00:16:25,960 Таким чином, ми маємо деяку студента 1, тут. 401 00:16:25,960 --> 00:16:27,370 402 00:16:27,370 --> 00:16:31,050 І з цього студента 1 тепер загострений, 403 00:16:31,050 --> 00:16:36,520 ми можемо насправді йти студентський ім'я 1 стрілкою замість точки, тому що це покажчик, 404 00:16:36,520 --> 00:16:37,640 і призначити Роба. 405 00:16:37,640 --> 00:16:40,720 І тепер, якщо ми хочемо, щоб змінити Роб Девін, 406 00:16:40,720 --> 00:16:43,570 це просто показуючи вам, Інший спосіб зробити це. 407 00:16:43,570 --> 00:16:48,850 >> Таким чином, замість того, щоб використовувати стрілку, ви може also-- я закінчу це, а потім 408 00:16:48,850 --> 00:16:52,860 прийняти, що question-- ви могли Також зробити опорну студент 1. 409 00:16:52,860 --> 00:16:56,170 Це говорить, як перейти до все, що на студента 1, 410 00:16:56,170 --> 00:16:58,840 буде наш студент структура. 411 00:16:58,840 --> 00:17:03,910 Доступ її з точкою і елементом що ви хочете, а потім передати його. 412 00:17:03,910 --> 00:17:05,326 Було питання. 413 00:17:05,326 --> 00:17:08,034 СТУДЕНТ: Так, так як же у вас є використовувати [нерозбірливо], коли ти 414 00:17:08,034 --> 00:17:10,367 робить студентську зірку без [Нерозбірливо] студент? 415 00:17:10,367 --> 00:17:12,200 Елісон: Тому що це створює покажчик. 416 00:17:12,200 --> 00:17:13,616 ROB: Ми збираємося говорити про це. 417 00:17:13,616 --> 00:17:16,119 Елісон: Ми збираємося говорити про те, що в кінці огляду. 418 00:17:16,119 --> 00:17:17,660 Так що просто утримати цю думку. 419 00:17:17,660 --> 00:17:20,560 Якщо він як і раніше турбує вас в кінець, прийшов поговорити з одним з нас. 420 00:17:20,560 --> 00:17:23,380 >> Таким чином, ці роблять рівно те ж саме. 421 00:17:23,380 --> 00:17:25,579 Ми просто показую вам два різні способи, щоб зробити це. 422 00:17:25,579 --> 00:17:29,470 Студент 1 тепер покажчик, так Ви можете отримати доступ до імені елемента 423 00:17:29,470 --> 00:17:30,960 в структури зі стрілкою. 424 00:17:30,960 --> 00:17:36,440 Або ви можете разименованія покажчика, і звертатися до нього, як звичайно. 425 00:17:36,440 --> 00:17:38,430 Чи означає це, має сенс кожному? 426 00:17:38,430 --> 00:17:39,480 427 00:17:39,480 --> 00:17:43,890 Якщо цілі покажчик речі трохи заплутаною, Гейб буде говорити про те, що, 428 00:17:43,890 --> 00:17:45,740 і тоді, можливо, це матиме більше сенсу. 429 00:17:45,740 --> 00:17:46,240 Да? 430 00:17:46,240 --> 00:17:48,387 >> СТУДЕНТ: Так, так як це це відрізняється від? 431 00:17:48,387 --> 00:17:49,470 Елісон: попередній? 432 00:17:49,470 --> 00:17:52,330 Так студент 1 в цьому справа не покажчик. 433 00:17:52,330 --> 00:17:54,380 Це просто ваша поточна структура. 434 00:17:54,380 --> 00:17:55,400 >> СТУДЕНТ: ОК. 435 00:17:55,400 --> 00:17:57,645 >> Елісон: В той час як цей є покажчиком на структуру. 436 00:17:57,645 --> 00:17:58,910 437 00:17:58,910 --> 00:18:02,060 >> СТУДЕНТ: ОК, але робить це вид в кінцевому підсумку працює один і той же [нерозбірливо]. 438 00:18:02,060 --> 00:18:03,310 >> Елісон: Він ефективно працює так само. 439 00:18:03,310 --> 00:18:04,560 Ваш синтаксис просто різні. 440 00:18:04,560 --> 00:18:05,185 СТУДЕНТ: ОК. 441 00:18:05,185 --> 00:18:07,600 >> Елісон: Так, вони фактично те ж саме. 442 00:18:07,600 --> 00:18:11,321 Це просто в залежності від контексту, Ви можете один над іншим. 443 00:18:11,321 --> 00:18:11,820 Да? 444 00:18:11,820 --> 00:18:13,956 >> СТУДЕНТ: Коли ви робите посилання на 1-- 445 00:18:13,956 --> 00:18:14,580 Елісон: Мм-хм? 446 00:18:14,580 --> 00:18:16,880 СТУДЕНТ: Чому вас є дужки? 447 00:18:16,880 --> 00:18:19,575 Елісон: Тому що студент 1 є покажчиком. 448 00:18:19,575 --> 00:18:22,200 Таким чином, ви повинні переконатися, що ви просто разименованія покажчика. 449 00:18:22,200 --> 00:18:23,380 >> СТУДЕНТ: ОК. 450 00:18:23,380 --> 00:18:26,700 >> Елісон: Так що в цьому випадку тут, дужки навколо нього 451 00:18:26,700 --> 00:18:29,875 означає, що ви разименованія студент 1. 452 00:18:29,875 --> 00:18:35,390 Таким чином, ви будете де студент 1 балів, що ваша структура. 453 00:18:35,390 --> 00:18:38,010 Так що тепер ви можете думати, про нього, як цієї структури, 454 00:18:38,010 --> 00:18:39,785 так що ми можемо використовувати наш нормальну роботу точка. 455 00:18:39,785 --> 00:18:42,752 456 00:18:42,752 --> 00:18:43,585 Ще питання? 457 00:18:43,585 --> 00:18:45,840 458 00:18:45,840 --> 00:18:48,120 Прохолодний, дивовижним. 459 00:18:48,120 --> 00:18:51,359 >> Так остання річ, я думаю, мій останній слайд, Ву! 460 00:18:51,359 --> 00:18:52,775 Отже, з плаваючою точкою неточність. 461 00:18:52,775 --> 00:18:54,090 462 00:18:54,090 --> 00:18:56,820 Ми говорили коротко про це на лекції. 463 00:18:56,820 --> 00:19:00,030 В основному, ми маємо нескінченно багато речових чисел. 464 00:19:00,030 --> 00:19:02,237 І якщо який-небудь з вас, хлопці, люблю математику, є 465 00:19:02,237 --> 00:19:03,570 всякі класні речі з нами. 466 00:19:03,570 --> 00:19:05,010 467 00:19:05,010 --> 00:19:07,190 >> Але існує нескінченно багато дійсні числа. 468 00:19:07,190 --> 00:19:09,850 Але вони тільки кінцеве багато бітів, які у нас є. 469 00:19:09,850 --> 00:19:13,240 Таким чином, ви завжди будете є неточність, це все. 470 00:19:13,240 --> 00:19:16,269 І ось це просто якась якось ви повинні знати. 471 00:19:16,269 --> 00:19:19,060 Це як ми можемо попросити вас чому з плаваючою точкою неточність існують? 472 00:19:19,060 --> 00:19:20,004 473 00:19:20,004 --> 00:19:21,420 Так що те, що ви повинні знати. 474 00:19:21,420 --> 00:19:23,770 І з цим, я перетворююся це до покажчиків. 475 00:19:23,770 --> 00:19:27,720 476 00:19:27,720 --> 00:19:28,520 >> М'які: Привіт, хлопці. 477 00:19:28,520 --> 00:19:29,616 М'які Мене звуть. 478 00:19:29,616 --> 00:19:30,990 Я збираюся поговорити про покажчики. 479 00:19:30,990 --> 00:19:33,247 480 00:19:33,247 --> 00:19:35,830 Так, так покажчики насправді моя улюблена частина в цьому процесі. 481 00:19:35,830 --> 00:19:39,740 Так що просто зробити ясно, що Еллісон був говоримо тут, так по причині 482 00:19:39,740 --> 00:19:43,810 why-- тією лише різницею тут, Велика різниця був шлях 483 00:19:43,810 --> 00:19:44,760 ми заявляємо речі. 484 00:19:44,760 --> 00:19:47,560 Так студент зірка означає це є покажчиком на студента. 485 00:19:47,560 --> 00:19:52,960 Тоді як на слайді до, студент Фактична структура, як фактичний студента, 486 00:19:52,960 --> 00:19:54,400 містить будь-який з цих речей. 487 00:19:54,400 --> 00:19:57,050 >> І причина, чому ми хочу to-- да, Девін? 488 00:19:57,050 --> 00:19:58,630 >> DAVIN: Що це означає стрілка? 489 00:19:58,630 --> 00:20:04,240 >> М'які: Засоби стрілками точно так само, як це. 490 00:20:04,240 --> 00:20:06,150 Таким чином, ви дійсно не потрібно стрілку. 491 00:20:06,150 --> 00:20:11,060 Мовляв, якщо ви тільки програма в C, ви можете просто використовувати це. 492 00:20:11,060 --> 00:20:12,850 На жаль, я не те, що це таке. 493 00:20:12,850 --> 00:20:14,920 Ви можете просто використовувати цей синтаксис. 494 00:20:14,920 --> 00:20:17,430 >> Але деякі люди, коли вони розробляли C, 495 00:20:17,430 --> 00:20:19,870 вони вважали, що люди використовувати цю синтаксис стільки, 496 00:20:19,870 --> 00:20:23,970 що вони будуть подобається тільки придумати зі структурою синтаксису для нього. 497 00:20:23,970 --> 00:20:26,820 І це відбулося в Форма цієї стрілки. 498 00:20:26,820 --> 00:20:29,210 І це дуже приємно, тому що вона символізує щось 499 00:20:29,210 --> 00:20:33,670 як ми насправді наступне ця стрілка, це покажчик, 500 00:20:33,670 --> 00:20:35,300 до якогось місця в пам'яті. 501 00:20:35,300 --> 00:20:40,410 І коли ми будемо там, ми хочемо, щоб дивитися на ім'я цього студента, 502 00:20:40,410 --> 00:20:42,150 якщо це має сенс. 503 00:20:42,150 --> 00:20:43,000 Добре? 504 00:20:43,000 --> 00:20:44,290 >> Так що це точно так же. 505 00:20:44,290 --> 00:20:46,310 Це рівно те ж саме, як це. 506 00:20:46,310 --> 00:20:48,130 Вони компілюються точно так же, ОК? 507 00:20:48,130 --> 00:20:50,100 508 00:20:50,100 --> 00:20:55,580 І причина тут, чому ми Malloc -то, відбувається тому, що в даному випадку, 509 00:20:55,580 --> 00:20:59,120 наша змінна насправді просто змінна покажчик. 510 00:20:59,120 --> 00:21:02,900 Так у нас є тільки деякий простір в пам'яті, що тримає покажчик. 511 00:21:02,900 --> 00:21:06,570 Ми насправді не мають ніякого місця що тримає реальну структури. 512 00:21:06,570 --> 00:21:08,660 >> Таким чином, це має бути зроблено в два етапи. 513 00:21:08,660 --> 00:21:11,545 Ми повинні створити Пам'ять поставити структури в. 514 00:21:11,545 --> 00:21:14,445 І ми повинні створити Пам'ять поставити покажчик в. 515 00:21:14,445 --> 00:21:16,570 Так вони в основному два різні змінні, тут. 516 00:21:16,570 --> 00:21:19,730 Один з них має тип студента, крім нього насправді не має імені. 517 00:21:19,730 --> 00:21:21,900 А інший є типу студентської зірки. 518 00:21:21,900 --> 00:21:24,900 А потім студентські 1 точок там, якщо це сенс. 519 00:21:24,900 --> 00:21:25,871 520 00:21:25,871 --> 00:21:26,370 Добре? 521 00:21:26,370 --> 00:21:28,160 522 00:21:28,160 --> 00:21:31,860 >> Так причин, чому ми використовуємо Покажчики в тому, що всі 523 00:21:31,860 --> 00:21:35,510 в комп'ютері, кожна змінна в комп'ютері є дві речі. 524 00:21:35,510 --> 00:21:36,580 Це має своє значення. 525 00:21:36,580 --> 00:21:38,420 І це має свою адресу. 526 00:21:38,420 --> 00:21:41,390 І це хороший спосіб осмислювати це є 527 00:21:41,390 --> 00:21:44,230 багато проблем, коли ви спробуйте використати функції. 528 00:21:44,230 --> 00:21:47,200 І ми збираємося, щоб спробувати шукати в одному з тех. 529 00:21:47,200 --> 00:21:50,370 А саме, він збирається думати про пам'ять як коробки. 530 00:21:50,370 --> 00:21:52,810 >> Ви завжди думали про змінних коли ви говорите, па дорівнює 5. 531 00:21:52,810 --> 00:21:54,430 Ви думаєте про здачі 5 в коробку. 532 00:21:54,430 --> 00:21:55,520 533 00:21:55,520 --> 00:22:00,030 Так що, якщо ви хочете передати що інтервал в функцію? 534 00:22:00,030 --> 00:22:03,230 Ви просто pass-- я не знаю-- х в функцію. 535 00:22:03,230 --> 00:22:06,090 Але те, що відбувається, Звичайно як людини, ви 536 00:22:06,090 --> 00:22:09,050 було б думати, щось, що я передаючи коробку з людиною. 537 00:22:09,050 --> 00:22:12,070 І це насправді не статися в комп'ютерах. 538 00:22:12,070 --> 00:22:17,770 Що відбувається, є копіюванні значення з коробки в коробку людини. 539 00:22:17,770 --> 00:22:22,440 >> Так що я намагаюся сказати, що якщо у вас є function-- sorry-- тут, 540 00:22:22,440 --> 00:22:27,700 якщо у нас є функція, як в п'яти вгору Тобто, якщо ви намагаєтеся передати змінну, 541 00:22:27,700 --> 00:22:29,450 це просто буде копіювати. 542 00:22:29,450 --> 00:22:35,771 Якщо ініціалізації NX дорівнює 3, це буде скопіювати це значення до змінної 543 00:22:35,771 --> 00:22:36,270 там. 544 00:22:36,270 --> 00:22:37,005 545 00:22:37,005 --> 00:22:39,630 ОК, і це начебто тієї причини, Тому ми хочемо, щоб використовувати покажчики. 546 00:22:39,630 --> 00:22:42,550 Бо замість того, даючи тільки значення, 547 00:22:42,550 --> 00:22:44,850 замість просто проходив тільки значення в функцію, 548 00:22:44,850 --> 00:22:46,530 ми хочемо передати по посиланню. 549 00:22:46,530 --> 00:22:50,630 Те, що ми називаємо прохід по посиланню добр дати коробку з функцією, 550 00:22:50,630 --> 00:22:53,890 так що функція може також змінити значення в цьому полі. 551 00:22:53,890 --> 00:22:57,280 >> ОК, так що просто деякі основні покажчик матеріал для створення покажчиків, 552 00:22:57,280 --> 00:23:00,300 Ви просто оголосити його тип, і Ви посадити зірку відразу після нього. 553 00:23:00,300 --> 00:23:02,307 І тільки тип то, що ви вказуючи на. 554 00:23:02,307 --> 00:23:04,390 Так що, якщо це інтервал зірка, Ви вказуєте на междунар. 555 00:23:04,390 --> 00:23:05,940 Якщо це символ зірки, Ви вказуєте на графік. 556 00:23:05,940 --> 00:23:07,790 І якщо це студент зірка, Ви вказуєте на студента. 557 00:23:07,790 --> 00:23:08,770 Добре? 558 00:23:08,770 --> 00:23:10,510 >> І вони довго все 4 байта. 559 00:23:10,510 --> 00:23:13,010 Тому що цієї змінної це не насправді 560 00:23:13,010 --> 00:23:15,380 потрібно провести символ, INT, або студент. 561 00:23:15,380 --> 00:23:16,890 Це необхідно тільки провести адресу. 562 00:23:16,890 --> 00:23:21,390 Ось чому вони всі 4 байта довжиною в нормальному 32-бітної машині. 563 00:23:21,390 --> 00:23:21,890 Добре? 564 00:23:21,890 --> 00:23:25,600 Так от, х є змінною, яка вказує до міжнар. у вказує на гольця. Z точки 565 00:23:25,600 --> 00:23:26,580 з поплавком. 566 00:23:26,580 --> 00:23:27,480 Тут Є питання? 567 00:23:27,480 --> 00:23:29,841 568 00:23:29,841 --> 00:23:30,340 Прохолодний. 569 00:23:30,340 --> 00:23:32,550 І є два різні символи, які вони мають 570 00:23:32,550 --> 00:23:34,341 щоб мати на увазі при приходить до покажчика. 571 00:23:34,341 --> 00:23:36,540 Так посилання і разименованія є великі. 572 00:23:36,540 --> 00:23:38,100 573 00:23:38,100 --> 00:23:41,602 Так амперсандом з Ім'я змінної дає? 574 00:23:41,602 --> 00:23:42,310 СТУДЕНТ: Адреса. 575 00:23:42,310 --> 00:23:43,380 М'які: Адреса. 576 00:23:43,380 --> 00:23:47,330 Так що, якщо ви розкажете Int А дорівнює 5, то амперсанд 577 00:23:47,330 --> 00:23:49,214 з збирається дати вам адресу. 578 00:23:49,214 --> 00:23:51,130 І ви можете спробувати друкувати що і подивитися, 579 00:23:51,130 --> 00:23:54,640 яка адреса в пам'яті змінна має. 580 00:23:54,640 --> 00:23:57,380 А потім dereferencing-- так що було посилатися, 581 00:23:57,380 --> 00:24:00,380 отримання address-- разименованія є повною протилежністю. 582 00:24:00,380 --> 00:24:04,120 ОК, якраз є навпроти дивізії, 583 00:24:04,120 --> 00:24:06,060 зірка є протилежністю амперсандом. 584 00:24:06,060 --> 00:24:09,710 Так разименованія кошти йдуть туди. 585 00:24:09,710 --> 00:24:14,280 Так що, якщо ви даєте star-- I НЕ знаю-- 50, це 586 00:24:14,280 --> 00:24:20,320 буду намагатися йти по адресу № 50 всередині вашого комп'ютера. 587 00:24:20,320 --> 00:24:22,840 Добре, а чому ми не бачимо що вони є протилежностями? 588 00:24:22,840 --> 00:24:27,320 Бо те, що відбувається, якщо ви робите щось на зразок зірки амперсанд? 589 00:24:27,320 --> 00:24:28,470 590 00:24:28,470 --> 00:24:33,460 Ну, амперсанд дає адресу змінної, адреса. 591 00:24:33,460 --> 00:24:35,830 Але зірка означає піти туди. 592 00:24:35,830 --> 00:24:38,930 >> Що трапиться, якщо вас перейти на адресу? 593 00:24:38,930 --> 00:24:40,400 Ви просто дістатися до, чи не так? 594 00:24:40,400 --> 00:24:41,410 595 00:24:41,410 --> 00:24:43,600 Так відбувається за адресою це те ж саме, як. 596 00:24:43,600 --> 00:24:47,580 Ось чому вони, як правило, називають same-- це 597 00:24:47,580 --> 00:24:50,480 і це називають як протилежні оператори. 598 00:24:50,480 --> 00:24:50,980 Добре? 599 00:24:50,980 --> 00:24:52,780 600 00:24:52,780 --> 00:24:53,790 Так здорово. 601 00:24:53,790 --> 00:24:57,240 >> Під кришкою, наприклад, якщо ми заявляємо INT х дорівнює 5, 602 00:24:57,240 --> 00:24:58,040 у нас є змінна. 603 00:24:58,040 --> 00:25:00,790 І пам'ятайте, що я сказав, що кожен переменная-- і це добре 604 00:25:00,790 --> 00:25:03,820 зберегти в mind-- він має два різні речі, пов'язані с. 605 00:25:03,820 --> 00:25:06,460 Він має звернувся і значення. 606 00:25:06,460 --> 00:25:07,140 Добре? 607 00:25:07,140 --> 00:25:09,180 >> Таким чином, значення в цьому випадку дорівнює 5. 608 00:25:09,180 --> 00:25:12,140 І адреса is-- скажімо, я робити щось up-- це 0x04. 609 00:25:12,140 --> 00:25:13,180 610 00:25:13,180 --> 00:25:17,200 І єдина причина, чому ми, як правило, представляють адреси в шістнадцятковому 611 00:25:17,200 --> 00:25:19,770 є одним, бо це як благо. 612 00:25:19,770 --> 00:25:21,600 Добре поєднується з двійковій системі. 613 00:25:21,600 --> 00:25:23,500 Це легко конвертувати і з двійкового файлу. 614 00:25:23,500 --> 00:25:26,890 І це не стає занадто великий, якщо у вас є дуже велика кількість. 615 00:25:26,890 --> 00:25:29,990 Таким чином, ми хотіли б використовувати шестнадцатеричную в адресах друку. 616 00:25:29,990 --> 00:25:31,890 Але я міг би представляти Цей вигляді цілого числа. 617 00:25:31,890 --> 00:25:32,750 Це прекрасно. 618 00:25:32,750 --> 00:25:35,450 >> І тому він має адресу 4 і 5 значення. 619 00:25:35,450 --> 00:25:38,080 І тоді я сказав INT зірка покажчик. 620 00:25:38,080 --> 00:25:40,070 Так що це інший тип, повідомлення. 621 00:25:40,070 --> 00:25:43,220 Int зірка покажчик дорівнює адреса х. 622 00:25:43,220 --> 00:25:46,425 Так що буде значення PTR? 623 00:25:46,425 --> 00:25:47,710 624 00:25:47,710 --> 00:25:51,600 Це збирається бути адреса х, тут. 625 00:25:51,600 --> 00:25:54,190 ОК, так що значення буде бути таким же, як адресу. 626 00:25:54,190 --> 00:25:56,130 Це призначення працювати, що я роблю. 627 00:25:56,130 --> 00:25:59,380 А потім PTR матиме його власну адресу, який виявляється, 628 00:25:59,380 --> 00:26:02,050 в цьому випадку, 8, ОК? 629 00:26:02,050 --> 00:26:03,850 630 00:26:03,850 --> 00:26:05,900 >> А потім я створюю новий ціле копію. 631 00:26:05,900 --> 00:26:08,790 І я говорю INT копія одно йдуть туди. 632 00:26:08,790 --> 00:26:11,140 Так що до того, що PTR вказує на. 633 00:26:11,140 --> 00:26:13,940 Ну, що це PTR є? 634 00:26:13,940 --> 00:26:14,740 Ptr має 0x04. 635 00:26:14,740 --> 00:26:16,060 636 00:26:16,060 --> 00:26:18,400 Що станеться, якщо я намагаюся піти туди? 637 00:26:18,400 --> 00:26:23,650 Я знайду хлопця, який має Адреса х і який має адресу 4. 638 00:26:23,650 --> 00:26:25,970 І хто має рішення чотирьох є х. 639 00:26:25,970 --> 00:26:26,950 Чи має це сенс? 640 00:26:26,950 --> 00:26:28,295 641 00:26:28,295 --> 00:26:28,795 Да? 642 00:26:28,795 --> 00:26:32,060 >> СТУДЕНТ: В цьому випадку, є покажчик в стеці? 643 00:26:32,060 --> 00:26:36,024 >> Binky: В цьому випадку, it's-- хороше запитання. 644 00:26:36,024 --> 00:26:38,690 Я дійсно не думаю про це при складанні цих адрес. 645 00:26:38,690 --> 00:26:42,570 Але якщо це, як все це локальні змінні, 646 00:26:42,570 --> 00:26:46,372 то х житиме in-- все житиме в стеці. 647 00:26:46,372 --> 00:26:48,330 Так що все йде бути спрямований в стек. 648 00:26:48,330 --> 00:26:49,360 649 00:26:49,360 --> 00:26:52,700 Ви можете отримати тільки в купі коли це Ви починаєте використовувати Танос, чи не так? 650 00:26:52,700 --> 00:26:59,430 >> Так що, якщо ви пам'ятаєте стек щоразу Ви викликаєте функцію у вашій програмі, 651 00:26:59,430 --> 00:27:02,800 як, наприклад, основна, або будь-яке Інша функція, як Printf. 652 00:27:02,800 --> 00:27:06,334 Все локальні змінні є збирається отримати покласти в кадрі стека. 653 00:27:06,334 --> 00:27:08,500 І вони збираються, щоб отримати як складається в стопку. 654 00:27:08,500 --> 00:27:09,930 Це те, що називається стек. 655 00:27:09,930 --> 00:27:12,200 І всі ці локальні змінні збираються бути там. 656 00:27:12,200 --> 00:27:14,940 І heap-- і ми збираємося щоб більше про це later-- говорити 657 00:27:14,940 --> 00:27:19,050 Куча, де все динамічно розподіляється життя пам'яті. 658 00:27:19,050 --> 00:27:20,270 Прохолодний? 659 00:27:20,270 --> 00:27:21,680 >> Ми йдемо в цей слайд. 660 00:27:21,680 --> 00:27:22,800 Да? 661 00:27:22,800 --> 00:27:25,490 >> СТУДЕНТ: Чому не INT копія повернення 0x04? 662 00:27:25,490 --> 00:27:27,870 663 00:27:27,870 --> 00:27:30,066 >> М'які: Чому не INT копія повернення 0x04? 664 00:27:30,066 --> 00:27:32,450 >> СТУДЕНТ: Чому не в тому, що [нерозбірливо]? 665 00:27:32,450 --> 00:27:35,530 >> М'які: Тому що це значення PTR? 666 00:27:35,530 --> 00:27:37,394 667 00:27:37,394 --> 00:27:38,370 >> СТУДЕНТ: 0x04. 668 00:27:38,370 --> 00:27:38,960 >> М'які: 0x04. 669 00:27:38,960 --> 00:27:40,910 Що станеться, якщо ви йдете в 0x04? 670 00:27:40,910 --> 00:27:41,620 Що ви отримуєте? 671 00:27:41,620 --> 00:27:42,371 >> СТУДЕНТ: О, добре. 672 00:27:42,371 --> 00:27:42,995 М'які: Ви бачите? 673 00:27:42,995 --> 00:27:43,536 СТУДЕНТ: Так. 674 00:27:43,536 --> 00:27:44,890 М'які: Таким чином, ви отримуєте 5. 675 00:27:44,890 --> 00:27:49,170 Так копія матиме 5, якщо це має сенс. 676 00:27:49,170 --> 00:27:49,809 Да? 677 00:27:49,809 --> 00:27:52,803 >> СТУДЕНТ: Чи не могли б ми отримали 5 на текстовому полі [нерозбірливо] 678 00:27:52,803 --> 00:27:55,300 якщо покласти INT скопіювати [нерозбірливо]. 679 00:27:55,300 --> 00:27:56,710 >> М'які: Int-- ми б, так. 680 00:27:56,710 --> 00:27:59,080 Це було б зроблено в значній мірі те ж саме. 681 00:27:59,080 --> 00:28:02,080 Але цей шлях, ми можемо перейти звернутися до функцій. 682 00:28:02,080 --> 00:28:05,050 І це здорово, що ми збираємося зробити прямо зараз. 683 00:28:05,050 --> 00:28:06,770 684 00:28:06,770 --> 00:28:13,090 >> Тому такого роду вправи завжди придумує on-- дуже зазвичай приходить на вікторинах. 685 00:28:13,090 --> 00:28:15,870 Так що це дійсно добре, щоб спробувати зробити таку річ самостійно. 686 00:28:15,870 --> 00:28:21,210 Тому постарайтеся, щоб відстежувати, що адреса це і хочу значення змінних 687 00:28:21,210 --> 00:28:22,620 є в кожній точці. 688 00:28:22,620 --> 00:28:24,370 Так що це точно те, що ми збираємося зробити. 689 00:28:24,370 --> 00:28:26,988 Тут ми маємо кроки, один, два, три, чотири, п'ять. 690 00:28:26,988 --> 00:28:30,530 Один, два, три, чотири, п'ять. 691 00:28:30,530 --> 00:28:33,330 І ми збираємося відстежувати від значень х і. 692 00:28:33,330 --> 00:28:34,650 693 00:28:34,650 --> 00:28:40,530 >> Так що це робить, якщо це помилка в програмному коді, ми намагаємося зробити до п'яти. 694 00:28:40,530 --> 00:28:43,610 Таким чином, ми намагаємося отримати в Змінна і змініть його значення на 5. 695 00:28:43,610 --> 00:28:44,630 696 00:28:44,630 --> 00:28:49,900 І пам'ятайте мою аналогію маючи коробка і вручаючи коробку з кимось? 697 00:28:49,900 --> 00:28:51,515 Так головний має цю опцію під назвою х. 698 00:28:51,515 --> 00:28:52,570 699 00:28:52,570 --> 00:28:54,170 І він містить значення 3. 700 00:28:54,170 --> 00:28:55,230 701 00:28:55,230 --> 00:28:57,455 І я намагаюся передати в цьому полі, щоб до п'яти. 702 00:28:57,455 --> 00:28:58,560 703 00:28:58,560 --> 00:29:01,510 >> І я хочу, щоб п'ять змінити значення цієї рамки до 5. 704 00:29:01,510 --> 00:29:03,080 705 00:29:03,080 --> 00:29:05,120 А потім я просто надрукувати значення х. 706 00:29:05,120 --> 00:29:06,475 707 00:29:06,475 --> 00:29:08,850 Це те, що мій function-- це те, що я намагаюся зробити. 708 00:29:08,850 --> 00:29:12,450 Я просто намагаюся оновити значення х до 5. 709 00:29:12,450 --> 00:29:13,512 710 00:29:13,512 --> 00:29:14,970 Зрозуміло, що функція робить? 711 00:29:14,970 --> 00:29:16,210 712 00:29:16,210 --> 00:29:21,440 >> Отже, що ж буде значення х і прямо тут, 713 00:29:21,440 --> 00:29:27,734 перша лінія, прямо перед першим line-- я б say-- програми? 714 00:29:27,734 --> 00:29:28,940 >> СТУДЕНТ: Напевно сміття. 715 00:29:28,940 --> 00:29:30,023 >> М'які: Просто сміття речі. 716 00:29:30,023 --> 00:29:32,590 Так що я просто покласти N / A. Так ми насправді не знаю. 717 00:29:32,590 --> 00:29:37,400 Мовляв, навіть не все ж існують, бо ми не називається до п'яти. 718 00:29:37,400 --> 00:29:38,980 Int не оголошена. 719 00:29:38,980 --> 00:29:40,030 720 00:29:40,030 --> 00:29:42,920 І х збирається існувати тут, але у нас є не надто 721 00:29:42,920 --> 00:29:45,370 призначено будь-яке значення до нього, так добре? 722 00:29:45,370 --> 00:29:46,570 723 00:29:46,570 --> 00:29:52,340 >> І потім, що збираються бути Значення х і в номер два? 724 00:29:52,340 --> 00:29:54,530 725 00:29:54,530 --> 00:29:55,410 >> СТУДЕНТ: [нерозбірливо]. 726 00:29:55,410 --> 00:29:57,540 >> М'які: Так х буде 3. 727 00:29:57,540 --> 00:29:59,650 Це просто, бо ми присвоюємо 3 до нього. 728 00:29:59,650 --> 00:30:03,500 І ще не існує бо просто живе в п'яти. 729 00:30:03,500 --> 00:30:05,800 Так що я буду мати 3 і нічого. 730 00:30:05,800 --> 00:30:08,590 або як сміття, то, що, насправді не визначені. 731 00:30:08,590 --> 00:30:11,640 732 00:30:11,640 --> 00:30:13,140 І тепер, це важливий напрямок. 733 00:30:13,140 --> 00:30:14,931 Тут ми збираємося насправді назвати до п'яти. 734 00:30:14,931 --> 00:30:17,140 735 00:30:17,140 --> 00:30:18,680 І пам'ятайте, що я сказав. 736 00:30:18,680 --> 00:30:20,240 Ми ніколи не проходять в коробці. 737 00:30:20,240 --> 00:30:23,110 Ми просто скопіювати значення коробка в іншу коробку. 738 00:30:23,110 --> 00:30:27,000 От і все комп'ютери, копіювати речі з одного місця в інше. 739 00:30:27,000 --> 00:30:33,550 >> Так до п'яти, що вона робить це він копіює значення х в. 740 00:30:33,550 --> 00:30:35,130 Так що буде тут? 741 00:30:35,130 --> 00:30:36,210 Значення х і. 742 00:30:36,210 --> 00:30:38,670 743 00:30:38,670 --> 00:30:43,360 3 і 3, ми просто скопіювати це більше з х в. 744 00:30:43,360 --> 00:30:44,710 745 00:30:44,710 --> 00:30:45,320 Прохолодний. 746 00:30:45,320 --> 00:30:46,140 >> Тепер ми тут. 747 00:30:46,140 --> 00:30:47,610 748 00:30:47,610 --> 00:30:49,430 І тепер ми збираємося оновити дорівнює 5. 749 00:30:49,430 --> 00:30:50,900 750 00:30:50,900 --> 00:30:53,070 Що трапиться в четвертому рядку? 751 00:30:53,070 --> 00:30:55,120 752 00:30:55,120 --> 00:30:56,010 >> СТУДЕНТ: [нерозбірливо]. 753 00:30:56,010 --> 00:30:59,685 >> М'які: оновлюється, але х не оновлюється. 754 00:30:59,685 --> 00:31:02,050 755 00:31:02,050 --> 00:31:05,250 Оскільки х до сих пір живе в основному це повністю відрізняється блок пам'яті. 756 00:31:05,250 --> 00:31:06,970 Це інша змінна. 757 00:31:06,970 --> 00:31:07,900 ще одна змінна. 758 00:31:07,900 --> 00:31:10,000 Вони, виявляється, є те ж значення, тому що I 759 00:31:10,000 --> 00:31:13,980 копіюються значення х к. 760 00:31:13,980 --> 00:31:20,070 Але тепер, коли я роблю дорівнює 5, його насправді не впливає х в кожному разі. 761 00:31:20,070 --> 00:31:21,450 Це складніше частину. 762 00:31:21,450 --> 00:31:23,380 Чи має сенс для всіх? 763 00:31:23,380 --> 00:31:24,093 Да? 764 00:31:24,093 --> 00:31:25,717 СТУДЕНТ: І ще одне питання, у вас є 3. 765 00:31:25,717 --> 00:31:27,741 Чому already-- ой, ні, це 3. 766 00:31:27,741 --> 00:31:28,490 На жаль, не беріть в голову. 767 00:31:28,490 --> 00:31:29,310 Я читав 5. 768 00:31:29,310 --> 00:31:30,415 >> М'які: Так, 3, 3. 769 00:31:30,415 --> 00:31:31,540 >> СТУДЕНТ: [нерозбірливо], так. 770 00:31:31,540 --> 00:31:35,290 М'які: А потім ми призначаємо 5 до , Але насправді не змінити х. 771 00:31:35,290 --> 00:31:36,369 Добре? 772 00:31:36,369 --> 00:31:36,910 СТУДЕНТ: Так. 773 00:31:36,910 --> 00:31:37,410 М'які: Да? 774 00:31:37,410 --> 00:31:42,330 Чи можете ви пояснити ще раз, як копіюється [нерозбірливо]? 775 00:31:42,330 --> 00:31:48,480 >> М'які: ОК, так що, коли ви телефонуєте в п'яти х, так що це рядки коду тут. 776 00:31:48,480 --> 00:31:50,100 777 00:31:50,100 --> 00:31:52,340 в п'яти з х, що х? 778 00:31:52,340 --> 00:31:55,160 779 00:31:55,160 --> 00:31:58,340 х знаходиться всього в 3 на даний момент, чи не так? 780 00:31:58,340 --> 00:32:03,320 Таким чином, ви могли б просто думати про здачі 3 в тут і забуваючи про х. 781 00:32:03,320 --> 00:32:04,410 Просто помістіть 3 тут. 782 00:32:04,410 --> 00:32:10,880 Мовляв, ми збираємося копіювати значення х в Int А, це там. 783 00:32:10,880 --> 00:32:12,310 784 00:32:12,310 --> 00:32:13,630 Добре? 785 00:32:13,630 --> 00:32:14,780 >> Таким чином, значення х дорівнює 3. 786 00:32:14,780 --> 00:32:17,680 Ми збираємося копіювати 3 к. 787 00:32:17,680 --> 00:32:20,040 І все це інший блок пам'яті, це інший змінної 788 00:32:20,040 --> 00:32:22,640 називається доведеться 3, а. 789 00:32:22,640 --> 00:32:23,580 Чи має це сенс? 790 00:32:23,580 --> 00:32:24,780 791 00:32:24,780 --> 00:32:25,794 Да? 792 00:32:25,794 --> 00:32:31,008 >> СТУДЕНТ: Якщо ви даєте до п'яти, як Тобто вона як ціле х, а не, 793 00:32:31,008 --> 00:32:32,910 б, що все виправити? 794 00:32:32,910 --> 00:32:36,290 >> М'які: Якщо це integer-- немає, що б не виправити все. 795 00:32:36,290 --> 00:32:37,590 Так що це дуже гарне питання. 796 00:32:37,590 --> 00:32:40,480 Це дійсно не має значення, що Ви викликаєте ці змінні. 797 00:32:40,480 --> 00:32:44,510 Знову ж, це буде проблемою з області видимості, бо вони не те ж саме х. 798 00:32:44,510 --> 00:32:46,526 Вони повністю різні місця в пам'яті. 799 00:32:46,526 --> 00:32:47,400 СТУДЕНТ: [нерозбірливо]. 800 00:32:47,400 --> 00:32:49,020 М'які: Так це насправді не Неважливо, що ви їх називаєте. 801 00:32:49,020 --> 00:32:50,480 Це не виправити становище, ОК? 802 00:32:50,480 --> 00:32:53,390 803 00:32:53,390 --> 00:32:54,430 Ще питання? 804 00:32:54,430 --> 00:32:55,762 Да? 805 00:32:55,762 --> 00:32:58,498 >> СТУДЕНТ: Як це назад номер п'ять [нерозбірливо]? 806 00:32:58,498 --> 00:32:59,661 807 00:32:59,661 --> 00:33:01,160 М'які: ОК, ми не зробили, що ще. 808 00:33:01,160 --> 00:33:03,432 Підемо в номер п'ять, потім. 809 00:33:03,432 --> 00:33:04,650 >> СТУДЕНТ: [нерозбірливо]? 810 00:33:04,650 --> 00:33:05,565 >> М'які: Що? 811 00:33:05,565 --> 00:33:08,179 >> СТУДЕНТ: У вас є повернення взагалі? 812 00:33:08,179 --> 00:33:09,970 М'які: Ми не маємо повернення не головна. 813 00:33:09,970 --> 00:33:12,940 Але головні повертає 0 автоматично якщо ви нічого не повернути. 814 00:33:12,940 --> 00:33:14,400 815 00:33:14,400 --> 00:33:15,188 Да? 816 00:33:15,188 --> 00:33:22,658 >> СТУДЕНТ: Чи не могли б ви зробити main-- або не могли б ви зробити до п'яти повертати? 817 00:33:22,658 --> 00:33:24,170 818 00:33:24,170 --> 00:33:27,990 >> М'які: Ми могли б до п'яти повернутися, так. 819 00:33:27,990 --> 00:33:32,527 Але тоді ми мали б призначити х дорівнює значення, що повертається до п'яти, 820 00:33:32,527 --> 00:33:34,360 який був би трохи інша програма. 821 00:33:34,360 --> 00:33:35,440 Вона працюватиме. 822 00:33:35,440 --> 00:33:38,730 Але те, що ми хочемо зробити, це те, що є називається щось змінити на місці. 823 00:33:38,730 --> 00:33:41,690 Тому ми хочемо, щоб насправді змінити цю коробку і не турбуватися 824 00:33:41,690 --> 00:33:44,390 про те, щоб повернутися значення або що-небудь. 825 00:33:44,390 --> 00:33:44,890 Добре? 826 00:33:44,890 --> 00:33:46,490 827 00:33:46,490 --> 00:33:50,150 >> Це так само, як функції підкачування Девід показав в лекції, крім мене 828 00:33:50,150 --> 00:33:51,740 справу тільки з однією змінною. 829 00:33:51,740 --> 00:33:55,960 І він використовував два, так інтервал і б і то тимчасова змінна і ще багато чого. 830 00:33:55,960 --> 00:33:57,020 Добре? 831 00:33:57,020 --> 00:33:58,070 Так що в останньому рядку? 832 00:33:58,070 --> 00:34:04,400 Після п'яти декларацій, це просто збирається йти. 833 00:34:04,400 --> 00:34:06,120 834 00:34:06,120 --> 00:34:10,179 У нас не буде більше, і тільки х раніше буде жити. 835 00:34:10,179 --> 00:34:12,130 >> І що ви думаєте? х не міняє свого значення, 836 00:34:12,130 --> 00:34:15,520 зрештою, бо ми тільки змінивши значення. 837 00:34:15,520 --> 00:34:17,370 Ось чому х було 3 у всьому. 838 00:34:17,370 --> 00:34:17,870 Добре? 839 00:34:17,870 --> 00:34:20,195 840 00:34:20,195 --> 00:34:21,130 Добре. 841 00:34:21,130 --> 00:34:23,560 Так що це програма НЕ домогтися того, що ми хотіли. 842 00:34:23,560 --> 00:34:24,760 Тепер давайте виправимо це. 843 00:34:24,760 --> 00:34:27,440 >> І програма виправлення за допомогою покажчиків. 844 00:34:27,440 --> 00:34:32,300 Те, що ми робимо, ми повинні три Лінії, які відрізняються. 845 00:34:32,300 --> 00:34:34,020 Перші в ми не проходячи х. 846 00:34:34,020 --> 00:34:35,535 Ми передаючи адресу х. 847 00:34:35,535 --> 00:34:37,330 848 00:34:37,330 --> 00:34:40,876 Таким чином, замість копіювання більш значення з коробки, 849 00:34:40,876 --> 00:34:42,500 Я все ще збираюся копіювати щось. 850 00:34:42,500 --> 00:34:45,380 Але я копіюванні над адреса коробки. 851 00:34:45,380 --> 00:34:48,780 >> Так що, якщо я передати адресу коробка з п'яти, потім до п'яти 852 00:34:48,780 --> 00:34:51,560 зможуть знайти, що в Пам'ять і змініть його значення. 853 00:34:51,560 --> 00:34:53,980 854 00:34:53,980 --> 00:34:59,580 >> Так і там, у мене є що ні INT більше. 855 00:34:59,580 --> 00:35:00,882 є інтервал зірка. 856 00:35:00,882 --> 00:35:02,090 Це покажчик на ціле. 857 00:35:02,090 --> 00:35:03,790 858 00:35:03,790 --> 00:35:07,310 А потім, бо я передаю звернутися сюди, а потім, що я роблю 859 00:35:07,310 --> 00:35:10,530 НЕ дорівнює 5, тому проводить адресу. 860 00:35:10,530 --> 00:35:16,710 Так що я хочу зробити, це піти туди і оновити вміст цієї адреси 861 00:35:16,710 --> 00:35:18,305 з 5. 862 00:35:18,305 --> 00:35:21,130 >> Отже, давайте пройдемо всі лінії один за іншим. 863 00:35:21,130 --> 00:35:22,410 864 00:35:22,410 --> 00:35:26,024 Так що, коли я починаю тут, я до сих пір N / A, N / A, N / A 865 00:35:26,024 --> 00:35:28,440 за все в перший лінія, тому що у мене не дуже 866 00:35:28,440 --> 00:35:29,390 заявив матеріал ще. 867 00:35:29,390 --> 00:35:30,980 868 00:35:30,980 --> 00:35:35,110 А потім другий лінії, у мене є х дорівнює 3. 869 00:35:35,110 --> 00:35:38,020 INT зірка не існує, Те ж саме, як і раніше. 870 00:35:38,020 --> 00:35:39,160 871 00:35:39,160 --> 00:35:40,640 >> Тепер починається найцікавіше. 872 00:35:40,640 --> 00:35:42,300 Так що я збираюся пройти. 873 00:35:42,300 --> 00:35:45,720 І давайте припустимо, що за адресою х 12 в шістнадцятковому вигляді. 874 00:35:45,720 --> 00:35:46,880 875 00:35:46,880 --> 00:35:48,420 Давайте просто припустимо це. 876 00:35:48,420 --> 00:35:49,221 Я зробив це. 877 00:35:49,221 --> 00:35:51,680 878 00:35:51,680 --> 00:35:53,500 Так, що я проходячи тут до п'яти. 879 00:35:53,500 --> 00:35:54,460 Я передаю 12. 880 00:35:54,460 --> 00:35:56,390 881 00:35:56,390 --> 00:35:58,610 >> Так що значення не мають? 882 00:35:58,610 --> 00:36:04,785 883 00:36:04,785 --> 00:36:06,210 >> СТУДЕНТ: [нерозбірливо]. 884 00:36:06,210 --> 00:36:06,950 >> М'які: Вибачте? 885 00:36:06,950 --> 00:36:08,145 >> СТУДЕНТ: [нерозбірливо]. 886 00:36:08,145 --> 00:36:10,520 М'які: Так, як, до давайте Припустимо, що ми тут, зараз. 887 00:36:10,520 --> 00:36:11,540 888 00:36:11,540 --> 00:36:12,040 Я питаю. 889 00:36:12,040 --> 00:36:12,915 >> СТУДЕНТ: [нерозбірливо]. 890 00:36:12,915 --> 00:36:13,590 891 00:36:13,590 --> 00:36:14,890 >> М'які: Було порушено. 892 00:36:14,890 --> 00:36:15,860 >> СТУДЕНТ: [нерозбірливо]. 893 00:36:15,860 --> 00:36:17,985 М'які: Тому що ми пройшли щось функції. 894 00:36:17,985 --> 00:36:19,431 895 00:36:19,431 --> 00:36:19,930 Да? 896 00:36:19,930 --> 00:36:20,899 >> СТУДЕНТ: Адреса х. 897 00:36:20,899 --> 00:36:22,690 М'які: Це збирається є адреса х. 898 00:36:22,690 --> 00:36:25,800 А також адреса х 12, добре. 899 00:36:25,800 --> 00:36:30,990 Так х буде 3, тому що ми насправді не змінилася х ще. 900 00:36:30,990 --> 00:36:36,700 А потім буде 0x12, так адреса х, тому що це 901 00:36:36,700 --> 00:36:38,840 те, що ми пройшли, щоб до п'яти. 902 00:36:38,840 --> 00:36:40,940 >> І тоді те, що відбувається якщо ми намагаємося піти туди? 903 00:36:40,940 --> 00:36:42,145 Що ми збираємося знайти? 904 00:36:42,145 --> 00:36:47,120 Так що, якщо ви спробуєте роздрукувати зірка, ми збираємося слідувати цю адресу 905 00:36:47,120 --> 00:36:48,620 і отримати значення всередині. 906 00:36:48,620 --> 00:36:50,470 І це значення просто те ж значення, що х 907 00:36:50,470 --> 00:36:53,980 має, бо це адреса х, які будуть 3. 908 00:36:53,980 --> 00:36:55,440 909 00:36:55,440 --> 00:36:56,930 Невже ми добре? 910 00:36:56,930 --> 00:36:59,990 >> ОК, а потім в даний час, ми насправді йти туди. 911 00:36:59,990 --> 00:37:05,510 І ми оновлюємо все в цій адресі 12. 912 00:37:05,510 --> 00:37:07,390 Ми робимо це 5. 913 00:37:07,390 --> 00:37:10,560 Так що тепер обидві х і зірка знаходяться 5. 914 00:37:10,560 --> 00:37:13,170 915 00:37:13,170 --> 00:37:13,680 >> Чому це? 916 00:37:13,680 --> 00:37:17,070 Оскільки адреса х 12. 917 00:37:17,070 --> 00:37:20,920 І є також 12 як своє значення. 918 00:37:20,920 --> 00:37:23,780 Так що, якщо ми будемо слідувати 12, ми просто хочу, щоб знайти х. 919 00:37:23,780 --> 00:37:27,400 Так, що ми робимо з зірка станеться 920 00:37:27,400 --> 00:37:30,790 х, бо містить адреса х. 921 00:37:30,790 --> 00:37:31,918 922 00:37:31,918 --> 00:37:32,418 Добре? 923 00:37:32,418 --> 00:37:34,090 924 00:37:34,090 --> 00:37:37,750 >> І це, як в суть виправлення. 925 00:37:37,750 --> 00:37:41,500 Так що тепер ми можемо, від до п'яти, насправді 926 00:37:41,500 --> 00:37:43,840 доступ до пам'яті, що жили в основний. 927 00:37:43,840 --> 00:37:47,980 Так ця пам'ять не живе в с п'ять, як раніше, це адреса 12. 928 00:37:47,980 --> 00:37:50,980 І ми змогли піти туди і змініть його значення на 5. 929 00:37:50,980 --> 00:37:53,990 >> А потім, коли ми повернемося, ми забуваємо о. 930 00:37:53,990 --> 00:37:55,720 Ми забуваємо про зірку. 931 00:37:55,720 --> 00:37:57,020 І х ще п'ять. 932 00:37:57,020 --> 00:37:58,327 933 00:37:58,327 --> 00:38:00,160 Так що, якщо ви хочете, щоб реалізувати функцію підкачки, 934 00:38:00,160 --> 00:38:05,010 Ви б просто зробити ту ж саму річ, крім вам потрібно INT зірки тут, 935 00:38:05,010 --> 00:38:06,140 і так далі і тому подібне. 936 00:38:06,140 --> 00:38:06,976 Добре? 937 00:38:06,976 --> 00:38:07,475 Невже ми добре? 938 00:38:07,475 --> 00:38:09,860 939 00:38:09,860 --> 00:38:10,610 Прохолодний. 940 00:38:10,610 --> 00:38:12,410 >> Так покажчик арифметика. 941 00:38:12,410 --> 00:38:13,960 Це трохи складно тема. 942 00:38:13,960 --> 00:38:16,554 Ось і виходить, що Покажчики всього числа. 943 00:38:16,554 --> 00:38:17,970 Ви можете думати про них як цілі числа. 944 00:38:17,970 --> 00:38:21,080 Тому що в пам'яті, у вас є як Пам'ять адресу нуль, один, два, три, 945 00:38:21,080 --> 00:38:21,900 чотири, п'ять. 946 00:38:21,900 --> 00:38:23,900 Таким чином, ми можемо підвести адреси пам'яті. 947 00:38:23,900 --> 00:38:27,230 >> І це, як правило, те, що ви робите, коли Ви знаходитесь в і масиву, наприклад. 948 00:38:27,230 --> 00:38:30,540 Масив просто подобається суміжними блок пам'яті, з великої кількості символів, 949 00:38:30,540 --> 00:38:31,840 наприклад, багато цілих чисел. 950 00:38:31,840 --> 00:38:34,420 Так що якщо ви хочете піти в Другий інтервал або до третьої междунар, 951 00:38:34,420 --> 00:38:37,830 Ви можете просто підвести дещо, щоб перший адреса, і ви збираєтеся потрапити. 952 00:38:37,830 --> 00:38:39,620 Так що це дійсно корисно для цього. 953 00:38:39,620 --> 00:38:41,850 >> І справа мати на увазі, однак, є 954 00:38:41,850 --> 00:38:45,140 що це не просто подобається нормальна арифметика в тому сенсі, 955 00:38:45,140 --> 00:38:50,304 що якщо ви маєте справу з, скажімо, INT зірка, і ви додаєте до нього 1, 956 00:38:50,304 --> 00:38:52,220 то ви не збираєтеся додати 1 за адресою, 957 00:38:52,220 --> 00:38:53,950 Ви збираєтеся додати 4 за адресою. 958 00:38:53,950 --> 00:38:55,030 959 00:38:55,030 --> 00:38:56,670 Оскільки інтервал становить 4 байта. 960 00:38:56,670 --> 00:38:57,720 961 00:38:57,720 --> 00:38:59,540 >> Так що це, як ходити на масиві. 962 00:38:59,540 --> 00:39:05,260 Якщо у нас є масив великою кількістю цілих чисел і Потім ми намагаємося піти на другий, 963 00:39:05,260 --> 00:39:08,790 це в основному просто підбиваючи адресу першого один плюс один. 964 00:39:08,790 --> 00:39:10,040 965 00:39:10,040 --> 00:39:13,425 Але це не буде be-- просто скажемо що адреса першого є 4. 966 00:39:13,425 --> 00:39:14,560 967 00:39:14,560 --> 00:39:16,250 Тут, в цьому випадку. 968 00:39:16,250 --> 00:39:19,780 969 00:39:19,780 --> 00:39:22,850 І якщо підсумувати, так це це те, що відбувається. 970 00:39:22,850 --> 00:39:23,530 У нас є Int. 971 00:39:23,530 --> 00:39:25,640 Int х дорівнює 5. 972 00:39:25,640 --> 00:39:26,950 Х має значення 5. 973 00:39:26,950 --> 00:39:31,240 І ми инициализировать цей покажчик, INT у INT зірка у дорівнює адресу х. 974 00:39:31,240 --> 00:39:33,660 >> Давайте припустимо, адреса х 4. 975 00:39:33,660 --> 00:39:36,960 Що трапиться Тепер, якщо я сума додати 1 к у? 976 00:39:36,960 --> 00:39:39,110 977 00:39:39,110 --> 00:39:44,790 Це відбувається насправді сума 4, а не просто 1. 978 00:39:44,790 --> 00:39:50,920 Тому я додати 1, але це насправді додано 4, бо комп'ютера смарт. 979 00:39:50,920 --> 00:39:55,275 Так це буде насправді додати по I раз Розмір типу покажчика. 980 00:39:55,275 --> 00:39:56,340 981 00:39:56,340 --> 00:39:56,840 Добре? 982 00:39:56,840 --> 00:39:58,030 983 00:39:58,030 --> 00:40:02,440 >> Таким чином, якби він був символ, наприклад, якби це було символ зірка у, 984 00:40:02,440 --> 00:40:07,141 і якщо ми додали 1, то це буде бути 5, бо символ є довжиною 1 байт. 985 00:40:07,141 --> 00:40:07,640 Добре? 986 00:40:07,640 --> 00:40:10,560 987 00:40:10,560 --> 00:40:13,190 >> І, нарешті, ми дісталися до покажчики і масиви. 988 00:40:13,190 --> 00:40:16,451 Виходить, що кожен раз, коли Ви маєте справу з масивом, 989 00:40:16,451 --> 00:40:18,075 ви насправді маємо справу з покажчиком. 990 00:40:18,075 --> 00:40:19,720 991 00:40:19,720 --> 00:40:24,777 Дуже хороший концептуальний причина це що масиви дуже великі. 992 00:40:24,777 --> 00:40:27,360 Так що пам'ятайте, що я сказав, що кожен раз, коли ви проходите речі навколо, 993 00:40:27,360 --> 00:40:29,097 скопіювати весь вміст. 994 00:40:29,097 --> 00:40:31,180 Так що якщо у вас є масив що насправді, дійсно великий, 995 00:40:31,180 --> 00:40:32,990 Ви дійсно не хочете скопіювати всі щоразу 996 00:40:32,990 --> 00:40:35,710 Ви передавати його в іншу Функція, бо це просто 997 00:40:35,710 --> 00:40:37,190 величезну кількість роботи. 998 00:40:37,190 --> 00:40:39,710 Так що вам зробити, це просто мимо адреса першого байта. 999 00:40:39,710 --> 00:40:40,969 1000 00:40:40,969 --> 00:40:44,010 І то функція буде мати доступ для всіх елементів в цьому масиві. 1001 00:40:44,010 --> 00:40:48,670 Таким чином, ви пройшли масив, його адреса, так що адреса першого байта. 1002 00:40:48,670 --> 00:40:53,010 >> Так що, якщо ми заявляємо INT Масив 3, тут, ми знаємо, 1003 00:40:53,010 --> 00:40:57,470 як отримати доступ до першого елемента використовуючи позначення кронштейна. 1004 00:40:57,470 --> 00:41:02,410 Якщо ви пам'ятаєте, кронштейн позначення, масив кронштейн 0 дорівнює 1. 1005 00:41:02,410 --> 00:41:06,330 Ну, це було б точно ж, як тільки туди і покласти 1. 1006 00:41:06,330 --> 00:41:07,370 1007 00:41:07,370 --> 00:41:09,110 ОК, це рівно те ж саме. 1008 00:41:09,110 --> 00:41:13,010 Так позначеннях кронштейном в здесь буде таким же, як цієї лінії. 1009 00:41:13,010 --> 00:41:18,600 >> І що ви думаєте позначення кронштейна для масиву кронштейна 1 буде? 1010 00:41:18,600 --> 00:41:20,440 Це якраз і буде те ж саме, це. 1011 00:41:20,440 --> 00:41:22,500 Так що додайте один для масиву. 1012 00:41:22,500 --> 00:41:24,370 Переміщення один вздовж в пам'яті. 1013 00:41:24,370 --> 00:41:26,310 Ідіть туди, і покласти 2. 1014 00:41:26,310 --> 00:41:28,050 1015 00:41:28,050 --> 00:41:28,579 Добре? 1016 00:41:28,579 --> 00:41:29,870 І ця лінія те ж саме. 1017 00:41:29,870 --> 00:41:34,860 Ми хочемо, щоб піти в третій коробка, так масив плюс 2. 1018 00:41:34,860 --> 00:41:37,465 Ідіть туди, і покласти 3. 1019 00:41:37,465 --> 00:41:39,340 Таким чином, в пам'яті, що відбудеться це ми 1020 00:41:39,340 --> 00:41:44,400 матиме 1, 2 і 3, як три елементи цього масиву. 1021 00:41:44,400 --> 00:41:46,970 >> Ми могли б зробити це за допомогою наш знайомий позначення кронштейна. 1022 00:41:46,970 --> 00:41:49,410 Я просто хочу, щоб ви, хлопці, знаєте, що вони одне й те саме. 1023 00:41:49,410 --> 00:41:50,530 1024 00:41:50,530 --> 00:41:53,010 ОК, питання з цього приводу? 1025 00:41:53,010 --> 00:41:56,115 1026 00:41:56,115 --> 00:41:56,615 Хороший. 1027 00:41:56,615 --> 00:41:57,990 1028 00:41:57,990 --> 00:41:59,880 Тепер, я збираюся здати це на Ханну, 1029 00:41:59,880 --> 00:42:00,330 >> Ханна: Ура, Йі-Хо. 1030 00:42:00,330 --> 00:42:02,246 >> М'які: Говорячи про пам'яті і стаття речі. 1031 00:42:02,246 --> 00:42:06,554 [Оплески] 1032 00:42:06,554 --> 00:42:10,150 >> Ханна: Привіт, здорово, так що ми будемо говорити трохи більше 1033 00:42:10,150 --> 00:42:13,090 про пам'ять, про який ми щойно звернувся за допомогою покажчиків. 1034 00:42:13,090 --> 00:42:16,060 Таким чином, є дві основні частини пам'яті, що ми стурбовані. 1035 00:42:16,060 --> 00:42:18,830 У нас є стек, який росте в нижній частині, і купи, який 1036 00:42:18,830 --> 00:42:20,600 йде вниз від вершини. 1037 00:42:20,600 --> 00:42:24,690 І стек збирається провести всі наші змінні екземпляра. 1038 00:42:24,690 --> 00:42:28,860 Таким чином, кожен називає по функція отримує свій власний маленький кадр в стеці. 1039 00:42:28,860 --> 00:42:32,160 Так як Гейб вже згадувалося раніше, якщо ми знову і знову викликати функцію, 1040 00:42:32,160 --> 00:42:34,180 ми збираємося складати речі в стеці. 1041 00:42:34,180 --> 00:42:35,220 1042 00:42:35,220 --> 00:42:38,570 >> І точно так само, купа, який починається у верхній 1043 00:42:38,570 --> 00:42:42,660 збирається провести всю пам'ять що ми динамічно виділяти. 1044 00:42:42,660 --> 00:42:45,110 І так як ми динамічно виділити пам'ять, 1045 00:42:45,110 --> 00:42:47,580 це зійде до низу. 1046 00:42:47,580 --> 00:42:51,340 Пара речей, щоб бути в курсі, коли ми використовуємо стек і купу, 1047 00:42:51,340 --> 00:42:55,200 зі стеком, якщо ми маємо занадто many-- давайте say-- рекурсивні виклики, 1048 00:42:55,200 --> 00:42:58,392 і ми називаємо функцію знову, і знову, і знову, і знову, 1049 00:42:58,392 --> 00:43:00,350 і це до укладання, до укладання, укладання до. 1050 00:43:00,350 --> 00:43:01,570 І це буде врізатися в купу. 1051 00:43:01,570 --> 00:43:03,040 Ми збираємося запустити з пам'яті. 1052 00:43:03,040 --> 00:43:05,100 Це збирається викликати Проблема для комп'ютера. 1053 00:43:05,100 --> 00:43:06,770 І це називається переповнення стека. 1054 00:43:06,770 --> 00:43:09,728 Так що, безумовно, щось вас повинен знати і намагатися уникати. 1055 00:43:09,728 --> 00:43:10,228 1056 00:43:10,228 --> 00:43:14,050 І купа, повинні пам'ятати, щоб випадково не відбувається витік пам'яті. 1057 00:43:14,050 --> 00:43:17,950 Щоразу, коли ви використовуєте Танос, що не забудьте звільнити цю пам'ять. 1058 00:43:17,950 --> 00:43:20,040 В іншому випадку, це буде просто бути в купі даремно, 1059 00:43:20,040 --> 00:43:23,230 і комп'ютер не знатиме, що він може вільно використовувати цю пам'ять. 1060 00:43:23,230 --> 00:43:25,810 Так що ті, пара речей бути дуже обережні з тим, коли 1061 00:43:25,810 --> 00:43:28,580 Ви маєте справу з стек і купа. 1062 00:43:28,580 --> 00:43:30,412 Будь-які питання з цим? 1063 00:43:30,412 --> 00:43:31,304 Дивовижний. 1064 00:43:31,304 --> 00:43:31,900 >> Добре, прохолодно. 1065 00:43:31,900 --> 00:43:32,940 1066 00:43:32,940 --> 00:43:36,810 Так цей вид має те ж саме Ідея, як переповнення стека, де 1067 00:43:36,810 --> 00:43:39,850 ми збираємося за Межі того, що пам'ять 1068 00:43:39,850 --> 00:43:41,960 буде ми повинні бути в змозі використати. 1069 00:43:41,960 --> 00:43:45,077 Так що беріть, наприклад, буфер, або ви може просто думати про це як масив. 1070 00:43:45,077 --> 00:43:47,660 І ми сказали, добре, що ми збираємося створити цей миленький масив. 1071 00:43:47,660 --> 00:43:49,140 Це збирається бути рядком. 1072 00:43:49,140 --> 00:43:50,630 Чи він збирається зберігати символи. 1073 00:43:50,630 --> 00:43:51,720 І це тільки збирається, щоб привітатися. 1074 00:43:51,720 --> 00:43:52,678 І це невизначене. 1075 00:43:52,678 --> 00:43:53,990 Це так. 1076 00:43:53,990 --> 00:43:58,240 >> Але якби я був хтось зло і хотів зробити щось погане з цього масиву, що 1077 00:43:58,240 --> 00:44:02,310 Я міг би зробити, це спробувати написати мимо кінця рядка. 1078 00:44:02,310 --> 00:44:04,490 І, як ви побачите, якщо Я пишу досить далеко, 1079 00:44:04,490 --> 00:44:06,980 Я може реально впливати на адресаповернення. 1080 00:44:06,980 --> 00:44:09,530 І якщо я починаю впливає адресаповернення, 1081 00:44:09,530 --> 00:44:11,730 Я впливати як програма насправді працює. 1082 00:44:11,730 --> 00:44:15,900 І замість того щоб повернутися, вам знаю, щасливу рядок виду привіт, я 1083 00:44:15,900 --> 00:44:19,460 міг зробити щось погане, як перейти до десь ще в вашому комп'ютері, ще 1084 00:44:19,460 --> 00:44:22,146 пам'яті, змінити його, все, що я хочу зробити. 1085 00:44:22,146 --> 00:44:25,020 Так ось що це буде виглядати якщо я тільки почасти заповнили його 1086 00:44:25,020 --> 00:44:27,400 зі випадкової величини сміття, В цьому випадку, так само. 1087 00:44:27,400 --> 00:44:30,490 А потім, коли я насправді потрапили за адресою пам'яті, 1088 00:44:30,490 --> 00:44:33,740 Я почав заповнювати його з чимось що зробив те, що я хотів, щоб це зробити. 1089 00:44:33,740 --> 00:44:34,952 1090 00:44:34,952 --> 00:44:36,410 Будь-які питання з переповненням буфера? 1091 00:44:36,410 --> 00:44:38,450 1092 00:44:38,450 --> 00:44:40,730 Високий, літати прямо через цей матеріал. 1093 00:44:40,730 --> 00:44:43,530 >> Отже, ми багато говорили про про покажчика з Gabe. 1094 00:44:43,530 --> 00:44:45,790 Як ми насправді отримати покажчик? 1095 00:44:45,790 --> 00:44:48,070 Як ми можемо отримати адресу в пам'яті? 1096 00:44:48,070 --> 00:44:51,040 Ну, ми можемо використовувати цей хороший Функція виклику Танос, які 1097 00:44:51,040 --> 00:44:53,370 збирається отримати маленький шматочок пам'яті, 1098 00:44:53,370 --> 00:44:55,480 зокрема, в купа, як ми обговорювали, 1099 00:44:55,480 --> 00:44:59,780 і він збирається дати вам назад покажчик на цю адресу в пам'яті. 1100 00:44:59,780 --> 00:45:01,950 І аргумент, що ми повинні дати Malloc 1101 00:45:01,950 --> 00:45:04,280 це скільки місця в пам'яті ми хочемо. 1102 00:45:04,280 --> 00:45:06,100 >> Таким чином, ви можете побачити розмір в байт. 1103 00:45:06,100 --> 00:45:08,670 Скажімо, наприклад, або насправді, в цьому прикладі, 1104 00:45:08,670 --> 00:45:12,040 ми виділяємо достатньо простір для 10 чисел. 1105 00:45:12,040 --> 00:45:15,640 Так, ймовірно, те, що ми збираємося хочу поставити тут є масивом з 10 цілих чисел. 1106 00:45:15,640 --> 00:45:19,641 Так ми даємо йому розмір цілих чисел, які Ми дізналися, було скільки байт? 1107 00:45:19,641 --> 00:45:20,140 СТУДЕНТ: 4. 1108 00:45:20,140 --> 00:45:22,920 Ханна: 4, красивий, і ми хочу 10 з них підряд, 1109 00:45:22,920 --> 00:45:28,050 так що у нас є достатньо місця для зберігати всі 10 чисел, в цьому випадку. 1110 00:45:28,050 --> 00:45:31,290 Щось супер важливо, в будь-який час подзвонити Танос, 1111 00:45:31,290 --> 00:45:32,880 Ви повинні перевірити нуль. 1112 00:45:32,880 --> 00:45:37,310 Якщо ви не перевірити нуль, а, Танос якщо вона не вистачило місця 1113 00:45:37,310 --> 00:45:40,400 і більше не може дати вам будь більше пам'яті, то він поверне нуль. 1114 00:45:40,400 --> 00:45:42,060 1115 00:45:42,060 --> 00:45:45,630 Так що, якщо ви не перевірити, Танос може повернутися нуль. 1116 00:45:45,630 --> 00:45:51,265 І тоді, якщо ми спробуємо разименовать нульовим покажчиком, 1117 00:45:51,265 --> 00:45:54,960 ми збираємося, щоб отримати помилку сегментації, який ми будемо говорити про прямо зараз. 1118 00:45:54,960 --> 00:45:56,150 1119 00:45:56,150 --> 00:45:56,650 Дивовижний. 1120 00:45:56,650 --> 00:45:58,300 >> ОК, питання з Танос? 1121 00:45:58,300 --> 00:46:00,044 1122 00:46:00,044 --> 00:46:00,544 Да? 1123 00:46:00,544 --> 00:46:05,460 >> СТУДЕНТ: Хіба перевірки нульової [Нерозбірливо] не зробити це на вікторині? 1124 00:46:05,460 --> 00:46:08,100 >> Ханна: Звичайно, питання було це matter-- на вікторині, 1125 00:46:08,100 --> 00:46:10,420 ви будете отримувати окуляри, якби Ви не перевіряють нуль? 1126 00:46:10,420 --> 00:46:12,794 Так, ви будете отримувати окуляри від якщо ви не перевірити нуль. 1127 00:46:12,794 --> 00:46:16,030 Щоразу, коли ви телефонуєте Танос, як на вікторина і ваші psets і в реальному житті, 1128 00:46:16,030 --> 00:46:17,155 Ви повинні перевірити нуль. 1129 00:46:17,155 --> 00:46:18,330 Хороше питання. 1130 00:46:18,330 --> 00:46:19,689 >> Гейб: Що робити, якщо я не звільнити? 1131 00:46:19,689 --> 00:46:21,730 Ханна: Гейб хоче знати, що робити, якщо ми не безкоштовно. 1132 00:46:21,730 --> 00:46:25,030 Тоді у нас буде витік пам'яті в нашій купі. 1133 00:46:25,030 --> 00:46:26,140 Ще питання? 1134 00:46:26,140 --> 00:46:27,550 Да? 1135 00:46:27,550 --> 00:46:30,120 >> СТУДЕНТ: Може you-- перейти Переповнення буфера дійсно швидко знову? 1136 00:46:30,120 --> 00:46:30,530 >> Ханна: Звичайно. 1137 00:46:30,530 --> 00:46:33,071 Питання було ми можемо перейти Переповнення дуже швидко буфер. 1138 00:46:33,071 --> 00:46:35,050 Давайте повернемося до тих гірками. 1139 00:46:35,050 --> 00:46:37,430 Так буфера, ви можете просто думати про нього як масив, чи не так? 1140 00:46:37,430 --> 00:46:39,360 У вас є деякий простір в пам'яті. 1141 00:46:39,360 --> 00:46:43,580 І коли ми вперше створюємо масив, ми знаємо, масиви мають фіксований розмір, 1142 00:46:43,580 --> 00:46:45,470 або наш буфер має фіксований розмір. 1143 00:46:45,470 --> 00:46:51,360 >> Так скажімо, в цьому випадку, у нас є тільки достатньо місця, щоб написати рядок привіт. 1144 00:46:51,360 --> 00:46:57,340 Якщо ми йдемо мимо, що кордон, якщо ми йдемо мимо що наш масив ми сказали, що це може провести, 1145 00:46:57,340 --> 00:46:59,780 ми могли б дійсно почати записи в пам'ять 1146 00:46:59,780 --> 00:47:01,780 що комп'ютер не може хочете нам написати в. 1147 00:47:01,780 --> 00:47:02,810 1148 00:47:02,810 --> 00:47:05,580 І зокрема, якщо ми потрапили щось на зразок повернення 1149 00:47:05,580 --> 00:47:08,700 адреса функції, яка, як і будь-який інший шматок пам'яті, 1150 00:47:08,700 --> 00:47:11,420 просто десь у вашому комп'ютер, ви можете насправді 1151 00:47:11,420 --> 00:47:14,080 змінити що і починають творити зло. 1152 00:47:14,080 --> 00:47:15,272 Відповідь на ваше запитання? 1153 00:47:15,272 --> 00:47:16,230 Дивовижний, що-небудь ще? 1154 00:47:16,230 --> 00:47:17,466 Да? 1155 00:47:17,466 --> 00:47:21,948 >> СТУДЕНТ: Так стек [нерозбірливо], ви сказав йти знизу йде вгору. 1156 00:47:21,948 --> 00:47:25,434 В зоні стека, робить пам'ять перейти від, як, 1157 00:47:25,434 --> 00:47:27,230 зверху вниз, що відносяться до кожної перерви? 1158 00:47:27,230 --> 00:47:28,646 1159 00:47:28,646 --> 00:47:32,100 >> Ханна: Як зробити you-- відкласти Робу на цьому. 1160 00:47:32,100 --> 00:47:35,370 1161 00:47:35,370 --> 00:47:38,213 >> ROB: Він буде рости в тому ж напрям, як стек росте. 1162 00:47:38,213 --> 00:47:38,712 Ханна: ОК. 1163 00:47:38,712 --> 00:47:40,967 ROB: Так я заплутатися. 1164 00:47:40,967 --> 00:47:42,331 Це буде абстракція. 1165 00:47:42,331 --> 00:47:42,831 Ханна: ОК. 1166 00:47:42,831 --> 00:47:44,000 ROB: Це правильно. 1167 00:47:44,000 --> 00:47:49,420 Так що, якщо стек росте вгору, то generally-- його 1168 00:47:49,420 --> 00:47:52,380 не повинен бути таким. але ви можете оголосити Int х. 1169 00:47:52,380 --> 00:47:54,120 Тоді ви оголошуєте Int у. 1170 00:47:54,120 --> 00:47:57,300 Тоді інтервал х взагалі буде нижче в стеці, ніж INT у. 1171 00:47:57,300 --> 00:47:59,300 Але це просто факт. 1172 00:47:59,300 --> 00:48:02,410 Це не так, як важливу насіння річ. 1173 00:48:02,410 --> 00:48:06,800 >> ROB: Так що питання знову було просто що відбувається кожен кадр накопичується. 1174 00:48:06,800 --> 00:48:08,960 Так кожна функція отримує маленький шматочок стека. 1175 00:48:08,960 --> 00:48:13,030 І, як ви йдете вгору, в тому, що маленький шматочок, в цьому кадрі, 1176 00:48:13,030 --> 00:48:16,710 ми будемо говорити, що змінні в цьому кадрі також рухатися вгору. 1177 00:48:16,710 --> 00:48:17,473 Питання? 1178 00:48:17,473 --> 00:48:18,688 >> ROB: Просто щоб бути на мікрофон. 1179 00:48:18,688 --> 00:48:19,396 Ханна: О, так. 1180 00:48:19,396 --> 00:48:20,440 ROB: Я буду говорити в вас. 1181 00:48:20,440 --> 00:48:21,410 Ханна: О, так, добре. 1182 00:48:21,410 --> 00:48:24,150 ROB: винятком є для масивів і структур, 1183 00:48:24,150 --> 00:48:27,470 де масиви, нижче Індекс в масиві, 1184 00:48:27,470 --> 00:48:29,930 і в структур у вище Поле в структур 1185 00:48:29,930 --> 00:48:35,040 гарантовано будуть на більш низьких адрес ніж пізніший значення в масиві. 1186 00:48:35,040 --> 00:48:36,720 Так що ті, гарантовані. 1187 00:48:36,720 --> 00:48:40,310 Але будь-які конкретні змінні всередині, як INT х і інтервал у у функції, 1188 00:48:40,310 --> 00:48:43,030 немає необхідності відносини між їх адреси. 1189 00:48:43,030 --> 00:48:44,882 1190 00:48:44,882 --> 00:48:46,340 Ханна: Ще одне питання тут? 1191 00:48:46,340 --> 00:48:51,620 СТУДЕНТ: Так в буфер потік, тільки переповнення буфера 1192 00:48:51,620 --> 00:48:54,980 тільки відбулося, коли вам вже, начебто, присвоєний 1193 00:48:54,980 --> 00:49:01,056 Кількість масиву що то більше? 1194 00:49:01,056 --> 00:49:03,230 Мовляв, чи не так? 1195 00:49:03,230 --> 00:49:05,435 Так що, якщо ви просите щось з user-- 1196 00:49:05,435 --> 00:49:06,018 >> Ханна: Мм-ом. 1197 00:49:06,018 --> 00:49:08,600 СТУДЕНТ: Може вони насильно дати вам щось взамін 1198 00:49:08,600 --> 00:49:11,777 це більше, ніж все, що Ви виділено для них? 1199 00:49:11,777 --> 00:49:13,610 Ханна: Звичайно, так Питання було в основному, 1200 00:49:13,610 --> 00:49:16,217 може користувач дасть вам більше, ніж ви просите? 1201 00:49:16,217 --> 00:49:16,800 СТУДЕНТ: Так. 1202 00:49:16,800 --> 00:49:18,480 Ханна: Ну, ви могли б запобігти користувач від цього. 1203 00:49:18,480 --> 00:49:21,350 Ви могли спеціально сказати не дай мені більше, ніж х кількість по байтів 1204 00:49:21,350 --> 00:49:24,330 Я тільки дав вам місце для х кількість байтів, х число символів. 1205 00:49:24,330 --> 00:49:25,700 Так що те, що ви хочете, щоб запобігти. 1206 00:49:25,700 --> 00:49:26,199 Да? 1207 00:49:26,199 --> 00:49:30,270 У чому різниця між Переповнення стека і переповнення буфера? 1208 00:49:30,270 --> 00:49:32,140 >> Ханна: ОК, так що стопка overflow-- ах, який 1209 00:49:32,140 --> 00:49:34,790 різниця між стеком Переповнення і переповнення буфера? 1210 00:49:34,790 --> 00:49:37,581 Тому ми хочемо, щоб думати про переповнення стека відбувається, коли ми насправді 1211 00:49:37,581 --> 00:49:39,530 укладка ці виклики функцій. 1212 00:49:39,530 --> 00:49:42,991 Скажімо у вас є рекурсивную функцію, тому що ми знаємо, що кожен раз, коли ви 1213 00:49:42,991 --> 00:49:45,240 викликати функцію, це стає самостійно рамка на стеці. 1214 00:49:45,240 --> 00:49:47,950 >> Таким чином, ми складають занадто високо, і Потім ми починаємо переливатися. 1215 00:49:47,950 --> 00:49:50,530 І ми використовуємо занадто багато пам'яті, а ми не дійсно є де-небудь залишилося. 1216 00:49:50,530 --> 00:49:51,590 Ми отримуємо цю помилку. 1217 00:49:51,590 --> 00:49:53,930 >> Переповнення буфера знаходиться в межах програми. 1218 00:49:53,930 --> 00:49:57,180 Ми хочемо, щоб, можливо, не обов'язково запустити з пам'яті так само, 1219 00:49:57,180 --> 00:50:00,080 що ми могли б, якщо ми укладки так багато викликів функцій, 1220 00:50:00,080 --> 00:50:04,540 але ми пишемо мимо пам'яті що ми знаємо, що ми можемо використовувати. 1221 00:50:04,540 --> 00:50:06,170 І що дозволяє нам робити зло. 1222 00:50:06,170 --> 00:50:08,060 1223 00:50:08,060 --> 00:50:08,560 Да? 1224 00:50:08,560 --> 00:50:10,950 >> ROB: Так, ви можете щоб просто повторити це, 1225 00:50:10,950 --> 00:50:12,699 але ви також можете думати переповненням стека 1226 00:50:12,699 --> 00:50:15,374 а як певний тип переповнення буфера. 1227 00:50:15,374 --> 00:50:17,665 Або ви просто думати про своє стек, як дійсно велике буфера. 1228 00:50:17,665 --> 00:50:20,724 Потім, коли ви переповнення ви стек, це ніби як переповнювання буфера. 1229 00:50:20,724 --> 00:50:23,390 Але переповнення стека просто спеціальний термін використовується, коли стек 1230 00:50:23,390 --> 00:50:24,310 Сам переповнює. 1231 00:50:24,310 --> 00:50:27,500 >> Ханна: Право, так, щоб Повторюю для відео, 1232 00:50:27,500 --> 00:50:31,756 це ви можете думати про переповнення стека, як Конкретний тип переповнення буфера. 1233 00:50:31,756 --> 00:50:33,040 Прохолодний? 1234 00:50:33,040 --> 00:50:34,562 Більше питання, перш ніж іти далі? 1235 00:50:34,562 --> 00:50:35,380 1236 00:50:35,380 --> 00:50:35,880 Дивовижний. 1237 00:50:35,880 --> 00:50:37,130 1238 00:50:37,130 --> 00:50:39,727 >> Добре, прохолодно, так що давайте говорити про деякі загальні повідомлення про помилки. 1239 00:50:39,727 --> 00:50:42,060 Це те, що має показано на декількох вікторинах, 1240 00:50:42,060 --> 00:50:44,740 так щось, що варто приймаючи другий погляд на. 1241 00:50:44,740 --> 00:50:46,860 Я впевнений, що ви зіткнулися принаймні, деякі з них 1242 00:50:46,860 --> 00:50:48,690 як ви робите, ваша проблема встановлює. 1243 00:50:48,690 --> 00:50:50,980 Тому переконайтеся, що ви можете говорити про них на вікторині. 1244 00:50:50,980 --> 00:50:52,990 >> Таким чином, перший з них помилки сегментації. 1245 00:50:52,990 --> 00:50:55,250 І це в будь-який час, ми спробуйте отримати доступ до пам'яті 1246 00:50:55,250 --> 00:50:57,130 що ми не дозволили доступ. 1247 00:50:57,130 --> 00:51:00,280 Таким чином, ви migh бачив це, Наприклад, в прориві. 1248 00:51:00,280 --> 00:51:03,390 Якщо виявити зіткнення повернутися нуль, а потім вас 1249 00:51:03,390 --> 00:51:05,500 намагався щось зробити з цим значенням нуль, 1250 00:51:05,500 --> 00:51:08,147 комп'ютер дасть Ви помилки сегментації. 1251 00:51:08,147 --> 00:51:10,730 Так що, головне, щоб зробити для того, щоб спробувати уникнути цього 1252 00:51:10,730 --> 00:51:12,000 це завжди перевірити на нуль. 1253 00:51:12,000 --> 00:51:13,300 1254 00:51:13,300 --> 00:51:16,180 >> Ви, можливо, також бачив неявна декларація функції. 1255 00:51:16,180 --> 00:51:18,370 Так що це те, що відбувається коли Еллісон показав, 1256 00:51:18,370 --> 00:51:20,150 як ми робимо прототип, чи не так? 1257 00:51:20,150 --> 00:51:23,440 Так скажімо, у нас є деякі функція, яку ми визначимо. 1258 00:51:23,440 --> 00:51:24,440 Скажімо куб. 1259 00:51:24,440 --> 00:51:27,120 І це йде на дно нашої функції, відповідно до основного. 1260 00:51:27,120 --> 00:51:35,205 >> Якщо ми забуваємо сказати комп'ютеру про куб, коли основна намагається викликати куб, 1261 00:51:35,205 --> 00:51:36,830 Комп'ютер буде, начебто, о, чорт візьми. 1262 00:51:36,830 --> 00:51:38,300 Я поняття не маю, що це означає. 1263 00:51:38,300 --> 00:51:39,760 Я не знаю, що робити, от. 1264 00:51:39,760 --> 00:51:41,594 Так прототипом каже, не хвилюйтеся. 1265 00:51:41,594 --> 00:51:42,510 Я збираюся розповісти вам. 1266 00:51:42,510 --> 00:51:43,132 >> Це прийде. 1267 00:51:43,132 --> 00:51:43,840 Не кричати на мене. 1268 00:51:43,840 --> 00:51:46,697 Не дай мені неявне Декларація функції. 1269 00:51:46,697 --> 00:51:49,280 Так що якщо ви отримаєте цю помилку, один річ ви збираєтеся хочете зробити 1270 00:51:49,280 --> 00:51:50,821 це переконатися, що у вас є свій прототип. 1271 00:51:50,821 --> 00:51:52,320 1272 00:51:52,320 --> 00:51:53,230 Добре? 1273 00:51:53,230 --> 00:51:55,680 >> І останнє, але не менш важливо, неоголошений ідентифікатор 1274 00:51:55,680 --> 00:52:00,570 по суті, коли ви намагаєтеся використовувати Змінна, що ви не заявили. 1275 00:52:00,570 --> 00:52:03,449 Так раптом ви починаєте кажучи, як п плюс плюс. 1276 00:52:03,449 --> 00:52:04,740 І комп'ютер говорить, що це н? 1277 00:52:04,740 --> 00:52:06,660 Ти ніколи не говорив мені, н був річчю. 1278 00:52:06,660 --> 00:52:10,930 >> Так одна річ, ви повинні переконатися, що ви зробив це сказати комп'ютеру, що п. 1279 00:52:10,930 --> 00:52:13,320 Так, наприклад, н може бути цілим числом. 1280 00:52:13,320 --> 00:52:14,999 І тоді ви будете уникнути цієї помилки. 1281 00:52:14,999 --> 00:52:16,290 Будь-які питання по поширених помилок? 1282 00:52:16,290 --> 00:52:17,260 Да? 1283 00:52:17,260 --> 00:52:19,344 >> СТУДЕНТ: Для неявне Декларація функції, 1284 00:52:19,344 --> 00:52:22,343 може також бути, що ви опустили один з бібліотек ви повинні були 1285 00:52:22,343 --> 00:52:24,400 щоб включати в себе, замість прототипу? 1286 00:52:24,400 --> 00:52:26,359 >> Ханна: Право, так Питання було, ти міг 1287 00:52:26,359 --> 00:52:28,650 Також ця помилка, якщо ви забули включити бібліотеку. 1288 00:52:28,650 --> 00:52:29,085 >> СТУДЕНТ: Так. 1289 00:52:29,085 --> 00:52:30,876 >> Ханна: Абсолютно, тому що так само, 1290 00:52:30,876 --> 00:52:33,540 що ми хочемо, щоб покласти наші прототипи Перед основної функції, 1291 00:52:33,540 --> 00:52:37,717 якщо у нас є бібліотека, ті йдуть по суті включають в себе прототипи, 1292 00:52:37,717 --> 00:52:39,425 включити визначення з функцій. 1293 00:52:39,425 --> 00:52:40,585 Велике питання. 1294 00:52:40,585 --> 00:52:43,230 >> СТУДЕНТ: Для сегментації вина, буде, що також 1295 00:52:43,230 --> 00:52:47,350 відбудеться, якщо ми, як, намагався отримати доступ до змінної, 1296 00:52:47,350 --> 00:52:51,947 як, по-іншому [нерозбірливо] чим він був оголошений в? 1297 00:52:51,947 --> 00:52:54,030 Ханна: Звичайно, так би ми отримати помилку сегментації 1298 00:52:54,030 --> 00:52:56,270 якщо ми спробували отримати доступ Мінлива виходить за рамки? 1299 00:52:56,270 --> 00:52:57,104 Чи було це питання? 1300 00:52:57,104 --> 00:52:57,645 СТУДЕНТ: Так. 1301 00:52:57,645 --> 00:52:58,430 Ханна: Красива. 1302 00:52:58,430 --> 00:53:01,840 Так, ймовірно, ви збираєтеся отримати Неоголошена помилка ідентифікатор замість. 1303 00:53:01,840 --> 00:53:04,006 Так що це просто хочу сказати, Я не знаю, що це таке. 1304 00:53:04,006 --> 00:53:04,920 1305 00:53:04,920 --> 00:53:05,920 Круто, що-небудь ще? 1306 00:53:05,920 --> 00:53:07,744 1307 00:53:07,744 --> 00:53:08,980 Так, добре, красиво. 1308 00:53:08,980 --> 00:53:10,330 1309 00:53:10,330 --> 00:53:12,400 >> Все правша, так рекурсія. 1310 00:53:12,400 --> 00:53:15,160 Так я вже пару раз що ми могли б отримати переповнення стека 1311 00:53:15,160 --> 00:53:17,919 бо ми називаємо наш рекурсивна функція так багато разів. 1312 00:53:17,919 --> 00:53:20,210 Ми отримуємо всі ці стопки кадри, бла, бла, бла. 1313 00:53:20,210 --> 00:53:22,420 Що ще є рекурсивна функція? 1314 00:53:22,420 --> 00:53:25,680 Ну, рекурсивна функція є будь-яка функція, яка називає себе. 1315 00:53:25,680 --> 00:53:26,820 1316 00:53:26,820 --> 00:53:30,160 >> Деякі речі, щоб бути в курсі, коли вас реалізуємо рекурсивную функцію, 1317 00:53:30,160 --> 00:53:31,940 не забудьте включити базовий варіант. 1318 00:53:31,940 --> 00:53:34,010 Базовий варіант є Точка, в якій ми в кінці. 1319 00:53:34,010 --> 00:53:38,740 Так, наприклад, якщо ми кодування, , Кажуть, Фібоначчі рекурсивно, 1320 00:53:38,740 --> 00:53:43,210 ми хочемо переконатися, що, коли ми отримуємо на або під першим номером 0 Фібоначчі, 1321 00:53:43,210 --> 00:53:46,220 ці два числа мають ці випадки, бо ті не залежать 1322 00:53:46,220 --> 00:53:47,700 на речі, які прийшли раніше. 1323 00:53:47,700 --> 00:53:48,990 Ті, мають свої власні значення. 1324 00:53:48,990 --> 00:53:51,270 1325 00:53:51,270 --> 00:53:55,320 >> Деякі профі в рекурсії, що є Питання, яке ми бачили на останніх опитувань. 1326 00:53:55,320 --> 00:53:57,930 Вони можуть призвести до більш коротким, елегантний код. 1327 00:53:57,930 --> 00:54:00,510 І багато функцій, багато різних алгоритмів, 1328 00:54:00,510 --> 00:54:02,350 насправді піддаються рекурсії. 1329 00:54:02,350 --> 00:54:05,510 Їх визначення може бути Рекурсивні і саме по собі. 1330 00:54:05,510 --> 00:54:06,980 Так Фібоначчі є одним. 1331 00:54:06,980 --> 00:54:07,860 Факторіал є одним. 1332 00:54:07,860 --> 00:54:10,480 Злиття сортування одно-- все речі, які ви можете подивитися. 1333 00:54:10,480 --> 00:54:12,650 1334 00:54:12,650 --> 00:54:13,460 Добре, є запитання? 1335 00:54:13,460 --> 00:54:13,960 Да? 1336 00:54:13,960 --> 00:54:15,644 1337 00:54:15,644 --> 00:54:19,612 >> СТУДЕНТ: Є прикордонні випадки аналогічно базової випадку? 1338 00:54:19,612 --> 00:54:22,590 Чи в тому, що для якоїсь іншої вид [нерозбірливо]? 1339 00:54:22,590 --> 00:54:25,170 >> Ханна: Звичайно, так кут випадок any-- так 1340 00:54:25,170 --> 00:54:27,580 є кут справу так само, як базової випадку? 1341 00:54:27,580 --> 00:54:32,825 Кут випадок що-небудь, що ваш Код може вести себе трохи по-іншому. 1342 00:54:32,825 --> 00:54:34,450 1343 00:54:34,450 --> 00:54:38,610 Базовий варіант є свого роду пов'язані, в що вони, як окремі випадки 1344 00:54:38,610 --> 00:54:40,240 що ви хочете подивитися. 1345 00:54:40,240 --> 00:54:43,240 Але ідея базової випадку є те, що Ви хочете, щоб ваш рекурсивную функцію 1346 00:54:43,240 --> 00:54:44,870 зупинитися на якийсь момент. 1347 00:54:44,870 --> 00:54:46,490 Він не може тримати, що називає себе назавжди. 1348 00:54:46,490 --> 00:54:47,781 Це потрібно зупинити на якийсь момент. 1349 00:54:47,781 --> 00:54:49,340 1350 00:54:49,340 --> 00:54:53,460 >> Роб: Так, часто, ваші базові випадки може бути приклади кутових баз. 1351 00:54:53,460 --> 00:54:55,876 >> Ханна: Право, здорово, що-небудь? 1352 00:54:55,876 --> 00:54:58,732 >> СТУДЕНТ: Чи не могли б ви пояснити, засновує трохи більше? 1353 00:54:58,732 --> 00:55:01,600 Я не зовсім розумію, [Нерозбірливо] базові випадки. 1354 00:55:01,600 --> 00:55:02,676 >> Ханна: З базових випадках? 1355 00:55:02,676 --> 00:55:03,140 >> СТУДЕНТ: Базові випадки, так. 1356 00:55:03,140 --> 00:55:03,770 >> Ханна: О, так, звичайно. 1357 00:55:03,770 --> 00:55:04,270 Подивимося. 1358 00:55:04,270 --> 00:55:05,480 Чи є у нас крейда тут? 1359 00:55:05,480 --> 00:55:06,690 1360 00:55:06,690 --> 00:55:07,320 Так, ми робимо. 1361 00:55:07,320 --> 00:55:09,530 Отже, насправді швидко, я буду спробуйте написати досить великий 1362 00:55:09,530 --> 00:55:11,320 так що ви можете бачити на екрані. 1363 00:55:11,320 --> 00:55:13,490 Давайте поговоримо про, дійсно швидко, Фібоначчі. 1364 00:55:13,490 --> 00:55:15,550 Тому я дам вам послідовність Фібоначчі. 1365 00:55:15,550 --> 00:55:17,090 Ви можете шукати визначення. 1366 00:55:17,090 --> 00:55:26,050 >> По суті, кожен номер в послідовності є сумою двох попередніх чисел. 1367 00:55:26,050 --> 00:55:29,720 Отже, то, як я щойно описав Фібоначчі, 1368 00:55:29,720 --> 00:55:31,530 ви могли почути рекурсию, чи не так? 1369 00:55:31,530 --> 00:55:35,280 Коли я сказав, що кожен номер сума двох попередніх чисел, 1370 00:55:35,280 --> 00:55:36,420 ми могли б сказати, в порядку. 1371 00:55:36,420 --> 00:55:38,570 Ну, п-я Фібоначчі number-- так що давайте 1372 00:55:38,570 --> 00:55:42,260 у нас є ця функція називається fib-- вигадка п 1373 00:55:42,260 --> 00:55:48,260 буде дорівнює прибрехати н мінус 1 plus-- шкода, 1374 00:55:48,260 --> 00:55:51,240 ми збираємося на наступному рядку над here-- вигадка п мінус 2. 1375 00:55:51,240 --> 00:55:52,790 1376 00:55:52,790 --> 00:55:56,790 >> Отже, це прекрасно працює, якщо ви дивіться, наприклад, нуль, один, 1377 00:55:56,790 --> 00:55:59,410 два, три, чотири, п'ята число Фібоначчі, 1378 00:55:59,410 --> 00:56:03,561 де можна сказати, що 5 дорівнює 2 плюс 3. 1379 00:56:03,561 --> 00:56:05,060 Але що, якщо ви на початку? 1380 00:56:05,060 --> 00:56:07,184 Що робити, якщо ви просто йдете ці перші два значення? 1381 00:56:07,184 --> 00:56:08,470 1382 00:56:08,470 --> 00:56:11,330 >> Щоб отримати цей 1, ви не можете сказати додати два попередніх, 1383 00:56:11,330 --> 00:56:13,930 бо нуль і-- я не знаю. 1384 00:56:13,930 --> 00:56:15,390 Таким чином, в якийсь момент, ми повинні зупинитися. 1385 00:56:15,390 --> 00:56:21,250 У якийсь момент, ми повинні сказати, що це два тільки мають свої власні визначення. 1386 00:56:21,250 --> 00:56:23,890 Кількість 0 Фібоначчі 0. 1387 00:56:23,890 --> 00:56:26,115 І перше число Фібоначчі 1. 1388 00:56:26,115 --> 00:56:34,120 >> Так як я міг би кодувати це, я сказав би, якщо п менше двох, 1389 00:56:34,120 --> 00:56:35,130 то просто повернути н. 1390 00:56:35,130 --> 00:56:36,494 І що б мій базовий варіант. 1391 00:56:36,494 --> 00:56:38,660 Ось як я знаю, щоб зупинити з рекурсивної функції. 1392 00:56:38,660 --> 00:56:40,640 1393 00:56:40,640 --> 00:56:41,410 Це зрозуміло? 1394 00:56:41,410 --> 00:56:41,940 Дивовижний. 1395 00:56:41,940 --> 00:56:43,260 Що-небудь ще на рекурсії? 1396 00:56:43,260 --> 00:56:44,890 1397 00:56:44,890 --> 00:56:45,930 Красива. 1398 00:56:45,930 --> 00:56:48,750 >> Давайте швидко говорити про Пошук і сортування виконуються раз. 1399 00:56:48,750 --> 00:56:52,660 А потім я дам Девін деяких Час поговорити про кодування приклади. 1400 00:56:52,660 --> 00:56:56,490 Так ось основний пошук і види, які ви повинні знати о. 1401 00:56:56,490 --> 00:56:59,500 Guarantee-- я не можу гарантувати, бо я не бачив quiz-- 1402 00:56:59,500 --> 00:57:01,940 але це приходить вікторини після вікторини після виходу. 1403 00:57:01,940 --> 00:57:04,050 Так виразно використовувати цей графік. 1404 00:57:04,050 --> 00:57:05,682 Мовляв, взяти цей графік. 1405 00:57:05,682 --> 00:57:06,890 Покладіть її на свій шпаргалку. 1406 00:57:06,890 --> 00:57:07,931 Ви будете щасливою людиною. 1407 00:57:07,931 --> 00:57:09,010 1408 00:57:09,010 --> 00:57:12,590 >> Це говорить нам часу роботи кожного з цих сортування та алгоритмів пошуку. 1409 00:57:12,590 --> 00:57:14,020 1410 00:57:14,020 --> 00:57:18,850 Так лінійний пошук, ви можете побачити біг Час, і те ж саме з бінарного пошуку. 1411 00:57:18,850 --> 00:57:21,490 Перейти над тим, що ці алгоритми зробити, загальну ідею. 1412 00:57:21,490 --> 00:57:24,220 Подивіться на якийсь псевдокоде, якщо не сам код. 1413 00:57:24,220 --> 00:57:25,610 1414 00:57:25,610 --> 00:57:30,380 >> Ви побачите, що бульбашкова сортування має верхній пов'язані в гіршому випадку п квадрат. 1415 00:57:30,380 --> 00:57:31,490 1416 00:57:31,490 --> 00:57:34,680 Так що, якщо наш масив був повністю назад, перш ніж ми хотіли, щоб залагодити його, 1417 00:57:34,680 --> 00:57:37,090 ми б сказали, що це збирається зайняти н в квадраті кроки. 1418 00:57:37,090 --> 00:57:38,160 1419 00:57:38,160 --> 00:57:41,730 Але в кращому випадку, так нижня межа для кращому випадку 1420 00:57:41,730 --> 00:57:44,300 чи буде це вже зовсім відсортовані. 1421 00:57:44,300 --> 00:57:46,671 Тоді все, що потрібно зробити, це перевірити, що це сортуються. 1422 00:57:46,671 --> 00:57:47,921 Є питання тут? 1423 00:57:47,921 --> 00:57:49,805 >> СТУДЕНТ: Коли буде Ви хочете використовувати те? 1424 00:57:49,805 --> 00:57:50,747 Сорт. 1425 00:57:50,747 --> 00:57:52,160 Мені просто цікаво. 1426 00:57:52,160 --> 00:57:53,510 >> Ханна: Коли ви хочете використовувати вибір роду? 1427 00:57:53,510 --> 00:57:54,010 Це один? 1428 00:57:54,010 --> 00:57:55,705 Той, який н квадрат в обох випадках? 1429 00:57:55,705 --> 00:57:56,860 >> СТУДЕНТ: [нерозбірливо]. 1430 00:57:56,860 --> 00:57:58,151 >> Ханна: Так що це дуже різні. 1431 00:57:58,151 --> 00:58:00,760 Якщо у вас є конкретні Вимоги до програми, 1432 00:58:00,760 --> 00:58:04,887 як речі, як якщо б ми тільки що сказали, здійснити search-- sorry-- 1433 00:58:04,887 --> 00:58:06,720 здійснити свого роду, ви будете ймовірно, хочете піти 1434 00:58:06,720 --> 00:58:09,950 для одного з тих, що має кращий випадок п, 1435 00:58:09,950 --> 00:58:12,410 або нижню межу в кращому випадку п. 1436 00:58:12,410 --> 00:58:14,790 Але там може бути деякі речі, як, скажімо, 1437 00:58:14,790 --> 00:58:16,767 свопи дійсно дорого для якоїсь причини. 1438 00:58:16,767 --> 00:58:18,850 Тоді ви хотіли б зробити бульбашкова сортування, тому що ви 1439 00:58:18,850 --> 00:58:20,641 потрібно зробити так багато свопи, такі речі, як, що. 1440 00:58:20,641 --> 00:58:21,710 1441 00:58:21,710 --> 00:58:23,098 Будь other-- да? 1442 00:58:23,098 --> 00:58:25,488 >> СТУДЕНТ: було б [нерозбірливо] сказати, що [нерозбірливо]? 1443 00:58:25,488 --> 00:58:30,077 1444 00:58:30,077 --> 00:58:31,910 Ханна: Це одна річ, що б вам сказати, 1445 00:58:31,910 --> 00:58:33,670 якщо ви шукаєте на реалізацію. 1446 00:58:33,670 --> 00:58:35,850 Те, як я б насправді думаю про те, чому це н 1447 00:58:35,850 --> 00:58:40,840 квадрат в тому, що ми повинні працювати через наш масив довжини п, 1448 00:58:40,840 --> 00:58:42,765 кожен раз роблячи в більшості, п свопів. 1449 00:58:42,765 --> 00:58:43,980 1450 00:58:43,980 --> 00:58:46,220 І ми повинні зробити цей процес п раз. 1451 00:58:46,220 --> 00:58:51,130 >> Так що, коли ви повинні зробити в самий, н свопи і для п пробігає масиву, 1452 00:58:51,130 --> 00:58:52,380 там збирається бути н в квадраті. 1453 00:58:52,380 --> 00:58:55,480 Але так, це буде виявлено через цей вдвічі за петлю, 1454 00:58:55,480 --> 00:58:59,428 як питання asked-- або вкладеними для циклу, я повинен сказати. 1455 00:58:59,428 --> 00:59:00,890 Добре? 1456 00:59:00,890 --> 00:59:03,375 >> А потім зливаються роду, які це найшвидший вид ми зараз, 1457 00:59:03,375 --> 00:59:07,560 або, коли ми розглянули в CS50, Відомо, що основним алгоритм 1458 00:59:07,560 --> 00:59:10,150 ця ідея злому відсортовані шматки і потім 1459 00:59:10,150 --> 00:59:11,980 зливаючись ці відсортовані біти. 1460 00:59:11,980 --> 00:59:14,170 І отримаєте нам увійти н увійти п. 1461 00:59:14,170 --> 00:59:17,110 Будь-які питання по обшуків і види, перш ніж я передати його? 1462 00:59:17,110 --> 00:59:19,840 1463 00:59:19,840 --> 00:59:21,040 Подивимося. 1464 00:59:21,040 --> 00:59:21,800 >> О, зв'язкові списки. 1465 00:59:21,800 --> 00:59:23,210 На жаль, у мене є ще один розділ. 1466 00:59:23,210 --> 00:59:25,000 ОК, дивовижним, пов'язані списки. 1467 00:59:25,000 --> 00:59:27,900 Проблема з масивами, вони мають фіксований розмір. 1468 00:59:27,900 --> 00:59:30,634 Так що, якщо ви не знаєте, наскільки велика Ваш вклад буде, 1469 00:59:30,634 --> 00:59:32,050 Ви не хочете, щоб створити масив. 1470 00:59:32,050 --> 00:59:34,080 Тому що, якщо ми створюємо Масив, занадто мала, 1471 00:59:34,080 --> 00:59:35,930 ми могли б зіткнутися з переповненням буфера. 1472 00:59:35,930 --> 00:59:38,890 >> Так замість цього ми могли б зробити щось зі зв'язаними списками, які 1473 00:59:38,890 --> 00:59:44,280 дозволяє нам мати динамічно розміру структури даних 1474 00:59:44,280 --> 00:59:48,970 що дозволить нам зберігати більш гнучким обсяг даних. 1475 00:59:48,970 --> 00:59:54,030 Таким чином, усередині кожного вузла в нашому пов'язаний список, у нас є дві частини. 1476 00:59:54,030 --> 00:59:56,820 У нас є фактичне значення, що він зберігає. 1477 00:59:56,820 --> 00:59:59,530 Так що це просто, що ви б см в масиві, наприклад. 1478 00:59:59,530 --> 01:00:04,600 І тоді ми також відстежувати покажчик до наступної речі в пам'яті. 1479 01:00:04,600 --> 01:00:06,430 >> На відміну від масивів, які ми знаємо все збираємося 1480 01:00:06,430 --> 01:00:10,890 в be-- елементи масиву все одне за іншим в memory-- пов'язані 1481 01:00:10,890 --> 01:00:13,300 Списки можуть бути де завгодно в пам'яті. 1482 01:00:13,300 --> 01:00:14,590 Вони довільних місцях. 1483 01:00:14,590 --> 01:00:16,410 Так що, якби ми мали насправді піти знайти їх, ми 1484 01:00:16,410 --> 01:00:19,770 потрібно відстежувати Наступне, що в нашому списку. 1485 01:00:19,770 --> 01:00:22,840 >> І тоді для того, щоб знати, де, що список в цілому, 1486 01:00:22,840 --> 01:00:26,276 Всі ми повинні відслідковувати це Найперший елемент в нашій пов'язаного списку. 1487 01:00:26,276 --> 01:00:27,900 І що буде дозволити нам виконати. 1488 01:00:27,900 --> 01:00:31,020 1489 01:00:31,020 --> 01:00:33,070 >> Так що це, як ви могли б визначити режим. 1490 01:00:33,070 --> 01:00:36,160 Це відмінна можливість скористатися структур. 1491 01:00:36,160 --> 01:00:39,660 Тому що у вас є ця ідея, добре, для даного вузла, у мене є дві частини. 1492 01:00:39,660 --> 01:00:41,770 У мене є фактичне саме значення. 1493 01:00:41,770 --> 01:00:45,610 А потім у мене є вказівник на Наступний елемент у зв'язаному списку. 1494 01:00:45,610 --> 01:00:49,150 Отже, ви бачите, у нас є число п, який буде фактичне значення, 1495 01:00:49,150 --> 01:00:53,150 а потім покажчик на вузол, званий поруч. 1496 01:00:53,150 --> 01:00:56,431 Так що це буде наступний елемент в нашій пов'язаного списку. 1497 01:00:56,431 --> 01:00:56,972 СТУДЕНТ: Да? 1498 01:00:56,972 --> 01:01:01,920 Ви повинні вказати, що зірка, як структури? 1499 01:01:01,920 --> 01:01:05,620 >> Ханна: Так, так, так як це майже як свого роду, 1500 01:01:05,620 --> 01:01:07,980 здається, що рекурсивний визначення, в якому ми 1501 01:01:07,980 --> 01:01:12,080 повинні знати, що вузол всередину, щоб знайти вузол. 1502 01:01:12,080 --> 01:01:14,450 Так як це не насправді знаю, що вузол повністю 1503 01:01:14,450 --> 01:01:17,283 поки ми не отримаємо до кінця this-- і після цього ми можемо назвати його просто 1504 01:01:17,283 --> 01:01:21,935 node-- всередині цього визначення, ми повинні назвати це структура вузла. 1505 01:01:21,935 --> 01:01:22,560 Велике питання. 1506 01:01:22,560 --> 01:01:23,580 1507 01:01:23,580 --> 01:01:25,214 Що-небудь ще? 1508 01:01:25,214 --> 01:01:26,198 Да? 1509 01:01:26,198 --> 01:01:29,150 >> СТУДЕНТ: Чому ми повинен сказати, вузол двічі? 1510 01:01:29,150 --> 01:01:33,578 Тому що, коли ми були в [нерозбірливо] ми просто повинні були зробити це в точку з коми, 1511 01:01:33,578 --> 01:01:37,352 але тепер ми повинні знайти, що структура вузла? [Нерозбірливо]. 1512 01:01:37,352 --> 01:01:39,060 Ханна: Так що я вважаю, в останньому прикладі, 1513 01:01:39,060 --> 01:01:42,110 ми були просто створення в будь-який час ви хотів використати студента після цього, ви 1514 01:01:42,110 --> 01:01:46,430 довелося використати-структуру node-- Я sorry-- структури студента. 1515 01:01:46,430 --> 01:01:51,575 Це дозволило нам, після того, як той факт, просто Використання вузол додавання нового типу, по суті. 1516 01:01:51,575 --> 01:01:53,324 1517 01:01:53,324 --> 01:01:53,990 Це має сенс? 1518 01:01:53,990 --> 01:01:54,984 1519 01:01:54,984 --> 01:01:57,150 Таким чином, ми повинні були б повернутися і подивитися на код, перш ніж. 1520 01:01:57,150 --> 01:01:59,025 Але я думаю, що ми не використали ЬурейеЕ. 1521 01:01:59,025 --> 01:02:02,050 І ми поставили запитання, чому ми повинні використовувати ЬурейеЕ? 1522 01:02:02,050 --> 01:02:05,540 Typedef дозволяє уникнути Слово структура на початку. 1523 01:02:05,540 --> 01:02:06,221 Да? 1524 01:02:06,221 --> 01:02:08,095 СТУДЕНТ: Які питання будуть придумати 1525 01:02:08,095 --> 01:02:10,400 в плані з точки зору вузли та пов'язані списки? 1526 01:02:10,400 --> 01:02:15,110 >> Ханна: Так одне можна сказати, як може ви переглянете пов'язаного списку? 1527 01:02:15,110 --> 01:02:16,930 Добре, тому що це трохи складніше 1528 01:02:16,930 --> 01:02:18,520 ніж якщо ми шукаємо через масив. 1529 01:02:18,520 --> 01:02:21,472 Ми можемо тільки дивитися на нульовий елемент, Елемент один, елемент два, бла, бла, 1530 01:02:21,472 --> 01:02:21,972 бла. 1531 01:02:21,972 --> 01:02:22,629 1532 01:02:22,629 --> 01:02:24,420 Якщо ми хочемо шукати через зв'язаний список, 1533 01:02:24,420 --> 01:02:27,229 ми фактично повинні слідувати це трохи лабіринт покажчиків. 1534 01:02:27,229 --> 01:02:29,270 Так що давайте насправді йти через це дійсно швидко. 1535 01:02:29,270 --> 01:02:30,460 1536 01:02:30,460 --> 01:02:32,860 Те, що ми могли б зробити в замовити to-- скажемо ми 1537 01:02:32,860 --> 01:02:35,430 хочу просто перебрати наша повністю зв'язаний список. 1538 01:02:35,430 --> 01:02:37,450 Ми почали б в голову. 1539 01:02:37,450 --> 01:02:39,890 І потім, з тим, щоб перейти до наступного елементу, 1540 01:02:39,890 --> 01:02:43,680 а не просто збільшення на одиницю як ми могли б при переході через масив, 1541 01:02:43,680 --> 01:02:45,720 ми насправді збираємося слідувати наступний покажчик, 1542 01:02:45,720 --> 01:02:48,360 так що ми можемо знайти, де в Пам'ять на наступний елемент. 1543 01:02:48,360 --> 01:02:49,357 1544 01:02:49,357 --> 01:02:51,690 Так що я знаю, що це не досить, щоб прийняти все це прямо зараз, 1545 01:02:51,690 --> 01:02:52,650 але ви будете мати ці слайди. 1546 01:02:52,650 --> 01:02:54,730 Таким чином, ви можете пройти це трохи повільніше. 1547 01:02:54,730 --> 01:02:56,890 Але по суті, те, що ми хочемо зробити, виконайте наступні покажчики 1548 01:02:56,890 --> 01:02:58,550 через повноту пов'язаного списку. 1549 01:02:58,550 --> 01:03:00,258 Так що це питання може бути ви запитали. 1550 01:03:00,258 --> 01:03:01,920 1551 01:03:01,920 --> 01:03:03,980 >> Щось, щоб помітити з вставка, скажімо 1552 01:03:03,980 --> 01:03:07,925 ми хотіли поставити новий елемент в передній частині нашої пов'язаного списку. 1553 01:03:07,925 --> 01:03:10,800 Ми повинні бути дуже обережні, про порядок, в якому ми 1554 01:03:10,800 --> 01:03:12,760 перепризначено покажчики. 1555 01:03:12,760 --> 01:03:15,230 Бо, скажімо, я просто сказав, добре. 1556 01:03:15,230 --> 01:03:18,930 Зробити головний точку на цей новий елемент. 1557 01:03:18,930 --> 01:03:23,550 Просто щоб вона вказувала на 1 пор ми істотно втратили решту нашого списку, 1558 01:03:23,550 --> 01:03:25,860 бо я не пам'ятаю, де 2 житті. 1559 01:03:25,860 --> 01:03:27,730 >> Так що ми повинні зробити в дуже певний порядок. 1560 01:03:27,730 --> 01:03:31,500 По-перше, ми робимо новий елемент вказує на голову. 1561 01:03:31,500 --> 01:03:33,970 І тоді ми робимо голову вказувати на новий елемент. 1562 01:03:33,970 --> 01:03:38,455 Отже, давайте подивимося, як це виглядає з arrows-- просто так. 1563 01:03:38,455 --> 01:03:42,080 Таким чином, ви повинні спочатку нові елемент вказує на старій голові. 1564 01:03:42,080 --> 01:03:45,990 А тепер, у нас є голова він вказував на новий перший елемент. 1565 01:03:45,990 --> 01:03:47,187 Будь-які питання з цим? 1566 01:03:47,187 --> 01:03:49,870 1567 01:03:49,870 --> 01:03:54,350 >> ОК Ось код знову, щось дивитися на трохи пізніше. 1568 01:03:54,350 --> 01:03:58,630 А тепер я буду передати її Давіна для GDB і трохи практики 1569 01:03:58,630 --> 01:03:59,480 кодування на папері. 1570 01:03:59,480 --> 01:04:00,597 1571 01:04:00,597 --> 01:04:01,096 Красива. 1572 01:04:01,096 --> 01:04:01,810 >> ROB: А Роб. 1573 01:04:01,810 --> 01:04:02,360 >> Ханна: О, Девін і Роб. 1574 01:04:02,360 --> 01:04:03,055 Мені шкода. 1575 01:04:03,055 --> 01:04:03,596 >> СТУДЕНТ: Woo! 1576 01:04:03,596 --> 01:04:08,140 1577 01:04:08,140 --> 01:04:09,110 >> ROB: Спасибо. 1578 01:04:09,110 --> 01:04:11,209 >> DAVIN: Ви хочете сказати, все дійсно швидко? 1579 01:04:11,209 --> 01:04:11,875 ROB: Так, так. 1580 01:04:11,875 --> 01:04:12,845 DAVIN: Після того, як я до. 1581 01:04:12,845 --> 01:04:16,240 1582 01:04:16,240 --> 01:04:19,520 ОК, тоді як Роб ставить Мікрофон на, так що GDB? 1583 01:04:19,520 --> 01:04:23,945 Всі повинні були бачити GDB в клас, а також на робочі години. 1584 01:04:23,945 --> 01:04:25,070 І ви повинні використовувати його. 1585 01:04:25,070 --> 01:04:25,750 Так що GDB? 1586 01:04:25,750 --> 01:04:28,030 1587 01:04:28,030 --> 01:04:28,850 Будь? 1588 01:04:28,850 --> 01:04:29,540 >> СТУДЕНТ: Це відладчик. 1589 01:04:29,540 --> 01:04:30,250 >> DAVIN: Це відладчик. 1590 01:04:30,250 --> 01:04:31,624 І те, що це дозволить вам робити? 1591 01:04:31,624 --> 01:04:33,064 Мовляв, навіщо нам подобається GDB? 1592 01:04:33,064 --> 01:04:34,480 СТУДЕНТ: Щоб уповільнити програму. 1593 01:04:34,480 --> 01:04:36,740 DAVIN: справа, так що ви можете ходити через нього, як людина в ногу. 1594 01:04:36,740 --> 01:04:38,490 І так, що деякі команди ви можете зробити? 1595 01:04:38,490 --> 01:04:40,407 Ну, перерва, ймовірно, Ваш улюблений команда. 1596 01:04:40,407 --> 01:04:43,240 Тому що дозволяє розбити Програма і фактично йти через нього 1597 01:04:43,240 --> 01:04:44,280 построчно. 1598 01:04:44,280 --> 01:04:46,500 >> Виконати дозволяє запускати його. 1599 01:04:46,500 --> 01:04:48,210 Далі, як покроково. 1600 01:04:48,210 --> 01:04:49,820 Що між рядом і кроку? 1601 01:04:49,820 --> 01:04:52,190 1602 01:04:52,190 --> 01:04:53,190 Зачекайте, говорю це вголос. 1603 01:04:53,190 --> 01:04:54,060 Це було правильно. 1604 01:04:54,060 --> 01:04:55,280 >> СТУДЕНТ: [нерозбірливо]. 1605 01:04:55,280 --> 01:04:56,190 >> DAVIN: Так, дивовижний. 1606 01:04:56,190 --> 01:04:59,210 Так як, в наступному і крок, якщо you're-- скажімо у вас є функція ви 1607 01:04:59,210 --> 01:04:59,950 визначити. 1608 01:04:59,950 --> 01:05:03,350 Скажімо деякі у вашій основній функції, і ви просто йдете поруч, поруч, 1609 01:05:03,350 --> 01:05:03,850 Наступний. 1610 01:05:03,850 --> 01:05:05,910 Ти насправді відбувається в виконати цю функцію, 1611 01:05:05,910 --> 01:05:07,285 але ви збираєтеся стрибати через нього. 1612 01:05:07,285 --> 01:05:09,711 Якщо ви потрапили крок, або и або будь-який інший, ви 1613 01:05:09,711 --> 01:05:11,460 збирається насправді стрибати в цій функції, 1614 01:05:11,460 --> 01:05:14,110 а потім ви можете натиснути поруч щоб побачити різні дзвінки 1615 01:05:14,110 --> 01:05:16,170 всередині цієї конкретної функції. 1616 01:05:16,170 --> 01:05:16,670 Да? 1617 01:05:16,670 --> 01:05:18,670 >> СТУДЕНТ: Чи є спосіб стрибати, як, відступити? 1618 01:05:18,670 --> 01:05:20,750 DAVIN: Готово, да, закінчити з стрибати вам. 1619 01:05:20,750 --> 01:05:22,570 Так це буде закінчити, що Функція, а потім ви 1620 01:05:22,570 --> 01:05:24,153 збирається повернутися в основний, наприклад. 1621 01:05:24,153 --> 01:05:25,250 1622 01:05:25,250 --> 01:05:27,370 Друк буде роздрукувати його один раз. 1623 01:05:27,370 --> 01:05:29,381 Щось я завжди використовую це дисплей. 1624 01:05:29,381 --> 01:05:31,880 Дисплей роздрукувати його постійно протягом всієї повноті 1625 01:05:31,880 --> 01:05:32,470 вашої програми. 1626 01:05:32,470 --> 01:05:33,810 >> Наприклад, якщо ви в циклі, і ви 1627 01:05:33,810 --> 01:05:37,018 хочу подивитися, як щось міняється, і ви не хочете, щоб, як, постійно 1628 01:05:37,018 --> 01:05:38,940 робити, як друк, друк, друк, дисплей 1629 01:05:38,940 --> 01:05:43,230 покаже цю змінну постійно, кожного разу, коли ви натиснете кнопку Далі. 1630 01:05:43,230 --> 01:05:44,310 І як і раніше. 1631 01:05:44,310 --> 01:05:45,905 Так ГПБ, це GDB. 1632 01:05:45,905 --> 01:05:47,160 1633 01:05:47,160 --> 01:05:49,180 >> СТУДЕНТ: Що один де ви [нерозбірливо]? 1634 01:05:49,180 --> 01:05:50,150 1635 01:05:50,150 --> 01:05:50,900 DAVIN: Що це таке? 1636 01:05:50,900 --> 01:05:52,310 1637 01:05:52,310 --> 01:05:54,390 >> СТУДЕНТ: Що the-- локальні змінні. 1638 01:05:54,390 --> 01:05:55,364 1639 01:05:55,364 --> 01:05:57,780 ROB: Існує щось насправді як місцеві жителі або щось. 1640 01:05:57,780 --> 01:05:58,140 Я can't-- 1641 01:05:58,140 --> 01:05:59,930 >> DAVIN: Це може бути якось так, так. 1642 01:05:59,930 --> 01:06:00,830 >> Ханна: У місцевих жителів? 1643 01:06:00,830 --> 01:06:01,510 >> DAVIN: Ось це. 1644 01:06:01,510 --> 01:06:02,134 Ось один. 1645 01:06:02,134 --> 01:06:03,040 ROB: Красива. 1646 01:06:03,040 --> 01:06:04,030 >> DAVIN: Так. 1647 01:06:04,030 --> 01:06:06,010 >> СТУДЕНТ: Що раніше робити? 1648 01:06:06,010 --> 01:06:08,010 >> DAVIN: Це continues-- так що це просто збирається продовжити свої програми. 1649 01:06:08,010 --> 01:06:09,843 Так що, якщо ви порушите і вдарив продовжувати, це буде 1650 01:06:09,843 --> 01:06:13,119 не просто запустити цю програму, поки вона потрапляє, що перерва знову. 1651 01:06:13,119 --> 01:06:14,910 Так, наприклад, якщо ви зламав у функції, 1652 01:06:14,910 --> 01:06:16,720 і ви збираєтеся робити, як для петля або щось подібне, 1653 01:06:16,720 --> 01:06:19,869 і ви потрапили продовжувати, він збирається продовжити і повернутися до цього перерви. 1654 01:06:19,869 --> 01:06:22,660 Чи ні ніякої перерви, вона не збирається продовжити і завершити програму. 1655 01:06:22,660 --> 01:06:25,000 >> ROB: Так просто подобається зупиняється, на першому зупину 1656 01:06:25,000 --> 01:06:27,010 ви потрапили, якщо вам, то хіт продовжувати, це буде тримати 1657 01:06:27,010 --> 01:06:28,070 відбувається, поки це не наступної точки. 1658 01:06:28,070 --> 01:06:30,111 А потім продовжити піде до наступної контрольної точки. 1659 01:06:30,111 --> 01:06:31,264 1660 01:06:31,264 --> 01:06:32,680 DAVIN: Будь-які інші питання про GDB? 1661 01:06:32,680 --> 01:06:33,577 1662 01:06:33,577 --> 01:06:35,410 Так що я думаю, що і в минулому, ми просили вас, що 1663 01:06:35,410 --> 01:06:37,690 GDB і дати Приклад деяких речей, які ви 1664 01:06:37,690 --> 01:06:40,770 можна зробити за допомогою GDB, так реальний простий, але так. 1665 01:06:40,770 --> 01:06:42,280 Там ви йдете. 1666 01:06:42,280 --> 01:06:43,250 І вузли? 1667 01:06:43,250 --> 01:06:49,571 >> ROB: Так, так, в якому напрямку це було? 1668 01:06:49,571 --> 01:06:50,851 1669 01:06:50,851 --> 01:06:51,726 СТУДЕНТ: От і все. 1670 01:06:51,726 --> 01:06:52,160 DAVIN: Почекайте. 1671 01:06:52,160 --> 01:06:52,270 ROB: Цей хлопець? 1672 01:06:52,270 --> 01:06:52,936 DAVIN: Це один. 1673 01:06:52,936 --> 01:06:54,660 ROB: Цей хлопець, ох, я не розумів ,. 1674 01:06:54,660 --> 01:06:56,940 Таким чином, ми не були ясні на те, що я the-- НЕ 1675 01:06:56,940 --> 01:06:58,680 знаю, хто це was-- але питання. 1676 01:06:58,680 --> 01:07:01,180 Ми не знаємо, що саме ви питали про це, так що просто 1677 01:07:01,180 --> 01:07:04,800 уточнити щось. 1678 01:07:04,800 --> 01:07:07,750 Отже, спочатку, як я вже казав, ЬурейеЕ ви завжди за допомогою тільки 1679 01:07:07,750 --> 01:07:09,305 створити псевдонім для типу. 1680 01:07:09,305 --> 01:07:13,420 Так ось тут, прізвисько ми Створення для цього структури вузла. 1681 01:07:13,420 --> 01:07:18,070 >> Отже, спочатку, ігноруючи цей вузол в ЬурейеЕ, так це структура вузла кучеряве 1682 01:07:18,070 --> 01:07:21,060 готуватися до наступного кучерявого ортез Тип структури вузла. 1683 01:07:21,060 --> 01:07:23,470 І ми повинні до цього вузла там, бо ми 1684 01:07:23,470 --> 01:07:25,190 потрібно посилатися вузол тут. 1685 01:07:25,190 --> 01:07:29,380 Отже з такого роду рекурсивної структури, Ви повинні дати цієї структури ім'я, 1686 01:07:29,380 --> 01:07:31,340 інакше ви не могли кажуть структура вузла тут. 1687 01:07:31,340 --> 01:07:33,340 Якщо раніше з учнем коли ми набралися, я думаю, 1688 01:07:33,340 --> 01:07:35,423 ми не повинні сказати, студент там, бо ми 1689 01:07:35,423 --> 01:07:40,370 не повинен сказати-структуру Студент всередині самої структури. 1690 01:07:40,370 --> 01:07:43,730 Так що це рекурсивна що змушує нас сказати вузол є. 1691 01:07:43,730 --> 01:07:46,610 >> Цей вузол є тільки назва ми даючи вузол для визначення типу. 1692 01:07:46,610 --> 01:07:48,520 Так що вузол не так само, як цей вузол. 1693 01:07:48,520 --> 01:07:51,567 Але цей вузол є структура такий же, як той структура вузла. 1694 01:07:51,567 --> 01:07:54,150 DAVIN: Тому, коли ви телефонуєте, як, вузол в головній функції, 1695 01:07:54,150 --> 01:07:55,350 Ви ж не збираєтеся повинен сказати, структура вузла. 1696 01:07:55,350 --> 01:07:58,360 Ви можете просто сказати вузол, бо вузол є в основному different-- 1697 01:07:58,360 --> 01:07:59,440 Ви говорите, ОК. 1698 01:07:59,440 --> 01:08:01,490 Замість того, щоб подзвонити структура вузла в своєму коді, 1699 01:08:01,490 --> 01:08:04,050 Я просто хочу, щоб перейменувати його як вузол, щоб зробити його більш легким. 1700 01:08:04,050 --> 01:08:06,800 >> ROB: Якщо вас завжди використовувати ЬурейеЕ, то це 1701 01:08:06,800 --> 01:08:11,240 це єдине місце, ви будете мати, оголосити змінну з STRUCT вузла 1702 01:08:11,240 --> 01:08:11,740 зірка, так. 1703 01:08:11,740 --> 01:08:14,650 1704 01:08:14,650 --> 01:08:20,801 >> DAVIN: ОК, так що остання частина Важко навчити because-- 1705 01:08:20,801 --> 01:08:22,185 1706 01:08:22,185 --> 01:08:22,685 ROB: Що? 1707 01:08:22,685 --> 01:08:24,098 1708 01:08:24,098 --> 01:08:25,649 >> DAVIN: Тому що це кодування на папері. 1709 01:08:25,649 --> 01:08:28,689 Таким чином, щороку у нас є Код на паперових питань. 1710 01:08:28,689 --> 01:08:32,510 Так що я думаю, що в минулому році, 12 з 80 балів були Код на папері. 1711 01:08:32,510 --> 01:08:36,720 Рік до цього, 10 з 80, За рік до цього, 20 з 100, 1712 01:08:36,720 --> 01:08:37,939 так немало з них. 1713 01:08:37,939 --> 01:08:40,970 Таким чином, ви будете мати, щоб бути в змозі кодувати ці функції вручну. 1714 01:08:40,970 --> 01:08:45,340 >> Тому я вважав, що ми могли б пройти Пару з них і подивитися, як люди роблять, 1715 01:08:45,340 --> 01:08:47,340 вид ходити через їх повільно з людьми. 1716 01:08:47,340 --> 01:08:48,790 1717 01:08:48,790 --> 01:08:52,420 Так зазвичай, StrLen і atoi були дуже популярні. 1718 01:08:52,420 --> 01:08:55,670 Торік, я думаю, що ми повинні були GetPositiveInt і RandomInt. 1719 01:08:55,670 --> 01:08:58,591 Але військовополонених, тому потужність, також позитивним занадто. 1720 01:08:58,591 --> 01:09:00,965 Давайте просто пройти, може бути, один або два з них разом. 1721 01:09:00,965 --> 01:09:02,510 1722 01:09:02,510 --> 01:09:03,729 Що люди хочуть бачити? 1723 01:09:03,729 --> 01:09:05,037 1724 01:09:05,037 --> 01:09:05,767 >> СТУДЕНТ: Atoi. 1725 01:09:05,767 --> 01:09:06,350 СТУДЕНТ: Так. 1726 01:09:06,350 --> 01:09:06,859 DAVIN: Atoi? 1727 01:09:06,859 --> 01:09:07,800 СТУДЕНТ: [нерозбірливо]. 1728 01:09:07,800 --> 01:09:09,682 DAVIN: ОК, я збираюся зробити це на дошці. 1729 01:09:09,682 --> 01:09:11,765 Чи є у вас уподобання якщо я роблю це тут чи там? 1730 01:09:11,765 --> 01:09:13,580 1731 01:09:13,580 --> 01:09:14,550 Там, Гейб каже там. 1732 01:09:14,550 --> 01:09:16,729 1733 01:09:16,729 --> 01:09:19,580 >> ROB: І це спільні думки на ці питання кодування. 1734 01:09:19,580 --> 01:09:21,705 Спробуйте написати що-небудь. 1735 01:09:21,705 --> 01:09:22,580 Чи не залиште це поле порожнім. 1736 01:09:22,580 --> 01:09:23,080 >> DAVIN: Так. 1737 01:09:23,080 --> 01:09:25,520 ROB: Якщо ви можете отримати повернутися тип правильно, 1738 01:09:25,520 --> 01:09:27,090 або, може бути, ми могли б дати його Ви, але якщо ви можете, як, 1739 01:09:27,090 --> 01:09:30,256 написати спільну функцію підпис, Якщо ви можете отримати базові випадки правильно, 1740 01:09:30,256 --> 01:09:32,244 або приватні випадки, або згадуючи чек на нуль, 1741 01:09:32,244 --> 01:09:34,160 доти, поки у вас є деякі речі, то, можливо, ми 1742 01:09:34,160 --> 01:09:35,880 може дати вам пару вказує на проблеми. 1743 01:09:35,880 --> 01:09:36,810 Не просто залиште це поле порожнім. 1744 01:09:36,810 --> 01:09:38,560 >> DAVIN: Так, і якщо вам тільки повністю 1745 01:09:38,560 --> 01:09:40,580 тупик в тому, як насправді перетвориться в коді. 1746 01:09:40,580 --> 01:09:43,140 Якщо ви пишете псевдокод, це дуже добре теж. 1747 01:09:43,140 --> 01:09:46,390 Так що це як, це шість цілих питання, і ви напишіть правильний псевдокод, 1748 01:09:46,390 --> 01:09:47,858 Ви отримаєте не менше двох точок. 1749 01:09:47,858 --> 01:09:49,149 Так що не просто залишити їх порожніми. 1750 01:09:49,149 --> 01:09:50,279 Спробуйте покласти щось. 1751 01:09:50,279 --> 01:09:51,770 >> ROB: Вона повинна бути правильно псевдокод, хоча. 1752 01:09:51,770 --> 01:09:52,270 >> DAVIN: Так. 1753 01:09:52,270 --> 01:09:55,381 ROB: Таким чином, ми, як правило, є менш поблажливий з помилками в псевдокоде. 1754 01:09:55,381 --> 01:09:57,130 Девін: ОК, так що ви, хлопці хотів бачити atoi. 1755 01:09:57,130 --> 01:09:58,480 1756 01:09:58,480 --> 01:10:02,820 ОК, так що просто really-- так що ви хочете зробити, 1757 01:10:02,820 --> 01:10:04,969 це ви збираєтеся бути враховуючи якісь числа. 1758 01:10:04,969 --> 01:10:07,010 Але це число не буде інтервал, чи не так? 1759 01:10:07,010 --> 01:10:08,574 Що це буде? 1760 01:10:08,574 --> 01:10:09,480 >> СТУДЕНТ: [нерозбірливо]. 1761 01:10:09,480 --> 01:10:11,146 >> DAVIN: Це збирається бути рядком, чи не так? 1762 01:10:11,146 --> 01:10:13,160 Так що якщо ви дали string-- давайте say-- 1763 01:10:13,160 --> 01:10:15,228 >> ROB: Чи повинен я підтягнути редактор? 1764 01:10:15,228 --> 01:10:16,200 Я можу витягнути up-- 1765 01:10:16,200 --> 01:10:16,800 >> DAVIN: О, ви хочете зробити це on-- 1766 01:10:16,800 --> 01:10:17,420 >> ROB: Ви б віддали перевагу дошку? 1767 01:10:17,420 --> 01:10:18,800 >> DAVIN: Що ви хочете зробити? 1768 01:10:18,800 --> 01:10:19,900 Я маю на увазі, ви хочете зробити це вручну? 1769 01:10:19,900 --> 01:10:21,460 Або ви хочете, щоб зробити це за допомогою комп'ютера? 1770 01:10:21,460 --> 01:10:22,180 >> ROB: Зробіть це вручну. 1771 01:10:22,180 --> 01:10:22,805 >> DAVIN: [Сміється] 1772 01:10:22,805 --> 01:10:23,950 ROB: Зробіть це вручну. 1773 01:10:23,950 --> 01:10:25,469 >> DAVIN: ОК, так що це буде atoi. 1774 01:10:25,469 --> 01:10:27,760 Так що it-- Я маю на увазі, ми будемо ймовірно, дасть вам це. 1775 01:10:27,760 --> 01:10:29,106 Але те, що він збирається повернутися? 1776 01:10:29,106 --> 01:10:29,452 >> СТУДЕНТ: Int. 1777 01:10:29,452 --> 01:10:31,076 >> DAVIN: Це збирається повернутися Int, чи не так? 1778 01:10:31,076 --> 01:10:33,772 So-- Я не хочу, щоб це зробити є. 1779 01:10:33,772 --> 01:10:34,510 Я зроблю це тут. 1780 01:10:34,510 --> 01:10:36,596 >> ROB: Ви можете тягнути його вниз а потім натиснути на нього. 1781 01:10:36,596 --> 01:10:38,500 1782 01:10:38,500 --> 01:10:40,385 >> DAVIN: так. 1783 01:10:40,385 --> 01:10:43,880 [Сміється] зміна гри. 1784 01:10:43,880 --> 01:10:50,950 ОК, так що це буде INT atoi, і те, що він збирається зробити? 1785 01:10:50,950 --> 01:10:52,180 1786 01:10:52,180 --> 01:10:57,780 Символ зірки, так просто Рядок, зірка с, як, що. 1787 01:10:57,780 --> 01:10:59,240 >> ROB: Nice зірка, хороший. 1788 01:10:59,240 --> 01:11:02,582 1789 01:11:02,582 --> 01:11:04,040 DAVIN: Це не може бути там, ОК. 1790 01:11:04,040 --> 01:11:04,540 ROB: Так. 1791 01:11:04,540 --> 01:11:06,670 DAVIN: ОК, так що перший що ви хочете do-- I 1792 01:11:06,670 --> 01:11:08,490 не знаю, якщо хто-небудь подивився на практиці solutions-- 1793 01:11:08,490 --> 01:11:10,150 але те, що ви збираєтеся хотіти зробити це ви 1794 01:11:10,150 --> 01:11:11,570 захоче їсти петля, бо ти 1795 01:11:11,570 --> 01:11:14,100 захоче фактично покроково цього рядка. 1796 01:11:14,100 --> 01:11:18,880 Так helpful-- так скажемо ми збираємося для петлі, 1797 01:11:18,880 --> 01:11:22,270 і ми збираємося пройти через кожен елемент рядка. 1798 01:11:22,270 --> 01:11:23,470 Як довго це? 1799 01:11:23,470 --> 01:11:26,464 Скільки раз ми збираємося для перебору в тому, що для циклу? 1800 01:11:26,464 --> 01:11:27,130 СТУДЕНТ: Sterln? 1801 01:11:27,130 --> 01:11:27,963 DAVIN: Sterln, так. 1802 01:11:27,963 --> 01:11:29,350 1803 01:11:29,350 --> 01:11:41,294 Так скажімо, довжина інтервал дорівнює sterln с. 1804 01:11:41,294 --> 01:11:44,240 1805 01:11:44,240 --> 01:11:48,740 І просто цікаво, чому це завжди свого роду з найкраще робити це поза петлі? 1806 01:11:48,740 --> 01:11:52,277 Як, чому це краще назвати ця функція поза циклом? 1807 01:11:52,277 --> 01:11:53,360 Просто перевірте швидкий розсудливість? 1808 01:11:53,360 --> 01:11:55,810 1809 01:11:55,810 --> 01:11:56,311 Да? 1810 01:11:56,311 --> 01:11:58,268 СТУДЕНТ: Таким чином, ви не повинні продовжувати перевіряти його. 1811 01:11:58,268 --> 01:11:59,400 Ви можете просто [нерозбірливо]. 1812 01:11:59,400 --> 01:12:01,560 >> DAVIN: Рівне, так що так, саме те, що вона сказала. 1813 01:12:01,560 --> 01:12:03,101 Таким чином, ми не повинні продовжувати перевіряти його. 1814 01:12:03,101 --> 01:12:05,690 Так, наприклад, якщо я дзвоню ця функція в циклі, 1815 01:12:05,690 --> 01:12:08,050 Потім я збираюся продовжувати дзвонити ця функція кілька разів. 1816 01:12:08,050 --> 01:12:10,080 І що відбувається, щоб зменшити ефективність вашої програми. 1817 01:12:10,080 --> 01:12:12,370 Так що це завжди корисно оголосити його поза. 1818 01:12:12,370 --> 01:12:14,370 >> ROB: Це говорить, на будь-який з цих проблем, 1819 01:12:14,370 --> 01:12:17,940 в значній мірі, поки ви отримуєте робочого розчину, ви отримаєте повний кредит. 1820 01:12:17,940 --> 01:12:20,820 Отже не хвилюйтеся, якщо ваш дизайн абсолютно жахливим. 1821 01:12:20,820 --> 01:12:22,120 1822 01:12:22,120 --> 01:12:25,230 Це може зробити нас засмучений читати ваш код. 1823 01:12:25,230 --> 01:12:28,160 Однак до тих пір, як воно працює, ви отримаєте очок. 1824 01:12:28,160 --> 01:12:29,302 >> DAVIN: Так. 1825 01:12:29,302 --> 01:12:31,260 Отже, те, що я збираюся оголосити деякі змінні. 1826 01:12:31,260 --> 01:12:33,900 Це просто буде дзвонити Int суму. 1827 01:12:33,900 --> 01:12:37,031 І я збираюся встановити це дорівнює нулю, як це. 1828 01:12:37,031 --> 01:12:38,780 І це тільки збирається бути заповнювач. 1829 01:12:38,780 --> 01:12:40,960 Так що це буде то, що я збираюся повернутися. 1830 01:12:40,960 --> 01:12:43,730 Так що я збираюся в кінці кінців повернутися суму з цієї програми. 1831 01:12:43,730 --> 01:12:44,980 Тому у мене є ці дві змінні. 1832 01:12:44,980 --> 01:12:45,563 Я маю довжину. 1833 01:12:45,563 --> 01:12:46,500 У мене є суму. 1834 01:12:46,500 --> 01:12:48,290 А тепер давайте перейдемо в нашу рядок. 1835 01:12:48,290 --> 01:12:49,510 >> Так що давайте їсти наш цикл. 1836 01:12:49,510 --> 01:13:06,520 Так чотири INT я дорівнює 0 ж, у той час як Я менше довжини I плюс плюс. 1837 01:13:06,520 --> 01:13:07,150 І now-- 1838 01:13:07,150 --> 01:13:10,920 1839 01:13:10,920 --> 01:13:11,420 ROB: Nice. 1840 01:13:11,420 --> 01:13:14,030 DAVIN: ОК, а тепер тут приходить м'ясо нашого коду. 1841 01:13:14,030 --> 01:13:17,380 Таким чином, ви можете насправді робити це в основному в одну лінію. 1842 01:13:17,380 --> 01:13:20,702 Так хто-небудь є ідея про те, що ми збираємося робити далі? 1843 01:13:20,702 --> 01:13:23,680 1844 01:13:23,680 --> 01:13:25,380 ОК, так що все в порядку. 1845 01:13:25,380 --> 01:13:35,860 Таким чином, ми робимо сказати суму equals-- дозвольте мені бігти стрімголов цей over-- суму 1846 01:13:35,860 --> 01:13:50,010 дорівнює сумі раз 10 plus-- ми збирається зайняти и I мінус один 1847 01:13:50,010 --> 01:13:54,787 Цитата 0 одна цитата зроблено, як, що. 1848 01:13:54,787 --> 01:13:55,620 ROB: Дуже інтуїтивний. 1849 01:13:55,620 --> 01:13:56,980 1850 01:13:56,980 --> 01:13:57,880 >> DAVIN: Щебінь його. 1851 01:13:57,880 --> 01:14:01,438 Отже, someone-- я отримав його, я отримав його. 1852 01:14:01,438 --> 01:14:03,680 1853 01:14:03,680 --> 01:14:06,960 ОК, так що це явно йде вгору. 1854 01:14:06,960 --> 01:14:08,320 1855 01:14:08,320 --> 01:14:09,450 Що це означає? 1856 01:14:09,450 --> 01:14:12,120 Так хто-небудь знає, що це означає? 1857 01:14:12,120 --> 01:14:13,826 Чи всі можуть переконатися в цьому? 1858 01:14:13,826 --> 01:14:16,088 Ні, ніхто не може в цьому переконатися, гаразд. 1859 01:14:16,088 --> 01:14:17,390 1860 01:14:17,390 --> 01:14:18,340 Я збираюся to-- 1861 01:14:18,340 --> 01:14:20,506 >> ROB: Я збираюся написати Формула просто прямо тут. 1862 01:14:20,506 --> 01:14:23,140 DAVIN: ОК, Роб збирається це зробити на комп'ютері, який весело. 1863 01:14:23,140 --> 01:14:26,889 1864 01:14:26,889 --> 01:14:27,514 ROB: О, мій Бог. 1865 01:14:27,514 --> 01:14:34,340 1866 01:14:34,340 --> 01:14:35,010 Або я не буду. 1867 01:14:35,010 --> 01:14:36,288 1868 01:14:36,288 --> 01:14:36,954 DAVIN: очікування. 1869 01:14:36,954 --> 01:14:42,300 1870 01:14:42,300 --> 01:14:44,260 СТУДЕНТ: У мене є питання. 1871 01:14:44,260 --> 01:14:45,348 DAVIN: Так, звичайно. 1872 01:14:45,348 --> 01:14:46,223 СТУДЕНТ: [нерозбірливо]? 1873 01:14:46,223 --> 01:14:52,529 1874 01:14:52,529 --> 01:14:54,570 DAVIN: ОК, так це насправді, як, тільки в загальному, 1875 01:14:54,570 --> 01:14:56,710 якби ви були поставити, як, У цій декларації междунар 1876 01:14:56,710 --> 01:14:59,770 Я дорівнює довжині 0 кому дорівнює sterln, that-- 1877 01:14:59,770 --> 01:15:01,200 >> СТУДЕНТ: [нерозбірливо]. 1878 01:15:01,200 --> 01:15:03,585 >> DAVIN: Це добре, тому що that-- 1879 01:15:03,585 --> 01:15:05,543 СТУДЕНТ: Навіщо ви навіть потрібно використовувати довжину? 1880 01:15:05,543 --> 01:15:08,620 Чому ми не могли просто [нерозбірливо] sterln с, як все время [нерозбірливо]? 1881 01:15:08,620 --> 01:15:09,460 >> DAVIN: Ви маєте на увазі тут? 1882 01:15:09,460 --> 01:15:10,001 >> СТУДЕНТ: Так. 1883 01:15:10,001 --> 01:15:12,630 DAVIN: Тому що кожен Час це для петель трас, 1884 01:15:12,630 --> 01:15:14,295 це буде оцінити цей стан. 1885 01:15:14,295 --> 01:15:14,920 СТУДЕНТ: справа. 1886 01:15:14,920 --> 01:15:16,836 DAVIN: А якщо у вас є sterln є, то це 1887 01:15:16,836 --> 01:15:19,510 доведеться насправді назвати що функція кожного разу. 1888 01:15:19,510 --> 01:15:21,090 Таким чином, замість того, щоб просто порівнюючи його з междунар, 1889 01:15:21,090 --> 01:15:23,548 Ви збираєтеся телефонувати Функція, а потім порівнюючи його 1890 01:15:23,548 --> 01:15:24,510 на повертається значення. 1891 01:15:24,510 --> 01:15:25,860 Так, так що це просто, так. 1892 01:15:25,860 --> 01:15:28,860 1893 01:15:28,860 --> 01:15:30,770 >> Хороший, ОК, так що тепер кожен може побачити його. 1894 01:15:30,770 --> 01:15:33,400 Що does-- це як, це він. 1895 01:15:33,400 --> 01:15:34,580 Це варення, прямо тут. 1896 01:15:34,580 --> 01:15:37,030 1897 01:15:37,030 --> 01:15:37,930 Що це означає? 1898 01:15:37,930 --> 01:15:39,250 1899 01:15:39,250 --> 01:15:39,970 Що я роблю? 1900 01:15:39,970 --> 01:15:41,890 1901 01:15:41,890 --> 01:15:42,880 Так, ідея? 1902 01:15:42,880 --> 01:15:43,482 Да? 1903 01:15:43,482 --> 01:15:45,692 >> СТУДЕНТ: Ну, так що, коли Ви вводите масив, 1904 01:15:45,692 --> 01:15:47,525 Ви збираєтеся йти зліва направо, 1905 01:15:47,525 --> 01:15:51,786 так ви збираєтеся йти в десяткової від вниз [нерозбірливо]. 1906 01:15:51,786 --> 01:15:52,410 DAVIN: Абсолютно вірно. 1907 01:15:52,410 --> 01:15:55,063 СТУДЕНТ: Так кожен потрібно помножити 1908 01:15:55,063 --> 01:15:59,490 то, що ви бачили, як від значення междунар по раз, коли ви отримуєте рухатися, що над одним. 1909 01:15:59,490 --> 01:16:01,590 >> DAVIN: Відмінно, прекрасно, так, наприклад, давайте 1910 01:16:01,590 --> 01:16:05,376 сказати, що я дав you-- Я писатиму тут. 1911 01:16:05,376 --> 01:16:06,480 Ні, я не. 1912 01:16:06,480 --> 01:16:08,640 Я збираюся написати сюди. 1913 01:16:08,640 --> 01:16:12,080 Скажімо, я дав тобі 76, чи не так? 1914 01:16:12,080 --> 01:16:13,380 Скажімо, я дати вам 76. 1915 01:16:13,380 --> 01:16:15,360 Це рядок для початку, добре? 1916 01:16:15,360 --> 01:16:16,840 >> Так довжина є що? 1917 01:16:16,840 --> 01:16:18,060 1918 01:16:18,060 --> 01:16:19,060 2, чи не так? 1919 01:16:19,060 --> 01:16:20,290 Сума 0. 1920 01:16:20,290 --> 01:16:21,600 Тоді ми стрибаємо в нашій цикл. 1921 01:16:21,600 --> 01:16:24,187 ОК, перша ітерація це, що це буде? 1922 01:16:24,187 --> 01:16:25,270 Це буде сума 0. 1923 01:16:25,270 --> 01:16:27,180 Так підвести раз 10 0. 1924 01:16:27,180 --> 01:16:28,500 Це безглуздо. 1925 01:16:28,500 --> 01:16:29,880 Тоді що ж це зробити? 1926 01:16:29,880 --> 01:16:30,845 1927 01:16:30,845 --> 01:16:31,720 СТУДЕНТ: [нерозбірливо]. 1928 01:16:31,720 --> 01:16:33,110 1929 01:16:33,110 --> 01:16:37,430 >> DAVIN: Це збирається повернути, що характер в ціле число, чи не так? 1930 01:16:37,430 --> 01:16:42,160 Це ніби як з вашим Проблема set-- цьому light-- 1931 01:16:42,160 --> 01:16:44,170 це ніби як з Проблема встановлений на Visioneer. 1932 01:16:44,170 --> 01:16:45,980 Ви маєте справу зі значеннями ASCII. 1933 01:16:45,980 --> 01:16:48,520 Так що, якщо я даю вам, як, сім, але це характер, 1934 01:16:48,520 --> 01:16:50,965 і ви хочете знати, Добре, що цифра є те, що? 1935 01:16:50,965 --> 01:16:53,540 1936 01:16:53,540 --> 01:16:54,910 Так, ви могли б, так. 1937 01:16:54,910 --> 01:16:55,900 Так що цифра, що? 1938 01:16:55,900 --> 01:16:59,550 Ви можете відняти 0 від нього, але ви повинні відняти 0, характер. 1939 01:16:59,550 --> 01:17:01,425 >> І де деякі люди отримати спіткнувся, вони 1940 01:17:01,425 --> 01:17:04,260 як, в порядку, добре, я повинен знати, значення ASCII для цієї вікторині? 1941 01:17:04,260 --> 01:17:06,218 Ні, ви, безумовно, не потрібно знати ASCII 1942 01:17:06,218 --> 01:17:09,520 Значення, начебто, в нижньому регістрі , Верхній регістр, нуль. 1943 01:17:09,520 --> 01:17:12,060 >> ROB: Там немає причин, щоб коли-небудь поставити це на шпаргалку. 1944 01:17:12,060 --> 01:17:14,226 >> DAVIN: Безумовно не витрачати свій простір в цьому. 1945 01:17:14,226 --> 01:17:18,090 Ви можете literally-- тільки замість сказати 48, як аж 1946 01:17:18,090 --> 01:17:24,630 там, що еквівалентно кажучи друг, один апостроф, 1947 01:17:24,630 --> 01:17:27,680 так, точно так же. 1948 01:17:27,680 --> 01:17:34,106 >> ROB: Ви могли б подумати, про це, як if-- Бога, мені потрібен мій, 1949 01:17:34,106 --> 01:17:37,490 oops-- ви могли майже думати про це як ніби у нас є щось на зразок цього хеша 1950 01:17:37,490 --> 01:17:39,755 визначити 0 як 48. 1951 01:17:39,755 --> 01:17:41,320 1952 01:17:41,320 --> 01:17:42,030 Це не буде працювати. 1953 01:17:42,030 --> 01:17:45,502 Але думати про це як один цитатою 0 апостроф, і для всіх персонажів. 1954 01:17:45,502 --> 01:17:47,960 Думайте про це як константа, представляє це значення ASCII. 1955 01:17:47,960 --> 01:17:49,080 >> DAVIN: Так. 1956 01:17:49,080 --> 01:17:52,820 Отже, в перший раз через, так з 76-- так в перший раз через, 1957 01:17:52,820 --> 01:17:57,260 це тільки символ 7 мінус символ 0, 1958 01:17:57,260 --> 01:18:00,420 і ті сім integers-- добре, ті, 1959 01:18:00,420 --> 01:18:04,030 сім простору один від другий на ASCII графіку або будь-який інший. 1960 01:18:04,030 --> 01:18:06,770 Так що збирається повернути Int з 7. 1961 01:18:06,770 --> 01:18:08,720 Так що тепер, сума дорівнює 7. 1962 01:18:08,720 --> 01:18:10,830 >> Добре, добре, давайте перейдемо в цей цикл знову. 1963 01:18:10,830 --> 01:18:13,010 Добре, тепер це сума раз 10. 1964 01:18:13,010 --> 01:18:15,800 Так ви ефективно переміщуючи 7 вліво. 1965 01:18:15,800 --> 01:18:17,542 Чи має це сенс? 1966 01:18:17,542 --> 01:18:19,250 Ти ефективно переміщуючи його вліво. 1967 01:18:19,250 --> 01:18:21,790 >> І тоді ви add-- це буде 6 мінус 0. 1968 01:18:21,790 --> 01:18:22,650 Ось 6. 1969 01:18:22,650 --> 01:18:24,752 Так що це буде 70 плюс 6. 1970 01:18:24,752 --> 01:18:25,996 76, що ваш номер. 1971 01:18:25,996 --> 01:18:28,370 Таким чином, незалежно від того, який числа Я дав вам, це повільно просто 1972 01:18:28,370 --> 01:18:31,610 збирається змістити великі значення вліво, 1 фактор 10 1973 01:18:31,610 --> 01:18:35,525 кожен раз протягом циклу, а потім додати на в міру необхідності. 1974 01:18:35,525 --> 01:18:37,350 1975 01:18:37,350 --> 01:18:37,865 >> В спину? 1976 01:18:37,865 --> 01:18:40,240 СТУДЕНТ: Ми не повинні робити будь-яка перевірка в програмі? 1977 01:18:40,240 --> 01:18:41,580 1978 01:18:41,580 --> 01:18:44,302 >> ROB: Так наскільки перевірки йде по програмі, 1979 01:18:44,302 --> 01:18:46,510 ми б розповісти вам досить багато, що вам потрібно, щоб перевірити. 1980 01:18:46,510 --> 01:18:48,670 Якщо ми не говоримо вам що-небудь, то, як правило 1981 01:18:48,670 --> 01:18:50,320 Припустимо, у вас є, щоб перевірити більшість речей. 1982 01:18:50,320 --> 01:18:54,772 Як ви, можливо, просто щоб бути в безпеці, вам ймовірно, слід перевірити агов, це з нульовим? 1983 01:18:54,772 --> 01:18:56,230 Тоді я поняття не маю, що таке повернутися. 1984 01:18:56,230 --> 01:18:58,814 Але ми б вам сказати, такого роду речі. 1985 01:18:58,814 --> 01:18:59,480 0, я не знаю. 1986 01:18:59,480 --> 01:19:02,786 >> DAVIN: А чому ви хотіли б перевірити ще раз, якщо з одно нулю? 1987 01:19:02,786 --> 01:19:03,660 СТУДЕНТ: [нерозбірливо]. 1988 01:19:03,660 --> 01:19:04,880 DAVIN: Через напівкоксу зірки. 1989 01:19:04,880 --> 01:19:05,510 Це покажчик. 1990 01:19:05,510 --> 01:19:09,240 Так цілком прийнятно Декларація, я міг би сказати, в порядку, 1991 01:19:09,240 --> 01:19:11,917 з дорівнює нулю, тому що це може бути дороговказом на нуль. 1992 01:19:11,917 --> 01:19:14,250 Тому, коли у вас є покажчики на вашому шляху в, як це, 1993 01:19:14,250 --> 01:19:15,420 Ви, ймовірно, слід перевірити. 1994 01:19:15,420 --> 01:19:18,461 Тому що, якщо ви не переконаєтеся, що й то ви потім в ваш цикл, 1995 01:19:18,461 --> 01:19:20,100 і ви doing-- стрімголов вниз. 1996 01:19:20,100 --> 01:19:21,980 1997 01:19:21,980 --> 01:19:22,920 Скут вниз. 1998 01:19:22,920 --> 01:19:23,860 >> ROB: На жаль, це так. 1999 01:19:23,860 --> 01:19:25,860 >> DAVIN: І так, як, якщо це нуль, а потім вас 2000 01:19:25,860 --> 01:19:28,267 зробити це, що помилка ви збираєтеся отримати? 2001 01:19:28,267 --> 01:19:29,850 СТУДЕНТ: Ви збираєтеся отримати набір провину. 2002 01:19:29,850 --> 01:19:31,250 DAVIN: Ви збираєтеся встановити вина, правильно, тому що ти 2003 01:19:31,250 --> 01:19:32,616 намагаючись індексу в нуль. 2004 01:19:32,616 --> 01:19:35,240 Таким чином, ви будете намагатися індексу в пам'ять, що ви не володієте. 2005 01:19:35,240 --> 01:19:39,550 Таким чином, це, якщо це є нульовим, і Ви робите це, ви будете циклу. 2006 01:19:39,550 --> 01:19:43,656 >> ROB: Я теж думаю, що на іспиті, в якому ми поставили це питання, ми говоримо вам, 2007 01:19:43,656 --> 01:19:45,655 що ви можете просто вважати, це позитивне число. 2008 01:19:45,655 --> 01:19:48,270 Бо atoi Також очікується обробляти негативні числа, 2009 01:19:48,270 --> 01:19:49,686 так що ви повинні були б особливий випадок. 2010 01:19:49,686 --> 01:19:53,080 Гей, це перший символ тире, і в цьому випадку, в порядку, 2011 01:19:53,080 --> 01:19:54,839 Тепер це негативне число. 2012 01:19:54,839 --> 01:19:56,380 Ми розповімо вам ці види речей. 2013 01:19:56,380 --> 01:19:58,005 Ми розповімо вам, що вам потрібно для роботи. 2014 01:19:58,005 --> 01:19:59,310 DAVIN: Так. 2015 01:19:59,310 --> 01:20:02,530 Так що я впевнений, що деякі люди можуть have-- якщо ви почали дивитися на старих іспитів, 2016 01:20:02,530 --> 01:20:03,900 Ви бачили sterln. 2017 01:20:03,900 --> 01:20:05,120 Це популярний. 2018 01:20:05,120 --> 01:20:09,790 І я думаю, що в sterln, ви повинні були зробити цю перевірку для нуль, повернення 2019 01:20:09,790 --> 01:20:10,950 0 або щось подібне. 2020 01:20:10,950 --> 01:20:11,940 Як, ви мали перевірити на нуль. 2021 01:20:11,940 --> 01:20:14,230 І якщо ви не зробили, що було вказати геть на вікторині. 2022 01:20:14,230 --> 01:20:16,750 2023 01:20:16,750 --> 01:20:19,500 Так чи інакше, робить усіх відчуваю в порядку з atoi? 2024 01:20:19,500 --> 01:20:21,112 2025 01:20:21,112 --> 01:20:22,820 Чи хоче, щоб хто-небудь перейти частин знову? 2026 01:20:22,820 --> 01:20:23,815 2027 01:20:23,815 --> 01:20:25,565 ROB: О, так, я думаю, ми також сказати, що ви 2028 01:20:25,565 --> 01:20:28,565 можна вважати, що всі is-- що вони насправді ввівши номер, 2029 01:20:28,565 --> 01:20:32,821 що вам не доведеться турбуватися про, як, будучи букви в рядку, тому. 2030 01:20:32,821 --> 01:20:33,320 DAVIN: Так. 2031 01:20:33,320 --> 01:20:33,922 Да? 2032 01:20:33,922 --> 01:20:35,713 СТУДЕНТ: Чи можете ви піти над більш один раз, коли 2033 01:20:35,713 --> 01:20:37,860 Ви використовуєте подвійні лапки і одинарні лапки? 2034 01:20:37,860 --> 01:20:41,290 >> DAVIN: Звичайно, так подвійні лапки, дуже просто, це подвійні лапки є рядками. 2035 01:20:41,290 --> 01:20:43,370 Так що, якщо ви двічі цитату що-небудь, що це рядок. 2036 01:20:43,370 --> 01:20:48,270 Так, як, якби мені довелося це 0 тут, і я зробив це, це рядок. 2037 01:20:48,270 --> 01:20:50,060 НЕ Ось вже не персонаж. 2038 01:20:50,060 --> 01:20:54,816 Так що я не можу знайти цю величину на моєму ASCII Графік, бо це рядок, так. 2039 01:20:54,816 --> 01:20:57,770 2040 01:20:57,770 --> 01:20:59,480 >> ОК, будь-які інші питання? 2041 01:20:59,480 --> 01:21:00,405 Да? 2042 01:21:00,405 --> 01:21:02,345 >> СТУДЕНТ: Таким чином, ви маєте вже відповів на це питання, 2043 01:21:02,345 --> 01:21:05,255 але як, коли ми насправді пишу це на вікторині, 2044 01:21:05,255 --> 01:21:08,165 Ви хочете, щоб ми написали з скорочує нулі [нерозбірливо]? 2045 01:21:08,165 --> 01:21:11,041 2046 01:21:11,041 --> 01:21:11,540 DAVIN: Ні. 2047 01:21:11,540 --> 01:21:13,800 Питання було повинен вам вставити косу риску через нулі 2048 01:21:13,800 --> 01:21:14,890 щоб вказати, якщо вони нулі? 2049 01:21:14,890 --> 01:21:15,890 Ні, ми з цим розберемося. 2050 01:21:15,890 --> 01:21:16,940 2051 01:21:16,940 --> 01:21:19,530 Так, дякую, що вони гарні. 2052 01:21:19,530 --> 01:21:20,860 Добре, що-небудь ще? 2053 01:21:20,860 --> 01:21:25,060 Чи хоче хтось to-- тому я думаю, ми запускаємо трохи протягом довгого часу. 2054 01:21:25,060 --> 01:21:27,305 Хочете побачити ще один, або? 2055 01:21:27,305 --> 01:21:28,096 СТУДЕНТ: RandomInt. 2056 01:21:28,096 --> 01:21:29,230 2057 01:21:29,230 --> 01:21:30,750 >> DAVIN: RandomInt, ОК, точно. 2058 01:21:30,750 --> 01:21:32,975 Так що давайте робити RandomInt. 2059 01:21:32,975 --> 01:21:34,395 2060 01:21:34,395 --> 01:21:35,270 Я зроблю це тут. 2061 01:21:35,270 --> 01:21:36,770 2062 01:21:36,770 --> 01:21:39,210 Так RandomInt насправді набагато простіше. 2063 01:21:39,210 --> 01:21:43,578 Я думаю, що atoi, ймовірно, один з найважчих що ми попросили в попередні роки. 2064 01:21:43,578 --> 01:21:44,453 СТУДЕНТ: [нерозбірливо]. 2065 01:21:44,453 --> 01:21:46,660 2066 01:21:46,660 --> 01:21:47,161 >> DAVIN: Що? 2067 01:21:47,161 --> 01:21:49,493 ROB: Я бачу, якщо це частково з перегляду від сюди. 2068 01:21:49,493 --> 01:21:50,040 DAVIN: Чи так це? 2069 01:21:50,040 --> 01:21:52,500 ROB: Я не думаю, що це going-- я думаю, він збирається бігти направо. 2070 01:21:52,500 --> 01:21:53,791 DAVIN: ОК, так що я буду робити це. 2071 01:21:53,791 --> 01:21:56,250 І тоді ви просто покласти його на екрані. 2072 01:21:56,250 --> 01:21:57,150 >> ROB: Гаразд. 2073 01:21:57,150 --> 01:21:58,190 >> DAVIN: Ви хочете бути моїм книжник? 2074 01:21:58,190 --> 01:21:58,600 >> ROB: Так. 2075 01:21:58,600 --> 01:21:59,100 >> DAVIN: Ніцца. 2076 01:21:59,100 --> 01:22:01,210 2077 01:22:01,210 --> 01:22:02,727 ОК, я можу стерти це? 2078 01:22:02,727 --> 01:22:04,188 >> СТУДЕНТ: Так. 2079 01:22:04,188 --> 01:22:05,162 >> DAVIN: Це так важко. 2080 01:22:05,162 --> 01:22:10,032 2081 01:22:10,032 --> 01:22:12,062 (Спів) Ти робиш що ви робите. 2082 01:22:12,062 --> 01:22:14,454 І робити те, що ви не знаєте. 2083 01:22:14,454 --> 01:22:14,954 Добре. 2084 01:22:14,954 --> 01:22:19,790 2085 01:22:19,790 --> 01:22:22,930 >> Добре, якщо я правильно пам'ятаю, на вікторина RandomInt походив, 2086 01:22:22,930 --> 01:22:26,190 ОК, я збираюся дати вам два номера, як в а і б. 2087 01:22:26,190 --> 01:22:30,380 І я хочу, щоб ти дав мені RandomInt між цими числами. 2088 01:22:30,380 --> 01:22:33,440 Так RandomInt збирається взяти два numbers-- 2089 01:22:33,440 --> 01:22:41,690 так RandomInt-- і це збирається повертати Int. 2090 01:22:41,690 --> 01:22:42,930 >> Так що повертається значення? 2091 01:22:42,930 --> 01:22:44,151 Я щойно сказав вам. 2092 01:22:44,151 --> 01:22:44,650 Int, чи не так? 2093 01:22:44,650 --> 01:22:46,400 2094 01:22:46,400 --> 01:22:49,260 Як це, і тоді це збирається взяти два цілих. 2095 01:22:49,260 --> 01:22:56,301 Так що це займе Int і INT б, як що. 2096 01:22:56,301 --> 01:22:58,217 Так що RandomInt є збираюся зробити, це він збирається 2097 01:22:58,217 --> 01:23:02,440 повернутися випадкове значення між цими двома значеннями. 2098 01:23:02,440 --> 01:23:05,140 Так що це буде більше ніж, менше, ніж б. 2099 01:23:05,140 --> 01:23:09,020 Так що я думаю, що ви, ймовірно, може вважати, що є меншим із двох значень. 2100 01:23:09,020 --> 01:23:12,210 Так що, якщо ми маємо справу з Випадковість, що функція 2101 01:23:12,210 --> 01:23:14,825 ми бачили, що дає нам випадкові речі? 2102 01:23:14,825 --> 01:23:15,450 СТУДЕНТ: Drand. 2103 01:23:15,450 --> 01:23:16,506 DAVIN: Drand, точно. 2104 01:23:16,506 --> 01:23:18,630 Таким чином, ви будете, ймовірно, хочете використовувати drand. 2105 01:23:18,630 --> 01:23:19,940 2106 01:23:19,940 --> 01:23:29,160 Таким чином, ви можете сказати, інтервал випадкової, і ми будемо просто сказати, що це дорівнює 0 прямо зараз. 2107 01:23:29,160 --> 01:23:30,170 2108 01:23:30,170 --> 01:23:38,690 І вони ми збираємося сказати, ОК, випадкові одно drand 48. 2109 01:23:38,690 --> 01:23:39,747 2110 01:23:39,747 --> 01:23:40,830 І що ж це повернення? 2111 01:23:40,830 --> 01:23:43,742 Що це функція дасть вам? 2112 01:23:43,742 --> 01:23:45,610 >> СТУДЕНТ: від 0 до 1. 2113 01:23:45,610 --> 01:23:47,870 >> DAVIN: Так, між 0 і 1. 2114 01:23:47,870 --> 01:23:48,890 Так це буде be-- 2115 01:23:48,890 --> 01:23:51,070 >> ROB: І це is-- я думаю, ми б розповісти вам про це. 2116 01:23:51,070 --> 01:23:52,670 Як можна використовувати drand 48. 2117 01:23:52,670 --> 01:23:54,350 Ви можете переконатися в цьому на минулій іспиту. 2118 01:23:54,350 --> 01:23:56,720 Але ми б, ймовірно, сказати вам можна використовувати drand 48, який 2119 01:23:56,720 --> 01:23:58,790 повертає поплавок між 0 і 1. 2120 01:23:58,790 --> 01:24:00,830 >> DAVIN: Так, так, я упевнений, що на іспиті 2121 01:24:00,830 --> 01:24:03,860 він каже вам, ймовірно, хочете використовувати drand, так. 2122 01:24:03,860 --> 01:24:07,041 Так це буде повернутися деяке значення між 0 і 1. 2123 01:24:07,041 --> 01:24:08,790 І тоді те, що ти захоче зробити? 2124 01:24:08,790 --> 01:24:16,360 Ну, ви хочете, щоб помножити по-- почекайте, я думаю, що це, як це, вибачте. 2125 01:24:16,360 --> 01:24:18,018 Я просто це зробити. 2126 01:24:18,018 --> 01:24:19,410 Я не знаю. 2127 01:24:19,410 --> 01:24:22,240 >> Так б мінус. 2128 01:24:22,240 --> 01:24:23,310 2129 01:24:23,310 --> 01:24:24,490 Так чому б мінус? 2130 01:24:24,490 --> 01:24:26,110 2131 01:24:26,110 --> 01:24:30,490 Так скажімо, drand дає вам назад int-- ОК, я просто робити все інше, 2132 01:24:30,490 --> 01:24:33,380 так плюс. 2133 01:24:33,380 --> 01:24:36,130 Так що does-- у є б мінус. 2134 01:24:36,130 --> 01:24:40,670 Так скажемо, що drand дає вам назад максимальне значення це могло можливо 2135 01:24:40,670 --> 01:24:41,410 дати вам. 2136 01:24:41,410 --> 01:24:42,409 Що це буде? 2137 01:24:42,409 --> 01:24:43,010 СТУДЕНТ: 1. 2138 01:24:43,010 --> 01:24:44,430 >> DAVIN: 1, чи не так? 2139 01:24:44,430 --> 01:24:47,880 Так що, якщо це 1, а ти помноживши його на б мінус, 2140 01:24:47,880 --> 01:24:50,110 добре, от тільки Різниця між мінус А. 2141 01:24:50,110 --> 01:24:52,870 І якщо ви потім додати, що назад на, що є що? 2142 01:24:52,870 --> 01:24:54,290 2143 01:24:54,290 --> 01:24:55,180 Це в основному б. 2144 01:24:55,180 --> 01:24:56,435 2145 01:24:56,435 --> 01:24:57,310 Чи має це сенс? 2146 01:24:57,310 --> 01:24:57,851 >> СТУДЕНТ: Так. 2147 01:24:57,851 --> 01:24:59,480 2148 01:24:59,480 --> 01:25:02,170 >> DAVIN: Так що, якщо це максимум цінуєте це могло б бути, 2149 01:25:02,170 --> 01:25:03,175 це буде один. 2150 01:25:03,175 --> 01:25:04,122 2151 01:25:04,122 --> 01:25:06,330 А потім це просто Різниця між ними. 2152 01:25:06,330 --> 01:25:11,410 Додати на, так що це збирається повернутися випадковим. 2153 01:25:11,410 --> 01:25:15,000 2154 01:25:15,000 --> 01:25:18,620 І в разі, кутовий drand дає вам назад 1, 2155 01:25:18,620 --> 01:25:20,970 випадкових буде просто ефективно б. 2156 01:25:20,970 --> 01:25:22,700 Але це максимум, що може бути. 2157 01:25:22,700 --> 01:25:27,420 Так що, якщо це буде менше, ніж що, так скажемо, що його, як 0,9, 2158 01:25:27,420 --> 01:25:31,080 так то 0,9 раза б мінус буде менше 2159 01:25:31,080 --> 01:25:33,230 , Ніж різниця між б мінус. 2160 01:25:33,230 --> 01:25:35,830 >> І тоді, якщо ви додасте що на, то, що значення 2161 01:25:35,830 --> 01:25:38,986 буде більше, ніж, тому Ви додаєте щось на нього, 2162 01:25:38,986 --> 01:25:40,360 але це буде менш б. 2163 01:25:40,360 --> 01:25:41,430 2164 01:25:41,430 --> 01:25:44,420 Таким чином, ви збираєтеся отримати випадковий число, тому що ви телефонуєте drand. 2165 01:25:44,420 --> 01:25:48,000 І що ранд, що випадкове число буде десь посередині 2166 01:25:48,000 --> 01:25:49,342 і б. 2167 01:25:49,342 --> 01:25:50,780 Чи має це сенс? 2168 01:25:50,780 --> 01:25:52,990 >> ROB: Просто, щоб поставити його в конкретні цифри, так 2169 01:25:52,990 --> 01:25:55,450 Припустимо, ми хочемо, щоб забрати випадкове число між 7 і 10. 2170 01:25:55,450 --> 01:25:56,960 Так б мінус це наш асортимент. 2171 01:25:56,960 --> 01:26:00,150 Так що є цілий ряд з трьох номера ми хочемо, щоб вибрати з. 2172 01:26:00,150 --> 01:26:03,290 А потім множення що між 0 і 1 січня, 2173 01:26:03,290 --> 01:26:07,430 якщо що то дає нам some-- скажемо, що дає нам 1,5. 2174 01:26:07,430 --> 01:26:10,670 >> Тоді 1,5, ми хочемо йти з 7 по 10. 2175 01:26:10,670 --> 01:26:14,470 Так 1,5 плюс 7 підводить нас назад в нашому 7 до 10 діапазоні. 2176 01:26:14,470 --> 01:26:17,580 А потім ми її зберігання всередині ціле число, так що усікається до 8. 2177 01:26:17,580 --> 01:26:18,790 А потім ми просто повернути це. 2178 01:26:18,790 --> 01:26:21,310 Так б мінус це наш асортимент. 2179 01:26:21,310 --> 01:26:25,770 зрушує його в цифри що ми хочемо в цьому діапазоні. 2180 01:26:25,770 --> 01:26:30,540 Так між 7 і 10, а потім ми може повернути те, що ми в кінцевому підсумку с. 2181 01:26:30,540 --> 01:26:32,684 >> DAVIN: Так, приємно. 2182 01:26:32,684 --> 01:26:34,470 >> ROB: Спасибо. 2183 01:26:34,470 --> 01:26:35,628 >> DAVIN: Так, в чому справа? 2184 01:26:35,628 --> 01:26:39,746 >> СТУДЕНТ: Чи є у нас запустити його для будь-якого виду Помилки ASCII коли we're-- якщо drand є 2185 01:26:39,746 --> 01:26:40,996 повернення поплавок [нерозбірливо]. 2186 01:26:40,996 --> 01:26:42,470 2187 01:26:42,470 --> 01:26:45,360 >> ROB: Так само, як Роб сказав, бо випадковостей не INT, 2188 01:26:45,360 --> 01:26:47,080 так drand буде поплавок. 2189 01:26:47,080 --> 01:26:48,470 Так, а потім він розмножується поза. 2190 01:26:48,470 --> 01:26:50,507 І ви можете отримати деякі вид чисел з плаваючою крапкою. 2191 01:26:50,507 --> 01:26:51,840 І тоді це буде обрізати. 2192 01:26:51,840 --> 01:26:52,339 >> СТУДЕНТ: ОК. 2193 01:26:52,339 --> 01:26:53,019 DAVIN: Так. 2194 01:26:53,019 --> 01:26:56,060 ROB: А якщо компілятор були попередити Ви про, як, втрата точності, 2195 01:26:56,060 --> 01:26:58,986 просто кинули на Int в є, і то це добре. 2196 01:26:58,986 --> 01:27:00,398 2197 01:27:00,398 --> 01:27:00,898 DAVIN: Да? 2198 01:27:00,898 --> 01:27:02,332 2199 01:27:02,332 --> 01:27:04,722 >> СТУДЕНТ: Чи буде це мати ж ймовірність отримання, 2200 01:27:04,722 --> 01:27:06,156 як, б або [нерозбірливо]? 2201 01:27:06,156 --> 01:27:08,080 2202 01:27:08,080 --> 01:27:10,980 >> ROB: Так is-- Я насправді wondering-- є RandomInt передбачається 2203 01:27:10,980 --> 01:27:14,362 щоб бути номером від менш б? 2204 01:27:14,362 --> 01:27:16,820 Мовляв, якщо це від 7 до 10, які можливості? 2205 01:27:16,820 --> 01:27:18,454 7, 8 і 9, або 7, 8, 9, 10? 2206 01:27:18,454 --> 01:27:19,120 DAVIN: я забуваю. 2207 01:27:19,120 --> 01:27:19,880 На проблемної set-- 2208 01:27:19,880 --> 01:27:20,570 >> ROB: Я думаю, що це 7, 8, 9. 2209 01:27:20,570 --> 01:27:22,785 >> DAVIN: Вона прямо говорить своєму включно і один ексклюзивною. 2210 01:27:22,785 --> 01:27:23,110 >> ROB: Так. 2211 01:27:23,110 --> 01:27:23,670 >> DAVIN: Але я don't-- Я не-- 2212 01:27:23,670 --> 01:27:25,878 >> ROB: Так що я думаю, що це є не включений, і в цьому випадку, 2213 01:27:25,878 --> 01:27:28,152 є одно Ймовірність 7, 8, і 9. 2214 01:27:28,152 --> 01:27:29,360 Там немає ймовірність 10. 2215 01:27:29,360 --> 01:27:31,770 2216 01:27:31,770 --> 01:27:32,270 DAVIN: Да? 2217 01:27:32,270 --> 01:27:33,395 СТУДЕНТ: У мене є питання. 2218 01:27:33,395 --> 01:27:38,090 Ми хочемо, щоб визначити функцію повертає не одне значення, але масив. 2219 01:27:38,090 --> 01:27:41,020 Тоді що буде Синтаксис після повернення? 2220 01:27:41,020 --> 01:27:44,604 >> DAVIN: ОК, так, то ви would-- після повернення? 2221 01:27:44,604 --> 01:27:47,020 Так, скажімо, ви оголосили масив десь там. 2222 01:27:47,020 --> 01:27:49,708 Тоді вам просто повернеться Ім'я масиву. 2223 01:27:49,708 --> 01:27:50,676 >> СТУДЕНТ: ОК, спасибі. 2224 01:27:50,676 --> 01:27:51,718 Тоді просто повернутися з a-- 2225 01:27:51,718 --> 01:27:52,759 DAVIN: Ой, зачекайте, дуже шкода. 2226 01:27:52,759 --> 01:27:54,620 Питання в тому, як Ви повертати масив. 2227 01:27:54,620 --> 01:27:56,170 >> ROB: Хоча це не може бути масив, оголошений 2228 01:27:56,170 --> 01:27:57,260 в стеці або що-небудь подібне. 2229 01:27:57,260 --> 01:27:59,510 Це мало б бути щось malloced, тому Танос 2230 01:27:59,510 --> 01:28:01,610 як ви обійти автоматичний розподіл пам'яті. 2231 01:28:01,610 --> 01:28:02,109 >> DAVIN: Так. 2232 01:28:02,109 --> 01:28:03,433 2233 01:28:03,433 --> 01:28:04,933 ROB: Як вам обійти локальній області видимості. 2234 01:28:04,933 --> 01:28:09,670 2235 01:28:09,670 --> 01:28:11,550 >> DAVIN: Але ви б просто повернути його name-- 2236 01:28:11,550 --> 01:28:17,890 >> СТУДЕНТ: [нерозбірливо] це не один значення, наприклад, два числа, так 2237 01:28:17,890 --> 01:28:18,390 [Нерозбірливо]. 2238 01:28:18,390 --> 01:28:19,590 >> DAVIN: Ви не можете повернутися кілька число. 2239 01:28:19,590 --> 01:28:20,850 Ви не можете, як, return-- 2240 01:28:20,850 --> 01:28:23,630 >> СТУДЕНТ: Я говорив про повернення масив або щось подібне. 2241 01:28:23,630 --> 01:28:26,050 >> DAVIN: Так, так що питання я можу повертати декілька значень. 2242 01:28:26,050 --> 01:28:27,460 Ви не можете повертати декілька значень. 2243 01:28:27,460 --> 01:28:30,270 Ви не можете, як, повернути те повернутися б або щось подібне. 2244 01:28:30,270 --> 01:28:32,710 Тому що після того, як ви повернетеся, вас повернутися з функції. 2245 01:28:32,710 --> 01:28:35,790 І то функція буде зроблено, і як Роб сказав, знаходиться в стеці. 2246 01:28:35,790 --> 01:28:38,260 >> Так що все, що пам'ять просто отримує повертається до комп'ютера. 2247 01:28:38,260 --> 01:28:40,025 Все забувається, в основному. 2248 01:28:40,025 --> 01:28:41,480 2249 01:28:41,480 --> 01:28:44,430 Так що, якщо ви хочете, щоб повернутися кратне значення, ви повинні повернути масив, 2250 01:28:44,430 --> 01:28:45,971 І те, як ви робите це mallocing. 2251 01:28:45,971 --> 01:28:48,780 А потім ви повернетеся х подібне. 2252 01:28:48,780 --> 01:28:50,280 В принципі, ви просто повертає ім'я. 2253 01:28:50,280 --> 01:28:51,620 І коли ви повернетеся щось на зразок цього, ви 2254 01:28:51,620 --> 01:28:53,200 насправді не повернення значення. 2255 01:28:53,200 --> 01:28:55,430 >> Так скажімо, у вас зберігається значення в масиві. 2256 01:28:55,430 --> 01:28:57,910 Ти насправді не повернення цих цінностей. 2257 01:28:57,910 --> 01:29:01,515 Мовляв, якби я повернувся в Int, я дійсно повертаються копії значень. 2258 01:29:01,515 --> 01:29:02,017 2259 01:29:02,017 --> 01:29:03,850 Але якби я мав повернутися щось на зразок цього, 2260 01:29:03,850 --> 01:29:06,450 Я повертаюся посилання для цих значень. 2261 01:29:06,450 --> 01:29:09,090 Так я повертаюся, в основному, Адреса пам'яті для значень. 2262 01:29:09,090 --> 01:29:10,079 Чи має це сенс? 2263 01:29:10,079 --> 01:29:10,620 СТУДЕНТ: Так. 2264 01:29:10,620 --> 01:29:11,120 DAVIN: Ніцца. 2265 01:29:11,120 --> 01:29:12,760 2266 01:29:12,760 --> 01:29:13,410 Да? 2267 01:29:13,410 --> 01:29:15,430 >> СТУДЕНТ: Коли ти використовуючи drand тут, 2268 01:29:15,430 --> 01:29:17,660 Ви повинні поставити srand до цього? 2269 01:29:17,660 --> 01:29:20,320 >> DAVIN: Ні, ні, я так не думаю. 2270 01:29:20,320 --> 01:29:23,040 >> ROB: Так, так що у вас є сказати що-небудь про srand? 2271 01:29:23,040 --> 01:29:26,900 За замовчуванням вам ніколи не говорив srand взагалі, це просто зробити srand нуль. 2272 01:29:26,900 --> 01:29:29,350 Так drand з власної роботи буде. 2273 01:29:29,350 --> 01:29:33,759 І він буде автоматично насіння з поточний час, є те, що він використовує. 2274 01:29:33,759 --> 01:29:35,175 2275 01:29:35,175 --> 01:29:35,675 DAVIN: Да? 2276 01:29:35,675 --> 01:29:40,950 СТУДЕНТ: Чи подобається вам [нерозбірливо] з номерами? 2277 01:29:40,950 --> 01:29:42,570 DAVIN: Так, можна. 2278 01:29:42,570 --> 01:29:46,770 СТУДЕНТ: Таким чином, ви могли сказати, як, в 4 рази 2. 2279 01:29:46,770 --> 01:29:50,280 Справа в тому, що ви не можете припустити, то інтервал становить чотири байти. 2280 01:29:50,280 --> 01:29:51,020 Only-- 2281 01:29:51,020 --> 01:29:53,830 >> DAVIN: Я маю на увазі, для вікторини можна. 2282 01:29:53,830 --> 01:29:54,830 [Сміється] 2283 01:29:54,830 --> 01:29:55,780 >> ROB: М-м, ні. 2284 01:29:55,780 --> 01:29:56,780 DAVIN: Так, так, ви можете. 2285 01:29:56,780 --> 01:30:00,197 Якщо вони питають вас, як великий інтервал є, Ви не можете бути, як, чотири або вісім. 2286 01:30:00,197 --> 01:30:02,030 ROB: О, так що якщо Питання в тому, зокрема, 2287 01:30:02,030 --> 01:30:04,857 як, якщо це проблема кодування, Ви повинні сказати розмір междунар. 2288 01:30:04,857 --> 01:30:06,690 Якщо це стіл, або він каже, скільки байт, 2289 01:30:06,690 --> 01:30:08,808 Ви не повинні заповнювати розміру цілих чисел. 2290 01:30:08,808 --> 01:30:11,278 >> СТУДЕНТИ: [Сміється] 2291 01:30:11,278 --> 01:30:18,210 2292 01:30:18,210 --> 01:30:20,580 >> DAVIN: справа, так чому ж Розмір междунар важливою тут? 2293 01:30:20,580 --> 01:30:23,085 Так як, якщо ми збираємося 32-біт процесор або щось подібне, 2294 01:30:23,085 --> 01:30:24,300 то буде чотири байти. 2295 01:30:24,300 --> 01:30:26,342 Але на деякі з нових матеріал, це може бути що? 2296 01:30:26,342 --> 01:30:27,383 Це може бути вісім, чи не так? 2297 01:30:27,383 --> 01:30:30,550 Так this-- якщо ви просто важко код з чотирьох, потім на деяких машинах, він працюватиме. 2298 01:30:30,550 --> 01:30:32,180 Деякі машини, він не працюватиме. 2299 01:30:32,180 --> 01:30:35,270 Але якщо на вікторині ми знаходимося як наскільки великий інтервал? 2300 01:30:35,270 --> 01:30:35,770 Покладіть чотири. 2301 01:30:35,770 --> 01:30:38,710 2302 01:30:38,710 --> 01:30:39,210 ROB: справа. 2303 01:30:39,210 --> 01:30:39,790 DAVIN: Да? 2304 01:30:39,790 --> 01:30:43,192 СТУДЕНТ: Так бо ми оголошенні [Нерозбірливо] всередині функції, 2305 01:30:43,192 --> 01:30:45,622 ми повинні поставити 3 всередині цієї функції? 2306 01:30:45,622 --> 01:30:46,907 Або ми можемо використовувати це поза? 2307 01:30:46,907 --> 01:30:48,740 DAVIN: Ви можете використовувати його поза цієї функції. 2308 01:30:48,740 --> 01:30:49,890 Так він просить безкоштовно. 2309 01:30:49,890 --> 01:30:51,700 >> СТУДЕНТ: втрачати де [нерозбірливо]. 2310 01:30:51,700 --> 01:30:54,720 >> ROB: О, безкоштовно не happen-- це частина магії Танос 2311 01:30:54,720 --> 01:30:57,220 є те, що ви не обмежується локальній області видимості. 2312 01:30:57,220 --> 01:31:00,700 Ви маєте повний контроль над як довго ваші змінні жити. 2313 01:31:00,700 --> 01:31:05,380 Так ми називаємо Танос тут, це могло б бути повністю окрема функція. 2314 01:31:05,380 --> 01:31:08,670 Це може бути через 10 годин що ми, нарешті, дзвонити безкоштовно. 2315 01:31:08,670 --> 01:31:11,764 >> DAVIN: Так, наприклад, як, пара тижнів по тому, коли ви, нарешті, 2316 01:31:11,764 --> 01:31:13,680 зробити свій словник Speller psets, ви збираєтеся 2317 01:31:13,680 --> 01:31:16,410 мати деяку функцію, яка створює тонн вузлів. 2318 01:31:16,410 --> 01:31:18,630 Таким чином, ви mallocing тонн вузлів в цій функції. 2319 01:31:18,630 --> 01:31:20,670 А потім в окрема функція, ви 2320 01:31:20,670 --> 01:31:22,440 захоче звільнити всі ці вузли. 2321 01:31:22,440 --> 01:31:25,740 Таким чином, ви можете буквально просто переходять на звільнити покажчик, так що адреса пам'яті 2322 01:31:25,740 --> 01:31:26,684 щоб те, що ви malloced. 2323 01:31:26,684 --> 01:31:27,600 І що буде добре. 2324 01:31:27,600 --> 01:31:29,725 Вам не потрібно, щоб звільнити, як, в тій же самій функції. 2325 01:31:29,725 --> 01:31:30,449 Да? 2326 01:31:30,449 --> 01:31:36,197 >> СТУДЕНТ: Так Танос Змінна [нерозбірливо] за межами? 2327 01:31:36,197 --> 01:31:37,384 Це те, що ви говорите? 2328 01:31:37,384 --> 01:31:38,300 DAVIN: Зачекайте, що? 2329 01:31:38,300 --> 01:31:38,800 Вибачте. 2330 01:31:38,800 --> 01:31:42,300 >> СТУДЕНТ: Якщо змінна Танос може бути вільним в будь-якому місці в коді, 2331 01:31:42,300 --> 01:31:44,800 то вони можуть бути доступні в будь-якому місці в коді? 2332 01:31:44,800 --> 01:31:45,800 Ви можете тримати їх місцевий? 2333 01:31:45,800 --> 01:31:47,880 >> DAVIN: О, вона запитала, як змінна, like-- 2334 01:31:47,880 --> 01:31:51,300 2335 01:31:51,300 --> 01:31:55,510 >> ROB: Таким чином, ви все ще повинні є якісь довідки 2336 01:31:55,510 --> 01:31:57,220 в блоці Malloc в пам'яті. 2337 01:31:57,220 --> 01:31:58,540 Так ось, ми повертаємося х. 2338 01:31:58,540 --> 01:31:59,040 СТУДЕНТ: О. 2339 01:31:59,040 --> 01:32:01,920 ROB: Якщо ми не повернулися х тут, і це було просто порожнеча, 2340 01:32:01,920 --> 01:32:04,550 то ми не мали б доступу до покажчик, який був malloced, 2341 01:32:04,550 --> 01:32:05,920 і це витік пам'яті. 2342 01:32:05,920 --> 01:32:06,690 >> СТУДЕНТ: ОК. 2343 01:32:06,690 --> 01:32:10,010 >> DAVIN: Так як, скажімо, вас Тобто це, як, прямо тут. 2344 01:32:10,010 --> 01:32:10,510 ROB: Ні. 2345 01:32:10,510 --> 01:32:13,430 DAVIN: У моїй основної функції, я не можу просто назвати цю х і бути, як, в порядку, 2346 01:32:13,430 --> 01:32:14,645 в цій функції, я зробив це. 2347 01:32:14,645 --> 01:32:14,960 >> ROB: справа. 2348 01:32:14,960 --> 01:32:17,790 >> DAVIN: Так що я буду називати х в, як, основний або щось подібне. 2349 01:32:17,790 --> 01:32:18,540 Ви не можете зробити це. 2350 01:32:18,540 --> 01:32:19,600 Ви збираєтеся щось повернути. 2351 01:32:19,600 --> 01:32:21,000 Але те, що ви збираєтеся повернутися? 2352 01:32:21,000 --> 01:32:22,130 Ви збираєтеся повернутися адресу пам'яті. 2353 01:32:22,130 --> 01:32:25,130 І тому, що ви повернетеся на пам'ять адресу, яка може бути доступний в інших країнах. 2354 01:32:25,130 --> 01:32:27,262 2355 01:32:27,262 --> 01:32:28,255 Будь-які інші питання? 2356 01:32:28,255 --> 01:32:28,755 Да? 2357 01:32:28,755 --> 01:32:31,213 >> СТУДЕНТ: Чи є дана функція бути перевірка на [нерозбірливо]? 2358 01:32:31,213 --> 01:32:33,270 2359 01:32:33,270 --> 01:32:35,005 >> DAVIN: Чому я не потрібно робити, що? 2360 01:32:35,005 --> 01:32:35,880 СТУДЕНТ: [нерозбірливо]. 2361 01:32:35,880 --> 01:32:37,755 DAVIN: Тому що ти НЕ mallocing нічого. 2362 01:32:37,755 --> 01:32:39,640 Так що це не-- так, це не подобається струнний с. 2363 01:32:39,640 --> 01:32:41,160 Це покажчик кудись. 2364 01:32:41,160 --> 01:32:42,951 Це всього лише значення. 2365 01:32:42,951 --> 01:32:43,450 СТУДЕНТ: ОК. 2366 01:32:43,450 --> 01:32:43,949 DAVIN: Так. 2367 01:32:43,949 --> 01:32:47,600 2368 01:32:47,600 --> 01:32:48,470 Що-небудь ще? 2369 01:32:48,470 --> 01:32:48,970 ROB: Да? 2370 01:32:48,970 --> 01:32:50,386 СТУДЕНТ: Але коли ви [нерозбірливо]? 2371 01:32:50,386 --> 01:32:55,050 2372 01:32:55,050 --> 01:32:58,690 >> ROB: Так що для того, щоб звільнити пам'яті, ми б сказали, тут. 2373 01:32:58,690 --> 01:33:01,350 Так х наша покажчик блок пам'яті. 2374 01:33:01,350 --> 01:33:02,845 Ми безкоштовно цей покажчик. 2375 01:33:02,845 --> 01:33:04,470 І ми не обов'язково робити це тут. 2376 01:33:04,470 --> 01:33:05,390 Ми можемо зробити це в будь-якому місці. 2377 01:33:05,390 --> 01:33:10,400 Але ви тільки дзвонити безкоштовно на щось, що Malloc віддачу. 2378 01:33:10,400 --> 01:33:12,940 Так Танос, тут, повертається те, що в даний час зберігається в х. 2379 01:33:12,940 --> 01:33:14,802 Таким чином, ми можемо назвати вільним від х. 2380 01:33:14,802 --> 01:33:18,730 2381 01:33:18,730 --> 01:33:20,556 Будь-які останні питання? 2382 01:33:20,556 --> 01:33:21,701 >> DAVIN: Будь останні питання? 2383 01:33:21,701 --> 01:33:22,200 Да? 2384 01:33:22,200 --> 01:33:25,152 >> СТУДЕНТ: На жаль, ви можете заново пояснювати чому ви б звільнити там? 2385 01:33:25,152 --> 01:33:26,630 Чому [нерозбірливо]? 2386 01:33:26,630 --> 01:33:27,774 >> DAVIN: Для сюди? 2387 01:33:27,774 --> 01:33:29,109 >> СТУДЕНТ: Так, як одразу після. 2388 01:33:29,109 --> 01:33:30,900 DAVIN: Ви, напевно, не хочу безкоштовно тут. 2389 01:33:30,900 --> 01:33:31,630 ROB: Ви, напевно, не буде. 2390 01:33:31,630 --> 01:33:33,060 DAVIN: Так, це б нічого не робити. 2391 01:33:33,060 --> 01:33:35,220 Це буде, як, створити пам'яті, робити такі речі, до нього, 2392 01:33:35,220 --> 01:33:37,390 , А потім негайно забудьте про це, так. 2393 01:33:37,390 --> 01:33:39,850 >> ROB: Але ми могли б зробити, як, тут з якоїсь причини. 2394 01:33:39,850 --> 01:33:43,902 Ми могли б сказати, INT зірку у дорівнює зворотний масив. 2395 01:33:43,902 --> 01:33:47,900 У дещо з у, можливо роздрукувати вміст. 2396 01:33:47,900 --> 01:33:49,350 І ось, нарешті, ми зробили. 2397 01:33:49,350 --> 01:33:50,626 Ми можемо звільнити у. 2398 01:33:50,626 --> 01:33:51,501 СТУДЕНТ: [нерозбірливо]. 2399 01:33:51,501 --> 01:33:57,839 2400 01:33:57,839 --> 01:33:59,005 DAVIN: Чи повинен я прокрутите вниз? 2401 01:33:59,005 --> 01:34:00,445 Спасибо. 2402 01:34:00,445 --> 01:34:00,945 ROB: Nice. 2403 01:34:00,945 --> 01:34:02,400 2404 01:34:02,400 --> 01:34:03,646 >> DAVIN: ОК, ось воно що. 2405 01:34:03,646 --> 01:34:04,520 ROB: Гаразд, добре. 2406 01:34:04,520 --> 01:34:05,070 Удачи. 2407 01:34:05,070 --> 01:34:06,800 >> DAVIN: Якщо у вас є питання, напишіть нам. 2408 01:34:06,800 --> 01:34:08,670 Удачи. 2409 01:34:08,670 --> 01:34:10,283