1 00:00:00,000 --> 00:00:06,030 >> [Mūzikas atskaņošanai] 2 00:00:06,030 --> 00:00:08,390 >> Doug LLOYD: Pointers, šeit mēs esam. 3 00:00:08,390 --> 00:00:11,080 Tas ir iespējams, gatavojas būt visgrūtāk tēmu 4 00:00:11,080 --> 00:00:12,840 ka mēs runājam par in CS50. 5 00:00:12,840 --> 00:00:15,060 Un, ja jūs esat lasīt kaut kas par norādes 6 00:00:15,060 --> 00:00:19,080 Pirms jūs varētu būt mazliet iebiedēt nonākšana šajā video. 7 00:00:19,080 --> 00:00:21,260 Tā ir taisnība, ka norādes do ļauj jums iespēju 8 00:00:21,260 --> 00:00:23,740 varbūt screw up diezgan slikti, ja esat 9 00:00:23,740 --> 00:00:27,450 strādājot ar mainīgajiem, un datiem, un rada savu programmu crash. 10 00:00:27,450 --> 00:00:30,490 Bet viņi tiešām ļoti noderīga un tie ļauj mums tiešām lielisks veids 11 00:00:30,490 --> 00:00:33,340 nodot datus atpakaļ un atpakaļ starp funkcijām, 12 00:00:33,340 --> 00:00:35,490 ka mēs esam citādi nevaram darīt. 13 00:00:35,490 --> 00:00:37,750 >> Un tā, ko mēs patiešām gribu darīt, šeit ir vilciens 14 00:00:37,750 --> 00:00:41,060 Jums ir labas rādītājs disciplīnu, tāpēc ka jūs varat efektīvi izmantot norādes 15 00:00:41,060 --> 00:00:43,850 lai padarītu jūsu programmas, kas daudz labāk. 16 00:00:43,850 --> 00:00:48,220 Kā jau teicu norādes dod mums atšķirīga veids, kā nodot datus starp funkcijām. 17 00:00:48,220 --> 00:00:50,270 Tagad, ja jūs atceraties no agrāku video, kad 18 00:00:50,270 --> 00:00:53,720 mēs runājām par mainīga joma, es teicu 19 00:00:53,720 --> 00:01:00,610 ka visi dati, kas mums paiet funkcijas C tiek pieņemts pēc vērtības. 20 00:01:00,610 --> 00:01:03,070 Un es, iespējams, nav izmantotas, ka termins, ko es gribēju tur 21 00:01:03,070 --> 00:01:07,170 bija tas, ka mēs iet kopijas datiem. 22 00:01:07,170 --> 00:01:12,252 Kad mēs caurlaide mainīgo līdz funkcijai mēs esam ne faktiski iet mainīgo 23 00:01:12,252 --> 00:01:13,210 funkcijai, vai ne? 24 00:01:13,210 --> 00:01:17,670 Mēs iet kopiju ka dati funkcijai. 25 00:01:17,670 --> 00:01:20,760 Funkcija, ko tā būs un tā aprēķina dažas vērtības, 26 00:01:20,760 --> 00:01:23,180 un varbūt mēs izmantojam šo vērtību kad tas dod to atpakaļ. 27 00:01:23,180 --> 00:01:26,700 >> Tur bija izņēmums viens šis noteikums iet pēc vērtības, 28 00:01:26,700 --> 00:01:31,210 un mēs būsim atpakaļ uz to, ka ir nedaudz vēlāk šajā video. 29 00:01:31,210 --> 00:01:34,880 Ja mēs izmantojam norādes vietā izmantojot mainīgos lielumus, 30 00:01:34,880 --> 00:01:38,180 vai vietā, izmantojot mainīgos lielumus paši vai kopijas mainīgo, 31 00:01:38,180 --> 00:01:43,790 mēs tagad varam iet mainīgos apkārt starp funkcijām savādāk. 32 00:01:43,790 --> 00:01:46,550 Tas nozīmē, ka, ja mēs izmaiņas vienu funkciju, 33 00:01:46,550 --> 00:01:49,827 ka izmaiņas būs faktiski veikt ietekmēt citā funkciju. 34 00:01:49,827 --> 00:01:52,160 Atkal, tas ir kaut kas mēs nevarētu darīt agrāk, 35 00:01:52,160 --> 00:01:56,979 un, ja jūs esat kādreiz mēģinājis mijmaiņas vērtība divu mainīgo funkcija, 36 00:01:56,979 --> 00:01:59,270 esat ievērojuši šo problēmu veida Ložņu augšu, vai ne? 37 00:01:59,270 --> 00:02:04,340 >> Ja mēs gribam, lai mijmaiņas X un Y, un mēs nodot tos uz funkciju sauc swap, 38 00:02:04,340 --> 00:02:08,680 iekšpusē funkciju mijmaiņas mainīgie darīt maiņas vērtības. 39 00:02:08,680 --> 00:02:12,600 Viens kļūst divi, divi kļūst viens, bet mums nav reāli 40 00:02:12,600 --> 00:02:16,890 mainīt neko oriģinālu funkcija, kas zvanītājam. 41 00:02:16,890 --> 00:02:19,550 Tāpēc, ka mēs nevaram, mēs esam tikai strādā ar kopijas. 42 00:02:19,550 --> 00:02:24,760 Ar norādes, lai gan, mēs varam faktiski iet X un Y, lai funkciju. 43 00:02:24,760 --> 00:02:26,960 Šo funkciju var darīt kaut kas ar viņiem. 44 00:02:26,960 --> 00:02:29,250 Un šie mainīgie lielumi faktiski var mainīties. 45 00:02:29,250 --> 00:02:33,710 Tātad tas ir diezgan izmaiņas Mūsu spēja strādāt ar datiem. 46 00:02:33,710 --> 00:02:36,100 >> Pirms mēs pikējošais norādes, es domāju, ka tas ir tā vērts 47 00:02:36,100 --> 00:02:38,580 ņemot dažas minūtes, lai iet atpakaļ uz pamatus šeit. 48 00:02:38,580 --> 00:02:41,000 Un ir apskatīt, kā datoru atmiņas darbi 49 00:02:41,000 --> 00:02:45,340 jo šie divi priekšmeti gatavojas faktiski būt diezgan savstarpēji saistīti. 50 00:02:45,340 --> 00:02:48,480 Kā jūs droši vien zināt, datorā sistēmas 51 00:02:48,480 --> 00:02:51,310 Jums ir cieto disku vai varbūt cietvielu disks, 52 00:02:51,310 --> 00:02:54,430 daži no failu glabāšanas vietu kārtošanas. 53 00:02:54,430 --> 00:02:57,950 Tas parasti ir kaut kur apkārtnē 250 gigabaitiem 54 00:02:57,950 --> 00:02:59,810 uz varbūt pāris terabaitiem tagad. 55 00:02:59,810 --> 00:03:02,270 Un tas ir, ja visas jūsu failus galu galā dzīvo, 56 00:03:02,270 --> 00:03:04,870 pat tad, kad dators ir izslēgts off, jūs varat pārvērst to atpakaļ 57 00:03:04,870 --> 00:03:09,190 un jūs atradīsiet jūsu faili ir tur atkal, kad jūs atsāknēšana jūsu sistēmā. 58 00:03:09,190 --> 00:03:14,820 Bet diskdziņi, piemēram, cietā diska, HDD, vai cietā stāvoklī vadīt, SSD, 59 00:03:14,820 --> 00:03:16,050 ir tikai uzglabāšanas telpa. 60 00:03:16,050 --> 00:03:20,400 >> Mēs nevaram reāli darīt kaut ko ar dati, kas ir cietā diska, 61 00:03:20,400 --> 00:03:22,080 vai cietā stāvoklī vadīt. 62 00:03:22,080 --> 00:03:24,950 Lai reāli mainīt dati vai pārvietot to apkārt, 63 00:03:24,950 --> 00:03:28,800 mums ir, lai pārvietotu to uz RAM, brīvpiekļuves atmiņas. 64 00:03:28,800 --> 00:03:31,170 Tagad RAM, jums ir daudz mazāk datorā. 65 00:03:31,170 --> 00:03:34,185 Jums var būt kaut kur apkārtnē 512 megabaitu 66 00:03:34,185 --> 00:03:38,850 ja jums ir vecāks dators, līdz varbūt divi, četri, astoņi, 16, 67 00:03:38,850 --> 00:03:41,820 iespējams, pat nedaudz vairāk, gigabaitu RAM. 68 00:03:41,820 --> 00:03:46,390 Tātad tas ir daudz mazāks, bet tas ir kur visi gaistošo datu eksistē. 69 00:03:46,390 --> 00:03:48,270 Tas ir, ja mēs varam mainīt lietas. 70 00:03:48,270 --> 00:03:53,350 Bet, kad mēs savukārt mūsu datoru off, visi dati RAM ir iznīcināta. 71 00:03:53,350 --> 00:03:57,150 >> Tātad, tāpēc mums ir cietā diska par vairāk pastāvīgā atrašanās vieta no tā, 72 00:03:57,150 --> 00:03:59,720 lai tā exists- tas būtu būt patiesi slikti, ja katru reizi, kad mēs 73 00:03:59,720 --> 00:04:03,310 Izrādījās mūsu datoru off, ik failu mūsu sistēmā tika iznīcinātas. 74 00:04:03,310 --> 00:04:05,600 Tāpēc mēs strādājam iekšā RAM. 75 00:04:05,600 --> 00:04:09,210 Un katru reizi, kad mēs runājam par atmiņa, diezgan daudz, jo CS50, 76 00:04:09,210 --> 00:04:15,080 mēs runājam par RAM, nevis cietā diska. 77 00:04:15,080 --> 00:04:18,657 >> Tātad, kad mēs pārvietot lietas atmiņā, tas aizņem zināmu daudzumu telpā. 78 00:04:18,657 --> 00:04:20,740 Visi datu tipu, kas mēs esam strādājuši ar 79 00:04:20,740 --> 00:04:23,480 aizņem atšķirīgs summas telpas RAM. 80 00:04:23,480 --> 00:04:27,600 Tātad, katru reizi, kad jūs izveidot vesels skaitlis mainīgs, četri baiti atmiņas 81 00:04:27,600 --> 00:04:30,750 ir atcelt RAM, lai jūs var strādāt ar šo skaitlim. 82 00:04:30,750 --> 00:04:34,260 Jūs varat atzīt skaitlim, mainīt to, piešķirt to 83 00:04:34,260 --> 00:04:36,700 līdz vērtībai 10 palielina ar vienu, tā tālāk un tā tālāk. 84 00:04:36,700 --> 00:04:39,440 Viss, kas nepieciešams, lai notiktu RAM, un jūs saņemsiet četras baiti 85 00:04:39,440 --> 00:04:42,550 strādāt ar katru skaitlis, ka jūs izveidojat. 86 00:04:42,550 --> 00:04:45,410 >> Katram varonim jums izveidot saņem vienu baitu. 87 00:04:45,410 --> 00:04:48,160 Tas ir tikai, cik daudz vietas ir nepieciešams, lai saglabātu raksturs. 88 00:04:48,160 --> 00:04:51,310 Katru peldēt, īsta numurs, saņem četri baiti 89 00:04:51,310 --> 00:04:53,390 ja vien tas ir dubultā precizitātes peldošā komata 90 00:04:53,390 --> 00:04:56,510 numurs, kas ļauj būt precīzākiem vai ciparus 91 00:04:56,510 --> 00:04:59,300 aiz komata nezaudējot precizitāti, 92 00:04:59,300 --> 00:05:01,820 kas aizņem astoņas baiti atmiņas. 93 00:05:01,820 --> 00:05:06,730 Garas ilgojas, tiešām liels veseli skaitļi, arī aizņem astoņas baiti atmiņas. 94 00:05:06,730 --> 00:05:09,000 Cik daudz atmiņas baiti do stīgas aizņem? 95 00:05:09,000 --> 00:05:12,990 Nu pieņemsim likts pin šajā jautājumā tagad, bet mēs atgriezīsimies pie tā. 96 00:05:12,990 --> 00:05:17,350 >> Tātad atpakaļ uz šo ideju atmiņas kā liels masīvs baitu izmēra šūnās. 97 00:05:17,350 --> 00:05:20,871 Tas ir tiešām viss, kas ir, tas ir tikai milzīgs masīvs šūnām, 98 00:05:20,871 --> 00:05:23,370 tāpat kā jebkuru citu masīvs, ka Jūs esat iepazinušies ar un redzēt, 99 00:05:23,370 --> 00:05:26,430 izņemot katram elementam ir viens baits plata. 100 00:05:26,430 --> 00:05:30,030 Un tāpat kā masīva, katrs elements ir piegādes adrese. 101 00:05:30,030 --> 00:05:32,120 Katrs masīva elements ir indekss, un mēs 102 00:05:32,120 --> 00:05:36,302 var izmantot šo indeksu darīt tā saukto brīvpiekļuves uz masīvu. 103 00:05:36,302 --> 00:05:38,510 Mums nav jāsāk at sākums masīva, 104 00:05:38,510 --> 00:05:40,569 atkārtot, izmantojot katru vienots elements punktu, 105 00:05:40,569 --> 00:05:41,860 atrast to, ko mēs meklējam. 106 00:05:41,860 --> 00:05:45,790 Mēs varam tikai teikt, es gribu, lai nokļūtu 15. elements vai 100. elements. 107 00:05:45,790 --> 00:05:49,930 Un jūs varat vienkārši iet šo numuru un iegūt vērtību, jūs meklējat. 108 00:05:49,930 --> 00:05:54,460 >> Tāpat ik vieta atmiņā ir adrese. 109 00:05:54,460 --> 00:05:57,320 Tātad jūsu atmiņa varētu izskatīties kaut kas līdzīgs šim. 110 00:05:57,320 --> 00:06:01,420 Lūk ļoti mazs rieciens atmiņa, tas ir 20 baiti atmiņas. 111 00:06:01,420 --> 00:06:04,060 Pirmie 20 baiti, jo mans adreses tur apakšā 112 00:06:04,060 --> 00:06:08,890 ir 0, 1, 2, 3, un tā par visu ceļu līdz 19. 113 00:06:08,890 --> 00:06:13,190 Un, kad es deklarēt mainīgos un kad es sāku strādāt ar viņiem, 114 00:06:13,190 --> 00:06:15,470 sistēma, kas notiek, lai uzstādītu malā dažas vietas par mani 115 00:06:15,470 --> 00:06:17,595 Šajā atmiņu strādāt ar manu mainīgajiem. 116 00:06:17,595 --> 00:06:21,610 Tāpēc es varētu teikt, char c vienāds kapitāls H. Un kas notiek varētu notikt? 117 00:06:21,610 --> 00:06:23,880 Nu sistēma ir gatavojas rezervēti man vienu baitu. 118 00:06:23,880 --> 00:06:27,870 Šajā gadījumā tā izvēlējās baitu skaits četri, baitu pēc adreses četri, 119 00:06:27,870 --> 00:06:31,310 un tas notiek, lai saglabātu burts kapitāls H tur par mani. 120 00:06:31,310 --> 00:06:34,350 Ja es tad saka int ātrumu limits vienāds 65, tas ir 121 00:06:34,350 --> 00:06:36,806 gatavojas atcelt četras baiti atmiņas par mani. 122 00:06:36,806 --> 00:06:39,180 Un tas notiek, lai ārstētu tos, četri baiti par vienu vienību 123 00:06:39,180 --> 00:06:41,305 jo tas, ko mēs strādājam ar ir vesels skaitlis šeit. 124 00:06:41,305 --> 00:06:44,350 Un tas notiek, lai saglabātu 65 tur. 125 00:06:44,350 --> 00:06:47,000 >> Tagad jau es esmu veida stāsta jums mazliet meliem, 126 00:06:47,000 --> 00:06:50,150 labi, jo mēs zinām, ka datori strādā bināro. 127 00:06:50,150 --> 00:06:53,100 Viņi nesaprot vienmēr kāds kapitāls H ir 128 00:06:53,100 --> 00:06:57,110 vai kāds 65 ir, viņi tikai izprast binārā, nullēm un uzņēmumiem. 129 00:06:57,110 --> 00:06:59,000 Un tā faktiski ko mēs esam uzglabātu tur 130 00:06:59,000 --> 00:07:03,450 nav burts H un skaitu 65, bet gan bināro pārstāvniecības 131 00:07:03,450 --> 00:07:06,980 apakšpunktu, kas izskatās mazliet kaut kas līdzīgs šim. 132 00:07:06,980 --> 00:07:10,360 Un jo īpaši, konteksts skaitlim mainīgo, 133 00:07:10,360 --> 00:07:13,559 tas nav gatavojas tikai spļaut to, tas nav gatavojas, lai ārstētu to kā vienu četrām 134 00:07:13,559 --> 00:07:15,350 baitu rieciens obligāti, tas tiešām notiek 135 00:07:15,350 --> 00:07:19,570 lai ārstētu to kā četri viena baitu gabalos, kas varētu izskatīties kaut kas līdzīgs šim. 136 00:07:19,570 --> 00:07:22,424 Un pat tas nav pilnīgi taisnība, vai nu, 137 00:07:22,424 --> 00:07:24,840 jo kaut ko sauc endianness, kas mēs neesam 138 00:07:24,840 --> 00:07:26,965 gatavojas nokļūt tagad, bet Ja jūs esat ieinteresēti par, 139 00:07:26,965 --> 00:07:29,030 Jūs varat izlasīt pat par maz un liels endianness. 140 00:07:29,030 --> 00:07:31,640 Bet labad šo argumentu, labad šo video, 141 00:07:31,640 --> 00:07:34,860 pieņemsim tikai pieņemt, tas ir, Fakts, cik skaits 65 būtu 142 00:07:34,860 --> 00:07:36,970 ir pārstāvētas Atmiņas par katru sistēmu, 143 00:07:36,970 --> 00:07:38,850 lai gan tas nav pilnīgi taisnība. 144 00:07:38,850 --> 00:07:41,700 >> Bet pieņemsim faktiski tikai iegūt atbrīvoties no visiem bināro pilnīgi, 145 00:07:41,700 --> 00:07:44,460 un tikai domā par kā H un 65, tas ir daudz vieglāk 146 00:07:44,460 --> 00:07:47,900 domāt par to kā ka kā cilvēks. 147 00:07:47,900 --> 00:07:51,420 Visas tiesības, tāpēc tas arī šķiet, varbūt maz izlases ka I've- mana sistēma 148 00:07:51,420 --> 00:07:55,130 nedeva man baitu 5, 6, 7, un 8, lai uzglabātu ir vesels skaitlis. 149 00:07:55,130 --> 00:07:58,580 Tur ir iemesls tam, pārāk, kas mums nebūs iekļuvuši tieši tagad, bet pietiek 150 00:07:58,580 --> 00:08:00,496 tā teikt, ka tas, ko dators dara šeit 151 00:08:00,496 --> 00:08:02,810 iespējams, ir labs solis no savas puses. 152 00:08:02,810 --> 00:08:06,020 Lai nedod man atmiņu, kas ir obligāti atpakaļ atpakaļ. 153 00:08:06,020 --> 00:08:10,490 Lai gan tas ir gatavojas darīt to tagad ja es vēlos saņemt vēl virkni, 154 00:08:10,490 --> 00:08:13,080 sauc uzvārdu, un es gribu likt Lloyd tur. 155 00:08:13,080 --> 00:08:18,360 Es esmu gatavojas nepieciešams uzstādīt vienu raksturs, katrs no šī vēstule ir 156 00:08:18,360 --> 00:08:21,330 gatavojas pieprasīt vienu raksturs, viens baits atmiņas. 157 00:08:21,330 --> 00:08:26,230 Tātad, ja es varētu likt Lloyd manā masīvs kā šis es esmu diezgan labi iet, vai ne? 158 00:08:26,230 --> 00:08:28,870 Kas ir pazudis? 159 00:08:28,870 --> 00:08:31,840 >> Atcerieties, ka katrs string mēs strādājam ar in C beidzas ar slīpsvītru nulles, 160 00:08:31,840 --> 00:08:33,339 un mēs nevaram izlaist, ka šeit, vai nu. 161 00:08:33,339 --> 00:08:36,090 Mums ir nepieciešams atcelt vienu baitu atmiņas turēt, ka, lai mēs 162 00:08:36,090 --> 00:08:39,130 zināt, kad mūsu string ir beigusies. 163 00:08:39,130 --> 00:08:41,049 Tātad atkal šī vienošanās par to, kā lietas 164 00:08:41,049 --> 00:08:42,799 parādās atmiņas varenību būt mazliet izlases, 165 00:08:42,799 --> 00:08:44,870 bet tas patiesībā ir, kā lielākā daļa sistēmas ir paredzētas. 166 00:08:44,870 --> 00:08:48,330 Līnija tos uz sastāvēt četri, dēļ atkal 167 00:08:48,330 --> 00:08:50,080 ka mums nav nepieciešams nokļūt tieši tagad. 168 00:08:50,080 --> 00:08:53,060 Bet tas, tāpēc pietiek pateikt, ka Pēc šiem trim koda rindiņas, 169 00:08:53,060 --> 00:08:54,810 tas ir tas, ko atmiņa varētu izskatīties. 170 00:08:54,810 --> 00:08:58,930 Ja man vajag atmiņas vietas 4, 8, 12 un, lai noturētu savus datus, 171 00:08:58,930 --> 00:09:01,100 tas ir tas, ko mana atmiņa varētu izskatīties. 172 00:09:01,100 --> 00:09:04,062 >> Un tikai būt īpaši pedantiska šeit, kad 173 00:09:04,062 --> 00:09:06,020 mēs runājam par atmiņu adreses Mēs parasti 174 00:09:06,020 --> 00:09:08,390 darīt, izmantojot heksadecimālo apzīmējumus. 175 00:09:08,390 --> 00:09:12,030 Tātad, kāpēc nav mēs pārvērst visi šie no komata uz heksadecimālo notācija 176 00:09:12,030 --> 00:09:15,010 tikai tāpēc, ka tas ir vispār kā mēs atsaucamies uz atmiņu. 177 00:09:15,010 --> 00:09:17,880 Tā vietā ir no 0 līdz 19, kas mums ir, ir nulle 178 00:09:17,880 --> 00:09:20,340 x nulle caur nulles x1 trīs. 179 00:09:20,340 --> 00:09:23,790 Tie ir 20 baiti atmiņas, ka mēs ir vai mēs esam apskatot šo attēlu 180 00:09:23,790 --> 00:09:25,540 tieši te. 181 00:09:25,540 --> 00:09:29,310 >> Tātad visi, kas to teica, pieņemsim solis prom no atmiņas uz otru 182 00:09:29,310 --> 00:09:30,490 un atpakaļ uz norādes. 183 00:09:30,490 --> 00:09:32,420 Šeit ir svarīgākais lieta atcerēties 184 00:09:32,420 --> 00:09:34,070 kā mēs sākam strādāt ar norādes. 185 00:09:34,070 --> 00:09:36,314 Rādītājs nav nekas vairāk nekā adresi. 186 00:09:36,314 --> 00:09:38,230 Es saku vēlreiz, jo tas ir tik svarīgi, 187 00:09:38,230 --> 00:09:42,730 rādītājs nav nekas vairāk nekā adresi. 188 00:09:42,730 --> 00:09:47,760 Norādes ir adreses uz vietām atmiņā kur mainīgie dzīvo. 189 00:09:47,760 --> 00:09:52,590 Zinot, ka tas kļūst cerams mazliet vieglāk strādāt ar viņiem. 190 00:09:52,590 --> 00:09:54,550 Vēl viena lieta, ko es gribētu to darīt, ir, lai būtu sava veida 191 00:09:54,550 --> 00:09:58,510 diagrammu vizuāli pārstāv to, kas ir notiek ar dažādiem koda rindiņas. 192 00:09:58,510 --> 00:10:00,660 Un mēs to izdarītu pāris reizes pēc norādes, 193 00:10:00,660 --> 00:10:03,354 un tad, kad mēs runājam par dinamisku atmiņas sadali, kā arī. 194 00:10:03,354 --> 00:10:06,020 Tā kā es domāju, ka šie diagrammas var būt īpaši noderīga. 195 00:10:06,020 --> 00:10:09,540 >> Tātad, ja es saku, piemēram, int k manā kodu, kas notiek? 196 00:10:09,540 --> 00:10:12,524 Nu to, kas būtībā notiek, ir Es saņemu atmiņu atmatā par mani, 197 00:10:12,524 --> 00:10:14,690 bet man nav pat patīk domāju par to, piemēram, ka, es 198 00:10:14,690 --> 00:10:16,300 patīk domāt par to, kā kaste. 199 00:10:16,300 --> 00:10:20,090 Man ir kastē, un tas ir zaļā krāsā, jo I 200 00:10:20,090 --> 00:10:21,750 var likt veselus skaitļus zaļajās kastēs. 201 00:10:21,750 --> 00:10:23,666 Ja tas bija raksturs I varētu būt Blue Box. 202 00:10:23,666 --> 00:10:27,290 Bet es vienmēr saku, ja es esmu radot kastē, kas var būt veseli skaitļi 203 00:10:27,290 --> 00:10:28,950 ka kaste ir zaļā krāsā. 204 00:10:28,950 --> 00:10:33,020 Un es pastāvīgu marķieri un es rakstu k par pusi no tā. 205 00:10:33,020 --> 00:10:37,590 Tāpēc man ir kaste sauc k, kurā es varētu likt veseli skaitļi. 206 00:10:37,590 --> 00:10:41,070 Tātad, kad es saku int k, kas ir kas notiek manā galvā. 207 00:10:41,070 --> 00:10:43,140 Ja es saku k vienāds pieci, ko es daru? 208 00:10:43,140 --> 00:10:45,110 Nu, es esmu liekot piecus lodziņā, pa labi. 209 00:10:45,110 --> 00:10:48,670 Tas ir diezgan vienkārši, ja Es saku int k, izveidot kasti sauc k. 210 00:10:48,670 --> 00:10:52,040 Ja es saku k ir vienāds ar 5, nodot piecas lodziņā. 211 00:10:52,040 --> 00:10:53,865 Cerams, ka tas nav pārāk daudz lēciens. 212 00:10:53,865 --> 00:10:55,990 Lūk, kur lietas iet maz interesanti gan. 213 00:10:55,990 --> 00:11:02,590 Ja es saku int * pk, arī tad, ja man nav zināt, ko tas vienmēr nozīmē, 214 00:11:02,590 --> 00:11:06,150 Tas ir skaidri ieguvuši kaut ko darīt ar veselam skaitlim. 215 00:11:06,150 --> 00:11:08,211 Tāpēc es esmu gatavojas krāsu šī kaste zaļa-ish, 216 00:11:08,211 --> 00:11:10,210 Es zinu, tas ir got kaut darīt ar veselam skaitlim, 217 00:11:10,210 --> 00:11:13,400 bet tas nav vesels skaitlis pati, jo tas ir int zvaigzne. 218 00:11:13,400 --> 00:11:15,390 Tur ir kaut nedaudz atšķirīgs par to. 219 00:11:15,390 --> 00:11:17,620 Tātad vesels skaitlis ir iesaistīts, bet citādi tas ir 220 00:11:17,620 --> 00:11:19,830 ne pārāk atšķiras no ko mēs runājam. 221 00:11:19,830 --> 00:11:24,240 Tas ir kaste, tā ieguva etiķeti, tā mugurā etiķete PK, 222 00:11:24,240 --> 00:11:27,280 un tas spēj noturēt int zvaigznes, kāds tiem ir. 223 00:11:27,280 --> 00:11:29,894 Viņiem ir kaut ko darīt ar veseliem skaitļiem, ir skaidri. 224 00:11:29,894 --> 00:11:31,060 Lūk pēdējā rindā, lai gan. 225 00:11:31,060 --> 00:11:37,650 Ja es saku pk = & k, paga, kas tikko notika, vai ne? 226 00:11:37,650 --> 00:11:41,820 Tātad šis izlases numuru, šķietami nejauši numurs, tiek iemesta kastē tur. 227 00:11:41,820 --> 00:11:44,930 Viss, kas ir, ir PK izpaužas adresi k. 228 00:11:44,930 --> 00:11:52,867 Tāpēc es esmu uzlīmēšanu kur k dzīvo atmiņu, tā adrese, adrese tās baitu. 229 00:11:52,867 --> 00:11:55,200 Viss, ko es daru, ir es saku šī vērtība ir tas, ko es esmu gatavojas 230 00:11:55,200 --> 00:11:59,430 likt iekšā manā kastē, ko sauc pk. 231 00:11:59,430 --> 00:12:02,080 Un tāpēc, ka šīs lietas ir norādes, un tāpēc meklē 232 00:12:02,080 --> 00:12:04,955 pie virknes, piemēram, nulles x astoņi nulle c septiņi četri astoņi 233 00:12:04,955 --> 00:12:07,790 divi nulle ir iespējams nav ļoti nozīmīgs. 234 00:12:07,790 --> 00:12:12,390 Kad mēs vispār iztēloties norādes, mēs faktiski darīt kā norādes. 235 00:12:12,390 --> 00:12:17,000 Pk dod mums informāciju mums ir nepieciešams, lai atrastu k atmiņā. 236 00:12:17,000 --> 00:12:19,120 Tātad būtībā pk ir bultiņa tajā. 237 00:12:19,120 --> 00:12:21,670 Un, ja mēs staigājam garumu Šīs bultas, iedomājieties 238 00:12:21,670 --> 00:12:25,280 tas ir kaut kas jūs varat iet tālāk, ja mēs pastaigāties gar bultiņas, 239 00:12:25,280 --> 00:12:29,490 pašā galā šīs bultiņas, mēs atradīs vietu atmiņā 240 00:12:29,490 --> 00:12:31,390 kur k dzīvo. 241 00:12:31,390 --> 00:12:34,360 Un tas ir patiešām svarīgi jo, kad mēs zinām, kur k dzīvo, 242 00:12:34,360 --> 00:12:37,870 mēs varam sākt strādāt ar datiem iekšā šajā atmiņas vietā. 243 00:12:37,870 --> 00:12:40,780 Lai gan mēs esam nonākuši maziņš mazliet priekšā sevi tagad. 244 00:12:40,780 --> 00:12:42,240 >> Tātad, kas ir rādītājs? 245 00:12:42,240 --> 00:12:45,590 Rādītājs ir datu postenis, kura vērtība ir atmiņas adrese. 246 00:12:45,590 --> 00:12:49,740 Tas bija tas, ka nullei x astoņi nulle sīkumi notiek, ka bija atmiņas adrese. 247 00:12:49,740 --> 00:12:52,060 Tas bija vieta atmiņā. 248 00:12:52,060 --> 00:12:55,080 Un rādītāju veids apraksta veidu 249 00:12:55,080 --> 00:12:56,930 Datu jūs atradīsiet pie ka atmiņas adrese. 250 00:12:56,930 --> 00:12:58,810 Tātad tur ir int zvaigzne daļa taisnība. 251 00:12:58,810 --> 00:13:03,690 Ja man sekot ka bulta, tas ir gatavojas novest mani uz vietu. 252 00:13:03,690 --> 00:13:06,980 Un šajā vietā, ko es atradīs tur manā piemērā, 253 00:13:06,980 --> 00:13:08,240 ir zaļā krāsā kaste. 254 00:13:08,240 --> 00:13:12,650 Tas ir vesels skaitlis, tas ko es atradīs, ja es eju uz šo adresi. 255 00:13:12,650 --> 00:13:14,830 Datu tipam rādītājs apraksta, ko 256 00:13:14,830 --> 00:13:17,936 Jūs atradīsiet šajā atmiņas adresi. 257 00:13:17,936 --> 00:13:19,560 Tātad, šeit ir patiešām atdzist lieta though. 258 00:13:19,560 --> 00:13:25,090 Norādes ļauj mums nodot mainīgie starp funkcijām. 259 00:13:25,090 --> 00:13:28,520 Un faktiski iet mainīgie un nevis iet kopijas. 260 00:13:28,520 --> 00:13:32,879 Jo, ja mēs zinām, kur tieši atmiņā atrast mainīgo, 261 00:13:32,879 --> 00:13:35,670 mums nav nepieciešams veikt kopiju tā, mēs varam vienkārši doties uz šo vietu 262 00:13:35,670 --> 00:13:37,844 un strādāt ar šo mainīgo. 263 00:13:37,844 --> 00:13:40,260 Tātad būtībā norādes kārtošanas no padarīt datorvidi 264 00:13:40,260 --> 00:13:42,360 daudz vairāk kā reālajā pasaulē, labi. 265 00:13:42,360 --> 00:13:44,640 >> Tātad, šeit ir analoģija. 266 00:13:44,640 --> 00:13:48,080 Pieņemsim, ka man ir notebook, tiesības, un tas ir pilns ar piezīmēm. 267 00:13:48,080 --> 00:13:50,230 Un es gribētu, lai jūs to atjaunināt. 268 00:13:50,230 --> 00:13:53,960 Jums ir funkcija, kas atjauninājumus piezīmes, pa labi. 269 00:13:53,960 --> 00:13:56,390 Jo, kā mēs esam bijuši Līdz šim darba, ko 270 00:13:56,390 --> 00:14:02,370 notiek, ir jums prasīs manu notebook, jums iet uz veikalu kopiju, 271 00:14:02,370 --> 00:14:06,410 jūs veicat Xerox kopiju katra lapa notebook. 272 00:14:06,410 --> 00:14:09,790 Jūs atstāt manu notebook atpakaļ uz mana galda, kad esat pabeidzis, 273 00:14:09,790 --> 00:14:14,600 jums iet un izsvītrot lietas manā notebook kas ir novecojuši vai nepareizi, 274 00:14:14,600 --> 00:14:19,280 un tad jums iet atpakaļ uz man kaudze Xerox lapām 275 00:14:19,280 --> 00:14:22,850 kas ir reprodukcija no mana notebook ar izmaiņas, kas jūs esat, kas izgatavoti uz to. 276 00:14:22,850 --> 00:14:27,040 Un tajā brīdī, tas ir atkarīgs no manis, jo izsaucēja funkcijas, kā zvanītājam, 277 00:14:27,040 --> 00:14:30,582 izlemt veikt savas piezīmes un integrēt tos atpakaļ manā notebook. 278 00:14:30,582 --> 00:14:32,540 Tātad tur ir daudz soļiem iesaistīti šeit, pa labi. 279 00:14:32,540 --> 00:14:34,850 Tāpat tas nebūtu labāk ja es tikai saku, hey, vai varat 280 00:14:34,850 --> 00:14:38,370 mainīšu notebook man, rokas jums manu notebook, 281 00:14:38,370 --> 00:14:40,440 un jūs ņemt lietas un burtiski šķērsot tos 282 00:14:40,440 --> 00:14:42,810 un atjaunināt savas piezīmes manā notebook. 283 00:14:42,810 --> 00:14:45,140 Un tad dod man manu notebook atpakaļ. 284 00:14:45,140 --> 00:14:47,320 Tas ir sava veida, ko norādes ļauj mums darīt, 285 00:14:47,320 --> 00:14:51,320 tie padara šo vidi daudz vairāk patīk, kā mēs darbojamies realitātē. 286 00:14:51,320 --> 00:14:54,640 >> Viss tā ka taisnība ir kas rādītājs ir, parunāsim 287 00:14:54,640 --> 00:14:58,040 par to, kā norādes strādā C, un Kā mēs varam sākt strādāt ar viņiem. 288 00:14:58,040 --> 00:15:02,550 Tātad tur ir ļoti vienkāršs rādītājs C sauc null rādītāju. 289 00:15:02,550 --> 00:15:04,830 Nulles rādītājs norāda uz neko. 290 00:15:04,830 --> 00:15:08,310 Tas, iespējams, šķiet, tāpat kā tas ir faktiski nav ļoti noderīga lieta, 291 00:15:08,310 --> 00:15:10,500 bet kā mēs redzam nedaudz vēlāk, tas, 292 00:15:10,500 --> 00:15:15,410 ka šis null rādītājs eksistē patiesībā tiešām var būt parocīgs. 293 00:15:15,410 --> 00:15:19,090 Un, kad jūs izveidot rādītāju, un jums nav noteikt tā vērtību immediately- 294 00:15:19,090 --> 00:15:21,060 piemērs, kurā tā vērtība uzreiz 295 00:15:21,060 --> 00:15:25,401 būs pāris slaidus atpakaļ kur es teicu pk vienāds & K, 296 00:15:25,401 --> 00:15:28,740 pk izpaužas k adresi, kā mēs redzēsim, ko tas nozīmē, 297 00:15:28,740 --> 00:15:32,990 mēs redzēsim, kā ar kodu, kas shortly- ja mums nav noteikt tā vērtību uz kaut 298 00:15:32,990 --> 00:15:35,380 jēgpilna nekavējoties, Jums vajadzētu vienmēr 299 00:15:35,380 --> 00:15:37,480 iestatīt rādītāju, lai norādītu uz null. 300 00:15:37,480 --> 00:15:40,260 Jums vajadzētu iestatīt tā, lai norādītu uz neko. 301 00:15:40,260 --> 00:15:43,614 >> Tas ir ļoti atšķirīgi, nekā vienkārši atstājot vērtību, kā tas ir 302 00:15:43,614 --> 00:15:45,530 un pēc tam atzīst par rādītāju un tikai pieņemot 303 00:15:45,530 --> 00:15:48,042 tas ir spēkā, jo tas ir reti taisnība. 304 00:15:48,042 --> 00:15:50,000 Tātad jums vajadzētu vienmēr iestatīt vērtība rādītāju 305 00:15:50,000 --> 00:15:55,690 null, ja jums nav noteikt tā vērtību lai kaut ko nozīmīgu nekavējoties. 306 00:15:55,690 --> 00:15:59,090 Jūs varat pārbaudīt, vai rādītāju vērtības ir spēkā, izmantojot līdztiesības operatoru 307 00:15:59,090 --> 00:16:05,450 (==), Tāpat kā jūs salīdzināt jebkurš vesels skaitlis vērtības vai rakstzīmju vērtības, (==) 308 00:16:05,450 --> 00:16:06,320 arī. 309 00:16:06,320 --> 00:16:10,994 Tā ir īpaša veida konstante vērtība, ko varat izmantot, lai pārbaudītu. 310 00:16:10,994 --> 00:16:13,160 Tā, ka bija ļoti vienkāršs rādītājs, tad null rādītājs. 311 00:16:13,160 --> 00:16:15,320 Vēl viens veids, kā izveidot rādītājs ir iegūt 312 00:16:15,320 --> 00:16:18,240 adrese ir mainīgs jūs jau esat izveidojis, 313 00:16:18,240 --> 00:16:22,330 un jūs to izdarītu, izmantojot & operators adrese ieguve. 314 00:16:22,330 --> 00:16:26,720 Ko mēs jau esam redzējuši iepriekš Pirmajā diagramma piemēru es parādīja. 315 00:16:26,720 --> 00:16:31,450 Tātad, ja x ir mainīgais, kas mēs esam jau izveidots tipa skaitlim, 316 00:16:31,450 --> 00:16:35,110 tad & x kalpo par norādi uz veselam skaitlim. 317 00:16:35,110 --> 00:16:39,810 un x ir-atceros, un gatavojas iegūt adrese lieta pa labi. 318 00:16:39,810 --> 00:16:45,350 Un tā rādītājs ir tikai adrese, nekā & x kalpo par norādi uz veselam skaitlim 319 00:16:45,350 --> 00:16:48,560 kuru vērtība ir, ja atmiņas x dzīvē. 320 00:16:48,560 --> 00:16:50,460 Tas ir X adresi. 321 00:16:50,460 --> 00:16:53,296 Tātad, un x ir adrese x. 322 00:16:53,296 --> 00:16:55,670 Paņemsim šo vienu soli tālāk un izveidot savienojumu ar kaut ko 323 00:16:55,670 --> 00:16:58,380 Man norādīja uz iepriekšēju video. 324 00:16:58,380 --> 00:17:06,730 Ja arr ir masīvs dubultspēlē, tad & arr kvadrātiekava i ir rādītājs 325 00:17:06,730 --> 00:17:08,109 lai dubultā. 326 00:17:08,109 --> 00:17:08,970 LABI. 327 00:17:08,970 --> 00:17:12,160 Arr kvadrātiekava i, ja arr ir masīvs dubultspēlē, 328 00:17:12,160 --> 00:17:19,069 tad Arr kvadrātiekava i ir i-th elements šī masīva, 329 00:17:19,069 --> 00:17:29,270 un & Arr kvadrātiekava i ir kur atmiņas i-th elements ARR pastāv. 330 00:17:29,270 --> 00:17:31,790 >> Tātad, kāda ir saistība šeit? 331 00:17:31,790 --> 00:17:34,570 Bloki vārds, kas nozīmē Šī visa lieta, 332 00:17:34,570 --> 00:17:39,290 ir tā, ka masīva vārds ir faktiski pats rādītājs. 333 00:17:39,290 --> 00:17:41,170 Jūs esat strādājuši ar norādes visi kopā 334 00:17:41,170 --> 00:17:45,290 katru reizi, kad jūs esat izmantojis masīvu. 335 00:17:45,290 --> 00:17:49,090 Atcerieties, no piemēra uz mainīgo jomu, 336 00:17:49,090 --> 00:17:53,420 pie beigām video es iesniedzu piemērs, kur mums ir funkcija 337 00:17:53,420 --> 00:17:56,890 sauc komplekts int un funkcija sauc komplekts masīvs. 338 00:17:56,890 --> 00:18:00,490 Un jūsu uzdevums, lai noteiktu vai nav, vai kāda 339 00:18:00,490 --> 00:18:03,220 vērtības, kuras mēs izdrukā beigām, funkciju, 340 00:18:03,220 --> 00:18:05,960 beigās galvenās programmas. 341 00:18:05,960 --> 00:18:08,740 >> Ja jūs atceraties no šo piemēru vai, ja jūs esat noskatījos video, 342 00:18:08,740 --> 00:18:13,080 jūs zināt, ka tad, kad you- aicinājumu komplekts int efektīvi neko nedara. 343 00:18:13,080 --> 00:18:16,390 Bet aicinājums noteikt masīvs dara. 344 00:18:16,390 --> 00:18:19,280 Un es veida noklusēti kāpēc ka tas bija tajā laikā. 345 00:18:19,280 --> 00:18:22,363 Es tikai teicu, labi tas ir masīvs, tas ir īpašs, jūs zināt, tur ir iemesls. 346 00:18:22,363 --> 00:18:25,020 Iemesls ir tas, ka masīvs ir vārds patiešām ir tikai rādītājs, 347 00:18:25,020 --> 00:18:28,740 un tur ir šis īpašais kvadrātiekava sintakse ka 348 00:18:28,740 --> 00:18:30,510 padarīt lietas daudz nicer strādāt. 349 00:18:30,510 --> 00:18:34,410 Un viņi dara ideju par rādītāju daudz mazāk biedējoša, 350 00:18:34,410 --> 00:18:36,800 un tas ir iemesls, kāpēc viņi veida no uzrāda šādā veidā. 351 00:18:36,800 --> 00:18:38,600 Bet tiešām masīvi ir tikai norādes. 352 00:18:38,600 --> 00:18:41,580 Un tāpēc, kad mēs veicis izmaiņas masīva, 353 00:18:41,580 --> 00:18:44,880 kad mēs nodots masīvu kā parametru līdz funkcijai vai kā arguments 354 00:18:44,880 --> 00:18:50,110 līdz funkcijai saturs masīva faktiski mainīja gan callee 355 00:18:50,110 --> 00:18:51,160 un zvanītāju. 356 00:18:51,160 --> 00:18:55,846 Kas par katru cita veida mainīgais mēs redzējām nebija gadījums. 357 00:18:55,846 --> 00:18:58,970 Tātad tas ir tikai kaut kas jāpatur prātā, kad jūs strādājat ar norādes, 358 00:18:58,970 --> 00:19:01,610 ir tas, ka nosaukumam masīvs faktiski rādītājs 359 00:19:01,610 --> 00:19:04,750 uz minētā masīva pirmā elementa. 360 00:19:04,750 --> 00:19:08,930 >> Labi, tāpēc tagad mums ir visi šie fakti, pieņemsim glabāt notiek, vai ne. 361 00:19:08,930 --> 00:19:11,370 Kāpēc mums rūp ja kaut kas dzīvo. 362 00:19:11,370 --> 00:19:14,120 Nu kā jau teicu, tas ir diezgan noderīgi zināt, kur kaut kas dzīvo 363 00:19:14,120 --> 00:19:17,240 lai jūs varētu iet uz turieni un mainīt to. 364 00:19:17,240 --> 00:19:19,390 Strādāt ar to un faktiski ir lieta, kas jums 365 00:19:19,390 --> 00:19:23,710 vēlaties darīt, lai šo mainīgo stātos spēkā, un nav spēkā uz kādu tā kopiju. 366 00:19:23,710 --> 00:19:26,150 To sauc dereferencing. 367 00:19:26,150 --> 00:19:28,690 Mēs ejam uz atskaites un mēs mainītu vērtību tur. 368 00:19:28,690 --> 00:19:32,660 Tātad, ja mums ir rādītāju un to sauc pc, un tas norāda uz raksturu, 369 00:19:32,660 --> 00:19:40,610 tad mēs varam teikt * pc un * pc ir vārds, ko mēs atrast, ja mēs ejam 370 00:19:40,610 --> 00:19:42,910 uz adresi pc. 371 00:19:42,910 --> 00:19:47,860 Ko mēs atradīsim tur ir raksturs un * pc ir, kā mēs atsaucamies uz datiem, kas 372 00:19:47,860 --> 00:19:48,880 location. 373 00:19:48,880 --> 00:19:54,150 Tātad mēs varētu teikt kaut ko līdzīgu * pc = D vai kaut kas tamlīdzīgs, 374 00:19:54,150 --> 00:19:59,280 un tas nozīmē, ka neatkarīgi no bija atmiņas adrese pc, 375 00:19:59,280 --> 00:20:07,040 kāds raksturs bija agrāk tur, tagad ir D, ja mēs sakām * PC = D. 376 00:20:07,040 --> 00:20:10,090 >> Tātad, šeit mēs aiziet vēlreiz ar daži dīvaini C sīkumi, labi. 377 00:20:10,090 --> 00:20:14,560 Tāpēc mēs esam redzējuši * agrāk kā kaut kā daļa no datu tipa, 378 00:20:14,560 --> 00:20:17,160 un tagad tas tiek izmantots nedaudz citā kontekstā 379 00:20:17,160 --> 00:20:19,605 lai piekļūtu datiem par atrašanās vietu. 380 00:20:19,605 --> 00:20:22,480 Es zinu, tas ir mazliet mulsinoši un tas faktiski ir daļa no šī visa 381 00:20:22,480 --> 00:20:25,740 piemēram, kāpēc rādītāji ir šī mitoloģija ap tiem kā tik sarežģīta, 382 00:20:25,740 --> 00:20:28,250 ir sava veida sintakses problēmas, godīgi. 383 00:20:28,250 --> 00:20:31,810 Bet * izmanto gan kontekstā, gan kā daļu no tipa fragmentu, 384 00:20:31,810 --> 00:20:34,100 un mēs redzēsim nedaudz vēlāk kaut kas cits, too. 385 00:20:34,100 --> 00:20:36,490 Un tieši tagad ir dereference operators. 386 00:20:36,490 --> 00:20:38,760 Tā tas notiek ar atsauci, tas piekļūst datiem 387 00:20:38,760 --> 00:20:43,000 atrašanās vietā rādītāja, un ļauj manipulēt ar to būs. 388 00:20:43,000 --> 00:20:45,900 >> Tagad tas ir ļoti līdzīgs apmeklējot savu tuvāko, pa labi. 389 00:20:45,900 --> 00:20:48,710 Ja jūs zināt, kādas ir jūsu kaimiņš dzīvo, tu esi 390 00:20:48,710 --> 00:20:50,730 nav piekārtiem ar savu kaimiņu. 391 00:20:50,730 --> 00:20:53,510 Jūs zināt, jums gadās zina, kur viņi dzīvo, 392 00:20:53,510 --> 00:20:56,870 bet tas nenozīmē, ka, tikums, kam šīs zināšanas 393 00:20:56,870 --> 00:20:59,170 Jums ir saskarsme ar tiem. 394 00:20:59,170 --> 00:21:01,920 Ja vēlaties sadarboties ar viņiem, Jums ir jādodas uz savu māju, 395 00:21:01,920 --> 00:21:03,760 Jums jādodas uz to, kur viņi dzīvo. 396 00:21:03,760 --> 00:21:07,440 Un, kad jūs to izdarītu, tad jūs varat sazināties 397 00:21:07,440 --> 00:21:09,420 ar viņiem tāpat kā jūs vēlaties. 398 00:21:09,420 --> 00:21:12,730 Un līdzīgi ar mainīgajiem, Jums jādodas uz to adresi 399 00:21:12,730 --> 00:21:15,320 ja jūs vēlaties, lai mijiedarbotos tos, Jūs varat ne tikai zināt adresi. 400 00:21:15,320 --> 00:21:21,495 Un kā jums iet uz adresi, ir izmantot * The dereference operatoru. 401 00:21:21,495 --> 00:21:23,620 Ko jūs domājat notiek ja mēs mēģinātu dereference 402 00:21:23,620 --> 00:21:25,260 rādītājs, kura vērtība ir nulle? 403 00:21:25,260 --> 00:21:28,470 Atgādināt, ka null rādītājs norāda uz neko. 404 00:21:28,470 --> 00:21:34,110 Tātad, ja jūs mēģināt un dereference nekas vai dodieties uz adresi neko, 405 00:21:34,110 --> 00:21:36,800 ko jūs domājat notiek? 406 00:21:36,800 --> 00:21:39,630 Nu, ja jūs uzminējāt segmentācija vaina, tu būsi labi. 407 00:21:39,630 --> 00:21:41,390 Ja jūs mēģināt un dereference Null rādītājs, 408 00:21:41,390 --> 00:21:43,140 jūs cieš segmentāciju vaina. Bet pagaidiet, 409 00:21:43,140 --> 00:21:45,820 nebija es jums saku, ka Ja jūs neesat gatavojas 410 00:21:45,820 --> 00:21:49,220 noteikt savu vērtību jūsu rādītāju uz kaut ko nozīmīgu, 411 00:21:49,220 --> 00:21:51,000 Jums vajadzētu noteikt null? 412 00:21:51,000 --> 00:21:55,290 I did, un faktiski segmentācija vaina ir sava veida labu uzvedību. 413 00:21:55,290 --> 00:21:58,680 >> Vai jūs kādreiz esat pasludinājis mainīgo un ne uzreiz piešķir savu vērtību? 414 00:21:58,680 --> 00:22:02,680 Tātad jūs vienkārši pateikt int x; jums nav faktiski piešķirt to neko 415 00:22:02,680 --> 00:22:05,340 un tad vēlāk savu kodu, jūs izdrukāt vērtību x, 416 00:22:05,340 --> 00:22:07,650 kam vēl nav piešķirts to neko. 417 00:22:07,650 --> 00:22:10,370 Bieži jūs saņemsiet nulle, bet reizēm jūs 418 00:22:10,370 --> 00:22:15,000 varētu dabūt izlases numuru, un Jums nav ne jausmas, no kurienes tas nācis. 419 00:22:15,000 --> 00:22:16,750 Līdzīgi var lietas notikt ar norādes. 420 00:22:16,750 --> 00:22:20,110 Kad jūs atzīt rādītāju int * pk piemēram, 421 00:22:20,110 --> 00:22:23,490 un jums nav piešķirtu to vērtību, jums četri baiti atmiņas. 422 00:22:23,490 --> 00:22:25,950 Neatkarīgi četri baiti atmiņa sistēma var 423 00:22:25,950 --> 00:22:28,970 konstatē, ka ir zināma nozīmīgu vērtību. 424 00:22:28,970 --> 00:22:31,760 Un tur varēja būt kaut kas jau tur, ka 425 00:22:31,760 --> 00:22:34,190 vairs nav vajadzīgs vēl viens funkcija, tāpēc jums vienkārši ir 426 00:22:34,190 --> 00:22:35,900 kāds dati bija tur. 427 00:22:35,900 --> 00:22:40,570 >> Ko darīt, ja esat mēģinājis darīt dereference daži adrese ka tu don't- tur bija 428 00:22:40,570 --> 00:22:43,410 jau baiti un informācija tur, ka tagad jūsu rādītājs. 429 00:22:43,410 --> 00:22:47,470 Ja jūs mēģināt un dereference šo rādītāju, Jums varētu būt messing ar kādu atmiņu 430 00:22:47,470 --> 00:22:49,390 ka jūs nevēlējāties sajaukt ar to visu. 431 00:22:49,390 --> 00:22:51,639 Un patiesībā jūs varētu darīt kaut kas tiešām postoša, 432 00:22:51,639 --> 00:22:54,880 tāpat pauze citu programmu, vai salauzt citu funkciju, 433 00:22:54,880 --> 00:22:58,289 vai kaut ļaunprātīgu kas darīt Jūs nevēlējāties darīt vispār. 434 00:22:58,289 --> 00:23:00,080 Un tā, ka tāpēc tā ir tiešām laba ideja 435 00:23:00,080 --> 00:23:04,030 iestatīt norādes uz null, ja jums nav noteikti viņiem kaut ko jēgpilnu. 436 00:23:04,030 --> 00:23:06,760 Tas ir iespējams, labāk pie dienas beigās jūsu programmai 437 00:23:06,760 --> 00:23:09,840 crash tad tas jādara Kaut kas, kas skrūves augšu 438 00:23:09,840 --> 00:23:12,400 cita programma vai cita funkcija. 439 00:23:12,400 --> 00:23:15,207 Tas uzvedība ir iespējams, pat mazāk nekā ideāls tikai crashing. 440 00:23:15,207 --> 00:23:17,040 Un tā, ka tāpēc tā ir tiešām labs ieradums 441 00:23:17,040 --> 00:23:20,920 iekļūt noteikt jūsu norādes null, ja jums nav noteikt tos 442 00:23:20,920 --> 00:23:24,540 uz jēgpilnu vērtību nekavējoties, vērtība, ka jūs zināt, 443 00:23:24,540 --> 00:23:27,260 un ka jūs varat droši dereference. 444 00:23:27,260 --> 00:23:32,240 >> Tātad pieņemsim nāk atpakaļ tagad, un to apskatīt pie kopējā sintaksi situācijas. 445 00:23:32,240 --> 00:23:37,400 Ja es saku int * p ;, ko es esmu tikko darījis? 446 00:23:37,400 --> 00:23:38,530 Ko es esmu darījis, ir šis. 447 00:23:38,530 --> 00:23:43,290 Es zinu vērtība p ir adrese jo visas norādes ir tikai 448 00:23:43,290 --> 00:23:44,660 adreses. 449 00:23:44,660 --> 00:23:47,750 Es varu dereference p Izmantojot * operatoru. 450 00:23:47,750 --> 00:23:51,250 Šajā kontekstā šeit, pašā tops atgādināt * ir daļa no tipa. 451 00:23:51,250 --> 00:23:53,510 Int * ir datu tips. 452 00:23:53,510 --> 00:23:56,150 Bet es varu dereference p izmantojot * operatoru, 453 00:23:56,150 --> 00:24:01,897 un, ja es to daru, ja es eju uz šo adresi, ko es atrast šajā adresē? 454 00:24:01,897 --> 00:24:02,855 Es atradīs skaitli. 455 00:24:02,855 --> 00:24:05,910 Tātad int * p būtībā sakot, p ir adrese. 456 00:24:05,910 --> 00:24:09,500 Es varu dereference p un ja Es daru, es atrast skaitli 457 00:24:09,500 --> 00:24:11,920 šajā atmiņas vietā. 458 00:24:11,920 --> 00:24:14,260 >> Labi, tāpēc es teicu, ka bija vēl viens kaitinošas lieta ar zvaigznēm 459 00:24:14,260 --> 00:24:17,060 un lūk, kur tas kaitinošas lieta ar zvaigznēm ir. 460 00:24:17,060 --> 00:24:21,640 Vai jūs kādreiz esat mēģinājuši deklarēt vairākas mainīgie viena un tā paša tipa 461 00:24:21,640 --> 00:24:24,409 uz vienas līnijas ar kodu? 462 00:24:24,409 --> 00:24:27,700 Tātad uz otru, izlikties, ka līnija, kods Man tiešām ir tur zaļš 463 00:24:27,700 --> 00:24:29,366 nav tur un tas tikai norāda int x, y, z ;. 464 00:24:29,366 --> 00:24:31,634 465 00:24:31,634 --> 00:24:34,550 Ko tas varētu darīt, ir faktiski izveidot Trīs vesels mainīgie jums, 466 00:24:34,550 --> 00:24:36,930 vienu sauc x, viens sauc y, un viens sauc par z. 467 00:24:36,930 --> 00:24:41,510 Tas ir veids, kā to izdarīt bez ņemot sadalīt uz trim līnijām. 468 00:24:41,510 --> 00:24:43,890 >> Lūk, kur zvaigznes nokļūt kaitinošas atkal, lai gan, 469 00:24:43,890 --> 00:24:49,200 jo * ir faktiski daļa Gan tipa nosaukums un daļa 470 00:24:49,200 --> 00:24:50,320 no mainīgā nosaukums. 471 00:24:50,320 --> 00:24:56,430 Un tāpēc, ja es saku int * px, py, PZ, ko es faktiski saņemt ir rādītājs līdz veselam skaitlim 472 00:24:56,430 --> 00:25:01,650 sauc px un divi veseli skaitļi, py un pz. 473 00:25:01,650 --> 00:25:04,950 Un tas ir iespējams, nav ko mēs gribam, ka tas nav labi. 474 00:25:04,950 --> 00:25:09,290 >> Tātad, ja es gribu, lai izveidotu vairākus norādes uz vienas līnijas, un tā paša tipa, 475 00:25:09,290 --> 00:25:12,140 un zvaigznes, ko es tiešām ir nepieciešams to darīt, ir teikt int * gadā, * pb, * gab. 476 00:25:12,140 --> 00:25:17,330 477 00:25:17,330 --> 00:25:20,300 Tagad to tikko teica, ka un tagad stāsta jums šo, 478 00:25:20,300 --> 00:25:22,170 jūs, iespējams, nekad to izdarītu. 479 00:25:22,170 --> 00:25:25,170 Un tas ir iespējams, ir laba lieta godīgi, tāpēc, ka jūs varētu nejauši 480 00:25:25,170 --> 00:25:26,544 izlaist zvaigzne, kaut kas tamlīdzīgs. 481 00:25:26,544 --> 00:25:29,290 Tas ir iespējams, vislabāk varbūt deklarēt norādes uz atsevišķām pozīcijām, 482 00:25:29,290 --> 00:25:31,373 bet tas ir tikai vēl viens no tiem, kaitinošas sintakse 483 00:25:31,373 --> 00:25:35,310 lietas ar zvaigznēm, kas padara norādes tik grūti strādāt. 484 00:25:35,310 --> 00:25:39,480 Jo tas ir tikai tas sintaktisko haoss jums ir jāstrādā ar. 485 00:25:39,480 --> 00:25:41,600 Ar praksē tas patiešām kļūst par otro dabu. 486 00:25:41,600 --> 00:25:45,410 Es joprojām kļūdīties ar to vēl pēc plānošanu 10 gadus, 487 00:25:45,410 --> 00:25:49,630 tāpēc nebēdā, ja kaut kas notiek jums, tas ir diezgan izplatīta godīgi. 488 00:25:49,630 --> 00:25:52,850 Tas ir tiešām sava veida plaisāt no sintaksi. 489 00:25:52,850 --> 00:25:54,900 >> Labi, tāpēc es veida apsolīju ka mēs varētu pārskatīt 490 00:25:54,900 --> 00:25:59,370 jēdziens, cik liels ir virkne. 491 00:25:59,370 --> 00:26:02,750 Nu, ja es tev teicu, ka string, mēs esam patiesi veida 492 00:26:02,750 --> 00:26:04,140 ir atrodas uz jums visu laiku. 493 00:26:04,140 --> 00:26:06,181 Nav datu tipu sauc virkne, un faktiski es 494 00:26:06,181 --> 00:26:09,730 minēts šis vienā no mūsu Agrākais video par datu tipiem, 495 00:26:09,730 --> 00:26:13,820 ka string bija datu tips, kas tika izveidots, lai jums CS50.h. 496 00:26:13,820 --> 00:26:17,050 Jums ir # Ietvert CS50.h, lai izmantotu to. 497 00:26:17,050 --> 00:26:19,250 >> Nu string ir patiešām vienkārši alias kaut ko 498 00:26:19,250 --> 00:26:23,600 sauc char * A rādītāju uz raksturu. 499 00:26:23,600 --> 00:26:26,010 Nu norādes, atgādināt, ir tikai adreses. 500 00:26:26,010 --> 00:26:28,780 Tātad, kas ir lielums no virknes baitu? 501 00:26:28,780 --> 00:26:29,796 Nu tas ir četras vai astoņas. 502 00:26:29,796 --> 00:26:32,170 Un iemesls, kāpēc es saku četras vai astoņi ir tāpēc, ka tā faktiski ir 503 00:26:32,170 --> 00:26:36,730 ir atkarīgs no sistēmas, ja jūs izmantojat CS50 ide, char * ir lielums char 504 00:26:36,730 --> 00:26:39,340 * Ir astoņi, tas ir 64 bitu sistēma. 505 00:26:39,340 --> 00:26:43,850 Katru adrese atmiņā ir 64 bitus garš. 506 00:26:43,850 --> 00:26:48,270 Ja jūs izmantojat CS50 ierīces vai izmantojot jebkuru 32 bitu mašīna, 507 00:26:48,270 --> 00:26:51,640 un jūs esat dzirdējuši šo terminu 32 bitu mašīna, kas ir 32 bitu mašīna? 508 00:26:51,640 --> 00:26:56,090 Nu tas tikai nozīmē, ka katrs adrese atmiņā ir 32 bitus garš. 509 00:26:56,090 --> 00:26:59,140 Un tā 32 biti ir četri baiti. 510 00:26:59,140 --> 00:27:02,710 Tātad char * ir četras vai astoņas baiti atkarībā no jūsu sistēmā. 511 00:27:02,710 --> 00:27:06,100 Un tiešām jebkādus datu tipi, un rādītājs uz jebkuru datiem 512 00:27:06,100 --> 00:27:12,030 rakstīt, jo visas norādes ir tikai adreses, ir četras vai astoņas baiti. 513 00:27:12,030 --> 00:27:14,030 Tātad pieņemsim pārskatīt šo shēma un pieņemsim noslēgt 514 00:27:14,030 --> 00:27:18,130 Šis video ar nelielu izmantošanu šeit. 515 00:27:18,130 --> 00:27:21,600 Tātad, šeit ir diagramma mēs left off ar pašā sākumā no video. 516 00:27:21,600 --> 00:27:23,110 Tātad, kas notiek tagad, ja es saku * PK = 35? 517 00:27:23,110 --> 00:27:26,370 518 00:27:26,370 --> 00:27:30,530 Tātad, ko tas nozīmē, kad es saku, * pk = 35? 519 00:27:30,530 --> 00:27:32,420 Veikt sekundi. 520 00:27:32,420 --> 00:27:34,990 * pk. 521 00:27:34,990 --> 00:27:39,890 Šajā kontekstā šeit, * ir dereference operators. 522 00:27:39,890 --> 00:27:42,110 Tātad, kad dereference operators tiek izmantots, 523 00:27:42,110 --> 00:27:48,520 mēs ejam uz adresi norādīja uz PK, un mēs mainīt to, ko mēs redzam. 524 00:27:48,520 --> 00:27:55,270 Tātad * pk = 35 efektīvi vai tas uz attēla. 525 00:27:55,270 --> 00:27:58,110 Tātad, tas ir būtībā sintaktiski identisks sacījis k = 35. 526 00:27:58,110 --> 00:28:00,740 527 00:28:00,740 --> 00:28:01,930 >> Vēl vienu. 528 00:28:01,930 --> 00:28:05,510 Ja es saku int m, es izveidot jauns mainīgais sauc m. 529 00:28:05,510 --> 00:28:08,260 Jauna kaste, tā ir zaļa kaste, jo tas gatavojas rīkot vesels skaitlis, 530 00:28:08,260 --> 00:28:09,840 un tas ir marķēti m. 531 00:28:09,840 --> 00:28:14,960 Ja es saku m = 4, es ielieciet skaitlis vērā, ka kastē. 532 00:28:14,960 --> 00:28:20,290 Ja teiksim pk = & m, kā tas šis diagramma pārmaiņas? 533 00:28:20,290 --> 00:28:28,760 Pk = & m, vai jūs atceraties to, ko & Operators dara vai sauc? 534 00:28:28,760 --> 00:28:34,430 Atcerieties, ka & kādu mainīgā nosaukums ir adrese mainīgā nosaukuma. 535 00:28:34,430 --> 00:28:38,740 Tātad, ko mēs esam sakot, ir pk izpaužas adresi m. 536 00:28:38,740 --> 00:28:42,010 Un tik efektīvi, kas notiek diagramma ir tas, ka pk vairs punktus 537 00:28:42,010 --> 00:28:46,420 k, taču norāda uz m. 538 00:28:46,420 --> 00:28:48,470 >> Atkal norādes ir ļoti grūts strādāt ar 539 00:28:48,470 --> 00:28:50,620 un tās veic daudz prakse, bet gan tāpēc, ka 540 00:28:50,620 --> 00:28:54,150 par to spēju, lai ļautu jums nodot datus starp funkcijām 541 00:28:54,150 --> 00:28:56,945 un patiesībā ir tie, izmaiņas stājas spēkā, 542 00:28:56,945 --> 00:28:58,820 iegūt savu galvu apkārt ir ļoti svarīgi. 543 00:28:58,820 --> 00:29:02,590 Tas, iespējams, ir vissarežģītākais temats mēs apspriest CS50, 544 00:29:02,590 --> 00:29:05,910 bet vērtība, kas tevi nokļūt izmantot norādes 545 00:29:05,910 --> 00:29:09,200 tālu pārsniedz komplikācijas kas nāk no mācīšanās viņiem. 546 00:29:09,200 --> 00:29:12,690 Tāpēc es vēlos jums labāko luck iepazīstot norādes. 547 00:29:12,690 --> 00:29:15,760 Es esmu Doug Lloyd, tas ir CS50. 548 00:29:15,760 --> 00:29:17,447