1 00:00:00,000 --> 00:00:02,395 >> [Musiikkia] 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 Olemme työskennelleet kokonaislukuja, olemme työskennelleet merkkiä, 5 00:00:08,880 --> 00:00:11,930 olemme työskennelleet kellukkeet, tuplaa, jouset, ja bools. 6 00:00:11,930 --> 00:00:14,870 Olemme täyttäneet jokseenkin kaikki on [äänetön] tyyppejä, jotka 7 00:00:14,870 --> 00:00:17,100 ovat olleet meille koko ajan. 8 00:00:17,100 --> 00:00:19,430 Mutta nyt haluamme tehdä jotain enemmän. 9 00:00:19,430 --> 00:00:20,210 Miten me sen teemme? 10 00:00:20,210 --> 00:00:22,560 Miten luomme erilaiset tiedot? 11 00:00:22,560 --> 00:00:26,130 Voimme tehdä niin käyttämällä rakenteita. 12 00:00:26,130 --> 00:00:30,180 Niin rakenteiden avulla voimme yhdistää muuttujat erityyppisten 13 00:00:30,180 --> 00:00:34,810 yhdeksi, uusi muuttuja tyyppi, jonka voimme antaa oman lajin nimi. 14 00:00:34,810 --> 00:00:37,570 Tämä on todella vahva asia voi tehdä, 15 00:00:37,570 --> 00:00:40,900 koska voimme nyt ryhmä elementtejä erilaiset tiedot 16 00:00:40,900 --> 00:00:43,910 yhdessä, että on looginen yhteys. 17 00:00:43,910 --> 00:00:46,440 Olemme pystyneet tekemään tätä kanssa paneelit tavallaan, eikö? 18 00:00:46,440 --> 00:00:49,540 Voimme ryhmä muuttujat samaa tietotyyppiä 19 00:00:49,540 --> 00:00:53,410 yhdessä suuren yksikön muistia, array. 20 00:00:53,410 --> 00:00:56,660 >> Mutta emme ole voineet sekoittaa up erilaiset tiedot yhteen. 21 00:00:56,660 --> 00:01:02,610 Emme voi sanoa, pari kokonaisluku, ja luonne, ja kaksinkertainen kaikki 22 00:01:02,610 --> 00:01:05,330 samassa asia ja soittaa, että yhden yksikön. 23 00:01:05,330 --> 00:01:08,830 Mutta rakenteet, tai usein kutsutaan structs, 24 00:01:08,830 --> 00:01:09,585 me oikeastaan ​​voi. 25 00:01:09,585 --> 00:01:12,370 Joten rakenne on eräänlainen samankaltaisten Super muuttuja. 26 00:01:12,370 --> 00:01:16,530 Se on muuttuja, joka sisältää muut muuttujat sen sisälle. 27 00:01:16,530 --> 00:01:19,650 Joten tässä on esimerkki hyvin yksinkertainen rakenne. 28 00:01:19,650 --> 00:01:23,380 Tämä on mitä syntaksi näyttäisi haluavat luoda rakenne auto. 29 00:01:23,380 --> 00:01:25,250 Nyt mennään läpi syntaksin täällä. 30 00:01:25,250 --> 00:01:27,400 Struct, se avainsanan, joka ilmaisee 31 00:01:27,400 --> 00:01:30,270 että olen luomassa uutta tietoa tyypin täällä. 32 00:01:30,270 --> 00:01:33,860 Erityisesti tietotyyppi nimi on olemaan struct auton, kuten näemme. 33 00:01:33,860 --> 00:01:36,640 Mutta tämä on sellainen kärjen pois kääntäjä että tämä 34 00:01:36,640 --> 00:01:42,440 ryhmänä muuttujien, joka on menossa pidettävä osana samaa tyyppiä 35 00:01:42,440 --> 00:01:44,010 minuutissa. 36 00:01:44,010 --> 00:01:46,340 >> Autot, vain nimi rakenteen. 37 00:01:46,340 --> 00:01:50,590 Jälleen tietotyyppi täällä on menossa olla struct auto, ei vain auton. 38 00:01:50,590 --> 00:01:53,060 Mutta jos sinulla on different-- jos luot useita structs 39 00:01:53,060 --> 00:01:56,950 samassa ohjelmassa, sinun täytyy erottaa struct ja struct. 40 00:01:56,950 --> 00:02:00,140 Joten struct auton, voisin myös struct opiskelija, esimerkiksi, 41 00:02:00,140 --> 00:02:01,790 samassa ohjelmassa. 42 00:02:01,790 --> 00:02:05,980 Sisältä aaltosulkeita ovat kaikki niin sanotut kentät, 43 00:02:05,980 --> 00:02:07,954 tai organisaation jäsenten. 44 00:02:07,954 --> 00:02:10,370 Mitkä ovat joitakin asioita jotka ovat luonnostaan ​​auton? 45 00:02:10,370 --> 00:02:15,270 No, se on yleensä vuosi, on mallin nimi, ja rekisterikilpi, 46 00:02:15,270 --> 00:02:18,000 matkamittari joka on yleensä jotkut määrä mailia se, 47 00:02:18,000 --> 00:02:19,225 ja ehkä moottorin koon. 48 00:02:19,225 --> 00:02:23,570 Ja kuten näette, olen sekoittaa kokonaislukuja ja hahmot ja nelinpelin. 49 00:02:23,570 --> 00:02:26,420 He kaikki olemaan osa tätä uutta tietotyyppiä. 50 00:02:26,420 --> 00:02:29,750 >> Lopuksi, viimeinen asia minun täytyy tehdä, älä unohda tätä pikku puolipiste 51 00:02:29,750 --> 00:02:30,290 lopussa. 52 00:02:30,290 --> 00:02:34,380 Kun päätämme määritellään rakenne, meidän täytyy laittaa puolipiste lopussa. 53 00:02:34,380 --> 00:02:37,325 Se on hyvin yleinen syntaktisia virhe, koska funktiolla, 54 00:02:37,325 --> 00:02:40,200 Esimerkiksi olisit vain avoin kihara ahdin, lähellä kihara ahdin. 55 00:02:40,200 --> 00:02:42,950 Et laita puolipiste loppuun funktion määritelmän. 56 00:02:42,950 --> 00:02:46,430 Tämä näyttää toiminto määritelmä, mutta se ei ole, 57 00:02:46,430 --> 00:02:49,653 ja niin puolipiste siellä on vain muistutus siitä, että olet 58 00:02:49,653 --> 00:02:52,440 täytyy laittaa sitä sinne, koska kääntäjä muuten 59 00:02:52,440 --> 00:02:53,510 tiedä mitä tehdä sen kanssa. 60 00:02:53,510 --> 00:02:56,160 Se on hyvin yleinen virhe vahingossa tehdä 61 00:02:56,160 --> 00:02:58,570 kun olet ensin määritellään rakenteita. 62 00:02:58,570 --> 00:02:59,500 >> OK. 63 00:02:59,500 --> 00:03:02,824 Joten me yleensä määrittelemme rakenteet huipulla meidän ohjelmia 64 00:03:02,824 --> 00:03:05,490 koska he luultavasti voidaan käyttää useita toimintoja. 65 00:03:05,490 --> 00:03:08,850 Emme halua määritellä struct sisällä funktion, 66 00:03:08,850 --> 00:03:12,110 koska silloin voimme only-- soveltamisala rakenne todella 67 00:03:12,110 --> 00:03:13,790 vain olemassa sisällä tätä toiminnallisuutta. 68 00:03:13,790 --> 00:03:17,450 Olimme luultavasti halua määritellä rakenne jotta voimme käyttää sitä useita toimintoja, 69 00:03:17,450 --> 00:03:20,670 tai ehkä useita tiedostoja, jotka on sidottu yhteen 70 00:03:20,670 --> 00:03:22,920 luomme yksittäisen ohjelman. 71 00:03:22,920 --> 00:03:24,920 Joskus myös sijaan määritellä rakenne 72 00:03:24,920 --> 00:03:27,961 huipulla, jossa laitat punta sisältää ja punta määrittelee, 73 00:03:27,961 --> 00:03:32,080 esimerkiksi, saatat laittaa ne erillinen piste h tiedostoja, joita voit sitten 74 00:03:32,080 --> 00:03:35,020 punta itsekin. 75 00:03:35,020 --> 00:03:37,620 >> Meillä on rakenteita, mutta nyt Meidän täytyy saada sisällä niitä. 76 00:03:37,620 --> 00:03:39,800 Miten saamme sisällä rakenteen pääsy 77 00:03:39,800 --> 00:03:43,530 niillä osa-muuttujat, niitä muuttujia että olemassa sisällä rakenne? 78 00:03:43,530 --> 00:03:46,810 No, meillä on jotain kutsutaan piste operaattori, jonka avulla voimme 79 00:03:46,810 --> 00:03:50,990 käyttää aloilla rakenteen. 80 00:03:50,990 --> 00:03:55,490 Niinpä esimerkiksi, sanokaamme Olen julistanut minun rakenne tiedot kirjoita jonnekin 81 00:03:55,490 --> 00:03:59,020 yläreunassa minun ohjelma, tai ehkä piste h tiedoston, että olen punta mukana. 82 00:03:59,020 --> 00:04:03,360 Jos minä sitten haluavat luoda uuden muuttuja että tietotyyppi, voin sanoa, 83 00:04:03,360 --> 00:04:06,260 struct auto, autoni, puolipiste. 84 00:04:06,260 --> 00:04:11,580 Aivan kuten Voisin sanoa int X, tai merkkijonon nimi puolipisteellä. 85 00:04:11,580 --> 00:04:18,100 >> Tietotyyppi tässä struct auto, muuttujan nimi on autoni, 86 00:04:18,100 --> 00:04:23,770 ja sitten voin käyttää piste operaattori käyttää eri aloilla autoni. 87 00:04:23,770 --> 00:04:27,494 Voin siis sanoa autoni dot vuosi on 2011. 88 00:04:27,494 --> 00:04:28,410 Se on täysin hieno. 89 00:04:28,410 --> 00:04:34,210 Vuosi, jos muistatte, määriteltiin kokonaisluku kenttä sisällä tämän struct auto 90 00:04:34,210 --> 00:04:35,200 tietotyyppi. 91 00:04:35,200 --> 00:04:39,966 Joten kaikki muuttuja struct auton tiedot tyyppi, kuten autoni, voin sanoa autoni 92 00:04:39,966 --> 00:04:44,030 dot vuosi on ja määritä se jotkut kokonaisluku, 2011. 93 00:04:44,030 --> 00:04:47,290 Autoni piste levy vastaa CS50. 94 00:04:47,290 --> 00:04:51,180 Oma kortti dot matkamittari vastaa 50505 puolipiste. 95 00:04:51,180 --> 00:04:53,270 Kaikki nämä ovat täysin hieno ja se on 96 00:04:53,270 --> 00:04:57,802 miten pääsemme aloilla rakenteen. 97 00:04:57,802 --> 00:05:00,260 Rakenteet, vaikka, ei tarvitse luotava pinoon. 98 00:05:00,260 --> 00:05:02,950 Aivan kuten mikä tahansa muu muuttuja, me voi dynaamisesti jakaa. 99 00:05:02,950 --> 00:05:06,309 Jos meillä on ohjelma, joka saattaisi se tuottaa monia rakenteita, 100 00:05:06,309 --> 00:05:08,100 emme tiedä kuinka monta aiomme tarvitsevat, 101 00:05:08,100 --> 00:05:10,800 meidän täytyy dynaamisesti jakaa kyseisiä rakenteita 102 00:05:10,800 --> 00:05:12,960 meidän ohjelma on käynnissä. 103 00:05:12,960 --> 00:05:16,600 Joten jos aiomme päästä aloilla rakenne tässä yhteydessä, 104 00:05:16,600 --> 00:05:20,660 muistaa, että meidän on ensin dereference osoitin rakenteeseen, 105 00:05:20,660 --> 00:05:24,810 ja sitten kun me epäviittausongelman osoitin, niin voimme käyttää kenttiä. 106 00:05:24,810 --> 00:05:26,830 Jos meillä on vain osoitin rakenne, 107 00:05:26,830 --> 00:05:32,120 emme voi vain sanoa osoitin piste kenttä nimi ja saada mitä etsimme. 108 00:05:32,120 --> 00:05:34,259 On ylimääräinen vaihe dereferencing. 109 00:05:34,259 --> 00:05:36,050 Joten sanotaan, että sen sijaan, että previous-- 110 00:05:36,050 --> 00:05:38,770 aivan kuten edellisessä esimerkissä, sijasta julistaa se 111 00:05:38,770 --> 00:05:43,680 pinoon, struct auto, minun auto, puolipiste, sanon struct auto, 112 00:05:43,680 --> 00:05:48,020 tähti, osoitin struct auto nimeltään autoni, 113 00:05:48,020 --> 00:05:51,250 vastaa malloc koko struct auton. 114 00:05:51,250 --> 00:05:54,950 Koko me selvittää, kuinka monta tavua uusi tietotyyppi vie. 115 00:05:54,950 --> 00:05:58,570 Sinun ei välttämättä vain tarvitse käyttää koko, leveys, int tai char, tai 116 00:05:58,570 --> 00:05:59,715 ja sisäänrakennettu tietotyypit. 117 00:05:59,715 --> 00:06:02,090 Kääntäjä on fiksu selvittää, kuinka monta tavua 118 00:06:02,090 --> 00:06:04,170 vaatii uutta rakennetta. 119 00:06:04,170 --> 00:06:09,610 Joten en malloc itselleni yksikkö muistia mahduttava struct auto, 120 00:06:09,610 --> 00:06:12,410 ja saan osoitin takaisin kuin lohko muistia, 121 00:06:12,410 --> 00:06:16,090 ja että osoitin on määritetty autoni. 122 00:06:16,090 --> 00:06:18,050 >> Nyt, jos haluan käyttää aloilla autoni, 123 00:06:18,050 --> 00:06:22,615 Haluan ensin dereference autoni käyttäen dereference operaattori, tähti 124 00:06:22,615 --> 00:06:26,620 että olemme nähneet osoittimet videoita, ja sitten kun olen dereference, 125 00:06:26,620 --> 00:06:32,200 sitten voin käyttää piste operaattori käyttää eri aloilla autoni. 126 00:06:32,200 --> 00:06:35,490 Star autoni piste vuosi on 2011. 127 00:06:35,490 --> 00:06:38,480 Että olisi vaikutusta haluamme tässä tapauksessa, 128 00:06:38,480 --> 00:06:41,960 koska olemme dynaamisesti myönnetty autoni. 129 00:06:41,960 --> 00:06:43,610 >> Sellainen ärsyttävää, vaikka, eikö? 130 00:06:43,610 --> 00:06:44,818 Siellä on 2-vaihe prosessissa nyt. 131 00:06:44,818 --> 00:06:47,460 Nyt meidän on dereference-- meillä tähti operaattori, 132 00:06:47,460 --> 00:06:48,910 ja meillä on piste operaattori. 133 00:06:48,910 --> 00:06:51,660 Ja kuten arvata saattaa, koska C ohjelmoijat rakastavat lyhyempi tapoja 134 00:06:51,660 --> 00:06:53,740 tehdä asioita, on lyhyempi tapa tehdä tämä. 135 00:06:53,740 --> 00:06:57,790 On toinenkin operaattori nimeltään nuoli, mikä tekee tämän prosessin paljon helpompaa. 136 00:06:57,790 --> 00:07:00,750 Tie nuoli toimii on se ensin dereferences 137 00:07:00,750 --> 00:07:03,560 osoitin vasemmalla puolella operaattori, 138 00:07:03,560 --> 00:07:06,620 ja sitten, sen jälkeen kun dereferenced osoitin vasemmalla, 139 00:07:06,620 --> 00:07:09,620 se pääsee kenttää oikealla. 140 00:07:09,620 --> 00:07:14,170 Ja niin aiemmin meillä oli tämmöinen Star autoni piste kaikki jutut, 141 00:07:14,170 --> 00:07:15,880 kuin siellä oli paljon siellä tapahtuu. 142 00:07:15,880 --> 00:07:22,040 Mutta mitä voimme sen sijaan tehdä, on this-- autoni nuoli vuosi on 2011. 143 00:07:22,040 --> 00:07:23,580 >> Jälleen mitä täällä tapahtuu? 144 00:07:23,580 --> 00:07:25,720 Ensinnäkin, olen dereferencing autoni. 145 00:07:25,720 --> 00:07:27,810 Joka taas, on osoitin täällä. 146 00:07:27,810 --> 00:07:31,270 Sitten, sen jälkeen kun dereferenced autoni, minä 147 00:07:31,270 --> 00:07:35,130 Tämän jälkeen voidaan käyttää kentät vuosi, levy, ja matkamittari 148 00:07:35,130 --> 00:07:40,020 aivan kuin pystyin ennen kuin ensimmäinen käytetyt tähti dereference autoni, 149 00:07:40,020 --> 00:07:42,020 ja piste päästä kenttään. 150 00:07:42,020 --> 00:07:45,290 Joten voit olla rakenteita, sinua voi olla osoittimia rakenteet, 151 00:07:45,290 --> 00:07:48,360 ja sinulla on tapoja käyttää aloilla kyseisiä rakenteita, 152 00:07:48,360 --> 00:07:52,600 onko sinulla viitteitä niitä tai muuttujia itse. 153 00:07:52,600 --> 00:07:57,640 Piste tai nuoli, riippuen miten muuttuja julistettiin. 154 00:07:57,640 --> 00:08:00,510 Olen Doug Lloyd, tämä on CS50. 155 00:08:00,510 --> 00:08:01,975