1 00:00:00,000 --> 00:00:02,395 >> [Přehrávání 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 jsme s celými čísly, jsme pracovali s charaktery, 5 00:00:08,880 --> 00:00:11,930 jsme pracovali plováky, dvoulůžkové, struny, a bools. 6 00:00:11,930 --> 00:00:14,870 Jsme vyčerpali skoro všechny z [neslyšitelný] typů, které 7 00:00:14,870 --> 00:00:17,100 byly k dispozici pro nás všechny společně. 8 00:00:17,100 --> 00:00:19,430 Ale teď chceme udělat něco víc. 9 00:00:19,430 --> 00:00:20,210 Jak to uděláme? 10 00:00:20,210 --> 00:00:22,560 Jak můžeme vytvořit různé datové typy? 11 00:00:22,560 --> 00:00:26,130 Můžeme tak učinit pomocí struktur. 12 00:00:26,130 --> 00:00:30,180 Takže struktury nám umožní sjednotit proměnné různých typů 13 00:00:30,180 --> 00:00:34,810 do jednoho, nový typ proměnné, které můžeme přiřadit svůj vlastní název typu. 14 00:00:34,810 --> 00:00:37,570 To je opravdu silný věc je být schopen dělat, 15 00:00:37,570 --> 00:00:40,900 protože můžeme nyní skupina prvky různých datových typů 16 00:00:40,900 --> 00:00:43,910 u sebe, že mají logické spojení. 17 00:00:43,910 --> 00:00:46,440 Byli jsme schopni to udělat s poli Druh, že jo? 18 00:00:46,440 --> 00:00:49,540 WE CAN proměnné skupiny stejného typu datového 19 00:00:49,540 --> 00:00:53,410 Ve velké jednotce paměti, pole. 20 00:00:53,410 --> 00:00:56,660 >> Ale my jsme nebyli schopni míchat up různými typy dat dohromady. 21 00:00:56,660 --> 00:01:02,610 Nemůžeme říci, spárovat celé číslo, a charakter, a dvojitý všechny 22 00:01:02,610 --> 00:01:05,330 ve stejné věci a volání, že jeden celek. 23 00:01:05,330 --> 00:01:08,830 Ale s struktury, nebo často označovány jako structs, 24 00:01:08,830 --> 00:01:09,585 jsme vlastně může. 25 00:01:09,585 --> 00:01:12,370 Takže struktura je druh jako se super proměnné. 26 00:01:12,370 --> 00:01:16,530 Je to proměnná, která obsahuje ostatní proměnné uvnitř ní. 27 00:01:16,530 --> 00:01:19,650 Tak tady je příklad velmi jednoduchou strukturu. 28 00:01:19,650 --> 00:01:23,380 To je to, co syntaxe by vypadat chtěl vytvořit strukturu pro auto. 29 00:01:23,380 --> 00:01:25,250 Nyní, pojďme projít syntaxe zde. 30 00:01:25,250 --> 00:01:27,400 Struct, to je klíčové slovo, které označuje 31 00:01:27,400 --> 00:01:30,270 že jsem vytvořit nový datový typ sem. 32 00:01:30,270 --> 00:01:33,860 Zejména, název datového typu je Bude struct auto, jak uvidíme. 33 00:01:33,860 --> 00:01:36,640 Ale to je druh hrotu off na kompilátoru, že tento 34 00:01:36,640 --> 00:01:42,440 jako skupina proměnných, které se děje , které mají být považovány za součást stejného druhu 35 00:01:42,440 --> 00:01:44,010 v minutě. 36 00:01:44,010 --> 00:01:46,340 >> Automobily, pouze název struktury. 37 00:01:46,340 --> 00:01:50,590 Opět platí, že datový typ tady se děje být struct auto, ne jen auto. 38 00:01:50,590 --> 00:01:53,060 Ale pokud máte different-- pokud vytvoříte více structs 39 00:01:53,060 --> 00:01:56,950 ve stejném programu, je třeba rozlišovat mezi struct a Struct. 40 00:01:56,950 --> 00:02:00,140 Takže struct auto, mohl bych mít také struct student, například, 41 00:02:00,140 --> 00:02:01,790 ve stejném programu. 42 00:02:01,790 --> 00:02:05,980 Uvnitř složených závorek jsou všechny takzvaných polí, 43 00:02:05,980 --> 00:02:07,954 nebo členové struktury. 44 00:02:07,954 --> 00:02:10,370 Takže jaké jsou některé z věcí, které jsou vlastní v autě? 45 00:02:10,370 --> 00:02:15,270 No, to obvykle má rok, který název modelu, a SPZ, 46 00:02:15,270 --> 00:02:18,000 počítadlo kilometrů, který má obvykle některé počet mil na to, 47 00:02:18,000 --> 00:02:19,225 a možná velikostí motoru. 48 00:02:19,225 --> 00:02:23,570 A jak vidíte, jsem promíchání celá čísla a znaky a dvoulůžkové. 49 00:02:23,570 --> 00:02:26,420 Všichni se bude část tohoto nového datového typu. 50 00:02:26,420 --> 00:02:29,750 >> Konečně, poslední věc, kterou musím udělat, nezapomeňte tuto malou středník 51 00:02:29,750 --> 00:02:30,290 na konci. 52 00:02:30,290 --> 00:02:34,380 Poté, co jsme dokončení definující strukturu, musíme dát středník na konci. 53 00:02:34,380 --> 00:02:37,325 Je to velmi časté syntaktický chyba, protože s funkcí, 54 00:02:37,325 --> 00:02:40,200 Například, měli byste prostě open složená závorka, v blízkosti je složená závorka. 55 00:02:40,200 --> 00:02:42,950 Ty nedávejte středník na konec definice funkce. 56 00:02:42,950 --> 00:02:46,430 To vypadá jako funkce definice, ale není to, 57 00:02:46,430 --> 00:02:49,653 a tak tam středník je jen připomínkou, že vás 58 00:02:49,653 --> 00:02:52,440 je třeba, aby to tam dal, protože kompilátor jinak 59 00:02:52,440 --> 00:02:53,510 Víte, co s tím dělat. 60 00:02:53,510 --> 00:02:56,160 Je to velmi častá chyba omylem, aby 61 00:02:56,160 --> 00:02:58,570 když jste poprvé definování struktury. 62 00:02:58,570 --> 00:02:59,500 >> DOBŘE. 63 00:02:59,500 --> 00:03:02,824 Tak jsme se obvykle definovat naše struktury na samém vrcholu našich programů 64 00:03:02,824 --> 00:03:05,490 protože jsou pravděpodobně bude , které mají být používány ve více funkcemi. 65 00:03:05,490 --> 00:03:08,850 Nechceme, aby definovat struct uvnitř funkce, 66 00:03:08,850 --> 00:03:12,110 protože pak můžeme only-- Rozsah struktury skutečně 67 00:03:12,110 --> 00:03:13,790 existuje pouze uvnitř této funkce. 68 00:03:13,790 --> 00:03:17,450 Rádi bychom pravděpodobně chtít definovat strukturu takže ji můžeme použít v různých funkcích, 69 00:03:17,450 --> 00:03:20,670 nebo snad v násobku Soubory, které jsou svázané 70 00:03:20,670 --> 00:03:22,920 abychom vytvořili jeden program. 71 00:03:22,920 --> 00:03:24,920 Někdy také namísto definování strukturu 72 00:03:24,920 --> 00:03:27,961 na samém vrcholu, kde si dát libra zahrnuje i vaše libra definuje, 73 00:03:27,961 --> 00:03:32,080 Například, můžete dát je do samostatné dot h soubory, které vás pak 74 00:03:32,080 --> 00:03:35,020 libra i vy. 75 00:03:35,020 --> 00:03:37,620 >> Takže máme strukturu, ale teď musíme se dostat dovnitř nich. 76 00:03:37,620 --> 00:03:39,800 Jak se dostaneme dovnitř struktura pro přístup 77 00:03:39,800 --> 00:03:43,530 tyto dílčí proměnné, ty proměnné že existují uvnitř konstrukce? 78 00:03:43,530 --> 00:03:46,810 No, my máme něco jako operátor tečka, která nám umožňuje 79 00:03:46,810 --> 00:03:50,990 pro přístup na oblasti struktury. 80 00:03:50,990 --> 00:03:55,490 Tak například, řekněme, že jsem prohlásil, moje datového typu struktura někde 81 00:03:55,490 --> 00:03:59,020 v horní části mého programu, nebo možná v tečka h soubor, který jsem libru hotelu. 82 00:03:59,020 --> 00:04:03,360 Pokud bych pak chcete vytvořit nový proměnná tohoto typu dat, mohu říci, 83 00:04:03,360 --> 00:04:06,260 struct auto, moje auto, středník. 84 00:04:06,260 --> 00:04:11,580 Stejně jako bych mohl říct, int x, nebo název řetězce středník. 85 00:04:11,580 --> 00:04:18,100 >> Datový typ je zde struct auto, jméno proměnné je moje auto, 86 00:04:18,100 --> 00:04:23,770 a pak mohu použít operátor tečky na přístup k různým pole mém autě. 87 00:04:23,770 --> 00:04:27,494 Takže můžu říct své auto dot rok se rovná 2011. 88 00:04:27,494 --> 00:04:28,410 To je naprosto v pořádku. 89 00:04:28,410 --> 00:04:34,210 Rok, pokud si vzpomínáte, byla definována jako integer pole uvnitř tohoto struct auta 90 00:04:34,210 --> 00:04:35,200 datový typ. 91 00:04:35,200 --> 00:04:39,966 Takže jakákoliv proměnná data na struct auta typu, jako je moje auto, mohu říci své auto 92 00:04:39,966 --> 00:04:44,030 dot rok rovná a přiřaďte to nějaký celočíselná hodnota 2011. 93 00:04:44,030 --> 00:04:47,290 Moje auto dot deska rovná CS50. 94 00:04:47,290 --> 00:04:51,180 Moje karta tečka stav tachometru se rovná 50505 středník. 95 00:04:51,180 --> 00:04:53,270 Všechny z nich jsou naprosto v pořádku a to je 96 00:04:53,270 --> 00:04:57,802 jak přistupovat k pole struktury. 97 00:04:57,802 --> 00:05:00,260 Struktury, ale nepotřebují být vytvořen v zásobníku. 98 00:05:00,260 --> 00:05:02,950 Stejně jako jakékoliv jiné proměnné, my může dynamicky přidělovat je. 99 00:05:02,950 --> 00:05:06,309 Máme-li program, který by mohl bude generovat mnoho staveb, 100 00:05:06,309 --> 00:05:08,100 nevíme, kolik budeme potřebovat, 101 00:05:08,100 --> 00:05:10,800 pak musíme dynamicky alokovat ty struktury 102 00:05:10,800 --> 00:05:12,960 jako náš program běží. 103 00:05:12,960 --> 00:05:16,600 A tak, když budeme pro přístup k pole struktury v této souvislosti, 104 00:05:16,600 --> 00:05:20,660 Připomeňme si, že musíme nejprve dereference ukazatel na strukturu, 105 00:05:20,660 --> 00:05:24,810 a pak ještě jednou my dereference ukazatel, pak můžeme přistupovat pole. 106 00:05:24,810 --> 00:05:26,830 Pokud budeme mít pouze ukazatel na strukturu, 107 00:05:26,830 --> 00:05:32,120 nemůžeme jen říci ukazatel dot pole pojmenovat a dostat to, co hledáme. 108 00:05:32,120 --> 00:05:34,259 Je tu další krok dereferencing. 109 00:05:34,259 --> 00:05:36,050 Takže řekněme, že namísto previous-- 110 00:05:36,050 --> 00:05:38,770 stejně jako v předchozím příkladu, místo toho jeho vyhlášení 111 00:05:38,770 --> 00:05:43,680 na zásobníku, struct auto, my auto, středník, říkám struct auto, 112 00:05:43,680 --> 00:05:48,020 hvězda, ukazatel na struct auto volal moje auto, 113 00:05:48,020 --> 00:05:51,250 se rovná malloc velikost struct vozu. 114 00:05:51,250 --> 00:05:54,950 Velikost budeme zjistit, kolik bajtů váš nový datový typ zabírá. 115 00:05:54,950 --> 00:05:58,570 Nemusíte nutně jen je třeba použít velikost, šířka, int nebo char, nebo na kteroukoliv 116 00:05:58,570 --> 00:05:59,715 z vestavěných datových typů. 117 00:05:59,715 --> 00:06:02,090 Kompilátor je dost chytrý, přijít na to, kolik bajtů 118 00:06:02,090 --> 00:06:04,170 jsou požadovány vaší nové struktury. 119 00:06:04,170 --> 00:06:09,610 Tak jsem malloc sám jednotku paměti dostatečně velké, aby držet struct auto, 120 00:06:09,610 --> 00:06:12,410 a já si ukazatel zpět k tomuto bloku paměti, 121 00:06:12,410 --> 00:06:16,090 a že ukazatel je přiřazen k autu. 122 00:06:16,090 --> 00:06:18,050 >> A teď, když chci přístup pole mého auta, 123 00:06:18,050 --> 00:06:22,615 První dereference mém autě jsem se s použitím operátor dereference, hvězda 124 00:06:22,615 --> 00:06:26,620 že jsme viděli z ukazatelů videa, a pak poté, co jsem dereference, 125 00:06:26,620 --> 00:06:32,200 pak mohu použít operátor tečky na přístup k různým pole mém autě. 126 00:06:32,200 --> 00:06:35,490 Hvězda mého auta tečka rok se rovná 2011. 127 00:06:35,490 --> 00:06:38,480 To by mělo za následek chceme v tomto případě, 128 00:06:38,480 --> 00:06:41,960 proto, že jsme dynamicky přiděleno moje auto. 129 00:06:41,960 --> 00:06:43,610 >> Je to trochu nepříjemné, že? 130 00:06:43,610 --> 00:06:44,818 Tam je proces, nyní 2-krok. 131 00:06:44,818 --> 00:06:47,460 Nyní musíme dereference-- máme operátor hvězdy, 132 00:06:47,460 --> 00:06:48,910 a máme operátoru tečka. 133 00:06:48,910 --> 00:06:51,660 A jak se dalo očekávat, protože Programátoři C milují kratší cesty 134 00:06:51,660 --> 00:06:53,740 dělat věci, tam je kratší způsob, jak to udělat. 135 00:06:53,740 --> 00:06:57,790 Tam je další operátor s názvem šipka, což činí tento proces mnohem jednodušší. 136 00:06:57,790 --> 00:07:00,750 Způsob, jakým funguje, je šipka se poprvé dereferences 137 00:07:00,750 --> 00:07:03,560 ukazatel na levé straně strana provozovatele, 138 00:07:03,560 --> 00:07:06,620 a poté, po dereferenced ukazatel na levé straně, 139 00:07:06,620 --> 00:07:09,620 přistupuje pole na pravé straně. 140 00:07:09,620 --> 00:07:14,170 A tak dříve jsme měli tento druh Hvězdných moje auto dot všechny ty věci, 141 00:07:14,170 --> 00:07:15,880 jako by tam bylo hodně tam děje. 142 00:07:15,880 --> 00:07:22,040 Ale to, co můžeme udělat, je místo toho tohle-- moje auto šipka rok se rovná 2011. 143 00:07:22,040 --> 00:07:23,580 >> Opět platí, že to, co se tady děje? 144 00:07:23,580 --> 00:07:25,720 Za prvé, já jsem dereferencing moje auto. 145 00:07:25,720 --> 00:07:27,810 Což je opět, je ukazatel sem. 146 00:07:27,810 --> 00:07:31,270 Pak, poté, co dereferenced moje auto, já 147 00:07:31,270 --> 00:07:35,130 Poté budou přístupné i pole rok, deska, a počítadlo kilometrů 148 00:07:35,130 --> 00:07:40,020 stejně jako jsem mohl před tím, než první, Použité hvězda dereference mém autě, 149 00:07:40,020 --> 00:07:42,020 a tečku přístup na nosítkách. 150 00:07:42,020 --> 00:07:45,290 Takže můžete mít strukturu, budete může mít ukazatele na struktury, 151 00:07:45,290 --> 00:07:48,360 a máte způsoby, jak přístup pole týkající se těchto struktur, 152 00:07:48,360 --> 00:07:52,600 zda máte odkazy na je nebo samotné proměnné. 153 00:07:52,600 --> 00:07:57,640 Dot nebo šipky, v závislosti na jak se proměnná byla vyhlášena. 154 00:07:57,640 --> 00:08:00,510 Jsem Doug Lloyd, je to CS50. 155 00:08:00,510 --> 00:08:01,975