>> [Музична тема]
>> СПІКЕР 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 зараз.
Я знаю, що були деякі хиткий речі, де він каже, формула не діє
або щось.
Якщо ви отримуєте, що все Ваші сорти дійсні на моєму боці.
Так що я можу відправити вам скріншоти ваших класах.
Просто дайте мені знати, а якщо ви пропускаючи ні сорти або щось
здається, не має сенсу.
Іди до мене.
>> Я був супер пишаюся тобою Хлопці вже, так тримати.
І добре відпочити вашої тиждень.
Я впевнений, що я буду бачити деякі з вас в робочий час.