>> [Muzikos grojimo]
>> Doug LLOYD: Gerai.
Mes dirbome su skaičiais, mes dirbo su simbolių,
mes dirbome plūdės, dviviečiai, įsipareigojimų ir bools.
Mes išnaudojo beveik visi iš [nesigirdi] tipų,
buvę galima mums visiems kartu.
Bet dabar mes norime padaryti kažką daugiau.
Kaip mes tai padaryti?
Kaip mes sukurti skirtingus duomenų tipus?
Mes galime padaryti naudodami struktūras.
Taigi struktūros leidžia mums suvienyti kintamieji skirtingų tipų
į vieną, naujasis kintamo tipo, kurioje mes galime priskirti savo tipo pavadinimą.
Tai yra tikrai stiprus dalykas, kad būtų galima daryti,
nes mes galime dabar grupė elementai skirtingų duomenų tipų
kartu, kad turi loginį ryšį.
Mes galėjome tai padaryti su matricomis Rūšiuoti, tiesa?
Mes galime grupių kintamieji iš tos pačios duomenų tipą
kartu dideliame vieneto atminties, masyvo.
>> Bet mes negalėjo maišyti skirtingus duomenų tipus kartu.
Mes negalime, tarkim, porą sveikasis skaičius, ir simbolis, ir dvigubas visi
į tą patį, ir skambinti, kad vienu vienetu.
Bet su struktūros arba dažnai vadinama structs,
mes iš tikrųjų gali.
Taigi struktūra yra tarsi tiek kaip super kintamąjį.
Tai kintamasis, kuris yra kiti kintamieji viduje ji.
Taigi čia pavyzdys, labai paprasta struktūra.
Tai yra tai, ką sintaksė atrodytų patinka sukurti struktūrą automobilį.
Dabar galime eiti per sintaksė čia.
Konstrukto, tai toks raktažodis rodo
kad aš sukurti naują duomenų tipą čia.
Visų pirma, duomenų tipą vardas bus konstrukto automobilis, kaip matysime.
Tačiau tai yra viršūnės rūšiuoti ne į kompiliatorių, kad ši
kaip kintamųjų grupės, kuri vyksta būti laikoma dalis yra tokio paties tipo
per minutę.
>> Automobiliai, tik statinio pavadinimą.
Vėlgi, duomenų tipas čia vyksta būti konstrukto automobilis, ne tik automobilį.
Bet jei jūs turite different-- jei kuriate kelis structs
toje pačioje programos, reikia atskirti struct ir struct.
Taigi konstrukto automobilis, aš taip pat gali turėti konstrukto studentas, pavyzdžiui,
toje pačioje programą.
Viduje klamrami yra visi vadinamųjų srityse,
arba nariai struktūrą.
Taigi, kas yra keletas dalykų, kurie yra neatskiriama automobilio?
Na, ji paprastai turi per metus, buvo modelis pavadinimas, o NL,
odometras, kad paprastai turi kai mylių ją skaičius,
o gal variklis dydis.
Ir, kaip matote, aš maišyti sveikieji skaičiai ir simboliai ir dviviečiai kambariai.
Jie visi bus dalis šios naujų duomenų tipą.
>> Galiausiai paskutinis dalykas, man reikia daryti, nepamirškite tai mažai kabliataškį
pabaigoje.
Po baigsime apibrėžti struktūrą, mes turime įdėti kabliataškį pabaigoje.
Tai labai dažna sintaksinis klaida, nes su funkcija,
Pavyzdžiui, jūs tiesiog turite atvira garbanotas petnešomis, netoli garbanotas petnešomis.
Jūs neturite įdėti kabliataškį ne galas funkciniu apibrėžimą.
Tai atrodo kaip funkcija apibrėžimas, tačiau taip nėra,
ir taip kabliataškis yra yra tik priminimas, kad jus
reikia įdėti jį ten, nes kompiliatorių kitaip nėra
nežino, ką daryti su juo.
Tai labai dažna klaida netyčia padaryti
kai jūs pirmą kartą nustatant struktūras.
>> GERAI.
Taigi mes paprastai apibrėžti savo struktūras pačiame viršuje iš mūsų programų
nes jie tikriausiai bus turi būti naudojami pagal kelis funkcijas.
Mes nenorime apibrėžti turizmo infrastruktūrą viduje funkcija,
nes tada mes galime jei jums reikia apimtis struktūros tikrai
egzistuoja tik viduje šią funkciją.
Mes tikriausiai noriu apibrėžti struktūrą todėl mes galime jį naudoti keliomis funkcijomis,
arba galbūt kartotinio failų, kurie yra surišami
sukurti mūsų bendrą programą.
Kartais taip, o ne apibrėžti struktūrą
pačiame viršuje, kur jūs įdėti savo Svaras apima ir jūsų svaras apibrėžia,
Pavyzdžiui, jums gali įdėti juos į atskiras taškas h failus, kurį vėliau
Svaras yra sau.
>> Taigi, mes turime struktūras, tačiau dabar mums reikia patekti į vidų iš jų.
Kaip mes gauti viduje struktūra patekti
Šios posistemės kintamieji rodikliai, kurie kintamieji kad egzistuoja struktūros viduje?
Na, mes turime kažką vadinama dot operatorius, kuri leidžia mums
prieiti prie statinio laukus.
Taigi, pavyzdžiui, tarkim aš paskelbė Mano struktūra Duomenų tipas kažkur
tuo savo programos viršuje, arba galbūt dot val failą, kad aš svaras įtraukti.
Jei aš tada noriu sukurti nauja kintamasis to duomenų tipo, galiu pasakyti,
konstrukto automobilis, mano automobilis, kabliataškis.
Kaip galėčiau pasakyti int x arba styginių vardas kabliataškis.
>> Duomenų tipas čia yra konstrukto automobilis, kintamojo vardas yra mano automobilis,
ir tada aš galiu naudoti dot operatoriui prisijungti įvairių sričių savo automobilį.
Taigi galiu pasakyti savo automobilį dot metų lygus 2011.
Štai puikiai baudą.
Metai, jei prisimenate, buvo apibrėžta kaip sveikasis skaičius laukas viduje šio struct automobilį
duomenų tipas.
Taigi bet koks konstrukto automobilių duomenų kintamasis tipas, pavyzdžiui, mano automobilį, galiu pasakyti savo automobilį
dot metų lygus ir tada priskirti tai kai sveikasis vertė 2011.
Mano automobilis taškų plokštelė yra lygus CS50.
Mano skyriaus dot odometras lygus 50505 kabliataškį.
Visi tie, kurie puikiai baudą ir kad
kaip mes prieiti prie laukai struktūrą.
Konstrukcijos, nors, nereikia turi būti sukurta kamino.
Kaip bet kuris kitas kintamasis, mes gali dinamiškai paskirstyti juos.
Jei mes turime programą, kuri galėtų būti generuojama daug struktūrų,
mes nežinome, kiek mes ketiname reikia,
tada mums reikia dinamiškai paskirsto šias struktūras
kaip mūsų programa veikia.
Ir todėl, jei mes ketiname prieiti prie laukai struktūrą tame kontekste,
Prisiminkite, kad mes pirmiausia reikia dereference į struktūros žymeklis,
ir tada, kai mes dereference žymeklis, tada mes galime prieiti prie laukus.
Jei mes tik turime rodyklę į struktūrą,
mes negalime tiesiog pasakyti žymeklis dot lauką pavadinimas ir gauti tai, ko mes ieškome.
Yra papildomų žingsnis dereferencing.
Taigi tarkime, kad vietoj previous--
kaip ir ankstesniame pavyzdyje, vietoj nedeklaravę
ant kamino, konstrukto automobilis, mano Automobilių, kabliataškis, sakau struct automobilį,
žvaigždė, rodyklė į A konstrukto automobilių vadinamas mano automobilį,
lygus malloc dydį struct automobilį.
Dydis mes išsiaiškinti, kiek baitų jūsų naujas duomenų tipas užima.
Jūs nebūtinai reikia naudoti tik dydis, plotis, INT, arba char, arba bet
iš built-in duomenų tipų.
Kompiliatorius yra pakankamai protingas, išsiaiškinti, kiek baitų
yra reikalaujama pagal naują struktūrą.
Taigi aš malloc sau atminties įrenginį pakankamai didelis, kad turėti struct automobilį,
ir aš gauti žymeklį atgal į tą atminties blokas,
ir kad žymiklis yra priskiriamas prie mano automobilio.
>> Dabar, jei aš noriu patekti kad mano automobilį laukai,
Aš pirmą kartą dereference mano automobilyje, naudojant dereference operatorius, žvaigždutė
kad mes matėme iš rodyklės video, tada, kai aš dereference,
tada aš galiu naudoti dot operatoriui prisijungti įvairių sričių savo automobilį.
Pažymėti mano automobilį dot metų lygus 2011.
Tai turi poveikį norime šiuo atveju,
nes mes dinamiškai skirta mano automobilį.
>> Tai tipo erzina, nors, tiesa?
Yra 2 etapų procesas dabar.
Dabar mes turime dereference-- turime žvaigždė operatorius,
ir mes turime dot operatorių.
Ir kaip galima tikėtis, nes C programuotojai mėgsta trumpesnius kelius
daryti dalykus, yra trumpesnis būdas tai padaryti.
Yra dar vienas operatorius vadinamas rodyklė, todėl šis procesas daug lengviau.
Kelias rodyklė veikia, yra Ji pirmą kartą dereferences
kairėje žymeklis pusėje nuo operatoriaus,
ir tada, po to, kai dereferenced kairėje žymeklis,
jis pasiekia lauko dešinėje.
Ir taip anksčiau mes turėjome šios rūšies Žvaigždžių mano automobilis dot visą šią medžiagą,
kaip ten buvo daug vyksta ten.
Bet kas, o mes galime padaryti, tai this-- mano automobilis rodyklė metų lygus 2011.
>> Vėlgi, tai, kas vyksta čia?
Pirma, aš dereferencing savo automobilį.
Kuris vėl yra žymeklis čia.
Tada, po to, kai dereferenced savo automobilį, aš
Tada galite patekti į laukus metus, plokštės ir odometras
kaip galėjau prieš tai pirmiausia Naudota žvaigždė dereference mano automobilį,
ir dot pasiekti lauką.
Taigi jūs galite turėti struktūras, jums gali turėti rodykles į struktūras,
ir jūs turite būdai pasiekti tų struktūrų laukai,
ar turite nuorodas į juos arba patys kintamieji.
Dot arba rodyklė, priklausomai nuo kaip kintamasis buvo paskelbta.
Aš Doug Lloyd, tai CS50.