>> [Музыкальная тема]
>> СПИКЕР 1: Привет, всем.
Добро пожаловать в раздел.
Прекрасный день out-- поэтому, я Безусловно, есть только четыре из вас здесь
и не наш обычный пакет.
Я был болен в эти выходные.
Так у меня нет Starburst для вас, ребята.
И я могу начать кашлять ужасно на протяжении всего этого.
Так что терпите меня.
Я собираюсь действительно попробовать и через это во-первых,
хотя, прежде чем я есть кашель атаку.
Но просто быть легко на меня в немного bit-- что все, что я прошу.
>> Таким образом, наша повестка дня раз сегодня просто reminder-- ваш тест на следующей неделе.
Я сказал вам это на прошлой неделе, так это не поймать вас врасплох.
Так что я напоминаю вам еще раз.
На следующей неделе ваш тест.
Для этого, на следующей неделе Раздел будет гораздо более
of-- я постараюсь и работа в какой-то обзор.
Так что, если вы, ребята, могли помогите мне, отправив меня
вещи, которые вы чувствуете себя комфортно с, что вы беспокоитесь о,
темы, которые вы хотели бы для мне, чтобы покрыть, что было бы здорово.
Так что я могу попробовать и работать их в нашем разделе на следующей неделе
или отправить дополнительный материал или преп что вы не могли бы получить в другом месте.
>> Да!
Другие люди идут!
Я думал, я это сделал плохо в прошлом неделю, что никто не хочет вернуться?
Мне страшно.
Так трех других вещей что мы собираемся перейти
являются перенаправление, файловый ввод / вывод, и Затем указатели и динамическая память.
Я уверен, что вы все супер взволнованы pointers-- любимая тема каждого,
так просто понять.
Я уверен, что вы, ребята, все получили, что, не так ли?
>> Так обо всем по порядку, redirection-- это в основном просто способ
контролировать, как вы вход вещи в вашей программе,
как вы выводите вещи из вашей программы.
Основные пути что вы, ребята были взаимодействуя с ним
только через стандартный вывод с экрана печати здесь.
Но есть способы pipe-- как мы видим здесь
является одним из наших words-- рода из трубы, что информация
или, что данные в файл из файла.
Это просто разные способы получать вещи в вашей программе
и из вашей программы, вместо того, просто печатать их на этом экране
или ввода вещи из командной строки.
>> Итак, сначала один мало больше, чем вставки.
Так output-- он просто печатает вывод в файл вместо экрана.
Так что если вы что-то, что печатный "Привет, мир!" к экрану,
если вы поместите его вместо в output.text, что
создает этот файл с именем output.text.
И когда вы открываете его, это будет сказать "Привет, мир!" в там.
Это может быть супер полезно если у вас есть тонна ошибок
на самом деле, как мы видим в этом.
Если вы делаете два каретки, это будет печатать сообщения об ошибках.
>> Так что если у вас возникли проблемы с составление, он имеет много ошибок
и вы погрязнуть в попытке для прокрутки в командной строке
через все их, вы можете просто распечатать их в файл,
открыть файл, так что вы может пролистать их легче.
Я на самом деле используются, что много, когда я был отладки
мои 181 psets для машинного обучения.
Так, это может быть очень полезно в дальнейшем.
Это также полезно, если у вас есть программа что, возможно, генерирует библиотеку
или создать некоторый набор строк, и вы
должны быть в состоянии видеть, что что генерирует их должным образом.
Это способ сделать это.
>> Так что если Вы будете печатать их в файл, вам легче изучать их, не так ли?
Против пытаясь прокрутить через командную строку.
А потом одна вещь обратить внимание является то, что с просто больше
чем каретки, если вы пишете в файл, который уже exists--
так как если мы побежали это первый Время, мы положили его в output.text,
а затем у нас был второй программы что напечатано это как программы два
и сделал больше, чем в output.text, он перепишет that-- так
переписать то, что было когда-либо в что файл с самого начала.
>> Так что, если вы хотите, чтобы добавить в файл, как мы видим, здесь,
Вы просто делаете два больше, чем знаков.
И это будет добавлять к нему.
Это не будет перезаписывать его.
Так что, если вам нужно работать с несколькими Программы и вид держать
трек из того, что все они являются возвращаясь к вам в файле,
это способ сделать это.
Если вы не заботитесь, что в вашем файле и это позволило быть перезаписаны,
Вы можете просто использовать один больше, чем.
Имеет ли это смысл для всех?
>> АУДИТОРИЯ: Как точка слэш привет больше чем выход точка текста, как в два раза,
это просто показывать только на выходе Точка текст второй time--
>> СПИКЕР 1: Право.
Так что это будет в основном только полностью переписать то, что было там с самого начала.
Если этот файл здесь, output.text уже
существует, в основном все, что вы называете что снова с одной Большого
чем вы можете просто думать об этом как, как он заменил файл.
Например, когда вы сохраняете Слово документ, и вы сохраните как,
и вы сохранением имени, и он полностью переписывает it--
это то же самое рода вещи.
Кто-нибудь есть какие-либо вопросы по просто вывод в файл?
Удивительный.
>> Так, очевидно, если вы обратите стрелка направление, он может сделать вклад.
Поэтому, когда вы, ребята, были как Цезарь или Visioneer
и вы должны были ввода-то, Вы имели аргумент командной строки
что на самом деле вход он.
Это еще один способ сделать это.
Таким образом, вместо того, чтобы ждать для командной строки,
как и когда вы попросили вашего сообщение Цезаря или Visioneer,
если у вас есть текстовый файл что было сообщение,
Вы можете просто набрать его в том, что.
>> Так что, если бы это было, как точка слэш Цезаря 3 меньше, чем стрелка ввода текста, который
Ваше сообщение, что будет работать нормально.
Когда ваша программа Цезарь фактически попросил ввода пользователя,
это было бы уже есть, потому что вы набрали в этом файле.
Это просто еще один способ.
Просто обратная output-- просто вход для ваших данных.
>> И тогда последний из которых является труба.
Таким образом, этот довольно прохладно.
Потому что он позволяет взять выход один
Программа и положил его в качестве вход в другую программу.
Я не знаю, если кто из вас играл с расшифровкой
что CS50 могут иметь дал вам, но это было бы
позволит вам взять несколько образцов подать, введите его в свой шифрования,
а затем оттуда введите что в вашем расшифровки
чтобы убедиться, что она оказалась такой же.
Так что это вроде как трехходового петли.
Пойти на это.
>> АУДИТОРИЯ: Если программы имеет несколько входов,
есть ли способ, чтобы сказать ему, какой вход использовать текстовый файл или выход для?
>> СПИКЕР 1: Она имеет несколько входов.
Что бы подать input-- когда это задаёте вопрос, что первый раз, это
буду считать, я думаю, что это собирается трубы в весь файл.
Так что если у вас есть несколько входов, вы будет обжигающе в нескольких файлах.
Так что, если вы просите сообщений три раза в коде,
Вы собираетесь положить в трех различных файлов.
И это становится сумасшедшим.
И вы не должны беспокоиться о том, что прямо сейчас.
Но это идея.
>> Так что да, труба только выход один Программа использует вход в другую.
Все там хорошо?
Прохладный.
Хорошо.
Вы, вероятно, не будет иметь сделать слишком много с ним.
Но вы должны понимать, способы вы можете использовать это.
И есть случаи, что Вы, возможно, захотите использовать его.
>> Так подать I / O-, я знаю, что ты saying-- мы привыкли читать с
и писать в наш экран есть, который является стандартным в и стандартный вывод.
И это то, что вы, ребята, были делать с начала класса здесь.
Но вы также можете читать и записывать файлы, который все-файл I / O-, так вход подать,
Выход все это означает.
Так что это в основном означает, что Вы можете хранить ваши данные сейчас.
>> Когда вы просто распечатать его на Экран, это в основном ушли, не так ли?
Как только вы сделаете "Hello Мир "и запустить" Привет, мир "
он печатает "Hello World" на экран.
Но вы не можете действительно сделать что-нибудь с ним оттуда.
Если вы храните в тексте Файл, затем внезапно
у вас есть эти данные, что вы позволили манипулировать или положить его в файл,
или положить его в программу позже.
Одна из причин, почему мы делаем это просто
как способ хранения данных для последующего использования.
>> У меня есть пару шагов здесь просто ходить через стандартный
I / O. На первом этапе, вы нужно создать ссылку
в файл с все колпачки ПОДАТЬ звезды файл.
Так что создает указатель на файл.
Итак, вы хотите, чтобы открыть его.
А вы говорите, в буквальном смысле, просто файл равен FOPEN.
И это собирается вернуться указатель на файл, который вы только что открыли.
Я видел пару вас Парни в рабочее время.
>> Но одна из вещей, является remember-- указатели
может быть какой-то адрес или нулевым, не так ли?
Если мы когда-нибудь случай, когда что-то может вернуться нуль,
Что мы должны сделать, прежде, чем мы когда-либо использовать его?
Мы должны проверить, если это нуль или нет, не так ли?
Потому что некоторые из вас, возможно, были Вопрос, где любой объект
была возвращается в прорыве был нулевым.
Вы пытались выполнить некоторая функция на нем.
И ваш компьютер сайт нарушенными.
Не так ли?
Бьюсь об заклад, пару вас возможно, имели эту проблему.
>> Так с FOPEN, FOPEN будет либо возвращает указатель на файл,
или если что-то пойдет не так, он собирается вернуться нуль.
Таким образом, вы всегда должны проверить что он не вернулся нуль
прежде чем пытаться что-либо сделать.
Это как стандартный парадигмы что вы будете нуждаться здесь.
Если есть все шансы, что что-то может вернуться нуль,
проверить, чтобы убедиться, что его не, прежде чем продолжить.
В противном случае, вы будете чтобы получить прекрасные ошибки сайта.
И никто не любит иметь дело с теми.
>> Так как мы видим здесь, первый аргумент это только путь к файлу.
Если этот файл не существует, он собирается создать файл.
И это просто будет пустым.
И тогда второй аргумент является режим, который вы хотите.
Хотим ли мы, чтобы читать из этого файла?
Хотите написать от него?
Хотите добавить?
Так на самом деле то, что я просто said-- если файл не существует
и вы пытаетесь читать из это, он собирается бросить ошибку.
Если файл name-- нравится, если file.text еще не существует
и вы хотите написать к нему, это создаст
пустой файл с именем file.text для вас.
А если вы хотите добавить, Вы должны сделать то же самое.
Имеет ли это смысл?
Если вы пытаетесь читать из это файл, который еще не существует,
это брошу ошибку.
В противном случае, она будет создавать файл для вас сделать то, что вы хотите с ним.
Прохладный.
Теперь мы можем читать из файла.
И это только отчасти происходит через различные функции
что у нас есть для файла I / O. Это воля необходимо в PSET на этой неделе,
если я правильно помню.
Да, это абсолютно будет необходимо в PSET на этой неделе.
Так fgetc возвращает следующий символ.
fgets просто возвращает строку текста.
Это вернет ничего до Новая линия, и он сломается.
Так FREAD читает определенный количество байт и помещает их
в массив, который что-то вы, возможно,
хочу сделать с повторной размер-- может быть полезно.
>> Сколько людей читать PSET спецификации, кстати?
Хорошо.
[Неразборчиво]
>> СПИКЕР 1: ОК.
Хорошо.
Определенно читать that-- это весело PSET.
Вы добираетесь, чтобы восстановить удаленный память card-- очень интересно, когда он работает.
Но определенно, начать читать что.
Пошли разговоры со мной, если вам есть вопросы по этому поводу.
>> Итак, как я уже говорил, FREAD считывает определенное количество байтов.
Вот некоторые произвольное число что вы собираетесь установить.
А потом FSEEK всего движения в определенном положении.
Так, может быть, вы не заботитесь о следующих 10 байт.
Вы просто хотите, чтобы пропустить вперед.
Вы не заботитесь о них.
Вы хотите читать, начиная с байта 11.
FSEEK позволяет сделать это.
Так что позволяет избирательно о том, что вы читаете.
Потому fgetc, fgets и FREAD чтения с определенного места в файле.
>> Способ думать об этом, если это это наш файл, когда вы впервые открыть его,
у вас есть эта должность в файл который начинается в начале.
Всякий раз, когда вы звоните fgetc, fgetf или FREAD,
он собирается начать с эта позиция маркера.
Допустим, вы просто хотите, чтобы прочитать это часть памяти здесь.
Вы не можете просто позвонить.
Вы должны искать здесь а затем прочитать оттуда
или читать, получает, или ЕОКП, в зависимости от того, что вы хотите.
Так искать только позволяет пропустить участков памяти.
И это только как вы можете пропустить вещи
не читая их в свой буфер.
Имеет ли это смысл для всех?
>> Очевидно, что есть Много параллельных here--
наш выход, или вход перенаправление, Вы читать и писать.
Так fputc просто пишет характер в файл.
fputs пишет линию.
Fprintf печатает формата вывода.
Так что если у вас есть вкладки, или пространство, или еще много чего.
А потом FWRITE пишет некоторые Массив байтов в файл.
Так что это тот же самый путь FWRITE и FREAD аналогичны
opposites-- fgets, fputs, и затем fputc и fgetc-- много
из сумасшедших, быстрые вещи.
>> Просто вид сохранить этот handy-- Вы будете иметь различные времена
где вы просто хотите один символ за один раз.
Может быть, вы хотите целую линию.
С вашей словаре pset-- который находится в двух psets,
Я считаю, мы даем вам всю словарь в текстовом формате
который имеет каждое слово разделены линией.
Так что, если вы хотели, чтобы прочитать одним словом в то время,
Что вы могли бы использовать, если вы читаете и все они разделены на новых линиях,
и вы просто хотите одно слово за раз?
>> Аудитория: Fgets
>> СПИКЕР 1: Право.
Fgets-- потому что возвращает все, что находится на одной линии.
И если каждое слово является ее собственная линия, мы можем использовать fgets.
Прохладный.
Имеет ли это смысл, все?
Прохладный?
Да, мы собираемся, чтобы добраться до самое интересное с указателями
очень скоро, где вас добраться до займемся математикой.
И это будет здорово.
>> Последнее step-- закрыть файл.
Что так много вещей здесь, один из наших парадигм
является ли она может вернуться нуль, проверьте нуль.
Если вы откроете что-то, Вы бы лучше закрыть его.
ОК, так что вы не сделали, пока вы не сделано, если вы не закрыли его.
Вроде как это не более пока толстая дама поет.
Вот как закрытие файла.
Как говорится здесь, просто чтобы повторить, всегда
открыть файл, прежде чем вы чтения или записи на него.
И всегда закрыть его, если вы открыли ее.
Хорошо?
Прохладный.
>> Так вот пример.
Так tiny-- Я не знаю, если вы Ребята видно, что очень хорошо.
Если бы мы только могли увеличить яркость как-то.
Позвольте мне на самом деле сделать это, если я могу.
ОК, вы, ребята, не могу действительно видеть, что вообще, может вы?
Хорошо, что мы собираемся сделать это, то.
[Неразборчиво]
>> Я полагаю, это намного лучше, чтобы увидеть.
Может кто-нибудь увидеть, где мой мыши пошли в чем вопрос?
Ах, вот оно is-- что борется!
>> Хорошо.
В принципе, вы, ребята, должны иметь вид идеи о том, что это делает.
Это не идеально.
Но я предпочел бы объяснить, чем тратить больше времени, пытаясь отформатировать его должным образом.
В основном, как вы видите здесь, мы начинаем с открытым файлом.
И у нас есть некоторые Файл базы данных, что мы
открытие, что говорит, что это наши студенты.
И мы собираемся писать в него.
Поэтому, конечно, вернуться нуль.
Таким образом, мы должны проверить на нуль.
И потом, если это не нуль, мы идем до конца.
И, как вы видите, мы цикл по здесь.
Есть студенты.
Студенты является хэш определяется как три.
И то, что мы делаем, мы печать в файл, не так ли?
Так что же мы распечатки на наш файл?
>> Аудитория: баллы что в массиве?
>> СПИКЕР 1: Да.
Баллы, которые в array-- точно.
Таким образом, мы открываем этот Файл базы данных, которые
Я предполагаю, что это какая-то из базы данных марок.
И мы просто распечатав оценки каждого студента к этому файлу.
Прохладный?
Хорошо.
Удивительный.
Хорошо.
Давайте вернемся to--
>> Зала: У меня короткий вопрос.
Является Printf не в течение цикла?
Вот только в если петли?
СПИКЕР 1: Нет, это в течение цикла.
Я не могу видеть мою мышь очень хорошо здесь.
Так что я с трудом Формат, который должным образом.
Этот кронштейн, должны исчезнуть.
Он должен быть здесь.
Это то, что у тебя в течение цикла.
Там.
Теперь это довольно.
Так вот, как это должно be-- исключением для этого последнего кронштейна, что я уволен.
Хорошо.
Имеет ли это смысл для всех?
Хорошо.
Мы собираемся двигаться дальше к следующей вещи then--
которые, на самом деле, вы собираетесь нуждаться, чтобы увидеть код.
Так что я просто собираюсь скопировать, что более сейчас.
Хорошо.
Так что я собираюсь показать вам, ребята этот код.
И я хочу, чтобы вы попробовали и фигура то, что он должен делать.
>> Поэтому, учитывая, that-- занять минуту или около того.
Попробуйте выяснить, что здесь происходит.
>> Любые идеи?
>> Мы знаем, что у нас есть по крайней мере два Аргументы в командной строке, не так ли?
Я полагаю, одна из которых будет что [неразборчиво] из нашей программы является
а затем что-то еще.
Потому что, если [неразборчиво] меньше чем два, мы кричать на них.
Не так ли?
И от использования, это выглядит как это будет своего рода файл.
Мы все согласны с этим?
Так что теперь, что петля делать?
Что это переживает?
>> АУДИТОРИЯ: Все файлы.
СПИКЕР 1: Точно.
Это происходит через все файлы, которые мы вход там.
Таким образом, для каждого файла, это открывая некоторую строку там.
Это открывает файл.
Не так ли?
И это чтение из него.
Конечно, проверки, если это нуль.
А потом он печатает.
Если это нуль, это просто говорит нам что это не файл, который существует.
Потому что помню, с читать наш файл должен существовать.
Не так ли?
С записи и добавить, Вы можете уйти с ним.
Но с прочитанным, наш файл должен существовать.
>> И потом, если она действительно существует, Что мы здесь делаем?
Давайте просто начать здесь.
Что это do-- этот первый символ.
Что он делает?
Он получает один символ, не так ли?
Так что это делаешь?
Это становится первый символ.
Кто-нибудь знает EOF?
>> АУДИТОРИЯ: Конец файла?
>> СПИКЕР 1: Конец file-- точно.
Так это будет идти через весь файл, не так ли?
И тогда это будет обновить с помощью получать каждый последующий характер.
Не так ли?
И что он делает?
АУДИТОРИЯ: Ввод что in--
>> СПИКЕР 1: Putchar принты в заставку.
[Неразборчиво] характер.
А потом, когда он [неразборчиво] это закроет файл.
>> АУДИТОРИЯ: Вы не нуждаетесь в [? еще? ?]
>> СПИКЕР 1: Не обязательно.
Я имею в виду, что это своего рода подразумевается в этом.
Из-за этого возвращает, тем не менее, до тех пор, как это не поймать это, вы прекрасны.
Я имею в виду, что это, вероятно, хорошо практиковать делать в другом месте.
Но еще не всегда Необходимо особенно
если у вас есть что-то как возвращение, которое
означает, что в этом случае, если он улавливает это, ваша программа будет в конечном
и это никогда не добраться до этого.
Это больше для случая, когда вы находитесь не обязательно возвращаться что-то.
Потому что, если это не было возвращения ничего,
это будет означать, что если бы это было правдой, Остальные это будет по-прежнему работать.
И в этом случае, вы хотели бы ложным.
Если это возвращение, и окончание вашей программы,
еще не надо все время, в зависимости от контекста.
Джейкоб, ты есть вопрос?
АУДИТОРИЯ: Да.
Так же fgetc получить следующий символ?
Как увеличить персонаж?
СПИКЕР 1: Да.
Так fgetc получает следующий символ.
Вы можете думать об этом как C ++, в некотором смысле.
>> АУДИТОРИЯ: Так что же EOF?
>> СПИКЕР 1: EOF является конец файла.
Это просто маркер, который позволяет узнать, что ты в конце файла.
Так это будет распечатать на свой стандартный вывод.
И тогда это будет закрыть файл, когда это делается.
А потом пойдем в следующий файл, не так ли?
Таким образом в общем, то что это программа?
>> [Неразборчиво]
>> СПИКЕР 1: Да.
Это просто выводит все там.
Так что, если вы, ребята, когда-либо использовал КПП а затем имя какой-то file--
Я не знаю, если любой из вас есть когда-либо делал, что на вашем терминале.
Но если вы когда-либо использовать Команда CAT-- C-A-T--
а затем все, что файл у вас есть there-- его
печатает его на терминал, который может быть супер удобно для некоторых вещей.
Я использую это много.
Имеет ли это смысл для всех?
Прохладный?
>> ОК так что ваша задача now-- либо самостоятельно или с людьми вокруг you--
это просто написать простую программу что будет просто написать "Hello, World!"
в файл.
>> [Неразборчиво]
>> СПИКЕР 1: Я был бы, сделал Я делаю, что плохо на прошлой неделе?
Я не думаю, что это было то, что плохо.
Я рад, что вы все здесь.
Это действительно делает меня счастливым.
Я девушка из простых удовольствий.
Мне просто нравится, когда мой раздел посещает.
Так что я просто получаю это началось для вы, ребята, так что мы можем закодировать вместе.
Я не люблю положить никого на место, если вы не хотите быть.
>> АУДИТОРИЯ: Для викторины, сделать мы должны написать программу?
>> СПИКЕР 1: Вас могут попросить, чтобы писать простые программы вручную.
Ага.
>> АУДИТОРИЯ: Викторина на следующей неделе, не так ли?
>> СПИКЕР 1: Викторина в следующую среду.
Это означает, что есть прекрасный [? CSE?] сортировка партию после этого, который
значит вы получите свои результаты назад, что night-- в какое время?
Кто знает?
Но это будет в тот вечер.
>> Хорошо.
Как мы хотим начать этот?
Я дам вам hint-- начинается с этого.
>> АУДИТОРИЯ: Вы должны открыть файл.
>> СПИКЕР 1: Да.
Так что же вы хотите назвать это?
Вы просто хотите, чтобы называть его "файл"?
Давайте сделаем это легко.
Так fopen-- что наш Выход тест будет?
Назовите это "Привет".
И то, что наша режим?
Что мы делаем, чтобы этот файл?
>> АУДИТОРИЯ: Читать.
Написание.
СПИКЕР 1: Мы пишем к нему.
Прекрасный.
Итак, у нас есть этот файл.
Что мы должны сделать?
АУДИТОРИЯ: Проверьте, если это нуль.
СПИКЕР 1: Проверьте, если это null-- точно.
Вот что я хотел бы услышать.
Это должно быть автоматическим, особенно в значительной степени с этого момента.
Если вы начинаете segfaulting, вы, вероятно, не проверял на нуль где-то.
В девяти случаях из десяти, что это будет вашим ошибке.
Так что, если вы могли бы просто получить в Привычка, всегда проверяйте, если это нуль,
Ваша жизнь будет хороший и easy-- или проще.
>> Так проверьте, чтобы увидеть, если это нуль.
Так что, если это не нулевая, которые это то, что челка равна
означает: не null-- это действует.
Что мы хотим сделать?
Мы просто хотим, чтобы распечатать в этом файле, не так ли?
Так что мы собираемся использовать?
>> АУДИТОРИЯ: Fprintf
>> СПИКЕР 1: Fprintf-- прекрасный.
И fprintf принимает два arguments-- где это это происходит и что мы хотим распечатать.
Так что первым?
Где это происходит?
>> АУДИТОРИЯ: Файл.
>> СПИКЕР 1: Это собирается подать.
И то, что мы хотим напечатаны?
"Привет, мир!"
Хорошо.
У нас есть один последний thing-- еще один большой парадигма здесь.
АУДИТОРИЯ: Закрыть.
СПИКЕР 1: Закрыть.
Там вы идете.
>> АУДИТОРИЯ: это происходит если файл является недействительным?
СПИКЕР 1: Нет, это, если это не нулевая.
АУДИТОРИЯ: О, если это не-- ОК.
Для FOPEN а затем два аргумента, которые идут внутри,
Что же первый аргумент означает снова?
>> СПИКЕР 1: Аргумент так же, как имя файла
что вы хотите пойти.
Таким образом, после этого работает, вы бы есть файл с именем "привет"
что было "Hello, World" в нем.
Это все.
Одно только название.
>> АУДИТОРИЯ: И так как это писать, Файл не должен существовать.
Это то, что вы сказали?
>> СПИКЕР 1: Право.
Точно.
Если "Hello" в виде файла еще не существует, это
собирается создать файл с именем Hello "и писать в него для вас.
>> АУДИТОРИЯ: Когда вы говорите программа для писали в файл,
почему ты пишешь "файл", а не Имя файла и fprintf--
>> СПИКЕР 1: Потому что в этом случае у нас есть что большая FILE-- все в caps-- звезды,
подать.
Так что это указатель на файл что вы говорите.
Это путь, который мы просто ссылаться на него.
Таким образом, в этом случае, вы может думать о file-- ага,
мы можем использовать this-- файл здесь относится к открытию "Привет"
и позволяя ему писать.
>> АУДИТОРИЯ: Можем ли мы поставить "Привет" вместо [? просто?] е файл?
СПИКЕР 1: Нет, потому что "Привет" должен быть открыт и доступен для записи.
Файл вот как Обозначение что говорит ОК, мы
есть эта file-- hello-- что мы смотрим на.
Он был открыт.
И мы собираемся писать в него.
Если вы просто используете "Привет", что инкапсулируется в нем.
Так это будет волноваться.
Я имею в виду, вы могли бы назвал его.
Вы могли бы сделать файл, звезда, "Привет", равно, что.
Но все дело в том, что вам нужен файл звезда указатель в порядке
чтобы иметь возможность использовать эти функции.
АУДИТОРИЯ: Не могли бы вы сделать Файл, звезда, файл, "Привет"
или вы должны положить звезда файл, файл с ним?
СПИКЕР 1: Вы могли сделать файл, звезда, "Привет".
Вы можете изменить это, чтобы любое имя вы хотите.
Это совершенно произвольно что это имя.
Вы можете назвать это ничего.
Назовите его полет спагетти, если вы хотели.
>> АУДИТОРИЯ: Что такое "ш" в кавычках для?
>> СПИКЕР 1: "ж" это просто режим.
Так что мы пишем в этом файле.
Все хорошо?
Ясно?
Да.
>> АУДИТОРИЯ: Так что, когда он пишет это подать, куда мы потом найти этот файл?
>> СПИКЕР 1: Это будет в том же Каталог, который вы в настоящее время в.
Если вы находитесь в PSET трех и запуске этого, в вашем PSET
три папки будет этот файл называется "Hello".
Прохладный?
Все хорошо?
Я чувствую, что ты все получать его, и это здорово.
Хорошо.
Итак, вернемся к моей слайд show-- Я люблю, когда все работает.
ОК, pointers-- ли вы, ребята, рады?
Указатели велики.
Они берут немного чтобы обернуть вокруг головы.
Это мой второй год учебные указатели.
И я думаю, что я, наконец, получил его.
Так что, если вы боретесь, это нормально.
Как я уже говорил, рисования очень помогает с вещами в CS,
столько, сколько я думаю, что люди, как правило, думать о, мы на компьютере.
Мы должны просто код.
No-- картинки рисования действительно поможет вам.
И я действительно призываю вас подключиться к вашей воспитатель стороны
и вывести мелки или маркеры и ничья.
Потому что это поможет вам.
И если вы видите меня в рабочее время, я будет таскать кипы бумаг
с ручки рисования вещи.
>> Так, особенно с pointers-- рисовать картинки.
И я уверен, что мы на самом деле собираемся быть рисунок несколько фотографий здесь тоже.
>> Так вы, ребята, все увидели Бинки, это круто claymation вещь.
И мы думаем, что это действительно смешно, когда он взрывается в кучу куски.
Это какой-то комический для класса.
С [неразборчиво] это великое умение чтобы быть в состоянии контролировать память.
И это одна из вещей, которые на самом деле делает это такой мощный язык.
Но с приходит великая сила большая ответственность.
И сумасшедшие вещи могут произойти если вы не будете осторожны.
Так что, когда вы используете указатели, вы хотите сделать
что вы понимаете именно то, что вы делаете.
Надеюсь следующий немного Время поможет вам действительно понять
указатели, как их использовать, и как ими манипулировать.
>> Так memory-- я уверен, что мы прежде не видел эту схему.
Так что это всего лишь простой схема как вещи могут храниться память.
Таким образом, вы в основном имеют эти Огромные массивы один байт блоков
является то, что у нас есть here-- небольшое увеличивается на единицу каждый раз.
Это в шестнадцатеричной [неразборчиво] так восемь-битные блоки.
И каждый блок связан с какой-то шестнадцатеричного адреса.
Так что, если вы когда-либо видели 0x, вот только notating
что это адрес шестнадцатеричное.
Вы можете предположить, что это означает некоторые адрес в памяти.
Мы говорим о адресах памяти всякий раз, когда вы видите шестнадцатиричную.
>> У нас есть Интс являются переменными, поплавки переменные, которые хранят.
Так Интс магазина целых чисел.
Плывет магазин плавает.
Таким образом, мы также указатели что адреса памяти и не храните.
Это своего рода карт.
Указатели исключительно для адресов памяти.
Так вот, как вашего типа там.
Ваш прибор является 32-разрядным, а это значит, что ваш адрес памяти четыре байта.
Таким образом, любой указатель, что у вас есть Также будет четыре байта.
Или же, если это четыре байта, память на четыре байта.
Указатели магазин памяти.
Таким образом, они четыре байта.
Cool-- просто хочу, чтобы укрепить это.
>> Вы должны получить этот комикс сейчас.
Я не знаю, как многие из вас являются XKCD поклонники, но я люблю XKCD.
Здорово.
>> Хорошо.
Так создания pointers-- как я уже сказал, это в значительной степени так же, как что-нибудь еще.
У вас есть тип.
У вас есть имя.
Не так ли?
Это то, что у нас там. [? Hex?] Звезда означает, что это указатель,
а затем все, что вы хотите назвать это.
Так тип представляет то, что вы можете хранить.
Хорошо?
Таким же образом, что, если мы делаем целыми, мы знаем, что мы запоминания Int есть.
С указателем, его имеет адрес памяти.
Но что это означает, that-- вот где рисунок собирается пригодится.
Таким образом, в данном случае, мы имеем некоторые value-- скажем четыре.
Четыре находится на адрес одного.
Хорошо?
>> Это первая в данном случае означает что это указатель 2x.
Не так ли?
Это какой-то указатель х.
х может быть что-то, что угодно.
Что бы ни х is-- сказать х четыре.
Это собирается хранить адрес здесь память.
Так INT, звезда, x-- это некоторые другие слот в memory--
кто знает, что это такое.
Но это будет сохранять адрес здесь.
Так это будет like-- в этом случае, что бы,
хранится в 0x1-- независимо хранятся по адресу, который содержит наш указатель,
должен совпадать с То, что мы назначены.
Таким образом, на 0x1, в данном случае, это х.
Это может быть как никогда INT а мы используем это.
>> Точно так же, если у нас есть другой 1г, независимо
адрес хранится с у есть быть char-- же самое с г.
Таким же образом, когда вы попытаться сделать intx равна 0,4,
это будет кричать на вас и быть вроде нет, вы сказали, что вы хотели Int.
Это, как предполагается, внутр.
Перестаньте пытаться сделать это поплавок.
>> Так что пусть все будет, что они хотят быть.
Пусть все будет себя.
Настолько большой, что просто независимо от типа указателя
это, вот только что вы можете хранить там.
Хорошо?
С практикой, как с на прошлой неделе, все
Кажется, действительно отчасти абстрактный.
Мы собираемся сделать некоторую практику.
Следует иметь больше смысла.
>> Так ссылки и dereferencing-- это Очень важно, чтобы эти прямые.
Я до сих пор, чтобы обновить то и дело.
И я, как ждут, какой я хочу?
Так амперсанд фактически дают Вы ссылка или адрес.
Таким образом, это возвращает адрес в память о котором переменная хранится.
Так это будет на самом деле вернуться к вам шестнадцатеричное, в то время как разыменования его
на самом деле происходит, чтобы дать вам Данные, которые хранятся там.
Хорошо?
Таким образом, мы будем смотреть на пример очень быстро, или на самом деле в следующий раз.
>> Хорошо.
Таким образом, мы должны думать действительно тщательно об этом.
Так вот у нас есть некоторое целое число х.
Я собираюсь попробовать и сделать это из в меру своих способностей.
Таким образом, мы будем иметь этот слот х.
И это хранение пять.
Его адрес 0x4.
Прохладный?
Все хорошо.
>> Так что теперь у нас есть этот указатель.
Это было здесь.
И амперсанд дает нам адрес что-то.
Так, в данном случае, это адрес х.
Что такое адрес х?
04-- и этот указатель находится на 0x08.
Прохладный?
Таким образом, вы можете думать об этом Указатель, 04, просто указывает здесь.
И они называются указатели потому что, как мы получим больше в этом,
Вы будете видеть, указывая на вещи.
И один блок указывая на другой блок сделает намного больше смысла.
Так вот два.
А то у нас некоторые копия, которая является что-- 0x0c.
И это будет разыменовать нашего указателя.
>> Так что это говорю, Хорошо, вот наш указатель.
Значение он хранит это 0x04, И что это говорит, это зайти на этот адрес
и скажите мне, что это значит.
Так вот эффективно что эта стрелка делает.
Вы можете думать об этом как ваш звезды.
Так хорошо, когда мы делаем звезду, это означает следовать.
Перейти на этот адрес.
И это в основном только после эта стрелка на этот кусок памяти.
И дать нам то, что в нем, что на 5.
Это почему наша копия равна 5.
Имеет ли это смысл?
Кто нужен мне, чтобы пройти ли что снова, или медленнее?
Вы хотите, чтобы я через это еще раз?
Хорошо.
Мы собираемся, чтобы перерисовать его снова.
Когда мы начинаем, мы все согласны с тем у нас есть некоторые кусок памяти это переменная
х, что мы устанавливается равным 5.
Мы не контролируем, где он находится в памяти.
Так что это место является просто произвольно назначены.
Хорошо там?
Хорошо.
Тогда мы инициализировать указатель на междунар.
Вот почему он позволил, чтобы указать на х, потому что у нас есть Int в здесь.
У нас есть еще один кусок памяти, потому что этот указатель
является переменной как и все остальное.
Это произвольно назначены некоторое пространство в памяти.
И то, что он хранит это адрес х.
Ampersand означает адрес х.
Так что это адрес х?
>> АУДИТОРИЯ: Это zero--
СПИКЕР 1: 0x04.
Так then-- последним.
У нас есть некоторые copy-- снова просто еще одна переменная.
Так давайте назначим некоторые произвольные места.
И мы разыменовать нашего указателя.
Звезда означает пойти адрес хранится в моей указателя.
Скажи мне, что есть.
Так адрес, сохраненный в нашем указателя является 0x04.
Так мы идем по этому адресу.
Это указывает на этот адрес.
Что внутри этого блока памяти?
Это пять.
Так вот что мы назначаем нашу копию.
Все хорошо?
Прохладный.
Again-- фотографий.
>> Так отслеживания значения here-- Я позволю вы, ребята, думаете об этом.
Мы можем сделать еще один снимок.
Но я хочу, чтобы вы попробовали и причина через это самостоятельно в течение минуты.
>> Так как они не дают нам пример адрес,
Я просто хочу сделать амперсанд x-- которые должны помочь вести его домой.
Ampersand означает адрес.
>> Таким образом, в первой, все идти с первой линии.
Некоторые х Сета five-- некоторые случайный слот в памяти.
Int звезда указатель равен по адресу х, не так ли?
Создает Int звезда указатель этот блок, называет это указатель,
и присваивает его адрес х.
Я ужасно амперсандами.
>> Теперь то, что мы делаем, мы говорим, ОК, разыменовать нашего указателя.
Так мы идем нормально, что в нашей указателя?
Это амперсанд х.
Перейти к амперсанда х и переназначить его.
>> Так что теперь, амперсанд х будет 35.
Так в основном, если вы разыменования, вы идете в порядке.
Вы собираетесь рисовать Фотографии, как это.
Вы собираетесь рисовать ваши стрелы более, где это.
Так что в этом слоте в памяти и либо дать мне что значение обратно, или изменить его.
В этом случае, потому что мы на это Значение, мы присваиваем это будет 35.
В то время как в прошлом один, если вы заметили, мы
были присвоения, что было здесь что-то другое.
>> Таким образом, они имеют этот удивительный стол.
Это не так уж плохо.
Вы, ребята, работать на нем.
Я собираюсь сделать это на борту.
Мы собираемся заполнить его вместе, хорошо?
Так захватить некоторые бумаги, захват партнером, начать работать.
Я собираюсь получить больше кусок мела.
Потому что это будет много.
Хорошо.
ПРОФЕССОР: ОК.
Начнем с первой строки.
Мы начнем там, то вы, ребята, может возможно работать через несколько больше.
Хорошо.
равна б раз с так, что это?
Это не вопрос с подвохом, я обещаю.
>> СТУДЕНТ: 4 раз в 5.
>> ПРОФЕССОР: 4 раз в 5.
20.
Так что б?
СТУДЕНТ: 4.
>> ПРОФЕССОР: И с?
СТУДЕНТ: 5.
ПРОФЕССОР: 5.
И тогда это просто будет быть амперсанд а, амперсанд б,
амперсанд с, не так ли?
Неплохо.
Это достаточно просто.
Хорошо.
Так на следующий.
А равно раз с, в случае кто не был знаком с этим.
Все ли знакомы со временем, равна?
ОК, все это означает: это сокращение для равняется раз в.
Вы также можете сделать это с разделением, с того, с вычитанием.
Вы можете сделать равных, или плюс равна с означает равен плюс с, минус, равную
C будет равна минус C.
Это просто синтаксический сахар.
>> Так, в данном случае, равна а раз с даст нам то, что?
Опять же, не вопрос с подвохом.
>> СТУДЕНТ: 100.
>> ПРОФЕССОР: 100.
Ли изменить что-нибудь еще?
Нет.
Может быть, я, наконец, получить лучше в моих амперсандами.
>> СТУДЕНТ: ОК, извините, как ты 100?
ПРОФЕССОР: ОК.
Так равна раз с, так что раз с.
СТУДЕНТ: О, вы используете для previous--
ПРОФЕССОР: Да.
Так что это наши последние значения.
Это то, что вы должны быть используя по мере продвижения вниз, ОК.
Так, б является единственным изменение вещь, не так ли?
Так что давайте заполнить все остальное.
B. Что б будет?
Быть или не быть.
Так что это делаешь?
Что такое звезда годовых делать?
>> СТУДЕНТ: Код для расположения годовых.
>> СТУДЕНТ: Нет, не совсем.
Таким образом, это является ссылкой d.
>> СТУДЕНТ: Так б вручается стоимость годовых.
>> ПРОФЕССОР: Да, так ра адрес, не так ли?
Так говорит пойти туда, где есть сохраняются и дать ему это значение.
Так что б?
СТУДЕНТ: 100.
ПРОФЕССОР: 100.
Идеальный.
Итак, рс что меняется.
Все остальное остается неизменным.
Что шт будет?
Простой назначение.
ПК равна годовых, и то, что в год?
>> СТУДЕНТ: амперсанд.
ПРОФЕССОР: Прекрасно.
Теперь мы получаем интересный.
Хорошо, давайте разберем этот вниз.
Во-первых, то, что б раз с, потому что это легкая часть этого, не так ли?
B раз с is--
>> СТУДЕНТ: 500.
>> ПРОФЕССОР: Да, так то, что это один делает,
Если это звезда пб, что меняется?
>> СТУДЕНТ: Что в the--
ПРОФЕССОР: Что в б?
СТУДЕНТ: Что в пространстве что рь указывает на.
ПРОФЕССОР: И рь указывает to--
СТУДЕНТ: Б.
ПРОФЕССОР: В. Таким образом, единственный вещь изменение является б, верно.
Так б раз с, 500.
Так вот, какие изменения сейчас.
Прохладный.
Прекрасный.
Вы, ребята, делаете большое.
Ладно, разорвать этот один вниз.
С меняется, не так ли?
Таким образом, мы можем заполнить все остальное.
Посмотрим.
Хорошо.
Мы знаем, что с будет произведение двух чисел, не так ли?
Какие два числа, хотя?
>> СТУДЕНТ: и с?
>> ПРОФЕССОР: Так это Право на первой.
Таким образом, мы D ссылок Р, не так ли?
P из точек до, так что мы знаем, что это будет в 100 раз, что?
Времена, что делает шт точку?
Очки для.
Так в 100 раз 100 10000.
Значит ли это, имеет смысл?
Прохладный.
Главная стрейч, ребята, последний ряд.
Хорошо.
Что здесь меняется?
>> СТУДЕНТ: А.
ПРОФЕССОР: А. Идеальный, так все остальное может оставаться той же.
Хорошо.
А что такое?
Так что это раз и что?
Это звезда рь.
Так звезда рь означает вот рь, Pb точки б.
>> СТУДЕНТ: 500.
>> ПРОФЕССОР: 500.
Таким образом, мы имеем 500 раз 100.
Это 50000.
Вот так!
Посмотрите на это.
>> СТУДЕНТ: Почему мы должны & C для last--
ПРОФЕССОР: Извините.
СТУДЕНТ: О, хорошо.
ПРОФЕССОР: Мое плохое.
Много письменной форме.
Все хорошо?
Не слишком плохо, не так ли?
Просто нужно немного в то время как на работу через.
Если вы разбить его, понять, что каждый неполный
имеет в виду to-- как со всем, что это,
yes-- разбить его на несколько проблемы, а затем рекомбинировать,
и вы можете сделать некоторые удивительные вещи.
Есть ответы, но мы сделали это.
Арифметика указателей.
Ах.
Мои руки все меловой.
Так сложения или вычитания INT регулирует указатель
размером от типа указателя.
Помните, как каждый тип имеет другой размер?
Так как двойной или долго долго восемь и интервал в четыре, но символ является одним.
>> Так что вы хотите сделать, is-- одну вещь, чтобы помнить
Просто, насколько ваш значение указателя на самом деле изменения
будет зависеть от тип указателя это.
Все хорошо с этим?
Могу ли я удалить его?
Мы хорошо?
Удивительный.
>> Так что, если у нас есть некоторые указатель that-- это будет be-- Я
собирается сделать это интервал указатель.
Он хранит это.
Если бы вы были сказать указатель плюс один, что он собирается сделать
будет он собирается обновить это по размеру в междунар
потому что это тип указателя это.
>> С С, все очень строгий и регламентированный.
Указатель INT собирается обновить путем объем пространства INT бы.
INT четыре байта.
>> Так что бы это превратится?
Ты просто добавив четыре на это.
Теперь указатель будет be-- ОК.
>> Так что, если это был символ, и мы сделали указатель плюс один, что бы это было сейчас?
Если это started-- притворяясь мы started-- сейчас это 0x08.
Давайте теперь сказать, что это было обугливается указатель, и мы добавили один.
Что бы это изменить, чтобы?
Сколько байт является символ?
>> АУДИТОРИЯ: Один.
>> СПИКЕР 1: Один.
АУДИТОРИЯ: Так 0x09.
СПИКЕР 1: Так что это будет девять.
Так что просто что-то, чтобы помнить.
Просто, когда вы добавляете один, это не добавив к нему один, если это не символ.
Это добавление сколько байты тип, что это,
Именно поэтому у нас есть это уравнение здесь.
Так что это INT раза больше от типа указателя.
>> Таким образом, мы имеем пример здесь.
у был назначен на эту стоимость, 0x4, когда мы сделали у плюс равен единице.
Что в ней, что в х, не меняется.
Что делает изменение это то, что в у.
Адрес хранится в у обновляются на четыре потому что есть четыре байта в междунар
и это интервал указатель.
>> Хорошо.
Так что теперь у нас есть другое упражнение.
Таким образом, вопрос, что будет печатать.
Любые идеи?
>> АУДИТОРИЯ: число символы в счастливой кошки?
СПИКЕР 1: Точно.
Так хотелось с вашей строке.
Все получают ли что?
Хотим ли мы, чтобы пройти через это?
>> Да, хорошо.
Итак, что мы имеем here-- я как это гораздо больше.
Я не должен [Неразборчиво] смехотворно.
>> Так у нас есть здесь строку, счастливые кошки.
Прекрасный.
У нас есть счетчик, который мы отслеживания.
Таким образом, мы имеем некоторую символ * указатель что просто устанавливается равной ул.
Что это проделывается это присвоения некоторое указатель
в начале вашей строке.
Потому что я уверен, что, как это было отмечено в докладе,
мы дали вам, ребята это тип данных называется строка.
>> Но на самом деле струны просто Массив of-- как символ *.
Это указатель на кучу персонажей которые являются смежными в памяти.
Так что это просто устанавливает его равна любой строки
идентифицируется где его первый символ.
Так что это просто установив некоторую точку равна начало строки.
Все там хорошо?
Прохладный.
>> Так что это разыменования наш указатель.
Так что на самом деле происходит в дать нам какое-то значение в здесь,
в нашей строки, что мы говорим о.
И мы говорим, пока это не пустой терминатор.
Так продолжать идти, пока вы не получите к концу строки.
Обновите указатель на один.
Так г, он будет обновлять с помощью одного каждый раз, потому что это символ,
символ *.
>> Так это будет проходить.
Это собирается обновить.
Так впервые в этом бежит, это будет здесь, в ч.
Это собирается обновить.
>> Это будет.
Это будет р, у, и так далее и тому подобное.
Мы будем обновлять счетчик.
Когда он достигает конца, его просто печатает, как далеко это стало.
Да.
>> АУДИТОРИЯ: Так это рассчитывает пространство как один, не так ли?
Хорошо.
>> СПИКЕР 1: Думайте так.
Это что, question--
>> АУДИТОРИЯ: [неразборчиво].
>> СПИКЕР 1: Не беспокойтесь.
Это я делаю это.
Ладно, так одно я понять, что с массивом,
Вы также можете рассматривать его как указатель, потому что массивы являются просто
непрерывные пятна памяти.
>> Таким образом, вы можете относиться к нему так же.
Вы можете управлять им с указателями, тоже.
Так а не делать, в этом Дело, аналогичная вещь
будет массив 0 равен 1.
>> Но таким же образом, что Строка определяется
к началу где его первый символ,
Массив определяется где ее первый элемент.
Потому что мы знаем, что мы гарантируется, что эти
собираются быть непрерывным блоки памяти.
Это то, что позволяет нам делать это.
Мы знаем, что они непрерывно блоки памяти.
>> Таким образом, в данном случае, путем разыменования просто массив, который говорит нам:
ОК, перейдите к началу ваш массив, который находится здесь.
Таким образом, вы можете установить его равным единице.
И в этом случае, независимо от вашего массива тип, когда вы обновите его одним,
вот только как обновление это к следующему индексу.
Вы можете сделать это, потому что вы знаю, что в вашем массиве.
Так что не знает, сколько в обновить указатель на,
какой адрес, чтобы обновить его до так что вы в следующем временном интервале.
>> Так что это просто другой способ писать массив 0 равен 1,
Массив 1 равна 2, массив Кронштейн 2 равен 3.
Это просто еще один способ думать об этом.
Потому что они являются непрерывными блоки в памяти,
Вы можете обратиться к ним либо массивом notation--
который я лично найти easier-- но, может быть,
Вы должны работать с ним строго по адресам памяти.
И это, как вы сделали бы это.
Вид больше как круто, что вы могли бы сделать
по сравнению с возможно не то, что вы находитесь на самом деле происходит в реализации.
>> Я использую его в 61.
Вы, ребята, наверное, не нужно беспокоиться об этом слишком много.
Но если вы заинтересованы, взять 61 в следующем году.
Мы на финишной прямой, ребята.
Я знаю, что это долго.
Динамический Allocation-- памяти поэтому мы знаем, что один
вещей, когда мы говорили во время наш первый раздел вместе,
мы смотрели на своп Функция, где это было
выходит за рамки нашей основной функции.
И мы проходили в этих значений что были эффективно копии.
>> И как только своп закончил выполняется, он просто оставил пачку.
Помните, у нас есть стек рамки для подкачки.
Он оставляет, и те, Значения выйти с ним.
И они ушли.
Мы ничего не могли сделать, с ними и нам было грустно
потому что мы не можем поменять наши ценности.
>> Но с C, как я уже говорил, вам есть много власти над памятью.
Так что вы можете сделать, это вы можете выделить вещи в куче здесь
что пробудет там до тех пор, Вы говорите им, в противном случае.
>> Они, как хорошие дети.
Они остаются там.
Они не оставляют.
Они останутся там до тех пор, пока вы как, в порядке, вы можете уйти.
>> В то время как вещи в стеке, who-- они, как непослушных детей.
Они просто убежать, если вы хотите быть там, а затем они ушли.
Вы не можете получить их обратно.
>> Так куча is-- мы собираемся говорить о таНос и бесплатно, что
Я уверен, что вы, ребята, слышали о в лекции.
И это в основном способ иметь очень постоянные данные.
Таким образом, вы можете сохранить данные вокруг до тех пор, как вы хотите.
Ага.
>> АУДИТОРИЯ: Можете ли вы определить кучу и стек?
Они нравятся места, чтобы положить вещи?
>> СПИКЕР 1: Поэтому они в основном просто-- они
то, как мы см просто память.
Так кучи просто места, где память выделяется динамически,
в то время как стек относится более укладывать кадров
что более центральное место в Функции, которые на самом деле работает.
Вы действительно не имеют контроля.
>> Большая разница, у вас есть контроль по куче, если вы хотите, чтобы.
У вас есть меньше контроля над стеком.
Стек зависит Функции, которые работают,
и порядок, в котором они работать, и, как все вернулись.
В то время как с кучи, как мы увидим, что вы можете сказать,
ОК, я хочу, чтобы это значение, чтобы быть вокруг, пока я не скажу вам, иначе.
Вы не можете избавиться от него.
Вы не разрешается отменять его.
Вы собираетесь держать его вокруг до тех пор, как я тебе говорю.
Вы добираетесь, чтобы быть боссом в куче, в то время как stack-- Возможно, если вы
как надувать свой путь Вы можете быть боссом.
Но не совсем.
И это на самом деле просто память.
Это просто разные способы из ссылкой на память.
>> Прохладный.
Так с этим, как контролировать вашу память.
Это с таНос, которые Вы собираетесь получить в использовании.
Так что это просто короткая для выделения памяти.
Это все, что есть.
Там куча другой прохладно Функции, которые имеют Alloc в конце,
и они стоят за различными вещами.
>> Поэтому, когда вам нужно для хранения, что нужно чтобы пережить текущую функцию так
что, когда ваш текущий Функция убегает,
у вас еще есть данные, что вам получил от него, вы хотите использовать таНос.
Это будет инициализировать его в куче.
И как я уже сказал, и держать говоря, вы будете держать его там
пока вы не укажете обратного, которая является важной вещью здесь.
>> Так что, одно заметить, и это, как правило, очень важно,
является то, что это SIZEOF это супер полезно использовать
потому что в зависимости от типа машины вы работаете,
она может иметь различные количества памяти, что он принимает.
Таким образом, вы всегда хотите использовать размер так что вы не зависит от машины,
так что ваш код будет работать на любой машине.
>> И это только часть писать хороший код.
Если он работает на одной машине, но не какой-либо из других,
насколько полезным было ваша программа?
Таким образом, вы всегда хотите убедитесь, что и использовать SizeOf.
>> АУДИТОРИЯ: Так что, как размер 10 дюймов [неразборчиво]?
>> СПИКЕР 1: Это размер 10 целых чисел.
да.
Так размер целых чисел вернется сколько один интервал взять.
Или размер гольца, как много делает один символ дубль.
А потом, сколько блоков того, что вы хотите?
>> Таким образом, в данном случае, мы хотим что-то что мы можем хранить 10 целыми в.
И он будет работать независимо машины, которые прохладно.
Так сколько байт будет что на самом деле дать вам?
Быстрый математика.
>> АУДИТОРИЯ: 40.
СПИКЕР 1: 40.
Точно.
Так еще один большой вещью.
Указатель или таНос может вернуться нуль.
>> Итак, еще раз, всегда проверяйте, чтобы увидеть, если он вернулся нуль
прежде чем попытаться сделать что-нибудь с ним.
Если вы попробуете и разыменовать этот указатель теперь,
это просто будет сегментации потому что вы пошли и пытались
прикоснуться нуль, когда вы не должны.
Так всегда проверять нуль.
Опять же, все это можно сделать.
>> Это может вернуть пустой.
Это будет вернуться нуль, если вы либо из космоса, или по любой причине,
он бежал в какой-то ошибка памяти.
Это иногда просто возвращает нуль.
Таким образом, вы просто должны проверить это.
Вот и все, на этом слайде говорит.
И тогда то, что у нас есть вот вызов, чтобы освободить.
Таким образом, в тот же самый путь, что, если вас открыть файл необходимо закрыть файл,
если вас таНос памяти, вы Вы должны освободить эту память.
И вы, ребята, получите сделать действительно интересный материал.
>> И есть программа, которую можно запустить с увидеть, если вы когда-либо утечки памяти.
Но вы не хотите, чтобы утечка памяти.
Это действительно плохо.
Просто испортите вещи.
>> Это плохо делать так же, как программирование разумно эффективности проектирования.
Но это также просто вид плохо для вашего компьютера.
Так что свободные вещи когда вы Malloc их.
>> Вы, ребята, увидите симметрии здесь.
Супер просто.
Просто бесплатно, а затем независимо от вашего указатель,
все, что имя ваш указатель, и это
будет заботиться о освобождая его для вас.
Прохладный.
>> Тогда у нас есть это.
Таким образом, мы только собираемся ходить через эту программу.
И тогда вы, ребята, сделали.
>> Так [неразборчиво] только основной.
Таким образом, мы имеем некоторую INT * указатель.
Поэтому у нас есть указатель что собирается провести целыми.
А сколько Интс он собирается провести?
Только один.
Размер в междунар.
>> Мы проверяем, если указатель является нулевым, потому что это
есть, мы хотим сказать, ничего не делают.
Это плохо.
Так мы печатаем некоторые ошибки из память, наиболее часто возвращают 1,
как вы, ребята привыкли.
>> А то у нас здесь, мы разыменовать нашего указателя.
Значит, мы собираемся хранить что-то на месте, данным нам.
Int * указатель, или таНос, возвращает адрес, где он установлен в стороне это
Память для вас.
Так что это в основном давая вам like-- если вас
думаю о связке дома в окрестности
что вы хотите поставить Ваша мебель в, таНос
как хорошо, вы получаете идти в дом три.
И это дает вам адрес дома три.
>> Так что это сейчас, это указатель хранит адрес,
хранит адрес вашего дома.
* PTR средства, ОК, я в моем доме.
Прохладный.
Мне нужно, чтобы получить некоторое целое число.
>> Так вы просите кого-то чтобы дать вам мебель сейчас.
Таким образом, вы получаете некоторое Int.
И это ставит его в указатель где он, указывая на.
>> А потом он просто печатает , вы вошли туда, куда.
И снова, ссылка.
Так что это, как вы пошли на это решения, и вы видели, что там было.
Прохладный?
>> И тогда, конечно, мы освобождаем нашу указатель.
Не забудьте освободить указатель.
Не забудьте проверить нуль.
Не забудьте освободить указатель.
У вас есть две вещи вы помните из это, или что вы должны помнить.
Да.
АУДИТОРИЯ: [неразборчиво] материал так, символ * ы.
Как вышло, мы никогда освободить тех?
>> СПИКЕР 1: Хм?
>> АУДИТОРИЯ: Есть те, как струны?
Вы сказали, что строки так же, как символ * с, не так ли?
Так почему бы нам не освободиться строк?
>> СПИКЕР 1: Вы только бесплатно, если вы mallocing.
АУДИТОРИЯ: О, если вы mallocing.
СПИКЕР 1: Так таНос и бесплатно две вещи
что вы всегда должны иметь вместе.
е открытое, е близко, две вещи Вы должны иметь вместе.
В обоих этих случаях, проверить нуль.
Да.
>> АУДИТОРИЯ: Так бесплатно только позволяя что-то еще
должны быть сохранены там после эта программа используется его?
>> СПИКЕР 1: Это просто говорю, ОК, я сделал с этим.
Вам не нужно держать его вокруг.
В противном случае ваш компьютер будет просто нравится пробовать и держать его там.
И тогда вы can't-- это работает в памяти вопросы позже.
Вы всегда хотите, чтобы освободить его из- он говорит компьютер, ОК, я
сделано с этого места памяти.
Вы можете иметь его обратно для меня, чтобы использовать позже.
Прохладный?
Да.
>> АУДИТОРИЯ: Таким образом, мы использовали% D просто потому что вдвое больше, чем возвращается,
или почему is-- [неразборчиво].
>> АУДИТОРИЯ: Можете ли вы использовать% я?
>> СПИКЕР 1: Вы можете использовать% Я.
Любые горящие вопросы?
Продолжай.
Аудитория: Я просто быстрый вопрос.
Так переменная PTR, that's-- как, с INT * PTR = таНос,
вот только говорю, что это указывая на место в memory--
СПИКЕР 1: Вы хотите [неразборчиво]?
АУДИТОРИЯ: --that это Размер of-- нет, все в порядке.
Но это просто указывая на место в памяти, что так же, как четыре байта.
СПИКЕР 1: Право.
Так Malloc, размер INT говорит, ОК, я собираюсь пойти бежать,
найти четыре байта памяти для вас.
Когда он находит, что четыре байт из памяти, его
дает резервную адрес от того, где он начинается,
и вот что хранится в указатель, или PTR.
Хорошо.
Вы, ребята, выглядят менее запутанной, чем большинство люди, когда я говорю о указателя,
так что я чувствовал себя довольно хорошо прямо сейчас.
>> Хорошо.
Как всегда, вы, ребята, должны иметь все получили свои оценки pset2 сейчас.
Я знаю, что были некоторые шаткий вещи, где он говорит, формула не действует
или что-то.
Если вы получаете, что все Ваши сорта действительны на моей стороне.
Так что я могу отправить вам скриншоты ваших классах.
Просто дайте мне знать, а если вы пропуская ни сорта или что-то
кажется, не имеет смысла.
Иди ко мне.
>> Я был супер горжусь тобой Ребята уже, так держать.
И хорошо отдохнуть вашей неделю.
Я уверен, что я буду видеть некоторые из вас в рабочее время.