>> [Грає музика]
>> ДАГ Lloyd: ОК.
Ми працювали з цілими числами, ми працювали з персонажами,
ми працювали поплавці, подвоюється, рядка і Bools.
Ми вичерпали майже всі з [нерозбірливо] типів,
були доступні для всіх нас разом.
Але тепер ми хочемо зробити щось ще.
Як ми це робимо?
Як створити різні типи даних?
Ми можемо зробити це за допомогою структур.
Так структури дозволяють уніфікувати змінні різних типів
в один новий тип змінної, які ми можемо призначити своє ім'я типу.
Це дійсно сильний річ, щоб бути в змозі зробити,
тому що тепер ми можемо група елементи різних типів даних
разом, які мають логічний зв'язок.
Ми були в змозі це зробити з масивами роду, вірно?
Ми можемо групові змінні того ж типу даних
разом у великому блоці пам'яті, масиву.
>> Але ми не в змозі змішати до різних типів даних разом.
Ми не можемо, скажімо, пару ціле, і характер, і подвійний все
в те ж саме і називаємо це єдине ціле.
Але структури, або часто згадується як структур,
ми насправді можемо.
Таким чином, структура є свого роду з себе супер змінної.
Це змінна, яка містить інші змінні всередині нього.
Так ось приклад дуже проста структура.
Це те, що синтаксис буде виглядати б створити структуру для автомобіля.
Тепер, давайте пройти через синтаксис тут.
Структура ,, що це Ключове слово, яке вказує,
що я створюю новий тип даних тут.
Зокрема, ім'я типу даних є буде структура автомобіля, як ми побачимо.
Але це свого роду наконечником від компілятору, що це
як група змінних, що відбувається слід розглядати як частину одного і того ж типу
за хвилину.
>> Автомобілі, просто назва структури.
Знову ж таки, тип даних тут буде бути структура автомобіля, а не тільки автомобіль.
Але якщо у вас є different-- якщо ви створюєте кілька структур
в тій же програмі, що вам потрібно розрізняти структури і структури.
Так структура автомобіля, я міг би також структура студент, наприклад,
в тій же програмі.
Усередині фігурних дужках є всі так звані поля,
або члени структури.
Так що деякі з речей, що притаманні в автомобілі?
Ну, це, як правило, має році, ім'я моделі і номерний знак,
одометр, що, як правило, має деяка кількість миль на цьому,
і може бути, об'єм двигуна.
І, як ви бачите, я змішуючи цілі і символи і парному розряді.
Вони все буде частина цього нового типу даних.
>> Нарешті, останнє, що мені потрібно зробити, не забудьте цю маленьку крапку з комою
в кінці.
Після ми закінчимо, що визначає структуру, ми повинні поставити крапку з комою в кінці.
Це дуже поширена синтаксичний помилка, тому що з функцією,
Наприклад, ви б просто відкритий фігурна дужка, недалеко фігурна дужка.
Ви не ставите крапку з комою в кінець визначення функції.
Це виглядає як функції визначення, але це не так,
і так як крапка з комою є це просто нагадування, що вам
потрібно поставити його там, бо компілятор буде в іншому разі не
знаю, що з ним робити.
Це дуже поширена помилка випадково зробити
коли ви в першу чергу визначення структури.
>> ДОБРЕ.
Таким чином, ми, як правило, визначають наші структури на самому верху наших програм
тому що вони, ймовірно, буде для використання декількох функцій.
Ми не хочемо, щоб визначити Struct всередині функції,
тому що тоді ми можемо only-- Сфера структури справді
існує тільки всередині цієї функції.
Ми, ймовірно, хочете, щоб визначити структуру тому ми можемо використовувати його в декількох функцій,
або, можливо, в декількох файли, які пов'язані один з одним
щоб створити нашу єдину програму.
Іноді також замість визначення структури
на самому верху, де ви кладете фунт включає в себе і ваш фунт визначає,
Наприклад, ви могли б поставити їх у окремих точок ч файли, які ви потім
фунт включити себе.
>> Отже, ми маємо структури, але тепер ми повинні потрапити всередину них.
Як ми потрапити всередину структура доступу
ці суб-змінні, ці змінні що існують всередині структури?
Ну, у нас є те, що називається оператор точка, яка дозволяє нам
доступ до полів структури.
Так, наприклад, скажімо, я оголосив мої дані структури типу десь
у верхній частині моєї програми, або, можливо, в точка ч файл, що я фунт включені.
Якщо я хочу, то для створення нової змінна цього типу даних, я можу сказати
структура автомобіля, моя машина, крапка з комою.
Так само, як я міг би сказати Int х, або ім'я рядка крапка з комою.
>> Тип даних тут структура автомобіля, ім'я змінної моя машина,
і тоді я можу використовувати точкову оператору доступ до різних поля мого автомобіля.
Тому я можу сказати мій автомобіль точка році дорівнює 2011.
Це прекрасно.
Рік, якщо ви пам'ятаєте, був визначений як цілочисельне поле всередині цієї структури автомобіля
Тип даних.
Таким чином, будь змінна даних структура автомобіля тип, наприклад, моїй машині, я можу сказати, мій автомобіль
точка році дорівнює, а потім призначити це деяке ціле число значення +2011.
Мій автомобіль точка пластини дорівнює CS50.
Моя карта точок одометра дорівнює 50505 коми.
Всі ті прекрасно, і це
як ми доступ до Поля структури.
Структури, хоча, не потрібно повинні бути створені в стеку.
Так само, як будь-який інший змінної, ми може динамічно виділяти їх.
Якщо у нас є програми, які можуть породжують безліч структур,
ми не знаємо, скільки ми збираємося потрібно,
то ми повинні динамічно виділити ті структури
а нашій програмі працює.
І тому, якщо ми збираємося отримати доступ до Поля структури в цьому контексті,
нагадаємо, що ми в першу чергу необхідно разименованія покажчик на структуру,
а потім один раз ми разименовать покажчик, то ми можемо отримати доступ до полів.
Якщо у нас є тільки покажчик на структуру,
ми не можемо просто сказати, покажчик точкового поля ім'я і отримати те, що ми шукаємо.
Там це додатковий крок разименованія.
Так що давайте говорити, що замість previous--
так само, як і в попередньому прикладі, замість того, щоб оголосити його
в стеку, структури автомобіля, мій автомобіль, крапка з комою, я говорю структури автомобіля,
зірка, покажчик на структура автомобіль називається мій автомобіль,
дорівнює виділення пам'яті розмір структури автомобіля.
Розмір ми з'ясувати, скільки байти ваш новий тип даних займає.
Вам не обов'язково потрібно тільки використовувати розмір, ширина, Int, або вугілля або будь
з вбудованих типів даних.
Компілятор досить розумний, щоб з'ясувати, як багато байт
потрібні вашої нової структури.
Так що я Танос собі блок пам'яті досить великий, щоб провести структури автомобіля,
і я отримую покажчик назад до цього блоку пам'яті,
і що покажчик присвоюється моїй машині.
>> Тепер, якщо я хочу, щоб доступ поля мого автомобіля,
Я вперше разименовать моїй машині за допомогою оператор разименовиванія, зірка
що ми бачили від покажчиків відео, а потім, після I разименованія,
то я можу використовувати точкову оператору доступ до різних поля мого автомобіля.
Зірка мою машину точка році дорівнює 2 011.
Це матиме ефект ми хочемо в цьому випадку,
Тому що ми динамічно виділено мою машину.
>> Це вид дратує, хоча, чи не так?
Там це 2-х ступінчастий процес в даний час.
Тепер ми повинні dereference-- у нас є зірки оператора,
і у нас є оператор крапка.
І, як ви могли б очікувати, бо Програмісти люблять короткі шляхи
щоб робити речі, є коротше спосіб зробити це.
Існує інший оператор називається стрілка, що робить цей процес набагато простіше.
Шлях стрілка працює він спочатку разименовивает
покажчик на лівому частини оператора,
а потім, після того, разименовиваются покажчик ліворуч,
він звертається полі праворуч.
І так вже у нас було такого роду зірки моя машина розставити всі ці речі,
як там було багато відбувається.
Але те, що ми можемо зробити, це замість this-- моя машина стрілка році дорівнює 2011.
>> Знову ж таки, що тут відбувається?
По-перше, я разименованія мою машину.
Що ще раз, це покажчик тут.
Потім після того, разименовиваются мою машину, я
Потім можна отримати доступ до полів рік, плита, і одометр
як я міг до того, в першу чергу б зірка разименовать моїй машині,
і точка доступу до полі.
Таким чином, ви можете мати структури, ви може мати покажчики на структури,
і у вас є способи доступу поля цих структур,
чи є у вас посилання на їм або самі змінні.
Точка або стрілка, залежно від як був оголошений змінна.
Я Дуг Ллойд, це CS50.