>> [Predvaja glasba]
>> Doug LLOYD: OK.
Mi smo delali s števil, smo delali z znaki,
smo delali boje, podvoji, godala in bools.
Zal, da smo izčrpali veliko vse od [neslišno] tipov, ki
so bile na voljo za vse nas skupaj.
Zdaj pa smo želeli narediti nekaj več.
Kako to storimo?
Kako ustvariti različne vrste podatkov?
Mi lahko to storite z uporabo struktur.
Torej strukture nam omogočajo, da bi poenotili spremenljivke različnih vrst
v enem samem, novi vrsta spremenljivke, ki jih lahko dodelite svojo lastno ime tipa.
To je zelo močan stvar, da bi lahko naredil,
saj smo lahko zdaj skupina elementi različnih podatkovnih tipov
skupaj, da imajo logično povezavo.
Smo bili sposobni to storiti z nizi nekako, kajne?
Mi lahko spremenljivke skupine istega tipa podatkov
skupaj v velikem enoti spomina, matrike.
>> Vendar nismo bili sposobni, da se pomešajo up različne vrste podatkov skupaj.
Ne moremo, pravijo, seznaniti celo število, in značaj, in dvojna vse
V isto stvar in klic, da eno enoto.
Ampak s strukturami, ali pogosto imenujejo konstruktov,
smo dejansko lahko.
Torej struktura je nekako podobnega super spremenljivko.
To je spremenljivka, ki vsebuje druge spremenljivke znotraj nje.
Torej, tukaj je primer zelo preprosta struktura.
To je tisto, kar bi sintaksa videti želel ustvariti strukturo za avto.
Zdaj pa pojdimo skozi sintakso tukaj.
Struct, da je ključna beseda, ki označuje
da sem ustvariti nov podatkovni tip tukaj.
Še posebej, ime podatkovnega tipa je bo struct avto, kot bomo videli.
Ampak to je neke vrste konice off prevajalniku, da ta
kot skupina spremenljivk, ki se dogaja šteje za del istega tipa
v minuto.
>> Avtomobili, samo ime strukture.
Again, podatkovni tip tukaj se dogaja biti struct avtomobila, ne le avtomobilov.
Toda, če imate different-- če ste ustvarili več konstruktov
v istem programu, morate razlikovati med struct in struct.
Torej struct avto, jaz bi tudi Struct študent, na primer,
v istem programu.
Znotraj zavitih oklepajih so vsi ti polja
ali člani strukture.
Torej, kaj so nekatere od stvari, ki so neločljivo povezana v avtu?
No, to je običajno eno leto, je ime modela, in registrske tablice,
števec prevožene razdalje, ki ima navadno nekatere število kilometrov na njej,
in morda velikostjo motorja.
In kot vidite, sem mešanje navzgor števili in znaki in dvojice.
Oni vse bo del te nove vrste podatkov.
>> Končno, končno stvar moram storiti, Ne pozabite, to malo podpičje
na koncu.
Ko smo končali opredeljuje strukturo, moramo postaviti podpičje na koncu.
To je zelo pogosta sintaktične napaka, ker s funkcijo,
na primer, bi morali open kodrasti naramnicami, blizu kodrasti brace.
Ne boste dal podpičje Na konec definicijo funkcije.
To izgleda kot funkcijo opredelitev, vendar je ni,
in tako podpičje tam je le opozorilo, da vas
morali postaviti tam, ker prevajalnik bo sicer ne
vedo, kaj storiti z njim.
To je zelo pogosta napaka nenamerno narediti
ko ste prvič opredeljevanju strukture.
>> V REDU.
Torej smo ponavadi opredeljujejo naše strukture na samem vrhu naših programov
ker oni verjetno bo da se z več funkcijami uporablja.
Nočemo, da določite Struct znotraj funkcije,
ker potem bomo lahko only-- Obseg strukturi res
obstaja samo znotraj te funkcije.
Mi bi verjetno želeli opredeliti strukturo tako da ga lahko uporabljamo na več funkcij,
ali pa morda v mnogokratnik datoteke, ki so vezani skupaj
ustvariti našega enotnega programa.
Včasih tudi namesto definiranja strukturo
na samem vrhu, kjer ste postavili vašo pound vključuje in vaše funt opredeljuje,
na primer, bi si jih dal v ločene dot h datoteke, ki vas nato
funt vključujejo sami.
>> Torej imamo strukture, zdaj pa moramo dobiti znotraj njih.
Kako pridemo v notranjosti struktura dostop
ti sub-spremenljivke, te spremenljivke da obstaja znotraj strukture?
No, imamo nekaj, kar ti operator pika, ki nam omogoča,
dostop do polja strukture.
Tako, na primer, recimo, da sem izjavil moji podatki tipske nekje
Na vrhu mojega programa, ali pa v pika h Datoteka da sem funt vključeni.
Če pa želim ustvariti novo spremenljivka tega tipa podatkov, lahko rečem,
struct avto, moj avto, podpičje.
Tako kot lahko rečem int x, ali ime niz podpičje.
>> Podatkovni tip tukaj je struct avto, ime spremenljivke je moj avto,
in potem sem lahko uporabite operaterja dot dostop do različnih področja mojem avtu.
Torej lahko rečem, moj avto dot leto je enako 2011.
To je popolnoma v redu.
Leto, če se spomnim, je bila opredeljena kot celo polje znotraj tega struct avtomobila
podatkovni tip.
Torej vsaka spremenljivka podatkov struct avtomobila tip, kot je moj avto, lahko rečem, moj avto
dot leto je enako, in nato določite da nekateri celo vrednost 2011.
Moj avto dot tablica enaka CS50.
Moja kartica pika števec kilometrov enaka 50505 podpičjem.
Vsi ti so popolnoma v redu in da je
kako dostopati do področja strukture.
Strukture, čeprav ne potrebujejo mora biti narejena na stack.
Tako kot vse druge spremenljivke, smo jih dinamično mogoče dodeliti.
Če imamo program, ki bi lahko se ustvarja veliko struktur,
ne vemo, koliko bomo potrebovali,
potem moramo dinamično dodeliti teh struktur
kot naš program teče.
In tako, če bomo za dostop do področja strukture v zvezi s tem,
Odpoklic, da moramo najprej dereference kazalec na strukturo,
in potem ko smo dereference kazalec, potem bomo lahko dostopate do polja.
Če imamo le kazalec na strukturo,
ne moremo samo reči kazalec dot polje ime in dobili tisto, kar smo iskali.
Tam je dodaten korak Dereferenciranje.
Torej, recimo, da namesto previous--
tako kot v prejšnjem primeru, namesto da bi jo razglaša
na sklad, struct avto, moj avto, podpičje, povem struct avto,
zvezda, kazalec na struct car poklical moj avto,
enaka malloc velikost struct avtomobila.
Velikost bomo ugotoviti, koliko bajti vaš nov podatkovni tip prevzame.
Vam ni treba uporabljati nujno samo velikost, širino, int ali char, ali kateri koli
od vgrajenih podatkovnih tipov.
Prevajalnik je dovolj pameten, da ugotovimo, koliko bajtov
ki so potrebne za vaše novo strukturo.
Tako sem malloc sam enoto pomnilnika dovolj velika, da imajo struct avto,
in dobim kazalec nazaj v tem bloku spomina,
in da kazalec je dodeljena moj avto.
>> Zdaj pa, če želim dostop polja za moj avto,
Najprej sem dereference mojem avtu uporabo upravljavec dereference, zvezda
da smo videli od kazalcev video posnetkov, nato pa po I ciljne datoteke,
potem sem lahko uporabite operaterja dot dostop do različnih področja mojem avtu.
Star avto dot leto je enako 2011.
To bi imelo za posledico želimo v tem primeru,
Ker smo dinamično dodeljena moj avto.
>> To je vrsta siten, čeprav, kajne?
Tam je postopek zdaj 2-korak.
Zdaj moramo dereference-- imamo operaterja zvezda,
in imamo operaterja dot.
In kot bi lahko pričakovali, saj Programerji C radi krajše poti
za stvari, obstaja krajša pot, da to storijo.
Obstaja pa še ena operator imenuje puščica, zaradi česar je ta proces veliko lažje.
Način puščica deluje, Najprej je dereferences
kazalec na levi strani operaterja,
in nato, potem ko dereferenced kazalec na levi strani,
je dostopi polje na desni.
In tako že prej smo imeli to vrsto Star moj avto dot vse te stvari,
kot je bilo veliko dogaja tam.
Toda kaj lahko namesto tega storiti, je this-- moj avto arrow leto je enako 2011.
>> Še enkrat, kaj se dogaja tukaj?
Najprej sem Dereferenciranje moj avto.
Ki je spet, je kazalec tukaj.
Potem, ko ima dereferenced moj avto, sem
Nato lahko dostopate do polja leto, tablice in števec kilometrov
tako kot sem lahko, preden prvič Rabljeni zvezda dereference moj avto,
in dot za dostop do polja.
Tako da lahko imate strukture, ki jih lahko napotke struktur,
in imate načine dostopanja polja teh struktur,
ali imate napotke za jih ali spremenljivke sami.
Pika ali puščica, odvisno kako je spremenljivka deklarirana.
Sem Doug Lloyd, to je CS50.