>> [Mūzikas atskaņošanai]
>> Doug LLOYD: OK.
Mēs esam strādājuši ar veseliem skaitļiem, mēs esam strādājuši ar burtiem,
mēs esam strādājuši pludiņiem, dubultspēlē, stīgas, un bools.
Mēs esam izsmeltas diezgan daudz visas no [dzirdams] veidiem, kas
ir pieejams mums visiem kopā.
Bet tagad mēs vēlamies darīt kaut ko vairāk.
Kā mēs to darām?
Kā mēs izveidot dažādu datu tipu?
Mēs varam izdarīt, izmantojot struktūras.
Tātad struktūras ļauj mums apvienot mainīgie dažādu veidu
vienā, jaunas mainīgo tipa, ko mēs varam piešķirt savu tipa nosaukumu.
Tas ir patiešām spēcīga lieta, lai varētu darīt,
jo mēs varam tagad grupa elementi dažādiem datu veidiem
kopā, ka ir loģiska saikne.
Mēs esam spējuši to izdarīt ar bloki veida, vai ne?
Mēs varam grupas mainīgie no tā paša datu tipa
kopā lielā vienībā atmiņas, masīva.
>> Bet mēs neesam spējuši sajaukt up dažādi datu veidi kopā.
Mēs nevaram, teiksim, pāris vesels skaitlis, un raksturs, un dubultā visu
ar vienu un to pašu un piezvanīt, ka par vienu vienību.
Bet ar struktūrām, vai bieži saukta structs,
mēs tiešām varam.
Tātad struktūra ir sava no kā super mainīgs.
Tas ir mainīgais, kas satur citi mainīgie iekšpusē no tā.
Tātad, šeit ir piemērs ļoti vienkārša struktūra.
Tas ir tas, ko sintakse izskatītos vēlētos izveidot struktūru automašīnai.
Tagad, iesim cauri sintaksi šeit.
Struktūrai, tas ir atslēgvārdu, kas norāda
ka es esmu veidojot jaunu datu tipu šeit.
Jo īpaši, datu tips vārds ir būs struct auto, jo mēs redzēsim.
Bet tas ir sava veida galu off kompilatoru, ka šis
kā grupa mainīgajiem lielumiem, kas notiek uz uzskatāms par daļu no tā paša tipa
minūti.
>> Cars, tikai nosaukums struktūru.
Atkal, datu tips šeit notiek būt struct auto, ne tikai auto.
Bet, ja jums ir different-- ja jums izveidot vairākas structs
tajā pašā programmā, jums ir nepieciešams, lai atšķirt struktūrai un struktūrai.
Tātad struct auto, es varētu arī būt struktūrai students, piemēram,
tajā pašā programmu.
Iekšpusē cirtaini lencēm ir visas no tā saukto laukiem,
vai locekļi struktūru.
Tātad, kādi ir daži no lietām kas ir raksturīgi automašīnā?
Nu, tas parasti ir gads, ir modelis nosaukumu, un licence plate,
odometra, kas parasti ir dažas jūdzes uz to skaits,
un varbūt dzinēja lieluma.
Un, kā jūs varat redzēt, es esmu sajaucot veseli skaitļi un zīmes un dubultspēlēs.
Viņi visi būs daļa šo jauno datu tipu.
>> Visbeidzot, pēdējais, ko es jādara, neaizmirstiet šo mazo semikolu
beigās.
Kad mēs pabeidzis definētu struktūru, mums ir nepieciešams likt semikolu beigās.
Tas ir ļoti bieži sintakses kļūda, jo ar funkciju,
Piemēram, jūs varētu vienkārši ir atvērts cirtaini lencēm, tuvu cirtaini lencēm.
Jums nav likt semikolu pie beigas funkciju definīcijas.
Tas izskatās kā funkcija definīcija, bet tā nav,
un tā semikolu tur ir tikai atgādinājums, ka jums
nepieciešams, lai to tur, jo kompilators citādi nav
zināt, ko darīt ar to.
Tas ir ļoti bieži kļūda nejauši padarīt
kad jūs pirmo reizi nosakot struktūras.
>> LABI.
Tāpēc mēs parasti definēt savas struktūras pašā augšā mūsu programmu
jo viņi, iespējams, gatavojas , ko izmanto ar vairākām funkcijām.
Mēs nevēlamies, lai definētu struct iekšpusē funkciju,
jo tad mēs varam only-- joma struktūras patiešām
pastāv tikai iekšpusē šo funkciju.
Mēs droši vien vēlaties, lai noteiktu struktūru lai mēs varētu to izmantot vairākas funkcijas,
vai varbūt sastāvus faili, kas ir saistītas kopā
izveidot savu vienotu programmu.
Dažreiz arī vietā definēšanas struktūru
pašā augšā, kur jūs nodot savu mārciņa ietver un jūsu mārciņa definē,
Piemēram, jūs varētu nodot tos atsevišķas dot h failus, kas jums pēc tam
mārciņa iekļaut sevi.
>> Tāpēc mums ir struktūras, bet tagad mums ir nepieciešams, lai saņemtu iekšpusē no tiem.
Kā mēs nokļūt iekšpusē struktūra, lai piekļūtu
šie apakšprogrammas mainīgie, šie mainīgie ka pastāv iekšpusē struktūru?
Nu, mums ir kaut ko sauc dot operatoram, kas ļauj mums
piekļūt laukus struktūru.
Tā, piemēram, pieņemsim, ka es esmu deklarēts mani struktūra datu tips kaut kur
augšpusē manu programmu, vai varbūt Punkts h failu, kas es esmu mārciņu iekļauti.
Ja nu es gribu, lai izveidotu jaunu mainīgais šī datu tipu, es varu teikt,
struct auto, mans auto, semikols.
Tāpat kā es varētu teikt int x, vai stīgu nosaukums semikols.
>> Datu tips šeit ir struct auto, nosaukums mainīgais ir mans auto,
un tad es varu izmantot dot operatoram piekļūt dažādām jomām manu auto.
Tāpēc es varu teikt, ka mana auto dot gads vienāds 2011.
Tas ir pilnīgi naudas sodu.
Gadā, ja jūs atceraties, tika definēta kā skaitlis lauka iekšpusē šo struct auto
datu tips.
Tāpēc jebkura mainīgo no struct automašīnas datiem tips, piemēram, manu auto, es varu teikt, ka mana auto
dot gads ir vienāds, un tad uzdot tā daži veselais skaitlis, 2011.
Mans auto dot plate vienāds CS50.
Mana karte dot odometra vienāds 50505 semikolu.
Visi no tiem ir pilnīgi naudas sodu, un tas ir
kā mēs piekļūt lauki struktūru.
Konstrukcijas, lai gan, nav nepieciešams jāizveido uz skursteņa.
Tāpat kā jebkuru citu mainīgo, mēs var dinamiski sadalīt tos.
Ja mums ir programma, kas varētu tikt radot daudzas struktūras,
mēs nezinām, cik daudz mēs ejam nepieciešama,
tad mums ir nepieciešams, lai dinamiski iedalīt šīs struktūras
kā mūsu programma darbojas.
Un tāpēc, ja mēs ejam, lai piekļūtu jomas struktūru šajā kontekstā
atgādināt, ka mums vispirms ir izlietota rādītāju uz struktūru,
un tad, kad mēs dereference rādītājs, tad mēs varam piekļūt laukus.
Ja mums ir tikai rādītāju uz struktūru,
mēs nevaram vienkārši teikt rādītājs dot laukumā nosaukt un saņemt to, ko mēs meklējam.
Tur ir papildu solis dereferencing.
Tātad pieņemsim, ka vietā previous--
tāpat kā iepriekšējā piemērā, nevis nedeklarējot
uz skursteņa, struct auto, mans auto, semikols, es saku struct auto,
zvaigzne, rādītāju uz struct auto sauc savu auto,
vienāds malloc lielumu struct automašīnu.
Izmērs mēs saprast, cik daudz baiti savu jauno datu tips aizņem.
Jums nav obligāti tikai nepieciešams, lai izmantotu izmērs, platums, INT, vai palijas, vai kādu
no iebūvētajiem datu tipiem.
Kompilators ir pietiekami gudrs izrēķināt, cik daudz baitu
ko prasa savu jauno struktūru.
Tāpēc es malloc sevi vienība atmiņas pietiekami liela, lai turēt struct auto,
un man rādītāju atpakaļ šai bloka atmiņas,
un ka rādītājs ir piešķirts manu auto.
>> Tagad, ja es gribu, lai piekļūtu rīcības jomas manu auto,
Es pirmo reizi dereference manu auto, izmantojot dereference operators, zvaigzne
ka mēs esam redzējuši no norādes video, un tad kad es izlietota,
tad es varu izmantot dot operatoram piekļūt dažādām jomām manu auto.
Zvaigzne savu auto dot gads vienāds 2011.
Tas ir efekts mēs gribam šajā gadījumā,
jo mēs esam dinamiski piešķirti savu auto.
>> Tas ir sava veida kaitinošas, lai gan, vai ne?
Tur ir 2-step process tagad.
Tagad mums ir dereference-- mums ir zvaigzne operators,
un mums ir dot operatoram.
Un, kā jūs varētu gaidīt, jo C programmētāji mīlestība īsākus ceļus
darīt lietas, tur ir īsāks veids, kā to izdarīt.
Ir vēl viens operators sauc bultiņa, kas padara šo procesu daudz vieglāk.
Veids arrow darbiem ir tas pirmais dereferences
rādītājs pa kreisi puse no operatora,
un pēc tam, pēc tam, kad dereferenced rādītājs pa kreisi,
tas piekļūst lauka labajā pusē.
Un tā agrāk mums bija šāda veida Star mans auto dot visu šo stuff,
kā tur bija daudz kas notiek tur.
Bet ko mēs varam darīt, nevis ir this-- mans auto arrow gadā ir vienāds 2011.
>> Atkal, kas notiek šeit?
Pirmkārt, es esmu dereferencing savu auto.
Kas atkal, ir rādītājs šeit.
Tad, pēc tam, kad dereferenced savu auto, es
Pēc tam var piekļūt laukus gadā, plate, un odometra
tāpat kā es varētu, pirms pirmā lietota zvaigzne dereference manu auto,
un dot piekļūt lauku.
Tātad jūs varat būt struktūras, jūs var būt norādes uz struktūrām,
un jums ir veidi, kā piekļūt lauki šādu struktūru,
vai jums ir norādes uz viņiem vai paši mainīgie.
Dot vai bultiņa, atkarībā no kā mainīgais tika pasludināts.
Es esmu Doug Lloyd, tas ir CS50.