1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> SPEAKER 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 Така че, добре дошли в 0 прегледа на CS50 Quiz. 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 Binary означава това, което звучи като, 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 Основи на Binary. 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 Ако имате един във всяка от тези места, вие го умножете по какъвто и 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, носите една, да я направи по-0, и да направим добавянето по този начин, просто 40 00:02:24,220 --> 00:02:29,910 като може да се очаква с редовен знак или друга база. 41 00:02:29,910 --> 00:02:30,970 Cool. 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 Да, толкова просто пространство B пространство C пространство D. Къде отиде мишката ми? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Забележете, можете да определите едно цяло число на 65. 58 00:03:43,380 --> 00:03:47,080 И когато печатате, че се използва процента C, това ще се тълкува, че като 59 00:03:47,080 --> 00:03:49,330 характер и ще отпечатате A. 60 00:03:49,330 --> 00:03:52,800 >> Също така, можете да декларирате това като знак. 61 00:03:52,800 --> 00:03:56,860 И когато го отпечатате с помощта на процента C, това ще се тълкува, че като 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 Cool. 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 Така че това може да бъде източник на код за C. 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 Или, ако дори и да предприемат други класове, можете може да направи Java, Python, или дори 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 >> SPEAKER 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 >> SPEAKER 1: Това не е така. 145 00:08:20,830 --> 00:08:25,810 The сте на 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 >> SPEAKER 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 >> SPEAKER 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 >> SPEAKER 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 Един пример на прост, много прост, програма, която използва Boolean 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 >> SPEAKER 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 Cool. 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 Така че ние знаем, ако х е по-малко от 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 >> Ние обикновено се използва за линия, ако знаем колко пъти ние искаме да превъртите 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 Така, например, бихме могли да се инициализира Що се отнася аз равна на 0. 220 00:12:32,340 --> 00:12:34,040 аз е по-малко от 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 Той има вид завръщане, вътр. 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-- ФОРМАТ е 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 Standard I / O библиотека. 244 00:13:38,510 --> 00:13:39,200 Да, въпрос? 245 00:13:39,200 --> 00:13:41,610 >> АУДИТОРИЯ: е основният просто присъщи на C? 246 00:13:41,610 --> 00:13:44,740 Има ли просто вид [недоловим]? 247 00:13:44,740 --> 00:13:47,370 >> SPEAKER 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 >> SPEAKER 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 Cool. 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 Налице е един вид завръщане тук, в този случай ПНА, нашето име функция 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 По същия начин, в Scratch, когато имате множество спрайтове, може да се 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 В Scratch, това беше, когато сте използвали излъчване контрол и когато аз 299 00:16:26,840 --> 00:16:29,500 Получаване на блокове. 300 00:16:29,500 --> 00:16:35,170 >> И също така, в Проблем Set 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 , който показва на вашия грама редактиране, за да, по същество, се движите вашия компютър. 311 00:17:12,119 --> 00:17:19,440 >> Така например, LS изброява съдържанието на директория. 312 00:17:19,440 --> 00:17:22,510 Направете директория създава нова папка. 313 00:17:22,510 --> 00:17:24,819 CD, промяна директория. 314 00:17:24,819 --> 00:17:28,400 RM, премахнете изтрива файл или някоя директория. 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 >> SPEAKER 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 Standard I / O и CS50. 332 00:18:20,860 --> 00:18:25,410 Какви неща са включени в стандартния I / O библиотеката? 333 00:18:25,410 --> 00:18:28,410 >> Да, досега сме използвали ФОРМАТ. 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 ПНА, 4 байта; Чар, един байт. 344 00:19:04,990 --> 00:19:06,550 Float е 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 >> SPEAKER 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 >> SPEAKER 1: OK. 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 >> SPEAKER 1: Да, удвои с вътр. 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 >> SPEAKER 1: Long [недоловим]. 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 Дълга е само едно цяло число. 364 00:19:47,107 --> 00:19:50,910 Това зависи от архитектурата преди [недоловим] 365 00:19:50,910 --> 00:19:52,922 и междинно съединение има същия размер. 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 >> SPEAKER 1: Така че, дълъг и на INT са еднакви. 369 00:20:00,920 --> 00:20:02,943 И тогава много, много дълго е два пъти по-Int. 370 00:20:02,943 --> 00:20:03,910 Cool. 371 00:20:03,910 --> 00:20:05,550 И тогава, какво е последният тип? 372 00:20:05,550 --> 00:20:06,510 >> АУДИТОРИЯ: Pointer. 373 00:20:06,510 --> 00:20:10,350 >> SPEAKER 1: Да, така научихме малко за указатели. 374 00:20:10,350 --> 00:20:14,015 И независимо от това, което показалка е сочейки да-- тя може да бъде Чар звезда 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 >> SPEAKER 1: Така дълго и INT са същото в този CS50 уред. 381 00:20:29,530 --> 00:20:32,302 >> АУДИТОРИЯ: Уредът са напълно взаимозаменяеми. 382 00:20:32,302 --> 00:20:33,510 >> SPEAKER 1: Да. 383 00:20:33,510 --> 00:20:36,610 Така че след това дълго време е двойно на вътр. 384 00:20:36,610 --> 00:20:39,250 >> АУДИТОРИЯ: Това е 32-битов? 385 00:20:39,250 --> 00:20:40,620 >> SPEAKER 1: 32 битов, да. 386 00:20:40,620 --> 00:20:43,572 >> АУДИТОРИЯ: Значи [недоловим]? 387 00:20:43,572 --> 00:20:46,790 >> SPEAKER 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 >> SPEAKER 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 Така че как ще се определя от вътр [недоловим]? 398 00:21:15,374 --> 00:21:18,140 >> SPEAKER 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 >> SPEAKER 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 >> SPEAKER 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 >> АУДИТОРИЯ: OK. 411 00:21:50,365 --> 00:21:54,230 Значи вие казвате, че двойно е два пъти размера на плувка? 412 00:21:54,230 --> 00:21:58,202 >> SPEAKER 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 >> SPEAKER 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 >> SPEAKER 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 Cool. 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 Но това е, когато ние използваме ФОРМАТ, например. 430 00:22:54,800 --> 00:22:59,260 И ние имаме тези контейнери, които бяха наречени кодове формат. 431 00:22:59,260 --> 00:23:03,910 >> Така че процента в Чар, процента аз за вътр, и ние можем да използваме процента г. 432 00:23:03,910 --> 00:23:05,130 Това е едно и също нещо. 433 00:23:05,130 --> 00:23:08,200 Но, обикновено, в CS50 ние опитате да използвате процента аз. 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 Например, наклонена черта н за нов ред. 438 00:23:22,431 --> 00:23:26,910 Това е само за когато сте на форматиране вашия код за печат F. 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 >> SPEAKER 1: Така че въпросът е това, което е на сто за г? 442 00:23:31,850 --> 00:23:33,270 Процент г е за цели числа. 443 00:23:33,270 --> 00:23:37,392 Процент г и процента и са еднакви. 444 00:23:37,392 --> 00:23:41,130 >> АУДИТОРИЯ: Каква е разликата между наклонена черта н наклонена черта и R? 445 00:23:41,130 --> 00:23:45,300 >> SPEAKER 1: Така че въпросът е каква е разлика между луфт н и 446 00:23:45,300 --> 00:23:48,615 хлабина R? 447 00:23:48,615 --> 00:23:50,906 Мисля, наклонена черта R е-- 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 Като има предвид, п всъщност води до нов линия и отива [недоловим]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> SPEAKER 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 >> [APPLAUSE] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: All десняк. 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 Така че ние можем да направим това с символа на целочислени, поплавъци за цели числа, и 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 неща като плувка на целочислени. 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 И тогава можем да го отпечатате като вътр. 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 >> DAN: Така че аз съм го умножи по 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 >> DAN: Може да има някои странни цифри. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Така че прав, това е 1,3 пъти 10000. 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 >> АУДИТОРИЯ: 13100. 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13100. 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 >> DAN: Значи, защото имам това в печатен вид, тя прави това умножение, преди да го 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 >> DAN: Мисля, че ще хвърли първата, да, която ще бъде 10 000. 502 00:27:11,350 --> 00:27:12,610 Нещо друго? 503 00:27:12,610 --> 00:27:13,330 Cool. 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 SIG смокини върху този поплавък, ние получаваме един вид 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 OK. 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 >> DAN: Стойности, че п може да бъде. 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 >> DAN: Можете да отпечатате ниска, а след това той ще отпечата среда и 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 >> DAN: Значи всичко под един случай преди почивка попада под. 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 >> DAN: Така че този номер е само конкретен стойност, която тази променлива 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 >> DAN: Да, при две ще отпечата среден и след това почивка. 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 >> DAN: Мисля, че има такива? 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 Но това означава, че само нещо над символа и цели числа и неща като това, защото 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 Така че доста много, само цели числа и символа и подобни неща. 572 00:31:07,320 --> 00:31:12,360 >> DAN: Да, това е, когато имате изричното ценности, които вие знаете, аз мисля, че може да бъде 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 OK. 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 >> DAN: Това не работи, да. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Strings. 590 00:32:18,660 --> 00:32:19,780 String Чар *. 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, U капитал, капитал 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 >> DAN: Да. 609 00:33:01,995 --> 00:33:05,170 >> АУДИТОРИЯ: Какво означава [недоловим]? 610 00:33:05,170 --> 00:33:10,050 >> DAN: Ако, да речем, изчистване се нарича, когато не разполагат с достатъчно памет, за да получите 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 >> DAN: Да, и това е този. 624 00:33:48,922 --> 00:33:51,750 >> АУДИТОРИЯ: [недоловим]? 625 00:33:51,750 --> 00:33:52,800 >> DAN: тя правописа, тъй като това. 626 00:33:52,800 --> 00:33:54,150 Това е NULL терминатора. 627 00:33:54,150 --> 00:33:56,560 Той е с малки букви N-U-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 >> DAN: Ето ти. 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 >> DAN: Значи капитал N, U капитал, капитал 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 Така че като се върне вътр макс от 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 >> DAN: Не може просто да се покажат NULL. 660 00:35:25,400 --> 00:35:30,130 Вие ще трябва да се провери Чар макс, защото благодарение на върнатата стойност от функцията е 661 00:35:30,130 --> 00:35:35,416 а не характера на показалеца. 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 >> DAN: Не 666 00:35:41,000 --> 00:35:45,930 И това е всъщност как дължина низ знае как да спре, тъй като преминава през 667 00:35:45,930 --> 00:35:49,070 си масив от знаци, докато тя вижда NULL характер. 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 >> DAN: Здравейте ще бъде пет. 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 >> DAN: Да. 685 00:36:48,460 --> 00:36:51,340 >> АУДИТОРИЯ: [недоловим]? 686 00:36:51,340 --> 00:36:56,700 >> DAN: Ако имате какво се случва в масива вече е направена. 687 00:36:56,700 --> 00:37:02,260 Така бихте могли да определите това, вместо като да речем, Чар, независимо от името на вашия 688 00:37:02,260 --> 00:37:12,200 масив е, празни скоби се равнява къдрави подпре H запетая E запетая L запетая L запетая 689 00:37:12,200 --> 00:37:16,290 O запетая 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 >> DAN: След това трябва да има размера вече извършени. 693 00:37:23,110 --> 00:37:23,896 >> АУДИТОРИЯ: [недоловим]? 694 00:37:23,896 --> 00:37:25,146 >> DAN: Да. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 All десняк. 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 Main отнема два аргумента. 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 >> Така че, ако, да речем, се нарича функция, като например една точка от едно пространство, две пространство, три, 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 >> DAN: Последният елемент в масива защото масивът е с дължина 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 >> И това е нулев указател. 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 >> DAN: Къде се съхранява? 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 >> DAN: Да, това е просто различен начин за получаване на информация от страна на потребителя. 736 00:40:00,990 --> 00:40:06,030 Това е малко по-ефективен и това е по-удобно за скриптове, защото 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 >> DAN: Да? 742 00:40:18,834 --> 00:40:21,114 >> АУДИТОРИЯ: [недоловим]? 743 00:40:21,114 --> 00:40:27,545 >> DAN: Да, 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 >> DAN: Да, всеки от аргументите са приключи през 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 >> DAN: Да, argv argc е нулев указател. 751 00:40:44,116 --> 00:40:45,112 >> АУДИТОРИЯ: [недоловим]? 752 00:40:45,112 --> 00:40:47,104 >> DAN: О, да. 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 >> DAN: Така че въпросът е, ако сте имали командния ред точка наклонена черта една точка от 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 >> DAN: Но, ако това е било в test-- 765 00:41:42,600 --> 00:41:46,550 Да-- а също и ако ви кажа нещо като 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 >> DAN: Мисля, че ако вместо да извикат тази в 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 И тя все още ще работят, бихте просто-- 774 00:42:18,790 --> 00:42:21,520 вместо да се използва argc-- би трябвало да използвате а и б. 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 >> DAN: Така че въпросът е GetString е ще се съхранява паметта в купчината 780 00:42:38,850 --> 00:42:42,280 защото GetString е знак *. 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 OK, напред. 785 00:42:55,090 --> 00:42:55,950 >> Security. 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 >> Debugging. 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 >> Print отнема променлива и отпечатва каквото и да е променлива по това 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 >> DAN: Да, което е дебъгер. 830 00:45:28,200 --> 00:45:34,230 Така дебъгер е програма, която ви позволява да развенчава вашата програма. 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 п. 841 00:46:16,070 --> 00:46:19,250 >> Binary търсене, което се нуждае от користните елементи. 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 Ако тя е по-малка, изглеждаш каже че по-- Да, какво има? 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 >> DAN: Да. 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 >> DAN: А фактът, че не сте имали да го направя за проблем набор, че е справедливо 854 00:47:10,260 --> 00:47:12,420 игра за теста. 855 00:47:12,420 --> 00:47:15,186 >> АУДИТОРИЯ: Може ли да отидем над него как да-- 856 00:47:15,186 --> 00:47:17,052 >> DAN: Той ще мине през. 857 00:47:17,052 --> 00:47:20,496 >> SPEAKER 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 >> SPEAKER 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 вмъкване вид или нещо такова. 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 >> DAN: Това е за мен. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [APPLAUSE] 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 OK? 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: OK, призовава себе си, да. 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 Така например, можете да трябва-- като Dan че говорех за двоично търсене. 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 >> ОК, така че тук е един пример. 903 00:50:04,270 --> 00:50:07,280 Така че нека да кажем, че искам да се избере всички числа от 1 до п. 904 00:50:07,280 --> 00:50:13,790 Мога да осъзнаят, че сумата на N номер е п п плюс минус 1 до 1. 905 00:50:13,790 --> 00:50:17,810 Но тогава, ако аз гледам на п минус един плюс п минус две плюс едно, че е същото 906 00:50:17,810 --> 00:50:20,680 нещо като сумиране номера до п минус 1. 907 00:50:20,680 --> 00:50:25,890 Така че мога да кажа, сумата от равен сума равнява п плюс сумата от п минус 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 Това отнема цяло число п. 916 00:50:51,700 --> 00:50:56,300 Така че тук за първи път, проверете дали N е по-малко или равно на нула. 917 00:50:56,300 --> 00:51:00,310 Така че, ако това е по-малко или равно на нула, I върнете нула, което е нашата база случай. 918 00:51:00,310 --> 00:51:05,690 В противен случай, просто мога да се върне н плюс сумата на числата от 919 00:51:05,690 --> 00:51:07,190 един до п минус едно. 920 00:51:07,190 --> 00:51:09,360 Направи ли смисъл? 921 00:51:09,360 --> 00:51:10,100 OK. 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 е един плюс сума на 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: Да, OK. 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 >> Ако използвате Facebook също, когато виждате вашите приятели, вие сте 964 00:52:58,710 --> 00:53:03,540 Ще видите, че Facebook сложиш близо приятел е на върха на тези, 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 И това е така, защото Facebook всевъзможни приятелите си на базата на това как 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 Също Pokemon. 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 >> АУДИТОРИЯ: Достъп Pokemon. 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 Така че аз се броят два и сложих в предната част на списъка. 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 OK? 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 Insertion вид ти започваш да имат също това нещо, че е по-подредени и 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 Така че аз знам, че тя трябва да бъде след три. 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 Така че трябва да, вид, SHIFT всички елементи в списъка подредени, така че аз мога 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 >> Bubble Sort. 1038 00:56:19,150 --> 00:56:25,730 Така балон вид е основно това, което сте ще направиш-- ние го наричаме балон 1039 00:56:25,730 --> 00:56:30,113 вид, защото ако минеш през list-- това е действително по-добре, ако просто се покаже 1040 00:56:30,113 --> 00:56:32,300 искате това-- 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 I сменяте отново. 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 >> Тя се нарича Bubble Sort защото след всеки от тези повторения, всъщност, 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 Аз ще направя един суап и След последната една. 1060 00:57:20,190 --> 00:57:23,290 Аз, че няма суапове и списъкът се сортира. 1061 00:57:23,290 --> 00:57:27,460 Така че в Bubble Sort, ние основно се запази преминава през списъка и смяна 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 Така че вие ​​си спомнят Big O, Omega, и Theta? 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 Добре, какво е Big O, на първо място? 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 Например, по отношение на-- 1075 00:58:04,910 --> 00:58:06,660 в тази case-- п. 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 >> Така че за Bubble Sort, например, имаме Big O на п квадрат. 1079 00:58:17,100 --> 00:58:20,580 Защо имаме това? 1080 00:58:20,580 --> 00:58:24,716 Защо е Bubble Sort Big O н квадрат? 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 Така че най-лошия случай е, че имам да направя това нещо п пъти. 1086 00:58:44,230 --> 00:58:48,550 И за всеки един от тези пъти, аз трябва да направи н суапове, защото аз трябва да се сравняват 1087 00:58:48,550 --> 00:58:49,870 всеки два елемента. 1088 00:58:49,870 --> 00:58:53,730 Така че това е защо тя се п квадрат защото това е п пъти п. 1089 00:58:53,730 --> 00:59:00,120 >> След това, избор на подреждане е също н квадрат защото за всяка итерация, аз трябва да 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 погледнете през наш елементи. 1093 00:59:06,130 --> 00:59:11,750 И аз трябва да направя това, че п пъти, защото Трябва да изберете всички н елементи. 1094 00:59:11,750 --> 00:59:18,273 >> Вмъкване вид е също н квадрат защото най-лошия случай ще 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 пъти п отново. 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 Bubble Sort има най-добрите сценарий на п. 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 Така че това е п защото изглеждам в наш елементи. 1119 01:00:28,990 --> 01:00:30,930 Защо селекция вид н квадрат? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Да, дори и ако списъкът е сортиран, за всяка итерация на избор на сортиране, I 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 Така че това е защо тя ще бъде п. 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 О и Омега са еднакви. 1141 01:01:39,920 --> 01:01:41,520 OK. 1142 01:01:41,520 --> 01:01:44,210 И най-накрая, се слеят Сортът е в дневника п. 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 OK, както той казваше. 1151 01:02:04,960 --> 01:02:08,330 >> OK, показалки. 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: An адрес. 1155 01:02:12,820 --> 01:02:13,720 OK. 1156 01:02:13,720 --> 01:02:18,530 Знам, че Дейвид показва куп клипове на Бинки и неща, сочещи 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 ако имам действително искате да суап за реала, аз всъщност 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-- The разлика 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 >> OK, да. 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 >> АУДИТОРИЯ: Какво става, ако имаме указател към п звезда х. 1206 01:04:52,710 --> 01:04:55,255 Знам, че се създава указател към х. 1207 01:04:55,255 --> 01:04:59,432 Дали той също декларира х цяло число? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: ОК, така че, когато ти казват н звезда х, не сте създаване на показалец към 1209 01:05:05,170 --> 01:05:06,000 променлива х. 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: Така че, когато казвам, п звезда х, аз съм казвайки, хей, в паметта, аз отивам да 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 този случай, имате п звезда. 1229 01:06:06,950 --> 01:06:08,700 >> Това е като цяло нещо заедно. 1230 01:06:08,700 --> 01:06:10,720 Няма по п пространство звезда. 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-- подобно, нека се каже, че съм направил вътр А е равно на 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 Това липсва вътр б и вътр в. 1253 01:07:11,530 --> 01:07:16,520 Така вътр А е равно на 3, което значи, че Отивам да отидете на паметта. 1254 01:07:16,520 --> 01:07:19,870 И аз отивам да се намери слот и постави под номер 3 тук. 1255 01:07:19,870 --> 01:07:22,200 >> И тогава вътр б равнява на 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 >> Така че какъв е този ред правиш? п звезда годишно се равнява амперсанд а. 1261 01:07:36,160 --> 01:07:37,800 Така че, на първо място, п звезда годишно. 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: Да, така п звезда годишно, на първо място, декларира указател наречена БКП. 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 След това, ако го направя звезда Pb, какво е звезда Pb? 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 Това също липсва. п звезда Pb. 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 Но сега съм добре ар създаване на показалец да Б и след това указател към C. 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 OK? 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 OK. 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 >> Така че, когато направиш-- 1380 01:13:43,090 --> 01:13:44,910 тук за example-- 1381 01:13:44,910 --> 01:13:45,830 п показалеца звезда. 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 OK. 1391 01:14:12,270 --> 01:14:17,940 I И 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 >> [APPLAUSE] 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 >> DAVE: Ще бъдат публикувани. 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 OK. 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 >> ROB: Аз ще отида бързо. 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 е просто ще се върне стойност на бар четири запетая 6. 1448 01:16:57,930 --> 01:17:02,380 И бар ще се създаде някакъв локален променлива п равно на 4 пъти 6. 1449 01:17:02,380 --> 01:17:03,920 И след това се върнете п. 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 има аргумент п. 1464 01:17:41,100 --> 01:17:45,440 А п е равно на 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 г равно на шест. 1468 01:17:55,610 --> 01:17:58,540 Това не е всичко, че ние ще имаме в стек рамката защото бар 1469 01:17:58,540 --> 01:18:00,580 също има локална променлива п. 1470 01:18:00,580 --> 01:18:03,370 И н отиваме да зададете равен на 24. 1471 01:18:03,370 --> 01:18:05,750 >> Така че сега бар ще се върне п. 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 И сега, основното е да се обади ФОРМАТ. 1480 01:18:29,660 --> 01:18:31,660 Така ФОРМАТ е просто още една функция. 1481 01:18:31,660 --> 01:18:35,320 Когато ние наричаме ФОРМАТ, той ще бъде друг стек рамка за ФОРМАТ 1482 01:18:35,320 --> 01:18:36,470 извикване на функция. 1483 01:18:36,470 --> 01:18:37,990 >> Какво минава ФОРМАТ? 1484 01:18:37,990 --> 01:18:40,090 Това е, което се случва да отида на неговата купчина рамка. 1485 01:18:40,090 --> 01:18:44,970 Най-малкото, ние сме минаваща че сто и обратно наклонена черта н и 1486 01:18:44,970 --> 01:18:47,180 аргумента, 24. 1487 01:18:47,180 --> 01:18:50,370 Може да има повече в това е стека рамка ако ФОРМАТ се случва да се използва някаква 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 >> Но всичко това отива в ФОРМАТ е стека рамка. 1491 01:18:53,810 --> 01:18:55,740 Тя ще изпълни ФОРМАТ. 1492 01:18:55,740 --> 01:18:56,830 След това ФОРМАТ е направено. 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 Main ще се върне. 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 И параметъра п, вътре в 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: п е локална променлива в бара. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 п е все още местно до 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 преди ФОРМАТ? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Защо е Foo извикана преди ФОРМАТ? 1522 01:20:05,920 --> 01:20:10,740 Така че би могло да има, вместо това, е направил нещо като INT х е равно на Foo от 4 1523 01:20:10,740 --> 01:20:12,980 и след това отпечатани х. 1524 01:20:12,980 --> 01:20:17,900 Но вместо това, аз се комбинира функцията поставя под аргумента ФОРМАТ. 1525 01:20:17,900 --> 01:20:23,670 >> Но забележете, че ние не можем действително изпълни призива за ФОРМАТ докато ние 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 Така че тя трябва да бъде вътр бар и вътр Foo тъй като и двете от тези 1535 01:20:49,010 --> 01:20:50,460 се завръщат числа. 1536 01:20:50,460 --> 01:20:54,214 Void е само ако те не започваш за да се върнете на действителните стойности. 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: A Линия над връщането? 1541 01:21:03,730 --> 01:21:04,410 >> Публика: Да. 1542 01:21:04,410 --> 01:21:10,780 Например, ако си направил ФОРМАТ и [недоловим], ще го отпечатате два пъти? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Значи вътре Foo? 1544 01:21:12,992 --> 01:21:15,945 Ако имахме ФОРМАТ точно тук? 1545 01:21:15,945 --> 01:21:16,750 >> Публика: Да. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Така че, ако имахме право ФОРМАТ тук, това ще отпечата веднъж. 1547 01:21:19,510 --> 01:21:23,400 Тъй като ние призоваваме Foo веднъж полето тук, а след това ние ще се удари в ФОРМАТ. 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 Ние само някога срещнете на ФОРМАТ веднъж. 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 ФОРМАТ обажда Foo защото сме първи призовава ФОРМАТ и след това ние сме минаваща 1555 01:21:37,950 --> 01:21:38,580 аргументите. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Така че на теория, не е ФОРМАТ обажда 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 И сега можем да направим призовавам да ФОРМАТ. 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 >> ROB: Не правя връщане запетая ако имате функция за невалидни. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 OK. 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 Разбира се, ние трябва да се провери за да видите дали х е нула. 1588 01:22:52,520 --> 01:22:56,400 След това отиваме просто да определя какво х е насочена към 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Печат какво х сочи, печат 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 и ние Сега имаме локална променлива х, която 1598 01:23:28,000 --> 01:23:30,030 е вътр звезда. 1599 01:23:30,030 --> 01:23:32,240 Така че отиваме да превъртите чрез тази програма. 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 Garbage. 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 Зададохме х равни на това, което тя се връща. 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 х сега ще бъде създаден равна на 0x123 които картинно, 1628 01:24:47,160 --> 01:24:52,940 ние често се направи като х с действително стрелка сочеща към този блок. 1629 01:24:52,940 --> 01:24:55,820 Но х е просто съхраняване на този адрес. 1630 01:24:55,820 --> 01:24:58,670 Така че сега ние трябва да се провери, ако х е нула. 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 >> Така че сега звезден х е равно на 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 OK? 1644 01:25:32,790 --> 01:25:34,370 Така че сега ние отиваме, за да отпечатате F. 1645 01:25:34,370 --> 01:25:38,490 >> Така че първо отиваме да отпечатате звезда х. 1646 01:25:38,490 --> 01:25:39,640 Така че това, което е звезда х? 1647 01:25:39,640 --> 01:25:44,300 Отново, звезда х означава, отидете на нещо, че х е насочена към. 1648 01:25:44,300 --> 01:25:47,140 Така че х е съхраняване 0x123 Go до това. 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 >> И след това ние имаме втора ФОРМАТ. 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, процента F, и всички тези вече. 1657 01:26:04,960 --> 01:26:07,160 Така процента стр, отпечатайте показалка. 1658 01:26:07,160 --> 01:26:08,920 >> Така че х е указател. 1659 01:26:08,920 --> 01:26:13,440 Така че, ако ще да отпечатате х себе си, ние сме печат, което е всъщност вътре 1660 01:26:13,440 --> 01:26:19,220 х, която е 0x123 Така че първото печат е ще отпечата 50. 1661 01:26:19,220 --> 01:26:23,620 Вторият печат F ще да отпечатате 0x123 Да? 1662 01:26:23,620 --> 01:26:27,460 >> АУДИТОРИЯ: Използвате ли процента х да отпечатате показалка? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: И така, да използвате процента х да отпечатате показалка? 1664 01:26:31,200 --> 01:26:38,350 Така че можете, но процента х е просто, общо, за като, ако имате някаква 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 Това бяха стигнем процента г. I е просто число. 1670 01:26:50,310 --> 01:26:52,690 процента р е специално за указатели. 1671 01:26:52,690 --> 01:26:54,060 >> Така че х е указател. 1672 01:26:54,060 --> 01:26:56,360 Искаме да използваме процента стр. 1673 01:26:56,360 --> 01:26:57,937 Но процента х биха могли да работят. 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 заедно с всички локални променливи ФОРМАТ се случва да бъде използвате. 1682 01:27:23,040 --> 01:27:27,020 И тогава следващата покана да ФОРМАТ сега вътре в ФОРМАТ стека рамка е 1683 01:27:27,020 --> 01:27:33,960 процента р н наклонена черта и независимо от стойност на х е, което е 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 >> ROB: Това ще отпечата нещо който изглежда по този начин. 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: Така че първото ФОРМАТ ще print-- 1704 01:28:21,130 --> 01:28:21,980 >> АУДИТОРИЯ: [недоловим]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Да, това се случва, за да отпечатате какво х сочи. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Star казва какво е това нещо, сочейки. 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 Какво е вътре е? 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 OK. 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 Забележете, че х е все още 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 Ние вече не би следвало сочен х. 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: Така след безплатни х, какво ще се случи, ако ние се опитваме да сочен показалеца? 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 >> ROB: Не, така че ако зададете X към нещо друго. 1752 01:30:10,830 --> 01:30:15,870 Така че, ако точно тук казахме х е равно на изчистване нещо 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 Stack се покачва. 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 И в този момент, вие SEG вина. 1777 01:31:14,910 --> 01:31:17,335 Или бихте наистина SEG виновен преди тази точка, но да. 1778 01:31:17,335 --> 01:31:19,660 >> АУДИТОРИЯ: Има ядро ​​зареже същото като SEG вина? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Така ще видите сегментиране основната вина заряза. 1780 01:31:26,140 --> 01:31:28,760 Можете да получите ядро ​​бунище, когато вие SEG вина. 1781 01:31:28,760 --> 01:31:32,580 И това е като изхвърляне на всички от съдържание на текущата си памет, така 1782 01:31:32,580 --> 01:31:36,670 , които можете да опитате и да се определят защо SEG обвиняван. 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 Сегментиране вина A означава, че сте трогателно памет по начин, 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 Но само вътре в рамките на редовен безкрайна докато едно-- 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 Ние просто ще продължим да се брънка през тази една инструкция. 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: Така че, ако вътре в контура, докато имаше ФОРМАТ, вие все пак ще 1810 01:32:42,000 --> 01:32:42,790 не SEG вина. 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 Вие ще получите еднопакетна рамка за ФОРМАТ. 1814 01:32:48,225 --> 01:32:49,580 >> След това ФОРМАТ ще се върне. 1815 01:32:49,580 --> 01:32:50,280 Тогава пак ли ще контур. 1816 01:32:50,280 --> 01:32:51,460 Вие ще получите еднопакетна рамка за ФОРМАТ. 1817 01:32:51,460 --> 01:32:52,850 Той ще се върне. 1818 01:32:52,850 --> 01:32:54,060 Single стека рамка. 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 Отиваме от С до монтажа. 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 >> И С е високо ниво на езика в сравнение с монтажа. 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 >> Така че това е като на файла, който сте пише, - каквото си програма е-- 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 >> Това заяви, ФОРМАТ е свързан вътре. 1919 01:37:30,310 --> 01:37:32,820 Ако някога сте се използва ФОРМАТ, това е нещо, че трябва да бъде свързан в 1920 01:37:32,820 --> 01:37:35,740 защото не съм писал това. 1921 01:37:35,740 --> 01:37:39,530 И в действителност, ФОРМАТ е автоматично свързан инча 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 ФОРМАТ, и подобни неща, ще да бъдат свързани в автоматично. 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 >> [APPLAUSE] 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