1 00:00:00,000 --> 00:00:06,030 >> [Мусиц плаиинг] 2 00:00:06,030 --> 00:00:08,390 >> Даг Ллоид: показивачи, ту смо. 3 00:00:08,390 --> 00:00:11,080 Ово ће вероватно бити најтеже теме 4 00:00:11,080 --> 00:00:12,840 да говоримо о у ЦС50. 5 00:00:12,840 --> 00:00:15,060 А ако сте прочитали ништа о тројкама 6 00:00:15,060 --> 00:00:19,080 пре него што можда мало застрашивање иде у овај видео. 7 00:00:19,080 --> 00:00:21,260 Истина је показивачи Да ли дозвољавате могућност 8 00:00:21,260 --> 00:00:23,740 да можда зезнути гадно кад си 9 00:00:23,740 --> 00:00:27,450 рад са варијабли, и података, и изазива ваш програм да се сруши. 10 00:00:27,450 --> 00:00:30,490 Али они у ствари стварно корисно и они нас заиста одличан начин омогућити 11 00:00:30,490 --> 00:00:33,340 да прође податке назад и назад између функција, 12 00:00:33,340 --> 00:00:35,490 да смо иначе не можемо да урадимо. 13 00:00:35,490 --> 00:00:37,750 >> И оно што стварно желите да урадите овде је воз 14 00:00:37,750 --> 00:00:41,060 да имаш добар показивач дисциплину, тако које можете користити савете ефикасно 15 00:00:41,060 --> 00:00:43,850 да ваши програми који много боље. 16 00:00:43,850 --> 00:00:48,220 Као што сам рекао показивачи нам дати другачији начин да се прође података између функција. 17 00:00:48,220 --> 00:00:50,270 Сада, ако се сећате из један ранији видео када 18 00:00:50,270 --> 00:00:53,720 причали смо о променљива обим, поменуо сам 19 00:00:53,720 --> 00:01:00,610 да су сви подаци које смо проћи између Функције у Ц доноси вредност. 20 00:01:00,610 --> 00:01:03,070 И не могу да користе да термин, шта сам тамо мислио 21 00:01:03,070 --> 00:01:07,170 је да смо пролазе копије података. 22 00:01:07,170 --> 00:01:12,252 Када смо проћи променљиву у функцији, Ми заправо не пролази променљиву 23 00:01:12,252 --> 00:01:13,210 функцији, зар не? 24 00:01:13,210 --> 00:01:17,670 Пролазимо копију да су подаци у функцији. 25 00:01:17,670 --> 00:01:20,760 Функција ради оно што хоће а обрачунава неку вредност, 26 00:01:20,760 --> 00:01:23,180 и можда ћемо користити тај вредности када га враћа. 27 00:01:23,180 --> 00:01:26,700 >> Био је један изузетак ово правило о положеном по вредности, 28 00:01:26,700 --> 00:01:31,210 па ћемо се вратити на оно што је је мало касније у овом видеу. 29 00:01:31,210 --> 00:01:34,880 Ако користимо уместо савете употребе варијабли, 30 00:01:34,880 --> 00:01:38,180 или уместо променљиве сами или копије варијабли, 31 00:01:38,180 --> 00:01:43,790 сада можемо проћи променљиве око између функција на другачији начин. 32 00:01:43,790 --> 00:01:46,550 То значи да ако направимо промена у једне функције, 33 00:01:46,550 --> 00:01:49,827 та промена ће заправо узети утицати у другачију функцију. 34 00:01:49,827 --> 00:01:52,160 Опет, то је нешто што нисмо могли да урадимо раније, 35 00:01:52,160 --> 00:01:56,979 а ако сте икада покушали да мењате вредност две променљиве у функцији, 36 00:01:56,979 --> 00:01:59,270 сте приметили овај проблем врста ситне, зар не? 37 00:01:59,270 --> 00:02:04,340 >> Ако желимо да заменимо Кс и И, и ми проследите их на функцију која се зове замена, 38 00:02:04,340 --> 00:02:08,680 унутар функције замијенити променљиве уради размену вредности. 39 00:02:08,680 --> 00:02:12,600 Један постаје два, два постаје један, али ми не стварно 40 00:02:12,600 --> 00:02:16,890 мења ништа у оригиналу функција, у саговорником. 41 00:02:16,890 --> 00:02:19,550 Зато што не можемо, ми смо само рад са копијама њима. 42 00:02:19,550 --> 00:02:24,760 Са показивачима Иако, можемо у ствари пролазе Кс и И у функцији. 43 00:02:24,760 --> 00:02:26,960 Та функција може да уради нешто са њима. 44 00:02:26,960 --> 00:02:29,250 И те променљиве вредности заправо може променити. 45 00:02:29,250 --> 00:02:33,710 Дакле, то је сасвим промена наша способност да радимо са подацима. 46 00:02:33,710 --> 00:02:36,100 >> Пре него што зароните у показивачи, мислим да је вредно 47 00:02:36,100 --> 00:02:38,580 узимање неколико минута на вратимо на основе овде. 48 00:02:38,580 --> 00:02:41,000 И да погледамо како компјутерске меморије радови 49 00:02:41,000 --> 00:02:45,340 јер ова два предмета иду да заправо бити прилично међусобно повезани. 50 00:02:45,340 --> 00:02:48,480 Као што вероватно знате, на вашем рачунарском систему 51 00:02:48,480 --> 00:02:51,310 имате хард диск или можда ССД диск, 52 00:02:51,310 --> 00:02:54,430 нека врста складишта филе лоцатион. 53 00:02:54,430 --> 00:02:57,950 Обично је негдје у насеље 250 гигабајта 54 00:02:57,950 --> 00:02:59,810 да можда неколико терабајта сада. 55 00:02:59,810 --> 00:03:02,270 И то је место где све своје фајлова на крају ливе, 56 00:03:02,270 --> 00:03:04,870 чак и када је затворен рачунар искључен, можете га поново укључите 57 00:03:04,870 --> 00:03:09,190 и наћи ћеш ти фајлови постоје опет када поново покренете систем. 58 00:03:09,190 --> 00:03:14,820 Али дискова, као хард диск, су ХДД или ССД диск, ССД, 59 00:03:14,820 --> 00:03:16,050 само складишни простор. 60 00:03:16,050 --> 00:03:20,400 >> Ми заправо не може ништа са подаци који се у хард диску, 61 00:03:20,400 --> 00:03:22,080 или солид стате уређајем. 62 00:03:22,080 --> 00:03:24,950 Да би се заиста променити података или преместите га около, 63 00:03:24,950 --> 00:03:28,800 морамо да га преселе у РАМ меморија директног приступа. 64 00:03:28,800 --> 00:03:31,170 Сада РАМ-а, имате много мање у рачунару. 65 00:03:31,170 --> 00:03:34,185 Можете имати негде у насеље 512 мегабајта 66 00:03:34,185 --> 00:03:38,850 ако имате старији рачунар, да можда два, четири, осам, 16, 67 00:03:38,850 --> 00:03:41,820 можда чак и мало више гигабајта РАМ-а. 68 00:03:41,820 --> 00:03:46,390 Дакле, то је много мањи, али то је где су сви испарљивих података постоји. 69 00:03:46,390 --> 00:03:48,270 То је место где можемо да променимо ствари. 70 00:03:48,270 --> 00:03:53,350 Али, када се окренемо наше рачунар, све податке у РАМ је уништен. 71 00:03:53,350 --> 00:03:57,150 >> Зато морамо да имамо хард диск за трајнији локацији тога, 72 00:03:57,150 --> 00:03:59,720 тако да Он постоји било би бити стварно лоше ако сваки пут ми 73 00:03:59,720 --> 00:04:03,310 се наше рачунар, сваки фајл у нашем систему је уништено. 74 00:04:03,310 --> 00:04:05,600 Тако радимо унутар РАМ-а. 75 00:04:05,600 --> 00:04:09,210 И сваки пут када говоримо о меморија, прилично, у ЦС50, 76 00:04:09,210 --> 00:04:15,080 говоримо о РАМ-а, а не хард диск. 77 00:04:15,080 --> 00:04:18,657 >> Дакле, када се ствари у меморију, заузима одређену количину простора. 78 00:04:18,657 --> 00:04:20,740 Све врсте података које смо радили са 79 00:04:20,740 --> 00:04:23,480 заузимају другачији количине простора у РАМ. 80 00:04:23,480 --> 00:04:27,600 Дакле, сваки пут када направите цео вариабле, четири бајта меморије 81 00:04:27,600 --> 00:04:30,750 се издвојила у РАМ тако да може да ради са тим цео број. 82 00:04:30,750 --> 00:04:34,260 Можете прогласи цео број, промените га, га доделити 83 00:04:34,260 --> 00:04:36,700 на вредност 10 повећаваног са једним, тако даље и тако даље. 84 00:04:36,700 --> 00:04:39,440 Све што треба да се деси у РАМ и добићете четири бајта 85 00:04:39,440 --> 00:04:42,550 за рад са за сваки цео број који сте креирали. 86 00:04:42,550 --> 00:04:45,410 >> Свака вам знак створити добија један бајт. 87 00:04:45,410 --> 00:04:48,160 То је само колико простора има потребно да сачувате карактер. 88 00:04:48,160 --> 00:04:51,310 Сваки пловак, прави број, добија четири бајта 89 00:04:51,310 --> 00:04:53,390 осим ако је дупли прецизност флоатинг поинт 90 00:04:53,390 --> 00:04:56,510 број, који вам омогућава да имају прецизније или више бројева 91 00:04:56,510 --> 00:04:59,300 после децималног зареза без губитка прецизности, 92 00:04:59,300 --> 00:05:01,820 који заузимају осам бајтова меморије. 93 00:05:01,820 --> 00:05:06,730 Лонг чезне, стварно велики целих, Такође заузимају осам бајтова меморије. 94 00:05:06,730 --> 00:05:09,000 Колико бајтова меморије Не Жице заузимају? 95 00:05:09,000 --> 00:05:12,990 Па хајде да стави иглу у том питању за сада, али ћемо се вратити на то. 96 00:05:12,990 --> 00:05:17,350 >> Дакле, вратимо се на ову идеју меморије као велики низ бајтова величине ћелија. 97 00:05:17,350 --> 00:05:20,871 То је заиста све што је, то је само огроман број ћелија, 98 00:05:20,871 --> 00:05:23,370 као и сваки други низ који сте упознати са и види, 99 00:05:23,370 --> 00:05:26,430 осим сваког елемента је један бајт гола. 100 00:05:26,430 --> 00:05:30,030 И баш као низ, сваки елемент има адресу. 101 00:05:30,030 --> 00:05:32,120 Сваки елемент низа има индекс, и ми 102 00:05:32,120 --> 00:05:36,302 могу користити тај индекс да уради тзв директног приступа на низ. 103 00:05:36,302 --> 00:05:38,510 Ми не морамо да се крећу од почетак низа, 104 00:05:38,510 --> 00:05:40,569 Посматрајте кроз сваки један елемент тога, 105 00:05:40,569 --> 00:05:41,860 да пронађу оно што тражите. 106 00:05:41,860 --> 00:05:45,790 Можемо само рећи, хоћу да се до 15. елеменат или елеменат 100.. 107 00:05:45,790 --> 00:05:49,930 И можете само да прође у том броју и добити вредност коју тражите. 108 00:05:49,930 --> 00:05:54,460 >> Слично сваки локација у меморији има адресу. 109 00:05:54,460 --> 00:05:57,320 Дакле, ваше сећање можда изгледа отприлике овако. 110 00:05:57,320 --> 00:06:01,420 Ево мали комад меморија, ово је 20 бајтова меморије. 111 00:06:01,420 --> 00:06:04,060 Првих 20 бајтова јер је мој обраћа на дну 112 00:06:04,060 --> 00:06:08,890 су 0, 1, 2, 3, и тако на све путу до 19 година. 113 00:06:08,890 --> 00:06:13,190 И када прогласити променљиве и када почнем да радим са њима, 114 00:06:13,190 --> 00:06:15,470 Систем ће се поставити осим мало простора за мене 115 00:06:15,470 --> 00:06:17,595 У овом меморије за рад са мојим варијабли. 116 00:06:17,595 --> 00:06:21,610 Дакле, могло би се рећи, цхар ц једнако капитал Х. и шта ће се десити? 117 00:06:21,610 --> 00:06:23,880 Па систем ће се издвојено за мене један бајт. 118 00:06:23,880 --> 00:06:27,870 У овом случају то је изабрао бајтова више четири, бајт на адреси четири, 119 00:06:27,870 --> 00:06:31,310 и то ће чувања резултата Писмо капитал Х у ту за мене. 120 00:06:31,310 --> 00:06:34,350 Ако сам тада рекао инт брзину ограничење једнако 65, то је 121 00:06:34,350 --> 00:06:36,806 да издвоји четири бајтова меморије за мене. 122 00:06:36,806 --> 00:06:39,180 И то ће третирати оне четири бајта као једну јединицу 123 00:06:39,180 --> 00:06:41,305 јер оно што радимо витх је цео број овде. 124 00:06:41,305 --> 00:06:44,350 И то ће да сачувате 65 унутра. 125 00:06:44,350 --> 00:06:47,000 >> Сада већ сам некако Говорим ти мало лаж, 126 00:06:47,000 --> 00:06:50,150 у праву, јер знамо да рачунари раде у бинарном. 127 00:06:50,150 --> 00:06:53,100 Они не разумеју нужно шта је капитал Х 128 00:06:53,100 --> 00:06:57,110 или шта је 65, само су разумеју бинарне, нула и јединица. 129 00:06:57,110 --> 00:06:59,000 И тако заправо оно што смо складиштење тамо 130 00:06:59,000 --> 00:07:03,450 није слово Х и број 65, туку бинарни прикази 131 00:07:03,450 --> 00:07:06,980 него, што изгледам мало нешто овако. 132 00:07:06,980 --> 00:07:10,360 А нарочито у контекст интегер променљиве, 133 00:07:10,360 --> 00:07:13,559 то неће само испљунути, то неће да се третира као један четири 134 00:07:13,559 --> 00:07:15,350 бајтова комад нужно, то заправо догађа 135 00:07:15,350 --> 00:07:19,570 да га третирају као један бајт четири комадића, што може да изгледа отприлике овако. 136 00:07:19,570 --> 00:07:22,424 А ни то није потпуно тачно било, 137 00:07:22,424 --> 00:07:24,840 због нечега што се зове биг ендиан, која нисмо 138 00:07:24,840 --> 00:07:26,965 ће добити у, али Ако сте радознали о, 139 00:07:26,965 --> 00:07:29,030 можете да прочитате горе на мало и велики биг ендиан. 140 00:07:29,030 --> 00:07:31,640 Али због овог аргумента, због овог видеа, 141 00:07:31,640 --> 00:07:34,860 хајде да претпоставимо да је, Чињеница, како би број 65 142 00:07:34,860 --> 00:07:36,970 бити заступљена у меморија на сваком систему, 143 00:07:36,970 --> 00:07:38,850 мада то није сасвим тачно. 144 00:07:38,850 --> 00:07:41,700 >> Али хајде да ствари само да ослободити од свих бинарних у потпуности, 145 00:07:41,700 --> 00:07:44,460 и само размишља Х и 65, то је много лакше 146 00:07:44,460 --> 00:07:47,900 да размишљају о томе као да као људско биће. 147 00:07:47,900 --> 00:07:51,420 У реду, тако да се чини можда мало случајно да И'ве- мој систем 148 00:07:51,420 --> 00:07:55,130 није ми бајтова 5, 6, 7, и 8 да сачувате цео. 149 00:07:55,130 --> 00:07:58,580 Постоји разлог за то, такође, што нећемо ући одмах, али довољно 150 00:07:58,580 --> 00:08:00,496 је рећи да оно што рачунар ради овде 151 00:08:00,496 --> 00:08:02,810 је вероватно добар потез на свом делу. 152 00:08:02,810 --> 00:08:06,020 Да не ми меморију која је нужно бацк то бацк. 153 00:08:06,020 --> 00:08:10,490 Иако ће то учинити сада ако желим да се још један низ, 154 00:08:10,490 --> 00:08:13,080 зове презиме, и ја желим ставити Лојд тамо. 155 00:08:13,080 --> 00:08:18,360 Ја ћу морати да стане један карактер, свако писмо које је 156 00:08:18,360 --> 00:08:21,330 ће захтевати један карактер, један бајт меморије. 157 00:08:21,330 --> 00:08:26,230 Дакле, ако сам могао ставити Ллоид у мом низу овако сам прилично добро да иде, зар не? 158 00:08:26,230 --> 00:08:28,870 Шта недостаје? 159 00:08:28,870 --> 00:08:31,840 >> Запамтите да сваки низ радимо са у Ц завршава са обрнуте косе црте нула, 160 00:08:31,840 --> 00:08:33,339 и ми не можемо да изоставити овде, такође. 161 00:08:33,339 --> 00:08:36,090 Морамо да издвоји један бајт меморије да одржи тако смо 162 00:08:36,090 --> 00:08:39,130 знам када је наш низ заврши. 163 00:08:39,130 --> 00:08:41,049 Дакле, да поновим овај аранжман од тога како ствари 164 00:08:41,049 --> 00:08:42,799 налазе у меморији моћи бити мало случајан, 165 00:08:42,799 --> 00:08:44,870 али то је заправо како већина системи су дизајнирани. 166 00:08:44,870 --> 00:08:48,330 Да бисте их построје на умно од четири, опет из разлога 167 00:08:48,330 --> 00:08:50,080 да не треба да ући сада. 168 00:08:50,080 --> 00:08:53,060 Али ово, па сам га довољно рећи да после ове три линије кода, 169 00:08:53,060 --> 00:08:54,810 то је оно што меморија може да изгледа. 170 00:08:54,810 --> 00:08:58,930 Ако треба меморијских локација 4, 8, 12 и држати своје податке, 171 00:08:58,930 --> 00:09:01,100 то је оно што ме сећање може да изгледа. 172 00:09:01,100 --> 00:09:04,062 >> И само бити посебно педантан овде, када 173 00:09:04,062 --> 00:09:06,020 говоримо о меморији Обично адресе 174 00:09:06,020 --> 00:09:08,390 учинити помоћу хексадецималне ознаке. 175 00:09:08,390 --> 00:09:12,030 Па зашто не бисмо претворити све од њих од децимале до хексадецималном 176 00:09:12,030 --> 00:09:15,010 само зато што је то генерално како смо се односе на меморију. 177 00:09:15,010 --> 00:09:17,880 Дакле, уместо да буде 0 путем 19, оно што имамо је нула 178 00:09:17,880 --> 00:09:20,340 к нула нула к1 кроз три. 179 00:09:20,340 --> 00:09:23,790 То су 20 бајтова меморије које смо су или гледамо на овој слици 180 00:09:23,790 --> 00:09:25,540 баш овде. 181 00:09:25,540 --> 00:09:29,310 >> Дакле, све то што је рекао, идемо корак даље од меморије за секунду 182 00:09:29,310 --> 00:09:30,490 и натраг у тројкама. 183 00:09:30,490 --> 00:09:32,420 Овде је најважније ствар коју треба запамтити 184 00:09:32,420 --> 00:09:34,070 као што почнете да радите са показивачима. 185 00:09:34,070 --> 00:09:36,314 Показивач није ништа више од адресе. 186 00:09:36,314 --> 00:09:38,230 Ја ћу поново, јер кажу је толико важно, 187 00:09:38,230 --> 00:09:42,730 показивач није ништа више од адресе. 188 00:09:42,730 --> 00:09:47,760 Показивачи су адресе на локације у знак сећања где променљиве живе. 189 00:09:47,760 --> 00:09:52,590 Знајући да је надамо се постаје мало лакше радити са њима. 190 00:09:52,590 --> 00:09:54,550 Још једна ствар коју волим да урадите је да некако имам 191 00:09:54,550 --> 00:09:58,510 дијаграма визуелно представља оно што је догађа са различитим линија кода. 192 00:09:58,510 --> 00:10:00,660 И ми ћемо урадити пар пута у тројкама, 193 00:10:00,660 --> 00:10:03,354 и када говоримо о динамички алокација меморије као добро. 194 00:10:03,354 --> 00:10:06,020 Зато што мислим да ови дијаграми може бити посебно корисно. 195 00:10:06,020 --> 00:10:09,540 >> Дакле, ако кажем на пример, инт у мом коду, шта се дешава? 196 00:10:09,540 --> 00:10:12,524 Па шта се дешава у основи се Идем меморије издвајају за мене, 197 00:10:12,524 --> 00:10:14,690 али ја ни не волим да размисли о томе тако, ја 198 00:10:14,690 --> 00:10:16,300 Волим да мислим о томе као кутија. 199 00:10:16,300 --> 00:10:20,090 Имам кутију и то је зелене боје јер ја 200 00:10:20,090 --> 00:10:21,750 може ставити целих бројева у зеленим кутијама. 201 00:10:21,750 --> 00:10:23,666 Ако је лик сам можда има плаву кутију. 202 00:10:23,666 --> 00:10:27,290 Али, ја увек кажем, ако сам стварање кутија која може да држи цели бројеви 203 00:10:27,290 --> 00:10:28,950 та кутија је зелене боје. 204 00:10:28,950 --> 00:10:33,020 Претпостављам стално маркер и пишем к на страни тога. 205 00:10:33,020 --> 00:10:37,590 Дакле, имам кутију која се зове К, у коју могу ставити целе бројеве. 206 00:10:37,590 --> 00:10:41,070 Дакле, када кажем инт к, то је шта се дешава у мојој глави. 207 00:10:41,070 --> 00:10:43,140 Ако кажем К једнако пет, шта ја то радим? 208 00:10:43,140 --> 00:10:45,110 Па, ја стављам пет у кутији, зар не. 209 00:10:45,110 --> 00:10:48,670 Ово је прилично једноставна, ако Кажем инт, направите кутију која се зове К. 210 00:10:48,670 --> 00:10:52,040 Ако кажем К износи 5, стави пет у кутију. 211 00:10:52,040 --> 00:10:53,865 Надам се да то није превише скока. 212 00:10:53,865 --> 00:10:55,990 Ево где ствари иду још мало интересантно мада. 213 00:10:55,990 --> 00:11:02,590 Ако кажем инт * ПК, па чак и ако не знаш шта то нужно значи, 214 00:11:02,590 --> 00:11:06,150 јасно је да има нешто везе са цео број. 215 00:11:06,150 --> 00:11:08,211 Зато ћу обојити ова кутија зелено-исх, 216 00:11:08,211 --> 00:11:10,210 Знам да има нешто везе са целим бројем, 217 00:11:10,210 --> 00:11:13,400 али то није сама по себи цео број, зато што је инт звезда. 218 00:11:13,400 --> 00:11:15,390 Има нешто мало другачије о томе. 219 00:11:15,390 --> 00:11:17,620 Дакле, цео број умешан, али иначе је 220 00:11:17,620 --> 00:11:19,830 не превише различит од оно што смо причали. 221 00:11:19,830 --> 00:11:24,240 То је кутија, његова добио етикету, она носи ознаку ПК, 222 00:11:24,240 --> 00:11:27,280 и то је у стању да држи инт звезде, без обзира оне јесу. 223 00:11:27,280 --> 00:11:29,894 Имају нешто са целих бројева, јасно. 224 00:11:29,894 --> 00:11:31,060 Ево иако је последња линија. 225 00:11:31,060 --> 00:11:37,650 Ако кажем ПК = & К, хеј, шта се догодило, зар не? 226 00:11:37,650 --> 00:11:41,820 Дакле, ово случајни број, наизглед случајно број, бива бачен у кутију тамо. 227 00:11:41,820 --> 00:11:44,930 Све то је, је ПК добија адресу к. 228 00:11:44,930 --> 00:11:52,867 Дакле, ја вири где је к живи у меморији, његову адресу, адресу њених бајтова. 229 00:11:52,867 --> 00:11:55,200 Све што радим је да кажем та вредност је оно што ћу 230 00:11:55,200 --> 00:11:59,430 ставити у моје кутије која се зове пк. 231 00:11:59,430 --> 00:12:02,080 И зато што су ове ствари су показивачи, и зато тражимо 232 00:12:02,080 --> 00:12:04,955 у низу попут Зеро Кс осам нула Ц седам четири осам 233 00:12:04,955 --> 00:12:07,790 два нула је вјероватно није баш смисла. 234 00:12:07,790 --> 00:12:12,390 Када смо генерално визуелизацију показивачи, ми стварно тако показивачима. 235 00:12:12,390 --> 00:12:17,000 Пк нам даје информацију Морамо да нађемо к у меморији. 236 00:12:17,000 --> 00:12:19,120 Дакле, у основи ПК има стрелицу у њој. 237 00:12:19,120 --> 00:12:21,670 А ако ходамо дужину те стрелице, замислите 238 00:12:21,670 --> 00:12:25,280 то је нешто што можете ходати по, ако ходати дуж стрелице, 239 00:12:25,280 --> 00:12:29,490 на самом врху тог стрелице смо наћи локацију у меморији 240 00:12:29,490 --> 00:12:31,390 где је к живи. 241 00:12:31,390 --> 00:12:34,360 И то је заиста важно јер кад знамо где је к живи, 242 00:12:34,360 --> 00:12:37,870 можемо почети да радимо са подацима унутар тој меморијској локацији. 243 00:12:37,870 --> 00:12:40,780 Иако смо добија Теени бит испред себе за сада. 244 00:12:40,780 --> 00:12:42,240 >> Дакле, шта је показивач? 245 00:12:42,240 --> 00:12:45,590 Показивач је податак чије вредност је меморијска адреса. 246 00:12:45,590 --> 00:12:49,740 То је било то Зеро Кс осам нула стуфф дешава, то је сећање адреса. 247 00:12:49,740 --> 00:12:52,060 То је локација у меморији. 248 00:12:52,060 --> 00:12:55,080 И тип показивач описује врсту 249 00:12:55,080 --> 00:12:56,930 података ћете наћи на да је меморија адреса. 250 00:12:56,930 --> 00:12:58,810 Дакле, ту је део у праву Инт звездице. 251 00:12:58,810 --> 00:13:03,690 Ако пратим ту стрелу, то је да ме доведе до локације. 252 00:13:03,690 --> 00:13:06,980 И та локација, оно што сам ће тамо наћи у мом примеру, 253 00:13:06,980 --> 00:13:08,240 је зелено боје кутија. 254 00:13:08,240 --> 00:13:12,650 То је цео број, то је оно што ћете наћи ако одем на ту адресу. 255 00:13:12,650 --> 00:13:14,830 Тип података показивач описује шта 256 00:13:14,830 --> 00:13:17,936 наћи ћете у тој меморијској адреси. 257 00:13:17,936 --> 00:13:19,560 Ево иако је стварно супер ствар. 258 00:13:19,560 --> 00:13:25,090 Показивачи омогућавају нам да прође варијабле између функција. 259 00:13:25,090 --> 00:13:28,520 И заправо прође променљиве и не пролазе њихове копије. 260 00:13:28,520 --> 00:13:32,879 Јер ако знамо тачно где у меморији да пронађе променљиву, 261 00:13:32,879 --> 00:13:35,670 не треба да направите копију да, управо смо да идемо на тој локацији 262 00:13:35,670 --> 00:13:37,844 и рад са том променљиве. 263 00:13:37,844 --> 00:13:40,260 Дакле, у суштини тројкама врста од направити окружење рачунара 264 00:13:40,260 --> 00:13:42,360 много више као у стварном свету, зар не. 265 00:13:42,360 --> 00:13:44,640 >> Дакле, овде је аналогија. 266 00:13:44,640 --> 00:13:48,080 Рецимо да имам свеску, у праву, а то је пуна нота. 267 00:13:48,080 --> 00:13:50,230 И ја бих волео да га ажурирати. 268 00:13:50,230 --> 00:13:53,960 Ви сте функција која ажурирање белешке, зар не. 269 00:13:53,960 --> 00:13:56,390 На путу смо били раде сада, шта 270 00:13:56,390 --> 00:14:02,370 деси се да ћете узети моју свеску, ћете ићи на копирање продавницу, 271 00:14:02,370 --> 00:14:06,410 ћете направити копију Ксерок свака страна на нотебоок. 272 00:14:06,410 --> 00:14:09,790 Ти ћеш оставити своју свеску назад на мом столу када завршите, 273 00:14:09,790 --> 00:14:14,600 ћете ићи и прецртати ствари у мојој Нотебоок који су застарели или погрешно, 274 00:14:14,600 --> 00:14:19,280 а онда ћу се вратити проћи у ми штос Ксерок страница 275 00:14:19,280 --> 00:14:22,850 то је реплика својој бележници са промене које сте направили на њега. 276 00:14:22,850 --> 00:14:27,040 И у том тренутку, то је до мене као позивање функција, као саговорника, 277 00:14:27,040 --> 00:14:30,582 да одлучи да узме своје белешке и интегришу их у својој бележници. 278 00:14:30,582 --> 00:14:32,540 Дакле, постоји много корака укључени овде, зар не. 279 00:14:32,540 --> 00:14:34,850 Као не би било боље ако само кажем, хеј, можете 280 00:14:34,850 --> 00:14:38,370 упдате моју свеску за ја, ти предам моју свеску, 281 00:14:38,370 --> 00:14:40,440 и узмете ствари и Буквално их прецртати 282 00:14:40,440 --> 00:14:42,810 и ажурирати своје белешке у својој свесци. 283 00:14:42,810 --> 00:14:45,140 А онда ми моју свеску назад. 284 00:14:45,140 --> 00:14:47,320 То је мало шта показивачи нам омогућити да радимо, 285 00:14:47,320 --> 00:14:51,320 они чине ово окружење пуно више личи како смо раде у стварности. 286 00:14:51,320 --> 00:14:54,640 >> У реду, тако да је шта показивач се, хајде да разговарамо 287 00:14:54,640 --> 00:14:58,040 како показивачи раде у Ц, и Како можемо да почнемо да радимо са њима. 288 00:14:58,040 --> 00:15:02,550 Тако да је веома једноставна показивач у Ц зове Нулл Поинтер. 289 00:15:02,550 --> 00:15:04,830 У Нулл Поинтер указује на ништа. 290 00:15:04,830 --> 00:15:08,310 То вероватно изгледа као да је заправо није јако корисна ствар, 291 00:15:08,310 --> 00:15:10,500 али као што ћемо видети Мало касније, чињеница 292 00:15:10,500 --> 00:15:15,410 да је ово Нулл Поинтер постоји заправо заиста може доћи у руци. 293 00:15:15,410 --> 00:15:19,090 И кад год направите показивач и не подесите своју вредност иммедиатели- 294 00:15:19,090 --> 00:15:21,060 пример подешавања Одмах његова вредност 295 00:15:21,060 --> 00:15:25,401 ће бити пар слајдова назад где сам рекао ПК једнако & К, 296 00:15:25,401 --> 00:15:28,740 ПК добија Адрес К, као видећемо шта то значи, 297 00:15:28,740 --> 00:15:32,990 видећемо како код који схортли- ако не подесили њену вредност на нечему 298 00:15:32,990 --> 00:15:35,380 Одмах смислено, Увек би требало да 299 00:15:35,380 --> 00:15:37,480 сет показивач да укаже на нулл. 300 00:15:37,480 --> 00:15:40,260 Требало би поставити је да се укаже на ништа. 301 00:15:40,260 --> 00:15:43,614 >> То је веома разликује од само остављајући вредност као што је 302 00:15:43,614 --> 00:15:45,530 и онда прогласи показивач и само под претпоставком 303 00:15:45,530 --> 00:15:48,042 то је нула, јер је то ретко истина. 304 00:15:48,042 --> 00:15:50,000 Тако да увек треба поставити вредност показивач 305 00:15:50,000 --> 00:15:55,690 нулл ако не подесите вредност нешто смислено одмах. 306 00:15:55,690 --> 00:15:59,090 Можете проверити да ли вредности показивач је нулл помоћу оператора једнакости 307 00:15:59,090 --> 00:16:05,450 (==), Баш као да поредите било цео вредности или вредности карактер помоћу (==) 308 00:16:05,450 --> 00:16:06,320 као. 309 00:16:06,320 --> 00:16:10,994 То је посебна врста константа Вредност коју можете да користите за тестирање. 310 00:16:10,994 --> 00:16:13,160 Дакле, то је врло једноставна показивач, нулта показивач. 311 00:16:13,160 --> 00:16:15,320 Други начин да се створи показивач је за издвајање 312 00:16:15,320 --> 00:16:18,240 адреса променљиве сте већ направили, 313 00:16:18,240 --> 00:16:22,330 и ово урадите помоћу & адреса оператер екстракција. 314 00:16:22,330 --> 00:16:26,720 Који смо већ видели раније у првом дијаграму примеру показао. 315 00:16:26,720 --> 00:16:31,450 Дакле, ако је к променљива која имамо већ креиран од типа интегер, 316 00:16:31,450 --> 00:16:35,110 онда и к је показивач на цео број. 317 00:16:35,110 --> 00:16:39,810 & х ис- сећам, и иде за издвајање адреса ствар на десној страни. 318 00:16:39,810 --> 00:16:45,350 А пошто показивач је само адреса, него и к је показивач на цео број 319 00:16:45,350 --> 00:16:48,560 чија је вредност у којој Меморија Кс животима. 320 00:16:48,560 --> 00:16:50,460 То је адреса к екипе. 321 00:16:50,460 --> 00:16:53,296 Дакле, и к је адреса к. 322 00:16:53,296 --> 00:16:55,670 Узмимо ову један корак даље и повезивање са нечим 323 00:16:55,670 --> 00:16:58,380 Ја алудирао у претходном видеу. 324 00:16:58,380 --> 00:17:06,730 Ако дол је низ дублу, а затим и обр квадрат носач сам је показивач 325 00:17:06,730 --> 00:17:08,109 да дупло. 326 00:17:08,109 --> 00:17:08,970 ОК. 327 00:17:08,970 --> 00:17:12,160 арр квадратних брацкет сам, ако ар је низ дублу, 328 00:17:12,160 --> 00:17:19,069 онда арр квадратних конзолу и је и-тх Елемент тог низа, 329 00:17:19,069 --> 00:17:29,270 и & арр квадратних конзолу сам је где у меморије и-ти елемент арр постоји. 330 00:17:29,270 --> 00:17:31,790 >> Дакле, шта је овде импликација? 331 00:17:31,790 --> 00:17:34,570 Низови име, импликација из свега овога, 332 00:17:34,570 --> 00:17:39,290 је то име низ је заправо сама показивач. 333 00:17:39,290 --> 00:17:41,170 Ви сте радили са показивачима Алл Алонг 334 00:17:41,170 --> 00:17:45,290 сваки пут када сте користили низ. 335 00:17:45,290 --> 00:17:49,090 Запамти од примера на променљиве обима, 336 00:17:49,090 --> 00:17:53,420 пред крај видеа сам представити пример где имамо функцију 337 00:17:53,420 --> 00:17:56,890 назива скуп Инт а функција названа скуп низа. 338 00:17:56,890 --> 00:18:00,490 А твој изазов да се утврди да ли је или не, или оно што је 339 00:18:00,490 --> 00:18:03,220 вриједности које смо се штампају крај функције, 340 00:18:03,220 --> 00:18:05,960 на крају главног програма. 341 00:18:05,960 --> 00:18:08,740 >> Ако се сећате из тог примера или ако сте гледали видео, 342 00:18:08,740 --> 00:18:13,080 знате да када ли- позив на Сет Инт ефикасно ради ништа. 343 00:18:13,080 --> 00:18:16,390 Али позив да подесите низ ради. 344 00:18:16,390 --> 00:18:19,280 И некако напоменуто преко тога да је то био случај у то време. 345 00:18:19,280 --> 00:18:22,363 Само сам рекао, добро је то низ, то је Посебан, знате, постоји разлог. 346 00:18:22,363 --> 00:18:25,020 Разлог је тај низ је Име је заиста само показивач, 347 00:18:25,020 --> 00:18:28,740 и ту је посебна квадрат носач синтакса 348 00:18:28,740 --> 00:18:30,510 Да ствар много лепше радити. 349 00:18:30,510 --> 00:18:34,410 И они чине идеја о поинтер много мање застрашујући, 350 00:18:34,410 --> 00:18:36,800 и зато они некако ми од представила на тај начин. 351 00:18:36,800 --> 00:18:38,600 Али стварно низови су само показивачи. 352 00:18:38,600 --> 00:18:41,580 И зато, када смо направио промену у низу, 353 00:18:41,580 --> 00:18:44,880 када смо прошли низ као параметар до функције или као аргумент 354 00:18:44,880 --> 00:18:50,110 до функције, садржај низа заправо променило иу позвани 355 00:18:50,110 --> 00:18:51,160 и у саговорником. 356 00:18:51,160 --> 00:18:55,846 Који за сваку другу врсту променљива смо видели није био случај. 357 00:18:55,846 --> 00:18:58,970 Дакле, то је нешто што треба имати на смета када радите са показивачима, 358 00:18:58,970 --> 00:19:01,610 је да је име једног низ ствари показивач 359 00:19:01,610 --> 00:19:04,750 на првом елементу тог низа. 360 00:19:04,750 --> 00:19:08,930 >> ОК, сада имамо све ово чињенице, хајде да наставимо, у реду. 361 00:19:08,930 --> 00:19:11,370 Зашто ми бринемо о где је нешто живи. 362 00:19:11,370 --> 00:19:14,120 Па као што сам рекао, то је прилично корисно знати где је нешто живи 363 00:19:14,120 --> 00:19:17,240 тако да можете отићи тамо и промените је. 364 00:19:17,240 --> 00:19:19,390 Рад са њим и стварно има ствар која вас 365 00:19:19,390 --> 00:19:23,710 Желим да урадим том променљиве ефекта преузимања, а не ступи на снагу на некој копији тога. 366 00:19:23,710 --> 00:19:26,150 Ово се зове дереференцинг. 367 00:19:26,150 --> 00:19:28,690 Идемо у вези и мењамо ту вредност. 368 00:19:28,690 --> 00:19:32,660 Дакле, ако имамо показивач и то се зове ПЦ, а то указује на карактер, 369 00:19:32,660 --> 00:19:40,610 онда можемо рећи * и * ком ком је Име шта ћемо наћи ако идемо 370 00:19:40,610 --> 00:19:42,910 на адреси ком. 371 00:19:42,910 --> 00:19:47,860 Шта ћемо тамо наћи је лик и * ком је како се односе на податке у томе 372 00:19:47,860 --> 00:19:48,880 локација. 373 00:19:48,880 --> 00:19:54,150 Дакле, могли бисмо рећи нешто слично * ком = Д или тако нешто, 374 00:19:54,150 --> 00:19:59,280 а то значи да шта год био на меморијској адреси пц, 375 00:19:59,280 --> 00:20:07,040 год карактер је био раније тамо је сада Д Ако кажемо * ПЦ = д. 376 00:20:07,040 --> 00:20:10,090 >> И ево нас опет са нека чудна ствар, Ц, у праву. 377 00:20:10,090 --> 00:20:14,560 Тако смо видели раније као * некако део тип података, 378 00:20:14,560 --> 00:20:17,160 и сада се користи у мало другачији контекст 379 00:20:17,160 --> 00:20:19,605 за приступ подацима на локацији. 380 00:20:19,605 --> 00:20:22,480 Знам да је мало збуњујуће и То је заправо део овог целине 381 00:20:22,480 --> 00:20:25,740 Као, зашто показивачи имају митологију око њих као толико сложен, 382 00:20:25,740 --> 00:20:28,250 је нека врста проблема синтаксе, искрено. 383 00:20:28,250 --> 00:20:31,810 Међутим * се користи у оба контекста, и као део имена типа, 384 00:20:31,810 --> 00:20:34,100 па да видимо мало касније нешто друго, такође. 385 00:20:34,100 --> 00:20:36,490 И сада је дереференце оператер. 386 00:20:36,490 --> 00:20:38,760 Тако то иде са референтним, она приступа податке 387 00:20:38,760 --> 00:20:43,000 на локацији показивача, и вам омогућава да га манипулише по вољи. 388 00:20:43,000 --> 00:20:45,900 >> Ово је врло слично посетите свог суседа, у реду. 389 00:20:45,900 --> 00:20:48,710 Ако знате шта ваши комшија живи, ти си 390 00:20:48,710 --> 00:20:50,730 не дружиш са комшијом. 391 00:20:50,730 --> 00:20:53,510 Знаш да се деси знају где живе, 392 00:20:53,510 --> 00:20:56,870 али то не значи да је врлина да то знање 393 00:20:56,870 --> 00:20:59,170 сте у интеракцији са њима. 394 00:20:59,170 --> 00:21:01,920 Ако желите да комуницирате са њима, мораш да одеш у своју кућу, 395 00:21:01,920 --> 00:21:03,760 мораш да одеш тамо где живе. 396 00:21:03,760 --> 00:21:07,440 А када то урадите, онда можете интеракцију 397 00:21:07,440 --> 00:21:09,420 са њима баш као да желиш да. 398 00:21:09,420 --> 00:21:12,730 А слично је варијабли, морате да одете на њихову адресу 399 00:21:12,730 --> 00:21:15,320 Ако желите да их интеракцију, не можете једноставно знати адресу. 400 00:21:15,320 --> 00:21:21,495 И тако идете на адресу е користити *, оператор Дереференце. 401 00:21:21,495 --> 00:21:23,620 Шта мислиш да се догађа ако покушамо и дереференце 402 00:21:23,620 --> 00:21:25,260 показивач чија је вредност нулл? 403 00:21:25,260 --> 00:21:28,470 Подсетимо да је нулл показивач указује на ништа. 404 00:21:28,470 --> 00:21:34,110 Дакле, ако сте покушали да дереференце ништа или идите на адресу ништа, 405 00:21:34,110 --> 00:21:36,800 Шта мислиш да се догађа? 406 00:21:36,800 --> 00:21:39,630 Па ако погодили сегментације кривица, ти би био у праву. 407 00:21:39,630 --> 00:21:41,390 Ако покушате и дереференце нула показивач, 408 00:21:41,390 --> 00:21:43,140 патите а сегментацију кривица. Али чекајте, 409 00:21:43,140 --> 00:21:45,820 нисам ти рекао, да ако не идеш 410 00:21:45,820 --> 00:21:49,220 да подесите вредност ваших поинтер на нешто смислено, 411 00:21:49,220 --> 00:21:51,000 ви треба да подесите нулл? 412 00:21:51,000 --> 00:21:55,290 Ја сам и заправо сегментације крив је нека врста доброг владања. 413 00:21:55,290 --> 00:21:58,680 >> Да ли сте икада проглашена променљиву и одмах није додељен своју вредност? 414 00:21:58,680 --> 00:22:02,680 Тако сте рекли инт к; немаш заправо доделили свега 415 00:22:02,680 --> 00:22:05,340 а касније у коду, можете одштампати вредност к, 416 00:22:05,340 --> 00:22:07,650 имајући увек не додељен је на све. 417 00:22:07,650 --> 00:22:10,370 Често ћете добити нула, али понекад 418 00:22:10,370 --> 00:22:15,000 Можда мало случајни број, а немаш појма одакле је дошао. 419 00:22:15,000 --> 00:22:16,750 Слично се ствари десити са показивачима. 420 00:22:16,750 --> 00:22:20,110 Када одредите показивач инт * пк на пример, 421 00:22:20,110 --> 00:22:23,490 а ви не доделите вредност, добијате четири бајта за меморију. 422 00:22:23,490 --> 00:22:25,950 Без обзира четири бајтова меморија систем може 423 00:22:25,950 --> 00:22:28,970 сматрају да имају неку смислену вредност. 424 00:22:28,970 --> 00:22:31,760 А можда су нешто што је већ тамо да 425 00:22:31,760 --> 00:22:34,190 више није потребан неко други функција, тако да само 426 00:22:34,190 --> 00:22:35,900 год подаци су били тамо. 427 00:22:35,900 --> 00:22:40,570 >> Шта ако сте покушали да урадите Дереференце нека адреса коју Немој- било 428 00:22:40,570 --> 00:22:43,410 Већ бајтова и информације у Ето, то је сада у показивачем. 429 00:22:43,410 --> 00:22:47,470 Ако покушате и дереференце тог показивача, можда се петљају са неким меморије 430 00:22:47,470 --> 00:22:49,390 да нисте намеравали да неред са њим све. 431 00:22:49,390 --> 00:22:51,639 А у ствари можете да урадите нешто заиста поражавајуће, 432 00:22:51,639 --> 00:22:54,880 као бреак други програм, или сломити другу функцију, 433 00:22:54,880 --> 00:22:58,289 или уради нешто што злонамерни нисте намеравате да урадите уопште. 434 00:22:58,289 --> 00:23:00,080 И то је разлог зашто је заправо добра идеја 435 00:23:00,080 --> 00:23:04,030 да подесите савете нулл ако вас да их није подешен на нешто смислено. 436 00:23:04,030 --> 00:23:06,760 То је вероватно боље у крај дана за ваш програм 437 00:23:06,760 --> 00:23:09,840 срушити онда за то да уради Нешто што зезне 438 00:23:09,840 --> 00:23:12,400 други програм или неку другу функцију. 439 00:23:12,400 --> 00:23:15,207 То понашање је вероватно и мање идеално него само пада. 440 00:23:15,207 --> 00:23:17,040 И то је разлог зашто је заправо добра навика 441 00:23:17,040 --> 00:23:20,920 да уђу у своје савете за подешавање нулл ако их не сет 442 00:23:20,920 --> 00:23:24,540 у смислене вредности одмах, вредност да знате 443 00:23:24,540 --> 00:23:27,260 и да безбедно може ли дереференце. 444 00:23:27,260 --> 00:23:32,240 >> Дакле, вратимо се сада и погледај у укупном синтакси ситуације. 445 00:23:32,240 --> 00:23:37,400 Ако кажем Инт * стр ;, шта сам урадио? 446 00:23:37,400 --> 00:23:38,530 Оно што сам урадио је то. 447 00:23:38,530 --> 00:23:43,290 Знам да је вредност п је адреса јер су сви показивачи су само 448 00:23:43,290 --> 00:23:44,660 адресе. 449 00:23:44,660 --> 00:23:47,750 Могу дереференце стр коришћењем * оператера. 450 00:23:47,750 --> 00:23:51,250 У том контексту овде, на самом Топ сећам се * је део типа. 451 00:23:51,250 --> 00:23:53,510 Инт * је тип података. 452 00:23:53,510 --> 00:23:56,150 Али ја могу дереференце стр помоћу оператора *, 453 00:23:56,150 --> 00:24:01,897 и ако то уради, ако одем на ту адресу, шта ћу наћи на тој адреси? 454 00:24:01,897 --> 00:24:02,855 Наћи ћу цео број. 455 00:24:02,855 --> 00:24:05,910 Дакле, Инт * п је у основи говорећи, п је адреса. 456 00:24:05,910 --> 00:24:09,500 Могу дереференце п и ако Ја, ја ћу наћи цео број 457 00:24:09,500 --> 00:24:11,920 на тој меморијској локацији. 458 00:24:11,920 --> 00:24:14,260 >> У реду па сам рекао да је био још један нервира ствар са звездама 459 00:24:14,260 --> 00:24:17,060 и овде је где је нервира ствар са звездама је. 460 00:24:17,060 --> 00:24:21,640 Да ли сте икада покушали да се изјасни више променљиве истог типа 461 00:24:21,640 --> 00:24:24,409 на истој линији кода? 462 00:24:24,409 --> 00:24:27,700 Дакле, за тренутак, претварати да је линија, код Ја имам ту у зелено 463 00:24:27,700 --> 00:24:29,366 није ту и само каже инт к, и, з ;. 464 00:24:29,366 --> 00:24:31,634 465 00:24:31,634 --> 00:24:34,550 Шта би то значило је заправо створити три интегер променљиве за тебе, 466 00:24:34,550 --> 00:24:36,930 један је Кс, једна се зове и, а један по имену з. 467 00:24:36,930 --> 00:24:41,510 То је начин да се то уради без морате да поделите на три линије. 468 00:24:41,510 --> 00:24:43,890 >> Ево где звезде добити опет нервира ипак, 469 00:24:43,890 --> 00:24:49,200 јер је заправо део * од обоје имена типа и део 470 00:24:49,200 --> 00:24:50,320 варијабилног имена. 471 00:24:50,320 --> 00:24:56,430 И тако ако кажем Инт * пк, пи, ПЗ, шта сам заиста добити је показивач на цео број 472 00:24:56,430 --> 00:25:01,650 зове пк и два цела броја, ПИ и ПЗ. 473 00:25:01,650 --> 00:25:04,950 И то је вероватно није шта желимо, то није добро. 474 00:25:04,950 --> 00:25:09,290 >> Дакле, ако желим да се створи више савете на истој линији, истог типа, 475 00:25:09,290 --> 00:25:12,140 и звезде, шта заправо треба да кажемо је Инт * ПА, ПБ *, * ком. 476 00:25:12,140 --> 00:25:17,330 477 00:25:17,330 --> 00:25:20,300 Сада пошто си рекао да а сад ти ово говорим, 478 00:25:20,300 --> 00:25:22,170 вероватно никада неће учинити. 479 00:25:22,170 --> 00:25:25,170 И то је вероватно искрено добра ствар, зато што нехотице можда 480 00:25:25,170 --> 00:25:26,544 изоставити звезду, тако нешто. 481 00:25:26,544 --> 00:25:29,290 То је вероватно најбоље да можда прогласити показивачи на појединим линијама, 482 00:25:29,290 --> 00:25:31,373 али то је само још један од оних досадних синтаксе 483 00:25:31,373 --> 00:25:35,310 ствари са звездама које чине показивачи тако тешко радити. 484 00:25:35,310 --> 00:25:39,480 Зато што је само овај синтактичка неред морате да радите преко. 485 00:25:39,480 --> 00:25:41,600 Са пракси ради заиста постати друга природа. 486 00:25:41,600 --> 00:25:45,410 И даље праве грешке са њим још увек након програмирања за 10 година, 487 00:25:45,410 --> 00:25:49,630 па немојте се љутити ако се нешто деси за вас, то је прилично уобичајено искрено. 488 00:25:49,630 --> 00:25:52,850 То је стварно нека врста грешка у синтакси. 489 00:25:52,850 --> 00:25:54,900 >> ОК, некако обећао да ћемо поново 490 00:25:54,900 --> 00:25:59,370 концепт колика је стринг. 491 00:25:59,370 --> 00:26:02,750 Па ако сам вам рекао да је ниска, стварно сам некако 492 00:26:02,750 --> 00:26:04,140 лагао цијело вријеме. 493 00:26:04,140 --> 00:26:06,181 Нема података зове тип ниска, ау ствари сам 494 00:26:06,181 --> 00:26:09,730 споменуо у једном од наших Најстарији видео на типове података, 495 00:26:09,730 --> 00:26:13,820 да низ је тип података који је створена за вас у ЦС50.х. 496 00:26:13,820 --> 00:26:17,050 Морате да #инцлуде ЦС50.х како би га користили. 497 00:26:17,050 --> 00:26:19,250 >> Па стринг заиста само алиас за нешто 498 00:26:19,250 --> 00:26:23,600 назива цхар, А показивач на карактер. 499 00:26:23,600 --> 00:26:26,010 Па показивачи, опозив, су само бави. 500 00:26:26,010 --> 00:26:28,780 Дакле, шта је величина у бајтова низу? 501 00:26:28,780 --> 00:26:29,796 Па то је четири или осам. 502 00:26:29,796 --> 00:26:32,170 А разлог зашто сам рекао четири или осам је зато што она заправо 503 00:26:32,170 --> 00:26:36,730 зависи од система, Ако користите ЦС50 ИДЕ, инт * је величине цхар 504 00:26:36,730 --> 00:26:39,340 * Је осам, то је 64-битни систем. 505 00:26:39,340 --> 00:26:43,850 Сваки адреса у меморији је дуга 64 бита. 506 00:26:43,850 --> 00:26:48,270 Ако користите уређај ЦС50 или користећи било 32-битну машину, 507 00:26:48,270 --> 00:26:51,640 а ви сте чули тај израз 32-бит машина, што је 32-битни машина? 508 00:26:51,640 --> 00:26:56,090 Па то само значи да сваки адреса у меморији је дуга 32 бита. 509 00:26:56,090 --> 00:26:59,140 И тако 32 бита је четири бајта. 510 00:26:59,140 --> 00:27:02,710 Дакле, цхар је четири или осам бајтова зависности од вашег система. 511 00:27:02,710 --> 00:27:06,100 И заиста било типови података, и показивач на сваком подацима 512 00:27:06,100 --> 00:27:12,030 тип, пошто су сви показивачи су само адресе, четири или осам бајтова. 513 00:27:12,030 --> 00:27:14,030 Дакле, хајде да поново ово дијаграм па да закључимо 514 00:27:14,030 --> 00:27:18,130 овај видео са мало вежбе овде. 515 00:27:18,130 --> 00:27:21,600 Дакле, овде је дијаграм смо стали са на самом почетку видеа. 516 00:27:21,600 --> 00:27:23,110 Дакле, шта се сада дешава ако кажем * пк = 35? 517 00:27:23,110 --> 00:27:26,370 518 00:27:26,370 --> 00:27:30,530 Дакле, шта значи када кажем, * ПК = 35? 519 00:27:30,530 --> 00:27:32,420 Узмите мало. 520 00:27:32,420 --> 00:27:34,990 * ПК. 521 00:27:34,990 --> 00:27:39,890 У контексту овде, ис дереференце оператер. 522 00:27:39,890 --> 00:27:42,110 Дакле, када је дереференце оператор користи, 523 00:27:42,110 --> 00:27:48,520 идемо на адресу указао на од ПК, и мењамо оно што смо открили. 524 00:27:48,520 --> 00:27:55,270 Тако * ПК = 35 ефективно да ли то на слици. 525 00:27:55,270 --> 00:27:58,110 Дакле, то је у основи синтактички идентична од Рекавши к = 35. 526 00:27:58,110 --> 00:28:00,740 527 00:28:00,740 --> 00:28:01,930 >> Још један. 528 00:28:01,930 --> 00:28:05,510 Ако кажем инт м, креирам нова променљива под називом м. 529 00:28:05,510 --> 00:28:08,260 Нова кутија, то је зелена кутија, јер то ће држати цео број, 530 00:28:08,260 --> 00:28:09,840 и то је обележено м. 531 00:28:09,840 --> 00:28:14,960 Ако кажем М = 4, Ставила сам цео у тој кутији. 532 00:28:14,960 --> 00:28:20,290 Ако рецимо ПК = & м, како се Дијаграм промена? 533 00:28:20,290 --> 00:28:28,760 ПК = & м да ли се сећате шта је & Оператер ради или се зове? 534 00:28:28,760 --> 00:28:34,430 Имајте на уму да неко променљиве име & је адреса у име променљиве. 535 00:28:34,430 --> 00:28:38,740 Дакле, оно што говорите је ПК добија адресу метара. 536 00:28:38,740 --> 00:28:42,010 И тако ефикасно шта деси дијаграм је да пк дуже нема бодова 537 00:28:42,010 --> 00:28:46,420 к, али указује на м. 538 00:28:46,420 --> 00:28:48,470 >> Опет показивачи су веома незгодно да раде са 539 00:28:48,470 --> 00:28:50,620 и они су се доста пракса, већ зато што 540 00:28:50,620 --> 00:28:54,150 њихове способности да вам дозволи да прође података између функција 541 00:28:54,150 --> 00:28:56,945 и заправо имају оне Промене ступају на снагу, 542 00:28:56,945 --> 00:28:58,820 узимајући главу око је заиста важно. 543 00:28:58,820 --> 00:29:02,590 То је вероватно најкомпликованији тему смо разговарали о у ЦС50, 544 00:29:02,590 --> 00:29:05,910 али је вредност те да добити од коришћења савете 545 00:29:05,910 --> 00:29:09,200 далеко превазилази компликација која долазе из њих уче. 546 00:29:09,200 --> 00:29:12,690 Дакле, желим вам најбоље срећа учење о тројкама. 547 00:29:12,690 --> 00:29:15,760 Ја сам Доуг Ллоид, ово је ЦС50. 548 00:29:15,760 --> 00:29:17,447