>> [Muziek]
>> DOUG LLOYD: OK.
We hebben gewerkt met getallen, We hebben gewerkt met karakters,
we hebben gewerkt praalwagens, doubles, strings, en bools.
We hebben vrij veel uitgeput alle van de [onverstaanbaar] soorten die
hebben samen beschikbaar voor ons allemaal.
Maar nu willen we iets meer te doen.
Hoe doen we dat?
Hoe kunnen we de verschillende soorten gegevens te maken?
We kunnen dit doen met behulp van structuren.
Dus structuren stellen ons te verenigen variabelen van verschillende types
in één nieuw type variabele, die wij zijn eigen type naam kunt toewijzen.
Dit is echt een sterke ding te kunnen doen,
want we kunnen nu groep elementen van verschillende gegevenstypen
samen met een logische verbinding.
We zijn in staat om dit te doen geweest met arrays soort, toch?
We kunnen variabelen groep van hetzelfde gegevenstype
in een grote eenheid geheugen, een array.
>> Maar we zijn niet in staat om te mengen geweest up verschillende types data samen.
We kunnen niet zeggen, koppelen een integer, en een karakter, en een dubbele alle
in hetzelfde en noem dat een enkele eenheid.
Maar met structuren, of vaak aangeduid als de structuren,
we eigenlijk kunnen.
Dus een structuur is een soort van als een super variabele.
Het is een variabele die bevat andere variabelen erin.
Dus hier is een voorbeeld van een zeer eenvoudige structuur.
Dit is wat de syntaxis zou kijken graag een structuur voor een auto.
Nu, laten we gaan door middel van de syntax hier.
Structuur, dat is de trefwoord dat aangeeft
dat ik ben het creëren van een nieuw type data hier.
Vooral de naam type van gegevens gaat struct auto, zoals we zullen zien.
Maar dit is het soort tip af voor de compiler dat deze
een groep variabelen die gaat worden beschouwd als onderdeel van hetzelfde type
binnen een minuut.
>> Auto's, alleen de naam van de structuur.
Nogmaals, het type data hier gaat naar struct auto, niet alleen auto.
Maar als je different-- hebt als u meerdere structuren creëren
in hetzelfde programma, moet u onderscheiden struct en struct.
Dus struct auto, zou ik ook struct student, bijvoorbeeld,
in hetzelfde programma.
Binnenkant van de accolades zijn alle zogenaamde velden,
of leden van de structuur.
Dus wat zijn enkele van de dingen die inherent zijn aan een auto?
Nou, het heeft meestal een jaar, heeft een modelnaam en een kenteken,
een kilometerteller die heeft meestal sommige aantal mijlen op,
en misschien een motor grootte.
En zoals je kunt zien, ben ik vermengen getallen en letters en tweepersoonskamers.
Ze gaan allemaal zijn onderdeel van dit nieuwe type van gegevens.
>> Ten slotte is het laatste wat ik moet doen, vergeet niet dit kleine puntkomma
aan het einde.
Nadat we klaar bent met het definiëren van de structuur, moeten we een puntkomma aan het einde.
Het is een veel voorkomende syntactische fout, omdat een functie,
bijvoorbeeld, zou je gewoon geopend accolade, dicht accolade.
U hoeft niet een puntkomma aan het einde van een functie-definitie.
Dit ziet eruit als een functie definitie, maar het is niet,
en zo de puntkomma er is gewoon een herinnering dat u
nodig om het daar te zetten, omdat de compiler zal anders niet
weten wat te doen.
Het is een veel voorkomende fout om per ongeluk te maken
als je eerst definiëren van structuren.
>> OK.
Dus we meestal onze structuren te definiëren aan de top van onze programma's
omdat ze waarschijnlijk gaan te gebruiken door meerdere functies.
We willen niet een te definiëren struct binnenkant van een functie,
want dan kunnen we de only-- reikwijdte van de constructie erg
Alleen bestaat binnenkant van die functie.
We zouden waarschijnlijk willen een structuur te definiëren dus we kunnen gebruiken in verschillende functies,
of misschien in meerdere bestanden elkaar verbonden
aan ons enkel programma te creëren.
Soms plaats het definiëren van de structuur
aan de top waar je je pond omvat en uw pond definieert,
bijvoorbeeld, zou je ze in afzonderlijke dot h-bestanden, die u vervolgens
pond zelf ook.
>> Dus we hebben de structuren, maar nu moeten we binnenkant van hen te krijgen.
Hoe krijgen we de binnenkant van een structuur voor toegang
die sub-variabelen, die variabelen die bestaan ​​binnen de structuur?
Nou, we hebben iets te noemen de puntoperator, die ons in staat stelt
om de velden van de constructie.
Dus bijvoorbeeld, laten we zeggen dat ik heb verklaard mijn structuur data typen ergens
bovenaan mijn programma of misschien een punt h bestand dat ik heb pond inbegrepen.
Als ik wil dan naar een nieuw te creëren variabele van dat type data, kan ik zeggen,
struct auto, mijn auto, puntkomma.
Net als ik kon zeggen int x of de naam tekenreeks puntkomma.
>> Het type hier gegevens struct auto, de naam van de variabele mijn auto,
en dan kan ik de stip operator te gebruiken toegang tot de verschillende gebieden van mijn auto.
Dus ik kan mijn auto zeggen dot jaar is gelijk aan 2011.
Dat is prima.
Jaar, als u herinneren, werd gedefinieerd als een integer gebied binnenkant van deze structuur auto
data type.
Dus een variabele van het struct auto data type, zoals mijn auto, ik kan mijn auto zeggen
dot jaar gelijk en vervolgens toewijzen het enige geheel getal 2011.
Mijn auto dot plaat gelijk CS50.
Mijn kaart dot kilometerteller gelijk aan 50.505 puntkomma.
Al deze zijn prima en dat is
hoe we toegang tot de gebieden van de structuur.
Structuren echter niet nodig te worden gemaakt op de stapel.
Net als elke andere variabele, we kunnen ze dynamisch toe te wijzen.
Als we een programma dat zou kunnen genereren vele structuren,
we weten niet hoeveel gaan we nodig hebben,
dan moeten we dynamisch toewijzen die structuren
als onze programma wordt uitgevoerd.
En dus als we gaan naar de toegang velden van een structuur in die context,
herinneren dat we eerst moeten dereferentie de aanwijzer naar de structuur,
en toen we eenmaal de dereferentie pointer, dan kunnen we toegang velden.
Als we slechts een wijzer de structuur,
We kunnen niet zomaar wijzer dot gebied te zeggen naam en krijgen wat we zoeken.
Er is een extra stap van dereferentie.
Dus laten we zeggen dat in plaats van de previous--
net als het vorige voorbeeld, in plaats van aangifte te doen
op de stapel, structuur auto, mijn auto, puntkomma, zeg ik struct auto,
ster, een pointer naar een struct auto belde mijn auto,
gelijk aan malloc grootte van struct auto.
Grootte van zullen we erachter te komen hoeveel bytes uw nieuwe data type neemt.
Je hoeft niet per se alleen moet gebruiken grootte van, breedte, int of char, of
van de ingebouwde data types.
De compiler is slim genoeg om erachter te komen hoeveel bytes
worden vereist door uw nieuwe structuur.
Dus ik malloc mezelf een eenheid van het geheugen groot genoeg om een ​​structuur auto te houden,
en ik krijg een pointer terug om dat blok van het geheugen,
en dat wijzer is toegewezen aan mijn auto.
>> Nu, als ik wil toegang de velden van mijn auto,
Ik voor het eerst dereference mijn auto met behulp de dereference operator, ster
die we hebben gezien van de pointers video's, en dan nadat ik dereferentie,
dan kan ik de stip operator te gebruiken toegang tot de verschillende gebieden van mijn auto.
Star Mijn auto dot jaar is gelijk aan 2011.
Dat zou tot gevolg hebben we willen in casu
want we hebben dynamisch mijn auto toegewezen.
>> Dat is een beetje vervelend, maar, toch?
Er is een 2-staps proces nu.
Nu moeten we dereference-- we hebben een ster exploitant,
en we hebben een punt operator.
En zoals je zou verwachten, omdat C programmeurs houden kortere wegen
om dingen te doen, is er een kortere manier om dit te doen.
Er is nog een operator genoemd pijl, waardoor dit proces een stuk eenvoudiger.
De manier waarop pijl werkt is Het eerste referentie aan
de aanwijzer links kant van de exploitant,
en vervolgens, nadat geconverteerd de aanwijzer links,
het toegang het veld rechts.
En zo eerder hadden we dit soort Star mijn auto dot al deze spullen,
alsof er was veel te doen daar.
Maar wat kunnen we in plaats daarvan doen dit-- is mijn auto pijl jaar is gelijk aan 2011.
>> Nogmaals, wat is hier aan de hand?
Ten eerste, ik ben dereferentie mijn auto.
Die opnieuw, een pointer in.
Dan, na dereferentie mijn auto, ik
kunnen vervolgens toegang tot de velden jaar, de plaat, en kilometerteller
net als ik kon voordat de eerste gebruikte ster om dereferentie mijn auto,
en dot toegang tot het veld.
Dus je kunt structuren, je kunnen pointers moeten structuren
en je hebt manieren om de toegang de gebieden die structuren,
of u verwijzingen naar hen of de variabelen zelf.
Punt of pijl, afhankelijk hoe de variabele werd verklaard.
Ik ben Doug Lloyd, dit is CS50.