1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> Дејвид 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 / UNSAT на писмо одделение, или од 7 00:00:22,800 --> 00:00:24,130 писмо одделение SAT / UNSAT. 8 00:00:24,130 --> 00:00:27,130 Annoyingly, тој процес не бара потпис, затоа што мора да се пополни 9 00:00:27,130 --> 00:00:28,770 по една од тие розова додавање / капка форми. 10 00:00:28,770 --> 00:00:31,680 >> Затоа што технички, SAT / UNSAT верзија и писмо одделение верзија 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 Само дојде до мене или да му ја одземеш или да Лорен во кој било момент. 14 00:00:36,620 --> 00:00:39,550 Или ни e-mail ако немате вид на документација што треба денес, и ние 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 покрие во оваа класа, или навистина било воведен курс кој го користи В 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 Седев во Елиот Јадење сала, седи до мојот ТФ Nishat Мехта, 30 00:01:22,190 --> 00:01:24,070 кој бил жител на Елиот куќа. 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 Вториот преглед на малку claymation фигура наречена 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 >> [Видео репродукција] 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 >> [Крај видео репродукција] 53 00:02:18,920 --> 00:02:20,670 >> Дејвид MALAN: Тоа е Стенфорд компјутерски науки. 54 00:02:20,670 --> 00:02:23,194 Толку повеќе за тоа да дојде. 55 00:02:23,194 --> 00:02:24,930 >> [Аплауз] 56 00:02:24,930 --> 00:02:26,660 >> Дејвид MALAN: За жал, Ник. 57 00:02:26,660 --> 00:02:30,680 >> Па се потсетиме дека последен пат заврши на ова навистина возбудливо cliffhanger 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 И напишав се малку на скелетни код во унапредат овде, каде што тврдат дека x 65 00:02:50,180 --> 00:02:52,500 ќе биде 1, y ќе биде 2. 66 00:02:52,500 --> 00:02:54,810 Јас потоа печати од двете на нивните вредности со печатените ѓ. 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 >> JESS: Џес. 81 00:03:25,260 --> 00:03:25,690 >> Дејвид MALAN: Jess? 82 00:03:25,690 --> 00:03:26,540 Ајде горе, Џес. 83 00:03:26,540 --> 00:03:29,180 Ако не ти пречи, ние треба да се стави на Google Стакло за вас, па можеме да 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 Добро, стакло. 87 00:03:34,670 --> 00:03:37,250 Снимате видео. 88 00:03:37,250 --> 00:03:43,103 И OK, ние сме добро да се одат со Jess тука. 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 >> JESS: Извини. 98 00:04:05,860 --> 00:04:06,330 >> Дејвид 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 Значи x и y, соодветно. 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 е да се разменуваат вредностите на x и y, како дека сакаме сок од портокал во 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 >> Добро, мудра одлука. 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 А сега продолжи да се разменуваат со x и y. 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> Одличен. 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 оди напред и да прогласи Temp. 128 00:05:15,720 --> 00:05:17,980 И јас ќе го постави еднаква на, да речеме, х. 129 00:05:17,980 --> 00:05:21,110 >> Тогаш јас ќе одам да се промени вредноста на x исто како и Jess го направи овде со 130 00:05:21,110 --> 00:05:23,200 млеко и сок од портокал да биде еднаква на y. 131 00:05:23,200 --> 00:05:27,460 И јас одам да се промени Y за да биде еднаква да не x, бидејќи ние сега ќе биде 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 пред clobbering дека чаша со млеко. 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 И сега дозволете ми да се кандидира без swap. 138 00:05:41,190 --> 00:05:43,910 И навистина ме види, ако јас се прошири прозорец малку, дека 139 00:05:43,910 --> 00:05:45,160 x е 1, y е 2. 140 00:05:45,160 --> 00:05:47,230 А потоа x е 2, y е 1. 141 00:05:47,230 --> 00:05:51,910 >> Но се сети дека во понеделникот го правевме работи малку поинаку при што можам 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 >> Искрено, јас би можеле да ги наречеме x и y. 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 И јас ќе ги променам моите x на, мојата x на, мојот Y за да б и мојот Y за да б. 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 Па јас ќе го наречеме оваа функција со две влезови, x и y, и притиснете 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 Па јас сум само ќе кажам празнина, swap, int, а 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 Се кандидира без swap. 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 >> Дејвид MALAN: Токму така. 195 00:08:05,230 --> 00:08:07,330 Па a и b се копии на x и y. 196 00:08:07,330 --> 00:08:10,680 И всушност, во секое време сте биле повикувајќи функција досега дека 197 00:08:10,680 --> 00:08:12,540 поминува променливи како ints - 198 00:08:12,540 --> 00:08:14,470 само како swap очекува тука - 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 >> И така сега, во контекст на swap, Јас сум во фактот успешно 205 00:08:30,020 --> 00:08:31,180 менување на a и b. 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 И plug ајде во. 209 00:08:38,770 --> 00:08:41,830 Сега ајде да го прават истото со b. 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 печати a и b уште еднаш. 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 >> И да ја стартувате без swap. 218 00:09:00,860 --> 00:09:04,000 x е 1, y е 2. a е 1, б е 2. 219 00:09:04,000 --> 00:09:06,070 И тогаш, е 2, б е 1. 220 00:09:06,070 --> 00:09:09,390 Па тоа е работа, исто како и на Jess не тука во внатрешноста на swap. 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 Кога сте соочени со оваа опсегот прашање, што може само залог и бидете x 224 00:09:19,560 --> 00:09:22,400 и y каков вид на променливи наместо неа? 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 >> Но во овој случај тука, јас сум повикувајќи функција swap. 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 Јас само ќе fess до оној. 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 >> Значи прво на сите, јас ќе одам да одредите дека наместо полагање на int во 249 00:10:34,130 --> 00:10:37,980 на swap функција, јас сум, наместо оди да се каже int ѕвезда. 250 00:10:37,980 --> 00:10:39,170 Сега, она што го прави ѕвезда укажуваат? 251 00:10:39,170 --> 00:10:41,970 Ова е тоа што идејата за показател дека Binky, на claymation карактер, беше 252 00:10:41,970 --> 00:10:43,465 се однесува на моментот кога пред. 253 00:10:43,465 --> 00:10:47,610 >> Па ако се каже int ѕвезда, значењето на ова сега е дека нема да биде 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 или вашиот компјутер има два гигабајти, имаш 2 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 Уште првиот бајт од оние 2 милијарди по број нула. 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 >> Па разменуваат потпис сега значи, дај ми го адресата на некоја int, и повик 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 Бидејќи ако Изјавувам int Temp - 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 постои само на Jess третина чаша постоеле, за каква цел? 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 >> Значи, навистина, она што сакам да го стави во temp не е адреса на, но 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 сфатат дека сите што јас го правам е prefixing овие ѕвезди на моите променливи, 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 >> Кога ќе се јавам, swap. 317 00:13:40,840 --> 00:13:43,340 Затоа што токму сега, она што сум Јас поминува да се разменуваат со уште? 318 00:13:43,340 --> 00:13:47,450 Вредноста на x и вредноста на 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 На локацијата на x и на локацијата на y. 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 Симболот вид на звучи како адреса. 325 00:13:59,260 --> 00:14:03,240 толку n, симболот, адресата на x и адреса на y. 326 00:14:03,240 --> 00:14:06,790 Па тоа е намерно кои ние ги користиме ampersands кога повикувате на функцијата, 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 или, правилно, dereference оператор. 331 00:14:18,640 --> 00:14:23,480 Па тоа е многу скапо на зборови само за да велат дека сега, се надевам, swap се случува 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 ајде да всушност се преименува датотеката, за да не оваа програма се уште да се нарече без swap. 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 Дот, коса црта, трампа. 338 00:14:37,520 --> 00:14:40,210 >> И сега навистина, x е 1, y е 2. 339 00:14:40,210 --> 00:14:44,040 А потоа, x е 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 Одам да предложи дека x се случува да се чување на број 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 И дозволете ми да тврдат дека сега ќе одам да стави вредност 1 тука, а вредноста 2 369 00:16:08,400 --> 00:16:11,990 тука, инаку позната како x и y. 370 00:16:11,990 --> 00:16:15,300 Па тоа само така се случува, дека ова е х, ова е г. 371 00:16:15,300 --> 00:16:18,180 >> И само од страна на некои случајни шанса, компјутер, на оперативниот систем, 372 00:16:18,180 --> 00:16:21,890 се случи да се стави x на локација број 123. 373 00:16:21,890 --> 00:16:25,590 И y заврши на локација 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 Затоа што сакам на ints да всушност ќе биде четири бајти. 382 00:16:48,360 --> 00:16:49,810 Па ајде да бидеме супер анален за ова. 383 00:16:49,810 --> 00:16:53,800 Така што ако 1 случува да се решат 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 >> Значи x е на локација 123, y е на локација 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 Па, кога ќе се јавам, swap, јас сум поминува во на адреса на x и адреса на y. 391 00:17:14,920 --> 00:17:18,540 Така на пример, ако овие две парчиња на хартија сега претставуваат два 392 00:17:18,540 --> 00:17:23,510 аргументи a и b да се разменуваат, она што сум јас случува да пишувате на Првиот од овие, 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 Јас сум ставање на адреса на x во таму. 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 наместо дословно 1 и 2, јас сум ќе помине во 123 и 127. 409 00:17:58,590 --> 00:18:02,130 И јас сум сега се случува да се стави овие во внатрешноста на ова поле, во ред? 410 00:18:02,130 --> 00:18:04,640 Така што црна кутија сега претставува на swap функција. 411 00:18:04,640 --> 00:18:07,230 >> Во меѓувреме, ајде сега има некој спроведување на swap функција. 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 И јас ќе шепот во увото како да се кандидира на ТВ тука. 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: a е 123 а b е 127. 427 00:18:36,740 --> 00:18:37,530 >> Дејвид MALAN: Добро, точно. 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 ќе биде да одвои малку малку на меморија се нарекува Temp. 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 те повика Temp. 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 >> Дејвид 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 Добро, така што вредност сега сте ќе се стави во Temp? 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 на парче хартија, која во моментов наслов Temp. 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 Ѕвезда б значи она, повремено зборува? 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 Сега што е во Temp, буквално? 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: Темп, кој е еден. 491 00:21:22,010 --> 00:21:23,430 >> Дејвид MALAN: Темп, кој е еден. 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 >> Значи фактот дека temp се уште има вредност 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 >> И известување, јас сум покажува еден од стрингови во променлива наречена с, и 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 >> Впрочем, ако ние влез две ints, две карактери, две пловки, две двојки, било од 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 А знак е само еден бајт. 584 00:25:19,170 --> 00:25:20,570 Еден int е обично четири бајти. 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 Ѕвезда, секако, значи адреса, ака покажувач. 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 >> Сите во право, па низа s е она што Јас прогласи претходно. 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 Фактот дека тоа е flanking на Зборот знак значи тоа е 605 00:26:14,180 --> 00:26:15,970 адреса на некој лик. 606 00:26:15,970 --> 00:26:23,100 >> Па ако добиете низа се нарекува, и јас напишеш во H-Е-Л-Л-О, да предложи сега она што се 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 И две, врз основа на прво обраќање, јас може да дознаам каде што низа завршува. 630 00:27:28,160 --> 00:27:29,910 Како? 631 00:27:29,910 --> 00:27:33,490 >> Посебните null карактер, обратна коса црта нула на крајот. 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 >> Дејвид 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 Ако корисникот потоа видови во Здраво повторно, но со повик да се добие низа, повторно, c е 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-Е-Л-Л-О и така натаму. 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 >> Но, она што ова значи е дека она што е ќе треба да се чуваат во крајна линија во С? 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 Јас сум тогаш ќе добие низа и го нарекуваат s. 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 Што е податочен тип на s навистина? 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 >> Значи авторите на Ц, и компјутери поопшто, одлучи години 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 се чуваат на bye нула? 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 и затоа што знам дека нема legit податоци на адреса нула, јасно 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 Што сум јас чување во внатрешноста на T, врз основа на оваа една линија код? 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 Конкретно на локацијата тоа беше во с. 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 >> Толку технички сега двете s и т се укажува на точната 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 Ајде да бидете сигурни дека стрингот t е на Најмалку поголема од нула во должина, 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 Се компајлира во ред. 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 знак почетокот с, или низа с, Јас сум добивање на покажувачот - 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 И јас одам да се јавите овој s. 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 вредност во с добијат низа некако - 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-Е-Л-Л-О, обратна коса црта нула. 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 Тоа се случува да зависи од тоа колку многу RAM корисникот има. 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 знак ѕвезда ги добива враќање вредност на Get стринг. 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 >> Дозволете ми да предложи дека ние се уште се покажувач кој се нарекува с, и се чува во него 838 00:37:19,590 --> 00:37:20,610 врати вредност на Get стринг. 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 Ако s не еднакви ништовни и Т не еднакви на нула, што значи дека ние сме во ред. 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 Стринг споредуваат. 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 И ова се случува да се донесе до Линукс програмерите прирачник. 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 Јас навистина не се сеќавам што const е, но сега забележите - 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 помала или одговара, или да биде поголема од С2. 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 >> Го враќа негативен број, ако s, а по азбучен ред, би требало 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 Точка коса црта споредите еден. 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 >> Во меѓувреме, ако јас напишеш во здраво во долниот случај и ЗДРАВО во горниот случај и 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 Распределбата на меморија. 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-Е-Л-Л-О, она што е стринг должина од с, очигледно? 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 >> Не сакам да ја напушти исклучите оваа специјални null карактер. 940 00:41:41,210 --> 00:41:45,160 Затоа што ако јас се направи копија од Здраво и само го прават H-Е-Л-Л-О, но јас не се стави 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 карактери долг, или еден милион карактери if јас никогаш не само да се случи 945 00:41:59,360 --> 00:42:01,050 да ја погоди обратна коса црта нула. 946 00:42:01,050 --> 00:42:05,780 >> Па ние треба шест бајти за чување H-Е-Л-Л-О, обратна коса црта нула. 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 различни компјутер. 953 00:42:16,250 --> 00:42:19,650 >> Така што се претвора таму е ова оператор наречен sizeof дека ако го давате на 954 00:42:19,650 --> 00:42:22,680 името на типот податоци - како знак, или int, или плови - 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 >> Па ова е ефективно само како да кажеш пати 1 или 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 >> Одам да се оди напред и да добијат низа Должината на s и чувајте го во n. 969 00:43:01,210 --> 00:43:06,620 Јас сум тогаш ќе iterate од 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-Е-Л-Л-О и таму е обратна коса црта нула. 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 >> Но веднаш штом почнам looping од нула на до преку должината на с, т 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 iteratively h за тука, Е-Л-Л-О. Плус, бидејќи јас го направи плус 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 капитализација на t, ние треба да види дека s е непроменета. 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 Точка коса црта 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 Па само интуитивно тука, на првата линија на код, int ѕвезда x, е прогласување на 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 Тоа не беше cliffhanger. 1005 00:45:06,980 --> 00:45:08,350 >> Тип на податок е int ѕвезда. 1006 00:45:08,350 --> 00:45:12,600 Па што значи тоа? X ќе чување на адресата на инт. 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 Поради големината на int е обично четири, Примерок од четири дава 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 Ѕвезда х значи што? 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 Ѕвезда y значи одат на она што е на 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 Што адресата е y складирање? 1024 00:45:54,950 --> 00:45:55,770 Ние не знаеме, нели? 1025 00:45:55,770 --> 00:45:59,230 Ние никогаш не сме еднаш го користите на задачата оператор вклучуваат y. 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 >> Па штом ние хит таа линија таму, ѕвезда y изнесува 13, нешто лошо, 1031 00:46:13,540 --> 00:46:17,220 нешто многу лошо е за да се случи да Binky. 1032 00:46:17,220 --> 00:46:25,810 Да видиме што се случува да се заокружи се случува да Binky тука, во овој момент 1033 00:46:25,810 --> 00:46:26,200 или па изгледа. 1034 00:46:26,200 --> 00:46:26,490 >> [Видео репродукција] 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 >> -Во ред. 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 >> -Во ред. 1055 00:46:59,480 --> 00:47:03,707 Па, овој код доделува нова цели броеви pointee, и овој дел ги поставува x 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 >> -Во ред. 1060 00:47:09,530 --> 00:47:14,110 Јас ќе dereference на покажувачот на X да ја запази бројот 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 Така прави dereference на X следува на стрелката за да пристапите до своите 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 >> -Во ред. 1072 00:47:42,125 --> 00:47:46,810 Јас само ќе одам во текот тука за да y и Земи го бројот 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 >> -Да, ние доделени на покажувачот y. 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 Можете да го поправам така што y поени на истиот 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 >> -Не. 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 Сега y укажува на истото место како и х. 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 >> -Во ред. 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 дела на y. 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 Whatever. 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 Bye bye сега. 1131 00:49:33,840 --> 00:49:34,300 >> [Крај видео репродукција] 1132 00:49:34,300 --> 00:49:36,940 >> Дејвид MALAN: Значи повеќе на покажувачи, повеќе на Binky следната недела. 1133 00:49:36,940 --> 00:49:38,190 Ќе се видиме во понеделник. 1134 00:49:38,190 --> 00:49:42,187