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