1 00:00:00,000 --> 00:00:02,395 >> [Mūzikas atskaņošanai] 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 Mēs esam strādājuši ar veseliem skaitļiem, mēs esam strādājuši ar burtiem, 5 00:00:08,880 --> 00:00:11,930 mēs esam strādājuši pludiņiem, dubultspēlē, stīgas, un bools. 6 00:00:11,930 --> 00:00:14,870 Mēs esam izsmeltas diezgan daudz visas no [dzirdams] veidiem, kas 7 00:00:14,870 --> 00:00:17,100 ir pieejams mums visiem kopā. 8 00:00:17,100 --> 00:00:19,430 Bet tagad mēs vēlamies darīt kaut ko vairāk. 9 00:00:19,430 --> 00:00:20,210 Kā mēs to darām? 10 00:00:20,210 --> 00:00:22,560 Kā mēs izveidot dažādu datu tipu? 11 00:00:22,560 --> 00:00:26,130 Mēs varam izdarīt, izmantojot struktūras. 12 00:00:26,130 --> 00:00:30,180 Tātad struktūras ļauj mums apvienot mainīgie dažādu veidu 13 00:00:30,180 --> 00:00:34,810 vienā, jaunas mainīgo tipa, ko mēs varam piešķirt savu tipa nosaukumu. 14 00:00:34,810 --> 00:00:37,570 Tas ir patiešām spēcīga lieta, lai varētu darīt, 15 00:00:37,570 --> 00:00:40,900 jo mēs varam tagad grupa elementi dažādiem datu veidiem 16 00:00:40,900 --> 00:00:43,910 kopā, ka ir loģiska saikne. 17 00:00:43,910 --> 00:00:46,440 Mēs esam spējuši to izdarīt ar bloki veida, vai ne? 18 00:00:46,440 --> 00:00:49,540 Mēs varam grupas mainīgie no tā paša datu tipa 19 00:00:49,540 --> 00:00:53,410 kopā lielā vienībā atmiņas, masīva. 20 00:00:53,410 --> 00:00:56,660 >> Bet mēs neesam spējuši sajaukt up dažādi datu veidi kopā. 21 00:00:56,660 --> 00:01:02,610 Mēs nevaram, teiksim, pāris vesels skaitlis, un raksturs, un dubultā visu 22 00:01:02,610 --> 00:01:05,330 ar vienu un to pašu un piezvanīt, ka par vienu vienību. 23 00:01:05,330 --> 00:01:08,830 Bet ar struktūrām, vai bieži saukta structs, 24 00:01:08,830 --> 00:01:09,585 mēs tiešām varam. 25 00:01:09,585 --> 00:01:12,370 Tātad struktūra ir sava no kā super mainīgs. 26 00:01:12,370 --> 00:01:16,530 Tas ir mainīgais, kas satur citi mainīgie iekšpusē no tā. 27 00:01:16,530 --> 00:01:19,650 Tātad, šeit ir piemērs ļoti vienkārša struktūra. 28 00:01:19,650 --> 00:01:23,380 Tas ir tas, ko sintakse izskatītos vēlētos izveidot struktūru automašīnai. 29 00:01:23,380 --> 00:01:25,250 Tagad, iesim cauri sintaksi šeit. 30 00:01:25,250 --> 00:01:27,400 Struktūrai, tas ir atslēgvārdu, kas norāda 31 00:01:27,400 --> 00:01:30,270 ka es esmu veidojot jaunu datu tipu šeit. 32 00:01:30,270 --> 00:01:33,860 Jo īpaši, datu tips vārds ir būs struct auto, jo mēs redzēsim. 33 00:01:33,860 --> 00:01:36,640 Bet tas ir sava veida galu off kompilatoru, ka šis 34 00:01:36,640 --> 00:01:42,440 kā grupa mainīgajiem lielumiem, kas notiek uz uzskatāms par daļu no tā paša tipa 35 00:01:42,440 --> 00:01:44,010 minūti. 36 00:01:44,010 --> 00:01:46,340 >> Cars, tikai nosaukums struktūru. 37 00:01:46,340 --> 00:01:50,590 Atkal, datu tips šeit notiek būt struct auto, ne tikai auto. 38 00:01:50,590 --> 00:01:53,060 Bet, ja jums ir different-- ja jums izveidot vairākas structs 39 00:01:53,060 --> 00:01:56,950 tajā pašā programmā, jums ir nepieciešams, lai atšķirt struktūrai un struktūrai. 40 00:01:56,950 --> 00:02:00,140 Tātad struct auto, es varētu arī būt struktūrai students, piemēram, 41 00:02:00,140 --> 00:02:01,790 tajā pašā programmu. 42 00:02:01,790 --> 00:02:05,980 Iekšpusē cirtaini lencēm ir visas no tā saukto laukiem, 43 00:02:05,980 --> 00:02:07,954 vai locekļi struktūru. 44 00:02:07,954 --> 00:02:10,370 Tātad, kādi ir daži no lietām kas ir raksturīgi automašīnā? 45 00:02:10,370 --> 00:02:15,270 Nu, tas parasti ir gads, ir modelis nosaukumu, un licence plate, 46 00:02:15,270 --> 00:02:18,000 odometra, kas parasti ir dažas jūdzes uz to skaits, 47 00:02:18,000 --> 00:02:19,225 un varbūt dzinēja lieluma. 48 00:02:19,225 --> 00:02:23,570 Un, kā jūs varat redzēt, es esmu sajaucot veseli skaitļi un zīmes un dubultspēlēs. 49 00:02:23,570 --> 00:02:26,420 Viņi visi būs daļa šo jauno datu tipu. 50 00:02:26,420 --> 00:02:29,750 >> Visbeidzot, pēdējais, ko es jādara, neaizmirstiet šo mazo semikolu 51 00:02:29,750 --> 00:02:30,290 beigās. 52 00:02:30,290 --> 00:02:34,380 Kad mēs pabeidzis definētu struktūru, mums ir nepieciešams likt semikolu beigās. 53 00:02:34,380 --> 00:02:37,325 Tas ir ļoti bieži sintakses kļūda, jo ar funkciju, 54 00:02:37,325 --> 00:02:40,200 Piemēram, jūs varētu vienkārši ir atvērts cirtaini lencēm, tuvu cirtaini lencēm. 55 00:02:40,200 --> 00:02:42,950 Jums nav likt semikolu pie beigas funkciju definīcijas. 56 00:02:42,950 --> 00:02:46,430 Tas izskatās kā funkcija definīcija, bet tā nav, 57 00:02:46,430 --> 00:02:49,653 un tā semikolu tur ir tikai atgādinājums, ka jums 58 00:02:49,653 --> 00:02:52,440 nepieciešams, lai to tur, jo kompilators citādi nav 59 00:02:52,440 --> 00:02:53,510 zināt, ko darīt ar to. 60 00:02:53,510 --> 00:02:56,160 Tas ir ļoti bieži kļūda nejauši padarīt 61 00:02:56,160 --> 00:02:58,570 kad jūs pirmo reizi nosakot struktūras. 62 00:02:58,570 --> 00:02:59,500 >> LABI. 63 00:02:59,500 --> 00:03:02,824 Tāpēc mēs parasti definēt savas struktūras pašā augšā mūsu programmu 64 00:03:02,824 --> 00:03:05,490 jo viņi, iespējams, gatavojas , ko izmanto ar vairākām funkcijām. 65 00:03:05,490 --> 00:03:08,850 Mēs nevēlamies, lai definētu struct iekšpusē funkciju, 66 00:03:08,850 --> 00:03:12,110 jo tad mēs varam only-- joma struktūras patiešām 67 00:03:12,110 --> 00:03:13,790 pastāv tikai iekšpusē šo funkciju. 68 00:03:13,790 --> 00:03:17,450 Mēs droši vien vēlaties, lai noteiktu struktūru lai mēs varētu to izmantot vairākas funkcijas, 69 00:03:17,450 --> 00:03:20,670 vai varbūt sastāvus faili, kas ir saistītas kopā 70 00:03:20,670 --> 00:03:22,920 izveidot savu vienotu programmu. 71 00:03:22,920 --> 00:03:24,920 Dažreiz arī vietā definēšanas struktūru 72 00:03:24,920 --> 00:03:27,961 pašā augšā, kur jūs nodot savu mārciņa ietver un jūsu mārciņa definē, 73 00:03:27,961 --> 00:03:32,080 Piemēram, jūs varētu nodot tos atsevišķas dot h failus, kas jums pēc tam 74 00:03:32,080 --> 00:03:35,020 mārciņa iekļaut sevi. 75 00:03:35,020 --> 00:03:37,620 >> Tāpēc mums ir struktūras, bet tagad mums ir nepieciešams, lai saņemtu iekšpusē no tiem. 76 00:03:37,620 --> 00:03:39,800 Kā mēs nokļūt iekšpusē struktūra, lai piekļūtu 77 00:03:39,800 --> 00:03:43,530 šie apakšprogrammas mainīgie, šie mainīgie ka pastāv iekšpusē struktūru? 78 00:03:43,530 --> 00:03:46,810 Nu, mums ir kaut ko sauc dot operatoram, kas ļauj mums 79 00:03:46,810 --> 00:03:50,990 piekļūt laukus struktūru. 80 00:03:50,990 --> 00:03:55,490 Tā, piemēram, pieņemsim, ka es esmu deklarēts mani struktūra datu tips kaut kur 81 00:03:55,490 --> 00:03:59,020 augšpusē manu programmu, vai varbūt Punkts h failu, kas es esmu mārciņu iekļauti. 82 00:03:59,020 --> 00:04:03,360 Ja nu es gribu, lai izveidotu jaunu mainīgais šī datu tipu, es varu teikt, 83 00:04:03,360 --> 00:04:06,260 struct auto, mans auto, semikols. 84 00:04:06,260 --> 00:04:11,580 Tāpat kā es varētu teikt int x, vai stīgu nosaukums semikols. 85 00:04:11,580 --> 00:04:18,100 >> Datu tips šeit ir struct auto, nosaukums mainīgais ir mans auto, 86 00:04:18,100 --> 00:04:23,770 un tad es varu izmantot dot operatoram piekļūt dažādām jomām manu auto. 87 00:04:23,770 --> 00:04:27,494 Tāpēc es varu teikt, ka mana auto dot gads vienāds 2011. 88 00:04:27,494 --> 00:04:28,410 Tas ir pilnīgi naudas sodu. 89 00:04:28,410 --> 00:04:34,210 Gadā, ja jūs atceraties, tika definēta kā skaitlis lauka iekšpusē šo struct auto 90 00:04:34,210 --> 00:04:35,200 datu tips. 91 00:04:35,200 --> 00:04:39,966 Tāpēc jebkura mainīgo no struct automašīnas datiem tips, piemēram, manu auto, es varu teikt, ka mana auto 92 00:04:39,966 --> 00:04:44,030 dot gads ir vienāds, un tad uzdot tā daži veselais skaitlis, 2011. 93 00:04:44,030 --> 00:04:47,290 Mans auto dot plate vienāds CS50. 94 00:04:47,290 --> 00:04:51,180 Mana karte dot odometra vienāds 50505 semikolu. 95 00:04:51,180 --> 00:04:53,270 Visi no tiem ir pilnīgi naudas sodu, un tas ir 96 00:04:53,270 --> 00:04:57,802 kā mēs piekļūt lauki struktūru. 97 00:04:57,802 --> 00:05:00,260 Konstrukcijas, lai gan, nav nepieciešams jāizveido uz skursteņa. 98 00:05:00,260 --> 00:05:02,950 Tāpat kā jebkuru citu mainīgo, mēs var dinamiski sadalīt tos. 99 00:05:02,950 --> 00:05:06,309 Ja mums ir programma, kas varētu tikt radot daudzas struktūras, 100 00:05:06,309 --> 00:05:08,100 mēs nezinām, cik daudz mēs ejam nepieciešama, 101 00:05:08,100 --> 00:05:10,800 tad mums ir nepieciešams, lai dinamiski iedalīt šīs struktūras 102 00:05:10,800 --> 00:05:12,960 kā mūsu programma darbojas. 103 00:05:12,960 --> 00:05:16,600 Un tāpēc, ja mēs ejam, lai piekļūtu jomas struktūru šajā kontekstā 104 00:05:16,600 --> 00:05:20,660 atgādināt, ka mums vispirms ir izlietota rādītāju uz struktūru, 105 00:05:20,660 --> 00:05:24,810 un tad, kad mēs dereference rādītājs, tad mēs varam piekļūt laukus. 106 00:05:24,810 --> 00:05:26,830 Ja mums ir tikai rādītāju uz struktūru, 107 00:05:26,830 --> 00:05:32,120 mēs nevaram vienkārši teikt rādītājs dot laukumā nosaukt un saņemt to, ko mēs meklējam. 108 00:05:32,120 --> 00:05:34,259 Tur ir papildu solis dereferencing. 109 00:05:34,259 --> 00:05:36,050 Tātad pieņemsim, ka vietā previous-- 110 00:05:36,050 --> 00:05:38,770 tāpat kā iepriekšējā piemērā, nevis nedeklarējot 111 00:05:38,770 --> 00:05:43,680 uz skursteņa, struct auto, mans auto, semikols, es saku struct auto, 112 00:05:43,680 --> 00:05:48,020 zvaigzne, rādītāju uz struct auto sauc savu auto, 113 00:05:48,020 --> 00:05:51,250 vienāds malloc lielumu struct automašīnu. 114 00:05:51,250 --> 00:05:54,950 Izmērs mēs saprast, cik daudz baiti savu jauno datu tips aizņem. 115 00:05:54,950 --> 00:05:58,570 Jums nav obligāti tikai nepieciešams, lai izmantotu izmērs, platums, INT, vai palijas, vai kādu 116 00:05:58,570 --> 00:05:59,715 no iebūvētajiem datu tipiem. 117 00:05:59,715 --> 00:06:02,090 Kompilators ir pietiekami gudrs izrēķināt, cik daudz baitu 118 00:06:02,090 --> 00:06:04,170 ko prasa savu jauno struktūru. 119 00:06:04,170 --> 00:06:09,610 Tāpēc es malloc sevi vienība atmiņas pietiekami liela, lai turēt struct auto, 120 00:06:09,610 --> 00:06:12,410 un man rādītāju atpakaļ šai bloka atmiņas, 121 00:06:12,410 --> 00:06:16,090 un ka rādītājs ir piešķirts manu auto. 122 00:06:16,090 --> 00:06:18,050 >> Tagad, ja es gribu, lai piekļūtu rīcības jomas manu auto, 123 00:06:18,050 --> 00:06:22,615 Es pirmo reizi dereference manu auto, izmantojot dereference operators, zvaigzne 124 00:06:22,615 --> 00:06:26,620 ka mēs esam redzējuši no norādes video, un tad kad es izlietota, 125 00:06:26,620 --> 00:06:32,200 tad es varu izmantot dot operatoram piekļūt dažādām jomām manu auto. 126 00:06:32,200 --> 00:06:35,490 Zvaigzne savu auto dot gads vienāds 2011. 127 00:06:35,490 --> 00:06:38,480 Tas ir efekts mēs gribam šajā gadījumā, 128 00:06:38,480 --> 00:06:41,960 jo mēs esam dinamiski piešķirti savu auto. 129 00:06:41,960 --> 00:06:43,610 >> Tas ir sava veida kaitinošas, lai gan, vai ne? 130 00:06:43,610 --> 00:06:44,818 Tur ir 2-step process tagad. 131 00:06:44,818 --> 00:06:47,460 Tagad mums ir dereference-- mums ir zvaigzne operators, 132 00:06:47,460 --> 00:06:48,910 un mums ir dot operatoram. 133 00:06:48,910 --> 00:06:51,660 Un, kā jūs varētu gaidīt, jo C programmētāji mīlestība īsākus ceļus 134 00:06:51,660 --> 00:06:53,740 darīt lietas, tur ir īsāks veids, kā to izdarīt. 135 00:06:53,740 --> 00:06:57,790 Ir vēl viens operators sauc bultiņa, kas padara šo procesu daudz vieglāk. 136 00:06:57,790 --> 00:07:00,750 Veids arrow darbiem ir tas pirmais dereferences 137 00:07:00,750 --> 00:07:03,560 rādītājs pa kreisi puse no operatora, 138 00:07:03,560 --> 00:07:06,620 un pēc tam, pēc tam, kad dereferenced rādītājs pa kreisi, 139 00:07:06,620 --> 00:07:09,620 tas piekļūst lauka labajā pusē. 140 00:07:09,620 --> 00:07:14,170 Un tā agrāk mums bija šāda veida Star mans auto dot visu šo stuff, 141 00:07:14,170 --> 00:07:15,880 kā tur bija daudz kas notiek tur. 142 00:07:15,880 --> 00:07:22,040 Bet ko mēs varam darīt, nevis ir this-- mans auto arrow gadā ir vienāds 2011. 143 00:07:22,040 --> 00:07:23,580 >> Atkal, kas notiek šeit? 144 00:07:23,580 --> 00:07:25,720 Pirmkārt, es esmu dereferencing savu auto. 145 00:07:25,720 --> 00:07:27,810 Kas atkal, ir rādītājs šeit. 146 00:07:27,810 --> 00:07:31,270 Tad, pēc tam, kad dereferenced savu auto, es 147 00:07:31,270 --> 00:07:35,130 Pēc tam var piekļūt laukus gadā, plate, un odometra 148 00:07:35,130 --> 00:07:40,020 tāpat kā es varētu, pirms pirmā lietota zvaigzne dereference manu auto, 149 00:07:40,020 --> 00:07:42,020 un dot piekļūt lauku. 150 00:07:42,020 --> 00:07:45,290 Tātad jūs varat būt struktūras, jūs var būt norādes uz struktūrām, 151 00:07:45,290 --> 00:07:48,360 un jums ir veidi, kā piekļūt lauki šādu struktūru, 152 00:07:48,360 --> 00:07:52,600 vai jums ir norādes uz viņiem vai paši mainīgie. 153 00:07:52,600 --> 00:07:57,640 Dot vai bultiņa, atkarībā no kā mainīgais tika pasludināts. 154 00:07:57,640 --> 00:08:00,510 Es esmu Doug Lloyd, tas ir CS50. 155 00:08:00,510 --> 00:08:01,975