1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] Дейвид Дж. Малан: Добре. 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 да свика малка група утре, четвъртък, 13:15. 5 00:00:18,920 --> 00:00:21,460 Има този адрес тук, ако искате да потвърдят. 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 Друг URL, въпреки че може да бъде от интерес. 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 , че ще се използва, които ще създадат по същество UI като този. 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 >> Така че в същия дух на пухкави същества, може да имате 61 00:03:01,010 --> 00:03:02,820 знаете за този човек тук. 62 00:03:02,820 --> 00:03:06,180 Така че това е ужасяващо евтин филм от преди години. 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 И така, един на домейн специфични проблеми за pset 2, която ще влезе 69 00:03:19,010 --> 00:03:22,770 до късно утре вечер, е да се потопите в света на криптографията, която 70 00:03:22,770 --> 00:03:26,380 е изкуството на криптиране или кодиране на информацията. 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 кодиране на информацията, така че неща като пароли 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 >> [VIDEO PLAYBACK] 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 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 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 -Five 139 00:05:56,580 --> 00:05:57,120 -Five. 140 00:05:57,120 --> 00:05:58,560 -Five. 141 00:05:58,560 --> 00:06:03,770 Така че комбинацията е едно, две, три, четири, пет. 142 00:06:03,770 --> 00:06:06,745 Това е най-тъпото комбинация, която някога съм чувал през живота си. 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 - Ох! 173 00:06:53,250 --> 00:06:55,020 [END възпроизвеждане на видео] 174 00:06:55,020 --> 00:06:57,470 >> Дейвид Дж. Малан: Една прекрасна филм, който сега трябва да видите. 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 >> И сега е дума за Pass / Fail. 198 00:08:11,860 --> 00:08:15,250 Така че, особено, тъй като някои от вас са се гмурна в pset 1, уредът и 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 познава ли 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 Pass / Fail, честно казано, никога не бих дори стъпвал в класната стая. 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 води като цяло, разбира се помисли за смяна на Pass / Fail. 214 00:09:01,000 --> 00:09:03,750 Отново, не е наистина тази култура тук в Харвард на възприемане на нещата 215 00:09:03,750 --> 00:09:08,080 Pass / Fail, тъй като всички наистина иска да постигне или да преизпълни. 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 И по-конкретно, какво мисля Pass / Fail обикновено не, 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 Pass / Fail наистина е на ръба на класа като тази, където можете да сортирате 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, което означава, развързвам 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 административни или корен привилегии на вашия 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 Сега тази подробност тук по линия 18, защо Декларирам, N над цялата тази 303 00:13:20,400 --> 00:13:24,490 примка конструкция за разлика в непосредствена близост до ред 22, където 304 00:13:24,490 --> 00:13:26,880 всъщност се грижат да получите н? 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 >> Дейвид Дж. Малан: Да, така че този въпрос за обхвата. 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 Дейвид Дж. Малан: Може ли да се говори малко по-силно? 312 00:13:41,105 --> 00:13:43,450 SPEAKER 1: Къде можете да получите достъп до дадена променлива. 313 00:13:43,450 --> 00:13:45,170 Дейвид Дж. Малан: Перфектно. 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 по линия 22, 318 00:14:02,010 --> 00:14:03,010 тази линия ще работи. 319 00:14:03,010 --> 00:14:10,990 Че ще получи едно цяло число, и аз бих го сложи в тази променлива 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 на всички функции, което сте написали, както направих аз тук по линия 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, удари Въведете. 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 Да, така че това булев в зелено. 352 00:15:42,560 --> 00:15:45,980 Gedit подчерта в зелено тази ключова дума, известен като булев, 353 00:15:45,980 --> 00:15:47,000 което е тип данни. 354 00:15:47,000 --> 00:15:51,080 Той не идва построена през всички версии на C. Трябва да се включи 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 имат достъп до булев. 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 Булева стойност благодарен се инициализира с фалшиви в ред 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 сега, да проверя дали вътр потребителят е е по-голяма от 367 00:16:26,940 --> 00:16:31,120 0, тогава аз просто променете стойността на благодарни да е истина. 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 , защото аз не съм спомни какво н е. 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 скоба, в близост скоба. 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 осъзнава, ох, ние сме направили, защото сега съм благодарен. 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 True става фалшива. 406 00:18:24,390 --> 00:18:25,500 False се превръща в истина. 407 00:18:25,500 --> 00:18:28,910 Така че това, че ще предложи, е дори малко по-интуитивен начин на 408 00:18:28,910 --> 00:18:32,200 писането на код, защото аз все още се инициализира благодарен невярно. 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 Говорили сме за Булев, когато играхме с устойчиво на надраскване. 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 >> Така че сега имам възможност, подобно на мен с ФОРМАТ сам, за да наберете 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 И така, за разлика от това, ФОРМАТ току-що е направил нещо. 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 ФОРМАТ току-що е направил нещо. 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 КЕН: Кен. 453 00:20:29,020 --> 00:20:29,420 Дейвид Дж. Малан: Кен. 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 Аз току-що написани ФОРМАТ ("нещо") на екрана. 477 00:21:26,270 --> 00:21:27,470 Аз съм тази програма. 478 00:21:27,470 --> 00:21:30,900 И веднага след като ФОРМАТ получава нарича, той приема само един аргумент - или един параметър, 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 Отново, всъщност ФОРМАТ се върне номера. 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 ФОРМАТ, се извършва изпълнение. 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 И този път, ние ще направим cubing функция. 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 Така че сега имам линия на кода, който казва х = куб (х). 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 х = куб (х). 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 И аз отивам да пиша сега за определяне на стойността на х, който в този момент в 511 00:22:55,000 --> 00:23:01,080 време се случва да бъде, нека кажем, два, да го прости. 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 КЕН: И аз просто напишете отговор? 516 00:23:09,200 --> 00:23:12,660 Дейвид Дж. Малан: Да, нека просто да напишете отговор. 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 Аз съм малко объркан, защото там, където мога да пишат на стойността на х? 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 като "Hello World" или давате аргумент като две, като цяло, вие сте 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 Така че нека да вървим напред и да ни върне на cubing пример тук. 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 Така че тук имаме една основна функция, която е х и у произволно инициализира 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, наречена суап 570 00:25:43,030 --> 00:25:44,000 че отнема два аргумента. 571 00:25:44,000 --> 00:25:46,430 Това е напълно легитимни функции, за да се вземат два аргумента. 572 00:25:46,430 --> 00:25:48,220 Виждали сме ФОРМАТ го направя вече. 573 00:25:48,220 --> 00:25:50,370 Така че суап очевидно отнема х и у. 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 И аз препечатване на х и у, при допускането, че 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 Защото, когато натиснете Enter, ще забележите, че х е 1. 584 00:26:14,690 --> 00:26:15,720 г. е 2. 585 00:26:15,720 --> 00:26:19,160 И все пак в края на програмата, те са все още в действителност, един и същ. 586 00:26:19,160 --> 00:26:22,760 >> Така че на базата на демонстрацията точно сега с Кен, какво всъщност се случва? 587 00:26:22,760 --> 00:26:24,660 Ами, нека да се потопите в този суап функция. 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 С други думи, суап очевидно отнема две аргументи, вътр. 597 00:26:46,810 --> 00:26:49,370 И това е произволно и б. 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 Аз не съм буквално минава в г.. 601 00:26:58,410 --> 00:27:01,230 Аз преминаване копие на х и копие на у. 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 Така че това трябва да бъде само едно. 609 00:27:25,980 --> 00:27:26,170 Нали? 610 00:27:26,170 --> 00:27:29,100 Тъй като X е приет като първи аргумент. 611 00:27:29,100 --> 00:27:33,150 И тази функция произволно се обажда първия си аргумент, а. 612 00:27:33,150 --> 00:27:35,130 По същия начин е г., втория аргумент. 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 Никой от нас не съм срещал човек, който е написал ФОРМАТ. 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 С други думи, аз написах моите променливи х и у. 623 00:28:05,120 --> 00:28:08,060 Но ако някой друг е написал суап функция, той или тя със сигурност 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 суап са използвали едни и същи имена. 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 стойността на А и Б? 646 00:28:58,170 --> 00:28:59,070 Същото, 1. 647 00:28:59,070 --> 00:29:03,460 Защото сте съсипани, така да се каже, сте променили, за да са равни на. 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 Декларирам, временна променлива - ПТУ е много често срещано име 656 00:29:29,910 --> 00:29:31,240 за временна променлива. 657 00:29:31,240 --> 00:29:34,280 Това е едно цяло число, защото трябва да съответства на това, което искам да направя копие на. 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 Стойността на б е 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 изпълнява, поема стойността на б. 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 Така че сега логично, можем стойност просто плясване ПТУ в б. 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 Но отново, ако стартирате тази програма, х и у остават непроменени до края на 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 Дейвид Дж. Малан: Така че ние нищо не са се върнали. 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 , защото мога да се върна на новата стойност на х или мога да се върна 687 00:30:51,805 --> 00:30:53,160 новата стойност на у. 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 "а" и б. 693 00:31:04,010 --> 00:31:07,670 Но и б са копия на 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 Но и обхвата б е само тук в тези редове. 698 00:31:20,230 --> 00:31:24,130 Така че просто като за цикъла, ако Вие декларирате цяло число и вътре за 699 00:31:24,130 --> 00:31:27,400 контур - по същия начин, ако сте обявяване и б вътрешността на функция, която 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, х и у не са се променили изобщо. 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 И аз наистина искате да сменяте х и у в същото време. 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 че А и Б са копия. 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 Нека превъртете върна тук и да се отворят, да речем, 1/4 вариант 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 И това очевидно инициализира цяло число х 1 линия 18. 720 00:32:24,320 --> 00:32:25,950 След това твърдят, х е 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 Твърдят, х е сега каквото и да е то, 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 Дейвид Дж. Малан: Точно така. 730 00:32:49,850 --> 00:32:52,430 Така че X е обявена очевидно по линия 18. 731 00:32:52,430 --> 00:32:54,410 Това е вътре основни фигурни скоби. 732 00:32:54,410 --> 00:32:58,470 Така че просто Отговорът е, че е добре, х съществува тук. 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 Използване на недекларирания идентификатор х по линия 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 Забележете, че това е малко загадъчно писмено. 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 осъзнават, че на долния може да бъде само симптом на 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 Защото може да бъде само един Дейзи верига ефект, който се предлагаш 757 00:34:06,720 --> 00:34:09,030 има начин повече проблеми, отколкото сте в действителност. 758 00:34:09,030 --> 00:34:14,989 >> И така, как бихме могли да поправя това, ако целта ми е да увеличите х? 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 Така че ние можем да направим х глобален. 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 х тук. 765 00:34:23,949 --> 00:34:25,600 Това прави х глобален. 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 ужасяващо трудно да се управлява. 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 Дейвид Дж. Малан: Добре, добре. 794 00:35:38,000 --> 00:35:40,490 Така че, защо да не мога да премине в х? 795 00:35:40,490 --> 00:35:44,390 И тогава, вместо да го върне, защо не аз просто се връщат х + 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 Какво друго трябва да ощипвам? 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 Дейвид Дж. Малан: Трябва да се промени типът на връщане на нарастване 803 00:35:53,520 --> 00:35:54,590 , защото не е невалидни. 804 00:35:54,590 --> 00:35:56,650 Void означава нищо не се връщат. 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 Дейвид Дж. Малан: Така че аз трябва да увеличите х? 812 00:36:07,630 --> 00:36:10,336 [Недоловим] 813 00:36:10,336 --> 00:36:11,880 Дейвид Дж. Малан: А, така че трябва да премине х. 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 Така че това трябва да стане вътр. 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 Но честно казано, ако започнете да призовава всички променливи х, е ще се получи 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 Значи аз трябва да се върне, независимо от броя е един плюс. 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 Аз трябва да го възложи на х. 835 00:36:55,390 --> 00:36:57,480 Така че не може просто да се обадя в растежа х. 836 00:36:57,480 --> 00:37:01,000 Трябва да се помни, отговорът от промяна на стойността на х 837 00:37:01,000 --> 00:37:02,020 лявата страна. 838 00:37:02,020 --> 00:37:04,930 И макар х сега е на ляво и дясно, че е напълно добре, тъй като 839 00:37:04,930 --> 00:37:08,370 дясната страна ще се изпълни първият, после го пльосна в ляво 840 00:37:08,370 --> 00:37:10,240 ръка нещо, х в този случай. 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 Така че аз трябва да декларира това вътр. 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 О, Боже мой. 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 SPEAKER 2: Защо е, че можете просто да промените х към номер в променливата 868 00:38:06,864 --> 00:38:08,860 име и то ще знаеш какво да кажеш? 869 00:38:08,860 --> 00:38:09,600 Дейвид Дж. Малан: Добър въпрос. 870 00:38:09,600 --> 00:38:13,130 Как е, че мога да променя х към номер и програмата ще знаят 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 Дейвид Дж. Малан: Ако имаше повече употреби на променливата момент XA преди 896 00:39:29,530 --> 00:39:32,220 , програмист, ще трябва да ги сменим навсякъде. 897 00:39:32,220 --> 00:39:35,230 Или пък може буквално файлове, Меню, и след това търсене / замяна, 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 Дейвид Дж. Малан дадена поръчка като тук? 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 Надясно, така че осем нули и единици. 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 Все по-често при лаптопите, най-малко, твърди дискове, SSD, че 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 House, или където и да се случи да бъде, където 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 И тя има цели числа и струнни инструменти и символа и други подобни. 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 бита за едно цяло число, или имате нужда от 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 И нека ми давай сега и ФОРМАТ. 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 Нека да направим тази грешка, аз + +. 1029 00:45:49,740 --> 00:45:51,150 И нека не ФОРМАТ тук. 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 Void хор, и ние ще кажем вътр аз. 1033 00:46:00,860 --> 00:46:02,295 И тогава аз ще кажа, ФОРМАТ 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); 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 Използване на неидентифицирани и декларатора. 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 Така че позволете ми да кажа ФОРМАТ, да речем, аз съм тук. 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 Дейвид Дж. Малан: Точно така. 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 Когато се обадих на показване, и минавам с X, картинки какво е 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 цикъл, докато можем да превъртите - 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 започне този процес на кодиране на информация. 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 Позволете ми да се опрости тази процедура обратно на това, което е било преди някои от по-рано Q & A. 1176 00:52:34,810 --> 00:52:41,730 А фактът, че увеличение има отворени скоби, вътр номер, затворен 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 Дейвид Дж. Малан: аргумент. 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 Дейвид Дж. Малан: Съжалявам, какво е това? 1184 00:52:52,500 --> 00:52:53,150 SPEAKER 3: Нещо, което преминават инча 1185 00:52:53,150 --> 00:52:53,570 Дейвид Дж. Малан: Добре. 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 Сега вътр от лявата страна представлява това, което, за разлика от? 1209 00:53:52,825 --> 00:53:53,780 [Недоловим] 1210 00:53:53,780 --> 00:53:54,570 Дейвид Дж. Малан: Какво е това? 1211 00:53:54,570 --> 00:53:55,390 [Недоловим] 1212 00:53:55,390 --> 00:53:57,920 Дейвид Дж. Малан: тип на функцията и, по-специално, 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 И така число е типът на връщане на тази функция. 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 гигабайт, два гигабайта, независимо. 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 че звъня изход. 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 И това е цопнала в горната част на 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 Дейвид Дж. Малан: Къде - глобални променливи се съхраняват в това, което е 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 х точка и запетая без стойност, то завършва леко 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 Така че вместо да пишете A, може да напишете Б. Вместо B, можете да напишете 1299 00:57:44,390 --> 00:57:46,670 C. Вместо 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 Подобно на това, което е че съответствието между и БДС и Cs и DS? 1307 00:58:04,620 --> 00:58:08,780 Е просто добавяне на една, така да се каже, на всяка една от буквите, да се премине от 1308 00:58:08,780 --> 00:58:09,730 А до точка Б, B C? 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 познавам никого в Amazon, и аз със сигурност не сте подредили всякакъв вид 1330 00:59:03,330 --> 00:59:07,350 тайна с някой в ​​Amazon, как е компютърът ми или браузъра си правиш това? 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 или някои съответствието между Както и БДС. 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 Може би това е просто става B, B става C. И тогава ще се окажете с 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 На извън периферията на това нещо, има букви от А до Я, 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 около коледните празници от един филм, наречен A Story Коледа. 1354 01:00:11,120 --> 01:00:16,050 Ще видите, че малко Ралфи е толкова нетърпелив да разбера какво малко сираче 1355 01:00:16,050 --> 01:00:19,810 Тайно послание Ани беше с него, които са били съобщени, мисля, че в 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 Така че тук имаме Ралфи. 1366 01:00:43,773 --> 01:00:44,126 >> [VIDEO PLAYBACK] 1367 01:00:44,126 --> 01:00:47,470 Бъде известно на всички и разни, че Ралф Паркър се назначава 1368 01:00:47,470 --> 01:00:50,690 член на Little Orphan Annie Secret Circle и има право на всички 1369 01:00:50,690 --> 01:00:53,500 почести и ползите, възникнали в него. 1370 01:00:53,500 --> 01:00:56,040 Подписано, Little Orphan Annie. 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 Слушайте утре вечер за сключване приключение на The Black 1377 01:01:17,624 --> 01:01:19,710 Пиратски кораб. 1378 01:01:19,710 --> 01:01:23,380 Сега е време за тайното послание на Ани за вас членове 1379 01:01:23,380 --> 01:01:25,670 на Secret Circle. 1380 01:01:25,670 --> 01:01:30,260 Не забравяйте, че децата, само членовете на Secret Circle Ани може да декодира 1381 01:01:30,260 --> 01:01:31,660 Тайна Ани съобщение. 1382 01:01:31,660 --> 01:01:36,230 Не забравяйте, че Ани се разчита на вас. 1383 01:01:36,230 --> 01:01:38,720 Задайте вашите изводи към B2. 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 S. Той идваше по-лесно. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -О, хайде, Ралфи. 1400 01:02:26,510 --> 01:02:28,430 Трябва да вървя. 1401 01:02:28,430 --> 01:02:30,350 - Ще бъде, ma. 1402 01:02:30,350 --> 01:02:33,720 Gee факир. 1403 01:02:33,720 --> 01:02:38,270 -T, О. Бъдете сигурни. 1404 01:02:38,270 --> 01:02:40,000 Бъдете сигурни към какво? 1405 01:02:40,000 --> 01:02:42,105 Какво е Little Orphan Annie се опитвам да кажа? 1406 01:02:42,105 --> 01:02:43,095 Бъдете сигурни към какво? 1407 01:02:43,095 --> 01:02:43,590 - Ралфи! 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 -Добре, мамо. 1411 01:02:46,560 --> 01:02:48,540 Аз ще идвам. 1412 01:02:48,540 --> 01:02:50,580 -I е все по-близо. 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 - Ралфи! 1417 01:02:56,790 --> 01:02:59,165 Ранди Трябва да тръгвам. 1418 01:02:59,165 --> 01:03:02,310 Ще бъде десен, за плача на глас. 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 -Be забравяйте да пиете Овалтин. 1426 01:03:18,960 --> 01:03:20,210 Овалтин? 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 >> Дейвид Дж. Малан: Значи имаме криптографията. 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 Имахме цели числа. 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, вътр 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, вътр quiz2, INT quiz3, вътр 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 И специалните ключовата дума, която използват в C # определят. 1478 01:05:55,960 --> 01:06:00,250 Така че, ако ти кажа # определят, след това интервал, а след това думата, която искате да използвате за 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 промени в три викторини вместо. 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 Това е само ФОРМАТ. 1531 01:08:29,040 --> 01:08:35,490 Така ФОРМАТ ("викторина% от броя г% г"), защото аз просто искате да разпечатате, за да ми даде викторина 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 В този случай, аз използвам, защото това за цикъла започна със равна 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 Вие все още имате два гигабайта оперативна памет, дори ако сте само 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 и след това разпределя на малки парчета, за да направите резервно копие на гръб до гръб. 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 Ако превъртете надолу, това е мястото, където след това обхождане на масива. 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 Така че първата викторина плюс втората викторина, разделен на две, и след това печат 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 Аз съм всъщност итерации от първа до - и това е нов трик - 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 + + просто означава, че се увеличава в всяка итерация. 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 Дейвид Дж. Малан: Точно така. 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 И сега го отпечатва DAVID по различни линии, защото 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 >> Но ако отворя сега МНОЖ2 забележите една разлика тук. 1629 01:13:07,330 --> 01:13:09,760 Забележете една разлика с МНОЖ2. 1630 01:13:09,760 --> 01:13:13,260 С МНОЖ2, това за цикъла е малко по-различно. 1631 01:13:13,260 --> 01:13:16,350 Позволете ми да изтриете нулата, така че можем да говорим за друго време. 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 Дейвид Дж. Малан: Така че ние не извикате функцията всеки един момент. 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 низ е все още D-A-V-I-D. Така че това е намек какво ще стане 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 >> Сега само като закрита прожекция на pset 2, 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 тайни послания, много прилича на Ралфи декодирани. 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 Но ако кажа сбогом клас, забележете, че тази програма очевидно повтаря 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 въвели в командния ред е чрез промяна на Майн, в началото на този уикенд, от вътр 1686 01:16:06,780 --> 01:16:10,710 главната (нищожна) да INT главната (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 И ние ще се видим в понеделник.