>> [Musiikkia]
>> DOUG Lloyd: OK.
Olemme työskennelleet kokonaislukuja, olemme työskennelleet merkkiä,
olemme työskennelleet kellukkeet, tuplaa, jouset, ja bools.
Olemme täyttäneet jokseenkin kaikki on [äänetön] tyyppejä, jotka
ovat olleet meille koko ajan.
Mutta nyt haluamme tehdä jotain enemmän.
Miten me sen teemme?
Miten luomme erilaiset tiedot?
Voimme tehdä niin käyttämällä rakenteita.
Niin rakenteiden avulla voimme yhdistää muuttujat erityyppisten
yhdeksi, uusi muuttuja tyyppi, jonka voimme antaa oman lajin nimi.
Tämä on todella vahva asia voi tehdä,
koska voimme nyt ryhmä elementtejä erilaiset tiedot
yhdessä, että on looginen yhteys.
Olemme pystyneet tekemään tätä kanssa paneelit tavallaan, eikö?
Voimme ryhmä muuttujat samaa tietotyyppiä
yhdessä suuren yksikön muistia, array.
>> Mutta emme ole voineet sekoittaa up erilaiset tiedot yhteen.
Emme voi sanoa, pari kokonaisluku, ja luonne, ja kaksinkertainen kaikki
samassa asia ja soittaa, että yhden yksikön.
Mutta rakenteet, tai usein kutsutaan structs,
me oikeastaan ​​voi.
Joten rakenne on eräänlainen samankaltaisten Super muuttuja.
Se on muuttuja, joka sisältää muut muuttujat sen sisälle.
Joten tässä on esimerkki hyvin yksinkertainen rakenne.
Tämä on mitä syntaksi näyttäisi haluavat luoda rakenne auto.
Nyt mennään läpi syntaksin täällä.
Struct, se avainsanan, joka ilmaisee
että olen luomassa uutta tietoa tyypin täällä.
Erityisesti tietotyyppi nimi on olemaan struct auton, kuten näemme.
Mutta tämä on sellainen kärjen pois kääntäjä että tämä
ryhmänä muuttujien, joka on menossa pidettävä osana samaa tyyppiä
minuutissa.
>> Autot, vain nimi rakenteen.
Jälleen tietotyyppi täällä on menossa olla struct auto, ei vain auton.
Mutta jos sinulla on different-- jos luot useita structs
samassa ohjelmassa, sinun täytyy erottaa struct ja struct.
Joten struct auton, voisin myös struct opiskelija, esimerkiksi,
samassa ohjelmassa.
Sisältä aaltosulkeita ovat kaikki niin sanotut kentät,
tai organisaation jäsenten.
Mitkä ovat joitakin asioita jotka ovat luonnostaan ​​auton?
No, se on yleensä vuosi, on mallin nimi, ja rekisterikilpi,
matkamittari joka on yleensä jotkut määrä mailia se,
ja ehkä moottorin koon.
Ja kuten näette, olen sekoittaa kokonaislukuja ja hahmot ja nelinpelin.
He kaikki olemaan osa tätä uutta tietotyyppiä.
>> Lopuksi, viimeinen asia minun täytyy tehdä, älä unohda tätä pikku puolipiste
lopussa.
Kun päätämme määritellään rakenne, meidän täytyy laittaa puolipiste lopussa.
Se on hyvin yleinen syntaktisia virhe, koska funktiolla,
Esimerkiksi olisit vain avoin kihara ahdin, lähellä kihara ahdin.
Et laita puolipiste loppuun funktion määritelmän.
Tämä näyttää toiminto määritelmä, mutta se ei ole,
ja niin puolipiste siellä on vain muistutus siitä, että olet
täytyy laittaa sitä sinne, koska kääntäjä muuten
tiedä mitä tehdä sen kanssa.
Se on hyvin yleinen virhe vahingossa tehdä
kun olet ensin määritellään rakenteita.
>> OK.
Joten me yleensä määrittelemme rakenteet huipulla meidän ohjelmia
koska he luultavasti voidaan käyttää useita toimintoja.
Emme halua määritellä struct sisällä funktion,
koska silloin voimme only-- soveltamisala rakenne todella
vain olemassa sisällä tätä toiminnallisuutta.
Olimme luultavasti halua määritellä rakenne jotta voimme käyttää sitä useita toimintoja,
tai ehkä useita tiedostoja, jotka on sidottu yhteen
luomme yksittäisen ohjelman.
Joskus myös sijaan määritellä rakenne
huipulla, jossa laitat punta sisältää ja punta määrittelee,
esimerkiksi, saatat laittaa ne erillinen piste h tiedostoja, joita voit sitten
punta itsekin.
>> Meillä on rakenteita, mutta nyt Meidän täytyy saada sisällä niitä.
Miten saamme sisällä rakenteen pääsy
niillä osa-muuttujat, niitä muuttujia että olemassa sisällä rakenne?
No, meillä on jotain kutsutaan piste operaattori, jonka avulla voimme
käyttää aloilla rakenteen.
Niinpä esimerkiksi, sanokaamme Olen julistanut minun rakenne tiedot kirjoita jonnekin
yläreunassa minun ohjelma, tai ehkä piste h tiedoston, että olen punta mukana.
Jos minä sitten haluavat luoda uuden muuttuja että tietotyyppi, voin sanoa,
struct auto, autoni, puolipiste.
Aivan kuten Voisin sanoa int X, tai merkkijonon nimi puolipisteellä.
>> Tietotyyppi tässä struct auto, muuttujan nimi on autoni,
ja sitten voin käyttää piste operaattori käyttää eri aloilla autoni.
Voin siis sanoa autoni dot vuosi on 2011.
Se on täysin hieno.
Vuosi, jos muistatte, määriteltiin kokonaisluku kenttä sisällä tämän struct auto
tietotyyppi.
Joten kaikki muuttuja struct auton tiedot tyyppi, kuten autoni, voin sanoa autoni
dot vuosi on ja määritä se jotkut kokonaisluku, 2011.
Autoni piste levy vastaa CS50.
Oma kortti dot matkamittari vastaa 50505 puolipiste.
Kaikki nämä ovat täysin hieno ja se on
miten pääsemme aloilla rakenteen.
Rakenteet, vaikka, ei tarvitse luotava pinoon.
Aivan kuten mikä tahansa muu muuttuja, me voi dynaamisesti jakaa.
Jos meillä on ohjelma, joka saattaisi se tuottaa monia rakenteita,
emme tiedä kuinka monta aiomme tarvitsevat,
meidän täytyy dynaamisesti jakaa kyseisiä rakenteita
meidän ohjelma on käynnissä.
Joten jos aiomme päästä aloilla rakenne tässä yhteydessä,
muistaa, että meidän on ensin dereference osoitin rakenteeseen,
ja sitten kun me epäviittausongelman osoitin, niin voimme käyttää kenttiä.
Jos meillä on vain osoitin rakenne,
emme voi vain sanoa osoitin piste kenttä nimi ja saada mitä etsimme.
On ylimääräinen vaihe dereferencing.
Joten sanotaan, että sen sijaan, että previous--
aivan kuten edellisessä esimerkissä, sijasta julistaa se
pinoon, struct auto, minun auto, puolipiste, sanon struct auto,
tähti, osoitin struct auto nimeltään autoni,
vastaa malloc koko struct auton.
Koko me selvittää, kuinka monta tavua uusi tietotyyppi vie.
Sinun ei välttämättä vain tarvitse käyttää koko, leveys, int tai char, tai
ja sisäänrakennettu tietotyypit.
Kääntäjä on fiksu selvittää, kuinka monta tavua
vaatii uutta rakennetta.
Joten en malloc itselleni yksikkö muistia mahduttava struct auto,
ja saan osoitin takaisin kuin lohko muistia,
ja että osoitin on määritetty autoni.
>> Nyt, jos haluan käyttää aloilla autoni,
Haluan ensin dereference autoni käyttäen dereference operaattori, tähti
että olemme nähneet osoittimet videoita, ja sitten kun olen dereference,
sitten voin käyttää piste operaattori käyttää eri aloilla autoni.
Star autoni piste vuosi on 2011.
Että olisi vaikutusta haluamme tässä tapauksessa,
koska olemme dynaamisesti myönnetty autoni.
>> Sellainen ärsyttävää, vaikka, eikö?
Siellä on 2-vaihe prosessissa nyt.
Nyt meidän on dereference-- meillä tähti operaattori,
ja meillä on piste operaattori.
Ja kuten arvata saattaa, koska C ohjelmoijat rakastavat lyhyempi tapoja
tehdä asioita, on lyhyempi tapa tehdä tämä.
On toinenkin operaattori nimeltään nuoli, mikä tekee tämän prosessin paljon helpompaa.
Tie nuoli toimii on se ensin dereferences
osoitin vasemmalla puolella operaattori,
ja sitten, sen jälkeen kun dereferenced osoitin vasemmalla,
se pääsee kenttää oikealla.
Ja niin aiemmin meillä oli tämmöinen Star autoni piste kaikki jutut,
kuin siellä oli paljon siellä tapahtuu.
Mutta mitä voimme sen sijaan tehdä, on this-- autoni nuoli vuosi on 2011.
>> Jälleen mitä täällä tapahtuu?
Ensinnäkin, olen dereferencing autoni.
Joka taas, on osoitin täällä.
Sitten, sen jälkeen kun dereferenced autoni, minä
Tämän jälkeen voidaan käyttää kentät vuosi, levy, ja matkamittari
aivan kuin pystyin ennen kuin ensimmäinen käytetyt tähti dereference autoni,
ja piste päästä kenttään.
Joten voit olla rakenteita, sinua voi olla osoittimia rakenteet,
ja sinulla on tapoja käyttää aloilla kyseisiä rakenteita,
onko sinulla viitteitä niitä tai muuttujia itse.
Piste tai nuoli, riippuen miten muuttuja julistettiin.
Olen Doug Lloyd, tämä on CS50.