>> [MUSIC JOC]
>> DOUG LLOYD: OK.
Am lucrat cu numere întregi, am lucrat cu personaje,
am lucrat flotoare, duble, siruri de caractere, și bools.
Am epuizat destul de mult tot a [neauzit] tipuri care
au fost disponibile pentru noi toți de-a lungul.
Dar acum vrem să facem ceva mai mult.
Cum facem asta?
Cum putem crea diferite tipuri de date?
Putem face acest lucru prin utilizarea de structuri.
Deci, structuri ne permit să unifice variabile ale diferitelor tipuri
într-un singur, nou tip variabilă, pe care le putem atribui propriul nume de tip.
Aceasta este o foarte puternic lucru pentru a fi capabil să facă,
pentru că putem acum de grup elemente ale diferitelor tipuri de date
împreună care au o conexiune logică.
Am fost în stare să facă acest lucru cu tablouri fel de, nu?
Putem variabile de grup de același tip de date
împreună într-o unitate mare de memorie, o matrice.
>> Dar nu am fost în măsură să se amestecă up diferite tipuri de date împreună.
Nu putem, spune, asociați un număr întreg, și un caracter, și un dublu toate
în același lucru și numi asta o singură unitate.
Dar cu structuri, sau frecvent menționate ca structs,
am de fapt, poate.
Deci, o structură este un fel de ca o variabilă de super.
Este o variabilă care conține alte variabile interior.
Deci, aici e un exemplu de o structură foarte simplă.
Aceasta este ceea ce ar arata sintaxa ca să creeze o structură pentru o masina.
Acum, să mergem prin sintaxa aici.
Struct, asta e cuvinte cheie care indică
că eu sunt crearea unui nou tip de date aici.
În special, numele tipul de date este va fi masina struct, așa cum vom vedea.
Dar acest lucru este un fel de vârf off compilatorului că această
ca un grup de variabile care se întâmplă să fie considerate ca făcând parte din același tip
Intr-un minut.
>> Mașini, doar numele structurii.
Din nou, tipul de date aici se întâmplă să fie masina struct, nu doar masina.
Dar dacă aveți different-- dacă veți crea mai multe structs
în același program, aveți nevoie pentru a distinge între struct și struct.
Masina Deci struct, s-ar putea avea, de asemenea elev struct, de exemplu,
în același program.
Interioară a acolade sunt toate așa-numitele domenii,
sau membri ai structurii.
Deci, ce sunt unele dintre lucrurile care sunt inerente într-o mașină?
Ei bine, de obicei, are un an, a un nume de model, și o plăcuță de înmatriculare,
un contor de parcurs care are de obicei un numar de mile pe ea,
și poate o dimensiune motor.
Și, după cum puteți vedea, am amestecând întregi și caractere și duble.
Ei toți vor fi parte a acestui nou tip de date.
>> În cele din urmă, lucru finală trebuie să fac, nu uitați acest mic punct și virgulă
la sfarsit.
După ce am terminat de definirea structurii, avem nevoie pentru a pune un punct și virgulă la sfârșitul anului.
Este un foarte frecvente sintactic greșeală, deoarece cu o funcție,
de exemplu, ar trebui pur și simplu bretele buclat deschis, aproape bretele buclat.
Tu nu pune un punct și virgulă la capăt de definiția unei funcții.
Acest lucru arata ca o funcție definiție, dar nu este,
și așa mai departe punct și virgulă acolo este doar un memento care vă
Trebuie să-l pună acolo, deoarece compilatorul nu va altfel
știu ce să fac cu ea.
Este o eroare foarte frecvente pentru a face accidental
atunci când sunteți definirea întâi structuri.
>> BINE.
Deci, ne definim, de obicei, structurile noastre la foarte de sus a programelor noastre
pentru că ei, probabil, va pentru a fi utilizate de mai multe funcții.
Noi nu vrem să definească o struct în interiorul unei funcții,
pentru că atunci ne putem only-- Domeniul de aplicare a structurii într-adevăr
există doar în interiorul acestei funcții.
Probabil ne-ar dori pentru a defini o structură astfel încât să putem folosi în mai multe funcții,
sau, poate, în mai multe fișierele care sunt legate împreună
pentru a crea programul nostru unic.
Uneori, de asemenea, în loc de definire a structurii
la foarte de sus în cazul în care ați pus dumneavoastră lira include și lira ta definește,
de exemplu, s-ar putea să le pună în fișiere punct h separate, pe care le apoi
Pound includ tine.
>> Deci avem structuri, dar acum avem nevoie pentru a obține în interiorul lor.
Cum ajungem în interiorul o structură de acces
aceste sub-variabile, aceste variabile că există în interiorul structurii?
Ei bine, avem ceva numit operatorul punct, care ne permite
pentru a accesa câmpurile structurii.
Deci, de exemplu, să spunem că am declarat datele mele structura de tip undeva
în partea de sus a programului meu, sau poate în un fișier punct h care le-am inclus lire.
Dacă atunci vreau pentru a crea un nou variabilă de acest tip de date, pot să spun,
masina struct, mașina mea, punct și virgulă.
Așa cum am putea spune Int X, sau numele șir punct și virgulă.
>> Tipul de date de aici este automobil struct, numele variabilei este masina mea,
și apoi pot folosi operatorul punct de acces la diferite domenii ale masina mea.
Deci, eu pot spune masina mea dot an este egal cu 2011.
Asta e foarte bine.
An, dacă vă amintiți, a fost definit ca un câmp întreg interiorul aceasta masina struct
tip de date.
Deci, orice variabilă a datelor auto struct tip, cum ar fi masina mea, pot spune masina mea
Anul punct este egal și apoi atribuiți se o valoare întreagă, 2011.
My placă dot masina este egal CS50.
My carte dot kilometrajul este egal cu 50505 și virgulă.
Toate acestea sunt foarte bine și asta e
cum accesăm câmpuri ale structurii.
Structuri, deși, nu au nevoie de care urmează să fie create pe stiva.
La fel ca orice alte variabile, am le poate aloca dinamic.
Dacă avem un program care ar putea fi generatoare de mai multe structuri,
nu știm cât de multe vom avea nevoie de,
atunci trebuie să dinamic aloca aceste structuri
ca programul nostru se execută.
Și așa, dacă vom pentru a accesa domenii de o structură în acest context,
amintesc că trebuie mai întâi să dereference indicatorul la structura,
și apoi o dată ne-am dereference pointer, atunci putem accesa câmpurile.
Dacă avem doar un pointer la structura,
nu putem spune pur și simplu câmp pointer punct numele și obține ceea ce căutăm.
Există pas suplimentar de dereferencing.
Deci, haideți să spunem că în loc de previous--
la fel ca exemplul anterior, în loc de declararea acesteia
pe stiva, masina struct, mea auto, punct și virgulă, spun masina struct,
stele, un pointer la un masina struct numit masina mea,
este egal cu dimensiunea malloc de masina struct.
Mărimea vom da seama cât de multe bytes noul tip de date ocupă.
Nu aveți nevoie neapărat doar de a utiliza mărimea, latime, Int, sau char, sau orice
din tipurile de date built-in.
Compilatorul este destul de inteligent să dau seama cum de multe bytes
sunt cerute de noua structură.
Deci, m-am malloc o unitate de memorie suficient de mare pentru a deține o mașină struct,
și I a lua un pointer înapoi la acel bloc de memorie,
și că pointer este atribuit mașina mea.
>> Acum, dacă vreau să acces domeniile de masina mea,
Prima dereference masina mea folosind operatorul dereference, steaua
pe care le-am văzut de la indicii video, iar apoi după ce am dereference,
apoi m-am pot folosi operatorul punct de acces la diferite domenii ale masina mea.
Stele mașina mea dot an este egal cu 2011.
Care ar avea ca efect vrem în acest caz,
pentru că ne-am dinamic alocat mașina mea.
>> Asta e un fel de enervant, totuși, nu?
Există un proces de 2 pași acum.
Acum trebuie să dereference-- avem un operator de stele,
și avem un operator de punct.
Și, după cum s-ar putea aștepta, pentru că C programatori dragoste moduri scurte
de a face lucruri, există o modalitate mai scurtă a face acest lucru.
Nu există un alt operator de numit săgeată, ceea ce face acest proces mult mai ușor.
Modul în care funcționează este săgeată IT primele dereferences
indicatorul din stânga partea operatorului,
și apoi, după ce a dereferentierea indicatorul din stânga,
accesează câmpul din dreapta.
Și astfel am avut anterior acest tip Star masina mea dot toate aceste lucruri,
ca a existat o mulțime întâmplă acolo.
Dar ceea ce putem face în schimb este astea-- mea săgeată masina an este egal cu 2,011.
>> Din nou, ce se întâmplă aici?
În primul rând, eu sunt dereferencing mașina mea.
Care din nou, este un pointer aici.
Apoi, după ce dereferentierea masina mea, am
pot accesa apoi câmpurile an, placă, și kilometrajul
la fel cum am putut inainte de a avea prima stele second-hand la dereference masina mea,
și dot pentru a accesa câmpul.
Astfel încât să puteți avea structuri, vă poate avea indicii de structuri,
și aveți acces la căi domeniile de aceste structuri,
dacă aveți indicii la le sau variabilele înșiși.
Dot sau săgeată, în funcție de cum a fost declarat variabila.
Sunt Doug Lloyd, aceasta este CS50.