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