>> [Přehrávání hudby]
>> DOUG LLOYD: OK.
Pracovali jsme s celými čísly, jsme pracovali s charaktery,
jsme pracovali plováky, dvoulůžkové, struny, a bools.
Jsme vyčerpali skoro všechny z [neslyšitelný] typů, které
byly k dispozici pro nás všechny společně.
Ale teď chceme udělat něco víc.
Jak to uděláme?
Jak můžeme vytvořit různé datové typy?
Můžeme tak učinit pomocí struktur.
Takže struktury nám umožní sjednotit proměnné různých typů
do jednoho, nový typ proměnné, které můžeme přiřadit svůj vlastní název typu.
To je opravdu silný věc je být schopen dělat,
protože můžeme nyní skupina prvky různých datových typů
u sebe, že mají logické spojení.
Byli jsme schopni to udělat s poli Druh, že jo?
WE CAN proměnné skupiny stejného typu datového
Ve velké jednotce paměti, pole.
>> Ale my jsme nebyli schopni míchat up různými typy dat dohromady.
Nemůžeme říci, spárovat celé číslo, a charakter, a dvojitý všechny
ve stejné věci a volání, že jeden celek.
Ale s struktury, nebo často označovány jako structs,
jsme vlastně může.
Takže struktura je druh jako se super proměnné.
Je to proměnná, která obsahuje ostatní proměnné uvnitř ní.
Tak tady je příklad velmi jednoduchou strukturu.
To je to, co syntaxe by vypadat chtěl vytvořit strukturu pro auto.
Nyní, pojďme projít syntaxe zde.
Struct, to je klíčové slovo, které označuje
že jsem vytvořit nový datový typ sem.
Zejména, název datového typu je Bude struct auto, jak uvidíme.
Ale to je druh hrotu off na kompilátoru, že tento
jako skupina proměnných, které se děje , které mají být považovány za součást stejného druhu
v minutě.
>> Automobily, pouze název struktury.
Opět platí, že datový typ tady se děje být struct auto, ne jen auto.
Ale pokud máte different-- pokud vytvoříte více structs
ve stejném programu, je třeba rozlišovat mezi struct a Struct.
Takže struct auto, mohl bych mít také struct student, například,
ve stejném programu.
Uvnitř složených závorek jsou všechny takzvaných polí,
nebo členové struktury.
Takže jaké jsou některé z věcí, které jsou vlastní v autě?
No, to obvykle má rok, který název modelu, a SPZ,
počítadlo kilometrů, který má obvykle některé počet mil na to,
a možná velikostí motoru.
A jak vidíte, jsem promíchání celá čísla a znaky a dvoulůžkové.
Všichni se bude část tohoto nového datového typu.
>> Konečně, poslední věc, kterou musím udělat, nezapomeňte tuto malou středník
na konci.
Poté, co jsme dokončení definující strukturu, musíme dát středník na konci.
Je to velmi časté syntaktický chyba, protože s funkcí,
Například, měli byste prostě open složená závorka, v blízkosti je složená závorka.
Ty nedávejte středník na konec definice funkce.
To vypadá jako funkce definice, ale není to,
a tak tam středník je jen připomínkou, že vás
je třeba, aby to tam dal, protože kompilátor jinak
Víte, co s tím dělat.
Je to velmi častá chyba omylem, aby
když jste poprvé definování struktury.
>> DOBŘE.
Tak jsme se obvykle definovat naše struktury na samém vrcholu našich programů
protože jsou pravděpodobně bude , které mají být používány ve více funkcemi.
Nechceme, aby definovat struct uvnitř funkce,
protože pak můžeme only-- Rozsah struktury skutečně
existuje pouze uvnitř této funkce.
Rádi bychom pravděpodobně chtít definovat strukturu takže ji můžeme použít v různých funkcích,
nebo snad v násobku Soubory, které jsou svázané
abychom vytvořili jeden program.
Někdy také namísto definování strukturu
na samém vrcholu, kde si dát libra zahrnuje i vaše libra definuje,
Například, můžete dát je do samostatné dot h soubory, které vás pak
libra i vy.
>> Takže máme strukturu, ale teď musíme se dostat dovnitř nich.
Jak se dostaneme dovnitř struktura pro přístup
tyto dílčí proměnné, ty proměnné že existují uvnitř konstrukce?
No, my máme něco jako operátor tečka, která nám umožňuje
pro přístup na oblasti struktury.
Tak například, řekněme, že jsem prohlásil, moje datového typu struktura někde
v horní části mého programu, nebo možná v tečka h soubor, který jsem libru hotelu.
Pokud bych pak chcete vytvořit nový proměnná tohoto typu dat, mohu říci,
struct auto, moje auto, středník.
Stejně jako bych mohl říct, int x, nebo název řetězce středník.
>> Datový typ je zde struct auto, jméno proměnné je moje auto,
a pak mohu použít operátor tečky na přístup k různým pole mém autě.
Takže můžu říct své auto dot rok se rovná 2011.
To je naprosto v pořádku.
Rok, pokud si vzpomínáte, byla definována jako integer pole uvnitř tohoto struct auta
datový typ.
Takže jakákoliv proměnná data na struct auta typu, jako je moje auto, mohu říci své auto
dot rok rovná a přiřaďte to nějaký celočíselná hodnota 2011.
Moje auto dot deska rovná CS50.
Moje karta tečka stav tachometru se rovná 50505 středník.
Všechny z nich jsou naprosto v pořádku a to je
jak přistupovat k pole struktury.
Struktury, ale nepotřebují být vytvořen v zásobníku.
Stejně jako jakékoliv jiné proměnné, my může dynamicky přidělovat je.
Máme-li program, který by mohl bude generovat mnoho staveb,
nevíme, kolik budeme potřebovat,
pak musíme dynamicky alokovat ty struktury
jako náš program běží.
A tak, když budeme pro přístup k pole struktury v této souvislosti,
Připomeňme si, že musíme nejprve dereference ukazatel na strukturu,
a pak ještě jednou my dereference ukazatel, pak můžeme přistupovat pole.
Pokud budeme mít pouze ukazatel na strukturu,
nemůžeme jen říci ukazatel dot pole pojmenovat a dostat to, co hledáme.
Je tu další krok dereferencing.
Takže řekněme, že namísto previous--
stejně jako v předchozím příkladu, místo toho jeho vyhlášení
na zásobníku, struct auto, my auto, středník, říkám struct auto,
hvězda, ukazatel na struct auto volal moje auto,
se rovná malloc velikost struct vozu.
Velikost budeme zjistit, kolik bajtů váš nový datový typ zabírá.
Nemusíte nutně jen je třeba použít velikost, šířka, int nebo char, nebo na kteroukoliv
z vestavěných datových typů.
Kompilátor je dost chytrý, přijít na to, kolik bajtů
jsou požadovány vaší nové struktury.
Tak jsem malloc sám jednotku paměti dostatečně velké, aby držet struct auto,
a já si ukazatel zpět k tomuto bloku paměti,
a že ukazatel je přiřazen k autu.
>> A teď, když chci přístup pole mého auta,
První dereference mém autě jsem se s použitím operátor dereference, hvězda
že jsme viděli z ukazatelů videa, a pak poté, co jsem dereference,
pak mohu použít operátor tečky na přístup k různým pole mém autě.
Hvězda mého auta tečka rok se rovná 2011.
To by mělo za následek chceme v tomto případě,
proto, že jsme dynamicky přiděleno moje auto.
>> Je to trochu nepříjemné, že?
Tam je proces, nyní 2-krok.
Nyní musíme dereference-- máme operátor hvězdy,
a máme operátoru tečka.
A jak se dalo očekávat, protože Programátoři C milují kratší cesty
dělat věci, tam je kratší způsob, jak to udělat.
Tam je další operátor s názvem šipka, což činí tento proces mnohem jednodušší.
Způsob, jakým funguje, je šipka se poprvé dereferences
ukazatel na levé straně strana provozovatele,
a poté, po dereferenced ukazatel na levé straně,
přistupuje pole na pravé straně.
A tak dříve jsme měli tento druh Hvězdných moje auto dot všechny ty věci,
jako by tam bylo hodně tam děje.
Ale to, co můžeme udělat, je místo toho tohle-- moje auto šipka rok se rovná 2011.
>> Opět platí, že to, co se tady děje?
Za prvé, já jsem dereferencing moje auto.
Což je opět, je ukazatel sem.
Pak, poté, co dereferenced moje auto, já
Poté budou přístupné i pole rok, deska, a počítadlo kilometrů
stejně jako jsem mohl před tím, než první, Použité hvězda dereference mém autě,
a tečku přístup na nosítkách.
Takže můžete mít strukturu, budete může mít ukazatele na struktury,
a máte způsoby, jak přístup pole týkající se těchto struktur,
zda máte odkazy na je nebo samotné proměnné.
Dot nebo šipky, v závislosti na jak se proměnná byla vyhlášena.
Jsem Doug Lloyd, je to CS50.