>> [Glazbom]
>> Doug LLOYD: U redu.
Mi smo radili s integers, smo radili s likovima,
smo radili splavi, parovima, žice, i bools.
Mi smo iscrpili gotovo sve od [nečujan] tipova koji
bili dostupni za sve nas zajedno.
Ali sada želimo napraviti nešto više.
Kako ćemo to učiniti?
Kako stvoriti različite vrste podataka?
Možemo učiniti pomoću strukture.
Dakle, struktura dopušta nam da se ujedine varijable različitih vrsta
u jednu, novu varijablu tipa, koje možemo dodijeliti svoje ime tipa.
Ovo je stvarno jaka stvar biti u mogućnosti to učiniti,
jer sada možemo skupina elementi različitih tipova podataka
zajedno da imaju logičku vezu.
Mi smo bili u mogućnosti to učiniti s polja vrsta, zar ne?
Možemo varijable grupe istog tipa podataka
zajedno u velike jedinice memorije, niz.
>> Ali nismo bili u mogućnosti da se miješaju up različite vrste podataka zajedno.
Ne možemo, recimo, uparivanje cijeli broj, i lik i dvostruki sve
u istu stvar, a nazvati jednu cjelinu.
Ali strukture ili često nazivaju konstrukt,
zapravo možemo.
Dakle, struktura je vrsta poput super varijable.
To je varijabla koja sadrži ostale varijable unutar nje.
Dakle ovdje je primjer vrlo jednostavna struktura.
To je ono što je sintaksa će izgledati željeli stvoriti strukturu za auto.
Sada, idemo kroz sintaksu ovdje.
Struct, to je ključna riječ koja označava
da sam stvara novi tip podataka ovdje.
Konkretno, naziv tip podataka jest će biti struct automobila, kao što ćemo vidjeti.
No, to je vrsta vrh off kompilator da je ovaj
kao skupina varijabli koje se događa da se smatra da su dio iste vrste
u minuti.
>> Automobili, samo naziv strukture.
Opet, vrsta ovdje podaci će biti struct auto, a ne samo auto.
Ali ako imate different-- Ako ste stvorili više konstrukt
u istom programu, morate razlikovati STRUCT i Struct.
Dakle struct auto, ja mogu imati struct student, na primjer,
u istom programu.
Unutar od vitičastim zagradama su sve tzv poljima,
ili članovi strukture.
Pa što su neke od stvari koji su inherentne u automobilu?
Pa, to obično ima godine, ima naziv modela, a registarske pločice,
odometar koji obično ima neki broj milja na njemu,
a možda veličina motora.
I kao što možete vidjeti, ja sam konfuzan cijeli brojevi, a likovi i parovi.
Oni svi će biti dio ove nove vrste podataka.
>> Na kraju, konačna stvar koju trebate učiniti, ne zaboravite ovaj mali zarez
na kraju.
Nakon što smo završili definiranja strukture, moramo staviti zarez na kraju.
To je vrlo čest sintaktičke pogreška, jer s funkcijom,
na primjer, ti bi samo otvoreni kovrčava braće, u neposrednoj blizini kovrčava braće.
Vi ne stavi zarez Na kraj definicije funkcija.
Ovo izgleda kao funkciju definicija, ali to nije,
i tako zarez tamo je samo podsjetnik da vas
treba ga staviti tamo, jer prevodilac će inače ne
znam što učiniti s njom.
To je vrlo uobičajena pogreška slučajno napraviti
kada ste prvi put definiranju strukture.
>> U REDU.
Dakle, mi obično definiraju naše strukture na samom vrhu naših programa
jer oni vjerojatno ide da se koristi više funkcija.
Mi ne želimo definirati struct unutar funkcije,
jer onda možemo only-- Opseg strukture zapravo
postoji samo unutar tu funkciju.
Mi bi vjerojatno želite definirati strukturu tako da možemo ga koristiti u više funkcija,
ili možda u višestrukim datoteke koje su vezani zajedno
stvoriti svoju jedinstvenu program.
Ponekad i umjesto definiranja strukture
na samom vrhu, gdje ste stavili pound uključuje i vaš funta definira,
na primjer, možda ćete ih staviti u odvojene točka h datoteke koje zatim
funta su sami.
>> Tako imamo strukture, ali sada moramo dobiti unutar njih.
Kako ćemo dobiti unutar struktura za pristup
one pod-varijable one varijable koje postoje unutar strukture?
Pa, imamo nešto što se zove operator točka, što nam omogućuje
pristupiti polja strukture.
Tako, na primjer, recimo da sam proglasio moji podaci struktura upisati negdje
na vrhu mog programa, ili možda u Točka h datoteka koja imam funta uključeni.
Ako sam tada želio stvoriti novu varijabla tog tipa podataka, mogu reći,
struct auto, moj auto, točka i zarez.
Baš kao što sam mogao reći int x, ili naziv niz zarez.
>> Vrsta ovdje podaci struct automobila, naziv varijable je moj auto,
a onda ja mogu koristiti dot operatoru da pristup raznim područjima mog automobila.
Dakle, ja mogu reći moj auto dot godine jednak 2011.
To je savršeno u redu.
Godine, ako se sjetiti, bio je definiran kao cijeli polje unutar ovog struct automobila
tip podataka.
Dakle, bilo koja varijabla podataka u struct automobila tipa, kao što moj auto, ja mogu reći moj auto
dot godine jednako, a zatim dodijeliti to su neki cijeli broj vrijednosti, 2011.
Moj auto dot ploču jednaka CS50.
Moja kartica dot brojač kilometara jednak 50505 zarezom.
Svi oni su savršeno u redu i da je
kako pristupiti polja strukture.
Strukture, ipak, ne treba biti izrađen na stog.
Baš kao i svaki drugi varijablu smo Možete ih dinamički alocirati.
Ako imamo program koji bi mogao se stvaraju mnoge strukture,
ne znam koliko ćemo morati,
onda moramo dinamički izdvojiti one strukture
kao naš program radi.
I tako, ako ćemo pristupiti polja strukture u tom kontekstu,
Podsjetimo da prvo moramo dereference pokazivač na strukturu,
a onda kad smo dereference pokazivač, onda možemo pristupiti polja.
Ako imamo samo pokazivač strukturi,
ne možemo samo reći pokazivač dot polje ime i dobiti ono što tražimo.
Tu je dodatni korak dereferencing.
Dakle, recimo da umjesto previous--
baš kao u prethodnom primjeru, umjesto da ga progla
na ispustu, struct auto, moj automobil, točka i zarez, kažem struct automobil,
zvijezda, pokazivač do struct automobil nazvao moj auto,
jednako malloc veličinu struct automobila.
Veličina ćemo shvatiti koliko bajtova vaša nova vrsta podataka zauzima.
Ne nužno samo morate koristiti veličina, širina, int, char ili, ili bilo
od ugrađenih vrste podataka.
Prevodilac je dovoljno pametan shvatiti kako mnogo bajtova
zahtijeva vašem novom strukturom.
Tako sam malloc si jedinicu memorije dovoljno velika da se u struct automobil,
i ja dobiti pokazivač natrag na taj blok memorije,
a pokazivač je dodijeljen moj auto.
>> Sada, ako želim pristupom Područja mog automobila,
Prvi put sam dereference moj auto pomoću dereference operater, zvijezda
kako smo vidjeli iz pokazivače video, a zatim nakon I dereference,
onda ja mogu koristiti dot operatoru da pristup raznim područjima mog automobila.
Star auto dot godine jednak 2011.
Da bi učinak želimo u ovom slučaju,
jer smo dinamički dodijeljen moj auto.
>> To je vrsta neugodno, ipak, zar ne?
Tu je proces sada u 2 koraka.
Sada moramo dereference-- imamo operator zvijezda,
a imamo operatera dot.
I kao što ste mogli očekivati, jer C programera volim kraće načine
raditi stvari, tu je kraći način da to učinite.
Tu je još jedan operater zove strijela, što čini ovaj proces mnogo lakše.
Način strelica radi je To je prvi dereferences
pokazivač na lijevoj strana operatora,
i zatim, nakon dereferenced pokazivač na lijevoj strani,
To pristupa polje na desnoj strani.
I tako već smo imali ovu vrstu Star moj auto dot sve ove stvari,
kao što je bilo mnogo događa tamo.
No, ono što smo umjesto toga može učiniti je this-- moj auto strelica godine jednak 2011.
>> Opet, što se događa ovdje?
Prvo, ja sam dereferencing moj auto.
Što je opet, je pokazivač ovdje.
Zatim, nakon što dereferenced moj auto, ja
tada može pristupiti polja godine, ploča i brojač kilometara
baš kao što sam mogao prije nego što prvi Rabljeni zvijezda dereference moj auto,
i dot za pristup polje.
Tako možete imati strukture, što može imati pokazivače strukturama,
i imate načina pristupa polja tih objekata,
imate li upućuje na ih ili sami varijabli.
Dot ili strelica, ovisno o kako je varijabla je proglašen.
Ja sam Doug Lloyd, ovo je CS50.