1 00:00:00,000 --> 00:00:06,030 >> [Music kucheza] 2 00:00:06,030 --> 00:00:08,390 >> DOUG LLOYD: kuyatumia, hapa sisi ni. 3 00:00:08,390 --> 00:00:11,080 Hii pengine ni kwenda kuwa mada ngumu sana 4 00:00:11,080 --> 00:00:12,840 kwamba sisi majadiliano juu katika CS50. 5 00:00:12,840 --> 00:00:15,060 Na kama wameweza kusoma chochote kuhusu kuyatumia 6 00:00:15,060 --> 00:00:19,080 kabla unaweza kuwa kidogo vitisho kwenda katika video hii. 7 00:00:19,080 --> 00:00:21,260 Ni kweli kuyatumia je kuruhusu uwezo 8 00:00:21,260 --> 00:00:23,740 kwa labda screw up pretty vibaya wakati uko 9 00:00:23,740 --> 00:00:27,450 kufanya kazi na vigezo, na data, na kusababisha mpango wako kwa ajali. 10 00:00:27,450 --> 00:00:30,490 Lakini wao ni kweli muhimu kweli kweli na wao kuruhusu sisi njia kubwa kweli kweli 11 00:00:30,490 --> 00:00:33,340 kupita data nyuma na kurudi kati kazi, 12 00:00:33,340 --> 00:00:35,490 kuwa tuko vinginevyo hawawezi kufanya. 13 00:00:35,490 --> 00:00:37,750 >> Na hivyo kile sisi kweli wanataka kufanya hapa ni mafunzo 14 00:00:37,750 --> 00:00:41,060 wewe kuwa nzuri pointer nidhamu, ili kwamba unaweza kutumia kuyatumia kwa ufanisi 15 00:00:41,060 --> 00:00:43,850 kufanya mipango yako kuwa bora zaidi. 16 00:00:43,850 --> 00:00:48,220 Kama nilivyosema kuyatumia kutupa mbalimbali njia ya kupita data kati ya kazi. 17 00:00:48,220 --> 00:00:50,270 Sasa kama unakumbuka kutoka video hapo awali, wakati 18 00:00:50,270 --> 00:00:53,720 sisi walikuwa wanazungumza juu wigo kutofautiana, nilivyoeleza 19 00:00:53,720 --> 00:01:00,610 kuwa data zote kwamba sisi kupita kati ya kazi katika C ni wanapita thamani. 20 00:01:00,610 --> 00:01:03,070 Na siwezi wametumia kwamba mrefu, kile maana kuna 21 00:01:03,070 --> 00:01:07,170 ni kwamba sisi ni kupita nakala za data. 22 00:01:07,170 --> 00:01:12,252 Wakati sisi kupita kutofautiana kwa kazi, sisi siyo kweli kupita kutofautiana 23 00:01:12,252 --> 00:01:13,210 kwa kazi, haki? 24 00:01:13,210 --> 00:01:17,670 Sisi ni kupita nakala ya kwamba data kwa kazi. 25 00:01:17,670 --> 00:01:20,760 Kazi gani itakuwa nini na ni mahesabu ya baadhi ya thamani, 26 00:01:20,760 --> 00:01:23,180 na labda sisi kutumia thamani kwamba wakati anatoa nyuma. 27 00:01:23,180 --> 00:01:26,700 >> Kulikuwa na ubaguzi moja kwa huu utawala wa akipita thamani, 28 00:01:26,700 --> 00:01:31,210 na tutaweza kurudi kwa nini kwamba ni kidogo baadaye katika video hii. 29 00:01:31,210 --> 00:01:34,880 Kama sisi kutumia kuyatumia badala ya kutumia vigezo, 30 00:01:34,880 --> 00:01:38,180 au badala ya kutumia vigezo wenyewe au nakala ya vigezo, 31 00:01:38,180 --> 00:01:43,790 sasa tunaweza kupita vigezo kuzunguka kati ya majukumu kwa njia mbalimbali. 32 00:01:43,790 --> 00:01:46,550 Hii ina maana kwamba kama sisi kufanya mabadiliko katika kazi moja, 33 00:01:46,550 --> 00:01:49,827 mabadiliko ambayo kweli kuchukua athari katika kazi mbalimbali. 34 00:01:49,827 --> 00:01:52,160 Tena, hii ni kitu ambacho sisi hakuweza kufanya hapo awali, 35 00:01:52,160 --> 00:01:56,979 na kama wameweza milele walijaribu wabadilishane thamani ya vigezo mbili katika kazi, 36 00:01:56,979 --> 00:01:59,270 umegundua tatizo hili aina ya kitambaacho juu, sawa? 37 00:01:59,270 --> 00:02:04,340 >> Kama tunataka wabadilishane X na Y, na sisi kupita yao kwa kazi kuitwa wabadilishane, 38 00:02:04,340 --> 00:02:08,680 ndani ya kazi wabadilishane vigezo kufanya maadili kubadilishana. 39 00:02:08,680 --> 00:02:12,600 Moja inakuwa wawili, wawili inakuwa moja, lakini sisi si kweli 40 00:02:12,600 --> 00:02:16,890 kubadili jambo lolote katika awali kazi, katika mpigaji. 41 00:02:16,890 --> 00:02:19,550 Kwa sababu hatuwezi, tuko tu kufanya kazi na nakala za kwao. 42 00:02:19,550 --> 00:02:24,760 Na kuyatumia ingawa, tunaweza kweli kupita X na Y kwa kazi. 43 00:02:24,760 --> 00:02:26,960 Kazi ambayo anaweza kufanya kitu pamoja nao. 44 00:02:26,960 --> 00:02:29,250 Na wale maadili vigezo kweli anaweza kubadilika. 45 00:02:29,250 --> 00:02:33,710 Hivyo hiyo ni mabadiliko kabisa katika uwezo wetu wa kufanya kazi na data. 46 00:02:33,710 --> 00:02:36,100 >> Kabla ya kupiga mbizi katika kuyatumia, nadhani ni thamani 47 00:02:36,100 --> 00:02:38,580 kuchukua dakika chache kwenda nyuma ya msingi hapa. 48 00:02:38,580 --> 00:02:41,000 Na kuwa na kuangalia jinsi matendo kumbukumbu ya kompyuta 49 00:02:41,000 --> 00:02:45,340 kwa sababu masuala haya mawili ni kwenda kwa kweli kuwa pretty yanayohusiana. 50 00:02:45,340 --> 00:02:48,480 Kama pengine kujua, juu ya mfumo wa kompyuta yako 51 00:02:48,480 --> 00:02:51,310 una gari ngumu au labda hali gari imara, 52 00:02:51,310 --> 00:02:54,430 aina fulani ya kuhifadhi faili eneo. 53 00:02:54,430 --> 00:02:57,950 Ni kawaida mahali fulani katika kitongoji cha 250 gigabytes 54 00:02:57,950 --> 00:02:59,810 kwa labda michache ya terabytes sasa. 55 00:02:59,810 --> 00:03:02,270 Na ni wapi wote wa yako mafaili hatimaye kuishi, 56 00:03:02,270 --> 00:03:04,870 hata wakati kompyuta yako ni kufunga mbali, unaweza kugeuka kuwa nyuma 57 00:03:04,870 --> 00:03:09,190 na utapata mafaili yako ni pale tena wakati reboot mfumo wako. 58 00:03:09,190 --> 00:03:14,820 Lakini anatoa disk, kama gari ngumu disk, HDD, au hali gari imara, SSD, 59 00:03:14,820 --> 00:03:16,050 ni nafasi tu ya kuhifadhi. 60 00:03:16,050 --> 00:03:20,400 >> Hatuwezi kwa kweli kufanya kitu chochote na takwimu ambazo ni katika disk, 61 00:03:20,400 --> 00:03:22,080 au katika hali gari imara. 62 00:03:22,080 --> 00:03:24,950 Ili kweli mabadiliko data au hoja ni kuzunguka, 63 00:03:24,950 --> 00:03:28,800 tuna hoja hiyo kwa RAM, random kupata kumbukumbu. 64 00:03:28,800 --> 00:03:31,170 Sasa RAM, una mengi chini ya katika kompyuta yako. 65 00:03:31,170 --> 00:03:34,185 Unaweza kuwa na mahali fulani katika kitongoji cha 512 megabytes 66 00:03:34,185 --> 00:03:38,850 kama una kompyuta wakubwa, kwa labda mbili, nne, nane, 16, 67 00:03:38,850 --> 00:03:41,820 pengine hata kidogo zaidi, gigabytes ya RAM. 68 00:03:41,820 --> 00:03:46,390 Hivyo hiyo ni ndogo sana, lakini hiyo ni ambapo wote wa takwimu tete lipo. 69 00:03:46,390 --> 00:03:48,270 Hapo ndipo tunaweza kubadili mambo. 70 00:03:48,270 --> 00:03:53,350 Lakini wakati sisi kugeuka kompyuta yetu mbali, yote ya data katika RAM ni kuharibiwa. 71 00:03:53,350 --> 00:03:57,150 >> Hivyo ndiyo sababu tunahitaji kuwa na hard disk kwa eneo kudumu zaidi ya hayo, 72 00:03:57,150 --> 00:03:59,720 hivyo kwamba exists- ingekuwa kuwa kweli mbaya kama kila wakati sisi 73 00:03:59,720 --> 00:04:03,310 akageuka kompyuta yetu mbali, kila faili katika mfumo wetu alikuwa obliterated. 74 00:04:03,310 --> 00:04:05,600 Hivyo tunafanya kazi ndani ya RAM. 75 00:04:05,600 --> 00:04:09,210 Na kila wakati tunazungumzia kumbukumbu, pretty much, katika CS50, 76 00:04:09,210 --> 00:04:15,080 tunazungumzia RAM, si ngumu disk. 77 00:04:15,080 --> 00:04:18,657 >> Hivyo wakati sisi hoja mambo katika kumbukumbu, inachukua hadi kiasi fulani cha nafasi. 78 00:04:18,657 --> 00:04:20,740 Wote wa aina data kwamba tumekuwa kufanya kazi na 79 00:04:20,740 --> 00:04:23,480 kuchukua mbalimbali kiasi cha nafasi katika RAM. 80 00:04:23,480 --> 00:04:27,600 Hivyo kila wakati kuunda integer kutofautiana, ka nne ya kumbukumbu 81 00:04:27,600 --> 00:04:30,750 ni kuweka kando katika RAM hivyo wanaweza kufanya kazi na kwamba integer. 82 00:04:30,750 --> 00:04:34,260 Unaweza kutangaza integer, mabadiliko hayo, hawawajui 83 00:04:34,260 --> 00:04:36,700 kwa thamani 10 incremented kwa moja, kadhalika na kadhalika. 84 00:04:36,700 --> 00:04:39,440 Wote kwamba mahitaji ya kutokea katika RAM, na kupata ka nne 85 00:04:39,440 --> 00:04:42,550 kufanya kazi na kwa kila integer kwamba kujenga. 86 00:04:42,550 --> 00:04:45,410 >> Kila tabia wewe kujenga anapata Byte moja. 87 00:04:45,410 --> 00:04:48,160 Hiyo tu ni kiasi gani nafasi ni zinahitajika ili kuhifadhi tabia. 88 00:04:48,160 --> 00:04:51,310 Kila kuelea, halisi idadi, anapata ka nne 89 00:04:51,310 --> 00:04:53,390 isipokuwa ni mara mbili usahihi floating kumweka 90 00:04:53,390 --> 00:04:56,510 idadi, ambayo inaruhusu kuwa sahihi zaidi au zaidi ya tarakimu 91 00:04:56,510 --> 00:04:59,300 baada ya uhakika decimal bila ya kupoteza usahihi, 92 00:04:59,300 --> 00:05:01,820 ambayo kuchukua ka nane ya kumbukumbu. 93 00:05:01,820 --> 00:05:06,730 Muda mrefu anatamani, integers kweli kubwa, pia kuchukua ka nane ya kumbukumbu. 94 00:05:06,730 --> 00:05:09,000 Jinsi ka ya kumbukumbu wengi Je, masharti kuchukua? 95 00:05:09,000 --> 00:05:12,990 Naam hebu kuweka siri katika swali kwamba kwa sasa, lakini tutaweza kuja nyuma yake. 96 00:05:12,990 --> 00:05:17,350 >> Hivyo nyuma wazo hili la kumbukumbu kama safu kubwa ya seli Byte kati. 97 00:05:17,350 --> 00:05:20,871 Hiyo ni kweli wote ni, ni tu safu kubwa ya seli, 98 00:05:20,871 --> 00:05:23,370 kama safu nyingine yoyote ambayo wewe ni ukoo na uone, 99 00:05:23,370 --> 00:05:26,430 isipokuwa kila kipengele ni byte moja pana. 100 00:05:26,430 --> 00:05:30,030 Na kama safu, kila kipengele ina mahali. 101 00:05:30,030 --> 00:05:32,120 Kila kipengele cha safu ina ripoti, na sisi 102 00:05:32,120 --> 00:05:36,302 Unaweza kutumia kwamba ripoti ya kufanya kinachojulikana random kupata juu ya safu. 103 00:05:36,302 --> 00:05:38,510 Hatuna kuanza saa mwanzo wa safu, 104 00:05:38,510 --> 00:05:40,569 iterate kupitia kila kipengele moja vyake, 105 00:05:40,569 --> 00:05:41,860 kupata nini sisi ni kuangalia kwa. 106 00:05:41,860 --> 00:05:45,790 Tunaweza kusema tu, nataka kupata 15 kipengele au kipengele 100. 107 00:05:45,790 --> 00:05:49,930 Na unaweza tu kupita katika idadi hiyo na kupata thamani wewe ni kuangalia kwa. 108 00:05:49,930 --> 00:05:54,460 >> Vile vile kila eneo katika kumbukumbu ina mahali. 109 00:05:54,460 --> 00:05:57,320 Hivyo kumbukumbu yako nguvu kuangalia kitu kama hii. 110 00:05:57,320 --> 00:06:01,420 Hapa ni chunk ndogo sana ya kumbukumbu, hii ni 20 ka ya kumbukumbu. 111 00:06:01,420 --> 00:06:04,060 Kwanza 20 ka kwa sababu yangu anazungumzia huko chini 112 00:06:04,060 --> 00:06:08,890 ni 0, 1, 2, 3, na kadhalika juu ya njia yote hadi 19. 113 00:06:08,890 --> 00:06:13,190 Na wakati mimi kutangaza vigezo na wakati mimi kuanza kufanya kazi pamoja nao, 114 00:06:13,190 --> 00:06:15,470 mfumo ni kwenda kuweka kando baadhi ya nafasi kwa ajili yangu 115 00:06:15,470 --> 00:06:17,595 katika kumbukumbu hii kazi na vigezo yangu. 116 00:06:17,595 --> 00:06:21,610 Hivyo mimi anaweza kusema, char c sawa na mitaji H. Na nini kitatokea? 117 00:06:21,610 --> 00:06:23,880 Vizuri mfumo ni kwenda kuweka kando kwa ajili yangu moja Byte. 118 00:06:23,880 --> 00:06:27,870 Katika kesi hiyo waliamua Byte idadi nne, Byte kwa anwani nne, 119 00:06:27,870 --> 00:06:31,310 na ni kwenda kuhifadhi herufi kubwa H katika huko kwa ajili yangu. 120 00:06:31,310 --> 00:06:34,350 Kama mimi basi kusema int kasi kikomo ni sawa na 65, ni 121 00:06:34,350 --> 00:06:36,806 kwenda kuweka kando nne ka ya kumbukumbu kwa ajili yangu. 122 00:06:36,806 --> 00:06:39,180 Na itakuja kutibu wale ka nne kama kitengo moja 123 00:06:39,180 --> 00:06:41,305 kwa sababu gani sisi ni kazi na ni integer hapa. 124 00:06:41,305 --> 00:06:44,350 Na ni kwenda kuhifadhi 65 katika huko. 125 00:06:44,350 --> 00:06:47,000 >> Sasa tayari mimi nina aina ya nawaambia kidogo ya uongo, 126 00:06:47,000 --> 00:06:50,150 haki, kwa sababu tunajua kwamba kompyuta kazi katika mapacha. 127 00:06:50,150 --> 00:06:53,100 Hawaelewi lazima kile mji mkuu H ni 128 00:06:53,100 --> 00:06:57,110 au kile 65 ni, wao tu kuelewa binary, zeros na ndio. 129 00:06:57,110 --> 00:06:59,000 Na hivyo nini hasa sisi ni hifadhi huko katika 130 00:06:59,000 --> 00:07:03,450 si barua H na idadi 65, bali uwakilishi binary 131 00:07:03,450 --> 00:07:06,980 yake, ambayo kuangalia kitu kidogo kama hii. 132 00:07:06,980 --> 00:07:10,360 Na hasa katika mazingira ya integer kutofautiana, 133 00:07:10,360 --> 00:07:13,559 si kwenda tu mate ndani, si kwenda kutibu kama moja ya nne 134 00:07:13,559 --> 00:07:15,350 Byte chunk lazima, ni kweli kwenda 135 00:07:15,350 --> 00:07:19,570 kutibu kama nne moja chunks Byte, ambayo inaweza kuangalia kitu kama hii. 136 00:07:19,570 --> 00:07:22,424 Na hata hii si kabisa kweli ama, 137 00:07:22,424 --> 00:07:24,840 kwa sababu ya kitu kinachoitwa endianness, ambayo sisi siyo 138 00:07:24,840 --> 00:07:26,965 kwenda kupata katika sasa, lakini kama wewe ni curious kuhusu, 139 00:07:26,965 --> 00:07:29,030 unaweza kusoma juu ya kidogo na endianness kubwa. 140 00:07:29,030 --> 00:07:31,640 Lakini kwa ajili ya mjadala huu, kwa ajili ya video hii, 141 00:07:31,640 --> 00:07:34,860 hebu tu kudhani yaani, katika kweli, jinsi idadi 65 ingekuwa 142 00:07:34,860 --> 00:07:36,970 kuwakilishwa katika kumbukumbu juu ya kila mfumo, 143 00:07:36,970 --> 00:07:38,850 ingawa si kweli kabisa. 144 00:07:38,850 --> 00:07:41,700 >> Lakini hebu kweli tu kupata kuondoa wote binary kabisa, 145 00:07:41,700 --> 00:07:44,460 na tu kufikiri kuhusu kama H na 65, ni rahisi sana 146 00:07:44,460 --> 00:07:47,900 kufikiri juu yake kama kuwa kama binadamu. 147 00:07:47,900 --> 00:07:51,420 Haki wote, hivyo ni pia inaonekana labda kidogo random kwamba I've- mfumo wangu 148 00:07:51,420 --> 00:07:55,130 hamkunipa ka 5, 6, 7, na 8 kuhifadhi integer. 149 00:07:55,130 --> 00:07:58,580 Kuna sababu kwa kuwa, pia, ambayo sisi si kupata ndani ya sasa hivi, lakini inatosha 150 00:07:58,580 --> 00:08:00,496 kusema kwamba kile kompyuta ni kufanya hapa 151 00:08:00,496 --> 00:08:02,810 pengine ni hatua nzuri kwa upande wake. 152 00:08:02,810 --> 00:08:06,020 Kwa kunipa kumbukumbu hiyo ni lazima nyuma kwa nyuma. 153 00:08:06,020 --> 00:08:10,490 Ingawa ni kwenda kufanya hivyo sasa kama nataka kupata kamba mwingine, 154 00:08:10,490 --> 00:08:13,080 aitwaye jina, na mimi nataka kuweka Lloyd huko. 155 00:08:13,080 --> 00:08:18,360 Mimi nina kwenda haja ya fit moja tabia, kila barua ya kwamba 156 00:08:18,360 --> 00:08:21,330 kwenda zinahitaji moja tabia, byte moja ya kumbukumbu. 157 00:08:21,330 --> 00:08:26,230 Hivyo kama mimi naweza kuweka Lloyd katika safu yangu kama hii mimi nina nzuri ya kwenda, haki? 158 00:08:26,230 --> 00:08:28,870 Kinachokosekana? 159 00:08:28,870 --> 00:08:31,840 >> Kumbuka kwamba kila kamba tunafanya kazi na katika C kumalizika kwa sifuri backslash, 160 00:08:31,840 --> 00:08:33,339 na hatuwezi saza kwamba hapa, aidha. 161 00:08:33,339 --> 00:08:36,090 Tunahitaji kuweka kando Byte moja ya kumbukumbu kushikilia kwamba hivyo sisi 162 00:08:36,090 --> 00:08:39,130 kujua wakati kamba yetu ina kumalizika. 163 00:08:39,130 --> 00:08:41,049 Hivyo tena utaratibu huu ya jinsi mambo 164 00:08:41,049 --> 00:08:42,799 kuonekana katika kumbukumbu uwezo kuwa ni kidogo random, 165 00:08:42,799 --> 00:08:44,870 lakini kwa kweli ni jinsi mifumo ya wengi ni iliyoundwa. 166 00:08:44,870 --> 00:08:48,330 Kwa line yao juu juu ya mafungu ya nne, kwa sababu tena 167 00:08:48,330 --> 00:08:50,080 kwamba hatuna haja ya kupata katika hivi sasa. 168 00:08:50,080 --> 00:08:53,060 Lakini hii, hivyo inatosha kusema kwamba baada ya mistari hii mitatu ya maadili, 169 00:08:53,060 --> 00:08:54,810 hii ni nini kumbukumbu ili kuangalia kama. 170 00:08:54,810 --> 00:08:58,930 Kama mimi haja maeneo ya kumbukumbu 4, 8, na 12 kushikilia data zangu, 171 00:08:58,930 --> 00:09:01,100 hii ni nini kumbukumbu yangu ili kuangalia kama. 172 00:09:01,100 --> 00:09:04,062 >> Na tu kuwa na hasa pedantic hapa, wakati 173 00:09:04,062 --> 00:09:06,020 tunazungumzia kumbukumbu anwani sisi kwa kawaida 174 00:09:06,020 --> 00:09:08,390 kufanya hivyo kwa kutumia notations hexadesimoli. 175 00:09:08,390 --> 00:09:12,030 Hivyo kwa nini sio sisi kubadili yote haya kutoka kwa nukuu hexadecimal alisema 176 00:09:12,030 --> 00:09:15,010 sababu tu kwamba kwa ujumla jinsi sisi rejea kumbukumbu. 177 00:09:15,010 --> 00:09:17,880 Hivyo badala ya kuwa 0 kupitia 19, tuna nini ni sifuri 178 00:09:17,880 --> 00:09:20,340 x sifuri kupitia sifuri x1 tatu. 179 00:09:20,340 --> 00:09:23,790 Hayo ni ka 20 ya kumbukumbu kwamba sisi kuwa au sisi ni kuangalia kwa mfano huu 180 00:09:23,790 --> 00:09:25,540 hapa hapa. 181 00:09:25,540 --> 00:09:29,310 >> Basi wote wa kwamba kuwa alisema, hebu hatua mbali na kumbukumbu kwa ajili ya pili 182 00:09:29,310 --> 00:09:30,490 na nyuma kuyatumia. 183 00:09:30,490 --> 00:09:32,420 Hapa ni muhimu zaidi Jambo kukumbuka 184 00:09:32,420 --> 00:09:34,070 kama sisi kuanza kufanya kazi na kuyatumia. 185 00:09:34,070 --> 00:09:36,314 Pointer kitu zaidi ya mahali. 186 00:09:36,314 --> 00:09:38,230 Mimi itabidi kusema tena kwa sababu ni kwamba muhimu, 187 00:09:38,230 --> 00:09:42,730 pointer kitu zaidi ya mahali. 188 00:09:42,730 --> 00:09:47,760 Kuyatumia ni anwani za maeneo kwa katika kumbukumbu ambapo vigezo kuishi. 189 00:09:47,760 --> 00:09:52,590 Akijua kwamba inakuwa hopefully rahisi kidogo kidogo kufanya kazi pamoja nao. 190 00:09:52,590 --> 00:09:54,550 Kitu kingine mimi kama kufanya ni kuwa na aina 191 00:09:54,550 --> 00:09:58,510 ya diagrams kuibua anayewakilisha nini kinachotokea na mistari mbalimbali wa kanuni. 192 00:09:58,510 --> 00:10:00,660 Na tutaweza kufanya hivyo wanandoa mara nyingi katika kuyatumia, 193 00:10:00,660 --> 00:10:03,354 na wakati sisi majadiliano juu ya nguvu mgao kumbukumbu pia. 194 00:10:03,354 --> 00:10:06,020 Kwa sababu nadhani kwamba vielelezo hivi inaweza kuwa hasa kusaidia. 195 00:10:06,020 --> 00:10:09,540 >> Hivyo kama mimi kusema kwa mfano, int k katika kanuni yangu, kinachojitokeza? 196 00:10:09,540 --> 00:10:12,524 Vizuri nini kimsingi kinachotokea ni Mimi nina kupata kumbukumbu zilizotengwa kwa ajili yangu, 197 00:10:12,524 --> 00:10:14,690 lakini sijui hata kama kufikiri juu yake kama hicho, mimi 198 00:10:14,690 --> 00:10:16,300 kama kufikiri kuhusu hilo kama eneo la hatari. 199 00:10:16,300 --> 00:10:20,090 Nina sanduku na ni rangi ya kijani kwa sababu mimi 200 00:10:20,090 --> 00:10:21,750 unaweza kuweka integers katika masanduku ya kijani. 201 00:10:21,750 --> 00:10:23,666 Kama ilivyokuwa tabia mimi inaweza kuwa na sanduku bluu. 202 00:10:23,666 --> 00:10:27,290 Lakini mimi daima kusema, kama mimi nina kujenga sanduku kwamba wanaweza kushikilia integers 203 00:10:27,290 --> 00:10:28,950 sanduku kwamba ni rangi ya kijani. 204 00:10:28,950 --> 00:10:33,020 Na mimi kuchukua marker wa kudumu na mimi kuandika k upande wa hayo. 205 00:10:33,020 --> 00:10:37,590 Hivyo nina sanduku aitwaye k, ndani ambayo siwezi kuweka integers. 206 00:10:37,590 --> 00:10:41,070 Hivyo wakati mimi kusema int k, hiyo ni nini kinatokea katika kichwa changu. 207 00:10:41,070 --> 00:10:43,140 Kama mimi kusema k ni sawa na tano, je, Mimi kufanya? 208 00:10:43,140 --> 00:10:45,110 Naam, mimi nina kuweka tano katika sanduku, haki. 209 00:10:45,110 --> 00:10:48,670 Hii ni pretty moja kwa moja, kama Nasema int k, kujenga sanduku aitwaye k. 210 00:10:48,670 --> 00:10:52,040 Kama mimi kusema k ni sawa na 5, kuweka tano katika eneo la hatari. 211 00:10:52,040 --> 00:10:53,865 Ni matumaini kwamba si sana ya leap. 212 00:10:53,865 --> 00:10:55,990 Hapa ni ambapo mambo kwenda kidogo ya kuvutia ingawa. 213 00:10:55,990 --> 00:11:02,590 Kama mimi kusema int * pk, vizuri hata kama mimi si kujua jambo hili lazima maana, 214 00:11:02,590 --> 00:11:06,150 ni wazi got kitu cha kufanya na integer. 215 00:11:06,150 --> 00:11:08,211 Hivyo nina kwenda kwa rangi sanduku hii ya kijani-ish, 216 00:11:08,211 --> 00:11:10,210 Najua ni got kitu cha kufanya na integer, 217 00:11:10,210 --> 00:11:13,400 lakini siyo integer yenyewe, kwa sababu ni nyota int. 218 00:11:13,400 --> 00:11:15,390 Kuna kitu kidogo mbalimbali kuhusu suala hilo. 219 00:11:15,390 --> 00:11:17,620 Hivyo integer ya kushiriki, lakini vinginevyo ni 220 00:11:17,620 --> 00:11:19,830 si mno tofauti na nini tulikuwa kuzungumza juu. 221 00:11:19,830 --> 00:11:24,240 Ni sanduku, got wake studio, ni amevaa studio pk, 222 00:11:24,240 --> 00:11:27,280 na ni uwezo wa kufanya nyota int, chochote wale ni. 223 00:11:27,280 --> 00:11:29,894 Wana kitu cha kufanya kwa integers, ni wazi kuwa. 224 00:11:29,894 --> 00:11:31,060 Hapa ni mstari wa mwisho ingawa. 225 00:11:31,060 --> 00:11:37,650 Kama mimi kusema pk = & k, Ho, nini ilitokea tu, sawa? 226 00:11:37,650 --> 00:11:41,820 Hivyo hii namba kubahatisha, inaonekana random idadi, anapata kutupwa ndani ya boksi hapo. 227 00:11:41,820 --> 00:11:44,930 Wote yaani, ni pk anapata pepe ya k. 228 00:11:44,930 --> 00:11:52,867 Hivyo mimi nina sticking ambapo k anaishi katika kumbukumbu, anwani yake, anwani ya ka yake. 229 00:11:52,867 --> 00:11:55,200 Wote mimi nina kufanya ni mimi kusema thamani kwamba ni nini mimi kwenda 230 00:11:55,200 --> 00:11:59,430 kuweka ndani ya boksi yangu aitwaye pk. 231 00:11:59,430 --> 00:12:02,080 Na kwa sababu mambo haya ni kuyatumia, na kwa sababu kuangalia 232 00:12:02,080 --> 00:12:04,955 katika kamba kama sifuri x nane sifuri c saba nne nane 233 00:12:04,955 --> 00:12:07,790 mbili sifuri pengine ni si ya maana sana. 234 00:12:07,790 --> 00:12:12,390 Wakati sisi ujumla taswira kuyatumia, sisi kwa kweli kufanya hivyo kama kuyatumia. 235 00:12:12,390 --> 00:12:17,000 Pk inatupa habari tunahitaji kupata k katika kumbukumbu. 236 00:12:17,000 --> 00:12:19,120 Hivyo kimsingi pk ina mshale ndani yake. 237 00:12:19,120 --> 00:12:21,670 Na kama sisi kutembea urefu ya kwamba mshale, fikiria 238 00:12:21,670 --> 00:12:25,280 ni kitu unaweza kutembea juu ya, kama sisi kutembea pamoja urefu wa mshale, 239 00:12:25,280 --> 00:12:29,490 katika ncha sana ya kwamba mshale, sisi utapata mahali katika kumbukumbu 240 00:12:29,490 --> 00:12:31,390 ambapo k anaishi. 241 00:12:31,390 --> 00:12:34,360 Na kwamba ni kweli muhimu kwa sababu mara moja tunajua ambapo k anaishi, 242 00:12:34,360 --> 00:12:37,870 tunaweza kuanza kufanya kazi na data ndani ya kwamba kumbukumbu eneo. 243 00:12:37,870 --> 00:12:40,780 Ingawa sisi ni kupata teeny kidogo mbele ya sisi wenyewe kwa sasa. 244 00:12:40,780 --> 00:12:42,240 >> Kwa hiyo kile ni pointer? 245 00:12:42,240 --> 00:12:45,590 Pointer ni bidhaa ambazo data thamani ya kumbukumbu ya mahali. 246 00:12:45,590 --> 00:12:49,740 Hiyo ilikuwa ni kwamba sifuri x nane sifuri mambo kinachoendelea, ambayo ilikuwa kumbukumbu ya mahali. 247 00:12:49,740 --> 00:12:52,060 Hiyo ilikuwa ni eneo katika kumbukumbu. 248 00:12:52,060 --> 00:12:55,080 Na aina ya pointer inaeleza aina 249 00:12:55,080 --> 00:12:56,930 wa takwimu utapata katika kwamba kumbukumbu ya mahali. 250 00:12:56,930 --> 00:12:58,810 Hivyo kuna int nyota sehemu ya haki. 251 00:12:58,810 --> 00:13:03,690 Kama mimi kufuata mshale, ni kwenda risasi mimi eneo. 252 00:13:03,690 --> 00:13:06,980 Na eneo hilo, kile utapata huko katika mfano wangu, 253 00:13:06,980 --> 00:13:08,240 ni kijani rangi sanduku. 254 00:13:08,240 --> 00:13:12,650 Ni integer, kwamba ni nini mimi utapata nikienda kwa anwani hiyo. 255 00:13:12,650 --> 00:13:14,830 Aina ya data ya pointer inaeleza nini 256 00:13:14,830 --> 00:13:17,936 utapata katika kumbukumbu ya mahali. 257 00:13:17,936 --> 00:13:19,560 Hivyo hapa ni kitu kweli ya baridi ingawa. 258 00:13:19,560 --> 00:13:25,090 Kuyatumia kuruhusu sisi kupita vigezo kati ya majukumu. 259 00:13:25,090 --> 00:13:28,520 Na kwa kweli kupita vigezo na kupita nakala za kwao. 260 00:13:28,520 --> 00:13:32,879 Kwa sababu kama sisi kujua hasa ambapo katika kumbukumbu kupata kutofautiana, 261 00:13:32,879 --> 00:13:35,670 hatuna haja ya kufanya nakala ya hilo, tunaweza tu kwenda eneo hilo 262 00:13:35,670 --> 00:13:37,844 na kufanya kazi na kwamba kutofautiana. 263 00:13:37,844 --> 00:13:40,260 Hivyo katika kuyatumia kiini aina ya kufanya mazingira ya kompyuta 264 00:13:40,260 --> 00:13:42,360 mengi zaidi kama ulimwengu halisi, haki. 265 00:13:42,360 --> 00:13:44,640 >> Hivyo hapa ni mfano. 266 00:13:44,640 --> 00:13:48,080 Hebu kusema kwamba nina daftari, haki, na ni kamili ya maelezo. 267 00:13:48,080 --> 00:13:50,230 Na napenda wewe kwa taarifa hiyo. 268 00:13:50,230 --> 00:13:53,960 Wewe ni kazi ambayo updates maelezo, haki. 269 00:13:53,960 --> 00:13:56,390 Kwa njia tumekuwa kazi hadi sasa, kile 270 00:13:56,390 --> 00:14:02,370 ikitokea ni utachukua daftari wangu, utasikia kwenda dukani nakala, 271 00:14:02,370 --> 00:14:06,410 itabidi kufanya Xerox nakala ya kila ukurasa wa daftari. 272 00:14:06,410 --> 00:14:09,790 Wewe itabidi kuondoka daftari yangu nyuma juu ya dawati yangu wakati wewe ni kosa, 273 00:14:09,790 --> 00:14:14,600 utasikia kwenda na kuvuka nje mambo katika wangu daftari ambayo ni nje ya tarehe au makosa, 274 00:14:14,600 --> 00:14:19,280 na kisha utasikia kupita nyuma mimi mkusanyiko wa kurasa Xerox 275 00:14:19,280 --> 00:14:22,850 kuwa ni replica ya daftari yangu na mabadiliko ambayo umefanya na hiyo. 276 00:14:22,850 --> 00:14:27,040 Na katika hatua hiyo, ni juu yangu kama wito kazi, kama mpigaji, 277 00:14:27,040 --> 00:14:30,582 kwa kuamua kuchukua maelezo yako na kuunganisha yao nyuma katika daftari yangu. 278 00:14:30,582 --> 00:14:32,540 Hivyo kuna mengi ya hatua waliohusika hapa, hivi. 279 00:14:32,540 --> 00:14:34,850 Kama sivyo kuwa bora kama mimi tu kusema, hey, unaweza wewe 280 00:14:34,850 --> 00:14:38,370 kuboresha daftari yangu kwa yangu, mkono wewe daftari wangu, 281 00:14:38,370 --> 00:14:40,440 na wewe kuchukua mambo na halisi kuvuka yao nje 282 00:14:40,440 --> 00:14:42,810 na kuboresha maelezo yangu katika daftari yangu. 283 00:14:42,810 --> 00:14:45,140 Na kisha nipe daftari yangu nyuma. 284 00:14:45,140 --> 00:14:47,320 Hiyo ni aina ya nini kuyatumia kuruhusu sisi kufanya, 285 00:14:47,320 --> 00:14:51,320 wao kufanya mazingira haya mengi zaidi kama jinsi sisi kazi katika hali halisi. 286 00:14:51,320 --> 00:14:54,640 >> Haki zote hivyo kwamba ni nini pointer ni, hebu majadiliano 287 00:14:54,640 --> 00:14:58,040 kuhusu jinsi ya kuyatumia kazi katika C, na jinsi gani tunaweza kuanza kufanya kazi pamoja nao. 288 00:14:58,040 --> 00:15:02,550 Hivyo kuna pointer rahisi sana katika C aitwaye pointer null. 289 00:15:02,550 --> 00:15:04,830 Null pointi pointer chochote. 290 00:15:04,830 --> 00:15:08,310 Hii pengine inaonekana kana kwamba ni kweli si jambo muhimu sana, 291 00:15:08,310 --> 00:15:10,500 lakini kama tutaweza kuona kidogo baadaye, ukweli 292 00:15:10,500 --> 00:15:15,410 kwamba hii pointer null ipo kweli kweli wanaweza kuja katika Handy. 293 00:15:15,410 --> 00:15:19,090 Na wakati wowote kujenga pointer, na huna kuweka thamani yake immediately- 294 00:15:19,090 --> 00:15:21,060 mfano wa kuweka thamani yake mara moja 295 00:15:21,060 --> 00:15:25,401 Itakuwa slides michache nyuma ambapo nilivyosema pk sawa na & k, 296 00:15:25,401 --> 00:15:28,740 pk anapata k ya mitaani, kama tutaweza kuona nini maana, 297 00:15:28,740 --> 00:15:32,990 tutaweza kuona jinsi ya kanuni kwamba shortly- kama hatuwezi kuweka thamani yake kwa kitu 298 00:15:32,990 --> 00:15:35,380 maana mara moja, unapaswa daima 299 00:15:35,380 --> 00:15:37,480 kuweka pointer yako kwa uhakika kwa null. 300 00:15:37,480 --> 00:15:40,260 Unapaswa kuweka kwa uhakika na kitu chochote. 301 00:15:40,260 --> 00:15:43,614 >> Hiyo ni tofauti sana kuliko tu kuacha thamani kama ilivyo 302 00:15:43,614 --> 00:15:45,530 na kisha kutangaza pointer na kuchukua tu 303 00:15:45,530 --> 00:15:48,042 ni null sababu hiyo ni mara chache kweli. 304 00:15:48,042 --> 00:15:50,000 Hivyo unapaswa daima kuweka thamani ya pointer 305 00:15:50,000 --> 00:15:55,690 kwa null kama huna kuweka thamani yake kwa kitu ya maana mara moja. 306 00:15:55,690 --> 00:15:59,090 Unaweza kuangalia kama thamani pointer ya ni batili kwa kutumia alama usawa 307 00:15:59,090 --> 00:16:05,450 (==), Tu kama wewe kulinganisha integer yoyote maadili au maadili tabia kwa kutumia (==) 308 00:16:05,450 --> 00:16:06,320 vilevile. 309 00:16:06,320 --> 00:16:10,994 Ni aina maalum ya mara kwa mara thamani uweze kutumia mtihani. 310 00:16:10,994 --> 00:16:13,160 Ili kwamba ilikuwa rahisi sana pointer, pointer null. 311 00:16:13,160 --> 00:16:15,320 Njia nyingine ya kujenga pointer ni ya kutafuta 312 00:16:15,320 --> 00:16:18,240 pepe ya kutofautiana umefanya tayari umba, 313 00:16:18,240 --> 00:16:22,330 na wewe kufanya hivyo kwa kutumia & alama anuani ya uchimbaji. 314 00:16:22,330 --> 00:16:26,720 Ambayo tumekuwa tayari kuona awali katika kwanza mchoro mfano mimi ilionyesha. 315 00:16:26,720 --> 00:16:31,450 Hivyo kama x ni kutofautiana kwamba tumekuwa tayari umba ya aina integer, 316 00:16:31,450 --> 00:16:35,110 kisha & x ni pointer integer. 317 00:16:35,110 --> 00:16:39,810 & x ni- kumbuka, & ni kwenda kutafuta pepe ya kitu juu ya haki. 318 00:16:39,810 --> 00:16:45,350 Na kwa kuwa pointer ni ya mitaani, kuliko & x ni pointer integer 319 00:16:45,350 --> 00:16:48,560 thamani ambao ni wapi katika kumbukumbu x maisha. 320 00:16:48,560 --> 00:16:50,460 Ni x ya mahali. 321 00:16:50,460 --> 00:16:53,296 Hivyo & x ni anuani ya x. 322 00:16:53,296 --> 00:16:55,670 Hebu kuchukua hatua hii moja kuungana na kitu zaidi na 323 00:16:55,670 --> 00:16:58,380 Mimi alluded katika video kabla. 324 00:16:58,380 --> 00:17:06,730 Kama arr ni safu ya mara mbili, kisha & arr mraba mabano i ni pointer 325 00:17:06,730 --> 00:17:08,109 maradufu. 326 00:17:08,109 --> 00:17:08,970 SAWA. 327 00:17:08,970 --> 00:17:12,160 ARR mraba mabano i, ikiwa arr ni safu ya mara mbili, 328 00:17:12,160 --> 00:17:19,069 kisha ARR mraba mabano i ni i-th kipengele cha kwamba safu, 329 00:17:19,069 --> 00:17:29,270 na & ARR mraba mabano i ni wapi katika kumbukumbu i-th kipengele cha arr lipo. 330 00:17:29,270 --> 00:17:31,790 >> Hivyo nini maana hapa? 331 00:17:31,790 --> 00:17:34,570 Jina arrays, maana ya jambo hili zima, 332 00:17:34,570 --> 00:17:39,290 ni kwamba jina safu ya ni kweli yenyewe pointer. 333 00:17:39,290 --> 00:17:41,170 Tumekuwa kazi na kuyatumia wote pamoja 334 00:17:41,170 --> 00:17:45,290 kila wakati kwamba umetumia safu. 335 00:17:45,290 --> 00:17:49,090 Kumbuka kutokana na mfano juu ya wigo kutofautiana, 336 00:17:49,090 --> 00:17:53,420 karibu na mwisho wa video Mimi sasa mfano ambapo tuna kazi 337 00:17:53,420 --> 00:17:56,890 aitwaye seti int na a kazi kuitwa seti safu. 338 00:17:56,890 --> 00:18:00,490 Na changamoto yako kuamua iwapo au la, au nini 339 00:18:00,490 --> 00:18:03,220 maadili ambayo sisi kuchapishwa Mwisho wa kazi, 340 00:18:03,220 --> 00:18:05,960 mwishoni mwa mpango kuu. 341 00:18:05,960 --> 00:18:08,740 >> Kama unakumbuka kutokana na mfano kwamba au kama wameweza watched video, 342 00:18:08,740 --> 00:18:13,080 unajua kwamba wakati wewe-wito kwa kuweka int ufanisi hana kitu. 343 00:18:13,080 --> 00:18:16,390 Lakini mwito wa kuweka safu gani. 344 00:18:16,390 --> 00:18:19,280 Na mimi aina ya glossed juu kwa nini hivyo ndivyo ilivyo wakati huo. 345 00:18:19,280 --> 00:18:22,363 I just alisema, vizuri ni safu, ni maalum, unajua, kuna sababu. 346 00:18:22,363 --> 00:18:25,020 Sababu ni kwamba safu ya jina ni kweli tu pointer, 347 00:18:25,020 --> 00:18:28,740 na kuna hii maalum Mabano ya mraba syntax kwamba 348 00:18:28,740 --> 00:18:30,510 kufanya mambo mengi nicer kufanya kazi pamoja. 349 00:18:30,510 --> 00:18:34,410 Na wao kufanya wazo la pointer mengi kidogo vitisho, 350 00:18:34,410 --> 00:18:36,800 na hii ndiyo sababu wao ni aina ya kuwasilishwa katika njia hiyo. 351 00:18:36,800 --> 00:18:38,600 Lakini kwa kweli arrays ni kuyatumia tu. 352 00:18:38,600 --> 00:18:41,580 Na hii ndiyo maana wakati sisi alifanya mabadiliko kwa safu, 353 00:18:41,580 --> 00:18:44,880 wakati sisi kupita safu kama parameter kwa kazi au kama hoja 354 00:18:44,880 --> 00:18:50,110 kwa kazi, yaliyomo ya safu kweli iliyopita katika wawili callee 355 00:18:50,110 --> 00:18:51,160 na katika mpigaji. 356 00:18:51,160 --> 00:18:55,846 Ambayo kwa kila aina nyingine ya kutofautiana tuliona haikuwa hivyo. 357 00:18:55,846 --> 00:18:58,970 Hivyo hiyo ni kitu cha kushika katika akili wakati wewe ni kufanya kazi na kuyatumia, 358 00:18:58,970 --> 00:19:01,610 ni kwamba jina la safu kweli pointer 359 00:19:01,610 --> 00:19:04,750 kwa kipengele kwanza ya safu hiyo. 360 00:19:04,750 --> 00:19:08,930 >> OK hivyo sasa tuna haya yote ukweli, hebu kuendelea, haki. 361 00:19:08,930 --> 00:19:11,370 Kwa nini sisi huduma ya juu ambapo kitu anaishi. 362 00:19:11,370 --> 00:19:14,120 Naam kama nilivyosema, ni pretty muhimu kujua ambapo kitu anaishi 363 00:19:14,120 --> 00:19:17,240 hivyo unaweza kwenda huko na mabadiliko hayo. 364 00:19:17,240 --> 00:19:19,390 Kazi pamoja na kweli na kitu ambacho wewe 365 00:19:19,390 --> 00:19:23,710 wanataka kufanya kwa kuwa kuchukua athari kutofautiana, na si kuchukua athari kwenye baadhi nakala yake. 366 00:19:23,710 --> 00:19:26,150 Hii inaitwa dereferencing. 367 00:19:26,150 --> 00:19:28,690 Sisi kwenda kwa kumbukumbu na sisi mabadiliko ya thamani pale. 368 00:19:28,690 --> 00:19:32,660 Hivyo kama tuna pointer na ni kuitwa pc, na inaelekeza katika tabia, 369 00:19:32,660 --> 00:19:40,610 basi tunaweza kusema * pc na * pc ni jina la kile tutaweza kupata kama tukienda 370 00:19:40,610 --> 00:19:42,910 kwa anwani pc. 371 00:19:42,910 --> 00:19:47,860 Nini tutaweza kupata huko ni tabia na * pc ni jinsi sisi rejea data wakati huo 372 00:19:47,860 --> 00:19:48,880 eneo. 373 00:19:48,880 --> 00:19:54,150 Hivyo tunaweza kusema kitu kama * pc = D au kitu kama hicho, 374 00:19:54,150 --> 00:19:59,280 na hiyo ina maana kwamba kila ilikuwa kumbukumbu anuani pc, 375 00:19:59,280 --> 00:20:07,040 chochote tabia awali alikuwa huko, sasa ni D, kama sisi kusema * pc = D. 376 00:20:07,040 --> 00:20:10,090 >> Hivyo hapa sisi kwenda tena kwa baadhi C mambo weird, haki. 377 00:20:10,090 --> 00:20:14,560 Hivyo tumeona * awali kama kuwa namna fulani ni sehemu ya aina data, 378 00:20:14,560 --> 00:20:17,160 na sasa ni kuwa kutumika katika mazingira tofauti kidogo 379 00:20:17,160 --> 00:20:19,605 kupata data katika eneo. 380 00:20:19,605 --> 00:20:22,480 Najua ni utata kidogo na hiyo ni kweli sehemu ya yote hii 381 00:20:22,480 --> 00:20:25,740 kama, kwa nini kuyatumia na mythology hii inayowazunguka kama kuwa hivyo tata, 382 00:20:25,740 --> 00:20:28,250 ni aina ya tatizo syntax, uaminifu. 383 00:20:28,250 --> 00:20:31,810 Lakini * hutumika katika mazingira yote miwili, wote kama sehemu ya jina aina, 384 00:20:31,810 --> 00:20:34,100 na tutaweza kuona kidogo baadaye kitu kingine, pia. 385 00:20:34,100 --> 00:20:36,490 Na hivi sasa ni dereference operator. 386 00:20:36,490 --> 00:20:38,760 Hivyo huenda kwa kumbukumbu, ni wanapata data 387 00:20:38,760 --> 00:20:43,000 katika eneo la pointer, na utapata kuendesha katika mapenzi. 388 00:20:43,000 --> 00:20:45,900 >> Sasa hii ni sawa na kutembelea jirani yako, haki. 389 00:20:45,900 --> 00:20:48,710 Kama unajua nini yako jirani anaishi, uko 390 00:20:48,710 --> 00:20:50,730 si kunyongwa nje na jirani yako. 391 00:20:50,730 --> 00:20:53,510 Unajua kutokea kwa kujua wapi wanaishi, 392 00:20:53,510 --> 00:20:56,870 lakini hiyo haina maana kwamba kwa mujibu wa kuwa na maarifa kwamba 393 00:20:56,870 --> 00:20:59,170 wewe ni mazungumzo pamoja nao. 394 00:20:59,170 --> 00:21:01,920 Kama unataka kuingiliana nao, una kwenda kwa nyumba zao, 395 00:21:01,920 --> 00:21:03,760 una kwenda kwa wanakoishi. 396 00:21:03,760 --> 00:21:07,440 Na mara moja kufanya hivyo, basi unaweza kuingiliana 397 00:21:07,440 --> 00:21:09,420 nao tu kama wewe d wanataka. 398 00:21:09,420 --> 00:21:12,730 Na vile vile na vigezo, unahitaji kwenda kwa anuani wao 399 00:21:12,730 --> 00:21:15,320 kama unataka kiutendaji yao, huwezi kujua mahali. 400 00:21:15,320 --> 00:21:21,495 Na njia ya kwenda kwa anwani ni kutumia *, dereference operator. 401 00:21:21,495 --> 00:21:23,620 Je, unafikiri hutokea kama sisi kujaribu dereference na 402 00:21:23,620 --> 00:21:25,260 pointer ambao thamani ni batili? 403 00:21:25,260 --> 00:21:28,470 Kumbuka kwamba null pointer anazungumzia kitu. 404 00:21:28,470 --> 00:21:34,110 Hivyo kama wewe kujaribu dereference na kitu au kwenda kwa anwani kitu, 405 00:21:34,110 --> 00:21:36,800 unafikiri nini hufanyika? 406 00:21:36,800 --> 00:21:39,630 Vizuri kama wewe guessed segmentation kosa, wewe d kuwa na haki. 407 00:21:39,630 --> 00:21:41,390 Kama wewe kujaribu na dereference pointer null, 408 00:21:41,390 --> 00:21:43,140 kuteseka segmentation kosa. Lakini kusubiri, 409 00:21:43,140 --> 00:21:45,820 hakuwa nawaambia, kwamba kama wewe si kwenda 410 00:21:45,820 --> 00:21:49,220 kuweka thamani yako ya yako pointer kwa kitu ya maana, 411 00:21:49,220 --> 00:21:51,000 unapaswa kuweka kwa null? 412 00:21:51,000 --> 00:21:55,290 Nilifanya na kwa kweli segmentation kosa ni aina ya tabia nzuri. 413 00:21:55,290 --> 00:21:58,680 >> Umewahi alitangaza kutofautiana na si kupewa thamani yake mara moja? 414 00:21:58,680 --> 00:22:02,680 Hivyo wewe tu kusema int x; huna kweli hawawajui kwa kitu chochote 415 00:22:02,680 --> 00:22:05,340 na kisha baadaye katika kanuni yako, wewe magazeti nje thamani ya x, 416 00:22:05,340 --> 00:22:07,650 kuwa bado si kupewa kwa kitu chochote. 417 00:22:07,650 --> 00:22:10,370 Mara kwa mara utasikia kupata sifuri, lakini wakati mwingine 418 00:22:10,370 --> 00:22:15,000 ili kupata baadhi ya idadi random, na hawana wazo ilikotoka. 419 00:22:15,000 --> 00:22:16,750 Vile vile anaweza mambo kutokea na kuyatumia. 420 00:22:16,750 --> 00:22:20,110 Wakati kutangaza pointer int * pk kwa mfano, 421 00:22:20,110 --> 00:22:23,490 na huna hawawajui kwa thamani, kupata ka nne kwa kumbukumbu. 422 00:22:23,490 --> 00:22:25,950 Chochote ka nne ya kumbukumbu ya mfumo Unaweza 423 00:22:25,950 --> 00:22:28,970 kupata kwamba kuwa na baadhi ya thamani ya maana. 424 00:22:28,970 --> 00:22:31,760 Na kuna uwezekano kuwa kitu tayari pale kwamba 425 00:22:31,760 --> 00:22:34,190 ni hawahitaji tena na mwingine kazi, hivyo wewe tu na 426 00:22:34,190 --> 00:22:35,900 chochote data alikuwa huko. 427 00:22:35,900 --> 00:22:40,570 >> Nini kama wewe alijaribu kufanya dereference baadhi anwani hiyo wewe don't- kulikuwa na 428 00:22:40,570 --> 00:22:43,410 Tayari ka na habari katika kuna, hiyo ni sasa katika pointer yako. 429 00:22:43,410 --> 00:22:47,470 Kama wewe kujaribu na dereference kwamba pointer, unaweza kuwa messing na baadhi ya kumbukumbu 430 00:22:47,470 --> 00:22:49,390 kwamba hakuwa na nia kwa fujo na hayo yote. 431 00:22:49,390 --> 00:22:51,639 Na kwa kweli unaweza kufanya kitu kweli kutisha, 432 00:22:51,639 --> 00:22:54,880 kama kuvunja mpango mwingine, au kuvunja kazi nyingine, 433 00:22:54,880 --> 00:22:58,289 au kufanya kitu malicious kwamba wewe hakuwa na nia ya kufanya wakati wote. 434 00:22:58,289 --> 00:23:00,080 Na hivyo ndiyo sababu ni kweli wazo nzuri 435 00:23:00,080 --> 00:23:04,030 kuweka kuyatumia yako kwa null ikiwa si kuweka yao kwa kitu ya maana. 436 00:23:04,030 --> 00:23:06,760 Ni pengine bora katika Mwisho wa siku kwa mpango wako 437 00:23:06,760 --> 00:23:09,840 ajali kisha kwa ajili yake kufanya kitu ambacho screws up 438 00:23:09,840 --> 00:23:12,400 Mpango mwingine au kazi nyingine. 439 00:23:12,400 --> 00:23:15,207 Tabia ambayo pengine ni hata chini bora kuliko crashing tu. 440 00:23:15,207 --> 00:23:17,040 Na hivyo ndiyo sababu ni kweli tabia nzuri 441 00:23:17,040 --> 00:23:20,920 kupata katika kuweka kuyatumia yako kwa null kama huna kuwaweka 442 00:23:20,920 --> 00:23:24,540 kwa maana thamani mara moja, thamani kwamba unajua 443 00:23:24,540 --> 00:23:27,260 na kwamba unaweza salama dereference. 444 00:23:27,260 --> 00:23:32,240 >> Basi hebu kurudi sasa na tuangalie katika syntax unaonyesha hali halisi. 445 00:23:32,240 --> 00:23:37,400 Kama mimi kusema int * p ;, nini mimi tu kosa gani? 446 00:23:37,400 --> 00:23:38,530 Kile nimepata kufanyika ni hii. 447 00:23:38,530 --> 00:23:43,290 Najua thamani ya p ni anwani kwa sababu kuyatumia yote ni tu 448 00:23:43,290 --> 00:23:44,660 anwani. 449 00:23:44,660 --> 00:23:47,750 Naweza dereference p kutumia * operator. 450 00:23:47,750 --> 00:23:51,250 Katika hali hii hapa, saa sana juu kukumbuka * ni sehemu ya aina. 451 00:23:51,250 --> 00:23:53,510 * Int ni aina data. 452 00:23:53,510 --> 00:23:56,150 Lakini siwezi dereference p kutumia * operator, 453 00:23:56,150 --> 00:24:01,897 na kama mimi kufanya hivyo, kama mimi kwenda kwa anwani hiyo, nini mimi kupata katika anwani hiyo? 454 00:24:01,897 --> 00:24:02,855 Mimi utapata integer. 455 00:24:02,855 --> 00:24:05,910 Hivyo int * p kimsingi ni akisema, s ni mahali. 456 00:24:05,910 --> 00:24:09,500 Naweza dereference p na kama Mimi kufanya, mimi utapata integer 457 00:24:09,500 --> 00:24:11,920 wakati huo kumbukumbu eneo. 458 00:24:11,920 --> 00:24:14,260 >> OK hivyo mimi alisema kulikuwa na mwingine Jambo annoying na nyota 459 00:24:14,260 --> 00:24:17,060 na hapa ndipo kwamba Jambo annoying na nyota ni. 460 00:24:17,060 --> 00:24:21,640 Umewahi walijaribu kutangaza vigezo mbalimbali ya aina moja 461 00:24:21,640 --> 00:24:24,409 juu ya mstari huo wa kanuni? 462 00:24:24,409 --> 00:24:27,700 Hivyo kwa mara ya pili, kujifanya kuwa mstari, kificho mimi kweli kuwa kuna katika kijani 463 00:24:27,700 --> 00:24:29,366 si huko na ni haki anasema int x, y, z ;. 464 00:24:29,366 --> 00:24:31,634 465 00:24:31,634 --> 00:24:34,550 Gani kwamba kufanya ni kweli kujenga tatu integer vigezo kwa ajili yenu, 466 00:24:34,550 --> 00:24:36,930 mtu mmoja aitwaye x, yeye anayeitwa y, na mtu mmoja aitwaye z. 467 00:24:36,930 --> 00:24:41,510 Ni njia ya kufanya hivyo bila kuwa na mgawanyiko kwenye mistari mitatu. 468 00:24:41,510 --> 00:24:43,890 >> Hapa ni wapi nyota kupata annoying tena ingawa, 469 00:24:43,890 --> 00:24:49,200 kwa sababu * ni kweli sehemu wa wote jina aina na sehemu 470 00:24:49,200 --> 00:24:50,320 jina la kutofautiana. 471 00:24:50,320 --> 00:24:56,430 Na hivyo kama mimi kusema int * px, py, PZ, nini mimi kweli kupata ni pointer integer 472 00:24:56,430 --> 00:25:01,650 aitwaye px na integers mbili, py na PZ. 473 00:25:01,650 --> 00:25:04,950 Na kwamba pengine si kile tunataka, hilo si jambo zuri. 474 00:25:04,950 --> 00:25:09,290 >> Hivyo kama nataka kujenga kuyatumia nyingi juu ya mstari huo, wa aina moja, 475 00:25:09,290 --> 00:25:12,140 na nyota, kile kwa kweli wanahitaji kufanya ni kusema int * pa, * AS, * pc. 476 00:25:12,140 --> 00:25:17,330 477 00:25:17,330 --> 00:25:20,300 Sasa baada tu alisema kuwa na sasa nawaambia hii, 478 00:25:20,300 --> 00:25:22,170 pengine kamwe kufanya hivyo. 479 00:25:22,170 --> 00:25:25,170 Na pengine ni jambo jema kwa uaminifu, kwa sababu waweza inadvertently 480 00:25:25,170 --> 00:25:26,544 saza nyota, kitu kama hicho. 481 00:25:26,544 --> 00:25:29,290 Pengine ni bora kwa labda kutangaza kuyatumia juu ya mistari ya mtu binafsi, 482 00:25:29,290 --> 00:25:31,373 lakini ni mwingine tu moja wale syntax annoying 483 00:25:31,373 --> 00:25:35,310 mambo na nyota kwamba kufanya kuyatumia vigumu kufanya kazi pamoja. 484 00:25:35,310 --> 00:25:39,480 Kwa sababu ni tu kisintaksia hii fujo una kazi kupitia. 485 00:25:39,480 --> 00:25:41,600 Pamoja na mazoezi ni gani kweli kuwa asili ya pili. 486 00:25:41,600 --> 00:25:45,410 Mimi bado kufanya makosa na bado baada programu kwa miaka 10, 487 00:25:45,410 --> 00:25:49,630 hivyo si kuwa upset kama kitu kinachotokea na wewe, ni pretty kawaida kwa uaminifu. 488 00:25:49,630 --> 00:25:52,850 Ni kweli aina ya flaw ya syntax. 489 00:25:52,850 --> 00:25:54,900 >> OK hivyo mimi aina ya ahadi kwamba tunataka upya 490 00:25:54,900 --> 00:25:59,370 Dhana ya jinsi kubwa ni kamba. 491 00:25:59,370 --> 00:26:02,750 Vizuri kama niliwaambieni kwamba kamba, tumekuwa kweli aina ya 492 00:26:02,750 --> 00:26:04,140 wamekuwa uongo na wewe wakati wote. 493 00:26:04,140 --> 00:26:06,181 Hakuna aina data inayoitwa kamba, na kwa kweli mimi 494 00:26:06,181 --> 00:26:09,730 zilizotajwa hii katika moja ya yetu video mwanzo juu ya aina ya data, 495 00:26:09,730 --> 00:26:13,820 kamba iliyokuwa aina data kwamba iliundwa kwa ajili yenu katika CS50.h. 496 00:26:13,820 --> 00:26:17,050 Una # ni pamoja na CS50.h ili kuitumia. 497 00:26:17,050 --> 00:26:19,250 >> Naam kamba ni kweli tu vinginevyo kwa kitu 498 00:26:19,250 --> 00:26:23,600 aitwaye * Char, pointer kwa tabia. 499 00:26:23,600 --> 00:26:26,010 Vizuri kuyatumia, kukumbuka, ni anazungumzia tu. 500 00:26:26,010 --> 00:26:28,780 Kwa hiyo kile ni ukubwa katika ka wa kamba? 501 00:26:28,780 --> 00:26:29,796 Naam ni nne au nane. 502 00:26:29,796 --> 00:26:32,170 Na sababu nasema nne au nane ni kwa sababu ni kweli 503 00:26:32,170 --> 00:26:36,730 inategemea mfumo, Kama unatumia CS50 ide, * Char ni ukubwa wa Char 504 00:26:36,730 --> 00:26:39,340 * Ni nane, ni mfumo 64-bit. 505 00:26:39,340 --> 00:26:43,850 Kila address katika kumbukumbu ni 64 bits kwa muda mrefu. 506 00:26:43,850 --> 00:26:48,270 Kama unatumia appliance CS50 au kutumia yoyote mashine 32-bit, 507 00:26:48,270 --> 00:26:51,640 na wewe Nimesikia kwamba muda 32-bit mashine, ni nini 32-bit mashine? 508 00:26:51,640 --> 00:26:56,090 Vizuri tu ina maana kwamba kila anwani katika kumbukumbu ni 32 bits kwa muda mrefu. 509 00:26:56,090 --> 00:26:59,140 Na hivyo bits 32 ni ka nne. 510 00:26:59,140 --> 00:27:02,710 Hivyo * Char ni nne au nane ka kutegemea mfumo wako. 511 00:27:02,710 --> 00:27:06,100 Na hakika aina yoyote data, na pointer data yoyote 512 00:27:06,100 --> 00:27:12,030 aina, tangu kuyatumia yote ni tu anwani, ni ka nne au nane. 513 00:27:12,030 --> 00:27:14,030 Basi hebu kupitia upya hii mchoro na hebu kuhitimisha 514 00:27:14,030 --> 00:27:18,130 video hii na zoezi kidogo hapa. 515 00:27:18,130 --> 00:27:21,600 Hivyo hapa ni mchoro sisi kushoto mbali na mwanzoni mwa video. 516 00:27:21,600 --> 00:27:23,110 Hivyo kile kinachotokea sasa kama mimi kusema * pk = 35? 517 00:27:23,110 --> 00:27:26,370 518 00:27:26,370 --> 00:27:30,530 Hivyo ni nini maana wakati mimi kusema, * pk = 35? 519 00:27:30,530 --> 00:27:32,420 Kuchukua pili. 520 00:27:32,420 --> 00:27:34,990 * pk. 521 00:27:34,990 --> 00:27:39,890 Katika mazingira hapa, * ni dereference operator. 522 00:27:39,890 --> 00:27:42,110 Hivyo wakati dereference alama ni kutumika, 523 00:27:42,110 --> 00:27:48,520 twende kwa anwani alisema kwa na pk, na sisi kubadili kile tunaona. 524 00:27:48,520 --> 00:27:55,270 Hivyo * pk = 35 kwa ufanisi gani hii kwa picha. 525 00:27:55,270 --> 00:27:58,110 Hivyo ni kimsingi syntactically kufanana na ya Baada ya kusema k = 35. 526 00:27:58,110 --> 00:28:00,740 527 00:28:00,740 --> 00:28:01,930 >> Moja zaidi. 528 00:28:01,930 --> 00:28:05,510 Kama mimi kusema int m, mimi kujenga kutofautiana mpya iitwayo m. 529 00:28:05,510 --> 00:28:08,260 Sanduku mpya, ni sanduku ya kijani kwa sababu itakuja kushikilia integer, 530 00:28:08,260 --> 00:28:09,840 na ni kinachoitwa m. 531 00:28:09,840 --> 00:28:14,960 Kama mimi kusema m = 4, mimi kuweka integer ndani ya boksi hilo. 532 00:28:14,960 --> 00:28:20,290 Kama kusema pk = & m, jinsi gani mabadiliko haya mchoro? 533 00:28:20,290 --> 00:28:28,760 Pk = & m, je unakumbuka kile & Operator gani au ni wito? 534 00:28:28,760 --> 00:28:34,430 Kumbuka kwamba baadhi & jina kutofautiana ni pepe ya jina kutofautiana. 535 00:28:34,430 --> 00:28:38,740 Kwa hiyo kile sisi ni kusema ni pk anapata pepe ya m. 536 00:28:38,740 --> 00:28:42,010 Na hivyo kwa ufanisi kile kinachotokea mchoro ni kwamba PK pointi tena 537 00:28:42,010 --> 00:28:46,420 kwa k, lakini pointi kwa m. 538 00:28:46,420 --> 00:28:48,470 >> Tena kuyatumia ni sana gumu kufanya kazi na 539 00:28:48,470 --> 00:28:50,620 na wao kuchukua mengi ya mazoezi, lakini kwa sababu 540 00:28:50,620 --> 00:28:54,150 ya uwezo wao wa kuruhusu kupita data kati ya kazi 541 00:28:54,150 --> 00:28:56,945 na kwa kweli kuwa wale mabadiliko kuchukua athari, 542 00:28:56,945 --> 00:28:58,820 kupata kichwa yako karibu ni kweli ni muhimu. 543 00:28:58,820 --> 00:29:02,590 Pengine ni ngumu zaidi mada sisi kujadili katika CS50, 544 00:29:02,590 --> 00:29:05,910 lakini thamani kwamba kupata kutoka kwa kutumia kuyatumia 545 00:29:05,910 --> 00:29:09,200 mbali outweighs matatizo kwamba kuja kutoka kujifunza kwao. 546 00:29:09,200 --> 00:29:12,690 Hivyo Napenda bora wa Bahati kujifunza kuhusu kuyatumia. 547 00:29:12,690 --> 00:29:15,760 Mimi nina Doug Lloyd, hii ni CS50. 548 00:29:15,760 --> 00:29:17,447