1 00:00:00,000 --> 00:00:02,395 >> [Muzikos grojimo] 2 00:00:02,395 --> 00:00:05,750 3 00:00:05,750 --> 00:00:06,506 >> Doug LLOYD: Gerai. 4 00:00:06,506 --> 00:00:08,880 Mes dirbome su skaičiais, mes dirbo su simbolių, 5 00:00:08,880 --> 00:00:11,930 mes dirbome plūdės, dviviečiai, įsipareigojimų ir bools. 6 00:00:11,930 --> 00:00:14,870 Mes išnaudojo beveik visi iš [nesigirdi] tipų, 7 00:00:14,870 --> 00:00:17,100 buvę galima mums visiems kartu. 8 00:00:17,100 --> 00:00:19,430 Bet dabar mes norime padaryti kažką daugiau. 9 00:00:19,430 --> 00:00:20,210 Kaip mes tai padaryti? 10 00:00:20,210 --> 00:00:22,560 Kaip mes sukurti skirtingus duomenų tipus? 11 00:00:22,560 --> 00:00:26,130 Mes galime padaryti naudodami struktūras. 12 00:00:26,130 --> 00:00:30,180 Taigi struktūros leidžia mums suvienyti kintamieji skirtingų tipų 13 00:00:30,180 --> 00:00:34,810 į vieną, naujasis kintamo tipo, kurioje mes galime priskirti savo tipo pavadinimą. 14 00:00:34,810 --> 00:00:37,570 Tai yra tikrai stiprus dalykas, kad būtų galima daryti, 15 00:00:37,570 --> 00:00:40,900 nes mes galime dabar grupė elementai skirtingų duomenų tipų 16 00:00:40,900 --> 00:00:43,910 kartu, kad turi loginį ryšį. 17 00:00:43,910 --> 00:00:46,440 Mes galėjome tai padaryti su matricomis Rūšiuoti, tiesa? 18 00:00:46,440 --> 00:00:49,540 Mes galime grupių kintamieji iš tos pačios duomenų tipą 19 00:00:49,540 --> 00:00:53,410 kartu dideliame vieneto atminties, masyvo. 20 00:00:53,410 --> 00:00:56,660 >> Bet mes negalėjo maišyti skirtingus duomenų tipus kartu. 21 00:00:56,660 --> 00:01:02,610 Mes negalime, tarkim, porą sveikasis skaičius, ir simbolis, ir dvigubas visi 22 00:01:02,610 --> 00:01:05,330 į tą patį, ir skambinti, kad vienu vienetu. 23 00:01:05,330 --> 00:01:08,830 Bet su struktūros arba dažnai vadinama structs, 24 00:01:08,830 --> 00:01:09,585 mes iš tikrųjų gali. 25 00:01:09,585 --> 00:01:12,370 Taigi struktūra yra tarsi tiek kaip super kintamąjį. 26 00:01:12,370 --> 00:01:16,530 Tai kintamasis, kuris yra kiti kintamieji viduje ji. 27 00:01:16,530 --> 00:01:19,650 Taigi čia pavyzdys, labai paprasta struktūra. 28 00:01:19,650 --> 00:01:23,380 Tai yra tai, ką sintaksė atrodytų patinka sukurti struktūrą automobilį. 29 00:01:23,380 --> 00:01:25,250 Dabar galime eiti per sintaksė čia. 30 00:01:25,250 --> 00:01:27,400 Konstrukto, tai toks raktažodis rodo 31 00:01:27,400 --> 00:01:30,270 kad aš sukurti naują duomenų tipą čia. 32 00:01:30,270 --> 00:01:33,860 Visų pirma, duomenų tipą vardas bus konstrukto automobilis, kaip matysime. 33 00:01:33,860 --> 00:01:36,640 Tačiau tai yra viršūnės rūšiuoti ne į kompiliatorių, kad ši 34 00:01:36,640 --> 00:01:42,440 kaip kintamųjų grupės, kuri vyksta būti laikoma dalis yra tokio paties tipo 35 00:01:42,440 --> 00:01:44,010 per minutę. 36 00:01:44,010 --> 00:01:46,340 >> Automobiliai, tik statinio pavadinimą. 37 00:01:46,340 --> 00:01:50,590 Vėlgi, duomenų tipas čia vyksta būti konstrukto automobilis, ne tik automobilį. 38 00:01:50,590 --> 00:01:53,060 Bet jei jūs turite different-- jei kuriate kelis structs 39 00:01:53,060 --> 00:01:56,950 toje pačioje programos, reikia atskirti struct ir struct. 40 00:01:56,950 --> 00:02:00,140 Taigi konstrukto automobilis, aš taip pat gali turėti konstrukto studentas, pavyzdžiui, 41 00:02:00,140 --> 00:02:01,790 toje pačioje programą. 42 00:02:01,790 --> 00:02:05,980 Viduje klamrami yra visi vadinamųjų srityse, 43 00:02:05,980 --> 00:02:07,954 arba nariai struktūrą. 44 00:02:07,954 --> 00:02:10,370 Taigi, kas yra keletas dalykų, kurie yra neatskiriama automobilio? 45 00:02:10,370 --> 00:02:15,270 Na, ji paprastai turi per metus, buvo modelis pavadinimas, o NL, 46 00:02:15,270 --> 00:02:18,000 odometras, kad paprastai turi kai mylių ją skaičius, 47 00:02:18,000 --> 00:02:19,225 o gal variklis dydis. 48 00:02:19,225 --> 00:02:23,570 Ir, kaip matote, aš maišyti sveikieji skaičiai ir simboliai ir dviviečiai kambariai. 49 00:02:23,570 --> 00:02:26,420 Jie visi bus dalis šios naujų duomenų tipą. 50 00:02:26,420 --> 00:02:29,750 >> Galiausiai paskutinis dalykas, man reikia daryti, nepamirškite tai mažai kabliataškį 51 00:02:29,750 --> 00:02:30,290 pabaigoje. 52 00:02:30,290 --> 00:02:34,380 Po baigsime apibrėžti struktūrą, mes turime įdėti kabliataškį pabaigoje. 53 00:02:34,380 --> 00:02:37,325 Tai labai dažna sintaksinis klaida, nes su funkcija, 54 00:02:37,325 --> 00:02:40,200 Pavyzdžiui, jūs tiesiog turite atvira garbanotas petnešomis, netoli garbanotas petnešomis. 55 00:02:40,200 --> 00:02:42,950 Jūs neturite įdėti kabliataškį ne galas funkciniu apibrėžimą. 56 00:02:42,950 --> 00:02:46,430 Tai atrodo kaip funkcija apibrėžimas, tačiau taip nėra, 57 00:02:46,430 --> 00:02:49,653 ir taip kabliataškis yra yra tik priminimas, kad jus 58 00:02:49,653 --> 00:02:52,440 reikia įdėti jį ten, nes kompiliatorių kitaip nėra 59 00:02:52,440 --> 00:02:53,510 nežino, ką daryti su juo. 60 00:02:53,510 --> 00:02:56,160 Tai labai dažna klaida netyčia padaryti 61 00:02:56,160 --> 00:02:58,570 kai jūs pirmą kartą nustatant struktūras. 62 00:02:58,570 --> 00:02:59,500 >> GERAI. 63 00:02:59,500 --> 00:03:02,824 Taigi mes paprastai apibrėžti savo struktūras pačiame viršuje iš mūsų programų 64 00:03:02,824 --> 00:03:05,490 nes jie tikriausiai bus turi būti naudojami pagal kelis funkcijas. 65 00:03:05,490 --> 00:03:08,850 Mes nenorime apibrėžti turizmo infrastruktūrą viduje funkcija, 66 00:03:08,850 --> 00:03:12,110 nes tada mes galime jei jums reikia apimtis struktūros tikrai 67 00:03:12,110 --> 00:03:13,790 egzistuoja tik viduje šią funkciją. 68 00:03:13,790 --> 00:03:17,450 Mes tikriausiai noriu apibrėžti struktūrą todėl mes galime jį naudoti keliomis funkcijomis, 69 00:03:17,450 --> 00:03:20,670 arba galbūt kartotinio failų, kurie yra surišami 70 00:03:20,670 --> 00:03:22,920 sukurti mūsų bendrą programą. 71 00:03:22,920 --> 00:03:24,920 Kartais taip, o ne apibrėžti struktūrą 72 00:03:24,920 --> 00:03:27,961 pačiame viršuje, kur jūs įdėti savo Svaras apima ir jūsų svaras apibrėžia, 73 00:03:27,961 --> 00:03:32,080 Pavyzdžiui, jums gali įdėti juos į atskiras taškas h failus, kurį vėliau 74 00:03:32,080 --> 00:03:35,020 Svaras yra sau. 75 00:03:35,020 --> 00:03:37,620 >> Taigi, mes turime struktūras, tačiau dabar mums reikia patekti į vidų iš jų. 76 00:03:37,620 --> 00:03:39,800 Kaip mes gauti viduje struktūra patekti 77 00:03:39,800 --> 00:03:43,530 Šios posistemės kintamieji rodikliai, kurie kintamieji kad egzistuoja struktūros viduje? 78 00:03:43,530 --> 00:03:46,810 Na, mes turime kažką vadinama dot operatorius, kuri leidžia mums 79 00:03:46,810 --> 00:03:50,990 prieiti prie statinio laukus. 80 00:03:50,990 --> 00:03:55,490 Taigi, pavyzdžiui, tarkim aš paskelbė Mano struktūra Duomenų tipas kažkur 81 00:03:55,490 --> 00:03:59,020 tuo savo programos viršuje, arba galbūt dot val failą, kad aš svaras įtraukti. 82 00:03:59,020 --> 00:04:03,360 Jei aš tada noriu sukurti nauja kintamasis to duomenų tipo, galiu pasakyti, 83 00:04:03,360 --> 00:04:06,260 konstrukto automobilis, mano automobilis, kabliataškis. 84 00:04:06,260 --> 00:04:11,580 Kaip galėčiau pasakyti int x arba styginių vardas kabliataškis. 85 00:04:11,580 --> 00:04:18,100 >> Duomenų tipas čia yra konstrukto automobilis, kintamojo vardas yra mano automobilis, 86 00:04:18,100 --> 00:04:23,770 ir tada aš galiu naudoti dot operatoriui prisijungti įvairių sričių savo automobilį. 87 00:04:23,770 --> 00:04:27,494 Taigi galiu pasakyti savo automobilį dot metų lygus 2011. 88 00:04:27,494 --> 00:04:28,410 Štai puikiai baudą. 89 00:04:28,410 --> 00:04:34,210 Metai, jei prisimenate, buvo apibrėžta kaip sveikasis skaičius laukas viduje šio struct automobilį 90 00:04:34,210 --> 00:04:35,200 duomenų tipas. 91 00:04:35,200 --> 00:04:39,966 Taigi bet koks konstrukto automobilių duomenų kintamasis tipas, pavyzdžiui, mano automobilį, galiu pasakyti savo automobilį 92 00:04:39,966 --> 00:04:44,030 dot metų lygus ir tada priskirti tai kai sveikasis vertė 2011. 93 00:04:44,030 --> 00:04:47,290 Mano automobilis taškų plokštelė yra lygus CS50. 94 00:04:47,290 --> 00:04:51,180 Mano skyriaus dot odometras lygus 50505 kabliataškį. 95 00:04:51,180 --> 00:04:53,270 Visi tie, kurie puikiai baudą ir kad 96 00:04:53,270 --> 00:04:57,802 kaip mes prieiti prie laukai struktūrą. 97 00:04:57,802 --> 00:05:00,260 Konstrukcijos, nors, nereikia turi būti sukurta kamino. 98 00:05:00,260 --> 00:05:02,950 Kaip bet kuris kitas kintamasis, mes gali dinamiškai paskirstyti juos. 99 00:05:02,950 --> 00:05:06,309 Jei mes turime programą, kuri galėtų būti generuojama daug struktūrų, 100 00:05:06,309 --> 00:05:08,100 mes nežinome, kiek mes ketiname reikia, 101 00:05:08,100 --> 00:05:10,800 tada mums reikia dinamiškai paskirsto šias struktūras 102 00:05:10,800 --> 00:05:12,960 kaip mūsų programa veikia. 103 00:05:12,960 --> 00:05:16,600 Ir todėl, jei mes ketiname prieiti prie laukai struktūrą tame kontekste, 104 00:05:16,600 --> 00:05:20,660 Prisiminkite, kad mes pirmiausia reikia dereference į struktūros žymeklis, 105 00:05:20,660 --> 00:05:24,810 ir tada, kai mes dereference žymeklis, tada mes galime prieiti prie laukus. 106 00:05:24,810 --> 00:05:26,830 Jei mes tik turime rodyklę į struktūrą, 107 00:05:26,830 --> 00:05:32,120 mes negalime tiesiog pasakyti žymeklis dot lauką pavadinimas ir gauti tai, ko mes ieškome. 108 00:05:32,120 --> 00:05:34,259 Yra papildomų žingsnis dereferencing. 109 00:05:34,259 --> 00:05:36,050 Taigi tarkime, kad vietoj previous-- 110 00:05:36,050 --> 00:05:38,770 kaip ir ankstesniame pavyzdyje, vietoj nedeklaravę 111 00:05:38,770 --> 00:05:43,680 ant kamino, konstrukto automobilis, mano Automobilių, kabliataškis, sakau struct automobilį, 112 00:05:43,680 --> 00:05:48,020 žvaigždė, rodyklė į A konstrukto automobilių vadinamas mano automobilį, 113 00:05:48,020 --> 00:05:51,250 lygus malloc dydį struct automobilį. 114 00:05:51,250 --> 00:05:54,950 Dydis mes išsiaiškinti, kiek baitų jūsų naujas duomenų tipas užima. 115 00:05:54,950 --> 00:05:58,570 Jūs nebūtinai reikia naudoti tik dydis, plotis, INT, arba char, arba bet 116 00:05:58,570 --> 00:05:59,715 iš built-in duomenų tipų. 117 00:05:59,715 --> 00:06:02,090 Kompiliatorius yra pakankamai protingas, išsiaiškinti, kiek baitų 118 00:06:02,090 --> 00:06:04,170 yra reikalaujama pagal naują struktūrą. 119 00:06:04,170 --> 00:06:09,610 Taigi aš malloc sau atminties įrenginį pakankamai didelis, kad turėti struct automobilį, 120 00:06:09,610 --> 00:06:12,410 ir aš gauti žymeklį atgal į tą atminties blokas, 121 00:06:12,410 --> 00:06:16,090 ir kad žymiklis yra priskiriamas prie mano automobilio. 122 00:06:16,090 --> 00:06:18,050 >> Dabar, jei aš noriu patekti kad mano automobilį laukai, 123 00:06:18,050 --> 00:06:22,615 Aš pirmą kartą dereference mano automobilyje, naudojant dereference operatorius, žvaigždutė 124 00:06:22,615 --> 00:06:26,620 kad mes matėme iš rodyklės video, tada, kai aš dereference, 125 00:06:26,620 --> 00:06:32,200 tada aš galiu naudoti dot operatoriui prisijungti įvairių sričių savo automobilį. 126 00:06:32,200 --> 00:06:35,490 Pažymėti mano automobilį dot metų lygus 2011. 127 00:06:35,490 --> 00:06:38,480 Tai turi poveikį norime šiuo atveju, 128 00:06:38,480 --> 00:06:41,960 nes mes dinamiškai skirta mano automobilį. 129 00:06:41,960 --> 00:06:43,610 >> Tai tipo erzina, nors, tiesa? 130 00:06:43,610 --> 00:06:44,818 Yra 2 etapų procesas dabar. 131 00:06:44,818 --> 00:06:47,460 Dabar mes turime dereference-- turime žvaigždė operatorius, 132 00:06:47,460 --> 00:06:48,910 ir mes turime dot operatorių. 133 00:06:48,910 --> 00:06:51,660 Ir kaip galima tikėtis, nes C programuotojai mėgsta trumpesnius kelius 134 00:06:51,660 --> 00:06:53,740 daryti dalykus, yra trumpesnis būdas tai padaryti. 135 00:06:53,740 --> 00:06:57,790 Yra dar vienas operatorius vadinamas rodyklė, todėl šis procesas daug lengviau. 136 00:06:57,790 --> 00:07:00,750 Kelias rodyklė veikia, yra Ji pirmą kartą dereferences 137 00:07:00,750 --> 00:07:03,560 kairėje žymeklis pusėje nuo operatoriaus, 138 00:07:03,560 --> 00:07:06,620 ir tada, po to, kai dereferenced kairėje žymeklis, 139 00:07:06,620 --> 00:07:09,620 jis pasiekia lauko dešinėje. 140 00:07:09,620 --> 00:07:14,170 Ir taip anksčiau mes turėjome šios rūšies Žvaigždžių mano automobilis dot visą šią medžiagą, 141 00:07:14,170 --> 00:07:15,880 kaip ten buvo daug vyksta ten. 142 00:07:15,880 --> 00:07:22,040 Bet kas, o mes galime padaryti, tai this-- mano automobilis rodyklė metų lygus 2011. 143 00:07:22,040 --> 00:07:23,580 >> Vėlgi, tai, kas vyksta čia? 144 00:07:23,580 --> 00:07:25,720 Pirma, aš dereferencing savo automobilį. 145 00:07:25,720 --> 00:07:27,810 Kuris vėl yra žymeklis čia. 146 00:07:27,810 --> 00:07:31,270 Tada, po to, kai dereferenced savo automobilį, aš 147 00:07:31,270 --> 00:07:35,130 Tada galite patekti į laukus metus, plokštės ir odometras 148 00:07:35,130 --> 00:07:40,020 kaip galėjau prieš tai pirmiausia Naudota žvaigždė dereference mano automobilį, 149 00:07:40,020 --> 00:07:42,020 ir dot pasiekti lauką. 150 00:07:42,020 --> 00:07:45,290 Taigi jūs galite turėti struktūras, jums gali turėti rodykles į struktūras, 151 00:07:45,290 --> 00:07:48,360 ir jūs turite būdai pasiekti tų struktūrų laukai, 152 00:07:48,360 --> 00:07:52,600 ar turite nuorodas į juos arba patys kintamieji. 153 00:07:52,600 --> 00:07:57,640 Dot arba rodyklė, priklausomai nuo kaip kintamasis buvo paskelbta. 154 00:07:57,640 --> 00:08:00,510 Aš Doug Lloyd, tai CS50. 155 00:08:00,510 --> 00:08:01,975