>> [TÓNLIST spila]
>> DOUG LLOYD: OK.
Við höfum unnið með heiltölur, við höfum unnið með stafi,
við höfum unnið fljóta, tvöfaldar, strengir og bools.
Við höfum búinn nánast öll af [inaudible] gerðum sem
hafa verið í boði fyrir okkur alla tíð.
En nú viljum við að gera eitthvað meira.
Hvernig gerum við það?
Hvernig eigum við að búa til mismunandi gerðir gagna?
Við getum gert það með því að nota mannvirki.
Svo mannvirki leyfa okkur að sameina breytur af mismunandi gerðum
í eitt nýtt breytilegum tegund, sem við getum framselja eigin tegund heiti þess.
Þetta er mjög sterkt hlutur til að vera fær um að gera,
vegna þess að við getum nú hópur þættir mismunandi tegundir gagna
saman að hafa rökrétt tengsl.
Við höfum getað til að gera þetta með fylki konar, ekki satt?
Við getum hópur breytur af sömu gögn tegund
saman í stórum eining af minni, fylki.
>> En við höfum ekki verið fær um að blanda upp mismunandi gerðir gagna saman.
Við getum ekki, segja, para heiltölu og eðli, og tvöfaldur allt
í sama og kalla að einni einingu.
En með mannvirki eða oft nefndur structs,
við getum í raun.
Svo er uppbygging konar af eins og a frábær breytu.
Það er breyta sem inniheldur aðrar breytur inni af því.
Svo er hér dæmi um mjög einfalt skipulag.
Þetta er það sem setningafræði myndi líta eins og að búa til skipulag fyrir bíl.
Nú, við skulum fara í gegnum setningafræði hér.
Strúktúr, það er leitarorð sem sýnir
að ég er að búa til ný gögn tegund hér.
Einkum nafn gögn tegund er að fara að vera struct bíll, eins og við munum sjá.
En þetta er tegund af þjórfé burt til þýðanda sem þetta
sem hópur af breytum sem er að fara til að teljast hluti af sömu tegund
í eina mínútu.
>> Bíla, bara nafn á skipulagi.
Again, the gögn gerð hér er að fara að vera struct bíll, ekki bara bíll.
En ef þú ert með different-- ef þú býrð til margar structs
í sama program, þú þarft að greina á milli strúktúrinn og strúktúr.
Svo struct bíll, gæti ég líka að hafa struct nemi, til dæmis,
í sama forrit.
Inni hrokkið axlabönd eru allar svokölluðu sviðum,
eða fulltrúar í byggingu.
Svo hvaða ert sumir af þeim hlutum sem felast í bíl?
Jæja, það hefur yfirleitt á ári, hefur fyrirmynd nafn og leyfisveitandi diskur,
An kílómetramælirinn sem yfirleitt hefur sumir fjöldi kílómetra á það,
og kannski vél stærð.
Og eins og þú geta sjá, ég er að blanda upp heiltölur og stafir og tvöfaldar.
Þeir eru allir að fara að vera hluti af þessari nýju gögn tegund.
>> Loks kemur síðas hlutur sem ég þarf að gera, ekki gleyma þessu litla semíkommu
í lokin.
Eftir að við klára að skilgreina uppbyggingu, við þurfum að setja semíkommu í lokin.
Það er mjög algengt syntactical mistök, vegna þess að með fall,
til dæmis, myndir þú bara hafa opinn hrokkið Brace, nálægt hrokkið Brace.
Þú setur ekki semíkommu minnsta endir virka skilgreiningu.
Þetta lítur út eins aðgerð skilgreining, en það er ekki,
og svo semíkommu það er bara áminning um að þér
þarf að setja það þar, því þýðandinn mun annars ekki
hvað ég á að gera við það.
Það er mjög algeng villa að tilviljun gera
þegar þú ert að skilgreina mannvirki.
>> OK.
Þannig að við skilgreinum venjulega mannvirki okkar á the mjög toppur af verkefnum okkar
því þeir eru líklega að fara til að nota við margar aðgerðir.
Við viljum ekki að skilgreina struct inni í virka,
því þá getum við only-- að Umfang uppbyggingu í raun
aðeins til inni að virka.
Við myndum sennilega vilja til að skilgreina uppbyggingu svo við getum notað það í margar aðgerðir,
eða kannski í mörgum skrár sem eru bundnar saman
til að búa til eina dagskrá okkar.
Stundum einnig stað skilgreina uppbyggingu
á the mjög toppur þar sem þú setur þinn pund nær og pund þitt skilgreinir
til dæmis, þú gætir sett þá í sérstakar skrár punktur h, sem þér þá
pund eru sjálfur.
>> Þannig að við höfum mannvirki, en nú við þurfum að fá inni af þeim.
Hvernig eigum við að fá inni uppbygging til aðgang
þessir undir-breytur, þeim breytum sem eru fyrir hendi inni í byggingu?
Jæja, höfum við eitthvað sem heitir punkturinn rekstraraðila, sem gerir okkur
að fá aðgang að sviðum uppbyggingu.
Svo til dæmis, við skulum segja að ég hef lýst Uppbygging gögn mín slá einhvers staðar
efst á áætlun mína, eða kannski í punktur klst skrá sem ég hef pund innifalinn.
Ef ég vil þá að búa til nýja breyta þeirrar gögn gerð, get ég sagt,
struct bíll, bíllinn minn, semíkommu.
Bara eins og ég gæti sagt int x, eða nafn string semíkommu.
>> The gögn tegund hér er struct bíll, nafn breytu er bíllinn minn,
og þá get ég notað punktur stjórnandi til aðgang að ýmsum sviðum bílnum mínum.
Svo ég get sagt bílinn minn punktur ári jafngildir 2011.
Það er fullkomlega í lagi.
Ári, ef þú manst, var skilgreind sem heiltala sviði inni þessa struct bíl
gögn tegund.
Svo allir breyta um strúktúr bíll gögnum gerð, svo sem bílinn minn, á ég að segja bílinn minn
punktur ári jafningjar og þá úthluta það sumir heiltala gildi 2011.
Bíllinn punktur plata minn jafngildir CS50.
Kort punktur minn kílómetramæli jafngildir 50505 semíkommu.
Allir sem eru fullkomlega í lagi og það er
hvernig við aðgang að sviðum uppbyggingu.
Mannvirki, þó þarf ekki að vera búin á mánudaginn.
Rétt eins og önnur breytu, við geta dynamically úthluta þeim.
Ef við erum með forrit sem gæti að búa mörg mannvirki,
við vitum ekki hversu margir við erum að fara að þurfa,
þá þurfum við að virk úthluta þeim mannvirki
eins kerfis okkar er í gangi.
Og svo ef við erum að fara að fá aðgang að sviðum uppbyggingu í því samhengi,
muna að við þurfum fyrst að dereference bendillinn að uppbyggingu,
og þá þegar við dereference á músina, þá getum við nálgast reitina.
Ef við höfum aðeins bendi á uppbyggingu,
getum við ekki bara að segja bendi punktur sviði nafn og fá það sem við erum að leita að.
Það er auka skref af dereferencing.
Svo skulum segja að í stað þess að previous--
bara eins og fyrra dæmi, í stað þess að lýsa það
á mánudaginn, struct bíll, minn bíll, semíkommu, segi ég strúktúr bíl,
stjarna, bendi a struct bíll heitir bílinn minn,
jafngildir malloc stærð struct bíl.
Stærð Við munum reikna út hversu margar bæti ný gögn tegund tekur upp.
Þú þarft ekki endilega aðeins þarf að nota stærð, breidd, int, eða bleikju eða einhverju
af the innbyggður-í gögn gerðum.
Þýðandinn er sviði nógur að reikna út hversu margir bæti
eru skyldugir samkvæmt nýju skipulagi þinn.
Svo ég malloc mér eining minni nógu stór til að halda strúktúr bíl,
og ég fæ bendi aftur þeirri blokk af minni,
og að bendillinn er úthlutað í bílinn minn.
>> Nú, ef ég vil aðgang akurland bílinn minn,
Ég fyrst dereference bílinn minn með sem dereference rekstraraðila, stjarna
sem við höfum séð frá ábendingum myndbönd, og þá eftir að ég dereference,
þá get ég notað punktur stjórnandi til aðgang að ýmsum sviðum bílnum mínum.
Stjörnu bílinn minn punktur ári jafngildir 2011.
Það myndi hafa áhrif við viljum í þessu tilfelli,
vegna þess að við höfum mjög virk úthlutað bílinn minn.
>> Það er góður af pirrandi, þó, ekki satt?
Það er 2-þrepa ferli núna.
Nú verðum við að dereference-- við höfum stjörnu rekstraraðila,
og við erum með punktur rekstraraðila.
Og eins og þú might búast við, vegna þess að C forritari elska styttri leiðir
að gera hlutina, það er styttri leið til að gera þetta.
Það er annar stjórnandi heitir ör, sem gerir þetta ferli mun auðveldara.
Leiðin arrow virkar það fyrsta dereferences
bendillinn á vinstri hlið rekstraraðila,
og þá, eftir að hafa dereferenced bendillinn á vinstri
það notar á sviði á hægri.
Og svo áður við höfðum svona af Star bílinn minn punktur þetta allt,
eins og það var mikið um að vera þar.
En það sem við getum í staðinn gert er this-- bíll arrow árið mitt jafngildir 2011.
>> Aftur, hvað er að gerast hér?
Fyrst, ég er dereferencing bílinn minn.
Sem aftur, er bendi hér.
Þá, eftir að hafa dereferenced bílinn minn, ég
getur opnað reitina ári, plata, og kílómetramæli
bara eins og ég gat áður en fyrsta notað stjarna til dereference bílinn minn,
og punktur til að fá aðgang að sviði.
Svo er hægt að hafa mannvirki, þú getur haft ábendingum mannvirki,
og þú hefur leiðir til að nálgast akurland þessara mannvirkja,
hvort sem þú ert ábendingum til þá eða breytur sig.
Dot eða arrow eftir hvernig breyta var lýst.
Ég er Doug Lloyd, þetta er CS50.