ANDI Пэн: Ладно. Добро пожаловать на четвертой неделе раздела. Прекрасный день здесь, в Нью-Хейвене так что я действительно думаю, что разреженный рассеяние детей, которые присоединился ко мне для секции сегодня, спасибо. Так быстро, просто, прежде чем мы начать, повестку дня на сегодняшний день. Мы собираемся, чтобы входить через Несколько кратких объявлений. У нас есть действительно дурацкие расписание подойдя в ближайшие две недели или так, чтобы мы собираемся перейти на что. Во-вторых, я знаю, любимый topic-- каждого Я уверен, что это ваш ум растаял на лекции, не волнуйтесь, Я до сих пор вроде не получить его. Все нормально. Это была шутка. Я на самом деле получить его. Но я уверен, что сделать вы, ребята, получите его, тоже. Итак, мы собираемся провести действительно, действительно хорошее количество времени говорить о указателя сегодня. Как вы можете видеть, Кенди Речь идет огромный сегодня. Мы на самом деле происходит, чтобы сохранить that-- да, это верно. Продолжайте принимать конфеты. Я собираюсь передать их вокруг прямо сейчас. Не беспокойся. Мы собираемся, чтобы действительно попробовать держать людей уровень сахара в крови , потому что, что мозг будет гореть сегодня некоторые кислорода, потому что указатели действительно, действительно трудно. Тогда мы будем говорить о управление памятью, которая является своего рода в той же сфере. И мы будем двигаться на перенаправление и файла I / O, которая только синтаксис, хороший вещи, которые мы должны говорить об этом. А потом, наконец, я собирается попробовать еще раз чтобы оставить, как 10, 15 минут для pset4. Вот из-за в течение нескольких дней, так что мы собирается действительно вид вам некоторые полезные советы, если вас уже началась на что. Круто. ХОРОШО. Таким образом, некоторые объявления для этого предстоящей неделе. Классификация. Я на самом деле не знаю, в эта точка, как многие из вас Ребята на самом деле в моем section-- ты в порядке там? ХОРОШО. Но, для тех из вас которые находятся в моей секции, только пару комментирует классификации. Во-первых, действительно хорошая работа комментирования. Те из вас, кто не комментарий, вы знаете, кто вы есть, потому что вас, вероятно, есть некоторые моменты в стиле dinged этой неделе. Просто убедитесь, что во всех ваших Программы добавить пару замечаний. Действительно, стиль очень легко получить правильные точки как сферы. Так что для нас, просто убедитесь, Убедитесь, что вы вроде добавления краткое описание во всей Ваши программы о том, что вы делаете. Secondly-- это огромная проблема для много из ТА в прошлом week-- поэтому убедитесь, что вы загружаете в правильный папка с правильно названные программы. И причина, почему мы просим это потому что мы, в ходе аттестации, на самом деле запустить скрипт на вашем код, который загружает автоматически все ваши psets, работает корректности испытания на всех из них, а затем загружать свои результаты непосредственно в зачетную книжку. Тем не менее, в любой момент, если вам имени программу неправильно, это вворачивает всей Программа для всех. И так, на законных основаниях, этот красивый сценарий что мы написали, что делает Все это для нас, полностью сбой, если у вас нет ваша программа правильно назван. Так что просто загрузить на правильный Папка, которые им правильно назван, и тогда жизнь хороша. Я получаю ваши psets назад вы, ребята, в более ранние потому что я получаю до степени их быстро. Да. ХОРОШО. А также мы будем говорить about-- Йельского имеет действительно, действительно дурацкий график в следующих двух недель. Так что те из вас, ребята, в Гарвард, это не относится. Но для нас прекрасные дети в Йельском университете у нас есть то, что называется падение break-- извините, Harvard-- где у нас есть пять выходных дней школы. И в то время как это прекрасно, это вид портит нашу Pset ритм потому psets обусловлены четверг, по пятницам. И поэтому, если мы здесь не Четверг, пятницам, мы не может иметь работу для вас, ребята из-за четверг, пятница. Итак, что мы собираемся сделать is-- мы как 99% уверены, что это то, что происходит, могут быть некоторые изменить, но я думаю, что это subtle-- что мы собираемся have-- этой неделе нормально. Итак, мы имеем наш раздел По вторникам с последующим офисных часов в остальной части недели а затем pset4 связано в пятницу. Тогда, как вы, ребята, все знают, а Я напомнил вам, ребята, на прошлой неделе, у нас есть наш тест 0 подойдя на среду. И так, будучи студентом себя, Я знаю, что очень немногие из вас Ребята на самом деле будет работать на pset5 два дня до викторины. Так что мы собираемся вероятно, в конечном итоге делают это, что в понедельник вечером, мы собираемся на самом деле, с 5:30 до 7:00, есть краткий обзор сессия по темам, покрыты. Непонятно, если это обзор сессию или Q & A. Это будет своего рода обзор Форма, в которой мы рассмотрим некоторые темы, имеющие отношение к вам, ребята. А потом в понедельник и вторник ночи этой недели с 8:00 до 11:00, мы будем иметь приемные часы. Эти часы работы, скорее вероятно, будет более просто войти, спросите ТАС ваши вопросы, касающиеся любые понятия вы путать о, и они вроде переходят с вами и обзор концепций для викторины. Викторина 0, если вы находитесь в Понедельник, среда раздел, будет в среду во время class-- в среду во время занятий. И потом, если вы находитесь в Вторник, четверг раздел, будет также во время занятий в четверг. Вы не можете выбрать какой вы пойти. Если вы в понедельник, среду, Вы должны пойти в среду. Если вы находитесь на вторник, четверг Вы должны пойти в четверг. Но тогда, что ночью, нам прекрасный персонал, будет есть гигантский викторины сортируя партию в которые мы получим ваши баллы обратно к вам та ночь. В какое время? Непонятно, кто знает, но это будет вернуться к вам в течение 24 часов так что вы, ребята, надеюсь, Есть замечания по пятницу. И тогда у нас действительно дурацкие неделю. Так pset5 является одним из тяжелые psets в году. Так извините ребята. То, что мы собираемся, чтобы попытаться сделать, мы будем иметь некоторые Реальная поддержка, что уик-энд. Потому что, как вы, ребята, можете видеть, PSET связано, прежде падения перерыва. Мы не имеем поддержку вы, ребята, во время осеннего перерыва и таким образом, мы действительно отчасти хочу фразу, как это, давайте покончим с этим, давайте работать очень, очень трудно эти ближайшие две недели, получить эту викторину, и добавить эти два psets сделали с И тогда вы, ребята, есть хороший расслабляющий семь дней не думая о CS. Так для того, чтобы что произойдет, мы, вероятно, будет двигаться мой раздел в воскресенье после обеда. Это будет снят поэтому нет заботы, если вы не можете придти. Но онлайн Съемки будут там и доступный так что вы, ребята, воскресенье, Понедельник, вторник, работать на pset5. А потом это падение не сломать и не CS, а затем мы пришли обратно и его обратно в молоть. Но это будет прекрасный неделе осеннего перерыва и мы действительно хотим, чтобы сделать его как стресс бесплатно для всех, как это возможно, которые Поэтому мы переехали PSET быть из-за до падения перерыва, а не после. Потому что я имею в виду it's--, я как бы чувствую, как это побеждает цель наличия срок после перерыва падения, если есть нет поддержки в любом случае во время осеннего перерыва. Так что это rather-- Я думаю, мы лучше сосредоточиться на нем в настоящее время. Кто-нибудь есть вопросы о том, что график? Все заблуждение? Да. АУДИТОРИЯ: У нас все еще есть лекция на 21? ANDI Пэн: Да. Так на 21-м, там будет лекция что в прямом эфире из Гарварда. Я не знаю, если Дэвид съемки это или если он на самом деле лекции, но это будет доступно онлайн для вас, ребята доступа. Так что убедитесь, что вы начертите час где-то осенью перерыва так что вы, ребята, можете поймать на этой лекции. Да? АУДИТОРИЯ: Да. Сожалею. Я получил здесь couple-- ANDI Пэн: Не беспокойтесь. Вот, возьми конфетку. АУДИТОРИЯ: Эй, я поймал это. Так что просто резюмировать, не завтра, но В среду после того, у нас есть тест. ANDI Пэн: Правильно. АУДИТОРИЯ: И это будет be-- что формат викторины? ANDI Пэн: О. Таким образом, мы отправить электронную почту, что охватывает все, что больше в глубину. Но, по сути, это просто покрывает Основные темы, которые уже покрыты в первой половине семестра. Мы будем иметь обзор сессий и вопрос и ответы, так что никаких забот об этом. Но мы будем над этим собирается тоже. АУДИТОРИЯ: Это будет, мы Приносим свои компьютеры и код there-- ANDI PENG: Нет Это будет вы, ребята, пишущие и отвечая на вопросы от руки. АУДИТОРИЯ: Ой. ANDI Пэн: Так мы дадим из практики и прочее так что вы, ребята, можете идти, возможно, назад и переписать Марио вручную только чтобы убедиться, что вы, ребята, идея, как это сделать. Потому что иногда, когда Вы пишете вручную вас забыть запятой и прочее и это очень плохо. АУДИТОРИЯ: Разве это не будет [неразборчиво]? Мол, вы получаете точка с запятой на your-- ANDI Пэн: да, и нет. Мы будем говорить более подробно о том, как макет викторины и как мы собираемся классе. Но по сути, просто знаю, что Общий формат будет вам ребята либо интерпретации code-- отвечая на основные вопросы. Если бы я попросил вас, что это библиотека? Вы, ребята, должны знать, что такое Библиотека делает и пишут, что вниз. Или можно сказать, написать программу, которая печатает Hello World на экране. Вы, ребята, будет писать, INT основной недействительными Printf привет мир запятой. Да. АУДИТОРИЯ: Так что не собирается чтобы быть где-нибудь [неразборчиво] Уровень сложности поставленной задачи? ANDI PENG: Нет Нет. Мы won't-- да. Написать полноту игра 15 в 20 минут, иди. Нет, это не будет, что. Нет. АУДИТОРИЯ: ОК. Так что это Среда. В течение этой недели мы также уже самая трудная проблема установить? ANDI PENG: Нет Таким образом, проблема из-за это установить за день до падения перерыва. Schedule-- электронной на самом деле отправить 20 минут назад относительно всего этого. Таким образом, вы, ребята, просто проверить почту. Это будет там. Да. Не беспокойся. Круто. Любые общие вопросы, касающиеся объявления, классификации, викторины, Прежде чем мы углубимся в правой указатели, которые будут потреблять большинство нашего времени раздела сегодня? Круто. Все в порядке. Так вы, ребята, все это смотреть lovely-- Я не знаю, что они это называют. Дело, где claymation взорвали себя, потому что это не используйте указатель правильно. Ну, ваша программа будет вероятно, взорвать себя, если вы не использовать указатели правильно, как хорошо. Так что мы собираемся сделать Убедитесь, что не произойдет. Сегодня мы собираемся сделать некоторые указатель удовольствие. Я собираюсь перейти на вещи так гладко, как я думаю, можно в небольшом времени. Но есть только так, чтобы покрыть что я действительно хочу вас ребята, если вы не понимаете, что-то, не просто дайте мне продолжать. Потому что, если вы не что-то понять, Вы, вероятно, не собирается понять, что я говорю, что после. Поэтому, пожалуйста, остановить меня и задать вопрос. Потому что это все рода снежков вместе. Как, указатели ведут в памяти свинца в других вещах. И так, если вы не понимаете, указатели, остановить меня, и мы с этим разберемся и жизнь будет в порядке. Круто. Так как многие из вас, ребята, в лекции, Когда Давид упоминается указатели, Ваши мозги вид превратился в желе? Да. Хорошо. Мы собираемся, чтобы попытаться де-желе мозги сегодня. Мы собираемся, чтобы действительно систематически пройти через то, что точно указатель, то, что он делает, и как мы их используем. Таким образом, все pointers-- так как правило, с переменным мы использовали при кодировании, как переменные, такие как целые числа или строки или плавает, все они по существу значение, присвоенное им а также адрес указывая на это значение. Так что я собираюсь сделать это прямо сейчас. Мы почти не мел, но это нормально. Так, например, обычно способ, что мы использует переменных мы создать Имя переменной типа INT, давайте просто скажи. Так вот у нас есть INT х, и мы инициализации, что Int 50. Так вот в этом блоке памяти на наш компьютеры мы сохранили ряд 50. Так где указатели вступают в игру это что ваш компьютер в том: как, вот, физически на жестком диске в памяти моей computer-- он имеет только конечное количество памяти. Вы не можете просто держать хранения вещей на вершине вещей на вершине вещи и их всех. Таким образом, путь, который мы динамически выделить памяти, чтобы иметь возможность хранить то, что мы хотим и доступ к нему, является наличие указателей. Итак, представьте, в памяти, правильно. Если это ваш ОЗУ компьютер, у вас есть эти маленькие кусочки или блоков или байт памяти в which-- это лишь немного блоки, которые были выделены на жесткий диск или ОЗУ вашего компьютера, и в каждом из этих блоков Вы можете хранить разные вещи. Так, например, один Массив в данном примере Здесь один байт, который состоящая из восьми бит. Количество изменения в зависимости от Операционная система компьютера. Например, как многие из вас слышал 32-бит против 64-битных операционных Системы? В точку. Таким образом, все, что говорит является то, что в memory-- что путь, что ваш компьютер управляет памятью отличается. Именно поэтому это действительно Важно понимать, Поэтому функции памяти, а сам чем обратить внимание на цифры. Таким образом, мы действительно не заботятся насколько большой этот массив есть, мы просто должны заботиться о насколько большой нам нужен Int быть, как большая нам нужна строка быть, как большая указатель? ХОРОШО. Таким образом, это будет много тяжелых, плотная информация. Я собираюсь дать вам парням пара комический моменты здесь. Вы, ребята, все должны быть в состоянии чтобы понять это сейчас. Потому что мы знаем, что указатели адреса, и те, отличаются от переменных. ХОРОШО. Круто. CS шутки лучший, да? Таким образом, путь, который мы идем о создании указатель очень особый вид синтаксиса. Как создать любое тип переменной, это будет конкретная Синтаксис мы используем, чтобы создать его. Поэтому, когда объявление любого указатель, указатель просто essentially-- Я думаю, что важно, часть указателей что в то время как переменная и значение, и адрес, указатель является адресом. Его значение является адресом. Так что это адрес, сохраненный по другому адресу. Если это имеет смысл. Мы пойдем по этому более подробно, но это общая форма из why--, как принтер будет сохранен. Таким образом, путь, который вы создаете указатель это делать независимо от типа данных что указатель будет чтобы быть ссылки и then-- с star--, а затем имя указателя. Так вот, если мы хотим создать указатель, который указал на целое число, и мы хотел имя указателя, чтобы быть х, мы хотели бы сделать Int звезд х. Да? АУДИТОРИЯ: И так, если следующая строка вам сделать Int х, будет INT звезда х указать местоположение х вы определяете потом? ANDI Пэн: Действительно хороший вопрос. Мы пойдем по этому ин пара скользит позже. Да. А потом то же самое с уголь и одно и то же плавает. Просто знаю, что на данный момент мы создали указатель, мы на самом деле не установлен это равным еще ничего. Мы на самом деле не ссылаться ее. То же самое здесь, когда вы создаете переменную, Вы создали имя переменной, Вы на самом деле не установить значение к нему. То же самое здесь. ХОРОШО. Так как мы устанавливаем значения указателей? Это, ссылаясь и разыменования. Таким образом, путь, который мы можем ссылаться на varia-- указатель, в сущности мы возвращаемся адрес в памяти из которых переменная хранится. Так что, если у меня был pointer-- Я нарисую в этот раз мы перейдем к следующему слайду, но точно знаю, что, по сути, и-- амперсанд и все, что переменная-- делает это сказать вам адрес где-то хранится. И разыменования является противоположностью того, что, который является только звезды. Звезда просто дает вам реальное Данные, хранящиеся по этому адресу. Таким образом, одна дает вам адрес хранятся по адресу, другой дает вам реальное Значение, сохраненное по адресу. Таким образом, два из них дают Вы разные вещи. Еще раз, слайды не все интернет-так никакие заботы если вы, ребята, не можете копировать это вниз во времени. Итак, давайте взглянем в этом примере здесь. Таким образом, мы получили гиганта Массив памяти здесь, верно? Где мы просто должны блоков памяти, или байт памяти, в котором мы можем хранить разные вещи. Давайте просто скажем, они являются адрес указывает на память. Так в любое время у вас есть - см 0x, все, что говорит вам, что Это шестнадцатеричные цифры. Как вы, ребята, все знают, цифры могут быть основаны на различных основаниях. База 10, как мы обычно интерпретировать цифры. Там также основание 2, который является двоичным. И в этом случае, шестнадцатеричное основание 16. Это просто другой способ сказать от нуля до 10-- или нуля до девяти а затем и А, В, С, D, E, F. Также ссылается разные номера. Дэвид подошел это в лекции кратко. Если вы, ребята, путают, просто Google его. Там на самом деле простых способов узнать то, что шестнадцатеричная цифра является. Все, что на самом деле отношение сейчас для вас ребята знают, что шестнадцатеричные цифры в C говорит, что, как правило, you-- говорит вам, что это указатель. Или вот адрес. Таким образом, в этом примере здесь, INT х равен 5. Мы создании integer-- извините, переменная типа целое число, а мы его инициализации до 5. Так вот на нашей доске памяти, мы можем видеть, что х по адресу 0x0 и значение, которое вы имеете хранятся внутри это 5. Это должно иметь смысл для всех, не так ли? ХОРОШО. И тогда то, что мы сделали во второй строке кода является то, что мы создали указатель типа Int. Это то, что INT звезда указатель делает. И, что равняется, что амперсанд х это дает вам адрес что-то. Так адресу х в этот пример 0x0. И так, что адрес хранятся в этом указателя. Имеет ли это смысл для всех? Так думать о this-- думать о pointers-- здесь в Йельском университете у нас есть система PO BOX где каждый студент имеет рассылки адрес, где вы можете пойти в подвале LW и вы можете просто пойти и захватить все, что нужно с этого адреса. То же самое происходит Здесь в компьютере. Вы должны эти байты памяти, которые Вы можете хранить информацию в, но для того, чтобы знать, какие фрагменты информации матч до того, что вы пытаетесь найти и где вы должны указатель, который говорит вам, как туда идти. Так, например, для меня, мой абонентский ящик, У меня есть конкретные пятизначный номер. Вот мой адрес. Так что я могу физически пойти в памяти, Я могу посмотреть по адресу, Я могу пойти в этом абонентский ящик и доступ к данным внутри. Имеет ли это смысл для всех Ваш компьютер существу делает ту же самую вещь. Таким образом, все указатель делает то, что это просто создание памяти и его данные память на самом деле адрес что-то еще. Затем вы можете пойти и найти, что. Все хорошо? Все хорошо со мной до сих пор? ХОРОШО. Круто. Все в порядке. Таким образом, практически то же самое, как раньше. Таким образом, мы, во-первых, переменная называется х, в которых case-- Я собираюсь изменить это значение на 5. Давайте просто скажем, адрес это в памяти 0x0. 00. Отлично. Итак, на нашем секунду строка кода, мы собирается создать указатель называется указатель PTR. И адрес, что, давайте просто сказать, что это 0x01 в памяти. И мы на самом деле хотим, чтобы store-- амперсанд х дает вам адрес, что х было. И адрес был х 0x00. Так что это в настоящее время указатель на самом деле имеет адрес хранится в виде его стоимости, что х было. Все со мной до сих пор? Круто. А потом, так, что мы бы скопировать, что если мы бы объявить и инициализировать другой блок памяти типа Int. Правильно? Это было бы Int. Это можно было бы назвать копией. И вы собираетесь get-- так звезда указатель дает вам фактические данные из этого адреса. Амперсанд дает вам адрес, звезда дает вам данные. Так что данные на указатель. Этот указатель указывает на 5. И поэтому эта функция here-- звезду pointer-- идет, получает все, что в этот блок и сохраняет его здесь. Все ясно, как это произошло? Таким образом, два оператора прямо there-- амперсанд и star-- просто делать разные вещи при использовании на указатели. Складывается вам адрес, один получает вас фактическое значение. Поэтому убедитесь, что, когда вы, ребята, кодирование, что вы не путайте два потому что они сильно отличаются. Здесь у нас есть хороший пример 0x01. Это действительно хороший небольшое количество, чтобы помнить. В вашем компьютере фактического Вы будете иметь гигантская задница число, то это не приятно, не приятно. Это будет некоторое значение мусора. И так на самом деле происходит, чтобы, действительно испортить ваши программы. Это очень важно Прямо сейчас, что мы имеем основы вниз для why-- т.п., что физически происходит, когда вы работаете эти блоки кода. Everyone-- да? АУДИТОРИЯ: Так INT х равен INT копию? ANDI Пэн: Нет, потому что, в этом случае, Int x-- значение x-- равна 5, верно? А потом INT копию равна 5. Так что, если вы были приравнять их к друг с другом, потому что они целые, да, они будут оценивать, чтобы правда. Но если бы они были строками в памяти, как тот, который сделал Давид во примеру, это отличается тем, что они ссылки адреса места в памяти и они будут приравнивать к ложным. Так вот это было бы верно, потому что вы непосредственно сравнивая values-- integers-- но в других вы ссылаетесь. Поскольку строка в массиве, и all-- мы поговорим об этом later-- но массив по существу только указатель на кучу символов в памяти. Так что те, немного отличаются. Но в этом случае, да, вы могли бы сделать это. АУДИТОРИЯ: Можете ли вы объяснить адрес копии? ANDI Пэн: Да. Так вот я просто-- не заполнить значения но это всего лишь некоторые случайные другие Значение мусор, который мы не волнует. Потому что как только вы начинаете программа Вы понимаете, что мы на самом деле не действительно волнует то, что фактические адреса, мы просто должны знать, что по адресам. Да. АУДИТОРИЯ: Звезда рядом с INT на Вторая линия, это другое than-- ANDI Пэн: Да. АУДИТОРИЯ: --the Разыменование и ссылки звезду? ANDI Пэн: Да. Так авторов C-- кто решил написать о C-- язык не очень умный. Они были не очень умные, пытаясь чтобы выяснить, почему мы должны делать это. Если бы это было мне, я бы, безусловно, использовать два разных персонажей. Но они решили использовать тот же один. Таким образом, звезда после Int, что говорит компьютер что вы собираетесь создать указатель. Но если вы пытаетесь разыменования something-- другими словами, перейти по адресу и потяните данные из somewhere-- звезда используется по-разному. Таким образом, вы, ребята, просто быть осторожным не портя два применения. Круто. Да? АУДИТОРИЯ: Так что просто повторять убедитесь, что я following-- ANDI Пэн: совершенно нормально. АУДИТОРИЯ: --in левой стороне что слайд, мы делаем то, что нам известно. Мы заявляем, целое [Неразборчиво], что равны 5. ANDI Пэн: Да. АУДИТОРИЯ: Да. И тогда у нас есть INT звезд вещь и который говорит, что, хорошо, вроде как мы заявил целое, теперь мы объявлении указателя. ANDI Пэн: Правильно. Верный. АУДИТОРИЯ: Право? И наша указатель PTR. ANDI Пэн: Да. Название указателя PTR. Указатель. АУДИТОРИЯ: А потом равна NX, что просто говорит C что он хочет получить доступ к значению в число x-- значение, число х был назначен. ANDI Пэн: Будьте осторожны потому что на самом деле амперсанд х говорит you-- компьютер, который хочу, чтобы тянуть адрес, что х. Так амперсанд дает вам адрес, звезда дает вам значение. АУДИТОРИЯ: Итак, мы хотим адрес. Скажем х был at-- ANDI Пэн: Мы на самом деле знаю, что х, верно? Потому что мы знаем, что х was-- Я выдумываю, но давайте просто сказать произвольно, это было 0x00. Правильно? Итак, мы знаем, что адрес 0x00, и поэтому, когда мы идем и амперсанд х, мы знаем, что следует оценить на 0x00. Именно поэтому мы сохранили, что в качестве значения указателя нашей. Имеет ли это смысл? АУДИТОРИЯ: Да. И экземпляр идет в разыменовывания ptr-- ANDI Пэн: Право. АУДИТОРИЯ: --which является указатель, что мы заявил, что говорит нам о адрес целочисленного х. ANDI Пэн: Да. АУДИТОРИЯ: И в этом один случай, звезда PTR является равным значению х, которая равна 5. ANDI Пэн: Правильно. АУДИТОРИЯ: Прохладный. И это простой способ, чтобы получить что или, что только way-- ANDI Пэн: Так что сейчас это кажется, не очень логично для нас провести все это время делать это супер сложная вещь, когда все, что мы сделали, просто создать два целые со значением 5, верно? Это не имеет смысла. Но как только мы пойдем по выделение памяти и-- мы будем перейти почему это может быть удобная и полезная в дальнейшем. Поверьте мне, когда я говорю, что мы не просто создать эти произвольные функции для вас ребята, чтобы узнать, потому что мы пытаются возиться с вами. Там на самом деле использует для всех из них вещи и мы будем говорить о них. АУДИТОРИЯ: Высокий. ANDI Пэн: Да. АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Хороший вопрос. АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Это не так. Это действительно не так. АУДИТОРИЯ: --two переменные что также равно [неразборчиво]. ХОРОШО. ANDI Пэн: Да. ХОРОШО. Прежде чем я перейду, это все понятно? Я знаю, Тейлор, вы получили в немного поздно. Это нормально. Это онлайн. Вы будете смотреть первые 20 минут и вы будете все хорошо. ХОРОШО. Круто. Все в порядке. Так что это, по существу, добро из похоже, что мы только что сделали. Это просто в графическом виде. Если бы вы были, чтобы отслеживать, что только что произошло, INT х равен 5, все, что мы сделали в этот момент создать переменную с именем х типа Int. Мы собираемся хранить Значение 5 внутри него. Там нет указателя, потому что мы не имеем на самом деле создал указатель еще, верно? И тогда в следующий линия, INT звезда указатель, вот где мы на самом деле физически создания указатель и мы устанавливаем, что равно, или ссылок указатель, чтобы амперсанд х. Который является, где, где в памяти это случилось быть. Я на самом деле не беспокоить составляя значение в этот раз. Но в этом случае, что точка Вы были бы равны, что. А потом там, звезда Указатель является разыменования. Вот где мы потянув информацию. Так что значение в точке х на самом деле будет равна 35. Таким образом, на данный момент, мы, по существу просто переинициализированы х до 35 не касаясь х. Просто через указатель который был направлен на х, мы можем на самом деле изменить то, что было х. Я собираюсь сделать это, как хорошо. Так вот, мы создали некоторые случайные адрес здесь. Давайте просто скажем, 0x00 снова. Давайте просто скажем, что это адрес. И мы создали целое число имени х и значение Я возложены на него 5. Во второй строке, INT pointer-- так теперь мы получил эту вещь второй здесь называется pointer-- и мы собираемся, целью которых давайте просто скажем, это какой-то другой адрес оперативное запоминающее. Итак, мы собираемся, чтобы установить это равно все, что было. И этот указатель будет указывают на значения х И потом, если мы меняем the-- если мы делаем звезд указатель, что происходит в ценность нашей указателя. В этом случае, это будет отслеживать Эта стрелка к этому значению х и это будет изменить его на 35 лет. Эффективно, мы просто изменили х, не касаясь х. Через просто ссылающихся указателей, мы можем пойти и изменить значение х. Имеет ли это смысл? Таким образом, в этом случае, мы можем на самом деле переименовать и повторно изменяет и переназначить значения к вещам, которые мы не на самом деле сделать сами. Имеет ли это смысл для всех? Круто. ХОРОШО. Так комплекс графический здесь. Перейти построчно. По сути, просто сделать точный То же самое, что я только что сделал. Прежде, чем я продолжу, я действительно хотите просто сделать что все на самом деле ясно, на этом. Так здесь код, который у нас есть, Int А равен 3, б равен 4, с составляет 5. Таким образом, мы создали три целых числа названных а, б и в, что равны 3, 4 и 5. И тогда мы создаем три указателя которые указывают на каждой из этих переменных. И теперь мы собираемся перейти по существу что происходит, когда вы работаете на них. Так привлечь их. Возьмите лист paper-- я не знаете, если вы, ребята, все есть бумага, но те из вас, кто не, может быть, заимствовать из тех, кто делать. Возьмите листы бумаги и идти строка за строкой. И в каждой операции, что вы делаете, Я хочу, чтобы вы, ребята, на самом деле выписать что такое, б и в этой точке. И каковы адреса, каковы указатели, которые указывают на A, B и C в этот момент? И тогда, надеюсь, это будет своего рода шаг, вы, ребята с тем, как думать о указателей. Мы не собираемся идти через все из них. Может быть, я дам вам five-- как, в трех минутах. Начните с первого из них. Ой. Ой. АУДИТОРИЯ: Во второй строке, почему не звезда [неразборчиво] Переменная? ANDI Пэн: Помните, в Операторы, в первую неделю, мы говорили о том, как если вы плюс равно, что только означает равна плюс гр. В этом case-- так что это еще один способ, в котором звезда может быть использован. В дополнение к ссылки и заявил, указатели, Помните, что это также означает умножение. Таким образом, в данном случае, это бы просто быть равняется раз гр. Вот только, как отличаются способ написания, что. АУДИТОРИЯ: а равняется раз гр. ANDI Пэн: Да. АУДИТОРИЯ: Что значит, если он говорит амперсанда письмо? ANDI Пэн: амперсанд средства Вы собираетесь that-- вы собирается на месте указатель указывая и потянув адрес. Так амперсанд дает вам адрес, звезда дает фактическое значение там. АУДИТОРИЯ: Мы опираясь на одну строку? ANDI Пэн: Ты опираясь на одну строку. Так просто пойти на одну строку время и then-- вас не нужно беспокоиться о отделка целиком. Давайте попробуем пройти может быть, два, три линии и тогда мы будем созывать и закончить это. Это совершенно нормально, если вы, ребята, будут потеряны. Это действительно трудно концепции. Если вы, ребята, обеспокоены тем, что в классе идет как это, как Дэвид говорил, это не так. Мы достигнув Концептуальная пик сложности а затем он собирается быть наклонена вниз. Таким образом, вы, ребята, почти нет. У нас есть много конфет, чтобы получить вы, ребята, через горб. Я думаю, что в значительной степени после падения перерыв мы будем по горбу и жизнь будет в порядке снова. Так что не беспокойтесь на всех. Все в порядке. Я дам вам ребята 20 больше секунды, чтобы обернуть. ХОРОШО. Все в порядке. Давайте удар на это. Как вы, ребята, дайте мне ответы, Я просто хочу, чтобы вводить их в. И, надеюсь, we-- я могу? Я на самом деле не может ввести его в. Я нарисую его на доске. Так вот в этом первой линии у нас есть равна б звезды гр. Также Эллиот воспитывался действительно, действительно хорошая точка. Потому что я забыл, что в дополнение к два пути, мы можем использовать символ звезды, там на самом деле третий путь. Умножение. И так просто не запутаться, потому что что первый способ использования звезду. Это просто говорит компьютер что я собираюсь создать указатель. Второй способ, делая Звезда указателя, что говорит указатель, который вы хотите для доступа к данным в то указатель. И тогда, конечно, есть просто простое умножение между двумя числами, что говорит вам, что я хочу, чтобы умножить два. Таким образом, есть много способов мы можем использовать символ звезды. Не запутаться. Просто убедитесь, что вы, ребята, что понять, именно то, что все три из них делаем. Таким образом, в этой первой линии, А равно Б, умноженному на с. Итак, давайте через то, что является то, что это б, что С? И то, что указатель а, указатель на Б и указатель на C? Что это все равная? ХОРОШО. Таким образом, мы начинаем с равен 3, б равна 4, и с равна 5, верно? Таким образом, после этой первой линии, может кто-нибудь сказать мне, что это? Да. Не стесняйтесь, чтобы просто кричать ответы. 20. Хорошо. Что б? АУДИТОРИЯ: 4. ANDI Пэн: Что с? АУДИТОРИЯ: 5. ANDI Пэн: Ура. Хорошо. Что PA, PB, и компьютер? АУДИТОРИЯ: 000001 и 002? ANDI Пэн: Да. Так своего рода вопрос с подвохом но на самом деле не потому, что здесь я вытащил фактические воспоминания. Но, поскольку, для примера, мы не на самом деле знаю, что эти цифры, мы можем только сказать, амперсанд. Я даже не знаю, если я можно сделать амперсанд. Это like-- как вы это делаете? АУДИТОРИЯ: Как рисовать восьмерку. ANDI Пэн: Как и восемь. Как это. ХОРОШО. АУДИТОРИЯ: Бинго. ANDI Пэн: Убийство его. Так амперсанд а, вы можете просто сделать это. Потому что мы на самом деле не все равно, что значение, что есть, и это что-то долго Значение задницу в любом случае, мы используем только giong сказать амперсанд а. Тогда в чем PB? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Да. Круто. Все в порядке. Легко первая линия. Мы получили это. Указатели легко. Это нормально. Вторая линия. И так звезда равна такой же вещь, как сказав ни равняется раз гр. Это просто легкий способ написания. Таким образом, мы не пытаемся сделать точка или что-нибудь здесь. Так делается с первой линии. Что такое на второй линии после делать равняется раз гр? АУДИТОРИЯ: 100? ANDI Пэн: Это 100. Хорошо. Как насчет б? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Как насчет C? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: А как насчет указателей? Есть they-- то же самое, не так ли? ХОРОШО. Теперь третья строка. Немного сложнее. б равна звезд годовых. Может кто-то сказать мне, во-первых, что делает звезда годовых равны? АУДИТОРИЯ: Это значение что хранится в а. ANDI Пэн: Точно. И то, что это значение который хранится при? АУДИТОРИЯ: 100. ANDI Пэн: ОК. Так что бы быть после выполнение этой линии кода? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Что о б? АУДИТОРИЯ: 100. ANDI Пэн: Да. А потом все остальное в значительной степени неизменными, верно? Потому что мы не трогали его. Круто. Четвертая строка. Чуть сложнее. Так pc-- раз, шт является указателем что указывает на C-- равна годовых. Что такое? АУДИТОРИЯ: 100. ANDI Пэн: Что б? АУДИТОРИЯ: 100. ANDI Пэн: Что с? АУДИТОРИЯ: 5. ANDI Пэн: Что год? АУДИТОРИЯ: амперсанд а. ANDI Пэн: PB? АУДИТОРИЯ: Амперсанд б. ANDI Пэн: А сложно, что компьютер сейчас? АУДИТОРИЯ: амперсанд а. ANDI Пэн: Ура. Woo Hoo. Вы, ребята, видите? Это все в порядке. Это не слишком плохо. У нас есть больше конфет, если это еще не все Хорошо, но я думаю, что это все в порядке. И мы собираемся перейти на только один больше, прежде чем мы попали более твердые из них. Ответы меня здесь. По сути, знаю, что это просто как математика в этой точке. Если у вас есть простые уравнения как плюс B, A раз с, это легко сделать. И когда вы начинаете расширять на это, просто перейдите порядок операций. То же самое, как раньше. Следите, если ваш звезда, прежде чем что-то. Это говорит вам значение. Если у вас есть и до то, что говорит вам адрес. И вы должны назначить либо указатели или что значение. Итак, давайте по этому поводу последний очень быстро. Не в этот последний, извините. На самом деле, вы, ребята, можете выбрать. Какие из них вы, ребята, хотите, чтобы пойти более из оставшихся трех что мы имеем? Я не думаю, что мы можем просто сделать потому что мы не можем просто прыгнуть на линию. ХОРОШО. Вы, ребята, не имеют выбора, это всего лишь третий продлится один. Звезда шт равна б раз гр. АУДИТОРИЯ: Звезда PB? АУДИТОРИЯ: Звезда пб. ANDI Пэн: К сожалению? АУДИТОРИЯ: Звезда пб. ANDI Пэн: Звезда пб. О, мой плохой. Звезда PB равна б раз гр. Я собираюсь дать вам, ребята, 10 сек. Просто думать быстро. Это что у нас так Пока то, что происходит после того как мы выполнить эту пятую строчку тут? ХОРОШО. Что такое? АУДИТОРИЯ: 100. ANDI Пэн: 100. Что б сейчас? АУДИТОРИЯ: 500. ANDI Пэн: Хорошо. Хочет ли кто-нибудь объяснить, мне, почему это 500? Я не чувствую, что мы на самом деле никогда не прикоснулся б. Как нам удается изменить Значение б, не касаясь б? Да? АУДИТОРИЯ: Потому что звезда PB означает, что значение в pb-- ANDI Пэн: Точно. АУДИТОРИЯ: --which это б. ANDI Пэн: Точно. Так вот в нашей диаграмме, наша указатель PB фактически указывая на это право Здесь, который является реальным физическим б. И так, если вы идете и вы звезда Pb, это после вашего стрелку указателя и физически изменяя значение б. Так вот почему мы б изменен 500 фактически не касаясь б. И тогда все остальное остается же, потому что мы не трогайте. Вот б. Круто. А потом-- АУДИТОРИЯ: Я просто есть вопрос. ANDI Пэн: Да? АУДИТОРИЯ: С we've-- нет больше не амперсанд с, это значит амперсанд A перенаправить к тому же сейчас? ANDI Пэн: Да. Так-- АУДИТОРИЯ: Так стрелка вид только движется и-- ANDI Пэн: Так essentially-- АУДИТОРИЯ: --now мы не можем access-- ANDI Пэн: --когда мы разыменовать с on-- I подлог. Что это было? Третья строка? В-четвертых. Четвертая строка. Все, что мы делали, было, по сути, изменить эту стрелку и он указал на вместо. АУДИТОРИЯ: Поэтому мы не можем получить доступ к C больше. ANDI Пэн: Если у вас это точно Количество, можно получить доступ к его. Но нет. Мы не имеем указатель указывая на C больше. Я думаю, что если вы хотели повторно его открыть, вам будет создать еще указатель, который вновь указал на C или разыменовываются это и указал назад. Так, нет, так как прямо сейчас, три указатели, ни один из них не указывают на с. Все хорошо? Ответы онлайн. Не стесняйтесь, после раздела, перейти Последние два теста и сами. Те же концепции, просто немного сложнее. Просто следуйте по логике почему вещи разные вещи. И намек, указатели тема, что мы любим чтобы покрыть на викторинах, потому что они концептуально очень сложным. Так что я хотел бы предложить, что вы Ребята все пересмотреть этот график или сократить подобные концепции в это до вашего викторины на следующей неделе. АУДИТОРИЯ: Простите меня. ANDI Пэн: Да? АУДИТОРИЯ: [неразборчиво] Окончательный одно-- [неразборчиво]. ANDI Пэн: 50000? Мне нужно было, чтобы следовать его обратно. Но я думаю, что somewhere-- линию прежде, вы создали гигантскую значение гр. С равен этот гигантский вещь что в 100 раз 500. Нет. АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Да. 100 раз в 100, который является 10000. Какой 10000. Итак, вернемся туда вы умножения В и С. Таким образом, указатель, который указывает на В- что значение 500-- раз a-- АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Может быть, это не так. АУДИТОРИЯ: Нет, нет, это не так. [Неразборчиво] указатель на C теперь указывает на a-- ANDI Пэн: Да. Он прав. АУДИТОРИЯ: --Оно на его на А равно times-- это значение с. ANDI Пэн: Можете ли вы сказать, что немного немного громче, так что все может слышать вас? АУДИТОРИЯ: Так указатель в C теперь указывает к тому, что указатель б до точки , целью которых и до сих пор, но does-- они указывают на то же самое, что является а, верно? Значение а, тем не менее это были заново определены. И в начале, что вы сказав ни было ранее в 100 раз значение в точке В, который является 500. И так вот сколько это. 50000. Они вы переназначение, что то, что Пространство памяти в C is-- указатель на C указывает на которое является. Таким образом, вы переопределения быть 50000. ANDI Пэн: Она могла научить раздел для меня. В следующий раз это все твое. Вот. Вот еще конфеты для этого. Вы заслуживаете конфеты для этого. АУДИТОРИЯ: Я почти поймал, что. ANDI Пэн: Вы почти поймали, что. Все в порядке. Да. Но она была точно. Так что вам нужно сделать, это that-- я думаю, что мы должны следить за тем что указатели теперь указывая на разных значений. Таким образом, value-- сожалению, указатель C отремонтирована к. И так, что смещается все наши номера. И вот почему, когда вы получаете доступ к Значение хранится там, он отличается. Имеет ли это смысл? ХОРОШО. Круто. Все хорошо, прежде чем я двигаться дальше? АУДИТОРИЯ: Есть ли the--, когда вы собираетесь вниз строк в левой колонке, делает первая строка влияет на вторую строку а затем, как second--, это all-- ANDI Пэн: Да. Итак, представьте, что это код, где я только что ввели в равных б раз с, звезда равна с. Только представьте себе, что я просто побежал этот код и я не печатать, что все эти вещи были. Если бы я был просто напечатать первый что в верхней части, это было бы здесь. Если после того как я побежал все эти строки кода, то, что эти ценности должны быть в конце таковы. Так я на самом деле написал программу здесь. Я не сделал все умножение. Но только представьте. Так вот я просто есть Программа называется указатели. Я собираюсь увеличить, если вы guys-- ОК. Так я создал переменные а, Ь, с. Я установил их равными 3, 4 и 5, и У меня создали свои соответствующие указатели. А потом вот я только собираюсь распечатать что это такое. Итак, позвольте мне бежать, что. Вы, ребята, see-- дерьмо. Вижу, вы, ребята, как, б и те значения но их указатели этот гигант Значение мусор, который мы не заботимся о? Так что, если бы я был на самом деле подключить во всех умножения а затем перепечатать все это, выполнить будет из к тому, что, что находится на дне. Так что, если вы, ребята, хотите, чтобы поиграть с самом деле физически кодирования, вы, ребята, можете просто подключить все те, в. Код будет в Интернете, и тогда ваши Значения должны печататься на что потом. И тогда вы увидите, как указатель адреса фактически переведены. Таким образом, вы увидите, как адрес C фактически становится равным независимо от адреса было. И они будут соответствовать все что большое количество есть. Хороший вопрос. Все в порядке? Один последний звонок для вопросов. ХОРОШО. Все в порядке. Так что готовьтесь, чтобы ваш ум взорван немного немного больше. Массивы на самом деле всего указатели. Это все, что они есть. И помните, какие строки? Они также массивы. Итак, какие строки на самом деле? Они как указатели на начало гольца из более символов. Так что это только понятия, которые начинаются построить поверх друг друга. Так вот вам why-- Помнится, в лекции, Дэвид, когда он был, что сравнение ИНТ строки мама что-то, а затем другой строкой мама, и вы попробуйте приравнять два друг к другу, они дают вам различные значения. Это потому, что струны сами по себе не являются значениями. Все они являются адреса памяти char-- они являются массивами символов и массивов только указатели. Так, в сущности, когда Давид был comparing-- это нормально, если я стираю все это? Таким образом, в лекции, когда Давида была мама равна равна мама, нам кажется, что будет то же самое. Правильно? Но, в компьютере под капот, что на самом деле происходит является то, что эта строка, все, что является массивом. С ampersand-- или, извините, с нулевым терминатором в конце. Правильно? Обратные 0. Неправильный обратный слеш. Таким образом, все они were-- все эти две строки were-- являются массив размера четвереньках с письма мамы и мамы. Но то, что массивы на самом деле просто указатели на определенное место в памяти что говорит вам, чтобы начать свой массив. Таким образом, в этом случае, все это было просто некоторое значение мусора, некоторые случайные указатель. И все это было было другое значение мусора. Давайте просто скажем, 0x200. И поэтому, когда вы пытаетесь равно им две друг к другу, они оценивают ложь, потому что addresses-- указатели что они were-- были разные. В то время как это иначе, если вы пытаются сравнивать фактические целых чисел. Как, если вы хотите, чтобы compare-- в прошлом example-- Int А б, они будут оценивать истина, как сказал Эллиот потому что они были целые, которые были сохранены и вы оценке только значения. Здесь, потому что строки являются массивами и все массивы являются указателями, Вот почему они не равны друг другу. Так вроде запутанной, что графики. Но давайте просто себе представить. У нас создать массив размера 3 с индексом от 0 до 2-- 0, 1, 2 со значениями 1, 2, 3 и хранятся в них. Все массив действительно does-- здесь, давайте просто сказать, что я создания указатель в этом массиве, что это доступ к стоимости на Первый индекс этого массива. Так вот, было бы 0. Правильно? Понимает ли все, как что первая линия оценивать? Отлично. И поэтому, если вы хотите, чтобы инициализировать дополнительные значения после того, все, что мы делаем, переназначение. Так 0, 1, 2, 1. Таким образом, это указатель, который когда-то был указывая на здесь, все, что мы делаем движется вниз. Это то, что плюс 1 делает. И тогда мы можем поставить 2 есть. Если бы мы хотели, чтобы положить 3 в одном после, мы бы стереть этот указатель, Поместите 3 в там. Имеет ли это смысл все? Да. Разве у вас есть вопрос? АУДИТОРИЯ: Это [неразборчиво] у вопрос, я скажу это так или иначе. Я не думаю, что это на самом деле Вопрос но-- на английском языке, массив равен 1, имеет смысл. Мы, как, хорошо, во-первых. Но вещи 0 Индекс [Неразборчиво] массив равен 0 для указания первого места. ANDI Пэн: Да. Поэтому на самом деле то, что я делаю здесь Я не обращается первый индекс. Все, что я doing-- поэтому, прежде всего, скажи мне, что же звезда массив делать? Что звездой перед указателем делать? АУДИТОРИЯ: Это указывает на указатель. Что ты объявлении указателя. Это de-- ANDI Пэн: Это разыменовывает что означает он идет и на самом деле получает значение. Правильно? Таким образом, в этом случае, вы хотите, чтобы получить значение здесь и установить, что: 1. Да? Так что я не actually-- я не действительно заботятся об индексе этого, все, что я делаю, это просто повторяя вниз перемещая свой указатель вниз массива. А потом в конце концов я должны остановить его, верно? И то, я останавливаюсь когда я ударил, в случае строки, нуль терминатора. Я знаю, о, если бы я ударил back-- если я вижу, Обратная косая черта 0, я знаю, что я сделал с этим и я знаю, что я могу просто остановить перебор. Действительно хороший вопрос. И мы действительно идти дальше в глубине в этом на следующей неделе потому что кусок, который собирается привлекать много использования указателей. Но точно знаю, что сейчас, это просто другой more-- это просто другой способ для компьютер, чтобы написать, по сути, то, что мы делали. Как сказал Давид в лекции, так что мы доступ массив просто делая Массив 0, кронштейн 0, если мы просто хотел доступ первое значение. Все компьютер делает превращается что в том, что и итерации себя. Таким образом, мы называем это синтаксический сахар, который является просто причудливый способ сказать удобный способы нас, зная, как программировать. Но компьютер внизу, что он делает, это на самом деле просто имея указатель, который корректировки. Но способ, которым мы написать, потому что это легче для нас думать о вещах, в плане ящики и как двигаться вниз коробки, является наличие скобки. К сожалению, это было действительно, действительно плохо но-- да. АУДИТОРИЯ: Так как бы сравнить две строки чтобы увидеть, если они равны друг другу? ANDI Пэн: Так Давид писал эта программа в лекции так что я просто собираюсь идти более быстро и кратко. Как вы бы сделать это является то, что вы на самом деле должны пойти и сравнить addresses-- или значения получены из указателей. Так что помните, как вам получить здесь значение? Я не заботятся о адрес здесь. Как я на самом деле получить значение то, что здесь? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Точно. Таким образом, вы сравнить звезду здесь по сравнению с звездой здесь. Есть те, равны. И тогда вы идете вниз. Есть звезда здесь и звезда здесь равны? ХОРОШО. Они равны. И вы просто продолжать идти вниз пока вы не попали в конец обоих. И если все они равны, то Вы знаете, ваша строка равна. И на самом деле С имеет функция, написанная называется Строка Комп который на самом деле просто делает это для вас, чтобы вы не ' должны написать его самостоятельно. Да? АУДИТОРИЯ: Я думаю, что в лекции когда мы сделайте сравнивать. Мы действительно не нужен Счетчик, как пи, верно? ANDI Пэн: Вы не потому что мы действительно не заботятся сколько коробок мы обрабатывется. Все мы заботимся, что мы собираемся продолжать идти, пока я не знаю, чтобы остановиться. И вы знаете, чтобы остановить, когда есть своего рода указание что вы находитесь на нулевой символ. Да. Так-- АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Да. Таким образом, в случае сравнения струны, я действительно не равно, как много писем are-- Мне нужно сравнить если они истинными или ложными, если они равны друг другу. Я не волнует, как много писем в каждом из них, верно? Я просто все равно, что это матчи с этим и одной после матчей и один за соответствует весь путь до конца. Правильно? Имеет ли это смысл? Так что я на самом деле не волнует, как много писем, Я просто все равно, что все письма совпадение. Да. ХОРОШО. Могу ли я перейти от этого? Отлично. Мы бежим чуть ли не на раз так я буду просто позволит вам ребята кратко смотреть на это. Запустите его в свой ID, если вы, ребята, интересно. И вы, ребята, можете увидеть, что это будет распечатать. ХОРОШО. Так то, что мы также коснемся на немного есть идея адресной арифметики. Что, все это есть, а не путем корректировки значения, что хранится по адресу указателя, это просто на самом деле изменения сам адрес. Так что, если вы, как человек хотел чтобы настроить указатель вручную, как вы бы сделать это просто сделать в п раз размер указателя. Правильно? Так что Int. An int-- сколько байт в памяти является INT? Это четыре, верно? Так что, если я знаю, у меня есть массив всех Интс, и я хочу, чтобы это указать на один после этого, я знаю, что я просто должен пошевелить указатель вниз четыре байта, верно? И так п раза больше байтов указатель Однако многие байт вы просто будет двигаться указатель вниз. Так, например, если у нас есть массив Интс, первый, давайте просто сказать хранится в 0x00. Вы знаете, что следующий будет в 0x04, потому что это четыре байта позже. И тот, после этого собирается быть 0x08 и так далее, и так далее. И так, ребята, посмотрите. Все, что вы делаете здесь что у вас есть указатель у и вы, добавив, что к вашему памяти, так что вы можете двигаться вниз блоки памяти, выделяемой. Вид из концепции более высокого уровня. Вы, ребята, не нужно знать в течение этой недели, но это все, что он делает там. ХОРОШО. Еще раз шутка. Две строки ходить в бар. Один говорит, я хотел бы ром и значения для мусора кокса. Другой говорит, вы будете иметь, чтобы оправдать мой друг, он не нулем. Вы, ребята, получить его. Сожалею. Это, как я держать себя происходит, когда я приготовительный для раздела , я вставить пару шутки слайдов. В любом случае. ХОРОШО. Прежде чем я перейду on-- Так, по существу, мы покрыты все концептуальные вопросы, связанные с указателями. А потом мы собираемся talk-- перемещение Более того, разговоры о том, почему это важно и как это вписывается в Идея управления памятью. Но прежде, чем я продолжу, Кто-нибудь есть вопросы об использовании указателя, что происходит когда вы создаете указатели, как являются ссылки друг друга, как они разыменования? Любые вопросы о что прежде, чем я двигаться дальше? ХОРОШО. Отлично. Таким образом, это приводит нас в это больше концепция высокий уровень управления памятью в целом. Так, по существу, в компьютер, есть два основных типа памяти или Регионы, в которых память хранится. Вы должны здесь то, что называется куча, и вы должны здесь то, что называется стек. И мы будем говорить о стек-первых, потому, что это тем более, что finagley одним Вас должны рода концептуально понять, что происходит. Таким образом, все стек is-- думать это как физический стек памяти где у вас есть блок памяти который установлен в сторону для вашей программы в то время как он работает. И это, где, по сути, все из ваших локальных переменных хранятся. Так что это просто увеличенный в картине этой стопки. Стек там, я просто масштабирование немного больше. Так, по существу, в стеке у вас есть куча функции в вашей программе. Так что давайте просто вернуться в неделю два примера где у нас был наш основной функции а также функции куба где мы пытались создать функцию, которая cubed--, что взял в качестве входных параметров, в кубе их и вернулся им вернуться на главную. Таким образом, путь, который, что хранится в памяти является то, что у вас есть основную функцию Здесь на дне. А потом с каждым дополнительным функции что вы позвоните и добавить сверху, что, память только складывает сверху. Думайте о нем, как физическое стека. И так у вас есть все из вас главный переменные ваших основных функций, все, что здесь происходит, сохраняются. А потом, когда ты назвал куб, он идет и создает копии всех тех, параметры и их он хранит выше в другом месте. И так почему мы заботимся? Поэтому мы заботимся, что мы не можем просто Используйте параметры here-- переменные here-- и меняем их, мы ожидаем, им также будет изменен здесь, верно? Идея в том, что они спасены в разных местах в памяти так что, когда вы обращаетесь отличается Функции, что вы думаете, что происходит на самом деле не происходит, потому что биты памяти не взаимосвязаны. И поэтому вопрос, что на самом деле Для нас важно, чтобы понять, вид является то, что, если, когда мы бежим Программа, размер функции стек frame-- так физически, как объем памяти мы должны дать ему? Может быть, это гигантский функция, поэтому мы должны дать ему, что много памяти. Но если бы это было меньше, мы бы нужно самую малость. Таким образом, идея в том, что, когда мы бежим программа размер этой функции зависит от того, сколько переменные и тип переменных что мы хотим, чтобы дать его. Но что делать, если количество variables-- и их размеры, который определяется не Вами кодер, но определяется фактическая Пользователь вашей программы. Так что, если я хотел, чтобы создать функцию что взял строки от пользователя, но я на самом деле не знаю, насколько большой эти строки, трудно для меня выделить конкретный объем памяти требуется. Правильно? Потому что, если это function-- если это пользователь вводит гигантский строку, он собирается создать ошибку что называется, по существу это переполнению стека, где вы выходите за пределы Границы памяти, что вы должны. И так, то что же нам делать? Если мы не можем просто создать этого гиганта стек, который может спасти все, что мы делаем, чтобы решить эту проблему? Итак, мы собираемся двигаться дальше и говорить об этом второй тип памяти и тогда мы сможем говорить о том, как мы можем использовать два вместе решить этот вопрос. Так что теперь мы собираемся двигаться вверх в другую часть памяти в нашем компьютере. Это называется кучей. Таким образом, все кучи есть бассейн из доступной памяти, что может быть выделено динамически. Так что можно изменить время Ваша программа работает. И так область не использовался памяти, которая может быть allowed--, что может быть выделено с функцией называется таНос или выделение памяти. Так, по существу, когда вы работаете в программу, Вы можете динамически создавать память с куча и использовать все, что здесь. И так, то все ваши функции здесь можно получить доступ к кучу. И так таНос, эта идея, что Давид вид быстро, кратко умалчивается в лекции, это просто способ для контролировать вашу память. Как, когда Вы создаете стек функции, когда вы только имеющих свой основной функции с случайных функций, вы думаете о них, как дети, которые просто убежал, когда вы были сделаны с ними. Они были действительно плохие дети. Вы можете создать их, вы научить их что-то, а затем, когда вы хотите, чтобы доступ к ним снова они нет, потому что ваши памяти просто убежал. Но таНос, или куча, это способ иметь более детей, где Вы можете создать вид им, присваивать им значения, использовать them--, что звучало очень bad-- использовать их, как вы хотели, но потом быть в состоянии контролировать их, а затем освободить память всякий раз, когда вы в них нуждаетесь. Итак, когда вы сделали с вашей Функция, дети приходят к вам и вы все еще есть, что данные там. Таким образом, путь, который мы таНос, или зарегистрироваться, память с помощью функции пустот звезды Размер таНос в байтах. Так что это просто прототип почему мы делаем это. Так что пример мы создаем указатель типа INT int-- Star pointer-- равных Размер таНос ИНТ. Так что причина, почему мы делаем размер из, а не просто number-- потому что мы все знаем, что целочисленное четыре байта, right-- но ИНТ только четыре байты на некоторых операционных системах. Идея для нас, как программисты, что мы хотите создать код, который может работать на всех компьютерах, а не только наши простые компьютеры. И вот почему мы хотели бы использовать размер и не только номер четыре. Имеет ли это смысл для всех? Так размер of-- все это С функция или оператор, говорит вам, сколько байтов памяти делает определенный тип переменной принять. Таким образом, в этом случае, размер в четыре Int. Четыре байта. И таНос собирается освободить до четырех байт в вашем кучи, Затем вы можете использовать в вашей основной Функция, чтобы иметь возможность хранить память. Это все ясно, на что до сих пор? Да? АУДИТОРИЯ: Я ясно, но только, чтобы быть более clear-- ANDI Пэн: ОК. Всего в порядке. АУДИТОРИЯ: --size из вне [неразборчиво] может на самом деле [неразборчиво] и будет на самом деле сделать , что мы хотим, чтобы он. Это не какой-то псевдокод. ANDI PENG: Нет АУДИТОРИЯ: Это как настоящий thing-- ANDI Пэн: Это настоящая код. АУДИТОРИЯ: --мы можете использовать его. Это актуально. Круто. ANDI Пэн: Размер приходит с С. АУДИТОРИЯ: Это делает мою жизнь более счастливой. ANDI Пэн: Да. Так что, если вы ленивый программист как я вроде бываю, Мне не нравится запоминания какой размер из Int есть, мне не нравится запоминания с размером поплавка. Размер просто говорит вам, что это и это намного проще. Все в порядке. Так что главное что вы, ребята, все хотим иметь в виду, когда вы используя таНос, что вы всегда должны проверить, чтобы увидеть, если это нуль. Так как я уже сказал, к что картина кучи. Куча всего этого гигантского стек памяти, что вы получили. И вы хотите, чтобы иметь возможность принять куски памяти от него и использовать его, верно? Но что, если вы не имеют больше памяти в этой куче? Что делать, если я уже использовал все его, и я стараюсь таНос больше? Это не существует. Ну, вот, почему ты собирается получить сообщение об ошибке. Вы собираетесь SEG неисправность. Вы идете иметь ошибки сегментации, где вы пытаются получить доступ к вещи, которые не существуют. И так, как мы делаем что и как, что мы предотвратить это, что мы проверяем чтобы увидеть, если нуль указателя. Так, если бы я что-то таНос и у меня не было больше памяти, что бы напечатать сообщение об ошибке, потому что Указатель, возвращаемый вам просто нуль. И так, как мы делаем this-- это просто отличный дизайн, просто запоминать this-- является то, что любой раз при попытке выделения памяти ничего, Вы будете нуждаться, чтобы проверить, если это нуль. Потому что всякий раз, когда вы пытаетесь получить память из кучи, вы всегда должны сделать Убедитесь, что у вас есть память. Это все, что есть. Так довольно много тех, кто три строк кода, запомнить. Каждый раз, когда вы таНос, хлопнуть их. Вы собираетесь нуждаться в них. Потому что я гарантирую вам, мы собираемся чтобы испытать вас на случай и компьютером взорвется, потому что вы будет пытаться памяти доступа, что это нет, и дела идут аварии, и это не будет хорошо. Так что просто просверлить, что в вашем мозгу. Маллок, нуль. Хорошо. Все в порядке. Тогда это порождает Вопрос о том, что происходит после того как мы закончили использует эту память. Потому что вся идея иметь таНос был что у нас есть этот холм, что мы можем взять памяти от и тогда мы можем его использовать. Правильно? И тогда то, что мы должны помнить, является то, что, после того, как мы сделали с ним, мы можем освободить его. Отпусти. Мы можем отпустить. Или вы также собирается течь памяти и более плохие вещи будут происходить. По сути, всякий раз, когда ты прикасаешься память, плохие вещи произойдет, если вы не делать вещи правильно. Таким образом, вы должны проверить, чтобы увидеть, во-первых, если у вас имеется память. А потом, когда вы закончите, вы хотите, чтобы освободить его и позволить операционной системы принять его обратно. Таким образом, как мы делаем это только что Функция, без пустот, и указатель к этому кучу памяти. Таким образом, пример бесплатно указатель. Это довольно легко, просто, не хочу забыть его. Так проверьте, чтобы увидеть, если это нуль, бесплатно. Все хорошо? Итак, еще раз, код, который вы, ребята, может рода быстро принять взгляд на. Я знаю, что это много нового синтаксиса и что все в порядке, если вы, как ах, что это значит снова? Не беспокойся. Все это должно было быть отображает действие, как все эти вещи могут быть использованы вместе. Так что собрать как гроздь прошлом слайды мы просто пошли через в одной программе. АУДИТОРИЯ: В пути что мы можем actually-- ANDI Пэн: В образом, что мы можете использовать. Вы можете хлопнуть, что в вашем ID, Вы можете запустить его и он будет работать. АУДИТОРИЯ: ОК. Так что реально? ANDI Пэн: Это настоящая. Да. Я пытаюсь сделать это таким образом, шрифты отличаются так что всякий раз, когда я печатаю в режиме реального Код шрифт код шрифта и что моя заметка код отличается, но Я не знаю, если это на самом деле работает. АУДИТОРИЯ: Нет Я думаю что-- ANDI Пэн: ОК. АУДИТОРИЯ: --sometimes [Неразборчиво], и я как, что бы очень мило если бы это было на самом деле использовать вещь но тогда это не полезная вещь. Мне нравится, что это полезная вещь. ANDI Пэн: ОК. Да. Я передам, что вдоль. Будьте, как, Давида, дети действительно грустно, когда вы пишете код поддельный. Все в порядке. Да? АУДИТОРИЯ: Так PTR здесь на самом деле не указатель, это блок памяти? ANDI Пэн: Так вы говорите первая линия или один здесь? Вы говорите об этом один здесь? Аудитория: PTR является разные вещи in-- ANDI Пэн: Ну, так здесь то, что я на самом деле doing--, давайте просто пройти через здесь. Этот вид связи в красиво все понятия. Так вот у нас есть INT звезд PTR. Так Int указатель, вот где мы на самом деле создания указатель, который указывает на целое число. Ну, это будет указывать на целое число. И мы собираемся таНос или дать, выделено достаточно памяти хранить целое число. Так четыре байта в этом случае. И потом, если что равняется null-- равных равна null-- мы собираемся печатать. О, у вас есть ошибки, потому что вы из памяти, не так ли? В противном случае возвращения одного, что просто говорит программу что вы получили сообщение об ошибке. И потом, если вы есть, что память, это собираетесь хранить все, что получить INT дает вам в месте и установить его в качестве значения указателя. Так что на самом деле происходит в физически стереть эту величину и положить все, что получить целочисленные отдачу. И тогда вы будете печатать все, что они вошли. АУДИТОРИЯ: И это будет в куче? ANDI Пэн: Это происходит чтобы быть в куче. АУДИТОРИЯ: И так, что будут доступны. ANDI Пэн: Точно. Хороший. Хорошо. АУДИТОРИЯ: Поэтому, когда мы свободно PTR на это Последним шагом, мы освобождая указатель или мы освобождая блок? ANDI Пэн: Да. Таким образом, мы освобождая pointer-- хорошо, освобождая блок памяти. Таким образом, только так мы можем даже получить доступ память, имея указатель. Если у вас нет указателя, вы как, ну, я не знаю, где он находится, правильно? Так что, если вы освободить его, вы, по сути освобождая что весь блок. Тогда ваш компьютер знает, о, нет ничего использоваться здесь, Я можете просто положить мусор значения обратно в нее снова. АУДИТОРИЯ: Так же существуют целые на что? ANDI Пэн: Существуют ли целые? Сожалею. Вы можете перефразировать ваш вопрос? АУДИТОРИЯ: Я имел в виду, после того, как освободить указатель, целое, что вы получите, будет, что все еще существуют? ANDI Пэн: Нет, это не будет. Или, по крайней мере, это будет существовать в вашей памяти до компьютер делает все с ней, но есть нет для вас способом, чтобы получить это. Потому что вы освободили указатель. Вы не знаете, где это больше. Да. Я собираюсь перейти на здесь. Уф. Так что мы через много концептуальная Трудности управления памятью и мы только собираемся по существу провести 5, 10 минут идущие более синтаксических вещей, которые можно будет использовать и полезным для вас, ребята, но не слишком концептуально там. ХОРОШО. Таким образом, мы полностью переключения передач здесь. Управление памятью, трудно. Указатели, трудно. Да. Это очень, очень трудно. Всего в порядке. Вот почему ваш кусок будет очень трудно. Но если вы идете и сделать то, что мы должен делать, чтобы что вещи являются недействительными, удостоверьтесь, чтобы проверить, если вещи NULL, убедитесь, что свободной памяти, убедиться, что все не утечка, вы будете хорошо. Вы будете установить. Все в порядке. Итак, мы собираемся двигаться в этом совершенно новая концепция перенаправления. И так до сих пор, то Основным способом, что мы взаимодействовали с нашими программы через стандартный ввод и стандартный вывод. Правильно? Мы, как вход пользователя вещи и компьютер плюет его обратно к нам в терминале. Но есть и другие способы для нас, чтобы взаимодействовать с компьютером с нашим программы, которые не только мне физически набрав вещи в том, когда я запроса. И то, как мы делаем это через более чем морковь и символ трубы. Таким образом, мы можем читать и запись в файлы, используя это. Таким образом, путь, который мы делаем это больше, чем морковь, все, что делает пишет любые ваши файл имеет в отдельный файл. Так, например, если хотел бежать привет мир и я хотел, чтобы выход быть сохранены в другом файле и не только распечатать для меня, я можете просто сделать больше, чем морковь, output.txt. Так все, что делает, принимая моя программа hello.world, и все выход, это сохранения в файл под названием output.txt. Таким образом, путь, который Дэвид сделал .csv с именами студентов, это то же самое, что вы, ребята, можете сделать. И то, что особенно полезно здесь, тем больше than-- двух больше, чем моркови признаки, которые вы можете добавить к выходу файл, который означает, что вы можете просто добавить поверх него. Вы можете просто держать добавив к output.txt каждого дополнительного вещи что вы делаете. Или, если вы начнете получать в более сложные программы, два больше, чем морковь, что просто печатает из сообщений об ошибках. Так что у вас есть гигант количество сообщений об ошибках и вы хотите, чтобы прочитать через все из них и вас не хочу, чтобы прокрутить через терминал, Вы можете на самом деле просто сделать больше, чем output.txt и это спасет все ваши ошибки в файле output.txt, что называется Вы можете пройти и читать. АУДИТОРИЯ: Где текстовый файл сохраняется? ANDI Пэн: Это сохранен в том же каталог, ваша программа. Таким образом, вы просто вернуться назад и посмотреть на него. И то же самое мы может сделать для входа в что мы можем на самом деле взять содержимое некоторых файлов и мы можем ввода, в нашей программе. Таким образом, вместо того, чтобы сделать команду аргументы командной строки, где вы физически должны ввести вещи каждый раз, вы может на самом деле просто есть файл с именем input.txt, что просто ставит все это. И тогда труба специально здорово, потому что это может занять выход одной программе и использовать его в качестве входа другой программы. Так, например, в Vigenere ваших ребят, есть эта строка кода, которая вам Ребята работают, что, может быть, может быть, вам не знаю, что это было doing-- это ./generate +1000 трубы ./42. Правильно? Таким образом, все, что делает, если мы просто взглянуть на этот шаг за шагом, ./generate, что означает, что я работает моя программа генерации. Это принимает в 1000 на его входе. Поэтому я хочу, чтобы генерировать случайное 1000 номера, и я собираюсь к трубе that-- или я собираюсь использовать выход that-- в качестве входных данных для моей программы под названием находка. И я собираюсь попытаться найти 42 из число, полученные от тех 1000 номера. Значит ли это, строка кода делает смысл всех остальных? Таким образом, в этом случае мы экономим сами тонна шагов. Мы не должны работать генерировать, сохранить файл, а затем положить его в находке. Мы можем только делать все это в одной строке. Поэтому, что бы генерировать выводит, хлопнуть его обратно, чтобы найти. Да? АУДИТОРИЯ: А с точки зрения команды аргументы командной строки, это that-- это три аргумента командной строки? Это генерировать, find-- Нет, four-- генерировать, 1000, найти и 42? Или the-- ANDI Пэн: Так труба на самом деле не рассчитывать в качестве аргумента командной строки потому что компилятор или Терминал знает, что трубу, О, я знаю, что я должен посмотреть, прежде трубы, потому что это мой выход и я должен выглядеть после трубы, потому что это мой вклад. Так он знает that-- ./generate и 1000, те два командных то аргументы только для первой программы. И тогда ./find 42 два команду аргументы командной строки для второй программы. Да. Все хорошо на это? Так что очень быстро, то, что делают эти три строки кода делать? Довольно просто. Кто-нибудь хочет сказать мне, то, что первая строка делает? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Думайте об этом как просто-- что делает больше, чем морковь делать? АУДИТОРИЯ: Это что-то ставит в следующей строке. ANDI Пэн: Так что противоположность, что? АУДИТОРИЯ: Это ставит следующий что в первую вещь. ANDI Пэн: Да. Так все, что делает, вы запуск программы .hello-- вы работаете в программу под названием привет. Вы собираетесь дать ему вход называется input.txt. Правильно? Потому что думать о нем, как только физически происходит в привет. И тогда вы будете, чтобы спасти Выход в файл, называемый output.txt. Как насчет второй линии? Хочу сказать, что мне вторая строка делает? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: К сожалению. Повтори. Эллиот. АУДИТОРИЯ: Так что ставит Список номеров в находке. ANDI Пэн: Да. Так что найдите, помните, в Для того чтобы запустить найти вас нужно знать, где вы ищете. И поэтому все, что он делает здесь является то, что это дает вам предварительно заданном множестве числа, то найти будет искать тех, для числа 42. А потом 15. Помните, что вы, ребята побежал это когда вы проверили код. Теперь вы понимаете, что она делает? АУДИТОРИЯ: Это положить в набор инструкций в [неразборчиво] через три по три, чтобы получить the--, чтобы выиграть игру. ANDI Пэн: Да. АУДИТОРИЯ: Это вводит тех, инструкции в программе. ANDI Пэн: Довольно много. Так тильды CS50. / Pset3 / 3x3, все, что делал, было, что мы создали текст файл, который был все Названия готовые для вас, ребята. И так ваша игра, чтобы играть, вы просто-- мы просто положить, что в вашей программе. Таким образом, мы создали этот доска, а затем мы положить, что доска в вашей программе что побежал и создал плитку из трех на три. Это все, что он делал. И так было на самом деле магия происходит за кулисами что вы, ребята, не сделал программа, которую мы запрограммированы. Но теперь вы, ребята, понять, почему мы сделали, что так все хорошо. Все в порядке. Таким образом, хотя перенаправление очень полезно, С имеет общий механизм для чтения и записи файлы самостоятельно. Ничего концептуально трудно вот так я просто хочу, чтобы пройти через действительно, действительно быстро. Все это некоторая запоминание и убедившись, что вы, ребята синтаксически с помощью правильно. Таким образом, что мы сделаем это создать ссылку на файл, мы открыть файл, а затем мы будет делать все для чтения и записи и закройте файл. Когда вы, ребята, вещь хотите иметь в виду, что, делая это, потому что мы закрытия и открытия файлов, Все эти команды включены в standard-- стандарт ввода / вывода Библиотека. Поэтому убедитесь, что всякий раз, когда вы делать это, что вы included-- # included-- Standard I / O точка ч. Так в режиме реального быстро. Шаг первый, вы хотите создать ссылка на этот файл. И теперь, когда мы сделали указатели, вы ребята, можете сказать мне, что это строка кода делается. Правильно? Все, что он делает, создавая Указатель имени файла типа файла. Потому что вы знаете, что он собирается чтобы указать на файл, и вы собирается открыть файл. Тогда вы е open-- все это является открыть файл. Это имя файла. И есть три вещи, которые вы можете сделать. Вы можете читать, писать или добавить. Большинство вообще, вы, ребята, будет читать или писать потому что вы либо будет ввод файла или вывода одного. Так довольно много г и ж являются два вещи, которые вы будете наиболее используя. Таким образом, в этом случае, все, что я сделал это создать указатель на файл с именем файла. Я открываю его, и я reading-- Я открытии этого файла с именем file.txt и я читать его. Это все, что я делаю в этой точке. И тогда это только функционирует в которых вы можете прочитать разные вещи или написать разные вещи или пропустить в разные места где вы хотите посмотреть. Все эти онлайн. Все это вы можете просто Google. Нет необходимости запоминать их. Они просто есть, одноразовые для использования если вы хотели бы быть в состоянии использовать их. Так что, если я хотел, чтобы просто прочитать в один символ за раз Я хотел бы сделать файл fgetc. Или, если я хотел прочитать в строке Текст на время, я хотел бы сделать fgets. И так далее. Все это просто сделать разные То, что вы, ребята, можете использовать. И тогда, наконец, после того как я нахожусь Готово Чтение или запись, Я просто хочу, чтобы fclose файл. И помните, это один из них, помните, пожалуйста, сделать это, либо файл не будет работать. Всегда открыть файл перед чтения или чтения, Вы должны всегда закрыть его, если вы открываете его. То же самое с памятью, верно? Вы должны всегда принимать памяти и освободить его. Здесь у вас есть, чтобы всегда открыть подать, прежде чем пытаться читать и вы всегда должны закрыть после его открытия. Так что это также онлайн. Я собираюсь бросить вызов вам, ребята, вид написать программу, которая печатает hello.world в файл. Это действительно просто. Это по сути просто включает Несколько строк кода которые были только что написал ранее. Вы собираетесь поставить их вместе и пишут, что. Таким образом, некоторые важные вещи, чтобы иметь в виду, а вы, ребята, стараются, чтобы использовать это. Если это все очень полезно для PSET на этой неделе, что FOPEN создает указатель файла. Это на самом деле не физический файл. Все это указывает на файл, который вы хотите открыть. И вы, по сути, всякий раз, когда Вы используете любой из других функций как FREAD или FWRITE или fgetc или fgets, является что вы просто, проходящей вокруг этого указатель на все эти функции. Таким образом, вы на самом деле не принимая, что файл и использовать его для ваших функций, Вы просто принимать указатель и положить его в этих функций так что вы можете использовать. И если вы забыли закрыть Ваш файл после вы его используете, ваша программа будет утечка памяти. По сути, все, что средства является то, что плохие вещи будут происходить и ваша программа будет не работать корректно. И так на PSET в начало, я думаю, есть короткий, где он explained-- Нейт explained--, что Valgrind было. Все Valgrind является способ для вас, чтобы убедитесь, что вы не утечка памяти. Таким образом, вы, ребята, хотите, чтобы что вы смотрите, что короткие потому что это объясняет очень хорошо, что происходит. ХОРОШО. Так что я прошел через это в самом деле, очень быстро, потому что я действительно хочу, чтобы добраться до говорим о PSET, прежде чем вы, ребята, оставить. Кто-нибудь есть вопросы концептуально? Небольшая все это просто синтаксис, Вы можете использовать для чтения или записи файлов. Наконец, любимец. Мы собираемся говорить о PSET настоящее. Так, поднятием рук, сколько вы, ребята, читать спецификации на этой неделе? О, это половина. Это хорошо. Так что это на самом деле очень, очень весело PSET в смысле что вы чувствуете, как детектив, потому что вы делать все эти вещи действительно здорово что вы не знаете, что вы могли бы сделать но теперь это действительно здорово что вы можете сделать их. И это на самом деле много проще, чем вы думаете, ребята. Так что основная половинки эта программа вы находитесь собрался качать исходный код или Код распределения написано нами. И вы будете иметь одну папку называется БМП и другую папку называется JPG. В вашей BMP, вы будет иметь три программы. Один из них уже написана для вас. Так copy.c программа мы уже писали для вас, что вы собираетесь загрузить. Все, что делает это принять в качестве входных картина и делает копию в качестве вывода. Это все, что делает файл. Но то, что вы хотите сделать для whodunit-- так как многие из вас Ребята помните в пятом классе или maybe-- Вы, может быть, younger-- третий класс, когда вы, ребята, были секретные сообщения и Вы должны были положить кусочек бумаги над ним декодировать сообщение? Да? Так что все, что мы делаем кроме этого времени для компьютера. Таким образом, мы дали вам этот прекрасный образ. Не похоже, ничего, но под это признак того, что происходит, чтобы помочь вам с ответом на вопрос мы просим вас. По сути то, что вы хотите чтобы сделать, это ввести, что файл, изменить некоторые вещи вокруг, возможно настроить цвета, переложить вещи, так что все, что сообщение является может прийти через. Так там внутри спрятаны пикселей и информация что если вы пишете код правильно будет декодировать и сказать вам, что это разгадка. И так несколько полезных советов о том, как Вы пошли бы о приближении этого. Вы действительно хотите, чтобы ознакомиться самостоятельно с файловой I / O потому что мы читаем из файлы и записи файлов. Правильно? И поэтому, когда мы делаем что, который включает в себя Файловый ввод / вывод. Вы собираетесь должны ознакомиться с, как вы открыть фотки файлы? Как вы пишите файлы как картинки? Как вы все эти вещи? Это будет очень полезно. Во-вторых, как вы будет в состоянии изменить цвета, которые очищают эту картину? Это, вероятно, будет включать регулируя свои пиксели или ваши ценности RGB где-то там, по сути. Там нет верный путь решения этой, пока вы can-- тех пор, как вы можете вид настроить эти пиксели, чтобы сделать его выглядят как-то, что вы заботитесь о. Это все, что мы заботимся о, как хорошо. Так что много способов, чтобы сделать это. Просто поиграйте с ним до тех пор, Вы получаете то, что работает. А вы бы действительно удивлены, как несколько строк кода Вы должны фактически сделать это. Я говорю, как три линии общей кода что вам нужно, чтобы написать для того, чтобы сделать это. Так что, если вы окажетесь писать 40, 30 строк кода, вы, вероятно, делают это неправильно. Все, что вам нужно сделать, это своего рода поиграть с цветами и посмотреть, как это работает. Итак, мы направляемся в немного чтобы сложнее проблемы. Здесь мы имеем размер где мы просим вас , целью которых мы даем вам в качестве входных картина и ваш изменения размера этот образ в нечто больше или меньше, то в зависимости от размеров, мы даем вам. Так что помните, в лекции что Дэвид быстро взглянул, как информация обнаруживается компьютерах означает, что это тип файла. Таким образом, файл Слово имеет специальный символы перед, что рассказать компьютер это файл Слово. То же самое с JPEG. В этом случае мы будем чтобы дать вам файл в формате JPEG. Все, что мы знаем, что JPEG Файл картина, верно? Но компьютер различает это в очень специфических способов. Так в начале любой файл JPEG, вы будет иметь то, что называется точечный рисунок Информация заголовка и заголовок графического файла. Все те являются Различные фрагменты данных что сказать компьютер, эй, слушайте, а в формате JPEG придумывать и эти размеры или характеристики этого JPEG. Так вы, ребята, действительно хотите знать, какая информация хранится внутри из этих заголовков и что размер их. Потому что, когда вы работаете через программы, Вы будете хотеть, чтобы пропустить эту сумму. Правильно? Потому что вы не волнует, об изменении заголовка, Вы заботитесь об изменении то, что после. Правильно? Поэтому убедитесь, что вы, ребята, знаете насколько большой те вещи. Во-вторых, прежде чем вы начнете пытаясь изменить размер изображения, вы, вероятно, будете хотеть, чтобы сохранить размеры оригинала. Правильно? Потому что, если я скажу вам, что это картина 100 пикселей на 100 пикселей, и я хочу, чтобы ты это в четыре раза больше, Вы знаете, что у вас есть, чтобы Умножьте эти размеры в четыре раза. Итак вы хотите выходной файл 400 на 400 пикселей, например. Так что это действительно полезно для вас, ребята сохранить размеры оригинала. А потом после этого, после того, как вы закончите изменение размера, Вы можете написать новые заголовки с эти новые размеры после изменения размера. И так, что вы физически можно создать в больших пикселей является то, что вы можете написать Новый RGB-- помните, RGB, все, что стоит на красный, зеленый, и blue-- пикселей на выход файл. И вы будете хотеть, чтобы имеют разные объемы что мы называем заполнения. Все Заполнение пробелы фотографии до и после что сказать по существу, что your-- рассказать свою фотографию, насколько большой это должны принимать до. Это очень абстрактные для многих Вы, если вы не читали Pset спецификации, но это будет Очень полезно, когда вы на самом деле читать через него. Ты как, о, да, это имеет смысл. Почему я должен это делать? Имеет смысл. Наконец, это, вероятно, один из Самая неприятная программы либо просто потому, что вы не можете сказать, если он работает или нет. Все это программа, восстановить, это делаете, что если работать правильно, она должна иметь возможность неожиданно восстановить 50 изображений, которые погибли на нашем жестком диске. И поэтому проблема с этой программой является то, что вы не можете проверить его потому что либо вы восстановить им или нет. И так вы вроде просто должны играть вокруг с этим, и если ваша программа работает должным образом, вы будете вдруг увидеть, что в ваш каталог вы имеете получил гигантскую сумму фотографий, которые сейчас есть. Так как я хотел бы подойти эта проблема, мы собираюсь дать вам то, что называется card.raw файл. По сути, это только поврежденный файл с все фотографии хранятся что Вы будете нуждаться, чтобы оправиться от. Таким образом, вы, вероятно, будете хотеть для ввода вашего card.raw, или открытыми, Ваш файл card.raw и вы захотят манипулировать это, чтобы иметь возможность хранить файлы JPEG. Так что я хотел бы начать с отслеживания и хранения каждый человек JPEG, как вы найдете его. Вы не собираетесь индивидуально все Вдруг просто создать все 50 JPEG. Вы собираетесь хотите сохранить трек сколько вы открываете. И тогда вы хотите, чтобы убедитесь, когда вы пишущие на buffer-- вы, ребята, будет знать, что я говорю о как только вы читать spec-- вы хотите убедитесь, что вы используете без знака символ буфера. И тогда вы хотите спросить самостоятельно вопрос о, сколько байт в CF-- в картотеке? Вот сколько вы собираетесь хочу прочитать в буфере. Вы будете хотеть, чтобы убедиться, два выравнивание потому что тогда вы не будет иметь оперативную память утечки. Вы точно знаете, сколько байт вам нужно и сколько байт, что вы хотите, чтобы иметь. И, наконец, вы хотите, чтобы использовать функцию под названием sprint-- S Для печати F-- генерировать пользовательский файл Имена для каждой новой JPEG, которые вы найдете. Итак, как вы создавать и найти формате JPEG в вашей карты, Вы будете хотеть, чтобы хранить их и назвать их. Правильно? И так вы собираетесь хотите использовать эту функцию чтобы создать имена, которые может хранить все ваши изображения в формате JPEG. И, наконец, не забудьте закрыть каждый JPEG после того как вы сделали. Потому что то, что вы собираюсь сделать, это вы собирается, вероятно, своего рода цикл, который перебирает все ваши изображения в формате JPEG. Вы собираетесь написать JPEG и переименовать его, как вы найдете его. Но после того как вы сделали с каждым JPEG, Вы должны закрыть его, чтобы вы могли начать снова и перейти к следующей картинке. И поэтому все, что действительно весело, что мы хотели сделать, потому что это установить такой странный проблема но также странно удовлетворение проблема набор, является то, что все картины, которые мы есть для вас, если вам восстановить должным образом, все картины картины ваш замечательный преподавательский состав, и из Гарварда, в here-- и здесь в Йельском университете. И если вам случится восстановить все эти фотографии и определить сотрудников Участники в этих карт, и принять selfies с нами, если Вы найдете нас по всему университетскому городку, для каждого фото вы представить нас, мы будем дать вам гигабайт Dropbox пространства. Так что давайте делать математику здесь. Если есть 50 фотографий и 50 членов преподавательского состава, если вам посчастливилось найти все 50 нам, что это 50 гигабайт Dropbox, в основном, мы будем давать вам, ребята. Таким образом, некоторые дополнительные дополнительные стимулы если вы, ребята, не сделал всего заботиться о восстановлении потерянных изображений. Там также некоторые дополнительные стимулы. Это весело набор проблем. Это действительно так. Это своего рода разочарование, но затем его становится очень весело, когда ты понимаешь,, вау, это я работаю и сейчас есть все из этих картин что я только что создали сам. Любые вопросы по PSET? Для тех, кто уже начал, если у вас есть вопросы, Я буду здесь в течение нескольких минут после раздел, если вы хотите поговорить со мной. Молодцы ребята. Я извиняюсь, я информация сбрасывали на вас, ребята. Указатели действительно, действительно сложной и разочарований. И я очень рад, что вы, ребята, остался со мной. Мы будем говорить более подробно о следующей неделе как мы начать делать хэш-таблицы и больше функций, которые включают их. Да. Так что если кто имеет какие-либо вопросы, я буду рядом. Спасибо, что пришли, и принять конфеты, потому что есть более конфеты. Круто.