>> [Музика, яка грає]
>> DAVIN: Гаразд, хлопці.
Так що це огляд в перший вікторини.
Всі готові до вікторина в середу?
Елісон: Woo!
СТУДЕНТ: Woo!
DAVIN: Так.
Елісон: Так!
DAVIN: Цей хлопець готовий.
Цей хлопець, дві руки, приємно.
Так вікторина огляд сьогодні, це буде бути близько години-півтори.
Ми збираємося перейти всі основні Поняття, ви повинні знати для вікторини.
Ми збираємося піти протягом деякого кодування по приклади рук, які на кожному вікторини.
І якщо у вас є питання, не соромтеся підняти руку і все
як що.
Ну, логістика близько вікторина онлайн.
Отже, ми збираємося розділити людей на різні номери.
Він заснований на їх ім'я.
Так що якщо у вас є які-небудь питання про те, де йти або про те, що матеріал, як,
офіційне слово на тому, що відбувається щоб бути на вікторині, перевірити в Інтернеті.
І це все в курсі.
Так що, якщо немає запитань до Почнемо з того, що ми збираємося почати.
І ось Еллісон.
>> [Плескає]
>> Елісон: ОК, спасибі, Роб.
Цінуйте це.
Девін повинен перекинувся на це.
Це не вичерпний список Теми, як завжди, як Девін щойно сказав.
Зверніться до документації онлайн про вікторині нульовий.
Але це досить much-- це на навчальній
це все, що ми перейшли до теперішнього часу.
Все тут чесна гра, а також що-небудь ще
що, можливо, були згадані в доповіді.
>> Мій розділ, тут, є просто багато огляду.
Є пара вправ що ви, хлопці, могли б працювати.
Але здебільшого, ми дійсно хочу, щоб дістатися до Девін з тих коду
ручними вправ.
>> Тому я збираюся летіти через це.
Якщо у вас є які-небудь питання, зупинити мене.
Підніміть руку.
Я обіцяю, що я, ймовірно, бачити вас.
Якщо ні, то просто махнути його навколо.
Я буду говорити швидко.
Я сподіваюся, що все в порядку з цим.
>> ОК, спеціальне слово, Девін, очевидно, забув перегортати ці слайди.
[Сміється] Ти в біді, чоловік.
Так рад для вікторини нульовою, практиці кодування на папері.
Ви, хлопці, збираєтеся отримати деякі практикувати с, що в даний час з Девін,
так що ви не будете повністю самостійно.
Я думаю, що ми насправді відбувається через цих двох функцій.
Таким чином, ви будете добре підготовлені є.
>> Ознайомитися зі своїми проблемними наборів.
Там були питання на попередніх опитувань
що проситиме вас, наприклад, для кодування до чогось дуже схоже на Маріо.
Так будучи добре знайомий з Ваша проблема встановлює, а також
як питання, які ми просимо Вас на початку на формі
що ви заповнюєте, буде служити вам дуже добре.
>> У попереднього вікторину під тимчасові обмеження.
Ці вікторини довгі.
Час іде дуже швидко.
І часто, ви не розумієте, як швидко він іде до вас насправді
поставити себе відповідно до цих обмеженнями.
Так що, якщо ви можете просто вирізати, ви знаєте, 75 хвилин, або сьогодні ввечері або завтра
взяти один з цих вікторинах під що, ви будете в набагато кращій формі.
>> А також, створюючи свій опорний лист.
Пам'ятайте, ви отримуєте один сторінка спереду і ззаду
в якості посилання для вашого вікторини в середу.
Створення, що це відмінний спосіб для вивчення.
Все, що у вас виникли проблеми з ви хочете включити там.
Все, що ваші ТФ були, як, це дійсно важливо.
Ви повинні це знати, є може бути, все у вас там
якщо у вас немає їх запам'ятав.
Навіть якщо ви знаєте їх дійсно добре, іноді маючи його на є
це просто якась комфорту для вас, які я знаю, вікторини викликають стрес.
Таким чином, будь комфорт ви отримаєте може допомогти.
Гаразд, також, виспатися і їдять і як нормальні речі
що ми говоримо вам, для вікторини.
>> Так, починаючи з простого, типи даних і розміри.
Як я вже сказав, це просто буде щоб бути мені кидати багато матеріалу
тут, що ви повинні знати.
Тому у нас є наші символи які один байт, Інтс
що чотири байта, довго довго, що вісім байт.
В основному, це просто ви хочу тримати великі цілі числа.
Пливе, які є чотири, подвоюється, які вісім.
Знову ж, просто дає вам більш простір для ваших поплавців.
І потім введіть зірку, так що будь покажчик на 32-бітної машині,
який всі ви, хлопці, повинні знати, на чотири байти.
>> Таким чином, всі речі, які ви повинні знаю, може бути, речі
Ви хочете, щоб на Ваше посилання лист.
ОК, двійковий перетворення в двійковий, перетворення
в шестнадцатеричное, назад і вперед, всі речі, які ви повинні знати.
Так з двійкової системи числення в десяткову.
Ви, хлопці, хочете, щоб взяти швидкий хвилину і спробувати з'ясувати, кожен з них
а потім скажіть мені, що вони?
>> У мене також є цукерки в моїй сумці, так що будь хто відповідає отримує цукерки, до речі.
І в мене є багато чого з нього.
Дозвольте мені взяти це.
Я збираюся дати це Гейб.
Таким чином, ви можете роздавати цукерки хто добре і кооператив.
>> ОК, я побачив руку там в спину.
>> СТУДЕНТ: Так, перший з них 42.
>> Елісон: Так, перший 42, правильно.
СТУДЕНТ: [нерозбірливо].
[Сміх]
Елісон: другий, Є ще в жовтий?
СТУДЕНТ: 110010.
Елісон: Правильно, і це Останній, тут, на дні?
Крім того, так, ви знаєте, хочете?
Просто викинути цукерки.
Як щодо цукерок для всіх?
>> СТУДЕНТ: [нерозбірливо], коли ми закінчимо.
>> Елісон: Тсс.
І тоді останній.
Хто хоче відповісти?
Прямо там.
>> СТУДЕНТ: 11100.
>> Елісон: 11100, подивіться на це.
Поздоровляю, відмінна робота, все.
ОК, все начебто розумію процес для цього?
Ви, йдучи з двійкової системи числення в десяткову так я, як правило, роблять це, як виписуючи
повноваження 2.
Тому я говорю, добре, 0 рази 2 в 0, так це 0, 1 раз 2 в перший,
2 збирається і далі таким чином.
Хтось хоче, щоб я явно чи пройти прикладу двійковий?
Добре, прохолодно.
>> Десяткова двійковий дуже схожий.
Я, як правило, виписують повноваження 2.
Почніть з того, який є найбільшим, але не пройти десяткової
що ви шукаєте.
А потім начебто працювати ваш шлях назад додавши речі по мірі необхідності.
>> А потім з того, що це так само, як звичайною того.
Якщо ви коли-небудь випадок, коли ви знаходитесь додавши два 1с, це, очевидно, стає 2.
2 в двійковій тепер 1 0, так що ви повинні нести свій 1 в наступному стовпчику.
Прохолодний.
>> Hexadecimal, це може бути щось що трохи менше знайомі.
Так як Роб був просто каже мені, заздалегідь, його трюк для цього
це просто розділити його на чотири байта шматки, ОК?
Біти, вибачте.
Бачити?
Завдяки Роб.
Ось чому ви тут. [ШУМУ] ОК, так що ми просто розбити його
на чотири біта шматки.
Так з довічних файлів в шістнадцятковому, ми дивимося на перший 4,
який, якщо у нас є чотири 1с в рядок, що число Чи це символізує?
>> СТУДЕНТ: Ф.
>> Елісон: Так що в цьому випадку, що 11111111 ілі-- да?
СТУДЕНТ: FF.
Елісон: Відмінно, FF.
Так здорово, цукерки для вас.
Тепер, для того, як шестнадцатеричное в двійкову систему, ми просто думати про це почасти в зворотному напрямку.
Для кожного номера або літери цього у нас в шістнадцятковому,
просто перетворити його в його чотирьох біт [Сміється], щоб її чотири бітної перетворення.
Так 5, в даному випадку, що якщо 5 ми представляє його з чотирма бітами?
>> СТУДЕНТ: 010?
Мм-ом.
А потім, що насправді 10, буде?
1010.
Таким чином, ми маємо, що, тут.
Так конвертації між шестнадцатеричной і бінарний насправді не так уже й погано.
Якщо ви подивитеся на нього в чотири біта шматки, буде золотий.
Everyone-- да?
>> ROB: Це нерозумно, але я завжди пам'ятаю,
, Так як передбачається, 10.
І бінарний просто 10 жовтня, so--
>> Елісон: А, ось ми йдемо.
>> ROB: Ей.
>> Елісон: Гей, цукерки для Роба.
Існує не-шоколадний матеріал в там.
Таким чином, ви можете мати деякі.
Так ASCII математиці.
Поводьтеся.
Так ASCII математиці, як ви, хлопці, ймовірно, добре пам'ятаю
р встановлено 2 з Visioneer і Цезар, ти багато це зробив.
Пам'ятайте, персонажі принципово просто цифри.
Таким чином, ми можемо зробити математику з ними, так само, як ми робимо математику з цілих чисел.
>> Тому у нас є трохи проста річ тут.
У нас є деякі в це ініціалізації до 65.
І B дорівнює значенню ASCII А плюс 1, символ C дорівнює D мінус 1,
і символ D дорівнює 68.
Отже, ми збираємося друку всі вони, як ми бачимо тут.
І хто може сказати мені, що це буде роздрукувати?
СТУДЕНТ: [нерозбірливо].
Елісон: Рівне, так Одна справа помітити це
що ми роздруківки персонажі кожен раз, тут.
Ми позначає хоча А і В є Інтс, коли ми оголосили їх вище.
Ми друку їх як героїв по відсотків C і наша Printf заяву,
таким чином, вони будуть все друкувати, як героїв.
І, звичайно, значення ASCII 65 Воля друкувати як А. Значення ASCII з плюс 1
буде 66, який буде з гордістю В. Таким чином, справді, ми
отримати A B C D. Все там добре?
Є питання?
Дивовижний.
>> ОК, сфера.
Так сфера, очевидно, дуже Важливо розуміти, тут.
Багато з вас, якщо ви є компіляції помилки,
і це говорить, що ви не повинні доступ до якої-небудь змінної,
це, ймовірно, тому, що ви визначається його в циклі
а потім спробував отримати доступ до його з нього, або навпаки.
>> Так сфера по своїй суті, він просто визначає, де
ми говоримо, змінна існує, де ми можете його змінити, де ми можемо отримати до нього доступ.
Це просто якась говорив це єдині місця, де у вас є доступ
в цієї змінної.
>> Так два областей, що ми говоримо про під час занять є глобальні та локальні.
Так глобальні змінні ми говоримо про коли ви визначаєте їх вище основною.
Це означає, що ваш весь Програма має доступ до неї,
і він існує доти, як програма працює, добре?
Місцевий означає, що це більш обмежений областю.
Тому, коли у вас є певні функції як своп, ми завжди говоримо о.
Ми завжди говоримо про своп з А і Б. А і В існують в цій функції.
Вони не існують ніде.
>> Як добре, коли у вас є, якщо заяви або для петель.
Всякий раз, коли ми маємо, наприклад, в цикл у нас є інтервал я дорівнює 0.
У нас є деякі умови, і ми оновлювати його.
Я існує тільки в підтяжки, що для циклу.
При спробі доступу до нього в іншому місці, компілятор буде кричати на вас.
Це було б, як, що ви намагаєтеся зробити?
Це не існує.
Так ось два різні типи рамки.
Чи має це сенс для всіх?
>> Так, наприклад, тут, в цьому це лише деякі прості програми.
Що ви, хлопці, думаєте це відбудеться в кожній точці
що ми намагаємося друкувати?
Так що це один тут, що станеться?
СТУДЕНТ: Це буде друкувати три.
Аллісон: справа.
Це буде друкувати три.
Що тут?
СТУДЕНТ: Це не буде працювати.
Елісон: Це не буде працювати.
Ти з області видимості, чи не так?
Локальна змінна не існує поза цими дужок, все в порядку?
І тоді те, що тут?
>> СТУДЕНТ: [нерозбірливо].
>> Елісон: Що?
Роб, йдуть.
>> ROB: Я тільки що сказав.
Глобальні змінні повинні бути Глобальна змінна підкреслення.
>> Елісон: Ах, так, вибачте.
Спасибі, Роб.
Роб, як наш резидент компілятора.
Він просто кричати на нас, коли ми це потрібно. [Сміється] Да,
повинна бути глобальна змінна підкреслення.
Так якщо припустити, що що був глобальний підкреслення
Змінна, що станеться тут?
СТУДЕНТ: Це буде працювати.
Аллісон: Це буде працювати.
Так що будемо друкувати, так що просто дуже простий приклад.
ОК, прототипи.
Так, очевидно, ми дійсно підкреслити для вас, хлопці
зробити функції, якщо він сенс в ваших програмах.
Але, звичайно, коли тебе зробити свої власні функції,
як правило, ви будете визначати їх після основної.
І ви будете намагатися викликати їх в основний.
І якщо ви не використовуєте прототип, компілятор буде кричати на вас.
>> Прототип в основному просто говорю компілятора
що у мене є ця функція нижче основної.
Я буду називати його, перш ніж я його визначення.
Тільки тримайся.
Я обіцяю, що це визначається, і ви матиме все, що вам потрібно.
>> Так як ми робимо це тільки ваше повернення тип, ім'я функції, ваш вхід
Список.
Це в основному перша лінія Вашої оголошенні функції.
Це дійсно все це.
Але це всього лише Взагалі-то формат.
>> Таким чином, у нашому прикладі, які ви, хлопці, повинні
бачили в розділі в якийсь момент, у нас є
деякі INT куб, займає деякий Int введення.
І у нас є наша головна Функція, яка називає куб.
І куб визначається постфактум.
>> Так що, якщо у нас не було введення INT куба у верхній частині, коли ми зателефонували куб
в головному, нашого компілятора буде злитися на нас.
Це було б, як, що ви говорите?
Куб не існує.
Я не знаю, що ви просите.
І я просто хочу, стоп.
>> Але тому, що ми зробили наш прототип у верхній частині, ми вже говорили,
Ви знаєте, коли ви бачите куб, не хвилюйтеся про це.
Я обіцяю, що це визначено пізніше.
І це дам вам робити те, що ви хочете.
Так що, якщо ви коли-небудь мати функцію який оголошений після виклику його
вперше, необхідно Тобто це прототип на самому верху.
>> Да?
>> ROB: Це квадрат, що не кубатури.
>> Елісон: О, мій Бог.
Я не have-- Гейб, я думав, Ви були нашим коректором.
ОК, хлопці, потерпіть мене, тут.
Я сподіваюся, що кожен отримує ідею.
ОК, так що це повинно бути був квадрат, не в кубі.
Але ідея залишається тією ж.
Будь-яка функція, яка ми називаємо після Те, повинні мати прототип.
Все добре з цим?
Будь-які інші друкарські помилки?
Добре.
Опечатки тут, перш ніж почати, Роб?
[Сміється] Отже, структур.
В основному, структури дозволяють Вам створити свій власний тип даних.
Так як междунар або гольця або Поплавок, це просто ще один тип.
Мені подобається думати про нього, як, як, створити свій власний тип даних.
Так він дозволяє це зробити.
І він тримає різні типи даних.
>> Так що, якщо ви пам'ятаєте, в масиві, ми може тільки тримати речі подібного типу.
Структури дозволяють нам тримати кратне речі з різних типів.
Таким чином, в цьому випадку тут ми есть-структуру під назвою Student,
названі тут в нижній частині.
І у нас є деякі Int ідентифікатор і деякі рядок імені.
Так що це просто ще один тип даних.
Тепер у нас є тип даних під назвою Student.
>> Так що ми можемо думати про це як ще один тип даних,
ми можемо оголосити змінні як ми і будь-який інший.
Таким чином, замість того, щоб просто маючи, як, INT студент, у нас просто є студент,
студент 1.
О, дивіться.
Це Роб.
Так от ми оголошенні структури або змінна
називається студент 1 типу студента.
Так що це матиме ідентифікатор і ім'я, пов'язане з ним.
>> І те, як ми до них доступ елементи всередині нашої структури
За допомогою оператора точка, тут.
Таким чином, в даному випадку, ми заявив деякий студент 1.
Ми призначений ідентифікатор, щоб бути 1.
І ми присвоїли ім'я буде Роб.
ОК, все добре з цим?
Використовуйте це просто like-- да?
>> СТУДЕНТ: Так, typedef-- коли ми повинні використовувати ЬурейеЕ?
>> Елісон: Так ЬурейеЕ просто каже that-- Роб, ти
може виправити мене на це, якщо я wrong-- але ЬурейеЕ просто насправді оголошенні
це як типу, які можна використовувати, чи не так?
>> ROB: Так, це в основному, так що це просто створення
псевдонім або прізвисько типу.
Таким чином, ви можете ввести, що [нерозбірливо].
Так [нерозбірливо] існує, і тепер ми просто повинні
[Нерозбірливо] кошти рівно те ж саме.
І ось, ми набрали, я думаю, деякі структура типу 2 [нерозбірливо].
Так що це просто псевдонім Для даного типу.
>> СТУДЕНТ: String [нерозбірливо] бібліотека набралося до як напівкоксу зірки.
>> Елісон: Для наших цілей тут, якщо ви оголошенні-структуру,
просто зробити ЬурейеЕ-структуру.
Отже, заздалегідь, це просто нормальний змінна тут.
Ми до нього доступ з точки.
якщо у нас є вказівник на структура, ми можемо насправді
використовувати стрілу, яка досить прохолодно.
>> Таким чином, в даному випадку, у нас є вказівник на студент 1, що має тип студента.
Пам'ятаєте, з вашої Будівництво покажчик,
Ви хочете що б не введіть покажчик вказує на бути на початку.
Таким чином, ми маємо деяку студента 1, тут.
І з цього студента 1 тепер загострений,
ми можемо насправді йти студентський ім'я 1 стрілкою замість точки, тому що це покажчик,
і призначити Роба.
І тепер, якщо ми хочемо, щоб змінити Роб Девін,
це просто показуючи вам, Інший спосіб зробити це.
>> Таким чином, замість того, щоб використовувати стрілку, ви може also-- я закінчу це, а потім
прийняти, що question-- ви могли Також зробити опорну студент 1.
Це говорить, як перейти до все, що на студента 1,
буде наш студент структура.
Доступ її з точкою і елементом що ви хочете, а потім передати його.
Було питання.
СТУДЕНТ: Так, так як же у вас є використовувати [нерозбірливо], коли ти
робить студентську зірку без [Нерозбірливо] студент?
Елісон: Тому що це створює покажчик.
ROB: Ми збираємося говорити про це.
Елісон: Ми збираємося говорити про те, що в кінці огляду.
Так що просто утримати цю думку.
Якщо він як і раніше турбує вас в кінець, прийшов поговорити з одним з нас.
>> Таким чином, ці роблять рівно те ж саме.
Ми просто показую вам два різні способи, щоб зробити це.
Студент 1 тепер покажчик, так Ви можете отримати доступ до імені елемента
в структури зі стрілкою.
Або ви можете разименованія покажчика, і звертатися до нього, як звичайно.
Чи означає це, має сенс кожному?
Якщо цілі покажчик речі трохи заплутаною, Гейб буде говорити про те, що,
і тоді, можливо, це матиме більше сенсу.
Да?
>> СТУДЕНТ: Так, так як це це відрізняється від?
Елісон: попередній?
Так студент 1 в цьому справа не покажчик.
Це просто ваша поточна структура.
>> СТУДЕНТ: ОК.
>> Елісон: В той час як цей є покажчиком на структуру.
>> СТУДЕНТ: ОК, але робить це вид в кінцевому підсумку працює один і той же [нерозбірливо].
>> Елісон: Він ефективно працює так само.
Ваш синтаксис просто різні.
СТУДЕНТ: ОК.
>> Елісон: Так, вони фактично те ж саме.
Це просто в залежності від контексту, Ви можете один над іншим.
Да?
>> СТУДЕНТ: Коли ви робите посилання на 1--
Елісон: Мм-хм?
СТУДЕНТ: Чому вас є дужки?
Елісон: Тому що студент 1 є покажчиком.
Таким чином, ви повинні переконатися, що ви просто разименованія покажчика.
>> СТУДЕНТ: ОК.
>> Елісон: Так що в цьому випадку тут, дужки навколо нього
означає, що ви разименованія студент 1.
Таким чином, ви будете де студент 1 балів, що ваша структура.
Так що тепер ви можете думати, про нього, як цієї структури,
так що ми можемо використовувати наш нормальну роботу точка.
Ще питання?
Прохолодний, дивовижним.
>> Так остання річ, я думаю, мій останній слайд, Ву!
Отже, з плаваючою точкою неточність.
Ми говорили коротко про це на лекції.
В основному, ми маємо нескінченно багато речових чисел.
І якщо який-небудь з вас, хлопці, люблю математику, є
всякі класні речі з нами.
>> Але існує нескінченно багато дійсні числа.
Але вони тільки кінцеве багато бітів, які у нас є.
Таким чином, ви завжди будете є неточність, це все.
І ось це просто якась якось ви повинні знати.
Це як ми можемо попросити вас чому з плаваючою точкою неточність існують?
Так що те, що ви повинні знати.
І з цим, я перетворююся це до покажчиків.
>> М'які: Привіт, хлопці.
М'які Мене звуть.
Я збираюся поговорити про покажчики.
Так, так покажчики насправді моя улюблена частина в цьому процесі.
Так що просто зробити ясно, що Еллісон був говоримо тут, так по причині
why-- тією лише різницею тут, Велика різниця був шлях
ми заявляємо речі.
Так студент зірка означає це є покажчиком на студента.
Тоді як на слайді до, студент Фактична структура, як фактичний студента,
містить будь-який з цих речей.
>> І причина, чому ми хочу to-- да, Девін?
>> DAVIN: Що це означає стрілка?
>> М'які: Засоби стрілками точно так само, як це.
Таким чином, ви дійсно не потрібно стрілку.
Мовляв, якщо ви тільки програма в C, ви можете просто використовувати це.
На жаль, я не те, що це таке.
Ви можете просто використовувати цей синтаксис.
>> Але деякі люди, коли вони розробляли C,
вони вважали, що люди використовувати цю синтаксис стільки,
що вони будуть подобається тільки придумати зі структурою синтаксису для нього.
І це відбулося в Форма цієї стрілки.
І це дуже приємно, тому що вона символізує щось
як ми насправді наступне ця стрілка, це покажчик,
до якогось місця в пам'яті.
І коли ми будемо там, ми хочемо, щоб дивитися на ім'я цього студента,
якщо це має сенс.
Добре?
>> Так що це точно так же.
Це рівно те ж саме, як це.
Вони компілюються точно так же, ОК?
І причина тут, чому ми Malloc -то, відбувається тому, що в даному випадку,
наша змінна насправді просто змінна покажчик.
Так у нас є тільки деякий простір в пам'яті, що тримає покажчик.
Ми насправді не мають ніякого місця що тримає реальну структури.
>> Таким чином, це має бути зроблено в два етапи.
Ми повинні створити Пам'ять поставити структури в.
І ми повинні створити Пам'ять поставити покажчик в.
Так вони в основному два різні змінні, тут.
Один з них має тип студента, крім нього насправді не має імені.
А інший є типу студентської зірки.
А потім студентські 1 точок там, якщо це сенс.
Добре?
>> Так причин, чому ми використовуємо Покажчики в тому, що всі
в комп'ютері, кожна змінна в комп'ютері є дві речі.
Це має своє значення.
І це має свою адресу.
І це хороший спосіб осмислювати це є
багато проблем, коли ви спробуйте використати функції.
І ми збираємося, щоб спробувати шукати в одному з тех.
А саме, він збирається думати про пам'ять як коробки.
>> Ви завжди думали про змінних коли ви говорите, па дорівнює 5.
Ви думаєте про здачі 5 в коробку.
Так що, якщо ви хочете передати що інтервал в функцію?
Ви просто pass-- я не знаю-- х в функцію.
Але те, що відбувається, Звичайно як людини, ви
було б думати, щось, що я передаючи коробку з людиною.
І це насправді не статися в комп'ютерах.
Що відбувається, є копіюванні значення з коробки в коробку людини.
>> Так що я намагаюся сказати, що якщо у вас є function-- sorry-- тут,
якщо у нас є функція, як в п'яти вгору Тобто, якщо ви намагаєтеся передати змінну,
це просто буде копіювати.
Якщо ініціалізації NX дорівнює 3, це буде скопіювати це значення до змінної
там.
ОК, і це начебто тієї причини, Тому ми хочемо, щоб використовувати покажчики.
Бо замість того, даючи тільки значення,
замість просто проходив тільки значення в функцію,
ми хочемо передати по посиланню.
Те, що ми називаємо прохід по посиланню добр дати коробку з функцією,
так що функція може також змінити значення в цьому полі.
>> ОК, так що просто деякі основні покажчик матеріал для створення покажчиків,
Ви просто оголосити його тип, і Ви посадити зірку відразу після нього.
І тільки тип то, що ви вказуючи на.
Так що, якщо це інтервал зірка, Ви вказуєте на междунар.
Якщо це символ зірки, Ви вказуєте на графік.
І якщо це студент зірка, Ви вказуєте на студента.
Добре?
>> І вони довго все 4 байта.
Тому що цієї змінної це не насправді
потрібно провести символ, INT, або студент.
Це необхідно тільки провести адресу.
Ось чому вони всі 4 байта довжиною в нормальному 32-бітної машині.
Добре?
Так от, х є змінною, яка вказує до міжнар. у вказує на гольця. Z точки
з поплавком.
Тут Є питання?
Прохолодний.
І є два різні символи, які вони мають
щоб мати на увазі при приходить до покажчика.
Так посилання і разименованія є великі.
Так амперсандом з Ім'я змінної дає?
СТУДЕНТ: Адреса.
М'які: Адреса.
Так що, якщо ви розкажете Int А дорівнює 5, то амперсанд
з збирається дати вам адресу.
І ви можете спробувати друкувати що і подивитися,
яка адреса в пам'яті змінна має.
А потім dereferencing-- так що було посилатися,
отримання address-- разименованія є повною протилежністю.
ОК, якраз є навпроти дивізії,
зірка є протилежністю амперсандом.
Так разименованія кошти йдуть туди.
Так що, якщо ви даєте star-- I НЕ знаю-- 50, це
буду намагатися йти по адресу № 50 всередині вашого комп'ютера.
Добре, а чому ми не бачимо що вони є протилежностями?
Бо те, що відбувається, якщо ви робите щось на зразок зірки амперсанд?
Ну, амперсанд дає адресу змінної, адреса.
Але зірка означає піти туди.
>> Що трапиться, якщо вас перейти на адресу?
Ви просто дістатися до, чи не так?
Так відбувається за адресою це те ж саме, як.
Ось чому вони, як правило, називають same-- це
і це називають як протилежні оператори.
Добре?
Так здорово.
>> Під кришкою, наприклад, якщо ми заявляємо INT х дорівнює 5,
у нас є змінна.
І пам'ятайте, що я сказав, що кожен переменная-- і це добре
зберегти в mind-- він має два різні речі, пов'язані с.
Він має звернувся і значення.
Добре?
>> Таким чином, значення в цьому випадку дорівнює 5.
І адреса is-- скажімо, я робити щось up-- це 0x04.
І єдина причина, чому ми, як правило, представляють адреси в шістнадцятковому
є одним, бо це як благо.
Добре поєднується з двійковій системі.
Це легко конвертувати і з двійкового файлу.
І це не стає занадто великий, якщо у вас є дуже велика кількість.
Таким чином, ми хотіли б використовувати шестнадцатеричную в адресах друку.
Але я міг би представляти Цей вигляді цілого числа.
Це прекрасно.
>> І тому він має адресу 4 і 5 значення.
І тоді я сказав INT зірка покажчик.
Так що це інший тип, повідомлення.
Int зірка покажчик дорівнює адреса х.
Так що буде значення PTR?
Це збирається бути адреса х, тут.
ОК, так що значення буде бути таким же, як адресу.
Це призначення працювати, що я роблю.
А потім PTR матиме його власну адресу, який виявляється,
в цьому випадку, 8, ОК?
>> А потім я створюю новий ціле копію.
І я говорю INT копія одно йдуть туди.
Так що до того, що PTR вказує на.
Ну, що це PTR є?
Ptr має 0x04.
Що станеться, якщо я намагаюся піти туди?
Я знайду хлопця, який має Адреса х і який має адресу 4.
І хто має рішення чотирьох є х.
Чи має це сенс?
Да?
>> СТУДЕНТ: В цьому випадку, є покажчик в стеці?
>> Binky: В цьому випадку, it's-- хороше запитання.
Я дійсно не думаю про це при складанні цих адрес.
Але якщо це, як все це локальні змінні,
то х житиме in-- все житиме в стеці.
Так що все йде бути спрямований в стек.
Ви можете отримати тільки в купі коли це Ви починаєте використовувати Танос, чи не так?
>> Так що, якщо ви пам'ятаєте стек щоразу Ви викликаєте функцію у вашій програмі,
як, наприклад, основна, або будь-яке Інша функція, як Printf.
Все локальні змінні є збирається отримати покласти в кадрі стека.
І вони збираються, щоб отримати як складається в стопку.
Це те, що називається стек.
І всі ці локальні змінні збираються бути там.
І heap-- і ми збираємося щоб більше про це later-- говорити
Куча, де все динамічно розподіляється життя пам'яті.
Прохолодний?
>> Ми йдемо в цей слайд.
Да?
>> СТУДЕНТ: Чому не INT копія повернення 0x04?
>> М'які: Чому не INT копія повернення 0x04?
>> СТУДЕНТ: Чому не в тому, що [нерозбірливо]?
>> М'які: Тому що це значення PTR?
>> СТУДЕНТ: 0x04.
>> М'які: 0x04.
Що станеться, якщо ви йдете в 0x04?
Що ви отримуєте?
>> СТУДЕНТ: О, добре.
М'які: Ви бачите?
СТУДЕНТ: Так.
М'які: Таким чином, ви отримуєте 5.
Так копія матиме 5, якщо це має сенс.
Да?
>> СТУДЕНТ: Чи не могли б ми отримали 5 на текстовому полі [нерозбірливо]
якщо покласти INT скопіювати [нерозбірливо].
>> М'які: Int-- ми б, так.
Це було б зроблено в значній мірі те ж саме.
Але цей шлях, ми можемо перейти звернутися до функцій.
І це здорово, що ми збираємося зробити прямо зараз.
>> Тому такого роду вправи завжди придумує on-- дуже зазвичай приходить на вікторинах.
Так що це дійсно добре, щоб спробувати зробити таку річ самостійно.
Тому постарайтеся, щоб відстежувати, що адреса це і хочу значення змінних
є в кожній точці.
Так що це точно те, що ми збираємося зробити.
Тут ми маємо кроки, один, два, три, чотири, п'ять.
Один, два, три, чотири, п'ять.
І ми збираємося відстежувати від значень х і.
>> Так що це робить, якщо це помилка в програмному коді, ми намагаємося зробити до п'яти.
Таким чином, ми намагаємося отримати в Змінна і змініть його значення на 5.
І пам'ятайте мою аналогію маючи коробка і вручаючи коробку з кимось?
Так головний має цю опцію під назвою х.
І він містить значення 3.
І я намагаюся передати в цьому полі, щоб до п'яти.
>> І я хочу, щоб п'ять змінити значення цієї рамки до 5.
А потім я просто надрукувати значення х.
Це те, що мій function-- це те, що я намагаюся зробити.
Я просто намагаюся оновити значення х до 5.
Зрозуміло, що функція робить?
>> Отже, що ж буде значення х і прямо тут,
перша лінія, прямо перед першим line-- я б say-- програми?
>> СТУДЕНТ: Напевно сміття.
>> М'які: Просто сміття речі.
Так що я просто покласти N / A. Так ми насправді не знаю.
Мовляв, навіть не все ж існують, бо ми не називається до п'яти.
Int не оголошена.
І х збирається існувати тут, але у нас є не надто
призначено будь-яке значення до нього, так добре?
>> І потім, що збираються бути Значення х і в номер два?
>> СТУДЕНТ: [нерозбірливо].
>> М'які: Так х буде 3.
Це просто, бо ми присвоюємо 3 до нього.
І ще не існує бо просто живе в п'яти.
Так що я буду мати 3 і нічого.
або як сміття, то, що, насправді не визначені.
І тепер, це важливий напрямок.
Тут ми збираємося насправді назвати до п'яти.
І пам'ятайте, що я сказав.
Ми ніколи не проходять в коробці.
Ми просто скопіювати значення коробка в іншу коробку.
От і все комп'ютери, копіювати речі з одного місця в інше.
>> Так до п'яти, що вона робить це він копіює значення х в.
Так що буде тут?
Значення х і.
3 і 3, ми просто скопіювати це більше з х в.
Прохолодний.
>> Тепер ми тут.
І тепер ми збираємося оновити дорівнює 5.
Що трапиться в четвертому рядку?
>> СТУДЕНТ: [нерозбірливо].
>> М'які: оновлюється, але х не оновлюється.
Оскільки х до сих пір живе в основному це повністю відрізняється блок пам'яті.
Це інша змінна.
ще одна змінна.
Вони, виявляється, є те ж значення, тому що I
копіюються значення х к.
Але тепер, коли я роблю дорівнює 5, його насправді не впливає х в кожному разі.
Це складніше частину.
Чи має сенс для всіх?
Да?
СТУДЕНТ: І ще одне питання, у вас є 3.
Чому already-- ой, ні, це 3.
На жаль, не беріть в голову.
Я читав 5.
>> М'які: Так, 3, 3.
>> СТУДЕНТ: [нерозбірливо], так.
М'які: А потім ми призначаємо 5 до , Але насправді не змінити х.
Добре?
СТУДЕНТ: Так.
М'які: Да?
Чи можете ви пояснити ще раз, як копіюється [нерозбірливо]?
>> М'які: ОК, так що, коли ви телефонуєте в п'яти х, так що це рядки коду тут.
в п'яти з х, що х?
х знаходиться всього в 3 на даний момент, чи не так?
Таким чином, ви могли б просто думати про здачі 3 в тут і забуваючи про х.
Просто помістіть 3 тут.
Мовляв, ми збираємося копіювати значення х в Int А, це там.
Добре?
>> Таким чином, значення х дорівнює 3.
Ми збираємося копіювати 3 к.
І все це інший блок пам'яті, це інший змінної
називається доведеться 3, а.
Чи має це сенс?
Да?
>> СТУДЕНТ: Якщо ви даєте до п'яти, як Тобто вона як ціле х, а не,
б, що все виправити?
>> М'які: Якщо це integer-- немає, що б не виправити все.
Так що це дуже гарне питання.
Це дійсно не має значення, що Ви викликаєте ці змінні.
Знову ж, це буде проблемою з області видимості, бо вони не те ж саме х.
Вони повністю різні місця в пам'яті.
СТУДЕНТ: [нерозбірливо].
М'які: Так це насправді не Неважливо, що ви їх називаєте.
Це не виправити становище, ОК?
Ще питання?
Да?
>> СТУДЕНТ: Як це назад номер п'ять [нерозбірливо]?
М'які: ОК, ми не зробили, що ще.
Підемо в номер п'ять, потім.
>> СТУДЕНТ: [нерозбірливо]?
>> М'які: Що?
>> СТУДЕНТ: У вас є повернення взагалі?
М'які: Ми не маємо повернення не головна.
Але головні повертає 0 автоматично якщо ви нічого не повернути.
Да?
>> СТУДЕНТ: Чи не могли б ви зробити main-- або не могли б ви зробити до п'яти повертати?
>> М'які: Ми могли б до п'яти повернутися, так.
Але тоді ми мали б призначити х дорівнює значення, що повертається до п'яти,
який був би трохи інша програма.
Вона працюватиме.
Але те, що ми хочемо зробити, це те, що є називається щось змінити на місці.
Тому ми хочемо, щоб насправді змінити цю коробку і не турбуватися
про те, щоб повернутися значення або що-небудь.
Добре?
>> Це так само, як функції підкачування Девід показав в лекції, крім мене
справу тільки з однією змінною.
І він використовував два, так інтервал і б і то тимчасова змінна і ще багато чого.
Добре?
Так що в останньому рядку?
Після п'яти декларацій, це просто збирається йти.
У нас не буде більше, і тільки х раніше буде жити.
>> І що ви думаєте? х не міняє свого значення,
зрештою, бо ми тільки змінивши значення.
Ось чому х було 3 у всьому.
Добре?
Добре.
Так що це програма НЕ домогтися того, що ми хотіли.
Тепер давайте виправимо це.
>> І програма виправлення за допомогою покажчиків.
Те, що ми робимо, ми повинні три Лінії, які відрізняються.
Перші в ми не проходячи х.
Ми передаючи адресу х.
Таким чином, замість копіювання більш значення з коробки,
Я все ще збираюся копіювати щось.
Але я копіюванні над адреса коробки.
>> Так що, якщо я передати адресу коробка з п'яти, потім до п'яти
зможуть знайти, що в Пам'ять і змініть його значення.
>> Так і там, у мене є що ні INT більше.
є інтервал зірка.
Це покажчик на ціле.
А потім, бо я передаю звернутися сюди, а потім, що я роблю
НЕ дорівнює 5, тому проводить адресу.
Так що я хочу зробити, це піти туди і оновити вміст цієї адреси
з 5.
>> Отже, давайте пройдемо всі лінії один за іншим.
Так що, коли я починаю тут, я до сих пір N / A, N / A, N / A
за все в перший лінія, тому що у мене не дуже
заявив матеріал ще.
А потім другий лінії, у мене є х дорівнює 3.
INT зірка не існує, Те ж саме, як і раніше.
>> Тепер починається найцікавіше.
Так що я збираюся пройти.
І давайте припустимо, що за адресою х 12 в шістнадцятковому вигляді.
Давайте просто припустимо це.
Я зробив це.
Так, що я проходячи тут до п'яти.
Я передаю 12.
>> Так що значення не мають?
>> СТУДЕНТ: [нерозбірливо].
>> М'які: Вибачте?
>> СТУДЕНТ: [нерозбірливо].
М'які: Так, як, до давайте Припустимо, що ми тут, зараз.
Я питаю.
>> СТУДЕНТ: [нерозбірливо].
>> М'які: Було порушено.
>> СТУДЕНТ: [нерозбірливо].
М'які: Тому що ми пройшли щось функції.
Да?
>> СТУДЕНТ: Адреса х.
М'які: Це збирається є адреса х.
А також адреса х 12, добре.
Так х буде 3, тому що ми насправді не змінилася х ще.
А потім буде 0x12, так адреса х, тому що це
те, що ми пройшли, щоб до п'яти.
>> І тоді те, що відбувається якщо ми намагаємося піти туди?
Що ми збираємося знайти?
Так що, якщо ви спробуєте роздрукувати зірка, ми збираємося слідувати цю адресу
і отримати значення всередині.
І це значення просто те ж значення, що х
має, бо це адреса х, які будуть 3.
Невже ми добре?
>> ОК, а потім в даний час, ми насправді йти туди.
І ми оновлюємо все в цій адресі 12.
Ми робимо це 5.
Так що тепер обидві х і зірка знаходяться 5.
>> Чому це?
Оскільки адреса х 12.
І є також 12 як своє значення.
Так що, якщо ми будемо слідувати 12, ми просто хочу, щоб знайти х.
Так, що ми робимо з зірка станеться
х, бо містить адреса х.
Добре?
>> І це, як в суть виправлення.
Так що тепер ми можемо, від до п'яти, насправді
доступ до пам'яті, що жили в основний.
Так ця пам'ять не живе в с п'ять, як раніше, це адреса 12.
І ми змогли піти туди і змініть його значення на 5.
>> А потім, коли ми повернемося, ми забуваємо о.
Ми забуваємо про зірку.
І х ще п'ять.
Так що, якщо ви хочете, щоб реалізувати функцію підкачки,
Ви б просто зробити ту ж саму річ, крім вам потрібно INT зірки тут,
і так далі і тому подібне.
Добре?
Невже ми добре?
Прохолодний.
>> Так покажчик арифметика.
Це трохи складно тема.
Ось і виходить, що Покажчики всього числа.
Ви можете думати про них як цілі числа.
Тому що в пам'яті, у вас є як Пам'ять адресу нуль, один, два, три,
чотири, п'ять.
Таким чином, ми можемо підвести адреси пам'яті.
>> І це, як правило, те, що ви робите, коли Ви знаходитесь в і масиву, наприклад.
Масив просто подобається суміжними блок пам'яті, з великої кількості символів,
наприклад, багато цілих чисел.
Так що якщо ви хочете піти в Другий інтервал або до третьої междунар,
Ви можете просто підвести дещо, щоб перший адреса, і ви збираєтеся потрапити.
Так що це дійсно корисно для цього.
>> І справа мати на увазі, однак, є
що це не просто подобається нормальна арифметика в тому сенсі,
що якщо ви маєте справу з, скажімо, INT зірка, і ви додаєте до нього 1,
то ви не збираєтеся додати 1 за адресою,
Ви збираєтеся додати 4 за адресою.
Оскільки інтервал становить 4 байта.
>> Так що це, як ходити на масиві.
Якщо у нас є масив великою кількістю цілих чисел і Потім ми намагаємося піти на другий,
це в основному просто підбиваючи адресу першого один плюс один.
Але це не буде be-- просто скажемо що адреса першого є 4.
Тут, в цьому випадку.
І якщо підсумувати, так це це те, що відбувається.
У нас є Int.
Int х дорівнює 5.
Х має значення 5.
І ми инициализировать цей покажчик, INT у INT зірка у дорівнює адресу х.
>> Давайте припустимо, адреса х 4.
Що трапиться Тепер, якщо я сума додати 1 к у?
Це відбувається насправді сума 4, а не просто 1.
Тому я додати 1, але це насправді додано 4, бо комп'ютера смарт.
Так це буде насправді додати по I раз Розмір типу покажчика.
Добре?
>> Таким чином, якби він був символ, наприклад, якби це було символ зірка у,
і якщо ми додали 1, то це буде бути 5, бо символ є довжиною 1 байт.
Добре?
>> І, нарешті, ми дісталися до покажчики і масиви.
Виходить, що кожен раз, коли Ви маєте справу з масивом,
ви насправді маємо справу з покажчиком.
Дуже хороший концептуальний причина це що масиви дуже великі.
Так що пам'ятайте, що я сказав, що кожен раз, коли ви проходите речі навколо,
скопіювати весь вміст.
Так що якщо у вас є масив що насправді, дійсно великий,
Ви дійсно не хочете скопіювати всі щоразу
Ви передавати його в іншу Функція, бо це просто
величезну кількість роботи.
Так що вам зробити, це просто мимо адреса першого байта.
І то функція буде мати доступ для всіх елементів в цьому масиві.
Таким чином, ви пройшли масив, його адреса, так що адреса першого байта.
>> Так що, якщо ми заявляємо INT Масив 3, тут, ми знаємо,
як отримати доступ до першого елемента використовуючи позначення кронштейна.
Якщо ви пам'ятаєте, кронштейн позначення, масив кронштейн 0 дорівнює 1.
Ну, це було б точно ж, як тільки туди і покласти 1.
ОК, це рівно те ж саме.
Так позначеннях кронштейном в здесь буде таким же, як цієї лінії.
>> І що ви думаєте позначення кронштейна для масиву кронштейна 1 буде?
Це якраз і буде те ж саме, це.
Так що додайте один для масиву.
Переміщення один вздовж в пам'яті.
Ідіть туди, і покласти 2.
Добре?
І ця лінія те ж саме.
Ми хочемо, щоб піти в третій коробка, так масив плюс 2.
Ідіть туди, і покласти 3.
Таким чином, в пам'яті, що відбудеться це ми
матиме 1, 2 і 3, як три елементи цього масиву.
>> Ми могли б зробити це за допомогою наш знайомий позначення кронштейна.
Я просто хочу, щоб ви, хлопці, знаєте, що вони одне й те саме.
ОК, питання з цього приводу?
Хороший.
Тепер, я збираюся здати це на Ханну,
>> Ханна: Ура, Йі-Хо.
>> М'які: Говорячи про пам'яті і стаття речі.
[Оплески]
>> Ханна: Привіт, здорово, так що ми будемо говорити трохи більше
про пам'ять, про який ми щойно звернувся за допомогою покажчиків.
Таким чином, є дві основні частини пам'яті, що ми стурбовані.
У нас є стек, який росте в нижній частині, і купи, який
йде вниз від вершини.
І стек збирається провести всі наші змінні екземпляра.
Таким чином, кожен називає по функція отримує свій власний маленький кадр в стеці.
Так як Гейб вже згадувалося раніше, якщо ми знову і знову викликати функцію,
ми збираємося складати речі в стеці.
>> І точно так само, купа, який починається у верхній
збирається провести всю пам'ять що ми динамічно виділяти.
І так як ми динамічно виділити пам'ять,
це зійде до низу.
Пара речей, щоб бути в курсі, коли ми використовуємо стек і купу,
зі стеком, якщо ми маємо занадто many-- давайте say-- рекурсивні виклики,
і ми називаємо функцію знову, і знову, і знову, і знову,
і це до укладання, до укладання, укладання до.
І це буде врізатися в купу.
Ми збираємося запустити з пам'яті.
Це збирається викликати Проблема для комп'ютера.
І це називається переповнення стека.
Так що, безумовно, щось вас повинен знати і намагатися уникати.
І купа, повинні пам'ятати, щоб випадково не відбувається витік пам'яті.
Щоразу, коли ви використовуєте Танос, що не забудьте звільнити цю пам'ять.
В іншому випадку, це буде просто бути в купі даремно,
і комп'ютер не знатиме, що він може вільно використовувати цю пам'ять.
Так що ті, пара речей бути дуже обережні з тим, коли
Ви маєте справу з стек і купа.
Будь-які питання з цим?
Дивовижний.
>> Добре, прохолодно.
Так цей вид має те ж саме Ідея, як переповнення стека, де
ми збираємося за Межі того, що пам'ять
буде ми повинні бути в змозі використати.
Так що беріть, наприклад, буфер, або ви може просто думати про це як масив.
І ми сказали, добре, що ми збираємося створити цей миленький масив.
Це збирається бути рядком.
Чи він збирається зберігати символи.
І це тільки збирається, щоб привітатися.
І це невизначене.
Це так.
>> Але якби я був хтось зло і хотів зробити щось погане з цього масиву, що
Я міг би зробити, це спробувати написати мимо кінця рядка.
І, як ви побачите, якщо Я пишу досить далеко,
Я може реально впливати на адресаповернення.
І якщо я починаю впливає адресаповернення,
Я впливати як програма насправді працює.
І замість того щоб повернутися, вам знаю, щасливу рядок виду привіт, я
міг зробити щось погане, як перейти до десь ще в вашому комп'ютері, ще
пам'яті, змінити його, все, що я хочу зробити.
Так ось що це буде виглядати якщо я тільки почасти заповнили його
зі випадкової величини сміття, В цьому випадку, так само.
А потім, коли я насправді потрапили за адресою пам'яті,
Я почав заповнювати його з чимось що зробив те, що я хотів, щоб це зробити.
Будь-які питання з переповненням буфера?
Високий, літати прямо через цей матеріал.
>> Отже, ми багато говорили про про покажчика з Gabe.
Як ми насправді отримати покажчик?
Як ми можемо отримати адресу в пам'яті?
Ну, ми можемо використовувати цей хороший Функція виклику Танос, які
збирається отримати маленький шматочок пам'яті,
зокрема, в купа, як ми обговорювали,
і він збирається дати вам назад покажчик на цю адресу в пам'яті.
І аргумент, що ми повинні дати Malloc
це скільки місця в пам'яті ми хочемо.
>> Таким чином, ви можете побачити розмір в байт.
Скажімо, наприклад, або насправді, в цьому прикладі,
ми виділяємо достатньо простір для 10 чисел.
Так, ймовірно, те, що ми збираємося хочу поставити тут є масивом з 10 цілих чисел.
Так ми даємо йому розмір цілих чисел, які Ми дізналися, було скільки байт?
СТУДЕНТ: 4.
Ханна: 4, красивий, і ми хочу 10 з них підряд,
так що у нас є достатньо місця для зберігати всі 10 чисел, в цьому випадку.
Щось супер важливо, в будь-який час подзвонити Танос,
Ви повинні перевірити нуль.
Якщо ви не перевірити нуль, а, Танос якщо вона не вистачило місця
і більше не може дати вам будь більше пам'яті, то він поверне нуль.
Так що, якщо ви не перевірити, Танос може повернутися нуль.
І тоді, якщо ми спробуємо разименовать нульовим покажчиком,
ми збираємося, щоб отримати помилку сегментації, який ми будемо говорити про прямо зараз.
Дивовижний.
>> ОК, питання з Танос?
Да?
>> СТУДЕНТ: Хіба перевірки нульової [Нерозбірливо] не зробити це на вікторині?
>> Ханна: Звичайно, питання було це matter-- на вікторині,
ви будете отримувати окуляри, якби Ви не перевіряють нуль?
Так, ви будете отримувати окуляри від якщо ви не перевірити нуль.
Щоразу, коли ви телефонуєте Танос, як на вікторина і ваші psets і в реальному житті,
Ви повинні перевірити нуль.
Хороше питання.
>> Гейб: Що робити, якщо я не звільнити?
Ханна: Гейб хоче знати, що робити, якщо ми не безкоштовно.
Тоді у нас буде витік пам'яті в нашій купі.
Ще питання?
Да?
>> СТУДЕНТ: Може you-- перейти Переповнення буфера дійсно швидко знову?
>> Ханна: Звичайно.
Питання було ми можемо перейти Переповнення дуже швидко буфер.
Давайте повернемося до тих гірками.
Так буфера, ви можете просто думати про нього як масив, чи не так?
У вас є деякий простір в пам'яті.
І коли ми вперше створюємо масив, ми знаємо, масиви мають фіксований розмір,
або наш буфер має фіксований розмір.
>> Так скажімо, в цьому випадку, у нас є тільки достатньо місця, щоб написати рядок привіт.
Якщо ми йдемо мимо, що кордон, якщо ми йдемо мимо що наш масив ми сказали, що це може провести,
ми могли б дійсно почати записи в пам'ять
що комп'ютер не може хочете нам написати в.
І зокрема, якщо ми потрапили щось на зразок повернення
адреса функції, яка, як і будь-який інший шматок пам'яті,
просто десь у вашому комп'ютер, ви можете насправді
змінити що і починають творити зло.
Відповідь на ваше запитання?
Дивовижний, що-небудь ще?
Да?
>> СТУДЕНТ: Так стек [нерозбірливо], ви сказав йти знизу йде вгору.
В зоні стека, робить пам'ять перейти від, як,
зверху вниз, що відносяться до кожної перерви?
>> Ханна: Як зробити you-- відкласти Робу на цьому.
>> ROB: Він буде рости в тому ж напрям, як стек росте.
Ханна: ОК.
ROB: Так я заплутатися.
Це буде абстракція.
Ханна: ОК.
ROB: Це правильно.
Так що, якщо стек росте вгору, то generally-- його
не повинен бути таким. але ви можете оголосити Int х.
Тоді ви оголошуєте Int у.
Тоді інтервал х взагалі буде нижче в стеці, ніж INT у.
Але це просто факт.
Це не так, як важливу насіння річ.
>> ROB: Так що питання знову було просто що відбувається кожен кадр накопичується.
Так кожна функція отримує маленький шматочок стека.
І, як ви йдете вгору, в тому, що маленький шматочок, в цьому кадрі,
ми будемо говорити, що змінні в цьому кадрі також рухатися вгору.
Питання?
>> ROB: Просто щоб бути на мікрофон.
Ханна: О, так.
ROB: Я буду говорити в вас.
Ханна: О, так, добре.
ROB: винятком є для масивів і структур,
де масиви, нижче Індекс в масиві,
і в структур у вище Поле в структур
гарантовано будуть на більш низьких адрес ніж пізніший значення в масиві.
Так що ті, гарантовані.
Але будь-які конкретні змінні всередині, як INT х і інтервал у у функції,
немає необхідності відносини між їх адреси.
Ханна: Ще одне питання тут?
СТУДЕНТ: Так в буфер потік, тільки переповнення буфера
тільки відбулося, коли вам вже, начебто, присвоєний
Кількість масиву що то більше?
Мовляв, чи не так?
Так що, якщо ви просите щось з user--
>> Ханна: Мм-ом.
СТУДЕНТ: Може вони насильно дати вам щось взамін
це більше, ніж все, що Ви виділено для них?
Ханна: Звичайно, так Питання було в основному,
може користувач дасть вам більше, ніж ви просите?
СТУДЕНТ: Так.
Ханна: Ну, ви могли б запобігти користувач від цього.
Ви могли спеціально сказати не дай мені більше, ніж х кількість по байтів
Я тільки дав вам місце для х кількість байтів, х число символів.
Так що те, що ви хочете, щоб запобігти.
Да?
У чому різниця між Переповнення стека і переповнення буфера?
>> Ханна: ОК, так що стопка overflow-- ах, який
різниця між стеком Переповнення і переповнення буфера?
Тому ми хочемо, щоб думати про переповнення стека відбувається, коли ми насправді
укладка ці виклики функцій.
Скажімо у вас є рекурсивную функцію, тому що ми знаємо, що кожен раз, коли ви
викликати функцію, це стає самостійно рамка на стеці.
>> Таким чином, ми складають занадто високо, і Потім ми починаємо переливатися.
І ми використовуємо занадто багато пам'яті, а ми не дійсно є де-небудь залишилося.
Ми отримуємо цю помилку.
>> Переповнення буфера знаходиться в межах програми.
Ми хочемо, щоб, можливо, не обов'язково запустити з пам'яті так само,
що ми могли б, якщо ми укладки так багато викликів функцій,
але ми пишемо мимо пам'яті що ми знаємо, що ми можемо використовувати.
І що дозволяє нам робити зло.
Да?
>> ROB: Так, ви можете щоб просто повторити це,
але ви також можете думати переповненням стека
а як певний тип переповнення буфера.
Або ви просто думати про своє стек, як дійсно велике буфера.
Потім, коли ви переповнення ви стек, це ніби як переповнювання буфера.
Але переповнення стека просто спеціальний термін використовується, коли стек
Сам переповнює.
>> Ханна: Право, так, щоб Повторюю для відео,
це ви можете думати про переповнення стека, як Конкретний тип переповнення буфера.
Прохолодний?
Більше питання, перш ніж іти далі?
Дивовижний.
>> Добре, прохолодно, так що давайте говорити про деякі загальні повідомлення про помилки.
Це те, що має показано на декількох вікторинах,
так щось, що варто приймаючи другий погляд на.
Я впевнений, що ви зіткнулися принаймні, деякі з них
як ви робите, ваша проблема встановлює.
Тому переконайтеся, що ви можете говорити про них на вікторині.
>> Таким чином, перший з них помилки сегментації.
І це в будь-який час, ми спробуйте отримати доступ до пам'яті
що ми не дозволили доступ.
Таким чином, ви migh бачив це, Наприклад, в прориві.
Якщо виявити зіткнення повернутися нуль, а потім вас
намагався щось зробити з цим значенням нуль,
комп'ютер дасть Ви помилки сегментації.
Так що, головне, щоб зробити для того, щоб спробувати уникнути цього
це завжди перевірити на нуль.
>> Ви, можливо, також бачив неявна декларація функції.
Так що це те, що відбувається коли Еллісон показав,
як ми робимо прототип, чи не так?
Так скажімо, у нас є деякі функція, яку ми визначимо.
Скажімо куб.
І це йде на дно нашої функції, відповідно до основного.
>> Якщо ми забуваємо сказати комп'ютеру про куб, коли основна намагається викликати куб,
Комп'ютер буде, начебто, о, чорт візьми.
Я поняття не маю, що це означає.
Я не знаю, що робити, от.
Так прототипом каже, не хвилюйтеся.
Я збираюся розповісти вам.
>> Це прийде.
Не кричати на мене.
Не дай мені неявне Декларація функції.
Так що якщо ви отримаєте цю помилку, один річ ви збираєтеся хочете зробити
це переконатися, що у вас є свій прототип.
Добре?
>> І останнє, але не менш важливо, неоголошений ідентифікатор
по суті, коли ви намагаєтеся використовувати Змінна, що ви не заявили.
Так раптом ви починаєте кажучи, як п плюс плюс.
І комп'ютер говорить, що це н?
Ти ніколи не говорив мені, н був річчю.
>> Так одна річ, ви повинні переконатися, що ви зробив це сказати комп'ютеру, що п.
Так, наприклад, н може бути цілим числом.
І тоді ви будете уникнути цієї помилки.
Будь-які питання по поширених помилок?
Да?
>> СТУДЕНТ: Для неявне Декларація функції,
може також бути, що ви опустили один з бібліотек ви повинні були
щоб включати в себе, замість прототипу?
>> Ханна: Право, так Питання було, ти міг
Також ця помилка, якщо ви забули включити бібліотеку.
>> СТУДЕНТ: Так.
>> Ханна: Абсолютно, тому що так само,
що ми хочемо, щоб покласти наші прототипи Перед основної функції,
якщо у нас є бібліотека, ті йдуть по суті включають в себе прототипи,
включити визначення з функцій.
Велике питання.
>> СТУДЕНТ: Для сегментації вина, буде, що також
відбудеться, якщо ми, як, намагався отримати доступ до змінної,
як, по-іншому [нерозбірливо] чим він був оголошений в?
Ханна: Звичайно, так би ми отримати помилку сегментації
якщо ми спробували отримати доступ Мінлива виходить за рамки?
Чи було це питання?
СТУДЕНТ: Так.
Ханна: Красива.
Так, ймовірно, ви збираєтеся отримати Неоголошена помилка ідентифікатор замість.
Так що це просто хочу сказати, Я не знаю, що це таке.
Круто, що-небудь ще?
Так, добре, красиво.
>> Все правша, так рекурсія.
Так я вже пару раз що ми могли б отримати переповнення стека
бо ми називаємо наш рекурсивна функція так багато разів.
Ми отримуємо всі ці стопки кадри, бла, бла, бла.
Що ще є рекурсивна функція?
Ну, рекурсивна функція є будь-яка функція, яка називає себе.
>> Деякі речі, щоб бути в курсі, коли вас реалізуємо рекурсивную функцію,
не забудьте включити базовий варіант.
Базовий варіант є Точка, в якій ми в кінці.
Так, наприклад, якщо ми кодування, , Кажуть, Фібоначчі рекурсивно,
ми хочемо переконатися, що, коли ми отримуємо на або під першим номером 0 Фібоначчі,
ці два числа мають ці випадки, бо ті не залежать
на речі, які прийшли раніше.
Ті, мають свої власні значення.
>> Деякі профі в рекурсії, що є Питання, яке ми бачили на останніх опитувань.
Вони можуть призвести до більш коротким, елегантний код.
І багато функцій, багато різних алгоритмів,
насправді піддаються рекурсії.
Їх визначення може бути Рекурсивні і саме по собі.
Так Фібоначчі є одним.
Факторіал є одним.
Злиття сортування одно-- все речі, які ви можете подивитися.
Добре, є запитання?
Да?
>> СТУДЕНТ: Є прикордонні випадки аналогічно базової випадку?
Чи в тому, що для якоїсь іншої вид [нерозбірливо]?
>> Ханна: Звичайно, так кут випадок any-- так
є кут справу так само, як базової випадку?
Кут випадок що-небудь, що ваш Код може вести себе трохи по-іншому.
Базовий варіант є свого роду пов'язані, в що вони, як окремі випадки
що ви хочете подивитися.
Але ідея базової випадку є те, що Ви хочете, щоб ваш рекурсивную функцію
зупинитися на якийсь момент.
Він не може тримати, що називає себе назавжди.
Це потрібно зупинити на якийсь момент.
>> Роб: Так, часто, ваші базові випадки може бути приклади кутових баз.
>> Ханна: Право, здорово, що-небудь?
>> СТУДЕНТ: Чи не могли б ви пояснити, засновує трохи більше?
Я не зовсім розумію, [Нерозбірливо] базові випадки.
>> Ханна: З базових випадках?
>> СТУДЕНТ: Базові випадки, так.
>> Ханна: О, так, звичайно.
Подивимося.
Чи є у нас крейда тут?
Так, ми робимо.
Отже, насправді швидко, я буду спробуйте написати досить великий
так що ви можете бачити на екрані.
Давайте поговоримо про, дійсно швидко, Фібоначчі.
Тому я дам вам послідовність Фібоначчі.
Ви можете шукати визначення.
>> По суті, кожен номер в послідовності є сумою двох попередніх чисел.
Отже, то, як я щойно описав Фібоначчі,
ви могли почути рекурсию, чи не так?
Коли я сказав, що кожен номер сума двох попередніх чисел,
ми могли б сказати, в порядку.
Ну, п-я Фібоначчі number-- так що давайте
у нас є ця функція називається fib-- вигадка п
буде дорівнює прибрехати н мінус 1 plus-- шкода,
ми збираємося на наступному рядку над here-- вигадка п мінус 2.
>> Отже, це прекрасно працює, якщо ви дивіться, наприклад, нуль, один,
два, три, чотири, п'ята число Фібоначчі,
де можна сказати, що 5 дорівнює 2 плюс 3.
Але що, якщо ви на початку?
Що робити, якщо ви просто йдете ці перші два значення?
>> Щоб отримати цей 1, ви не можете сказати додати два попередніх,
бо нуль і-- я не знаю.
Таким чином, в якийсь момент, ми повинні зупинитися.
У якийсь момент, ми повинні сказати, що це два тільки мають свої власні визначення.
Кількість 0 Фібоначчі 0.
І перше число Фібоначчі 1.
>> Так як я міг би кодувати це, я сказав би, якщо п менше двох,
то просто повернути н.
І що б мій базовий варіант.
Ось як я знаю, щоб зупинити з рекурсивної функції.
Це зрозуміло?
Дивовижний.
Що-небудь ще на рекурсії?
Красива.
>> Давайте швидко говорити про Пошук і сортування виконуються раз.
А потім я дам Девін деяких Час поговорити про кодування приклади.
Так ось основний пошук і види, які ви повинні знати о.
Guarantee-- я не можу гарантувати, бо я не бачив quiz--
але це приходить вікторини після вікторини після виходу.
Так виразно використовувати цей графік.
Мовляв, взяти цей графік.
Покладіть її на свій шпаргалку.
Ви будете щасливою людиною.
>> Це говорить нам часу роботи кожного з цих сортування та алгоритмів пошуку.
Так лінійний пошук, ви можете побачити біг Час, і те ж саме з бінарного пошуку.
Перейти над тим, що ці алгоритми зробити, загальну ідею.
Подивіться на якийсь псевдокоде, якщо не сам код.
>> Ви побачите, що бульбашкова сортування має верхній пов'язані в гіршому випадку п квадрат.
Так що, якщо наш масив був повністю назад, перш ніж ми хотіли, щоб залагодити його,
ми б сказали, що це збирається зайняти н в квадраті кроки.
Але в кращому випадку, так нижня межа для кращому випадку
чи буде це вже зовсім відсортовані.
Тоді все, що потрібно зробити, це перевірити, що це сортуються.
Є питання тут?
>> СТУДЕНТ: Коли буде Ви хочете використовувати те?
Сорт.
Мені просто цікаво.
>> Ханна: Коли ви хочете використовувати вибір роду?
Це один?
Той, який н квадрат в обох випадках?
>> СТУДЕНТ: [нерозбірливо].
>> Ханна: Так що це дуже різні.
Якщо у вас є конкретні Вимоги до програми,
як речі, як якщо б ми тільки що сказали, здійснити search-- sorry--
здійснити свого роду, ви будете ймовірно, хочете піти
для одного з тих, що має кращий випадок п,
або нижню межу в кращому випадку п.
Але там може бути деякі речі, як, скажімо,
свопи дійсно дорого для якоїсь причини.
Тоді ви хотіли б зробити бульбашкова сортування, тому що ви
потрібно зробити так багато свопи, такі речі, як, що.
Будь other-- да?
>> СТУДЕНТ: було б [нерозбірливо] сказати, що [нерозбірливо]?
Ханна: Це одна річ, що б вам сказати,
якщо ви шукаєте на реалізацію.
Те, як я б насправді думаю про те, чому це н
квадрат в тому, що ми повинні працювати через наш масив довжини п,
кожен раз роблячи в більшості, п свопів.
І ми повинні зробити цей процес п раз.
>> Так що, коли ви повинні зробити в самий, н свопи і для п пробігає масиву,
там збирається бути н в квадраті.
Але так, це буде виявлено через цей вдвічі за петлю,
як питання asked-- або вкладеними для циклу, я повинен сказати.
Добре?
>> А потім зливаються роду, які це найшвидший вид ми зараз,
або, коли ми розглянули в CS50, Відомо, що основним алгоритм
ця ідея злому відсортовані шматки і потім
зливаючись ці відсортовані біти.
І отримаєте нам увійти н увійти п.
Будь-які питання по обшуків і види, перш ніж я передати його?
Подивимося.
>> О, зв'язкові списки.
На жаль, у мене є ще один розділ.
ОК, дивовижним, пов'язані списки.
Проблема з масивами, вони мають фіксований розмір.
Так що, якщо ви не знаєте, наскільки велика Ваш вклад буде,
Ви не хочете, щоб створити масив.
Тому що, якщо ми створюємо Масив, занадто мала,
ми могли б зіткнутися з переповненням буфера.
>> Так замість цього ми могли б зробити щось зі зв'язаними списками, які
дозволяє нам мати динамічно розміру структури даних
що дозволить нам зберігати більш гнучким обсяг даних.
Таким чином, усередині кожного вузла в нашому пов'язаний список, у нас є дві частини.
У нас є фактичне значення, що він зберігає.
Так що це просто, що ви б см в масиві, наприклад.
І тоді ми також відстежувати покажчик до наступної речі в пам'яті.
>> На відміну від масивів, які ми знаємо все збираємося
в be-- елементи масиву все одне за іншим в memory-- пов'язані
Списки можуть бути де завгодно в пам'яті.
Вони довільних місцях.
Так що, якби ми мали насправді піти знайти їх, ми
потрібно відстежувати Наступне, що в нашому списку.
>> І тоді для того, щоб знати, де, що список в цілому,
Всі ми повинні відслідковувати це Найперший елемент в нашій пов'язаного списку.
І що буде дозволити нам виконати.
>> Так що це, як ви могли б визначити режим.
Це відмінна можливість скористатися структур.
Тому що у вас є ця ідея, добре, для даного вузла, у мене є дві частини.
У мене є фактичне саме значення.
А потім у мене є вказівник на Наступний елемент у зв'язаному списку.
Отже, ви бачите, у нас є число п, який буде фактичне значення,
а потім покажчик на вузол, званий поруч.
Так що це буде наступний елемент в нашій пов'язаного списку.
СТУДЕНТ: Да?
Ви повинні вказати, що зірка, як структури?
>> Ханна: Так, так, так як це майже як свого роду,
здається, що рекурсивний визначення, в якому ми
повинні знати, що вузол всередину, щоб знайти вузол.
Так як це не насправді знаю, що вузол повністю
поки ми не отримаємо до кінця this-- і після цього ми можемо назвати його просто
node-- всередині цього визначення, ми повинні назвати це структура вузла.
Велике питання.
Що-небудь ще?
Да?
>> СТУДЕНТ: Чому ми повинен сказати, вузол двічі?
Тому що, коли ми були в [нерозбірливо] ми просто повинні були зробити це в точку з коми,
але тепер ми повинні знайти, що структура вузла? [Нерозбірливо].
Ханна: Так що я вважаю, в останньому прикладі,
ми були просто створення в будь-який час ви хотів використати студента після цього, ви
довелося використати-структуру node-- Я sorry-- структури студента.
Це дозволило нам, після того, як той факт, просто Використання вузол додавання нового типу, по суті.
Це має сенс?
Таким чином, ми повинні були б повернутися і подивитися на код, перш ніж.
Але я думаю, що ми не використали ЬурейеЕ.
І ми поставили запитання, чому ми повинні використовувати ЬурейеЕ?
Typedef дозволяє уникнути Слово структура на початку.
Да?
СТУДЕНТ: Які питання будуть придумати
в плані з точки зору вузли та пов'язані списки?
>> Ханна: Так одне можна сказати, як може ви переглянете пов'язаного списку?
Добре, тому що це трохи складніше
ніж якщо ми шукаємо через масив.
Ми можемо тільки дивитися на нульовий елемент, Елемент один, елемент два, бла, бла,
бла.
Якщо ми хочемо шукати через зв'язаний список,
ми фактично повинні слідувати це трохи лабіринт покажчиків.
Так що давайте насправді йти через це дійсно швидко.
Те, що ми могли б зробити в замовити to-- скажемо ми
хочу просто перебрати наша повністю зв'язаний список.
Ми почали б в голову.
І потім, з тим, щоб перейти до наступного елементу,
а не просто збільшення на одиницю як ми могли б при переході через масив,
ми насправді збираємося слідувати наступний покажчик,
так що ми можемо знайти, де в Пам'ять на наступний елемент.
Так що я знаю, що це не досить, щоб прийняти все це прямо зараз,
але ви будете мати ці слайди.
Таким чином, ви можете пройти це трохи повільніше.
Але по суті, те, що ми хочемо зробити, виконайте наступні покажчики
через повноту пов'язаного списку.
Так що це питання може бути ви запитали.
>> Щось, щоб помітити з вставка, скажімо
ми хотіли поставити новий елемент в передній частині нашої пов'язаного списку.
Ми повинні бути дуже обережні, про порядок, в якому ми
перепризначено покажчики.
Бо, скажімо, я просто сказав, добре.
Зробити головний точку на цей новий елемент.
Просто щоб вона вказувала на 1 пор ми істотно втратили решту нашого списку,
бо я не пам'ятаю, де 2 житті.
>> Так що ми повинні зробити в дуже певний порядок.
По-перше, ми робимо новий елемент вказує на голову.
І тоді ми робимо голову вказувати на новий елемент.
Отже, давайте подивимося, як це виглядає з arrows-- просто так.
Таким чином, ви повинні спочатку нові елемент вказує на старій голові.
А тепер, у нас є голова він вказував на новий перший елемент.
Будь-які питання з цим?
>> ОК Ось код знову, щось дивитися на трохи пізніше.
А тепер я буду передати її Давіна для GDB і трохи практики
кодування на папері.
Красива.
>> ROB: А Роб.
>> Ханна: О, Девін і Роб.
Мені шкода.
>> СТУДЕНТ: Woo!
>> ROB: Спасибо.
>> DAVIN: Ви хочете сказати, все дійсно швидко?
ROB: Так, так.
DAVIN: Після того, як я до.
ОК, тоді як Роб ставить Мікрофон на, так що GDB?
Всі повинні були бачити GDB в клас, а також на робочі години.
І ви повинні використовувати його.
Так що GDB?
Будь?
>> СТУДЕНТ: Це відладчик.
>> DAVIN: Це відладчик.
І те, що це дозволить вам робити?
Мовляв, навіщо нам подобається GDB?
СТУДЕНТ: Щоб уповільнити програму.
DAVIN: справа, так що ви можете ходити через нього, як людина в ногу.
І так, що деякі команди ви можете зробити?
Ну, перерва, ймовірно, Ваш улюблений команда.
Тому що дозволяє розбити Програма і фактично йти через нього
построчно.
>> Виконати дозволяє запускати його.
Далі, як покроково.
Що між рядом і кроку?
Зачекайте, говорю це вголос.
Це було правильно.
>> СТУДЕНТ: [нерозбірливо].
>> DAVIN: Так, дивовижний.
Так як, в наступному і крок, якщо you're-- скажімо у вас є функція ви
визначити.
Скажімо деякі у вашій основній функції, і ви просто йдете поруч, поруч,
Наступний.
Ти насправді відбувається в виконати цю функцію,
але ви збираєтеся стрибати через нього.
Якщо ви потрапили крок, або и або будь-який інший, ви
збирається насправді стрибати в цій функції,
а потім ви можете натиснути поруч щоб побачити різні дзвінки
всередині цієї конкретної функції.
Да?
>> СТУДЕНТ: Чи є спосіб стрибати, як, відступити?
DAVIN: Готово, да, закінчити з стрибати вам.
Так це буде закінчити, що Функція, а потім ви
збирається повернутися в основний, наприклад.
Друк буде роздрукувати його один раз.
Щось я завжди використовую це дисплей.
Дисплей роздрукувати його постійно протягом всієї повноті
вашої програми.
>> Наприклад, якщо ви в циклі, і ви
хочу подивитися, як щось міняється, і ви не хочете, щоб, як, постійно
робити, як друк, друк, друк, дисплей
покаже цю змінну постійно, кожного разу, коли ви натиснете кнопку Далі.
І як і раніше.
Так ГПБ, це GDB.
>> СТУДЕНТ: Що один де ви [нерозбірливо]?
DAVIN: Що це таке?
>> СТУДЕНТ: Що the-- локальні змінні.
ROB: Існує щось насправді як місцеві жителі або щось.
Я can't--
>> DAVIN: Це може бути якось так, так.
>> Ханна: У місцевих жителів?
>> DAVIN: Ось це.
Ось один.
ROB: Красива.
>> DAVIN: Так.
>> СТУДЕНТ: Що раніше робити?
>> DAVIN: Це continues-- так що це просто збирається продовжити свої програми.
Так що, якщо ви порушите і вдарив продовжувати, це буде
не просто запустити цю програму, поки вона потрапляє, що перерва знову.
Так, наприклад, якщо ви зламав у функції,
і ви збираєтеся робити, як для петля або щось подібне,
і ви потрапили продовжувати, він збирається продовжити і повернутися до цього перерви.
Чи ні ніякої перерви, вона не збирається продовжити і завершити програму.
>> ROB: Так просто подобається зупиняється, на першому зупину
ви потрапили, якщо вам, то хіт продовжувати, це буде тримати
відбувається, поки це не наступної точки.
А потім продовжити піде до наступної контрольної точки.
DAVIN: Будь-які інші питання про GDB?
Так що я думаю, що і в минулому, ми просили вас, що
GDB і дати Приклад деяких речей, які ви
можна зробити за допомогою GDB, так реальний простий, але так.
Там ви йдете.
І вузли?
>> ROB: Так, так, в якому напрямку це було?
СТУДЕНТ: От і все.
DAVIN: Почекайте.
ROB: Цей хлопець?
DAVIN: Це один.
ROB: Цей хлопець, ох, я не розумів ,.
Таким чином, ми не були ясні на те, що я the-- НЕ
знаю, хто це was-- але питання.
Ми не знаємо, що саме ви питали про це, так що просто
уточнити щось.
Отже, спочатку, як я вже казав, ЬурейеЕ ви завжди за допомогою тільки
створити псевдонім для типу.
Так ось тут, прізвисько ми Створення для цього структури вузла.
>> Отже, спочатку, ігноруючи цей вузол в ЬурейеЕ, так це структура вузла кучеряве
готуватися до наступного кучерявого ортез Тип структури вузла.
І ми повинні до цього вузла там, бо ми
потрібно посилатися вузол тут.
Отже з такого роду рекурсивної структури, Ви повинні дати цієї структури ім'я,
інакше ви не могли кажуть структура вузла тут.
Якщо раніше з учнем коли ми набралися, я думаю,
ми не повинні сказати, студент там, бо ми
не повинен сказати-структуру Студент всередині самої структури.
Так що це рекурсивна що змушує нас сказати вузол є.
>> Цей вузол є тільки назва ми даючи вузол для визначення типу.
Так що вузол не так само, як цей вузол.
Але цей вузол є структура такий же, як той структура вузла.
DAVIN: Тому, коли ви телефонуєте, як, вузол в головній функції,
Ви ж не збираєтеся повинен сказати, структура вузла.
Ви можете просто сказати вузол, бо вузол є в основному different--
Ви говорите, ОК.
Замість того, щоб подзвонити структура вузла в своєму коді,
Я просто хочу, щоб перейменувати його як вузол, щоб зробити його більш легким.
>> ROB: Якщо вас завжди використовувати ЬурейеЕ, то це
це єдине місце, ви будете мати, оголосити змінну з STRUCT вузла
зірка, так.
>> DAVIN: ОК, так що остання частина Важко навчити because--
ROB: Що?
>> DAVIN: Тому що це кодування на папері.
Таким чином, щороку у нас є Код на паперових питань.
Так що я думаю, що в минулому році, 12 з 80 балів були Код на папері.
Рік до цього, 10 з 80, За рік до цього, 20 з 100,
так немало з них.
Таким чином, ви будете мати, щоб бути в змозі кодувати ці функції вручну.
>> Тому я вважав, що ми могли б пройти Пару з них і подивитися, як люди роблять,
вид ходити через їх повільно з людьми.
Так зазвичай, StrLen і atoi були дуже популярні.
Торік, я думаю, що ми повинні були GetPositiveInt і RandomInt.
Але військовополонених, тому потужність, також позитивним занадто.
Давайте просто пройти, може бути, один або два з них разом.
Що люди хочуть бачити?
>> СТУДЕНТ: Atoi.
СТУДЕНТ: Так.
DAVIN: Atoi?
СТУДЕНТ: [нерозбірливо].
DAVIN: ОК, я збираюся зробити це на дошці.
Чи є у вас уподобання якщо я роблю це тут чи там?
Там, Гейб каже там.
>> ROB: І це спільні думки на ці питання кодування.
Спробуйте написати що-небудь.
Чи не залиште це поле порожнім.
>> DAVIN: Так.
ROB: Якщо ви можете отримати повернутися тип правильно,
або, може бути, ми могли б дати його Ви, але якщо ви можете, як,
написати спільну функцію підпис, Якщо ви можете отримати базові випадки правильно,
або приватні випадки, або згадуючи чек на нуль,
доти, поки у вас є деякі речі, то, можливо, ми
може дати вам пару вказує на проблеми.
Не просто залиште це поле порожнім.
>> DAVIN: Так, і якщо вам тільки повністю
тупик в тому, як насправді перетвориться в коді.
Якщо ви пишете псевдокод, це дуже добре теж.
Так що це як, це шість цілих питання, і ви напишіть правильний псевдокод,
Ви отримаєте не менше двох точок.
Так що не просто залишити їх порожніми.
Спробуйте покласти щось.
>> ROB: Вона повинна бути правильно псевдокод, хоча.
>> DAVIN: Так.
ROB: Таким чином, ми, як правило, є менш поблажливий з помилками в псевдокоде.
Девін: ОК, так що ви, хлопці хотів бачити atoi.
ОК, так що просто really-- так що ви хочете зробити,
це ви збираєтеся бути враховуючи якісь числа.
Але це число не буде інтервал, чи не так?
Що це буде?
>> СТУДЕНТ: [нерозбірливо].
>> DAVIN: Це збирається бути рядком, чи не так?
Так що якщо ви дали string-- давайте say--
>> ROB: Чи повинен я підтягнути редактор?
Я можу витягнути up--
>> DAVIN: О, ви хочете зробити це on--
>> ROB: Ви б віддали перевагу дошку?
>> DAVIN: Що ви хочете зробити?
Я маю на увазі, ви хочете зробити це вручну?
Або ви хочете, щоб зробити це за допомогою комп'ютера?
>> ROB: Зробіть це вручну.
>> DAVIN: [Сміється]
ROB: Зробіть це вручну.
>> DAVIN: ОК, так що це буде atoi.
Так що it-- Я маю на увазі, ми будемо ймовірно, дасть вам це.
Але те, що він збирається повернутися?
>> СТУДЕНТ: Int.
>> DAVIN: Це збирається повернутися Int, чи не так?
So-- Я не хочу, щоб це зробити є.
Я зроблю це тут.
>> ROB: Ви можете тягнути його вниз а потім натиснути на нього.
>> DAVIN: так.
[Сміється] зміна гри.
ОК, так що це буде INT atoi, і те, що він збирається зробити?
Символ зірки, так просто Рядок, зірка с, як, що.
>> ROB: Nice зірка, хороший.
DAVIN: Це не може бути там, ОК.
ROB: Так.
DAVIN: ОК, так що перший що ви хочете do-- I
не знаю, якщо хто-небудь подивився на практиці solutions--
але те, що ви збираєтеся хотіти зробити це ви
захоче їсти петля, бо ти
захоче фактично покроково цього рядка.
Так helpful-- так скажемо ми збираємося для петлі,
і ми збираємося пройти через кожен елемент рядка.
Як довго це?
Скільки раз ми збираємося для перебору в тому, що для циклу?
СТУДЕНТ: Sterln?
DAVIN: Sterln, так.
Так скажімо, довжина інтервал дорівнює sterln с.
І просто цікаво, чому це завжди свого роду з найкраще робити це поза петлі?
Як, чому це краще назвати ця функція поза циклом?
Просто перевірте швидкий розсудливість?
Да?
СТУДЕНТ: Таким чином, ви не повинні продовжувати перевіряти його.
Ви можете просто [нерозбірливо].
>> DAVIN: Рівне, так що так, саме те, що вона сказала.
Таким чином, ми не повинні продовжувати перевіряти його.
Так, наприклад, якщо я дзвоню ця функція в циклі,
Потім я збираюся продовжувати дзвонити ця функція кілька разів.
І що відбувається, щоб зменшити ефективність вашої програми.
Так що це завжди корисно оголосити його поза.
>> ROB: Це говорить, на будь-який з цих проблем,
в значній мірі, поки ви отримуєте робочого розчину, ви отримаєте повний кредит.
Отже не хвилюйтеся, якщо ваш дизайн абсолютно жахливим.
Це може зробити нас засмучений читати ваш код.
Однак до тих пір, як воно працює, ви отримаєте очок.
>> DAVIN: Так.
Отже, те, що я збираюся оголосити деякі змінні.
Це просто буде дзвонити Int суму.
І я збираюся встановити це дорівнює нулю, як це.
І це тільки збирається бути заповнювач.
Так що це буде то, що я збираюся повернутися.
Так що я збираюся в кінці кінців повернутися суму з цієї програми.
Тому у мене є ці дві змінні.
Я маю довжину.
У мене є суму.
А тепер давайте перейдемо в нашу рядок.
>> Так що давайте їсти наш цикл.
Так чотири INT я дорівнює 0 ж, у той час як Я менше довжини I плюс плюс.
І now--
ROB: Nice.
DAVIN: ОК, а тепер тут приходить м'ясо нашого коду.
Таким чином, ви можете насправді робити це в основному в одну лінію.
Так хто-небудь є ідея про те, що ми збираємося робити далі?
ОК, так що все в порядку.
Таким чином, ми робимо сказати суму equals-- дозвольте мені бігти стрімголов цей over-- суму
дорівнює сумі раз 10 plus-- ми збирається зайняти и I мінус один
Цитата 0 одна цитата зроблено, як, що.
ROB: Дуже інтуїтивний.
>> DAVIN: Щебінь його.
Отже, someone-- я отримав його, я отримав його.
ОК, так що це явно йде вгору.
Що це означає?
Так хто-небудь знає, що це означає?
Чи всі можуть переконатися в цьому?
Ні, ніхто не може в цьому переконатися, гаразд.
Я збираюся to--
>> ROB: Я збираюся написати Формула просто прямо тут.
DAVIN: ОК, Роб збирається це зробити на комп'ютері, який весело.
ROB: О, мій Бог.
Або я не буду.
DAVIN: очікування.
СТУДЕНТ: У мене є питання.
DAVIN: Так, звичайно.
СТУДЕНТ: [нерозбірливо]?
DAVIN: ОК, так це насправді, як, тільки в загальному,
якби ви були поставити, як, У цій декларації междунар
Я дорівнює довжині 0 кому дорівнює sterln, that--
>> СТУДЕНТ: [нерозбірливо].
>> DAVIN: Це добре, тому що that--
СТУДЕНТ: Навіщо ви навіть потрібно використовувати довжину?
Чому ми не могли просто [нерозбірливо] sterln с, як все время [нерозбірливо]?
>> DAVIN: Ви маєте на увазі тут?
>> СТУДЕНТ: Так.
DAVIN: Тому що кожен Час це для петель трас,
це буде оцінити цей стан.
СТУДЕНТ: справа.
DAVIN: А якщо у вас є sterln є, то це
доведеться насправді назвати що функція кожного разу.
Таким чином, замість того, щоб просто порівнюючи його з междунар,
Ви збираєтеся телефонувати Функція, а потім порівнюючи його
на повертається значення.
Так, так що це просто, так.
>> Хороший, ОК, так що тепер кожен може побачити його.
Що does-- це як, це він.
Це варення, прямо тут.
Що це означає?
Що я роблю?
Так, ідея?
Да?
>> СТУДЕНТ: Ну, так що, коли Ви вводите масив,
Ви збираєтеся йти зліва направо,
так ви збираєтеся йти в десяткової від вниз [нерозбірливо].
DAVIN: Абсолютно вірно.
СТУДЕНТ: Так кожен потрібно помножити
то, що ви бачили, як від значення междунар по раз, коли ви отримуєте рухатися, що над одним.
>> DAVIN: Відмінно, прекрасно, так, наприклад, давайте
сказати, що я дав you-- Я писатиму тут.
Ні, я не.
Я збираюся написати сюди.
Скажімо, я дав тобі 76, чи не так?
Скажімо, я дати вам 76.
Це рядок для початку, добре?
>> Так довжина є що?
2, чи не так?
Сума 0.
Тоді ми стрибаємо в нашій цикл.
ОК, перша ітерація це, що це буде?
Це буде сума 0.
Так підвести раз 10 0.
Це безглуздо.
Тоді що ж це зробити?
СТУДЕНТ: [нерозбірливо].
>> DAVIN: Це збирається повернути, що характер в ціле число, чи не так?
Це ніби як з вашим Проблема set-- цьому light--
це ніби як з Проблема встановлений на Visioneer.
Ви маєте справу зі значеннями ASCII.
Так що, якщо я даю вам, як, сім, але це характер,
і ви хочете знати, Добре, що цифра є те, що?
Так, ви могли б, так.
Так що цифра, що?
Ви можете відняти 0 від нього, але ви повинні відняти 0, характер.
>> І де деякі люди отримати спіткнувся, вони
як, в порядку, добре, я повинен знати, значення ASCII для цієї вікторині?
Ні, ви, безумовно, не потрібно знати ASCII
Значення, начебто, в нижньому регістрі , Верхній регістр, нуль.
>> ROB: Там немає причин, щоб коли-небудь поставити це на шпаргалку.
>> DAVIN: Безумовно не витрачати свій простір в цьому.
Ви можете literally-- тільки замість сказати 48, як аж
там, що еквівалентно кажучи друг, один апостроф,
так, точно так же.
>> ROB: Ви могли б подумати, про це, як if-- Бога, мені потрібен мій,
oops-- ви могли майже думати про це як ніби у нас є щось на зразок цього хеша
визначити 0 як 48.
Це не буде працювати.
Але думати про це як один цитатою 0 апостроф, і для всіх персонажів.
Думайте про це як константа, представляє це значення ASCII.
>> DAVIN: Так.
Отже, в перший раз через, так з 76-- так в перший раз через,
це тільки символ 7 мінус символ 0,
і ті сім integers-- добре, ті,
сім простору один від другий на ASCII графіку або будь-який інший.
Так що збирається повернути Int з 7.
Так що тепер, сума дорівнює 7.
>> Добре, добре, давайте перейдемо в цей цикл знову.
Добре, тепер це сума раз 10.
Так ви ефективно переміщуючи 7 вліво.
Чи має це сенс?
Ти ефективно переміщуючи його вліво.
>> І тоді ви add-- це буде 6 мінус 0.
Ось 6.
Так що це буде 70 плюс 6.
76, що ваш номер.
Таким чином, незалежно від того, який числа Я дав вам, це повільно просто
збирається змістити великі значення вліво, 1 фактор 10
кожен раз протягом циклу, а потім додати на в міру необхідності.
>> В спину?
СТУДЕНТ: Ми не повинні робити будь-яка перевірка в програмі?
>> ROB: Так наскільки перевірки йде по програмі,
ми б розповісти вам досить багато, що вам потрібно, щоб перевірити.
Якщо ми не говоримо вам що-небудь, то, як правило
Припустимо, у вас є, щоб перевірити більшість речей.
Як ви, можливо, просто щоб бути в безпеці, вам ймовірно, слід перевірити агов, це з нульовим?
Тоді я поняття не маю, що таке повернутися.
Але ми б вам сказати, такого роду речі.
0, я не знаю.
>> DAVIN: А чому ви хотіли б перевірити ще раз, якщо з одно нулю?
СТУДЕНТ: [нерозбірливо].
DAVIN: Через напівкоксу зірки.
Це покажчик.
Так цілком прийнятно Декларація, я міг би сказати, в порядку,
з дорівнює нулю, тому що це може бути дороговказом на нуль.
Тому, коли у вас є покажчики на вашому шляху в, як це,
Ви, ймовірно, слід перевірити.
Тому що, якщо ви не переконаєтеся, що й то ви потім в ваш цикл,
і ви doing-- стрімголов вниз.
Скут вниз.
>> ROB: На жаль, це так.
>> DAVIN: І так, як, якщо це нуль, а потім вас
зробити це, що помилка ви збираєтеся отримати?
СТУДЕНТ: Ви збираєтеся отримати набір провину.
DAVIN: Ви збираєтеся встановити вина, правильно, тому що ти
намагаючись індексу в нуль.
Таким чином, ви будете намагатися індексу в пам'ять, що ви не володієте.
Таким чином, це, якщо це є нульовим, і Ви робите це, ви будете циклу.
>> ROB: Я теж думаю, що на іспиті, в якому ми поставили це питання, ми говоримо вам,
що ви можете просто вважати, це позитивне число.
Бо atoi Також очікується обробляти негативні числа,
так що ви повинні були б особливий випадок.
Гей, це перший символ тире, і в цьому випадку, в порядку,
Тепер це негативне число.
Ми розповімо вам ці види речей.
Ми розповімо вам, що вам потрібно для роботи.
DAVIN: Так.
Так що я впевнений, що деякі люди можуть have-- якщо ви почали дивитися на старих іспитів,
Ви бачили sterln.
Це популярний.
І я думаю, що в sterln, ви повинні були зробити цю перевірку для нуль, повернення
0 або щось подібне.
Як, ви мали перевірити на нуль.
І якщо ви не зробили, що було вказати геть на вікторині.
Так чи інакше, робить усіх відчуваю в порядку з atoi?
Чи хоче, щоб хто-небудь перейти частин знову?
ROB: О, так, я думаю, ми також сказати, що ви
можна вважати, що всі is-- що вони насправді ввівши номер,
що вам не доведеться турбуватися про, як, будучи букви в рядку, тому.
DAVIN: Так.
Да?
СТУДЕНТ: Чи можете ви піти над більш один раз, коли
Ви використовуєте подвійні лапки і одинарні лапки?
>> DAVIN: Звичайно, так подвійні лапки, дуже просто, це подвійні лапки є рядками.
Так що, якщо ви двічі цитату що-небудь, що це рядок.
Так, як, якби мені довелося це 0 тут, і я зробив це, це рядок.
НЕ Ось вже не персонаж.
Так що я не можу знайти цю величину на моєму ASCII Графік, бо це рядок, так.
>> ОК, будь-які інші питання?
Да?
>> СТУДЕНТ: Таким чином, ви маєте вже відповів на це питання,
але як, коли ми насправді пишу це на вікторині,
Ви хочете, щоб ми написали з скорочує нулі [нерозбірливо]?
DAVIN: Ні.
Питання було повинен вам вставити косу риску через нулі
щоб вказати, якщо вони нулі?
Ні, ми з цим розберемося.
Так, дякую, що вони гарні.
Добре, що-небудь ще?
Чи хоче хтось to-- тому я думаю, ми запускаємо трохи протягом довгого часу.
Хочете побачити ще один, або?
СТУДЕНТ: RandomInt.
>> DAVIN: RandomInt, ОК, точно.
Так що давайте робити RandomInt.
Я зроблю це тут.
Так RandomInt насправді набагато простіше.
Я думаю, що atoi, ймовірно, один з найважчих що ми попросили в попередні роки.
СТУДЕНТ: [нерозбірливо].
>> DAVIN: Що?
ROB: Я бачу, якщо це частково з перегляду від сюди.
DAVIN: Чи так це?
ROB: Я не думаю, що це going-- я думаю, він збирається бігти направо.
DAVIN: ОК, так що я буду робити це.
І тоді ви просто покласти його на екрані.
>> ROB: Гаразд.
>> DAVIN: Ви хочете бути моїм книжник?
>> ROB: Так.
>> DAVIN: Ніцца.
ОК, я можу стерти це?
>> СТУДЕНТ: Так.
>> DAVIN: Це так важко.
(Спів) Ти робиш що ви робите.
І робити те, що ви не знаєте.
Добре.
>> Добре, якщо я правильно пам'ятаю, на вікторина RandomInt походив,
ОК, я збираюся дати вам два номера, як в а і б.
І я хочу, щоб ти дав мені RandomInt між цими числами.
Так RandomInt збирається взяти два numbers--
так RandomInt-- і це збирається повертати Int.
>> Так що повертається значення?
Я щойно сказав вам.
Int, чи не так?
Як це, і тоді це збирається взяти два цілих.
Так що це займе Int і INT б, як що.
Так що RandomInt є збираюся зробити, це він збирається
повернутися випадкове значення між цими двома значеннями.
Так що це буде більше ніж, менше, ніж б.
Так що я думаю, що ви, ймовірно, може вважати, що є меншим із двох значень.
Так що, якщо ми маємо справу з Випадковість, що функція
ми бачили, що дає нам випадкові речі?
СТУДЕНТ: Drand.
DAVIN: Drand, точно.
Таким чином, ви будете, ймовірно, хочете використовувати drand.
Таким чином, ви можете сказати, інтервал випадкової, і ми будемо просто сказати, що це дорівнює 0 прямо зараз.
І вони ми збираємося сказати, ОК, випадкові одно drand 48.
І що ж це повернення?
Що це функція дасть вам?
>> СТУДЕНТ: від 0 до 1.
>> DAVIN: Так, між 0 і 1.
Так це буде be--
>> ROB: І це is-- я думаю, ми б розповісти вам про це.
Як можна використовувати drand 48.
Ви можете переконатися в цьому на минулій іспиту.
Але ми б, ймовірно, сказати вам можна використовувати drand 48, який
повертає поплавок між 0 і 1.
>> DAVIN: Так, так, я упевнений, що на іспиті
він каже вам, ймовірно, хочете використовувати drand, так.
Так це буде повернутися деяке значення між 0 і 1.
І тоді те, що ти захоче зробити?
Ну, ви хочете, щоб помножити по-- почекайте, я думаю, що це, як це, вибачте.
Я просто це зробити.
Я не знаю.
>> Так б мінус.
Так чому б мінус?
Так скажімо, drand дає вам назад int-- ОК, я просто робити все інше,
так плюс.
Так що does-- у є б мінус.
Так скажемо, що drand дає вам назад максимальне значення це могло можливо
дати вам.
Що це буде?
СТУДЕНТ: 1.
>> DAVIN: 1, чи не так?
Так що, якщо це 1, а ти помноживши його на б мінус,
добре, от тільки Різниця між мінус А.
І якщо ви потім додати, що назад на, що є що?
Це в основному б.
Чи має це сенс?
>> СТУДЕНТ: Так.
>> DAVIN: Так що, якщо це максимум цінуєте це могло б бути,
це буде один.
А потім це просто Різниця між ними.
Додати на, так що це збирається повернутися випадковим.
І в разі, кутовий drand дає вам назад 1,
випадкових буде просто ефективно б.
Але це максимум, що може бути.
Так що, якщо це буде менше, ніж що, так скажемо, що його, як 0,9,
так то 0,9 раза б мінус буде менше
, Ніж різниця між б мінус.
>> І тоді, якщо ви додасте що на, то, що значення
буде більше, ніж, тому Ви додаєте щось на нього,
але це буде менш б.
Таким чином, ви збираєтеся отримати випадковий число, тому що ви телефонуєте drand.
І що ранд, що випадкове число буде десь посередині
і б.
Чи має це сенс?
>> ROB: Просто, щоб поставити його в конкретні цифри, так
Припустимо, ми хочемо, щоб забрати випадкове число між 7 і 10.
Так б мінус це наш асортимент.
Так що є цілий ряд з трьох номера ми хочемо, щоб вибрати з.
А потім множення що між 0 і 1 січня,
якщо що то дає нам some-- скажемо, що дає нам 1,5.
>> Тоді 1,5, ми хочемо йти з 7 по 10.
Так 1,5 плюс 7 підводить нас назад в нашому 7 до 10 діапазоні.
А потім ми її зберігання всередині ціле число, так що усікається до 8.
А потім ми просто повернути це.
Так б мінус це наш асортимент.
зрушує його в цифри що ми хочемо в цьому діапазоні.
Так між 7 і 10, а потім ми може повернути те, що ми в кінцевому підсумку с.
>> DAVIN: Так, приємно.
>> ROB: Спасибо.
>> DAVIN: Так, в чому справа?
>> СТУДЕНТ: Чи є у нас запустити його для будь-якого виду Помилки ASCII коли we're-- якщо drand є
повернення поплавок [нерозбірливо].
>> ROB: Так само, як Роб сказав, бо випадковостей не INT,
так drand буде поплавок.
Так, а потім він розмножується поза.
І ви можете отримати деякі вид чисел з плаваючою крапкою.
І тоді це буде обрізати.
>> СТУДЕНТ: ОК.
DAVIN: Так.
ROB: А якщо компілятор були попередити Ви про, як, втрата точності,
просто кинули на Int в є, і то це добре.
DAVIN: Да?
>> СТУДЕНТ: Чи буде це мати ж ймовірність отримання,
як, б або [нерозбірливо]?
>> ROB: Так is-- Я насправді wondering-- є RandomInt передбачається
щоб бути номером від менш б?
Мовляв, якщо це від 7 до 10, які можливості?
7, 8 і 9, або 7, 8, 9, 10?
DAVIN: я забуваю.
На проблемної set--
>> ROB: Я думаю, що це 7, 8, 9.
>> DAVIN: Вона прямо говорить своєму включно і один ексклюзивною.
>> ROB: Так.
>> DAVIN: Але я don't-- Я не--
>> ROB: Так що я думаю, що це є не включений, і в цьому випадку,
є одно Ймовірність 7, 8, і 9.
Там немає ймовірність 10.
DAVIN: Да?
СТУДЕНТ: У мене є питання.
Ми хочемо, щоб визначити функцію повертає не одне значення, але масив.
Тоді що буде Синтаксис після повернення?
>> DAVIN: ОК, так, то ви would-- після повернення?
Так, скажімо, ви оголосили масив десь там.
Тоді вам просто повернеться Ім'я масиву.
>> СТУДЕНТ: ОК, спасибі.
Тоді просто повернутися з a--
DAVIN: Ой, зачекайте, дуже шкода.
Питання в тому, як Ви повертати масив.
>> ROB: Хоча це не може бути масив, оголошений
в стеці або що-небудь подібне.
Це мало б бути щось malloced, тому Танос
як ви обійти автоматичний розподіл пам'яті.
>> DAVIN: Так.
ROB: Як вам обійти локальній області видимості.
>> DAVIN: Але ви б просто повернути його name--
>> СТУДЕНТ: [нерозбірливо] це не один значення, наприклад, два числа, так
[Нерозбірливо].
>> DAVIN: Ви не можете повернутися кілька число.
Ви не можете, як, return--
>> СТУДЕНТ: Я говорив про повернення масив або щось подібне.
>> DAVIN: Так, так що питання я можу повертати декілька значень.
Ви не можете повертати декілька значень.
Ви не можете, як, повернути те повернутися б або щось подібне.
Тому що після того, як ви повернетеся, вас повернутися з функції.
І то функція буде зроблено, і як Роб сказав, знаходиться в стеці.
>> Так що все, що пам'ять просто отримує повертається до комп'ютера.
Все забувається, в основному.
Так що, якщо ви хочете, щоб повернутися кратне значення, ви повинні повернути масив,
І те, як ви робите це mallocing.
А потім ви повернетеся х подібне.
В принципі, ви просто повертає ім'я.
І коли ви повернетеся щось на зразок цього, ви
насправді не повернення значення.
>> Так скажімо, у вас зберігається значення в масиві.
Ти насправді не повернення цих цінностей.
Мовляв, якби я повернувся в Int, я дійсно повертаються копії значень.
Але якби я мав повернутися щось на зразок цього,
Я повертаюся посилання для цих значень.
Так я повертаюся, в основному, Адреса пам'яті для значень.
Чи має це сенс?
СТУДЕНТ: Так.
DAVIN: Ніцца.
Да?
>> СТУДЕНТ: Коли ти використовуючи drand тут,
Ви повинні поставити srand до цього?
>> DAVIN: Ні, ні, я так не думаю.
>> ROB: Так, так що у вас є сказати що-небудь про srand?
За замовчуванням вам ніколи не говорив srand взагалі, це просто зробити srand нуль.
Так drand з власної роботи буде.
І він буде автоматично насіння з поточний час, є те, що він використовує.
DAVIN: Да?
СТУДЕНТ: Чи подобається вам [нерозбірливо] з номерами?
DAVIN: Так, можна.
СТУДЕНТ: Таким чином, ви могли сказати, як, в 4 рази 2.
Справа в тому, що ви не можете припустити, то інтервал становить чотири байти.
Only--
>> DAVIN: Я маю на увазі, для вікторини можна.
[Сміється]
>> ROB: М-м, ні.
DAVIN: Так, так, ви можете.
Якщо вони питають вас, як великий інтервал є, Ви не можете бути, як, чотири або вісім.
ROB: О, так що якщо Питання в тому, зокрема,
як, якщо це проблема кодування, Ви повинні сказати розмір междунар.
Якщо це стіл, або він каже, скільки байт,
Ви не повинні заповнювати розміру цілих чисел.
>> СТУДЕНТИ: [Сміється]
>> DAVIN: справа, так чому ж Розмір междунар важливою тут?
Так як, якщо ми збираємося 32-біт процесор або щось подібне,
то буде чотири байти.
Але на деякі з нових матеріал, це може бути що?
Це може бути вісім, чи не так?
Так this-- якщо ви просто важко код з чотирьох, потім на деяких машинах, він працюватиме.
Деякі машини, він не працюватиме.
Але якщо на вікторині ми знаходимося як наскільки великий інтервал?
Покладіть чотири.
ROB: справа.
DAVIN: Да?
СТУДЕНТ: Так бо ми оголошенні [Нерозбірливо] всередині функції,
ми повинні поставити 3 всередині цієї функції?
Або ми можемо використовувати це поза?
DAVIN: Ви можете використовувати його поза цієї функції.
Так він просить безкоштовно.
>> СТУДЕНТ: втрачати де [нерозбірливо].
>> ROB: О, безкоштовно не happen-- це частина магії Танос
є те, що ви не обмежується локальній області видимості.
Ви маєте повний контроль над як довго ваші змінні жити.
Так ми називаємо Танос тут, це могло б бути повністю окрема функція.
Це може бути через 10 годин що ми, нарешті, дзвонити безкоштовно.
>> DAVIN: Так, наприклад, як, пара тижнів по тому, коли ви, нарешті,
зробити свій словник Speller psets, ви збираєтеся
мати деяку функцію, яка створює тонн вузлів.
Таким чином, ви mallocing тонн вузлів в цій функції.
А потім в окрема функція, ви
захоче звільнити всі ці вузли.
Таким чином, ви можете буквально просто переходять на звільнити покажчик, так що адреса пам'яті
щоб те, що ви malloced.
І що буде добре.
Вам не потрібно, щоб звільнити, як, в тій же самій функції.
Да?
>> СТУДЕНТ: Так Танос Змінна [нерозбірливо] за межами?
Це те, що ви говорите?
DAVIN: Зачекайте, що?
Вибачте.
>> СТУДЕНТ: Якщо змінна Танос може бути вільним в будь-якому місці в коді,
то вони можуть бути доступні в будь-якому місці в коді?
Ви можете тримати їх місцевий?
>> DAVIN: О, вона запитала, як змінна, like--
>> ROB: Таким чином, ви все ще повинні є якісь довідки
в блоці Malloc в пам'яті.
Так ось, ми повертаємося х.
СТУДЕНТ: О.
ROB: Якщо ми не повернулися х тут, і це було просто порожнеча,
то ми не мали б доступу до покажчик, який був malloced,
і це витік пам'яті.
>> СТУДЕНТ: ОК.
>> DAVIN: Так як, скажімо, вас Тобто це, як, прямо тут.
ROB: Ні.
DAVIN: У моїй основної функції, я не можу просто назвати цю х і бути, як, в порядку,
в цій функції, я зробив це.
>> ROB: справа.
>> DAVIN: Так що я буду називати х в, як, основний або щось подібне.
Ви не можете зробити це.
Ви збираєтеся щось повернути.
Але те, що ви збираєтеся повернутися?
Ви збираєтеся повернутися адресу пам'яті.
І тому, що ви повернетеся на пам'ять адресу, яка може бути доступний в інших країнах.
Будь-які інші питання?
Да?
>> СТУДЕНТ: Чи є дана функція бути перевірка на [нерозбірливо]?
>> DAVIN: Чому я не потрібно робити, що?
СТУДЕНТ: [нерозбірливо].
DAVIN: Тому що ти НЕ mallocing нічого.
Так що це не-- так, це не подобається струнний с.
Це покажчик кудись.
Це всього лише значення.
СТУДЕНТ: ОК.
DAVIN: Так.
Що-небудь ще?
ROB: Да?
СТУДЕНТ: Але коли ви [нерозбірливо]?
>> ROB: Так що для того, щоб звільнити пам'яті, ми б сказали, тут.
Так х наша покажчик блок пам'яті.
Ми безкоштовно цей покажчик.
І ми не обов'язково робити це тут.
Ми можемо зробити це в будь-якому місці.
Але ви тільки дзвонити безкоштовно на щось, що Malloc віддачу.
Так Танос, тут, повертається те, що в даний час зберігається в х.
Таким чином, ми можемо назвати вільним від х.
Будь-які останні питання?
>> DAVIN: Будь останні питання?
Да?
>> СТУДЕНТ: На жаль, ви можете заново пояснювати чому ви б звільнити там?
Чому [нерозбірливо]?
>> DAVIN: Для сюди?
>> СТУДЕНТ: Так, як одразу після.
DAVIN: Ви, напевно, не хочу безкоштовно тут.
ROB: Ви, напевно, не буде.
DAVIN: Так, це б нічого не робити.
Це буде, як, створити пам'яті, робити такі речі, до нього,
, А потім негайно забудьте про це, так.
>> ROB: Але ми могли б зробити, як, тут з якоїсь причини.
Ми могли б сказати, INT зірку у дорівнює зворотний масив.
У дещо з у, можливо роздрукувати вміст.
І ось, нарешті, ми зробили.
Ми можемо звільнити у.
СТУДЕНТ: [нерозбірливо].
DAVIN: Чи повинен я прокрутите вниз?
Спасибо.
ROB: Nice.
>> DAVIN: ОК, ось воно що.
ROB: Гаразд, добре.
Удачи.
>> DAVIN: Якщо у вас є питання, напишіть нам.
Удачи.