>> [За възпроизвеждане на музика]
>> Дъг LLOYD: OK.
Ние работихме с цели числа, ние сме работили с герои,
сме работили поплавъци, двойни, конци, и bools.
Ние сме изчерпали почти всичко, от [недоловим] видове, които
са били на разположение на всички нас заедно.
Но сега ние искаме да направим нещо повече.
Как да го направим?
Как да създаваме различни типове данни?
Можем да го направите с помощта структури.
Така че структурите ни позволяват да се уеднакви променливи от различни видове
в единна, нова променлива тип, които можем да присвоите свое име тип.
Това е една наистина силна нещо, за да бъде в състояние да направи,
защото сега можем група елементи на различни типове данни
заедно, че има логическа връзка.
Ние сме били в състояние да направи това с масиви сортиране на, нали?
Ние можем да променливи група от същия тип данни
заедно в голяма единица на памет, масив.
>> Но ние не сме били в състояние да се смесват до различни типове данни заедно.
Ние не можем да допуснем, че сдвоите цяло число, и характер, и двоен всички
в едно и също нещо и обадя, че едно цяло.
Но със структури, или често по-нататък structs,
ние всъщност може.
Така че една структура е нещо на подобно супер променлива.
Това е променлива, която съдържа други променливи вътре в него.
Така че тук е един пример за много проста структура.
Това е, което ще изглежда синтаксиса искали да се създаде структура за една кола.
Сега, нека да мине през синтаксиса тук.
Struct, това е най- ключова дума, която показва,
че аз съм създаване на нов тип данни тук.
По-специално, на името на вида на данните е ще бъде структура на автомобила, както ще видим.
Но това е нещо като връх изключване на компилатора, че това
като група от променливи, които ще да се счита за част от същия тип
в минута.
>> Автомобили, само името на структурата.
Отново, типът на данните тук се случва да бъде структура на колата, а не само кола.
Но ако имате different-- ако създадете няколко structs
в една и съща програма, трябва да се разграничение между структура на и структура на.
Така структура на колата, аз може да има структура на студент, например,
в същата програма.
Вътре на фигурните скоби са всички от така наречените областта,
или членове на структурата.
Така че това, което са някои от нещата, които са присъщи на една кола?
Е, това обикновено е една година, е име на модел и регистрационен номер,
одометър, че обикновено има някои брой мили от него,
а може би и размера на двигателя.
И както можете да видите, аз съм смесване числа и символи и двойки.
Всички те започваш да бъде част от този нов тип данни.
>> На последно място, крайният нещо, което трябва да направите, не забравяйте това малко точка и запетая
в края.
След като приключите с определяне на структурата, ние трябва да се сложи точка и запетая в края.
Това е много често срещана синтактичен грешка, защото с функция,
Например, вие просто ще трябва отворена фигурна скоба, близо фигурна скоба.
Вие не сложи точка и запетая в край на дефиниция на функция.
Това изглежда като функция определение, но това не е,
и така точката и запетаята има е само напомняне, че сте
трябва да го сложи там, защото компилаторът друго не ще
знам какво да правя с него.
Това е много често срещана грешка случайно да направи
когато тепърва определяне структури.
>> ДОБРЕ.
Така че ние обикновено се дефинира нашите структури на самия връх на нашите програми
защото те вероятно ще да се използва от множество функции.
Ние не искаме да се определи структура на вътрешната страна на функция,
защото тогава можем да only-- на обхват на структурата наистина
съществува само във вътрешността на тази функция.
Вероятно Ние ще искате да определи структурата за да можем да го използваме в множество функции,
или може би в множествена файлове, които са вързани заедно
да се създаде нашата единствена програма.
Понякога също вместо определяне на структурата на
на самия връх, където си сложиш паунд включва и си паунд определя,
Например, може да ги постави в отделни точки з файлове, до които след това
паунд включи себе си.
>> Така че ние имаме структури, но сега ние трябва да получи вътре в тях.
Как да стигнем до вътрешността на структура за достъп
тези под-променливи, тези променливи които съществуват вътре в структурата?
Е, ние имаме нещо, наречено операторът на точка, която ни позволява
за достъп до полетата на структурата.
Така например, нека да кажем, че съм обявен за моята структура на данните тип някъде
в горната част на програмата си, или може би в точка з файл, който съм паунд включена.
Ако след това искате да създадете нов променлива от този тип данни, мога да кажа,
структура на колата, колата ми, точка и запетая.
Точно като мога да кажа, инт х, или име низ и запетая.
>> Типът данни тук е структура на автомобили, името на променливата е моята кола,
и след това мога да използвам оператора на точка до достъп до различни области на колата ми.
Така че мога да кажа, моята кола дот година се равнява на 2011 година.
Това е съвършено глоба.
Година, ако си спомняте, беше определено като число поле вътре в тази структура на кола
тип данни.
Така че всяка променлива от данните на структура на кола тип, като колата ми, мога да кажа, моята кола
дот година се равнява и след това възложи то някои целочислена стойност, 2011.
Моята кола дот плоча равнява CS50.
Картата ми дот километража се равнява на 50 505 и запетая.
Всички тези са съвършено глоба и това е
как можем достъп на области на структурата.
Конструкции, обаче, не е необходимо да бъде създаден в стека.
Точно както всяка друга променлива, ние динамично да ги разпредели.
Ако имаме една програма, която може да да се генерират много структури,
ние не знаем колко ние ще се нуждаем,
След това ние трябва да динамично преразпредели тези структури
като нашата програма се изпълнява.
И така, ако ще да получите достъп до области на една структура в този контекст,
припомня, че първо трябва да сочен показалеца на структурата,
и след това, след като ние сочен за показалеца, тогава ние можем да получите достъп до полетата.
Ако имаме само един указател към структурата,
ние не можем да кажем просто поле показалеца дот назове и да получите това, което търсите.
Има допълнително етап на dereferencing.
Така че нека да кажем, че вместо previous--
точно като предишния пример, вместо да я декларирате
в стека, структура на автомобила, ми кола, точка и запетая, казвам структура на автомобили,
звезда, указател към структура на кола, наречена колата ми,
се равнява на изчистване размер на структура на колата.
Размер на ние ще разбера колко байтове вашия нов тип данни заема.
Не е задължително само трябва да използвате размер на, ширина, инт, или Чар, или който и да е
на вградените типове данни.
Компилаторът е достатъчно умен, за да разбера колко байта
се изискват от новия си структура.
Така че аз се изчистване единица на паметта достатъчно голям, за провеждане на структура на автомобили,
и аз да получим указател назад към този блок от паметта,
и че показалеца се определя на колата ми.
>> Сега, ако искам да достъп областта на колата ми,
За първи път сочен моята кола, използвайки вземане на адрес оператор, звездата
които сме виждали от указателите видеоклипове, и след това, след като сочен,
След това мога да използвам оператора на точка до достъп до различни области на колата ми.
Star колата ми точка се равнява на 2011 година.
Това би довело искаме в този случай,
защото ние сме динамично разпределена колата ми.
>> Това е вид досадно, все пак, нали?
Има процес на 2-стъпка сега.
Сега ние трябва да dereference-- имаме оператор звезда,
и ние имаме оператор точка.
И както може да се очаква, тъй като Програмистите обичат по-кратки пътища
да прави неща, там е по-кратък начин да направите това.
Има и друг оператор, наречен стрелка, което прави този процес много по-лесно.
Начинът, по който работи е стрелка то първите dereferences
показалеца вляво страна на оператора,
и след това, след като dereferenced показалеца вляво,
тя има достъп до областта на правото.
И така, преди това имахме този вид Стар колата ми точка, за всички тези неща,
като е имало много неща се случват там.
Но това, което вместо да можем да направим е this-- моята кола стрелка година се равнява на 2011 година.
>> Отново, това, което се случва тук?
Първо, аз съм dereferencing колата ми.
Което отново е указател тук.
След това, след като dereferenced колата ми, аз
след това може да получите достъп до полетата година, плоча, и километраж
просто, колкото можех, преди първо да употребяван звезда, за да сочен колата ми,
и точка, за да получите достъп до тази област.
Така че можете да имате структури, вие може да има указатели към структури,
и имате начини за достъп до областите на тези структури,
дали имате указатели към ги или самите променливи.
Dot или стрелка, в зависимост от как променливата е обявена.
Аз съм Дъг Лойд, това е CS50.