>> [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 窶銀久oi.
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 窶銀蟻uton?
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.