>> [Musik spiller]
>> DOUG LLOYD: OK.
Vi har arbejdet med heltal, Vi har arbejdet med figurer,
vi har arbejdet flåd, doubler, strygere og bools.
Vi har opbrugt temmelig alle af de [uhørligt] typer,
har været til rådighed for os alle sammen.
Men nu er vi ønsker at gøre noget mere.
Hvordan gør vi det?
Hvordan skaber vi forskellige datatyper?
Vi kan gøre det ved hjælp af strukturer.
Så strukturer tillade os at forene variabler af forskellige typer
i en enkelt, ny variabel type, som vi kan tildele sin egen type navn.
Dette er en virkelig stærk ting at være i stand til at gøre,
fordi vi kan nu gruppe elementer af forskellige datatyper
sammen, der har en logisk forbindelse.
Vi har været i stand til at gøre dette med arrays slags, ikke?
Vi kan gruppe variabler af samme datatype
sammen i en stor enhed hukommelse, et array.
>> Men vi har ikke været i stand til at blande op forskellige datatyper sammen.
Vi kan ikke, sige, parre et heltal, og en karakter, og en dobbelt alle
i det samme, og ringe, at en enkelt enhed.
Men med strukturer, eller ofte omtalt som structs,
vi faktisk kan.
Så en struktur er sortering ligesom en super variabel.
Det er en variabel, der indeholder andre variabler inde i den.
Så her er et eksempel på en meget enkel struktur.
Dette er, hvad syntaksen ville se gerne oprette en struktur for en bil.
Lad os nu gå gennem syntaksen her.
Struct, det er den søgeord, der indikerer
at jeg opretter en ny datatype her.
Især datatypen navn er kommer til at være struct bil, da vi vil se.
Men dette er slags tip ud til compileren at denne
som en gruppe af variabler, der vil skal betragtes som en del af samme type
i et minut.
>> Biler, bare navnet på strukturen.
Igen er datatypen her går at være struct bil, ikke kun bilen.
Men hvis du har different-- Hvis du opretter flere structs
i det samme program, skal du skelne mellem struct og struct.
Så struct bil, kunne jeg også have struct studerende, for eksempel
i det samme program.
Inde i de krøllede parenteser er alle de såkaldte områder,
eller medlemmer af strukturen.
Så hvad er nogle af de ting, der er forbundet med en bil?
Tja, det som regel er et år, har et modelnavn og en nummerplade,
et odometer, der normalt har nogle antal miles på det,
og måske en motorstørrelse.
Og som du kan se, jeg blande heltal og tegn og dobbeltværelser.
De er alle kommer til at være del af denne nye datatype.
>> Endelig den sidste ting, jeg skal gøre, glem ikke denne lille semikolon
i slutningen.
Efter at vi er færdig med at definere strukturen, vi nødt til at sætte et semikolon i slutningen.
Det er en meget almindelig syntaktisk fejl, fordi med en funktion,
for eksempel, ville du bare nødt åben krøllet klammeparentes tæt krøllet parentes.
Du behøver ikke sætte et semikolon på enden af ​​en funktion definition.
Dette ligner en funktion definition, men det er ikke,
og så semikolon der er blot en påmindelse om, at du
nødt til at sætte det der, fordi compileren vil ellers ikke
ved, hvad de skal gøre med det.
Det er en meget almindelig fejl at uheld gøre
når du først definere strukturer.
>> OK.
Så vi normalt definerer vores strukturer på toppen af ​​vores programmer
fordi de er sandsynligvis vil der skal anvendes af flere funktioner.
Vi ønsker ikke at definere en struct indersiden af ​​en funktion,
fordi så kan vi only-- den omfanget af strukturen virkelig
kun eksisterer inde i denne funktion.
Vi ville sandsynligvis vil definere en struktur så vi kan bruge det i flere funktioner,
eller måske i flere filer, der er bundet sammen
til at skabe vores enkelt program.
Nogle gange også i stedet at definere strukturen
på toppen, hvor du lægger din pund inkluderer og din pund definerer,
for eksempel kan du sætte dem i separate dot h-filer, som du derefter
pund omfatter dig selv.
>> Så vi har strukturer, men nu vi har brug for at komme inde i dem.
Hvordan får vi inde i en struktur for at få adgang
disse sub-variabler, disse variabler der findes inde i strukturen?
Tja, vi har noget, der hedder dot operatør, som giver os
at få adgang til de områder af strukturen.
Altså for eksempel, lad os sige, jeg har erklæret min struktur data skrive et eller andet sted
på toppen af ​​mit program, eller måske i en prik h-fil, som jeg har pund inkluderet.
Hvis jeg så ønsker at oprette en ny variabel af denne datatype, kan jeg sige,
struct bil, min bil, semikolon.
Ligesom jeg kunne sige int x, eller snor navn semikolon.
>> Datatypen her er struct bil, navnet på den variabel er min bil,
og så kan jeg bruge dot operatøren få adgang til de forskellige områder af min bil.
Så jeg kan sige min bil dot år er lig med 2011.
Det er helt fint.
År, hvis du husker, blev defineret som et talfelt inde i denne struct bil
datatype.
Så enhver variabel af struct bilen data type, såsom min bil, kan jeg sige min bil
dot år er lig med, og derefter tildele det nogle heltalsværdi 2011.
Min bil dot plade lig CS50.
Mit kort dot kilometertæller lig 50.505 semikolon.
Alle disse er helt fint, og det er
hvordan vi adgang til felter af strukturen.
Konstruktioner, dog behøver ikke der skal oprettes på stakken.
Ligesom enhver anden variabel, vi kan dynamisk tildele dem.
Hvis vi har et program, der måske være generere mange strukturer,
vi ved ikke, hvor mange Vi får brug for,
så er vi nødt til dynamisk tildele disse strukturer
da vores program kører.
Og så hvis vi kommer til at få adgang til områder af en struktur i den forbindelse,
minde om, at vi først nødt til at dereference markøren til strukturen,
og så når vi dereference den pointer, så vi kan få adgang markerne.
Hvis vi kun har en pointer til strukturen,
Vi kan ikke bare sige pointer dot felt navn og få, hvad vi leder efter.
Der er den ekstra trin dereferere.
Så lad os sige, at i stedet for previous--
ligesom det foregående eksempel, i stedet for at erklære det
på stakken, struct bil, min bil, semikolon, siger jeg struct bil,
stjerne, en pointer til en struct bil ringede til min bil,
lig malloc størrelse struct bil.
Størrelse af vi vil finde ud af, hvor mange bytes din nye datatype fylder.
Du behøver ikke nødvendigvis kun behøver at bruge størrelse, bredde, int eller char eller enhver
af de indbyggede datatyper.
Den compiler er smart nok at regne ud hvor mange bytes
kræves af din nye struktur.
Så jeg malloc mig en enhed af hukommelse stor nok til at holde en struct bil,
og jeg får en pointer tilbage denne blok af hukommelse,
og at markøren er tildelt min bil.
>> Nu, hvis jeg ønsker at få adgang områderne min bil,
Jeg først dereference min bil hjælp den dereference operatør, stjerne
at vi har set fra de pejlemærker videoer, og så efter at jeg dereference,
så kan jeg bruge dot operatøren få adgang til de forskellige områder af min bil.
Stjerne min bil dot år er lig med 2011.
Det ville have den virkning Vi ønsker i dette tilfælde
fordi vi har dynamisk tildelt min bil.
>> Det er lidt irriterende, selv om, ikke?
Der er en 2-trins proces nu.
Nu er vi nødt til at dereference-- vi har en stjerne operatør,
og vi har en prik operatør.
Og som man kunne forvente, fordi C programmører elsker kortere måder
til at gøre ting, der er en kortere måde at gøre dette.
Der er en anden operatør kaldet pil, hvilket gør denne proces meget lettere.
Den måde pil værker er det første dereferences
markøren til venstre side af den erhvervsdrivende,
og derefter, efter at have derefererede markøren til venstre,
det får adgang til feltet til højre.
Og så tidligere vi havde denne slags af Star min bil dot alle disse ting,
som der var en masse foregår der.
Men hvad vi kan i stedet gøre, er denne-- min bil pil år er lig med 2011.
>> Igen, hvad der sker her?
Først, jeg dereferere min bil.
Som igen er en pointer her.
Så efter at have derefererede min bil, jeg
kan derefter få adgang felterne år, plade, og kilometertæller
lige som jeg kunne før først at have Brugte stjerne til dereference min bil,
og prik at få adgang til området.
Så du kan have strukturer, du kan have pegepinde til strukturer,
og du har måder at få adgang områderne disse strukturer,
om du har henvisninger til dem eller de variabler selv.
Dot eller en pil, afhængigt af hvordan variablen blev erklæret.
Jeg er Doug Lloyd, det er CS50.