>> [Music kucheza]
>> DOUG LLOYD: Sawa.
Tumekuwa kazi na integers, tumekuwa kazi na wahusika,
tumekuwa kazi ikifungwa, mara mbili, masharti, na bools.
Tumekuwa nimechoka pretty much wote ya [inaudible] aina kwamba
wamekuwa inapatikana kwa sisi wote pamoja.
Lakini sasa tunataka kufanya kitu zaidi.
Je, sisi kufanya hivyo?
Je, sisi kuunda aina tofauti data?
Tunaweza kufanya hivyo kwa kutumia miundo.
Hivyo miundo kuruhusu sisi kuunganisha vigezo ya aina tofauti
katika moja, mpya kutofautiana aina, ambayo tunaweza kuwapa aina ya jina lake mwenyewe.
Hii ni kweli nguvu Jambo kuwa na uwezo wa kufanya,
kwa sababu tunaweza sasa kundi mambo ya aina mbalimbali data
pamoja kwamba kuwa na uhusiano mantiki.
Tumekuwa na uwezo wa kufanya hivyo na arrays aina ya, haki?
Tunaweza kundi vigezo ya data aina moja
pamoja katika kitengo kubwa ya kumbukumbu, safu.
>> Lakini sisi hawajaweza kuchanganya up data aina tofauti pamoja.
Hatuwezi, kusema, jozi integer, na tabia, na mara mbili zote
katika kitu kimoja na wito kwamba kitengo moja.
Lakini pamoja na miundo, au mara nyingi hujulikana kama structs,
sisi kweli anaweza.
Hivyo muundo ni aina ya kama kutofautiana super.
Ni kutofautiana kwamba ina vigezo vingine ndani yake.
Hivyo hapa ni mfano wa muundo rahisi sana.
Hii ni nini syntax bila kuangalia kama kujenga muundo kwa ajili ya gari.
Sasa, hebu kwenda kwa njia ya syntax hapa.
Struct, hiyo ni Keyword kwamba inaonyesha
kwamba mimi nina kujenga aina mpya data hapa.
Hasa, jina data aina ni kwenda kuwa struct gari, kama tutaweza kuona.
Lakini hii ni aina ya ncha mbali na mkusanyaji kwamba hii
kama kundi la vigezo kwamba ni kwenda kuchukuliwa sehemu ya aina moja
katika dakika.
>> Magari, tu jina ya muundo.
Tena, aina data hapa ni kwenda kuwa struct gari, si tu gari.
Lakini kama una different-- kama kujenga structs nyingi
katika mpango huo, unahitaji kutofautisha kati ya struct na struct.
Hivyo struct gari, mimi mwenyewe ninazo sababu struct mwanafunzi, kwa mfano,
katika mpango huo.
Ndani ya braces curly ni wote wa kinachojulikana mashamba,
au wanachama wa muundo.
Kwa hiyo kile ni baadhi ya mambo ambayo ni asili katika gari?
Naam, ni kawaida ina mwaka, ina jina mfano, na sahani leseni,
odometer kwamba kwa kawaida ina baadhi ya idadi ya maili juu yake,
na labda ukubwa wa injini.
Na kama unaweza kuona, mimi nina kuchanganya juu integers na wahusika na mara mbili.
Wao ni wote kwenda kuwa sehemu ya huu mpya aina data.
>> Mwisho, jambo la mwisho mimi haja ya kufanya, usisahau huu semicolon kidogo
mwishoni.
Baada ya sisi kumaliza kufafanua muundo, tunahitaji kuweka semicolon mwishoni.
Ni kawaida sana syntactical makosa, kwa sababu kwa kazi,
Kwa mfano, ungekuwa tu na wazi curly brace, karibu curly brace.
Huwezi kuweka semicolon katika Mwishoni mwa kazi ufafanuzi.
Hii inaonekana kama kazi ufafanuzi, lakini siyo,
na hivyo semicolon huko ni tu kukumbusha kuwa wewe
haja ya kuiweka huko, kwa sababu compiler mapenzi vinginevyo si
kujua nini cha kufanya na hayo.
Ni kosa la kawaida sana kwa ajali kufanya
wakati wewe ni kwanza kufafanua miundo.
>> SAWA.
Hivyo sisi kwa kawaida kufafanua miundo yetu katika sana juu ya mipango yetu
kwa sababu wao ni pengine ni kwenda kutumiwa na kazi nyingi.
Hatutaki kufafanua struct ndani ya kazi,
kwa sababu basi tunaweza only-- wigo wa mfumo wa kweli
tu ipo ndani ya kazi hiyo.
Tunatarajia pengine wanataka kufafanua muundo ili tuweze kutumia katika kazi nyingi,
au labda katika mbalimbali mafaili ambayo ni amefungwa pamoja
kujenga mpango wetu moja.
Wakati mwingine pia badala ya kufafanua muundo
juu sana ambapo wewe kuweka yako chupa pamoja na na chupa yako amefafanua,
kwa mfano, unaweza kuziweka katika tofauti mafaili nukta h, ambayo wewe kisha
chupa ni pamoja na wewe mwenyewe.
>> Hivyo tuna miundo, lakini sasa tunahitaji kupata ndani mwao.
Je, sisi kupata ndani ya muundo wa upatikanaji
wale ndogo vigezo, vigezo wale ambazo zipo ndani ya mfumo wa?
Naam, tuna kitu kinachoitwa dot operator, ambayo inaruhusu sisi
kupata mashamba ya muundo.
Hivyo kwa mfano, hebu sema nimekuwa alitangaza data zangu muundo aina fulani
juu ya mpango wangu, au labda katika dot h faili kwamba nimepata chupa pamoja.
Kama mimi basi unataka kujenga mpya kutofautiana wa aina hiyo data, naweza kusema,
struct gari, gari langu, semicolon.
Tu kama mimi naweza kusema int x, au kamba jina semicolon.
>> Aina ya data hapa ni struct gari, jina la kutofautiana ni gari langu,
na kisha naweza kutumia nukta operator kwa kupata maeneo mbalimbali ya gari langu.
Hivyo naweza kusema gari langu dot mwaka ni sawa na 2011.
Hiyo ni kikamilifu faini.
Mwaka, kama unakumbuka, ilipewa kama integer uwanja ndani ya hii gari struct
Aina ya data.
Hivyo yoyote kutofautiana wa data struct gari aina, kama vile gari langu, naweza kusema gari langu
dot mwaka ni sawa na na kisha kuwapa ni baadhi ya thamani integer, 2011.
My gari nukta sahani ni sawa na CS50.
Kadi nukta yangu odometer sawa 50,505 semicolon.
Wote wa wale watu kikamilifu faini na kwamba
jinsi sisi kupata mashamba ya muundo.
Miundo, ingawa, hawana haja kutengenezwa juu ya stack.
Tu kama kutofautiana nyingine yoyote, sisi Unaweza dynamically kutenga yao.
Kama tuna mpango kwamba huenda kuwa kuzalisha miundo wengi,
hatujui ni wangapi sisi ni kwenda haja,
basi tunahitaji dynamically kutenga miundo hiyo
kama mpango wetu ni mbio.
Na hivyo kama tunakwenda kupata mashamba ya muundo katika mazingira ya hapo,
kukumbuka kwamba tunahitaji kwanza dereference pointer muundo,
na kisha mara moja sisi dereference pointer, kisha tuweze kupata mashamba.
Kama sisi tu pointer kwa muundo,
hatuwezi tu kusema pointer dot shamba jina na kupata kile sisi ni kuangalia kwa.
Kuna hatua za ziada ya dereferencing.
Basi hebu kusema kwamba badala ya previous--
kama mfano uliopita, badala ya kutangaza ni
juu ya stack, struct gari, yangu gari, semicolon, nasema struct gari,
nyota, pointer struct gari aitwaye gari langu,
sawa malloc ukubwa wa struct gari.
Ukubwa wa tutaweza kufikiri jinsi wengi ka mpya aina yako data unachukua.
Wewe si lazima tu haja ya kutumia ukubwa wa, upana, int, au Char, au yoyote
ya kujengwa katika aina ya data.
Compiler ni smart kutosha kufikiri ka wangapi
wanatakiwa na muundo yako mpya.
Hivyo mimi malloc mwenyewe kitengo cha kumbukumbu kubwa ya kutosha kushikilia struct gari,
na mimi kupata pointer nyuma kwa kuwa block ya kumbukumbu,
na kwamba pointer ni kwa ajili ya gari langu.
>> Sasa, kama nataka kupata mashamba ya gari langu,
Mimi kwanza dereference gari langu kwa kutumia dereference operator, nyota
kwamba tumeona kutoka kuyatumia video, na kisha baada ya mimi dereference,
kisha naweza kutumia nukta operator kwa kupata maeneo mbalimbali ya gari langu.
Nyota gari langu nukta mwaka ni sawa na 2011.
Ambalo litakuwa na athari tunataka katika kesi hii,
kwa sababu tumekuwa dynamically zilizotengwa gari langu.
>> Hiyo ni aina ya annoying, ingawa, sawa?
Kuna mchakato wa hatua 2 sasa.
Sasa tuna dereference-- tuna nyota operator,
na tuna nukta operator.
Na kama unaweza kutarajia, kwa sababu C programmers upendo njia fupi
kufanya mambo, kuna njia fupi kwa kufanya hivyo.
Kuna operator mwingine aitwaye mshale, ambayo inafanya mchakato huu rahisi sana.
Njia mshale kazi ni kwanza dereferences
pointer upande wa kushoto upande wa operator,
na kisha, baada ya dereferenced pointer upande wa kushoto,
ni wanapata uwanja juu ya haki.
Na hivyo awali tulikuwa na aina hii ya nyota gari langu dot mambo haya yote,
kama kuna mengi kinachoendelea huko.
Lakini nini tunaweza badala kufanya ni Haya gari mshale wangu mwaka ni sawa na 2011.
>> Tena nini kinatokea hapa?
Kwanza, mimi nina dereferencing gari langu.
Ambayo tena, ni pointer hapa.
Kisha, baada ya dereferenced gari langu, mimi
Basi unaweza kupata mashamba mwaka, sahani, na odometer
tu kama mimi naweza kabla ya kuwa na kwanza kutumika nyota dereference gari langu,
na nukta ya kupata shamba.
Hivyo unaweza kuwa na miundo, wewe unaweza kuwa na kuyatumia kwa miundo,
na una njia za upatikanaji mashamba ya miundo hiyo,
kama una kuyatumia kwa nao au vigezo wenyewe.
Dot au mshale, kutegemea jinsi kutofautiana ilitangazwa.
Mimi nina Doug Lloyd, hii ni CS50.