1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> DAVID Malan: Здравейте, и Добре дошли отново в CS50. 3 00:00:13,260 --> 00:00:14,860 Така че това е края на четвъртата седмица. 4 00:00:14,860 --> 00:00:16,680 Само една обява на първо място. 5 00:00:16,680 --> 00:00:19,600 Така че така наречената пета понеделник е идва идния понеделник. 6 00:00:19,600 --> 00:00:22,800 Това е възможност да се промени от SAT / Ненасит на писмо клас, или от 7 00:00:22,800 --> 00:00:24,130 буквена оценка сб / Ненасит. 8 00:00:24,130 --> 00:00:27,130 Дразнещо е, че процесът се нуждае от подпис, защото трябва да попълните 9 00:00:27,130 --> 00:00:28,770 едно от тези розови Добавяне / капка форми. 10 00:00:28,770 --> 00:00:31,680 >> Поради технически казано, SAT / Ненасит версия и версията писмо клас 11 00:00:31,680 --> 00:00:33,320 имат различни каталожни номера. 12 00:00:33,320 --> 00:00:34,240 Но не е голяма работа. 13 00:00:34,240 --> 00:00:36,620 Просто ела при мен или да ограби или да Lauren във всеки един момент. 14 00:00:36,620 --> 00:00:39,550 Или ни пишете, ако не разполагат с вид на документи, което трябва днес, и ние 15 00:00:39,550 --> 00:00:43,410 със сигурност ще ви помогне да вземете грижат за това преди понеделник. 16 00:00:43,410 --> 00:00:45,780 >> Добре, така че днес - 17 00:00:45,780 --> 00:00:47,630 Всъщност, има малко ехо. 18 00:00:47,630 --> 00:00:51,070 Може ли да ме смекчи малко? 19 00:00:51,070 --> 00:00:51,730 OK. 20 00:00:51,730 --> 00:00:54,850 Така че днес, ще се въведе една тема известен като указатели. 21 00:00:54,850 --> 00:00:57,770 И аз ще призная, че това е един от най- по-сложни теми, които са склонни да 22 00:00:57,770 --> 00:01:00,960 обхващат в този клас, или наистина всеки уводен курс, който използва C. 23 00:01:00,960 --> 00:01:05,510 >> Но да вземат думата си за него, по-специално Ако вашият ум се чувства малко по-огъната 24 00:01:05,510 --> 00:01:07,100 днес и в идните седмици. 25 00:01:07,100 --> 00:01:10,340 Това не е представител на вас се е по-зле в това просто означава, че 26 00:01:10,340 --> 00:01:13,360 това е особено сложна тема Обещавам, че след няколко седмици 27 00:01:13,360 --> 00:01:17,610 по този начин, ще ви се стори твърде поразително ясно в ретроспекция. 28 00:01:17,610 --> 00:01:18,720 >> Все още помня и до днес. 29 00:01:18,720 --> 00:01:22,190 Седях в Elliott трапезарията, седи до мен TF Nishat Мета, 30 00:01:22,190 --> 00:01:24,070 който е местно лице на Elliott къща. 31 00:01:24,070 --> 00:01:26,340 И по някаква причина, тази тема просто кликвания. 32 00:01:26,340 --> 00:01:29,430 Което ще рече, че аз също се бореше с него за известно време, но аз 33 00:01:29,430 --> 00:01:33,610 ще направя всичко възможно, за да помогне да се избегнат такива борба с една тема, която в крайна сметка 34 00:01:33,610 --> 00:01:34,580 е доста мощен. 35 00:01:34,580 --> 00:01:37,350 >> Всъщност, една от темите ще обсъдим в идните седмици, е, че 36 00:01:37,350 --> 00:01:41,130 на сигурността, и как всъщност можете използват машини по начини, 37 00:01:41,130 --> 00:01:42,320 които не са били предназначени. 38 00:01:42,320 --> 00:01:45,850 И тези разработки са обикновено в резултат на бъгове, грешки, които ние 39 00:01:45,850 --> 00:01:49,740 хората правят от неразбиране на някои на базисния изпълнението 40 00:01:49,740 --> 00:01:52,250 детайли, чрез които програмите са приведени. 41 00:01:52,250 --> 00:01:55,410 >> Сега, за да направи това изглежда още по-потребителя приятелски, аз мислех, че ще играя на 10 42 00:01:55,410 --> 00:01:59,680 втори преглед на малко глинената анимация фигура, наречена Binky, който бе доведен до 43 00:01:59,680 --> 00:02:03,020 живот, като наш приятел в Станфорд, професор Ник Parlante. 44 00:02:03,020 --> 00:02:06,753 Така че позволете ми да ви дам това закачка на Binky тук. 45 00:02:06,753 --> 00:02:09,520 >> [VIDEO PLAYBACK] 46 00:02:09,520 --> 00:02:10,380 >> -Хей, Binky. 47 00:02:10,380 --> 00:02:11,050 Събудете се. 48 00:02:11,050 --> 00:02:13,610 Това е време, за показалеца забавно. 49 00:02:13,610 --> 00:02:14,741 >> -Какво е това? 50 00:02:14,741 --> 00:02:16,440 Научете повече за указатели? 51 00:02:16,440 --> 00:02:17,928 О, Goodie. 52 00:02:17,928 --> 00:02:18,920 >> [END възпроизвеждане на видео] 53 00:02:18,920 --> 00:02:20,670 >> DAVID Malan: Това е Stanford компютърни науки. 54 00:02:20,670 --> 00:02:23,194 Така че повече за това да дойде. 55 00:02:23,194 --> 00:02:24,930 >> [APPLAUSE] 56 00:02:24,930 --> 00:02:26,660 >> DAVID Malan: Съжалявам, Ник. 57 00:02:26,660 --> 00:02:30,680 >> Така се припомни, че последния път, когато завърши на това наистина вълнуващо Катерачът 58 00:02:30,680 --> 00:02:32,960 с което тази функция просто не се получи. 59 00:02:32,960 --> 00:02:34,960 Най-малко интуитивно, се чувствах като тя трябва да работи. 60 00:02:34,960 --> 00:02:37,600 Просто смяна на ценностите на две цели числа. 61 00:02:37,600 --> 00:02:40,915 Но припомни, че когато се отпечатва на първоначалните стойности в основния, една и 62 00:02:40,915 --> 00:02:44,210 две, те все още са едно и два, а не две и една. 63 00:02:44,210 --> 00:02:46,070 >> Така че нека действително превключите към уреда. 64 00:02:46,070 --> 00:02:50,180 И аз написах малко код в скелетната премина тук, където се твърди, че х 65 00:02:50,180 --> 00:02:52,500 ще бъде 1, у ще бъде 2. 66 00:02:52,500 --> 00:02:54,810 Аз след това да отпечатате и двете им стойности с печат F. 67 00:02:54,810 --> 00:02:57,540 >> След това твърдят тук, че ние ще ги разменят. 68 00:02:57,540 --> 00:03:00,800 Оставих празно място тук за нас, за да попълнете днес в един момент. 69 00:03:00,800 --> 00:03:03,380 След това, аз отивам да се твърди, че две променливи са били разменени. 70 00:03:03,380 --> 00:03:04,770 Тогава аз отивам да отпечатате ги отново. 71 00:03:04,770 --> 00:03:07,090 И така, надявам се, че трябва да виждате 1, 2. 72 00:03:07,090 --> 00:03:07,380 2, 1. 73 00:03:07,380 --> 00:03:09,830 Това е супер проста Целта в момента. 74 00:03:09,830 --> 00:03:12,430 >> Е, как да отидем за смяна две променливи? 75 00:03:12,430 --> 00:03:17,220 Ами ако аз предлагам тук, че тези чаши може да представлява памет в компютъра. 76 00:03:17,220 --> 00:03:19,070 Това е няколко хапки, това е още няколко хапки. 77 00:03:19,070 --> 00:03:23,260 Можехме ли да си доброволец качвай се и смесват нас някои напитки, ако познато? 78 00:03:23,260 --> 00:03:23,920 Хайде нагоре. 79 00:03:23,920 --> 00:03:24,815 Как се казваш? 80 00:03:24,815 --> 00:03:25,260 >> ДЖЕС: Джес. 81 00:03:25,260 --> 00:03:25,690 >> DAVID Malan: Джес? 82 00:03:25,690 --> 00:03:26,540 Ела, Джес. 83 00:03:26,540 --> 00:03:29,180 Ако нямате нищо против, ние трябва да се постави Google Glass на вас, така можем да 84 00:03:29,180 --> 00:03:30,430 увековечат това. 85 00:03:30,430 --> 00:03:32,800 86 00:03:32,800 --> 00:03:34,670 OK, стъкло. 87 00:03:34,670 --> 00:03:37,250 Запис на видеоклип. 88 00:03:37,250 --> 00:03:43,103 И OK, ние сме добре да отида с Джес тук. 89 00:03:43,103 --> 00:03:43,810 Добре. 90 00:03:43,810 --> 00:03:45,120 Приятно ми е да се запознаем. 91 00:03:45,120 --> 00:03:47,720 >> Така че това, което искам да направя тук - ако можеше, доста бързо - 92 00:03:47,720 --> 00:03:51,040 просто ни се налива половин чаша портокалов сок и половин чаша мляко, 93 00:03:51,040 --> 00:03:55,710 представлява ефективно номера 1 в една чаша и 2 в другата чаша. 94 00:03:55,710 --> 00:04:01,380 95 00:04:01,380 --> 00:04:02,630 >> Това ще бъде добър кадри. 96 00:04:02,630 --> 00:04:04,910 97 00:04:04,910 --> 00:04:05,860 >> ДЖЕС: Извинете. 98 00:04:05,860 --> 00:04:06,330 >> DAVID Malan: Не, не. 99 00:04:06,330 --> 00:04:08,703 Всичко е наред. 100 00:04:08,703 --> 00:04:10,120 Ница. 101 00:04:10,120 --> 00:04:12,950 Добре, така че ние имаме четири байта стойност на портокалов сок. 102 00:04:12,950 --> 00:04:14,460 Ще го нарича стойност 1. 103 00:04:14,460 --> 00:04:16,579 Сега още четири байта стойност на млякото. 104 00:04:16,579 --> 00:04:18,519 Ще го наречем Стойност 2. 105 00:04:18,519 --> 00:04:20,440 Така че х и у, съответно. 106 00:04:20,440 --> 00:04:23,450 >> Добре, така че сега, ако задачата в ръка - за теб, Джес, пред всички 107 00:04:23,450 --> 00:04:24,270 от съучениците си - 108 00:04:24,270 --> 00:04:28,510 е за размяна на стойностите на х и у такива че искаме портокалов сок в 109 00:04:28,510 --> 00:04:32,070 друга чаша и млякото в тази чаша, как може да ви - преди да всъщност правят 110 00:04:32,070 --> 00:04:34,020 той - го направим? 111 00:04:34,020 --> 00:04:35,220 >> OK, мъдро решение. 112 00:04:35,220 --> 00:04:36,340 Така че ще трябва малко повече памет. 113 00:04:36,340 --> 00:04:38,190 Така че нека да разпредели временно чаша, ако щете. 114 00:04:38,190 --> 00:04:40,540 А сега продължи да сменяте х и у. 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> Excellent. 117 00:04:53,530 --> 00:04:54,420 Така че много добре направено. 118 00:04:54,420 --> 00:04:55,670 Благодаря ви много, Джес. 119 00:04:55,670 --> 00:04:59,520 120 00:04:59,520 --> 00:05:00,020 Заповядайте. 121 00:05:00,020 --> 00:05:01,950 Малко сувенир. 122 00:05:01,950 --> 00:05:04,350 >> ОК, така че явно, супер проста идея. 123 00:05:04,350 --> 00:05:07,500 Напълно интуитивно, че ние се нуждаем от малко повече пространство за съхранение - в тази форма, 124 00:05:07,500 --> 00:05:09,750 чаша - ако действително искате да суап тези две променливи. 125 00:05:09,750 --> 00:05:11,110 Така че нека да направим точно това. 126 00:05:11,110 --> 00:05:14,330 До тук в между това къде аз твърдя, че съм ще се прави някаква смяна, аз ще 127 00:05:14,330 --> 00:05:15,720 отидете напред и да декларират темп. 128 00:05:15,720 --> 00:05:17,980 И аз ще го настроите равна на, да речем, х. 129 00:05:17,980 --> 00:05:21,110 >> Тогава аз отивам да промените стойността на х точно като Джес е тук с 130 00:05:21,110 --> 00:05:23,200 мляко и портокалов сок да бъде равна на у. 131 00:05:23,200 --> 00:05:27,460 И аз няма да променям г. за равен да не х, защото сега ние ще бъдем 132 00:05:27,460 --> 00:05:29,530 остана в кръг, а по-скоро темп. 133 00:05:29,530 --> 00:05:33,170 Къде ли временно - или когато Джес временно вкара портокалов сок 134 00:05:33,170 --> 00:05:35,460 преди опитва да се докара, че чаша с мляко. 135 00:05:35,460 --> 00:05:37,250 >> Така че позволете ми давай сега и ще я направи. 136 00:05:37,250 --> 00:05:39,210 Тя се нарича noswap.c. 137 00:05:39,210 --> 00:05:41,190 А сега нека да тече не по суап. 138 00:05:41,190 --> 00:05:43,910 И наистина виждам, ако се разшири прозореца малко, че 139 00:05:43,910 --> 00:05:45,160 х е 1, у е 2. 140 00:05:45,160 --> 00:05:47,230 И тогава х е 2, у е 1. 141 00:05:47,230 --> 00:05:51,910 >> Но припомни, че в понеделник направихме неща малко по-различно, при I 142 00:05:51,910 --> 00:05:56,760 вместо да изпълнява помощник функция, ако щете, това всъщност беше нищожен. 143 00:05:56,760 --> 00:05:58,010 Извиках го сменяте. 144 00:05:58,010 --> 00:06:01,600 Дадох го на два параметъра, и се обадих тях и аз ги нарича б. 145 00:06:01,600 --> 00:06:04,380 >> Честно казано, бих могъл да ги наричаме х и у. 146 00:06:04,380 --> 00:06:06,040 Нищо не пречи ми от това, че. 147 00:06:06,040 --> 00:06:08,140 Но бих казал, че е след това малко неясно. 148 00:06:08,140 --> 00:06:11,910 Тъй като изземване за понеделник, че ние Твърди се, че тези параметри са 149 00:06:11,910 --> 00:06:13,650 копия на стойностите преминал инча 150 00:06:13,650 --> 00:06:15,640 Така че просто закача си ума, мисля, че, ако използвате 151 00:06:15,640 --> 00:06:17,370 точно същите променливи. 152 00:06:17,370 --> 00:06:20,150 >> Така че аз ще се обадя вместо тях и б, само за яснота. 153 00:06:20,150 --> 00:06:21,840 Но бихме могли да ги наречем най- нещо, което искаме. 154 00:06:21,840 --> 00:06:26,280 И аз отивам да копирате и поставяте ефективно този код от там 155 00:06:26,280 --> 00:06:27,170 надолу в тук. 156 00:06:27,170 --> 00:06:29,110 Защото аз просто видях, че тя работи. 157 00:06:29,110 --> 00:06:30,790 Така че това е в доста добра форма. 158 00:06:30,790 --> 00:06:37,390 И аз ще променя х до, моя х на, у мен да б и у мен да б. 159 00:06:37,390 --> 00:06:39,130 >> Така че с други думи, точно същата логика. 160 00:06:39,130 --> 00:06:40,850 Точно същото нещо, че Джес е направил. 161 00:06:40,850 --> 00:06:44,350 И тогава единственото нещо, което трябва да направите до Тук, разбира се, сега се позовават на тази 162 00:06:44,350 --> 00:06:45,990 функция, или се обадете на тази функция. 163 00:06:45,990 --> 00:06:50,430 Така че аз ще се обадя на тази функция с две входове, х и у, и натиснете Save. 164 00:06:50,430 --> 00:06:52,300 >> Добре, така фундаментално едно и също нещо. 165 00:06:52,300 --> 00:06:55,570 Всъщност, вероятно съм направил програмата ненужно усложнени от 166 00:06:55,570 --> 00:07:00,820 написването на функция, която просто като около шест реда код, а аз 167 00:07:00,820 --> 00:07:02,970 преди това са приложили това само три. 168 00:07:02,970 --> 00:07:06,230 >> Така че позволете ми давай сега и римейк това, не правят суап. 169 00:07:06,230 --> 00:07:07,920 Добре, аз прецаках тук. 170 00:07:07,920 --> 00:07:11,290 Това трябва да е грешка, че може да виж все по-често като си 171 00:07:11,290 --> 00:07:12,380 програми получите по-сложни. 172 00:07:12,380 --> 00:07:13,470 Но има един лесен оправя. 173 00:07:13,470 --> 00:07:15,650 Позволете ми да превъртите обратно тук. 174 00:07:15,650 --> 00:07:18,190 >> И каква е първата грешка виждам? 175 00:07:18,190 --> 00:07:19,520 Скритият декларация. 176 00:07:19,520 --> 00:07:21,466 Какво означава, че обикновено се показват? 177 00:07:21,466 --> 00:07:22,830 О, забравих на прототипа. 178 00:07:22,830 --> 00:07:26,900 Забравих да преподават на компилатора, че суап ще съществуват, въпреки че той 179 00:07:26,900 --> 00:07:28,920 не съществува в самото начало на програмата. 180 00:07:28,920 --> 00:07:35,780 Така че аз съм просто ще кажа нищожен, суап, Int, а вътр б, точка и запетая. 181 00:07:35,780 --> 00:07:37,280 >> Така че аз няма да го reimplement. 182 00:07:37,280 --> 00:07:39,140 Но сега тя отговаря на това, което е тук. 183 00:07:39,140 --> 00:07:42,530 И забележете, липса на точка и запетая Оттук която не е необходима, когато 184 00:07:42,530 --> 00:07:43,200 прилагане. 185 00:07:43,200 --> 00:07:46,010 >> Така че нека този римейк, не правят суап. 186 00:07:46,010 --> 00:07:46,910 Много по-добра форма. 187 00:07:46,910 --> 00:07:48,130 Run не суап. 188 00:07:48,130 --> 00:07:48,740 И дявол да го вземе. 189 00:07:48,740 --> 00:07:51,650 Сега сме там, където бяхме в понеделник, когато нещо не сменяте. 190 00:07:51,650 --> 00:07:55,410 >> И каква е интуитивно обяснение защо това е така? 191 00:07:55,410 --> 00:07:56,380 Да? 192 00:07:56,380 --> 00:07:57,630 >> Студентът: [недоловим]. 193 00:07:57,630 --> 00:08:04,140 194 00:08:04,140 --> 00:08:05,230 >> DAVID Malan: Точно така. 195 00:08:05,230 --> 00:08:07,330 Така че А и В са копия на х и у. 196 00:08:07,330 --> 00:08:10,680 И в действителност, всеки път, когато съм бил Извикването на функциите до този момент, че 197 00:08:10,680 --> 00:08:12,540 преминава променливи, като цели числа - 198 00:08:12,540 --> 00:08:14,470 точно както суап очаква тук - 199 00:08:14,470 --> 00:08:16,270 момчета са преминаване в копия. 200 00:08:16,270 --> 00:08:19,150 >> Сега това означава, че е необходимо известно от време, за част от секундата, за 201 00:08:19,150 --> 00:08:23,270 компютър за копиране на бита от един променлива в бита на друга. 202 00:08:23,270 --> 00:08:24,610 Но това не е толкова голям проблем. 203 00:08:24,610 --> 00:08:25,920 Но те са все пак копие. 204 00:08:25,920 --> 00:08:30,020 >> И така, сега, в контекста на суап, Аз съм в действителност успешно 205 00:08:30,020 --> 00:08:31,180 промяна а и б. 206 00:08:31,180 --> 00:08:33,000 Всъщност, нека да направи бърза здрав разум проверите. 207 00:08:33,000 --> 00:08:36,830 Принтирай е а е% I, нов ред. 208 00:08:36,830 --> 00:08:38,770 И нека щепсела в. 209 00:08:38,770 --> 00:08:41,830 Сега нека да направи същото нещо с б. 210 00:08:41,830 --> 00:08:43,640 И нека да направи същото нещо тук. 211 00:08:43,640 --> 00:08:47,260 >> А сега, нека да копирате същите тези линии отново в долната част на функцията 212 00:08:47,260 --> 00:08:51,250 след моите три реда на интересен би могъл да извърши и 213 00:08:51,250 --> 00:08:53,270 отпечатате и б пореден път. 214 00:08:53,270 --> 00:08:56,030 Така че сега нека направим това, не правят суап. 215 00:08:56,030 --> 00:08:58,430 Позволете ми да направя прозореца на терминала на малко по-висок, така че ние можем да видим 216 00:08:58,430 --> 00:08:59,520 повече от него наведнъж. 217 00:08:59,520 --> 00:09:00,860 >> И не тече суап. 218 00:09:00,860 --> 00:09:04,000 х е 1, у е 2. а е 1, В е 2. 219 00:09:04,000 --> 00:09:06,070 И след това, а е 2, В е 1. 220 00:09:06,070 --> 00:09:09,390 Така че това е работа, точно като Джес е тук вътре на суап. 221 00:09:09,390 --> 00:09:13,090 Но, разбира се, това е като няма ефект за променливите в основната. 222 00:09:13,090 --> 00:09:15,360 >> Така видяхме един трик, чрез което може да се определи това, нали? 223 00:09:15,360 --> 00:09:19,560 Когато сте изправени пред този обхват проблем, можеш да шута и да х 224 00:09:19,560 --> 00:09:22,400 и у какви променливи, а? 225 00:09:22,400 --> 00:09:23,390 >> Можете да ги направят глобални. 226 00:09:23,390 --> 00:09:27,560 Сложете ги в самото началото на файла както направихме, дори в мача от 15. 227 00:09:27,560 --> 00:09:28,890 Ние използваме глобална променлива. 228 00:09:28,890 --> 00:09:32,420 Но в контекста на срещата на 15, това е разумно да имат глобално 229 00:09:32,420 --> 00:09:37,170 променлива представляваща борда, защото цялост на 15.c е всичко 230 00:09:37,170 --> 00:09:38,650 за прилагане на този мач. 231 00:09:38,650 --> 00:09:41,470 Това е, което съществува файл да се направи. 232 00:09:41,470 --> 00:09:44,170 >> Но в този случай тук, аз съм Извикването на функциите суап. 233 00:09:44,170 --> 00:09:45,380 Искам да разменят две променливи. 234 00:09:45,380 --> 00:09:48,950 И това трябва да започнете да се чувствате просто помия Ако разтвор на всички наши 235 00:09:48,950 --> 00:09:51,300 проблеми, когато се движат в обхвата въпроси е да я направите глобална. 236 00:09:51,300 --> 00:09:54,730 Защото много бързо нашата програма е Ще стане доста бъркотия. 237 00:09:54,730 --> 00:09:57,760 И ние сме го направили много пестеливо в резултат на 15.c. 238 00:09:57,760 --> 00:10:00,470 >> Но се оказва, че има по-добър начин напълно. 239 00:10:00,470 --> 00:10:05,600 Нека действително се върна и да изтриете принтиране е, само да се опрости този код. 240 00:10:05,600 --> 00:10:09,160 И нека да предложи това наистина е лошо. 241 00:10:09,160 --> 00:10:15,990 Но ако вместо да добавите в някои звездички и звездите, вместо да мога да се превърне това 242 00:10:15,990 --> 00:10:18,670 функция в едно, че е всъщност експлоатация. 243 00:10:18,670 --> 00:10:25,020 >> Така че нека да се върна тук и да признаем, казвайки звездички винаги е трудно, 244 00:10:25,020 --> 00:10:26,170 така че аз ще кажа звезди. 245 00:10:26,170 --> 00:10:27,660 Ще призная, че до един. 246 00:10:27,660 --> 00:10:28,190 Добре. 247 00:10:28,190 --> 00:10:30,190 И сега, какво ще да се направи, а? 248 00:10:30,190 --> 00:10:34,130 >> Така че, на първо място, аз отивам да се уточни че вместо да преминават едно цяло число в 249 00:10:34,130 --> 00:10:37,980 суап функция, аз съм вместо на ще каже Int звезда. 250 00:10:37,980 --> 00:10:39,170 Сега, какво означава звездата показват? 251 00:10:39,170 --> 00:10:41,970 Това е, че идеята за показалеца, че Binky, на глинената анимация характер, беше 252 00:10:41,970 --> 00:10:43,465 отнасящи се до преди малко. 253 00:10:43,465 --> 00:10:47,610 >> Така че, ако кажем, вътр звезда, смисъла на това сега е, че няма да бъде 254 00:10:47,610 --> 00:10:49,110 преминал в стойността му. 255 00:10:49,110 --> 00:10:50,350 Това няма да бъде копиран инча 256 00:10:50,350 --> 00:10:54,700 По-скоро, адреса на е ще бъдат прехвърлени инча 257 00:10:54,700 --> 00:10:57,840 >> Така се припомни, че вътрешността на вашия компютър е един куп памет, в противен случай 258 00:10:57,840 --> 00:10:58,760 известен като RAM. 259 00:10:58,760 --> 00:11:00,520 И това е само на RAM цял куп байта. 260 00:11:00,520 --> 00:11:03,320 Така че, ако си Mac или компютър има два гигабайта, имате две 261 00:11:03,320 --> 00:11:05,760 милиард байта памет. 262 00:11:05,760 --> 00:11:08,440 >> Сега нека предположим, че само за да пазят нещата хубаво и нормално, ние 263 00:11:08,440 --> 00:11:09,450 зададете адрес - 264 00:11:09,450 --> 00:11:10,170 редица - 265 00:11:10,170 --> 00:11:12,270 на всеки байт на RAM в компютъра. 266 00:11:12,270 --> 00:11:15,410 Първият байт на тези две млрд. е от числото нула. 267 00:11:15,410 --> 00:11:18,572 Следващият е байт номер едно, номер две, по целия път нагоре, точка точка 268 00:11:18,572 --> 00:11:20,530 точка, до около 2 милиарда. 269 00:11:20,530 --> 00:11:23,640 >> Така че можете да броя на байтове на паметта на вашия компютър. 270 00:11:23,640 --> 00:11:26,460 Така че нека да приемем, че това е, което имаме предвид под един адрес. 271 00:11:26,460 --> 00:11:31,360 Така че, когато виждам Int звезда, какво става да бъдат вкарани в суап сега е 272 00:11:31,360 --> 00:11:32,830 адреса на. 273 00:11:32,830 --> 00:11:37,150 Не му стойност, но независимо от неговата пощенска адрес е, така да се каже - 274 00:11:37,150 --> 00:11:38,810 си място в RAM. 275 00:11:38,810 --> 00:11:41,250 >> И по същия начин за б, аз ще да се каже едно и също нещо. 276 00:11:41,250 --> 00:11:42,720 Int, звезда, б. 277 00:11:42,720 --> 00:11:46,350 Като настрана, технически звездата може да отиде и на други места. 278 00:11:46,350 --> 00:11:50,140 Но ние ще се стандартизират на звездата е в непосредствена близост до типа данни. 279 00:11:50,140 --> 00:11:54,080 >> Така че сменяте подпис сега означава, дай ми адреса на едно цяло число, и покана 280 00:11:54,080 --> 00:11:55,400 това е адресът на. 281 00:11:55,400 --> 00:11:58,690 И ми даде друг адрес на INT и се обадете, че б адрес. 282 00:11:58,690 --> 00:12:01,120 >> Но сега ми код тук трябва да се промени. 283 00:12:01,120 --> 00:12:03,470 Защото, ако декларират вътр температура - 284 00:12:03,470 --> 00:12:05,580 която все още е от тип Int - 285 00:12:05,580 --> 00:12:08,700 но аз се съхранява в нея, каква стойност? 286 00:12:08,700 --> 00:12:12,870 За да бъде ясно, съм се сложи един с кода, както е записано в момента? 287 00:12:12,870 --> 00:12:14,360 >> Слагам на разположение в. 288 00:12:14,360 --> 00:12:16,500 Но аз не се грижи за В момента, нали? 289 00:12:16,500 --> 00:12:21,940 Temp съществува само третата чаша Джес " съществували, с каква цел? 290 00:12:21,940 --> 00:12:23,090 За да съхраните стойността. 291 00:12:23,090 --> 00:12:24,830 Мляко или портокалов сок. 292 00:12:24,830 --> 00:12:28,520 Не действително да се съхранява адреса на нито едно от тези неща, които се чувства 293 00:12:28,520 --> 00:12:31,200 малко безсмислено в този недвижим света контекста така или иначе. 294 00:12:31,200 --> 00:12:34,990 >> Така че наистина, това, което искате да поставите в темп не е адреса на, но 295 00:12:34,990 --> 00:12:36,180 Съдържанието на. 296 00:12:36,180 --> 00:12:41,930 Така че, ако е число като 123, това е 123-ото байт от паметта, че само 297 00:12:41,930 --> 00:12:45,090 се случва да бъде заема, че стойността в се случва да бъде окупатор. 298 00:12:45,090 --> 00:12:49,040 >> Ако искате да отидете на този адрес, Аз трябва да кажа, звезда. 299 00:12:49,040 --> 00:12:52,610 По същия начин, ако трябва да се промени това, което е на адреса, а, да променя 300 00:12:52,610 --> 00:12:53,570 това, за да започнете. 301 00:12:53,570 --> 00:12:58,185 Ако искам да се съхранява в това, което е в локация с това, което е на мястото 302 00:12:58,185 --> 00:13:02,180 най-б, б звезден звезда. 303 00:13:02,180 --> 00:13:05,340 >> Така че по-кратко, дори ако това не е съвсем потъва в още - и аз не можеше да се очаква 304 00:13:05,340 --> 00:13:06,560 че би толкова бързо - 305 00:13:06,560 --> 00:13:11,100 осъзнават, че всичко, което правя е префикс тези звезди на моите променливи, 306 00:13:11,100 --> 00:13:13,350 поговорка не вземете стойностите. 307 00:13:13,350 --> 00:13:14,520 Не променяйте стойностите. 308 00:13:14,520 --> 00:13:17,600 Но скоро, отидете на тези адреси и да получите стойността. 309 00:13:17,600 --> 00:13:21,430 Отидете на този адрес и промяна стойността там. 310 00:13:21,430 --> 00:13:25,500 >> Така че сега нека да превъртите обратно до върха, само за да определят този ред тук, за да 311 00:13:25,500 --> 00:13:27,690 промяна на прототипа да съвпадат. 312 00:13:27,690 --> 00:13:30,280 Но сега трябва да се направи още нещо. 313 00:13:30,280 --> 00:13:35,500 Интуитивно, ако съм се променила вида аргументи, суап очаква, 314 00:13:35,500 --> 00:13:37,245 какво друго трябва да се промените в моя код? 315 00:13:37,245 --> 00:13:39,750 316 00:13:39,750 --> 00:13:40,840 >> Когато аз наричам суап. 317 00:13:40,840 --> 00:13:43,340 Защото точно сега, това, което съм I минаваща за размяна все още? 318 00:13:43,340 --> 00:13:47,450 Стойността х и стойността на Y, или на мляко и портокалов сок. 319 00:13:47,450 --> 00:13:48,510 Но аз не искам да правя това. 320 00:13:48,510 --> 00:13:51,060 Аз, вместо да премине в какво? 321 00:13:51,060 --> 00:13:53,050 Местоположението на х и местоположението на у. 322 00:13:53,050 --> 00:13:55,300 Какви са техните пощенски адреси, така да се каже. 323 00:13:55,300 --> 00:13:57,600 >> Така че, да се направи това, има един амперсанд. 324 00:13:57,600 --> 00:13:59,260 Ampersand вид звучи като адрес. 325 00:13:59,260 --> 00:14:03,240 така п, амперсанд, адреса на X и Y адрес. 326 00:14:03,240 --> 00:14:06,790 Така че това е умишлено, че ние използваме амперсанди Когато се обаждате на функция, 327 00:14:06,790 --> 00:14:10,230 и звездите при декларирането и при прилагане на функция. 328 00:14:10,230 --> 00:14:14,220 >> И само помислете амперсанд като адрес на оператора, и звезда като 329 00:14:14,220 --> 00:14:15,490 отида там оператор - 330 00:14:15,490 --> 00:14:18,640 или по-точно, на сочен оператор. 331 00:14:18,640 --> 00:14:23,480 Така че това е един куп думи, само за да се каже, че сега, надявам се, ще суап 332 00:14:23,480 --> 00:14:24,440 да бъде вярна. 333 00:14:24,440 --> 00:14:26,550 >> Нека да вървим напред и да направи - 334 00:14:26,550 --> 00:14:30,940 нека действително да преименувате файла, за да не тази програма все още да се нарича не суап. 335 00:14:30,940 --> 00:14:33,240 Аз твърдя, че ние ще го наричаме swap.c сега. 336 00:14:33,240 --> 00:14:35,670 Така че се уверете, суап. 337 00:14:35,670 --> 00:14:37,520 Dot, наклонена черта, суап. 338 00:14:37,520 --> 00:14:40,210 >> И сега наистина, х е 1, у е 2. 339 00:14:40,210 --> 00:14:44,040 И тогава, х е 2, Y е един. 340 00:14:44,040 --> 00:14:46,500 Ами нека да видим дали не можем да направим това с малко по-различен начин на това, което е 341 00:14:46,500 --> 00:14:47,180 става тук. 342 00:14:47,180 --> 00:14:51,250 Първо, позволете ми да се фокусирам върху нашата изготвяне екрана тук. 343 00:14:51,250 --> 00:14:54,160 И нека да предложи за миг - и когато рисувам тук ще се отрази 344 00:14:54,160 --> 00:14:58,660 там сега - нека да предложи ето един куп памет, или 345 00:14:58,660 --> 00:15:00,540 RAM, вътрешността на компютъра ми. 346 00:15:00,540 --> 00:15:04,140 >> И това ще бъде номер захапка, да речем, 1. 347 00:15:04,140 --> 00:15:05,720 Това ще бъде байта номер 2. 348 00:15:05,720 --> 00:15:08,220 И аз ще направя цял куп още, и след това един куп точки дот точка, за да 349 00:15:08,220 --> 00:15:10,880 показват, че има 2 милиарда от тези неща. 350 00:15:10,880 --> 00:15:13,520 4, 5, и така нататък. 351 00:15:13,520 --> 00:15:17,055 >> Така че има първите пет байта на паметта на компютъра ми. 352 00:15:17,055 --> 00:15:17,560 Ясно ли е? 353 00:15:17,560 --> 00:15:19,060 Много малко от 2 млрд. евро. 354 00:15:19,060 --> 00:15:21,120 Но сега аз ще предложи следното. 355 00:15:21,120 --> 00:15:27,490 Ще предложа х ще съхраните номера 1 и Y ще 356 00:15:27,490 --> 00:15:29,690 за да съхраните номера 2. 357 00:15:29,690 --> 00:15:35,000 И нека да вървим напред сега и представлява тези стойности, както следва. 358 00:15:35,000 --> 00:15:41,510 >> Да го направим както следва. 359 00:15:41,510 --> 00:15:42,870 Дай ми само една секунда. 360 00:15:42,870 --> 00:15:44,150 Една секунда. 361 00:15:44,150 --> 00:15:45,680 OK. 362 00:15:45,680 --> 00:15:47,560 Аз искам да направя това малко по - 363 00:15:47,560 --> 00:15:50,440 да го направим отново. 364 00:15:50,440 --> 00:15:53,250 В противен случай аз ще и с помощта на същите номера, неволно, 365 00:15:53,250 --> 00:15:54,230 няколко пъти. 366 00:15:54,230 --> 00:15:57,320 >> Така че просто така че ние имаме различни номера да се говори за, да го наречем този байт 367 00:15:57,320 --> 00:16:03,391 номер 123, 124, 125, 126, и точка точка точка. 368 00:16:03,391 --> 00:16:08,400 И нека да твърдят сега, че аз отивам да постави стойност един тук, и стойността 2 369 00:16:08,400 --> 00:16:11,990 Оттук иначе известни като х и у. 370 00:16:11,990 --> 00:16:15,300 Така че той просто така се случва, че това е X, това е г. 371 00:16:15,300 --> 00:16:18,180 >> И само от някои случайност, на компютъра, операционната система, 372 00:16:18,180 --> 00:16:21,890 случи да се сложи х в населено място номер 123. 373 00:16:21,890 --> 00:16:25,590 И у крайна сметка на място при 124 - 374 00:16:25,590 --> 00:16:26,330 Дявол да го вземе. 375 00:16:26,330 --> 00:16:28,700 Трябваше да определя това. 376 00:16:28,700 --> 00:16:34,040 О, човече, наистина ли ми искате да направите това? 377 00:16:34,040 --> 00:16:37,340 Да, искам да поправя това и б правилното за това днес. 378 00:16:37,340 --> 00:16:39,950 Съжаляваме, нова в това. 379 00:16:39,950 --> 00:16:45,020 >> 127, 131, и аз не искам да бъда този Комплексът, но защо да променя 380 00:16:45,020 --> 00:16:46,340 номера там? 381 00:16:46,340 --> 00:16:48,360 Защото аз искам да целочислени всъщност е четири байта. 382 00:16:48,360 --> 00:16:49,810 Така че нека да бъде супер анален за това. 383 00:16:49,810 --> 00:16:53,800 Така че, ако един се случва да се обърне внимание 123, на 2 ще бъде на адрес 384 00:16:53,800 --> 00:16:55,730 127, защото това е само на 4 сбогуванията далеч. 385 00:16:55,730 --> 00:16:56,210 Това е всичко. 386 00:16:56,210 --> 00:16:58,640 И ние ще забравите за всички други адреси в света. 387 00:16:58,640 --> 00:17:03,320 >> Така че х е в населено място 123, у е в населено място 127. 388 00:17:03,320 --> 00:17:05,770 И сега, какво правя всъщност искате да направите? 389 00:17:05,770 --> 00:17:10,099 Когато аз наричам суап сега, това, което е всъщност се случва? 390 00:17:10,099 --> 00:17:14,920 Е, когато аз наричам суап, аз съм минаваща през адреса на X и Y адрес. 391 00:17:14,920 --> 00:17:18,540 Така например, ако тези две части на хартия сега представляват две 392 00:17:18,540 --> 00:17:23,510 аргументи А и Б да сменяте, това, което съм ще напиша на първия от тях, 393 00:17:23,510 --> 00:17:27,720 което аз ще се обадя отнасят до като? 394 00:17:27,720 --> 00:17:30,610 >> Точно така, 123. 395 00:17:30,610 --> 00:17:31,905 Така че това аз твърдя е. 396 00:17:31,905 --> 00:17:32,955 Това е параметър. 397 00:17:32,955 --> 00:17:35,856 Слагам адреса на х там. 398 00:17:35,856 --> 00:17:38,152 >> Какво е това? 399 00:17:38,152 --> 00:17:40,890 >> Какво е това? 400 00:17:40,890 --> 00:17:41,190 >> Не, не. 401 00:17:41,190 --> 00:17:41,720 Това е добре. 402 00:17:41,720 --> 00:17:42,570 И все пак добре, все още е добро. 403 00:17:42,570 --> 00:17:43,530 Така че това е. 404 00:17:43,530 --> 00:17:46,240 И сега на втория лист хартия, това ще бъде б, и това, което съм 405 00:17:46,240 --> 00:17:49,010 ще бъдат писмено на това парче хартия? 406 00:17:49,010 --> 00:17:50,080 127. 407 00:17:50,080 --> 00:17:53,720 >> Така че единственото нещо, което се е променило, тъй като предишната ни разказваше тази история е, 408 00:17:53,720 --> 00:17:58,590 вместо действително едно и две, аз съм ще премине през 123 и 127. 409 00:17:58,590 --> 00:18:02,130 И аз сега ще сложа вътре на това поле, нали? 410 00:18:02,130 --> 00:18:04,640 Така, че черната кутия сега представлява суап функция. 411 00:18:04,640 --> 00:18:07,230 >> В същото време, нека сега някой изпълнение на функцията за размяна. 412 00:18:07,230 --> 00:18:09,090 Дали някой тук искали да работят като доброволци? 413 00:18:09,090 --> 00:18:09,560 Хайде нагоре. 414 00:18:09,560 --> 00:18:11,080 Как се казваш? 415 00:18:11,080 --> 00:18:11,460 Чарли. 416 00:18:11,460 --> 00:18:12,080 Добре, Чарли. 417 00:18:12,080 --> 00:18:14,810 Хайде нагоре. 418 00:18:14,810 --> 00:18:17,310 >> Така че Чарли ще играе ролята на нашето поле. 419 00:18:17,310 --> 00:18:21,460 И Чарли, това, което бих искал да направиш сега се прилагат суап по такъв начин, 420 00:18:21,460 --> 00:18:25,320 че предвид тези два адреса, всъщност сте се ще 421 00:18:25,320 --> 00:18:26,330 за промяна на стойностите. 422 00:18:26,330 --> 00:18:28,290 И аз ще шепна в ухото как да стартирате TV тук. 423 00:18:28,290 --> 00:18:29,930 >> Така че продължавайте напред, и ти си черна кутия. 424 00:18:29,930 --> 00:18:30,920 Излез там. 425 00:18:30,920 --> 00:18:34,054 Какви ценности виждаш за и какви стойности виждаш за б? 426 00:18:34,054 --> 00:18:36,740 >> CHARLIE: а е 123 и В е 127. 427 00:18:36,740 --> 00:18:37,530 >> DAVID Malan: OK, точно така. 428 00:18:37,530 --> 00:18:38,940 Сега има пауза за момент. 429 00:18:38,940 --> 00:18:41,680 Първото нещо, което ще направим сега, Според Кодекса - които 430 00:18:41,680 --> 00:18:43,220 Сега ще спра на екрана - 431 00:18:43,220 --> 00:18:46,750 ще бъде да се разпредели малко малко памет нарича темп. 432 00:18:46,750 --> 00:18:48,850 Така че аз ще отида напред и ви, че паметта. 433 00:18:48,850 --> 00:18:52,210 >> Така че това ще бъде трета променлива , че имате достъп до 434 00:18:52,210 --> 00:18:54,080 ви призова темп. 435 00:18:54,080 --> 00:18:57,120 И какво смяташ да пишат на температура лист хартия? 436 00:18:57,120 --> 00:19:02,524 437 00:19:02,524 --> 00:19:03,470 >> CHARLIE: Указатели, нали? 438 00:19:03,470 --> 00:19:04,790 >> DAVID Malan: Добре, добре, не непременно указатели. 439 00:19:04,790 --> 00:19:07,230 Така линията на код, които съм маркира на дясната страна, 440 00:19:07,230 --> 00:19:07,900 нека да започнем от там. 441 00:19:07,900 --> 00:19:08,890 Той казва звезда. 442 00:19:08,890 --> 00:19:11,670 Така че в момента съхраняване на номер 123. 443 00:19:11,670 --> 00:19:16,660 И просто интуитивно, това, което е звезда 123 кажеш? 444 00:19:16,660 --> 00:19:21,630 >> Но специално, ако е 123, звезда означава какво? 445 00:19:21,630 --> 00:19:22,560 Стойността на. 446 00:19:22,560 --> 00:19:24,580 Или по-небрежно, отидете там. 447 00:19:24,580 --> 00:19:28,620 Така че позволете ми да предложа, държи на в ръката си, давай напред и лечение, които 448 00:19:28,620 --> 00:19:29,430 като че ли е карта. 449 00:19:29,430 --> 00:19:32,940 И да се разходим до компютъра памет, и нас ще разберете какво е 450 00:19:32,940 --> 00:19:36,520 в населено място 123. 451 00:19:36,520 --> 00:19:37,720 Точно така. 452 00:19:37,720 --> 00:19:41,100 >> Така ние виждаме в населено място 123 е това, което, очевидно? 453 00:19:41,100 --> 00:19:44,240 Значи, каква е стойността сега сте ще пуснат в температурата? 454 00:19:44,240 --> 00:19:44,750 Точно така. 455 00:19:44,750 --> 00:19:45,600 Така че продължавайте напред и да го направя. 456 00:19:45,600 --> 00:19:51,280 И напишете номера 1 на парче хартия, която е в момента озаглавена темп. 457 00:19:51,280 --> 00:19:53,540 >> И сега следващата стъпка, която ти започваш да се прилагат 458 00:19:53,540 --> 00:19:54,310 ще бъде това, което. 459 00:19:54,310 --> 00:19:57,820 Е, от дясната страна на следващия ред на кода е звезда б. б, на 460 00:19:57,820 --> 00:19:59,260 Разбира се, съхранява един адрес. 461 00:19:59,260 --> 00:20:02,270 Който да обхваща 127. 462 00:20:02,270 --> 00:20:06,620 Star б означава това, небрежно говори? 463 00:20:06,620 --> 00:20:08,700 >> Отидете на това място. 464 00:20:08,700 --> 00:20:14,988 Така че продължавайте напред и да ни разберете какво е в населено място 127. 465 00:20:14,988 --> 00:20:15,480 OK. 466 00:20:15,480 --> 00:20:19,170 Разбира се, на място 127, все още е на стойност 2. 467 00:20:19,170 --> 00:20:24,060 Така че какво ще сега да се съхранява при каквото и населено място в? 468 00:20:24,060 --> 00:20:26,860 Така звездни средство отидете на местоположението на. 469 00:20:26,860 --> 00:20:29,770 Какво е мястото на? 470 00:20:29,770 --> 00:20:30,430 >> Точно така. 471 00:20:30,430 --> 00:20:34,190 Така че сега, ако искате да промените това, което е на това място - 472 00:20:34,190 --> 00:20:36,470 Аз ще отида напред и да тичам гумата се тук. 473 00:20:36,470 --> 00:20:37,760 И сега той се връща на четката. 474 00:20:37,760 --> 00:20:42,190 Какъв номер ще си пиша в тази празна кутия сега? 475 00:20:42,190 --> 00:20:42,850 >> Точно така. 476 00:20:42,850 --> 00:20:46,470 Така че този ред код, за да бъде ясно - нека ме спрете това, което правите и Чарли 477 00:20:46,470 --> 00:20:51,730 посочват тук, това, което той направи, е просто пиша в тази кутия в населено място 123 478 00:20:51,730 --> 00:20:55,150 стойността, която преди е била в б. 479 00:20:55,150 --> 00:20:59,140 И така, сега сме изпълнени наистина този втори ред код. 480 00:20:59,140 --> 00:21:01,920 >> Сега за съжаление, има все още остава един ред. 481 00:21:01,920 --> 00:21:04,900 Сега това, което е за температура, буквално? 482 00:21:04,900 --> 00:21:06,200 Очевидно е номер едно. 483 00:21:06,200 --> 00:21:07,020 Това не е адрес. 484 00:21:07,020 --> 00:21:09,380 Това е просто един номер, вид променлива от една седмица. 485 00:21:09,380 --> 00:21:13,520 >> И сега, когато ти казват звезден б, това означава, че отидете на адрес б, който е на 486 00:21:13,520 --> 00:21:15,090 Разбира се тук. 487 00:21:15,090 --> 00:21:16,020 Така че това на едно място - 488 00:21:16,020 --> 00:21:18,320 Аз ще отида напред и да изтриете това, което е в действителност има - и това, което са 489 00:21:18,320 --> 00:21:20,820 щях да пиша сега в локализация 127? 490 00:21:20,820 --> 00:21:22,010 >> CHARLIE: Temp, който е един. 491 00:21:22,010 --> 00:21:23,430 >> DAVID Malan: Temp, който е един. 492 00:21:23,430 --> 00:21:25,670 И какво се случва с темп в крайна сметка? 493 00:21:25,670 --> 00:21:26,600 Е, наистина не знам. 494 00:21:26,600 --> 00:21:27,420 Ние не ми пука. 495 00:21:27,420 --> 00:21:31,090 Всеки път въведохме функция До този момент всички локални променливи имате 496 00:21:31,090 --> 00:21:31,890 наистина са местни. 497 00:21:31,890 --> 00:21:33,060 И те просто изчезват. 498 00:21:33,060 --> 00:21:35,040 Те са възстановени от операционната система в крайна сметка. 499 00:21:35,040 --> 00:21:39,800 >> Така, че все още има температура на стойност 1 е нещо фундаментално 500 00:21:39,800 --> 00:21:41,150 безинтересни за нас. 501 00:21:41,150 --> 00:21:43,100 Добре, така че аплодисменти ако можехме за Чарли. 502 00:21:43,100 --> 00:21:46,400 Много добре направено. 503 00:21:46,400 --> 00:21:51,520 >> Добре, така че това, което прави по- това означава, че може да направи? 504 00:21:51,520 --> 00:21:54,400 Така се оказва, че ние сме били казва няколко благородни лъжи 505 00:21:54,400 --> 00:21:55,540 от доста време. 506 00:21:55,540 --> 00:21:59,990 Всъщност се оказва, че низ, всичко това време, не е истински 507 00:21:59,990 --> 00:22:02,190 поредица от символи, сами по себе си. 508 00:22:02,190 --> 00:22:03,980 Някакси е, че интуитивно. 509 00:22:03,980 --> 00:22:08,270 >> Но технически погледнато, низ е тип данни, които ние декларирахме вътрешността на 510 00:22:08,270 --> 00:22:12,170 CS50 на библиотеката, за да се опрости света през първите няколко седмици на класа. 511 00:22:12,170 --> 00:22:20,130 Какво низ наистина е е адресът на герой, някъде в RAM. 512 00:22:20,130 --> 00:22:25,530 Низ е наистина много, като 123 или 127, което се случва, да разграничават 513 00:22:25,530 --> 00:22:28,420 където низ започва в на компютъра ви памет. 514 00:22:28,420 --> 00:22:31,870 >> Но това не представлява низ, сам по себе си, себе си. 515 00:22:31,870 --> 00:22:33,460 И ние можем да видим това по следния начин. 516 00:22:33,460 --> 00:22:35,980 Нека да вървим напред и да се отворят някакъв код, който е сред 517 00:22:35,980 --> 00:22:38,340 днешните примери изходния код. 518 00:22:38,340 --> 00:22:42,225 И аз ще отида напред и да отворите до, да речем, за сравнение-0.c. 519 00:22:42,225 --> 00:22:44,830 520 00:22:44,830 --> 00:22:48,790 Това е лоша програма, която ще да се прилага, както следва. 521 00:22:48,790 --> 00:22:49,040 >> Първо. 522 00:22:49,040 --> 00:22:50,420 Отивам да кажа нещо. 523 00:22:50,420 --> 00:22:52,660 Тогава аз ще отида напред и получите низ от потребителя 524 00:22:52,660 --> 00:22:53,750 с това, че следващия ред. 525 00:22:53,750 --> 00:22:55,370 Тогава аз ще го кажа отново. 526 00:22:55,370 --> 00:22:57,540 Тогава аз ще намеря друга низ от потребителя. 527 00:22:57,540 --> 00:23:00,390 >> И забележете, аз ви показвам един от низове в променлива наречена S, и 528 00:23:00,390 --> 00:23:03,040 още един от тези струни в променлива наречена тона. 529 00:23:03,040 --> 00:23:07,480 И сега аз ще твърдят, много основателно, че ако и равен равен тон, 530 00:23:07,480 --> 00:23:08,940 конците са същите. 531 00:23:08,940 --> 00:23:09,970 Можете въведете едно и също нещо. 532 00:23:09,970 --> 00:23:11,830 Иначе, конците са не е същото. 533 00:23:11,830 --> 00:23:15,440 >> В края на краищата, ако входа две цели числа, две символа, две поплавъци, две двойни, всички от 534 00:23:15,440 --> 00:23:18,400 типовете данни, за които се говори за до този момент да ги сравни - 535 00:23:18,400 --> 00:23:22,070 Спомням си направихме много ясно преди известно време че не направите това, тъй като 536 00:23:22,070 --> 00:23:25,840 единен знак за равенство, разбира се оператора за присвояване. 537 00:23:25,840 --> 00:23:26,820 Така че би било грешка. 538 00:23:26,820 --> 00:23:29,260 >> Ние използваме равен знак за равенство, които наистина сравнява 539 00:23:29,260 --> 00:23:31,050 неща за истинско равенство. 540 00:23:31,050 --> 00:23:32,275 Но аз твърдя, че това е бъги. 541 00:23:32,275 --> 00:23:37,400 Ако отида напред и да направи сравнение нула, и след това направете точка наклонена черта сравнение нула. 542 00:23:37,400 --> 00:23:39,700 И напишете в, да кажем, здравей. 543 00:23:39,700 --> 00:23:41,590 И след това нека да кажа здрасти отново. 544 00:23:41,590 --> 00:23:46,040 Буквално едно и също нещо, на компютъра претенции аз напечатани различни неща. 545 00:23:46,040 --> 00:23:47,640 >> Сега може би аз просто погрешно написан нещо. 546 00:23:47,640 --> 00:23:49,910 Ще въведете името ми този път. 547 00:23:49,910 --> 00:23:52,580 Искам да кажа, здравейте. 548 00:23:52,580 --> 00:23:54,770 Здравейте. 549 00:23:54,770 --> 00:23:57,360 Това е различно всеки път. 550 00:23:57,360 --> 00:23:58,430 >> Е, защо е така? 551 00:23:58,430 --> 00:24:00,140 Какво всъщност се случва под предния капак? 552 00:24:00,140 --> 00:24:03,270 Е, това, което наистина се случва под качулката е низ след това 553 00:24:03,270 --> 00:24:07,410 Аз написах, че първи път например е думата, здравей, разбира се. 554 00:24:07,410 --> 00:24:11,660 Но ако ние представляваме този отдолу качулката, припомни, че 555 00:24:11,660 --> 00:24:13,470 низ е в масив. 556 00:24:13,470 --> 00:24:15,040 И си казахме, колкото в миналото. 557 00:24:15,040 --> 00:24:20,200 >> Така че, ако си правя този масив по този начин, аз съм ще представляват нещо съвсем 558 00:24:20,200 --> 00:24:23,030 подобно на това, което направихме преди малко. 559 00:24:23,030 --> 00:24:25,390 И там е всъщност нещо, специално тук. 560 00:24:25,390 --> 00:24:28,090 Какво сме се определи най- в края на всеки низ? 561 00:24:28,090 --> 00:24:30,760 Да, тази нула наклонена черта, която е само начин за представяне, 562 00:24:30,760 --> 00:24:33,610 буквално, 00000000. 563 00:24:33,610 --> 00:24:35,680 Осем 0 бита в един ред. 564 00:24:35,680 --> 00:24:37,610 >> Не знам, честно казано, това, което е след това. 565 00:24:37,610 --> 00:24:40,090 Това е просто един куп повече RAM вътрешността на компютъра ми. 566 00:24:40,090 --> 00:24:40,970 Но това е масив. 567 00:24:40,970 --> 00:24:42,260 Ние говорихме за масиви преди. 568 00:24:42,260 --> 00:24:45,010 И ние обикновено говорим за масиви като място нула, 569 00:24:45,010 --> 00:24:46,580 след това, а след това два. 570 00:24:46,580 --> 00:24:47,950 Но това е само за удобство. 571 00:24:47,950 --> 00:24:49,380 И това е напълно относително. 572 00:24:49,380 --> 00:24:53,010 >> Когато сте всъщност да е с памет от на компютър, това е разбира се всеки 573 00:24:53,010 --> 00:24:55,450 2 милиарда някои странни байта, потенциално. 574 00:24:55,450 --> 00:24:59,100 Така че наистина под предния капак, през цялото това време, да. 575 00:24:59,100 --> 00:25:01,670 Това може много добре да бъде нула скоба. 576 00:25:01,670 --> 00:25:04,780 Но ако копаем още по-дълбоко под предния капак, това е наистина 577 00:25:04,780 --> 00:25:07,000 справяне с номер 123. 578 00:25:07,000 --> 00:25:09,150 Това е адрес 124. 579 00:25:09,150 --> 00:25:11,040 Това е адрес 125. 580 00:25:11,040 --> 00:25:12,540 >> И аз не се притеснявам този път. 581 00:25:12,540 --> 00:25:15,840 Това са сега един байта освен поради каква причина? 582 00:25:15,840 --> 00:25:17,930 Колко голяма е Чар? 583 00:25:17,930 --> 00:25:19,170 A Чар е само един байт. 584 00:25:19,170 --> 00:25:20,570 Едно цяло число обикновено е четири байта. 585 00:25:20,570 --> 00:25:24,850 Значи затова го направих 123, 127, 131 и така нататък. 586 00:25:24,850 --> 00:25:27,560 Сега мога да продължа по математика прости и просто правя плюс 1. 587 00:25:27,560 --> 00:25:30,510 И това е сега това, което наистина се случва на под предния капак. 588 00:25:30,510 --> 00:25:37,760 >> Така че, когато декларират нещо подобно, низ и това всъщност - 589 00:25:37,760 --> 00:25:39,170 Оказва се - 590 00:25:39,170 --> 00:25:41,190 Чар звезда. 591 00:25:41,190 --> 00:25:44,640 Star, разбира се, означава адрес, известен още като показалка. 592 00:25:44,640 --> 00:25:46,200 Така че това е адресът на нещо. 593 00:25:46,200 --> 00:25:47,510 Какво е това на адреса на? 594 00:25:47,510 --> 00:25:47,760 >> Е - 595 00:25:47,760 --> 00:25:51,680 Аз съм единственият, който може да види много важен момент правя, или смятате, че 596 00:25:51,680 --> 00:25:52,560 Правя. 597 00:25:52,560 --> 00:25:55,270 Така низ - 598 00:25:55,270 --> 00:25:57,180 Тъжното е, че имам монитор точно там, където 599 00:25:57,180 --> 00:25:58,100 може да се види, че. 600 00:25:58,100 --> 00:26:00,990 >> Добре, така низ и е това, което I обявена преди това. 601 00:26:00,990 --> 00:26:04,600 Но се оказва, благодарение на малко магия в библиотеката CS50, всичко това 602 00:26:04,600 --> 00:26:08,780 време низ буквално Чар е звезда. 603 00:26:08,780 --> 00:26:11,310 Звездата отново означава показалеца или адрес. 604 00:26:11,310 --> 00:26:14,180 Фактът, че това е фланкиращ Чар дума означава, че това е 605 00:26:14,180 --> 00:26:15,970 адрес на герой. 606 00:26:15,970 --> 00:26:23,100 >> Така че, ако получите низ се нарича, и въведете в Н-Е-Л-Л-О, да предложи това, което сега е да се 607 00:26:23,100 --> 00:26:27,330 низ буквално се връща всички този път, въпреки че ние сме по-скоро 608 00:26:27,330 --> 00:26:29,980 опростени света? 609 00:26:29,980 --> 00:26:33,310 Какво означава да низ всъщност завърне като неговото връщане стойност? 610 00:26:33,310 --> 00:26:35,830 611 00:26:35,830 --> 00:26:38,720 >> 123 в този случай, например. 612 00:26:38,720 --> 00:26:42,630 Ние преди това каза, че взимането на просто връща низ, поредица от 613 00:26:42,630 --> 00:26:43,300 героите. 614 00:26:43,300 --> 00:26:44,790 Но това е доста голяма бяла лъжа. 615 00:26:44,790 --> 00:26:48,010 Начинът, по който се низ наистина работи под капака е тя получава 616 00:26:48,010 --> 00:26:48,930 низ от потребителя. 617 00:26:48,930 --> 00:26:51,530 Той Plops знаците, които Той или тя видове в паметта. 618 00:26:51,530 --> 00:26:54,680 Тя поставя наклонена черта нула в края на тези поредица от знаци. 619 00:26:54,680 --> 00:26:57,310 >> Но след това, което се получи низ буквално се върне? 620 00:26:57,310 --> 00:27:02,710 Той буквално връща адрес на първите байта в RAM, че 621 00:27:02,710 --> 00:27:04,130 го използва за тази сила. 622 00:27:04,130 --> 00:27:07,500 И се оказва, че само чрез връщане един адрес на 623 00:27:07,500 --> 00:27:12,120 Първият знак в низа, който е достатъчно за намиране на цялост на 624 00:27:12,120 --> 00:27:12,630 низа. 625 00:27:12,630 --> 00:27:16,930 >> С други думи, да низ не трябва за да се върнете 123 и 124 и 125. 626 00:27:16,930 --> 00:27:19,950 Тя не трябва да ми даде дълго списък на всички байтове, които 627 00:27:19,950 --> 00:27:20,740 ми низ се използва. 628 00:27:20,740 --> 00:27:22,670 Защото едно, всички те са успоредно. 629 00:27:22,670 --> 00:27:28,160 И второ, на базата на първия адрес, I мога да разбера, когато низ завършва. 630 00:27:28,160 --> 00:27:29,910 Как? 631 00:27:29,910 --> 00:27:33,490 >> Особеният характер нула, на наклонена черта нула в края. 632 00:27:33,490 --> 00:27:35,430 Така че с други думи, ако Заобикаля - 633 00:27:35,430 --> 00:27:36,530 вътрешността на променливите - 634 00:27:36,530 --> 00:27:41,300 адреса на Чар, като вие поемате че в края на всеки низ, нито 635 00:27:41,300 --> 00:27:45,040 поредица от символи, като ние, хората, мисля за низове, ако се предположи, че 636 00:27:45,040 --> 00:27:48,600 в края на всеки такъв низ има нулева наклонена черта, ти си златен. 637 00:27:48,600 --> 00:27:52,430 Защото винаги можете да намерите края на низ. 638 00:27:52,430 --> 00:27:54,870 >> Сега какво всъщност тогава ще в тази програма? 639 00:27:54,870 --> 00:27:59,990 Защо е тази програма, сравни-0.c, бъги? 640 00:27:59,990 --> 00:28:01,690 Какво всъщност се сравняват? 641 00:28:01,690 --> 00:28:02,420 Да? 642 00:28:02,420 --> 00:28:05,000 >> Студентът: [недоловим]. 643 00:28:05,000 --> 00:28:05,730 >> DAVID Malan: Точно така. 644 00:28:05,730 --> 00:28:08,350 Това е сравняване на места на струните. 645 00:28:08,350 --> 00:28:12,420 Така че, ако потребителят е въвел в здравей веднъж, както направих аз, паметта може да се свърши 646 00:28:12,420 --> 00:28:13,430 изглеждам така. 647 00:28:13,430 --> 00:28:18,210 Ако това потребителят видове в Здравейте отново, но като се обадите получите низ отново, с е 648 00:28:18,210 --> 00:28:21,800 не е особено умно, освен ако те науча тя да бъде умна като пишете код. 649 00:28:21,800 --> 00:28:22,430 >> C - 650 00:28:22,430 --> 00:28:23,860 и компютри, по-общо - 651 00:28:23,860 --> 00:28:27,370 Ако напишете думата Здравейте отново, Знаете ли, че това, което ще получите. 652 00:28:27,370 --> 00:28:31,480 Вие просто ще получите втори масив памет, която, да, случва се 653 00:28:31,480 --> 00:28:35,510 съхраняване на H-E-L-L-О и така нататък. 654 00:28:35,510 --> 00:28:38,240 >> Това ще изглежда по същия начин нас, хората, но този адрес 655 00:28:38,240 --> 00:28:39,460 може да не е 123. 656 00:28:39,460 --> 00:28:42,470 Той може просто да се случи така, че операционна система, има някои разположение 657 00:28:42,470 --> 00:28:45,430 пространство, например в населено място - 658 00:28:45,430 --> 00:28:49,820 нека да кажа нещо произволно, , като това е място 200. 659 00:28:49,820 --> 00:28:51,620 А това е място 201. 660 00:28:51,620 --> 00:28:53,060 А това е място 202. 661 00:28:53,060 --> 00:28:55,730 Нямаме представа къде е ще бъде в паметта. 662 00:28:55,730 --> 00:28:59,110 >> Но какво означава това е, че това, което е ще бъдат съхранявани в крайна сметка в S? 663 00:28:59,110 --> 00:29:00,750 Броят 123. 664 00:29:00,750 --> 00:29:04,860 Какво ще се съхраняват в тон, в този произволен пример? 665 00:29:04,860 --> 00:29:06,300 Броят 200. 666 00:29:06,300 --> 00:29:11,410 И всичко това означава, че след това е очевидно, 123 не е равно на 200. 667 00:29:11,410 --> 00:29:14,940 И така, това, ако никога състояние Проверява. 668 00:29:14,940 --> 00:29:18,430 Защото взимането използва различен блокове памет всеки път. 669 00:29:18,430 --> 00:29:20,360 >> Сега можем да видим това отново В друг пример. 670 00:29:20,360 --> 00:29:23,764 Нека да вървим напред и да се отворят копиране 0.c. 671 00:29:23,764 --> 00:29:28,770 Аз твърдя, че този пример ще опита - но не успяват - да копирате две струни 672 00:29:28,770 --> 00:29:29,910 както следва. 673 00:29:29,910 --> 00:29:31,730 >> Отивам да кажа нещо на потребителя. 674 00:29:31,730 --> 00:29:34,490 Аз след това ще получите низ и го наричат ​​лидер. 675 00:29:34,490 --> 00:29:36,400 И сега, аз правя тази проверка тук. 676 00:29:36,400 --> 00:29:37,990 Споменахме това малко назад. 677 00:29:37,990 --> 00:29:42,490 Но когато може да получи нулева възвръщаемост низ, друг специален знак или специален 678 00:29:42,490 --> 00:29:45,050 символ Да речем. 679 00:29:45,050 --> 00:29:45,900 Ако е от паметта. 680 00:29:45,900 --> 00:29:48,970 >> Например, ако потребителят е наистина е трудно и вида на брутален 681 00:29:48,970 --> 00:29:51,220 броя на символите в клавиатура и хитове Enter. 682 00:29:51,220 --> 00:29:54,580 Ако броят на знаците, просто не мога побере в RAM за каквото и луд 683 00:29:54,580 --> 00:29:57,820 Причината, както се низ може много добре се върнете нула. 684 00:29:57,820 --> 00:30:01,080 >> Или ако си самата програма се прави много за други неща и има само 685 00:30:01,080 --> 00:30:03,790 Няма достатъчно памет за взимането на за да успее, той може да свърши 686 00:30:03,790 --> 00:30:05,240 до връщане нула. 687 00:30:05,240 --> 00:30:07,160 Но нека да бъдем по-точни за това какво е това. 688 00:30:07,160 --> 00:30:10,280 Какво е и типа на данните наистина? 689 00:30:10,280 --> 00:30:11,610 Char звезда. 690 00:30:11,610 --> 00:30:14,560 >> Така се оказва, сега можем да кори подкрепят слой на нула. 691 00:30:14,560 --> 00:30:17,500 Оказа се, нищожна е - да, очевидно специален символ. 692 00:30:17,500 --> 00:30:19,190 Но какво е това наистина? 693 00:30:19,190 --> 00:30:25,220 Наистина, нищожна е просто символ, че ние хората използват, за да представляват нула, както добре. 694 00:30:25,220 --> 00:30:29,010 >> Така авторите на C и компютри по-общо, реши години 695 00:30:29,010 --> 00:30:30,010 че, знаеш ли какво. 696 00:30:30,010 --> 00:30:34,850 Защо не се гарантира, че нито един потребител данни е никога, никога, никога 697 00:30:34,850 --> 00:30:36,730 съхраняват при чао нула? 698 00:30:36,730 --> 00:30:39,610 В действителност, дори и в моята произволно например преди, аз не започна номерационния 699 00:30:39,610 --> 00:30:40,390 байта на нула. 700 00:30:40,390 --> 00:30:41,540 Започнах в една. 701 00:30:41,540 --> 00:30:44,950 Защото знаех, че хората в света са решили да запазят нула 702 00:30:44,950 --> 00:30:47,970 байт в RAM никого като нещо специално. 703 00:30:47,970 --> 00:30:52,020 >> Причината е, че по всяко време искате сигнализира, че нещо не е наред 704 00:30:52,020 --> 00:30:55,960 по отношение на адреси, да се върна нула - иначе известни като нула - 705 00:30:55,960 --> 00:30:59,410 и защото знаеш, че няма легитимни данни на адрес нула, ясно 706 00:30:59,410 --> 00:31:00,400 това означава, че грешка. 707 00:31:00,400 --> 00:31:04,080 И затова ние, по силата на споразумение, проверете за нищожна и връщане нещо 708 00:31:04,080 --> 00:31:06,260 като един от тези случаи. 709 00:31:06,260 --> 00:31:09,300 >> Така че, ако ние превъртете надолу сега, това е само след това някои проверка за грешки, за всеки случай 710 00:31:09,300 --> 00:31:10,610 нещо се обърка с [? спасяват?] 711 00:31:10,610 --> 00:31:13,470 напълно и спиране на програмата , като се върнете по-рано. 712 00:31:13,470 --> 00:31:19,030 Тази линия сега може да бъде пренаписана тъй като това, което означава какво? 713 00:31:19,030 --> 00:31:23,155 От лявата страна, дай ми още един показалец към символен, и го наричат ​​тон. 714 00:31:23,155 --> 00:31:26,935 Какво съм аз съхраняване вътрешността на тон, на базата на този един ред код? 715 00:31:26,935 --> 00:31:30,950 716 00:31:30,950 --> 00:31:32,170 >> Аз съм съхраняване на място. 717 00:31:32,170 --> 00:31:34,742 Конкретно населено място който беше в S. 718 00:31:34,742 --> 00:31:39,000 Така че, ако потребителят е въвел в здравей, и че първо здравей случва да свърши 719 00:31:39,000 --> 00:31:42,567 Оттук след това номер 123 е ще се върне от получите 720 00:31:42,567 --> 00:31:43,810 канапи и да се съхранява - 721 00:31:43,810 --> 00:31:44,780 както казахме по-рано - 722 00:31:44,780 --> 00:31:45,440 в лидер. 723 00:31:45,440 --> 00:31:50,560 >> Когато предприятието декларира друга показалеца на Чар и го наричат ​​т, кой номер е 724 00:31:50,560 --> 00:31:53,940 буквално ще свърши в тона според историята? 725 00:31:53,940 --> 00:31:55,420 Така 123. 726 00:31:55,420 --> 00:32:00,310 >> Така че технически вече ите, така и т са насочени към точното 727 00:32:00,310 --> 00:32:02,410 същите блокове памет. 728 00:32:02,410 --> 00:32:06,140 Така че забележите това, което аз ще направя сега, за да докаже, че тази програма е бъгав. 729 00:32:06,140 --> 00:32:08,820 >> Първо аз ще твърдят, с за печат е, капитализиране 730 00:32:08,820 --> 00:32:10,080 копие от низ. 731 00:32:10,080 --> 00:32:11,660 Тогава аз ще направя малко проверка за грешки. 732 00:32:11,660 --> 00:32:12,160 Отивам да се уверите. 733 00:32:12,160 --> 00:32:16,710 Да се ​​уверите, че низ тон е най- малко по-голяма от нула в дължина, 734 00:32:16,710 --> 00:32:19,190 така че има някои характер има действително да се възползва. 735 00:32:19,190 --> 00:32:22,840 >> И тогава може да се припомни това от предишните примери. 736 00:32:22,840 --> 00:32:25,630 2 горната - което е в на ctype.h файл. 737 00:32:25,630 --> 00:32:30,800 T скоба нула ми дава нула характер на низ тон. 738 00:32:30,800 --> 00:32:34,360 И 2 горната на същата стойност, на Разбира се, превръща го в главни букви. 739 00:32:34,360 --> 00:32:38,230 >> Така интуитивно, това подчерта линия с код е капитализиране на първия 740 00:32:38,230 --> 00:32:40,250 писмо, в т. 741 00:32:40,250 --> 00:32:44,485 Но това не е капитализиране, интуитивно, първата буква в лидер. 742 00:32:44,485 --> 00:32:48,130 Но ако се мисли в перспектива, това, което съм за да се види, когато стартирате тази програма 743 00:32:48,130 --> 00:32:54,220 и отпечатване както на оригинала, S, и т. нар. копие, нали? 744 00:32:54,220 --> 00:32:55,350 >> Те всъщност ще бъде една и съща. 745 00:32:55,350 --> 00:32:56,600 И защо са те ще бъдат същите? 746 00:32:56,600 --> 00:32:58,970 747 00:32:58,970 --> 00:33:01,020 И двамата, сочещи към точно същото нещо. 748 00:33:01,020 --> 00:33:01,610 Така че нека да направим това. 749 00:33:01,610 --> 00:33:03,160 >> Направи нула копие. 750 00:33:03,160 --> 00:33:04,070 Той съставя OK. 751 00:33:04,070 --> 00:33:06,500 Нека да тече нула копие. 752 00:33:06,500 --> 00:33:10,110 Позволете ми да объркате нещо като 'Здравей' в са с малки букви след това натиснете Enter. 753 00:33:10,110 --> 00:33:16,520 И той твърди, че както първоначалната S и копието наистина са идентични. 754 00:33:16,520 --> 00:33:17,920 >> Така че това, което наистина се е случило тук? 755 00:33:17,920 --> 00:33:20,100 Позволете ми да преначертае тази снимка просто за да разкажат историята в 756 00:33:20,100 --> 00:33:21,340 малко по-различен начин. 757 00:33:21,340 --> 00:33:26,060 Какво всъщност се случва под качулка, когато декларират нещо подобно 758 00:33:26,060 --> 00:33:30,410 Чар началото ите, или низ S, Аз съм се показалка - 759 00:33:30,410 --> 00:33:33,090 който се случва да бъде четири байта в CS50 уреда 760 00:33:33,090 --> 00:33:34,410 и в много компютри. 761 00:33:34,410 --> 00:33:36,008 И аз ще се обадя на този лидер. 762 00:33:36,008 --> 00:33:39,810 А това в момента има някаква неизвестна стойност. 763 00:33:39,810 --> 00:33:43,900 >> Когато Вие декларирате променлива, освен ако не сте се поставите на стойност там, които 764 00:33:43,900 --> 00:33:44,570 знае какво е там. 765 00:33:44,570 --> 00:33:48,110 Това може да бъде някаква случайна последователност на бита от предишния изпълнение. 766 00:33:48,110 --> 00:33:52,490 Така че, когато, в съответствие моя код се получи низ и след това се съхранява на връщане 767 00:33:52,490 --> 00:33:54,800 стойност в S получите низ по някакъв начин - 768 00:33:54,800 --> 00:33:58,520 и ние в крайна сметка ще Отлепете как се струнни произведения, някак Заделя 769 00:33:58,520 --> 00:34:00,480 масив, който вероятно изглежда малко като този. 770 00:34:00,480 --> 00:34:05,390 H-E-L-L-O, наклонена черта нула. 771 00:34:05,390 --> 00:34:09,510 >> Нека предположим, че това е адрес 123 само първата последователност. 772 00:34:09,510 --> 00:34:13,000 Така че се връща низ, в подчерта линия там, връща 773 00:34:13,000 --> 00:34:15,000 номер казахме, 123. 774 00:34:15,000 --> 00:34:17,420 Така че това, което наистина отива вътре е тук? 775 00:34:17,420 --> 00:34:26,590 >> Е, това, което наистина отива вътрешността на S е 123. 776 00:34:26,590 --> 00:34:29,250 Но честно казано, аз съм се малко объркани от всички тези адреси, 777 00:34:29,250 --> 00:34:30,320 всички тези произволни числа. 778 00:34:30,320 --> 00:34:32,290 123, 124, 127. 779 00:34:32,290 --> 00:34:34,570 Така че нека действително опростяване света по-малко. 780 00:34:34,570 --> 00:34:38,800 >> Когато говорим за указатели, честно казано, да нас, хората, които, по дяволите, му пука къде 781 00:34:38,800 --> 00:34:39,870 нещата са в паметта? 782 00:34:39,870 --> 00:34:41,080 Това е напълно произволно. 783 00:34:41,080 --> 00:34:43,370 Всичко ще зависи от това как е оперативната памет потребителят има. 784 00:34:43,370 --> 00:34:46,590 Всичко ще зависи от това кога през деня стартирате програмата, може би, и 785 00:34:46,590 --> 00:34:48,250 какво вход на потребителя, ти дава. 786 00:34:48,250 --> 00:34:50,060 Ние сме жилище на маловажни детайли. 787 00:34:50,060 --> 00:34:54,230 >> Така че нека да се абстрахирам от и казват, че, когато стартирате ред код, подобен на този, 788 00:34:54,230 --> 00:34:57,320 Чар звезда и получава възвръщаемост стойността на взимането. 789 00:34:57,320 --> 00:35:02,720 Защо не, вместо просто да изготви това, което ние да наричаш показалеца, като че ли е 790 00:35:02,720 --> 00:35:04,140 сочеше нещо? 791 00:35:04,140 --> 00:35:07,000 Така че аз твърдя, че сега и до има указател - 792 00:35:07,000 --> 00:35:08,480 под капака е на адрес. 793 00:35:08,480 --> 00:35:11,330 Но това е просто посочи първият байт в 794 00:35:11,330 --> 00:35:12,780 низ, който е бил върнат. 795 00:35:12,780 --> 00:35:16,710 >> Ако сега се върнем към код тук какво става в тази линия? 796 00:35:16,710 --> 00:35:20,020 Е, в този подчерта линия сега, Аз съм обявяване явно друг 797 00:35:20,020 --> 00:35:21,070 променлива наречена тон. 798 00:35:21,070 --> 00:35:25,700 Но тя също е показалеца, така че аз ще да го изготви, както на теория, точната 799 00:35:25,700 --> 00:35:26,710 същия размер кутия. 800 00:35:26,710 --> 00:35:28,160 И аз ще го наричат ​​тон. 801 00:35:28,160 --> 00:35:33,500 >> И сега, ако се върнем към кода отново, когато се съхранява и във вътрешността на тон, 802 00:35:33,500 --> 00:35:36,920 това, което съм технически пускането вътрешността на тона? 803 00:35:36,920 --> 00:35:39,350 Ами технически погледнато, тази е номер 123. 804 00:35:39,350 --> 00:35:42,270 Така че наистина трябва да се пише броя 123 там. 805 00:35:42,270 --> 00:35:43,900 Но нека да го по-високо ниво. 806 00:35:43,900 --> 00:35:48,090 Т, ако това е само показалеца, интуитивно, е точно това. 807 00:35:48,090 --> 00:35:49,800 Това е всичко, което се е съхраняват там. 808 00:35:49,800 --> 00:35:54,970 >> Така че сега, през последните интересни линии на код, когато действително отида за 809 00:35:54,970 --> 00:36:00,680 капитализиране на нула характер в тон, какво се случва? 810 00:36:00,680 --> 00:36:06,310 Е, т скоба нулата сега се сочи до каква характер, вероятно? 811 00:36:06,310 --> 00:36:07,460 >> Тя посочи з. 812 00:36:07,460 --> 00:36:08,870 Защото тона скоба нула - 813 00:36:08,870 --> 00:36:12,490 спомняте, това е стар синтаксис. т винкел нула просто означава, че ако т е низ, т 814 00:36:12,490 --> 00:36:15,590 скоба нула означава получаване на нула герой в тази сила. 815 00:36:15,590 --> 00:36:18,650 Така че това, което всъщност означава, че е да отидете на този масив - 816 00:36:18,650 --> 00:36:21,520 и да, това може да е 123, това може да бъде 124. 817 00:36:21,520 --> 00:36:22,790 Но всичко е относително, не забравяйте. 818 00:36:22,790 --> 00:36:25,640 Когато говорим за масив, имаме предимството да говорим за 819 00:36:25,640 --> 00:36:27,000 относителните показатели. 820 00:36:27,000 --> 00:36:31,120 >> И така, сега можем само да поеме , че Т е Н скоба нула. 821 00:36:31,120 --> 00:36:35,090 Така че, ако аз наричам 2 горната върху него, какво е това наистина прави се капитализират 822 00:36:35,090 --> 00:36:38,290 малката ч до главни H. Но разбира се, това, което е лидер? 823 00:36:38,290 --> 00:36:41,010 Тя сочи към един дяволски низ. 824 00:36:41,010 --> 00:36:44,200 >> Така че това е всичко, което се случва в този код досега. 825 00:36:44,200 --> 00:36:45,960 И така, какво е тогава изводът? 826 00:36:45,960 --> 00:36:48,300 Как да се определи тези два проблема? 827 00:36:48,300 --> 00:36:50,870 Как да се сравни с реалните струни? 828 00:36:50,870 --> 00:36:53,720 >> Е интуитивно, как ще отида за сравняване на два 829 00:36:53,720 --> 00:36:55,090 Струни за истинско равенство? 830 00:36:55,090 --> 00:36:58,920 831 00:36:58,920 --> 00:37:00,750 >> Какво означава, ако двама струни са равни? 832 00:37:00,750 --> 00:37:04,330 Ясно е, че не им адреси са равни по памет, защото това е ниска 833 00:37:04,330 --> 00:37:06,590 подробно ниво изпълнение. 834 00:37:06,590 --> 00:37:08,360 Всички герои са едни и същи. 835 00:37:08,360 --> 00:37:12,810 Така че позволете ми предложи, и нека представим във версия един от compare.c 836 00:37:12,810 --> 00:37:14,970 тук, така че сравни-1.в. 837 00:37:14,970 --> 00:37:19,590 >> Позволете ми да предложа ние все още се получи показалеца наречен S, и магазин в него 838 00:37:19,590 --> 00:37:20,610 върне стойността на взимането. 839 00:37:20,610 --> 00:37:21,750 Нека да направим същото и с тона. 840 00:37:21,750 --> 00:37:23,230 Затова никой от код е различен. 841 00:37:23,230 --> 00:37:25,420 Отивам да добавите малко допълнителна проверка за грешки сега. 842 00:37:25,420 --> 00:37:29,390 Така че сега, че ние сме нещо като пилинг обратно тези слоеве в CS50 на това, което низ 843 00:37:29,390 --> 00:37:33,520 всъщност е, че трябва да бъдем по-анален за вземане, че ние не злоупотребяват 844 00:37:33,520 --> 00:37:35,330 невалидни стойности като нула. 845 00:37:35,330 --> 00:37:36,440 >> Така че аз съм просто ще проверя. 846 00:37:36,440 --> 00:37:41,490 Ако не е е равно на нула и т не равен нула, това означава, че си добре. 847 00:37:41,490 --> 00:37:44,460 Връща низовата не се притеснявам да нито един от тези струни. 848 00:37:44,460 --> 00:37:51,270 И вие можете да предполагам, може би сега, това, което се STR CMP вероятно да направя? 849 00:37:51,270 --> 00:37:52,000 String сравнение. 850 00:37:52,000 --> 00:37:55,470 >> Така че ако сте програма в Java и преди, това е като равен метод в 851 00:37:55,470 --> 00:37:56,490 низ клас. 852 00:37:56,490 --> 00:37:57,890 Но за тези от вас, които не са програмиран преди, 853 00:37:57,890 --> 00:37:59,320 това е само функция в. 854 00:37:59,320 --> 00:38:02,180 Това се случва, да се предлагат в файл, наречен string.h. 855 00:38:02,180 --> 00:38:03,830 Това е, когато тя е обявена. 856 00:38:03,830 --> 00:38:05,110 >> И низ сравнение - 857 00:38:05,110 --> 00:38:07,530 Аз всъщност забравят използването му, Но да оставим това. 858 00:38:07,530 --> 00:38:10,470 Припомнете си, че можем да направим мъж, разбърква се сравни. 859 00:38:10,470 --> 00:38:12,590 И това става, за да изведете Linux програмисти на потребителя. 860 00:38:12,590 --> 00:38:14,060 И това е, честно казано, малко загадъчен. 861 00:38:14,060 --> 00:38:15,270 Но мога да видя тук, че Да. 862 00:38:15,270 --> 00:38:17,570 Аз трябва да включват string.h. 863 00:38:17,570 --> 00:38:20,590 >> И тук пише, че по описание "на функция низ сравни сравнява 864 00:38:20,590 --> 00:38:24,560 на два низа S1 и S2. "И S1 и S2 са очевидно двете 865 00:38:24,560 --> 00:38:26,120 аргументите, подадени инча 866 00:38:26,120 --> 00:38:28,650 Аз наистина не помня какво Конст е, но сега забелязвам - 867 00:38:28,650 --> 00:38:31,480 и вие може да сте виждали това вече, когато сте използвате Мъжът страници, ако 868 00:38:31,480 --> 00:38:32,390 има всичко - 869 00:38:32,390 --> 00:38:36,220 Чар, че звездата е просто синоним с канап. 870 00:38:36,220 --> 00:38:40,440 >> Така че тя сравнява две струни, S1 и S2, и го връща цяло число по-малко 871 00:38:40,440 --> 00:38:44,930 малка или равна на или по-голяма от нула S1, ако се установи, съответно, да бъде 872 00:38:44,930 --> 00:38:47,450 по-малко от, или мач, или да бъде по-голяма от S2. 873 00:38:47,450 --> 00:38:51,220 Това е просто един много сложен начин да се каже че низ сравнение връща 874 00:38:51,220 --> 00:38:55,760 нула, ако две струни са интуитивно идентични, характер за 875 00:38:55,760 --> 00:38:57,120 характер за характер. 876 00:38:57,120 --> 00:38:59,970 >> Тя връща отрицателно число, ако ите, по азбучен ред, се предполага, че 877 00:38:59,970 --> 00:39:01,010 да дойде пред тон. 878 00:39:01,010 --> 00:39:05,300 Или се връща положително число, ако а е трябвало да дойде след т 879 00:39:05,300 --> 00:39:06,170 по азбучен ред. 880 00:39:06,170 --> 00:39:08,360 Така че с тази проста функция, може да можете, например, да подреждате 881 00:39:08,360 --> 00:39:09,770 цял куп думи? 882 00:39:09,770 --> 00:39:13,984 >> Така че в тази нова версия, ще да вървим напред и да compare1. 883 00:39:13,984 --> 00:39:15,750 Dot наклонена черта сравнение на един. 884 00:39:15,750 --> 00:39:18,030 Ще напишете просто 'Здравей' във всички малки букви. 885 00:39:18,030 --> 00:39:20,300 Отивам да напишете просто 'Здравей' във всички малки букви отново. 886 00:39:20,300 --> 00:39:23,340 И за щастие сега той осъзнава, Въведох едно и също нещо. 887 00:39:23,340 --> 00:39:27,520 >> В същото време, ако напишете просто 'Здравей' в долната случай и HELLO с главна буква и 888 00:39:27,520 --> 00:39:29,710 да ги сравните, аз напечатани различни неща. 889 00:39:29,710 --> 00:39:32,530 Защото не само са адресите различни, но ние сме сравняване 890 00:39:32,530 --> 00:39:35,350 различни герои отново и отново. 891 00:39:35,350 --> 00:39:37,320 >> Ами да вървим и да определи една Другият проблем сега. 892 00:39:37,320 --> 00:39:41,590 Позволете ми да се отворят версия един от копие, което сега адреси 893 00:39:41,590 --> 00:39:42,900 този въпрос по следния начин. 894 00:39:42,900 --> 00:39:45,650 А това ще изглежда малко по-сложна. 895 00:39:45,650 --> 00:39:49,320 Но ако си мислите за това, което ние проблем трябва да се реши, надявам се това ще бъде 896 00:39:49,320 --> 00:39:51,870 ясно в един момент сега. 897 00:39:51,870 --> 00:39:57,280 >> Така че този първи ред, знак началото т, в гледна точка на лаик може някой да предложи 898 00:39:57,280 --> 00:39:59,450 какво означава тази линия тук? 899 00:39:59,450 --> 00:40:01,050 Char звезда тон, това, което е, че правиш? 900 00:40:01,050 --> 00:40:06,660 901 00:40:06,660 --> 00:40:07,210 >> Добре. 902 00:40:07,210 --> 00:40:09,500 Създаване на показалеца на някои място в паметта. 903 00:40:09,500 --> 00:40:10,930 И нека да се прецизира за малко. 904 00:40:10,930 --> 00:40:17,180 Декларира променлива, която ще съхранява адрес на някакъв знак в паметта, просто 905 00:40:17,180 --> 00:40:18,480 да бъде малко по-правилното. 906 00:40:18,480 --> 00:40:21,210 >> ОК, така че сега от дясната страна, съм никога не е виждал една от тези функции 907 00:40:21,210 --> 00:40:22,660 преди, изчистване. 908 00:40:22,660 --> 00:40:26,980 Но какво може да означава това? 909 00:40:26,980 --> 00:40:28,050 Разпределение на паметта. 910 00:40:28,050 --> 00:40:29,410 Memory разпределение. 911 00:40:29,410 --> 00:40:33,050 >> Така се оказва, до сега, ние не са наистина имаше мощно средство за 912 00:40:33,050 --> 00:40:36,210 иска от операционната система, дайте ми малко памет. 913 00:40:36,210 --> 00:40:39,980 Вместо това, сега ние имаме функция, наречена изчистване, че прави точно това. 914 00:40:39,980 --> 00:40:42,960 Въпреки че това е доста голяма разсейване точно сега, забелязвам, че в 915 00:40:42,960 --> 00:40:46,200 между двете скоби е Просто ще бъде число. 916 00:40:46,200 --> 00:40:48,510 Къде сте написали въпросната марка може да бъде число. 917 00:40:48,510 --> 00:40:51,020 >> И този номер означава, дайте ми 10 байта. 918 00:40:51,020 --> 00:40:52,320 Дай ми 20 байта. 919 00:40:52,320 --> 00:40:53,820 Дай ми 100 байта. 920 00:40:53,820 --> 00:40:56,500 И изчистване ще направи всичко възможно да поиска от операционната система - 921 00:40:56,500 --> 00:40:57,630 Linux, в този случай - 922 00:40:57,630 --> 00:40:59,630 хей, са си 100 байта от RAM на разположение? 923 00:40:59,630 --> 00:41:04,320 Ако е така, да ги върне байтове за мен от връщане на адрес, който на 924 00:41:04,320 --> 00:41:06,610 тези байтове, може би? 925 00:41:06,610 --> 00:41:07,610 Най-първата. 926 00:41:07,610 --> 00:41:10,460 >> Така че тук също - и това е преобладаващата в C, всеки път, когато сте 927 00:41:10,460 --> 00:41:11,680 справяне с адреси? 928 00:41:11,680 --> 00:41:15,830 Вие почти винаги се занимават с Първият такъв адрес, без значение колко е голям 929 00:41:15,830 --> 00:41:19,490 парче памет се е върна, така да се каже. 930 00:41:19,490 --> 00:41:20,880 >> Така че нека да се потопите в тук. 931 00:41:20,880 --> 00:41:23,940 Аз се опитвам да се разпределят как много байта по-точно? 932 00:41:23,940 --> 00:41:24,080 Добре. 933 00:41:24,080 --> 00:41:26,090 Дължина на тетивата на лидер - да направи конкретен пример. 934 00:41:26,090 --> 00:41:30,700 Ако S е здравей, H-E-L-L-О, каква е низ дължина и, очевидно? 935 00:41:30,700 --> 00:41:32,010 Така че това е пет. 936 00:41:32,010 --> 00:41:34,590 Но аз правя един плюс 1 върху този, защо? 937 00:41:34,590 --> 00:41:37,700 Защо искам шест байта вместо пет? 938 00:41:37,700 --> 00:41:38,790 Нулевата характер. 939 00:41:38,790 --> 00:41:41,210 >> Аз не искам да оставим това специален нула характер. 940 00:41:41,210 --> 00:41:45,160 Защото, ако направите копие на Здравейте и просто правя H-E-L-L-О, но аз не слагам 941 00:41:45,160 --> 00:41:50,160 че специален символ, на компютъра не може да има, по случайност, наклонена черта 942 00:41:50,160 --> 00:41:51,730 нула до мен. 943 00:41:51,730 --> 00:41:55,570 И така, ако аз се опитвам да разбера дължината на копието, аз може би си мислите, че 944 00:41:55,570 --> 00:41:59,360 това е 20 символа, или един милион символа, ако просто никога не съм се случи 945 00:41:59,360 --> 00:42:01,050 да удари нула обратно наклонена черта. 946 00:42:01,050 --> 00:42:05,780 >> Така че имаме нужда от шест байта за съхранение H-E-L-L-O, наклонена черта нула. 947 00:42:05,780 --> 00:42:07,870 И тогава това е само да бъде супер анален. 948 00:42:07,870 --> 00:42:10,700 Да предположим, че забравям какво размера на Чар е. 949 00:42:10,700 --> 00:42:12,020 Продължаваме да повтаряме, че е един байт. 950 00:42:12,020 --> 00:42:12,860 И обикновено е така. 951 00:42:12,860 --> 00:42:15,425 На теория, това може да бъде нещо различни, на друг Mac или 952 00:42:15,425 --> 00:42:16,250 различни PC. 953 00:42:16,250 --> 00:42:19,650 >> Така се оказва, че е този оператор нарича sizeof, че ако го преминете 954 00:42:19,650 --> 00:42:22,680 името на типа данни - като Чар, или средно, или поплавък - 955 00:42:22,680 --> 00:42:26,930 тя ще ви каже, динамично, колко байта на Чар заема по този 956 00:42:26,930 --> 00:42:28,090 определен компютър. 957 00:42:28,090 --> 00:42:31,360 >> Така че това е ефективно само все едно да кажеш пъти един или 958 00:42:31,360 --> 00:42:32,440 пъти нищо. 959 00:42:32,440 --> 00:42:36,340 Но го правя само за да бъде супер анален, че само в случай, че се различава Чар 960 00:42:36,340 --> 00:42:40,610 на компютъра в сравнение с мината, по този начин по математика винаги ще проверя. 961 00:42:40,610 --> 00:42:43,720 >> На последно място, тук долу да проверя за нищожна, което винаги е добра практика - отново 962 00:42:43,720 --> 00:42:44,920 всяко време да си имаме работа с указатели. 963 00:42:44,920 --> 00:42:47,520 Ако изчистване не е в състояние да даде ми шест сбогуванията - което е 964 00:42:47,520 --> 00:42:49,210 малко вероятно, но за всеки случай - 965 00:42:49,210 --> 00:42:50,730 върнете една веднага. 966 00:42:50,730 --> 00:42:53,290 И сега, давай напред и да копирате низ, както следва. 967 00:42:53,290 --> 00:42:57,240 И това е запознат синтаксис, макар и в различна роля. 968 00:42:57,240 --> 00:43:01,210 >> Аз ще отида напред и да получите низ Дължината на лидер и да го съхранява в п. 969 00:43:01,210 --> 00:43:06,620 Аз тогава ще обхождане от I равен нула до и включително N, 970 00:43:06,620 --> 00:43:08,410 по-голямо или равно на. 971 00:43:08,410 --> 00:43:13,540 Така, че на всяка итерация, сложих Ith характер на лидер в Ith 972 00:43:13,540 --> 00:43:15,380 характер на тон. 973 00:43:15,380 --> 00:43:18,190 >> Така че това, което наистина се случва под качулката тук? 974 00:43:18,190 --> 00:43:22,140 Ами ако това, например, е лидер - 975 00:43:22,140 --> 00:43:26,400 и аз напечатани в думата H-E-L-L-O и има наклонена черта нула. 976 00:43:26,400 --> 00:43:29,020 И отново, това е и посочи тук. 977 00:43:29,020 --> 00:43:30,830 И тук вече е тон. 978 00:43:30,830 --> 00:43:34,860 >> И това се сочи сега, за да копие от паметта, нали? 979 00:43:34,860 --> 00:43:37,340 Изчистване ми е дал цяло парче на паметта. 980 00:43:37,340 --> 00:43:41,440 Аз не знам какво е първоначално всяка от тези места. 981 00:43:41,440 --> 00:43:44,340 Така че аз ще ги мислим като цял куп въпросителни знаци. 982 00:43:44,340 --> 00:43:50,190 >> Но веднага след като започна примка от нула нагоре по дължината на S, T 983 00:43:50,190 --> 00:43:52,790 скоба нула и Т скоба 1 - 984 00:43:52,790 --> 00:43:55,080 и ще сложа това сега на въздушната - 985 00:43:55,080 --> 00:44:04,190 т скоба нула и S скоба нула означава че аз отивам да се копира 986 00:44:04,190 --> 00:44:09,875 итеративно ч. в тук, E-L-L-O. Плюс това, защото аз направих плюс 987 00:44:09,875 --> 00:44:12,370 1, наклонена черта нула. 988 00:44:12,370 --> 00:44:19,060 >> Така че сега, в случая на сравнение-1.В, в края на краищата, ако разпечатате 989 00:44:19,060 --> 00:44:24,760 капитализация на тон, трябва да се се види, че и е непроменена. 990 00:44:24,760 --> 00:44:26,090 Позволете ми давай сега и това. 991 00:44:26,090 --> 00:44:28,630 Така че се copy1. 992 00:44:28,630 --> 00:44:30,860 Dot наклонена черта copy1. 993 00:44:30,860 --> 00:44:33,670 Отивам да напишете просто 'Здравей', Enter. 994 00:44:33,670 --> 00:44:37,430 И сега забелязвам, само копие е главна. 995 00:44:37,430 --> 00:44:40,890 Защото аз наистина имам две блокове памет. 996 00:44:40,890 --> 00:44:44,390 >> За съжаление, можете да направите някои доста лоши и доста опасни неща тук. 997 00:44:44,390 --> 00:44:49,290 Позволете ми да спра един пример тук, сега, които ни дава пример за няколко 998 00:44:49,290 --> 00:44:51,540 различни линии. 999 00:44:51,540 --> 00:44:56,040 Така че просто интуитивно тук, на първа линия на код, вътр звезден х, се обявява 1000 00:44:56,040 --> 00:44:57,340 променлива наречена х. 1001 00:44:57,340 --> 00:44:58,810 И какъв е типът на данните на тази променлива? 1002 00:44:58,810 --> 00:45:01,820 1003 00:45:01,820 --> 00:45:04,290 Какъв е типа данни на тази променлива? 1004 00:45:04,290 --> 00:45:06,980 Това не беше Катерачът. 1005 00:45:06,980 --> 00:45:08,350 >> Типът на данните е Int звезда. 1006 00:45:08,350 --> 00:45:12,600 И така, какво означава това? х ще съхраняване на адреса на Int. 1007 00:45:12,600 --> 00:45:13,520 Просто. 1008 00:45:13,520 --> 00:45:16,220 Y ще се съхранява адрес на вътр. 1009 00:45:16,220 --> 00:45:18,390 Какво е третият ред на код правиш там? 1010 00:45:18,390 --> 00:45:21,850 Той е разпределяне колко байта, най-вероятно? 1011 00:45:21,850 --> 00:45:22,350 Четири. 1012 00:45:22,350 --> 00:45:25,460 Поради размера на едно цяло число е обикновено четири, изчистване на четири дава 1013 00:45:25,460 --> 00:45:29,950 ме подкрепи на адрес на парче памет, първият от чиито байтове 1014 00:45:29,950 --> 00:45:32,110 съхранява сега в х. 1015 00:45:32,110 --> 00:45:34,410 >> Сега се движим малко по-бързо. 1016 00:45:34,410 --> 00:45:35,760 Star х означава какво? 1017 00:45:35,760 --> 00:45:38,480 1018 00:45:38,480 --> 00:45:42,590 Това означава, отидете на този адрес и сложи какъв номер там? 1019 00:45:42,590 --> 00:45:43,870 Поставете номер 42 там. 1020 00:45:43,870 --> 00:45:47,590 Star Y означава отидете на това, което е най-г и да изложат на номер 13 има. 1021 00:45:47,590 --> 00:45:48,600 >> Но почакайте. 1022 00:45:48,600 --> 00:45:51,640 Какво е в Y в момента? 1023 00:45:51,640 --> 00:45:54,950 Какво адрес е у съхранение? 1024 00:45:54,950 --> 00:45:55,770 Ние не знаем, нали? 1025 00:45:55,770 --> 00:45:59,230 Ние никога не сме веднъж използвайте задача оператор, включващи база. 1026 00:45:59,230 --> 00:46:03,370 Така, както е обявена г. на втора линия на код е просто някакъв боклук стойност, голяма 1027 00:46:03,370 --> 00:46:04,760 въпросителен знак така да се каже. 1028 00:46:04,760 --> 00:46:07,230 Може да се посочи произволно с нищо в паметта, която 1029 00:46:07,230 --> 00:46:08,340 обикновено е лошо. 1030 00:46:08,340 --> 00:46:13,540 >> Така че веднага след като удари тази линия там, звезден г. се равнява 13, нещо лошо, 1031 00:46:13,540 --> 00:46:17,220 нещо много лошо е около да се случи на Binky. 1032 00:46:17,220 --> 00:46:25,810 Така че нека да видим какво ще се окажете случва с Бинки тук, в тази минута 1033 00:46:25,810 --> 00:46:26,200 или поне така изглежда. 1034 00:46:26,200 --> 00:46:26,490 >> [VIDEO PLAYBACK] 1035 00:46:26,490 --> 00:46:26,745 >> -Хей, Binky. 1036 00:46:26,745 --> 00:46:27,000 Събудете се. 1037 00:46:27,000 --> 00:46:29,296 Това е време, за показалеца забавно. 1038 00:46:29,296 --> 00:46:30,680 >> -Какво е това? 1039 00:46:30,680 --> 00:46:31,980 Научете повече за указатели? 1040 00:46:31,980 --> 00:46:34,010 О, Goodie. 1041 00:46:34,010 --> 00:46:37,220 >> -Добре, за да започнете, предполагам, че сме ще се нуждаят от няколко насоки. 1042 00:46:37,220 --> 00:46:37,930 >> -OK. 1043 00:46:37,930 --> 00:46:41,650 Този код се отпускат две насоки който може да посочи числа. 1044 00:46:41,650 --> 00:46:43,760 >> -Добре, добре, виждам две насоки. 1045 00:46:43,760 --> 00:46:45,850 Но те не изглежда да е сочи към нищо. 1046 00:46:45,850 --> 00:46:46,490 >> -Точно така. 1047 00:46:46,490 --> 00:46:48,630 Първоначално указатели не сочи към нищо. 1048 00:46:48,630 --> 00:46:51,700 Нещата, те изтъкват, се наричат pointees и установяването им е 1049 00:46:51,700 --> 00:46:52,850 отделен етап. 1050 00:46:52,850 --> 00:46:53,740 >> -О, да, точно така. 1051 00:46:53,740 --> 00:46:54,500 Знаех, че. 1052 00:46:54,500 --> 00:46:56,270 На pointees са отделни. 1053 00:46:56,270 --> 00:46:58,553 Е, как да разпредели pointee? 1054 00:46:58,553 --> 00:46:59,480 >> -OK. 1055 00:46:59,480 --> 00:47:03,707 Е, този код отделя нови числа pointee, и тази част са х 1056 00:47:03,707 --> 00:47:05,520 точка към него. 1057 00:47:05,520 --> 00:47:06,760 >> -Хей, това изглежда по-добре. 1058 00:47:06,760 --> 00:47:08,520 Така че не го направим нещо. 1059 00:47:08,520 --> 00:47:09,530 >> -OK. 1060 00:47:09,530 --> 00:47:14,110 Ще сочен х показалеца, за да съхранявате 42 броя в своята pointee. 1061 00:47:14,110 --> 00:47:17,660 За този трик, аз ще трябва ми магия пръчка на dereferencing. 1062 00:47:17,660 --> 00:47:20,695 >> -Вашият магическа пръчка на dereferencing? 1063 00:47:20,695 --> 00:47:22,632 Ами, това е чудесно. 1064 00:47:22,632 --> 00:47:24,620 >> -Това е това, което изглежда като код. 1065 00:47:24,620 --> 00:47:27,526 Аз просто ще създаде броя, и - 1066 00:47:27,526 --> 00:47:28,250 >> -Хей, виж. 1067 00:47:28,250 --> 00:47:29,680 Ето как става. 1068 00:47:29,680 --> 00:47:34,520 Така прави и сочен за х следва стрелката, за да получите достъп до своята pointee. 1069 00:47:34,520 --> 00:47:36,690 В този случай, за да се съхранява 42 там. 1070 00:47:36,690 --> 00:47:40,890 Хей, опитайте да го използвате, за да съхраните номера 13 през другата показалеца, у. 1071 00:47:40,890 --> 00:47:42,125 >> -OK. 1072 00:47:42,125 --> 00:47:46,810 Аз просто ще отида тук, за да у и Вземете номер 13 се създаде. 1073 00:47:46,810 --> 00:47:50,890 И тогава се взема пръчка на dereferencing и просто - 1074 00:47:50,890 --> 00:47:52,430 Уау! 1075 00:47:52,430 --> 00:47:53,030 >> -О, здравей. 1076 00:47:53,030 --> 00:47:54,610 Това не е работа. 1077 00:47:54,610 --> 00:47:58,200 Кажи, Binky, аз не мисля, че dereferencing Y е добра идея, 1078 00:47:58,200 --> 00:48:01,370 защото създаването на pointee е отделен етап. 1079 00:48:01,370 --> 00:48:03,460 И аз не мисля, че някога го е направил. 1080 00:48:03,460 --> 00:48:03,810 >> -Хм. 1081 00:48:03,810 --> 00:48:05,160 Добър въпрос. 1082 00:48:05,160 --> 00:48:07,410 >> -Да, разпределени показалеца г. 1083 00:48:07,410 --> 00:48:10,045 Но ние никога не сме го настроите да сочи към pointee. 1084 00:48:10,045 --> 00:48:10,490 >> -Хм. 1085 00:48:10,490 --> 00:48:12,170 Много наблюдателен. 1086 00:48:12,170 --> 00:48:13,790 >> -Хей, което търсите добре там, Binky. 1087 00:48:13,790 --> 00:48:16,920 Можеш ли да го оправя, така че у точки със същия pointee като X? 1088 00:48:16,920 --> 00:48:17,810 >> -Разбира се. 1089 00:48:17,810 --> 00:48:20,300 Ще използвам магическа пръчка на показалеца задача. 1090 00:48:20,300 --> 00:48:22,240 >> -Е, че ще бъде проблем като преди? 1091 00:48:22,240 --> 00:48:22,665 >> -No. 1092 00:48:22,665 --> 00:48:24,300 Това не докосвайте pointees. 1093 00:48:24,300 --> 00:48:27,880 Тя просто променя една показалка точка за едно и също нещо като друг. 1094 00:48:27,880 --> 00:48:28,970 >> -О, разбирам. 1095 00:48:28,970 --> 00:48:31,730 Сега у посочва на същото място като х. 1096 00:48:31,730 --> 00:48:32,450 Така че чакаме. 1097 00:48:32,450 --> 00:48:33,490 Сега Y е фиксиран. 1098 00:48:33,490 --> 00:48:34,630 Той има pointee. 1099 00:48:34,630 --> 00:48:36,520 Така че, можете да опитате с магическата пръчка на dereferencing отново 1100 00:48:36,520 --> 00:48:39,200 да изпрати над 13. 1101 00:48:39,200 --> 00:48:39,840 >> -OK. 1102 00:48:39,840 --> 00:48:41,570 Тук върви. 1103 00:48:41,570 --> 00:48:42,870 >> -Ей, виж това. 1104 00:48:42,870 --> 00:48:44,320 Сега dereferencing работи на база. 1105 00:48:44,320 --> 00:48:47,020 И тъй като указатели са споделяне че един pointee, те 1106 00:48:47,020 --> 00:48:48,585 както виждате 13. 1107 00:48:48,585 --> 00:48:49,040 >> -Да. 1108 00:48:49,040 --> 00:48:49,670 Споделяне. 1109 00:48:49,670 --> 00:48:50,380 Все едно. 1110 00:48:50,380 --> 00:48:52,290 Така че отиваме разменят местата сега? 1111 00:48:52,290 --> 00:48:52,970 >> -О, виж. 1112 00:48:52,970 --> 00:48:54,150 Нямаме време. 1113 00:48:54,150 --> 00:48:55,200 >> -А - 1114 00:48:55,200 --> 00:48:57,060 >> -Само не забравяйте трите Показалецът правила. 1115 00:48:57,060 --> 00:49:00,100 Първо, основната структура е, че имате показалеца. 1116 00:49:00,100 --> 00:49:02,170 И той посочва към един pointee. 1117 00:49:02,170 --> 00:49:04,160 Но показалеца и pointee са отделни. 1118 00:49:04,160 --> 00:49:06,460 И общата грешка е да създаване на показалеца, но да 1119 00:49:06,460 --> 00:49:08,540 забравяйте да даде pointee. 1120 00:49:08,540 --> 00:49:12,460 >> Номер две, показалеца dereferencing започва на показалеца и следва своята 1121 00:49:12,460 --> 00:49:14,570 стрелка, за да получите достъп своята pointee. 1122 00:49:14,570 --> 00:49:18,640 Както всички знаем, това работи само ако има е pointee, който се връща към 1123 00:49:18,640 --> 00:49:19,790 Правило номер едно. 1124 00:49:19,790 --> 00:49:23,670 >> Номер три, показалеца задача отнема една показалка и промените, които той да сочи към 1125 00:49:23,670 --> 00:49:25,850 същото pointee като друг показалеца. 1126 00:49:25,850 --> 00:49:27,840 И така, след прехвърлянето, двете насоки ще 1127 00:49:27,840 --> 00:49:29,430 за едни и същи pointee. 1128 00:49:29,430 --> 00:49:31,600 Понякога това се нарича споделяне. 1129 00:49:31,600 --> 00:49:33,430 И това е всичко там е до него, наистина. 1130 00:49:33,430 --> 00:49:33,840 Чао чао сега. 1131 00:49:33,840 --> 00:49:34,300 >> [END възпроизвеждане на видео] 1132 00:49:34,300 --> 00:49:36,940 >> DAVID Malan: Така повече на указатели, повече на Binky следващата седмица. 1133 00:49:36,940 --> 00:49:38,190 Ще се видим в понеделник. 1134 00:49:38,190 --> 00:49:42,187