1 00:00:00,000 --> 00:00:02,395 >> [Prehrávanie hudby] 2 00:00:02,395 --> 00:00:05,750 3 00:00:05,750 --> 00:00:06,506 >> DOUG LLOYD: OK. 4 00:00:06,506 --> 00:00:08,880 Pracovali sme s celými číslami, sme pracovali s charaktermi, 5 00:00:08,880 --> 00:00:11,930 sme pracovali plaváky, dvojlôžkové, struny, a bools. 6 00:00:11,930 --> 00:00:14,870 Sme vyčerpali skoro všetky z [nepočuteľný] typov, ktoré 7 00:00:14,870 --> 00:00:17,100 boli k dispozícii pre nás všetkých spoločne. 8 00:00:17,100 --> 00:00:19,430 Ale teraz chceme urobiť niečo viac. 9 00:00:19,430 --> 00:00:20,210 Ako to urobíme? 10 00:00:20,210 --> 00:00:22,560 Ako môžeme vytvoriť rôzne dátové typy? 11 00:00:22,560 --> 00:00:26,130 Môžeme tak urobiť pomocou štruktúr. 12 00:00:26,130 --> 00:00:30,180 Takže štruktúry nám umožní zjednotiť premenné rôznych typov 13 00:00:30,180 --> 00:00:34,810 do jedného, ​​nový typ premennej, ktoré môžeme priradiť svoj vlastný názov typu. 14 00:00:34,810 --> 00:00:37,570 To je naozaj silný vec je byť schopný robiť, 15 00:00:37,570 --> 00:00:40,900 pretože môžeme teraz skupina prvky rôznych dátových typov 16 00:00:40,900 --> 00:00:43,910 pri sebe, že majú logické spojenie. 17 00:00:43,910 --> 00:00:46,440 Boli sme schopní to urobiť s poli Druh, že jo? 18 00:00:46,440 --> 00:00:49,540 WE CAN premenné skupiny rovnakého typu dátového 19 00:00:49,540 --> 00:00:53,410 Vo veľkej jednotke pamäte, pole. 20 00:00:53,410 --> 00:00:56,660 >> Ale my sme neboli schopní miešať up rôznymi typmi dát dohromady. 21 00:00:56,660 --> 00:01:02,610 Nemôžeme povedať, spárovať celé číslo, a charakter, a dvojitý všetky 22 00:01:02,610 --> 00:01:05,330 v rovnakej veci a volanie, že jeden celok. 23 00:01:05,330 --> 00:01:08,830 Ale s štruktúry, alebo často označované ako structs, 24 00:01:08,830 --> 00:01:09,585 sme vlastne môže. 25 00:01:09,585 --> 00:01:12,370 Takže štruktúra je druh ako sa super premenné. 26 00:01:12,370 --> 00:01:16,530 Je to premenná, ktorá obsahuje ostatné premenné vnútri nej. 27 00:01:16,530 --> 00:01:19,650 Tak tu je príklad veľmi jednoduchú štruktúru. 28 00:01:19,650 --> 00:01:23,380 To je to, čo syntaxe by vyzerať chcel vytvoriť štruktúru pre auto. 29 00:01:23,380 --> 00:01:25,250 Teraz, poďme prejsť syntaxe tu. 30 00:01:25,250 --> 00:01:27,400 Struct, to je kľúčové slovo, ktoré označuje 31 00:01:27,400 --> 00:01:30,270 že som vytvoriť nový dátový typ sem. 32 00:01:30,270 --> 00:01:33,860 Najmä, názov dátového typu je Bude struct auto, ako uvidíme. 33 00:01:33,860 --> 00:01:36,640 Ale to je druh hrotu off na kompilátora, že tento 34 00:01:36,640 --> 00:01:42,440 ako skupina premenných, ktoré sa deje , Ktoré majú byť považované za súčasť rovnakého druhu 35 00:01:42,440 --> 00:01:44,010 za minútu. 36 00:01:44,010 --> 00:01:46,340 >> Automobily, iba názov štruktúry. 37 00:01:46,340 --> 00:01:50,590 Opäť platí, že dátový typ tu sa deje byť struct auto, nie len auto. 38 00:01:50,590 --> 00:01:53,060 Ale ak máte different-- ak vytvoríte viac structs 39 00:01:53,060 --> 00:01:56,950 v rovnakom programe, je potrebné rozlišovať medzi struct a Struct. 40 00:01:56,950 --> 00:02:00,140 Takže struct auto, mohol by som mať tiež struct študent, napríklad, 41 00:02:00,140 --> 00:02:01,790 v rovnakom programe. 42 00:02:01,790 --> 00:02:05,980 Vnútri zložených zátvoriek sú všetky takzvaných polí, 43 00:02:05,980 --> 00:02:07,954 alebo členovia štruktúry. 44 00:02:07,954 --> 00:02:10,370 Takže aké sú niektoré z vecí, ktoré sú vlastné v aute? 45 00:02:10,370 --> 00:02:15,270 No, to zvyčajne má rok, ktorý názov modelu, a ŠPZ, 46 00:02:15,270 --> 00:02:18,000 počítadlo kilometrov, ktorý má obvykle niektoré počet míľ na to, 47 00:02:18,000 --> 00:02:19,225 a možno veľkostí motora. 48 00:02:19,225 --> 00:02:23,570 A ako vidíte, som premiešaní celé čísla a znaky a dvojlôžkové. 49 00:02:23,570 --> 00:02:26,420 Všetci sa bude časť tohto nového dátového typu. 50 00:02:26,420 --> 00:02:29,750 >> Napokon, posledná vec, ktorú musím urobiť, nezabudnite túto malú bodkočiarka 51 00:02:29,750 --> 00:02:30,290 nakoniec. 52 00:02:30,290 --> 00:02:34,380 Potom, čo sme dokončenie definujúce štruktúru, musíme dať bodkočiarka na konci. 53 00:02:34,380 --> 00:02:37,325 Je to veľmi časté syntaxe chyba, pretože s funkciou, 54 00:02:37,325 --> 00:02:40,200 Napríklad, mali by ste jednoducho open zložená zátvorka, v jeho blízkosti je zložená zátvorka. 55 00:02:40,200 --> 00:02:42,950 Tie nedávajte bodkočiarka na koniec definície funkcie. 56 00:02:42,950 --> 00:02:46,430 To vyzerá ako funkcia definície, ale nie je to, 57 00:02:46,430 --> 00:02:49,653 a tak tam bodkočiarka je len pripomienkou, že vás 58 00:02:49,653 --> 00:02:52,440 je potrebné, aby to tam dal, pretože kompilátor inak 59 00:02:52,440 --> 00:02:53,510 Viete, čo s tým robiť. 60 00:02:53,510 --> 00:02:56,160 Je to veľmi častá chyba omylom, aby 61 00:02:56,160 --> 00:02:58,570 keď ste prvýkrát definovanie štruktúry. 62 00:02:58,570 --> 00:02:59,500 >> OK. 63 00:02:59,500 --> 00:03:02,824 Tak sme sa zvyčajne definovať naše štruktúry na samom vrchole našich programov 64 00:03:02,824 --> 00:03:05,490 pretože sú pravdepodobne bude , Ktoré majú byť používané vo viacerých funkciami. 65 00:03:05,490 --> 00:03:08,850 Nechceme, aby definovať struct vnútri funkcie, 66 00:03:08,850 --> 00:03:12,110 pretože potom môžeme only-- Rozsah štruktúry skutočne 67 00:03:12,110 --> 00:03:13,790 existuje iba vo vnútri tejto funkcie. 68 00:03:13,790 --> 00:03:17,450 Radi by sme pravdepodobne chcieť definovať štruktúru takže ju môžeme použiť v rôznych funkciách, 69 00:03:17,450 --> 00:03:20,670 alebo snáď v násobku Súbory, ktoré sú zviazané 70 00:03:20,670 --> 00:03:22,920 aby sme vytvorili jeden program. 71 00:03:22,920 --> 00:03:24,920 Niekedy tiež namiesto definovanie štruktúru 72 00:03:24,920 --> 00:03:27,961 na samom vrchole, kde si dať libra zahŕňa aj vaše libra definuje, 73 00:03:27,961 --> 00:03:32,080 Napríklad, môžete dať ich do samostatné dot h súbory, ktoré vás potom 74 00:03:32,080 --> 00:03:35,020 libra aj vy. 75 00:03:35,020 --> 00:03:37,620 >> Takže máme štruktúru, ale teraz musíme sa dostať dovnútra nich. 76 00:03:37,620 --> 00:03:39,800 Ako sa dostaneme dovnútra štruktúra pre prístup 77 00:03:39,800 --> 00:03:43,530 tieto čiastkové premenné, tie premenné že existujú vnútri konštrukcie? 78 00:03:43,530 --> 00:03:46,810 No, my máme niečo ako operátor bodka, ktorá nám umožňuje 79 00:03:46,810 --> 00:03:50,990 pre prístup na oblasti štruktúry. 80 00:03:50,990 --> 00:03:55,490 Tak napríklad, povedzme, že som vyhlásil, moja dátového typu štruktúra niekde 81 00:03:55,490 --> 00:03:59,020 v hornej časti môjho programu, alebo možno v bodka h súbor, ktorý som libru hotela. 82 00:03:59,020 --> 00:04:03,360 Ak by som potom chcete vytvoriť nový premenná tohto typu dát, môžem povedať, 83 00:04:03,360 --> 00:04:06,260 struct auto, moje auto, bodkočiarka. 84 00:04:06,260 --> 00:04:11,580 Rovnako ako by som mohol povedať, int x, alebo názov reťazca bodkočiarku. 85 00:04:11,580 --> 00:04:18,100 >> Dátový typ je tu struct auto, meno premennej je moje auto, 86 00:04:18,100 --> 00:04:23,770 a potom môžem použiť operátor bodky na prístup k rôznym poľa mojom aute. 87 00:04:23,770 --> 00:04:27,494 Takže môžem povedať svoje auto dot rok sa rovná 2011. 88 00:04:27,494 --> 00:04:28,410 To je úplne v poriadku. 89 00:04:28,410 --> 00:04:34,210 Rok, ak si spomínate, bola definovaná ako integer pole vo vnútri tohto struct autá 90 00:04:34,210 --> 00:04:35,200 dátový typ. 91 00:04:35,200 --> 00:04:39,966 Takže akákoľvek premenná dáta na struct autá typu, ako je moje auto, môžem povedať svoje auto 92 00:04:39,966 --> 00:04:44,030 dot rok rovná a priraďte to nejaký celočíselná hodnota 2011. 93 00:04:44,030 --> 00:04:47,290 Moje auto dot doska rovná CS50. 94 00:04:47,290 --> 00:04:51,180 Moja karta bodka stav tachometra sa rovná 50505 bodkočiarka. 95 00:04:51,180 --> 00:04:53,270 Všetky z nich sú úplne v poriadku a to je 96 00:04:53,270 --> 00:04:57,802 ako pristupovať k poľa štruktúry. 97 00:04:57,802 --> 00:05:00,260 Štruktúry, ale nepotrebujú byť vytvorený v zásobníku. 98 00:05:00,260 --> 00:05:02,950 Rovnako ako akékoľvek iné premenné, my môže dynamicky prideľovať je. 99 00:05:02,950 --> 00:05:06,309 Ak máme program, ktorý by mohol bude generovať mnoho stavieb, 100 00:05:06,309 --> 00:05:08,100 nevieme, koľko budeme potrebovať, 101 00:05:08,100 --> 00:05:10,800 potom musíme dynamicky alokovať tie štruktúry 102 00:05:10,800 --> 00:05:12,960 ako náš program beží. 103 00:05:12,960 --> 00:05:16,600 A tak, keď budeme pre prístup k poľa štruktúry v tejto súvislosti, 104 00:05:16,600 --> 00:05:20,660 Pripomeňme si, že musíme najprv dereferencia ukazovateľ na štruktúru, 105 00:05:20,660 --> 00:05:24,810 a potom ešte raz my dereferencia ukazovateľ, potom môžeme pristupovať poľa. 106 00:05:24,810 --> 00:05:26,830 Ak budeme mať len ukazovateľ na štruktúru, 107 00:05:26,830 --> 00:05:32,120 nemôžeme len povedať ukazovateľ dot poľa pomenovať a dostať to, čo hľadáme. 108 00:05:32,120 --> 00:05:34,259 Je tu ďalší krok dereferencing. 109 00:05:34,259 --> 00:05:36,050 Takže povedzme, že namiesto previous-- 110 00:05:36,050 --> 00:05:38,770 rovnako ako v predchádzajúcom príklade, namiesto toho jeho vyhlásenia 111 00:05:38,770 --> 00:05:43,680 na zásobníku, struct auto, my auto, bodkočiarka, hovorím struct auto, 112 00:05:43,680 --> 00:05:48,020 hviezda, ukazovateľ na struct auto volal moje auto, 113 00:05:48,020 --> 00:05:51,250 sa rovná malloc veľkosť struct vozidla. 114 00:05:51,250 --> 00:05:54,950 Veľkosť budeme zistiť, koľko bajtov váš nový dátový typ zaberá. 115 00:05:54,950 --> 00:05:58,570 Nemusíte nutne len je potrebné použiť veľkosť, šírka, int alebo char, alebo na ktorúkoľvek 116 00:05:58,570 --> 00:05:59,715 z vstavaných dátových typov. 117 00:05:59,715 --> 00:06:02,090 Kompilátor je dosť šikovný, prísť na to, koľko bajtov 118 00:06:02,090 --> 00:06:04,170 sú požadované vašej novej štruktúry. 119 00:06:04,170 --> 00:06:09,610 Tak som malloc sám jednotku pamäte dostatočne veľké, aby držať struct auto, 120 00:06:09,610 --> 00:06:12,410 a ja si ukazovateľ späť k tomuto bloku pamäti, 121 00:06:12,410 --> 00:06:16,090 a že ukazovateľ je priradený k autu. 122 00:06:16,090 --> 00:06:18,050 >> A teraz, keď chcem prístup pole môjho auta, 123 00:06:18,050 --> 00:06:22,615 Prvý dereferencia mojom aute som sa s použitím operátor dereferencia, hviezda 124 00:06:22,615 --> 00:06:26,620 že sme videli z ukazovateľov videá, a potom potom, čo som dereferencia, 125 00:06:26,620 --> 00:06:32,200 potom môžem použiť operátor bodky na prístup k rôznym poľa mojom aute. 126 00:06:32,200 --> 00:06:35,490 Hviezda môjho auta bodka rok sa rovná 2011. 127 00:06:35,490 --> 00:06:38,480 To by malo za následok chceme v tomto prípade, 128 00:06:38,480 --> 00:06:41,960 preto, že sme dynamicky pridelené moje auto. 129 00:06:41,960 --> 00:06:43,610 >> Je to trochu nepríjemné, že? 130 00:06:43,610 --> 00:06:44,818 Tam je proces, teraz 2-krok. 131 00:06:44,818 --> 00:06:47,460 Teraz musíme dereference-- máme operátor hviezdy, 132 00:06:47,460 --> 00:06:48,910 a máme operátora bodka. 133 00:06:48,910 --> 00:06:51,660 A ako sa dalo očakávať, pretože Programátori C milujú kratšie cesty 134 00:06:51,660 --> 00:06:53,740 robiť veci, tam je kratšie spôsob, ako to urobiť. 135 00:06:53,740 --> 00:06:57,790 Tam je ďalší operátor s názvom šípka, čo robí tento proces oveľa jednoduchšie. 136 00:06:57,790 --> 00:07:00,750 Spôsob, akým funguje, je šípka sa prvýkrát dereferences 137 00:07:00,750 --> 00:07:03,560 ukazovateľ na ľavej strane strana prevádzkovateľa, 138 00:07:03,560 --> 00:07:06,620 a potom, po dereferenced ukazovateľ na ľavej strane, 139 00:07:06,620 --> 00:07:09,620 pristupuje poľa na pravej strane. 140 00:07:09,620 --> 00:07:14,170 A tak skôr sme mali tento druh Hviezdnych moje auto dot všetky tie veci, 141 00:07:14,170 --> 00:07:15,880 ako by tam bolo veľa tam deje. 142 00:07:15,880 --> 00:07:22,040 Ale to, čo môžeme urobiť, je namiesto toho tohle-- moje auto šípka rok sa rovná 2011. 143 00:07:22,040 --> 00:07:23,580 >> Opäť platí, že to, čo sa tu deje? 144 00:07:23,580 --> 00:07:25,720 Po prvé, ja som dereferencing moje auto. 145 00:07:25,720 --> 00:07:27,810 Čo je opäť, je ukazovateľ sem. 146 00:07:27,810 --> 00:07:31,270 Potom, potom, čo dereferenced moje auto, ja 147 00:07:31,270 --> 00:07:35,130 Následne sa sprístupnia polia rok, doska, a počítadlo kilometrov 148 00:07:35,130 --> 00:07:40,020 rovnako ako som mohol pred tým, než prvý, Použité hviezda dereferencia mojom aute, 149 00:07:40,020 --> 00:07:42,020 a bodku prístup na nosidlách. 150 00:07:42,020 --> 00:07:45,290 Takže môžete mať štruktúru, budete môže mať ukazovatele na štruktúry, 151 00:07:45,290 --> 00:07:48,360 a máte spôsoby, ako prístup pole týkajúce sa týchto štruktúr, 152 00:07:48,360 --> 00:07:52,600 či máte odkazy na je alebo samotné premenné. 153 00:07:52,600 --> 00:07:57,640 Dot alebo šípky, v závislosti na ako sa premenná bola vyhlásená. 154 00:07:57,640 --> 00:08:00,510 Som Doug Lloyd, je to CS50. 155 00:08:00,510 --> 00:08:01,975