1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> ЗВУЧНИЦИ 1: Здраво на сите. 3 00:00:05,680 --> 00:00:07,530 Ние ќе се обидеме да започнете. 4 00:00:07,530 --> 00:00:09,330 Мислам дека луѓето се уште се случува да биде филтрирање во. 5 00:00:09,330 --> 00:00:12,840 Но, во интерес на времето, па можеме да да ви момци од тука на време, 6 00:00:12,840 --> 00:00:14,110 ние сме случува да се започне. 7 00:00:14,110 --> 00:00:18,780 Па добредојде на CS50 квиз 0 преглед. 8 00:00:18,780 --> 00:00:23,020 За оние од вас кои не се реализира сепак, имате некое прашање во средата. 9 00:00:23,020 --> 00:00:25,700 Woo-Hoo. 10 00:00:25,700 --> 00:00:29,780 >> Ако не сте почнати проучување уште или не сфати дека тоа постои уште, 11 00:00:29,780 --> 00:00:34,070 последните тестови и сите информации во врска со Вашиот квиз се на cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Има некои прилично добри работи таму, минатото квизови од последните 10 13 00:00:38,090 --> 00:00:43,760 години, како и информации околу овој квиз и теми 14 00:00:43,760 --> 00:00:46,250 кои ќе бидат покриени. 15 00:00:46,250 --> 00:00:48,980 Па ајде да започнете. 16 00:00:48,980 --> 00:00:54,240 >> Па вие момци може да се сеќавам, првиот денот на класа Дејвид имаше оние светилки натаму. 17 00:00:54,240 --> 00:00:59,650 Значи во суштина, сето она што оди за под хаубата на компјутер е 18 00:00:59,650 --> 00:01:00,860 направено во бинарна. 19 00:01:00,860 --> 00:01:04,080 Бинарни значи она што звучи како, 0 и 1 е. 20 00:01:04,080 --> 00:01:09,290 Таа има две вредности кои може да се претстави. 21 00:01:09,290 --> 00:01:14,675 >> Значи исто како и во првиот ден од делот кога Дејвид сврте на светлината 22 00:01:14,675 --> 00:01:21,990 сијалицата претставуваат на, или 1, нашиот компјутер разбира бинарни како 0 и 23 00:01:21,990 --> 00:01:24,110 1 е, вклучени или исклучени. 24 00:01:24,110 --> 00:01:25,360 Основи на Бинарни. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Секое место е претставен во основа два. 27 00:01:32,470 --> 00:01:36,260 Така да додадете 2 до 0 до 1 до 2 по целиот пат до. 28 00:01:36,260 --> 00:01:41,970 >> Да се ​​пресмета она што вашите бинарни е да се децимала, што само ја следат оваа равенка 29 00:01:41,970 --> 00:01:42,840 тип работа. 30 00:01:42,840 --> 00:01:49,510 Ако имаш 1 во било која од овие места, го множи со што 31 00:01:49,510 --> 00:01:53,820 засноваат тоа е во, тоа се додаде и ќе добиете децимална. 32 00:01:53,820 --> 00:01:57,930 Значи ова е како да се избројат до 5 во бинарен. 33 00:01:57,930 --> 00:02:01,400 Исто како и она што го правевте на последниот слајд, ова е како што би 34 00:02:01,400 --> 00:02:02,650 претставуваат 1 до 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Слично на тоа, исто како што може да додадете и одземе во децимална или база 10, или 37 00:02:09,660 --> 00:02:13,040 навистина било основа, да додадете на и одземе во бинарен. 38 00:02:13,040 --> 00:02:18,400 Токму она што би очекувале кога ќе додадете две до, и ако тоа е еднакво на поголема 39 00:02:18,400 --> 00:02:24,220 од 1, носите 1, таа да стане 0, и го стори Покрај тоа на тој начин, само 40 00:02:24,220 --> 00:02:29,910 како што би се очекувало со редовни децимални или било која друга база. 41 00:02:29,910 --> 00:02:30,970 Кул. 42 00:02:30,970 --> 00:02:35,140 >> Значи како што реков претходно, сето она што продолжува под хаубата на нашиот компјутер 43 00:02:35,140 --> 00:02:37,560 е направено во 0 и 1, или бинарни. 44 00:02:37,560 --> 00:02:43,470 Така како ние да се изрази, на пример, букви, или броеви, или знаци? 45 00:02:43,470 --> 00:02:45,560 И одговорот на тоа е ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII е мапирање помеѓу карактери што нормално ќе се види во 47 00:02:49,380 --> 00:02:53,360 Англиски јазик како А, Б, На C, долни, цртички, и 48 00:02:53,360 --> 00:02:54,910 такво нешто. 49 00:02:54,910 --> 00:02:57,260 И мапи, кои на ASCII вредност. 50 00:02:57,260 --> 00:03:03,080 На ASCII вредност е само број, кој може да се разбере од вашиот компјутер. 51 00:03:03,080 --> 00:03:07,430 И исто како и што можете да направите прилог и одземање со броеви, можете да направите 52 00:03:07,430 --> 00:03:10,890 нив со ASCII вредности. 53 00:03:10,890 --> 00:03:14,050 >> Така што во овој пример, што ова ќе испечатите? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Да, па само простор Б простор C простор Д Каде мојот глушец оди? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Забележите дека може да се дефинира int на 65. 58 00:03:43,380 --> 00:03:47,080 И кога ќе се печати дека со користење на проценти C, тоа ќе го протолкува тоа како 59 00:03:47,080 --> 00:03:49,330 карактер и ќе се печати А. 60 00:03:49,330 --> 00:03:52,800 >> Слично на тоа, може да се прогласи тоа како знак. 61 00:03:52,800 --> 00:03:56,860 И кога ќе го испечатите користење отсто Ц, тоа ќе го протолкува тоа како 62 00:03:56,860 --> 00:04:05,240 проценти D. И како можете да додадете број, можете да додадете ликови се 63 00:04:05,240 --> 00:04:06,878 ASCII вредности, во овој случај. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> Па малку покажувачот за секого. 66 00:04:16,130 --> 00:04:19,610 5, како стринг, не всушност изедначи 5. 67 00:04:19,610 --> 00:04:26,610 Па како може да се конвертира низа 5 до број 5? 68 00:04:26,610 --> 00:04:28,930 Сите идеи? 69 00:04:28,930 --> 00:04:31,630 Да. 70 00:04:31,630 --> 00:04:36,720 >> Значи, ако ние имаме 5 како стринг, можеме да одземе 0. 71 00:04:36,720 --> 00:04:37,820 И тоа ќе ни даде 5. 72 00:04:37,820 --> 00:04:41,670 И слично, ако имаме 5 како цел број, додаваат дека на низа 0. 73 00:04:41,670 --> 00:04:43,112 И тоа ни дава низа 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Кул. 76 00:04:48,350 --> 00:04:52,940 >> Сега, да се потсетиме назад кон предавање една каде ние разговаравме за алгоритми. 77 00:04:52,940 --> 00:04:57,260 Така како ние всушност сакаат компјутер да го направите интересни работи? 78 00:04:57,260 --> 00:05:00,460 Знаете, само додавање и одземање броеви и печатење работи надвор не е 79 00:05:00,460 --> 00:05:01,730 таа возбудлива. 80 00:05:01,730 --> 00:05:04,620 Обично, ние го сакаме нашиот компјутер да изврши некој вид на алгоритам. 81 00:05:04,620 --> 00:05:07,820 Нешто малку повеќе комплекс од само едноставни аритметички. 82 00:05:07,820 --> 00:05:11,930 >> Алгоритам е само чекор по чекор сет на инструкции за тоа како да се изврши 83 00:05:11,930 --> 00:05:14,640 одреден task-- 84 00:05:14,640 --> 00:05:15,660 Исто како рецепт. 85 00:05:15,660 --> 00:05:19,990 Може да се сеќавам на првиот ден од класа, каде Давид нас брои соба 86 00:05:19,990 --> 00:05:22,550 на луѓето и колку луѓе беа во собата. 87 00:05:22,550 --> 00:05:24,480 Може да се користи за да броење еден по еден. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 Во тој случај, на еден линеарен пат алгоритам. 90 00:05:28,010 --> 00:05:31,710 >> Но Давид претстави алгоритам за можете да ги брои луѓето во просторијата 91 00:05:31,710 --> 00:05:37,340 каде што секој станува, што велите на вашиот број на друго лице, додаваат дека 92 00:05:37,340 --> 00:05:39,200 број, и едно лице седнува. 93 00:05:39,200 --> 00:05:40,410 И да го повтори тоа. 94 00:05:40,410 --> 00:05:42,910 Тоа е еден вид на алгоритам. 95 00:05:42,910 --> 00:05:47,520 Ние може да анализира како ефикасна на алгоритам е врз основа на тоа се кандидира време. 96 00:05:47,520 --> 00:05:49,680 Но ние ќе разговараме малку повеќе за тоа подоцна. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> Така што сите алгоритми може исто така да да биде напишан во pseudocode. 99 00:05:57,090 --> 00:06:01,120 Pseudocode е само англиски како синтакса се користи за да ги претставуваат 100 00:06:01,120 --> 00:06:02,420 програмски јазик. 101 00:06:02,420 --> 00:06:06,070 На пример, ако сакаме да ве корисникот да се погоди мојот омилен број, ние 102 00:06:06,070 --> 00:06:08,390 би можеле да имаат pseudocode како такви. 103 00:06:08,390 --> 00:06:09,850 >> Добие на корисниците да се погоди. 104 00:06:09,850 --> 00:06:13,570 Ако претпоставка е точна, да им каже тие се точни, друг да им каже 105 00:06:13,570 --> 00:06:15,560 тие не се точни. 106 00:06:15,560 --> 00:06:22,530 И pseudocode е начин на лесно што претставува идеја или алгоритам. 107 00:06:22,530 --> 00:06:26,910 Па сега ние можеби ќе сакате да всушност пишува ова во јазикот дека компјутерот 108 00:06:26,910 --> 00:06:27,980 можеби разбирање. 109 00:06:27,980 --> 00:06:35,660 За да можеме да пишуваме нашите pseudocode и толкуваат дека во изворниот код. 110 00:06:35,660 --> 00:06:41,320 >> Досега, изворниот код мора да се придржуваат до одреден синтаксата на 111 00:06:41,320 --> 00:06:42,490 програмски јазик. 112 00:06:42,490 --> 00:06:45,430 И досега, во CS50, ние сме користат главно в. 113 00:06:45,430 --> 00:06:48,320 Така што ова може да биде изворниот код за в. 114 00:06:48,320 --> 00:06:51,440 Подоцна во текот на курсот, ќе ноќта се во контакт со други програмски 115 00:06:51,440 --> 00:06:52,480 јазици како PHP. 116 00:06:52,480 --> 00:06:57,540 Или ако дури и да преземе други класи, може да направи Јава, Пајтон, па дури и OCML. 117 00:06:57,540 --> 00:07:01,570 Но, во нашата в програма јазик, ова е како да се напише изворниот код за 118 00:07:01,570 --> 00:07:04,760 на pseudocode алгоритам кој Јас само што е опишано претходно. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Па како не вашиот компјутер, всушност, се разбере тоа? 121 00:07:11,430 --> 00:07:14,490 Како што реков претходно, тоа само навистина разбира нули и единици. 122 00:07:14,490 --> 00:07:17,880 Па како не го добие од изворот код на нешто што може да биде 123 00:07:17,880 --> 00:07:18,960 сфати? 124 00:07:18,960 --> 00:07:22,920 Па, имаме нешто наречен компајлерот. 125 00:07:22,920 --> 00:07:28,450 >> Ако се сеќавате назад во поголемиот дел од вашето psets, сте имале некој вид на програма 126 00:07:28,450 --> 00:07:30,370 напишана во точка в датотека. 127 00:07:30,370 --> 00:07:32,550 А потоа ќе напишеш направи. 128 00:07:32,550 --> 00:07:35,970 Значи она што е да се прави? 129 00:07:35,970 --> 00:07:39,970 >> Можете да напишете направи да компајлирате вашиот програма, бидејќи someone-- 130 00:07:39,970 --> 00:07:42,730 кој напиша вашата стр собата; веројатно David-- 131 00:07:42,730 --> 00:07:44,190 создаде направи датотека. 132 00:07:44,190 --> 00:07:51,320 И кој му кажува направи да се знае да се кандидира на вашиот компајлерот, наречен ѕвекот, кој ќе 133 00:07:51,320 --> 00:07:55,560 тогаш компајлирате вашиот изворен код за да се спротивстават код, кој е нули и единици 134 00:07:55,560 --> 00:07:57,720 дека вашиот компјутер разбира. 135 00:07:57,720 --> 00:08:01,610 Но, малку подоцна, ние ќе одиме повеќе во длабочина за компајлери. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> Значи се потсетиме pset 0, where-- да, имате некое прашање? 138 00:08:10,800 --> 00:08:11,620 >> ПУБЛИКАТА: [Беззвучен]? 139 00:08:11,620 --> 00:08:12,490 >> ЗВУЧНИЦИ 1: Да. 140 00:08:12,490 --> 00:08:14,960 Јас тие мислат, всушност, треба да биде онлајн. 141 00:08:14,960 --> 00:08:15,120 Да. 142 00:08:15,120 --> 00:08:16,572 >> ПУБЛИКАТА: Дали е тоа како [Беззвучен]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> ЗВУЧНИЦИ 1: Тоа не е. 145 00:08:20,830 --> 00:08:25,810 На се на cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> ПУБЛИКАТА: Slash квизови, коса црта 2013 година, намалување на 0, и само преку кликање 147 00:08:32,900 --> 00:08:35,956 квизови 2013 и квиз 0, разгледува делот слајдови. 148 00:08:35,956 --> 00:08:40,380 >> ЗВУЧНИЦИ 1: Да, па ако вие момци сакате да го повлечете го нагоре и се погледне во него на вашиот 149 00:08:40,380 --> 00:08:42,740 сопствен компјутер, тоа е во ред. 150 00:08:42,740 --> 00:08:43,130 Се каже дека се повторно. 151 00:08:43,130 --> 00:08:44,546 >> ПУБЛИКАТА: [Беззвучен]. 152 00:08:44,546 --> 00:08:48,780 >> ЗВУЧНИЦИ 1: Да, [Беззвучен] е формална променлива. 153 00:08:48,780 --> 00:08:49,644 О, да? 154 00:08:49,644 --> 00:08:51,372 >> ПУБЛИКАТА: [Беззвучен]? 155 00:08:51,372 --> 00:08:54,300 >> ЗВУЧНИЦИ 1: Не, штрајкови не се на испит. 156 00:08:54,300 --> 00:08:55,950 Жал ми е, нејзиното прашање беше, беше штрајкови на испит. 157 00:08:55,950 --> 00:08:59,530 И тоа не е. 158 00:08:59,530 --> 00:09:05,780 Па pset 0, вие момци треба да имаат сите спроведува нешто користење на нула. 159 00:09:05,780 --> 00:09:13,100 И ние научивме некои основни програмирање градежни блокови користење на нула. 160 00:09:13,100 --> 00:09:15,590 >> Па ајде да ги разгледаме во некои на овие градежни блокови 161 00:09:15,590 --> 00:09:18,170 кои го сочинуваат програма. 162 00:09:18,170 --> 00:09:20,570 Првиот е Булова израз. 163 00:09:20,570 --> 00:09:24,540 Булова изрази се оние кои и 0 или нешто што има 164 00:09:24,540 --> 00:09:25,700 две можни вредности. 165 00:09:25,700 --> 00:09:30,320 Во овој случај, точно или неточно, или исклучите, а да или не. 166 00:09:30,320 --> 00:09:35,390 Еден пример на едноставна, многу едноставна, програма која користи Буловата 167 00:09:35,390 --> 00:09:39,140 израз тука. 168 00:09:39,140 --> 00:09:43,220 >> Значи, со цел за Булова изрази за да се да биде корисно, имаме Булова оператори. 169 00:09:43,220 --> 00:09:48,920 Тие се оператори кои можат да се користат да се споредуваат одредени вредности. 170 00:09:48,920 --> 00:09:52,820 Па ние имаме и или не е еднакво на помалку од или еднакво на, е поголема или 171 00:09:52,820 --> 00:09:55,130 еднаква на, и помалку од или поголема од. 172 00:09:55,130 --> 00:09:59,060 Но, овие оператори не се многу корисни освен ако не можеме да ги комбинираат во 173 00:09:59,060 --> 00:10:00,320 услови. 174 00:10:00,320 --> 00:10:04,370 >> Па вие момци може да се сеќавам од нула и од вашиот стр поставува дека ние 175 00:10:04,370 --> 00:10:05,400 имаше услови. 176 00:10:05,400 --> 00:10:09,710 Тие се, во суштина, како вилушки во логиката на вашата програма со која 177 00:10:09,710 --> 00:10:12,670 извршува во зависност од тоа дали услов е исполнет. 178 00:10:12,670 --> 00:10:18,150 Значи еден од условите што ги имавме користи многу пати во овој курс е 179 00:10:18,150 --> 00:10:21,470 ако, на друго место, ако и друго услови. 180 00:10:21,470 --> 00:10:24,060 >> Еве еден пример за тоа како можете да го користите тоа. 181 00:10:24,060 --> 00:10:28,430 Дали некој знае разликата помеѓу само со помош ако извештаи сите 182 00:10:28,430 --> 00:10:32,530 пат стихови, ако, на друго место, ако и друго комбинација? 183 00:10:32,530 --> 00:10:33,013 Да? 184 00:10:33,013 --> 00:10:34,263 >> ПУБЛИКАТА: [Беззвучен]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> ЗВУЧНИЦИ 1: Токму така. 187 00:10:42,160 --> 00:10:50,210 Значи, ако имав ако на целиот пат оваа начин, дури и ако оваа состојба се враќа 188 00:10:50,210 --> 00:10:52,800 вистина, тоа сепак ќе продолжи тестирање на следните две. 189 00:10:52,800 --> 00:11:00,120 Каде што, со други-ако, на друго изјава, ако еден се враќа точно, 190 00:11:00,120 --> 00:11:02,640 другите не се тестираат. 191 00:11:02,640 --> 00:11:05,955 Било какви прашања во врска со тоа? 192 00:11:05,955 --> 00:11:06,890 Кул. 193 00:11:06,890 --> 00:11:12,240 >> Така да се користи ако-друго на друг изјава ако знаете дека тоа може само 194 00:11:12,240 --> 00:11:14,470 да биде еден од овие случаи. 195 00:11:14,470 --> 00:11:21,550 Па знаеме ако x е помалку од 0, тоа е дефинитивно нема да биде 196 00:11:21,550 --> 00:11:22,890 е поголем од 0. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Следно, друга зграда блок што научивме се петелки. 199 00:11:31,480 --> 00:11:33,310 Имаме три вида на јамки. 200 00:11:33,310 --> 00:11:35,830 За петелки, додека петелки, и направи додека петелки. 201 00:11:35,830 --> 00:11:38,730 И, генерално, кога ќе седне да напише нешто, ќе треба да одлучи 202 00:11:38,730 --> 00:11:40,060 која од трите сакате да го користите. 203 00:11:40,060 --> 00:11:41,900 Така како ние да се одлучи кој еден? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Ние генерално се користат за телефонска линија ако знаеме колку пати сакаме да iterate 206 00:11:48,790 --> 00:11:53,650 преку нешто, или колку пати ние сакаме да се изврши една задача. 207 00:11:53,650 --> 00:11:58,830 Ние ги користиме додека петелки, ако ние треба некои услов за да биде вистина да продолжи да работи. 208 00:11:58,830 --> 00:12:03,730 И ние ги користиме направите додека многу слична на , но ние сакаме нашиот код да се кандидира на 209 00:12:03,730 --> 00:12:04,880 најмалку еден време. 210 00:12:04,880 --> 00:12:09,410 >> Значи направите додека, што е во не ќе секогаш работи барем едно време. 211 00:12:09,410 --> 00:12:13,120 Каде што, со време, тоа не може да работи на сите ако 212 00:12:13,120 --> 00:12:15,490 состојба не е задоволен. 213 00:12:15,490 --> 00:12:16,740 Било какви прашања со тоа? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> Па структурата на за телефонска линија. 216 00:12:22,860 --> 00:12:23,620 Вие момци имаат сите виделе ова. 217 00:12:23,620 --> 00:12:25,320 Можете да се иницијализира. 218 00:12:25,320 --> 00:12:26,600 Имаш некој вид на состојба. 219 00:12:26,600 --> 00:12:32,340 Така, на пример, ние може да се иницијализира како за i е еднаква на 0. 220 00:12:32,340 --> 00:12:34,040 i е помал од 10. 221 00:12:34,040 --> 00:12:35,442 И јас ++. 222 00:12:35,442 --> 00:12:39,010 Многу едноставна дека ние сме направиле. 223 00:12:39,010 --> 00:12:42,210 >> За време јамка, слично на тоа, што треба да имаат некој вид на иницијализација, 224 00:12:42,210 --> 00:12:44,980 некој вид на состојба, и некој вид на ажурирање. 225 00:12:44,980 --> 00:12:51,990 За да можеме да ја оствариме нашата за телефонска линија, исто така, како додека јамка со користење на овој. 226 00:12:51,990 --> 00:12:56,000 И слично со направите додека јамка, ние може да има некои иницијализација, 227 00:12:56,000 --> 00:12:58,640 изврши нешто, ажурирање, и потоа да ги проверите состојба. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> Па сега функции. 230 00:13:05,140 --> 00:13:06,460 Ние се стави сето заедно. 231 00:13:06,460 --> 00:13:10,140 Ние можеби ќе сакате да се напише некои вид на функција. 232 00:13:10,140 --> 00:13:12,790 Заедничка функција која може да веќе видовме е главен. 233 00:13:12,790 --> 00:13:13,770 Главните е во функција. 234 00:13:13,770 --> 00:13:16,160 Таа има враќање тип, int. 235 00:13:16,160 --> 00:13:18,470 Таа има името на функцијата, главен. 236 00:13:18,470 --> 00:13:20,810 И има аргументи, argc и argv. 237 00:13:20,810 --> 00:13:24,040 Значи главната е само функција. 238 00:13:24,040 --> 00:13:27,230 >> Други функции може да се користат, printf-- printf е function-- 239 00:13:27,230 --> 00:13:29,330 GetInt, toupper. 240 00:13:29,330 --> 00:13:32,010 Но овие се случи да се спроведува за нас 241 00:13:32,010 --> 00:13:33,270 некој вид на библиотека. 242 00:13:33,270 --> 00:13:37,400 Ако вие момци се сеќавам, вклучувајќи овој CS50.h библиотека или 243 00:13:37,400 --> 00:13:38,510 стандард I / O библиотека. 244 00:13:38,510 --> 00:13:39,200 Да, прашање? 245 00:13:39,200 --> 00:13:41,610 >> ПУБЛИКАТА: Дали е главен само својствени в? 246 00:13:41,610 --> 00:13:44,740 Го прави тоа само вид на [Беззвучен]? 247 00:13:44,740 --> 00:13:47,370 >> ЗВУЧНИЦИ 1: Прашањето е ако главната е вродено во в. 248 00:13:47,370 --> 00:13:51,460 И да, сите функции имаат главната функција. 249 00:13:51,460 --> 00:13:55,290 Тоа е вид на неопходни за компјутер да знаат каде да се почне 250 00:13:55,290 --> 00:13:55,993 водење на код. 251 00:13:55,993 --> 00:13:58,108 >> ПУБЛИКАТА: Значи, вие не би [Беззвучен]? 252 00:13:58,108 --> 00:13:59,480 >> ЗВУЧНИЦИ 1: Не 253 00:13:59,480 --> 00:14:00,760 Било какви други прашања? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Кул. 256 00:14:04,770 --> 00:14:08,050 Па како можете да го користите функцијата што е напишано за вас, можете исто така да 257 00:14:08,050 --> 00:14:10,380 напишете своја сопствена функција. 258 00:14:10,380 --> 00:14:17,050 Ова е функција што некој имаат напишано за пресметување на волумен 259 00:14:17,050 --> 00:14:18,395 на q, на пример. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Има враќање тип овде, во овој случај int, нашите име на функција q и нашите 262 00:14:29,500 --> 00:14:31,360 листа на параметри. 263 00:14:31,360 --> 00:14:34,550 >> И се напомене дека треба да се пишува на податоци тип на параметарот дека сакате да го 264 00:14:34,550 --> 00:14:38,660 користат или на друго место на функцијата не знам каков вид на 265 00:14:38,660 --> 00:14:41,650 параметар треба да се прифаќа. 266 00:14:41,650 --> 00:14:48,110 Значи, во овој случај, ние сакаме цел број како наш придонес. 267 00:14:48,110 --> 00:14:50,390 Па зошто можеби сакаме да го користите функции? 268 00:14:50,390 --> 00:14:52,800 >> Прво на сите, одлично за организацијата. 269 00:14:52,800 --> 00:14:56,350 Тие им помагаат на растури вашиот код во поорганизирани парчиња и го 270 00:14:56,350 --> 00:14:57,960 полесно за читање. 271 00:14:57,960 --> 00:14:59,760 Поедноставување. 272 00:14:59,760 --> 00:15:01,740 Ова е добро за дизајн. 273 00:15:01,740 --> 00:15:04,570 Кога сте читање на дел од кодот и главната функција е навистина, 274 00:15:04,570 --> 00:15:07,750 навистина долго, тоа би можело да биде потешко да се Причината за тоа што се случува. 275 00:15:07,750 --> 00:15:11,710 Па ако го прекине во функции, тоа може да биде полесно за читање. 276 00:15:11,710 --> 00:15:12,750 И повторна употреба-способност. 277 00:15:12,750 --> 00:15:16,940 Ако имате парче од код кој е се се нарекува или се кандидира повеќе пати, 278 00:15:16,940 --> 00:15:20,690 наместо препишување тој код 10 пати во вашата главна функција, може да 279 00:15:20,690 --> 00:15:21,440 сакаат да го повторна употреба. 280 00:15:21,440 --> 00:15:25,740 А потоа секој пат кога ќе треба да го користат тоа парче код, јавете се на функција. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> Па сега ако ние се сеќавам назад до нула, ние, исто така, зборуваше за неколку концепти, 283 00:15:35,380 --> 00:15:37,680 еден од кои е нишките. 284 00:15:37,680 --> 00:15:41,120 Нишка е концептот на повеќе секвенци на кодот 285 00:15:41,120 --> 00:15:43,040 извршување во исто време. 286 00:15:43,040 --> 00:15:47,490 Па се сетам на еден ден, каде Дејвид имаше вие момци брои исклучување на бројот на 287 00:15:47,490 --> 00:15:48,440 луѓе во собата. 288 00:15:48,440 --> 00:15:50,550 >> Во суштина, она што се случува на е на сите вас момци беа 289 00:15:50,550 --> 00:15:52,370 водење посебна теми. 290 00:15:52,370 --> 00:15:55,540 И оние теми кои доаѓаат заедно да се добие некој вид на одговор. 291 00:15:55,540 --> 00:15:58,890 Слично на тоа, во самиот почеток, кога имате повеќе sprites, можеби 292 00:15:58,890 --> 00:16:01,070 имаат мачка и куче. 293 00:16:01,070 --> 00:16:08,770 И тие ќе бидат истовремено работи на свој скрипти. 294 00:16:08,770 --> 00:16:10,020 Тоа е пример за нишките. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> А другиот концепт кој беше воведен во нула беше настани. 297 00:16:18,000 --> 00:16:22,550 И настани се кога повеќе делови од Вашиот код комуницираат едни со други. 298 00:16:22,550 --> 00:16:26,840 Во нула, ова беше кога сте користеле емитува контрола и Кога 299 00:16:26,840 --> 00:16:29,500 Добијат блокови. 300 00:16:29,500 --> 00:16:35,170 >> И, исто така, во Проблем Постави 4, видовме малку на настани, како и. 301 00:16:35,170 --> 00:16:38,250 Вие момци може да се користат библиотеката Gevent. 302 00:16:38,250 --> 00:16:42,450 И имаше функција waitForClick во кој сте биле на чекање 303 00:16:42,450 --> 00:16:44,300 за на корисникот да кликнете. 304 00:16:44,300 --> 00:16:47,870 И вашиот клик, во овој случај, ќе биде случај и да чекаат за клик е вашиот 305 00:16:47,870 --> 00:16:49,120 настан управувачот. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> И, исто така, во текот на водење на вашиот psets и работат на вашиот psets, можете 308 00:16:58,630 --> 00:17:01,920 би можело да дојде во контакт со некои од овие команди. 309 00:17:01,920 --> 00:17:05,579 Тоа е она што сте ја внеле во вашиот терминален прозорец или што прозорец 310 00:17:05,579 --> 00:17:12,119 кој се појавува на вашиот g уреди за, во суштина, отидете на вашиот компјутер. 311 00:17:12,119 --> 00:17:19,440 >> Така на пример, ЛС листи содржината на директориумот. 312 00:17:19,440 --> 00:17:22,510 Направи директориум создава нова папка. 313 00:17:22,510 --> 00:17:24,819 ЦД, промена директориум. 314 00:17:24,819 --> 00:17:28,400 РМ, се отстранат, брише датотеката или некои директориум. 315 00:17:28,400 --> 00:17:31,050 А потоа отстранете директориум отстранува директориум. 316 00:17:31,050 --> 00:17:32,300 >> ПУБЛИКАТА: [Беззвучен]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> ЗВУЧНИЦИ 1: Да, секако. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 Жал ми е, прашањето е, ако би предложиле ставајќи ова 321 00:17:46,040 --> 00:17:48,840 на измамник лист. 322 00:17:48,840 --> 00:17:49,440 Тоа би можело да помогне. 323 00:17:49,440 --> 00:17:51,490 Ако имате соба, можете да го облечете. 324 00:17:51,490 --> 00:17:56,170 Тоа е, исто така, само генерално е доволно добар да се запамети, бидејќи кога ќе го користите 325 00:17:56,170 --> 00:17:59,060 можеби ќе сакате да се само имаат мемориран. 326 00:17:59,060 --> 00:18:02,750 Тоа ќе го направи вашиот живот многу полесно. 327 00:18:02,750 --> 00:18:04,000 Дали одговорам на вашето прашање? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> Па сега, ние разговаравме малку кратко за библиотеките. 330 00:18:14,290 --> 00:18:18,570 Но двете главни оние кои ние сме биле користење на досега во тек се 331 00:18:18,570 --> 00:18:20,860 стандард I / O и cs50. 332 00:18:20,860 --> 00:18:25,410 Каков вид на работи се вклучени во стандардот I / O библиотека? 333 00:18:25,410 --> 00:18:28,410 >> Да, досега сум користел printf. 334 00:18:28,410 --> 00:18:31,150 Во cs50, ние сме се користи GetInt и GetString. 335 00:18:31,150 --> 00:18:37,200 И податоци за видот низа, исто така, се случува да се прогласи во оваа cs50 библиотека. 336 00:18:37,200 --> 00:18:40,250 Ние ќе разговараме малку повеќе во длабочина за како библиотеки работат и како тие 337 00:18:40,250 --> 00:18:41,870 комуницирате со остатокот од вашиот код. 338 00:18:41,870 --> 00:18:46,220 Но, тие се двете главни оние кои ние доаѓаат во контакт со досега во 339 00:18:46,220 --> 00:18:48,430 курсот. 340 00:18:48,430 --> 00:18:50,050 >> Типови. 341 00:18:50,050 --> 00:18:58,120 Овие се добри да се сетам на тоа колку секој тип е претставен од страна на или како 342 00:18:58,120 --> 00:19:02,840 многу бајти секоја од типот requires-- 343 00:19:02,840 --> 00:19:04,990 int, 4 бајти; знак, 1 бајт. 344 00:19:04,990 --> 00:19:06,550 Плови е 4 бајти. 345 00:19:06,550 --> 00:19:07,782 Што е двојно? 346 00:19:07,782 --> 00:19:09,032 >> ПУБЛИКАТА: [Беззвучен]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> ЗВУЧНИЦИ 1: Да, така плови но се удвои големината. 349 00:19:16,240 --> 00:19:17,150 Што во врска со долго? 350 00:19:17,150 --> 00:19:18,400 >> ПУБЛИКАТА: [Беззвучен]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> ЗВУЧНИЦИ 1: Добро. 353 00:19:24,680 --> 00:19:25,410 Што е време? 354 00:19:25,410 --> 00:19:26,660 >> ПУБЛИКАТА: [Беззвучен]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> ЗВУЧНИЦИ 1: Да, двојно е int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Да. 359 00:19:34,705 --> 00:19:36,100 >> ПУБЛИКАТА: [Беззвучен]. 360 00:19:36,100 --> 00:19:38,030 >> ЗВУЧНИЦИ 1: Долги [Беззвучен]. 361 00:19:38,030 --> 00:19:41,860 И потоа долго долго е двојно. 362 00:19:41,860 --> 00:19:42,814 >> ПУБЛИКАТА: Не, не. 363 00:19:42,814 --> 00:19:47,107 А долго е само int. 364 00:19:47,107 --> 00:19:50,910 Тоа зависи од архитектура пред [Беззвучен] 365 00:19:50,910 --> 00:19:52,922 и int имаат иста големина. 366 00:19:52,922 --> 00:19:54,172 [Беззвучен]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> ЗВУЧНИЦИ 1: Значи долга и еден int се исти. 369 00:20:00,920 --> 00:20:02,943 И потоа долго долго е двојно int. 370 00:20:02,943 --> 00:20:03,910 Кул. 371 00:20:03,910 --> 00:20:05,550 И тогаш, што е последен тип? 372 00:20:05,550 --> 00:20:06,510 >> ПУБЛИКАТА: покажувач. 373 00:20:06,510 --> 00:20:10,350 >> ЗВУЧНИЦИ 1: Да, така научивме малку за совети. 374 00:20:10,350 --> 00:20:14,015 И без оглед на она што покажувачот е покажувајќи to-- тоа би можело да биде знак ѕвезда 375 00:20:14,015 --> 00:20:15,880 или int star-- 376 00:20:15,880 --> 00:20:20,530 тоа е секогаш 4 бајти за покажувач. 377 00:20:20,530 --> 00:20:21,633 Прашања во врска со тоа? 378 00:20:21,633 --> 00:20:22,116 Да? 379 00:20:22,116 --> 00:20:24,531 >> ПУБЛИКАТА: [Беззвучен]? 380 00:20:24,531 --> 00:20:29,530 >> ЗВУЧНИЦИ 1: Значи долга и int се истата во оваа cs50 апаратот. 381 00:20:29,530 --> 00:20:32,302 >> ПУБЛИКАТА: Апаратот се целосно менливи. 382 00:20:32,302 --> 00:20:33,510 >> ЗВУЧНИЦИ 1: Да. 383 00:20:33,510 --> 00:20:36,610 Па потоа долго долго е двојно еден int. 384 00:20:36,610 --> 00:20:39,250 >> ПУБЛИКАТА: Ова е 32 битен? 385 00:20:39,250 --> 00:20:40,620 >> ЗВУЧНИЦИ 1: 32-битна, да. 386 00:20:40,620 --> 00:20:43,572 >> ПУБЛИКАТА: Значи [Беззвучен]? 387 00:20:43,572 --> 00:20:46,790 >> ЗВУЧНИЦИ 1: Да, ако не е експлицитно се каже, 388 00:20:46,790 --> 00:20:47,870 треба да преземе 32-битна. 389 00:20:47,870 --> 00:20:50,040 >> ПУБЛИКАТА: Тоа ќе каже нешто како претпоставувајќи дека 390 00:20:50,040 --> 00:20:51,498 архитектура како апаратот. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 За 64 битна, единствените нешта што промени се копнее и совети. 393 00:21:01,710 --> 00:21:05,614 Тие и двете [Беззвучен]. 394 00:21:05,614 --> 00:21:06,590 >> ЗВУЧНИЦИ 1: Да? 395 00:21:06,590 --> 00:21:07,566 >> ПУБЛИКАТА: Прашање. 396 00:21:07,566 --> 00:21:10,982 Така, на еден од практиката квизови, тоа прашува за една непотпишана int. 397 00:21:10,982 --> 00:21:15,374 Па, како ќе се утврди дека од int [Беззвучен]? 398 00:21:15,374 --> 00:21:18,140 >> ЗВУЧНИЦИ 1: Во непотпишана во е, исто така, 4 бајти. 399 00:21:18,140 --> 00:21:21,172 Но, она што е различно за склучен int и непотпишана int? 400 00:21:21,172 --> 00:21:22,422 >> ПУБЛИКАТА: [Беззвучен]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> ЗВУЧНИЦИ 1: Право. 403 00:21:25,630 --> 00:21:27,570 Еден може да претставуваат негативни вредности. 404 00:21:27,570 --> 00:21:28,580 Но, како тоа да го направи тоа? 405 00:21:28,580 --> 00:21:30,536 >> ПУБЛИКАТА: [Беззвучен]. 406 00:21:30,536 --> 00:21:36,370 >> ЗВУЧНИЦИ 1: Да, таа заштедува 1 малку да претставуваат знак. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Потпишаниот има една малку дека претставува знак. 409 00:21:45,040 --> 00:21:48,886 И непотпишана само е за сите позитивни. 410 00:21:48,886 --> 00:21:50,365 >> ПУБЛИКАТА: Добро. 411 00:21:50,365 --> 00:21:54,230 Така да се каже дека двојно е двапати од големината на плови? 412 00:21:54,230 --> 00:21:58,202 >> ЗВУЧНИЦИ 1: Двоен е двапати големина на плови, да. 413 00:21:58,202 --> 00:22:01,639 >> ПУБЛИКАТА: Како покажувач на долго долго [Беззвучен]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> ЗВУЧНИЦИ 1: Значи, прашањето е како не на покажувачот на долг long-- 416 00:22:10,870 --> 00:22:13,800 како е тоа само четири бајти кога долго долго својот 8 бајти. 417 00:22:13,800 --> 00:22:17,310 Значи се сеќавам она што е покажувач, во суштина, на самиот база вредност. 418 00:22:17,310 --> 00:22:19,046 >> ПУБЛИКАТА: [Беззвучен]. 419 00:22:19,046 --> 00:22:22,670 >> ЗВУЧНИЦИ 1: Да, така покажувач е само мемориска локација. 420 00:22:22,670 --> 00:22:28,040 Па тоа не е важно колку простор дека покажувачот покажува кон. 421 00:22:28,040 --> 00:22:32,060 Тоа само треба 4 бајти да ги пратите на тој мемориска локација. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Било какви други прашања? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Кул. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> Па последното нешто што треба е стандарден излез. 428 00:22:47,460 --> 00:22:51,020 Вие треба да ги користите често доволно што може да се сети. 429 00:22:51,020 --> 00:22:54,800 Но, ова е кога ние ги користиме printf, на пример. 430 00:22:54,800 --> 00:22:59,260 И ние имаме овие променливи кои биле повикани формат кодови. 431 00:22:59,260 --> 00:23:03,910 >> Значи проценти в знак, проценти јас за int, и ние исто така може да се користи проценти г. 432 00:23:03,910 --> 00:23:05,130 Тоа е истото. 433 00:23:05,130 --> 00:23:08,200 Но, општо земено, во CS50 ние обидете да го користите проценти i. 434 00:23:08,200 --> 00:23:09,860 Ѓ проценти за плови. 435 00:23:09,860 --> 00:23:15,620 Проценти ld за долго долго и проценти за стринг. 436 00:23:15,620 --> 00:23:18,550 >> Слично на тоа, ние сме биле со помош на неколку на овие бегство секвенци. 437 00:23:18,550 --> 00:23:22,431 На пример, обратна коса црта n за нов ред. 438 00:23:22,431 --> 00:23:26,910 Ова е само за кога сте форматирање кодот за печатење ѓ. 439 00:23:26,910 --> 00:23:27,260 Да? 440 00:23:27,260 --> 00:23:28,906 >> ПУБЛИКАТА: Која е г проценти за? 441 00:23:28,906 --> 00:23:31,850 >> ЗВУЧНИЦИ 1: Значи, прашањето е она што е процент г за? 442 00:23:31,850 --> 00:23:33,270 Проценти d е за ints. 443 00:23:33,270 --> 00:23:37,392 Процент d и проценти i се исти. 444 00:23:37,392 --> 00:23:41,130 >> ПУБЛИКАТА: Што е разликата помеѓу обратна коса црта n и обратна коса црта R? 445 00:23:41,130 --> 00:23:45,300 >> ЗВУЧНИЦИ 1: Значи, прашањето е што е Разликата меѓу реакција n и 446 00:23:45,300 --> 00:23:48,615 реакција R? 447 00:23:48,615 --> 00:23:50,906 Мислам дека обратна коса црта R is-- 448 00:23:50,906 --> 00:23:54,340 >> ПУБЛИКАТА: Значи обратна коса црта R подразбира само се враќа на почетокот на линијата 449 00:23:54,340 --> 00:23:56,670 без всушност да одат на нова линија. 450 00:23:56,670 --> 00:24:01,000 Значи, ако сте печатење обратна коса црта r и ви да се вратиме на почетокот на линијата 451 00:24:01,000 --> 00:24:04,005 тогаш печати повеќе нешта, пребрише на работи кои се веќе на 452 00:24:04,005 --> 00:24:04,390 [Беззвучен]. 453 00:24:04,390 --> 00:24:06,725 Каде што, n всушност оди на нова линија и оди на [Беззвучен]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> ЗВУЧНИЦИ 1: Па, било какви други прашања? 456 00:24:13,915 --> 00:24:15,430 Во ред. 457 00:24:15,430 --> 00:24:18,617 Одам да го предаде на Дан, кој ќе продолжи. 458 00:24:18,617 --> 00:24:25,078 >> [Аплауз] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> ДАН: Сите Righty. 461 00:25:09,720 --> 00:25:18,590 Па јас ќе се зборува за уште еден широк спектар на идеи од класа кои се 462 00:25:18,590 --> 00:25:23,220 околу претставник на два недела и почетокот на тринеделниот поаѓање 463 00:25:23,220 --> 00:25:28,690 со леење, што е само начин на третирање на вредноста на одреден тип како 464 00:25:28,690 --> 00:25:30,830 вредност од различен тип. 465 00:25:30,830 --> 00:25:34,110 За да можеме да го направите ова со знаци на ints, лебди на ints, и 466 00:25:34,110 --> 00:25:35,360 долго копнее да се зголеми двојно. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Сите овие работи може да се користи како начин за лекување на некои нумеричка вредност 469 00:25:44,500 --> 00:25:48,370 минус знак како некои други нумеричка вредност. 470 00:25:48,370 --> 00:25:54,480 Па така постојат некои проблеми со ова, Се разбира, кој доаѓа кога ќе го дадат 471 00:25:54,480 --> 00:25:57,860 работи како плови на ints. 472 00:25:57,860 --> 00:26:00,500 Значи ова е малку чудно. 473 00:26:00,500 --> 00:26:03,170 Имаме плови што е 1,31. 474 00:26:03,170 --> 00:26:05,220 Ние го множи со 10.000. 475 00:26:05,220 --> 00:26:08,380 А потоа ние го испечатите како int. 476 00:26:08,380 --> 00:26:09,630 Она што го прави овој резултат? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10.000 пати 1,31. 479 00:26:14,020 --> 00:26:18,761 Па 13.000, е дека се погоди? 480 00:26:18,761 --> 00:26:20,685 >> ПУБЛИКАТА: Мислам дека тоа е 10.000. 481 00:26:20,685 --> 00:26:24,234 >> ДАН: Значи јас сум таа множење со 10.000 пред јас да сум тоа кастинг. 482 00:26:24,234 --> 00:26:25,202 >> ПУБЛИКАТА: О. 483 00:26:25,202 --> 00:26:27,622 Немаше ли да постојат еден 9 и некои броеви 0? 484 00:26:27,622 --> 00:26:29,270 >> ДАН: Може да имаат некои чудни бројки. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Па право, тоа е 1,3 пати 10.000. 487 00:26:37,670 --> 00:26:40,040 Па тоа е 13.000. 488 00:26:40,040 --> 00:26:41,313 И овој екстра weird-- 489 00:26:41,313 --> 00:26:42,160 >> ПУБЛИКАТА: 13.100. 490 00:26:42,160 --> 00:26:42,650 >> ДАН: 13.100. 491 00:26:42,650 --> 00:26:44,910 Ви благодариме, Роб. 492 00:26:44,910 --> 00:26:46,610 И овој екстра weirdness-- 493 00:26:46,610 --> 00:26:48,060 овој 9,9-- 494 00:26:48,060 --> 00:26:53,860 е едноставно поради тоа кастинг заврши заокружување надолу каде 495 00:26:53,860 --> 00:26:55,394 тоа не треба да има. 496 00:26:55,394 --> 00:26:55,871 Да. 497 00:26:55,871 --> 00:26:58,256 >> ПУБЛИКАТА: кастингот се случува по нешто друго? 498 00:26:58,256 --> 00:27:03,865 >> ДАН: Значи, бидејќи имам во печат, што го прави ова множење пред да 499 00:27:03,865 --> 00:27:05,230 го прави ова кастинг. 500 00:27:05,230 --> 00:27:06,140 >> ПУБЛИКАТА: [Беззвучен]. 501 00:27:06,140 --> 00:27:11,350 >> Дан: Јас мислам дека ќе го дадат првиот, Да, кој ќе биде 10.000. 502 00:27:11,350 --> 00:27:12,610 Нешто друго? 503 00:27:12,610 --> 00:27:13,330 Кул. 504 00:27:13,330 --> 00:27:16,344 Значи ова е 13.099. 505 00:27:16,344 --> 00:27:17,840 Зошто се случи ова? 506 00:27:17,840 --> 00:27:18,900 Непрецизност. 507 00:27:18,900 --> 00:27:21,020 >> Пловки не се совршени. 508 00:27:21,020 --> 00:27:27,550 Тие само може да претставуваат броеви на одреден број на значајни личности. 509 00:27:27,550 --> 00:27:35,120 Значи, ако ние печати 8 потпишувањето смокви на ова плови, ние се еден вид на 510 00:27:35,120 --> 00:27:36,800 грди бараат број. 511 00:27:36,800 --> 00:27:45,580 А тоа е затоа 1,31 не може точно да биде претставена со едноставен 512 00:27:45,580 --> 00:27:49,000 овластувањата на две во машина. 513 00:27:49,000 --> 00:27:53,530 Па тој завршува земајќи најблиску Претпоставувам, која завршува 514 00:27:53,530 --> 00:27:55,710 да се биде малку на ниско ниво. 515 00:27:55,710 --> 00:27:57,730 Смисла? 516 00:27:57,730 --> 00:27:59,110 Во ред. 517 00:27:59,110 --> 00:28:05,840 >> Сега, вклучен е еден поинаков начин на прави условно извештаи, каде што сите 518 00:28:05,840 --> 00:28:09,900 ние се грижиме за е еден променлива. 519 00:28:09,900 --> 00:28:16,570 Така што во овој конкретен пример, ние сме добивање на цел број од корисникот. 520 00:28:16,570 --> 00:28:21,070 А потоа ние сме во потрага на она што е цел број. 521 00:28:21,070 --> 00:28:23,500 Веројатно, тоа е број помеѓу еден и четири. 522 00:28:23,500 --> 00:28:24,800 Тоа е она што бараме. 523 00:28:24,800 --> 00:28:28,450 >> Така да се направи префрлување на името на променливата. 524 00:28:28,450 --> 00:28:34,290 Потоа ќе се постави случаи на можна цени тоа би можело да биде. 525 00:28:34,290 --> 00:28:37,730 Така случај еден, велат дека тоа е ниска. 526 00:28:37,730 --> 00:28:41,080 А потоа ќе се скрши да се излезе на прекинувачот состојба, па 527 00:28:41,080 --> 00:28:43,270 не продолжувам да одам. 528 00:28:43,270 --> 00:28:44,830 >> Во следните case-- 529 00:28:44,830 --> 00:28:46,940 така случај два и случајот three-- 530 00:28:46,940 --> 00:28:51,920 ако тоа е случај два тоа само се спушти до на првата линија на кодот го гледа како со 531 00:28:51,920 --> 00:28:55,400 случај три додека не го гледа пауза. 532 00:28:55,400 --> 00:29:00,430 Така причина што се случај еден да само печати ниска е затоа што 533 00:29:00,430 --> 00:29:01,890 имаат оваа пауза тука. 534 00:29:01,890 --> 00:29:05,360 Ако јас, да речеме, игнорира овој break-- ако јас фрли оваа breakaway-- 535 00:29:05,360 --> 00:29:09,740 тоа ќе печати ниско, а потоа тоа ќе печати средината, а потоа тоа ќе се скрши. 536 00:29:09,740 --> 00:29:12,200 >> Па паузи се важен дел на прекинувачот услови и 537 00:29:12,200 --> 00:29:14,340 тие треба да бидат таму. 538 00:29:14,340 --> 00:29:20,070 Сите случаи кои не се наведени експлицитно се управувани од страна стандардно 539 00:29:20,070 --> 00:29:26,645 случај во прекинувач и треба да се фрли. 540 00:29:26,645 --> 00:29:31,363 >> ПУБЛИКАТА: Значи: 1, 2, 3, и 4 ќе биде n? 541 00:29:31,363 --> 00:29:33,310 >> ДАН: Вредности дека n може да биде. 542 00:29:33,310 --> 00:29:34,654 Да. 543 00:29:34,654 --> 00:29:35,146 Да? 544 00:29:35,146 --> 00:29:37,606 >> ПУБЛИКАТА: Значи, кога имаш дека [Беззвучен]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> Дан: Можете да печатите ниско, а потоа тоа ќе печати средина, и 547 00:29:46,830 --> 00:29:47,400 тогаш тоа ќе се скрши. 548 00:29:47,400 --> 00:29:50,244 >> ПУБЛИКАТА: Зошто тоа ќе печати средината ако [Беззвучен]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> ДАН: Значи сè под еден случај пред пауза потпаѓа под. 551 00:30:00,550 --> 00:30:09,390 Така случај еден печатење е под случај еден како што е оваа следниов печатење. 552 00:30:09,390 --> 00:30:09,890 Да? 553 00:30:09,890 --> 00:30:11,140 >> ПУБЛИКАТА: [Беззвучен]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> ДАН: Значи овој број е само одредена вредност, која ја оваа променлива 556 00:30:22,170 --> 00:30:23,420 може да се земе, нели? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Дали тоа има смисла? 559 00:30:28,490 --> 00:30:28,990 Да. 560 00:30:28,990 --> 00:30:31,490 >> ПУБЛИКАТА: [Беззвучен]? 561 00:30:31,490 --> 00:30:34,130 >> ДАН: Да, случајот двете ќе печати средината и потоа пауза. 562 00:30:34,130 --> 00:30:35,380 >> ПУБЛИКАТА: [Беззвучен]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> ДАН: Мислам дека има? 565 00:30:40,050 --> 00:30:43,855 Она што другите типови на податоци може да ви ги префрлиме? 566 00:30:43,855 --> 00:30:46,320 >> ПУБЛИКАТА: Вие може да се префрлате над било типови на податоци. 567 00:30:46,320 --> 00:30:50,905 Но, тоа само значи ништо повеќе карактери и ints и работи како што, бидејќи 568 00:30:50,905 --> 00:30:55,600 ако сте префрлување во текот на покажувачот што навистина не се направи смисла, 569 00:30:55,600 --> 00:30:59,555 префрлување во текот товари, ако дури и ајде да да го направите тоа, бидејќи на подвижна точка 570 00:30:59,555 --> 00:31:02,840 во прецизноста, вие не би навистина сакате да го направи тоа во секој случај. 571 00:31:02,840 --> 00:31:07,320 Така доста, само ints и знаци и работи како што. 572 00:31:07,320 --> 00:31:12,360 >> ДАН: Да, тоа е кога имаш експлицитна вредности кога знаеш, мислам дека може да биде 573 00:31:12,360 --> 00:31:14,250 дека прекинувачот е всушност корисно. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Добар? 576 00:31:18,990 --> 00:31:21,370 Во ред. 577 00:31:21,370 --> 00:31:26,180 >> Опсег е опсегот што декларирана променлива се протега. 578 00:31:26,180 --> 00:31:32,190 Така што во овој малку парче од код Имам, тоа ќе биде полн со грешки. 579 00:31:32,190 --> 00:31:41,450 А причината е што прогласи оваа int Јас во рамките на опсегот на овој за телефонска линија. 580 00:31:41,450 --> 00:31:46,390 И тогаш јас се обидувам да референца дека јас надвор од тоа за телефонска линија обем. 581 00:31:46,390 --> 00:31:50,330 >> Значи, во основа, може да се размислува за обемот како нешто што ви се изјасни 582 00:31:50,330 --> 00:31:59,750 со внатре сет на големи загради само постои во оние големи загради. 583 00:31:59,750 --> 00:32:04,990 И ако се обидете и ја користат таа променлива надвор од оние големи загради, ќе 584 00:32:04,990 --> 00:32:08,356 добиете грешка од компајлерот. 585 00:32:08,356 --> 00:32:08,812 Да? 586 00:32:08,812 --> 00:32:09,724 >> ПУБЛИКАТА: Значи ова не функционира? 587 00:32:09,724 --> 00:32:11,790 >> ДАН: Ова не функционира, да. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Жици. 590 00:32:18,660 --> 00:32:19,780 Низа на char *. 591 00:32:19,780 --> 00:32:22,250 Тие се исти. 592 00:32:22,250 --> 00:32:25,540 Тие се само совети како да се ликови. 593 00:32:25,540 --> 00:32:33,000 И сите стрингови кои што треба да заврши со обратна коса црта нула, што е само 594 00:32:33,000 --> 00:32:34,410 на в конвенција. 595 00:32:34,410 --> 00:32:36,680 >> Тоа се нарекува NULL терминатор. 596 00:32:36,680 --> 00:32:39,050 И NULL-- 597 00:32:39,050 --> 00:32:41,670 капитал N, главниот град У, главниот град L, главниот град L-- 598 00:32:41,670 --> 00:32:44,290 не е иста како и на NULL терминатор. 599 00:32:44,290 --> 00:32:46,640 Е покажувач. 600 00:32:46,640 --> 00:32:48,280 Ова е карактер. 601 00:32:48,280 --> 00:32:49,530 Тие се многу различни. 602 00:32:49,530 --> 00:32:50,200 Се сеќавам него. 603 00:32:50,200 --> 00:32:52,320 Тоа ќе биде на квиз, веројатно. 604 00:32:52,320 --> 00:32:54,040 Не сум ја видел на квизот. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Да? 607 00:32:58,840 --> 00:33:01,232 >> ПУБЛИКАТА: Значи NULL е, да речеме, на покажувачот? 608 00:33:01,232 --> 00:33:01,995 >> ДАН: Да. 609 00:33:01,995 --> 00:33:05,170 >> ПУБЛИКАТА: Што го прави [Беззвучен]? 610 00:33:05,170 --> 00:33:10,050 >> ДАН: Ако, да речеме, Примерок се вика кога ќе немаат доволно меморија за да се 611 00:33:10,050 --> 00:33:14,400 без оглед на големината си бара, Примерок ќе се врати NULL. 612 00:33:14,400 --> 00:33:19,550 Тоа е, во основа, секогаш кога функцијата е би требало да се врати покажувач, можете 613 00:33:19,550 --> 00:33:22,600 треба да се провери против NULL, бидејќи NULL е прилично good-- 614 00:33:22,600 --> 00:33:25,260 тоа е, на некој начин, ѓубре вредност. 615 00:33:25,260 --> 00:33:27,050 Тоа е нула колку што совети се оди. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Секогаш кога ќе се јавите на функција, која враќа покажувач. 618 00:33:32,250 --> 00:33:35,960 Сте ќе сакате да се провери да се сигурни дека тоа не е NULL покажувач 619 00:33:35,960 --> 00:33:37,760 бидејќи NULL е многу честа. 620 00:33:37,760 --> 00:33:40,160 Тоа е вид на ѓубре враќање. 621 00:33:40,160 --> 00:33:44,902 Па ако нешто не оди право, само се врати NULL наместо тоа. 622 00:33:44,902 --> 00:33:45,898 >> ПУБЛИКАТА: [Беззвучен]? 623 00:33:45,898 --> 00:33:48,922 >> ДАН: Да, и тоа е тоа. 624 00:33:48,922 --> 00:33:51,750 >> ПУБЛИКАТА: [Беззвучен]? 625 00:33:51,750 --> 00:33:52,800 >> ДАН: тоа правописот како оваа. 626 00:33:52,800 --> 00:33:54,150 Тоа е NULL терминатор. 627 00:33:54,150 --> 00:33:56,560 Тоа е со мали букви N-У-L-L ако сте го правопис. 628 00:33:56,560 --> 00:33:59,860 >> ПУБЛИКАТА: И јас само отиде врати и тестирани. 629 00:33:59,860 --> 00:34:03,010 И ако се обидете да се стави подвижна запирка вредност во еден гајтан, тоа ќе се развикам 630 00:34:03,010 --> 00:34:05,916 велејќи изјава бара израз на цел број тип. 631 00:34:05,916 --> 00:34:07,166 >> ДАН: Има да одите. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Но, да, она што беше прашањето повторно? 634 00:34:12,246 --> 00:34:13,496 >> ПУБЛИКАТА: [Беззвучен]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> ДАН: Значи, капиталот N, главниот град У, главниот град L, главниот град L е вистински в работа. 637 00:34:23,679 --> 00:34:29,719 Тоа е NULL покажувач и ќе биде во само да се третираат како такви. 638 00:34:29,719 --> 00:34:33,530 Вие никогаш нема да се обиде и да ги запишува на NULL карактер и да видиме кој било 639 00:34:33,530 --> 00:34:35,630 друг начин од ова. 640 00:34:35,630 --> 00:34:36,610 Да? 641 00:34:36,610 --> 00:34:42,490 >> ПУБЛИКАТА: Значи се врати во знак макс или нешто во белешките, би го 642 00:34:42,490 --> 00:34:43,960 отелотворуваат истата функција како [Беззвучен]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> ПУБЛИКАТА: Значи ви се однесуваат на враќање знак максимум од getchar, или 645 00:34:54,949 --> 00:34:55,444 што и да е? 646 00:34:55,444 --> 00:34:55,940 >> ПУБЛИКАТА: Да. 647 00:34:55,940 --> 00:34:58,620 >> ПУБЛИКАТА: Да, па воопшто термин за сите тие работи 648 00:34:58,620 --> 00:34:59,920 се Сентинел вредности. 649 00:34:59,920 --> 00:35:03,640 Значи како се враќа int макс од GetInt и знак максимум од getchar, тоа е 650 00:35:03,640 --> 00:35:06,010 би требало да биде како, добро, ако овие работи се враќаат во нас, 651 00:35:06,010 --> 00:35:07,210 нешто не беше во ред. 652 00:35:07,210 --> 00:35:09,950 >> За покажувачи, ние едноставно се случи да имаат оваа стража вредност дека секој 653 00:35:09,950 --> 00:35:10,750 се согласува на. 654 00:35:10,750 --> 00:35:13,210 И ова е нешто што можете да се врати кога работите одат наопаку. 655 00:35:13,210 --> 00:35:15,910 Така знак максимум е она што го користите да претставуваат нешто 656 00:35:15,910 --> 00:35:18,100 како NULL или getchar. 657 00:35:18,100 --> 00:35:23,420 >> ПУБЛИКАТА: Значи, ако сте тестирање getchar, може да ви само се стави NULL? 658 00:35:23,420 --> 00:35:23,910 Кои ќе се направи разлика? 659 00:35:23,910 --> 00:35:25,400 >> Дан: Не може само да се провери NULL. 660 00:35:25,400 --> 00:35:30,130 Ќе треба да се провери знак макс бидејќи повратната вредност од функцијата е 661 00:35:30,130 --> 00:35:35,416 a го карактерот на покажувачот. 662 00:35:35,416 --> 00:35:35,888 Да? 663 00:35:35,888 --> 00:35:38,248 >> ПУБЛИКАТА: Ова прашање бара за стринг должина. 664 00:35:38,248 --> 00:35:40,136 Дали тоа вклучува NULL карактер? 665 00:35:40,136 --> 00:35:41,000 >> Дан: Не 666 00:35:41,000 --> 00:35:45,930 И тоа е всушност како стринг должина знае да престане, бидејќи тоа оди преку 667 00:35:45,930 --> 00:35:49,070 Вашиот низа на карактери до го гледа е нулти карактер. 668 00:35:49,070 --> 00:35:51,030 И тогаш тоа е како сите право, јас сум направено. 669 00:35:51,030 --> 00:35:52,130 >> ПУБЛИКАТА: [Беззвучен] пет? 670 00:35:52,130 --> 00:35:53,990 >> ДАН: Здраво ќе биде пет. 671 00:35:53,990 --> 00:35:55,240 Да. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 Па низи се континуирано блокови од меморијата. 674 00:36:02,880 --> 00:36:08,480 Тие имаат брз пристап со кажување на името на низата, а потоа, во кадрава 675 00:36:08,480 --> 00:36:16,720 протези, без оглед на индекс сакате да одите да, тие се индексирани од нула преку 676 00:36:16,720 --> 00:36:20,100 на должината на низата минус 1. 677 00:36:20,100 --> 00:36:23,070 >> И тие се декларирани од видот на нешто што сте чување во 678 00:36:23,070 --> 00:36:29,750 низа, името на низата, а потоа без оглед на големината е дека низа. 679 00:36:29,750 --> 00:36:36,660 Значи ова е знак низа со должина од шест дека има овие вредности. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Да? 682 00:36:42,700 --> 00:36:43,950 >> ПУБЛИКАТА: [Беззвучен]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> ДАН: Да. 685 00:36:48,460 --> 00:36:51,340 >> ПУБЛИКАТА: [Беззвучен]? 686 00:36:51,340 --> 00:36:56,700 >> ДАН: Ако имате она што се случува во низата веќе направени. 687 00:36:56,700 --> 00:37:02,260 Па може да се определи тоа, наместо како што е, да речеме, знак, без оглед на името на вашиот 688 00:37:02,260 --> 00:37:12,200 низа е, празни загради еднаква на кадрава подготвуваат H запирка Е запирка L L запирка запирка 689 00:37:12,200 --> 00:37:16,290 О запирка NULL карактер и кадрава голема заграда. 690 00:37:16,290 --> 00:37:18,180 Тоа, исто така, ќе работат како декларација. 691 00:37:18,180 --> 00:37:20,886 >> ПУБЛИКАТА: [Беззвучен]? 692 00:37:20,886 --> 00:37:23,110 >> ДАН: Тогаш ви треба да имаат големината веќе направени. 693 00:37:23,110 --> 00:37:23,896 >> ПУБЛИКАТА: [Беззвучен]? 694 00:37:23,896 --> 00:37:25,146 >> ДАН: Да. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 Сите Righty. 697 00:37:32,420 --> 00:37:36,430 Командната линија аргументи се начин на добивање на влез од корисникот, како 698 00:37:36,430 --> 00:37:39,380 аргументи до главна. 699 00:37:39,380 --> 00:37:40,600 Главната зема два аргументи. 700 00:37:40,600 --> 00:37:47,680 Бројот на аргументи, која е донесен заедно командната линија и 701 00:37:47,680 --> 00:37:55,340 низа вектор или стринг низа на сите аргументи. 702 00:37:55,340 --> 00:38:07,840 >> Значи, ако јас, да речеме, се нарекува функција како што се точка 1 од вселената, 2 простор, три, 703 00:38:07,840 --> 00:38:10,110 argc ќе биде 4. 704 00:38:10,110 --> 00:38:17,370 И argv 0 ќе биде точка надвор. 705 00:38:17,370 --> 00:38:19,130 Argv1 ќе биде 1. 706 00:38:19,130 --> 00:38:23,030 argv2 ќе биде 2 argv3 ќе биде 3, во тој конкретен случај. 707 00:38:23,030 --> 00:38:23,310 Да? 708 00:38:23,310 --> 00:38:25,400 >> ПУБЛИКАТА: [Беззвучен]? 709 00:38:25,400 --> 00:38:34,010 >> ДАН: Последниот елемент во низа бидејќи низа е должина argc плус 710 00:38:34,010 --> 00:38:41,050 еден од argb, последниот елемент е NULL покажувач на. 711 00:38:41,050 --> 00:38:42,580 Тоа е argc плус 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Значи во случај дека само што рече, тоа ќе биде argv 0 е точка надвор. 714 00:38:52,150 --> 00:38:56,330 argv 1 е 1. argv2 е 2 argv 3 е 3. 715 00:38:56,330 --> 00:39:03,490 argv 4, која е една поголема од argc ќе биде NULL. 716 00:39:03,490 --> 00:39:04,870 >> И тоа е NULL покажувач. 717 00:39:04,870 --> 00:39:06,590 Да. 718 00:39:06,590 --> 00:39:11,250 А тоа е затоа стринг е на знак ѕвезда е покажувач. 719 00:39:11,250 --> 00:39:14,102 Па затоа мора да бидат од ист тип. 720 00:39:14,102 --> 00:39:14,595 Да? 721 00:39:14,595 --> 00:39:16,074 >> ПУБЛИКАТА: Две прашања. 722 00:39:16,074 --> 00:39:21,004 Значи еден, што е разликата помеѓу ова и GetString други од еден вид 723 00:39:21,004 --> 00:39:22,483 во на корисникот моторот? 724 00:39:22,483 --> 00:39:25,934 И второ, дали е се чуваат во вашите неодамнешни меморија? 725 00:39:25,934 --> 00:39:28,399 Па како, GetString би биде [Беззвучен]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> ДАН: Каде е тоа чуваат? 728 00:39:33,650 --> 00:39:34,905 Не знам каде што е зачувана. 729 00:39:34,905 --> 00:39:40,000 >> ПУБЛИКАТА: Значи, всушност, знаеш како било функционираат ти се јавам тоа е аргументи 730 00:39:40,000 --> 00:39:42,170 се чуваат во стек? 731 00:39:42,170 --> 00:39:46,610 Па argc и argv аргументи до главна и тие се на магацинот, или навистина 732 00:39:46,610 --> 00:39:49,131 над она што мислите како почетокот на магацинот. 733 00:39:49,131 --> 00:39:53,490 Она што беше на другата страна на прашањето? 734 00:39:53,490 --> 00:39:56,821 >> ПУБЛИКАТА: Значи она што е [Беззвучен]? 735 00:39:56,821 --> 00:40:00,990 >> ДАН: Да, тоа е само поинаков начин за добивање на информации од корисникот. 736 00:40:00,990 --> 00:40:06,030 Малку поефикасни и ова ми е тоа е handier за скрипти затоа што 737 00:40:06,030 --> 00:40:10,070 може да помине аргументи за да вашиот главен функција, наместо да се чека 738 00:40:10,070 --> 00:40:13,400 за корисниците ако немаат никакви корисници. 739 00:40:13,400 --> 00:40:16,280 >> ПУБЛИКАТА: И да, се низи ќе биде [Беззвучен]. 740 00:40:16,280 --> 00:40:17,922 Тоа ќе се сместат нешто ви треба. 741 00:40:17,922 --> 00:40:18,834 >> ДАН: Да? 742 00:40:18,834 --> 00:40:21,114 >> ПУБЛИКАТА: [Беззвучен]? 743 00:40:21,114 --> 00:40:27,545 >> ДАН: Да, argv 0 секогаш вклучува дот намали на повикот функција. 744 00:40:27,545 --> 00:40:28,042 Да? 745 00:40:28,042 --> 00:40:29,292 >> ПУБЛИКАТА: [Беззвучен]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> ДАН: Да, секој од аргументите се заврши во NULL карактер, бидејќи тие 748 00:40:37,310 --> 00:40:38,310 се стрингови. 749 00:40:38,310 --> 00:40:40,892 >> ПУБЛИКАТА: [Беззвучен]? 750 00:40:40,892 --> 00:40:44,116 >> ДАН: Да, argv argc е NULL покажувач. 751 00:40:44,116 --> 00:40:45,112 >> ПУБЛИКАТА: [Беззвучен]? 752 00:40:45,112 --> 00:40:47,104 >> ДАН: Oh yeah. 753 00:40:47,104 --> 00:40:48,100 Да, жалам. 754 00:40:48,100 --> 00:40:49,594 >> ПУБЛИКАТА: Значи [Беззвучен]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> ДАН: Значи, прашањето е, ако сте имале командната линија точка намали точка од 1, 2, 757 00:41:16,340 --> 00:41:20,410 би бројот на командната линија аргументи да стојат две или тоа ќе биде три? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> ПУБЛИКАТА: Мислам дека тоа не е е важно. 760 00:41:28,240 --> 00:41:31,370 Имам навика да се каже, ах, ти не помине било командната линија аргументи кога, 761 00:41:31,370 --> 00:41:32,730 Очигледно, наречен функција. 762 00:41:32,730 --> 00:41:37,950 Па јас имаат тенденција да вокално исклучи функција од командната линија 763 00:41:37,950 --> 00:41:40,350 аргументи иако тоа е вклучени во argv. 764 00:41:40,350 --> 00:41:42,600 >> ДАН: Но, ако тоа беше на test-- 765 00:41:42,600 --> 00:41:46,550 yeah-- и, исто така, ако ви кажам нешто како argc еднаква на 3, 766 00:41:46,550 --> 00:41:48,512 ти си во безбедна состојба. 767 00:41:48,512 --> 00:41:49,416 Да? 768 00:41:49,416 --> 00:41:50,666 >> ПУБЛИКАТА: [Беззвучен]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> ДАН: Мислам дека ако наместо на повик на овој во argc и argv низа загради 771 00:42:09,510 --> 00:42:14,350 но се чуваат на ист тип и само се нарекува им нешто различно како 772 00:42:14,350 --> 00:42:16,640 и б, ќе се уште работат? 773 00:42:16,640 --> 00:42:18,790 И се уште ќе работи, ќе just-- 774 00:42:18,790 --> 00:42:21,520 наместо користење argc-- можете да користите и b. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Да? 777 00:42:25,408 --> 00:42:26,658 >> ПУБЛИКАТА: [Беззвучен]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> ДАН: Значи, прашањето е GetString е ќе се сместат меморија во грамада 780 00:42:38,850 --> 00:42:42,280 бидејќи GetString е char *. 781 00:42:42,280 --> 00:42:47,530 Тоа продавници меморија во грамада, бидејќи тоа повикува сега Примерок рамките на реалните 782 00:42:47,530 --> 00:42:49,258 имплементација на GetString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 Добро, се движат натаму. 785 00:42:55,090 --> 00:42:55,950 >> Безбедност. 786 00:42:55,950 --> 00:43:01,090 Така да биде навистина безбеден, ќе се потпира на не еден и ќе им овозможи на никој пристап до сите 787 00:43:01,090 --> 00:43:04,540 на вашите информации, кој е зошто секој гради своите машини, 788 00:43:04,540 --> 00:43:09,580 своите оперативни системи, сите нивни програми од нула, и очигледно 789 00:43:09,580 --> 00:43:13,410 не се поврзете со било кој други машини преку интернет. 790 00:43:13,410 --> 00:43:17,350 Значи компјутери се несигурни. 791 00:43:17,350 --> 00:43:19,200 Тие навистина се. 792 00:43:19,200 --> 00:43:20,940 Ние треба да му верувате на другите луѓе. 793 00:43:20,940 --> 00:43:26,500 >> И идејата за безбедност е тоа што сте се обидува да го ограничи износот на 794 00:43:26,500 --> 00:43:27,540 довербата што ви треба. 795 00:43:27,540 --> 00:43:32,080 И еден од начините да го направите тоа е преку криптографија. 796 00:43:32,080 --> 00:43:34,950 Криптографија е, во суштина, ние имаме тајни. 797 00:43:34,950 --> 00:43:38,880 >> Понекогаш и ние треба да поминат наши тајни заедно со, да речеме, на интернет или 798 00:43:38,880 --> 00:43:39,980 други работи. 799 00:43:39,980 --> 00:43:43,180 И ние не сакаме на луѓето да знаете овие тајни. 800 00:43:43,180 --> 00:43:50,100 Па ние го криптирате наши тајни во начин која се надеваме дека никој не може да дознаам. 801 00:43:50,100 --> 00:43:51,600 >> Па ние used-- 802 00:43:51,600 --> 00:43:54,340 низ текот на оваа class-- 803 00:43:54,340 --> 00:44:00,750 работи како Цезар шифра и [Беззвучен], кои се и многу, многу 804 00:44:00,750 --> 00:44:03,200 несигурни начини на енкрипција на нештата. 805 00:44:03,200 --> 00:44:07,930 Тие се лесно да дознаам што тие и она што вашите тајни се. 806 00:44:07,930 --> 00:44:12,130 Реалниот свет користи многу повеќе Слободна енкрипција шеми. 807 00:44:12,130 --> 00:44:13,880 И ние нема да навлегувам во многу повеќе од тоа. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Дебагирање. 810 00:44:19,430 --> 00:44:20,785 GDB е најдобар. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Одам да стресот на овој повторно. 813 00:44:25,810 --> 00:44:30,920 Користат GDB цело време секој кога имате проблем. 814 00:44:30,920 --> 00:44:36,030 Команди кои се корисни во GDB се пауза, која ќе помине или линија 815 00:44:36,030 --> 00:44:41,330 број, име на функција, во суштина каде во вашиот код ќе сакате да се запре, 816 00:44:41,330 --> 00:44:45,600 и да бидат способни да ја преземат контролата. 817 00:44:45,600 --> 00:44:54,140 >> Печати зема променлива и отпечатоци од што и променлива е во тоа 818 00:44:54,140 --> 00:44:55,990 момент во вашиот извршување. 819 00:44:55,990 --> 00:45:00,130 Следна движи вашиот извршување заедно еден чекор. 820 00:45:00,130 --> 00:45:05,050 И чекор чекори во функција во извршување. 821 00:45:05,050 --> 00:45:10,480 >> Други работи се кандидира, кој е како што всушност се кандидира на вашиот код. 822 00:45:10,480 --> 00:45:16,630 Продолжи презема сите чекори потребни да се дојде до следното брејк. 823 00:45:16,630 --> 00:45:18,300 И постојат многу, многу други. 824 00:45:18,300 --> 00:45:19,040 Изгледа за нив. 825 00:45:19,040 --> 00:45:19,901 Тие се големи. 826 00:45:19,901 --> 00:45:20,863 Да? 827 00:45:20,863 --> 00:45:22,113 >> ПУБЛИКАТА: [Беззвучен]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> ДАН: Да, што е дебагерот. 830 00:45:28,200 --> 00:45:34,230 Па дебагерот е програма која ти овозможува да debug вашата програма. 831 00:45:34,230 --> 00:45:39,931 Тоа не е програма која пронаоѓа грешки за вас, иако тоа би било одлично. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> И последен за мене е од пребарувањето. 834 00:45:46,040 --> 00:45:51,470 Па видови на пребарување, кои ние разговаравме за во оваа класа се линеарно пребарување, 835 00:45:51,470 --> 00:45:55,960 што е само дека ќе се погледне низ секоја елемент на пребарување простор, еден 836 00:45:55,960 --> 00:46:00,410 елемент во еден момент, додека не го најдете она што сте во потрага за или додека не се постигне 837 00:46:00,410 --> 00:46:03,350 на крајот од вашето пребарување простор во кој точка да се каже дека не можете да најдете 838 00:46:03,350 --> 00:46:06,360 елементот дека сте биле барате. 839 00:46:06,360 --> 00:46:13,450 И ова е потребно во најдобар постојана време, која е 0 од 1 и во најлош случај линеарна 840 00:46:13,450 --> 00:46:16,070 време, што е 0 на n. 841 00:46:16,070 --> 00:46:19,250 >> Бинарни пребарување, што треба гадно елементи. 842 00:46:19,250 --> 00:46:24,230 Да одите на средината на вашата елементи, види дали елемент што го барате 843 00:46:24,230 --> 00:46:30,120 е поголем или помал од елементот дека сте во средината. 844 00:46:30,120 --> 00:46:36,510 Тоа е поголем, ќе се каже дека на дното на вашето пребарување простор е вашата 845 00:46:36,510 --> 00:46:41,550 моментална локација, на средината, и ќе го рестартирате процесот. 846 00:46:41,550 --> 00:46:46,150 Ако е помала, ќе се погледне велат дека the-- Да, што има? 847 00:46:46,150 --> 00:46:47,400 >> ПУБЛИКАТА: [Беззвучен]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> ДАН: Да. 850 00:46:54,260 --> 00:46:58,360 Било кој вид на вид и тоа е се изучува во класа е фер игра за тестот. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Смеа] 853 00:47:04,920 --> 00:47:10,260 >> ДАН: И фактот дека не сте имале да го направи тоа за проблем сет, тоа е фер 854 00:47:10,260 --> 00:47:12,420 игра за тестот. 855 00:47:12,420 --> 00:47:15,186 >> ПУБЛИКАТА: Може да одиме над неа како to-- 856 00:47:15,186 --> 00:47:17,052 >> ДАН: Тоа ќе исчезнат во текот. 857 00:47:17,052 --> 00:47:20,496 >> ЗВУЧНИЦИ 2: Актуелната код за [Беззвучен] е на study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Значи, ако се погледне на практиката проблем во страницата на спојување вид 860 00:47:32,680 --> 00:47:35,880 study.cs50.net, таму е кодот за спроведување на спојат вид. 861 00:47:35,880 --> 00:47:38,550 Значи, вие не треба да ја имплементира тоа сами вечерва. 862 00:47:38,550 --> 00:47:42,090 Но, бидете сигурни дека го разбирам, а отколку само да го меморирање. 863 00:47:42,090 --> 00:47:45,035 >> ПУБЛИКАТА: [Беззвучен]? 864 00:47:45,035 --> 00:47:49,720 >> ЗВУЧНИЦИ 2: Страната на спојување вид study.cs50.net, постои пракса 865 00:47:49,720 --> 00:47:53,570 проблем кој, ако кликнете преку проблем, на самиот крај постои 866 00:47:53,570 --> 00:47:56,280 решение, кое е спојување имплементација вид. 867 00:47:56,280 --> 00:47:58,510 Но, бидете сигурни дека го разбирам наместо само да го меморирање 868 00:47:58,510 --> 00:47:59,760 или копирање надолу. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> ПУБЛИКАТА: А совршено валидни проблем за испит ќе биде 871 00:48:06,340 --> 00:48:07,990 нешто како еве листа. 872 00:48:07,990 --> 00:48:12,100 Што значи оваа листа изгледа по еден чекор од селекции вид или 873 00:48:12,100 --> 00:48:13,330 вметнување вид или whatever. 874 00:48:13,330 --> 00:48:14,940 Една целосна повторување на листата. 875 00:48:14,940 --> 00:48:18,530 Па дури и ако не завршуваат потреба да код за тоа, треба да се разбере 876 00:48:18,530 --> 00:48:20,440 доволно за да знам како тоа се случува да се модификација на оваа низа. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> ДАН: Тоа е тоа за мене. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [Аплауз] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Еј секого. 883 00:49:07,410 --> 00:49:08,390 Моето име е Лукас. 884 00:49:08,390 --> 00:49:16,840 Одам да се зборува за рекурзија, сите видовите што научивме, и 885 00:49:16,840 --> 00:49:18,050 малку на сите совети. 886 00:49:18,050 --> 00:49:18,740 Во ред? 887 00:49:18,740 --> 00:49:20,340 Значи прво на сите, рекурзија. 888 00:49:20,340 --> 00:49:22,951 Што значи тоа да се каже дека функција е рекурзивен? 889 00:49:22,951 --> 00:49:24,675 >> ПУБЛИКАТА: се нарекува себеси. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: Добро, се нарекува, да. 891 00:49:26,500 --> 00:49:27,700 Па како оваа слика, на пример. 892 00:49:27,700 --> 00:49:30,280 Тоа е како на сликата во на сликата и така натаму. 893 00:49:30,280 --> 00:49:35,740 Така на пример, може да have-- како Ден што зборуе бинарни пребарување. 894 00:49:35,740 --> 00:49:41,840 Еден начин на кој бинарни пребарување е рекурзивен е фактот дека ти си 895 00:49:41,840 --> 00:49:43,130 се обидува да најде број. 896 00:49:43,130 --> 00:49:44,250 А ти оди кон средината. 897 00:49:44,250 --> 00:49:47,130 А потоа да се провери ако броевите се во лево и во десно. 898 00:49:47,130 --> 00:49:49,650 >> А потоа, ако се дознае бројот е ќе биде на левата страна, тоа е истиот 899 00:49:49,650 --> 00:49:53,340 нешто што се прави од пребарувањето повторно, но само на левата страна од листата. 900 00:49:53,340 --> 00:49:57,350 Па тоа е како тоа звучи како тоа е рекурзивен. 901 00:49:57,350 --> 00:50:01,870 Па тоа е зошто вие момци имаат рекурзивен решение за спојување вид. 902 00:50:01,870 --> 00:50:04,270 >> OK, па тука е еден пример. 903 00:50:04,270 --> 00:50:07,280 Па да речеме дека сакам да го изберат сите броеви од 1 до n. 904 00:50:07,280 --> 00:50:13,790 Можам да сфатат дека збирот на n број е n плус n минус 1 до 1. 905 00:50:13,790 --> 00:50:17,810 Но, тогаш, ако се погледне N минус 1 плус N минус 2 плус 1, тоа е истиот 906 00:50:17,810 --> 00:50:20,680 нешто како собирање броеви до n минус 1. 907 00:50:20,680 --> 00:50:25,890 Па можам да кажам збирот на еднаков Збирот е еднаква на n плус збир од n минус 1. 908 00:50:25,890 --> 00:50:28,010 Дали тоа има смисла? 909 00:50:28,010 --> 00:50:32,630 >> И јас исто така ќе треба нешто друго наречен база случај, што е тоа што 910 00:50:32,630 --> 00:50:37,440 збирот на броевите до на нула ќе биде нула. 911 00:50:37,440 --> 00:50:42,770 Па штом ќе стигнете до број нула, да престанам статистиката. 912 00:50:42,770 --> 00:50:45,330 Дали тоа има смисла? 913 00:50:45,330 --> 00:50:48,120 >> Па еве еден пример за тоа како Јас може да се спроведе тоа. 914 00:50:48,120 --> 00:50:49,860 Значи имам оваа функција во некои. 915 00:50:49,860 --> 00:50:51,700 Која трае цел број n. 916 00:50:51,700 --> 00:50:56,300 Па еве јас прво проверете ако n е помалку или еднаква на нула. 917 00:50:56,300 --> 00:51:00,310 Па ако е помал или еднаков на нула, јас врати нула, што е нашата база на случајот. 918 00:51:00,310 --> 00:51:05,690 Инаку, јас само може да се врати n плус збирот на броевите од 919 00:51:05,690 --> 00:51:07,190 една до n минус еден. 920 00:51:07,190 --> 00:51:09,360 Смисла? 921 00:51:09,360 --> 00:51:10,100 Во ред. 922 00:51:10,100 --> 00:51:11,610 >> Па еве како изгледа. 923 00:51:11,610 --> 00:51:15,260 Имате сума од 2 еднаквите 2 плус сума од 1. 924 00:51:15,260 --> 00:51:18,930 А некои од 1 е 1 плус збирот на 0, кое е 0. 925 00:51:18,930 --> 00:51:20,216 Смисла? 926 00:51:20,216 --> 00:51:25,342 Значи, ако се погледне на магацинот на вашите програмата, тоа е она што изгледа. 927 00:51:25,342 --> 00:51:26,820 >> Прво, имаме главната функција. 928 00:51:26,820 --> 00:51:30,320 А потоа главната функција наречен Збирот 2. 929 00:51:30,320 --> 00:51:36,690 А потоа Збирот 2 се случува да се каже, ох, сума 2 еднаква 2 плус Збирот на еден. 930 00:51:36,690 --> 00:51:39,460 Па јас додадете сума од 1 до магацинот. 931 00:51:39,460 --> 00:51:43,860 И збирот на 1 ќе ја повика Збирот на 0, кој е, исто така, ќе треба да се додаде 932 00:51:43,860 --> 00:51:44,630 на магацинот. 933 00:51:44,630 --> 00:51:49,240 А потоа секоја од овие оние кои се на врвот на уште една мора да се врати 934 00:51:49,240 --> 00:51:52,020 пред останатите да продолжувам да одам. 935 00:51:52,020 --> 00:51:56,240 >> Така на пример, овде, збирот на 0, прво, се случува да се вратат 0. 936 00:51:56,240 --> 00:51:58,320 А потоа изберете сума од 1. 937 00:51:58,320 --> 00:52:00,850 Тогаш сума од 1 ќе врати 1 до сума од 2. 938 00:52:00,850 --> 00:52:03,900 И конечно, сума од 2 ќе да се вратат 3 до главна. 939 00:52:03,900 --> 00:52:05,320 Дали тоа има смисла? 940 00:52:05,320 --> 00:52:09,496 >> Тоа е навистина важно да се разбере како магацинот работи и обидете се да 941 00:52:09,496 --> 00:52:11,980 види дали тоа го прави смисла. 942 00:52:11,980 --> 00:52:13,260 Добро, така што сортирање. 943 00:52:13,260 --> 00:52:16,170 Значи, зошто е важно сортирање, Прво на сите? 944 00:52:16,170 --> 00:52:18,260 Зошто ние треба да се грижите? 945 00:52:18,260 --> 00:52:20,310 Некој? 946 00:52:20,310 --> 00:52:20,695 Дај ми еден пример? 947 00:52:20,695 --> 00:52:21,040 Да? 948 00:52:21,040 --> 00:52:22,968 >> ПУБЛИКАТА: [Беззвучен]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Да, во ред. 950 00:52:24,700 --> 00:52:26,090 Па можете да направите пребарување поефикасно. 951 00:52:26,090 --> 00:52:28,580 Тоа е добар начин. 952 00:52:28,580 --> 00:52:32,462 Така, на пример, имаме многу работи, всушност, во нашите животи кој 953 00:52:32,462 --> 00:52:32,920 се подредени. 954 00:52:32,920 --> 00:52:34,830 На пример, речници. 955 00:52:34,830 --> 00:52:39,210 >> Тоа е многу важно да се имаат сите зборови во некаков ред дека ние 956 00:52:39,210 --> 00:52:41,970 да пристапите лесно. 957 00:52:41,970 --> 00:52:43,280 Значи тоа е она што го велат. 958 00:52:43,280 --> 00:52:45,530 Можете да пребарувате поефикасно. 959 00:52:45,530 --> 00:52:48,740 Мислам на тоа колку тешко ќе биде да се имаат речник во кој зборовите се во 960 00:52:48,740 --> 00:52:49,500 случаен редослед. 961 00:52:49,500 --> 00:52:53,120 Ќе треба да се погледне, прилично многу, секој збор се додека не се најде 962 00:52:53,120 --> 00:52:54,720 зборот кој го барате. 963 00:52:54,720 --> 00:52:58,710 >> Ако користите Фејсбук, исто така, кога сте во потрага на вашите пријатели, вие сте 964 00:52:58,710 --> 00:53:03,540 ќе видиме дека Фејсбук ги ставаш поблиску пријател е на врвот на оние 965 00:53:03,540 --> 00:53:05,470 дека не се зборува за тоа многу. 966 00:53:05,470 --> 00:53:08,080 Ако одите по целиот пат до дното на твојот пријател листа, си оди за да се види 967 00:53:08,080 --> 00:53:11,250 луѓе кои веројатно дури и не се сеќавам дека сте пријатели со. 968 00:53:11,250 --> 00:53:14,590 И тоа е затоа што на Фејсбук видови вашите пријатели врз основа на тоа 969 00:53:14,590 --> 00:53:16,472 блиски сте до нив. 970 00:53:16,472 --> 00:53:17,930 >> Па организирање на податоците. 971 00:53:17,930 --> 00:53:18,450 Исто така Одг. 972 00:53:18,450 --> 00:53:21,400 Така што гледате дека сите pokemons имаат броеви. 973 00:53:21,400 --> 00:53:27,210 И тоа е како лесна начин на пристап до податоци. 974 00:53:27,210 --> 00:53:29,050 >> ПУБЛИКАТА: Пристапување Одг. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Да. 976 00:53:29,890 --> 00:53:32,395 >> ПУБЛИКАТА: [Беззвучен]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Да. 978 00:53:33,460 --> 00:53:35,140 Добро, така селекција вид. 979 00:53:35,140 --> 00:53:41,610 Изборот вид се случува да го изберете Најмалиот несортиран вредноста на листа на секој 980 00:53:41,610 --> 00:53:43,300 Времето во секоја итерација. 981 00:53:43,300 --> 00:53:46,800 Тоа е вид на како вид што правиш во вашата глава кога ќе се обидуваш да се 982 00:53:46,800 --> 00:53:48,430 сортирате листата на рака. 983 00:53:48,430 --> 00:53:51,990 >> Во суштина, сите вие ​​направите е да се погледне за најмалите број. 984 00:53:51,990 --> 00:53:54,280 Ќе го стави во Подредена листа. 985 00:53:54,280 --> 00:53:56,230 А потоа ќе се погледне за Следниот најмал број. 986 00:53:56,230 --> 00:54:00,080 И тогаш ќе ги прават кој и така натаму. 987 00:54:00,080 --> 00:54:04,600 >> Па селекција вид е во основа изберете секој пат најмалите 988 00:54:04,600 --> 00:54:05,750 несортиран вредност. 989 00:54:05,750 --> 00:54:10,840 Стави на крајот на подредени дел од листата. 990 00:54:10,840 --> 00:54:12,370 И да ја задржите тоа го прават. 991 00:54:12,370 --> 00:54:15,890 Значи, да брзо се види она што ова изгледа како. 992 00:54:15,890 --> 00:54:19,340 Па тука е сортирана и вон листа. 993 00:54:19,340 --> 00:54:23,350 >> Така и за подредени на листата, тоа е првично празна. 994 00:54:23,350 --> 00:54:26,760 А потоа јас ќе одам да го изберете најмалиот број тука, што е 2. 995 00:54:26,760 --> 00:54:30,650 Па јас го добиете бројот 2 и го ставам во предниот дел на листата. 996 00:54:30,650 --> 00:54:34,910 И тогаш јас со нетрпение за следната најмалите елемент, кој е 3. 997 00:54:34,910 --> 00:54:37,050 Па јас го стави на крајот на подредени листа. 998 00:54:37,050 --> 00:54:38,140 А потоа јас го правам тоа. 999 00:54:38,140 --> 00:54:40,040 Сметам 4 и го стави на крајот. 1000 00:54:40,040 --> 00:54:41,360 Најди 5 и го стави на крајот. 1001 00:54:41,360 --> 00:54:44,830 >> И гледам како сите оние пати кои Сакам да кажам дека го стави на крајот е, 1002 00:54:44,830 --> 00:54:46,850 во основа, Замена на две вредности. 1003 00:54:46,850 --> 00:54:48,100 Во ред? 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 А потоа последната, можете само има уште еден елемент. 1006 00:54:52,825 --> 00:54:55,870 Па тоа е веќе сортирана. 1007 00:54:55,870 --> 00:54:57,800 >> Добро, така вметнување вид. 1008 00:54:57,800 --> 00:55:03,180 Вметнување вид ви се случува да имаат, исто така, дека нешто се има подредени и 1009 00:55:03,180 --> 00:55:04,690 на несортиран листа. 1010 00:55:04,690 --> 00:55:14,540 Единственото нешто е тоа што секој пат кога сте додавање елемент на подредени 1011 00:55:14,540 --> 00:55:18,170 листа, само изберете елемент кој е во предниот дел на несортиран листата. 1012 00:55:18,170 --> 00:55:20,880 А потоа ви се случува да се најде она што позиција што треба да биде во сортирани 1013 00:55:20,880 --> 00:55:22,300 дел од листата. 1014 00:55:22,300 --> 00:55:25,840 >> Ајде да видиме што тоа е така тоа го прави повеќе смисла. 1015 00:55:25,840 --> 00:55:29,360 Значи на почетокот, на пример, јас се обидувам да го вметнете број три во 1016 00:55:29,360 --> 00:55:30,680 сортирани дел од листата. 1017 00:55:30,680 --> 00:55:31,800 Па листата не мора ништо. 1018 00:55:31,800 --> 00:55:34,160 Па јас само може да се стави на бројот 3. 1019 00:55:34,160 --> 00:55:37,480 >> Сега, сакам да го додадете бројот 5 на на сортирани дел од листата. 1020 00:55:37,480 --> 00:55:38,900 Така јас гледам на бројот 5. 1021 00:55:38,900 --> 00:55:40,450 Забележувам дека тоа е поголем од 3. 1022 00:55:40,450 --> 00:55:41,980 Па знам дека тоа мора да биде по 3. 1023 00:55:41,980 --> 00:55:44,100 Па да го ставам 3 и 5. 1024 00:55:44,100 --> 00:55:45,940 >> Тогаш сакам да внесете го бројот 2. 1025 00:55:45,940 --> 00:55:51,630 Забележувам дека бројот 2 е, всушност, трае тогаш и 3 и 5. 1026 00:55:51,630 --> 00:55:54,580 Па јас всушност треба да се стави сето тоа на начин на почетокот на листата. 1027 00:55:54,580 --> 00:55:59,030 Па морам да, вид на, промена на сите елементи во подредени листа, па можам 1028 00:55:59,030 --> 00:56:01,970 направи простор за бројот 2. 1029 00:56:01,970 --> 00:56:03,160 >> Тогаш јас се види бројот 6. 1030 00:56:03,160 --> 00:56:05,450 Гледам дека тоа треба да биде по 5. 1031 00:56:05,450 --> 00:56:06,240 Па јас го стави таму. 1032 00:56:06,240 --> 00:56:07,965 И на крај, гледам во бројот 4. 1033 00:56:07,965 --> 00:56:11,030 И јас се забележи што треба да биде помеѓу 3 и 5. 1034 00:56:11,030 --> 00:56:14,870 А потоа го ставив таму и промена сите други елементи. 1035 00:56:14,870 --> 00:56:16,120 Смисла? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> Меур вид. 1038 00:56:19,150 --> 00:56:25,730 Така меур вид е во основа она што си ќе do-- ние го нарекуваме меур 1039 00:56:25,730 --> 00:56:30,113 вид затоа што одат преку list-- тоа е всушност подобро ако јас само се покаже 1040 00:56:30,113 --> 00:56:32,300 ви се допаѓа this-- 1041 00:56:32,300 --> 00:56:35,030 и ви се случува да се споредуваат соседни броеви. 1042 00:56:35,030 --> 00:56:38,410 И ви се случува да се разменуваат своите позиции и ако тие не се 1043 00:56:38,410 --> 00:56:39,190 во вистинската цел. 1044 00:56:39,190 --> 00:56:42,570 >> Значи, во основа, она што се случува да се се случи е тука, на пример, 1045 00:56:42,570 --> 00:56:44,160 имаш 8 и 6. 1046 00:56:44,160 --> 00:56:47,270 Вие знаете дека по некаков ред, ќе всушност ќе биде 6 и 5, нели? 1047 00:56:47,270 --> 00:56:49,540 Па ви се случува да се разменуваат на наредби. 1048 00:56:49,540 --> 00:56:51,370 Потоа гледам 8 и 4 овде. 1049 00:56:51,370 --> 00:56:52,250 И јас го прават истото. 1050 00:56:52,250 --> 00:56:53,400 Јас се разменуваат повторно. 1051 00:56:53,400 --> 00:56:55,070 И, конечно, 2 и 8. 1052 00:56:55,070 --> 00:56:56,670 Јас, исто така ги трампа. 1053 00:56:56,670 --> 00:57:01,690 >> Таа се вика меур Сортирај бидејќи по секоја од овие повторувања, всушност, 1054 00:57:01,690 --> 00:57:05,910 најголем број од листата добива сите на начин да се на крајот на листата. 1055 00:57:05,910 --> 00:57:06,940 Дали тоа има смисла? 1056 00:57:06,940 --> 00:57:11,880 Бидејќи се држи Замена на тоа и се движи кон десно. 1057 00:57:11,880 --> 00:57:14,440 >> Добро, така што ова е втор повторување. 1058 00:57:14,440 --> 00:57:17,200 Тоа ќе биде истото. 1059 00:57:17,200 --> 00:57:20,190 Ќе се направи една swap и тогаш последен. 1060 00:57:20,190 --> 00:57:23,290 Јас дека нема свопови и на листата се подредени. 1061 00:57:23,290 --> 00:57:27,460 Значи во меур Сортирај, ние во основа ги задржи минува низ листата и Замена на 1062 00:57:27,460 --> 00:57:32,310 работи додека не забележите дека јас не направив било свопови тоа го прават повторување, што 1063 00:57:32,310 --> 00:57:34,270 значи дека листата е веќе сортирана. 1064 00:57:34,270 --> 00:57:35,520 Смисла? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Ајде да зборуваме малку за трчање време. 1067 00:57:40,870 --> 00:57:45,165 Па вие момци се сеќавам Биг О, Омега, и Тета? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Да? 1070 00:57:50,990 --> 00:57:53,070 Добро, што е Биг О, прв од сите? 1071 00:57:53,070 --> 00:57:54,315 >> ПУБЛИКАТА: [Беззвучен]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Да, таа е наречена најлош случај траење, што само значи дека тоа е 1073 00:57:59,070 --> 00:58:03,470 колку очекувате програма да се земе да се кандидира. 1074 00:58:03,470 --> 00:58:04,910 Како во поглед of-- 1075 00:58:04,910 --> 00:58:06,660 во овој case-- n. 1076 00:58:06,660 --> 00:58:09,150 Бројот на елементи во листа во најлош случај. 1077 00:58:09,150 --> 00:58:12,520 Како, во најлош можен случај. 1078 00:58:12,520 --> 00:58:17,100 >> Значи за меур Сортирај, на пример, имаме Биг О од n квадрат. 1079 00:58:17,100 --> 00:58:20,580 Зошто имаме тоа? 1080 00:58:20,580 --> 00:58:24,716 Зошто е меур Сортирај Биг О Н плоштад? 1081 00:58:24,716 --> 00:58:27,614 >> ПУБЛИКАТА: [Беззвучен]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Да, така најлош случај ќе биде што треба да направите n повторувања. 1083 00:58:35,670 --> 00:58:39,260 Така што секоја од повторувања ќе донесе најголемиот елемент на крајот 1084 00:58:39,260 --> 00:58:40,290 на листата. 1085 00:58:40,290 --> 00:58:44,230 Па најлош случај е дека имам да го направите тоа нешто n пати. 1086 00:58:44,230 --> 00:58:48,550 А за секое од тие времиња, морам да направи N свопови, бидејќи морам да се споредуваат 1087 00:58:48,550 --> 00:58:49,870 секој два елементи. 1088 00:58:49,870 --> 00:58:53,730 Па тоа е зошто тоа е n квадрат бидејќи тоа е n пати n. 1089 00:58:53,730 --> 00:59:00,120 >> Потоа, селекција вид е исто така n квадрат затоа што, за секој повторување, морам да 1090 00:59:00,120 --> 00:59:02,650 погледне во секој елемент во листата. 1091 00:59:02,650 --> 00:59:04,980 А потоа да најде најмалиот, што значи дека јас треба да 1092 00:59:04,980 --> 00:59:06,130 се погледне преку n елементи. 1093 00:59:06,130 --> 00:59:11,750 И морам да го направи тоа n пати, бидејќи Морам да изберете сите n елементи. 1094 00:59:11,750 --> 00:59:18,273 >> На вметнување вид е исто така n квадрат бидејќи најлошото сценарио ќе 1095 00:59:18,273 --> 00:59:20,950 да биде еден, морам да вметнете n броеви, нели? 1096 00:59:20,950 --> 00:59:22,765 Па јас веќе знаете дека јас ќе одам да има n повторувања. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 Но за секој од тие броеви, ако имав да се погледне во сите на броеви во 1099 00:59:29,840 --> 00:59:34,380 на подредени листа и го стави сите на патот на предната страна, која ќе биде n квадрат 1100 00:59:34,380 --> 00:59:36,230 бидејќи тоа ќе биде n пати n повторно. 1101 00:59:36,230 --> 00:59:38,280 Смисла? 1102 00:59:38,280 --> 00:59:41,512 Што е со омега? 1103 00:59:41,512 --> 00:59:42,886 >> ПУБЛИКАТА: [Беззвучен]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: Тоа е најдоброто сценарио. 1105 00:59:44,620 --> 00:59:48,810 Па тоа е како, во многу пати за сортирање, најдобар случај е 1106 00:59:48,810 --> 00:59:50,660 кога на листата е веќе сортирана. 1107 00:59:50,660 --> 00:59:52,670 Така што навистина не треба да се направи нешто. 1108 00:59:52,670 --> 00:59:56,290 Меур Сортирај има најдобар сценарио на n. 1109 00:59:56,290 --> 00:59:58,820 Дали ви момци знам зошто? 1110 00:59:58,820 --> 01:00:00,620 >> ПУБЛИКАТА: [Беззвучен]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Да, ако ги пратите на дали податоците дажби имале свопови или 1112 01:00:05,640 --> 01:00:10,533 не, ако имате нешто како во собата да се точно ако имаше повторување, ако 1113 01:00:10,533 --> 01:00:15,140 Листата е веќе сортирани, во основа, што ќе се случи е јас ќе одам да 1114 01:00:15,140 --> 01:00:17,890 обидете се да се разменуваат на секои две соседните елементи. 1115 01:00:17,890 --> 01:00:19,920 Одам да се види дека нема свопови. 1116 01:00:19,920 --> 01:00:21,230 И јас само се врати веднаш. 1117 01:00:21,230 --> 01:00:24,240 >> Па тоа значи дека јас само мораше да одат низ листата едно време. 1118 01:00:24,240 --> 01:00:28,990 Па тоа е n, бидејќи гледам на n елементи. 1119 01:00:28,990 --> 01:00:30,930 Зошто изборот вид n плоштад? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Да, дури и ако на листата се подредени, за секој повторување на селекција вид, јас 1122 01:00:45,520 --> 01:00:47,590 треба да изберете најмалку елемент. 1123 01:00:47,590 --> 01:00:49,980 Па тоа значи дека имам надвор да се погледне на сите елементи во несортиран 1124 01:00:49,980 --> 01:00:53,350 листа и се најде на минимум за секоја итерација. 1125 01:00:53,350 --> 01:00:54,600 Дали тоа има смисла? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> И вметнување меч е N бидејќи во случај што јас се обидувам да го вметнете 1128 01:01:04,690 --> 01:01:09,320 броеви и сите на броеви, кога обидете се да ги вметнете, гледам дека тие 1129 01:01:09,320 --> 01:01:10,510 се во право позиција. 1130 01:01:10,510 --> 01:01:15,120 Јас не треба да одат проверите сите други броеви во несортиран листа. 1131 01:01:15,120 --> 01:01:17,170 Па тоа е зошто тоа ќе биде n. 1132 01:01:17,170 --> 01:01:19,480 Смисла? 1133 01:01:19,480 --> 01:01:21,035 И она што е тета? 1134 01:01:21,035 --> 01:01:23,410 >> ПУБЛИКАТА: [Беззвучен]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Што, ми е жал? 1136 01:01:24,380 --> 01:01:24,960 Велат дека тоа повторно. 1137 01:01:24,960 --> 01:01:25,666 >> ПУБЛИКАТА: [Беззвучен]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Токму така. 1139 01:01:26,490 --> 01:01:31,280 Така можете да видите дека само избор се чуваат во Merge вид имаат thetas. 1140 01:01:31,280 --> 01:01:39,920 И тоа е затоа што имате само тета ако двата Big O и Омега се исти. 1141 01:01:39,920 --> 01:01:41,520 Во ред. 1142 01:01:41,520 --> 01:01:44,210 И, конечно, се спојат вид е во дневникот n. 1143 01:01:44,210 --> 01:01:48,910 >> И тогаш, како Дан беше велејќи: Спојување вид е вид на како истиот начин на кој 1144 01:01:48,910 --> 01:01:50,320 правиш бинарни пребарување. 1145 01:01:50,320 --> 01:01:53,530 Па ќе го добиете листа. 1146 01:01:53,530 --> 01:01:55,170 И си оди за да се намали на половина. 1147 01:01:55,170 --> 01:02:00,580 И потоа да ги сече во помали половини. 1148 01:02:00,580 --> 01:02:01,730 И потоа да ги спојат. 1149 01:02:01,730 --> 01:02:02,960 Вие момци се сеќавам дека, нели? 1150 01:02:02,960 --> 01:02:04,960 Добро, како што тој велеше. 1151 01:02:04,960 --> 01:02:08,330 >> Добро, совети. 1152 01:02:08,330 --> 01:02:11,078 Значи она што е покажувач? 1153 01:02:11,078 --> 01:02:12,050 >> ПУБЛИКАТА: [Беззвучен]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: Еден адреса. 1155 01:02:12,820 --> 01:02:13,720 Во ред. 1156 01:02:13,720 --> 01:02:18,530 Знам дека Дејвид покажува еден куп на видеа на binky и работите покажувајќи 1157 01:02:18,530 --> 01:02:19,080 едни со други. 1158 01:02:19,080 --> 01:02:22,960 Но, јас сакам да мислам на совети само како адреса. 1159 01:02:22,960 --> 01:02:26,110 Па тоа е променлива што се случува за да ја запази адреса. 1160 01:02:26,110 --> 01:02:31,940 >> Па тоа е само оваа специјална променлива што е четири бајти долго. 1161 01:02:31,940 --> 01:02:36,550 Запомнете, дека покажувачот да се е секогаш четири бајти долго за нашата 32-битна 1162 01:02:36,550 --> 01:02:39,370 машина, така и во случајот со апаратот. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 И тоа само има локација на променлива во внатрешноста на неа. 1165 01:02:47,050 --> 01:02:50,240 >> Добро, така што оваа меморија, во основа. 1166 01:02:50,240 --> 01:02:57,420 Па секој блок од меморија, всушност, има етикета, која е адресата на 1167 01:02:57,420 --> 01:02:58,890 slotty меморија. 1168 01:02:58,890 --> 01:03:02,370 Па тоа значи дека може да има покажувач укажува на 1169 01:03:02,370 --> 01:03:03,380 било која од овие адреси. 1170 01:03:03,380 --> 01:03:09,930 Значи причината зошто ние ќе користат покажувачи е ако јас треба да се запамети локацијата 1171 01:03:09,930 --> 01:03:12,300 дека специфични променлива е меморија. 1172 01:03:12,300 --> 01:03:16,560 >> А вие момци се сеќавам дека еден од оние случаи беше ако имам функција 1173 01:03:16,560 --> 01:03:20,820 ако имам навистина сакате да swap за reals, јас, всушност, 1174 01:03:20,820 --> 01:03:22,110 треба да се испрати покажувач. 1175 01:03:22,110 --> 01:03:23,460 Не променлива. 1176 01:03:23,460 --> 01:03:25,200 Дали ви момци се сеќавам дека? 1177 01:03:25,200 --> 01:03:26,450 Разликата between-- 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 она што е името? 1180 01:03:34,120 --> 01:03:36,010 Повикувајќи од вредност и повикување со упатување, нели? 1181 01:03:36,010 --> 01:03:36,840 >> Во ред, да. 1182 01:03:36,840 --> 01:03:38,330 Викни од вредност. 1183 01:03:38,330 --> 01:03:43,570 Кога само испрати променливата на функционира сте само испраќање на вредност. 1184 01:03:43,570 --> 01:03:45,610 Значи ти си, всушност испраќање копија на променлива. 1185 01:03:45,610 --> 01:03:49,720 И вашата програма не се грижам за ако истата променлива всушност 1186 01:03:49,720 --> 01:03:51,650 прави копија. 1187 01:03:51,650 --> 01:03:56,330 >> И повикувајќи со повикување значи дека Јас сум, всушност, испраќа копија од 1188 01:03:56,330 --> 01:03:57,550 Покажувач на таа променлива. 1189 01:03:57,550 --> 01:04:00,970 Па тоа значи дека јас сум испраќање на локација на таа променлива. 1190 01:04:00,970 --> 01:04:04,440 Па имам чувство на локацијата на променлива, кога ќе се јавите на функцијата 1191 01:04:04,440 --> 01:04:09,700 со покажувачи, јас сум во можност да всушност промена на податоците, која беше во главната. 1192 01:04:09,700 --> 01:04:12,050 Смисла? 1193 01:04:12,050 --> 01:04:17,560 >> Иако, на покажувачот е копија, покажувачот се уште има вистинска адреса на 1194 01:04:17,560 --> 01:04:20,090 променливата што сакам да се промени. 1195 01:04:20,090 --> 01:04:21,920 Смисла? 1196 01:04:21,920 --> 01:04:24,290 >> Па создавање совети. 1197 01:04:24,290 --> 01:04:28,410 Се сеќавам, на покажувачот секогаш имаат од типот дека тоа покажува 1198 01:04:28,410 --> 01:04:29,890 да, а потоа ѕвезда. 1199 01:04:29,890 --> 01:04:31,030 И тогаш ќе го стави името. 1200 01:04:31,030 --> 01:04:35,765 Па се сеќавам дека секогаш кога имате без оглед на ѕвезда, тоа е како покажувач 1201 01:04:35,765 --> 01:04:38,990 дека без оглед на променливата внесете дека сте имале. 1202 01:04:38,990 --> 01:04:42,850 >> Значи тука во ѕвезда, на пример, тоа е покажувач и цел број. 1203 01:04:42,850 --> 01:04:47,680 А потоа знак ѕвезда е покажувач знак ѕвезда и така натаму. 1204 01:04:47,680 --> 01:04:47,960 Да? 1205 01:04:47,960 --> 01:04:52,710 >> ПУБЛИКАТА: Што ако имаме покажувачот до n ѕвезда х. 1206 01:04:52,710 --> 01:04:55,255 Знам дека создава покажувач на x. 1207 01:04:55,255 --> 01:04:59,432 Дали тоа, исто така, се изјасни х цел број? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: Добро, така што кога ќе се каже N ѕвезда x, не сте создавање на покажувачот на 1209 01:05:05,170 --> 01:05:06,000 променливата x. 1210 01:05:06,000 --> 01:05:08,170 Сте создавање покажувач име х. 1211 01:05:08,170 --> 01:05:09,396 >> ПУБЛИКАТА: [Беззвучен]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Значи, кога велам N ѕвезда x, јас сум велејќи дека, еј, во меморијата, јас ќе одам да 1213 01:05:14,250 --> 01:05:16,390 се добие една од овие три кутии. 1214 01:05:16,390 --> 01:05:20,750 И јас одам да се каже дека се случува да биде x, кое е 1215 01:05:20,750 --> 01:05:22,000 ќе биде покажувач. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 И нешто интересно за покажувачи е дека ние се каже дека тие имаат 1218 01:05:30,640 --> 01:05:32,620 4 бајти за 32-битна машина. 1219 01:05:32,620 --> 01:05:36,320 А причина за тоа е затоа што 4 бајти се 32-бита. 1220 01:05:36,320 --> 01:05:40,490 >> И машини кои се 64 парчиња, всушност, имаат совети адреси 1221 01:05:40,490 --> 01:05:43,480 кои се 64 парчиња долго. 1222 01:05:43,480 --> 01:05:49,820 Па тоа само значи дека големината на адреси во машина е поинаква. 1223 01:05:49,820 --> 01:05:52,270 >> Па Препораки и Dereferencing. 1224 01:05:52,270 --> 01:05:54,310 Постојат два оператори кои вие момци треба да се запамети. 1225 01:05:54,310 --> 01:05:55,450 Првиот е симболот. 1226 01:05:55,450 --> 01:05:56,810 Вториот е ѕвезда. 1227 01:05:56,810 --> 01:06:05,060 Не се збунети од страна на ѕвездата и ова ѕвезда, бидејќи се сеќавам дека, во 1228 01:06:05,060 --> 01:06:06,950 овој случај, ќе мора N ѕвезда. 1229 01:06:06,950 --> 01:06:08,700 >> Тоа е како целата работа заедно. 1230 01:06:08,700 --> 01:06:10,720 Нема n простор ѕвезда. 1231 01:06:10,720 --> 01:06:12,070 Па тоа значи дека тоа е тип. 1232 01:06:12,070 --> 01:06:14,870 Запомнете, дека кога имате променливата ѕвезда, ти си 1233 01:06:14,870 --> 01:06:16,230 зборуваме за тип. 1234 01:06:16,230 --> 01:06:20,540 >> Кога имаш само ѕвезда, а потоа името на променливата, тоа значи дека 1235 01:06:20,540 --> 01:06:24,100 ќе бидете dereferencing покажувачот, кој значи дека сте во потрага на 1236 01:06:24,100 --> 01:06:28,290 покажувач, наоѓање на адреса е што укажува, се случува на таа адреса, 1237 01:06:28,290 --> 01:06:30,850 и да гледа во кога имате таму. 1238 01:06:30,850 --> 01:06:34,310 Па јас кажам моите ученици дека кога имате ѕвезда, треба да мислат дека тоа е 1239 01:06:34,310 --> 01:06:36,850 кратенка од содржината на. 1240 01:06:36,850 --> 01:06:39,770 >> Значи, ако имате покажувач и ќе направи ѕвезда покажувач, тоа е 1241 01:06:39,770 --> 01:06:41,720 содржина на покажувачот. 1242 01:06:41,720 --> 01:06:44,580 А ти оди да што и да се покажува кон и се погледне на постојана содржина. 1243 01:06:44,580 --> 01:06:47,730 И симболот е иста нешто што се адреса на. 1244 01:06:47,730 --> 01:06:52,560 >> Па ако имам променлива a-- како, да кажам дека не int a еднаква 3-- 1245 01:06:52,560 --> 01:06:56,900 ако сакам да се најде на адресата на која променлива меморија, јас само може да се направи 1246 01:06:56,900 --> 01:06:58,240 симболот на. 1247 01:06:58,240 --> 01:07:00,280 Па тоа е адресата на а. 1248 01:07:00,280 --> 01:07:01,530 Смисла? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Па еве еден пример. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 Ова е исчезнати int b и int в. 1253 01:07:11,530 --> 01:07:16,520 Па int a еднаква 3 значи дека Одам да одите на меморија. 1254 01:07:16,520 --> 01:07:19,870 И јас одам да се најде слот и го стави на број 3 тука. 1255 01:07:19,870 --> 01:07:22,200 >> А потоа int b е еднаква на 4. 1256 01:07:22,200 --> 01:07:23,100 Одам да го прават истото. 1257 01:07:23,100 --> 01:07:25,840 Оди до меморијата и се стави број 4 во еден од кутии. 1258 01:07:25,840 --> 01:07:27,100 И int еднаква на 5. 1259 01:07:27,100 --> 01:07:29,740 Најде друг кутија и го стави на бројот 5. 1260 01:07:29,740 --> 01:07:36,160 >> Па што прави на оваа линија? N ѕвезда годишно еднаква на симболот на. 1261 01:07:36,160 --> 01:07:37,800 Значи прво на сите, n ѕвезда на годишно ниво. 1262 01:07:37,800 --> 01:07:39,050 Што го прави тоа? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> ПУБЛИКАТА: [Беззвучен]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Да, па N ѕвезда на годишно ниво, прво, декларира покажувач кој се нарекува годишно. 1266 01:07:47,890 --> 01:07:53,720 И тогаш тоа е давање на вредноста на што покажувачот да биде на адресата на а. 1267 01:07:53,720 --> 01:07:55,790 Па симболот на. 1268 01:07:55,790 --> 01:07:58,510 Потоа, ако го направам ѕвезда ФБ, она што е ѕвезда Гр? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Ох, извинете. 1271 01:08:03,150 --> 01:08:06,330 Ова е, исто така, водат за исчезнати. N ѕвезда Гр. 1272 01:08:06,330 --> 01:08:07,905 Мислам ѕвезда компјутер. 1273 01:08:07,905 --> 01:08:11,200 Многу ми е жал. 1274 01:08:11,200 --> 01:08:11,940 Тоа е истото. 1275 01:08:11,940 --> 01:08:16,408 Но, сега сум добра AR создавање на покажувачот да б а потоа покажувач на в. 1276 01:08:16,408 --> 01:08:16,886 Да? 1277 01:08:16,886 --> 01:08:18,136 >> ПУБЛИКАТА: [Беззвучен]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Да. 1280 01:08:26,670 --> 01:08:32,630 Значи, ако одат на меморија и да одите кутија која е одредници за годишно, 1281 01:08:32,630 --> 01:08:37,149 ти си, всушност ќе види адреса на. 1282 01:08:37,149 --> 01:08:38,399 Во ред? 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 Да? 1285 01:08:43,300 --> 01:08:45,605 >> ПУБЛИКАТА: [Беззвучен]? 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Да, покажувачот е адреса. 1287 01:08:49,260 --> 01:08:50,120 Никогаш не заборавајте дека. 1288 01:08:50,120 --> 01:08:52,800 Тоа е како најважен дел за совети. 1289 01:08:52,800 --> 01:08:56,180 Има чување и адреса на некои променлива. 1290 01:08:56,180 --> 01:08:56,890 Нешто друго? 1291 01:08:56,890 --> 01:08:58,370 Било какви други прашања? 1292 01:08:58,370 --> 01:08:59,189 Во ред. 1293 01:08:59,189 --> 01:09:00,399 >> Па Покажувачи и низи. 1294 01:09:00,399 --> 01:09:08,189 Запомнете дека кога правам int низа 3, основа, она што јас го правам е јас сум, вид 1295 01:09:08,189 --> 01:09:12,779 на, објавувајќи покажувач. 1296 01:09:12,779 --> 01:09:18,960 Па низа е вид на како покажувач кон специфичен простор во меморијата во која јас 1297 01:09:18,960 --> 01:09:21,999 доделени три слота за цели броеви. 1298 01:09:21,999 --> 01:09:23,430 Дали тоа има смисла? 1299 01:09:23,430 --> 01:09:30,250 >> Значи, кога јас int низа 3, она што јас сум Притоа, во основа, е создавање на три 1300 01:09:30,250 --> 01:09:31,479 слотови во меморијата. 1301 01:09:31,479 --> 01:09:33,899 Па јас само се најде три слотови во меморијата. 1302 01:09:33,899 --> 01:09:38,810 Значи, ако јас се направи, тогаш, ѕвезда низа, таа во основа значи дека содржината на низа, 1303 01:09:38,810 --> 01:09:46,180 што значи дека ги избрише покажувач, одам на тоа место дека тоа посочувајќи, 1304 01:09:46,180 --> 01:09:47,939 и јас се стави на број еден. 1305 01:09:47,939 --> 01:09:53,729 >> И тогаш, ако го направам ѕвезда низа плус 1, тоа е исто што и прави низа 1306 01:09:53,729 --> 01:09:59,690 загради еден, што само значи одам на место дека тоа е покажувајќи кон. 1307 01:09:59,690 --> 01:10:03,000 А потоа плус 1 прави ме префрлат една позиција. 1308 01:10:03,000 --> 01:10:06,510 Па одам на оваа позиција, всушност, и го стави на број два. 1309 01:10:06,510 --> 01:10:10,900 >> А потоа, конечно, кога правам низа плус 2, одам до местото каде 1310 01:10:10,900 --> 01:10:11,825 укажувањето на низа е. 1311 01:10:11,825 --> 01:10:14,690 И тогаш јас се пресели во меморија блокови. 1312 01:10:14,690 --> 01:10:16,240 А потоа го ставам број три тука. 1313 01:10:16,240 --> 01:10:16,600 Да? 1314 01:10:16,600 --> 01:10:21,400 >> ПУБЛИКАТА: Значи ѕвезда низа е едноставно велејќи дека првата точка. 1315 01:10:21,400 --> 01:10:25,090 И можете да додадете 1, само затоа што ние сме само навистина 1316 01:10:25,090 --> 01:10:27,295 референцирање дека првата адреса. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Да. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Зошто ние, на пример, велат низа 0, низа 1, и низа 2? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Јас велам, зошто го правиш 0, 1, 2, 3, наместо на 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Една од причините е, еден, компјутерски програмери сакаат да започнете 1323 01:10:46,550 --> 01:10:47,750 сметано од 0. 1324 01:10:47,750 --> 01:10:52,370 Две е затоа што кога ќе се направи низа 0, тоа е исто што и прави низа 1325 01:10:52,370 --> 01:10:56,330 плус 0, што значи дека одат таа позиција, и не ми се 1326 01:10:56,330 --> 01:10:59,320 прескокнете некој меморија блокови. 1327 01:10:59,320 --> 01:11:01,750 Па јас не се движат на мемориската блокови. 1328 01:11:01,750 --> 01:11:02,015 Да? 1329 01:11:02,015 --> 01:11:03,265 >> ПУБЛИКАТА: [Беззвучен]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Значи таа прашуваат што е разликата помеѓу прави 1332 01:11:12,670 --> 01:11:14,000 овој или прави Примерок. 1333 01:11:14,000 --> 01:11:17,550 Една од разликите е дека int низа 3 е создавање на 1334 01:11:17,550 --> 01:11:19,260 низа на магацинот. 1335 01:11:19,260 --> 01:11:23,080 И кога правам Примерок тоа, создава на грамада. 1336 01:11:23,080 --> 01:11:25,250 Дали тоа има смисла? 1337 01:11:25,250 --> 01:11:28,870 >> Па како не Примерок всушност работат? 1338 01:11:28,870 --> 01:11:32,245 Па зошто дури и треба да се користи Примерок? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 Компајлерот вид на фигури сите променливи што ќе прогласи. 1341 01:11:39,700 --> 01:11:44,040 И тој создава простор за сите од нив во магацинот. 1342 01:11:44,040 --> 01:11:47,180 Така што сите на вашите променливи се случува да се биде некаде во магацинот. 1343 01:11:47,180 --> 01:11:49,460 Па тука е на животната средина променливи. 1344 01:11:49,460 --> 01:11:53,850 >> Значи, во основа, простор за оние варијабли во меморија се доделува на 1345 01:11:53,850 --> 01:11:55,080 компајлирате време. 1346 01:11:55,080 --> 01:11:58,790 Па тоа значи дека вашиот компјутер има да ги знаат сите од овие променливи 1347 01:11:58,790 --> 01:11:59,790 однапред. 1348 01:11:59,790 --> 01:12:02,500 Тоа не треба да се знае што вредност ви се случува да се стави во нив. 1349 01:12:02,500 --> 01:12:05,490 Но треба да се знае како колку меморија ви е потребна. 1350 01:12:05,490 --> 01:12:09,380 >> Но сега да речеме дека, на пример, сте создавање на низа или со земање на 1351 01:12:09,380 --> 01:12:13,430 стринг кој сте преземање од корисникот. 1352 01:12:13,430 --> 01:12:17,300 Ти не знаеш колку долго низа се случува да биде, на пример. 1353 01:12:17,300 --> 01:12:20,600 Значи, вие не знаете колку меморија блокови ќе се доделат, нели? 1354 01:12:20,600 --> 01:12:24,120 >> Така што навистина не се направи смисла за можете да се каже стави 100 карактери. 1355 01:12:24,120 --> 01:12:26,420 И тогаш, што ако корисникот пишува 150? 1356 01:12:26,420 --> 01:12:27,670 Ви се случува да се зезнав. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Значи, во основа, не можете да бидете сигурни за тоа како колку меморија што треба да се доделат 1359 01:12:34,620 --> 01:12:35,960 кога ќе ги собере на програмата. 1360 01:12:35,960 --> 01:12:38,240 Можете само знам дека на кандидира време. 1361 01:12:38,240 --> 01:12:39,950 Па тоа е зошто ти мораш грамада. 1362 01:12:39,950 --> 01:12:47,610 Па грамада се случува да имаат меморија дека сте распределба во 1363 01:12:47,610 --> 01:12:50,810 Времетраењето на програмата работи. 1364 01:12:50,810 --> 01:12:55,780 >> Значи, во основа, кога ќе го направите Примерок, што што го правиш е распределбата на меморија на 1365 01:12:55,780 --> 01:13:00,160 траење, што значи дека ќе бидете одлучувате во тој момент дека сте 1366 01:13:00,160 --> 01:13:02,670 треба да имаат дека меморијата. 1367 01:13:02,670 --> 01:13:04,210 Па тоа е кога сте го распределба. 1368 01:13:04,210 --> 01:13:06,430 Дали тоа има смисла? 1369 01:13:06,430 --> 01:13:11,690 >> Па се сеќавам, магацинот има променливи кои се креирани за компајлирање време. 1370 01:13:11,690 --> 01:13:14,560 А потоа грамада има променливи кои се креирани како да одиш 1371 01:13:14,560 --> 01:13:15,600 со Примерок, на пример. 1372 01:13:15,600 --> 01:13:16,850 >> ПУБЛИКАТА: [Беззвучен]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: Значи GetString е ќе ја повика Примерок. 1375 01:13:24,340 --> 01:13:26,710 Нека ми зборува за Примерок, и Ќе објасни GetString. 1376 01:13:26,710 --> 01:13:32,000 Па Примерок е истото како распределбата на меморија. 1377 01:13:32,000 --> 01:13:34,600 Па затоа се случува да се распределат меморија грамада. 1378 01:13:34,600 --> 01:13:40,010 И тоа се случува да се врати покажувач каде што меморија распределени во. 1379 01:13:40,010 --> 01:13:43,090 >> Па кога ќе do-- 1380 01:13:43,090 --> 01:13:44,910 тука за example-- 1381 01:13:44,910 --> 01:13:45,830 N ѕвезда покажувач. 1382 01:13:45,830 --> 01:13:50,520 И тогаш покажувачот еднаква Примерок големината на инч пати 10. 1383 01:13:50,520 --> 01:13:52,110 Јас сум создавање на покажувачот. 1384 01:13:52,110 --> 01:13:59,020 И тогаш јас сум давање дека покажувач вредноста на кој што Примерок 1385 01:13:59,020 --> 01:13:59,680 ми даваат. 1386 01:13:59,680 --> 01:14:04,150 >> Па јас барам Примерок можете да ги распредели простор за 10 цели броеви. 1387 01:14:04,150 --> 01:14:05,390 Тоа е она што го кажува. 1388 01:14:05,390 --> 01:14:09,020 Примерок и ми дава назад Покажувач на тоа место. 1389 01:14:09,020 --> 01:14:11,460 Смисла? 1390 01:14:11,460 --> 01:14:12,270 Во ред. 1391 01:14:12,270 --> 01:14:17,940 Јас и GetString е, во основа, се прави повик за Примерок па можете да ги распредели 1392 01:14:17,940 --> 01:14:21,680 меморија за време на траење. 1393 01:14:21,680 --> 01:14:26,460 >> Секогаш се сеќавам да се провери за ништовни бидејќи Примерок се случува да се врати нула 1394 01:14:26,460 --> 01:14:28,200 ако не може да се алоцира меморија. 1395 01:14:28,200 --> 01:14:31,660 Да речеме дека ве прашам за смешна количина на меморија. 1396 01:14:31,660 --> 01:14:33,950 Вашиот компјутер не ќе биде може да се доделат онолку. 1397 01:14:33,950 --> 01:14:36,410 >> Па Примерок е само ќе да се врати нула. 1398 01:14:36,410 --> 01:14:42,210 Значи секогаш се сеќавам да се провери дали покажувачот што сте ја добиле од Примерок е 1399 01:14:42,210 --> 01:14:45,640 нула или не, бидејќи, ако е така, можеби ќе се dereferencing покажувач и 1400 01:14:45,640 --> 01:14:48,340 предизвикува несакани грешки. 1401 01:14:48,340 --> 01:14:50,930 И на крај, не заборавајте вашата слободна меморија. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Примерок е создавање меморија во грамада. 1404 01:15:00,560 --> 01:15:03,436 И треба да се ослободи меморија пред програмата завршува. 1405 01:15:03,436 --> 01:15:05,370 Добро, тоа е се за мене. 1406 01:15:05,370 --> 01:15:07,900 Жал ми е, Роб. 1407 01:15:07,900 --> 01:15:07,950 Благодарност. 1408 01:15:07,950 --> 01:15:09,878 >> [Аплауз] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Секое последните прашања пред Роб доаѓа? 1410 01:15:12,679 --> 01:15:13,138 Не? 1411 01:15:13,138 --> 01:15:13,597 Да? 1412 01:15:13,597 --> 01:15:15,892 >> ПУБЛИКАТА: Јас не гледам ова онлајн. 1413 01:15:15,892 --> 01:15:17,269 Дали сте го подигнале уште? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Мислам дека Дејв е подигнете наскоро. 1415 01:15:19,106 --> 01:15:19,880 >> ДЕЈВ: Ќе бидат објавени. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: Ќе биде онлајн. 1417 01:15:20,310 --> 01:15:21,175 >> ПУБЛИКАТА: Тоа е до. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: Тоа е се? 1419 01:15:22,090 --> 01:15:23,157 Во ред. 1420 01:15:23,157 --> 01:15:23,644 Да? 1421 01:15:23,644 --> 01:15:27,053 >> ПУБЛИКАТА: [Беззвучен]? 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Да, треба да се ослободи сите меморија што се става во грамада. 1423 01:15:30,285 --> 01:15:31,535 >> ПУБЛИКАТА: [Беззвучен]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Да. 1426 01:15:36,160 --> 01:15:39,980 Секое време да ги имаме култура Примерок, треба да имаат култура слободен 1427 01:15:39,980 --> 01:15:42,640 откако ќе престанете да го користите таа променлива. 1428 01:15:42,640 --> 01:15:44,800 Па Примерок и слободни се секогаш заедно. 1429 01:15:44,800 --> 01:15:45,410 Нивните најдобри пријатели. 1430 01:15:45,410 --> 01:15:46,720 Да. 1431 01:15:46,720 --> 01:15:47,970 Роб? 1432 01:15:47,970 --> 01:15:55,595 1433 01:15:55,595 --> 01:15:56,850 >> Роб: Ќе одам брзо. 1434 01:15:56,850 --> 01:16:00,466 А исто така и видео ќе биде ставен. 1435 01:16:00,466 --> 01:16:01,716 Имам микрофон натаму. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> Добро, така недела пет нешта. 1438 01:16:26,230 --> 01:16:27,970 Првото нешто што го имаме е оџакот. 1439 01:16:27,970 --> 01:16:33,390 Па се сеќавам дека постои само еден оџак рамка на активен повик функција. 1440 01:16:33,390 --> 01:16:34,710 Ќе видиме дека во една секунда. 1441 01:16:34,710 --> 01:16:37,850 И исто така се сеќавам она што всушност оди во секоја магацинот рамка се случува да бидат 1442 01:16:37,850 --> 01:16:41,880 локални променливи на нашите функции, аргументите кои се пренесуваат во нашата 1443 01:16:41,880 --> 01:16:43,880 функции, заедно со неколку други работи што навистина не 1444 01:16:43,880 --> 01:16:45,260 треба да се грижите. 1445 01:16:45,260 --> 01:16:50,950 >> Па еве еден пример на програма, каде што, известување, главниот е printfing враќање 1446 01:16:50,950 --> 01:16:52,830 вредноста на foo 4. 1447 01:16:52,830 --> 01:16:57,930 foo е само ќе се вратат на вредноста на бар 4 запирка 6. 1448 01:16:57,930 --> 01:17:02,380 И бар се случува да го поставите на некои локални променлива n еднакво на 4 пати 6. 1449 01:17:02,380 --> 01:17:03,920 А потоа се врати n. 1450 01:17:03,920 --> 01:17:09,130 >> Значи, да се погледне на магацинот во текот на вистински повторување на оваа програма. 1451 01:17:09,130 --> 01:17:10,500 Така што на дното на нашите оџак. 1452 01:17:10,500 --> 01:17:12,620 Се сеќавам дека магацинот порасне. 1453 01:17:12,620 --> 01:17:15,370 Па на дното на нашите оџакот, ние имаат магацинот рамка за главната. 1454 01:17:15,370 --> 01:17:17,000 Кога на програмата ќе почне, главните е секогаш ќе биде на 1455 01:17:17,000 --> 01:17:18,560 дното на нашиот оџак. 1456 01:17:18,560 --> 01:17:20,880 >> И она што е внатре на нашите магацинот рамка за главната? 1457 01:17:20,880 --> 01:17:23,810 Па дури иако не постојат локални променливи до главна, како што реков претходно, 1458 01:17:23,810 --> 01:17:29,670 ние сме argc и rgv преземањето на просторот во внатрешноста на главниот магацинот рамка. 1459 01:17:29,670 --> 01:17:33,260 Значи главната сега ќе повик на функција foo. 1460 01:17:33,260 --> 01:17:35,125 А тоа значи foo ќе добие своја магацинот рамка. 1461 01:17:35,125 --> 01:17:36,970 >> Па сега сме во внатрешноста на функција foo. 1462 01:17:36,970 --> 01:17:38,610 И она што треба да одат во на Foo магацинот рамка? 1463 01:17:38,610 --> 01:17:41,100 Па, foo има аргумент n. 1464 01:17:41,100 --> 01:17:45,440 И n е еднакво на 4, бидејќи тоа е она што Главната поминува како аргумент на Foo. 1465 01:17:45,440 --> 01:17:48,490 >> Па сега foo ќе ја повика бар. 1466 01:17:48,490 --> 01:17:52,070 Она што се случува да имаат бар во на нејзините "магацинот рамка? 1467 01:17:52,070 --> 01:17:55,610 Таа има x еднакво на 4 y еднаква на шест. 1468 01:17:55,610 --> 01:17:58,540 Тоа не е сè, дека ние сме случува да имаат во магацинот рамка, бидејќи бар 1469 01:17:58,540 --> 01:18:00,580 исто така има и локална променлива n. 1470 01:18:00,580 --> 01:18:03,370 И n ние ќе се постави еднакво на 24. 1471 01:18:03,370 --> 01:18:05,750 >> Па сега бар ќе се вратат n. 1472 01:18:05,750 --> 01:18:09,300 Па бар се враќа 24 до магацинот рамка foo. 1473 01:18:09,300 --> 01:18:12,560 И бидејќи бар е сега се враќаат, што значи ние сме пукање на магацинот рамка 1474 01:18:12,560 --> 01:18:14,250 за бар исклучување на магацинот. 1475 01:18:14,250 --> 01:18:18,430 Така што сите на меморија, која бар биле користење е сега надвор од магацинот. 1476 01:18:18,430 --> 01:18:21,550 >> Сега, foo е, исто така, ќе да се вратат 24 до главна. 1477 01:18:21,550 --> 01:18:25,470 Па сега дека foo се враќа, меморијата дека foo е користење во својата " 1478 01:18:25,470 --> 01:18:27,550 магацинот рамка е, исто така, нема. 1479 01:18:27,550 --> 01:18:29,660 И сега, главната се случува да се јавите printf. 1480 01:18:29,660 --> 01:18:31,660 Значи printf е само уште една функција. 1481 01:18:31,660 --> 01:18:35,320 Кога ние го нарекуваме printf, тоа се случува да биде друг магацинот рамка за printf 1482 01:18:35,320 --> 01:18:36,470 повик на функција. 1483 01:18:36,470 --> 01:18:37,990 >> Што поминува printf? 1484 01:18:37,990 --> 01:18:40,090 Тоа е она што се случува да одат на нејзиниот магацинот рамка. 1485 01:18:40,090 --> 01:18:44,970 Во најмала рака, ние сме полагање тој процент јас обратна коса црта n и 1486 01:18:44,970 --> 01:18:47,180 аргументот 24. 1487 01:18:47,180 --> 01:18:50,370 Тоа би можело да има повеќе во неа е оџакот рамка ако printf се случува да биде со користење на некои 1488 01:18:50,370 --> 01:18:51,200 локални променливи. 1489 01:18:51,200 --> 01:18:51,920 Ние не знаеме. 1490 01:18:51,920 --> 01:18:53,810 >> Но сето тоа оди во printf на магацинот рамка. 1491 01:18:53,810 --> 01:18:55,740 Тоа се случува да се изврши на printf. 1492 01:18:55,740 --> 01:18:56,830 Тогаш printf е направено. 1493 01:18:56,830 --> 01:18:57,820 Тоа ќе се врати. 1494 01:18:57,820 --> 01:18:58,960 Конечно, главниот е завршена. 1495 01:18:58,960 --> 01:18:59,860 Главните ќе се вратат. 1496 01:18:59,860 --> 01:19:02,020 И тогаш нашата програма е направено. 1497 01:19:02,020 --> 01:19:02,480 Да? 1498 01:19:02,480 --> 01:19:04,505 >> ПУБЛИКАТА: Дали сте се види [Беззвучен] 1499 01:19:04,505 --> 01:19:05,900 аргументи [Беззвучен] 1500 01:19:05,900 --> 01:19:06,830 параметри? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: Значи постои суптилната разлика меѓу аргументи и параметри. 1502 01:19:09,970 --> 01:19:14,400 И навистина, во заеднички зборува, луѓето имаат тенденција само да ги измеша цело време. 1503 01:19:14,400 --> 01:19:17,550 Но параметри се формално име на нештата. 1504 01:19:17,550 --> 01:19:20,180 >> Па argc и argv се параметри на главната. 1505 01:19:20,180 --> 01:19:23,440 Аргументи се она што всушност помине во оние параметри. 1506 01:19:23,440 --> 01:19:28,340 Па таму кога ќе се јавам на foo од 4, 4 е аргумент сум поминува во. 1507 01:19:28,340 --> 01:19:31,460 И параметарот n, во внатрешноста на foo, се нафрла врз вредност 4 1508 01:19:31,460 --> 01:19:32,880 од 4 е аргумент. 1509 01:19:32,880 --> 01:19:35,826 >> ПУБЛИКАТА: [Беззвучен]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: n е локална променлива да се забрани. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 n е уште локално до foo, но тоа е параметар за foo. 1513 01:19:44,960 --> 01:19:48,190 Тоа не е локална променлива. 1514 01:19:48,190 --> 01:19:48,546 Да? 1515 01:19:48,546 --> 01:19:51,180 >> ПУБЛИКАТА: [Беззвучен]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: foo е само повикување бар и враќање она бар враќа. 1517 01:19:55,400 --> 01:19:56,786 >> ПУБЛИКАТА: [Беззвучен]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Да, само за да видам повеќе магацинот рамки. 1519 01:19:59,591 --> 01:20:00,082 Да? 1520 01:20:00,082 --> 01:20:03,519 >> ПУБЛИКАТА: Зошто е наречен foo пред printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Зошто беше foo нарекува пред printf? 1522 01:20:05,920 --> 01:20:10,740 Па јас би можеле да имаат, наместо тоа, направи нешто како int x е еднаква на foo од 4 1523 01:20:10,740 --> 01:20:12,980 и потоа печатени x. 1524 01:20:12,980 --> 01:20:17,900 Но наместо тоа, јас се комбинираат функција јавете се во аргумент printf. 1525 01:20:17,900 --> 01:20:23,670 >> Но забележете дека не можеме, всушност, извршување на повик на printf додека не 1526 01:20:23,670 --> 01:20:25,610 дознаам што foo од 4 е. 1527 01:20:25,610 --> 01:20:27,480 Па ние си оди за да се оцени тоа. 1528 01:20:27,480 --> 01:20:32,504 И само еднаш дека е направено се случува да се врати и да се оцени тоа. 1529 01:20:32,504 --> 01:20:32,990 Да? 1530 01:20:32,990 --> 01:20:37,364 >> ПУБЛИКАТА: Бидејќи и бар [Беззвучен] 1531 01:20:37,364 --> 01:20:41,738 вредност, зошто ние не треба [Беззвучен]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: Тие целосно треба да биде int. 1533 01:20:44,400 --> 01:20:46,260 Дека не бил фатен во текот повеќе минува. 1534 01:20:46,260 --> 01:20:49,010 Така треба да биде int бар и int foo бидејќи и на оние 1535 01:20:49,010 --> 01:20:50,460 се враќаат цели броеви. 1536 01:20:50,460 --> 01:20:54,214 Празнина е само ако тие не се случува да се вратат вистинските вредности. 1537 01:20:54,214 --> 01:20:54,692 Да? 1538 01:20:54,692 --> 01:20:58,038 >> ПУБЛИКАТА: Ако сте имале линија над враќање, [Беззвучен]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: А линија над возврат? 1541 01:21:03,730 --> 01:21:04,410 >> ПУБЛИКАТА: Да. 1542 01:21:04,410 --> 01:21:10,780 Како ако не printf и [Беззвучен] тоа ќе печати двапати? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Значи во внатрешноста на foo? 1544 01:21:12,992 --> 01:21:15,945 Ако имавме printf тука? 1545 01:21:15,945 --> 01:21:16,750 >> ПУБЛИКАТА: Да. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Значи, ако имавме printf право тука, тоа ќе печати еднаш. 1547 01:21:19,510 --> 01:21:23,400 Бидејќи ние се јавувате на foo еднаш право тука, тогаш ние ќе ја погоди printf. 1548 01:21:23,400 --> 01:21:24,620 Тогаш ние ќе го наречеме бар. 1549 01:21:24,620 --> 01:21:25,710 А потоа foo ќе се вратат. 1550 01:21:25,710 --> 01:21:26,275 И тоа е тоа. 1551 01:21:26,275 --> 01:21:30,985 Ние само некогаш судрите на printf еднаш. 1552 01:21:30,985 --> 01:21:31,482 Да? 1553 01:21:31,482 --> 01:21:32,973 >> ПУБЛИКАТА: [Беззвучен] 1554 01:21:32,973 --> 01:21:37,950 printf повик foo бидејќи ние сме првата повикувајќи printf, а потоа ние сме полагање 1555 01:21:37,950 --> 01:21:38,580 аргументите. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Значи во теорија, не е printf повик foo? 1557 01:21:40,960 --> 01:21:42,220 Па нема. 1558 01:21:42,220 --> 01:21:47,360 Само цел дека в се случува да се извршување на овие работи е, пред да можеме да 1559 01:21:47,360 --> 01:21:49,800 јавете се на функција, сите аргументи на функција треба да 1560 01:21:49,800 --> 01:21:51,600 целосно да се оценува. 1561 01:21:51,600 --> 01:21:53,540 Така е тоа потполно оценува? 1562 01:21:53,540 --> 01:21:54,610 Да, тоа е само низа. 1563 01:21:54,610 --> 01:21:55,480 Тоа е само вредност. 1564 01:21:55,480 --> 01:21:57,200 >> Тогаш ние треба целосно да оцени ова. 1565 01:21:57,200 --> 01:21:59,720 Откако ова е направено, сега сите своите аргументи се евалуираат. 1566 01:21:59,720 --> 01:22:01,982 И сега ние може да го направи повик за printf. 1567 01:22:01,982 --> 01:22:02,478 Да? 1568 01:22:02,478 --> 01:22:03,966 >> ПУБЛИКАТА: Едно прашање. 1569 01:22:03,966 --> 01:22:06,942 Ако имате празнина функција, мора да имате враќање запирка? 1570 01:22:06,942 --> 01:22:09,910 >> Роб: Не враќање запирка ако имате празнина функција. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 Во ред. 1573 01:22:14,780 --> 01:22:15,830 Па сега некои куп работи. 1574 01:22:15,830 --> 01:22:19,640 Па грамада е како ние ќе се справи со динамичен управување со меморијата. 1575 01:22:19,640 --> 01:22:23,100 И тоа директно во спротивност со магацинот кој ние би го нарекол автоматски 1576 01:22:23,100 --> 01:22:24,100 управување со меморијата. 1577 01:22:24,100 --> 01:22:27,140 >> Па на магацинот, никогаш не навистина имаат да се справи со тоа како локални променливи 1578 01:22:27,140 --> 01:22:30,400 се турка и појави надвор сите овие магацинот рамки и сите тие работи. 1579 01:22:30,400 --> 01:22:31,070 Вие не треба да се грижите за тоа. 1580 01:22:31,070 --> 01:22:32,070 Тоа е автоматски. 1581 01:22:32,070 --> 01:22:36,990 Па грамада е прирачник. 1582 01:22:36,990 --> 01:22:38,070 И [Беззвучен] 1583 01:22:38,070 --> 01:22:41,260 доаѓа од овие функции Примерок и бесплатно. 1584 01:22:41,260 --> 01:22:43,550 >> Значи тука е друга програма. 1585 01:22:43,550 --> 01:22:47,145 Сите ние сме прави е mallocing цел број. 1586 01:22:47,145 --> 01:22:49,360 Ние сме го складирање ѕвезда х. 1587 01:22:49,360 --> 01:22:52,520 Се разбира, ние треба да се провери да се види дали x е нула. 1588 01:22:52,520 --> 01:22:56,400 Тогаш ние ќе треба да се постави само што x е да се покажува на 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Печати она што x е да се покажува, печатење x, и тогаш слободно x. 1591 01:23:03,260 --> 01:23:08,920 >> Па, како е ова навистина се случува да се погледне ако ја гледаме нашата магацинот и грамада? 1592 01:23:08,920 --> 01:23:10,950 Па ние ќе се започне одново. 1593 01:23:10,950 --> 01:23:12,580 На дното на нашите магацинот како порано. 1594 01:23:12,580 --> 01:23:15,930 Се сеќавам дека ти грамада директно противи на оџакот? 1595 01:23:15,930 --> 01:23:18,850 Значи ние се случува да имаат врвот на нашата куп таму. 1596 01:23:18,850 --> 01:23:22,590 >> Па на дното на нашите оџакот, имаме нашите магацинот рамка за главната. 1597 01:23:22,590 --> 01:23:28,000 Што има простор за argc, argv, а ние Сега имаме локална променлива X, кој 1598 01:23:28,000 --> 01:23:30,030 е int ѕвезда. 1599 01:23:30,030 --> 01:23:32,240 Па ние си оди за да iterate преку оваа програма. 1600 01:23:32,240 --> 01:23:34,420 Првото нешто што го имаме е повик за Примерок. 1601 01:23:34,420 --> 01:23:36,250 >> Па ние сме правење на повик да Примерок. 1602 01:23:36,250 --> 01:23:37,100 Примерок е во функција. 1603 01:23:37,100 --> 01:23:38,770 Тоа се случува да се добие магацинот рамка. 1604 01:23:38,770 --> 01:23:40,180 Што полагање да Примерок? 1605 01:23:40,180 --> 01:23:41,610 Тоа се случува да одат во на магацинот рамка. 1606 01:23:41,610 --> 01:23:45,130 Ние поминува големината на n, што е 4. 1607 01:23:45,130 --> 01:23:49,700 Така што е предадена Примерок. 1608 01:23:49,700 --> 01:23:50,910 >> Што Примерок направам? 1609 01:23:50,910 --> 01:23:53,820 Тоа ни ја зграпчува некои простор на грамада. 1610 01:23:53,820 --> 01:23:55,320 Значи ние се случува да одат на грамада. 1611 01:23:55,320 --> 01:23:57,990 И ние си оди за да го дофати 4 бајти од грамада. 1612 01:23:57,990 --> 01:24:01,500 Па да му даде произволна адреса. 1613 01:24:01,500 --> 01:24:06,680 0x123 Само се преправаат дека тоа е адреса, кој е на куп. 1614 01:24:06,680 --> 01:24:12,300 >> Значи она што е, всушност, во внатрешноста на кој регионот на меморијата на адресата Ox123? 1615 01:24:12,300 --> 01:24:13,080 Ѓубре. 1616 01:24:13,080 --> 01:24:15,270 Така што не се чуваат ништо во него. 1617 01:24:15,270 --> 01:24:18,830 Па колку што ние знаеме, тоа може да биде ништо. 1618 01:24:18,830 --> 01:24:20,560 Вие не треба да се претпостави дека е нула. 1619 01:24:20,560 --> 01:24:23,870 Тоа е повеќето не нула веројатно. 1620 01:24:23,870 --> 01:24:26,260 >> Па сега Примерок враќа. 1621 01:24:26,260 --> 01:24:28,020 И што правиме кога Примерок враќа? 1622 01:24:28,020 --> 01:24:29,800 Ние во собата што се враќа. 1623 01:24:29,800 --> 01:24:32,290 Ние во собата x еднакви со она што тоа се враќа. 1624 01:24:32,290 --> 01:24:33,690 Па што е тоа враќање? 1625 01:24:33,690 --> 01:24:38,150 Тоа е враќање 0x123 бидејќи тоа е адреса на блок од меморија што 1626 01:24:38,150 --> 01:24:40,850 само распределени во грамада. 1627 01:24:40,850 --> 01:24:47,160 >> Па се врати 0x123 x е сега ќе треба да се постави еднаква на 0x123 која, сликовито, 1628 01:24:47,160 --> 01:24:52,940 ние често се подготви како x имаат вистински arrow покажувајќи на тој блок. 1629 01:24:52,940 --> 01:24:55,820 Но x е само зачувување на таа адреса. 1630 01:24:55,820 --> 01:24:58,670 Па сега ние треба да се провери ако x е нула. 1631 01:24:58,670 --> 01:24:59,120 Тоа не е нула. 1632 01:24:59,120 --> 01:25:02,170 Ние се преправаме дека тоа Примерок успеа. 1633 01:25:02,170 --> 01:25:04,950 >> Па сега ѕвезда x е еднаква на 50. 1634 01:25:04,950 --> 01:25:08,450 Па ѕвезда се сеќава тоа значи одат на таа адреса. 1635 01:25:08,450 --> 01:25:12,700 Па 0x123 Ние ќе се одат на таа адреса. 1636 01:25:12,700 --> 01:25:14,660 Така што нè носи до таму. 1637 01:25:14,660 --> 01:25:16,310 Што правиме на таа адреса? 1638 01:25:16,310 --> 01:25:19,020 Ние сме чување на 50. 1639 01:25:19,020 --> 01:25:22,500 >> Па по оваа линија, тоа е она што работите се случува да изгледа. 1640 01:25:22,500 --> 01:25:24,640 Па сега тоа е веќе ѓубре таму. 1641 01:25:24,640 --> 01:25:28,910 Сега знаеме дека 50 е во тоа што особено адреса, бидејќи 1642 01:25:28,910 --> 01:25:32,410 ние го поставите на тоа. 1643 01:25:32,410 --> 01:25:32,790 Во ред? 1644 01:25:32,790 --> 01:25:34,370 Па сега ние ќе се печати ѓ. 1645 01:25:34,370 --> 01:25:38,490 >> Значи прво ние ќе печати ѕвезда х. 1646 01:25:38,490 --> 01:25:39,640 Значи она што е ѕвезда X? 1647 01:25:39,640 --> 01:25:44,300 Повторно, ѕвезда x значи да одат во нешто што x е да се покажува. 1648 01:25:44,300 --> 01:25:47,140 Значи x е чување 0x123 Оди до тоа. 1649 01:25:47,140 --> 01:25:48,490 Добиеме 50. 1650 01:25:48,490 --> 01:25:50,540 Па печати ѓ тоа. 1651 01:25:50,540 --> 01:25:54,900 И тоа значи дека тој се случува да се печати 50. 1652 01:25:54,900 --> 01:25:56,850 И тогаш тоа се враќа. 1653 01:25:56,850 --> 01:25:58,340 >> И тогаш имаме вториот printf. 1654 01:25:58,340 --> 01:25:59,370 Ние сме сега проценти стр. 1655 01:25:59,370 --> 01:26:01,680 Ако не сте го виделе, тоа е колку ќе печати покажувач. 1656 01:26:01,680 --> 01:26:04,960 Значи имаме проценти I, процент ѓ, и сите оние кои се веќе. 1657 01:26:04,960 --> 01:26:07,160 Значи проценти стр, печати покажувач. 1658 01:26:07,160 --> 01:26:08,920 >> Значи x е покажувач. 1659 01:26:08,920 --> 01:26:13,440 Значи, ако ние се случува да се печати x себе, ние сме печатење она што е, всушност, во 1660 01:26:13,440 --> 01:26:19,220 x, која е 0x123 Па првите печати ѓ се случува да се печати 50. 1661 01:26:19,220 --> 01:26:23,620 Вториот печатење ѓ се случува да се печати 0x123 Да? 1662 01:26:23,620 --> 01:26:27,460 >> ПУБЛИКАТА: Дали користите проценти x да се печати покажувач? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Значи го користите проценти x да се печати покажувач? 1664 01:26:31,200 --> 01:26:38,350 Па можете да но проценти x е само, Општо земено, за пример ако имате некои 1665 01:26:38,350 --> 01:26:40,325 број и сакате да печатите како хексадецимално. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 Тоа е само како да го направите тоа. 1668 01:26:44,880 --> 01:26:47,160 >> Каде што, г проценти би печати како децимална. 1669 01:26:47,160 --> 01:26:50,310 Кои беа добиеме проценти d. јас е само цел број. 1670 01:26:50,310 --> 01:26:52,690 проценти p е специјално за совети. 1671 01:26:52,690 --> 01:26:54,060 >> Значи x е покажувач. 1672 01:26:54,060 --> 01:26:56,360 Ние сакаме да се користи проценти стр. 1673 01:26:56,360 --> 01:26:57,937 Но проценти x може да работи. 1674 01:26:57,937 --> 01:26:58,414 Да? 1675 01:26:58,414 --> 01:26:59,664 >> ПУБЛИКАТА: [Беззвучен]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Да. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Барем за овој call-- па јас не се вклучи во тука. 1680 01:27:13,440 --> 01:27:19,850 Но, овие два аргументи се нужно во внатрешноста на оваа оџакот рамка 1681 01:27:19,850 --> 01:27:23,040 заедно со сите локални променливи printf се случува да биде во употреба. 1682 01:27:23,040 --> 01:27:27,020 И потоа на следниот повик на printf сега внатрешноста на printf магацинот рамка е 1683 01:27:27,020 --> 01:27:33,960 проценти стр обратна коса црта n и без оглед на вредноста на x е, кое е 0x123. 1684 01:27:33,960 --> 01:27:34,425 Да? 1685 01:27:34,425 --> 01:27:35,675 >> ПУБЛИКАТА: [Беззвучен]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> Роб: Ќе печати нешто што изгледа вака. 1688 01:27:40,880 --> 01:27:41,846 >> ПУБЛИКАТА: [Беззвучен]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: Значи тоа отпечатоци во форма адреса. 1690 01:27:44,510 --> 01:27:47,003 Тоа изгледа како адреса. 1691 01:27:47,003 --> 01:27:47,494 Да? 1692 01:27:47,494 --> 01:27:49,458 >> ПУБЛИКАТА: [Беззвучен]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Зошто е она? 1694 01:27:51,075 --> 01:27:52,920 >> ПУБЛИКАТА: [Беззвучен]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Зошто е овој покажувач 4 бајти? 1696 01:27:55,240 --> 01:27:58,500 Па така постојат бројни на 0 е во предниот дел на оваа. 1697 01:27:58,500 --> 01:28:03,740 Така што е навистина 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 На 64-битен систем, ќе има целиот куп на повеќе нули. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Да? 1701 01:28:11,900 --> 01:28:13,150 >> ПУБЛИКАТА: [Беззвучен]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Значи првата printf се случува да print-- 1704 01:28:21,130 --> 01:28:21,980 >> ПУБЛИКАТА: [Беззвучен]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Да, тоа се случува да се печати што x е да се покажува. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Ѕвезда вели дека она што е оваа нешто што укажува. 1708 01:28:29,070 --> 01:28:30,300 Земи го. 1709 01:28:30,300 --> 01:28:31,455 Па што е тоа што укажува? 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 Земи го. 1712 01:28:32,410 --> 01:28:33,390 Тоа е она што ние ќе треба да се печати. 1713 01:28:33,390 --> 01:28:37,020 Каде што, на следната, ние сме само печатење х себе. 1714 01:28:37,020 --> 01:28:38,850 Она што е внатре на f? 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 Во ред. 1717 01:28:44,500 --> 01:28:46,620 >> А потоа, конечно, имаме бесплатно. 1718 01:28:46,620 --> 01:28:48,040 Што поминува за да се ослободи? 1719 01:28:48,040 --> 01:28:49,470 Ние сме минува х. 1720 01:28:49,470 --> 01:28:52,380 Тоа време, всушност, се прикажува тоа во магацинот рамка. 1721 01:28:52,380 --> 01:28:56,370 >> Па ние сме полагање на вредност 0x123 да се ослободи. 1722 01:28:56,370 --> 01:28:59,070 Па сега слободно знае, добро, Морам да одам до грамада 1723 01:28:59,070 --> 01:29:00,050 и слободна дека меморијата. 1724 01:29:00,050 --> 01:29:03,920 Тоа е веќе користење на она што е на адреса 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> Така слободно се случува да се ослободи дека од грамада. 1726 01:29:07,010 --> 01:29:09,490 Сега нашата куп е празна повторно. 1727 01:29:09,490 --> 01:29:11,120 Ние немаме меморија протекување. 1728 01:29:11,120 --> 01:29:12,940 Сега слободно ќе се вратат. 1729 01:29:12,940 --> 01:29:16,130 Забележете дека x е уште 0x123. 1730 01:29:16,130 --> 01:29:18,240 Но, тоа е сега не е валиден меморија. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Ние треба повеќе не dereference х. 1733 01:29:23,986 --> 01:29:24,440 Да? 1734 01:29:24,440 --> 01:29:27,240 >> ПУБЛИКАТА: Дали се вратат 0 излишни? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: Дали returen 0 излишни? 1736 01:29:28,290 --> 01:29:31,110 Да. 1737 01:29:31,110 --> 01:29:33,950 Ние само се стави дека таму, бидејќи имаме враќање еден за воздух. 1738 01:29:33,950 --> 01:29:36,830 Па тоа е како, да, да вклучи и враќање 0. 1739 01:29:36,830 --> 01:29:37,310 Да? 1740 01:29:37,310 --> 01:29:38,560 >> ПУБЛИКАТА: [Беззвучен]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: Значи по слободен x, што се случува ако ние се обидуваме да dereference на покажувачот? 1743 01:29:45,580 --> 01:29:47,240 Можно е дека ништо не е во ред. 1744 01:29:47,240 --> 01:29:49,330 Можно е дека ние се уште ќе добиете 50. 1745 01:29:49,330 --> 01:29:53,590 >> Можно е, исто така, дека тоа е меморија сега се користи за нешто друго. 1746 01:29:53,590 --> 01:29:57,140 Така што е недефинирано однесување. 1747 01:29:57,140 --> 01:30:00,772 И недефинирани значи нешто може да се случи. 1748 01:30:00,772 --> 01:30:01,250 Да? 1749 01:30:01,250 --> 01:30:02,500 >> ПУБЛИКАТА: [Беззвучен]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> Роб: Не, па ако се додели x на нешто друго. 1752 01:30:10,830 --> 01:30:15,870 Па ако тука рековме x е еднаква на Примерок нешто else-- 1753 01:30:15,870 --> 01:30:17,100 Примерок големина event-- 1754 01:30:17,100 --> 01:30:20,180 потоа дека оригиналниот блок меморија не е ослободен. 1755 01:30:20,180 --> 01:30:21,490 И официјално го загуби. 1756 01:30:21,490 --> 01:30:23,150 Тоа е меморија излегуваат во јавноста. 1757 01:30:23,150 --> 01:30:25,090 Ја изгубивме сите референци на тој блок од меморија. 1758 01:30:25,090 --> 01:30:26,827 Значи не постои начин ние некогаш може да го ослободи. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 Добро, така што потоа се врати 0 значи направено. 1761 01:30:36,630 --> 01:30:37,900 >> Добро, па оџакот претекување. 1762 01:30:37,900 --> 01:30:39,320 Што е идејата тука? 1763 01:30:39,320 --> 01:30:41,210 Па се сеќавам, куп се случува долу. 1764 01:30:41,210 --> 01:30:43,480 Магацинот се случува до. 1765 01:30:43,480 --> 01:30:48,000 Значи ова е пример од предавање, Мислам, каде што главните е само ќе 1766 01:30:48,000 --> 01:30:51,380 јавите на оваа функција foo, кој ќе да се нарекува рекурзивно одново и 1767 01:30:51,380 --> 01:30:52,320 одново. 1768 01:30:52,320 --> 01:30:55,370 >> Па магацинот рамки се случува да се работат иста. 1769 01:30:55,370 --> 01:30:58,130 Значи ние се случува да се започне со главните како на дното магацинот рамка. 1770 01:30:58,130 --> 01:31:02,000 Потоа главни се случува да се јавите на foo, која се случува да се добие магацинот рамка. 1771 01:31:02,000 --> 01:31:04,260 >> Тогаш foo се случува да се јавите на foo повторно, се случува да се 1772 01:31:04,260 --> 01:31:05,500 друг магацинот рамка. 1773 01:31:05,500 --> 01:31:08,270 А потоа, повторно, и повторно, и повторно, и повторно се додека, конечно, трчаме 1774 01:31:08,270 --> 01:31:09,190 во грамада. 1775 01:31:09,190 --> 01:31:11,990 Значи ова е како да се добие магацинот претекување. 1776 01:31:11,990 --> 01:31:14,910 И во овој момент, можете СКГ вина. 1777 01:31:14,910 --> 01:31:17,335 Или сакате навистина СКГ мана пред овој момент, но да. 1778 01:31:17,335 --> 01:31:19,660 >> ПУБЛИКАТА: Дали основни депонија на исто како СКГ грешка? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Значи ќе видите сегментација грешка јадро фрлени. 1780 01:31:26,140 --> 01:31:28,760 Ќе добие основни депонија кога ќе СКГ вина. 1781 01:31:28,760 --> 01:31:32,580 И тоа е како депонија на сите содржината на вашиот тековната меморија, така 1782 01:31:32,580 --> 01:31:36,670 дека можете да се обидете и да ги идентификуваат зошто СКГ обвини. 1783 01:31:36,670 --> 01:31:37,135 Да? 1784 01:31:37,135 --> 01:31:38,385 >> ПУБЛИКАТА: [Беззвучен]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Значи сегментација грешка средства има оџакот претекување. 1787 01:31:45,460 --> 01:31:47,060 Па не мора да значи. 1788 01:31:47,060 --> 01:31:49,880 А сегментација грешка значи дека ти си допирање меморија на начин 1789 01:31:49,880 --> 01:31:50,880 не треба да биде. 1790 01:31:50,880 --> 01:31:54,750 Значи еден начин тоа да се случи е, кога да магацинот претекување, ние започнуваме допирање 1791 01:31:54,750 --> 01:31:58,736 меморија на начин на кој ние не треба да биде. 1792 01:31:58,736 --> 01:31:59,208 Да? 1793 01:31:59,208 --> 01:32:00,458 >> ПУБЛИКАТА: [Беззвучен]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Значи во внатрешноста на бесконечна јамка. 1796 01:32:05,830 --> 01:32:08,770 Како, ова е како рекурзивен бесконечно јамка и така ние се уште 1797 01:32:08,770 --> 01:32:09,770 магацинот рамка секој пат. 1798 01:32:09,770 --> 01:32:13,540 Но само во внатрешноста на редовна бесконечна додека one-- 1799 01:32:13,540 --> 01:32:16,390 добро, ајде да не дури и печати f-- 1800 01:32:16,390 --> 01:32:17,040 направи нешто. 1801 01:32:17,040 --> 01:32:18,390 Сеедно. 1802 01:32:18,390 --> 01:32:20,610 >> Ние нема да се добива друг магацинот рамка. 1803 01:32:20,610 --> 01:32:22,530 Ние сме само ќе да се задржи looping во текот на оваа единствена настава. 1804 01:32:22,530 --> 01:32:23,920 Магацинот не е во пораст. 1805 01:32:23,920 --> 01:32:27,290 Тоа е фактот дека секој рекурзивен повик ни дава магацинот рамка. 1806 01:32:27,290 --> 01:32:31,231 Тоа е причината зошто ние се добие оџакот претекување. 1807 01:32:31,231 --> 01:32:31,728 Да? 1808 01:32:31,728 --> 01:32:38,189 >> ПУБЛИКАТА: Значи, ако ти рече да се добие додека јамка, а потоа [Беззвучен]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Значи, ако внатрешноста на додека јамка имаше printf, сеуште ќе 1810 01:32:42,000 --> 01:32:42,790 не СКГ вина. 1811 01:32:42,790 --> 01:32:46,090 Јас едноставно не сакаат да ги мешаме работите. 1812 01:32:46,090 --> 01:32:46,610 Тоа би јамка. 1813 01:32:46,610 --> 01:32:48,225 Ќе добиете еден оџак рамка за printf. 1814 01:32:48,225 --> 01:32:49,580 >> Тогаш printf ќе се врати. 1815 01:32:49,580 --> 01:32:50,280 Тогаш би јамка повторно. 1816 01:32:50,280 --> 01:32:51,460 Ќе добиете еден оџак рамка за printf. 1817 01:32:51,460 --> 01:32:52,850 Тоа ќе се вратат. 1818 01:32:52,850 --> 01:32:54,060 Еден магацинот рамка. 1819 01:32:54,060 --> 01:33:00,215 Па вие не сте добивање на овој бескраен натрупување магацинот рамки. 1820 01:33:00,215 --> 01:33:03,185 >> ПУБЛИКАТА: [Беззвучен]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Да. 1822 01:33:04,040 --> 01:33:09,360 Значи ова магацинот претекување се случува бидејќи ниту еден од овие 1823 01:33:09,360 --> 01:33:11,600 повици кон foo се враќаат. 1824 01:33:11,600 --> 01:33:15,250 Значи, ако ние се вратат, тогаш ќе започне губење на магацинот рамки. 1825 01:33:15,250 --> 01:33:17,870 И тогаш ние не би магацинот претекување. 1826 01:33:17,870 --> 01:33:20,070 И тоа е причината зошто ви е потребна база случај за вашите лични функции. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Да? 1829 01:33:23,479 --> 01:33:27,375 >> ПУБЛИКАТА: Дали потенцијалната големина и магацинот за грамада исти за 1830 01:33:27,375 --> 01:33:29,880 сите програми? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Приближно. 1832 01:33:31,910 --> 01:33:35,090 Е потенцијалната големина на магацинот и грамада исти за сите програми? 1833 01:33:35,090 --> 01:33:37,180 Грубо. 1834 01:33:37,180 --> 01:33:40,080 Има некои рандомизација да каде што магацинот почнува и 1835 01:33:40,080 --> 01:33:42,400 каде грамада започнува. 1836 01:33:42,400 --> 01:33:45,870 Ако се случи да имаат едночудо глобални променливи и работите, можеби 1837 01:33:45,870 --> 01:33:49,520 се далеку од некои простор за вашиот грамада. 1838 01:33:49,520 --> 01:33:54,060 >> На 64-битен систем, вие буквално имаат бесконечна меморија. 1839 01:33:54,060 --> 01:33:55,820 Има само толку многу. 1840 01:33:55,820 --> 01:33:59,250 Меѓу 32 бита и 64 бита, што значајна разлика. 1841 01:33:59,250 --> 01:34:02,350 >> Ви се случува да се добие целина многу повеќе магацинот и грамада простор на 64-битна 1842 01:34:02,350 --> 01:34:05,810 систем, бидејќи таму е само уште адреси што тие можат да го користат. 1843 01:34:05,810 --> 01:34:09,360 Но на индивидуален систем, тоа ќе биде приближно иста количина на оџакот 1844 01:34:09,360 --> 01:34:10,785 и грамада простор. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 Во ред. 1847 01:34:15,530 --> 01:34:18,220 >> Па последната работа е компилација. 1848 01:34:18,220 --> 01:34:19,810 Така што треба да знаете овој процес. 1849 01:34:19,810 --> 01:34:22,240 Постојат четири големи чекори. 1850 01:34:22,240 --> 01:34:24,400 Значи првиот треба да биде лесно да се запомни. 1851 01:34:24,400 --> 01:34:25,085 Претходна обработка. 1852 01:34:25,085 --> 01:34:28,390 Тоа го има префиксот пред во неа. 1853 01:34:28,390 --> 01:34:32,080 Значи станува збор, пред сè друго. 1854 01:34:32,080 --> 01:34:34,000 >> Она е да се запамети е хаш. 1855 01:34:34,000 --> 01:34:37,250 Па хаш дефинира и хаш вклучува во сите од нив. 1856 01:34:37,250 --> 01:34:39,560 Тоа се сите пред-процесор директиви. 1857 01:34:39,560 --> 01:34:42,030 Овие се работите што пред-процесор се грижи за. 1858 01:34:42,030 --> 01:34:43,680 >> Значи она што не пред-процесор направам? 1859 01:34:43,680 --> 01:34:44,850 Тоа е навистина глупава работа. 1860 01:34:44,850 --> 01:34:49,380 Сето тоа е во состојба да се сите овие копија, и сече, паста и операции. 1861 01:34:49,380 --> 01:34:51,790 >> Па хаш вклучува стандардни I0 точка ч. 1862 01:34:51,790 --> 01:34:52,990 Што е тоа го прават? 1863 01:34:52,990 --> 01:34:56,610 Тоа е грабање на стандард I0 точка ж поднесе и вметнување во врвот 1864 01:34:56,610 --> 01:34:58,960 каде што се вели хаш вклучува стандард I0 точка ч. 1865 01:34:58,960 --> 01:35:02,480 >> И секоја хаш се дефинира дека ние сме види, што е тоа го прават? 1866 01:35:02,480 --> 01:35:06,730 Нејзините копирање на вредноста што хаш дефиниран е дефинирана како и вметнување дека 1867 01:35:06,730 --> 01:35:08,500 каде и да сте со користење на вредност. 1868 01:35:08,500 --> 01:35:13,400 Па препроцесори само навистина едноставен текст, базирани на операции. 1869 01:35:13,400 --> 01:35:15,870 Таа не прави ништо паметни. 1870 01:35:15,870 --> 01:35:18,920 Па се друго е посложена. 1871 01:35:18,920 --> 01:35:22,970 >> Па сега дека препроцесори е да се направи, ние всушност ги собере. 1872 01:35:22,970 --> 01:35:24,320 Значи она што не составувањето значи? 1873 01:35:24,320 --> 01:35:27,310 Ние сме сега се случува од C код да асемблерски код. 1874 01:35:27,310 --> 01:35:27,570 Да? 1875 01:35:27,570 --> 01:35:28,820 >> ПУБЛИКАТА: [Беззвучен]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Да, ние фатени тоа. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 Па составувањето. 1880 01:35:38,660 --> 01:35:40,310 Одиме од C до собранието. 1881 01:35:40,310 --> 01:35:42,470 Па ова е вистински јазик промени. 1882 01:35:42,470 --> 01:35:45,240 Составувањето на себе значи одат од повисоко ниво јазик да 1883 01:35:45,240 --> 01:35:47,340 пониско ниво јазик. 1884 01:35:47,340 --> 01:35:50,720 >> И c е на високо ниво јазик во споредба со собранието. 1885 01:35:50,720 --> 01:35:52,320 Што е монтажа? 1886 01:35:52,320 --> 01:35:56,440 Нејзините упатства кои се, прилично многу, направени за вашиот процесор. 1887 01:35:56,440 --> 01:35:59,130 Но вашиот компјутер уште не не разбирам собранието. 1888 01:35:59,130 --> 01:36:01,570 Тоа само што ја разбира оние кои и нули. 1889 01:36:01,570 --> 01:36:06,160 Па следниот чекор е монтажа, која нè носи од овие упатства кои 1890 01:36:06,160 --> 01:36:08,760 вашиот процесор разбира и, всушност, преведува нив, да 1891 01:36:08,760 --> 01:36:10,820 на оние кои и нули. 1892 01:36:10,820 --> 01:36:13,570 >> Значи C до собранието на бинарни. 1893 01:36:13,570 --> 01:36:15,870 Но, јас немаат извршна уште. 1894 01:36:15,870 --> 01:36:19,550 Значи мислам на cs50 библиотека. 1895 01:36:19,550 --> 01:36:23,070 Ние сме ви се предвидени со бинарни за овој cs50 библиотека, која има GetString 1896 01:36:23,070 --> 01:36:24,400 и GetInt и сето тоа. 1897 01:36:24,400 --> 01:36:25,700 >> Но cs50 library-- 1898 01:36:25,700 --> 01:36:27,650 и на itself-- не е извршна. 1899 01:36:27,650 --> 01:36:29,570 Тоа не имаат главната функција. 1900 01:36:29,570 --> 01:36:32,230 Тоа е само еден куп на бинарни дека можете да го користите. 1901 01:36:32,230 --> 01:36:41,730 Така ги поврзува е тоа како ние ги собере сите на овие различни бинарни датотеки 1902 01:36:41,730 --> 01:36:43,110 во вистински извршна. 1903 01:36:43,110 --> 01:36:45,900 Онаа што може да внесете дот намали точка надвор. 1904 01:36:45,900 --> 01:36:51,660 >> Значи ова е како на датотеката која сте напиша, - без оглед на вашата програма is-- 1905 01:36:51,660 --> 01:36:53,620 Ceaser точка в. 1906 01:36:53,620 --> 01:36:55,100 Но, сега тоа е се составени до бинарни. 1907 01:36:55,100 --> 01:36:56,480 Па Ceaser точка о. 1908 01:36:56,480 --> 01:36:59,620 И ова е нашиот cs50 библиотеки бинарна. 1909 01:36:59,620 --> 01:37:02,284 И тие се во комбинација во една извршна. 1910 01:37:02,284 --> 01:37:02,758 Да? 1911 01:37:02,758 --> 01:37:04,008 >> ПУБЛИКАТА: [Беззвучен]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Значи прво вклучуваат, се сеќавам, хаш вклучуваат е всушност 1914 01:37:12,710 --> 01:37:13,810 пред-процесор чекор. 1915 01:37:13,810 --> 01:37:14,750 Но тоа е посебен. 1916 01:37:14,750 --> 01:37:20,730 Ако не сте користење на било функции кои се надвор од вашата една датотека тогаш, 1917 01:37:20,730 --> 01:37:26,100 Не, вие не треба да се поврзе ништо бидејќи имате сè. 1918 01:37:26,100 --> 01:37:30,310 >> Тоа, рече, printf се поврзани со. 1919 01:37:30,310 --> 01:37:32,820 Ако некогаш сте се користи printf, тоа е нешто што треба да се поврзани во 1920 01:37:32,820 --> 01:37:35,740 затоа што не си се напише тоа. 1921 01:37:35,740 --> 01:37:39,530 И, всушност, printf е автоматски поврзани во. 1922 01:37:39,530 --> 01:37:42,760 Знаеш како е на командната линија или кога што пишувате се направи, ќе видите дека има 1923 01:37:42,760 --> 01:37:46,690 цртичка л cs50, која има линк во cs50 библиотека? 1924 01:37:46,690 --> 01:37:49,070 Printf, и работи како што, се случува да бидат поврзани во автоматски. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Било какви други прашања за ништо? 1927 01:37:53,930 --> 01:37:56,280 >> ПУБЛИКАТА: [Беззвучен]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: Поврзување? 1929 01:37:58,300 --> 01:38:03,450 Имаме еден куп на различни бинарни датотеки. 1930 01:38:03,450 --> 01:38:06,410 Ова е канонски пример кои ги користиме е cs50 библиотека. 1931 01:38:06,410 --> 01:38:09,960 Имаме составил и дава на вас бинарни за овој cs50 библиотека. 1932 01:38:09,960 --> 01:38:12,410 >> Сакате да го користите GetString во својата програма. 1933 01:38:12,410 --> 01:38:14,750 А ти оди и го користат GetString. 1934 01:38:14,750 --> 01:38:19,700 Но без мојот бинарен код за GetString, кога ќе компајлирате вашиот код 1935 01:38:19,700 --> 01:38:23,140 надолу, не, всушност може да се кандидира на вашиот програма, бидејќи GetString String е 1936 01:38:23,140 --> 01:38:25,080 уште не се целосно дефинирани. 1937 01:38:25,080 --> 01:38:29,220 >> Тоа е само кога ќе се водат во мојот бинарен која содржи GetString дека сега, сите 1938 01:38:29,220 --> 01:38:31,130 право, јас всушност може да изврши GetString. 1939 01:38:31,130 --> 01:38:32,330 Мојата датотека е завршена. 1940 01:38:32,330 --> 01:38:34,208 И можам да ја извршите оваа. 1941 01:38:34,208 --> 01:38:34,697 Да? 1942 01:38:34,697 --> 01:38:37,631 >> ПУБЛИКАТА: Дали поврзува конвертирате бинарен на извршна? 1943 01:38:37,631 --> 01:38:42,032 Па дури и ако немате други библиотеки, нема да се уште да биде 1944 01:38:42,032 --> 01:38:44,477 потребно да се преведе на [Беззвучен]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Значи извршна се уште е во бинарен. 1946 01:38:48,640 --> 01:38:51,750 Тоа е само комбинирање целина куп на бинарни датотеки. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> ПУБЛИКАТА: Ви благодарам многу. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Нема проблем. 1950 01:38:58,560 --> 01:38:59,540 Било какви други прашања? 1951 01:38:59,540 --> 01:39:02,001 Инаку, ние сме сите во собата. 1952 01:39:02,001 --> 01:39:02,690 Во ред. 1953 01:39:02,690 --> 01:39:02,990 Благодарност. 1954 01:39:02,990 --> 01:39:03,590 >> [Аплауз] 1955 01:39:03,590 --> 01:39:04,490 >> ПУБЛИКАТА: Ви благодариме. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Да. 1957 01:39:05,740 --> 01:39:06,582