>> [Speel van musiek]
>> DOUG LLOYD: OK.
Ons het gewerk met heelgetalle, Ons het gewerk met karakters,
Ons het gewerk dryf, dubbelspel, stringe en bools.
Ons het mooi uitgeput much al van die [onhoorbaar] tipes wat
het saam beskikbaar vir ons almal was.
Maar nou wil ons iets meer te doen.
Hoe kan ons dit doen?
Hoe weet ons die verskillende tipes data te skep?
Ons kan dit doen deur die gebruik van strukture.
So strukture toelaat om ons te verenig veranderlikes van die verskillende tipes
in 'n enkele, nuwe veranderlike tipe, waarin ons sy eie soort naam kan toewys.
Dit is 'n baie sterk ding om in staat wees om te doen,
want ons kan nou die groep elemente van verskillende tipes data
saam dat 'n logiese verband het.
Ons het in staat om dit te doen nie met skikkings soort, reg?
Ons kan veranderlikes groep van dieselfde tipe data
saam in 'n groot eenheid geheue, 'n skikking.
>> Maar ons het nie in staat was om te meng up verskillende tipes data saam.
Ons kan nie sê, paar 'n heelgetal, en 'n karakter, en 'n dubbele al
in die dieselfde ding en noem dat 'n enkele eenheid.
Maar met strukture, of dikwels na verwys as structs,
ons eintlik kan.
So 'n struktuur is 'n soort soos 'n super veranderlike.
Dit is 'n veranderlike wat bevat ander veranderlikes binnekant van dit.
So hier is 'n voorbeeld van 'n baie eenvoudige struktuur.
Dit is wat die sintaksis sou kyk graag 'n struktuur te skep vir 'n motor.
Nou, laat ons gaan deur die sintaksis hier.
Struct, dit is die term wat dui
dat ek 'n nuwe soort data hier.
In die besonder, die naam van die tipe se data is gaan struct motor, soos ons sal sien.
Maar dit is die soort van punt af na die samesteller dat dit
as 'n groep van veranderlikes wat gaan word beskou as deel van dieselfde soort
in 'n minuut.
>> Motors, net die naam van die struktuur.
Weereens, die tipe hier data gaan om struct motor, nie net die motor wees.
Maar as jy different-- het as jy verskeie structs skep
in dieselfde program, moet jy onderskei tussen struct en struct.
So struct motor, het ek dalk ook struct student, byvoorbeeld,
in dieselfde program.
Binnekant van die krulhakies is al die sogenaamde velde,
of lede van die struktuur.
So, wat is 'n paar van die dinge wat inherent in 'n motor?
Wel, dit het gewoonlik 'n jaar, het 'n model naam, en 'n lisensie plaat,
'n odometer wat gewoonlik sommige aantal myl oor dit,
en miskien 'n enjin grootte.
En soos jy kan sien, ek meng heelgetalle en karakters en dubbelspel.
Hulle is almal gaan wees deel van hierdie nuwe tipe data.
>> Laastens, die finale ding wat ek nodig het om te doen, moenie vergeet hierdie klein kommapunt
aan die einde.
Nadat ons klaar die definisie van die struktuur, ons nodig het om 'n kommapunt aan die einde te plaas.
Dit is 'n baie algemene sintaktiese fout, want met 'n funksie,
byvoorbeeld, sou jy net oop krullerige brace, naby krullerige brace.
Jy hoef nie 'n kommapunt aan die einde van 'n funksie definisie.
Dit lyk soos 'n funksie definisie, maar dit is nie,
en so die kommapunt daar is net 'n herinnering dat jy
nodig het om dit daar te vestig, want samesteller sal andersins nie
weet wat om te doen met dit.
Dit is 'n baie algemene fout om per ongeluk te maak
wanneer jy die eerste keer die definisie strukture.
>> OK.
So het ons gewoonlik ons ​​strukture te definieer op die top van ons programme
omdat hulle waarskynlik gaan om gebruik te word deur verskeie funksies.
Ons wil nie 'n definieer struct binnekant van 'n funksie,
want dan kan ons die only-- omvang van die struktuur regtig
net bestaan ​​binne daardie funksie.
Ons sou waarskynlik wil hê om 'n struktuur te definieer sodat ons dit kan gebruik in verskeie funksies,
of dalk in verskeie lêers wat saam vasgebind
ons enkele program te skep.
Soms ook plaas van die definisie van die struktuur
op die heel boonste waar jy jou pond sluit en u pond definieer,
byvoorbeeld, kan jy hulle in aparte dot h lêers, wat jy dan
pond sluit jouself.
>> So het ons strukture, maar nou ons moet aan die binnekant van hulle te kry.
Hoe kry ons binnekant van 'n struktuur om toegang
diegene sub-veranderlikes, daardie veranderlikes wat bestaan ​​binne die struktuur?
Wel, ons het iets genoem die dot-operateur, wat ons toelaat
om toegang tot die velde van die struktuur.
So byvoorbeeld, kom ons sê ek het verklaar my struktuur data tik iewers
aan die bokant van my program, of dalk in 'n dot h lêer wat ek pond ingesluit.
As ek wil dan na 'n nuwe te skep veranderlike van daardie tipe data, kan ek sê,
struct motor, my motor, kommapunt.
Net soos wat ek kon sê int x, of naam string kommapunt.
>> Die tipe hier data is struct motor, die naam van die veranderlike is my motor,
en dan kan ek die dot operateur om te gebruik toegang tot die verskillende velde van my motor.
So ek kan my motor sê dot jaar gelyk 2011.
Dit is heeltemal fyn.
Jaar, as jy onthou, is gedefinieer as 'n heelgetal veld binne hierdie struct motor
tipe data.
So 'n veranderlike van die struct motor data tipe, soos my motor, het ek kan my motor sê
dot jaar gelyk en dan wys dit 'n heelgetal waarde 2011.
My motor dot plaat gelyk CS50.
My kaart dot odometer gelyk 50505 kommapunt.
Al wat is heeltemal fyn, en dis
hoe ons toegang tot die velde van die struktuur.
Strukture, al is, hoef nie geskep moet word op die stapel.
Net soos enige ander veranderlike, ons kan hulle dinamiese toewys.
As ons 'n program wat kan genereer baie strukture,
ons weet nie hoeveel ons gaan nodig,
dan moet ons dinamiese toeken die strukture
as ons program loop.
En so as ons gaan die toegang velde van 'n struktuur in daardie konteks,
Onthou dat ons eers moet dereference die wyser na die struktuur,
en dan wanneer ons dereference die wyser, dan kan ons toegang tot die velde.
As ons net 'n wyser na die struktuur,
Ons kan nie net wyser dot veld sê noem en kry wat ons soek.
Daar is die ekstra stap van dereferencing.
So kom ons sê dat in plaas van die previous--
net soos die vorige voorbeeld, in plaas van verklaar dat dit
op die stapel, struct motor, my motor, kommapunt, sê ek struct motor,
star, 'n verwysing na 'n struct motor het my motor,
gelyk malloc grootte van struct motor.
Grootte van ons sal uitvind hoeveel grepe jou nuwe tipe data neem.
Jy hoef nie noodwendig net nodig om te gebruik grootte van, breedte, int of char, of enige
van die gebou in die tipes data.
Die samesteller is slim genoeg om uit te vind hoeveel bytes
vereis word deur jou nuwe struktuur.
So ek malloc myself 'n eenheid van die geheue groot genoeg om 'n struct motor te hou,
en ek kry 'n wyser terug dat die blok van die geheue,
en dat wyser is opgedra aan my motor.
>> Nou, as ek wil toegang die velde van my motor,
Ek het eers dereference my motor met behulp van die dereference operateur, ster
wat ons gesien het uit die wysers video's, en dan nadat ek dereference,
dan kan ek die dot operateur om te gebruik toegang tot die verskillende velde van my motor.
Ster my motor dot jaar gelyk 2011.
Dit sou die effek ons wil in hierdie geval,
want ons het dinamies my motor toegeken.
>> Dit is soort van irriterende, al is, reg?
Daar is 'n 2-stap proses nou.
Nou moet ons dereference-- ons het 'n ster-operateur,
en ons het 'n dot-operateur.
En as jy kan verwag, want C programmeerders lief korter maniere
om dinge te doen, daar is 'n korter manier om dit te doen nie.
Daar is 'n ander operateur genoem pyl, wat maak hierdie proses 'n baie makliker.
Die manier waarop pyl werk is dit die eerste dereferences
die wyser aan die linkerkant kant van die operateur,
en dan, nadat dereferenced die wyser op die linkerkant,
dit toegang tot die veld aan die regterkant.
En so het ons voorheen dié soort Star my motor dot al hierdie dinge,
soos daar was 'n baie gaan op daar.
Maar wat kan ons doen in plaas this-- is my motor pyl jaar gelyk 2011.
>> Weereens, wat hier gebeur?
Eerstens, ek dereferencing my motor.
Wat weer, is 'n wyser hier.
Dan, nadat dereferenced my motor, het ek
kan dan toegang tot die velde jaar, plaat, en odometer
net soos ek kon voordat hy die eerste gebruikte ster dereference my motor,
en dot om toegang tot die veld.
Sodat jy kan strukture hê, moet jy kan pointers het om strukture,
en jy het maniere om toegang die velde van die strukture,
of jy het verwysings na hulle of die veranderlikes self.
Dot of pyl, afhangende van hoe die veranderlike verklaar is.
Ek is Doug Lloyd, dit is CS50.