1 00:00:00,000 --> 00:00:02,395 >> [MUSIC nagpe-play] 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 Ginawa namin integer, kami ay nagtrabaho sa mga character, 5 00:00:08,880 --> 00:00:11,930 kami ay nagtrabaho sa kamay, doubles, string, at bools. 6 00:00:11,930 --> 00:00:14,870 Naubos na namin medyo marami ang lahat ng [hindi marinig] uri na 7 00:00:14,870 --> 00:00:17,100 na ito ay magagamit sa amin ang lahat ng mga kasama. 8 00:00:17,100 --> 00:00:19,430 Ngunit ngayon ay gusto naming gawin ang isang bagay na higit pa. 9 00:00:19,430 --> 00:00:20,210 Paano namin gawin iyon? 10 00:00:20,210 --> 00:00:22,560 Paano namin lumikha ng iba't ibang mga uri ng data? 11 00:00:22,560 --> 00:00:26,130 Maaari naming gawin ito sa pamamagitan ng paggamit istruktura. 12 00:00:26,130 --> 00:00:30,180 Kaya payagan istruktura sa amin upang mapag-isa variable ng iba't-ibang uri 13 00:00:30,180 --> 00:00:34,810 sa isang solong, bagong uri ng variable, na kung saan kami ay maaaring magtalaga ng kanyang sariling uri ng pangalan. 14 00:00:34,810 --> 00:00:37,570 Ito ay isang talagang malakas bagay na maaaring gawin, 15 00:00:37,570 --> 00:00:40,900 dahil kami ay maaaring grupo ngayon elemento ng iba't ibang mga uri ng data 16 00:00:40,900 --> 00:00:43,910 magkasama na magkaroon ng isang lohikal na koneksyon. 17 00:00:43,910 --> 00:00:46,440 Napuntahan namin magawa ito may array uri ng, tama? 18 00:00:46,440 --> 00:00:49,540 Maaari naming variable grupo ng parehong uri ng data 19 00:00:49,540 --> 00:00:53,410 sama-sama sa isang malaking unit ng memory, isang array. 20 00:00:53,410 --> 00:00:56,660 >> Ngunit hindi pa namin nagawa upang ihalo up ng iba't ibang mga uri ng sama-sama ng data. 21 00:00:56,660 --> 00:01:02,610 Hindi namin maaaring, sinasabi, pares ng isang integer, at ang isang karakter, at isang double lahat 22 00:01:02,610 --> 00:01:05,330 sa parehong bagay at tumawag na ang isang solong unit. 23 00:01:05,330 --> 00:01:08,830 Subalit sa istruktura, o madalas tinutukoy bilang structs, 24 00:01:08,830 --> 00:01:09,585 talaga namin. 25 00:01:09,585 --> 00:01:12,370 Kaya ang isang istraktura ay uri ng tulad ng isang super variable. 26 00:01:12,370 --> 00:01:16,530 Ito ay isang variable na naglalaman iba pang mga variable sa loob ng mga ito. 27 00:01:16,530 --> 00:01:19,650 Kaya narito ang isang halimbawa ng isang napaka-simpleng istraktura. 28 00:01:19,650 --> 00:01:23,380 Ito ay kung ano ang syntax ay tumingin nais na lumikha ng isang istraktura para sa isang kotse. 29 00:01:23,380 --> 00:01:25,250 Ngayon, pumunta sa pamamagitan ng syntax dito. 30 00:01:25,250 --> 00:01:27,400 Struct, na ang keyword na nagpapahiwatig 31 00:01:27,400 --> 00:01:30,270 na ako ng paglikha ng isang bagong uri ng data dito. 32 00:01:30,270 --> 00:01:33,860 Sa partikular, ang pangalan ng uri ng data ay magiging struct kotse, dahil kakailanganin namin makita. 33 00:01:33,860 --> 00:01:36,640 Ngunit ito ay ang mga uri ng mga tip off na ang tagatala na ito 34 00:01:36,640 --> 00:01:42,440 bilang isang grupo ng mga variable na ito ay pagpunta na isinasaalang-alang na bahagi ng parehong uri 35 00:01:42,440 --> 00:01:44,010 sa isang minuto. 36 00:01:44,010 --> 00:01:46,340 >> Mga sasakyan, lamang ang pangalan ng mga istraktura. 37 00:01:46,340 --> 00:01:50,590 Muli, ang mga uri ng data dito ay pagpunta upang maging struct kotse, hindi lang kotse. 38 00:01:50,590 --> 00:01:53,060 Ngunit kung mayroon kang different-- kung lumikha ka ng maramihang mga structs 39 00:01:53,060 --> 00:01:56,950 sa parehong programa, kailangan mong makilala sa pagitan ng struct at struct. 40 00:01:56,950 --> 00:02:00,140 Kaya struct kotse, maaari din akong magkaroon ng ang mag-aaral struct, halimbawa, 41 00:02:00,140 --> 00:02:01,790 sa parehong programa. 42 00:02:01,790 --> 00:02:05,980 Sa loob ng kulot tirante ay ang lahat ng mga tinatawag na mga patlang, 43 00:02:05,980 --> 00:02:07,954 o miyembro ng istraktura. 44 00:02:07,954 --> 00:02:10,370 Kaya kung ano ang ilan sa mga bagay-bagay na likas sa isang kotse? 45 00:02:10,370 --> 00:02:15,270 Well, kadalasan ito ay isang taon, ay isang pangalan ng modelo, at isang plaka ng lisensya, 46 00:02:15,270 --> 00:02:18,000 isang odometer na kadalasan ay may ilang bilang ng mga milya sa mga ito, 47 00:02:18,000 --> 00:02:19,225 at marahil isang sukat ng engine. 48 00:02:19,225 --> 00:02:23,570 At tulad ng makikita mo, ako ng paghahalo up integers at mga character at doubles. 49 00:02:23,570 --> 00:02:26,420 Lahat ng mga ito ay pagpunta sa maging bahagi ng bagong uri ng data. 50 00:02:26,420 --> 00:02:29,750 >> Sa wakas, ang huling bagay na kailangan kong gawin, huwag kalimutan ang maliit na tuldok-kuwit 51 00:02:29,750 --> 00:02:30,290 sa dulo. 52 00:02:30,290 --> 00:02:34,380 Pagkatapos matapos namin ng pagtukoy sa istraktura, kailangan naming maglagay ng semicolon sa dulo. 53 00:02:34,380 --> 00:02:37,325 Ito ay isang napaka-pangkaraniwan syntactical pagkakamali, dahil sa isang function, 54 00:02:37,325 --> 00:02:40,200 halimbawa, ay mayroon ka lamang bukas kulot suhay, malapit kulot suhay. 55 00:02:40,200 --> 00:02:42,950 Hindi mo na maglagay ng isang tuldok-kuwit sa dulo ng isang kahulugan ng function. 56 00:02:42,950 --> 00:02:46,430 Ito ay mukhang isang function kahulugan, ngunit ito ay hindi, 57 00:02:46,430 --> 00:02:49,653 at sa gayon ang semicolon doon ay isang paalala lamang na kayo 58 00:02:49,653 --> 00:02:52,440 kailangan mong ilagay ito doon, dahil kung hindi, ang tagatala ay hindi 59 00:02:52,440 --> 00:02:53,510 malaman kung ano ang gagawin dito. 60 00:02:53,510 --> 00:02:56,160 Ito ay isang napaka-karaniwang error sinasadyang gawin 61 00:02:56,160 --> 00:02:58,570 kapag ikaw ay unang pagtukoy na kaayusan. 62 00:02:58,570 --> 00:02:59,500 >> SIGE. 63 00:02:59,500 --> 00:03:02,824 Kaya kami ay karaniwang tukuyin ang aming mga istraktura sa pinakatuktok ng aming mga programa 64 00:03:02,824 --> 00:03:05,490 dahil marahil sila ay pagpunta upang magamit sa pamamagitan ng maramihang mga pag-andar. 65 00:03:05,490 --> 00:03:08,850 Hindi namin nais na tukuyin ang isang struct sa loob ng isang function, 66 00:03:08,850 --> 00:03:12,110 dahil pagkatapos ay maaari naming only-- ang saklaw ng istraktura talagang 67 00:03:12,110 --> 00:03:13,790 ay umiiral lamang sa loob ng na function. 68 00:03:13,790 --> 00:03:17,450 Gusto naming malamang na gusto mong tukuyin ang isang istraktura upang maaari naming gamitin ang mga ito sa iba't-ibang mga pag-andar, 69 00:03:17,450 --> 00:03:20,670 o di kaya sa maramihang mga file na ay nakatali magkasama 70 00:03:20,670 --> 00:03:22,920 upang lumikha ng aming solong programa. 71 00:03:22,920 --> 00:03:24,920 Minsan halip din ng pagtukoy sa istraktura 72 00:03:24,920 --> 00:03:27,961 sa pinakatuktok kung saan mo inilagay ang iyong pound nagsasama at ang iyong pound tumutukoy, 73 00:03:27,961 --> 00:03:32,080 halimbawa, maaari mong ilagay ang mga ito sa hiwalay na tuldok h file, na iyo pagkatapos 74 00:03:32,080 --> 00:03:35,020 pound isama ang iyong sarili. 75 00:03:35,020 --> 00:03:37,620 >> Kaya kami ay may kaayusan, ngunit ngayon kailangan namin upang makakuha sa loob ng mga ito. 76 00:03:37,620 --> 00:03:39,800 Paano kami makakuha ng loob ng isang istraktura sa access 77 00:03:39,800 --> 00:03:43,530 mga sub-variable, ang mga variable na umiiral sa loob ng istraktura? 78 00:03:43,530 --> 00:03:46,810 Well, mayroon kaming isang bagay na tinatawag na ang tuldok operator, na nagpapahintulot sa amin 79 00:03:46,810 --> 00:03:50,990 upang ma-access ang mga patlang ng mga istraktura. 80 00:03:50,990 --> 00:03:55,490 Kaya halimbawa, sabihin natin na Aking ipinahayag type sa tabi-tabi ang aking data istraktura 81 00:03:55,490 --> 00:03:59,020 sa tuktok ng aking mga programa, o di kaya sa isang tuldok h file na ko na pound kasama. 82 00:03:59,020 --> 00:04:03,360 Kung pagkatapos ay gusto kong lumikha ng isang bagong variable na ng uri ng data, maaari kong sabihin, 83 00:04:03,360 --> 00:04:06,260 struct kotse, ang aking kotse, semicolon. 84 00:04:06,260 --> 00:04:11,580 Katulad ng maaari kong sabihin int x, o string name semicolon. 85 00:04:11,580 --> 00:04:18,100 >> Ang uri ng data dito ay struct kotse, ang pangalan ng variable ay ang aking kotse, 86 00:04:18,100 --> 00:04:23,770 at pagkatapos ay maaari ko bang gamitin ang operator na tuldok sa ma-access ang iba't-ibang larangan ng aking kotse. 87 00:04:23,770 --> 00:04:27,494 Kaya ang maaari kong sabihin ang aking kotse dot taon ay katumbas ng 2011. 88 00:04:27,494 --> 00:04:28,410 Iyan ay ganap na multa. 89 00:04:28,410 --> 00:04:34,210 Taon, kung isipin mo, ay tinukoy bilang isang integer field sa loob ng struct car 90 00:04:34,210 --> 00:04:35,200 uri ng datos. 91 00:04:35,200 --> 00:04:39,966 Kaya ang anumang mga variable ng data struct car uri, tulad ng aking sasakyan, masasabi ko ang aking kotse 92 00:04:39,966 --> 00:04:44,030 dot taon ay katumbas at pagkatapos ay italaga ito ang ilang mga halaga ng integer, 2011. 93 00:04:44,030 --> 00:04:47,290 Aking dot car plate katumbas CS50. 94 00:04:47,290 --> 00:04:51,180 Aking card dot odometer katumbas ng 50,505 semicolon. 95 00:04:51,180 --> 00:04:53,270 Lahat ng mga ito ay ganap na multa at iyon ang 96 00:04:53,270 --> 00:04:57,802 kung paano namin ma-access ang mga patlang ng mga istraktura. 97 00:04:57,802 --> 00:05:00,260 Istruktura, kahit na, hindi na kailangan na nilikha sa stack. 98 00:05:00,260 --> 00:05:02,950 Katulad ng anumang iba pang mga variable, namin magilas na maaaring magtalaga ng mga ito. 99 00:05:02,950 --> 00:05:06,309 Kung kami ay may isang programa na maaaring maging sa pagbuo ng maraming mga istraktura, 100 00:05:06,309 --> 00:05:08,100 hindi namin alam kung gaano karaming kami ay pagpunta sa kailangan, 101 00:05:08,100 --> 00:05:10,800 pagkatapos ay kailangan namin upang magilas magtalaga ng mga kaayusan 102 00:05:10,800 --> 00:05:12,960 bilang aming programa ay tumatakbo. 103 00:05:12,960 --> 00:05:16,600 At kaya kung kami ay pagpunta upang ma-access ang larangan ng isang istraktura sa konteksto, 104 00:05:16,600 --> 00:05:20,660 pagpapabalik na kailangan muna naming dereference ang pointer sa istraktura, 105 00:05:20,660 --> 00:05:24,810 at pagkatapos ay sa sandaling namin dereference ang pointer, pagkatapos ay maaari naming ma-access ang mga patlang. 106 00:05:24,810 --> 00:05:26,830 Kung lamang ang mayroon kami ng isang pointer sa istraktura, 107 00:05:26,830 --> 00:05:32,120 hindi namin lamang sabihin field pointer dot pangalan at makakuha ng kung ano ang aming hinahanap. 108 00:05:32,120 --> 00:05:34,259 May mga dagdag na hakbang ng dereferencing. 109 00:05:34,259 --> 00:05:36,050 Kaya sabihin natin na sa halip na ang previous-- 110 00:05:36,050 --> 00:05:38,770 tulad ng mga nakaraang mga halimbawa, sa halip ng deklarasyon ito 111 00:05:38,770 --> 00:05:43,680 sa stack, struct kotse, ang aking kotse, semicolon, sinasabi ko struct kotse, 112 00:05:43,680 --> 00:05:48,020 star, isang pointer sa isang struct sasakyan na tinatawag na ang aking sasakyan, 113 00:05:48,020 --> 00:05:51,250 ay katumbas ng malloc laki ng struct kotse. 114 00:05:51,250 --> 00:05:54,950 Sukat ng namin makikita malaman kung gaano karaming bytes iyong bagong uri ng data ay tumatagal ng up. 115 00:05:54,950 --> 00:05:58,570 Hindi mo kailangang palaging lamang na gamitin ang laki ng, lapad, int, o pansamantalang trabaho, o anumang 116 00:05:58,570 --> 00:05:59,715 sa mga built-in na mga uri ng data. 117 00:05:59,715 --> 00:06:02,090 Ang tagatala ay matalino sapat upang malaman kung gaano karaming mga byte 118 00:06:02,090 --> 00:06:04,170 ay kinakailangan ng iyong bagong istraktura. 119 00:06:04,170 --> 00:06:09,610 Kaya malloc ko ang aking sarili sa isang yunit ng memorya malaki sapat na humawak ng isang struct kotse, 120 00:06:09,610 --> 00:06:12,410 at kumuha ako ng isang pointer sa likod sa na bloke ng memorya, 121 00:06:12,410 --> 00:06:16,090 at na pointer itinalaga sa aking kotse. 122 00:06:16,090 --> 00:06:18,050 >> Ngayon, kung gusto kong mag-access larangan ng aking sasakyan, 123 00:06:18,050 --> 00:06:22,615 Ako unang dereference aking kotse gamit ang dereference operator, star 124 00:06:22,615 --> 00:06:26,620 na nasaksihan namin mula sa mga payo video, at pagkatapos matapos ang dereference ko, 125 00:06:26,620 --> 00:06:32,200 pagkatapos ay maaari ko bang gamitin ang operator na tuldok sa ma-access ang iba't-ibang larangan ng aking kotse. 126 00:06:32,200 --> 00:06:35,490 Lagyan ng star ang aking kotse dot taon ay katumbas ng 2011. 127 00:06:35,490 --> 00:06:38,480 Iyon ay magkakaroon ng epekto gusto naming sa kasong ito, 128 00:06:38,480 --> 00:06:41,960 dahil hindi namin magilas inilalaan ang aking kotse. 129 00:06:41,960 --> 00:06:43,610 >> Iyon uri ng mga nakakainis na, bagaman, right? 130 00:06:43,610 --> 00:06:44,818 May isang proseso na 2-step na ngayon. 131 00:06:44,818 --> 00:06:47,460 Ngayon kami ay may sa dereference-- kami ay may isang star operator, 132 00:06:47,460 --> 00:06:48,910 at kami ay may isang tuldok operator. 133 00:06:48,910 --> 00:06:51,660 At bilang maaari mong asahan, dahil C programmers ibig mas maikling paraan 134 00:06:51,660 --> 00:06:53,740 upang gawin ang mga bagay, mayroong isang mas maikling paraan upang gawin ito. 135 00:06:53,740 --> 00:06:57,790 May isa pang operator na tinatawag na arrow, na kung saan gumagawa ang prosesong ito ay mas madaling. 136 00:06:57,790 --> 00:07:00,750 Ang paraan ng paggana ng arrow ay muna ito dereferences 137 00:07:00,750 --> 00:07:03,560 ang pointer sa kaliwa bahagi ng operator, 138 00:07:03,560 --> 00:07:06,620 at pagkatapos, pagkatapos ng pagkakaroon dereferenced ang pointer sa kaliwa, 139 00:07:06,620 --> 00:07:09,620 ito-access ang patlang sa kanan. 140 00:07:09,620 --> 00:07:14,170 At kaya dati nagkaroon kami ng ganitong uri ng star ang aking kotse tuldok lahat ng mga bagay na ito, 141 00:07:14,170 --> 00:07:15,880 tulad ng nagkaroon ng maraming nangyayari doon. 142 00:07:15,880 --> 00:07:22,040 Ngunit kung ano ang sa halip na maaari naming gawin ay this-- aking taon arrow kotse ay katumbas ng 2011. 143 00:07:22,040 --> 00:07:23,580 >> Muli, kung ano ang nangyayari dito? 144 00:07:23,580 --> 00:07:25,720 Una, ako dereferencing aking kotse. 145 00:07:25,720 --> 00:07:27,810 Aling muli, ay isang pointer dito. 146 00:07:27,810 --> 00:07:31,270 Pagkatapos, pagkatapos ng pagkakaroon dereferenced aking kotse, ako 147 00:07:31,270 --> 00:07:35,130 maaaring pagkatapos ma-access ang mga patlang taon, plato, at odometer 148 00:07:35,130 --> 00:07:40,020 gaya ng dati ko bago ang pagkakaroon ng unang ginamit na star sa dereference aking sasakyan, 149 00:07:40,020 --> 00:07:42,020 at tuldok na i-access ang field. 150 00:07:42,020 --> 00:07:45,290 Kaya maaari kang magkaroon kaayusan, ikaw ay ay maaaring magkaroon ng mga payo sa kaayusan, 151 00:07:45,290 --> 00:07:48,360 at ikaw ay may mga paraan upang ma-access larangan ng mga istruktura, 152 00:07:48,360 --> 00:07:52,600 kung ikaw ay may mga payo upang ang mga ito o ang mga variable sa kanilang sarili. 153 00:07:52,600 --> 00:07:57,640 Dot o arrow, depende sa kung paano ang mga variable ay ipinahayag. 154 00:07:57,640 --> 00:08:00,510 Ako Doug Lloyd, ito ay CS50. 155 00:08:00,510 --> 00:08:01,975