>> [Muusika mängib]
>> DOUG LLOYD: OK.
Me oleme koos töötanud täisarvud, oleme töötanud koos tähtedega,
oleme töötanud ujukid, kahekordistub, stringid ja bools.
Me oleme ammendanud päris palju kõik on [kuuldamatu] tüübid,
on meile kättesaadav kogu aeg.
Aga nüüd me tahame teha midagi muud.
Kuidas me seda teeme?
Kuidas luua erinevaid andmetüüpe?
Me saame seda teha kasutades struktuure.
Nii struktuurid võimaldavad meil ühendada muutujate eri tüüpi
ühte, uue muutuja tüübi mida me saame anda oma tüübile nimi.
See on tõesti tugev asi, et oleks võimalik teha,
sest saame nüüd grupp elementide erinevat tüüpi andmeid
koos, millel on loogilises seoses.
Me oleme suutnud seda teha massiivid omamoodi, eks?
Meil saab valitud muutujad sama andmetüüp
koos suure ühiku mälu, massiivi.
>> Aga me ei ole suutnud segada up erinevat tüüpi andmeid koos.
Me ei saa öelda, siduge täisarv, ja iseloomu, ja kahekordse kõik
samas asi ja helistada, et ühe seadme.
Aga struktuurid, või Sageli nimetatakse struktuurideks,
me tegelikult võimalik.
Nii struktuur on omamoodi on nagu super muutuja.
See on muutuja, mis sisaldab teiste muutujatega sees on.
Nii et siin on näide väga lihtsa struktuuriga.
See on see, mida süntaks näeks meeldib luua struktuur auto.
Nüüd lähme läbi süntaks siin.
Struct, et on märksõna, mis näitab,
et ma loon uue andmetüübi siin.
Eelkõige andmete tüübi nimi on saab olema struct auto, nagu me näeme.
Aga see on omamoodi otsa ära koostaja, et see
rühmana muutujaid, mis toimub tuleb pidada osaks sama tüüpi
minut.
>> Autod, lihtsalt nime struktuuri.
Jällegi andmete tüübi siin läheb olema struct auto, mitte ainult auto.
Aga kui sul on erinevalt-- kui te luua mitu struktuurideks
samas programmis, peate vahet struct ja struktuure.
Nii struct auto, ma võin ka struct õpilane, näiteks
samas programmis.
Toas on looksulg on kõik niinimetatud väljad,
või liikmete struktuuri.
Millised on mõned asjad, mis on omane auto?
Noh, see on tavaliselt aastas, on mudeli nime ja numbrimärk,
odomeetri et tavaliselt on Mõnes arvu miili peal,
ja võibolla mootori suurusest.
Ja nagu näete, ma segades kuni täisarvud ja tegelased ja kahekordistub.
Nad kõik saab olema osa selle uue andmetüübi.
>> Viimane, mida ma pean tegema, ärge unustage, et see väike semikooloniga
lõpus.
Kui oleme lõpetanud struktuuri määratlemine, me peame semikooloniga lõpus.
See on väga levinud süntaktiline viga, sest funktsioon,
näiteks, siis oleks lihtsalt Avatud lokkis traksidega, tihe lokkis traksidega.
Sa ei pane semikoolon juures lõpuks funktsioonina definitsiooni.
See näeb välja nagu funktsioon definitsiooni, kuid see ei ole,
ja nii semikoolonit seal on lihtsalt meeldetuletus, et sa
on vaja panna sinna, sest kompilaator muidu ei
tea, mida teha.
See on väga levinud viga kogemata teha
kui sa esmalt kindlaks struktuure.
>> OKEI.
Nii me tavaliselt määravad meie struktuurid ülaservas meie programmid
sest nad ilmselt läheb kasutatavad arvukaid funktsioone.
Me ei taha, et määratleda struct sees funktsiooni,
sest siis saame ainult-- ulatus struktuuri tõesti
eksisteerib vaid seestpoolt, et funktsioon.
Me ilmselt soovite määratleda struktuuri nii et me saame seda kasutada mitmeid funktsioone,
või ehk mitu faile, mis on seotud koos
luua meie ühe programmi.
Vahel ka hoopis määratleda struktuuri
tipus, kui paned oma nael on ja teie nael määratleb,
Näiteks võid panna neid Eraldi dot h faile, mis sul siis
naela ka ise.
>> Nii et meil on struktuurid, kuid nüüd me peame sees neist.
Kuidas me sees struktuuri juurdepääsu
need abiparameetreid need muutujad mis eksisteerivad konstruktsiooni sees?
Noh, meil on midagi, mida nimetatakse dot operaator, mis võimaldab meil
juurdepääsu valdkonnas struktuuri.
Nii näiteks oletame, et ma olen kuulutanud minu struktuuri andmete tüüp kusagil
ülaosas oma programmi, või võib-olla dot h faili, et ma olen nael hulka.
Kui ma siis tahan, et luua uus muutuja, et andmete tüübi, võin öelda,
struct auto, minu auto, semikooloniga.
Just nagu ma võiks öelda, int x või string nimi semikooloniga.
>> Andmed tüübile siin on struct auto, nimi muutuja on minu auto,
ja siis ma saan kasutada dot operaator juurdepääsu erinevate valdkondades minu auto.
Nii et ma ei saa öelda, minu auto dot aasta võrdub 2011. aastal.
See on täiesti korras.
Aasta, kui te mäletate, oli määratletud kui täisarv valdkonnas sees see struct auto
andmete tüübi.
Nii tahes muutuja struct auto andmeid tüüp, näiteks minu auto, ma ei saa öelda, minu auto
dot aasta võrdub ja seejärel määrata see mõned täisarvuni, 2011.
Minu auto dot plaat võrdub CS50.
Minu kaart dot odomeetri võrdub 50505 semikooloniga.
Kõik need on täiesti korras ja see on
kuidas pääseda väljad struktuuri.
Konstruktsioonid, aga ei pea tuleb luua virnas.
Just nagu iga teine ​​muutuja, me saab dünaamiliselt neid eraldada.
Kui meil on programm, mis võiks teeniva palju struktuure,
Me ei tea, kui palju me ei kavatse vaja,
siis peame dünaamiliselt eraldada need struktuurid
kui meie programm töötab.
Ja kui me ei kavatse pääse valdkondades struktuuri selles kontekstis,
Tuletame meelde, et peame kõigepealt apparent kursor struktuuri,
ja siis kui me apparent pointer, siis pääseb väljad.
Kui meil on ainult kursor struktuuri,
Me ei saa just öelda, pointer dot valdkonnas nimi ja saada seda, mida me otsime.
Seal on lisatööd ning dereferencing.
Nii oletame, et asemel previous--
nagu eelmises näites, selle asemel, et tunnistada
virnas, struct auto, minu auto, semikoolon, ma ütlen struct auto,
STARi kursor struct auto helistasin oma auto,
võrdub malloc suurus struct auto.
Suurus me aru saada, kui palju baiti endale andmetüüp kulub.
Sa ei pruugi vaja kasutada vaid suurus, laius, int või char või mistahes
Sisseehitatud andmetüübid.
Koostaja on piisavalt targad aru saada, kui palju baite
nõutakse endale struktuur.
Nii et ma malloc mina üksuse mälu piisavalt suur, et hoidke struct auto,
ja ma saan osuti tagasi Selle ploki mälu,
ja et osuti on määratud minu auto.
>> Nüüd, kui ma tahan juurdepääsu valdkonnas minu auto,
Ma esimest apparent minu auto abil apparent operaator, star
et me oleme näinud alates viiteid videod, ja siis pärast ma apparent,
siis ma saan kasutada dot operaator juurdepääsu erinevate valdkondades minu auto.
Star minu auto dot aasta võrdub 2011. aastal.
See tooks kaasa selle, tahame sel juhul,
sest me oleme dünaamiliselt eraldatud minu auto.
>> See on selline tüütu, aga õige?
Seal on 2-etapiline protsess nüüd.
Nüüd peame dereference-- meil star operaator,
ja meil dot operaator.
Ja kui te võite arvata, sest C programmeerijad armastan lühem viise
teha asju, on lühem viis seda teha.
On veel üks operaator nimega nool, mis teeb selle protsessi palju lihtsam.
Kuidas nool teoste see esimene dereferences
kursorit vasakule pool operaator,
ja siis pärast dereferenced kursorit vasakule,
see pöördub valdkonnas paremal.
Ja nii varem oli meil selline Star minu auto dot kõik see kraam,
nagu seal oli palju toimub seal.
Aga mida me saame selle asemel teha on see-- minu auto nool aasta võrdub 2011. aastal.
>> Jällegi, mis toimub siin?
Esiteks, ma dereferencing minu auto.
Mis jälle, ei viida siin.
Siis, pärast võttes dereferenced minu auto, ma
Seejärel saab tutvuda väljad aastal, plaat, ja odomeetri
nagu ma oleks enne, kui esimene Kasutatud star apparent minu auto,
ja dot juurdepääsu valdkonnas.
Nii saab struktuure, siis võib olla viiteid struktuurid,
ja sul on võimalusi pääseda valdkonnas nende struktuuride,
kas teil on viiteid neid või muutujad ise.
Dot või nool, sõltuvalt kuidas muutuja on deklareeritud.
Ma olen Doug Lloyd, see on CS50.