1 00:00:00,000 --> 00:00:02,395 >> [Zenelejátszási] 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 Dolgoztunk egész számok, dolgoztunk a karakterek, 5 00:00:08,880 --> 00:00:11,930 dolgoztunk úszók, páros, vonósok, és bools. 6 00:00:11,930 --> 00:00:14,870 Mi már kimerítette elég sok minden Az [hallhatatlan] típusok 7 00:00:14,870 --> 00:00:17,100 már elérhető számunkra végig. 8 00:00:17,100 --> 00:00:19,430 De most akarunk tenni valamit. 9 00:00:19,430 --> 00:00:20,210 Hogyan csináljuk ezt? 10 00:00:20,210 --> 00:00:22,560 Hogyan teremtjük meg a különböző adattípusok? 11 00:00:22,560 --> 00:00:26,130 Mi lehet ezt használja struktúrák. 12 00:00:26,130 --> 00:00:30,180 Tehát szerkezet lehetővé teszi számunkra, hogy egyesítse a különböző típusú változókat 13 00:00:30,180 --> 00:00:34,810 egyetlen, új típusú változót, amelyhez hozzá lehet rendelni saját típus neve. 14 00:00:34,810 --> 00:00:37,570 Ez egy nagyon erős dolog, hogy képes megtenni, 15 00:00:37,570 --> 00:00:40,900 mert most már csoportban elemei különböző adattípusok 16 00:00:40,900 --> 00:00:43,910 együtt, hogy van egy logikai kapcsolat. 17 00:00:43,910 --> 00:00:46,440 Képesek voltunk, hogy ezt tömbök fajta, ugye? 18 00:00:46,440 --> 00:00:49,540 Mi lehet csoport változók az azonos típusú adatok 19 00:00:49,540 --> 00:00:53,410 együtt egy nagy egység memória, egy tömbben. 20 00:00:53,410 --> 00:00:56,660 >> De nem volt képes mix Különböző adattípusok össze. 21 00:00:56,660 --> 00:01:02,610 Nem tudjuk, mondjuk, párosítani egész szám, és egy karaktert, és egy dupla összes 22 00:01:02,610 --> 00:01:05,330 ugyanabban a dolog, és hívni, hogy egy egységet alkot. 23 00:01:05,330 --> 00:01:08,830 De szerkezetek, vagy Gyakran nevezik struktúrákat, 24 00:01:08,830 --> 00:01:09,585 mi valójában tud. 25 00:01:09,585 --> 00:01:12,370 Tehát egy olyan struktúra egyfajta mint egy szuper változó. 26 00:01:12,370 --> 00:01:16,530 Ez egy változó, amely tartalmazza Más változók belsejébe. 27 00:01:16,530 --> 00:01:19,650 Tehát itt egy példa egy nagyon egyszerű szerkezet. 28 00:01:19,650 --> 00:01:23,380 Ez az, amit a szintaxis nézne Szeretnénk létrehozni egy olyan struktúra egy autó. 29 00:01:23,380 --> 00:01:25,250 Most, menjünk át a szintaxist itt. 30 00:01:25,250 --> 00:01:27,400 Struct, ez a kulcsszó, ami azt jelzi, 31 00:01:27,400 --> 00:01:30,270 hogy hozok létre egy új adattípust itt. 32 00:01:30,270 --> 00:01:33,860 Különösen, az adattípus neve lesz struct autó, mint látni fogjuk. 33 00:01:33,860 --> 00:01:36,640 De ez a fajta tip ki a fordító, hogy ez a 34 00:01:36,640 --> 00:01:42,440 mint egy csoport változók megy részének kell tekinteni az azonos típusú 35 00:01:42,440 --> 00:01:44,010 Egy perc. 36 00:01:44,010 --> 00:01:46,340 >> Autók, csak a neve a szerkezet. 37 00:01:46,340 --> 00:01:50,590 Ismét az adatokat írja ide megy hogy struct autó, nem csak autós. 38 00:01:50,590 --> 00:01:53,060 De ha van different-- Ha több olyan struktúrákat 39 00:01:53,060 --> 00:01:56,950 ugyanabban a programban, meg kell megkülönböztetni struct és struktúra. 40 00:01:56,950 --> 00:02:00,140 Szóval struct autó, azt is lehet struct diák, például, 41 00:02:00,140 --> 00:02:01,790 ugyanabban a programban. 42 00:02:01,790 --> 00:02:05,980 Belül a kapcsos zárójelek az összes úgynevezett mezők, 43 00:02:05,980 --> 00:02:07,954 vagy tagok a szerkezet. 44 00:02:07,954 --> 00:02:10,370 Tehát mi van néhány dolog, melyek velejárói egy autóban? 45 00:02:10,370 --> 00:02:15,270 Nos, ez általában egy évben, a modell neve, valamint a rendszám, 46 00:02:15,270 --> 00:02:18,000 egy skála, ami általában Egyes számú mérföld rajta, 47 00:02:18,000 --> 00:02:19,225 és talán egy motor méretét. 48 00:02:19,225 --> 00:02:23,570 És amint látod, én keverése egészek és a karakterek és a páros. 49 00:02:23,570 --> 00:02:26,420 Mind lesz része ennek új adatok típusát. 50 00:02:26,420 --> 00:02:29,750 >> Végül, az utolsó dolog, amit tennie kell, ne felejtsük el, ez a kis pontosvessző 51 00:02:29,750 --> 00:02:30,290 a végén. 52 00:02:30,290 --> 00:02:34,380 Miután befejeztük szerkezetét meghatározó, meg kell tenni a pontosvessző végén. 53 00:02:34,380 --> 00:02:37,325 Ez egy nagyon gyakori szintaktikai hiba, mert egy olyan funkciója, 54 00:02:37,325 --> 00:02:40,200 Például, akkor csak meg nyitott zárójel, kapcsos zárójel bezár. 55 00:02:40,200 --> 00:02:42,950 Nem tesz egy pontosvesszőt vége függvénydefiníciójában. 56 00:02:42,950 --> 00:02:46,430 Ez úgy néz ki, mint egy függvény definíció, de ez nem, 57 00:02:46,430 --> 00:02:49,653 és így a pontosvessző van csak egy emlékeztető, hogy 58 00:02:49,653 --> 00:02:52,440 kell tenni, hogy ott, mert a fordító egyébként nem 59 00:02:52,440 --> 00:02:53,510 hogy mit kell csinálni vele. 60 00:02:53,510 --> 00:02:56,160 Ez egy nagyon gyakori hiba véletlenül teszik 61 00:02:56,160 --> 00:02:58,570 amikor először meghatározó struktúrák. 62 00:02:58,570 --> 00:02:59,500 >> OKÉ. 63 00:02:59,500 --> 00:03:02,824 Így általában meghatározza a struktúrák legtetején a programok 64 00:03:02,824 --> 00:03:05,490 mert valószínűleg fog által használt több funkciót. 65 00:03:05,490 --> 00:03:08,850 Mi nem szeretnénk definiálni struct egy függvényen belül, 66 00:03:08,850 --> 00:03:12,110 mert akkor lehet only-- a körét a szerkezet valóban 67 00:03:12,110 --> 00:03:13,790 csak azért létezik, aztán az funkciót. 68 00:03:13,790 --> 00:03:17,450 Akkor valószínűleg szeretné állítani szerkezete így tudjuk használni a többfunkciós, 69 00:03:17,450 --> 00:03:20,670 vagy talán több fájlok össze legyen kötve 70 00:03:20,670 --> 00:03:22,920 hogy hozzon létre a különálló program. 71 00:03:22,920 --> 00:03:24,920 Néha is helyett A szerkezetét meghatározó 72 00:03:24,920 --> 00:03:27,961 legtetején, ahová a font magában foglalja, és a font meghatározza, 73 00:03:27,961 --> 00:03:32,080 Például, lehet, hogy tedd Külön pont h fájlokat, amelyet aztán 74 00:03:32,080 --> 00:03:35,020 font közé magát. 75 00:03:35,020 --> 00:03:37,620 >> Tehát van struktúrákat, de most meg kell, hogy bennük. 76 00:03:37,620 --> 00:03:39,800 Hogyan jutunk belsejét egy olyan struktúra, hogy hozzáférést 77 00:03:39,800 --> 00:03:43,530 azok al-változók, azokat a változókat hogy létezik a szerkezeten belül? 78 00:03:43,530 --> 00:03:46,810 Nos, van valami neve A dot-üzemeltető, amely lehetővé teszi számunkra, 79 00:03:46,810 --> 00:03:50,990 elérni a mezők a szerkezet. 80 00:03:50,990 --> 00:03:55,490 Így például, mondjuk én nyilvánította én struktúra adatok írja valahol 81 00:03:55,490 --> 00:03:59,020 a tetején a programom, vagy talán a egy pont h fájlt, hogy én már font tartalmazza. 82 00:03:59,020 --> 00:04:03,360 Ha ezután szeretne létrehozni egy új változó ugyanilyen típusra, azt mondhatom, 83 00:04:03,360 --> 00:04:06,260 struct autó, az autóm, pontosvessző. 84 00:04:06,260 --> 00:04:11,580 Csakúgy, mint Mondhatnám int x, vagy string name pontosvessző. 85 00:04:11,580 --> 00:04:18,100 >> Az adatok típusa itt struct autó, A változó nevét az autóm, 86 00:04:18,100 --> 00:04:23,770 és akkor én is használni a pont üzemeltető hozzáférhet a különböző területeken a kocsimat. 87 00:04:23,770 --> 00:04:27,494 Tehát azt mondhatom, az autóm dot év megegyezik 2011. 88 00:04:27,494 --> 00:04:28,410 Ez tökéletesen megfelel. 89 00:04:28,410 --> 00:04:34,210 Év, ha felidézni, definiáltuk egész területen belül ez a struktúra autó 90 00:04:34,210 --> 00:04:35,200 Adattípus. 91 00:04:35,200 --> 00:04:39,966 Tehát bármely változó a struct autó adatok típusát, mint például az autóm, azt mondhatom, az autóm 92 00:04:39,966 --> 00:04:44,030 dot év megegyezik majd rendelni ez valamilyen egész szám, 2011. 93 00:04:44,030 --> 00:04:47,290 Az autóm dot lemez megegyezik CS50. 94 00:04:47,290 --> 00:04:51,180 Saját kártya dot kilométeróra megegyezik 50505 pontosvessző. 95 00:04:51,180 --> 00:04:53,270 Az összes ilyen van tökéletesen, és ez az, 96 00:04:53,270 --> 00:04:57,802 hogyan férünk hozzá az mezők a szerkezet. 97 00:04:57,802 --> 00:05:00,260 Struktúrák, bár nem kell meg kell teremteni a verem. 98 00:05:00,260 --> 00:05:02,950 Csakúgy, mint bármely más változó, mi dinamikusan osztja őket. 99 00:05:02,950 --> 00:05:06,309 Ha van egy program, ami talán generáló sok struktúra, 100 00:05:06,309 --> 00:05:08,100 nem tudjuk, hogy hány fogunk szüksége, 101 00:05:08,100 --> 00:05:10,800 akkor meg kell dinamikusan osztja ezeket a struktúrákat 102 00:05:10,800 --> 00:05:12,960 mint a mi program fut. 103 00:05:12,960 --> 00:05:16,600 És így ha fogunk elérni a mező egy szerkezet, amely összefüggésben, 104 00:05:16,600 --> 00:05:20,660 Emlékezzünk vissza, hogy először meg kell követéssel A mutatót a szerkezet, 105 00:05:20,660 --> 00:05:24,810 majd ha egyszer követéssel, a mutatót, akkor érheti el a földeken. 106 00:05:24,810 --> 00:05:26,830 Ha csak egy mutatót a szerkezet, 107 00:05:26,830 --> 00:05:32,120 nem tudjuk csak mondani mutató dot terén név és azt kapja, amit keresünk. 108 00:05:32,120 --> 00:05:34,259 Ott a további lépést, a dereferencing. 109 00:05:34,259 --> 00:05:36,050 Tehát mondjuk, hogy helyett a previous-- 110 00:05:36,050 --> 00:05:38,770 csakúgy, mint az előző példában, ahelyett nyilvánította 111 00:05:38,770 --> 00:05:43,680 a veremben, struct autó, én autó, pontosvessző, mondom struct autó, 112 00:05:43,680 --> 00:05:48,020 csillag, egy mutató a struct autó nevezett autóm, 113 00:05:48,020 --> 00:05:51,250 egyenlő malloc mérete struct autó. 114 00:05:51,250 --> 00:05:54,950 Mérete majd kitaláljuk, hogy hány byte az új adatok típusát veszi fel. 115 00:05:54,950 --> 00:05:58,570 Nem feltétlenül csak akkor kell használni mérete, szélesség, int, vagy char, vagy bármely 116 00:05:58,570 --> 00:05:59,715 A beépített adattípusok. 117 00:05:59,715 --> 00:06:02,090 A fordító elég okos ahhoz, kitalálni, hogy hány bájt 118 00:06:02,090 --> 00:06:04,170 által előírt, az új struktúra. 119 00:06:04,170 --> 00:06:09,610 Szóval malloc magamnak egy egységnyi memória belefér egy struct autó, 120 00:06:09,610 --> 00:06:12,410 és kapok egy mutatót vissza E tömb memória, 121 00:06:12,410 --> 00:06:16,090 és hogy a mutató van rendelve az autóm. 122 00:06:16,090 --> 00:06:18,050 >> Most, ha azt akarom, hogy hozzáférést A mezők autóm, 123 00:06:18,050 --> 00:06:22,615 Én először hivatkozás feloldási autóm segítségével A hivatkozás feloldási üzemeltető, csillag 124 00:06:22,615 --> 00:06:26,620 Láttuk a mutatók videókat, majd miután követéssel, 125 00:06:26,620 --> 00:06:32,200 akkor tudom használni a pont üzemeltető hozzáférhet a különböző területeken a kocsimat. 126 00:06:32,200 --> 00:06:35,490 Csillag autóm dot évben egyenlő 2011. 127 00:06:35,490 --> 00:06:38,480 Ez lenne a hatása, azt akarjuk, ebben az esetben, 128 00:06:38,480 --> 00:06:41,960 mert már dinamikusan elkülönített autóm. 129 00:06:41,960 --> 00:06:43,610 >> Ez a fajta idegesítő, ugye? 130 00:06:43,610 --> 00:06:44,818 Van egy 2 lépésből áll most. 131 00:06:44,818 --> 00:06:47,460 Most meg kell dereference-- van egy csillag üzemeltető, 132 00:06:47,460 --> 00:06:48,910 és van egy pont operátor. 133 00:06:48,910 --> 00:06:51,660 És ahogy az várható, mert C programozók szeretik rövidebb utak 134 00:06:51,660 --> 00:06:53,740 a dolgokat, van egy rövidebb módja ennek. 135 00:06:53,740 --> 00:06:57,790 Van egy másik üzemben úgynevezett nyíl, ami miatt ez a folyamat sokkal könnyebb. 136 00:06:57,790 --> 00:07:00,750 Az út nyíl működik először dereferences 137 00:07:00,750 --> 00:07:03,560 A mutató a bal oldalán az üzemeltető, 138 00:07:03,560 --> 00:07:06,620 majd, miután másolunk A mutató a bal oldalon, 139 00:07:06,620 --> 00:07:09,620 hozzáfér a területen a jobb oldalon. 140 00:07:09,620 --> 00:07:14,170 És így korábban volt ilyen Star autóm pont ezekkel a dolgokkal, 141 00:07:14,170 --> 00:07:15,880 mintha egy csomó folyik ott. 142 00:07:15,880 --> 00:07:22,040 De mit tudunk, hanem tennie this-- autóm nyíl évben egyenlő 2011. 143 00:07:22,040 --> 00:07:23,580 >> Ismét, mi történik itt? 144 00:07:23,580 --> 00:07:25,720 Először is, én dereferencing autóm. 145 00:07:25,720 --> 00:07:27,810 Melyik megint egy mutató itt. 146 00:07:27,810 --> 00:07:31,270 Ezután, miután másolunk az autóm, én 147 00:07:31,270 --> 00:07:35,130 ezután hozzáférhetnek a földeken év, lemez, és a kilométer-számláló 148 00:07:35,130 --> 00:07:40,020 ahogy csak tudtam, mielőtt először Használt csillag hivatkozás feloldási autóm, 149 00:07:40,020 --> 00:07:42,020 és pont eléréséhez területén. 150 00:07:42,020 --> 00:07:45,290 Így van struktúrákat, akkor lehet mutatókat struktúrák, 151 00:07:45,290 --> 00:07:48,360 és van módja, hogy hozzáférést A mezők ezeket a struktúrákat, 152 00:07:48,360 --> 00:07:52,600 hogy van-e mutatókat őket, vagy a változók magukat. 153 00:07:52,600 --> 00:07:57,640 Dot vagy a nyíl, attól függően, hogy a változó nyilvánították. 154 00:07:57,640 --> 00:08:00,510 Én Doug Lloyd, ez CS50. 155 00:08:00,510 --> 00:08:01,975