1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] Дејвид Џ MALAN: Сите во право. 2 00:00:08,160 --> 00:00:11,170 Ова е CS50, и ова е крајот на недела две. 3 00:00:11,170 --> 00:00:14,650 Ако очекувате да бидат гладни за околу ова време утре, знам дека ние ќе 4 00:00:14,650 --> 00:00:18,920 да свика како мала група утре, четврток 01:15. 5 00:00:18,920 --> 00:00:21,460 Има овој URL тука ако сакате да RSVP. 6 00:00:21,460 --> 00:00:25,270 Просторот е ограничен, па молам прости ако форма е исполнета од страна на пат кога ќе 7 00:00:25,270 --> 00:00:26,680 пополни оваа надвор. 8 00:00:26,680 --> 00:00:29,400 Друга рачно иако тоа може да биде од интерес е ова. 9 00:00:29,400 --> 00:00:32,409 >> Значи во само за времето еден месец, курсот ќе бидат ставени на располагање 10 00:00:32,409 --> 00:00:36,090 сите пошироко преку edx, преку која луѓето на интернет ќе биде 11 00:00:36,090 --> 00:00:39,580 можност да го следат заедно, се вклучи во текот доста активно, во факт. 12 00:00:39,580 --> 00:00:43,070 Тие ќе биде со користење на CS50 апарати и CS50 дискутираат и поголем дел од 13 00:00:43,070 --> 00:00:45,840 различни софтверски алатки, кои веќе биле со користење на овој семестар. 14 00:00:45,840 --> 00:00:49,030 И една од иницијативите ние би сакале да ја преземат како експеримент оваа година 15 00:00:49,030 --> 00:00:53,120 е да се види колку содржина можеме да ги претвориме во други зборуваат и 16 00:00:53,120 --> 00:00:54,110 напишано јазици. 17 00:00:54,110 --> 00:00:58,000 Па ако има интерес за учество во овој проект, при што 18 00:00:58,000 --> 00:01:02,090 ние ќе обезбедиме Македонски записници и преводи за на курсот 19 00:01:02,090 --> 00:01:05,190 предавања и шорцеви, семинари и делови и слично - 20 00:01:05,190 --> 00:01:08,700 ако зборувате течно или пишувам течно некој друг јазик, ние би 21 00:01:08,700 --> 00:01:12,240 сакаат да се вклучат во овој проект, при што ќе ги преземат една или повеќе од 22 00:01:12,240 --> 00:01:15,340 видеа, преведувајќи ги во јазикот знаеш доста добро. 23 00:01:15,340 --> 00:01:19,050 Да ви даде чувство на интерфејс, постои овој веб-базиран кориснички интерфејс 24 00:01:19,050 --> 00:01:22,330 дека ние ќе биде со користење дека ќе создаде основа на графичката околина како оваа. 25 00:01:22,330 --> 00:01:24,520 Ова ме настава некои Ноќта на вештерките пред. 26 00:01:24,520 --> 00:01:27,710 И на десната страна има во црно до овие временски поштенски марки, 27 00:01:27,710 --> 00:01:31,300 ќе видите разни нешта кои излегоа од устата тој ден. 28 00:01:31,300 --> 00:01:34,660 А потоа под неа, ќе бидете во можност да се преведат на друг јазик. 29 00:01:34,660 --> 00:01:37,840 Токму она што мапирање е меѓу нив, во овој случај, Англиски 30 00:01:37,840 --> 00:01:38,660 и, да речеме, шпански. 31 00:01:38,660 --> 00:01:40,480 Значи тоа е всушност многу лесен алатка. 32 00:01:40,480 --> 00:01:43,690 Можете да ја премотам касетата и брзо напред многу лесно со кратенки на тастатурата. 33 00:01:43,690 --> 00:01:46,710 Значи, ако би сакале да земат учество во овој експеримент и да имаат вашите зборови 34 00:01:46,710 --> 00:01:50,730 види и прочита од потенцијално илјадници луѓе таму, Ве молиме да се чувствуваат 35 00:01:50,730 --> 00:01:51,960 слободни да учествуваат. 36 00:01:51,960 --> 00:01:56,940 >> Сега еден збор за маче од понеделник, да не би да се испрати премногу 37 00:01:56,940 --> 00:01:58,120 страшно порака. 38 00:01:58,120 --> 00:02:02,130 Сфаќаат дека работното време сугерираат и како делови предложат, на 39 00:02:02,130 --> 00:02:05,110 Дизајнот на курсот е многу да се студенти соработка и 40 00:02:05,110 --> 00:02:09,250 зборува да работат преку проблемот поставува и проблеми заедно. 41 00:02:09,250 --> 00:02:13,630 И навистина линија само се сведува на, повторно, работа што во крајна линија 42 00:02:13,630 --> 00:02:16,420 треба да ги достават треба да биде свој. 43 00:02:16,420 --> 00:02:19,080 И така тоа е, сосема искрено - во работното време, тоа е сосема нормално - 44 00:02:19,080 --> 00:02:21,560 Тоа е целосно да се очекува, дури и - да бидат во разговор со некои 45 00:02:21,560 --> 00:02:22,370 пријатели до тебе. 46 00:02:22,370 --> 00:02:25,240 Ако тој или таа се бори со некоја тема, а ти си како, ох, и нека 47 00:02:25,240 --> 00:02:27,750 ми да ви даде увид во некои линија на кодот кој го напишав. 48 00:02:27,750 --> 00:02:28,290 Тоа е во ред. 49 00:02:28,290 --> 00:02:28,700 Што се случува. 50 00:02:28,700 --> 00:02:31,580 И тоа е многу погодна, мислам, со процесот на учење. 51 00:02:31,580 --> 00:02:35,270 Каде што линијата, пак, добива преминал е кога главата е вид на навалена над 52 00:02:35,270 --> 00:02:38,800 тука за премногу секунди или минути за тоа навистина да има само 53 00:02:38,800 --> 00:02:41,250 беше деблокира можност за твојот пријател. 54 00:02:41,250 --> 00:02:43,870 И, секако, кога работите се разменуваат преку е-мејл и Dropbox и 55 00:02:43,870 --> 00:02:45,350 слично, таму е на линија. 56 00:02:45,350 --> 00:02:48,940 Па со сите средства, се чувствуваат удобно и се чувствуваат охрабрени да разговарате со пријателите 57 00:02:48,940 --> 00:02:51,270 и соучениците за psets и многу повеќе. 58 00:02:51,270 --> 00:02:54,680 И само сфатат дека она што на крајот ги достават навистина треба да биде 59 00:02:54,680 --> 00:02:57,780 производ на вашата креација, а не некој друг. 60 00:02:57,780 --> 00:03:01,010 >> Значи во иста насока на cuddly суштества, може да 61 00:03:01,010 --> 00:03:02,820 знаат за овој човек овде. 62 00:03:02,820 --> 00:03:06,180 Значи ова е horrifically вулгарен филм од пред неколку години. 63 00:03:06,180 --> 00:03:08,680 Секој тука се гледа Spaceballs? 64 00:03:08,680 --> 00:03:09,120 Во ред. 65 00:03:09,120 --> 00:03:10,220 Па добар број тука. 66 00:03:10,220 --> 00:03:13,840 Значи ова е нашата прекрасно академски начин на воведување денес конечно 67 00:03:13,840 --> 00:03:15,130 идејата за криптографија. 68 00:03:15,130 --> 00:03:19,010 И така една од доменот специфични проблеми за 2 pset, кои ќе дојдат 69 00:03:19,010 --> 00:03:22,770 надвор доцна утре вечер, е да се нурне во светот на криптографијата, кои 70 00:03:22,770 --> 00:03:26,380 е уметност на енкрипција или scrambling информации. 71 00:03:26,380 --> 00:03:30,160 И овој на крајот се однесува на светот на безбедноста. 72 00:03:30,160 --> 00:03:34,440 >> Сега безбедност за повеќето нас доаѓа во форма на прилично досаден механизми. 73 00:03:34,440 --> 00:03:36,920 Сите од нас имаат кориснички имиња и лозинки. 74 00:03:36,920 --> 00:03:41,350 И сите од нас имаат многу лоша кориснички имиња и лозинки, најверојатно. 75 00:03:41,350 --> 00:03:45,250 Ако вашата лозинка е иста на повеќе веб-сајтови, кои веројатно не 76 00:03:45,250 --> 00:03:47,920 најдобрата идеја, како ние ќе разговараме кон крајот семестар. 77 00:03:47,920 --> 00:03:51,680 Ако вашата лозинка е напишано на леплива белешка - не е шега - на вашиот 78 00:03:51,680 --> 00:03:55,130 монитор, и тоа не е секогаш најдобар дизајн но прилично честа 79 00:03:55,130 --> 00:03:56,140 феномен. 80 00:03:56,140 --> 00:04:00,420 И ако не сте го користите криптографија за да го криптирате вашите лозинки, тие се 81 00:04:00,420 --> 00:04:01,610 особено ранливи. 82 00:04:01,610 --> 00:04:04,670 Значи, ако мислите дека сте се супер паметни со еден скриени Word 83 00:04:04,670 --> 00:04:07,740 документира некаде на вашиот хард диск кој ги има сите на вашите лозинки, но 84 00:04:07,740 --> 00:04:10,550 тоа е во папката каде што никој нема да се погледне во, и тоа не е многу 85 00:04:10,550 --> 00:04:11,540 безбедна механизам. 86 00:04:11,540 --> 00:04:15,100 И уште па што pset 2 ќе се воведе е оваа уметност на криптографијата и 87 00:04:15,100 --> 00:04:18,300 scrambling информации, така што работи како лозинки се 88 00:04:18,300 --> 00:04:19,500 сите посигурни. 89 00:04:19,500 --> 00:04:24,500 Па како да се мотивираат овој реалниот свет проблем со многу не-реалниот свет 90 00:04:24,500 --> 00:04:28,740 сценарио, дозволете ми да ве запознаам со една од нашите омилени клипови тука од овој 91 00:04:28,740 --> 00:04:29,895 филм, Spaceballs. 92 00:04:29,895 --> 00:04:30,565 >> [Видео репродукција] 93 00:04:30,565 --> 00:04:32,995 -Шлем, можете демон, што се случува? 94 00:04:32,995 --> 00:04:34,730 Што ви се прави во мојата ќерка? 95 00:04:34,730 --> 00:04:38,960 -Дозволете ми да се воведе брилијантен млад пластичен хирург, д-р Филип 96 00:04:38,960 --> 00:04:43,290 Schlotkin, најголемиот нос работа човек во целиот 97 00:04:43,290 --> 00:04:45,526 универзумот и Беверли Хилс. 98 00:04:45,526 --> 00:04:46,450 -Твојата височество. 99 00:04:46,450 --> 00:04:47,380 -Нос работа? 100 00:04:47,380 --> 00:04:48,035 Јас не ги разбирам. 101 00:04:48,035 --> 00:04:49,480 Таа веќе имаше нос работа. 102 00:04:49,480 --> 00:04:51,490 Тоа беше слатко 16 присутни. 103 00:04:51,490 --> 00:04:53,090 -Не, тоа не е она што мислите. 104 00:04:53,090 --> 00:04:55,150 Тоа е многу, многу полошо. 105 00:04:55,150 --> 00:04:59,860 Ако не ми даде комбинација на штит воздух, д-р Schlotkin ќе 106 00:04:59,860 --> 00:05:04,135 даде вашата ќерка назад нејзината стара носот. 107 00:05:04,135 --> 00:05:05,385 -Не! 108 00:05:08,202 --> 00:05:10,186 Каде ти е тоа? 109 00:05:10,186 --> 00:05:11,178 -Во ред. 110 00:05:11,178 --> 00:05:11,674 Јас ќе кажам. 111 00:05:11,674 --> 00:05:12,666 Јас ќе кажам. 112 00:05:12,666 --> 00:05:14,154 -Не, тато, бр. 113 00:05:14,154 --> 00:05:15,150 Вие не мора. 114 00:05:15,150 --> 00:05:16,460 -Ти си во право, драги мои. 115 00:05:16,460 --> 00:05:18,450 Јас ќе го изгубиле Вашиот нов нос. 116 00:05:18,450 --> 00:05:21,550 Но, јас не ќе им ја кажам комбинација без разлика што. 117 00:05:21,550 --> 00:05:23,100 -Многу добро. 118 00:05:23,100 --> 00:05:25,510 Д-р Schlotkin, дали вашето најлошото. 119 00:05:25,510 --> 00:05:26,760 -Мојот задоволство. 120 00:05:30,560 --> 00:05:31,180 -Не! 121 00:05:31,180 --> 00:05:33,450 Чекај, чекај. 122 00:05:33,450 --> 00:05:34,770 Јас ќе кажам. 123 00:05:34,770 --> 00:05:36,400 Јас ќе кажам. 124 00:05:36,400 --> 00:05:38,630 -Знаев дека тоа ќе работат. 125 00:05:38,630 --> 00:05:42,040 Добро, го даде на мене. 126 00:05:42,040 --> 00:05:46,890 -Во комбинација е еден. 127 00:05:46,890 --> 00:05:47,290 -Еден. 128 00:05:47,290 --> 00:05:48,183 -Еден. 129 00:05:48,183 --> 00:05:48,950 -Два. 130 00:05:48,950 --> 00:05:49,370 -Два. 131 00:05:49,370 --> 00:05:50,450 -Два. 132 00:05:50,450 --> 00:05:50,715 -Три 133 00:05:50,715 --> 00:05:51,380 -Три. 134 00:05:51,380 --> 00:05:52,390 -Три. 135 00:05:52,390 --> 00:05:53,200 -Четири. 136 00:05:53,200 --> 00:05:53,720 -Четири. 137 00:05:53,720 --> 00:05:55,830 -Четири. 138 00:05:55,830 --> 00:05:56,580 -Петка 139 00:05:56,580 --> 00:05:57,120 -Пет. 140 00:05:57,120 --> 00:05:58,560 -Пет. 141 00:05:58,560 --> 00:06:03,770 -Значи комбинација е еден, два, три, четири, пет. 142 00:06:03,770 --> 00:06:06,745 Тоа е stupidest комбинација што некогаш сум го слушнал во мојот живот. 143 00:06:06,745 --> 00:06:09,290 Тоа е вид на работа идиот ќе мора на својот багаж. 144 00:06:09,290 --> 00:06:11,540 Ти-благодариме, твојот височество. 145 00:06:11,540 --> 00:06:12,940 -Што направи? 146 00:06:12,940 --> 00:06:14,230 -Го исклучив ѕид. 147 00:06:14,230 --> 00:06:14,630 -Не, не. 148 00:06:14,630 --> 00:06:15,430 Можете исклучен целиот филм. 149 00:06:15,430 --> 00:06:16,722 -Јас мора да притисне погрешна копче. 150 00:06:16,722 --> 00:06:18,078 -Па, го стави назад. 151 00:06:18,078 --> 00:06:18,805 Стави филмот назад. 152 00:06:18,805 --> 00:06:19,080 -Да, г-дине. 153 00:06:19,080 --> 00:06:19,270 Да, господине. 154 00:06:19,270 --> 00:06:19,830 -Ајде да одиме, Erna. 155 00:06:19,830 --> 00:06:20,270 Дојди, Гречен. 156 00:06:20,270 --> 00:06:22,850 Се разбира дека знам дека сеуште ќе мора да ви сметка за ова. 157 00:06:27,400 --> 00:06:28,325 -Па, таа функционира? 158 00:06:28,325 --> 00:06:29,550 Каде е портата? 159 00:06:29,550 --> 00:06:29,910 -Тој работел, господине. 160 00:06:29,910 --> 00:06:30,770 Имаме комбинација. 161 00:06:30,770 --> 00:06:31,390 -Велики. 162 00:06:31,390 --> 00:06:35,630 Сега можеме да ги преземат сите последниот здив на свеж воздух од планетата Druidia. 163 00:06:35,630 --> 00:06:36,550 Што е комбинација? 164 00:06:36,550 --> 00:06:38,805 -Еден, два, три, четири, пет. 165 00:06:38,805 --> 00:06:40,610 -Еден, два, три, четири, пет? 166 00:06:40,610 --> 00:06:41,070 -Да. 167 00:06:41,070 --> 00:06:41,760 -Тоа е неверојатно. 168 00:06:41,760 --> 00:06:45,200 Јас имам истата комбинација на мојот багаж. 169 00:06:45,200 --> 00:06:47,800 Подгответе Spaceball 1 за итно заминување. 170 00:06:47,800 --> 00:06:48,536 -Да, г-дине. 171 00:06:48,536 --> 00:06:52,350 -А промена на комбинација на мојот багаж. 172 00:06:52,350 --> 00:06:53,250 -Ow! 173 00:06:53,250 --> 00:06:55,020 [END видео репродукција] 174 00:06:55,020 --> 00:06:57,470 >> Дејвид Џ MALAN: Еден зачудувачки филм треба сега сите се види. 175 00:07:00,600 --> 00:07:06,540 Значи контекст тука е дека со несигурни податоци доаѓа можност да 176 00:07:06,540 --> 00:07:07,790 шифрира и да се трка. 177 00:07:07,790 --> 00:07:11,060 Па така ова, на пример, е пример на шифрирана порака. 178 00:07:11,060 --> 00:07:12,980 Ова всушност кажува нешто на англиски јазик. 179 00:07:12,980 --> 00:07:14,750 Но тоа не е јасно целосно очигледни. 180 00:07:14,750 --> 00:07:17,360 И ние ќе доаѓаат полн круг денес да ги разграничат што оваа тајна 181 00:07:17,360 --> 00:07:18,380 порака тука е. 182 00:07:18,380 --> 00:07:22,370 Но, во реалниот свет на компјутери, работите дури и не изгледа како тие би можеле да 183 00:07:22,370 --> 00:07:23,440 биде англиски фрази. 184 00:07:23,440 --> 00:07:27,500 На пример, тоа е она што може да се најдат на стандарден Linux или Mac или 185 00:07:27,500 --> 00:07:32,080 UNIX компјутер во датотека која беше еднаш едно време се нарекува лозинка датотека. 186 00:07:32,080 --> 00:07:34,170 Денес, тоа е се пресели во други места. 187 00:07:34,170 --> 00:07:38,660 Но, ако погледнете во право место на системот, ќе видите не само вашиот 188 00:07:38,660 --> 00:07:41,430 корисничко име или дека други луѓе на системот, но ќе видите 189 00:07:41,430 --> 00:07:43,410 шифрирана верзија на нивните лозинка. 190 00:07:43,410 --> 00:07:47,800 Всушност, зборот криптата има сугерира дека следните работи е криптирана. 191 00:07:47,800 --> 00:07:52,030 И оваа серија на навидум случајни букви и карактери и броеви и 192 00:07:52,030 --> 00:07:56,370 итн може да се декриптира само со обично знае некои тајни - 193 00:07:56,370 --> 00:07:58,600 тајна збор, тајна број. 194 00:07:58,600 --> 00:08:02,760 И така, навистина, уметноста на криптографија на крајот се сведува на довербата на некои 195 00:08:02,760 --> 00:08:05,700 сортирање и знаејќи нешто што некој друг го прави тоа. 196 00:08:05,700 --> 00:08:10,010 Ние ќе се истражуваат оваа во малку повеќе детали денес и во pset да дојде. 197 00:08:10,010 --> 00:08:11,860 >> И сега еден збор на Поминете / не. 198 00:08:11,860 --> 00:08:15,250 Значи особено, како што некои од вас имаат нурна во 1 pset, апаратот и 199 00:08:15,250 --> 00:08:18,390 многу нов свет за себе, сфати дека фрустрации и 200 00:08:18,390 --> 00:08:21,340 конфузија и само технички тешкотии треба да се очекува. 201 00:08:21,340 --> 00:08:24,410 Особено со првиот pset, каде што има толку многу нови, само добивање 202 00:08:24,410 --> 00:08:28,830 запознаени со ls и CD и сите овие таинствени команди во нова средина. 203 00:08:28,830 --> 00:08:32,679 И тоа е одделен од вистинските материјал и програмирање себе. 204 00:08:32,679 --> 00:08:35,960 Па се реализира, исто така, дека постојат секако работното време кои постојат како 205 00:08:35,960 --> 00:08:36,770 поддршка структура. 206 00:08:36,770 --> 00:08:38,620 Делови започне ова доаѓа недела. 207 00:08:38,620 --> 00:08:41,990 Но што е најважно, ако сте чувство само дека ова не е 208 00:08:41,990 --> 00:08:44,420 светот за вас, сфаќаат дека тоа навистина само треба време. 209 00:08:44,420 --> 00:08:47,520 И не беа за оваа можност години за мене за преземање на една класа 210 00:08:47,520 --> 00:08:50,840 Поминете / не, искрено, јас никогаш не би се ни стапнал во училница. 211 00:08:50,840 --> 00:08:53,520 И можете да го промените овој до, да речеме, на петтиот понеделник на курсот. 212 00:08:53,520 --> 00:08:57,110 Значи, ако сте на работ сега, сфати дека наместо главата во некои други 213 00:08:57,110 --> 00:09:01,000 води заедно, не сигурно сметаат дека само промена на Поминете / не. 214 00:09:01,000 --> 00:09:03,750 Повторно, не е навистина оваа култура тука на Харвард за преземање на работите 215 00:09:03,750 --> 00:09:08,080 Поминете / не бидејќи сите навистина сака да се постигне или overachieve. 216 00:09:08,080 --> 00:09:11,470 Но, искрено, ова е прекрасен начин се обидува нешто што можеби не 217 00:09:11,470 --> 00:09:13,110 бидат запознаени за вас. 218 00:09:13,110 --> 00:09:17,090 И ќе заврши тоа во повеќето случаи сосема во ред, можеби 219 00:09:17,090 --> 00:09:18,040 многу да ги изненади. 220 00:09:18,040 --> 00:09:20,850 И во повеќе конкретни смисла, она што мислам дека Поминете / не генерално не, 221 00:09:20,850 --> 00:09:23,350 особено како што можеби сте искусни со pset 0, ако сте се стави 222 00:09:23,350 --> 00:09:27,200 во 10 часа, 15 часа, 25 часа во некои pset - и вие сте само удира 223 00:09:27,200 --> 00:09:28,180 главата на ѕидот, 224 00:09:28,180 --> 00:09:29,850 и станува супер доцна во ноќта, 225 00:09:29,850 --> 00:09:31,880 но сте донесени во pset како 90% од патот, 226 00:09:31,880 --> 00:09:33,780 знаете дека едноставно не можат да дознаам една работа - 227 00:09:33,780 --> 00:09:36,830 Поминете / не навистина се на работ надвор од класа како оваа, каде што може да се најде 228 00:09:36,830 --> 00:09:39,150 на среќно се каже во ред, знам дека тоа не е совршена. 229 00:09:39,150 --> 00:09:40,470 Но јас работев мојот газ надвор од ова. 230 00:09:40,470 --> 00:09:42,410 Јас сум прилично задоволен со тоа заврши. 231 00:09:42,410 --> 00:09:44,780 И дека ќе одговори на очекувањата за Поминете / не. 232 00:09:44,780 --> 00:09:46,850 Значи се задржи дека во умот. 233 00:09:46,850 --> 00:09:47,140 >> Во ред. 234 00:09:47,140 --> 00:09:50,980 Значи оние од вас кои се борат да го користите Универзитетот Харвард Wi-Fi знаете 235 00:09:50,980 --> 00:09:54,780 дека има CS50 SSID, Wi-Fi конекција лебдат околу што ќе 236 00:09:54,780 --> 00:09:56,520 би можеле да имаат подобра среќа за. 237 00:09:56,520 --> 00:09:59,430 Тоа е малку ироничен дека лозинката за тоа - ако би сакал да се обиде 238 00:09:59,430 --> 00:10:03,080 поврзување на овој за подобра брзина и ги споделите со нас, ако тоа не е подобро - 239 00:10:03,080 --> 00:10:09,240 е еден, два, три, четири, пет, па сè до осум бидејќи осум е 240 00:10:09,240 --> 00:10:10,270 посигурни од пет. 241 00:10:10,270 --> 00:10:15,520 Значи, ако ви треба за Wi-Fi лозинка, поврзете се CS50 безжично тука. 242 00:10:15,520 --> 00:10:16,950 Еден, два, три, четири, пет, шест, седум, осум. 243 00:10:16,950 --> 00:10:20,440 И пост на CS50 Дискутирај ако сеуште имаш наизменичното поврзување прашања, 244 00:10:20,440 --> 00:10:24,880 и ние ќе нека сили, кои се знаат за овој простор. 245 00:10:24,880 --> 00:10:25,180 >> Во ред. 246 00:10:25,180 --> 00:10:30,350 Значи брз закачка, особено за оние од вас кои се вентилатор момчиња или девојки 247 00:10:30,350 --> 00:10:31,900 на сите нешта на Apple. 248 00:10:31,900 --> 00:10:37,566 Она што јас откопани од неколку години назад беше оваа датотека тука, ilock.c, само за да 249 00:10:37,566 --> 00:10:40,930 вид на направи повеќе конкретни и посложени некои од повеќе основни C 250 00:10:40,930 --> 00:10:42,350 програми ние сме пишување. 251 00:10:42,350 --> 00:10:44,360 Па јас отвори оваа датотека, ilock.c. 252 00:10:44,360 --> 00:10:46,830 Тоа е на располагање на предавања страница за денес. 253 00:10:46,830 --> 00:10:49,470 На левата страна, ќе видите долга листа на функции. 254 00:10:49,470 --> 00:10:51,860 Значи колеги, кои го е создал овој напиша до голем број на функции, 255 00:10:51,860 --> 00:10:53,290 повеќе од само главните. 256 00:10:53,290 --> 00:10:55,490 Тој се користи целиот куп на библиотеки тука. 257 00:10:55,490 --> 00:11:00,450 И ако почнеме лизгање низ, што е ова всушност е е многу 258 00:11:00,450 --> 00:11:04,670 Прво, верувам, се бори за оригиналниот iPhone. 259 00:11:04,670 --> 00:11:08,000 Кога си сакал да jailbreak оригиналниот iPhone, што значи untether 260 00:11:08,000 --> 00:11:11,800 тоа од AT & T и всушност инсталирате посебен софтвер на него и прават работи 261 00:11:11,800 --> 00:11:13,510 дека Apple не сака луѓето да прават - 262 00:11:13,510 --> 00:11:17,020 добро, некој малку време да дознаам како точно тие би можеле да ги искористат 263 00:11:17,020 --> 00:11:20,880 софтвер пропусти, грешки, грешки во софтверот на Apple. 264 00:11:20,880 --> 00:11:22,650 И така се роди ilock.c. 265 00:11:22,650 --> 00:11:26,670 Дека ако тоа Составувач на компјутер и инсталиран со излез на iPhone што 266 00:11:26,670 --> 00:11:29,810 е поврзан со вашиот компјутер преку, на пример, USB кабел, ова ќе ви даде 267 00:11:29,810 --> 00:11:33,360 административни или root привилегии на вашиот iPhone и да го направите доста 268 00:11:33,360 --> 00:11:34,170 она што го сакате. 269 00:11:34,170 --> 00:11:36,740 >> И така не беше оваа фасцинантна мачка и глушец игра помеѓу Apple и 270 00:11:36,740 --> 00:11:39,920 на остатокот од светот, особено како тие, како и многу компании, обидете се да се заклучи 271 00:11:39,920 --> 00:11:43,220 своите работи надолу така што само може да прави со него што тие имаат намера. 272 00:11:43,220 --> 00:11:46,620 Но, благодарение на луѓе како овој и на нивното разбирање на ниско ниво 273 00:11:46,620 --> 00:11:50,580 детали и, во овој случај, C програмирање и многу од познатите конструкции 274 00:11:50,580 --> 00:11:54,630 дека ние сме почнале да играат со, вие сте во можност да навистина потпора на 275 00:11:54,630 --> 00:11:59,050 хардвер на начин што ви одговара и не мора да значи некои правно лице. 276 00:11:59,050 --> 00:12:01,360 Така на пример, немам поим што сето ова се прави. 277 00:12:01,360 --> 00:12:03,220 Но GetVersion звучи прилично јасна. 278 00:12:03,220 --> 00:12:05,480 И тоа изгледа како тоа е функција која овој човек напишал. 279 00:12:05,480 --> 00:12:09,240 Земете некој вид на број како аргумент, не враќа ништо, но 280 00:12:09,240 --> 00:12:13,080 се чини дека јамка со за јамка тука и ако состојба, ако состојба, 281 00:12:13,080 --> 00:12:15,620 се скрши, и некако се однесува на верзијата на броеви. 282 00:12:15,620 --> 00:12:16,700 Ако ние движете надолу - 283 00:12:16,700 --> 00:12:19,570 иако многу од овие клучни зборови се случува да бидат нови, и има 284 00:12:19,570 --> 00:12:22,590 едночудо функции тука ние никогаш не сум видел и може да не некогаш се види над 285 00:12:22,590 --> 00:12:23,830 текот на семестарот - 286 00:12:23,830 --> 00:12:27,150 на крајот на денот, ја следи истите правила и логиката дека ние сме 287 00:12:27,150 --> 00:12:28,760 игра со досега. 288 00:12:28,760 --> 00:12:34,220 Значи ова е премногу стари за да попуштат вашиот iPhone 3s или 4S или наскоро 5s, овие денови, 289 00:12:34,220 --> 00:12:37,320 но знам дека сето тоа е многу произлегуваат од овој свет дека ние сме 290 00:12:37,320 --> 00:12:38,430 нурна во. 291 00:12:38,430 --> 00:12:41,900 >> Па ајде да ги разгледаме во малку повеќе едноставен пример. 292 00:12:41,900 --> 00:12:46,100 Ова, само да се загрее со некои синтакса и некои други податоци 293 00:12:46,100 --> 00:12:49,240 типот дека ние сме зборуваше за, но навистина не гледа во C. Значи ова е 294 00:12:49,240 --> 00:12:51,680 фајл наречен positive1.c. 295 00:12:51,680 --> 00:12:55,120 И по забелешките на врвот, тоа само бара корисникот да обезбеди 296 00:12:55,120 --> 00:12:55,960 позитивен број. 297 00:12:55,960 --> 00:12:59,530 Така, тоа е пример на не-додека јамка, што е убаво за корисникот интерактивни 298 00:12:59,530 --> 00:13:01,980 програми, каде што треба да им кажам на корисникот да се направи нешто. 299 00:13:01,980 --> 00:13:05,190 И ако тие не соработуваат, ќе се развикам нив или одбие нивниот придонес. 300 00:13:05,190 --> 00:13:11,610 Случај во точка, јас идам да се направи линии 19 преку 24 се додека корисникот има 301 00:13:11,610 --> 00:13:14,310 не ми даде позитивен број. 302 00:13:14,310 --> 00:13:20,400 Сега ова детали тука on-line 18, зошто Изјавувам n над целата оваа 303 00:13:20,400 --> 00:13:24,490 looping конструкција наспроти веднаш до линијата 22 каде што 304 00:13:24,490 --> 00:13:26,880 всушност се грижи да се добие n? 305 00:13:26,880 --> 00:13:27,330 Да? 306 00:13:27,330 --> 00:13:27,780 [Беззвучен] 307 00:13:27,780 --> 00:13:29,040 >> Дејвид Џ MALAN: Да, па ова прашање од опсегот. 308 00:13:29,040 --> 00:13:30,850 И во рок лаик, што значи обемот однесуваат? 309 00:13:34,690 --> 00:13:36,610 Да? 310 00:13:36,610 --> 00:13:37,860 [Беззвучен] 311 00:13:40,040 --> 00:13:41,105 Дејвид Џ MALAN: Можете ли да зборува малку погласно? 312 00:13:41,105 --> 00:13:43,450 ЗВУЧНИК 1: Каде може да пристапите до одредена променлива. 313 00:13:43,450 --> 00:13:45,170 Дејвид Џ MALAN: Совршен. 314 00:13:45,170 --> 00:13:47,360 Каде можете да пристапите одредена променлива. 315 00:13:47,360 --> 00:13:50,400 И генерално правило досега е дека обемот на некои 316 00:13:50,400 --> 00:13:55,860 променливата е дефинирана од страна на најновите кадрави загради дека сте виделе. 317 00:13:55,860 --> 00:14:02,010 И така во овој случај, ако сум направил грешка на прогласување n on-line 22, 318 00:14:02,010 --> 00:14:03,010 таа линија ќе работат. 319 00:14:03,010 --> 00:14:10,990 Јас ќе добие int, и јас би го стави во таа променлива n во линија 22. 320 00:14:10,990 --> 00:14:16,900 Но кој линија од код сега ќе немаат поим што зборувам? 321 00:14:16,900 --> 00:14:22,650 Значи 25, и испоставува 24, како и, бидејќи во овој случај, тоа е надвор 322 00:14:22,650 --> 00:14:23,610 на тркалезните загради. 323 00:14:23,610 --> 00:14:27,280 Па само малку непријатност, но многу лесно да се реши со едноставно прогласување 324 00:14:27,280 --> 00:14:30,140 променлива надвор од самата функција. 325 00:14:30,140 --> 00:14:32,600 >> Сега ќе видиме подоцна денес, може да оди еден чекор понатаму. 326 00:14:32,600 --> 00:14:34,860 Па може дури да се добие малку мрзливи - 327 00:14:34,860 --> 00:14:37,320 и тоа не е да се препорача, воопшто - 328 00:14:37,320 --> 00:14:42,260 но дури и да се мрзливи и стави променлива глобално ниво, така да се каже не, 329 00:14:42,260 --> 00:14:46,670 внатрешноста на функција, не внатрешноста на еден циклус, но во самата датотека, надвор 330 00:14:46,670 --> 00:14:49,600 на сите функции што сум напишал, како што го направив тука on-line 15. 331 00:14:49,600 --> 00:14:51,160 Но, ова е генерално се намуртен врз. 332 00:14:51,160 --> 00:14:55,680 Но сфати дека ова е решение понекогаш до други проблеми, како што ќе 333 00:14:55,680 --> 00:14:56,620 на крајот види. 334 00:14:56,620 --> 00:14:58,130 Па за сега, ние ќе го оставиме вака. 335 00:14:58,130 --> 00:15:01,030 Но, ајде да видиме дали можеме да го преработи уште еднаш ова само да започнат да изразуваат себеси на 336 00:15:01,030 --> 00:15:01,990 малку поинаку. 337 00:15:01,990 --> 00:15:05,330 >> Значи оваа програма, само за да биде јасно, е positive1. 338 00:15:05,330 --> 00:15:11,810 Дозволете ми да оди напред тука и во мојот терминален прозорец направи positive1, Enter. 339 00:15:11,810 --> 00:15:12,740 Подготвува, во ред. 340 00:15:12,740 --> 00:15:14,910 Одам да се кандидира positive1, хит Enter. 341 00:15:14,910 --> 00:15:16,820 Барам да ми даде позитивен цел број. 342 00:15:16,820 --> 00:15:18,260 Јас ќе кажам -1. 343 00:15:18,260 --> 00:15:18,910 Кои не работат. 344 00:15:18,910 --> 00:15:22,150 0, 99, што се чини дека да се работи. 345 00:15:22,150 --> 00:15:23,570 Можеби не најригорозните тест. 346 00:15:23,570 --> 00:15:26,480 Но барем тоа е убаво разумност проверка дека сме на вистинскиот пат. 347 00:15:26,480 --> 00:15:29,240 Па сега дозволете ми да оди напред и да се отвори верзија две од ова. 348 00:15:29,240 --> 00:15:32,500 И она што е различно веќе? 349 00:15:32,500 --> 00:15:35,140 Ги спроведува истото. 350 00:15:35,140 --> 00:15:40,660 Но, она што е скокање како јасно различни овој пат? 351 00:15:40,660 --> 00:15:42,560 Да, па ова bool во зелена боја. 352 00:15:42,560 --> 00:15:45,980 Gedit истакна во зелено овој клучен збор познат како bool, 353 00:15:45,980 --> 00:15:47,000 која е тип на податок. 354 00:15:47,000 --> 00:15:51,080 Тоа не доаѓа вграден со сите верзии на В Вие треба да се вклучат во 355 00:15:51,080 --> 00:15:52,010 специфични библиотека. 356 00:15:52,010 --> 00:15:54,770 Во нашиот случај, јас вклучени CS50 библиотека, така што ние 357 00:15:54,770 --> 00:15:56,460 имаат пристап до bool. 358 00:15:56,460 --> 00:15:59,810 Но, во линија 18, ние се чини дека имаат Булова вредност тука наречен благодарен. 359 00:15:59,810 --> 00:16:01,040 Па можев да се нарече нешто. 360 00:16:01,040 --> 00:16:04,500 Но, јас го нарече благодарен само за да вид на пренесе некои семантичко значење. 361 00:16:04,500 --> 00:16:07,930 Значи на почетокот на линијата 18, јас не сум очигледно благодарни затоа што 362 00:16:07,930 --> 00:16:12,150 Булова вредност благодарен е иницијализиран на false, во согласност 18. 363 00:16:12,150 --> 00:16:16,890 И тогаш, се чини она што го направив тука во линии 21 преку 23 се Тукушто 364 00:16:16,890 --> 00:16:18,610 вид на препишува и повторно мојата логика. 365 00:16:18,610 --> 00:16:21,020 Па нема функционално различни. 366 00:16:21,020 --> 00:16:26,940 Но, во линија 22 сега, јас проверете дали int корисникот има обезбедено е поголема од 367 00:16:26,940 --> 00:16:31,120 0, тогаш јас едноставно променете ја вредноста на благодарен на true. 368 00:16:31,120 --> 00:16:32,290 И зошто да го направам тоа? 369 00:16:32,290 --> 00:16:35,600 Бидејќи во линија 25, очигледно, јас одам да се провери состојба. 370 00:16:35,600 --> 00:16:39,380 Дали овој циклус додека благодарен е лажна. 371 00:16:39,380 --> 00:16:43,610 >> Па јас предлагам оваа како алтернатива на верзијата еден, бидејќи тоа е најмалку 372 00:16:43,610 --> 00:16:45,130 малку повеќе интуитивна, можеби. 373 00:16:45,130 --> 00:16:46,900 Тоа е малку повеќе втемелени на англиски јазик. 374 00:16:46,900 --> 00:16:51,710 Затоа направете го следново додека не сте благодарни или додека благодарен е лажна. 375 00:16:51,710 --> 00:16:55,890 И овој пат, исто така, јас очигледно не им е грижа да се сетам на она што корисникот внесе 376 00:16:55,890 --> 00:16:57,730 во затоа известување нема променлива n. 377 00:16:57,730 --> 00:16:58,650 Така, всушност, јас - 378 00:16:58,650 --> 00:17:00,080 малку бела лага тука. 379 00:17:00,080 --> 00:17:02,770 Функционално, на програмата е малку поинаква откако ќе се дојде до дното на 380 00:17:02,770 --> 00:17:04,819 тоа, бидејќи јас не сум сеќавајќи се што n е. 381 00:17:04,819 --> 00:17:09,579 Но јас сакав да покажат тука дека иако видовме GetInt и 382 00:17:09,579 --> 00:17:13,920 GetString се користи од десната страна на знак за еднаквост досега, така што 383 00:17:13,920 --> 00:17:17,160 ние се сеќаваме на вредноста, технички, тоа не е строго неопходно. 384 00:17:17,160 --> 00:17:20,950 Ако за било која причина едноставно не се грижат за зачувување на вредноста, вие само сакате 385 00:17:20,950 --> 00:17:25,710 да се провери вредноста, забележите дека ние едноставно може да се напише тоа како GetInt отворен 386 00:17:25,710 --> 00:17:27,000 paren, во близина paren. 387 00:17:27,000 --> 00:17:30,460 Таа функција ќе се врати на вредност, како ние сме биле изјава. 388 00:17:30,460 --> 00:17:32,010 Тоа ќе ти го врати на инт. 389 00:17:32,010 --> 00:17:36,450 И така, ако ментално мислам на ова случување, кога ќе напишете 99, GetInt 390 00:17:36,450 --> 00:17:38,160 враќа бројот 99. 391 00:17:38,160 --> 00:17:41,330 И така концептуално, тоа е како да мојот код, всушност ова. 392 00:17:41,330 --> 00:17:45,880 Значи, ако 99 е навистина поголема од 0, тогаш благодарен станува вистина. 393 00:17:45,880 --> 00:17:50,420 Потоа линија 25 сфаќа ooh, ние сме направиле бидејќи јас сум сега благодарен. 394 00:17:50,420 --> 00:17:54,590 И во согласност 26, ние едноставно се каже, благодарам за позитивен цел број, без разлика на тоа 395 00:17:54,590 --> 00:17:55,710 се случи да биде. 396 00:17:55,710 --> 00:17:58,900 >> Сега ајде да направиме мала синтаксички шеќер тука, така да се каже. 397 00:17:58,900 --> 00:18:02,990 Ајде да видиме дали можеме да се исчисти оваа линија 25 со овој трет и последен варијанса 398 00:18:02,990 --> 00:18:04,640 во positive3. 399 00:18:04,640 --> 00:18:08,250 Значи забележите Единствената разлика сега е она што линија код? 400 00:18:11,930 --> 00:18:13,260 Да, па 25. 401 00:18:13,260 --> 00:18:15,520 И ние не сме навистина видел овој трик само уште. 402 00:18:15,520 --> 00:18:19,510 Но, ние не видите фантастичен точка во понеделникот, кој означува она? 403 00:18:19,510 --> 00:18:20,970 Па не, или негацијата. 404 00:18:20,970 --> 00:18:23,460 Така да Булова вредност и флип својата вредност. 405 00:18:23,460 --> 00:18:24,390 Точно станува лажни. 406 00:18:24,390 --> 00:18:25,500 Лажни станува вистина. 407 00:18:25,500 --> 00:18:28,910 Значи ова, јас би им предложил е дури и малку повеќе интуитивна на начин на 408 00:18:28,910 --> 00:18:32,200 пишувањето на кодот, бидејќи јас се уште се иницијализира благодарен на false. 409 00:18:32,200 --> 00:18:33,530 Јас се уште го направите следново. 410 00:18:33,530 --> 00:18:35,700 Јас во собата благодарен на точно кога ќе дојде време. 411 00:18:35,700 --> 00:18:40,690 Но сега може да се навистина само преведе овој код вербално лево кон десно, 412 00:18:40,690 --> 00:18:42,550 додека не благодарен. 413 00:18:42,550 --> 00:18:46,170 Бидејќи Бенг, или фантастичен точка, означува поимот не, па додека 414 00:18:46,170 --> 00:18:47,010 не благодарен. 415 00:18:47,010 --> 00:18:49,740 >> Значи, повторно, ние не имаат воведено нови концепти сама за себе. 416 00:18:49,740 --> 00:18:53,230 Ние разговаравме за Booleans назад кога игравме со нула. 417 00:18:53,230 --> 00:18:55,690 Но сфати сега ние само може да почнете да пишувате нашиот код во 418 00:18:55,690 --> 00:18:56,550 многу различни начини. 419 00:18:56,550 --> 00:19:00,010 Значи особено во pset1, ако сте вид на се борат да дознаам начин да се 420 00:19:00,010 --> 00:19:03,400 пишувам некои програмата, шансите се сте во среќа, бидејќи таму се случува да биде било 421 00:19:03,400 --> 00:19:05,780 Бројот на решенија што може да се случи по. 422 00:19:05,780 --> 00:19:09,850 На пример, ова е само три дури и за наједноставните програми. 423 00:19:09,850 --> 00:19:10,180 Во ред. 424 00:19:10,180 --> 00:19:13,860 И сега се потсетиме на Понеделник, тргнавме на оваа забелешка со враќање вредности. 425 00:19:13,860 --> 00:19:18,280 Значи за прв пат, ние напиша програма која не само што мора главен, 426 00:19:18,280 --> 00:19:22,240 Таа, исто така има свои сопствени функција што напишав тука. 427 00:19:22,240 --> 00:19:26,640 Значи во согласност 31 до 34, јас сум спроведува коцка функција. 428 00:19:26,640 --> 00:19:27,800 Тоа не е комплекс. 429 00:19:27,800 --> 00:19:29,830 Тоа е само пати пати, во овој случај. 430 00:19:29,830 --> 00:19:34,920 Но, она што е важно за тоа е дека јас сум земајќи влез во облик на и 431 00:19:34,920 --> 00:19:38,910 Јас сум враќање излез во форма на пати пати. 432 00:19:38,910 --> 00:19:43,940 >> Па сега имам способност, слично како јас се користи да со printf сам, да се јавите 433 00:19:43,940 --> 00:19:47,120 оваа функција со повикување на коцка функција. 434 00:19:47,120 --> 00:19:49,470 И коцка функција зема некои влез. 435 00:19:49,470 --> 00:19:52,030 И коцка функцијата враќа некои излез. 436 00:19:52,030 --> 00:19:56,660 И така од друга страна, printf само направи нешто. 437 00:19:56,660 --> 00:19:59,490 Таа не се врати нешто што ние се грижи за тоа - иако, како 438 00:19:59,490 --> 00:20:00,820 настрана, тоа не врати вредност. 439 00:20:00,820 --> 00:20:02,650 Вие само генерално ги игнорираат. 440 00:20:02,650 --> 00:20:04,000 Printf само направи нешто. 441 00:20:04,000 --> 00:20:06,220 Тоа беше пропратен ефект на печатење на екранот. 442 00:20:06,220 --> 00:20:09,480 За разлика од тука, имаме коцка функција, која 443 00:20:09,480 --> 00:20:11,400 всушност се враќа нешто. 444 00:20:11,400 --> 00:20:12,960 >> Значи ова е генерално - 445 00:20:12,960 --> 00:20:15,260 за оние кои се запознаени со тоа, тоа е прилично јасна идеја. 446 00:20:15,260 --> 00:20:18,460 Но, за оние кои се помалку запознаени со оваа идеја за полагање на влезови и добивање 447 00:20:18,460 --> 00:20:21,700 назад излези, ајде да се обидеме само нешто супер едноставен. 448 00:20:21,700 --> 00:20:25,180 Дали некој удобно доаѓа на сцената кратко? 449 00:20:25,180 --> 00:20:27,460 Треба да се биде удобно со камера за вас, како добро. 450 00:20:27,460 --> 00:20:27,640 Да. 451 00:20:27,640 --> 00:20:28,610 Океј, она што е вашето име? 452 00:20:28,610 --> 00:20:29,020 KEN: Кен. 453 00:20:29,020 --> 00:20:29,420 Дејвид Џ MALAN: Кен. 454 00:20:29,420 --> 00:20:29,810 Добро, Кен. 455 00:20:29,810 --> 00:20:31,060 Ајде нагоре. 456 00:20:31,060 --> 00:20:34,660 Па Кен ќе биде во функција на сорти тука. 457 00:20:34,660 --> 00:20:35,760 И ајде да одиме напред и да го направите тоа. 458 00:20:35,760 --> 00:20:38,790 Да се ​​добие малку фенси. 459 00:20:38,790 --> 00:20:39,770 Убаво да ви се исполнат. 460 00:20:39,770 --> 00:20:41,010 Добредојдовте во центарот на вниманието. 461 00:20:41,010 --> 00:20:41,980 Во ред. 462 00:20:41,980 --> 00:20:45,590 Да го погоди ова копче тука. 463 00:20:45,590 --> 00:20:46,420 Во ред. 464 00:20:46,420 --> 00:20:49,490 Значи тука имате модерна таблата. 465 00:20:49,490 --> 00:20:53,050 И она што сум е главната функција, на пример. 466 00:20:53,050 --> 00:20:55,990 И јас немаат iPad во мојата рака. 467 00:20:55,990 --> 00:20:59,000 Јас навистина не се сеќавам како да - и, всушност, не може да се каже. 468 00:20:59,000 --> 00:21:02,200 Јас навистина не имаат добри ракопис. 469 00:21:02,200 --> 00:21:05,260 И поради тоа, сакам да печати нешто на екранот за мене. 470 00:21:05,260 --> 00:21:07,470 >> Па јас сум се главната програма. 471 00:21:07,470 --> 00:21:15,060 И јас идам да имате велат дека ова со пишување на тоа во мојата пилешки нула и 472 00:21:15,060 --> 00:21:16,600 тогаш ви поминува влез. 473 00:21:16,600 --> 00:21:20,000 Па како глупо иако оваа вежба е, идејата на функции и нарекувајќи 474 00:21:20,000 --> 00:21:22,260 функција и се враќа на функцијата навистина се сведува на тоа. 475 00:21:22,260 --> 00:21:23,120 Јас сум главен. 476 00:21:23,120 --> 00:21:26,270 Имам само напишани printf ("нешто") на екранот. 477 00:21:26,270 --> 00:21:27,470 Јас сум водење на оваа програма. 478 00:21:27,470 --> 00:21:30,900 И штом printf добива нарекува, тоа трае еден аргумент - или еден параметар, 479 00:21:30,900 --> 00:21:31,660 понекогаш - 480 00:21:31,660 --> 00:21:32,780 помеѓу двојни наводници. 481 00:21:32,780 --> 00:21:33,960 Тука е тој аргумент. 482 00:21:33,960 --> 00:21:35,740 Јас сум го поминува на Кен. 483 00:21:35,740 --> 00:21:39,390 Сега тој е црна кутија напишани некои број на години што очигледно 484 00:21:39,390 --> 00:21:41,070 само знае како да се печати работи на екранот. 485 00:21:41,070 --> 00:21:42,320 >> Значи, извршување. 486 00:21:48,842 --> 00:21:49,900 Тоа не е лошо. 487 00:21:49,900 --> 00:21:50,890 Значи, многу добар. 488 00:21:50,890 --> 00:21:52,900 Па сега Кен е направено извршување. 489 00:21:52,900 --> 00:21:55,810 Дали тој треба да ме предаде ништо назад? 490 00:21:55,810 --> 00:21:57,240 Значи не дека ние сме виделе досега. 491 00:21:57,240 --> 00:21:59,230 Повторно, printf всушност не се врати на број. 492 00:21:59,230 --> 00:22:01,640 Но, ние ќе го игнорираат тоа за сега, бидејќи ние никогаш не сте го користеле. 493 00:22:01,640 --> 00:22:03,400 Значи тоа е тоа за Кен. 494 00:22:03,400 --> 00:22:06,650 Па сега главната враќа за извршување - 495 00:22:06,650 --> 00:22:09,630 Главната презема контрола на програмата повторно бидејќи таа линија на кодот, 496 00:22:09,630 --> 00:22:11,010 printf, е направено извршување. 497 00:22:11,010 --> 00:22:13,890 И ние одиме за нашата начин извршување на она што другите линии се таму. 498 00:22:13,890 --> 00:22:14,130 >> Во ред. 499 00:22:14,130 --> 00:22:17,080 Па сега ајде да се обиде малку поинаков пример. 500 00:22:17,080 --> 00:22:22,430 И овој пат тука, ајде прво го исчистите екранот овде. 501 00:22:22,430 --> 00:22:24,670 И овој пат, ние ќе го стори местење Рубикова коцка функција. 502 00:22:24,670 --> 00:22:27,350 Но овој пат, очекувам излезна вредност. 503 00:22:27,350 --> 00:22:28,630 Значи, да оди напред и да го направите тоа. 504 00:22:28,630 --> 00:22:35,680 Па сега имам една линија од код кој вели x = коцка (x). 505 00:22:35,680 --> 00:22:36,930 Така всушност let's - 506 00:22:41,450 --> 00:22:43,940 на линија код, се потсетиме, изгледа вака. 507 00:22:43,940 --> 00:22:45,960 x = коцка (x). 508 00:22:45,960 --> 00:22:48,100 Па, како е ова се случува на работа? 509 00:22:48,100 --> 00:22:50,820 Значи, да оди напред и да ви даде бел екран повторно. 510 00:22:50,820 --> 00:22:55,000 И јас идам да пишувам сега одредување на вредноста на x, која во овој момент во 511 00:22:55,000 --> 00:23:01,080 време се случува да бидат, да речеме, 2, да го чува едноставна. 512 00:23:01,080 --> 00:23:04,890 Значи имам напишано долу на парче хартија вредноста на 2, 513 00:23:04,890 --> 00:23:06,100 што е мое вредност х. 514 00:23:06,100 --> 00:23:08,250 Јас го предаде на Кен. 515 00:23:08,250 --> 00:23:09,200 KEN: И јас само пишувам одговорот? 516 00:23:09,200 --> 00:23:12,660 Дејвид Џ MALAN: Да, да, само напиши одговорот. 517 00:23:12,660 --> 00:23:13,030 Во ред. 518 00:23:13,030 --> 00:23:16,280 И сега тој има да ми се вратат нешто. 519 00:23:16,280 --> 00:23:17,560 Значи - 520 00:23:17,560 --> 00:23:18,170 совршена. 521 00:23:18,170 --> 00:23:18,840 Убаво segue. 522 00:23:18,840 --> 00:23:21,970 >> Па сега тој ми подава назад вредност од 8, во овој случај. 523 00:23:21,970 --> 00:23:23,220 И што да правам со неа? 524 00:23:23,220 --> 00:23:26,130 Па, всушност, ајде да видиме. 525 00:23:26,130 --> 00:23:26,640 Го добивате ова право. 526 00:23:26,640 --> 00:23:27,880 Што сум јас случува да се направи со неа? 527 00:23:27,880 --> 00:23:31,900 Сега ќе одам да ја искористам оваа вредност, а всушност таа продавница во оние 528 00:23:31,900 --> 00:23:33,400 исто битови во меморијата. 529 00:23:33,400 --> 00:23:35,030 Но, огласот, јас сум вид на борба тука. 530 00:23:35,030 --> 00:23:38,280 Јас сум малку збунет, бидејќи каде можам да всушност пишува вредноста на x? 531 00:23:38,280 --> 00:23:41,840 Затоа што сум само направено е физички страна Кен парче хартија 532 00:23:41,840 --> 00:23:44,400 кој имаше вредност 2, кој беше х. 533 00:23:44,400 --> 00:23:46,300 И навистина, тоа е токму она што се случува. 534 00:23:46,300 --> 00:23:50,100 Значи излегува дека кога ќе се јавите на функција, и ќе помине во расправија 535 00:23:50,100 --> 00:23:54,130 како "Здраво свету" или да помине во расправија како 2, генерално, ти си 536 00:23:54,130 --> 00:23:56,720 поминува во копија на тој аргумент. 537 00:23:56,720 --> 00:24:01,020 И така јас како што запиша број 2 тука и му го на Кен, а тоа мора 538 00:24:01,020 --> 00:24:04,760 значи дека сè уште имам копија од вредност 2 некаде. 539 00:24:04,760 --> 00:24:08,140 Бидејќи навистина, сега дека сум добил назад вредност 8, јас треба да се врати во 540 00:24:08,140 --> 00:24:12,010 RAM меморија, а всушност ги запишувам 8 каде што некогаш имале бројот 2. 541 00:24:12,010 --> 00:24:15,720 >> Така визуелно сеќавам на овој поим за полагање во буквално 542 00:24:15,720 --> 00:24:16,730 копија од вредност. 543 00:24:16,730 --> 00:24:19,570 Кен прави неговата работа, рацете ми врати нешто - во овој случај, 544 00:24:19,570 --> 00:24:20,820 вредност како 8. 545 00:24:20,820 --> 00:24:22,660 А потоа морам да направам нешто со таа вредност ако 546 00:24:22,660 --> 00:24:24,880 сакате да ја задржи околу. 547 00:24:24,880 --> 00:24:29,470 Значи сето ова ќе биде сите премногу запознаен пред долго. 548 00:24:29,470 --> 00:24:33,082 Ви благодарам многу за оваа демо тука, Кен. 549 00:24:33,082 --> 00:24:34,820 Во ред. 550 00:24:34,820 --> 00:24:36,720 Многу добро направено. 551 00:24:36,720 --> 00:24:40,610 Да видиме како тоа на крајот се однесува на некои од функцијата 552 00:24:40,610 --> 00:24:42,270 повик дека ние сме биле прави тука. 553 00:24:42,270 --> 00:24:47,610 Па дозволете ми да оди напред и да ни донесе назад во местење Рубикова коцка пример тука. 554 00:24:47,610 --> 00:24:53,080 И ќе забележите дека ако сакаме да всушност започнете преземањето ова понатаму, ние ќе 555 00:24:53,080 --> 00:24:57,050 мора да биде свесен за фактот дека бројот x тоа е се помина во 556 00:24:57,050 --> 00:25:01,390 тука е различно од она што всушност се донесе во функција. 557 00:25:01,390 --> 00:25:03,940 Значи, повторно, ова го донесува копија ќе стане доста 558 00:25:03,940 --> 00:25:05,620 соодветен за само еден миг. 559 00:25:05,620 --> 00:25:09,320 >> Па ајде да ги разгледаме во нешто што сосема не работат и уште. 560 00:25:09,320 --> 00:25:11,790 Одам да се оди напред и да се отвори една третина кабриолет пример, кој 561 00:25:11,790 --> 00:25:13,560 е недостатоци по природа. 562 00:25:13,560 --> 00:25:18,070 И се вика buggy3, а тоа спроведува Замена функција. 563 00:25:18,070 --> 00:25:23,500 Значи тука имаме главна функција што x и y произволно иницијализиран на 564 00:25:23,500 --> 00:25:24,720 1 и 2, соодветно. 565 00:25:24,720 --> 00:25:27,590 Ние може да се користи GetInt, но ние само треба едноставна вежба. 566 00:25:27,590 --> 00:25:29,680 Така, тоа е хард-кодирани како 1 и 2. 567 00:25:29,680 --> 00:25:35,330 Во линии 21 и 22, што очигледно испечатите x и y, по еден на линија. 568 00:25:35,330 --> 00:25:39,620 Потоа, на линија 23, тврдам јас сум Замена овие вредности, точка, точка, точка. 569 00:25:39,620 --> 00:25:43,030 Јас очигледно се јавите на функција во линија 24 нарече swap 570 00:25:43,030 --> 00:25:44,000 кој ги зема два аргументи. 571 00:25:44,000 --> 00:25:46,430 Тоа е целосно legit за функции да се земе два аргументи. 572 00:25:46,430 --> 00:25:48,220 Видовме printf го направи тоа веќе. 573 00:25:48,220 --> 00:25:50,370 Значи swap очигледно зема x и y. 574 00:25:50,370 --> 00:25:53,010 И како што сугерира името, се надевам дека тоа нема да 575 00:25:53,010 --> 00:25:54,320 разменуваат овие две вредности. 576 00:25:54,320 --> 00:25:57,560 Па тогаш тврдам на линија 25, заменети. 577 00:25:57,560 --> 00:26:01,570 И јас сепаратите x и y под претпоставка дека 578 00:26:01,570 --> 00:26:02,830 тие навистина биле заменети. 579 00:26:02,830 --> 00:26:04,370 Но, ако јас всушност ја извршите оваа програма - 580 00:26:04,370 --> 00:26:06,060 дозволете ми да се отвори прозорецот на терминалот. 581 00:26:06,060 --> 00:26:07,750 Дозволете ми да се направи buggy3. 582 00:26:07,750 --> 00:26:09,970 Како што сугерира името, ова не се случува да се заврши добро. 583 00:26:09,970 --> 00:26:14,690 Бидејќи кога ќе притиснете ентер, забележите дека x е 1. 584 00:26:14,690 --> 00:26:15,720 y е 2. 585 00:26:15,720 --> 00:26:19,160 А сепак на крајот на програмата, тие се уште се, всушност, иста. 586 00:26:19,160 --> 00:26:22,760 >> Па врз основа на демонстрација токму сега со Ken, она што всушност се случува? 587 00:26:22,760 --> 00:26:24,660 Па, ајде да се нурне во оваа swap функција. 588 00:26:24,660 --> 00:26:25,800 Тоа е супер кратко. 589 00:26:25,800 --> 00:26:28,020 Тоа е само неколку линии на код долго. 590 00:26:28,020 --> 00:26:32,810 Но она што е суштински проблем врз основа на едноставни приказна раскажана 591 00:26:32,810 --> 00:26:34,270 се тука со Кен? 592 00:26:34,270 --> 00:26:36,115 Зошто е трампа скршени? 593 00:26:36,115 --> 00:26:37,365 [Беззвучен] 594 00:26:39,840 --> 00:26:40,460 Точно. 595 00:26:40,460 --> 00:26:43,610 Па ние сме чување на копија не, променливата себе. 596 00:26:43,610 --> 00:26:46,810 Со други зборови, swap очигледно зема два аргументи, на инт. 597 00:26:46,810 --> 00:26:49,370 И тоа е произволно наречен a и b. 598 00:26:49,370 --> 00:26:54,430 И до тука, јас сум донесен во x и y, кои се соодветно 1 и 2. 599 00:26:54,430 --> 00:26:56,580 Но, јас не сум буквално поминува во х. 600 00:26:56,580 --> 00:26:58,410 Јас не сум буквално поминува во y. 601 00:26:58,410 --> 00:27:01,230 Јас сум поминува копија на x и копија од y. 602 00:27:01,230 --> 00:27:05,180 Тоа е како речиси како да сте копирани и атипичен во трампа на вредности кои 603 00:27:05,180 --> 00:27:07,440 сакате да всушност манипулира. 604 00:27:07,440 --> 00:27:11,970 Значи, ако тоа е случај, кога, на програмата, проектот извршување 605 00:27:11,970 --> 00:27:14,140 линија 35, а потоа 36 - 606 00:27:14,140 --> 00:27:17,740 кога ќе стигнете до линијата 37, во овој момент во приказната, она што е вредноста на? 607 00:27:20,740 --> 00:27:24,850 Во овој момент во приказната, линија 37, што е вредноста на во овој момент? 608 00:27:24,850 --> 00:27:25,980 Па тоа само треба да биде 1. 609 00:27:25,980 --> 00:27:26,170 Нели? 610 00:27:26,170 --> 00:27:29,100 Бидејќи х беше донесен како првиот аргумент. 611 00:27:29,100 --> 00:27:33,150 И оваа функција само произволно повикува својот прв аргумент, а. 612 00:27:33,150 --> 00:27:35,130 Слично е y, вториот аргумент. 613 00:27:35,130 --> 00:27:37,930 И тоа е само произволно повикувајќи вториот аргумент б. 614 00:27:37,930 --> 00:27:40,510 >> Сега оваа дихотомија е всушност прилично едноставно се објаснува. 615 00:27:40,510 --> 00:27:40,880 Размисли за тоа. 616 00:27:40,880 --> 00:27:42,980 Никој од нас не се сретна со лицето кое го напиша printf. 617 00:27:42,980 --> 00:27:49,880 Па сигурно, тој или таа нема идеја што нашите променливи 30 години подоцна се случува 618 00:27:49,880 --> 00:27:50,710 да се нарече. 619 00:27:50,710 --> 00:27:55,110 Па има да биде разлика помеѓу она што вие го викате променливи во 620 00:27:55,110 --> 00:27:59,960 функции сте пишување и она што вие го викате променливи во функциите си 621 00:27:59,960 --> 00:28:01,770 повик или користите. 622 00:28:01,770 --> 00:28:05,120 Значи со други зборови, имам напишано моите променливи како x и y. 623 00:28:05,120 --> 00:28:08,060 Но, ако некој друг го напишал на swap функција, тој или таа сигурно 624 00:28:08,060 --> 00:28:10,480 не би знаеле што ми променливи се случува да се нарече. 625 00:28:10,480 --> 00:28:13,850 Така сфаќаат дека ова е зошто ти мораш оваа двојност на имиња. 626 00:28:13,850 --> 00:28:16,800 Технички, би можел да го правиме ова преку случајност. 627 00:28:16,800 --> 00:28:19,750 Но тие се уште ќе биде предадена во примероци. 628 00:28:19,750 --> 00:28:22,940 Тоа само ќе биде чиста случајност естетски ако тоа лицето кое го напиша 629 00:28:22,940 --> 00:28:25,590 swap се користи истите имиња. 630 00:28:25,590 --> 00:28:25,930 >> Во ред. 631 00:28:25,930 --> 00:28:29,010 Па во овој момент во приказната, линија 37, а е 1. 632 00:28:29,010 --> 00:28:30,410 б е 2. 633 00:28:30,410 --> 00:28:32,040 И сега продолжи да ги трампа. 634 00:28:32,040 --> 00:28:34,730 Па прво на сите, дозволете ми да всушност го направите ова многу едноставно. 635 00:28:34,730 --> 00:28:36,500 Јас не знам што овие три линии на код се прави. 636 00:28:36,500 --> 00:28:37,370 Дозволете ми да го направите тоа. 637 00:28:37,370 --> 00:28:38,850 б добива. 638 00:28:38,850 --> 00:28:40,170 на добива б. 639 00:28:40,170 --> 00:28:41,450 Готово. 640 00:28:41,450 --> 00:28:43,540 Зошто е ова скршени, логично? 641 00:28:46,980 --> 00:28:48,590 Тоа е вид на интуитивен работа, нели? 642 00:28:48,590 --> 00:28:50,640 Значи станува б. 643 00:28:50,640 --> 00:28:52,450 И б станува. 644 00:28:52,450 --> 00:28:55,410 Но, проблемот е дека веднаш штом линија 37 извршува, што е 645 00:28:55,410 --> 00:28:58,170 вредноста на a и b? 646 00:28:58,170 --> 00:28:59,070 Истата, 1. 647 00:28:59,070 --> 00:29:03,460 Затоа што се clobbered, така да се каже, сте ги промениле б да се изедначи со. 648 00:29:03,460 --> 00:29:06,000 Значи еднаш линија 37 е погубен, тоа е одлично. 649 00:29:06,000 --> 00:29:09,940 Вие сега имаат две копии на бројот 1 во внатрешноста на оваа функција. 650 00:29:09,940 --> 00:29:14,720 Па тогаш кога ќе се каже во согласност 38, а добива б, добро, ти си вид на зезнав. 651 00:29:14,720 --> 00:29:17,370 Бидејќи сте само давање 1-1. 652 00:29:17,370 --> 00:29:20,400 Сте вид на изгубени ја вредноста што се грижи за. 653 00:29:20,400 --> 00:29:22,910 >> Значи во оригиналната верзија на ова, забележуваат она што го направив. 654 00:29:22,910 --> 00:29:26,620 Наместо тоа имаше трета линија на кодот кој изгледа вака. 655 00:29:26,620 --> 00:29:29,910 Изјавувам привремена променлива - tmp е многу заедничко име 656 00:29:29,910 --> 00:29:31,240 за привремена променлива. 657 00:29:31,240 --> 00:29:34,280 Тоа е int бидејќи мора да одговара на она што сакам да се направи копија на. 658 00:29:34,280 --> 00:29:39,720 Јас чување на копија од внатрешноста на мали. Значи еднаш линија 37 ја извршува, 659 00:29:39,720 --> 00:29:41,390 вредноста на е - 660 00:29:41,390 --> 00:29:42,970 брзо разумност провери - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 Вредноста на b е 2. 663 00:29:45,780 --> 00:29:48,470 И вредноста на мали, исто така 1. 664 00:29:48,470 --> 00:29:51,470 Па сега јас изврши линија 38. 665 00:29:51,470 --> 00:29:57,180 Значи еднаш линија 38 извршува, а се нафрла врз вредноста на b. 666 00:29:57,180 --> 00:29:58,510 И б е 2. 667 00:29:58,510 --> 00:30:00,500 Значи, сега 2. 668 00:30:00,500 --> 00:30:03,110 Па во овој момент во приказната, е 2, б е 2, 669 00:30:03,110 --> 00:30:05,130 и мали е 1. 670 00:30:05,130 --> 00:30:09,330 Па сега логично, можеме вредност само одеднаш tmp е во б. 671 00:30:09,330 --> 00:30:10,690 И ние ќе завршиш. 672 00:30:10,690 --> 00:30:12,170 >> Значи ние сме реши тој проблем. 673 00:30:12,170 --> 00:30:16,040 За жал, кога ќе ја извршите оваа програма во оваа форма, тоа всушност не трампа 674 00:30:16,040 --> 00:30:17,700 никакви вредности. 675 00:30:17,700 --> 00:30:18,950 Но, да биде јасно, зошто? 676 00:30:23,420 --> 00:30:26,310 Јас фиксна логички проблем од само еден миг пред. 677 00:30:26,310 --> 00:30:31,150 Но, повторно, ако јас ја извршите оваа програма, x и y останат непроменети до крајот на 678 00:30:31,150 --> 00:30:33,834 на програмата извршување. 679 00:30:33,834 --> 00:30:34,760 [Беззвучен] 680 00:30:34,760 --> 00:30:36,030 Дејвид Џ MALAN: Па ние не се вратија ништо. 681 00:30:36,030 --> 00:30:36,960 Значи тоа е вистина. 682 00:30:36,960 --> 00:30:39,880 Но излегува дека има малку проблем тука, бидејќи досега, на 683 00:30:39,880 --> 00:30:42,460 Единственото нешто што ние сме биле во можност да се врати е една работа. 684 00:30:42,460 --> 00:30:46,540 И ова е ограничување на C. Можете само да се вратат навистина една вредност, 685 00:30:46,540 --> 00:30:48,970 во кој случај, јас сум вид на заглавени тука 686 00:30:48,970 --> 00:30:51,805 затоа што може да се врати на нова вредност на x или би можел да се врати на 687 00:30:51,805 --> 00:30:53,160 нова вредност на y. 688 00:30:53,160 --> 00:30:54,330 Но сакам и назад. 689 00:30:54,330 --> 00:30:58,010 Па враќање не е едноставно решение овде. 690 00:30:58,010 --> 00:30:59,770 Но, проблемот фундаментално е зошто? 691 00:30:59,770 --> 00:31:03,270 Што ние всушност сменил? 692 00:31:03,270 --> 00:31:04,010 a и b. 693 00:31:04,010 --> 00:31:07,670 Но, a и b се копии на x и y, што значи ние само го направи сето ова 694 00:31:07,670 --> 00:31:10,080 работа - ние само трошат како три минути од разговорот за размена 695 00:31:10,080 --> 00:31:11,680 функција и сите три од овие променливи. 696 00:31:11,680 --> 00:31:15,090 И тоа е одлично, совршено точно во изолација. 697 00:31:15,090 --> 00:31:20,230 Но и обемот на b само што е во овие линии. 698 00:31:20,230 --> 00:31:24,130 Па само како за телефонска линија, ако пријават целобројна i внатре во за 699 00:31:24,130 --> 00:31:27,400 јамка - Слично на тоа, ако сте прогласување a и b внатрешноста на функција која 700 00:31:27,400 --> 00:31:30,550 што сум напишал, тие се само валиден внатре на таа функција. 701 00:31:30,550 --> 00:31:35,020 Што значи штом трампа е направено извршување и одиме од линија 24 до 702 00:31:35,020 --> 00:31:38,380 линија 25, x и y не се менуваат на сите. 703 00:31:38,380 --> 00:31:42,580 Вие само потроши целина многу време Замена копии на променливи. 704 00:31:42,580 --> 00:31:46,490 >> Значи излегува дека решението на ова е, всушност, не-очигледно. 705 00:31:46,490 --> 00:31:49,210 Тоа не е сосема доволно за да се вратите вредности, бидејќи можеме да 706 00:31:49,210 --> 00:31:50,320 само се врати една вредност. 707 00:31:50,320 --> 00:31:53,370 И јас навистина не сакате да се разменуваат и x и y во исто време. 708 00:31:53,370 --> 00:31:55,020 Па ние ќе се вратам на тоа. 709 00:31:55,020 --> 00:31:58,770 Но, за сега, да сфатат дека ова прашање во основа произлегува од фактот 710 00:31:58,770 --> 00:32:00,660 што a и b се копии. 711 00:32:00,660 --> 00:32:03,450 И тие се во своите опсегот. 712 00:32:03,450 --> 00:32:04,980 Па, ајде да се обидеме да се реши овој на некој начин. 713 00:32:04,980 --> 00:32:09,200 Дозволете ми, всушност, дојдете назад тука и се отвори, да речеме, на четвртата варијанта 714 00:32:09,200 --> 00:32:11,170 на ова, buggy4. 715 00:32:11,170 --> 00:32:13,230 А што е ова? 716 00:32:13,230 --> 00:32:16,690 Ова е слично, но поедноставно проблем да се погледне во пред да земе прободе во 717 00:32:16,690 --> 00:32:17,530 решавање на тоа. 718 00:32:17,530 --> 00:32:19,440 Оваа програма се нарекува прираст. 719 00:32:19,440 --> 00:32:24,320 И тоа очигледно иницијализира цел број x до 1 во согласност 18. 720 00:32:24,320 --> 00:32:25,950 Јас тогаш тврдат дека x е 1. 721 00:32:25,950 --> 00:32:28,020 Јас тогаш тврдат зголемување,, точка, точка, точка. 722 00:32:28,020 --> 00:32:29,460 Јас тогаш се јавите прираст. 723 00:32:29,460 --> 00:32:33,480 Но, тогаш во линии 22 и 23, тврдам тоа е се зголемува. 724 00:32:33,480 --> 00:32:37,780 Тврдам x е сега што и да е, 2 веројатно. 725 00:32:37,780 --> 00:32:39,770 >> Но оваа програма е кабриолет. 726 00:32:39,770 --> 00:32:41,020 Што е проблемот? 727 00:32:43,450 --> 00:32:44,418 Да? 728 00:32:44,418 --> 00:32:45,668 [Беззвучен] 729 00:32:49,260 --> 00:32:49,850 Дејвид Џ MALAN: Токму така. 730 00:32:49,850 --> 00:32:52,430 Значи x е прогласена очигледно on-line 18. 731 00:32:52,430 --> 00:32:54,410 Што е внатре кадрави загради главниот е. 732 00:32:54,410 --> 00:32:58,470 Значи едноставен одговор е дека, добро, x постои тука. 733 00:32:58,470 --> 00:33:01,510 Тоа не постои во линија 32. 734 00:33:01,510 --> 00:33:03,710 Значи оваа програма всушност дури и не ќе ги собере. 735 00:33:03,710 --> 00:33:07,910 На компајлерот, кога се обидувам составувањето на овој законик, се случува да се развикам на мене 736 00:33:07,910 --> 00:33:13,190 за некои непријавена идентификатор или нешто во таа насока. 737 00:33:13,190 --> 00:33:13,870 Всушност, ајде да се обидеме. 738 00:33:13,870 --> 00:33:15,235 Ова е да се направи buggy4. 739 00:33:17,780 --> 00:33:18,190 Ете го. 740 00:33:18,190 --> 00:33:22,030 Употреба на непријавена идентификатор x во линија 32. 741 00:33:22,030 --> 00:33:25,700 А всушност, да бидеме поексплицитни тука денес, така што ова е корисно во 742 00:33:25,700 --> 00:33:27,140 работното време и дома. 743 00:33:27,140 --> 00:33:29,000 Забележете дека тоа е малку cryptically напишано. 744 00:33:29,000 --> 00:33:31,560 Но, фактот дека ѕвекот има викна на нас, велејќи 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, е всушност корисно. 746 00:33:36,970 --> 00:33:41,970 Тоа значи дека грешката е на линија 32 на карактер позиција пет. 747 00:33:41,970 --> 00:33:44,670 Значи еден, два, три, четири, пет. 748 00:33:44,670 --> 00:33:46,640 Тоа е, всушност, каде е проблемот. 749 00:33:46,640 --> 00:33:49,710 А исто така и да ги држи во умот на работното време и дома, јас сум среќен тука. 750 00:33:49,710 --> 00:33:50,740 Имам една грешка. 751 00:33:50,740 --> 00:33:52,660 Тоа ќе биде релативно лесно да се поправи. 752 00:33:52,660 --> 00:33:56,220 Но, ако добиете целиот екран полн со огромна пораки за грешки, повторно, 753 00:33:56,220 --> 00:33:59,240 сфатат дека bottommost еден само може да биде симптоматично 754 00:33:59,240 --> 00:34:00,320 на врвниот оние. 755 00:34:00,320 --> 00:34:03,560 Значи секогаш бркаат надолу грешки од врвот надолу. 756 00:34:03,560 --> 00:34:06,720 Бидејќи таму само може да биде Daisy-синџир ефект, што се сте укажува на 757 00:34:06,720 --> 00:34:09,030 имаат начин повеќе проблеми отколку што навистина го прават. 758 00:34:09,030 --> 00:34:14,989 >> Па, како би можеле да го надминете овој, ако мојата цел е да прираст x? 759 00:34:14,989 --> 00:34:15,370 Што е тоа? 760 00:34:15,370 --> 00:34:15,620 Во ред. 761 00:34:15,620 --> 00:34:16,679 Значи можеме да направиме x глобален. 762 00:34:16,679 --> 00:34:18,860 Да го земеме на кратенката што предупреди за порано. 763 00:34:18,860 --> 00:34:20,550 Но, подлец, ние само треба брз лек. 764 00:34:20,550 --> 00:34:23,949 Па да речеме int x се тука. 765 00:34:23,949 --> 00:34:25,600 Тоа го прави x глобален. 766 00:34:25,600 --> 00:34:28,460 Па сега главната има пристап до него. 767 00:34:28,460 --> 00:34:31,780 И прираст има пристап до него. 768 00:34:31,780 --> 00:34:33,860 И така нека ме оди напред и да ги собере на оваа сега. 769 00:34:33,860 --> 00:34:36,330 Направете buggy4, Enter. 770 00:34:36,330 --> 00:34:37,440 Чини да ги собере сега. 771 00:34:37,440 --> 00:34:40,949 Ајде да се кандидира buggy4, и се чини дека всушност работат. 772 00:34:40,949 --> 00:34:42,780 Сега ова е една од овие работи - 773 00:34:42,780 --> 00:34:45,870 направите како што велам, а не како што правам јас, како јас сум само направено овде. 774 00:34:45,870 --> 00:34:49,239 Бидејќи во принцип, нашите програми се случува да добиете многу повеќе интересни и 775 00:34:49,239 --> 00:34:50,440 многу повеќе од тоа. 776 00:34:50,440 --> 00:34:53,199 И ако вашиот решение за проблемите на животот е само ах, стави сите 777 00:34:53,199 --> 00:34:57,550 променливи на врвот на вашата датотека, многу брзо се програми се 778 00:34:57,550 --> 00:34:59,700 horrifically тешко да се управуваат. 779 00:34:59,700 --> 00:35:02,050 Станува сè потешко да смислат нова променлива имиња. 780 00:35:02,050 --> 00:35:05,240 Станува сè потешко да се разбере она што променлива што прави. 781 00:35:05,240 --> 00:35:08,250 >> И така во целина, ова не е добро решение. 782 00:35:08,250 --> 00:35:09,780 Значи, да се направи ова подобро. 783 00:35:09,780 --> 00:35:11,920 Ние не сакаме да се користи глобалната променлива тука. 784 00:35:11,920 --> 00:35:14,050 Јас сакам за зголемување х. 785 00:35:14,050 --> 00:35:16,050 Па можев очигледно - 786 00:35:16,050 --> 00:35:18,450 на крајот на денот, тоа е вид на глупо приказна, бидејќи ние само го направите тоа. 787 00:35:18,450 --> 00:35:22,050 Но, ако јас не знам за тоа оператор, или јас не му беше дозволено да 788 00:35:22,050 --> 00:35:27,700 промените во главната себе, како поинаку би можел да се спроведе Кен овде, овој 789 00:35:27,700 --> 00:35:31,450 време не се коцка, но за зголемување? 790 00:35:31,450 --> 00:35:32,700 Како да си ги променам тоа нешто тука? 791 00:35:32,700 --> 00:35:33,025 Да. 792 00:35:33,025 --> 00:35:34,275 [Беззвучен] 793 00:35:37,430 --> 00:35:38,000 Дејвид Џ MALAN: Океј, добро. 794 00:35:38,000 --> 00:35:40,490 Па зошто да не можам да помине во х? 795 00:35:40,490 --> 00:35:44,390 А потоа наместо да ја вратат, зошто не јас само се враќа x + 1? 796 00:35:44,390 --> 00:35:46,370 Сега, уште неколку работи треба да се променат тука. 797 00:35:46,370 --> 00:35:47,530 Јас сум на вистинскиот пат. 798 00:35:47,530 --> 00:35:48,910 Што друго ми е потребно да tweak? 799 00:35:48,910 --> 00:35:49,470 Некој друг. 800 00:35:49,470 --> 00:35:49,882 Да? 801 00:35:49,882 --> 00:35:51,530 [Беззвучен] 802 00:35:51,530 --> 00:35:53,520 Дејвид Џ MALAN: Јас треба да се промени враќање тип на прираст 803 00:35:53,520 --> 00:35:54,590 бидејќи тоа не е неважечки. 804 00:35:54,590 --> 00:35:56,650 Празнина не значи ништо е се врати. 805 00:35:56,650 --> 00:35:57,600 Но, јасно, сега тоа е. 806 00:35:57,600 --> 00:36:01,280 Значи ова треба да се промени за да int да бидат во согласност со она што 807 00:36:01,280 --> 00:36:02,580 Јас сум, всушност враќање. 808 00:36:02,580 --> 00:36:04,580 >> Сега нешто друго се уште е кабриолет тука. 809 00:36:04,580 --> 00:36:04,982 Да? 810 00:36:04,982 --> 00:36:06,590 [Беззвучен] 811 00:36:06,590 --> 00:36:07,630 Дејвид Џ MALAN: Значи ми треба за зголемување х? 812 00:36:07,630 --> 00:36:10,336 [Беззвучен] 813 00:36:10,336 --> 00:36:11,880 Дејвид Џ MALAN: Ах, па затоа треба да помине х. 814 00:36:11,880 --> 00:36:13,300 Па јас треба да направите тука. 815 00:36:17,590 --> 00:36:19,690 Значи прототип, морам да го промените ова до овде. 816 00:36:19,690 --> 00:36:21,290 Значи ова треба да стане int. 817 00:36:21,290 --> 00:36:22,820 Ова треба да стане - 818 00:36:22,820 --> 00:36:23,670 хм. 819 00:36:23,670 --> 00:36:24,710 Јас всушност имаат грешки овде долу. 820 00:36:24,710 --> 00:36:25,780 Да го надминете овој прво. 821 00:36:25,780 --> 00:36:27,990 Што треба ова всушност ќе биде? 822 00:36:27,990 --> 00:36:29,330 Па тоа е мора да биде int нешто. 823 00:36:29,330 --> 00:36:30,340 Тоа може да биде х. 824 00:36:30,340 --> 00:36:33,120 Но, искрено, ако почне повикувајќи на сите ваши променливи x, тоа се случува да се добие 825 00:36:33,120 --> 00:36:35,250 помалку и помалку јасно кој е кој. 826 00:36:35,250 --> 00:36:38,210 Па ајде само произволно да изберете различни именување конвенција за мојата 827 00:36:38,210 --> 00:36:40,220 помошник функции, функции јас пишувам. 828 00:36:40,220 --> 00:36:41,100 Ние ќе го наречеме. 829 00:36:41,100 --> 00:36:44,500 Или би можеле да го наречеме - ајде да ги наречеме тоа even_number да биде уште поексплицитна. 830 00:36:44,500 --> 00:36:47,610 Па тогаш мора да се врати без разлика на бројот е плус 1. 831 00:36:47,610 --> 00:36:49,720 И сега морам да се промени една друга работа се тука и еден 832 00:36:49,720 --> 00:36:50,700 друга работа тука. 833 00:36:50,700 --> 00:36:54,150 Што треба да се промени на линија 21 првиот? 834 00:36:54,150 --> 00:36:55,390 Морам да го доделите до x. 835 00:36:55,390 --> 00:36:57,480 Па јас не може само да се јавите прираст x. 836 00:36:57,480 --> 00:37:01,000 Ми треба да се потсетиме на одговор со промена на вредноста на x за 837 00:37:01,000 --> 00:37:02,020 на левата страна. 838 00:37:02,020 --> 00:37:04,930 И иако x е сега на лево и десно, и тоа е сосема во ред, бидејќи 839 00:37:04,930 --> 00:37:08,370 на десната страна добива извршува првиот потоа добива plopped во левата 840 00:37:08,370 --> 00:37:10,240 рака работа, x во овој случај. 841 00:37:10,240 --> 00:37:11,900 А потоа на крај, тоа е лесен фикс сега. 842 00:37:11,900 --> 00:37:15,080 Ова само треба да одговара она што е долу. 843 00:37:15,080 --> 00:37:17,120 Int број. 844 00:37:17,120 --> 00:37:17,320 >> Во ред. 845 00:37:17,320 --> 00:37:20,290 Па еден куп на промени за навистина глупаво функција. 846 00:37:20,290 --> 00:37:24,250 Но, претставник на она што ние повеќе ќе сакате да го направите. 847 00:37:24,250 --> 00:37:25,490 Така осигурајте се buggy4. 848 00:37:25,490 --> 00:37:26,485 Сум зезнав некаде. 849 00:37:26,485 --> 00:37:27,520 О, Боже. 850 00:37:27,520 --> 00:37:29,660 Пет грешки во, како, на шест-лајн програма. 851 00:37:29,660 --> 00:37:36,500 Значи она што не е во ред на линија 18, карактер 5? 852 00:37:36,500 --> 00:37:36,970 Во ред. 853 00:37:36,970 --> 00:37:39,330 Па морам да пријават тоа int. 854 00:37:39,330 --> 00:37:39,630 Во ред. 855 00:37:39,630 --> 00:37:41,790 Да видиме, целиот куп на други грешки. 856 00:37:41,790 --> 00:37:42,230 Oh my god. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Но, повторно, ајде да го исчистите екранот - 859 00:37:46,020 --> 00:37:48,660 Контрола L тука - и прегласувањето ѕвекот. 860 00:37:48,660 --> 00:37:51,340 Значи пет проблеми е всушност само оној. 861 00:37:51,340 --> 00:37:53,500 Па сега ајде да се кандидира buggy4, Enter. 862 00:37:53,500 --> 00:37:54,150 Whew. 863 00:37:54,150 --> 00:37:57,434 x се зголемува правилно. 864 00:37:57,434 --> 00:37:58,420 >> Во ред. 865 00:37:58,420 --> 00:38:01,700 Било какви прашања за тоа како да прираст броеви? 866 00:38:01,700 --> 00:38:02,896 Да? 867 00:38:02,896 --> 00:38:06,864 ЗВУЧНИК 2: Зошто е тоа што вие само може да го промени на X да ја број во променлива 868 00:38:06,864 --> 00:38:08,860 име и тоа ќе знаеме на што мислиш? 869 00:38:08,860 --> 00:38:09,600 Дејвид Џ MALAN: Добро прашање. 870 00:38:09,600 --> 00:38:13,130 Како е тоа што јас само може да го промени на X да ја бројот и на програмата ќе знаете 871 00:38:13,130 --> 00:38:13,990 веднаш? 872 00:38:13,990 --> 00:38:16,120 Значи, повторно, мислам на тоа како оваа апстракција. 873 00:38:16,120 --> 00:38:20,110 Значи, ако јас сум главен и Кен е поединечната, искрено, не ми е грижа 874 00:38:20,110 --> 00:38:21,540 што Кен повикува неговите iPad. 875 00:38:21,540 --> 00:38:25,350 Не ми е гајле што тој го нарекува нешто што има врска со неговата имплементација 876 00:38:25,350 --> 00:38:26,550 на оваа функционалност. 877 00:38:26,550 --> 00:38:32,130 Значи ова е имплементација детали што, главно, не 878 00:38:32,130 --> 00:38:33,010 треба да се грижат. 879 00:38:33,010 --> 00:38:37,440 И така едноставно менување постојано внатрешноста на функција, бројот тука 880 00:38:37,440 --> 00:38:41,340 и бројот тука, се што е потребно толку долго како што прекомпајлирате. 881 00:38:41,340 --> 00:38:43,820 Тоа е вид на како, ако мислите дека за тоа - многу од нас, оние од вас со возачот 882 00:38:43,820 --> 00:38:46,590 лиценци кои сте управувано, или ако сте дури и управувано во автомобил - 883 00:38:46,590 --> 00:38:50,710 повеќето од нас немаат идеја како автомобил работи под хаубата. 884 00:38:50,710 --> 00:38:54,710 И буквално, ако се отвори капакот на моторот, повеќето од нас - мене доручек - 885 00:38:54,710 --> 00:38:56,580 не се случува да навистина знае она што го барате. 886 00:38:56,580 --> 00:38:58,850 Вид како може да се чувствуваат со нешто како ова право сега. 887 00:38:58,850 --> 00:39:01,380 Но, ние навистина не треба да се грижи како автомобил работи. 888 00:39:01,380 --> 00:39:05,000 Ние не треба да се грижи што сите прачки и клипови и кабли внатрешноста на 889 00:39:05,000 --> 00:39:07,700 автомобилот се всушност прави. 890 00:39:07,700 --> 00:39:11,360 >> Значи нешто како она што вие го викате на клипот не е важно 891 00:39:11,360 --> 00:39:11,920 тука во овој случај. 892 00:39:11,920 --> 00:39:12,490 Истата идеја. 893 00:39:12,490 --> 00:39:12,670 Да? 894 00:39:12,670 --> 00:39:13,920 [Беззвучен] 895 00:39:25,250 --> 00:39:29,530 Дејвид Џ MALAN: Ако имаше повеќе намени на променливата Ха момент пред, 896 00:39:29,530 --> 00:39:32,220 вас, програмер, ќе треба да ги промените насекаде. 897 00:39:32,220 --> 00:39:35,230 Или вие буквално може да направи датотека, Menu, а потоа Најдете / Заменете, 898 00:39:35,230 --> 00:39:36,270 нешто слично. 899 00:39:36,270 --> 00:39:40,110 Но, ви се случува да треба да се направи оние промени себе си. 900 00:39:40,110 --> 00:39:41,200 Мора да биде конзистентна. 901 00:39:41,200 --> 00:39:42,450 [Беззвучен] 902 00:39:47,200 --> 00:39:48,960 Дејвид Џ MALAN: А особено ред како овде? 903 00:39:48,960 --> 00:39:52,660 Ако ова беше int друг број? 904 00:39:52,660 --> 00:39:52,940 Да. 905 00:39:52,940 --> 00:39:56,430 Па цел е важно кога ќе се јавите на функција. 906 00:39:56,430 --> 00:40:00,350 Значи, ако јас се јавуваат прираст тука со нешто запирка нешто, 907 00:40:00,350 --> 00:40:01,400 има директна мапирање. 908 00:40:01,400 --> 00:40:04,490 Првиот променлива, што се вика, се прави копија на првиот 909 00:40:04,490 --> 00:40:05,480 аргумент овде. 910 00:40:05,480 --> 00:40:07,280 За жал, ова не треба да биде заграда. 911 00:40:07,280 --> 00:40:09,300 Вториот аргумент линии со втората. 912 00:40:09,300 --> 00:40:11,220 >> Така да, да, прашања. 913 00:40:11,220 --> 00:40:11,490 Во ред. 914 00:40:11,490 --> 00:40:13,360 Жал ми требаше долго начин да стигнете таму. 915 00:40:13,360 --> 00:40:14,610 Други прашања? 916 00:40:16,460 --> 00:40:16,850 Во ред. 917 00:40:16,850 --> 00:40:20,300 Значи, да видиме ако не можеме да наслика слика на она што всушност се случува 918 00:40:20,300 --> 00:40:22,160 тука под хауба, така да се каже. 919 00:40:22,160 --> 00:40:26,310 Значи ова е правоаголник кои би можеле да претставуваат меморијата на вашиот компјутер. 920 00:40:26,310 --> 00:40:31,240 Па дури и ако немаат идеја како меморија работи или како RAM меморија дела, барем 921 00:40:31,240 --> 00:40:33,590 претпоставиме дека имате гроздовете на тоа овие денови. 922 00:40:33,590 --> 00:40:34,740 Имаш мегабајти од неа. 923 00:40:34,740 --> 00:40:35,760 Имаш гигабајти на неа. 924 00:40:35,760 --> 00:40:40,690 И знаеме од недела нула дека бајт е само она што? 925 00:40:40,690 --> 00:40:41,280 8 бита. 926 00:40:41,280 --> 00:40:42,730 Право, па 8 нули и оние. 927 00:40:42,730 --> 00:40:46,300 Значи, ако вашиот компјутер има свирка на RAM меморија, две свирки на RAM меморија овие денови, имате 928 00:40:46,300 --> 00:40:54,450 милијарди денари или 2 милијарди бајти меморија, или околу 8 милијарди евра или 16 милијарди 929 00:40:54,450 --> 00:40:56,560 битови, во внатрешноста на вашиот компјутер. 930 00:40:56,560 --> 00:40:59,710 Сега за разлика од малку волнени Вили пример, тоа не е магнетни честички 931 00:40:59,710 --> 00:41:00,560 обично повеќе. 932 00:41:00,560 --> 00:41:04,470 Сè повеќе, во лап-топ компјутери во најмала рака, тоа е цврста состојба дискови, SSDs, дека 933 00:41:04,470 --> 00:41:05,560 само немаат подвижни делови. 934 00:41:05,560 --> 00:41:06,710 Тоа е сите електронски. 935 00:41:06,710 --> 00:41:08,070 Сето ова е електрична енергија врз основа. 936 00:41:08,070 --> 00:41:12,360 Така што мислам, иако, на овој правоаголник како само претставуваат еден или два 937 00:41:12,360 --> 00:41:13,930 гигабајти на меморија што го имате. 938 00:41:13,930 --> 00:41:15,500 >> Па тоа е дел од меморијата. 939 00:41:15,500 --> 00:41:20,460 Сега во светот на компјутерски науки има вид на поделено надвор парчиња 940 00:41:20,460 --> 00:41:22,570 меморија за да направите различни нешта. 941 00:41:22,570 --> 00:41:25,930 Така на пример, ако ова е RAM меморија на вашиот компјутер - како што е предложено од страна на 942 00:41:25,930 --> 00:41:30,400 правоаголник таму - Излегува дека од Конвенцијата, на врвот на вашата RAM меморија, така 943 00:41:30,400 --> 00:41:33,170 да зборуваат, обично она што се нарекува текст сегмент. 944 00:41:33,170 --> 00:41:35,910 Тоа се нули и оние кои се составени. 945 00:41:35,910 --> 00:41:39,040 Значи, кога ние погледна под хаубата во она што a.out е, сите 946 00:41:39,040 --> 00:41:40,360 на нули и оние - 947 00:41:40,360 --> 00:41:44,000 кога ќе ја стартувате програмата, оние нули и оние кои се вчитуваат од вашиот хард 948 00:41:44,000 --> 00:41:46,290 возење во нешто што се нарекува RAM меморија. 949 00:41:46,290 --> 00:41:48,950 И во RAM меморија, тие се стави на врвот. 950 00:41:48,950 --> 00:41:50,330 Сега пак, имате други работи. 951 00:41:50,330 --> 00:41:53,060 Иницијализира податоците, деиницијализира податоци. 952 00:41:53,060 --> 00:41:56,440 Овие две делови од меморија се однесува на глобални променливи, што 953 00:41:56,440 --> 00:41:57,530 не често ги користат. 954 00:41:57,530 --> 00:42:00,630 Но, понекогаш ако не, тие завршуваат таму, како и. 955 00:42:00,630 --> 00:42:01,620 Потоа, тука е некои други работи. 956 00:42:01,620 --> 00:42:04,130 Животната средина променливи, кои ние не ќе потроши многу време на. 957 00:42:04,130 --> 00:42:06,120 Но, тогаш две важни нешта што ќе се врати во текот на овој 958 00:42:06,120 --> 00:42:08,130 семестар, магацинот и грамада. 959 00:42:08,130 --> 00:42:12,280 >> Па повеќето од меморијата на вашиот компјутер е резервирана кога водење на програма за 960 00:42:12,280 --> 00:42:14,880 нешто што се нарекува магацинот и нешто што се нарекува куп. 961 00:42:14,880 --> 00:42:16,940 И ние нема да се зборува за грамада денес, но ние ќе 962 00:42:16,940 --> 00:42:18,180 зборува за оџак. 963 00:42:18,180 --> 00:42:22,910 И на магацинот е замислена да апелирам до визуелна како јадење салата 964 00:42:22,910 --> 00:42:26,120 оброк пепелниците во Mather куќа, или каде и да се случи да биде, каде што 965 00:42:26,120 --> 00:42:27,810 Јадење сала персонал ги чисти секој ден. 966 00:42:27,810 --> 00:42:30,180 Тие ги магацинот до од подот на нагоре. 967 00:42:30,180 --> 00:42:33,800 И слично, во знак на сеќавање, не е идејата за ставање нешто на 968 00:42:33,800 --> 00:42:36,740 магацинот, стави нешто на магацинот, стави нешто на магацинот. 969 00:42:36,740 --> 00:42:38,000 И она што се подразбира под тоа? 970 00:42:38,000 --> 00:42:41,430 Па, ајде да зумирате на само долната половина на оваа слика, на вашиот компјутер 971 00:42:41,430 --> 00:42:43,990 RAM меморија, да предложи следниве. 972 00:42:43,990 --> 00:42:48,300 Излегува дека кога ќе ја стартувате програмата како a.out или здраво, без оглед на 973 00:42:48,300 --> 00:42:49,920 на програмата е дека сте го напишале, 974 00:42:49,920 --> 00:42:53,030 повторно, оние нули и оние кои се вчитуваат од вашиот хард диск - што е 975 00:42:53,030 --> 00:42:56,190 долгорочно чување, останува таму дури и кога ќе повлечете го приклучокот - 976 00:42:56,190 --> 00:42:57,220 натоварена во RAM меморија. 977 00:42:57,220 --> 00:42:59,020 RAM меморија е побрз од хард дискови. 978 00:42:59,020 --> 00:43:00,700 Тоа е помал од хард дискови. 979 00:43:00,700 --> 00:43:03,490 Но, тоа е каде програми живеат додека си ги извршува. 980 00:43:03,490 --> 00:43:06,380 >> Па ќе кликнете два пати на програмата на Mac или PC - тоа е вчитана од 981 00:43:06,380 --> 00:43:07,750 хард диск во RAM меморија. 982 00:43:07,750 --> 00:43:11,760 Штом тоа е натоварена во RAM меморија, нули и оние одат на патот врвот, 983 00:43:11,760 --> 00:43:13,130 т.н. текст сегмент. 984 00:43:13,130 --> 00:43:17,040 Но, тогаш штом вашата програма всушност почнува да трча, главната 985 00:43:17,040 --> 00:43:18,140 функција се нарекува. 986 00:43:18,140 --> 00:43:21,070 И главни, како што видовме, често има локални променливи. 987 00:43:21,070 --> 00:43:24,560 И има ints и стрингови и знаци и слично. 988 00:43:24,560 --> 00:43:28,300 Значи, ако вашата програма кои сте ги напишале или програма која имате 989 00:43:28,300 --> 00:43:33,680 двојно кликнавте користи некои променливи во внатрешноста на главниот, тие завршуваат во 990 00:43:33,680 --> 00:43:37,020 дното од вашиот магацинот на меморија, така да се каже. 991 00:43:37,020 --> 00:43:39,160 Сега поконкретно, што значи ова всушност значи? 992 00:43:39,160 --> 00:43:44,080 Ова само значи дека ако ние се случува да бројот на работи - 993 00:43:44,080 --> 00:43:49,380 ако ние се случува да бројот на бајти на RAM меморија во вашиот компјутер, забележите дека 994 00:43:49,380 --> 00:43:51,650 ова може да биде бајт бројот нула. 995 00:43:51,650 --> 00:43:56,130 Ова може да биде бајт број еден, два, три, четири, пет, шест, сите 996 00:43:56,130 --> 00:43:57,290 пат до допаѓа - 997 00:43:57,290 --> 00:44:01,520 2 милијарди ќе бидат сите на патот до таму на врвот. 998 00:44:01,520 --> 00:44:05,960 Значи со други зборови, кога зборуваме за RAM меморија или мемориската во однос на бајти, тоа 999 00:44:05,960 --> 00:44:09,680 само значи дека некој се одлучи што да се нумерира секоја од 1000 00:44:09,680 --> 00:44:11,110 оние делови од меморијата. 1001 00:44:11,110 --> 00:44:16,950 >> Значи, кога ви треба 32 бита за int, или треба 8 бита за знак, каде 1002 00:44:16,950 --> 00:44:18,320 тие завршуваат во меморија? 1003 00:44:18,320 --> 00:44:20,650 И концептуално, тие само се заокружи на дното на оваа 1004 00:44:20,650 --> 00:44:21,780 нешто што се нарекува на магацинот. 1005 00:44:21,780 --> 00:44:25,670 Но, она што е интересно сега е кога главниот повикува функција. 1006 00:44:25,670 --> 00:44:28,830 Да претпоставиме функција наречена foo, само произволна име. 1007 00:44:28,830 --> 00:44:32,480 Што се случува е главниот е на дното на оваа магацинот на меморија. 1008 00:44:32,480 --> 00:44:35,630 Foo сега е ставен на врвот на главната меморија. 1009 00:44:35,630 --> 00:44:40,020 Значи сите локални променливи кои foo е заврши вид на концептуално над 1010 00:44:40,020 --> 00:44:40,770 оние во главниот. 1011 00:44:40,770 --> 00:44:46,920 Ако foo повици друга функција наречена бар, овие променливи завршуваат тука. 1012 00:44:46,920 --> 00:44:49,790 Ако бар повици нешто друго, тука, тука, тука. 1013 00:44:49,790 --> 00:44:53,900 Значи она што е интересно за водење на програмата е дека ќе се јавите функции, 1014 00:44:53,900 --> 00:44:57,720 и како тие функции повик функции, и како тие функции повик функции, 1015 00:44:57,720 --> 00:45:00,980 ќе се изгради до овој магацинот на функции во меморијата. 1016 00:45:00,980 --> 00:45:06,740 И само еднаш функција се враќа да започнете добивање дека меморијата назад. 1017 00:45:06,740 --> 00:45:11,190 Значи еден од најлесните начини да се кандидира на меморија во компјутерот програмата е да се 1018 00:45:11,190 --> 00:45:14,170 пишува функции кои никогаш не се врати. 1019 00:45:14,170 --> 00:45:16,650 >> Така на пример, да покажат колку со 1020 00:45:16,650 --> 00:45:18,460 намерно кабриолет програма. 1021 00:45:18,460 --> 00:45:24,690 Дозволете ми да оди напред и да # се , int главната (празно). 1022 00:45:24,690 --> 00:45:31,270 И јас ќе одам да направите додека (2> 1), која, најверојатно, нема да некогаш 1023 00:45:31,270 --> 00:45:33,370 промена на нас. 1024 00:45:33,370 --> 00:45:37,720 И дозволете ми да оди напред сега и не printf. 1025 00:45:37,720 --> 00:45:39,950 Всушност, тоа ќе биде помалку визуелно интересна. 1026 00:45:39,950 --> 00:45:40,460 Ајде да го направите тоа. 1027 00:45:40,460 --> 00:45:44,840 За int (i = 0; з> 0). 1028 00:45:44,840 --> 00:45:49,740 Да се ​​направи оваа грешка, i + +. 1029 00:45:49,740 --> 00:45:51,150 И нека не printf тука. 1030 00:45:51,150 --> 00:45:52,550 Да се ​​практикуваат она што го проповеда. 1031 00:45:52,550 --> 00:45:54,090 Ајде да се метода. 1032 00:45:54,090 --> 00:46:00,860 Празнина хор, и ние ќе каже int i. 1033 00:46:00,860 --> 00:46:02,295 И тогаш ќе одам да се каже, printf - 1034 00:46:04,871 --> 00:46:06,790 ох, да се направи овој поинтересна. 1035 00:46:06,790 --> 00:46:08,350 Да, всушност, не се печати ништо на сите. 1036 00:46:08,350 --> 00:46:10,530 Ајде само го направите тоа. 1037 00:46:10,530 --> 00:46:11,780 Рефрен (i). 1038 00:46:16,630 --> 00:46:17,000 >> Во ред. 1039 00:46:17,000 --> 00:46:20,040 Значи ова е грешка, бидејќи зошто? 1040 00:46:20,040 --> 00:46:22,850 Јас сум измислувам, како и да одам, бидејќи на програмата всушност не направи ништо 1041 00:46:22,850 --> 00:46:23,420 на интерес. 1042 00:46:23,420 --> 00:46:24,670 Но тоа не е целта. 1043 00:46:24,670 --> 00:46:30,440 Целта е да се напише програма чија главна функција го прави она што, очигледно? 1044 00:46:30,440 --> 00:46:31,370 Повик себе. 1045 00:46:31,370 --> 00:46:32,600 И всушност, ние не треба јамка. 1046 00:46:32,600 --> 00:46:36,070 Ајде дури поедностави оваа само за да не се губи пред очите на навистина 1047 00:46:36,070 --> 00:46:37,310 основните бубачка. 1048 00:46:37,310 --> 00:46:39,200 Главната повици хорот да пее некои хор. 1049 00:46:39,200 --> 00:46:41,760 Тогаш јас направив нешто глупаво, и морав хорот повик хор, затоа што претпоставува 1050 00:46:41,760 --> 00:46:43,550 некој друг ќе беше да се имплементира можеби. 1051 00:46:43,550 --> 00:46:45,960 И сега тоа не се случува да се собере уште. 1052 00:46:45,960 --> 00:46:48,340 Јас треба да се направи она што? 1053 00:46:48,340 --> 00:46:49,700 Ми треба прототип, се сеќавам. 1054 00:46:49,700 --> 00:46:55,520 Па јас треба да имаат до тука празнина хор (int i);. 1055 00:46:55,520 --> 00:46:57,470 >> Па сега, ако одам долу тука - 1056 00:46:57,470 --> 00:46:59,030 всушност, да го користат поголем прозорец. 1057 00:46:59,030 --> 00:47:01,670 Ајде да одиме напред и да направат хор. 1058 00:47:01,670 --> 00:47:06,000 Ајде да одиме напред и да направат хор. 1059 00:47:06,000 --> 00:47:08,302 Употреба на неидентификувани declarer i. 1060 00:47:08,302 --> 00:47:09,860 Ох, тоа е глупаво. 1061 00:47:09,860 --> 00:47:11,020 Ние не треба на аргумент. 1062 00:47:11,020 --> 00:47:13,680 Ајде само го направите тоа. 1063 00:47:13,680 --> 00:47:14,550 Сакал да имавме отворени на овој начин. 1064 00:47:14,550 --> 00:47:16,160 Тоа би било многу полесно програма за пишување. 1065 00:47:16,160 --> 00:47:20,100 Па таму. 1066 00:47:20,100 --> 00:47:23,870 Сега ајде да одиме во текот на мојот терминален прозорец, прегласување ѕвекот. 1067 00:47:23,870 --> 00:47:26,900 И тука ќе одиме. 1068 00:47:26,900 --> 00:47:28,020 Тоа беше навистина брзо. 1069 00:47:28,020 --> 00:47:30,690 Што, всушност, само се случи, иако? 1070 00:47:30,690 --> 00:47:33,430 Па, сега јас ќе додадете печати линија, така што може да се види. 1071 00:47:33,430 --> 00:47:41,330 Па дозволете ми да кажам printf, да речеме, јас сум тука. 1072 00:47:41,330 --> 00:47:43,470 Океј, не променливи, ние ќе го оставиме тоа на тој начин. 1073 00:47:43,470 --> 00:47:44,860 Дозволете ми повторно да се кандидира направи. 1074 00:47:44,860 --> 00:47:47,940 Дозволете ми да прегласување хор. 1075 00:47:47,940 --> 00:47:51,235 И ајде. 1076 00:47:53,880 --> 00:47:55,130 Продолжувам да одам. 1077 00:47:57,630 --> 00:47:59,750 Како настрана, зошто не го урна уште? 1078 00:47:59,750 --> 00:48:02,050 Сегментација грешка се случи супер брз порано. 1079 00:48:02,050 --> 00:48:04,250 [Беззвучен] 1080 00:48:04,250 --> 00:48:04,830 Дејвид Џ MALAN: Токму така. 1081 00:48:04,830 --> 00:48:06,350 Значи тоа е потребно време да се печати. 1082 00:48:06,350 --> 00:48:08,370 Тоа само ги зема повеќе работа на дел на компјутерот. 1083 00:48:08,370 --> 00:48:09,550 И таму е. 1084 00:48:09,550 --> 00:48:10,620 Сегментација на вина. 1085 00:48:10,620 --> 00:48:12,140 >> Значи забележите колку брзо програми работат. 1086 00:48:12,140 --> 00:48:14,110 Ако не сте печатење ништо, супер брз. 1087 00:48:14,110 --> 00:48:18,100 Но ние сепак добив оваа сегментација на вина, бидејќи она што се случува? 1088 00:48:18,100 --> 00:48:21,310 Па, ако мислите дека за тоа меморијата на вашиот компјутер е изнесена, ова 1089 00:48:21,310 --> 00:48:22,890 се случува да бидат главни. 1090 00:48:22,890 --> 00:48:23,800 Но тука - 1091 00:48:23,800 --> 00:48:28,670 ајде да се јавите овој хор, и ајде да ги наречеме овој хор. 1092 00:48:28,670 --> 00:48:33,420 И сега, ако го направам мојата естетика во право, ова е само случува да се каже хор, 1093 00:48:33,420 --> 00:48:38,060 хор, хор, хор, хор, хор, хор, реклама nauseum. 1094 00:48:38,060 --> 00:48:39,920 И на крајот, она што ќе се случи? 1095 00:48:39,920 --> 00:48:46,690 Ако големата слика буквално е тоа, што едноставно се случува концептуално? 1096 00:48:46,690 --> 00:48:48,320 Магацинот пречекорување на грамада. 1097 00:48:48,320 --> 00:48:52,400 Или уште полошо, ти само лизгањето сè, вклучувајќи го и текстот сегмент, што е 1098 00:48:52,400 --> 00:48:54,530 на нули и оние кои ги претставуваат вашата програма. 1099 00:48:54,530 --> 00:48:56,690 На кратко, ова е само супер, супер лошо. 1100 00:48:56,690 --> 00:48:56,860 Нели? 1101 00:48:56,860 --> 00:48:58,620 Вашата програма има излезе од контрола. 1102 00:48:58,620 --> 00:49:02,840 Го користите начин повеќе меморија отколку што се наменети сите поради глупава 1103 00:49:02,840 --> 00:49:03,920 грешка, во овој случај. 1104 00:49:03,920 --> 00:49:08,160 Или во овој случај, многу намерно направено функција која себеси се нарекува. 1105 00:49:08,160 --> 00:49:09,210 Сега тоа не е сите лоши. 1106 00:49:09,210 --> 00:49:12,540 Функции се нарекуваат всушност има голема моќ 1107 00:49:12,540 --> 00:49:13,700 кога ќе ја користите правилно. 1108 00:49:13,700 --> 00:49:15,650 Јас не го користи правилно тука. 1109 00:49:15,650 --> 00:49:16,940 >> Значи ова не е сите лоши. 1110 00:49:16,940 --> 00:49:20,620 Но, фактот дека никогаш не сум всушност престанат да повикуваат себеси е основен 1111 00:49:20,620 --> 00:49:23,050 слабост тука на оваа програма. 1112 00:49:23,050 --> 00:49:25,090 Значи каде одиме со сето ова? 1113 00:49:25,090 --> 00:49:26,230 Па, она што навистина се случува? 1114 00:49:26,230 --> 00:49:30,010 Кога ќе се јавите на прираст функција, како што се прави во овие примери, 1115 00:49:30,010 --> 00:49:33,290 Имам вредност како 1 што помине внатре 1116 00:49:33,290 --> 00:49:35,820 Јас помине во копија на број еден. 1117 00:49:35,820 --> 00:49:37,080 Така се случува следното. 1118 00:49:37,080 --> 00:49:40,390 Значи, да одат во пораст пример. 1119 00:49:40,390 --> 00:49:44,230 И овој човек право овде. 1120 00:49:44,230 --> 00:49:46,800 Значи тука е она што всушност се случува. 1121 00:49:46,800 --> 00:49:50,770 Кога се јавив прираст, и јас помине во х, сликовито што е 1122 00:49:50,770 --> 00:49:53,660 случува овде е ова - 1123 00:49:53,660 --> 00:50:00,240 ако има вредност од 1 чуваат тука, а јас всушност се јавите прираст, што 1124 00:50:00,240 --> 00:50:02,680 сега се нарекува хор - 1125 00:50:02,680 --> 00:50:04,010 Да, тоа е мене отфрлаат тука. 1126 00:50:04,010 --> 00:50:06,750 Па ајде да го наречеме овој прираст. 1127 00:50:06,750 --> 00:50:09,420 И ние не знаеме што следниот функција ќе биде. 1128 00:50:09,420 --> 00:50:14,270 Значи она што всушност се случува е тука некаде во главниот, имам дел од 1129 00:50:14,270 --> 00:50:16,670 меморија што е чување на број 1. 1130 00:50:16,670 --> 00:50:19,730 Кога ќе се јавам прираст, јас сум користење на друг дел од меморијата, но сега јас 1131 00:50:19,730 --> 00:50:20,840 имаат копија од 1. 1132 00:50:20,840 --> 00:50:25,480 Кога јас зголемување на таа вредност, тоа станува 2 - ужасно напишани на 1133 00:50:25,480 --> 00:50:26,420 екранот овде. 1134 00:50:26,420 --> 00:50:30,550 Но, тогаш, што ќе се случи веднаш штом зголемување се враќа? 1135 00:50:30,550 --> 00:50:34,610 Оваа меморија само добива предаден назад во оперативниот систем, што значи дека сите 1136 00:50:34,610 --> 00:50:37,470 сте го направиле ништо корисно. 1137 00:50:37,470 --> 00:50:43,460 Оној што беше првично содржани во главната е сеуште всушност таму. 1138 00:50:43,460 --> 00:50:44,650 >> Значи каде одиме со оваа? 1139 00:50:44,650 --> 00:50:49,400 Па, излегува дека во меморија имате ова да се врати назад секвенца на 1140 00:50:49,400 --> 00:50:50,940 бајти кои може да се стави нешто внатре 1141 00:50:50,940 --> 00:50:53,760 И излегува дека ние сме веќе видено нешто што вклучува поставување 1142 00:50:53,760 --> 00:50:55,100 работите да се врати назад да се врати да се врати. 1143 00:50:55,100 --> 00:51:00,170 Што е стринг, врз основа на една недела и сега недела две? 1144 00:51:00,170 --> 00:51:01,840 Така, тоа е само собирање на карактери. 1145 00:51:01,840 --> 00:51:05,290 Значи испаѓа, како што може да се стави броеви во меморијата, слично можете да 1146 00:51:05,290 --> 00:51:06,900 стави карактери во меморијата. 1147 00:51:06,900 --> 00:51:09,810 И штом ќе започне со ликовите во меморија да се врати назад да се врати на 1148 00:51:09,810 --> 00:51:12,800 назад, излегува дека со користење на наједноставните работи како за телефонска линија или 1149 00:51:12,800 --> 00:51:14,510 време јамка, можеме да iterate - 1150 00:51:14,510 --> 00:51:17,130 од лево кон десно во текот на карактери во стринг - 1151 00:51:17,130 --> 00:51:20,720 и почнете масажа нив во различни карактери заедно. 1152 00:51:20,720 --> 00:51:25,550 А би можела да стане Б Б може да стане C. Така што во крајна линија, ние може да се земе 1153 00:51:25,550 --> 00:51:28,830 Македонски реченица која всушност има смисла и да ги конвертирате секоја од овие 1154 00:51:28,830 --> 00:51:32,440 букви едно по едно време со одење преку мемориска нашиот компјутер оставени 1155 00:51:32,440 --> 00:51:34,300 право да всушност криптирате. 1156 00:51:34,300 --> 00:51:36,590 >> Па ајде да нашите пет минути пауза тука, и кога ќе се вратиме, ние ќе 1157 00:51:36,590 --> 00:51:39,060 започне овој процес на scrambling информации. 1158 00:51:41,640 --> 00:51:43,180 >> Во ред. 1159 00:51:43,180 --> 00:51:48,440 Па пред да нурне во некои крипто и овие работи вика низи, дозволете ми да 1160 00:51:48,440 --> 00:51:51,610 пауза за било какви прашања, бидејќи се чувствувам како да сум навистина вид на ѓаволски некои од 1161 00:51:51,610 --> 00:51:52,230 овие теми. 1162 00:51:52,230 --> 00:51:53,940 Значи, да го поправи сега ако можеме. 1163 00:51:53,940 --> 00:51:56,480 Па ние само зборуваше за враќање вредности. 1164 00:51:56,480 --> 00:51:58,630 Зборувавме за аргументи. 1165 00:51:58,630 --> 00:52:02,330 И ние разговаравме за овој поим, што ќе се врати во недели 1166 00:52:02,330 --> 00:52:07,140 дојде на гледање на меморија, како еден куп на овие рангирани 1167 00:52:07,140 --> 00:52:08,540 пепелниците, така да се каже. 1168 00:52:08,540 --> 00:52:13,460 Од дното на горе, така што секоја лента, која добива стави на магацинот претставува 1169 00:52:13,460 --> 00:52:15,160 функција која во моментов се нарекува. 1170 00:52:17,970 --> 00:52:20,300 Било какви прашања? 1171 00:52:20,300 --> 00:52:22,890 Па, како за тоа - дозволете ми да се обиде поставување на прашање. 1172 00:52:22,890 --> 00:52:25,520 Продолжувам да расипе тоа, но сега it's - you've виделе лицето на момчето. 1173 00:52:25,520 --> 00:52:27,020 Па ние ќе се вратам на тоа. 1174 00:52:27,020 --> 00:52:29,700 >> Па дозволете ми да поставам едно прашање тука. 1175 00:52:29,700 --> 00:52:34,810 Дозволете ми да се поедностави оваа вратам на она што беше пред некои од нашите порано П & А 1176 00:52:34,810 --> 00:52:41,730 И фактот дека прираст има отворени заграда, int број, затворена 1177 00:52:41,730 --> 00:52:42,260 заграда. 1178 00:52:42,260 --> 00:52:46,370 Што значи int број претставуваат? 1179 00:52:46,370 --> 00:52:47,250 [Беззвучен] 1180 00:52:47,250 --> 00:52:47,870 Дејвид Џ MALAN: Еден аргумент. 1181 00:52:47,870 --> 00:52:50,732 Во ред, но она што е аргумент? 1182 00:52:50,732 --> 00:52:51,620 [Беззвучен] 1183 00:52:51,620 --> 00:52:52,500 Дејвид Џ MALAN: Жалам, што е тоа? 1184 00:52:52,500 --> 00:52:53,150 ЗВУЧНИК 3: Нешто ќе помине внатре 1185 00:52:53,150 --> 00:52:53,570 Дејвид Џ MALAN: Океј. 1186 00:52:53,570 --> 00:52:54,780 Значи нешто што ќе помине внатре 1187 00:52:54,780 --> 00:52:56,560 И поопшто, тоа е само на влез. 1188 00:52:56,560 --> 00:52:59,860 Ако сте пишување функција и цел таа функција во животот е да се направи 1189 00:52:59,860 --> 00:53:03,290 нешто малку различни секој пат кога ќе го користите, тогаш единствен начин за 1190 00:53:03,290 --> 00:53:07,710 тоа да се случи навистина ќе изгледа да биде да се обезбеди со влезот, така што тоа 1191 00:53:07,710 --> 00:53:10,180 може да се направи нешто различно со тоа влез секој пат. 1192 00:53:10,180 --> 00:53:13,590 >> Значи ви треба да се одреди две работи кога функцијата се влезови. 1193 00:53:13,590 --> 00:53:17,240 Потребно е да наведете името што сакате да им даде на тоа влез, чисто за 1194 00:53:17,240 --> 00:53:20,790 свој погодност, така што ќе може да се однесува на тоа во функција што 1195 00:53:20,790 --> 00:53:23,610 себе се пишува, како што го направив тука во линија 32. 1196 00:53:23,610 --> 00:53:27,840 Но исто така ќе треба да се одреди нејзината тип, бидејќи C е програмски јазик 1197 00:53:27,840 --> 00:53:28,840 што само бара 1198 00:53:28,840 --> 00:53:31,810 дека ако сакате променлива, ќе мора да му кажете на компјутерот што 1199 00:53:31,810 --> 00:53:32,790 податочен тип е тоа, 1200 00:53:32,790 --> 00:53:35,540 во голем дел, така што тоа го знае колку битови 1201 00:53:35,540 --> 00:53:37,230 распредели за таа променлива. 1202 00:53:37,230 --> 00:53:38,600 Бидејќи тоа би можело да биде шест - 1203 00:53:38,600 --> 00:53:39,990 Жал ми е, тоа нема да биде шест. 1204 00:53:39,990 --> 00:53:41,050 Тоа може да биде 16. 1205 00:53:41,050 --> 00:53:41,630 Тоа може да биде 8. 1206 00:53:41,630 --> 00:53:44,410 Тоа може да биде 32, дури и 64. 1207 00:53:44,410 --> 00:53:45,820 Но на компјутерот треба да знаеш. 1208 00:53:45,820 --> 00:53:49,110 Сега int на левата страна претставува она што, од друга страна? 1209 00:53:52,825 --> 00:53:53,780 [Беззвучен] 1210 00:53:53,780 --> 00:53:54,570 Дејвид Џ MALAN: Што е тоа? 1211 00:53:54,570 --> 00:53:55,390 [Беззвучен] 1212 00:53:55,390 --> 00:53:57,920 Дејвид Џ MALAN: Тип на функција и, поконкретно, 1213 00:53:57,920 --> 00:53:59,755 тип на своето производство. 1214 00:53:59,755 --> 00:54:00,220 Право. 1215 00:54:00,220 --> 00:54:04,220 Па со оглед на тоа нешто во загради претставува нејзиниот влез, доколку ги има, 1216 00:54:04,220 --> 00:54:06,640 нешто на левата претставува своето производство. 1217 00:54:06,640 --> 00:54:10,560 И во овој случај, зголемување очигледно враќа int. 1218 00:54:10,560 --> 00:54:14,590 И така int е враќање тип на оваа функција. 1219 00:54:14,590 --> 00:54:16,090 >> Што значи да се вратат? 1220 00:54:16,090 --> 00:54:19,810 Буквално, можете да користите клучниот збор враќање. 1221 00:54:19,810 --> 00:54:24,640 А потоа ако она што се враќаат во правото на клучни зборови е 1222 00:54:24,640 --> 00:54:28,340 број, тогаш тоа е навистина во согласност со она што го вети. 1223 00:54:28,340 --> 00:54:31,110 Вие не може да направи вакво нешто - 1224 00:54:31,110 --> 00:54:32,280 Здраво, Светот - 1225 00:54:32,280 --> 00:54:33,500 затоа што тоа е стринг. 1226 00:54:33,500 --> 00:54:35,440 Очигледно, тоа не е цел број. 1227 00:54:35,440 --> 00:54:40,450 Значи во кратки, товарот е навистина на нас, програмер, да бидат специфични како 1228 00:54:40,450 --> 00:54:44,730 на она што ние сме се враќаат и да потоа всушност да се обратите за враќање неа. 1229 00:54:44,730 --> 00:54:49,030 А потоа да се направи малку повеќе јасно контекст - 1230 00:54:49,030 --> 00:54:50,080 ене го повторно. 1231 00:54:50,080 --> 00:54:51,060 Контекст - 1232 00:54:51,060 --> 00:54:52,830 големо изненадување доаѓаат во само еден миг. 1233 00:54:52,830 --> 00:54:57,720 Контекст тука сега е тоа што меморијата на вашиот компјутер е, повторно, 1234 00:54:57,720 --> 00:54:59,070 Gigabyte, два гигабајти, сеедно. 1235 00:54:59,070 --> 00:54:59,630 Можеби тоа е повеќе. 1236 00:54:59,630 --> 00:55:00,540 Можеби тоа е помалку. 1237 00:55:00,540 --> 00:55:03,750 Но компјутерот го гледа како што имаат различни секции. 1238 00:55:03,750 --> 00:55:04,860 Нешто тргне таму долу. 1239 00:55:04,860 --> 00:55:06,020 Нешто друго оди до таму. 1240 00:55:06,020 --> 00:55:07,540 Различни нешта оди во средината. 1241 00:55:07,540 --> 00:55:09,300 И денес, ние само почнат да кажувам оваа приказна. 1242 00:55:09,300 --> 00:55:11,130 >> Но, ние ќе се вратам на ова со текот на времето. 1243 00:55:11,130 --> 00:55:15,000 За сега, само дел од меморијата ние навистина се грижат за е текстот сегмент 1244 00:55:15,000 --> 00:55:17,160 бидејќи тоа само претставува нули и оние 1245 00:55:17,160 --> 00:55:18,460 дека ѕвекот ја outputted. 1246 00:55:18,460 --> 00:55:21,570 Значи, кога ќе извршите команда на тастатурата како a.out, или двојно 1247 00:55:21,570 --> 00:55:25,350 кликнете на иконата на Mac OS или Windows, вашата програма е вчитана од вашиот хард 1248 00:55:25,350 --> 00:55:26,930 вози во RAM меморија. 1249 00:55:26,930 --> 00:55:30,850 И тоа е plopped на врвот на RAM меморија на вашиот компјутер, така да се каже. 1250 00:55:30,850 --> 00:55:35,470 Сега пак, како вашата програма почнува да трча и главните добива повикан во 1251 00:55:35,470 --> 00:55:39,240 Програмата ви напишал или програмата Microsoft или Apple напиша, било од неговите 1252 00:55:39,240 --> 00:55:42,930 локални променливи завршуваат таму долу на дното на меморијата на вашиот компјутер. 1253 00:55:42,930 --> 00:55:46,490 Но, ако главната повици друга функција која самата има променливи или 1254 00:55:46,490 --> 00:55:48,340 аргументи, тие завршуваат над неа. 1255 00:55:48,340 --> 00:55:50,670 И ако тоа функциски повици нешто, тие завршуваат над неа, 1256 00:55:50,670 --> 00:55:51,840 над неа, над неа. 1257 00:55:51,840 --> 00:55:56,100 И само еднаш функција е направено извршување не магацинот на коцки, па 1258 00:55:56,100 --> 00:55:58,320 да зборува, да почне да се пониско и пониско. 1259 00:55:58,320 --> 00:56:03,370 И тоа е она што тогаш, во мало, објаснува зошто, кога ќе се јавите коцка - 1260 00:56:03,370 --> 00:56:04,660 или ти се јавам прираст - 1261 00:56:04,660 --> 00:56:06,490 ти си поминува во копија од вредност. 1262 00:56:06,490 --> 00:56:09,840 И што значи тоа сликовито е дека сте буквално пишување на 1263 00:56:09,840 --> 00:56:14,540 број 1 во друг дел на меморијата, се менува 1-2, во случај на 1264 00:56:14,540 --> 00:56:15,360 прираст - 1265 00:56:15,360 --> 00:56:17,450 или на 8, во случај на коцка - 1266 00:56:17,450 --> 00:56:21,450 а потоа фрлање дека меморијата далеку штом зголемување или коцка 1267 00:56:21,450 --> 00:56:23,410 функцијата се враќа. 1268 00:56:23,410 --> 00:56:24,267 >> Прашање. 1269 00:56:24,267 --> 00:56:25,517 [Беззвучен] 1270 00:56:28,090 --> 00:56:29,970 Дејвид Џ MALAN: Каде - глобални променливи се чуваат во она што е 1271 00:56:29,970 --> 00:56:32,960 во моментов се нарекува иницијализира на податоци или деиницијализира податоци. 1272 00:56:32,960 --> 00:56:35,900 Разликата е во тоа, ако имате глобалната променлива, и го додели 1273 00:56:35,900 --> 00:56:39,530 веднаш вредност со еднаквите знаци, тој завршува на врвот таму. 1274 00:56:39,530 --> 00:56:43,390 И ако речеме int x запирка без вредност, тој завршува малку 1275 00:56:43,390 --> 00:56:46,670 пониски во RAM меморија, едноставно со конвенцијата. 1276 00:56:46,670 --> 00:56:49,308 Други прашања. 1277 00:56:49,308 --> 00:56:49,750 Во ред. 1278 00:56:49,750 --> 00:56:53,040 >> Значи оваа слика ќе се врати како што ние се помоќни со она што можеме да направиме 1279 00:56:53,040 --> 00:56:53,830 со компјутер. 1280 00:56:53,830 --> 00:56:58,790 Но, за сега, да имаат кратко интро да криптографијата, посебен вид на 1281 00:56:58,790 --> 00:57:01,910 криптографијата дека не ги решава сите проблеми на светот, но не го реши 1282 00:57:01,910 --> 00:57:02,480 некои од нив. 1283 00:57:02,480 --> 00:57:06,090 Во овој случај тука, ние имаме нешто што се нарекува таен клуч криптографија. 1284 00:57:06,090 --> 00:57:10,430 И таен клуч криптографија, како што сугерира името, произлегува нејзината безбедност 1285 00:57:10,430 --> 00:57:11,330 од тајна. 1286 00:57:11,330 --> 00:57:14,720 Така на пример, ако сте уште во основно училиште и сте донесување на 1287 00:57:14,720 --> 00:57:18,040 мала тајна љубов писмо до момче или девојче сте дробење на - ако 1288 00:57:18,040 --> 00:57:20,820 сакаше да мине низ публиката, најверојатно не би пишуваат 1289 00:57:20,820 --> 00:57:24,120 како белешка во англиски или без разлика на вашиот мајчин јазик, туку дека 1290 00:57:24,120 --> 00:57:25,800 да ја криптирате. 1291 00:57:25,800 --> 00:57:27,820 Или вие само може да ги испратите текстуална порака овие денови. 1292 00:57:27,820 --> 00:57:30,310 Но, вие всушност може да ги помине белешка во текот на наставата. 1293 00:57:30,310 --> 00:57:33,820 И да го направите ова безбедно, во таков начин што вашите пријатели и наставникот 1294 00:57:33,820 --> 00:57:36,820 не знам што сте пишување, може да излезе со прилично едноставен 1295 00:57:36,820 --> 00:57:37,800 алгоритам - 1296 00:57:37,800 --> 00:57:39,290 млади иако може да биде - 1297 00:57:39,290 --> 00:57:40,780 само да се трка на зборови. 1298 00:57:40,780 --> 00:57:44,390 Така, наместо на пишување, може да пишувам Б Наместо Б, може да напише 1299 00:57:44,390 --> 00:57:46,670 В Наместо C, можете да напишете D, и така натаму. 1300 00:57:46,670 --> 00:57:50,020 Или можете да излезе со повеќе софистицирани превод на букви 1301 00:57:50,020 --> 00:57:51,300 на различни писма. 1302 00:57:51,300 --> 00:57:55,440 Но, за улов е момче или девојче на кое сте испраќање на оваа забелешка треба да 1303 00:57:55,440 --> 00:57:56,850 знаат нешто. 1304 00:57:56,850 --> 00:57:59,620 Што е она што, очигледно? 1305 00:57:59,620 --> 00:58:01,400 Како, што твојата тајна е. 1306 00:58:01,400 --> 00:58:04,620 Како што е тоа мапирање помеѓу Како и Bs и акредитиви и DS? 1307 00:58:04,620 --> 00:58:08,780 Тоа е само додавање на еден, така да се каже, на секоја од буквите да одат од 1308 00:58:08,780 --> 00:58:09,730 А до Б, Б кон Ц? 1309 00:58:09,730 --> 00:58:11,350 Е посложена од тоа? 1310 00:58:11,350 --> 00:58:16,450 Па вие и вашиот здроби ќе треба да ја имаат оваа тајна информации. 1311 00:58:16,450 --> 00:58:18,170 Но, има еден вид на фати-22 тука. 1312 00:58:18,170 --> 00:58:20,760 Ако ова е прв пат праќаш ова љубовно писмо преку 1313 00:58:20,760 --> 00:58:25,590 класа, како е тоа момче или девојка ќе знаете што тајната дури е? 1314 00:58:25,590 --> 00:58:28,450 Значи таен клуч за криптирање не ги решава сите светски проблеми. 1315 00:58:28,450 --> 00:58:30,490 И таму е всушност врската која ние ќе се врати на кон 1316 00:58:30,490 --> 00:58:31,370 семестар крај. 1317 00:58:31,370 --> 00:58:35,970 >> Слично на тоа, треба никој од нас веројатно некогаш испратил - 1318 00:58:35,970 --> 00:58:39,453 Слично на тоа, не повеќето од нас знаат некој што работи, на пример, во 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 А сепак, многу од нас имаат веројатно купил работи на Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 И ние сме научени да се претпостави дека овие е-трговија 1322 00:58:45,670 --> 00:58:47,060 трансакции се безбедни. 1323 00:58:47,060 --> 00:58:47,210 Нели? 1324 00:58:47,210 --> 00:58:49,310 URL-то веројатно вели https. 1325 00:58:49,310 --> 00:58:51,590 Има можеби глупо малку катанец икона некаде. 1326 00:58:51,590 --> 00:58:54,680 Има некој вид на криптографијата обезбедување на вашата кредитна картичка информации 1327 00:58:54,680 --> 00:58:56,980 помеѓу вас и Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 А сепак, ако криптографијата вклучува знаејќи некои тајни, а сепак јас не 1329 00:59:00,410 --> 00:59:03,330 познавам никого во Амазон, а јас сум сигурно не е договорено било каков вид на 1330 00:59:03,330 --> 00:59:07,350 тајна со некого во Амазон, како е мојот компјутер или мојот прелистувач го прави ова? 1331 00:59:07,350 --> 00:59:10,100 Па, излегува има други видови на криптографијата целосно го реши 1332 00:59:10,100 --> 00:59:10,740 тој проблем. 1333 00:59:10,740 --> 00:59:13,610 Но, за денес, ние ќе се фокусираат на едноставен, каде што може да се организира во 1334 00:59:13,610 --> 00:59:18,480 однапред да знае некои тајни, како плус 1 или некои мапирање помеѓу Како и Bs. 1335 00:59:18,480 --> 00:59:20,710 >> И процесот на криптографијата обично вклучува ова. 1336 00:59:20,710 --> 00:59:23,550 Имате некои обичен текст, прикажана овде на лево. 1337 00:59:23,550 --> 00:59:26,260 Можете да го извршите преку некој вид на алгоритам или постапка 1338 00:59:26,260 --> 00:59:27,670 за енкрипција на неа. 1339 00:59:27,670 --> 00:59:31,390 Можеби тоа е само станува Б, Б станува В И тогаш ќе се заокружи со 1340 00:59:31,390 --> 00:59:32,260 шифра текст. 1341 00:59:32,260 --> 00:59:36,450 Во меѓувреме, еднаш вашиот здроби добива тајна белешка, тој или таа има да потоа 1342 00:59:36,450 --> 00:59:39,950 дешифрирате со генерално обратен дека алгоритам за да се добие 1343 00:59:39,950 --> 00:59:41,640 се врати на обичен текст. 1344 00:59:41,640 --> 00:59:43,860 Сега постојат физички инкарнации на ова. 1345 00:59:43,860 --> 00:59:46,720 На пример, ова е малку тајна декодер прстен. 1346 00:59:46,720 --> 00:59:50,060 И ова е еден прстен во смисла дека има два бирање тука. 1347 00:59:50,060 --> 00:59:53,630 На надворешната периферија на оваа работа, има писма A до Z, 1348 00:59:53,630 --> 00:59:55,110 иако тие се во случаен редослед. 1349 00:59:55,110 --> 00:59:58,410 И во внатрешноста, има всушност некои бројки, кои како со овој 1350 00:59:58,410 --> 01:00:02,940 прстен, можете вид на може да се претвори од надвор но не и во внатрешноста, со цел да се редат 1351 01:00:02,940 --> 01:00:04,110 броеви со букви. 1352 01:00:04,110 --> 01:00:08,290 И во спотот сте за да се види - од кои некои може да се види 24/7 1353 01:00:08,290 --> 01:00:11,120 околу сезоната Божиќ од филм наречен Приказна Божиќ. 1354 01:00:11,120 --> 01:00:16,050 Ќе видите дека малку Ralphie беше толку желни да дознаам што малку сираче 1355 01:00:16,050 --> 01:00:19,810 Тајна порака на Annie беше за него дека бил доставен, мислам, во 1356 01:00:19,810 --> 01:00:22,810 форма на нумерички пораки на сериски кутија. 1357 01:00:22,810 --> 01:00:26,760 И ти мораше да се акумулираат сите мали картички кои дојдоа 1358 01:00:26,760 --> 01:00:27,480 во житни кутија. 1359 01:00:27,480 --> 01:00:28,320 Ти мораше да ги пошта внатре 1360 01:00:28,320 --> 01:00:31,060 Ти мораше да се врати на тајната декодер прстен, така што конечно може да дознаам 1361 01:00:31,060 --> 01:00:34,190 од она што мапирањето е меѓу букви и броеви, 1362 01:00:34,190 --> 01:00:35,420 или писма и писма. 1363 01:00:35,420 --> 01:00:39,790 Па јас ви даде овој краток клип од една приказна Божиќ да ги мотивира pset 2 и 1364 01:00:39,790 --> 01:00:42,340 нашата дискусија, во еден момент, на низи. 1365 01:00:42,340 --> 01:00:43,773 Значи тука имаме Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [Видео репродукција] 1367 01:00:44,126 --> 01:00:47,470 -Било да е тоа позната на сите и Преземање дека Ралф Паркер е предмет назначен 1368 01:00:47,470 --> 01:00:50,690 член на малата сирачиња Ени Тајната круг и има право на сите 1369 01:00:50,690 --> 01:00:53,500 на почести и бенефиции случуваат истите. 1370 01:00:53,500 --> 01:00:56,040 Потпишан, Литл сирачиња Ени. 1371 01:00:56,040 --> 01:00:58,730 Потпишана, Пјер Андре! 1372 01:00:58,730 --> 01:01:00,150 Во мастило! 1373 01:01:00,150 --> 01:01:02,910 Почести и бенефиции, веќе на возраст од девет години. 1374 01:01:09,970 --> 01:01:10,730 Ајде, ајде да се е со неа. 1375 01:01:10,730 --> 01:01:15,000 Јас не треба сиот тој џез за шверцери и пирати. 1376 01:01:15,000 --> 01:01:17,624 -Слушај утре вечер за склучување авантура на црната 1377 01:01:17,624 --> 01:01:19,710 Пиратски брод. 1378 01:01:19,710 --> 01:01:23,380 Сега е време за тајната порака на Annie за вас членови 1379 01:01:23,380 --> 01:01:25,670 на Тајната круг. 1380 01:01:25,670 --> 01:01:30,260 Запомни, деца, само членови на Тајната круг на Annie може да декодира 1381 01:01:30,260 --> 01:01:31,660 Тајната на Annie порака. 1382 01:01:31,660 --> 01:01:36,230 Запомнете, Ени е во зависност од вас. 1383 01:01:36,230 --> 01:01:38,720 Поставете ги вашите иглички да Б2. 1384 01:01:38,720 --> 01:01:41,040 Еве ја пораката. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Јас сум во мојот прв таен состанок. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 Пјер беше во голема глас вечерва. 1389 01:01:51,700 --> 01:01:54,890 Можам да кажам дека пораката вечерва беше навистина важно. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 Тоа е порака од Ени себе. 1392 01:01:58,590 --> 01:01:59,840 Запомнете, не кажуваат никому. 1393 01:02:04,570 --> 01:02:08,750 -90 Секунди подоцна, јас сум во само соба во куќата каде што едно момче од девет 1394 01:02:08,750 --> 01:02:12,980 може да седат во приватноста и декодирање. 1395 01:02:12,980 --> 01:02:17,130 Аха, Б отидов до следната. 1396 01:02:17,130 --> 01:02:20,330 Е Првиот збор е да биде. 1397 01:02:20,330 --> 01:02:22,670 С Тоа доаѓа полесно сега. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Ох, ајде, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Морам да одам. 1401 01:02:28,430 --> 01:02:30,350 -I'll биде во право надолу, ма. 1402 01:02:30,350 --> 01:02:33,720 -Навистина зделка. 1403 01:02:33,720 --> 01:02:38,270 -Т, О Бидете сигурни да. 1404 01:02:38,270 --> 01:02:40,000 Бидете сигурни на што? 1405 01:02:40,000 --> 01:02:42,105 Што беше малку сирачиња Ени се обидувам да кажам? 1406 01:02:42,105 --> 01:02:43,095 Бидете сигурни на што? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Ренди мора да се оди. 1409 01:02:44,580 --> 01:02:45,570 Ќе ве молиме да излезе? 1410 01:02:45,570 --> 01:02:46,560 -Во ред, MA. 1411 01:02:46,560 --> 01:02:48,540 Ќе биде право надвор. 1412 01:02:48,540 --> 01:02:50,580 -Јас бев доближување сега. 1413 01:02:50,580 --> 01:02:52,550 Тензијата беше страшно. 1414 01:02:52,550 --> 01:02:53,355 Што беше тоа? 1415 01:02:53,355 --> 01:02:56,315 Судбината на планетата може да висат во воздух. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Ренди е мора да си замине. 1418 01:02:59,165 --> 01:03:02,310 -I'll биде во право надвор, за плачење гласно. 1419 01:03:02,310 --> 01:03:04,000 -Навистина, речиси таму. 1420 01:03:04,000 --> 01:03:05,180 Моите прсти полета. 1421 01:03:05,180 --> 01:03:07,150 Мојот ум беше челик стапица. 1422 01:03:07,150 --> 01:03:08,790 Секоја пора затреперија. 1423 01:03:08,790 --> 01:03:10,040 Тоа беше скоро јасна. 1424 01:03:10,040 --> 01:03:13,400 Да, да, да, да. 1425 01:03:13,400 --> 01:03:18,960 -Бидете сигурни да пијат вашата Ovaltine. 1426 01:03:18,960 --> 01:03:20,210 Ovaltine? 1427 01:03:24,010 --> 01:03:25,260 А кофти комерцијални? 1428 01:03:28,200 --> 01:03:29,640 Син на кучка. 1429 01:03:29,640 --> 01:03:33,340 [END видео репродукција] 1430 01:03:33,340 --> 01:03:36,040 >> Дејвид Џ MALAN: Па ние имаме криптографија. 1431 01:03:36,040 --> 01:03:39,670 Па, како во компјутер можеме да одиме за спроведување или 1432 01:03:39,670 --> 01:03:40,950 претставуваат вакви работи? 1433 01:03:40,950 --> 01:03:44,430 Па, ние треба начин на изразување на себеси малку повеќе флексибилно од 1434 01:03:44,430 --> 01:03:46,420 нашите променливи досега се дозволени. 1435 01:03:46,420 --> 01:03:47,370 Имавме ints. 1436 01:03:47,370 --> 01:03:48,380 Имавме карактери. 1437 01:03:48,380 --> 01:03:50,790 Имавме плови и двојки и уште неколку други. 1438 01:03:50,790 --> 01:03:55,050 Но тие се поединечни парчиња меморија која навистина не ни дозволуваат да 1439 01:03:55,050 --> 01:03:58,010 изразат нешта како зборови и реченици и фрази. 1440 01:03:58,010 --> 01:04:00,200 Всушност, ние го нарече такви нешта жици. 1441 01:04:00,200 --> 01:04:03,650 Но, ние вети дека ова е навистина само поедноставување во CS50 1442 01:04:03,650 --> 01:04:07,020 библиотека, дека ние сме со намера да лупам назад. 1443 01:04:07,020 --> 01:04:08,970 >> И така да почнеме да го стори тоа овде. 1444 01:04:08,970 --> 01:04:11,130 Дозволете ми да оди напред и да се отвори датотеката - 1445 01:04:11,130 --> 01:04:13,770 сите овие датотеки се достапни, како и обично онлајн - 1446 01:04:13,770 --> 01:04:19,120 наречен array.c да реши еден проблем поврзан со жици, но дека стравува 1447 01:04:19,120 --> 01:04:23,040 слика тука за тоа како ние може да се користи нешто што се нарекува низа. 1448 01:04:23,040 --> 01:04:25,530 Низа е податочен тип. 1449 01:04:25,530 --> 01:04:31,320 Тоа е тип на променлива, на сорти, кој има повеќе помали типови на податоци 1450 01:04:31,320 --> 01:04:34,150 во него да се врати назад да се врати да се врати. 1451 01:04:34,150 --> 01:04:37,700 Така на пример, ако сакаме да пишувам малку програма која ви дава вашиот 1452 01:04:37,700 --> 01:04:42,110 квиз просек за курсот како 50 која има две квизови, можете да многу лесно 1453 01:04:42,110 --> 01:04:45,170 ја напишам оваа програма - врз основа дури и на некои од материјал минатата недела - 1454 01:04:45,170 --> 01:04:47,770 со користење GetInt и неколку променливи. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, а тоа е прилично јасна. 1456 01:04:51,920 --> 01:04:55,930 Тоа е можеби 10, 20 линии на код, Макс, да спроведе програма што прашува 1457 01:04:55,930 --> 01:05:01,170 корисникот за две квиз резултати и потоа пресметува нивната просечна со додавање на нив 1458 01:05:01,170 --> 01:05:03,850 заедно, што ги дели со два, а потоа печатење на резултатите. 1459 01:05:03,850 --> 01:05:06,380 Ние веројатно може да го направи тоа прилично лесно сега по 1460 01:05:06,380 --> 01:05:07,510 одреден број на минути. 1461 01:05:07,510 --> 01:05:11,005 >> Но, проблемот е во тоа што претпоставувам дека 50 имаше три квизови или четири. 1462 01:05:11,005 --> 01:05:13,510 Да претпоставиме дека си сакал да ги користат истите програма за класа која имаше 1463 01:05:13,510 --> 01:05:14,850 неделни тестови. 1464 01:05:14,850 --> 01:05:16,610 Размислете за класа која има неделна квизови. 1465 01:05:16,610 --> 01:05:20,610 Ако има како 16 или така недели во еден семестар, сега имате 16 варијабли - 1466 01:05:20,610 --> 01:05:24,270 int quiz1, int quiz2, int quiz3, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 Веднаш штом ќе започнете да гледате оваа вишок, овој копирање и вметнување 1468 01:05:27,560 --> 01:05:31,390 на кодот, тоа треба да почне да ве натера да сакаат имаше подобар начин. 1469 01:05:31,390 --> 01:05:33,930 И за среќа, бидејќи на низи, не постои. 1470 01:05:33,930 --> 01:05:34,980 Значи, да го направите тоа. 1471 01:05:34,980 --> 01:05:38,430 Прво, дозволете ми да се воведе еден многу едноставен нешто што ние не сум користел досега, 1472 01:05:38,430 --> 01:05:40,140 но ќе се види повремено во кодот. 1473 01:05:40,140 --> 01:05:42,360 Ова е она што обично се нарекува постојан. 1474 01:05:42,360 --> 01:05:45,790 Па тоа е постојана во смисла дека никогаш оваа вредност се менува. 1475 01:05:45,790 --> 01:05:49,210 Човековите конвенцијата кога создавање на постојана е да се користи сите капитални 1476 01:05:49,210 --> 01:05:51,940 букви, само така што навистина се издвојува во вашиот код. 1477 01:05:51,940 --> 01:05:55,960 И специјални клучни зборови кои ги користите во Ц # define. 1478 01:05:55,960 --> 01:06:00,250 Значи, ако ви кажам # define, тогаш простор, тогаш зборот кој сакате да го користите за 1479 01:06:00,250 --> 01:06:03,260 постојана името, а потоа вредноста на константата. 1480 01:06:03,260 --> 01:06:06,180 Па информации, ова е различно од давање нешто на променлива. 1481 01:06:06,180 --> 01:06:07,020 Нема еднаквите знаци. 1482 01:06:07,020 --> 01:06:08,240 Нема запирка. 1483 01:06:08,240 --> 01:06:11,410 Тоа е она што е општо познато како препроцесори директива, но повеќе на 1484 01:06:11,410 --> 01:06:12,210 што друго време. 1485 01:06:12,210 --> 01:06:18,540 >> За сега, ова создава непроменлива вредност наречена квизови чии вистински 1486 01:06:18,540 --> 01:06:19,940 нумеричка вредност е 2. 1487 01:06:19,940 --> 01:06:24,020 Па насекаде гледате квизови, тестови, квизови во текот на оваа датотека, тоа е 1488 01:06:24,020 --> 01:06:25,410 само бројот 2. 1489 01:06:25,410 --> 01:06:28,100 Сега, ако јас гледам на главната сега, ајде да видиме како тоа функционира. 1490 01:06:28,100 --> 01:06:29,500 На прв, тоа изгледа малку криптичната. 1491 01:06:29,500 --> 01:06:31,340 Но, тоа е сите работи од една недела. 1492 01:06:31,340 --> 01:06:32,710 Прашај на корисникот за оценки. 1493 01:06:32,710 --> 01:06:33,630 Како го правиме тоа? 1494 01:06:33,630 --> 01:06:35,470 Па, во линија 22 - 1495 01:06:35,470 --> 01:06:37,210 ова е навистина сочно дел - 1496 01:06:37,210 --> 01:06:40,960 Изјавувам плови, но не само еден плови. 1497 01:06:40,960 --> 01:06:44,620 Јас сум прогласување, туку низа на подвижна запирка вредности. 1498 01:06:44,620 --> 01:06:49,100 Тоа променлива ќе бидат повикани оценки, како подразбира тука. 1499 01:06:49,100 --> 01:06:53,080 Но само парче од нова синтакса, тогаш се овие загради, фактот 1500 01:06:53,080 --> 01:06:59,350 што сум рече плови оценки и потоа отворете заградата и тогаш голем број. 1501 01:06:59,350 --> 01:07:02,460 Известување, ако тоа е константа, тоа е исто како ние го сторивме тоа. 1502 01:07:02,460 --> 01:07:06,890 Ова значи еј компјутер, дај ми две пловки, и ајде заедно повик 1503 01:07:06,890 --> 01:07:08,220 нив оценки. 1504 01:07:08,220 --> 01:07:11,920 Ова е во контраст со многу повеќе мачна процес се допаѓа ова. 1505 01:07:11,920 --> 01:07:15,850 Плови grade1, плови grade2, и така натаму. 1506 01:07:15,850 --> 01:07:20,010 Значи низа ни овозможува да се спроведе оваа идеја, но многу помалку messily, во 1507 01:07:20,010 --> 01:07:24,630 таков начин што ние може да напише една линија код наместо, да речеме, 16 за 16 1508 01:07:24,630 --> 01:07:25,740 недела семестар. 1509 01:07:25,740 --> 01:07:29,950 Па јас не сакате да хард-код 2, бидејќи ако мислите дека за тоа сега 1510 01:07:29,950 --> 01:07:34,160 логично - да претпоставиме следната година CS50 промени до 3 квизови, наместо. 1511 01:07:34,160 --> 01:07:35,510 И имав број 2 тука. 1512 01:07:35,510 --> 01:07:36,600 Имав број 2 тука. 1513 01:07:36,600 --> 01:07:37,580 Имав број 2 тука. 1514 01:07:37,580 --> 01:07:38,560 Имав број 2 тука. 1515 01:07:38,560 --> 01:07:43,180 Станува многу досадни и многу лесно да ја зафркнам и да случајно промена 1516 01:07:43,180 --> 01:07:47,690 една вредност до 3 и фали некоја друга вредност од 2. 1517 01:07:47,690 --> 01:07:52,460 Па ќе одам да наместо апстрактни овој далеку и да го користите овој константа која, како нејзин 1518 01:07:52,460 --> 01:07:54,120 што сугерира името, никогаш не се менува. 1519 01:07:54,120 --> 01:07:57,710 И сега, без разлика дали имаме различни квизови оваа или следната година, јас 1520 01:07:57,710 --> 01:08:01,210 едноставно мора да го измените во едно место, до тука во врвот. 1521 01:08:01,210 --> 01:08:02,720 >> Значи тоа е постојана. 1522 01:08:02,720 --> 01:08:08,680 Во меѓувреме, новиот концептуални карактеристика е тоа што на низа. 1523 01:08:08,680 --> 01:08:14,660 Значи квадратни загради ми даде оваа многу плови и ми овозможува колективно 1524 01:08:14,660 --> 01:08:16,630 ги нарекуваат оценки тука. 1525 01:08:16,630 --> 01:08:17,990 Па сега ајде да видиме што ќе одам да се направи. 1526 01:08:17,990 --> 01:08:20,359 Тука во линија 24 е почеток на една за телефонска линија. 1527 01:08:20,359 --> 01:08:22,260 Ова е навистина ништо фенси. 1528 01:08:22,260 --> 01:08:25,060 Тоа е само со користење квизови, наместо на хард-кодирани број. 1529 01:08:25,060 --> 01:08:27,790 Но нема ништо интелектуално различни таму од минатата недела. 1530 01:08:27,790 --> 01:08:29,040 Ова е само printf. 1531 01:08:29,040 --> 01:08:35,490 Значи printf ("квиз број% d од% d"), бидејќи јас само сакам да се печати ми даде квиз 1532 01:08:35,490 --> 01:08:38,050 број еден на два, а потоа две од двете. 1533 01:08:38,050 --> 01:08:39,850 Значи ова е чисто естетска работа. 1534 01:08:39,850 --> 01:08:42,500 Но, интересен дел сега е во линија 27. 1535 01:08:42,500 --> 01:08:48,310 Со цел да се пополни во една од двете променливи со лебдечки-точка 1536 01:08:48,310 --> 01:08:51,029 вредност, можете повторно користење квадратни загради. 1537 01:08:51,029 --> 01:08:55,620 Во овој случај, јас сум јас користење, бидејќи тоа за телефонска линија започна со i изедначување 1538 01:08:55,620 --> 01:08:57,560 што вредност, очигледно? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Така, на првата итерација на овој циклус, тоа е како да сум 1541 01:09:01,350 --> 01:09:02,689 напиша ова во кодот. 1542 01:09:02,689 --> 01:09:05,580 Но на втората итерација на овој циклус, тоа е како да сум 1543 01:09:05,580 --> 01:09:07,750 напиша ова во мојот код. 1544 01:09:07,750 --> 01:09:10,750 Но, фактот дека јас сум со користење на променлива е совршен, бидејќи, како што името 1545 01:09:10,750 --> 01:09:14,300 сугерира, тоа е различна неговата вредност на секоја итерација. 1546 01:09:14,300 --> 01:09:17,370 Па јас сум пополнување на оваа низа едно место во исто време. 1547 01:09:17,370 --> 01:09:18,910 Што значи оваа низа изгледа? 1548 01:09:18,910 --> 01:09:21,430 Добро, причината јас привлече ова супер едноставен правоаголник на екранот тука 1549 01:09:21,430 --> 01:09:23,350 пред се поради оваа причина. 1550 01:09:23,350 --> 01:09:27,279 Низа е само дел од меморијата по друг дел на меморијата, 1551 01:09:27,279 --> 01:09:30,109 проследено со уште еден дел од меморијата, и така натаму. 1552 01:09:30,109 --> 01:09:35,260 Значи, ако мојата низа е со големина од 2, во овој случај тука, сите ќе се прави со 1553 01:09:35,260 --> 01:09:37,590 пишување во мојот квиз резултати, како тука. 1554 01:09:37,590 --> 01:09:39,430 Добив 100 на оваа. 1555 01:09:39,430 --> 01:09:42,020 И тогаш добив 99 на оваа. 1556 01:09:42,020 --> 01:09:46,040 Тогаш оваа меморија дури и не може да се користи, бидејќи јас сум само побара од 1557 01:09:46,040 --> 01:09:48,689 компјутер за низа на големина 2. 1558 01:09:48,689 --> 01:09:50,180 Оние квадрати се уште се таму. 1559 01:09:50,180 --> 01:09:50,340 Нели? 1560 01:09:50,340 --> 01:09:52,500 Сеуште имате два гигабајти RAM меморија, дури и ако сте само 1561 01:09:52,500 --> 01:09:53,979 прашува за две пловки. 1562 01:09:53,979 --> 01:09:58,710 Значи, идејата зад низи е дека компјутерот само зема парче меморија 1563 01:09:58,710 --> 01:10:03,230 а потоа apportions помали парчиња да се врати назад да се врати да се врати. 1564 01:10:03,230 --> 01:10:04,740 И така тоа е низа е. 1565 01:10:04,740 --> 01:10:09,080 Тоа е соседни парче на меморијата, во внатрешноста на која може да се стави работите. 1566 01:10:09,080 --> 01:10:12,400 >> Сега тоа се случи за да потоа направи само некои здодевни аритметика. 1567 01:10:12,400 --> 01:10:16,170 Ако јас дојдете тука, ова е местото каде што јас тогаш iterate во текот на низата. 1568 01:10:16,170 --> 01:10:19,410 Јас излезе со збирот на сите вредности во низата. 1569 01:10:19,410 --> 01:10:22,390 И тогаш јас го користам круг функција тука за да всушност направиме 1570 01:10:22,390 --> 01:10:23,940 сумира поделено со квизови. 1571 01:10:23,940 --> 01:10:27,450 Но, дозволете ми бран мојата рака во тоа што вид на доволно аритметички за сега. 1572 01:10:27,450 --> 01:10:30,010 Но, сето тоа го прави за мене конечно се компјутери просек. 1573 01:10:30,010 --> 01:10:33,640 Значи прво квиз плус вториот квиз, поделено со 2, а потоа печатење 1574 01:10:33,640 --> 01:10:34,700 тоа надвор како int. 1575 01:10:34,700 --> 01:10:39,030 >> Но, ајде сега транзиција кон различни пример наречен string1, 1576 01:10:39,030 --> 01:10:42,370 која стравува слична слика но со користење на жици. 1577 01:10:42,370 --> 01:10:45,550 Дозволете ми да оди напред и да се поедностави тоа за само еден миг. 1578 01:10:45,550 --> 01:10:48,340 И прости вовлекување за сега. 1579 01:10:48,340 --> 01:10:52,280 Известување во линија 19 на овој пример, јас се добие стринг од корисникот. 1580 01:10:52,280 --> 01:10:55,780 Но, забележи она што јас сум следниот прави во линии 22 наваму. 1581 01:10:55,780 --> 01:11:00,260 Јас сум, всушност процесирањето од I до - и ова е нов трик - 1582 01:11:00,260 --> 01:11:02,730 strlen, стринг должина. 1583 01:11:02,730 --> 01:11:07,010 Ова е функција која доаѓа со C дека ако го помине низа, тоа кажува 1584 01:11:07,010 --> 01:11:08,950 Ви колку карактери се во таа низа. 1585 01:11:08,950 --> 01:11:09,440 Тоа е сè. 1586 01:11:09,440 --> 01:11:12,520 Фактот дека тоа е strlen наместо стринг должина е само затоа што е 1587 01:11:12,520 --> 01:11:13,040 повеќе содржаен. 1588 01:11:13,040 --> 01:11:17,100 30 години, луѓето се допаѓаше да пишувам нешта како посочно, како е можно. 1589 01:11:17,100 --> 01:11:19,080 Значи ние се чуваат таа конвенција тука. 1590 01:11:19,080 --> 01:11:21,730 i + + само значи зголемување јас во секоја итерација. 1591 01:11:21,730 --> 01:11:24,310 И сега забележите ова, што е навистина интересно. 1592 01:11:24,310 --> 01:11:28,730 Значи во линија 24, велам компјутер, ми даде знак, осум 1593 01:11:28,730 --> 01:11:30,770 битови, и го нарекуваат в. 1594 01:11:30,770 --> 01:11:35,370 Но, она што е оваа на десната страна зборуваш? 1595 01:11:35,370 --> 01:11:38,150 На англиски јазик, што значи дека претставуваат? 1596 01:11:38,150 --> 01:11:40,070 [Беззвучен] 1597 01:11:40,070 --> 01:11:40,490 Дејвид Џ MALAN: Токму така. 1598 01:11:40,490 --> 01:11:42,390 Дај ми го првиот карактер во низата. 1599 01:11:42,390 --> 01:11:45,400 Или поопшто, дај ми на i-тиот карактер во низа. 1600 01:11:45,400 --> 01:11:48,230 И ќе сфати дека е важно сега тоа што се компјутерски научници, ние сме всушност 1601 01:11:48,230 --> 01:11:49,330 сметано од 0. 1602 01:11:49,330 --> 01:11:51,290 Вие не имаат дискреционо право сега да почнете да го правите ова. 1603 01:11:51,290 --> 01:11:54,580 Сега треба да се однесуваат во согласност со очекувањата на компјутерот и 1604 01:11:54,580 --> 01:11:58,010 смета од нула, бидејќи [0] ќе биде првата 1605 01:11:58,010 --> 01:11:59,670 карактер во стрингот. 1606 01:11:59,670 --> 01:12:01,320 [1] ќе биде вториот. 1607 01:12:01,320 --> 01:12:03,610 [2] ќе биде третиот, и така натаму. 1608 01:12:03,610 --> 01:12:08,840 Значи оваа програма, ако јас го компајлирате - ова е, пак, string1. 1609 01:12:08,840 --> 01:12:11,040 >> Така осигурајте се string1. 1610 01:12:11,040 --> 01:12:16,730 И сега јас се кандидира string1 во мојот терминален прозорец. 1611 01:12:16,730 --> 01:12:19,180 Тоа е на чекање за влез, па ќе одам да напишеш во, да речеме, Дејвид. 1612 01:12:19,180 --> 01:12:20,080 Enter. 1613 01:12:20,080 --> 01:12:23,350 И сега тоа отпечатоци Дејвид сите на различни линии, бидејќи 1614 01:12:23,350 --> 01:12:24,430 забележи она што јас го правам. 1615 01:12:24,430 --> 01:12:27,510 Јас сум печатење еден карактер во исто време. 1616 01:12:27,510 --> 01:12:29,100 Сега ние не би навлегувал во детали денес на ова. 1617 01:12:29,100 --> 01:12:31,610 Но, јас избришани момент пред оваа проверка тука. 1618 01:12:31,610 --> 01:12:36,310 Излегува дека ако корисникот се немирни, контрадикторна, или само 1619 01:12:36,310 --> 01:12:41,780 збунет, вие всушност може да успее да даде низа на некои должина. 1620 01:12:41,780 --> 01:12:43,640 Ако притиснете на погрешно копче на тастатурата, може да даде 1621 01:12:43,640 --> 01:12:44,390 Нема низа на сите. 1622 01:12:44,390 --> 01:12:47,790 Или ако сте злопамтило, можеби ќе се обиде да го ставете во вредност од гигабајти на еден 1623 01:12:47,790 --> 01:12:49,380 есеј да се пополни оваа низа. 1624 01:12:49,380 --> 01:12:52,060 И ако на компјутерот снема доволно меморија, излегува дека ние ќе 1625 01:12:52,060 --> 01:12:54,310 да се вратам на оваа посебна вредност наречена нула. 1626 01:12:54,310 --> 01:12:57,550 Па за сега, само знам дека не е ова посебна вредност се нарекува нулти дека 1627 01:12:57,550 --> 01:13:01,000 ќе ни овозможи да се провери кога сме надвор од меморија, меѓу другите нешта. 1628 01:13:01,000 --> 01:13:07,330 >> Но, ако јас се отвори сега string2, забележите една разлика тука. 1629 01:13:07,330 --> 01:13:09,760 Забележите една разлика тука со string2. 1630 01:13:09,760 --> 01:13:13,260 Со string2, ова за телефонска линија е малку поинаква. 1631 01:13:13,260 --> 01:13:16,350 Дозволете ми да го избришете NULLS, така што можеме да зборуваме за оние некое друго време. 1632 01:13:16,350 --> 01:13:18,460 Но она што е различно за за јамка ова време? 1633 01:13:21,580 --> 01:13:23,160 И јас да се вратиш на претходниот пример. 1634 01:13:23,160 --> 01:13:24,800 Значи тоа е верзија две. 1635 01:13:24,800 --> 01:13:27,020 Ова е верзија еден. 1636 01:13:27,020 --> 01:13:31,935 Еден, два, еден два. 1637 01:13:35,030 --> 01:13:38,240 Па strlen повик е каде? 1638 01:13:38,240 --> 01:13:40,420 Тоа е во првиот дел од за телефонска линија. 1639 01:13:40,420 --> 01:13:43,060 Секој мисли за тоа зошто јас го правам ова? 1640 01:13:43,060 --> 01:13:43,690 Да. 1641 01:13:43,690 --> 01:13:46,010 [Беззвучен] 1642 01:13:46,010 --> 01:13:47,630 Дејвид Џ MALAN: Па ние не се јавите на функција секој пат. 1643 01:13:47,630 --> 01:13:48,040 Точно. 1644 01:13:48,040 --> 01:13:50,350 Потсетиме од за петелки дека тие се супер едноставен штом ќе вид на 1645 01:13:50,350 --> 01:13:52,180 Разбирам дека ова е иницијализација, 1646 01:13:52,180 --> 01:13:53,330 состојба, и ажурирање. 1647 01:13:53,330 --> 01:13:55,430 Проблемот е дека состојбата се случува на секој 1648 01:13:55,430 --> 01:13:56,600 повторување на јамка. 1649 01:13:56,600 --> 01:13:59,930 И така во овој пример тука, она што е лошо за фактот 1650 01:13:59,930 --> 01:14:03,500 дека ова е мојата состојба? 1651 01:14:03,500 --> 01:14:05,920 Ти си повикувајќи strlen повторно и повторно и повторно. 1652 01:14:05,920 --> 01:14:08,990 Но еднаш сум ја внеле во ДАВИД, должината на стрингот е пет. 1653 01:14:08,990 --> 01:14:11,560 И тоа не е ќе се смени на секој повторување на циклусот, бидејќи 1654 01:14:11,560 --> 01:14:15,560 стринг е уште Д-А-В-I-Д. Значи ова е навестување на она што се случува да стане 1655 01:14:15,560 --> 01:14:19,650 повеќе важна идеја познат како дизајнерска одлука, каде што - само не 1656 01:14:19,650 --> 01:14:21,640 направи на компјутерот направи непотребни работи. 1657 01:14:21,640 --> 01:14:25,630 >> Сега само како еден подлец преглед на 2 pset, pset 2 во стандардна верзија е 1658 01:14:25,630 --> 01:14:28,850 ќе ви предизвик да ги спроведе некои број на шифри, некои 1659 01:14:28,850 --> 01:14:32,650 број на енкрипција алгоритми, така што ќе може да и криптирате и декриптирање 1660 01:14:32,650 --> 01:14:35,530 тајни пораки, многу сличен на оној Ralphie има дешифрира. 1661 01:14:35,530 --> 01:14:38,720 Во хакер издание на pset 2, ние ќе одиме малку подалеку. 1662 01:14:38,720 --> 01:14:42,010 Ние ќе ви рака датотека од вистински компјутерски систем кој содржи 1663 01:14:42,010 --> 01:14:45,690 целиот куп на кориснички имиња и вистински криптирани лозинки и предизвик 1664 01:14:45,690 --> 01:14:49,110 за хакер издание ќе биде да попуштат оние лозинки и фигура 1665 01:14:49,110 --> 01:14:53,060 од она што криптографијата или какви тајни беше искористена за да всушност 1666 01:14:53,060 --> 01:14:55,080 генерираат оние лозинки. 1667 01:14:55,080 --> 01:14:58,360 И ние ќе го направите тоа со користење на нова функција тука на C кои ќе ти дадам 1668 01:14:58,360 --> 01:15:02,200 можете само демонстрација на, познат како командната линија аргументи. 1669 01:15:02,200 --> 01:15:05,930 >> Значи испаѓа, како што некои од вас може да се види во дел или во учебниците, 1670 01:15:05,930 --> 01:15:09,850 Главните не секогаш мора да биде неважечка во голема заграда. 1671 01:15:09,850 --> 01:15:14,060 Излегува дека главната исто така може да бидат напишани како оваа, со два аргументи, 1672 01:15:14,060 --> 01:15:19,690 argc и argv, каде argc е бројот на зборовите што пишувате после 1673 01:15:19,690 --> 01:15:21,940 на програмата името на вашиот командната линија. 1674 01:15:21,940 --> 01:15:24,550 И argv е вистински зборови. 1675 01:15:24,550 --> 01:15:29,470 И како квадратни загради има сугерира, argv е очигледно низа. 1676 01:15:29,470 --> 01:15:33,720 Тоа се случува да биде низа по низа по низа во меморијата. 1677 01:15:33,720 --> 01:15:36,170 Значи она што се случува да бидат во можност да се направи, почнувајќи со pset 2, се 1678 01:15:36,170 --> 01:15:37,310 нешто како ова. 1679 01:15:37,310 --> 01:15:42,450 Ако можам да направам argv1, која е пример ние ќе се врати во понеделникот, и да ја стартувате 1680 01:15:42,450 --> 01:15:45,180 тоа, забележите дека тоа не чини да се направи ништо сеуште. 1681 01:15:45,180 --> 01:15:47,050 Тоа само отпечатоци од свое име. 1682 01:15:47,050 --> 01:15:53,220 Но, ако јас се каже збогум класа, напомена дека оваа програма очигледно iterates 1683 01:15:53,220 --> 01:15:57,030 над секоја од зборовите кои беа напишани во конзолата. 1684 01:15:57,030 --> 01:16:02,050 И средствата со кои ќе се добие пристап до зборовите дека корисникот има 1685 01:16:02,050 --> 01:16:06,780 внесе во конзолата е со промена на главните, почнувајќи од овој викенд, од int 1686 01:16:06,780 --> 01:16:10,710 главната (празно) да int main (argc, argv). 1687 01:16:10,710 --> 01:16:13,700 И на тој начин ќе се роди командната линија аргументи. 1688 01:16:13,700 --> 01:16:17,210 И штом еднаш ќе добиете навистина софистицирани во ова, ќе бидете во можност да се напише 1689 01:16:17,210 --> 01:16:21,370 навистина trippy програми, како што е овој овде, кој оди над и надвор 1690 01:16:21,370 --> 01:16:25,520 некои од функционалноста ние го направивме досега, но сите доста моќни. 1691 01:16:25,520 --> 01:16:27,330 >> Па ние ќе ја напушти оваа со овој на екранот. 1692 01:16:27,330 --> 01:16:29,160 И ние ќе се видиме в понеделник.