>> [Музички]
>> Даг LLOYD: Во ред.
Ние работевме со цели броеви, ние сме работеле со ликовите,
ние сме работеле лебди, двојки, стрингови, и bools.
Ние сме исцрпени доста ги сите на [Беззвучен] видови кои
да се достапни за сите нас, заедно.
Но сега ние сакаме да се направи нешто повеќе.
Како го правиме тоа?
Како да се креираат различни типови на податоци?
Ние може да го стори тоа со помош на структури.
Структури, така ни овозможи да се обедини променливи на различни видови
во една, нова променлива тип, кои можеме да му ја додели свое име тип.
Ова е навистина силна нешто што треба да биде во можност да се направи,
бидејќи ние сега да се група елементи на различни типови на податоци
заедно, кои имаат логична врска.
Ние сме биле во можност да го стори тоа со низи вид на, нели?
Ние можеме да се променливи група од ист вид на податоци
заедно во голем единица меморија, низа.
>> Но, ние не сме биле во можност да се меша до различни типови на податоци заедно.
Не можеме да се, да речеме, спарите цел број, и еден лик, и двојно сите
во истото и јавам дека една единица.
Но, со структури, или често се нарекува structs,
ние всушност може.
Така, една структура е вид на како супер променлива.
Тоа е променлива, која содржи други променливи во него.
Па еве еден пример на многу едноставна структура.
Тоа е она што ќе изгледа синтаксата сакал да се создаде структура за автомобил.
Сега, ајде да се оди преку синтакса тука.
Struct, тоа е клучен збор кој означува
дека јас сум создавање на нов тип на податоци тука.
Особено, на име на типот на податоци е ќе биде struct автомобилот, како што ќе видиме.
Но, ова е еден вид на врв исклучување на компајлерот дека овој
како група на променливи кои се случува што треба да се смета за дел од ист вид
во една минута.
>> Автомобили, само името на структурата.
Повторно, типот податоци тука се случува да биде struct автомобил, а не само автомобил.
Но, ако имате different-- Ако креирате повеќе structs
во истата програма, ќе треба да разлика помеѓу struct и struct.
Па struct автомобил, јас, исто така, би можеле да имаат struct студент, на пример,
во истата програма.
Внатрешноста на големите загради се сите на т.н. полиња,
или членови на структурата.
Значи она што се некои од работите кои се својствени во автомобил?
Па, тоа обично има една година, име на модел, и регистарска табличка,
со километража која обично има некои бројот на милји на неа,
а можеби и големината на моторот.
И како што можете да видите, јас сум мешање цели броеви и карактери и двојки.
Сите тие се случува да се биде дел на овој нов тип на податок.
>> И на крај, конечната нешто што треба да направите, бидете сигурни дека оваа мала запирка
на крај.
Откако ќе завршиме со дефинирање на структурата, ние треба да се стави запирка на крајот.
Тоа е многу честа синтаксички грешка, бидејќи со функција,
На пример, можете само ќе треба отворен кадрава голема заграда, во близина кадрава голема заграда.
Не се стави запирка во крајот на дефиницијата функција.
Ова личи на функцијата дефиниција, но тоа не е,
и така запирка таму е само потсетување дека
треба да го стави таму, бидејќи компајлер во спротивно не ќе
знае што да прави со него.
Тоа е многу честа грешка случајно да
кога си прв на дефинирање структури.
>> ВО РЕД.
Па ние обично се дефинираат нашите структури во самиот врв на нашите програми
затоа што тие се веројатно нема што треба да се користи од страна на повеќе функции.
Ние не сакаме да се дефинира struct внатрешноста на некоја функција,
бидејќи тогаш можеме да only-- на обемот на структурата навистина
постои само во внатрешноста на таа функција.
Веројатно ние би сакале да се дефинира структурата за да можеме да го користат во повеќе функции,
или можеби во повеќе датотеки, кои се врзани заедно
да се создаде нашата единствена програма.
Понекогаш, исто така, наместо за дефинирање на структурата
во самиот врв, каде што ќе ги ставаш фунтата вклучува и вашиот фунта дефинира,
на пример, може да ги стави во посебна точка ж датотеки, кои потоа
фунтата вклучуваат себе.
>> Па ние имаме структури, но сега ние треба да се добие во внатрешноста на нив.
Како да се добие во внатрешноста на структура за пристап
оние кои се под-променливи, овие променливи кои постојат во внатрешноста на структура?
Па, ние имаме нешто што се нарекува операторот точка, која ни овозможува
пристап до областа на структурата.
Така на пример, да речеме дека сум го прогласи моите податоци структура тип некаде
на врвот од мојата програма, или можеби во точка ж датотека што сум фунта вклучени.
Ако јас потоа ќе сакате да се создаде нова променливата на тој тип на податоци, можам да кажам,
struct автомобил, мојот автомобил, точка-запирка.
Исто како што можев да кажам int х, или името на стрингот запирка.
>> Типот податоци тука е struct автомобил, името на променливата е мојот автомобил,
и тогаш ќе можат да го користат операторот точка да пристап до различни области на мојот автомобил.
Па можам да кажам мојот автомобил дот година изнесува 2011.
Тоа е совршено добро.
Година, ако се сеќавате, е дефинирана како цел број поле во внатрешноста на оваа struct автомобил
тип на податок.
Па секоја променлива на податоци на struct автомобил тип, како што мојот автомобил, можам да кажам дека мојот автомобил
дот година изнесува, а потоа му ја додели тоа некои целобројна вредност, 2011.
Мојот автомобил точка плоча еднаква CS50.
Мојата картичка точка километража еднакво на 50.505 запирка.
Сите оние кои се совршено добро и тоа е
како ние пристап на полиња на структурата.
Структури, сепак, не треба да да бидат создадени на магацинот.
Исто како и сите други променливи, ние динамички да ги распредели.
Ако имаме програма која би се генерира многу структури,
не знаеме колку ние се случува да треба,
тогаш ние треба да се динамички распредели тие структури
како нашата програма се извршува.
И така, ако ние се случува да пристапите до полиња на една структура во тој контекст,
потсетиме дека ние прво треба да се dereference покажувачот на структурата,
а потоа, откако ние dereference на покажувач, тогаш можеме да пристапите на полиња.
Ако имаме само покажувач на структура,
ние не може само да се каже поле покажувачот точка именува и да добијат она што го барате.
Тука е дополнителен чекор на dereferencing.
Значи, да се каже дека наместо previous--
исто како и во претходниот пример, наместо да го прогласи
на магацинот, struct автомобил, мојот автомобил, запирка, велам struct автомобил,
ѕвезда, покажувач кон struct автомобил наречен мојот автомобил,
Примерок еднаква на големината на struct автомобил.
Големината ќе дознаам колку бајти вашиот нов тип на податоци зазема.
Вие не секогаш треба да се користи само големината, ширина, цел број, или да се усвити, или било кој
на вграден типови на податоци.
Компајлерот е доволно паметни за да дознаам колку бајти
се бара од страна на вашиот нов структура.
Значи јас Примерок единица на меморијата доволно голема за да се одржи struct автомобил,
и можам да добијам назад покажувачот за тој блок од меморија,
и дека покажувачот е доделен на мојот автомобил.
>> Сега, ако сакам да пристап областа на мојот автомобил,
Јас прв пат dereference мојот автомобил користење на dereference оператор, ѕвезда
дека ние сме виделе од покажувачи видео клипови, а потоа, откако јас dereference,
тогаш може да се користи операторот точка да пристап до различни области на мојот автомобил.
Ѕвезда мојот автомобил точка година изнесува 2011.
Кои ќе имаат ефект ние сакаме во овој случај,
бидејќи ние сме динамички распределени мојот автомобил.
>> Тоа е вид на досадни, иако, нели?
Има процесот на 2-чекор сега.
Сега ние треба да dereference-- имаме оператор ѕвезда,
и ние имаме оператор точка.
И како што може да се очекува, бидејќи С програмери сакаат пократки патишта
да се прават работите, постои пократок начин да го направите тоа.
Постои уште еден оператор се нарекува со стрелки, што го прави овој процес многу полесно.
Начинот на кој функционира е на тастатурата таа прво dereferences
покажувачот на левата страна на операторот,
а потоа, откако dereferenced покажувачот на левата страна,
ја пристапува од областа на правото.
И така претходно имавме овој вид на Star мојот автомобил dot сите овие работи,
како што имаше многу се случува таму.
Но, она што, наместо да можеме да направиме е this-- мојот автомобил стрелката година изнесува 2011.
>> Повторно, она што се случува овде?
Прво, јас dereferencing мојот автомобил.
Која, повторно, е покажувачот тука.
Потоа, откако ќе го dereferenced мојот автомобил, јас
тогаш може да пристапите на полиња година, чинија, и километражата
јас како што може да пред тоа има прв користени ѕвезда да dereference мојот автомобил,
и точка за пристап на оваа област.
Па можете да имате структури, ќе може да има покажувачи за структури,
и имаш начини за пристап областа на овие структури,
дали имате покажувачи нив или на самите променливи.
Дот или стрелките, во зависност од колку променливата беше прогласена.
Јас сум Даг Лојд, ова е CS50.