1 00:00:00,000 --> 00:00:06,030 >> [TÓNLIST spila] 2 00:00:06,030 --> 00:00:08,390 >> DOUG LLOYD: Ábendingum, hér erum við. 3 00:00:08,390 --> 00:00:11,080 Þetta er líklega að fara að vera sem mest erfitt efni 4 00:00:11,080 --> 00:00:12,840 sem við tölum um í CS50. 5 00:00:12,840 --> 00:00:15,060 Og ef þú hefur lesið eitthvað um ábendingum 6 00:00:15,060 --> 00:00:19,080 áður en þú might vera a lítill hluti erfið að fara inn í þetta myndband. 7 00:00:19,080 --> 00:00:21,260 Það er satt að ábendingum leyfum þér möguleika á 8 00:00:21,260 --> 00:00:23,740 að kannski skrúfa upp frekar illa þegar þú ert 9 00:00:23,740 --> 00:00:27,450 vinna með breytur og gögn, og veldur program til hrun. 10 00:00:27,450 --> 00:00:30,490 En þeir eru í raun mjög gagnlegt og þeir leyfa okkur mjög góð leið 11 00:00:30,490 --> 00:00:33,340 að fara gögn aftur og fram á milli aðgerða, 12 00:00:33,340 --> 00:00:35,490 að við erum annars ekki að gera. 13 00:00:35,490 --> 00:00:37,750 >> Og svo það sem við raunverulega vil gera hér er lest 14 00:00:37,750 --> 00:00:41,060 þú þarft að hafa góða bendi aga, svo að þú getur notað ábendingum raun 15 00:00:41,060 --> 00:00:43,850 að gera áætlanir þínar það mikið betra. 16 00:00:43,850 --> 00:00:48,220 Eins og ég sagði ábendingum gefa okkur annað leið til að fara framhjá gögn á milli aðgerða. 17 00:00:48,220 --> 00:00:50,270 Nú ef þú manst frá fyrr video, þegar 18 00:00:50,270 --> 00:00:53,720 við vorum að tala um Variable Gildissvið, ég nefndi 19 00:00:53,720 --> 00:01:00,610 að öll gögn sem við framhjá milli aðgerðir í C ​​Samþykki gildi. 20 00:01:00,610 --> 00:01:03,070 Og ég má ekki hafa notað það tíma, sem ég þýddi það 21 00:01:03,070 --> 00:01:07,170 var að við erum liggur afrit af gögnum. 22 00:01:07,170 --> 00:01:12,252 Þegar við förum til breytu að aðgerð við erum í raun ekki farið á breytu 23 00:01:12,252 --> 00:01:13,210 að aðgerðinni, ekki satt? 24 00:01:13,210 --> 00:01:17,670 Við erum liggur afrit af þessi gögn til að virka. 25 00:01:17,670 --> 00:01:20,760 Fallið er það sem það mun og það reiknar nokkur gildi, 26 00:01:20,760 --> 00:01:23,180 og kannski við nota þessi gildi þegar það gefur það aftur. 27 00:01:23,180 --> 00:01:26,700 >> Það var ein undantekning að þessi regla um brottför af verðmæti, 28 00:01:26,700 --> 00:01:31,210 og við munum koma aftur til það sem er svolítið seinna í þessu myndbandi. 29 00:01:31,210 --> 00:01:34,880 Ef við notum ábendingum staðinn að nota breytur, 30 00:01:34,880 --> 00:01:38,180 eða í stað þess að nota breytur sjálfir eða afrit af breytum, 31 00:01:38,180 --> 00:01:43,790 við getum nú standast breytur kring milli aðgerða á annan hátt. 32 00:01:43,790 --> 00:01:46,550 Þetta þýðir að ef við tökum breytingu á eina virka, 33 00:01:46,550 --> 00:01:49,827 þessi breyting mun í raun taka áhrif á mismunandi föllum. 34 00:01:49,827 --> 00:01:52,160 Aftur, þetta er eitthvað sem við gátum ekki gert áður, 35 00:01:52,160 --> 00:01:56,979 og ef þú hefur einhvern tíma reynt að skipta á gildi tveim breytum í aðgerð, 36 00:01:56,979 --> 00:01:59,270 þú hefur tekið eftir þessu vandamáli konar creeping upp, ekki satt? 37 00:01:59,270 --> 00:02:04,340 >> Ef við viljum að skipta X og Y, og vér fara þá að fall sem heitir skipti, 38 00:02:04,340 --> 00:02:08,680 inni á virka skipta á breytur gera skipti gildi. 39 00:02:08,680 --> 00:02:12,600 Einn verður tveir, tveir verður einn, en við gerum ekki raunverulega 40 00:02:12,600 --> 00:02:16,890 breyta neinu í upprunalegu virka, í þeim sem hringir. 41 00:02:16,890 --> 00:02:19,550 Þar sem við getum ekki, við erum bara vinna með afrit af þeim. 42 00:02:19,550 --> 00:02:24,760 Með ábendingum þó, við getum reyndar fara X og Y að aðgerðinni. 43 00:02:24,760 --> 00:02:26,960 Sem virka getur gert eitthvað með þeim. 44 00:02:26,960 --> 00:02:29,250 Og þeim breytum gildi geta í raun breyst. 45 00:02:29,250 --> 00:02:33,710 Svo er það alveg breyting á getu okkar til að vinna með gögn. 46 00:02:33,710 --> 00:02:36,100 >> Áður en við kafa inn ábendingum, held ég að það er þess virði 47 00:02:36,100 --> 00:02:38,580 taka nokkrar mínútur til að fara aftur til grunnatriði hér. 48 00:02:38,580 --> 00:02:41,000 Og hafa a líta á hvernig tölva minni verk 49 00:02:41,000 --> 00:02:45,340 því að þessir tveir einstaklingar eru að fara að raunverulega vera nokkuð innbyrðis. 50 00:02:45,340 --> 00:02:48,480 Eins og þú veist líklega, á þinn tölva kerfi 51 00:02:48,480 --> 00:02:51,310 þú hafa a harður ökuferð eða kannski solid ástand ökuferð, 52 00:02:51,310 --> 00:02:54,430 einhvers konar skrá geymsla staðsetning. 53 00:02:54,430 --> 00:02:57,950 Það er yfirleitt einhvers staðar í hverfinu í 250 gígabæta 54 00:02:57,950 --> 00:02:59,810 að kannski nokkra terabytes núna. 55 00:02:59,810 --> 00:03:02,270 Og það er þar sem öll þinn skrár lokum lifa, 56 00:03:02,270 --> 00:03:04,870 jafnvel þó að tölvan þín sé lokað burt, getur þú snúa það aftur á 57 00:03:04,870 --> 00:03:09,190 og þú munt finna skrár eru þar aftur þegar þú endurræsir vélina þína. 58 00:03:09,190 --> 00:03:14,820 En diskur ökuferð, eins og harður diskur ökuferð, An HDD eða solid ástand ökuferð, SSD, 59 00:03:14,820 --> 00:03:16,050 eru bara geymslurými. 60 00:03:16,050 --> 00:03:20,400 >> Við getum í raun ekki gert neitt með gögn sem er í harða diskinn, 61 00:03:20,400 --> 00:03:22,080 eða í A Solid State Drive. 62 00:03:22,080 --> 00:03:24,950 Til að raunverulega breyta gögn eða færa það í kring, 63 00:03:24,950 --> 00:03:28,800 við verðum að færa það til RAM, handahófi aðgang minni. 64 00:03:28,800 --> 00:03:31,170 Nú RAM, þú hafa a einhver fjöldi minna af í tölvunni þinni. 65 00:03:31,170 --> 00:03:34,185 Þú gætir þurft einhvers staðar í hverfinu í 512 megabæti 66 00:03:34,185 --> 00:03:38,850 ef þú ert með eldri tölvu, að kannski tveir, fjórir, átta, 16, 67 00:03:38,850 --> 00:03:41,820 jafnvel smá meira, gígabæta vinnsluminni. 68 00:03:41,820 --> 00:03:46,390 Svo er það miklu minni, en það er þar sem allar rokgjörnum af gögnum. 69 00:03:46,390 --> 00:03:48,270 Það er þar sem við getum breytt hlutum. 70 00:03:48,270 --> 00:03:53,350 En þegar við snúa tölvunni okkar burt, öll gögn í vinnsluminni er eytt. 71 00:03:53,350 --> 00:03:57,150 >> Svo er það hvers vegna við þurfum að hafa harða diskinn fyrir varanlegri staðsetningu henni, 72 00:03:57,150 --> 00:03:59,720 þannig að það exists- það myndi vera mjög slæmt ef í hvert skipti sem við 73 00:03:59,720 --> 00:04:03,310 sneri tölvunni okkar burt, hver skrá í kerfi okkar var eyðilögð. 74 00:04:03,310 --> 00:04:05,600 Þannig að við vinnum inni af vinnsluminni. 75 00:04:05,600 --> 00:04:09,210 Og í hvert skipti sem við erum að tala um minni, ansi mikið, í CS50, 76 00:04:09,210 --> 00:04:15,080 við erum að tala um vinnsluminni, harður diskur. 77 00:04:15,080 --> 00:04:18,657 >> Svo þegar við færa hlutina í minni, það tekur upp ákveðið magn af plássi. 78 00:04:18,657 --> 00:04:20,740 Allar tegundir gagna sem við höfum verið að vinna með 79 00:04:20,740 --> 00:04:23,480 taka upp öðruvísi magn af plássi í vinnsluminni. 80 00:04:23,480 --> 00:04:27,600 Svo í hvert skipti sem þú býrð til er heiltala breyta, fjögur bæti af minni 81 00:04:27,600 --> 00:04:30,750 eru sett til hliðar í vinnsluminni svo þér getur unnið með þeim heiltölu. 82 00:04:30,750 --> 00:04:34,260 Þú getur lýsa heiltölu, breyta því, tengja það 83 00:04:34,260 --> 00:04:36,700 að verðmæti 10 incremented af öðru, svo framvegis og svo framvegis. 84 00:04:36,700 --> 00:04:39,440 Allt sem þarf að gerast í RAM, og þú færð fjögur bæti 85 00:04:39,440 --> 00:04:42,550 að vinna með fyrir hvert heiltala sem þú býrð. 86 00:04:42,550 --> 00:04:45,410 >> Sérhver persóna þér búa fær eitt bæti. 87 00:04:45,410 --> 00:04:48,160 Það er bara hversu mikið pláss er þarf til að geyma persónu. 88 00:04:48,160 --> 00:04:51,310 Sérhver fljóta, alvöru númer fær fjóra bæti 89 00:04:51,310 --> 00:04:53,390 nema það er tvöfaldur nákvæmni fleytitölu 90 00:04:53,390 --> 00:04:56,510 númer sem gerir þér kleift að hafa nákvæmari og tölustafi 91 00:04:56,510 --> 00:04:59,300 eftir kommu án þess að tapa nákvæmni, 92 00:04:59,300 --> 00:05:01,820 sem taka upp átta bæti af minni. 93 00:05:01,820 --> 00:05:06,730 Long þráir, mjög stór heiltölur, einnig taka upp átta bæti af minni. 94 00:05:06,730 --> 00:05:09,000 Hversu margir bæti af minni ekki strengir taka upp? 95 00:05:09,000 --> 00:05:12,990 Jæja við skulum setja pinna í þeirri spurningu nú, en við munum koma aftur til það. 96 00:05:12,990 --> 00:05:17,350 >> Svo aftur á þessa hugmynd af minni sem stór fylking af bæti stærð frumna. 97 00:05:17,350 --> 00:05:20,871 Það er í raun allt það er, það er bara mikið array af frumum, 98 00:05:20,871 --> 00:05:23,370 bara eins og allir aðrir array sem þú ert kunnuglegur með og sjá, 99 00:05:23,370 --> 00:05:26,430 nema hvert frumefni er eitt bæti breiður. 100 00:05:26,430 --> 00:05:30,030 Og rétt eins og fylki, hver þáttur hefur heimilisfang. 101 00:05:30,030 --> 00:05:32,120 Sérhver þáttur af fjölda hefur vísitölu, þá viljum vér 102 00:05:32,120 --> 00:05:36,302 Hægt er að nota þá vísitölu til að gera svokallaða handahófi aðgangur á fjölbreytta. 103 00:05:36,302 --> 00:05:38,510 Við þurfum ekki að byrja á upphaf fylkisins, 104 00:05:38,510 --> 00:05:40,569 iterate gegnum hvert einn þáttur þeirra, 105 00:05:40,569 --> 00:05:41,860 að finna það sem við erum að leita að. 106 00:05:41,860 --> 00:05:45,790 Við getum bara sagt, ég vil fá að 15. þáttur eða 100 frumefni. 107 00:05:45,790 --> 00:05:49,930 Og þú getur bara fara í það númer og fá gildið sem þú ert að leita að. 108 00:05:49,930 --> 00:05:54,460 >> Á sama hátt á hverjum staðsetningu í minni hefur heimilisfang. 109 00:05:54,460 --> 00:05:57,320 Svo gæti minni þitt líta eitthvað eins og this. 110 00:05:57,320 --> 00:06:01,420 Hér er mjög lítill klumpur af minni, þetta er 20 bæti af minni. 111 00:06:01,420 --> 00:06:04,060 Fyrstu 20 bytes því minn fjallar það neðst 112 00:06:04,060 --> 00:06:08,890 eru 0, 1, 2, 3, og svo alla leið upp til 19. 113 00:06:08,890 --> 00:06:13,190 Og þegar ég lýsa breytum og þegar ég byrja að vinna með þeim, 114 00:06:13,190 --> 00:06:15,470 kerfið er að fara að setja hliðar sumir pláss fyrir mig 115 00:06:15,470 --> 00:06:17,595 í þessum minni til að vinna með breytum mínum. 116 00:06:17,595 --> 00:06:21,610 Svo ég gæti sagt, bleikju c jafngildir fjármagn H. Og hvað er að fara að gerast? 117 00:06:21,610 --> 00:06:23,880 Jæja kerfið er að fara að sett til hliðar fyrir mig einn bæti. 118 00:06:23,880 --> 00:06:27,870 Í þessu tilfelli valdi bæti númer fjórir, bæti á netfangið fjórum, 119 00:06:27,870 --> 00:06:31,310 og það er að fara til að geyma bréf höfuðborg H þarna fyrir mig. 120 00:06:31,310 --> 00:06:34,350 Ef ég segi þá int hraða takmörk jafngildir 65, það er 121 00:06:34,350 --> 00:06:36,806 fara að setja til hliðar fjögur bytes af minni fyrir mig. 122 00:06:36,806 --> 00:06:39,180 Og það er að fara til að meðhöndla þá fjögur bæti sem ein heild 123 00:06:39,180 --> 00:06:41,305 vegna þess hvað við erum að vinna með er heiltala hér. 124 00:06:41,305 --> 00:06:44,350 Og það er að fara að geyma 65 þar. 125 00:06:44,350 --> 00:06:47,000 >> Nú þegar ég er svona segja þér smá lygi, 126 00:06:47,000 --> 00:06:50,150 rétt, vegna þess að við vitum að tölvur vinna í tvöfaldur. 127 00:06:50,150 --> 00:06:53,100 Þeir skilja ekki endilega það fjármagn H er 128 00:06:53,100 --> 00:06:57,110 eða hvað 65 er, þeir aðeins skilja tvöfaldur, núll og sjálfur. 129 00:06:57,110 --> 00:06:59,000 Og svo í raun það við erum að geyma í það 130 00:06:59,000 --> 00:07:03,450 er ekki bókstafurinn H og fjölda 65, heldur tvöfaldur framsetning 131 00:07:03,450 --> 00:07:06,980 þar af, þar sem litið lítill eitthvað eins og þetta. 132 00:07:06,980 --> 00:07:10,360 Einkum í Samhengi heiltölu breytu, 133 00:07:10,360 --> 00:07:13,559 það er ekki að fara að bara að spýta hann í, það er ekki að fara að meðhöndla það eins og einn fjögurra 134 00:07:13,559 --> 00:07:15,350 bæti klumpur endilega, það er í raun að fara 135 00:07:15,350 --> 00:07:19,570 að meðhöndla það eins og fjórum eitt bæti bitum, sem gæti litið eitthvað svona. 136 00:07:19,570 --> 00:07:22,424 Og jafnvel er þetta ekki alveg satt heldur, 137 00:07:22,424 --> 00:07:24,840 vegna þess að eitthvað sem heitir An endianness, sem við erum ekki 138 00:07:24,840 --> 00:07:26,965 fara að fá inn núna, en ef þú ert forvitinn um, 139 00:07:26,965 --> 00:07:29,030 þú getur lesið upp á lítið og stór endianness. 140 00:07:29,030 --> 00:07:31,640 En fyrir sakir þessa röksemdafærslu, fyrir sakir þetta myndband, 141 00:07:31,640 --> 00:07:34,860 við skulum gera ráð bara sem er, í staðreynd, hvernig fjöldi 65 myndi 142 00:07:34,860 --> 00:07:36,970 eiga fulltrúa í minni á hverju kerfi, 143 00:07:36,970 --> 00:07:38,850 þó það sé ekki alveg rétt. 144 00:07:38,850 --> 00:07:41,700 >> En við skulum í raun bara fá losa af öllum tvöfaldur alveg, 145 00:07:41,700 --> 00:07:44,460 og hugsa bara um eins H og 65, það er mun auðveldara 146 00:07:44,460 --> 00:07:47,900 að hugsa um það eins og að sem manneskju. 147 00:07:47,900 --> 00:07:51,420 Allt í lagi, svo það virðist einnig kannski lítið handahófi sem I've- kerfið mitt 148 00:07:51,420 --> 00:07:55,130 ekki gefa mér bytes 5, 6, 7, og 8 til að geyma heiltölu. 149 00:07:55,130 --> 00:07:58,580 Það er ástæða fyrir því líka, sem við munum ekki fá inn núna, en nægja 150 00:07:58,580 --> 00:08:00,496 það að segja að það sem tölvan er að gera hér 151 00:08:00,496 --> 00:08:02,810 er líklega gott að færa á sitt leyti. 152 00:08:02,810 --> 00:08:06,020 Að ekki gefa mér minni sem er endilega aftur til baka. 153 00:08:06,020 --> 00:08:10,490 Þó að það er að fara að gera það núna ef ég vil fá annað band, 154 00:08:10,490 --> 00:08:13,080 kallað kenninafn, og ég vil að setja Lloyd þar. 155 00:08:13,080 --> 00:08:18,360 Ég ætla að þurfa að passa einn eðli, hvert bréf um það er 156 00:08:18,360 --> 00:08:21,330 að fara að þurfa einn eðli, eitt bæti af minni. 157 00:08:21,330 --> 00:08:26,230 Þannig að ef ég gæti sett Lloyd í array minn svona ég er nokkuð góð til að fara, ekki satt? 158 00:08:26,230 --> 00:08:28,870 Hvað vantar? 159 00:08:28,870 --> 00:08:31,840 >> Mundu að sérhver strengur við vinnum með í C endar með sviga núll, 160 00:08:31,840 --> 00:08:33,339 og við getum ekki sleppt að hér heldur. 161 00:08:33,339 --> 00:08:36,090 Við þurfum að leggja til hliðar eitt bæti af minni til að halda að svo við 162 00:08:36,090 --> 00:08:39,130 vita þegar strengur okkar er lokið. 163 00:08:39,130 --> 00:08:41,049 Svo aftur að þetta fyrirkomulag af hvernig hlutirnir 164 00:08:41,049 --> 00:08:42,799 birtast í mætti ​​minni vera svolítið af handahófi, 165 00:08:42,799 --> 00:08:44,870 en það er í raun hvernig Flest kerfi eru hönnuð. 166 00:08:44,870 --> 00:08:48,330 Að stilla þeim upp á margfeldi af fjórum, af ástæðum aftur 167 00:08:48,330 --> 00:08:50,080 að við þurfum ekki að fá inn núna. 168 00:08:50,080 --> 00:08:53,060 En þetta, svo nægja að segja að eftir þessar þrjár línur af kóða, 169 00:08:53,060 --> 00:08:54,810 þetta er það sem minni gæti litið út. 170 00:08:54,810 --> 00:08:58,930 Ef ég þarf minni stöðum 4, 8 og 12 til að halda gögnum mínum, 171 00:08:58,930 --> 00:09:01,100 þetta er það sem minni mitt gæti litið út. 172 00:09:01,100 --> 00:09:04,062 >> Og bara vera sérstaklega smámunasamur hér, þegar 173 00:09:04,062 --> 00:09:06,020 við erum að tala um minni viðtakandi Við venjulega 174 00:09:06,020 --> 00:09:08,390 gera það með því að nota sextánskur rithætti. 175 00:09:08,390 --> 00:09:12,030 Svo hvers vegna eigum við ekki að breyta öllum þessum frá aukastaf til sextánskur tákn 176 00:09:12,030 --> 00:09:15,010 bara vegna þess að það er yfirleitt hvernig við tölum um minni. 177 00:09:15,010 --> 00:09:17,880 Svo í stað þess að vera 0 í 19, það sem við höfum er núll 178 00:09:17,880 --> 00:09:20,340 x núll gegnum núll x1 þrjú. 179 00:09:20,340 --> 00:09:23,790 Þeir eru 20 bytes minni að við hafa eða við erum að horfa á í þessari mynd 180 00:09:23,790 --> 00:09:25,540 hérna. 181 00:09:25,540 --> 00:09:29,310 >> Svo öll þessi tilvera, við skulum stíga í burtu frá minni í annað 182 00:09:29,310 --> 00:09:30,490 og aftur ábendingum. 183 00:09:30,490 --> 00:09:32,420 Hér er mikilvægasta hlutur til muna 184 00:09:32,420 --> 00:09:34,070 Eins og við byrjum að vinna með ábendingum. 185 00:09:34,070 --> 00:09:36,314 A bendillinn er ekkert meira en heimilisfang. 186 00:09:36,314 --> 00:09:38,230 Ég segi það aftur vegna þess að það er það mikilvægt, 187 00:09:38,230 --> 00:09:42,730 bendi ekkert meira en heimilisfang. 188 00:09:42,730 --> 00:09:47,760 Ábendingum heimilisföng til staðsetningar í minni þar sem breytur búa. 189 00:09:47,760 --> 00:09:52,590 Vitandi að það verður vonandi svolítið auðveldara að vinna með þeim. 190 00:09:52,590 --> 00:09:54,550 Annar hlutur ÉG eins og að gera er að hafa svona 191 00:09:54,550 --> 00:09:58,510 á skýringarmyndum sjónrænt fulltrúi hvað er gerast með ýmsum línum af kóða. 192 00:09:58,510 --> 00:10:00,660 Og við munum gera þetta nokkrum sinnum í ábendingum, 193 00:10:00,660 --> 00:10:03,354 og þegar við tölum um dynamic minni úthlutun eins vel. 194 00:10:03,354 --> 00:10:06,020 Vegna þess að ég held að þessi skýringarmyndir getur verið sérstaklega gagnlegt. 195 00:10:06,020 --> 00:10:09,540 >> Þannig að ef ég segi til dæmis, int k í númerið mitt, hvað er að gerast? 196 00:10:09,540 --> 00:10:12,524 Jæja hvað er í rauninni að gerast er Ég fæ minni til hliðar fyrir mig, 197 00:10:12,524 --> 00:10:14,690 en ég er ekki einu sinni eins og að hugsa um það svona, ég 198 00:10:14,690 --> 00:10:16,300 eins og til hugsa um það eins og kassi. 199 00:10:16,300 --> 00:10:20,090 Ég er með kassa og það er lituð græn því ég 200 00:10:20,090 --> 00:10:21,750 getur sett heiltölur í grænum kassa. 201 00:10:21,750 --> 00:10:23,666 Ef það var eðli I gæti hafa bláa kassann. 202 00:10:23,666 --> 00:10:27,290 En ég segi alltaf, ef ég er að stofna kassi sem getur haldið heiltölur 203 00:10:27,290 --> 00:10:28,950 sem kassi er lituð græn. 204 00:10:28,950 --> 00:10:33,020 Og ég tek fast merki og ég skrifa k á hlið hennar. 205 00:10:33,020 --> 00:10:37,590 Þannig að ég hef kassa sem heitir K, inn sem ég get sett heiltölur. 206 00:10:37,590 --> 00:10:41,070 Svo þegar ég segi int k, það er hvað gerist í höfðinu á mér. 207 00:10:41,070 --> 00:10:43,140 Ef ég segi K jafngildir fimm, hvað er ég að gera? 208 00:10:43,140 --> 00:10:45,110 Jæja, ég er að setja fimm í reitinn, ekki satt. 209 00:10:45,110 --> 00:10:48,670 Þetta er mjög einfalt, ef Ég segi int k, búa til kassa sem heitir k. 210 00:10:48,670 --> 00:10:52,040 Ef ég segi K er 5, Setti hann fimm inn í reitinn. 211 00:10:52,040 --> 00:10:53,865 Vonandi er það ekki of mikið af stökk. 212 00:10:53,865 --> 00:10:55,990 Hér er þar sem hlutirnir fara a lítið áhugavert þó. 213 00:10:55,990 --> 00:11:02,590 Ef ég segi int * Pk, og jafnvel ef ég er ekki veit hvað þetta endilega þýðir, 214 00:11:02,590 --> 00:11:06,150 það er greinilega með eitthvað að gera við heila tölu. 215 00:11:06,150 --> 00:11:08,211 Þannig að ég ætla að lita þessi kassi græn-ish, 216 00:11:08,211 --> 00:11:10,210 Ég veit að það er með eitthvað að gera með heiltala, 217 00:11:10,210 --> 00:11:13,400 en það er ekki heil tala sjálft, vegna þess að það er int stjarna. 218 00:11:13,400 --> 00:11:15,390 Það er eitthvað örlítið öðruvísi um það. 219 00:11:15,390 --> 00:11:17,620 Svo þátt heiltala er, en annars er það 220 00:11:17,620 --> 00:11:19,830 ekki of frábrugðin hvað við vorum að tala um. 221 00:11:19,830 --> 00:11:24,240 Það er kassi, þess fékk merki, það er þreytandi flokk Pk, 222 00:11:24,240 --> 00:11:27,280 og það er fær um að halda int stjörnur, hvað þá eru. 223 00:11:27,280 --> 00:11:29,894 Þeir hafa eitthvað að gera með heiltölur, greinilega. 224 00:11:29,894 --> 00:11:31,060 Hér er síðasta lína þó. 225 00:11:31,060 --> 00:11:37,650 Ef ég segi PK = & K, hó, það bara gerðist, ekki satt? 226 00:11:37,650 --> 00:11:41,820 Þannig að þetta slembitölu, að því er virðist af handahófi númer fær kastað inn í reitinn þar. 227 00:11:41,820 --> 00:11:44,930 Allt sem er, er PK fær veffang k. 228 00:11:44,930 --> 00:11:52,867 Þannig að ég er stafur þar sem k býr í minni, póstfang, veffang bæti sínum. 229 00:11:52,867 --> 00:11:55,200 Það eina sem ég er að gera er að ég er að segja að gildi er það sem ég ætla 230 00:11:55,200 --> 00:11:59,430 að setja inni kassann minn heitir pk. 231 00:11:59,430 --> 00:12:02,080 Og vegna þess að þetta eru ábendingum, og vegna þess að leita 232 00:12:02,080 --> 00:12:04,955 á band eins núll x átta núll c sjö fjögurra átta 233 00:12:04,955 --> 00:12:07,790 tveir núll er líklega ekki mjög þroskandi. 234 00:12:07,790 --> 00:12:12,390 Þegar við sjón almennt ábendingum, við gerum í raun það sem ábendingum. 235 00:12:12,390 --> 00:12:17,000 Pk gefur okkur upplýsingar við þurfum að finna k í minni. 236 00:12:17,000 --> 00:12:19,120 Svo hefur í rauninni PK ör í það. 237 00:12:19,120 --> 00:12:21,670 Og ef við göngum lengd þess ör, ímynda 238 00:12:21,670 --> 00:12:25,280 það er eitthvað sem þú getur gengið á, ef við ganga meðfram lengd ör, 239 00:12:25,280 --> 00:12:29,490 á mjög þjórfé þess ör, við finnur staðsetninguna í minni 240 00:12:29,490 --> 00:12:31,390 þar sem k býr. 241 00:12:31,390 --> 00:12:34,360 Og það er mjög mikilvægt vegna þess að þegar við vitum þar sem k lifir, 242 00:12:34,360 --> 00:12:37,870 við getum byrjað að vinna með gögn inni minnisins. 243 00:12:37,870 --> 00:12:40,780 Þó að við erum að fá Teeny beit undan okkur nú. 244 00:12:40,780 --> 00:12:42,240 >> Svo er það bendi? 245 00:12:42,240 --> 00:12:45,590 A bendillinn er gögn atriði sem gildi er minni heimilisfang. 246 00:12:45,590 --> 00:12:49,740 Það var að núll x átta núll stuff gangi, sem var minni heimilisfang. 247 00:12:49,740 --> 00:12:52,060 Það var staðsetningu í minni. 248 00:12:52,060 --> 00:12:55,080 Og tegund bendi lýsir því tagi 249 00:12:55,080 --> 00:12:56,930 af gögnum sem þú munt finna á sem minni heimilisfang. 250 00:12:56,930 --> 00:12:58,810 Svo er það int stjarnan hluti rétt. 251 00:12:58,810 --> 00:13:03,690 Ef ég fylgja því ör, það er að fara að leiða mig á stað. 252 00:13:03,690 --> 00:13:06,980 Og þessi staðsetning, hvað ég finnur það í dæmi mínu, 253 00:13:06,980 --> 00:13:08,240 er grænt litað kassi. 254 00:13:08,240 --> 00:13:12,650 Það er heiltala, það er það sem ég munt finna ef ég fer á þetta netfang. 255 00:13:12,650 --> 00:13:14,830 Gögnin gerð a bendillinn lýsir hvað 256 00:13:14,830 --> 00:13:17,936 þú finnur á þeim minni heimilisfang. 257 00:13:17,936 --> 00:13:19,560 Svo hér er raunverulega kaldur hlutur þó. 258 00:13:19,560 --> 00:13:25,090 Ábendingum leyfa okkur að fara breytum milli virka. 259 00:13:25,090 --> 00:13:28,520 Og í raun fara breytur og ekki fara afrit af þeim. 260 00:13:28,520 --> 00:13:32,879 Vegna þess að ef við vitum nákvæmlega hvar í minni til að finna breytu, 261 00:13:32,879 --> 00:13:35,670 við þurfum ekki að gera afrit af það getum við bara farið að þeim stað 262 00:13:35,670 --> 00:13:37,844 og vinna með breytunni. 263 00:13:37,844 --> 00:13:40,260 Svo í raun ábendingum konar af gera tölvu umhverfi 264 00:13:40,260 --> 00:13:42,360 a einhver fjöldi fleiri eins og the raunverulegur veröld, ekki satt. 265 00:13:42,360 --> 00:13:44,640 >> Svo hér er hliðstæðan. 266 00:13:44,640 --> 00:13:48,080 Við skulum segja að ég hef fartölvu, rétt, og það er fullt af athugasemdum. 267 00:13:48,080 --> 00:13:50,230 Og ég vil að þú að uppfæra hana. 268 00:13:50,230 --> 00:13:53,960 Þú ert fall sem uppfærslur athugasemdum, rétt. 269 00:13:53,960 --> 00:13:56,390 Í því hvernig við höfum verið vinna svo langt, það 270 00:13:56,390 --> 00:14:02,370 gerist er að þú verður að taka fartölvuna mína, þú munt fara að afrita búð, 271 00:14:02,370 --> 00:14:06,410 þú munt gera Xerox afrit af hverri síðu af the minnisbók. 272 00:14:06,410 --> 00:14:09,790 Þú munt skilja fartölvuna mína aftur á borðinu mínu þegar þú ert búinn, 273 00:14:09,790 --> 00:14:14,600 þú munt fara og strika út það í minn minnisbók sem eru úrelt eða rangt, 274 00:14:14,600 --> 00:14:19,280 og þá munt þú fara til baka til mér stafla af Xerox síður 275 00:14:19,280 --> 00:14:22,850 sem er eftirmynd af minnisbók minni með þeim breytingum sem þú hefur gert við hann. 276 00:14:22,850 --> 00:14:27,040 Og á þeim tímapunkti, það er komið að mér eins og starf virka, sem hringir, 277 00:14:27,040 --> 00:14:30,582 að ákveða að taka minnismiða og fella þá aftur inn í minnisbók minni. 278 00:14:30,582 --> 00:14:32,540 Þannig að það er mikið af skrefum þátt hér, ekki satt. 279 00:14:32,540 --> 00:14:34,850 Eins og væri það ekki betra ef ég segi bara, hey, getur þú 280 00:14:34,850 --> 00:14:38,370 uppfæra fartölvuna mína fyrir mér, afhenda þér fartölvuna mína, 281 00:14:38,370 --> 00:14:40,440 og þú tekur það og bókstaflega yfir þá út 282 00:14:40,440 --> 00:14:42,810 og uppfæra minnisblöð í minnisbók minni. 283 00:14:42,810 --> 00:14:45,140 Og þá gefa mér fartölvuna mína aftur. 284 00:14:45,140 --> 00:14:47,320 Það er góður af því ábendingum leyfa okkur að gera, 285 00:14:47,320 --> 00:14:51,320 þeir gera þetta umhverfi mikið meira eins og hvernig við störfum í raun. 286 00:14:51,320 --> 00:14:54,640 >> Allt í lagi svo það er það bendi er, við skulum tala 287 00:14:54,640 --> 00:14:58,040 um hvernig ábendingum vinna í C, og hvernig við getum byrjað að vinna með þeim. 288 00:14:58,040 --> 00:15:02,550 Svo er það mjög einfalt bendi í C kallast núll músina. 289 00:15:02,550 --> 00:15:04,830 Null músina stig að engu. 290 00:15:04,830 --> 00:15:08,310 Þetta virðist sennilega eins og það er reyndar ekki mjög gagnlegur hlutur, 291 00:15:08,310 --> 00:15:10,500 en eins og við munum sjá Litlu síðar á, sú staðreynd 292 00:15:10,500 --> 00:15:15,410 að þetta null bendi til staðar reyndar mjög getur komið sér vel. 293 00:15:15,410 --> 00:15:19,090 Og þegar þú býrð til músina, og þú stillir ekki gildi immediately- þess 294 00:15:19,090 --> 00:15:21,060 dæmi um að setja gildi þess strax 295 00:15:21,060 --> 00:15:25,401 verður nokkrar skyggnur aftur þar sem ég sagði PK jafngildir & K, 296 00:15:25,401 --> 00:15:28,740 PK fær tölu k, eins við munum sjá hvað það þýðir, 297 00:15:28,740 --> 00:15:32,990 við munum sjá hvernig á að kóða sem shortly- ef við ekki sett gildi þess að eitthvað 298 00:15:32,990 --> 00:15:35,380 þroskandi strax, þú ættir alltaf 299 00:15:35,380 --> 00:15:37,480 setja músina til þess að benda á núll. 300 00:15:37,480 --> 00:15:40,260 Þú ættir að setja það til að benda á neitt. 301 00:15:40,260 --> 00:15:43,614 >> Það er mjög mismunandi en bara yfirgefa gildi eins og það er 302 00:15:43,614 --> 00:15:45,530 og þá lýsa a bendillinn og bara hrokafullur 303 00:15:45,530 --> 00:15:48,042 það er null því það er sjaldan satt. 304 00:15:48,042 --> 00:15:50,000 Svo þú ættir alltaf að setja gildi bendi 305 00:15:50,000 --> 00:15:55,690 á núll ef þú stillir ekki gildi þess að eitthvað þroskandi strax. 306 00:15:55,690 --> 00:15:59,090 Þú getur athugað hvort verðmæti bendi er er null með jafnrétti rekstraraðila 307 00:15:59,090 --> 00:16:05,450 (==), Bara eins og þú bera saman hvaða tölu gildi eða gildi eðli með (==) 308 00:16:05,450 --> 00:16:06,320 einnig. 309 00:16:06,320 --> 00:16:10,994 Það er sérstakt konar fasti gildi sem þú getur notað til að prófa. 310 00:16:10,994 --> 00:16:13,160 Svo það var mjög einfalt bendillinn er null músina. 311 00:16:13,160 --> 00:16:15,320 Önnur leið til að búa til bendi er að draga 312 00:16:15,320 --> 00:16:18,240 veffang breytu þú hefur nú þegar búið til, 313 00:16:18,240 --> 00:16:22,330 og þú gerir þetta með því að nota & rekstraraðila netfang útdráttur. 314 00:16:22,330 --> 00:16:26,720 Sem við höfum þegar séð áður í fyrsta skýringarmynd dæmi sem ég sýndi. 315 00:16:26,720 --> 00:16:31,450 Svo ef x er breyta sem við höfum þegar búið af gerðinni heiltala, 316 00:16:31,450 --> 00:16:35,110 þá er & x bendi heiltala. 317 00:16:35,110 --> 00:16:39,810 & x er- muna, og er að fara að vinna úr veffang hlutur til hægri. 318 00:16:39,810 --> 00:16:45,350 Og þar bendi er bara netfang, en & x er bendi heiltala 319 00:16:45,350 --> 00:16:48,560 Hvers virði er þar í minni x lífi. 320 00:16:48,560 --> 00:16:50,460 Það er heimilisfang X er. 321 00:16:50,460 --> 00:16:53,296 Svo & x er heimilisfang x. 322 00:16:53,296 --> 00:16:55,670 Við skulum taka þetta einu skrefi frekar og tengja við eitthvað 323 00:16:55,670 --> 00:16:58,380 Ég vék að í fyrri vídeó. 324 00:16:58,380 --> 00:17:06,730 Ef hverfi er fylki af tvíliðaleik, þá & hverfi hornklofi ég er bendi 325 00:17:06,730 --> 00:17:08,109 að tvöfalda. 326 00:17:08,109 --> 00:17:08,970 OK. 327 00:17:08,970 --> 00:17:12,160 ARR ferningur krappi i, ef hverfi er fylki af tvíliðaleik, 328 00:17:12,160 --> 00:17:19,069 þá Arr ferningur krappi ég er i-ta þáttur þessi fylking, 329 00:17:19,069 --> 00:17:29,270 og & ARR veldi krappi ég er þar í minni i-ta þáttur samkl til. 330 00:17:29,270 --> 00:17:31,790 >> Svo er það vísbendingu hér? 331 00:17:31,790 --> 00:17:34,570 An fylki nafn vísbendingu af þessu öllu, 332 00:17:34,570 --> 00:17:39,290 er að nafn fylki er reyndar sjálft bendi. 333 00:17:39,290 --> 00:17:41,170 Þú hefur verið að vinna með ábendingum alla tíð 334 00:17:41,170 --> 00:17:45,290 í hvert sinn sem þú hefur notað fylki. 335 00:17:45,290 --> 00:17:49,090 Muna frá dæminu á breytilegum umfangi, 336 00:17:49,090 --> 00:17:53,420 undir lok the vídeó sem ég kynna dæmi þar sem við erum með virka 337 00:17:53,420 --> 00:17:56,890 kallað sett INT og virka kallað setja array. 338 00:17:56,890 --> 00:18:00,490 Og áskorun til að ákvarða hvort eða ekki, eða hvað 339 00:18:00,490 --> 00:18:03,220 gildi sem við prentuðum út the endir af the virka, 340 00:18:03,220 --> 00:18:05,960 í lok helstu forrit. 341 00:18:05,960 --> 00:18:08,740 >> Ef þú manst frá því dæmi eða ef þú hefur horft á vídeó, 342 00:18:08,740 --> 00:18:13,080 þú veist að þegar þig-kalla til setja INT raun gerir ekki neitt. 343 00:18:13,080 --> 00:18:16,390 En kallið að setja array gerir. 344 00:18:16,390 --> 00:18:19,280 Og ég glossed konar yfir hvers vegna það var raunin á þeim tíma. 345 00:18:19,280 --> 00:18:22,363 Ég sagði bara, vel það er fylki, það er sérstakt, þú veist, það er ástæða. 346 00:18:22,363 --> 00:18:25,020 Ástæðan er sú að fylki er Nafnið er í raun bara músina, 347 00:18:25,020 --> 00:18:28,740 og það er þetta sérstaka hornklofi setningafræði sem 348 00:18:28,740 --> 00:18:30,510 gera hlutina mikið betur að vinna með. 349 00:18:30,510 --> 00:18:34,410 Og þeir gera þá hugmynd að a bendillinn mikið minna erfið, 350 00:18:34,410 --> 00:18:36,800 og það er hvers vegna þeir eru svona af fram á þennan hátt. 351 00:18:36,800 --> 00:18:38,600 En í raun fylki eru bara ábendingum. 352 00:18:38,600 --> 00:18:41,580 Og þess vegna þegar við gert breytingar á array, 353 00:18:41,580 --> 00:18:44,880 þegar við framhjá fjölda sem viðfang að aðgerð eða sem rök 354 00:18:44,880 --> 00:18:50,110 að aðgerð innihald array í raun breyst í bæði callee 355 00:18:50,110 --> 00:18:51,160 og í þeim sem hringir. 356 00:18:51,160 --> 00:18:55,846 Sem fyrir öllum öðrum konar breyta sem við sáum var ekki raunin. 357 00:18:55,846 --> 00:18:58,970 Svo er það bara eitthvað til að halda í huga þegar þú ert að vinna með ábendingum, 358 00:18:58,970 --> 00:19:01,610 er að nafn er array raun bendi 359 00:19:01,610 --> 00:19:04,750 til fyrsta frumefni af þessi array. 360 00:19:04,750 --> 00:19:08,930 >> Allt í lagi svo nú höfum við allt þetta staðreyndir, við skulum halda áfram, ekki satt. 361 00:19:08,930 --> 00:19:11,370 Hvers vegna eigum við að hugsa um þar eitthvað býr. 362 00:19:11,370 --> 00:19:14,120 Jæja eins og ég sagði, það er ansi gagnlegt að vita hvar eitthvað býr 363 00:19:14,120 --> 00:19:17,240 svo þú getur farið þangað og breyta því. 364 00:19:17,240 --> 00:19:19,390 Vinna með það og í raun hafa það, sem þér 365 00:19:19,390 --> 00:19:23,710 langar að gera til þess breytilegum taka gildi, og ekki taka gildi á einhverjum afrit af henni. 366 00:19:23,710 --> 00:19:26,150 Þetta er kallað dereferencing. 367 00:19:26,150 --> 00:19:28,690 Við förum til viðmiðunar og við breytt gildi þar. 368 00:19:28,690 --> 00:19:32,660 Svo ef við höfum músina og það er kallað stk, og það bendir til staf 369 00:19:32,660 --> 00:19:40,610 þá getum við sagt * stk og * stk er nafn af því sem við munum finna ef við förum 370 00:19:40,610 --> 00:19:42,910 á netfangið tölvunni. 371 00:19:42,910 --> 00:19:47,860 Það sem við munum finna það er eðli og * stk er hvernig við vísa til gagna á að 372 00:19:47,860 --> 00:19:48,880 staðsetningu. 373 00:19:48,880 --> 00:19:54,150 Þannig að við gætum sagt eitthvað eins * stk = D eða eitthvað svoleiðis, 374 00:19:54,150 --> 00:19:59,280 og það þýðir að allt sem var minni heimilisfang tölvunni, 375 00:19:59,280 --> 00:20:07,040 hvað karakter var áður það er nú D, ef við segjum * PC = D. 376 00:20:07,040 --> 00:20:10,090 >> Svo hér við fara aftur með sumir furðulegur C dót, ekki satt. 377 00:20:10,090 --> 00:20:14,560 Þannig að við höfum séð * áður eins og að vera einhvern veginn hluti af gögn gerð, 378 00:20:14,560 --> 00:20:17,160 og nú er verið að nota í örlítið mismunandi samhengi 379 00:20:17,160 --> 00:20:19,605 að fá aðgang að gögnum á stað. 380 00:20:19,605 --> 00:20:22,480 Ég veit að það er svolítið ruglingslegt og sem er í raun hluti af þessari heild 381 00:20:22,480 --> 00:20:25,740 eins, hvers vegna ábendingum hafa þetta goðafræði í kringum þá eins og að vera svo flókið, 382 00:20:25,740 --> 00:20:28,250 er góður af a setningafræði vandamál, heiðarlega. 383 00:20:28,250 --> 00:20:31,810 En * er notað í bæði samhengi, bæði sem hluta af gerðinni nafni, 384 00:20:31,810 --> 00:20:34,100 og við munum sjá smá síðar eitthvað annað líka. 385 00:20:34,100 --> 00:20:36,490 Og núna er dereference rekstraraðila. 386 00:20:36,490 --> 00:20:38,760 Svo það fer til viðmiðunar, það notar gögn 387 00:20:38,760 --> 00:20:43,000 á þeim stað á músina, og gerir þér kleift að vinna það að vild. 388 00:20:43,000 --> 00:20:45,900 >> Nú er þetta mjög svipuð heimsækja náunga þinn, ekki satt. 389 00:20:45,900 --> 00:20:48,710 Ef þú veist hvað þitt Nágranni lifir, þú ert 390 00:20:48,710 --> 00:20:50,730 ekki hangandi út með náunga þínum. 391 00:20:50,730 --> 00:20:53,510 Þú veist að þú skyldir vita hvar þeir búa, 392 00:20:53,510 --> 00:20:56,870 en það þýðir ekki að með því að dyggð af því að hafa þá þekkingu 393 00:20:56,870 --> 00:20:59,170 þú ert samskipti við þá. 394 00:20:59,170 --> 00:21:01,920 Ef þú vilt að hafa samskipti við þá, þú þarft að fara heim til þeirra, 395 00:21:01,920 --> 00:21:03,760 þú þarft að fara þangað sem þeir búa. 396 00:21:03,760 --> 00:21:07,440 Og þegar þú gerir það, þá er hægt að hafa samskipti 397 00:21:07,440 --> 00:21:09,420 með þeim bara eins og þú vilt vilt. 398 00:21:09,420 --> 00:21:12,730 Og álíka með breytum, þú þarft að fara á aðsetur þeirra 399 00:21:12,730 --> 00:21:15,320 ef þú vilt að samskipti þeirra, þú getur ekki bara vita á netfangið. 400 00:21:15,320 --> 00:21:21,495 Og hvernig þú ferð á heimilisfang er að nota * er dereference rekstraraðila. 401 00:21:21,495 --> 00:21:23,620 Hvað finnst þér gerist ef við reynum og dereference 402 00:21:23,620 --> 00:21:25,260 bendi sem gildi er núll? 403 00:21:25,260 --> 00:21:28,470 Muna að null bendillinn bendir ekkert. 404 00:21:28,470 --> 00:21:34,110 Svo ef þú reynir og dereference ekkert eða fara á póstfang ekkert, 405 00:21:34,110 --> 00:21:36,800 hvað finnst þér gerist? 406 00:21:36,800 --> 00:21:39,630 Jæja, ef þú giska skiptingu kenna, þú vilt vera rétt. 407 00:21:39,630 --> 00:21:41,390 Ef þú reynir og dereference a null músina, 408 00:21:41,390 --> 00:21:43,140 þú ert a skiptingu kenna. En bíddu, 409 00:21:43,140 --> 00:21:45,820 gerði ég ekki sagt þér, að ef þú ert ekki að fara 410 00:21:45,820 --> 00:21:49,220 að setja gildi þitt af þínum bendi á eitthvað þroskandi, 411 00:21:49,220 --> 00:21:51,000 þú ættir að setja á núll? 412 00:21:51,000 --> 00:21:55,290 Ég gerði og í raun skiptingu kenna er góður af a góða hegðun. 413 00:21:55,290 --> 00:21:58,680 >> Hefur þú lýst alltaf breytu og ekki úthlutað gildi þess strax? 414 00:21:58,680 --> 00:22:02,680 Svo þú segir bara int x; þú ert ekki reyndar framselja það til nokkuð 415 00:22:02,680 --> 00:22:05,340 og þá seinna í kóðanum þínum, þú prentað út verðmæti x, 416 00:22:05,340 --> 00:22:07,650 hafa enn ekki úthlutað það til nokkuð. 417 00:22:07,650 --> 00:22:10,370 Oft þú munt fá núll, en stundum 418 00:22:10,370 --> 00:22:15,000 gæti fengið smá slembitölu, og þú hefur ekki hugmynd um hvar það kom frá. 419 00:22:15,000 --> 00:22:16,750 Á sama hátt getur það gerast með ábendingum. 420 00:22:16,750 --> 00:22:20,110 Þegar þú lýsa bendi int * PK til dæmis, 421 00:22:20,110 --> 00:22:23,490 og þú framselja ekki það að verðmæti, þú færð fjögur bæti fyrir minni. 422 00:22:23,490 --> 00:22:25,950 Whatever fjögur bæti af minni kerfið getur 423 00:22:25,950 --> 00:22:28,970 finna að hafa þroskandi gildi. 424 00:22:28,970 --> 00:22:31,760 Og það gæti hafa verið eitthvað þegar það sem 425 00:22:31,760 --> 00:22:34,190 er ekki lengur þörf af öðru virka, svo þú verður bara 426 00:22:34,190 --> 00:22:35,900 hvað sem gögn voru þar. 427 00:22:35,900 --> 00:22:40,570 >> Hvað ef þú reyndir að gera dereference sumir netfang sem þú don't- það voru 428 00:22:40,570 --> 00:22:43,410 þegar bæti og upplýsingar í það, sem er nú í músina þína. 429 00:22:43,410 --> 00:22:47,470 Ef þú reynir og dereference þess músina, þú gætir verið að fíflast með nokkrum minni 430 00:22:47,470 --> 00:22:49,390 að þú ætlaðir ekki að skipta sér af öllu. 431 00:22:49,390 --> 00:22:51,639 Og í raun að þú gætir gert eitthvað mjög hrikalegt, 432 00:22:51,639 --> 00:22:54,880 eins brjóta annað forrit, eða brjóta aðra virka, 433 00:22:54,880 --> 00:22:58,289 eða gera eitthvað illgjarn að þú ætlar ekki að gera á öllum. 434 00:22:58,289 --> 00:23:00,080 Og svo er það hvers vegna það er reyndar góð hugmynd 435 00:23:00,080 --> 00:23:04,030 að setja ábendingum þínum á núll ef þú ekki setja þá í eitthvað þroskandi. 436 00:23:04,030 --> 00:23:06,760 Það er líklega betri í lok dagsins program 437 00:23:06,760 --> 00:23:09,840 að hrun þá fyrir það að gera Eitthvað sem klikkar 438 00:23:09,840 --> 00:23:12,400 annað forrit eða önnur aðgerð. 439 00:23:12,400 --> 00:23:15,207 Að hegðun er líklega enn minna tilvalið en bara hrun. 440 00:23:15,207 --> 00:23:17,040 Og svo er það hvers vegna það er reyndar góð venja 441 00:23:17,040 --> 00:23:20,920 til að komast inn til að setja ábendingum þínum á núll ef þú stillir ekki þá 442 00:23:20,920 --> 00:23:24,540 að þroskandi gildi strax, er gildi sem þú veist 443 00:23:24,540 --> 00:23:27,260 og að þú getur örugglega að dereference. 444 00:23:27,260 --> 00:23:32,240 >> Svo skulum koma aftur núna og taka a líta á heildar setningafræði af ástandinu. 445 00:23:32,240 --> 00:23:37,400 Ef ég segi int * bls ;, hvað hef ég gert bara? 446 00:23:37,400 --> 00:23:38,530 Það sem ég hef gert er þetta. 447 00:23:38,530 --> 00:23:43,290 Ég veit gildi p er heimilisfang vegna þess að allar ábendingar eru bara 448 00:23:43,290 --> 00:23:44,660 heimilisföng. 449 00:23:44,660 --> 00:23:47,750 Ég get dereference bls með * rekstraraðila. 450 00:23:47,750 --> 00:23:51,250 Í þessu samhengi hér, á mjög toppur muna * er hluti af gerð. 451 00:23:51,250 --> 00:23:53,510 Int * er gögn tegund. 452 00:23:53,510 --> 00:23:56,150 En ég get dereference bls nota * rekstraraðila, 453 00:23:56,150 --> 00:24:01,897 og ef ég geri það, ef ég fer á þetta netfang, hvað finn ég á þetta netfang? 454 00:24:01,897 --> 00:24:02,855 Ég mun finna heiltölu. 455 00:24:02,855 --> 00:24:05,910 Svo er INT * p grundvallaratriðum segja, p er netfang. 456 00:24:05,910 --> 00:24:09,500 Ég get dereference p og ef Ég geri, mun ég finna heiltala 457 00:24:09,500 --> 00:24:11,920 á þeim minni stað. 458 00:24:11,920 --> 00:24:14,260 >> Allt í lagi svo ég sagði það var annar pirrandi hlutur með stjörnum 459 00:24:14,260 --> 00:24:17,060 og hér er þar sem pirrandi hlutur með stjörnum er. 460 00:24:17,060 --> 00:24:21,640 Hefur þú einhvern tíma reynt að lýsa margar breytur af sömu gerð 461 00:24:21,640 --> 00:24:24,409 á sömu línu af kóða? 462 00:24:24,409 --> 00:24:27,700 Svo fyrir annað, þykjast að línan, kóðinn ég hef í raun það í grænu 463 00:24:27,700 --> 00:24:29,366 er ekki þar og það segir bara int x, y og z ;. 464 00:24:29,366 --> 00:24:31,634 465 00:24:31,634 --> 00:24:34,550 Hvað það myndi gera er í raun að búa til þrjú heiltala breytur fyrir þig, 466 00:24:34,550 --> 00:24:36,930 Hét x kallaði eitt Y, og hinn heitir z. 467 00:24:36,930 --> 00:24:41,510 Það er leið til að gera það án þess að þurfa að skipta á þremur línum. 468 00:24:41,510 --> 00:24:43,890 >> Hér er þar sem stjörnur fá pirrandi aftur þó, 469 00:24:43,890 --> 00:24:49,200 vegna þess að * er í raun hluti bæði Sláðu inn heiti og hluti 470 00:24:49,200 --> 00:24:50,320 af breytu nafninu. 471 00:24:50,320 --> 00:24:56,430 Og svo ef ég segi int * px, py, PZ, hvað ég raunverulega fá er bendi heiltala 472 00:24:56,430 --> 00:25:01,650 kallað px og tvær heiltölur, py og PZ. 473 00:25:01,650 --> 00:25:04,950 Og það er líklega ekki hvað við viljum, það er ekki gott. 474 00:25:04,950 --> 00:25:09,290 >> Þannig að ef ég vil búa til margar ábendingar á sömu línu, af sömu tegund, 475 00:25:09,290 --> 00:25:12,140 og stjörnur, sem ég þarf reyndar að gera er að segja int * ári, * Pb, * stk. 476 00:25:12,140 --> 00:25:17,330 477 00:25:17,330 --> 00:25:20,300 Nú hafa bara sagt að og nú segja þér þetta, 478 00:25:20,300 --> 00:25:22,170 þú munt sennilega aldrei gera þetta. 479 00:25:22,170 --> 00:25:25,170 Og það er líklega gott heiðarlega, vegna þess að þú gætir óvart 480 00:25:25,170 --> 00:25:26,544 sleppa stjörnu, eitthvað svoleiðis. 481 00:25:26,544 --> 00:25:29,290 Það er sennilega best að kannski lýsa ábendingum á einstökum línum, 482 00:25:29,290 --> 00:25:31,373 en það er bara annað af þessum pirrandi setningafræði 483 00:25:31,373 --> 00:25:35,310 hluti með stjörnum sem gera ábendingum svo erfitt að vinna með. 484 00:25:35,310 --> 00:25:39,480 Vegna þess að það er bara þetta nokkur dæmi um setningarleg sóðaskapur sem þú þarft að vinna í gegnum. 485 00:25:39,480 --> 00:25:41,600 Með starfi það er virkilega orðið annað eðli. 486 00:25:41,600 --> 00:25:45,410 Ég geri samt mistök með það enn eftir forritun í 10 ár, 487 00:25:45,410 --> 00:25:49,630 svo ekki vera í uppnámi ef eitthvað gerist að þér, er það nokkuð algengt heiðarlega. 488 00:25:49,630 --> 00:25:52,850 Það er í raun eins konar galli á setningafræði. 489 00:25:52,850 --> 00:25:54,900 >> Allt í lagi svo ég lofaði konar að við myndum endurskoðun 490 00:25:54,900 --> 00:25:59,370 hugtakið hversu stór er band. 491 00:25:59,370 --> 00:26:02,750 Jæja ef ég sagt þér að band, höfum við í raun eins konar 492 00:26:02,750 --> 00:26:04,140 verið að ljúga að þér allan tímann. 493 00:26:04,140 --> 00:26:06,181 Það er engin gögn tegund kölluð band, og í raun ég 494 00:26:06,181 --> 00:26:09,730 nefndi þetta í einni af okkar Elstu vídeó á gagnatög, 495 00:26:09,730 --> 00:26:13,820 að strengur var gögn tegund sem var búið til fyrir þig í cs50.h. 496 00:26:13,820 --> 00:26:17,050 Þú þarft að #include Cs50.h í því skyni að nota það. 497 00:26:17,050 --> 00:26:19,250 >> Jæja band er í raun bara samnefni fyrir eitthvað 498 00:26:19,250 --> 00:26:23,600 kallað char *, a bendi á staf. 499 00:26:23,600 --> 00:26:26,010 Jæja ábendingum, muna, eru bara fjallar. 500 00:26:26,010 --> 00:26:28,780 Svo er það stærð í bytes streng? 501 00:26:28,780 --> 00:26:29,796 Jæja það er fjórum eða átta. 502 00:26:29,796 --> 00:26:32,170 Og ástæða þess að ég segi fjögur eða átta er vegna þess að það í raun 503 00:26:32,170 --> 00:26:36,730 veltur á kerfinu, ef þú ert að nota CS50 IDE, char * er á stærð við bleikju 504 00:26:36,730 --> 00:26:39,340 * Er átta, það er 64-bita kerfi. 505 00:26:39,340 --> 00:26:43,850 Sérhver netfang í minni er 64 bitar. 506 00:26:43,850 --> 00:26:48,270 Ef þú ert að nota CS50 tæki eða nota 32-bita vél, 507 00:26:48,270 --> 00:26:51,640 og þú hefur heyrt hugtakið 32-bita vél, hvað er 32-bita vél? 508 00:26:51,640 --> 00:26:56,090 Jæja það þýðir bara að hver heimilisfang í minni er 32 bitar. 509 00:26:56,090 --> 00:26:59,140 Og svo 32 bita er fjögur bæti. 510 00:26:59,140 --> 00:27:02,710 Svo er char * fjórum eða átta bæti eftir vélinni þinni. 511 00:27:02,710 --> 00:27:06,100 Og reyndar allir gagnatög, og bendi á hvaða gögnum 512 00:27:06,100 --> 00:27:12,030 tegund, þar sem allar ábendingar eru bara heimilisföng, eru fjórar eða átta bæti. 513 00:27:12,030 --> 00:27:14,030 Svo skulum rifja þetta skýringarmynd og við skulum gera 514 00:27:14,030 --> 00:27:18,130 þetta video með smá æfingu hér. 515 00:27:18,130 --> 00:27:21,600 Svo hér er skýringarmynd sem við var horfið með á mjög byrjun af the vídeó. 516 00:27:21,600 --> 00:27:23,110 Svo gerist það núna ef ég segi * PK = 35? 517 00:27:23,110 --> 00:27:26,370 518 00:27:26,370 --> 00:27:30,530 Svo hvað þýðir það þegar ég segi, * PK = 35? 519 00:27:30,530 --> 00:27:32,420 Taktu annað. 520 00:27:32,420 --> 00:27:34,990 * Pk. 521 00:27:34,990 --> 00:27:39,890 Í samhengi hér, * er dereference rekstraraðila. 522 00:27:39,890 --> 00:27:42,110 Svo þegar dereference rekstraraðili er notað, 523 00:27:42,110 --> 00:27:48,520 við förum að heimilisfangið benti til eftir pk, og við breyta því sem við finnum. 524 00:27:48,520 --> 00:27:55,270 Svo * PK = 35 áhrifaríkan er þetta á myndinni. 525 00:27:55,270 --> 00:27:58,110 Svo það er í rauninni setningafræðilega eins og af því að hafa sagt k = 35. 526 00:27:58,110 --> 00:28:00,740 527 00:28:00,740 --> 00:28:01,930 >> Einn enn. 528 00:28:01,930 --> 00:28:05,510 Ef ég segi int m, ég skapa nýja breytu sem heitir m. 529 00:28:05,510 --> 00:28:08,260 Ný kassi, það er græna reitinn því það er að fara að halda tölu, 530 00:28:08,260 --> 00:28:09,840 og það er merkt m. 531 00:28:09,840 --> 00:28:14,960 Ef ég segi m = 4, lagði ég heiltala inn kassann. 532 00:28:14,960 --> 00:28:20,290 Ef segja PK = & m, hvernig er Þessi skýringarmynd breyting? 533 00:28:20,290 --> 00:28:28,760 Pk = & m, Manstu hvað á & Rekstraraðila gerir eða heitir? 534 00:28:28,760 --> 00:28:34,430 Mundu að & sumir breyta nafni er heimilisfang breytilegum nafn. 535 00:28:34,430 --> 00:28:38,740 Svo það sem við erum að segja er PK fær veffang m. 536 00:28:38,740 --> 00:28:42,010 Og svo í raun hvað gerist í skýringarmynd er að PK ekki lengur stig 537 00:28:42,010 --> 00:28:46,420 sl, en bendir á m. 538 00:28:46,420 --> 00:28:48,470 >> Aftur ábendingum mjög erfiður að vinna með 539 00:28:48,470 --> 00:28:50,620 og þeir taka mikið af æfa, heldur vegna þess að 540 00:28:50,620 --> 00:28:54,150 getu þeirra til að leyfa þér að fara gögn á milli virka 541 00:28:54,150 --> 00:28:56,945 og í raun hafa þeir breytingar taka gildi, 542 00:28:56,945 --> 00:28:58,820 fá höfuðið í kring er mjög mikilvægt. 543 00:28:58,820 --> 00:29:02,590 Það er líklega flókið efni við ræðum í CS50, 544 00:29:02,590 --> 00:29:05,910 en gildi sem þér fá frá því að nota ábendingar 545 00:29:05,910 --> 00:29:09,200 langt meiri fylgikvillum að koma af því að læra þá. 546 00:29:09,200 --> 00:29:12,690 Svo ég óska ​​ykkur bestu heppni að læra um ábendingum. 547 00:29:12,690 --> 00:29:15,760 Ég er Doug Lloyd, þetta er CS50. 548 00:29:15,760 --> 00:29:17,447