1 00:00:00,000 --> 00:00:02,395 >> [Glazbom] 2 00:00:02,395 --> 00:00:05,750 3 00:00:05,750 --> 00:00:06,506 >> Doug LLOYD: U redu. 4 00:00:06,506 --> 00:00:08,880 Mi smo radili s integers, smo radili s likovima, 5 00:00:08,880 --> 00:00:11,930 smo radili splavi, parovima, žice, i bools. 6 00:00:11,930 --> 00:00:14,870 Mi smo iscrpili gotovo sve od [nečujan] tipova koji 7 00:00:14,870 --> 00:00:17,100 bili dostupni za sve nas zajedno. 8 00:00:17,100 --> 00:00:19,430 Ali sada želimo napraviti nešto više. 9 00:00:19,430 --> 00:00:20,210 Kako ćemo to učiniti? 10 00:00:20,210 --> 00:00:22,560 Kako stvoriti različite vrste podataka? 11 00:00:22,560 --> 00:00:26,130 Možemo učiniti pomoću strukture. 12 00:00:26,130 --> 00:00:30,180 Dakle, struktura dopušta nam da se ujedine varijable različitih vrsta 13 00:00:30,180 --> 00:00:34,810 u jednu, novu varijablu tipa, koje možemo dodijeliti svoje ime tipa. 14 00:00:34,810 --> 00:00:37,570 Ovo je stvarno jaka stvar biti u mogućnosti to učiniti, 15 00:00:37,570 --> 00:00:40,900 jer sada možemo skupina elementi različitih tipova podataka 16 00:00:40,900 --> 00:00:43,910 zajedno da imaju logičku vezu. 17 00:00:43,910 --> 00:00:46,440 Mi smo bili u mogućnosti to učiniti s polja vrsta, zar ne? 18 00:00:46,440 --> 00:00:49,540 Možemo varijable grupe istog tipa podataka 19 00:00:49,540 --> 00:00:53,410 zajedno u velike jedinice memorije, niz. 20 00:00:53,410 --> 00:00:56,660 >> Ali nismo bili u mogućnosti da se miješaju up različite vrste podataka zajedno. 21 00:00:56,660 --> 00:01:02,610 Ne možemo, recimo, uparivanje cijeli broj, i lik i dvostruki sve 22 00:01:02,610 --> 00:01:05,330 u istu stvar, a nazvati jednu cjelinu. 23 00:01:05,330 --> 00:01:08,830 Ali strukture ili često nazivaju konstrukt, 24 00:01:08,830 --> 00:01:09,585 zapravo možemo. 25 00:01:09,585 --> 00:01:12,370 Dakle, struktura je vrsta poput super varijable. 26 00:01:12,370 --> 00:01:16,530 To je varijabla koja sadrži ostale varijable unutar nje. 27 00:01:16,530 --> 00:01:19,650 Dakle ovdje je primjer vrlo jednostavna struktura. 28 00:01:19,650 --> 00:01:23,380 To je ono što je sintaksa će izgledati željeli stvoriti strukturu za auto. 29 00:01:23,380 --> 00:01:25,250 Sada, idemo kroz sintaksu ovdje. 30 00:01:25,250 --> 00:01:27,400 Struct, to je ključna riječ koja označava 31 00:01:27,400 --> 00:01:30,270 da sam stvara novi tip podataka ovdje. 32 00:01:30,270 --> 00:01:33,860 Konkretno, naziv tip podataka jest će biti struct automobila, kao što ćemo vidjeti. 33 00:01:33,860 --> 00:01:36,640 No, to je vrsta vrh off kompilator da je ovaj 34 00:01:36,640 --> 00:01:42,440 kao skupina varijabli koje se događa da se smatra da su dio iste vrste 35 00:01:42,440 --> 00:01:44,010 u minuti. 36 00:01:44,010 --> 00:01:46,340 >> Automobili, samo naziv strukture. 37 00:01:46,340 --> 00:01:50,590 Opet, vrsta ovdje podaci će biti struct auto, a ne samo auto. 38 00:01:50,590 --> 00:01:53,060 Ali ako imate different-- Ako ste stvorili više konstrukt 39 00:01:53,060 --> 00:01:56,950 u istom programu, morate razlikovati STRUCT i Struct. 40 00:01:56,950 --> 00:02:00,140 Dakle struct auto, ja mogu imati struct student, na primjer, 41 00:02:00,140 --> 00:02:01,790 u istom programu. 42 00:02:01,790 --> 00:02:05,980 Unutar od vitičastim zagradama su sve tzv poljima, 43 00:02:05,980 --> 00:02:07,954 ili članovi strukture. 44 00:02:07,954 --> 00:02:10,370 Pa što su neke od stvari koji su inherentne u automobilu? 45 00:02:10,370 --> 00:02:15,270 Pa, to obično ima godine, ima naziv modela, a registarske pločice, 46 00:02:15,270 --> 00:02:18,000 odometar koji obično ima neki broj milja na njemu, 47 00:02:18,000 --> 00:02:19,225 a možda veličina motora. 48 00:02:19,225 --> 00:02:23,570 I kao što možete vidjeti, ja sam konfuzan cijeli brojevi, a likovi i parovi. 49 00:02:23,570 --> 00:02:26,420 Oni svi će biti dio ove nove vrste podataka. 50 00:02:26,420 --> 00:02:29,750 >> Na kraju, konačna stvar koju trebate učiniti, ne zaboravite ovaj mali zarez 51 00:02:29,750 --> 00:02:30,290 na kraju. 52 00:02:30,290 --> 00:02:34,380 Nakon što smo završili definiranja strukture, moramo staviti zarez na kraju. 53 00:02:34,380 --> 00:02:37,325 To je vrlo čest sintaktičke pogreška, jer s funkcijom, 54 00:02:37,325 --> 00:02:40,200 na primjer, ti bi samo otvoreni kovrčava braće, u neposrednoj blizini kovrčava braće. 55 00:02:40,200 --> 00:02:42,950 Vi ne stavi zarez Na kraj definicije funkcija. 56 00:02:42,950 --> 00:02:46,430 Ovo izgleda kao funkciju definicija, ali to nije, 57 00:02:46,430 --> 00:02:49,653 i tako zarez tamo je samo podsjetnik da vas 58 00:02:49,653 --> 00:02:52,440 treba ga staviti tamo, jer prevodilac će inače ne 59 00:02:52,440 --> 00:02:53,510 znam što učiniti s njom. 60 00:02:53,510 --> 00:02:56,160 To je vrlo uobičajena pogreška slučajno napraviti 61 00:02:56,160 --> 00:02:58,570 kada ste prvi put definiranju strukture. 62 00:02:58,570 --> 00:02:59,500 >> U REDU. 63 00:02:59,500 --> 00:03:02,824 Dakle, mi obično definiraju naše strukture na samom vrhu naših programa 64 00:03:02,824 --> 00:03:05,490 jer oni vjerojatno ide da se koristi više funkcija. 65 00:03:05,490 --> 00:03:08,850 Mi ne želimo definirati struct unutar funkcije, 66 00:03:08,850 --> 00:03:12,110 jer onda možemo only-- Opseg strukture zapravo 67 00:03:12,110 --> 00:03:13,790 postoji samo unutar tu funkciju. 68 00:03:13,790 --> 00:03:17,450 Mi bi vjerojatno želite definirati strukturu tako da možemo ga koristiti u više funkcija, 69 00:03:17,450 --> 00:03:20,670 ili možda u višestrukim datoteke koje su vezani zajedno 70 00:03:20,670 --> 00:03:22,920 stvoriti svoju jedinstvenu program. 71 00:03:22,920 --> 00:03:24,920 Ponekad i umjesto definiranja strukture 72 00:03:24,920 --> 00:03:27,961 na samom vrhu, gdje ste stavili pound uključuje i vaš funta definira, 73 00:03:27,961 --> 00:03:32,080 na primjer, možda ćete ih staviti u odvojene točka h datoteke koje zatim 74 00:03:32,080 --> 00:03:35,020 funta su sami. 75 00:03:35,020 --> 00:03:37,620 >> Tako imamo strukture, ali sada moramo dobiti unutar njih. 76 00:03:37,620 --> 00:03:39,800 Kako ćemo dobiti unutar struktura za pristup 77 00:03:39,800 --> 00:03:43,530 one pod-varijable one varijable koje postoje unutar strukture? 78 00:03:43,530 --> 00:03:46,810 Pa, imamo nešto što se zove operator točka, što nam omogućuje 79 00:03:46,810 --> 00:03:50,990 pristupiti polja strukture. 80 00:03:50,990 --> 00:03:55,490 Tako, na primjer, recimo da sam proglasio moji podaci struktura upisati negdje 81 00:03:55,490 --> 00:03:59,020 na vrhu mog programa, ili možda u Točka h datoteka koja imam funta uključeni. 82 00:03:59,020 --> 00:04:03,360 Ako sam tada želio stvoriti novu varijabla tog tipa podataka, mogu reći, 83 00:04:03,360 --> 00:04:06,260 struct auto, moj auto, točka i zarez. 84 00:04:06,260 --> 00:04:11,580 Baš kao što sam mogao reći int x, ili naziv niz zarez. 85 00:04:11,580 --> 00:04:18,100 >> Vrsta ovdje podaci struct automobila, naziv varijable je moj auto, 86 00:04:18,100 --> 00:04:23,770 a onda ja mogu koristiti dot operatoru da pristup raznim područjima mog automobila. 87 00:04:23,770 --> 00:04:27,494 Dakle, ja mogu reći moj auto dot godine jednak 2011. 88 00:04:27,494 --> 00:04:28,410 To je savršeno u redu. 89 00:04:28,410 --> 00:04:34,210 Godine, ako se sjetiti, bio je definiran kao cijeli polje unutar ovog struct automobila 90 00:04:34,210 --> 00:04:35,200 tip podataka. 91 00:04:35,200 --> 00:04:39,966 Dakle, bilo koja varijabla podataka u struct automobila tipa, kao što moj auto, ja mogu reći moj auto 92 00:04:39,966 --> 00:04:44,030 dot godine jednako, a zatim dodijeliti to su neki cijeli broj vrijednosti, 2011. 93 00:04:44,030 --> 00:04:47,290 Moj auto dot ploču jednaka CS50. 94 00:04:47,290 --> 00:04:51,180 Moja kartica dot brojač kilometara jednak 50505 zarezom. 95 00:04:51,180 --> 00:04:53,270 Svi oni su savršeno u redu i da je 96 00:04:53,270 --> 00:04:57,802 kako pristupiti polja strukture. 97 00:04:57,802 --> 00:05:00,260 Strukture, ipak, ne treba biti izrađen na stog. 98 00:05:00,260 --> 00:05:02,950 Baš kao i svaki drugi varijablu smo Možete ih dinamički alocirati. 99 00:05:02,950 --> 00:05:06,309 Ako imamo program koji bi mogao se stvaraju mnoge strukture, 100 00:05:06,309 --> 00:05:08,100 ne znam koliko ćemo morati, 101 00:05:08,100 --> 00:05:10,800 onda moramo dinamički izdvojiti one strukture 102 00:05:10,800 --> 00:05:12,960 kao naš program radi. 103 00:05:12,960 --> 00:05:16,600 I tako, ako ćemo pristupiti polja strukture u tom kontekstu, 104 00:05:16,600 --> 00:05:20,660 Podsjetimo da prvo moramo dereference pokazivač na strukturu, 105 00:05:20,660 --> 00:05:24,810 a onda kad smo dereference pokazivač, onda možemo pristupiti polja. 106 00:05:24,810 --> 00:05:26,830 Ako imamo samo pokazivač strukturi, 107 00:05:26,830 --> 00:05:32,120 ne možemo samo reći pokazivač dot polje ime i dobiti ono što tražimo. 108 00:05:32,120 --> 00:05:34,259 Tu je dodatni korak dereferencing. 109 00:05:34,259 --> 00:05:36,050 Dakle, recimo da umjesto previous-- 110 00:05:36,050 --> 00:05:38,770 baš kao u prethodnom primjeru, umjesto da ga progla 111 00:05:38,770 --> 00:05:43,680 na ispustu, struct auto, moj automobil, točka i zarez, kažem struct automobil, 112 00:05:43,680 --> 00:05:48,020 zvijezda, pokazivač do struct automobil nazvao moj auto, 113 00:05:48,020 --> 00:05:51,250 jednako malloc veličinu struct automobila. 114 00:05:51,250 --> 00:05:54,950 Veličina ćemo shvatiti koliko bajtova vaša nova vrsta podataka zauzima. 115 00:05:54,950 --> 00:05:58,570 Ne nužno samo morate koristiti veličina, širina, int, char ili, ili bilo 116 00:05:58,570 --> 00:05:59,715 od ugrađenih vrste podataka. 117 00:05:59,715 --> 00:06:02,090 Prevodilac je dovoljno pametan shvatiti kako mnogo bajtova 118 00:06:02,090 --> 00:06:04,170 zahtijeva vašem novom strukturom. 119 00:06:04,170 --> 00:06:09,610 Tako sam malloc si jedinicu memorije dovoljno velika da se u struct automobil, 120 00:06:09,610 --> 00:06:12,410 i ja dobiti pokazivač natrag na taj blok memorije, 121 00:06:12,410 --> 00:06:16,090 a pokazivač je dodijeljen moj auto. 122 00:06:16,090 --> 00:06:18,050 >> Sada, ako želim pristupom Područja mog automobila, 123 00:06:18,050 --> 00:06:22,615 Prvi put sam dereference moj auto pomoću dereference operater, zvijezda 124 00:06:22,615 --> 00:06:26,620 kako smo vidjeli iz pokazivače video, a zatim nakon I dereference, 125 00:06:26,620 --> 00:06:32,200 onda ja mogu koristiti dot operatoru da pristup raznim područjima mog automobila. 126 00:06:32,200 --> 00:06:35,490 Star auto dot godine jednak 2011. 127 00:06:35,490 --> 00:06:38,480 Da bi učinak želimo u ovom slučaju, 128 00:06:38,480 --> 00:06:41,960 jer smo dinamički dodijeljen moj auto. 129 00:06:41,960 --> 00:06:43,610 >> To je vrsta neugodno, ipak, zar ne? 130 00:06:43,610 --> 00:06:44,818 Tu je proces sada u 2 koraka. 131 00:06:44,818 --> 00:06:47,460 Sada moramo dereference-- imamo operator zvijezda, 132 00:06:47,460 --> 00:06:48,910 a imamo operatera dot. 133 00:06:48,910 --> 00:06:51,660 I kao što ste mogli očekivati, jer C programera volim kraće načine 134 00:06:51,660 --> 00:06:53,740 raditi stvari, tu je kraći način da to učinite. 135 00:06:53,740 --> 00:06:57,790 Tu je još jedan operater zove strijela, što čini ovaj proces mnogo lakše. 136 00:06:57,790 --> 00:07:00,750 Način strelica radi je To je prvi dereferences 137 00:07:00,750 --> 00:07:03,560 pokazivač na lijevoj strana operatora, 138 00:07:03,560 --> 00:07:06,620 i zatim, nakon dereferenced pokazivač na lijevoj strani, 139 00:07:06,620 --> 00:07:09,620 To pristupa polje na desnoj strani. 140 00:07:09,620 --> 00:07:14,170 I tako već smo imali ovu vrstu Star moj auto dot sve ove stvari, 141 00:07:14,170 --> 00:07:15,880 kao što je bilo mnogo događa tamo. 142 00:07:15,880 --> 00:07:22,040 No, ono što smo umjesto toga može učiniti je this-- moj auto strelica godine jednak 2011. 143 00:07:22,040 --> 00:07:23,580 >> Opet, što se događa ovdje? 144 00:07:23,580 --> 00:07:25,720 Prvo, ja sam dereferencing moj auto. 145 00:07:25,720 --> 00:07:27,810 Što je opet, je pokazivač ovdje. 146 00:07:27,810 --> 00:07:31,270 Zatim, nakon što dereferenced moj auto, ja 147 00:07:31,270 --> 00:07:35,130 tada može pristupiti polja godine, ploča i brojač kilometara 148 00:07:35,130 --> 00:07:40,020 baš kao što sam mogao prije nego što prvi Rabljeni zvijezda dereference moj auto, 149 00:07:40,020 --> 00:07:42,020 i dot za pristup polje. 150 00:07:42,020 --> 00:07:45,290 Tako možete imati strukture, što može imati pokazivače strukturama, 151 00:07:45,290 --> 00:07:48,360 i imate načina pristupa polja tih objekata, 152 00:07:48,360 --> 00:07:52,600 imate li upućuje na ih ili sami varijabli. 153 00:07:52,600 --> 00:07:57,640 Dot ili strelica, ovisno o kako je varijabla je proglašen. 154 00:07:57,640 --> 00:08:00,510 Ja sam Doug Lloyd, ovo je CS50. 155 00:08:00,510 --> 00:08:01,975