[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.