[00:00:00] [Музыка, играющая] [00:00:11] DAVIN: Ладно, ребята. Так что это обзор в первый викторины. Все готовы к викторина в среду? Элисон: Woo! СТУДЕНТ: Woo! DAVIN: Да. Элисон: Да! DAVIN: Этот парень готов. Этот парень, две руки, приятно. Так викторина обзор сегодня, это будет быть около часа-полтора. Мы собираемся перейти все основные Понятия, вы должны знать для викторины. Мы собираемся пойти в течение некоторого кодирования по примеры рук, которые на каждом викторины. И если у вас есть вопросы, не стесняйтесь поднять руку и все как что. Ну, логистика около викторина онлайн. Итак, мы собираемся разделить людей на различные номера. Он основан на их имя. Так что если у вас есть какие-либо вопросы о том, где идти или о том, что материал, как, официальное слово на том, что происходит чтобы быть на викторине, проверить в Интернете. И это все в курсе. Так что, если нет вопросов к Начнем с того, что мы собираемся начать. И вот Эллисон. [00:00:56] [Хлопает] [00:00:57] Элисон: ОК, спасибо, Роб. Цените это. Дэвин должен перевернулся на это. Это не исчерпывающий список Темы, как всегда, как Дэвин только что сказал. Обратитесь к документации онлайн о викторине нулевой. Но это довольно much-- это на учебной это все, что мы перешли к настоящему времени. Все здесь честная игра, а также что-нибудь еще что, возможно, были упомянуты в докладе. [00:01:21] Мой раздел, здесь, является просто много обзора. Есть пара упражнений что вы, ребята, могли бы работать. Но по большей части, мы действительно хочу, чтобы добраться до Дэвин с тех кода ручными упражнений. [00:01:31] Поэтому я собираюсь лететь через это. Если у вас есть какие-либо вопросы, остановить меня. Поднимите руку. Я обещаю, что я, вероятно, видеть вас. Если нет, то просто махнуть его вокруг. Я буду говорить быстро. Я надеюсь, что все в порядке с этим. [00:01:43] ОК, специальное слово, Дэвин, очевидно, забыл пролистывать эти слайды. [Смеется] Ты в беде, человек. Так советов для викторины нулевой, практике кодирования на бумаге. Вы, ребята, собираетесь получить некоторые практиковать с, что в настоящее время с Дэвин, так что вы не будете полностью самостоятельно. Я думаю, что мы на самом деле происходит через этих двух функций. Таким образом, вы будете хорошо подготовлены есть. [00:02:04] Ознакомиться со своими проблемными наборов. Там были вопросы на предыдущих опросов что будет просить вас, например, для кодирования до чего-то очень похожее на Марио. Так будучи хорошо знаком с Ваша проблема устанавливает, а также как вопросы, которые мы просим Вас в начале на форме что вы заполняете, будет служить вам очень хорошо. [00:02:20] У предыдущего викторину под временные ограничения. Эти викторины длинные. Время идет очень быстро. И часто, вы не понимаете, как быстро он идет до вас на самом деле поставить себя в соответствии с этими ограничениями. Так что, если вы можете просто вырезать, вы знаете, 75 минут, либо сегодня вечером или завтра взять один из этих викторинах под что, вы будете в гораздо лучшей форме. [00:02:41] А также, создавая свой опорный лист. Помните, вы получаете один страница спереди и сзади в качестве ссылки для вашего викторины в среду. Создание, что это отличный способ для изучения. Все, что у вас возникли проблемы с вы хотите включить там. Все, что ваши ТФ были, как, это действительно важно. Вы должны это знать, являются может быть, все у вас там если у вас нет их запомнил. Даже если вы знаете их действительно хорошо, иногда имея его на есть это просто какая-то комфорта для вас, которые я знаю, викторины вызывают стресс. Таким образом, любой комфорт вы получите может помочь. Ладно, также, выспаться и едят и как нормальные вещи что мы говорим вам, для викторины. [00:03:16] Так, начиная с простого, типы данных и размеры. Как я уже сказал, это просто будет чтобы быть мне бросать много материала здесь, что вы должны знать. Поэтому у нас есть наши символы которые один байт, Интс что четыре байта, долго долго, что восемь байт. В основном, это просто вы хочу держать большие целые числа. Плывет, которые являются четыре, удваивается, которые восемь. Опять же, просто дает вам более пространство для ваших поплавков. И затем введите звезду, так что любой указатель на 32-битной машине, который все вы, ребята, должны знать, на четыре байта. [00:03:44] Таким образом, все вещи, которые вы должны знаю, может быть, вещи Вы хотите, чтобы на Ваша ссылка лист. ОК, двоичный преобразования в двоичный, преобразования в шестнадцатеричное, назад и вперед, все вещи, которые вы должны знать. Так из двоичной системы счисления в десятичную. Вы, ребята, хотите, чтобы взять быстрый минуту и попытаться выяснить, каждый из них а затем скажите мне, что они? [00:04:06] У меня также есть конфеты в моей сумке, так что любой кто отвечает получает конфеты, кстати. И у меня есть многое из него. Позвольте мне взять это. Я собираюсь дать это Гейб. Таким образом, вы можете раздавать конфеты кто хорошо и кооператив. [00:04:21] ОК, я увидел руку там в спину. [00:04:26] СТУДЕНТ: Да, первый из них 42. [00:04:28] Элисон: Да, первый 42, правильно. СТУДЕНТ: [неразборчиво]. [Смех] Элисон: второй, Есть еще в желтый? СТУДЕНТ: 110010. Элисон: Правильно, и это Последний, здесь, на дне? Кроме того, да, вы знаете, хотите? Просто выбросить конфеты. Как насчет конфет для всех? [00:04:46] СТУДЕНТ: [неразборчиво], когда мы закончим. [00:04:47] Элисон: Тсс. И тогда последний. Кто хочет ответить? Прямо там. [00:04:52] СТУДЕНТ: 11100. [00:04:54] Элисон: 11100, посмотрите на это. Поздравляю, отличная работа, все. ОК, все вроде понимаю процесс для этого? Вы, идя из двоичной системы счисления в десятичную так я, как правило, делают это, как выписывая полномочия 2. Поэтому я говорю, хорошо, 0 раза 2 в 0, так это 0, 1 раз 2 в первый, 2 собирается и далее таким образом. Кто-то хочет, чтобы я явно ли пройти примера двоичный? Хорошо, прохладно. [00:05:28] Десятичная двоичный очень похож. Я, как правило, выписывают полномочия 2. Начните с того, который является величайшим, но не пройти десятичной что вы ищете. А потом вроде работать ваш путь назад добавив вещи по мере необходимости. [00:05:42] А затем с того, что это так же, как обычной того. Если вы когда-нибудь случай, когда вы находитесь добавив два 1с, это, очевидно, становится 2. 2 в двоичной теперь 1 0, так что вы должны нести свой 1 в следующей колонке. Прохладный. [00:05:59] Hexadecimal, это может быть что-то что немного меньше знакомы. Так как Роб был просто говорит мне, заранее, его трюк для этого это просто разделить его на четыре байта куски, ОК? Биты, извините. Видеть? Благодаря Роб. Вот почему вы здесь. [ШУМА] ОК, так что мы просто разбить его на четыре бита куски. Так с двоичных файлов в шестнадцатеричном, мы смотрим на первый 4, который, если у нас есть четыре 1с в строка, что число ли это символизирует? [00:06:25] СТУДЕНТ: Ф. [00:06:26] Элисон: Так что в этом случае, что 11111111 или-- да? СТУДЕНТ: FF. Элисон: Отлично, FF. Так здорово, конфеты для вас. Теперь, для того, как шестнадцатеричное в двоичную систему, мы просто думать об этом отчасти в обратном направлении. Для каждого номера или буквы этого у нас в шестнадцатеричном, просто преобразовать его в его четырех бит [Смеется], чтобы ее четыре битной преобразования. Так 5, в данном случае, что если 5 мы представляющий его с четырьмя битами? [00:06:58] СТУДЕНТ: 010? Мм-хм. А потом, что на самом деле 10, будет? 1010. Таким образом, мы имеем, что, здесь. Так конвертации между шестнадцатеричной и бинарный самом деле не так уж плохо. Если вы посмотрите на него в четыре бита куски, будет золотой. Everyone-- да? [00:07:19] ROB: Это глупо, но я всегда помню, , Так как предполагается, 10. И бинарный просто 10 10, so-- [00:07:26] Элисон: А, вот мы идем. [00:07:27] ROB: Эй. [00:07:28] Элисон: Эй, конфеты для Роба. Существует не-шоколадный материал в там. Таким образом, вы можете иметь некоторые. Так ASCII математике. Ведите себя. Так ASCII математике, как вы, ребята, вероятно, хорошо помню р установлено 2 с Visioneer и Цезарь, ты много это сделал. Помните, персонажи принципиально просто цифры. Таким образом, мы можем сделать математику с ними, так же, как мы делаем математику с целых чисел. [00:07:54] Поэтому у нас есть немного простая вещь здесь. У нас есть некоторые в это инициализации до 65. И B равно значению ASCII А плюс 1, символ C равна D минус 1, и символ D равен 68. Итак, мы собираемся печати все они, как мы видим здесь. И кто может сказать мне, что это будет распечатать? СТУДЕНТ: [неразборчиво]. Элисон: Ровно, так Одно дело заметить это что мы распечатки персонажи каждый раз, здесь. Мы обозначающий хотя А и В являются Интс, когда мы объявили их выше. Мы печати их как героев по процентов C и наша Printf заявление, таким образом, они будут все печатать, как героев. И, конечно, значение ASCII 65 Воля печатать как А. Значение ASCII из плюс 1 будет 66, который будет с гордостью В. Таким образом, в самом деле, мы получить A B C D. Все там хорошо? Есть вопросы? Удивительный. [00:08:52] ОК, сфера. Так сфера, очевидно, очень Важно понимать, здесь. Многие из вас, если вы есть компиляции ошибки, и это говорит, что вы не должны доступ к какой-либо переменной, это, вероятно, потому, что вы определяется его в цикле а затем попытался получить доступ к его из него, или наоборот. [00:09:12] Так сфера по своей сути, он просто определяет, где мы говорим, переменная существует, где мы можете его изменить, где мы можем получить к нему доступ. Это просто какая-то говорил это единственные места, где у вас есть доступ в этой переменной. [00:09:26] Так два областей, что мы говорим о во время занятий являются глобальные и локальные. Так глобальные переменные мы говорим о когда вы определяете их выше основной. Это означает, что ваш весь Программа имеет доступ к ней, и он существует до тех пор, как программа работает, хорошо? Местное означает, что это более ограничен областью. Поэтому, когда у вас есть определенные функции как своп, мы всегда говорим о. Мы всегда говорим о свопе с А и Б. А и В существуют в этой функции. Они не существуют нигде. [00:09:56] Как хорошо, когда у вас есть, если заявления или для петель. Всякий раз, когда мы имеем, например, в цикл у нас есть интервал я равна 0. У нас есть некоторые условия, и мы обновлять его. Я существует только в подтяжки, что для цикла. При попытке доступа к нему в другом месте, компилятор будет кричать на вас. Это было бы, как, что вы пытаетесь сделать? Это не существует. Так вот два различные типы рамки. Имеет ли это смысл для всех? [00:10:23] Так, например, здесь, в этом это лишь некоторые простые программы. Что вы, ребята, думаете это произойдет в каждой точке что мы стараемся печатать? Так что это один здесь, что произойдет? СТУДЕНТ: Это будет печатать три. АЛЛИСОН: справа. Это будет печатать три. Что здесь? СТУДЕНТ: Это не будет работать. Элисон: Это не будет работать. Ты из области видимости, не так ли? Локальная переменная не существует вне этих скобок, все в порядке? И тогда то, что здесь? [00:10:56] СТУДЕНТ: [неразборчиво]. [00:10:57] Элисон: Что? Роб, идут. [00:10:59] ROB: Я только что сказал. Глобальные переменные должны быть Глобальная переменная подчеркивания. [00:11:04] Элисон: Ах, да, извините. Спасибо, Роб. Роб, как наш резидент компилятора. Он просто кричать на нас, когда мы это нужно. [Смеется] Да, должна быть глобальная переменная подчеркивания. Так если предположить, что что был глобальный подчеркивания Переменная, что произойдет здесь? СТУДЕНТ: Это будет работать. АЛЛИСОН: Это будет работать. Так что будем печатать, так что просто очень простой пример. ОК, прототипы. Так, очевидно, мы действительно подчеркнуть для вас, ребята сделать функции, если он смысл в ваших программах. Но, конечно, когда тебя сделать свои собственные функции, как правило, вы будете определять их после основной. И вы будете пытаться вызвать их в основной. И если вы не используете прототип, компилятор будет кричать на вас. [00:11:46] Прототип в основном просто говорю компилятора что у меня есть эта функция ниже основной. Я буду называть его, прежде чем я его определения. Только держись. Я обещаю, что это определяется, и вы будет иметь все, что вам нужно. [00:12:00] Так как мы делаем это только ваше возвращение тип, имя функции, ваш вход Список. Это в основном первая линия Вашей объявлении функции. Это действительно все это. Но это всего лишь Вообще-то формат. [00:12:14] Таким образом, в нашем примере, которые вы, ребята, должны видели в разделе в какой-то момент, у нас есть некоторые INT куб, занимает некоторое Int ввода. И у нас есть наша главная Функция, которая называет куб. И куб определяется постфактум. [00:12:28] Так что, если у нас не было ввода INT куба в верхней части, когда мы позвонили куб в главном, нашего компилятора будет злиться на нас. Это было бы, как, что вы говорите? Куб не существует. Я не знаю, что вы просите. И я просто хочу, стоп. [00:12:43] Но потому, что мы сделали наш прототип в верхней части, мы уже говорили, Вы знаете, когда вы видите куб, не волнуйтесь об этом. Я обещаю, что это определено позже. И это дам вам делать то, что вы хотите. Так что, если вы когда-либо иметь функцию который объявлен после вызова его впервые, необходимо есть это прототип на самом верху. [00:13:01] Да? [00:13:02] ROB: Это квадрат, не кубатуры. [00:13:04] Элисон: О, мой Бог. Я не have-- Гейб, я думал, Вы были нашим корректором. ОК, ребята, потерпите меня, здесь. Я надеюсь, что каждый получает идею. ОК, так что это должно быть был квадрат, не в кубе. Но идея остается той же. Любая функция, которая мы называем после То, должны иметь прототип. Все хорошо с этим? Любые другие опечатки? Хорошо. Опечатки здесь, прежде чем начать, Роб? [Смеется] Итак, структур. В основном, структуры позволяют Вам создать свой собственный тип данных. Так как междунар или гольца или Поплавок, это просто еще один тип. Мне нравится думать о нем, как, как, создать свой собственный тип данных. Так он позволяет это сделать. И он держит различные типы данных. [00:13:56] Так что, если вы помните, в массиве, мы может только держать вещи подобного типа. Структуры позволяют нам держать кратное вещи из разных типов. Таким образом, в этом случае здесь мы есть-структуру под названием Student, названы здесь в нижней части. И у нас есть некоторые Int идентификатор и некоторые строка имени. Так что это просто еще один тип данных. Теперь у нас есть тип данных под названием Student. [00:14:20] Так что мы можем думать о это как еще один тип данных, мы можем объявить переменные как мы и любой другой. Таким образом, вместо того, чтобы просто имея, как, INT студент, у нас просто есть студент, студент 1. О, смотрите. Это Роб. Так вот мы объявлении структуры или переменная называется студент 1 типа студента. Так что это будет иметь идентификатор и имя, связанное с ним. [00:14:45] И то, как мы к ним доступ элементы внутри нашей структуры С помощью оператора точка, здесь. Таким образом, в данном случае, мы заявил некоторое студент 1. Мы назначен идентификатор, чтобы быть 1. И мы присвоили имя будет Роб. ОК, все хорошо с этим? Используйте это просто like-- да? [00:15:06] СТУДЕНТ: Да, typedef-- когда мы должны использовать ЬурейеЕ? [00:15:09] Элисон: Так ЬурейеЕ просто говорит that-- Роб, ты может исправить меня на это, если я wrong-- но ЬурейеЕ просто на самом деле объявлении это как типа, которые можно использовать, не так ли? [00:15:19] ROB: Да, это в основном, так что это просто создание псевдоним или прозвище типа. Таким образом, вы можете ввести, что [неразборчиво]. Так [неразборчиво] существует, и теперь мы просто должны [Неразборчиво] средства ровно то же самое. И вот, мы набрали, я думаю, некоторые структура типа 2 [неразборчиво]. Так что это просто псевдоним Для данного типа. [00:15:40] СТУДЕНТ: String [неразборчиво] библиотека набралось до как полукокса звезды. [00:15:51] Элисон: Для наших целей здесь, если вы объявлении-структуру, просто сделать ЬурейеЕ-структуру. Итак, заранее, это просто нормальный переменная здесь. Мы к нему доступ с точки. если у нас есть указатель на структура, мы можем на самом деле использовать стрелу, которая довольно прохладно. [00:16:10] Таким образом, в данном случае, у нас есть указатель на студент 1, что имеет тип студента. Помните, с вашей Строительство указатель, Вы хотите что бы ни введите указатель указывает на быть в начале. Таким образом, мы имеем некоторую студента 1, здесь. И с этого студента 1 теперь заостренный, мы можем на самом деле идти студенческий имя 1 стрелкой вместо точки, потому что это указатель, и назначить Роба. И теперь, если мы хотим, чтобы изменить Роб Дэвин, это просто показывая вам, Другой способ сделать это. [00:16:43] Таким образом, вместо того, чтобы использовать стрелку, вы может also-- я закончу это, а затем принять, что question-- вы могли Также сделать опорную студент 1. Это говорит, как перейти к все, что на студента 1, будет наш студент структура. Доступ ее с точкой и элементом что вы хотите, а затем передать его. Был вопрос. СТУДЕНТ: Да, так как же у вас есть использовать [неразборчиво], когда ты делает студенческую звезду без [Неразборчиво] студент? Элисон: Потому что это создает указатель. ROB: Мы собираемся говорить об этом. Элисон: Мы собираемся говорить о том, что в конце обзора. Так что просто удержать эту мысль. Если он по-прежнему беспокоит вас в конец, пришел поговорить с одним из нас. [00:17:20] Таким образом, эти делают ровно то же самое. Мы просто показываю вам два различные способы, чтобы сделать это. Студент 1 теперь указатель, так Вы можете получить доступ к имени элемента в структуры со стрелкой. Или вы можете разыменования указателя, и обращаться к нему, как обычно. Значит ли это, имеет смысл каждому? Если целые указатель вещи немного запутанной, Гейб будет говорить о том, что, и тогда, возможно, это будет иметь больше смысла. Да? [00:17:46] СТУДЕНТ: Да, так как это это отличается от? Элисон: предыдущий? Так студент 1 в этом дело не указатель. Это просто ваша текущая структура. [00:17:54] СТУДЕНТ: ОК. [00:17:55] Элисон: В то время как этот является указателем на структуру. [00:17:58] СТУДЕНТ: ОК, но делает это вид в конечном итоге работает один и тот же [неразборчиво]. [00:18:02] Элисон: Он эффективно работает так же. Ваш синтаксис просто разные. СТУДЕНТ: ОК. [00:18:05] Элисон: Да, они фактически то же самое. Это просто в зависимости от контекста, Вы можете один над другим. Да? [00:18:11] СТУДЕНТ: Когда вы делаете ссылки на 1-- Элисон: Мм-хм? СТУДЕНТ: Почему вас есть скобки? Элисон: Потому что студент 1 является указателем. Таким образом, вы должны убедиться, что вы просто разыменования указателя. [00:18:22] СТУДЕНТ: ОК. [00:18:23] Элисон: Так что в этом случае здесь, скобки вокруг него означает, что вы разыменования студент 1. Таким образом, вы будете где студент 1 баллов, что ваша структура. Так что теперь вы можете думать, о нем, как этой структуры, так что мы можем использовать наш нормальную работу точка. Еще вопросы? Прохладный, удивительным. [00:18:48] Так последняя вещь, я думаю, мой последний слайд, Ву! Итак, с плавающей точкой неточность. Мы говорили кратко о это на лекции. В основном, мы имеем бесконечно много вещественных чисел. И если какой-либо из вас, ребята, люблю математику, есть всякие классные вещи с нами. [00:19:05] Но существует бесконечно многие действительные числа. Но они только конечное много битов, которые у нас есть. Таким образом, вы всегда будете есть неточность, это все. И вот это просто какая-то как-то вы должны знать. Это как мы можем попросить вас почему с плавающей точкой неточность существуют? Так что то, что вы должны знать. И с этим, я превращаюсь это к указателей. [00:19:27] Мягкие: Привет, ребята. Мягкие Меня зовут. Я собираюсь поговорить об указателях. Да, так указатели на самом деле моя любимая часть в этом процессе. Так что просто сделать ясно, что Эллисон был говорим здесь, так по причине why-- той лишь разницей здесь, Большая разница был путь мы заявляем вещи. Так студент звезда означает это является указателем на студента. В то время как на слайде до, студент Фактическая структура, как фактический студента, содержащий любой из этих вещей. [00:19:54] И причина, почему мы хочу to-- да, Дэвин? [00:19:57] DAVIN: Что это значит стрелка? [00:19:58] Мягкие: Средства стрелками точно так же, как это. Таким образом, вы действительно не нужно стрелку. Мол, если вы только программа в C, вы можете просто использовать это. К сожалению, я не то, что это такое. Вы можете просто использовать этот синтаксис. [00:20:14] Но некоторые люди, когда они разрабатывали C, они полагали, что люди использовать эту синтаксис столько, что они будут нравится только придумать со структурой синтаксиса для него. И это произошло в Форма этой стрелки. И это очень приятно, потому что она символизирует что-то как мы на самом деле следующее эта стрелка, это указатель, к какому-то места в памяти. И когда мы будем там, мы хотим, чтобы смотреть на имя этого студента, если это имеет смысл. Хорошо? [00:20:43] Так что это точно так же. Это ровно то же самое, как это. Они компилируются точно так же, ОК? И причина здесь, почему мы Malloc -то, происходит потому, что в данном случае, наша переменная на самом деле просто переменная указатель. Так у нас есть только некоторое пространство в памяти, что держит указатель. Мы на самом деле не имеют никакого места что держит реальную структуры. [00:21:06] Таким образом, это должно быть сделано в два этапа. Мы должны создать Память поставить структуры в. И мы должны создать Память поставить указатель в. Так они в основном два различные переменные, здесь. Один из них имеет тип студента, кроме него на самом деле не имеет имени. А другой является типа студенческой звезды. А потом студенческие 1 точек там, если это смысл. Хорошо? [00:21:28] Так причин, почему мы используем Указатели в том, что все в компьютере, каждая переменная в компьютере есть две вещи. Это имеет свое значение. И это имеет свой адрес. И это хороший способ осмыслять это есть многие проблемы, когда вы попробуйте использовать функции. И мы собираемся, чтобы попытаться искать в одном из тех. А именно, он собирается думать о памяти как коробки. [00:21:50] Вы всегда думали о переменных когда вы говорите, па равна 5. Вы думаете о сдачи 5 в коробку. Так что, если вы хотите передать что интервал в функцию? Вы просто pass-- я не знаю-- х в функцию. Но то, что происходит, Обычно в качестве человека, вы было бы думать, что-то, что я передавая коробку с человеком. И это на самом деле не произойти в компьютерах. Что происходит, является копировании значение из коробки в коробку человека. [00:22:17] Так что я пытаюсь сказать, что если у вас есть function-- sorry-- здесь, если у нас есть функция, как в пяти вверх есть, если вы пытаетесь передать переменную, это просто будет копировать. Если инициализации NX равен 3, это будет скопировать это значение к переменной там. ОК, и это вроде той причине, Поэтому мы хотим, чтобы использовать указатели. Потому что вместо того, давая только значение, вместо просто проходил только значение в функцию, мы хотим передать по ссылке. То, что мы называем проход по ссылке добр дать коробку с функцией, так что функция может также изменить значения в этом поле. [00:22:53] ОК, так что просто некоторые основные указатель материал для создания указателей, Вы просто объявить его тип, и Вы посадить звезду сразу после него. И только тип то, что вы указывая на. Так что, если это интервал звезда, Вы указываете на междунар. Если это символ звезды, Вы указываете на график. И если это студент звезда, Вы указываете на студента. Хорошо? [00:23:08] И они долго все 4 байта. Потому что этой переменной это не на самом деле нужно провести символ, INT, или студент. Это необходимо только провести адрес. Вот почему они все 4 байта длиной в нормальном 32-битной машине. Хорошо? Так вот, х является переменной, которая указывает к междунар. у указывает на гольца. Z точки с поплавком. Здесь Есть вопросы? Прохладный. И есть два различные символы, которые они имеют чтобы иметь в виду при приходит к указателю. Так ссылки и разыменовании являются большие. Так амперсандом из Имя переменной дает? СТУДЕНТ: Адрес. Мягкие: Адрес. Так что, если вы объявляете Int А равен 5, то амперсанд из собирается дать вам адрес. И вы можете попробовать печатать что и посмотреть, какой адрес в памяти переменная имеет. А потом dereferencing-- так что было ссылаться, получение address-- разыменования является полной противоположностью. ОК, как раз является напротив дивизии, звезда является противоположностью амперсандом. Так Разыменование средства идут туда. Так что, если вы даете star-- I не знаю-- 50, это буду пытаться идти по адресу № 50 внутри вашего компьютера. Хорошо, а почему мы не видим что они являются противоположностями? Потому что то, что происходит, если вы делаете что-то вроде звезды амперсанд? Ну, амперсанд дает адрес переменной, адрес. Но звезда означает пойти туда. [00:24:35] Что случится, если вас перейти на адрес? Вы просто добраться до, не так ли? Так происходит по адресу это то же самое, как. Вот почему они, как правило, называют same-- это и это называют как противоположные операторы. Хорошо? Так здорово. [00:24:53] Под крышкой, например, если мы заявляем INT х равна 5, у нас есть переменная. И помните, что я сказал, что каждый переменная-- и это хорошо сохранить в mind-- он имеет два разные вещи, связанные с. Он имеет обратился и значение. Хорошо? [00:25:07] Таким образом, значение в этом случае равно 5. И адрес is-- скажем, я делать что-то up-- это 0x04. И единственная причина, почему мы, как правило, представляют адреса в шестнадцатеричном является одним, потому что это как благо. Хорошо сочетается с двоичной системе. Это легко конвертировать и из двоичного файла. И это не становится слишком большой, если у вас есть очень большое количество. Таким образом, мы хотели бы использовать шестнадцатеричную в адресах печати. Но я мог бы представлять Этот виде целого числа. Это прекрасно. [00:25:32] И поэтому он имеет адрес 4 и 5 значение. И тогда я сказал INT звезда указатель. Так что это другой тип, уведомление. Int звезда указатель равен адрес х. Так что будет значение PTR? Это собирается быть адрес х, здесь. ОК, так что значение будет быть таким же, как адрес. Это назначение работать, что я делаю. А потом PTR будет иметь его собственный адрес, который оказывается, в этом случае, 8, ОК? [00:26:03] А потом я создаю новый целое копию. И я говорю INT копия равно идут туда. Так что к тому, что PTR указывает на. Ну, что это PTR есть? Ptr имеет 0x04. Что произойдет, если я пытаюсь пойти туда? Я найду парня, который имеет Адрес х и который имеет адрес 4. И кто имеет решения четырех является х. Имеет ли это смысл? Да? [00:26:28] СТУДЕНТ: В этом случае, является указатель в стеке? [00:26:32] Binky: В этом случае, it's-- хороший вопрос. Я действительно не думаю об этом при составлении этих адресов. Но если это, как все это локальные переменные, то х будет жить in-- все будет жить в стеке. Так что все идет быть направлен в стек. Вы можете получить только в куче когда это Вы начинаете использовать таНос, не так ли? [00:26:52] Так что, если вы помните стек каждый раз Вы вызываете функцию в вашей программе, как, например, основная, или любое Другая функция, как Printf. Все локальные переменные являются собирается получить положить в кадре стека. И они собираются, чтобы получить как складывается в стопку. Это то, что называется стек. И все эти локальные переменные собираются быть там. И heap-- и мы собираемся чтобы больше об этом later-- говорить Куча, где все динамически распределяется жизнь памяти. Прохладный? [00:27:20] Мы идем в этот слайд. Да? [00:27:22] СТУДЕНТ: Почему не INT копия возвращения 0x04? [00:27:27] Мягкие: Почему не INT копия возвращения 0x04? [00:27:30] СТУДЕНТ: Почему не в том, что [неразборчиво]? [00:27:32] Мягкие: Потому что это значение PTR? [00:27:37] СТУДЕНТ: 0x04. [00:27:38] Мягкие: 0x04. Что произойдет, если вы идете в 0x04? Что вы получаете? [00:27:41] СТУДЕНТ: О, хорошо. Мягкие: Вы видите? СТУДЕНТ: Да. Мягкие: Таким образом, вы получаете 5. Так копия будет иметь 5, если это имеет смысл. Да? [00:27:49] СТУДЕНТ: Не могли бы мы получили 5 на текстовом поле [неразборчиво] если положить INT скопировать [неразборчиво]. [00:27:55] Мягкие: Int-- мы бы, да. Это было бы сделано в значительной степени то же самое. Но этот путь, мы можем перейти обратиться к функциям. И это здорово, что мы собираемся сделать прямо сейчас. [00:28:06] Поэтому такого рода упражнения всегда придумывает on-- очень обычно приходит на викторинах. Так что это действительно хорошо, чтобы попытаться сделать такую ​​вещь самостоятельно. Поэтому постарайтесь, чтобы отслеживать, что адрес это и хочу значения переменных являются в каждой точке. Так что это точно то, что мы собираемся сделать. Здесь мы имеем шаги, один, два, три, четыре, пять. Один, два, три, четыре, пять. И мы собираемся отслеживать от значений х и. [00:28:34] Так что это делает, если это ошибка в программном коде, мы пытаемся сделать до пяти. Таким образом, мы пытаемся получить в Переменная и измените его значение на 5. И помните мою аналогию имея коробка и вручая коробку с кем-то? Так главный имеет эту опцию под названием х. И он содержит значение 3. И я пытаюсь передать в этом поле, чтобы до пяти. [00:28:58] И я хочу, чтобы пять изменить значение этой рамки до 5. А потом я просто напечатать значение х. Это то, что мой function-- это то, что я пытаюсь сделать. Я просто пытаюсь обновить значение х до 5. Понятно, что функция делает? [00:29:16] Итак, что же будет значения х и прямо здесь, первая линия, прямо перед первым line-- я бы say-- программы? [00:29:27] СТУДЕНТ: Наверное мусора. [00:29:28] Мягкие: Просто мусор вещи. Так что я просто положить N / A. Так мы на самом деле не знаю. Мол, даже не все же существуют, потому что мы не называется до пяти. Int не объявлена. И х собирается существовать здесь, но у нас есть не очень назначено любое значение к нему, так хорошо? [00:29:46] И потом, что собираются быть Значения х и в номер два? [00:29:54] СТУДЕНТ: [неразборчиво]. [00:29:55] Мягкие: Так х будет 3. Это просто, потому что мы присваиваем 3 к нему. И еще не существует потому что просто живет в пяти. Так что я буду иметь 3 и ничего. или как мусор, то, что, на самом деле не определены. И теперь, это важное направление. Здесь мы собираемся на самом деле назвать до пяти. И помните, что я сказал. Мы никогда не проходят в коробке. Мы просто скопировать значение коробка в другую коробку. Вот и все компьютеры, копировать вещи из одного места в другое. [00:30:27] Так до пяти, что она делает это он копирует значение х в. Так что будет здесь? Значения х и. 3 и 3, мы просто скопировать это более из х в. Прохладный. [00:30:45] Теперь мы здесь. И теперь мы собираемся обновить равна 5. Что случится в четвертой строке? [00:30:55] СТУДЕНТ: [неразборчиво]. [00:30:56] Мягкие: обновляется, но х не обновляется. Поскольку х до сих пор живет в основном это полностью отличается блок памяти. Это другая переменная. еще одна переменная. Они, оказывается, есть то же значение, потому что I копируются значения х к. Но теперь, когда я делаю равна 5, его на самом деле не влияет х в любом случае. Это сложнее часть. Имеет ли смысл для всех? Да? СТУДЕНТ: И еще один вопрос, у вас есть 3. Почему already-- ой, нет, это 3. К сожалению, не берите в голову. Я читал 5. [00:31:29] Мягкие: Да, 3, 3. [00:31:30] СТУДЕНТ: [неразборчиво], да. Мягкие: А потом мы назначаем 5 до , но на самом деле не изменить х. Хорошо? СТУДЕНТ: Да. Мягкие: Да? Можете ли вы объяснить еще раз, как копируется [неразборчиво]? [00:31:42] Мягкие: ОК, так что, когда вы звоните в пяти х, так что это строки кода здесь. в пяти из х, что х? х находится всего в 3 на данный момент, не так ли? Таким образом, вы могли бы просто думать о сдачи 3 в здесь и забывая о х. Просто поместите 3 здесь. Мол, мы собираемся копировать значение х в Int А, это там. Хорошо? [00:32:13] Таким образом, значение х равно 3. Мы собираемся копировать 3 к. И все это другой блок памяти, это другой переменной называется придется 3, а. Имеет ли это смысл? Да? [00:32:25] СТУДЕНТ: Если вы даете до пяти, как есть она как целое х, а не, бы, что все исправить? [00:32:32] Мягкие: Если это integer-- нет, что бы не исправить все. Так что это очень хороший вопрос. Это действительно не имеет значения, что Вы вызываете эти переменные. Опять же, это будет проблемой из области видимости, потому что они не то же самое х. Они полностью разные места в памяти. СТУДЕНТ: [неразборчиво]. Мягкие: Так это на самом деле не Неважно, что вы их называете. Это не исправить положение, ОК? Еще вопросы? Да? [00:32:55] СТУДЕНТ: Как это обратно номер пять [неразборчиво]? Мягкие: ОК, мы не сделали, что еще. Пойдем в номер пять, затем. [00:33:03] СТУДЕНТ: [неразборчиво]? [00:33:04] Мягкие: Что? [00:33:05] СТУДЕНТ: У вас есть возвращение вообще? Мягкие: Мы не имеем возврат не главная. Но главные возвращает 0 автоматически если вы ничего не вернуть. Да? [00:33:15] СТУДЕНТ: Не могли бы вы сделать main-- или не могли бы вы сделать до пяти возвращать? [00:33:24] Мягкие: Мы могли бы до пяти вернуться, да. Но тогда мы должны были бы назначить х равна возвращаемого значения до пяти, который был бы немного другая программа. Она будет работать. Но то, что мы хотим сделать, это то, что является называется что-то изменить на месте. Поэтому мы хотим, чтобы на самом деле изменить эту коробку и не беспокоиться о том, чтобы вернуться значения или что-нибудь. Хорошо? [00:33:46] Это так же, как функции подкачки Дэвид показал в лекции, кроме меня дело только с одной переменной. И он использовал два, так интервал и б и то временная переменная и еще много чего. Хорошо? Так что в последней строке? После пяти деклараций, это просто собирается уходить. У нас не будет больше, и только х-прежнему будет жить. [00:34:10] И что вы думаете? х не меняет своего значения, в конце концов, потому что мы только изменив значение. Вот почему х было 3 во всем. Хорошо? Хорошо. Так что это программа не добиться того, что мы хотели. Теперь давайте исправим это. [00:34:24] И программа исправление с помощью указателей. То, что мы делаем, мы должны три Линии, которые отличаются. Первые в мы не проходя х. Мы передавая адрес х. Таким образом, вместо копирования более значение из коробки, Я все еще собираюсь копировать что-то. Но я копировании над адрес коробки. [00:34:45] Так что, если я передать адрес коробка с пяти, затем до пяти смогут найти, что в Память и измените его значение. [00:34:53] Так и там, у меня есть что не INT больше. является интервал звезда. Это указатель на целое. А потом, потому что я передаю обратиться сюда, а потом, что я делаю не равен 5, потому проводит адрес. Так что я хочу сделать, это пойти туда и обновить содержимое этого адреса с 5. [00:35:18] Итак, давайте пройдем все линии один за другим. Так что, когда я начинаю здесь, я до сих пор N / A, N / A, N / A за все в первый линия, потому что у меня не очень заявил материал еще. А потом второй линии, у меня есть х равен 3. INT звезда не существует, То же самое, как и раньше. [00:35:39] Теперь начинается самое интересное. Так что я собираюсь пройти. И давайте предположим, что по адресу х 12 в шестнадцатеричном виде. Давайте просто предположим это. Я сделал это. Так, что я проходя здесь до пяти. Я передаю 12. [00:35:56] Так что значение не имеют? [00:36:04] СТУДЕНТ: [неразборчиво]. [00:36:06] Мягкие: Извините? [00:36:06] СТУДЕНТ: [неразборчиво]. Мягкие: Да, как, к давайте Предположим, что мы здесь, сейчас. Я спрашиваю. [00:36:12] СТУДЕНТ: [неразборчиво]. [00:36:13] Мягкие: Было возбуждено. [00:36:14] СТУДЕНТ: [неразборчиво]. Мягкие: Потому что мы прошли что-то функции. Да? [00:36:19] СТУДЕНТ: Адрес х. Мягкие: Это собирается есть адрес х. А также адрес х 12, хорошо. Так х будет 3, потому что мы на самом деле не изменилась х еще. А потом будет 0x12, так адрес х, потому что это то, что мы прошли, чтобы до пяти. [00:36:38] И тогда то, что происходит если мы пытаемся пойти туда? Что мы собираемся найти? Так что, если вы попытаетесь распечатать звезда, мы собираемся следовать этот адрес и получить значение внутри. И это значение просто то же значение, что х имеет, потому что это адрес х, которые будут 3. Неужели мы хорошо? [00:36:56] ОК, а затем в настоящее время, мы на самом деле идти туда. И мы обновляем все в этом адресе 12. Мы делаем это 5. Так что теперь обе х и звезда находятся 5. [00:37:13] Почему это? Поскольку адрес х 12. И есть также 12 в качестве своего значения. Так что, если мы будем следовать 12, мы просто хочу, чтобы найти х. Так, что мы делаем с звезда произойдет х, потому что содержит адрес х. Хорошо? [00:37:34] И это, как в суть исправления. Так что теперь мы можем, от до пяти, на самом деле доступ к памяти, что жили в основной. Так эта память не живет в с пять, как раньше, это адрес 12. И мы смогли пойти туда и измените его значение на 5. [00:37:50] А потом, когда мы вернемся, мы забываем о. Мы забываем о звезде. И х еще пять. Так что, если вы хотите, чтобы реализовать функцию подкачки, Вы бы просто сделать ту же самую вещь, кроме вам нужно INT звезды здесь, и так далее и тому подобное. Хорошо? Неужели мы хорошо? Прохладный. [00:38:10] Так указатель арифметика. Это немного сложно тема. Вот и получается, что Указатели всего числа. Вы можете думать о них как целые числа. Потому что в памяти, у вас есть как Память адрес ноль, один, два, три, четыре, пять. Таким образом, мы можем подвести адреса памяти. [00:38:23] И это, как правило, то, что вы делаете, когда Вы находитесь в и массива, например. Массив просто нравится смежными блок памяти, из большого количества символов, например, много целых чисел. Так что если вы хотите пойти в Второй интервал или к третьему междунар, Вы можете просто подвести кое-что, чтобы первый адрес, и вы собираетесь попасть. Так что это действительно полезно для этого. [00:38:39] И дело иметь в виду, однако, является что это не просто нравится нормальная арифметика в том смысле, что если вы имеете дело с, скажем, INT звезда, и вы добавляете к нему 1, то вы не собираетесь добавить 1 по адресу, Вы собираетесь добавить 4 по адресу. Поскольку интервал составляет 4 байта. [00:38:57] Так что это, как ходить на массиве. Если у нас есть массив большим количеством целых чисел и Затем мы пытаемся пойти на второй, это в основном просто подводя адрес первого один плюс один. Но это не будет be-- просто скажем что адрес первого является 4. Здесь, в этом случае. И если суммировать, так это это то, что происходит. У нас есть Int. Int х равна 5. Х имеет значение 5. И мы инициализировать этот указатель, INT у INT звезда у равна адрес х. [00:39:31] Давайте предположим, адрес х 4. Что случится Теперь, если я сумма добавить 1 к у? Это происходит на самом деле сумма 4, а не просто 1. Поэтому я добавить 1, но это на самом деле добавлено 4, потому что компьютера смарт. Так это будет на самом деле добавить по I раз Размер типа указателя. Хорошо? [00:39:58] Таким образом, если бы он был символ, например, если бы это было символ звезда у, и если мы добавили 1, то это будет быть 5, потому что символ является длиной 1 байт. Хорошо? [00:40:10] И, наконец, мы добрались до указатели и массивы. Получается, что каждый раз, когда Вы имеете дело с массивом, вы на самом деле имеем дело с указателем. Очень хороший концептуальный причина это что массивы очень большие. Так что помните, что я сказал, что каждый раз, когда вы проходите вещи вокруг, скопировать все содержимое. Так что если у вас есть массив что на самом деле, действительно большой, Вы действительно не хотите скопировать все каждый раз Вы передавать его в другую Функция, потому что это просто огромное количество работы. Так что вам сделать, это просто мимо адрес первого байта. И то функция будет иметь доступ для всех элементов в этом массиве. Таким образом, вы прошли массив, его адрес, так что адрес первого байта. [00:40:48] Так что, если мы заявляем INT Массив 3, здесь, мы знаем, как получить доступ к первому элементу используя обозначения кронштейна. Если вы помните, кронштейн обозначения, массив кронштейн 0 равен 1. Ну, это было бы точно же, как только туда и положить 1. ОК, это ровно то же самое. Так обозначениях кронштейном в здесь будет таким же, как этой линии. [00:41:13] И что вы думаете обозначения кронштейна для массива кронштейна 1 будет? Это как раз и будет то же самое, это. Так что добавьте один для массива. Перемещение один вдоль в памяти. Идите туда, и положить 2. Хорошо? И эта линия то же самое. Мы хотим, чтобы пойти в третий коробка, так массив плюс 2. Идите туда, и положить 3. Таким образом, в памяти, что произойдет это мы будет иметь 1, 2 и 3, как три элемента этого массива. [00:41:44] Мы могли бы сделать это с помощью наш знакомый обозначения кронштейна. Я просто хочу, чтобы вы, ребята, знаете, что они одно и то же. ОК, вопросы по этому поводу? Хороший. Теперь, я собираюсь сдать это на Ханну, [00:41:59] Ханна: Ура, Йи-Хо. [00:42:00] Мягкие: Говоря о памяти и статья вещи. [Аплодисменты] [00:42:06] Ханна: Привет, здорово, так что мы будем говорить немного больше о памяти, о котором мы только что обратился с помощью указателей. Таким образом, есть две основные части памяти, что мы озабочены. У нас есть стек, который растет в нижней части, и кучи, который идет вниз от вершины. И стек собирается провести все наши переменные экземпляра. Таким образом, каждый называет по функция получает свой собственный маленький кадр в стеке. Так как Гейб уже упоминалось ранее, если мы снова и снова вызвать функцию, мы собираемся складывать вещи в стеке. [00:42:35] И точно так же, куча, который начинается в верхней собирается провести всю память что мы динамически выделять. И так как мы динамически выделить память, это сойдет к низу. Пара вещей, чтобы быть в курсе, когда мы используем стек и кучу, со стеком, если мы имеем слишком many-- давайте say-- рекурсивные вызовы, и мы называем функцию снова, и снова, и снова, и снова, и это до укладки, до укладки, укладки до. И это будет врезаться в кучу. Мы собираемся запустить из памяти. Это собирается вызвать Проблема для компьютера. И это называется переполнение стека. Так что, безусловно, что-то вас должен знать и стараться избегать. И куча, должны помнить, чтобы случайно не происходит утечка памяти. Каждый раз, когда вы используете таНос, не забудьте освободить эту память. В противном случае, это будет просто быть в куче впустую, и компьютер не будет знать, что он может свободно использовать эту память. Так что те, пара вещей быть очень осторожны с тем, когда Вы имеете дело с стек и куча. Любые вопросы с этим? Удивительный. [00:43:31] Хорошо, прохладно. Так этот вид имеет то же самое Идея, как переполнение стека, где мы собираемся за Границы того, что память будет мы должны быть в состоянии использовать. Так что берите, например, буфер, или вы может просто думать об этом как массив. И мы сказали, хорошо, что мы собираемся создать этот миленький массив. Это собирается быть строкой. Или он собирается хранить символы. И это только собирается, чтобы поздороваться. И это неопределенное. Это так. [00:43:53] Но если бы я был кто-то зло и хотел сделать что-то плохое с этого массива, что Я мог бы сделать, это попытаться написать мимо конца строки. И, как вы увидите, если Я пишу достаточно далеко, Я может реально влиять на адрес возврата. И если я начинаю влияет адрес возврата, Я влиять как программа на самом деле работает. И вместо того чтобы вернуться, вам знаю, счастливую строку вида привет, я мог сделать что-то плохое, как перейти к где-то еще в вашем компьютере, еще памяти, изменить его, все, что я хочу сделать. Так вот что это будет выглядеть если я только отчасти заполнили его со случайной величины мусора, В этом случае, так же. А потом, когда я на самом деле попали по адресу памяти, Я начал заполнять его с чем-то что сделал то, что я хотел, чтобы это сделать. Любые вопросы с переполнением буфера? Высокий, летать прямо через этот материал. [00:44:40] Итак, мы много говорили о о указателя с Gabe. Как мы на самом деле получить указатель? Как мы можем получить адрес в памяти? Ну, мы можем использовать этот хороший Функция вызова таНос, которые собирается получить маленький кусочек памяти, в частности, в куча, как мы обсуждали, и он собирается дать вам обратно указатель на этот адрес в памяти. И аргумент, что мы должны дать Malloc это сколько места в памяти мы хотим. [00:45:04] Таким образом, вы можете увидеть размер в байт. Скажем, например, или на самом деле, в этом примере, мы выделяем достаточно пространство для 10 чисел. Так, вероятно, то, что мы собираемся хочу поставить здесь является массивом из 10 целых чисел. Так мы даем ему размер целых чисел, которые Мы узнали, было сколько байт? СТУДЕНТ: 4. Ханна: 4, красивый, и мы хочу 10 из них подряд, так что у нас есть достаточно места для хранить все 10 чисел, в этом случае. Что-то супер важно, в любое время позвонить таНос, Вы должны проверить нуль. Если вы не проверить нуль, а, таНос если она не хватило места и больше не может дать вам любой больше памяти, то он вернет нуль. Так что, если вы не проверить, таНос может вернуться нуль. И тогда, если мы попытаемся разыменовать нулевым указателем, мы собираемся, чтобы получить ошибку сегментации, который мы будем говорить о прямо сейчас. Удивительный. [00:45:56] ОК, вопросы с таНос? Да? [00:46:00] СТУДЕНТ: Разве проверки нулевой [Неразборчиво] не сделать это на викторине? [00:46:05] Ханна: Конечно, вопрос был это matter-- на викторине, вы будете получать очки, если бы Вы не проверяют нуль? Да, вы будете получать очки от если вы не проверить нуль. Каждый раз, когда вы звоните таНос, как на викторина и ваши psets и в реальной жизни, Вы должны проверить нуль. Хороший вопрос. [00:46:18] Гейб: Что делать, если я не освободить? Ханна: Гейб хочет знать, что делать, если мы не бесплатно. Тогда у нас будет утечка памяти в нашей куче. Еще вопросы? Да? [00:46:27] СТУДЕНТ: Может you-- перейти Переполнение буфера действительно быстро снова? [00:46:30] Ханна: Конечно. Вопрос был мы можем перейти Переполнение очень быстро буфер. Давайте вернемся к тем горками. Так буфера, вы можете просто думать о нем как массив, не так ли? У вас есть некоторое пространство в памяти. И когда мы впервые создаем массив, мы знаем, массивы имеют фиксированный размер, или наш буфер имеет фиксированный размер. [00:46:45] Так скажем, в этом случае, у нас есть только достаточно места, чтобы написать строку привет. Если мы идем мимо, что граница, если мы идем мимо что наш массив мы сказали, что это может провести, мы могли бы действительно начать записи в память что компьютер не хотите нам написать в. И в частности, если мы попали что-то вроде возвращения адрес функции, которая, как и любой другой кусок памяти, просто где-то в вашем компьютер, вы можете на самом деле изменить что и начинают творить зло. Ответ на ваш вопрос? Удивительный, что-нибудь еще? Да? [00:47:17] СТУДЕНТ: Так стек [неразборчиво], вы сказал идти снизу идет вверх. В зоне стека, делает память перейти от, как, сверху вниз, относящихся к каждой перерыва? [00:47:28] Ханна: Как сделать you-- отложить Робу на этом. [00:47:35] ROB: Он будет расти в том же направление, как стек растет. Ханна: ОК. ROB: Так я запутаться. Это будет абстракция. Ханна: ОК. ROB: Это правильно. Так что, если стек растет вверх, то generally-- его не должен быть таким. но вы можете объявить Int х. Тогда вы объявляете Int у. Тогда интервал х вообще будет ниже в стеке, чем INT у. Но это просто факт. Это не так, как важную семян вещь. [00:48:02] ROB: Так что вопрос снова был просто что происходит каждый кадр накапливается. Так каждая функция получает маленький кусочек стека. И, как вы идете вверх, в том, что маленький кусочек, в этом кадре, мы будем говорить, что переменные в этом кадре также двигаться вверх. Вопрос? [00:48:17] ROB: Просто чтобы быть на микрофон. Ханна: О, да. ROB: Я буду говорить в вас. Ханна: О, да, хорошо. ROB: исключением является для массивов и структур, где массивы, ниже Индекс в массиве, и в структур в выше Поле в структур гарантированно будут на более низких адресов чем более поздний значение в массиве. Так что те, гарантированы. Но какие-либо конкретные переменные внутри, как INT х и интервал у в функции, нет необходимости отношения между их адреса. Ханна: Еще один вопрос здесь? СТУДЕНТ: Так в буфер поток, только переполнения буфера только произошло, когда вам уже, вроде бы, присвоенный Количество массива что то больше? Мол, не так ли? Так что, если вы просите что-то из user-- [00:49:05] Ханна: Мм-хм. СТУДЕНТ: Может они насильно дать вам что-то взамен это больше, чем все, что Вы выделено для них? Ханна: Конечно, так Вопрос был в основном, может пользователь даст вам больше, чем вы просите? СТУДЕНТ: Да. Ханна: Ну, вы могли бы предотвратить пользователь от этого. Вы могли специально сказать не дай мне больше, чем х количество по байтов Я только дал вам место для х количество байтов, х число символов. Так что то, что вы хотите, чтобы предотвратить. Да? В чем разница между Переполнение стека и переполнение буфера? [00:49:30] Ханна: ОК, так что стопка overflow-- ах, какой разница между стеком Переполнение и переполнение буфера? Поэтому мы хотим, чтобы думать о переполнения стека происходит, когда мы на самом деле укладка эти вызовы функций. Скажем у вас есть рекурсивную функцию, потому что мы знаем, что каждый раз, когда вы вызвать функцию, это становится самостоятельно рамка на стеке. [00:49:45] Таким образом, мы складывают слишком высоко, и Затем мы начинаем переливаться. И мы используем слишком много памяти, и мы не действительно есть где-нибудь осталось. Мы получаем эту ошибку. [00:49:51] Переполнение буфера находится в пределах программы. Мы хотим, чтобы, возможно, не обязательно запустить из памяти так же, что мы могли бы, если мы укладки так много вызовов функций, но мы пишем мимо памяти что мы знаем, что мы можем использовать. И что позволяет нам делать зло. Да? [00:50:08] ROB: Да, вы можете чтобы просто повторить это, но вы также можете думать переполнением стека а как определенный тип переполнения буфера. Или вы просто думать о своем стек, как действительно большой буфера. Затем, когда вы переполнение вы стек, это вроде как переполнение буфера. Но переполнение стека просто специальный термин используется, когда стек Сам переполняет. [00:50:24] Ханна: Право, так, чтобы Повторяю для видео, это вы можете думать о переполнение стека, как Конкретный тип переполнения буфера. Прохладный? Любые другие вопросы, прежде чем идти дальше? Удивительный. [00:50:37] Хорошо, прохладно, так что давайте говорить о некоторые общие сообщения об ошибках. Это то, что имеет показано на нескольких викторинах, так что-то, что стоит принимая второй взгляд на. Я уверен, что вы столкнулись по крайней мере, некоторые из них как вы делаете, ваша проблема устанавливает. Поэтому убедитесь, что вы можете говорить о них на викторине. [00:50:50] Таким образом, первый из них ошибки сегментации. И это в любое время, мы попробуйте получить доступ к памяти что мы не разрешили доступ. Таким образом, вы migh видел это, Например, в прорыве. Если обнаружить столкновения вернуться нуль, а затем вас пытался что-то сделать с этим значением нуль, компьютер даст Вы ошибки сегментации. Так что, главное, чтобы сделать для того, чтобы попытаться избежать этого это всегда проверить на нуль. [00:51:13] Вы, возможно, также видел неявная декларация функции. Так что это то, что происходит когда Эллисон показал, как мы делаем прототип, не так ли? Так скажем, у нас есть некоторые функция, которую мы определим. Скажем куб. И это идет на дно нашей функции, в соответствии с основным. [00:51:27] Если мы забываем сказать компьютеру о куб, когда основная пытается вызвать куб, компьютер будет, как, о, черт возьми. Я понятия не имею, что это значит. Я не знаю, что делать, вот. Так прототипом говорит, не волнуйтесь. Я собираюсь рассказать вам. [00:51:42] Это придет. Не кричать на меня. Не дай мне неявное Декларация функции. Так что если вы получите эту ошибку, один что вы будете хотеть сделать это убедиться, что у вас есть свой прототип. Хорошо? [00:51:53] И последнее, но не менее важно, необъявленный идентификатор по сути, когда вы пытаетесь использовать Переменная, что вы не заявили. Так вдруг вы начинаете говоря, как п плюс плюс. И компьютер говорит, что это н? Ты никогда не говорил мне, н был вещью. [00:52:06] Так одна вещь, вы должны убедиться, что вы сделал это сказать компьютеру, что п. Так, например, н может быть целым числом. И тогда вы будете избежать этой ошибки. Любые вопросы по распространенных ошибок? Да? [00:52:17] СТУДЕНТ: Для неявное Декларация функции, может также быть, что вы опустили один из библиотек вы должны были чтобы включать в себя, вместо прототипа? [00:52:24] Ханна: Право, так Вопрос был, ты мог Также эта ошибка, если вы забыли включить библиотеку. [00:52:28] СТУДЕНТ: Да. [00:52:29] Ханна: Абсолютно, потому что так же, что мы хотим, чтобы положить наши прототипы Перед основной функции, если у нас есть библиотека, те идут по существу включают в себя прототипы, включить определения из функций. Большой вопрос. [00:52:40] СТУДЕНТ: Для сегментации вина, будет, что также произойдет, если мы, как, пытался получить доступ к переменной, как, по-другому [неразборчиво] чем он был объявлен в? Ханна: Конечно, так бы мы получить ошибку сегментации если мы попытались получить доступ Переменная выходит за рамки? Было ли это вопрос? СТУДЕНТ: Да. Ханна: Красивая. Так, вероятно, вы собираетесь получить Необъявленная ошибка идентификатор вместо. Так что это просто хочу сказать, Я не знаю, что это такое. Круто, что-нибудь еще? Да, хорошо, красиво. [00:53:10] Все правша, так рекурсия. Так я уже пару раз что мы могли бы получить переполнение стека потому что мы называем наш рекурсивная функция так много раз. Мы получаем все эти стопки кадры, бла, бла, бла. Что еще является рекурсивная функция? Ну, рекурсивная функция является любая функция, которая называет себя. [00:53:26] Некоторые вещи, чтобы быть в курсе, когда вас реализуем рекурсивную функцию, не забудьте включить базовый вариант. Базовый вариант является Точка, в которой мы в конце. Так, например, если мы кодирования, , Говорят, Фибоначчи рекурсивно, мы хотим убедиться, что, когда мы получаем на или под первым номером 0 Фибоначчи, эти два числа имеют эти случаи, потому что те не зависят на вещи, которые пришли раньше. Те, имеют свои собственные значения. [00:53:51] Некоторые профи в рекурсии, что является Вопрос, который мы видели на последних опросов. Они могут привести к более кратким, элегантный код. И много функций, много разных алгоритмов, на самом деле поддаются рекурсии. Их определение может быть Рекурсивные и само по себе. Так Фибоначчи является одним. Факториал является одним. Слияние сортировки одно-- все вещи, которые вы можете посмотреть. Хорошо, есть вопросы? Да? [00:54:15] СТУДЕНТ: Есть пограничные случаи аналогично базовой случае? Или в том, что для какой-то другой вид [неразборчиво]? [00:54:22] Ханна: Конечно, так угол случай any-- так является угол дело так же, как базовой случае? Угол случай что-нибудь, что ваш Код может вести себя немного по-другому. Базовый вариант является своего рода связаны, в что они, как частные случаи что вы хотите посмотреть. Но идея базовой случае является то, что Вы хотите, чтобы ваш рекурсивную функцию остановиться на какой-то момент. Он не может держать, называющая себя навсегда. Это нужно остановить на какой-то момент. [00:54:49] Роб: Да, часто, ваши базовые случаи может быть примеры угловых баз. [00:54:53] Ханна: Право, здорово, что-нибудь? [00:54:55] СТУДЕНТ: Не могли бы вы объяснить, основывает немного больше? Я не совсем понимаю, [Неразборчиво] базовые случаи. [00:55:01] Ханна: Из базовых случаях? [00:55:02] СТУДЕНТ: Базовые случаи, да. [00:55:03] Ханна: О, да, конечно. Посмотрим. Есть ли у нас мел здесь? Да, мы делаем. Итак, на самом деле быстро, я буду попробуйте написать достаточно большой так что вы можете видеть на экране. Давайте поговорим о, действительно быстро, Фибоначчи. Поэтому я дам вам последовательность Фибоначчи. Вы можете искать определение. [00:55:17] По существу, каждый номер в последовательности является суммой двух предыдущих чисел. Итак, то, как я только что описал Фибоначчи, вы могли услышать рекурсию, не так ли? Когда я сказал, что каждый номер сумма двух предыдущих чисел, мы могли бы сказать, в порядке. Ну, п-я Фибоначчи number-- так что давайте у нас есть эта функция называется fib-- выдумка п будет равна приврать н минус 1 plus-- жаль, мы собираемся на следующей строке над here-- выдумка п минус 2. [00:55:52] Итак, это прекрасно работает, если вы смотрите, например, ноль, один, два, три, четыре, пятая число Фибоначчи, где можно сказать, что 5 равна 2 плюс 3. Но что, если вы в начале? Что делать, если вы просто идете эти первые два значения? [00:56:08] Чтобы получить этот 1, вы не можете сказать добавить два предыдущих, потому что ноль и-- я не знаю. Таким образом, в какой-то момент, мы должны остановиться. В какой-то момент, мы должны сказать, что это два только имеют свои собственные определения. Количество 0 Фибоначчи 0. И первое число Фибоначчи 1. [00:56:26] Так как я мог бы кодировать это, я сказал бы, если п меньше двух, то просто вернуть н. И что бы мой базовый вариант. Вот как я знаю, чтобы остановить с рекурсивной функции. Это понятно? Удивительный. Что-нибудь еще на рекурсии? Красивая. [00:56:45] Давайте быстро говорить о Поиск и сортировка выполняются раз. А потом я дам Дэвин некоторых Время поговорить о кодировании примеры. Так вот основной поиск и виды, которые вы должны знать о. Guarantee-- я не могу гарантировать, потому что я не видел quiz-- но это приходит викторины после викторины после выхода. Так определенно использовать этот график. Мол, взять этот график. Положите ее на свой шпаргалку. Вы будете счастливым человеком. [00:57:09] Это говорит нам времени работы каждого из этих сортировки и алгоритмов поиска. Так линейный поиск, вы можете увидеть бег Время, и то же самое с бинарного поиска. Перейти над тем, что эти алгоритмы сделать, общую идею. Посмотрите на какой-то псевдокоде, если не сам код. [00:57:25] Вы увидите, что пузырьковая сортировка имеет верхний связаны в худшем случае п квадрат. Так что, если наш массив был полностью назад, прежде чем мы хотели, чтобы уладить его, мы бы сказали, что это собирается занять н в квадрате шаги. Но в лучшем случае, так нижняя граница для лучшем случае будет ли это уже совершенно отсортированы. Тогда все, что нужно сделать, это проверить, что это сортируются. Есть вопрос здесь? [00:57:47] СТУДЕНТ: Когда будет Вы хотите использовать то? Сорт. Мне просто любопытно. [00:57:52] Ханна: Когда вы хотите использовать выбор рода? Это один? Тот, который н квадрат в обоих случаях? [00:57:55] СТУДЕНТ: [неразборчиво]. [00:57:56] Ханна: Так что это очень разные. Если у вас есть конкретные Требования к программе, как вещи, как если бы мы только что сказали, осуществить search-- sorry-- осуществить своего рода, вы будете вероятно, хотите пойти для одного из тех, что имеет лучший случай п, или нижнюю границу в лучшем случае п. Но там может быть некоторые вещи, как, скажем, свопы действительно дорого для какой-то причине. Тогда вы хотели бы сделать пузырьковая сортировка, потому что вы нужно сделать так много свопы, такие вещи, как, что. Любой other-- да? [00:58:23] СТУДЕНТ: было бы [неразборчиво] сказать, что [неразборчиво]? Ханна: Это одна вещь, что бы вам сказать, если вы ищете на реализацию. То, как я бы на самом деле думаю о том, почему это н квадрат в том, что мы должны работать через наш массив длины п, каждый раз делая в большинстве, п свопов. И мы должны сделать этот процесс п раз. [00:58:46] Так что, когда вы должны сделать в самое, н свопы и для п пробегает массива, там собирается быть н в квадрате. Но да, это будет выявлено через этот вдвое за петлю, как вопрос asked-- или вложенными для цикла, я должен сказать. Хорошо? [00:59:00] А потом сливаются рода, которые это самый быстрый вид мы сейчас, или, когда мы рассмотрели в CS50, Известно, что основным алгоритм эта идея взлома отсортированные куски и затем сливаясь эти отсортированные биты. И получите нам войти н войти п. Любые вопросы по обысков и виды, прежде чем я передать его? Посмотрим. [00:59:21] О, связные списки. К сожалению, у меня есть еще один раздел. ОК, удивительным, связанные списки. Проблема с массивами, они имеют фиксированный размер. Так что, если вы не знаете, насколько велика Ваш вклад будет, Вы не хотите, чтобы создать массив. Потому что, если мы создаем Массив, слишком мала, мы могли бы столкнуться с переполнением буфера. [00:59:35] Так вместо этого мы могли бы сделать что-то со связанными списками, которые позволяет нам иметь динамически размера структуры данных что позволит нам хранить более гибким объем данных. Таким образом, внутри каждого узла в нашем связан список, у нас есть две части. У нас есть фактическое значение, что он хранит. Так что это просто, что вы бы см в массиве, например. И тогда мы также отслеживать указатель к следующей вещи в памяти. [01:00:04] В отличие от массивов, которые мы знаем все собираемся в be-- элементы массива все одно за другим в memory-- связаны Списки могут быть где угодно в памяти. Они произвольных местах. Так что, если бы мы должны были на самом деле пойти найти их, мы нужно отслеживать Следующее, что в нашем списке. [01:00:19] И тогда для того, чтобы знать, где, что список в целом, Все мы должны отслеживать это Самый первый элемент в нашей связанного списка. И что будет позволить нам выполнить. [01:00:31] Так что это, как вы могли бы определить режим. Это отличная возможность воспользоваться структур. Потому что у вас есть эта идея, хорошо, для данного узла, у меня есть две части. У меня есть фактическое само значение. А потом у меня есть указатель на Следующий элемент в связанном списке. Итак, вы видите, у нас есть число п, который будет фактическое значение, а затем указатель на узел, называемый рядом. Так что это будет следующий элемент в нашей связанного списка. СТУДЕНТ: Да? Вы должны указать, что звезда, как структуры? [01:01:01] Ханна: Да, так, так как это почти как своего рода, кажется, что рекурсивный определение, в котором мы должны знать, что узел внутрь, чтобы найти узел. Так как это не на самом деле знаю, что узел полностью пока мы не получим до конца this-- и после этого мы можем назвать его просто node-- внутри этого определения, мы должны назвать это структура узла. Большой вопрос. Что-нибудь еще? Да? [01:01:26] СТУДЕНТ: Почему мы должен сказать, узел дважды? Потому что, когда мы были в [неразборчиво] мы просто должны были сделать это в точку с запятой, но теперь мы должны найти, что структура узла? [Неразборчиво]. Ханна: Так что я считаю, в последнем примере, мы были просто создание в любое время вы хотел использовать студента после этого, вы пришлось использовать-структуру node-- Я sorry-- структуры студента. Это позволило нам, после того, как тот факт, просто Использование узел добавления нового типа, по существу. Это имеет смысл? Таким образом, мы должны были бы вернуться и посмотреть на код, прежде чем. Но я думаю, что мы не использовали ЬурейеЕ. И мы задали вопрос, почему мы должны использовать ЬурейеЕ? Typedef позволяет избежать Слово структура в начале. Да? СТУДЕНТ: Какие вопросы будут придумать в плане с точки зрения узлы и связанные списки? [01:02:10] Ханна: Так одно можно сказать, как может вы просмотрите связанного списка? Хорошо, потому что это немного сложнее чем если мы ищем через массив. Мы можем только смотреть на нулевой элемент, Элемент один, элемент два, бла, бла, бла. Если мы хотим искать через связанный список, мы фактически должны следовать это немного лабиринт указателей. Так что давайте на самом деле идти через это действительно быстро. То, что мы могли бы сделать в заказать to-- скажем мы хочу просто перебрать наша полностью связанный список. Мы начали бы в голову. И затем, с тем, чтобы перейти к следующему элементу, а не просто приращения на единицу как мы могли бы при переходе через массив, мы на самом деле собираемся следовать следующий указатель, так что мы можем найти, где в Память на следующий элемент. Так что я знаю, что это не достаточно, чтобы принять все это прямо сейчас, но вы будете иметь эти слайды. Таким образом, вы можете пройти это немного медленнее. Но по сути, то, что мы хотим сделать, выполните следующие указатели через полноту связанного списка. Так что это вопрос может быть вы спросили. [01:03:01] Что-то, чтобы заметить с вставка, скажем мы хотели поставить новый элемент в передней части нашей связанного списка. Мы должны быть очень осторожны, о порядке, в котором мы переназначены указатели. Потому что, скажем, я просто сказал, хорошо. Сделать головной точку на этот новый элемент. Просто чтобы она указывала на 1 пор мы существенно потеряли остальную часть нашего списка, потому что я не помню, где 2 жизни. [01:03:25] Так что мы должны сделать в очень определенный порядок. Во-первых, мы делаем новый элемент указывает на голову. И тогда мы делаем голову указывать на новый элемент. Итак, давайте посмотрим, как это выглядит с arrows-- просто так. Таким образом, вы должны сначала новые элемент указывает на старой голове. А теперь, у нас есть голова он указывал на новый первый элемент. Любые вопросы с этим? [01:03:49] ОК Вот код снова, что-то смотреть на немного позже. А теперь я буду передать ее Давин для GDB и немного практики кодирования на бумаге. Красивая. [01:04:01] ROB: А Роб. [01:04:01] Ханна: О, Дэвин и Роб. Мне жаль. [01:04:03] СТУДЕНТ: Woo! [01:04:08] ROB: Спасибо. [01:04:09] DAVIN: Вы хотите сказать, все действительно быстро? ROB: Да, да. DAVIN: После того, как я до. ОК, в то время как Роб ставит Микрофон на, так что GDB? Все должны были видеть GDB в класс, а также на рабочие часы. И вы должны использовать его. Так что GDB? Любой? [01:04:28] СТУДЕНТ: Это отладчик. [01:04:29] DAVIN: Это отладчик. И то, что это позволит вам делать? Мол, зачем нам нравится GDB? СТУДЕНТ: Чтобы замедлить программу. DAVIN: справа, так что вы можете ходить через него, как человек в ногу. И так, что некоторые команды вы можете сделать? Ну, перерыв, вероятно, Ваш любимый команда. Потому что позволяет разбить Программа и фактически идти через него построчно. [01:04:44] Выполнить позволяет запускать его. Далее, как пошагово. Что между рядом и шага? Подождите, говорю это вслух. Это было правильно. [01:04:54] СТУДЕНТ: [неразборчиво]. [01:04:55] DAVIN: Да, удивительный. Так как, в следующем и шаг, если you're-- скажем у вас есть функция вы определить. Скажем некоторые в вашей основной функции, и вы просто идете рядом, рядом, Следующий. Ты на самом деле происходит в выполнить эту функцию, но вы собираетесь прыгать через него. Если вы попали шаг, или ы или любой другой, вы собирается на самом деле прыгать в этой функции, а затем вы можете нажать рядом чтобы увидеть различные звонки внутри этой конкретной функции. Да? [01:05:16] СТУДЕНТ: Есть ли способ прыгать, как, отступить? DAVIN: Готово, да, закончить с прыгать вам. Так это будет закончить, что Функция, а затем вы собирается вернуться в основной, например. Печать будет распечатать его один раз. Что-то я всегда использую это дисплей. Дисплей распечатать его постоянно в течение всей полноте вашей программы. [01:05:32] Например, если вы в цикле, и вы хочу посмотреть, как что-то меняется, и вы не хотите, чтобы, как, постоянно делать, как печать, печать, печать, дисплей покажет эту переменную постоянно, каждый раз, когда вы нажмете кнопку Далее. И по-прежнему. Так ГПБ, это GDB. [01:05:47] СТУДЕНТ: Что один где вы [неразборчиво]? DAVIN: Что это такое? [01:05:52] СТУДЕНТ: Что the-- локальные переменные. ROB: Существует что-то на самом деле как местные жители или что-то. Я can't-- [01:05:58] DAVIN: Это может быть как-то так, да. [01:05:59] Ханна: В местных жителей? [01:06:00] DAVIN: Вот это. Вот один. ROB: Красивая. [01:06:03] DAVIN: Да. [01:06:04] СТУДЕНТ: Что по-прежнему делать? [01:06:06] DAVIN: Это continues-- так что это просто собирается продолжить свои программы. Так что, если вы нарушите и ударил продолжать, это будет не просто запустить эту программу, пока она попадает, что перерыв снова. Так, например, если вы сломал в функции, и вы собираетесь делать, как для петля или что-то подобное, и вы попали продолжать, он собирается продолжить и вернуться к этому перерыва. Или нет никакого перерыва, она не собирается продолжить и завершить программу. [01:06:22] ROB: Так просто нравится останавливается, на первом останова вы попали, если вам, то хит продолжать, это будет держать происходит, пока это не следующей точки. А потом продолжить пойдет к следующей контрольной точки. DAVIN: Любые другие вопросы о GDB? Так что я думаю, что и в прошлом, мы просили вас, что GDB и дать Пример некоторых вещей, которые вы можно сделать с помощью GDB, так реальный простой, но да. Там вы идете. И узлы? [01:06:43] ROB: Да, так, в каком направлении это было? СТУДЕНТ: Вот и все. DAVIN: Подождите. ROB: Этот парень? DAVIN: Это один. ROB: Этот парень, ох, я не понимал,. Таким образом, мы не были ясны на то, что я the-- не знаю, кто это was-- но вопрос. Мы не знаем, что именно вы спрашивали об этом, так что просто уточнить что-то. Итак, сначала, как я уже говорил, ЬурейеЕ вы всегда с помощью только создать псевдоним для типа. Так вот здесь, прозвище мы Создание для этого типа структуры узла. [01:07:13] Итак, сначала, игнорируя этот узел в ЬурейеЕ, так это структура узла вьющиеся готовиться до следующего кудрявых ортез Тип структуры узла. И мы должны к этому узлу там, потому что мы нужно ссылаться узел здесь. Так что с такого рода рекурсивной структуры, Вы должны дать этой структуры имя, иначе вы не могли говорят структура узла здесь. Если раньше с учеником когда мы набрались, я думаю, мы не должны сказать, студент там, потому что мы не должен сказать-структуру Студент внутри самой структуры. Так что это рекурсивная что заставляет нас сказать узел есть. [01:07:43] Этот узел является только название мы давая узел для определения типа. Так что узел не так же, как этот узел. Но этот узел является структура такой же, как тот структура узла. DAVIN: Поэтому, когда вы звоните, как, узел в главной функции, Вы же не собираетесь должен сказать, структура узла. Вы можете просто сказать узел, потому что узел является в основном different-- Вы говорите, ОК. Вместо того, чтобы позвонить структура узла в своем коде, Я просто хочу, чтобы переименовать его как узел, чтобы сделать его более легким. [01:08:04] ROB: Если вас всегда использовать ЬурейеЕ, то это это единственное место, вы будете иметь, объявить переменную с STRUCT узла звезда, да. [01:08:14] DAVIN: ОК, так что последняя часть Трудно научить because-- ROB: Что? [01:08:24] DAVIN: Потому что это кодирование на бумаге. Таким образом, каждый год у нас есть Код на бумажных вопросов. Так что я думаю, что в прошлом году, 12 из 80 баллов были Код на бумаге. Год до этого, 10 из 80, За год до этого, 20 из 100, так немало из них. Таким образом, вы будете иметь, чтобы быть в состоянии кодировать эти функции вручную. [01:08:40] Поэтому я полагал, что мы могли бы пройти Пару из них и посмотреть, как люди делают, вид ходить через их медленно с людьми. Так обычно, StrLen и atoi были очень популярны. В прошлом году, я думаю, что мы должны были GetPositiveInt и RandomInt. Но военнопленных, поэтому мощность, также положительным слишком. Давайте просто пройти, может быть, один или два из них вместе. Что люди хотят видеть? [01:09:05] СТУДЕНТ: Atoi. СТУДЕНТ: Да. DAVIN: Atoi? СТУДЕНТ: [неразборчиво]. DAVIN: ОК, я собираюсь сделать это на доске. Есть ли у вас предпочтения если я делаю это здесь или там? Там, Гейб говорит там. [01:09:16] ROB: И это общие мысли на эти вопросы кодирования. Попробуйте написать что-нибудь. Не оставьте это поле пустым. [01:09:22] DAVIN: Да. ROB: Если вы можете получить вернуться тип правильно, или, может быть, мы могли бы дать его Вы, но если вы можете, как, написать общую функцию подпись, Если вы можете получить базовые случаи правильно, или частные случаи, или вспоминая чек на нуль, до тех пор, пока у вас есть некоторые вещи, то, возможно, мы может дать вам пару указывает на проблемы. Не просто оставьте это поле пустым. [01:09:36] DAVIN: Да, и если вам только полностью тупик в том, как на самом деле превратится в коде. Если вы пишете псевдокод, это очень хорошо тоже. Так что это как, это шесть целых вопрос, и вы напишите правильный псевдокод, Вы получите не менее двух точек. Так что не просто оставить их пустыми. Попробуйте положить что-то. [01:09:50] ROB: Она должна быть правильно псевдокод, хотя. [01:09:51] DAVIN: Да. ROB: Таким образом, мы, как правило, являются менее снисходителен с ошибками в псевдокоде. Дэвин: ОК, так что вы, ребята хотел видеть atoi. ОК, так что просто really-- так что вы хотите сделать, это вы собираетесь быть учитывая какие-то числа. Но это число не будет интервал, не так ли? Что это будет? [01:10:08] СТУДЕНТ: [неразборчиво]. [01:10:09] DAVIN: Это собирается быть строкой, не так ли? Так что если вы дали string-- давайте say-- [01:10:13] ROB: Должен ли я подтянуть редактор? Я могу вытащить up-- [01:10:16] DAVIN: О, вы хотите сделать это on-- [01:10:16] ROB: Вы бы предпочли доску? [01:10:17] DAVIN: Что вы хотите сделать? Я имею в виду, вы хотите сделать это вручную? Или вы хотите, чтобы сделать это с помощью компьютера? [01:10:21] ROB: Сделайте это вручную. [01:10:22] DAVIN: [Смеется] ROB: Сделайте это вручную. [01:10:23] DAVIN: ОК, так что это будет atoi. Так что it-- Я имею в виду, мы будем вероятно, даст вам это. Но то, что он собирается вернуться? [01:10:29] СТУДЕНТ: Int. [01:10:29] DAVIN: Это собирается вернуться Int, не так ли? So-- Я не хочу, чтобы это сделать есть. Я сделаю это здесь. [01:10:34] ROB: Вы можете тянуть его вниз а затем нажать на него. [01:10:38] DAVIN: да. [Смеется] изменение игры. ОК, так что это будет INT atoi, и то, что он собирается предпринять? Символ звезды, так просто Строка, звезда с, как, что. [01:10:57] ROB: Nice звезда, хороший. DAVIN: Это не может быть там, ОК. ROB: Да. DAVIN: ОК, так что первый что вы хотите do-- I не знаю, если кто-нибудь посмотрел на практике solutions-- но то, что вы собираетесь хотеть сделать это вы захочет есть петля, потому что ты захочет фактически пошагово этой строки. Так helpful-- так скажем мы собираемся для петли, и мы собираемся пройти через каждый элемент строки. Как долго это? Сколько раз мы собираемся для перебора в том, что для цикла? СТУДЕНТ: Sterln? DAVIN: Sterln, да. Так скажем, длина интервал равен sterln с. И просто интересно, почему это всегда своего рода из лучше делать это вне петли? Как, почему это лучше назвать эта функция вне цикла? Просто проверьте быстрый здравомыслие? Да? СТУДЕНТ: Таким образом, вы не должны продолжать проверять его. Вы можете просто [неразборчиво]. [01:11:59] DAVIN: Ровно, так что да, именно то, что она сказала. Таким образом, мы не должны продолжать проверять его. Так, например, если я звоню эта функция в цикле, Затем я собираюсь продолжать звонить эта функция несколько раз. И что происходит, чтобы уменьшить эффективность вашей программы. Так что это всегда полезно объявить его вне. [01:12:12] ROB: Это говорит, на любой из этих проблем, в значительной степени, пока вы получаете рабочего раствора, вы получите полный кредит. Так что не волнуйтесь, если ваш дизайн абсолютно ужасающим. Это может сделать нас расстроен читать ваш код. Однако до тех пор, как оно работает, вы получите очков. [01:12:28] DAVIN: Да. Итак, то, что я собираюсь объявить некоторые переменные. Это просто будет звонить Int сумму. И я собираюсь установить это равен нулю, как это. И это только собирается быть заполнитель. Так что это будет то, что я собираюсь вернуться. Так что я собираюсь в конце концов вернуться сумму из этой программы. Поэтому у меня есть эти две переменные. Я имею длину. У меня есть сумму. А теперь давайте перейдем в нашу строку. [01:12:48] Так что давайте есть наш цикл. Так четыре INT я равна 0 ж, в то время как Я меньше длины I плюс плюс. И now-- ROB: Nice. DAVIN: ОК, а теперь здесь приходит мясо нашего кода. Таким образом, вы можете на самом деле делать это в основном в одну линию. Так кто-нибудь есть идея о том, что мы собираемся делать дальше? ОК, так что все в порядке. Таким образом, мы делаем сказать сумму equals-- позвольте мне бежать стремглав этот over-- сумму равна сумме раз 10 plus-- мы собирается занять ы I минус один Цитата 0 одна цитата сделано, как, что. ROB: Очень интуитивный. [01:13:56] DAVIN: Щебень его. Итак, someone-- я получил его, я получил его. ОК, так что это явно идет вверх. Что это значит? Так кто-нибудь знает, что это значит? Все ли могут убедиться в этом? Нет, никто не может в этом убедиться, в порядке. Я собираюсь to-- [01:14:18] ROB: Я собираюсь написать Формула просто прямо здесь. DAVIN: ОК, Роб собирается это сделать на компьютере, который весело. ROB: О, мой Бог. Или я не буду. DAVIN: ожидания. СТУДЕНТ: У меня есть вопрос. DAVIN: Да, конечно. СТУДЕНТ: [неразборчиво]? DAVIN: ОК, так это на самом деле, как, только в общем, если бы вы были поставить, как, В этой декларации междунар Я равна длине 0 запятую равна sterln, that-- [01:14:59] СТУДЕНТ: [неразборчиво]. [01:15:01] DAVIN: Это хорошо, потому что that-- СТУДЕНТ: Зачем вы даже нужно использовать длину? Почему мы не могли просто [неразборчиво] sterln с, как все время [неразборчиво]? [01:15:08] DAVIN: Вы имеете в виду здесь? [01:15:09] СТУДЕНТ: Да. DAVIN: Потому что каждый Время это для петель трасс, это будет оценить это состояние. СТУДЕНТ: справа. DAVIN: А если у вас есть sterln есть, то это придется на самом деле назвать что функция каждый раз. Таким образом, вместо того, чтобы просто сравнивая его с междунар, Вы собираетесь звонить Функция, а затем сравнивая его на возвращаемое значение. Да, так что это просто, да. [01:15:28] Хороший, ОК, так что теперь каждый может увидеть его. Что does-- это как, это он. Это варенье, прямо здесь. Что это значит? Что я делаю? Да, идея? Да? [01:15:43] СТУДЕНТ: Ну, так что, когда Вы вводите массив, Вы собираетесь идти слева направо, так вы собираетесь идти в десятичной от вниз [неразборчиво]. DAVIN: Совершенно верно. СТУДЕНТ: Так каждый нужно умножить то, что вы видели, как от значения междунар по раз, когда вы получаете двигаться, что над одним. [01:15:59] DAVIN: Отлично, прекрасно, так, например, давайте сказать, что я дал you-- Я буду писать здесь. Нет, я не. Я собираюсь написать сюда. Скажем, я дал тебе 76, не так ли? Скажем, я дать вам 76. Это строка для начала, хорошо? [01:16:15] Так длина есть что? 2, не так ли? Сумма 0. Тогда мы прыгаем в нашей цикл. ОК, первая итерация это, что это будет? Это будет сумма 0. Так подвести раз 10 0. Это бессмысленно. Тогда что же это сделать? СТУДЕНТ: [неразборчиво]. [01:16:33] DAVIN: Это собирается повернуть, что характер в целое число, не так ли? Это вроде как с вашим Проблема set-- этом light-- это вроде как с Проблема установлен на Visioneer. Вы имеете дело со значениями ASCII. Так что, если я даю вам, как, семь, но это характер, и вы хотите знать, Хорошо, что цифра является то, что? Да, вы могли бы, да. Так что цифра, что? Вы можете вычесть 0 от него, но вы должны вычесть 0, характер. [01:16:59] И где некоторые люди получить споткнулся, они как, в порядке, хорошо, я должен знать, значения ASCII для этой викторине? Нет, вы, безусловно, не нужно знать ASCII Значения, вроде бы, в нижнем регистре , верхний регистр, ноль. [01:17:09] ROB: Там нет причин, чтобы когда-либо поставить это на шпаргалку. [01:17:12] DAVIN: Определенно не тратить свое пространство в этом. Вы можете literally-- только вместо сказать 48, как вплоть там, что эквивалентно говоря друг, один апостроф, так, точно так же. [01:17:27] ROB: Вы могли бы подумать, об этом, как if-- Бога, мне нужен мой, oops-- вы могли почти думать об этом как будто у нас есть что-то вроде этого хэша определить 0 как 48. Это не будет работать. Но думать об этом как один цитатой 0 апостроф, и для всех персонажей. Думайте об этом как константа, представляет это значение ASCII. [01:17:47] DAVIN: Да. Итак, в первый раз через, так с 76-- так в первый раз через, это только символ 7 минус символ 0, и те семь integers-- хорошо, те, семь пространства друг от другой на ASCII графике или любой другой. Так что собирается вернуть Int из 7. Так что теперь, сумма равна 7. [01:18:08] Хорошо, хорошо, давайте перейдем в этот цикл снова. Хорошо, теперь это сумма раз 10. Так вы эффективно перемещая 7 влево. Имеет ли это смысл? Ты эффективно перемещая его влево. [01:18:19] И тогда вы add-- это будет 6 минус 0. Вот 6. Так что это будет 70 плюс 6. 76, что ваш номер. Таким образом, независимо от того, какой числа Я дал вам, это медленно просто собирается сместить большие значения влево, 1 фактор 10 каждый раз в течение цикла, а затем добавить на по мере необходимости. [01:18:37] В спину? СТУДЕНТ: Мы не должны делать любая проверка в программе? [01:18:41] ROB: Так насколько проверки идет по программе, мы бы рассказать вам довольно много, что вам нужно, чтобы проверить. Если мы не говорим вам что-нибудь, то, как правило Предположим, у вас есть, чтобы проверить большинство вещей. Как вы, возможно, просто чтобы быть в безопасности, вам вероятно, следует проверить эй, это с нулевым? Тогда я понятия не имею, что такое вернуться. Но мы бы вам сказать, такого рода вещи. 0, я не знаю. [01:18:59] DAVIN: А почему вы хотели бы перепроверить, если с равно нулю? СТУДЕНТ: [неразборчиво]. DAVIN: Из-за полукокса звезды. Это указатель. Так вполне приемлемо Декларация, я мог бы сказать, в порядке, с равен нулю, потому что это может быть указателем на нуль. Поэтому, когда у вас есть указатели на вашем пути в, как это, Вы, вероятно, следует проверить. Потому что, если вы не убедитесь, что и то вы потом в ваш цикл, и вы doing-- стремглав вниз. Скут вниз. [01:19:22] ROB: К сожалению, это так. [01:19:23] DAVIN: И так, как, если это нуль, а затем вас сделать это, что ошибка вы собираетесь получить? СТУДЕНТ: Вы собираетесь получить набор вину. DAVIN: Вы собираетесь установить вина, правильно, потому что ты пытаясь индекса в нуль. Таким образом, вы будете пытаться индекса в память, что вы не владеете. Таким образом, это, если это является нулевым, и Вы делаете это, вы будете цикла. [01:19:39] ROB: Я тоже думаю, что на экзамене, в котором мы задали этот вопрос, мы говорим вам, что вы можете просто считать, это положительное число. Потому что atoi Также ожидается обрабатывать отрицательные числа, так что вы должны были бы особый случай. Эй, это первый символ тире, и в этом случае, в порядке, Теперь это отрицательное число. Мы расскажем вам эти виды вещей. Мы расскажем вам, что вам нужно для работы. DAVIN: Да. Так что я уверен, что некоторые люди могут have-- если вы начали смотреть на старых экзаменов, Вы видели sterln. Это популярный. И я думаю, что в sterln, вы должны были сделать эту проверку для нуль, возвращение 0 или что-то подобное. Как, вы должны были проверить на нуль. И если вы не сделали, что было указать прочь на викторине. Так или иначе, делает всех чувствую в порядке с atoi? Хочет ли, чтобы кто-нибудь перейти частей снова? ROB: О, да, я думаю, мы также сказать, что вы можно считать, что все is-- что они на самом деле введя номер, что вам не придется беспокоиться о, как, будучи буквы в строке, поэтому. DAVIN: Да. Да? СТУДЕНТ: Можете ли вы пойти над более один раз, когда Вы используете двойные кавычки и одинарные кавычки? [01:20:37] DAVIN: Конечно, так двойные кавычки, очень просто, это двойные кавычки являются строками. Так что, если вы дважды цитату что-нибудь, что это строка. Так, как, если бы мне пришлось это 0 здесь, и я сделал это, это строка. не Вот уже не персонаж. Так что я не могу найти эту величину на моем ASCII График, потому что это строка, да. [01:20:57] ОК, любые другие вопросы? Да? [01:21:00] СТУДЕНТ: Таким образом, вы имеете уже ответил на этот вопрос, но как, когда мы на самом деле пишу это на викторине, Вы хотите, чтобы мы написали с сокращает нули [неразборчиво]? DAVIN: Нет. Вопрос был должен вам вставить косую черту через нули чтобы указать, если они нули? Нет, мы с этим разберемся. Да, спасибо, что они хороши. Хорошо, что-нибудь еще? Хочет ли кто-нибудь to-- поэтому я думаю, мы запускаем немного в течение долгого времени. Хотите увидеть еще один, или? СТУДЕНТ: RandomInt. [01:21:29] DAVIN: RandomInt, ОК, точно. Так что давайте делать RandomInt. Я сделаю это здесь. Так RandomInt на самом деле гораздо проще. Я думаю, что atoi, вероятно, один из самых трудных что мы попросили в предыдущие годы. СТУДЕНТ: [неразборчиво]. [01:21:46] DAVIN: Что? ROB: Я вижу, если это отчасти из просмотра от сюда. DAVIN: Так ли это? ROB: Я не думаю, что это going-- я думаю, он собирается бежать направо. DAVIN: ОК, так что я буду делать это. И тогда вы просто положить его на экране. [01:21:56] ROB: Ладно. [01:21:57] DAVIN: Вы хотите быть моим книжник? [01:21:58] ROB: Да. [01:21:58] DAVIN: Ницца. ОК, я могу стереть это? [01:22:02] СТУДЕНТ: Да. [01:22:04] DAVIN: Это так трудно. (Пение) Ты делаешь что вы делаете. И делать то, что вы не знаете. Хорошо. [01:22:19] Хорошо, если я правильно помню, на викторина RandomInt походил, ОК, я собираюсь дать вам два номера, как в а и б. И я хочу, чтобы ты дал мне RandomInt между этими числами. Так RandomInt собирается взять два numbers-- так RandomInt-- и это собирается возвращать Int. [01:22:41] Так что возвращаемое значение? Я только что сказал вам. Int, не так ли? Как это, и тогда это собирается взять два целых. Так что это займет Int и INT б, как что. Так что RandomInt является собираюсь сделать, это он собирается вернуться случайное значение между этими двумя значениями. Так что это будет больше чем, меньше, чем б. Так что я думаю, что вы, вероятно, может считать, что является меньшим из двух значений. Так что, если мы имеем дело с Случайность, что функция мы видели, что дает нам случайные вещи? СТУДЕНТ: Drand. DAVIN: Drand, точно. Таким образом, вы будете, вероятно, хотите использовать drand. Таким образом, вы можете сказать, интервал случайной, и мы будем просто сказать, что это равняется 0 прямо сейчас. И они мы собираемся сказать, ОК, случайные равно drand 48. И что же это возвращение? Что это функция даст вам? [01:23:43] СТУДЕНТ: от 0 до 1. [01:23:45] DAVIN: Да, между 0 и 1. Так это будет be-- [01:23:48] ROB: И это is-- я думаю, мы бы рассказать вам об этом. Как можно использовать drand 48. Вы можете убедиться в этом на прошлой экзамена. Но мы бы, вероятно, сказать вам можно использовать drand 48, который возвращает поплавок между 0 и 1. [01:23:58] DAVIN: Да, да, я уверен, что на экзамене он говорит вам, вероятно, хотите использовать drand, да. Так это будет вернуться некоторое значение между 0 и 1. И тогда то, что ты захочет сделать? Ну, вы хотите, чтобы умножить по-- подождите, я думаю, что это, как это, извините. Я просто это сделать. Я не знаю. [01:24:19] Так б минус. Так почему б минус? Так скажем, drand дает вам обратно int-- ОК, я просто делать все остальное, так плюс. Так что does-- у является б минус. Так скажем, что drand дает вам обратно максимальное значение это могло возможно дать вам. Что это будет? СТУДЕНТ: 1. [01:24:43] DAVIN: 1, не так ли? Так что, если это 1, а ты умножив его на б минус, хорошо, вот только Разница между минус А. И если вы затем добавить, что назад на, что есть что? Это в основном б. Имеет ли это смысл? [01:24:57] СТУДЕНТ: Да. [01:24:59] DAVIN: Так что, если это максимум цените это могло бы быть, это будет один. А потом это просто Разница между ними. Добавить на, так что это собирается вернуться случайным. И в случае, угловой drand дает вам обратно 1, случайных будет просто эффективно б. Но это максимум, что может быть. Так что, если это будет меньше, чем что, так скажем, что его, как 0,9, так то 0,9 раза б минус будет меньше , чем разница между б минус. [01:25:33] И тогда, если вы добавите что на, то, что значение будет больше, чем, потому Вы добавляете что-то на него, но это будет менее б. Таким образом, вы собираетесь получить случайный число, потому что вы звоните drand. И что рэнд, что случайное число будет где-то посередине и б. Имеет ли это смысл? [01:25:50] ROB: Просто, чтобы поставить его в конкретные цифры, так Допустим, мы хотим, чтобы забрать случайное число между 7 и 10. Так б минус это наш ассортимент. Так что есть целый ряд из трех номера мы хотим, чтобы выбрать из. А потом умножения что между 0 и 1 1, если что то дает нам some-- скажем, что дает нам 1,5. [01:26:07] Тогда 1,5, мы хотим идти с 7 по 10. Так 1,5 плюс 7 подводит нас назад в нашем 7 до 10 диапазоне. А потом мы ее хранения внутри целое число, так что усекается до 8. А потом мы просто вернуть это. Так б минус это наш ассортимент. сдвигает его в цифры что мы хотим в этом диапазоне. Так между 7 и 10, а затем мы может вернуть то, что мы в конечном итоге с. [01:26:30] DAVIN: Да, приятно. [01:26:32] ROB: Спасибо. [01:26:34] DAVIN: Да, в чем дело? [01:26:35] СТУДЕНТ: Есть ли у нас запустить его для любого вида Ошибки ASCII когда we're-- если drand является возвращение поплавок [неразборчиво]. [01:26:42] ROB: Так же, как Роб сказал, потому что случайная не INT, так drand будет поплавок. Так, а затем он размножается вне. И вы можете получить некоторые вид чисел с плавающей точкой. И тогда это будет обрезать. [01:26:51] СТУДЕНТ: ОК. DAVIN: Да. ROB: А если компилятор были предупредить Вы о, как, потеря точности, просто бросили на Int в есть, и то это хорошо. DAVIN: Да? [01:27:02] СТУДЕНТ: Будет ли это иметь же вероятность получения, как, б или [неразборчиво]? [01:27:08] ROB: Так is-- Я на самом деле wondering-- является RandomInt предполагается чтобы быть номером от менее б? Мол, если это от 7 до 10, каковы возможности? 7, 8 и 9, или 7, 8, 9, 10? DAVIN: я забываю. На проблемной set-- [01:27:19] ROB: Я думаю, что это 7, 8, 9. [01:27:20] DAVIN: Она прямо говорит своему включительно и один эксклюзивной. [01:27:22] ROB: Да. [01:27:23] DAVIN: Но я don't-- Я не-- [01:27:23] ROB: Так что я думаю, что это является не включен, и в этом случае, есть равно Вероятность 7, 8, и 9. Там нет вероятность 10. DAVIN: Да? СТУДЕНТ: У меня есть вопрос. Мы хотим, чтобы определить функцию возвращает не одно значение, но массив. Тогда что будет Синтаксис после возвращения? [01:27:41] DAVIN: ОК, так, то вы would-- после возвращения? Так, скажем, вы объявили массив где-то там. Тогда вам просто вернется Имя массива. [01:27:49] СТУДЕНТ: ОК, спасибо. Тогда просто вернуться с a-- DAVIN: Ой, подождите, очень жаль. Вопрос в том, как Вы возвращать массив. [01:27:54] ROB: Хотя это не может быть массив, объявленный в стеке или что-нибудь подобное. Это должно было бы быть что-то malloced, потому таНос как вы обойти автоматическое распределение памяти. [01:28:01] DAVIN: Да. ROB: Как вам обойти локальной области видимости. [01:28:09] DAVIN: Но вы бы просто вернуть его name-- [01:28:11] СТУДЕНТ: [неразборчиво] это не один значение, например, два числа, так [Неразборчиво]. [01:28:18] DAVIN: Вы не можете вернуться несколько число. Вы не можете, как, return-- [01:28:20] СТУДЕНТ: Я говорил о возвращении массив или что-то подобное. [01:28:23] DAVIN: Да, так что вопрос я могу возвращать несколько значений. Вы не можете возвращать несколько значений. Вы не можете, как, вернуть то вернуться б или что-то подобное. Потому что после того, как вы вернетесь, вас вернуться из функции. И то функция будет сделано, и как Роб сказал, находится в стеке. [01:28:35] Так что все, что память просто получает возвращается к компьютеру. Все забывается, в основном. Так что, если вы хотите, чтобы вернуться кратное значения, вы должны вернуть массив, И то, как вы делаете это mallocing. А потом вы вернетесь х подобное. В принципе, вы просто возвращает имя. И когда вы вернетесь что-то вроде этого, вы на самом деле не возвращения значения. [01:28:53] Так скажем, у вас сохраняется значения в массиве. Ты на самом деле не возвращения этих ценностей. Мол, если бы я вернулся в Int, я действительно возвращаются копии значений. Но если бы я должен был вернуться что-то вроде этого, Я возвращаюсь ссылку для этих значений. Так я возвращаюсь, в основном, Адрес памяти для значений. Имеет ли это смысл? СТУДЕНТ: Да. DAVIN: Ницца. Да? [01:29:13] СТУДЕНТ: Когда ты используя drand здесь, Вы должны поставить srand до этого? [01:29:17] DAVIN: Нет, нет, я так не думаю. [01:29:20] ROB: Да, так что у вас есть сказать что-нибудь о srand? По умолчанию вам никогда не говорил srand вообще, это просто сделать srand нуль. Так drand по собственной работы будет. И он будет автоматически семян с текущее время, является то, что он использует. DAVIN: Да? СТУДЕНТ: Нравится ли вам [неразборчиво] с номерами? DAVIN: Да, можно. СТУДЕНТ: Таким образом, вы могли сказать, как, в 4 раза 2. Дело в том, что вы не можете предположить, то интервал составляет четыре байта. Only-- [01:29:51] DAVIN: Я имею в виду, для викторины можно. [Смеется] [01:29:54] ROB: М-м, нет. DAVIN: Да, да, вы можете. Если они спрашивают вас, как большой интервал является, Вы не можете быть, как, четыре или восемь. ROB: О, так что если Вопрос в том, в частности, как, если это проблема кодирования, Вы должны сказать размер междунар. Если это стол, или он говорит, сколько байт, Вы не должны заполнять размера целых чисел. [01:30:08] СТУДЕНТЫ: [Смеется] [01:30:18] DAVIN: справа, так почему же Размер междунар важной здесь? Так как, если мы собираемся 32-бит процессор или что-то подобное, то будет четыре байта. Но на некоторые из новых материал, это может быть что? Это может быть восемь, не так ли? Так this-- если вы просто трудно код из четырех, затем на некоторых машинах, он будет работать. Некоторые машины, он не будет работать. Но если на викторине мы находимся как насколько большой интервал? Положите четыре. ROB: справа. DAVIN: Да? СТУДЕНТ: Так потому что мы объявлении [Неразборчиво] внутри функции, мы должны поставить 3 внутри этой функции? Или мы можем использовать это вне? DAVIN: Вы можете использовать его вне этой функции. Так он просит бесплатно. [01:30:49] СТУДЕНТ: терять где [неразборчиво]. [01:30:51] ROB: О, бесплатно не happen-- это часть магии таНос является то, что вы не ограничивается локальной области видимости. Вы имеете полный контроль над как долго ваши переменные жить. Так мы называем таНос здесь, это могло бы быть полностью отдельная функция. Это может быть через 10 часов что мы, наконец, звонить бесплатно. [01:31:08] DAVIN: Так, например, как, пара недель спустя, когда вы, наконец, сделать свой словарь Speller psets, вы собираетесь иметь некоторую функцию, которая создает тонн узлов. Таким образом, вы mallocing тонн узлов в этой функции. А потом в отдельная функция, вы захочет освободить все эти узлы. Таким образом, вы можете буквально просто переходят на освободить указатель, так что адрес памяти чтобы то, что вы malloced. И что будет хорошо. Вам не нужно, чтобы освободить, как, в той же самой функции. Да? [01:31:30] СТУДЕНТ: Так таНос Переменная [неразборчиво] за пределами? Это то, что вы говорите? DAVIN: Подождите, что? Извините. [01:31:38] СТУДЕНТ: Если переменная таНос может быть свободным в любом месте в коде, то они могут быть доступны в любом месте в коде? Вы можете держать их местный? [01:31:45] DAVIN: О, она спросила, как переменная, like-- [01:31:51] ROB: Таким образом, вы все еще должны есть какие-то справки в блоке Malloc в памяти. Так вот, мы возвращаемся х. СТУДЕНТ: О. ROB: Если мы не вернулись х здесь, и это было просто пустота, то мы не имели бы доступа к указатель, который был malloced, и это утечка памяти. [01:32:05] СТУДЕНТ: ОК. [01:32:06] DAVIN: Так как, скажем, вас есть это, как, прямо здесь. ROB: Нет. DAVIN: В моей основной функции, я не могу просто назвать эту х и быть, как, в порядке, в этой функции, я сделал это. [01:32:14] ROB: справа. [01:32:14] DAVIN: Так что я буду называть х в, как, основной или что-то подобное. Вы не можете сделать это. Вы собираетесь что-то вернуть. Но то, что вы собираетесь вернуться? Вы собираетесь вернуться адрес памяти. И потому, что вы вернетесь на память адрес, который может быть доступен в других странах. Любые другие вопросы? Да? [01:32:28] СТУДЕНТ: Является ли данная функция быть проверка на [неразборчиво]? [01:32:33] DAVIN: Почему я не нужно делать, что? СТУДЕНТ: [неразборчиво]. DAVIN: Потому что ты не mallocing ничего. Так что это не-- да, это не нравится струнный с. Это указатель куда-то. Это всего лишь значения. СТУДЕНТ: ОК. DAVIN: Да. Что-нибудь еще? ROB: Да? СТУДЕНТ: Но когда вы [неразборчиво]? [01:32:55] ROB: Так что для того, чтобы освободить памяти, мы бы сказали, здесь. Так х наша указатель блок памяти. Мы бесплатно этот указатель. И мы не обязательно делать это здесь. Мы можем сделать это в любом месте. Но вы только звонить бесплатно на что-то, что Malloc отдачу. Так таНос, здесь, возвращается то, что в настоящее время хранится в х. Таким образом, мы можем назвать свободным от х. Любые последние вопросы? [01:33:20] DAVIN: Любые последние вопросы? Да? [01:33:22] СТУДЕНТ: К сожалению, вы можете заново объяснять почему вы бы освободить там? Почему [неразборчиво]? [01:33:26] DAVIN: Для сюда? [01:33:27] СТУДЕНТ: Да, как сразу после. DAVIN: Вы, наверное, не хочу бесплатно здесь. ROB: Вы, наверное, не будет. DAVIN: Да, это бы ничего не делать. Это будет, как, создать памяти, делать такие вещи, к нему, , а затем немедленно забудьте об этом, да. [01:33:37] ROB: Но мы могли бы сделать, как, здесь по какой-то причине. Мы могли бы сказать, INT звезду у равен обратный массив. У кое с у, возможно распечатать содержимое. И вот, наконец, мы сделали. Мы можем освободить у. СТУДЕНТ: [неразборчиво]. DAVIN: Должен ли я прокрутите вниз? Спасибо. ROB: Nice. [01:34:02] DAVIN: ОК, вот оно что. ROB: Ладно, хорошо. Удачи. [01:34:05] DAVIN: Если у вас есть вопросы, напишите нам. Удачи.