>> [Prehrávanie hudby]
>> DOUG LLOYD: OK.
Pracovali sme s celými číslami, sme pracovali s charaktermi,
sme pracovali plaváky, dvojlôžkové, struny, a bools.
Sme vyčerpali skoro všetky z [nepočuteľný] typov, ktoré
boli k dispozícii pre nás všetkých spoločne.
Ale teraz chceme urobiť niečo viac.
Ako to urobíme?
Ako môžeme vytvoriť rôzne dátové typy?
Môžeme tak urobiť pomocou štruktúr.
Takže štruktúry nám umožní zjednotiť premenné rôznych typov
do jedného, ​​nový typ premennej, ktoré môžeme priradiť svoj vlastný názov typu.
To je naozaj silný vec je byť schopný robiť,
pretože môžeme teraz skupina prvky rôznych dátových typov
pri sebe, že majú logické spojenie.
Boli sme schopní to urobiť s poli Druh, že jo?
WE CAN premenné skupiny rovnakého typu dátového
Vo veľkej jednotke pamäte, pole.
>> Ale my sme neboli schopní miešať up rôznymi typmi dát dohromady.
Nemôžeme povedať, spárovať celé číslo, a charakter, a dvojitý všetky
v rovnakej veci a volanie, že jeden celok.
Ale s štruktúry, alebo často označované ako structs,
sme vlastne môže.
Takže štruktúra je druh ako sa super premenné.
Je to premenná, ktorá obsahuje ostatné premenné vnútri nej.
Tak tu je príklad veľmi jednoduchú štruktúru.
To je to, čo syntaxe by vyzerať chcel vytvoriť štruktúru pre auto.
Teraz, poďme prejsť syntaxe tu.
Struct, to je kľúčové slovo, ktoré označuje
že som vytvoriť nový dátový typ sem.
Najmä, názov dátového typu je Bude struct auto, ako uvidíme.
Ale to je druh hrotu off na kompilátora, že tento
ako skupina premenných, ktoré sa deje , Ktoré majú byť považované za súčasť rovnakého druhu
za minútu.
>> Automobily, iba názov štruktúry.
Opäť platí, že dátový typ tu sa deje byť struct auto, nie len auto.
Ale ak máte different-- ak vytvoríte viac structs
v rovnakom programe, je potrebné rozlišovať medzi struct a Struct.
Takže struct auto, mohol by som mať tiež struct študent, napríklad,
v rovnakom programe.
Vnútri zložených zátvoriek sú všetky takzvaných polí,
alebo členovia štruktúry.
Takže aké sú niektoré z vecí, ktoré sú vlastné v aute?
No, to zvyčajne má rok, ktorý názov modelu, a ŠPZ,
počítadlo kilometrov, ktorý má obvykle niektoré počet míľ na to,
a možno veľkostí motora.
A ako vidíte, som premiešaní celé čísla a znaky a dvojlôžkové.
Všetci sa bude časť tohto nového dátového typu.
>> Napokon, posledná vec, ktorú musím urobiť, nezabudnite túto malú bodkočiarka
nakoniec.
Potom, čo sme dokončenie definujúce štruktúru, musíme dať bodkočiarka na konci.
Je to veľmi časté syntaxe chyba, pretože s funkciou,
Napríklad, mali by ste jednoducho open zložená zátvorka, v jeho blízkosti je zložená zátvorka.
Tie nedávajte bodkočiarka na koniec definície funkcie.
To vyzerá ako funkcia definície, ale nie je to,
a tak tam bodkočiarka je len pripomienkou, že vás
je potrebné, aby to tam dal, pretože kompilátor inak
Viete, čo s tým robiť.
Je to veľmi častá chyba omylom, aby
keď ste prvýkrát definovanie štruktúry.
>> OK.
Tak sme sa zvyčajne definovať naše štruktúry na samom vrchole našich programov
pretože sú pravdepodobne bude , Ktoré majú byť používané vo viacerých funkciami.
Nechceme, aby definovať struct vnútri funkcie,
pretože potom môžeme only-- Rozsah štruktúry skutočne
existuje iba vo vnútri tejto funkcie.
Radi by sme pravdepodobne chcieť definovať štruktúru takže ju môžeme použiť v rôznych funkciách,
alebo snáď v násobku Súbory, ktoré sú zviazané
aby sme vytvorili jeden program.
Niekedy tiež namiesto definovanie štruktúru
na samom vrchole, kde si dať libra zahŕňa aj vaše libra definuje,
Napríklad, môžete dať ich do samostatné dot h súbory, ktoré vás potom
libra aj vy.
>> Takže máme štruktúru, ale teraz musíme sa dostať dovnútra nich.
Ako sa dostaneme dovnútra štruktúra pre prístup
tieto čiastkové premenné, tie premenné že existujú vnútri konštrukcie?
No, my máme niečo ako operátor bodka, ktorá nám umožňuje
pre prístup na oblasti štruktúry.
Tak napríklad, povedzme, že som vyhlásil, moja dátového typu štruktúra niekde
v hornej časti môjho programu, alebo možno v bodka h súbor, ktorý som libru hotela.
Ak by som potom chcete vytvoriť nový premenná tohto typu dát, môžem povedať,
struct auto, moje auto, bodkočiarka.
Rovnako ako by som mohol povedať, int x, alebo názov reťazca bodkočiarku.
>> Dátový typ je tu struct auto, meno premennej je moje auto,
a potom môžem použiť operátor bodky na prístup k rôznym poľa mojom aute.
Takže môžem povedať svoje auto dot rok sa rovná 2011.
To je úplne v poriadku.
Rok, ak si spomínate, bola definovaná ako integer pole vo vnútri tohto struct autá
dátový typ.
Takže akákoľvek premenná dáta na struct autá typu, ako je moje auto, môžem povedať svoje auto
dot rok rovná a priraďte to nejaký celočíselná hodnota 2011.
Moje auto dot doska rovná CS50.
Moja karta bodka stav tachometra sa rovná 50505 bodkočiarka.
Všetky z nich sú úplne v poriadku a to je
ako pristupovať k poľa štruktúry.
Štruktúry, ale nepotrebujú byť vytvorený v zásobníku.
Rovnako ako akékoľvek iné premenné, my môže dynamicky prideľovať je.
Ak máme program, ktorý by mohol bude generovať mnoho stavieb,
nevieme, koľko budeme potrebovať,
potom musíme dynamicky alokovať tie štruktúry
ako náš program beží.
A tak, keď budeme pre prístup k poľa štruktúry v tejto súvislosti,
Pripomeňme si, že musíme najprv dereferencia ukazovateľ na štruktúru,
a potom ešte raz my dereferencia ukazovateľ, potom môžeme pristupovať poľa.
Ak budeme mať len ukazovateľ na štruktúru,
nemôžeme len povedať ukazovateľ dot poľa pomenovať a dostať to, čo hľadáme.
Je tu ďalší krok dereferencing.
Takže povedzme, že namiesto previous--
rovnako ako v predchádzajúcom príklade, namiesto toho jeho vyhlásenia
na zásobníku, struct auto, my auto, bodkočiarka, hovorím struct auto,
hviezda, ukazovateľ na struct auto volal moje auto,
sa rovná malloc veľkosť struct vozidla.
Veľkosť budeme zistiť, koľko bajtov váš nový dátový typ zaberá.
Nemusíte nutne len je potrebné použiť veľkosť, šírka, int alebo char, alebo na ktorúkoľvek
z vstavaných dátových typov.
Kompilátor je dosť šikovný, prísť na to, koľko bajtov
sú požadované vašej novej štruktúry.
Tak som malloc sám jednotku pamäte dostatočne veľké, aby držať struct auto,
a ja si ukazovateľ späť k tomuto bloku pamäti,
a že ukazovateľ je priradený k autu.
>> A teraz, keď chcem prístup pole môjho auta,
Prvý dereferencia mojom aute som sa s použitím operátor dereferencia, hviezda
že sme videli z ukazovateľov videá, a potom potom, čo som dereferencia,
potom môžem použiť operátor bodky na prístup k rôznym poľa mojom aute.
Hviezda môjho auta bodka rok sa rovná 2011.
To by malo za následok chceme v tomto prípade,
preto, že sme dynamicky pridelené moje auto.
>> Je to trochu nepríjemné, že?
Tam je proces, teraz 2-krok.
Teraz musíme dereference-- máme operátor hviezdy,
a máme operátora bodka.
A ako sa dalo očakávať, pretože Programátori C milujú kratšie cesty
robiť veci, tam je kratšie spôsob, ako to urobiť.
Tam je ďalší operátor s názvom šípka, čo robí tento proces oveľa jednoduchšie.
Spôsob, akým funguje, je šípka sa prvýkrát dereferences
ukazovateľ na ľavej strane strana prevádzkovateľa,
a potom, po dereferenced ukazovateľ na ľavej strane,
pristupuje poľa na pravej strane.
A tak skôr sme mali tento druh Hviezdnych moje auto dot všetky tie veci,
ako by tam bolo veľa tam deje.
Ale to, čo môžeme urobiť, je namiesto toho tohle-- moje auto šípka rok sa rovná 2011.
>> Opäť platí, že to, čo sa tu deje?
Po prvé, ja som dereferencing moje auto.
Čo je opäť, je ukazovateľ sem.
Potom, potom, čo dereferenced moje auto, ja
Následne sa sprístupnia polia rok, doska, a počítadlo kilometrov
rovnako ako som mohol pred tým, než prvý, Použité hviezda dereferencia mojom aute,
a bodku prístup na nosidlách.
Takže môžete mať štruktúru, budete môže mať ukazovatele na štruktúry,
a máte spôsoby, ako prístup pole týkajúce sa týchto štruktúr,
či máte odkazy na je alebo samotné premenné.
Dot alebo šípky, v závislosti na ako sa premenná bola vyhlásená.
Som Doug Lloyd, je to CS50.