>> [Zenelejátszási]
>> DOUG LLOYD: OK.
Dolgoztunk egész számok, dolgoztunk a karakterek,
dolgoztunk úszók, páros, vonósok, és bools.
Mi már kimerítette elég sok minden Az [hallhatatlan] típusok
már elérhető számunkra végig.
De most akarunk tenni valamit.
Hogyan csináljuk ezt?
Hogyan teremtjük meg a különböző adattípusok?
Mi lehet ezt használja struktúrák.
Tehát szerkezet lehetővé teszi számunkra, hogy egyesítse a különböző típusú változókat
egyetlen, új típusú változót, amelyhez hozzá lehet rendelni saját típus neve.
Ez egy nagyon erős dolog, hogy képes megtenni,
mert most már csoportban elemei különböző adattípusok
együtt, hogy van egy logikai kapcsolat.
Képesek voltunk, hogy ezt tömbök fajta, ugye?
Mi lehet csoport változók az azonos típusú adatok
együtt egy nagy egység memória, egy tömbben.
>> De nem volt képes mix Különböző adattípusok össze.
Nem tudjuk, mondjuk, párosítani egész szám, és egy karaktert, és egy dupla összes
ugyanabban a dolog, és hívni, hogy egy egységet alkot.
De szerkezetek, vagy Gyakran nevezik struktúrákat,
mi valójában tud.
Tehát egy olyan struktúra egyfajta mint egy szuper változó.
Ez egy változó, amely tartalmazza Más változók belsejébe.
Tehát itt egy példa egy nagyon egyszerű szerkezet.
Ez az, amit a szintaxis nézne Szeretnénk létrehozni egy olyan struktúra egy autó.
Most, menjünk át a szintaxist itt.
Struct, ez a kulcsszó, ami azt jelzi,
hogy hozok létre egy új adattípust itt.
Különösen, az adattípus neve lesz struct autó, mint látni fogjuk.
De ez a fajta tip ki a fordító, hogy ez a
mint egy csoport változók megy részének kell tekinteni az azonos típusú
Egy perc.
>> Autók, csak a neve a szerkezet.
Ismét az adatokat írja ide megy hogy struct autó, nem csak autós.
De ha van different-- Ha több olyan struktúrákat
ugyanabban a programban, meg kell megkülönböztetni struct és struktúra.
Szóval struct autó, azt is lehet struct diák, például,
ugyanabban a programban.
Belül a kapcsos zárójelek az összes úgynevezett mezők,
vagy tagok a szerkezet.
Tehát mi van néhány dolog, melyek velejárói egy autóban?
Nos, ez általában egy évben, a modell neve, valamint a rendszám,
egy skála, ami általában Egyes számú mérföld rajta,
és talán egy motor méretét.
És amint látod, én keverése egészek és a karakterek és a páros.
Mind lesz része ennek új adatok típusát.
>> Végül, az utolsó dolog, amit tennie kell, ne felejtsük el, ez a kis pontosvessző
a végén.
Miután befejeztük szerkezetét meghatározó, meg kell tenni a pontosvessző végén.
Ez egy nagyon gyakori szintaktikai hiba, mert egy olyan funkciója,
Például, akkor csak meg nyitott zárójel, kapcsos zárójel bezár.
Nem tesz egy pontosvesszőt vége függvénydefiníciójában.
Ez úgy néz ki, mint egy függvény definíció, de ez nem,
és így a pontosvessző van csak egy emlékeztető, hogy
kell tenni, hogy ott, mert a fordító egyébként nem
hogy mit kell csinálni vele.
Ez egy nagyon gyakori hiba véletlenül teszik
amikor először meghatározó struktúrák.
>> OKÉ.
Így általában meghatározza a struktúrák legtetején a programok
mert valószínűleg fog által használt több funkciót.
Mi nem szeretnénk definiálni struct egy függvényen belül,
mert akkor lehet only-- a körét a szerkezet valóban
csak azért létezik, aztán az funkciót.
Akkor valószínűleg szeretné állítani szerkezete így tudjuk használni a többfunkciós,
vagy talán több fájlok össze legyen kötve
hogy hozzon létre a különálló program.
Néha is helyett A szerkezetét meghatározó
legtetején, ahová a font magában foglalja, és a font meghatározza,
Például, lehet, hogy tedd Külön pont h fájlokat, amelyet aztán
font közé magát.
>> Tehát van struktúrákat, de most meg kell, hogy bennük.
Hogyan jutunk belsejét egy olyan struktúra, hogy hozzáférést
azok al-változók, azokat a változókat hogy létezik a szerkezeten belül?
Nos, van valami neve A dot-üzemeltető, amely lehetővé teszi számunkra,
elérni a mezők a szerkezet.
Így például, mondjuk én nyilvánította én struktúra adatok írja valahol
a tetején a programom, vagy talán a egy pont h fájlt, hogy én már font tartalmazza.
Ha ezután szeretne létrehozni egy új változó ugyanilyen típusra, azt mondhatom,
struct autó, az autóm, pontosvessző.
Csakúgy, mint Mondhatnám int x, vagy string name pontosvessző.
>> Az adatok típusa itt struct autó, A változó nevét az autóm,
és akkor én is használni a pont üzemeltető hozzáférhet a különböző területeken a kocsimat.
Tehát azt mondhatom, az autóm dot év megegyezik 2011.
Ez tökéletesen megfelel.
Év, ha felidézni, definiáltuk egész területen belül ez a struktúra autó
Adattípus.
Tehát bármely változó a struct autó adatok típusát, mint például az autóm, azt mondhatom, az autóm
dot év megegyezik majd rendelni ez valamilyen egész szám, 2011.
Az autóm dot lemez megegyezik CS50.
Saját kártya dot kilométeróra megegyezik 50505 pontosvessző.
Az összes ilyen van tökéletesen, és ez az,
hogyan férünk hozzá az mezők a szerkezet.
Struktúrák, bár nem kell meg kell teremteni a verem.
Csakúgy, mint bármely más változó, mi dinamikusan osztja őket.
Ha van egy program, ami talán generáló sok struktúra,
nem tudjuk, hogy hány fogunk szüksége,
akkor meg kell dinamikusan osztja ezeket a struktúrákat
mint a mi program fut.
És így ha fogunk elérni a mező egy szerkezet, amely összefüggésben,
Emlékezzünk vissza, hogy először meg kell követéssel A mutatót a szerkezet,
majd ha egyszer követéssel, a mutatót, akkor érheti el a földeken.
Ha csak egy mutatót a szerkezet,
nem tudjuk csak mondani mutató dot terén név és azt kapja, amit keresünk.
Ott a további lépést, a dereferencing.
Tehát mondjuk, hogy helyett a previous--
csakúgy, mint az előző példában, ahelyett nyilvánította
a veremben, struct autó, én autó, pontosvessző, mondom struct autó,
csillag, egy mutató a struct autó nevezett autóm,
egyenlő malloc mérete struct autó.
Mérete majd kitaláljuk, hogy hány byte az új adatok típusát veszi fel.
Nem feltétlenül csak akkor kell használni mérete, szélesség, int, vagy char, vagy bármely
A beépített adattípusok.
A fordító elég okos ahhoz, kitalálni, hogy hány bájt
által előírt, az új struktúra.
Szóval malloc magamnak egy egységnyi memória belefér egy struct autó,
és kapok egy mutatót vissza E tömb memória,
és hogy a mutató van rendelve az autóm.
>> Most, ha azt akarom, hogy hozzáférést A mezők autóm,
Én először hivatkozás feloldási autóm segítségével A hivatkozás feloldási üzemeltető, csillag
Láttuk a mutatók videókat, majd miután követéssel,
akkor tudom használni a pont üzemeltető hozzáférhet a különböző területeken a kocsimat.
Csillag autóm dot évben egyenlő 2011.
Ez lenne a hatása, azt akarjuk, ebben az esetben,
mert már dinamikusan elkülönített autóm.
>> Ez a fajta idegesítő, ugye?
Van egy 2 lépésből áll most.
Most meg kell dereference-- van egy csillag üzemeltető,
és van egy pont operátor.
És ahogy az várható, mert C programozók szeretik rövidebb utak
a dolgokat, van egy rövidebb módja ennek.
Van egy másik üzemben úgynevezett nyíl, ami miatt ez a folyamat sokkal könnyebb.
Az út nyíl működik először dereferences
A mutató a bal oldalán az üzemeltető,
majd, miután másolunk A mutató a bal oldalon,
hozzáfér a területen a jobb oldalon.
És így korábban volt ilyen Star autóm pont ezekkel a dolgokkal,
mintha egy csomó folyik ott.
De mit tudunk, hanem tennie this-- autóm nyíl évben egyenlő 2011.
>> Ismét, mi történik itt?
Először is, én dereferencing autóm.
Melyik megint egy mutató itt.
Ezután, miután másolunk az autóm, én
ezután hozzáférhetnek a földeken év, lemez, és a kilométer-számláló
ahogy csak tudtam, mielőtt először Használt csillag hivatkozás feloldási autóm,
és pont eléréséhez területén.
Így van struktúrákat, akkor lehet mutatókat struktúrák,
és van módja, hogy hozzáférést A mezők ezeket a struktúrákat,
hogy van-e mutatókat őket, vagy a változók magukat.
Dot vagy a nyíl, attól függően, hogy a változó nyilvánították.
Én Doug Lloyd, ez CS50.