>> [Muzika]
>> DOUG Lloyd: OK.
Ne kemi punuar me integers, ne kemi punuar me karaktere,
ne kemi punuar gjithandej, dyshe, vargjet, dhe bools.
Ne kemi shteruar shumë e shumë të gjithë nga [padëgjueshme] llojet që
kanë qenë në dispozicion për të gjithë ne së bashku.
Por tani ne duam të bëjmë diçka më shumë.
Si e bëjmë këtë?
Si mund të krijojmë lloje të ndryshme të të dhënave?
Ne mund ta bëjnë këtë duke përdorur struktura.
Pra, strukturat e të na lejojë për të unifikuar variabla të llojeve të ndryshme
në një të vetme, lloj të ri ndryshueshme, të cilat ne mund të caktojë vetë emrin e saj të tipit.
Kjo është një të vërtetë të fortë gjë që të jetë në gjendje të bëjë,
sepse ne tani mund të grup elementet e llojeve të ndryshme të të dhënave
së bashku që të ketë një lidhje logjike.
Ne kemi qenë në gjendje për ta bërë këtë me vargjeve lloj të, apo jo?
Ne mund të variablave të grupit i llojit të njëjtë të të dhënave
së bashku në një njësi të madhe e kujtesës, një grup.
>> Por ne nuk kemi qenë në gjendje të përzierje up lloje të ndryshme të të dhënave së bashku.
Ne nuk mund të, të themi, palë një numër të plotë, dhe një karakter, dhe një të dyfishtë të gjithë
në të njëjtën sendit dhe thërrasë se një njësi të vetme.
Por me strukturat, ose shpesh të referuara si structs,
ne fakt mund.
Pra, një strukturë është lloj e si një variabël super.
Kjo është një variabël që përmban variabla të tjerë brendësi të saj.
Kështu që këtu është një shembull i një strukturë shumë të thjeshtë.
Kjo është ajo që sintaksa do të duken si për të krijuar një strukturë për një makinë.
Tani, le të shkojë nëpër sintaksë këtu.
Struct, kjo është fjalen që tregon
që unë jam duke krijuar një tip të ri të dhënave këtu.
Në veçanti, emri llojit të të dhënave është do të jetë makinë struct, si ne do të shohim.
Por kjo është lloj i tip jashtë për përpiluesit që kjo
si një grup variablat që do të konsiderohet pjesë e llojit të njëjtë
ne nje minut.
>> Makina, vetëm emri i strukturës.
Përsëri, lloji i të dhënave këtu po ndodh të jetë makinë struct, jo vetëm makinë.
Por në qoftë se ju keni different-- në qoftë se ju e krijoni structs të shumta
në të njëjtin program, ju keni nevojë për të dallimin në mes struct dhe struct.
Makinë Pra struct, unë mund të ketë gjithashtu Studenti struct, për shembull,
në të njëjtin program.
Brenda e formatimin e teksteve kaçurrel janë të gjitha të ashtuquajturat fusha,
ose anëtarët e strukturës.
Pra cilat janë disa nga gjërat që janë të pandara në një makinë?
E pra, ajo zakonisht ka një vit, ka një emër model, dhe një targë,
një rrugëmatës që zakonisht ka disa numrin e milje mbi të,
dhe ndoshta një madhësi motor.
Dhe si ju mund të shihni, unë jam rrëmujë integers dhe karaktere dhe dyshe.
Ata janë të gjithë do të jenë të pjesë e këtij lloji të ri të të dhënave.
>> Së fundi, gjëja e fundit që duhet të bëni, mos harroni këtë pikëpresje vogël
në fund.
Pasi kemi mbaruar përcaktimin e strukturës, ne kemi nevojë për të vënë një pikëpresje në fund.
Kjo është një sintaksore shumë e zakonshme gabim, sepse me një funksion,
për shembull, ju vetëm do të duhet mbajtëse hapur kaçurrel, mbajtëse afër kaçurrel.
Ju nuk e vënë një pikëpresje në nivel fundi i një përkufizimi të funksionit.
Kjo duket si një funksion përkufizim, por kjo nuk është,
dhe kështu pikëpresje atje është vetëm një kujtesë se ju
duhet të vënë atë atje, sepse përpiluesit përndryshe nuk do të
e di se çfarë të bëjë me të.
Kjo është një gabim shumë i zakonshëm për të bërë aksidentalisht
kur ju jeni të parë përcaktimin e strukturave.
>> NE RREGULL.
Pra, ne zakonisht të përcaktojë strukturat tona në krye të programeve tona
sepse jeni me siguri do për t'u përdorur me funksione të shumëfishta.
Ne nuk duam të përcaktojë një struct brenda një funksioni,
sepse atëherë ne mund të only-- Shtrirja e strukturës me të vërtetë
ekziston vetëm brenda atë funksion.
Ne ndoshta do të duan për të përcaktuar një strukturë kështu që ne mund ta përdorin atë në funksione të shumta,
ose ndoshta në shumëfish fotografi që janë të lidhura së bashku
për të krijuar programin tonë të vetme.
Ndonjëherë edhe vend e përcaktimit të strukturës
në shumë të lartë ku ju vënë tuaj kile përfshin dhe mina jote përcakton,
për shembull, ju mund të vënë ato në veçanta fotografi dot h, të cilat ju pastaj
kile përfshijnë veten.
>> Pra, ne kemi struktura, por tani ne kemi nevojë për të marrë brenda prej tyre.
Si mund të merrni brenda një strukturë për qasje
këto nën-variabla, atyre variablave që ekzistojnë brenda strukturës?
E pra, ne kemi diçka që quhet dot operatori, i cili na lejon
për të hyrë në fushat e strukturës.
Kështu për shembull, le të thonë se unë e kam deklaruar të dhënat e mia Struktura shkruani diku
në krye të programit tim, ose ndoshta në një skedar dot h që unë kam paund përfshira.
Në qoftë se unë dua të krijuar një të ri ndryshueshme e atij lloji të dhënave, unë mund të them,
makinë struct, makina ime, pikëpresje.
Ashtu si unë mund të them int x, ose emrin string pikëpresje.
>> Lloji dhënat këtu është makina struct, emri i variablit është makina ime,
dhe pastaj unë mund të përdorni dot operatorit të hyni në fushat e ndryshme të makinës sime.
Kështu që unë mund të them makinën time dot vit është e barabartë me 2011.
Kjo është e përkryer gjobë.
Vit, në qoftë se ju kujtohet, ishte përcaktuar si një fushë integer brendësi të kësaj makine struct
lloj të të dhënave.
Kështu që çdo ndryshueshme e të dhënave të makinës struct lloji, të tilla si makinën time, unë mund të them makinën time
dot vit është e barabartë dhe pastaj të caktojë ajo disa vlera integer, 2011.
Makinë dot im pjatë barabartë CS50.
Kartë dot My rrugëmatës është e barabartë me 50505 pikëpresje.
Të gjithë ata janë përkryer gjobë dhe kjo është
si ne hyrë në fusha të strukturës.
Strukturat, megjithëse, nuk kanë nevojë të krijohet në rafte.
Ashtu si çdo variabël tjetër, ne dinamike mund të ndajë ato.
Në qoftë se ne kemi një program që fuqia të gjeneruar shumë struktura,
ne nuk e dimë se sa shumë ne jemi duke shkuar për nevojë,
atëherë ne kemi nevojë për dinamike ndajë ato struktura
si programin tonë po kandidon.
Dhe kështu që në qoftë se ne jemi duke shkuar për të hyrë në Fushat e një strukture në këtë kontekst,
kujtojnë se ne së pari duhet të dereference tregues të strukturës,
dhe pastaj një herë ne dereference akrep, atëherë ne mund të hyni fushat.
Në qoftë se ne kemi vetëm një tregues për strukturën,
ne nuk mund të them vetëm akrep dot fushë emrin dhe për të marrë atë që ne jemi duke kërkuar për.
Ka një hap shtesë e dereferencing.
Pra, le të themi se në vend të previous--
ashtu si shembullin e mëparshëm, në vend të deklaruar atë
në rafte, makinë struct, im makinë, pikëpresje, unë them makinën struct,
yll, një tregues për një makinë struct quajtur makinën time,
është e barabartë me madhësinë malloc e makinave struct.
Madhësia e ne do të kuptoj se sa shumë bytes ri lloji juaj të dhënave merr.
Ju nuk domosdoshmërisht duhet vetëm të përdorni Madhësia e, gjerësi, int, ose char, ose ndonjë
i ndërtuar në lloje të të dhënave.
Përpiluesi është mjaft i zgjuar të kuptoj se si shumë bytes
janë të kërkuara nga struktura tuaj të re.
Kështu që unë malloc vetes një njësi e kujtesës mjaft e madhe për të mbajtur një makinë struct,
dhe unë të marrë një akrep mbrapa në atë bllok të memories,
dhe se akrep është caktuar për makinën time.
>> Tani, në qoftë se unë dua të qasjes fushat e makinën time,
Për herë të parë dereference makinën time duke përdorur operatori dereference, yll
që ne kemi parë nga pointers video, dhe pastaj pas I dereference,
atëherë unë mund të përdorni dot operatorit të hyni në fushat e ndryshme të makinës sime.
Star makinën time dot vit është e barabartë me 2011.
Kjo do të ketë efekt të ne duam në këtë rast,
sepse ne kemi dinamike ndarë makinën time.
>> Kjo është lloj i bezdisshëm, edhe pse, e drejtë?
Ka një proces tani 2-hap.
Tani ne duhet të dereference-- ne kemi një operator yll,
dhe ne kemi një operator dot.
Dhe si ju mund të presin, sepse C programuesit dashuri mënyra më të shkurtra
për të bërë gjëra, ekziston një Mënyra më e shkurtër për të bërë këtë.
Nuk është një tjetër operator i quajtur shigjetë, që e bën këtë proces shumë më e lehtë.
Mënyra shigjetë punon është ajo dereferences parë
tregues në të majtë Ana e operatorit,
dhe pastaj, pas dereferenced tregues në të majtë,
ajo accesses në fushë në të djathtë.
Dhe kështu më parë kemi pasur këtë lloj e yllit makina ime dot të gjitha stuff këtë,
si nuk ishte një shumë ndodh atje.
Por ajo që ne mund të bëjmë në vend të kësaj është this-- My Car shigjetë vit është e barabartë me 2011.
>> Përsëri, çfarë po ndodh këtu?
Së pari, unë jam dereferencing makinën time.
E cila sërish, është një tregues këtu.
Pastaj, pasi dereferenced makinën time, unë
atëherë mund të hyni fushat vit, pjatë, dhe rrugëmatës
ashtu si unë mund të para se të paturit e parë Ylli i përdorur për të dereference makinën time,
dhe dot për të hyrë në fushë.
Kështu që ju mund të keni struktura, ju mund të ketë pointers në strukturat,
dhe ju keni mënyra për qasje fushat e këtyre strukturave,
nëse keni pointers për ata ose vetë variablave.
Dot apo shigjetë, në varësi të si u shpall ndryshueshme.
Unë jam Doug Lloyd, kjo është CS50.