1 00:00:00,000 --> 00:00:02,395 >> [Muzika] 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 Ne kemi punuar me integers, ne kemi punuar me karaktere, 5 00:00:08,880 --> 00:00:11,930 ne kemi punuar gjithandej, dyshe, vargjet, dhe bools. 6 00:00:11,930 --> 00:00:14,870 Ne kemi shteruar shumë e shumë të gjithë nga [padëgjueshme] llojet që 7 00:00:14,870 --> 00:00:17,100 kanë qenë në dispozicion për të gjithë ne së bashku. 8 00:00:17,100 --> 00:00:19,430 Por tani ne duam të bëjmë diçka më shumë. 9 00:00:19,430 --> 00:00:20,210 Si e bëjmë këtë? 10 00:00:20,210 --> 00:00:22,560 Si mund të krijojmë lloje të ndryshme të të dhënave? 11 00:00:22,560 --> 00:00:26,130 Ne mund ta bëjnë këtë duke përdorur struktura. 12 00:00:26,130 --> 00:00:30,180 Pra, strukturat e të na lejojë për të unifikuar variabla të llojeve të ndryshme 13 00:00:30,180 --> 00:00:34,810 në një të vetme, lloj të ri ndryshueshme, të cilat ne mund të caktojë vetë emrin e saj të tipit. 14 00:00:34,810 --> 00:00:37,570 Kjo është një të vërtetë të fortë gjë që të jetë në gjendje të bëjë, 15 00:00:37,570 --> 00:00:40,900 sepse ne tani mund të grup elementet e llojeve të ndryshme të të dhënave 16 00:00:40,900 --> 00:00:43,910 së bashku që të ketë një lidhje logjike. 17 00:00:43,910 --> 00:00:46,440 Ne kemi qenë në gjendje për ta bërë këtë me vargjeve lloj të, apo jo? 18 00:00:46,440 --> 00:00:49,540 Ne mund të variablave të grupit i llojit të njëjtë të të dhënave 19 00:00:49,540 --> 00:00:53,410 së bashku në një njësi të madhe e kujtesës, një grup. 20 00:00:53,410 --> 00:00:56,660 >> Por ne nuk kemi qenë në gjendje të përzierje up lloje të ndryshme të të dhënave së bashku. 21 00:00:56,660 --> 00:01:02,610 Ne nuk mund të, të themi, palë një numër të plotë, dhe një karakter, dhe një të dyfishtë të gjithë 22 00:01:02,610 --> 00:01:05,330 në të njëjtën sendit dhe thërrasë se një njësi të vetme. 23 00:01:05,330 --> 00:01:08,830 Por me strukturat, ose shpesh të referuara si structs, 24 00:01:08,830 --> 00:01:09,585 ne fakt mund. 25 00:01:09,585 --> 00:01:12,370 Pra, një strukturë është lloj e si një variabël super. 26 00:01:12,370 --> 00:01:16,530 Kjo është një variabël që përmban variabla të tjerë brendësi të saj. 27 00:01:16,530 --> 00:01:19,650 Kështu që këtu është një shembull i një strukturë shumë të thjeshtë. 28 00:01:19,650 --> 00:01:23,380 Kjo është ajo që sintaksa do të duken si për të krijuar një strukturë për një makinë. 29 00:01:23,380 --> 00:01:25,250 Tani, le të shkojë nëpër sintaksë këtu. 30 00:01:25,250 --> 00:01:27,400 Struct, kjo është fjalen që tregon 31 00:01:27,400 --> 00:01:30,270 që unë jam duke krijuar një tip të ri të dhënave këtu. 32 00:01:30,270 --> 00:01:33,860 Në veçanti, emri llojit të të dhënave është do të jetë makinë struct, si ne do të shohim. 33 00:01:33,860 --> 00:01:36,640 Por kjo është lloj i tip jashtë për përpiluesit që kjo 34 00:01:36,640 --> 00:01:42,440 si një grup variablat që do të konsiderohet pjesë e llojit të njëjtë 35 00:01:42,440 --> 00:01:44,010 ne nje minut. 36 00:01:44,010 --> 00:01:46,340 >> Makina, vetëm emri i strukturës. 37 00:01:46,340 --> 00:01:50,590 Përsëri, lloji i të dhënave këtu po ndodh të jetë makinë struct, jo vetëm makinë. 38 00:01:50,590 --> 00:01:53,060 Por në qoftë se ju keni different-- në qoftë se ju e krijoni structs të shumta 39 00:01:53,060 --> 00:01:56,950 në të njëjtin program, ju keni nevojë për të dallimin në mes struct dhe struct. 40 00:01:56,950 --> 00:02:00,140 Makinë Pra struct, unë mund të ketë gjithashtu Studenti struct, për shembull, 41 00:02:00,140 --> 00:02:01,790 në të njëjtin program. 42 00:02:01,790 --> 00:02:05,980 Brenda e formatimin e teksteve kaçurrel janë të gjitha të ashtuquajturat fusha, 43 00:02:05,980 --> 00:02:07,954 ose anëtarët e strukturës. 44 00:02:07,954 --> 00:02:10,370 Pra cilat janë disa nga gjërat që janë të pandara në një makinë? 45 00:02:10,370 --> 00:02:15,270 E pra, ajo zakonisht ka një vit, ka një emër model, dhe një targë, 46 00:02:15,270 --> 00:02:18,000 një rrugëmatës që zakonisht ka disa numrin e milje mbi të, 47 00:02:18,000 --> 00:02:19,225 dhe ndoshta një madhësi motor. 48 00:02:19,225 --> 00:02:23,570 Dhe si ju mund të shihni, unë jam rrëmujë integers dhe karaktere dhe dyshe. 49 00:02:23,570 --> 00:02:26,420 Ata janë të gjithë do të jenë të pjesë e këtij lloji të ri të të dhënave. 50 00:02:26,420 --> 00:02:29,750 >> Së fundi, gjëja e fundit që duhet të bëni, mos harroni këtë pikëpresje vogël 51 00:02:29,750 --> 00:02:30,290 në fund. 52 00:02:30,290 --> 00:02:34,380 Pasi kemi mbaruar përcaktimin e strukturës, ne kemi nevojë për të vënë një pikëpresje në fund. 53 00:02:34,380 --> 00:02:37,325 Kjo është një sintaksore shumë e zakonshme gabim, sepse me një funksion, 54 00:02:37,325 --> 00:02:40,200 për shembull, ju vetëm do të duhet mbajtëse hapur kaçurrel, mbajtëse afër kaçurrel. 55 00:02:40,200 --> 00:02:42,950 Ju nuk e vënë një pikëpresje në nivel fundi i një përkufizimi të funksionit. 56 00:02:42,950 --> 00:02:46,430 Kjo duket si një funksion përkufizim, por kjo nuk është, 57 00:02:46,430 --> 00:02:49,653 dhe kështu pikëpresje atje është vetëm një kujtesë se ju 58 00:02:49,653 --> 00:02:52,440 duhet të vënë atë atje, sepse përpiluesit përndryshe nuk do të 59 00:02:52,440 --> 00:02:53,510 e di se çfarë të bëjë me të. 60 00:02:53,510 --> 00:02:56,160 Kjo është një gabim shumë i zakonshëm për të bërë aksidentalisht 61 00:02:56,160 --> 00:02:58,570 kur ju jeni të parë përcaktimin e strukturave. 62 00:02:58,570 --> 00:02:59,500 >> NE RREGULL. 63 00:02:59,500 --> 00:03:02,824 Pra, ne zakonisht të përcaktojë strukturat tona në krye të programeve tona 64 00:03:02,824 --> 00:03:05,490 sepse jeni me siguri do për t'u përdorur me funksione të shumëfishta. 65 00:03:05,490 --> 00:03:08,850 Ne nuk duam të përcaktojë një struct brenda një funksioni, 66 00:03:08,850 --> 00:03:12,110 sepse atëherë ne mund të only-- Shtrirja e strukturës me të vërtetë 67 00:03:12,110 --> 00:03:13,790 ekziston vetëm brenda atë funksion. 68 00:03:13,790 --> 00:03:17,450 Ne ndoshta do të duan për të përcaktuar një strukturë kështu që ne mund ta përdorin atë në funksione të shumta, 69 00:03:17,450 --> 00:03:20,670 ose ndoshta në shumëfish fotografi që janë të lidhura së bashku 70 00:03:20,670 --> 00:03:22,920 për të krijuar programin tonë të vetme. 71 00:03:22,920 --> 00:03:24,920 Ndonjëherë edhe vend e përcaktimit të strukturës 72 00:03:24,920 --> 00:03:27,961 në shumë të lartë ku ju vënë tuaj kile përfshin dhe mina jote përcakton, 73 00:03:27,961 --> 00:03:32,080 për shembull, ju mund të vënë ato në veçanta fotografi dot h, të cilat ju pastaj 74 00:03:32,080 --> 00:03:35,020 kile përfshijnë veten. 75 00:03:35,020 --> 00:03:37,620 >> Pra, ne kemi struktura, por tani ne kemi nevojë për të marrë brenda prej tyre. 76 00:03:37,620 --> 00:03:39,800 Si mund të merrni brenda një strukturë për qasje 77 00:03:39,800 --> 00:03:43,530 këto nën-variabla, atyre variablave që ekzistojnë brenda strukturës? 78 00:03:43,530 --> 00:03:46,810 E pra, ne kemi diçka që quhet dot operatori, i cili na lejon 79 00:03:46,810 --> 00:03:50,990 për të hyrë në fushat e strukturës. 80 00:03:50,990 --> 00:03:55,490 Kështu për shembull, le të thonë se unë e kam deklaruar të dhënat e mia Struktura shkruani diku 81 00:03:55,490 --> 00:03:59,020 në krye të programit tim, ose ndoshta në një skedar dot h që unë kam paund përfshira. 82 00:03:59,020 --> 00:04:03,360 Në qoftë se unë dua të krijuar një të ri ndryshueshme e atij lloji të dhënave, unë mund të them, 83 00:04:03,360 --> 00:04:06,260 makinë struct, makina ime, pikëpresje. 84 00:04:06,260 --> 00:04:11,580 Ashtu si unë mund të them int x, ose emrin string pikëpresje. 85 00:04:11,580 --> 00:04:18,100 >> Lloji dhënat këtu është makina struct, emri i variablit është makina ime, 86 00:04:18,100 --> 00:04:23,770 dhe pastaj unë mund të përdorni dot operatorit të hyni në fushat e ndryshme të makinës sime. 87 00:04:23,770 --> 00:04:27,494 Kështu që unë mund të them makinën time dot vit është e barabartë me 2011. 88 00:04:27,494 --> 00:04:28,410 Kjo është e përkryer gjobë. 89 00:04:28,410 --> 00:04:34,210 Vit, në qoftë se ju kujtohet, ishte përcaktuar si një fushë integer brendësi të kësaj makine struct 90 00:04:34,210 --> 00:04:35,200 lloj të të dhënave. 91 00:04:35,200 --> 00:04:39,966 Kështu që çdo ndryshueshme e të dhënave të makinës struct lloji, të tilla si makinën time, unë mund të them makinën time 92 00:04:39,966 --> 00:04:44,030 dot vit është e barabartë dhe pastaj të caktojë ajo disa vlera integer, 2011. 93 00:04:44,030 --> 00:04:47,290 Makinë dot im pjatë barabartë CS50. 94 00:04:47,290 --> 00:04:51,180 Kartë dot My rrugëmatës është e barabartë me 50505 pikëpresje. 95 00:04:51,180 --> 00:04:53,270 Të gjithë ata janë përkryer gjobë dhe kjo është 96 00:04:53,270 --> 00:04:57,802 si ne hyrë në fusha të strukturës. 97 00:04:57,802 --> 00:05:00,260 Strukturat, megjithëse, nuk kanë nevojë të krijohet në rafte. 98 00:05:00,260 --> 00:05:02,950 Ashtu si çdo variabël tjetër, ne dinamike mund të ndajë ato. 99 00:05:02,950 --> 00:05:06,309 Në qoftë se ne kemi një program që fuqia të gjeneruar shumë struktura, 100 00:05:06,309 --> 00:05:08,100 ne nuk e dimë se sa shumë ne jemi duke shkuar për nevojë, 101 00:05:08,100 --> 00:05:10,800 atëherë ne kemi nevojë për dinamike ndajë ato struktura 102 00:05:10,800 --> 00:05:12,960 si programin tonë po kandidon. 103 00:05:12,960 --> 00:05:16,600 Dhe kështu që në qoftë se ne jemi duke shkuar për të hyrë në Fushat e një strukture në këtë kontekst, 104 00:05:16,600 --> 00:05:20,660 kujtojnë se ne së pari duhet të dereference tregues të strukturës, 105 00:05:20,660 --> 00:05:24,810 dhe pastaj një herë ne dereference akrep, atëherë ne mund të hyni fushat. 106 00:05:24,810 --> 00:05:26,830 Në qoftë se ne kemi vetëm një tregues për strukturën, 107 00:05:26,830 --> 00:05:32,120 ne nuk mund të them vetëm akrep dot fushë emrin dhe për të marrë atë që ne jemi duke kërkuar për. 108 00:05:32,120 --> 00:05:34,259 Ka një hap shtesë e dereferencing. 109 00:05:34,259 --> 00:05:36,050 Pra, le të themi se në vend të previous-- 110 00:05:36,050 --> 00:05:38,770 ashtu si shembullin e mëparshëm, në vend të deklaruar atë 111 00:05:38,770 --> 00:05:43,680 në rafte, makinë struct, im makinë, pikëpresje, unë them makinën struct, 112 00:05:43,680 --> 00:05:48,020 yll, një tregues për një makinë struct quajtur makinën time, 113 00:05:48,020 --> 00:05:51,250 është e barabartë me madhësinë malloc e makinave struct. 114 00:05:51,250 --> 00:05:54,950 Madhësia e ne do të kuptoj se sa shumë bytes ri lloji juaj të dhënave merr. 115 00:05:54,950 --> 00:05:58,570 Ju nuk domosdoshmërisht duhet vetëm të përdorni Madhësia e, gjerësi, int, ose char, ose ndonjë 116 00:05:58,570 --> 00:05:59,715 i ndërtuar në lloje të të dhënave. 117 00:05:59,715 --> 00:06:02,090 Përpiluesi është mjaft i zgjuar të kuptoj se si shumë bytes 118 00:06:02,090 --> 00:06:04,170 janë të kërkuara nga struktura tuaj të re. 119 00:06:04,170 --> 00:06:09,610 Kështu që unë malloc vetes një njësi e kujtesës mjaft e madhe për të mbajtur një makinë struct, 120 00:06:09,610 --> 00:06:12,410 dhe unë të marrë një akrep mbrapa në atë bllok të memories, 121 00:06:12,410 --> 00:06:16,090 dhe se akrep është caktuar për makinën time. 122 00:06:16,090 --> 00:06:18,050 >> Tani, në qoftë se unë dua të qasjes fushat e makinën time, 123 00:06:18,050 --> 00:06:22,615 Për herë të parë dereference makinën time duke përdorur operatori dereference, yll 124 00:06:22,615 --> 00:06:26,620 që ne kemi parë nga pointers video, dhe pastaj pas I dereference, 125 00:06:26,620 --> 00:06:32,200 atëherë unë mund të përdorni dot operatorit të hyni në fushat e ndryshme të makinës sime. 126 00:06:32,200 --> 00:06:35,490 Star makinën time dot vit është e barabartë me 2011. 127 00:06:35,490 --> 00:06:38,480 Kjo do të ketë efekt të ne duam në këtë rast, 128 00:06:38,480 --> 00:06:41,960 sepse ne kemi dinamike ndarë makinën time. 129 00:06:41,960 --> 00:06:43,610 >> Kjo është lloj i bezdisshëm, edhe pse, e drejtë? 130 00:06:43,610 --> 00:06:44,818 Ka një proces tani 2-hap. 131 00:06:44,818 --> 00:06:47,460 Tani ne duhet të dereference-- ne kemi një operator yll, 132 00:06:47,460 --> 00:06:48,910 dhe ne kemi një operator dot. 133 00:06:48,910 --> 00:06:51,660 Dhe si ju mund të presin, sepse C programuesit dashuri mënyra më të shkurtra 134 00:06:51,660 --> 00:06:53,740 për të bërë gjëra, ekziston një Mënyra më e shkurtër për të bërë këtë. 135 00:06:53,740 --> 00:06:57,790 Nuk është një tjetër operator i quajtur shigjetë, që e bën këtë proces shumë më e lehtë. 136 00:06:57,790 --> 00:07:00,750 Mënyra shigjetë punon është ajo dereferences parë 137 00:07:00,750 --> 00:07:03,560 tregues në të majtë Ana e operatorit, 138 00:07:03,560 --> 00:07:06,620 dhe pastaj, pas dereferenced tregues në të majtë, 139 00:07:06,620 --> 00:07:09,620 ajo accesses në fushë në të djathtë. 140 00:07:09,620 --> 00:07:14,170 Dhe kështu më parë kemi pasur këtë lloj e yllit makina ime dot të gjitha stuff këtë, 141 00:07:14,170 --> 00:07:15,880 si nuk ishte një shumë ndodh atje. 142 00:07:15,880 --> 00:07:22,040 Por ajo që ne mund të bëjmë në vend të kësaj është this-- My Car shigjetë vit është e barabartë me 2011. 143 00:07:22,040 --> 00:07:23,580 >> Përsëri, çfarë po ndodh këtu? 144 00:07:23,580 --> 00:07:25,720 Së pari, unë jam dereferencing makinën time. 145 00:07:25,720 --> 00:07:27,810 E cila sërish, është një tregues këtu. 146 00:07:27,810 --> 00:07:31,270 Pastaj, pasi dereferenced makinën time, unë 147 00:07:31,270 --> 00:07:35,130 atëherë mund të hyni fushat vit, pjatë, dhe rrugëmatës 148 00:07:35,130 --> 00:07:40,020 ashtu si unë mund të para se të paturit e parë Ylli i përdorur për të dereference makinën time, 149 00:07:40,020 --> 00:07:42,020 dhe dot për të hyrë në fushë. 150 00:07:42,020 --> 00:07:45,290 Kështu që ju mund të keni struktura, ju mund të ketë pointers në strukturat, 151 00:07:45,290 --> 00:07:48,360 dhe ju keni mënyra për qasje fushat e këtyre strukturave, 152 00:07:48,360 --> 00:07:52,600 nëse keni pointers për ata ose vetë variablave. 153 00:07:52,600 --> 00:07:57,640 Dot apo shigjetë, në varësi të si u shpall ndryshueshme. 154 00:07:57,640 --> 00:08:00,510 Unë jam Doug Lloyd, kjo është CS50. 155 00:08:00,510 --> 00:08:01,975