1 00:00:00,000 --> 00:00:03,395 >> [Музички] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 Дејвид Џ MALAN: Ова е како бруцош семинар денес. 4 00:00:13,280 --> 00:00:14,060 ВО РЕД. 5 00:00:14,060 --> 00:00:15,024 Па многу врнежлив надвор. 6 00:00:15,024 --> 00:00:17,690 Оваа тенденција да се случи во среда, но сè повеќе и повеќе можности 7 00:00:17,690 --> 00:00:18,700 за прашања денес. 8 00:00:18,700 --> 00:00:22,210 Па ајде да започнете всушност со филмот во само еден миг. 9 00:00:22,210 --> 00:00:24,560 Но, ние ќе започнеме grandly како и секогаш. 10 00:00:24,560 --> 00:00:28,000 >> Ова е CS50, и ова е до крајот на недела 4. 11 00:00:28,000 --> 00:00:30,820 Значи, ако некогаш сте се одвиваа Телевизија или филм кадешто 12 00:00:30,820 --> 00:00:34,690 има некои компјутерски експерти и полиција, или ФБИ, или некоја агенција 13 00:00:34,690 --> 00:00:36,930 се обидува да го фати некои противник, Па, сте 14 00:00:36,930 --> 00:00:40,850 веројатно слушнале за изразот "подобрување" при што некако техничар 15 00:00:40,850 --> 00:00:44,750 магично зумира во бескрајно колку да се види на криминалци 16 00:00:44,750 --> 00:00:48,640 карта или број на регистарска табличка дури и во трепет на огледало 17 00:00:48,640 --> 00:00:50,390 или трепкаат на нечие око. 18 00:00:50,390 --> 00:00:55,196 Значи, навистина, ајде да ги разгледаме во неколку такви сцени од Холивуд. 19 00:00:55,196 --> 00:00:55,862 [Видео репродукција] 20 00:00:55,862 --> 00:00:59,243 -OK, Сега да се добие добар поглед на тебе. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Држи го. 23 00:01:07,415 --> 00:01:08,267 Се кандидира тоа назад. 24 00:01:08,267 --> 00:01:09,121 >> -Почекај минута. 25 00:01:09,121 --> 00:01:11,300 Одат право. 26 00:01:11,300 --> 00:01:12,209 >> -Има, Замрзнување тоа. 27 00:01:12,209 --> 00:01:12,750 -Цел екран. 28 00:01:12,750 --> 00:01:13,558 -OK, Замрзнување тоа. 29 00:01:13,558 --> 00:01:14,820 -Tighten Основа на тоа, ќе ви? 30 00:01:14,820 --> 00:01:16,530 -Vector Во на таа човек со задното тркало. 31 00:01:16,530 --> 00:01:19,400 -Zoom Во токму тука на ова место. 32 00:01:19,400 --> 00:01:22,846 -со Право на опрема, на сликата може да се зголеми и изострен. 33 00:01:22,846 --> 00:01:24,065 -Што е тоа? 34 00:01:24,065 --> 00:01:25,600 -Тоа Е подобрување на програмата. 35 00:01:25,600 --> 00:01:26,860 -Може Да ви е јасно дека на било кој? 36 00:01:26,860 --> 00:01:27,890 -Не знам. 37 00:01:27,890 --> 00:01:29,050 Ајде да го подобрат. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Делот А6. 39 00:01:31,575 --> 00:01:33,642 >> -Јас Подобрена детали, and-- Мислам дека постои 40 00:01:33,642 --> 00:01:35,433 доволно да се зголеми, порака до мојот екран. 41 00:01:35,433 --> 00:01:37,080 -Јас Засилиле одраз во нејзините очи. 42 00:01:37,080 --> 00:01:38,830 >> -Let Е воден ова преку видео додаток. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Може да ви го подобри ова? 44 00:01:40,100 --> 00:01:41,875 >> -Држи се. 45 00:01:41,875 --> 00:01:44,010 >> -I've Бил работат на оваа рефлексија. 46 00:01:44,010 --> 00:01:44,995 >> Рефлексија -Someone е. 47 00:01:44,995 --> 00:01:45,495 -Reflection. 48 00:01:45,495 --> 00:01:47,399 -Има Е одраз на лицето на човекот. 49 00:01:47,399 --> 00:01:48,065 -на Рефлексија. 50 00:01:48,065 --> 00:01:48,981 -Има Е одраз. 51 00:01:48,981 --> 00:01:50,600 -Zoom Во на огледалото. 52 00:01:50,600 --> 00:01:52,712 -Можете Да се ​​види одраз. 53 00:01:52,712 --> 00:01:54,350 -Може Да ви го подобри имиџот од тука? 54 00:01:54,350 --> 00:01:55,370 -Може Ли да го подобрат тука? 55 00:01:55,370 --> 00:01:56,210 -Може Да ви го подобрат? 56 00:01:56,210 --> 00:01:56,900 Може да ви го подобрат? 57 00:01:56,900 --> 00:01:57,870 >> -Може Да се ​​подобри ова? 58 00:01:57,870 --> 00:01:58,717 >> -Може Да ви го подобрат? 59 00:01:58,717 --> 00:02:00,050 -Hold На второто, јас ќе се подобри. 60 00:02:00,050 --> 00:02:00,924 -Zoom Во на вратата. 61 00:02:00,924 --> 00:02:01,700 -Times 10. 62 00:02:01,700 --> 00:02:02,586 -Zoom. 63 00:02:02,586 --> 00:02:03,490 -Move Во. 64 00:02:03,490 --> 00:02:03,990 -Повеќе. 65 00:02:03,990 --> 00:02:04,690 -Wait, Да престане. 66 00:02:04,690 --> 00:02:05,190 -Stop. 67 00:02:05,190 --> 00:02:05,970 Тоа -Pause. 68 00:02:05,970 --> 00:02:09,460 -Rotate Ни 75 степени околу вертикалната, ве молам. 69 00:02:09,460 --> 00:02:10,962 -Stop. 70 00:02:10,962 --> 00:02:14,040 Вратете се во делот околу вратата, повторно. 71 00:02:14,040 --> 00:02:15,860 >> -Got Една подобрувач слика која може bitmap? 72 00:02:15,860 --> 00:02:18,776 >> -Hey, Можеби може да се користат Pradeep Сен метод за да ја видите во прозорците. 73 00:02:18,776 --> 00:02:20,372 -Ова Софтвер е држава на уметноста. 74 00:02:20,372 --> 00:02:21,845 >> -на Eigenvalue е исклучено. 75 00:02:21,845 --> 00:02:24,300 >> -со Право комбинација на algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> -Тој Е донесена елиминација алгоритми за да на следното ниво, 77 00:02:26,755 --> 00:02:28,730 и можам да ги користите за да го подобрување на оваа фотографија. 78 00:02:28,730 --> 00:02:31,286 >> -Lock На и зголемување на z-оската. 79 00:02:31,286 --> 00:02:32,560 >> -Enhance. 80 00:02:32,560 --> 00:02:33,100 >> -Enhance. 81 00:02:33,100 --> 00:02:33,600 >> -Enhance. 82 00:02:33,600 --> 00:02:34,960 -Freeze И да се зајакне. 83 00:02:34,960 --> 00:02:37,180 >> [END репродукција] 84 00:02:37,180 --> 00:02:41,160 >> Дејвид Џ MALAN: Добро, така сите оние кои се всушност зборови. 85 00:02:41,160 --> 00:02:44,450 Тие се само се нанижани заедно во начин кој не е всушност разумен. 86 00:02:44,450 --> 00:02:48,400 И дека, всушност, CS50 и курсеви како што има тенденција да се уништи голем број на ТВ и филмови 87 00:02:48,400 --> 00:02:48,900 за тебе. 88 00:02:48,900 --> 00:02:52,330 Затоа што кога тие се компјутерски експерти се растреперува надвор термини и велејќи: 89 00:02:52,330 --> 00:02:56,860 фенси нешта како вектори, и z-оската, 90 00:02:56,860 --> 00:02:59,572 и било кој број на други всушност, повеќе технички термини, 91 00:02:59,572 --> 00:03:02,030 Тие се навистина само stringing зборовите заедно сите премногу често. 92 00:03:02,030 --> 00:03:05,020 Е дека еден од нашите надежи е дека, како пропратен ефект на земање предмети 93 00:03:05,020 --> 00:03:08,245 вака, ќе се повеќе луѓе во свет, всушност ќе биде во можност да ги земат во 94 00:03:08,245 --> 00:03:12,040 и само некогаш толку малку да влијаат врз квалитетот и точноста на тие филмови? 95 00:03:12,040 --> 00:03:14,350 >> Всушност, ајде да ги разгледаме во реалноста. 96 00:03:14,350 --> 00:03:18,070 Па тука е слика на персоналот на Марија, една од нашите наставата соработници. 97 00:03:18,070 --> 00:03:20,050 И дека таа е осомничени за нешто. 98 00:03:20,050 --> 00:03:23,730 А, сепак, има трошка некои парче на докази во нејзините очи, 99 00:03:23,730 --> 00:03:25,480 или во одраз на нејзините очила. 100 00:03:25,480 --> 00:03:30,760 Па, ако тоа го правиме токму како филмовите предложи, кадешто ние зумирате и "подобрување", 101 00:03:30,760 --> 00:03:34,080 ова е колку информации е во лицето на Марија 102 00:03:34,080 --> 00:03:36,795 кога ќе направите некоја слика со таа оригиналната резолуција. 103 00:03:36,795 --> 00:03:39,120 >> И дека, всушност, може да се види овие точки. 104 00:03:39,120 --> 00:03:41,900 И тие се она што се наречени пиксели, Р-И-Х-Е-Л-S, 105 00:03:41,900 --> 00:03:45,740 што е само еден квадратен обично дека е една точка што влегува на сликата. 106 00:03:45,740 --> 00:03:49,200 И во тоа време, и всушност дури и денес со некои од денешните LED телевизори 107 00:03:49,200 --> 00:03:51,950 или LCD телевизори, и ако имаш една во вашата соба или во вашиот дом, 108 00:03:51,950 --> 00:03:55,100 ако одите до супер-блиску до него, и особено ако тоа е малку постара ТВ, 109 00:03:55,100 --> 00:03:58,760 што веројатно може да се види дури и овие точки и тоа е она што го сочинуваат сликата. 110 00:03:58,760 --> 00:04:00,980 >> И не постои повеќе информации од ова. 111 00:04:00,980 --> 00:04:05,400 Ние би можеле да "подобрување", во смисла на мазнење нешта одново и вид на 112 00:04:05,400 --> 00:04:09,040 inferring вид на, вид на она што боја треба да биде во близина на око на Марија 113 00:04:09,040 --> 00:04:10,910 така што тоа не е всушност толку pixelated. 114 00:04:10,910 --> 00:04:14,510 Но, ако јас се задржи зумирање, таму е негативец во нејзините очи. 115 00:04:14,510 --> 00:04:16,600 Како што е на сите информациите што ги имаме. 116 00:04:16,600 --> 00:04:18,920 Вие не може да креирате информации од ништо. 117 00:04:18,920 --> 00:04:20,790 Има само ограничен бројот на битови таму. 118 00:04:20,790 --> 00:04:22,873 >> Па во Проблем Постави 4, каде што ќе имаат можност 119 00:04:22,873 --> 00:04:24,580 да се игра со овој вид на светот. 120 00:04:24,580 --> 00:04:27,610 Проблем Постави во 4, ќе се истражуваат светот на графика, и криминолошки науки, 121 00:04:27,610 --> 00:04:30,870 а всушност се напише код која го обновува изгуби слики. 122 00:04:30,870 --> 00:04:33,510 Ќе напише код кој манипулира постоечки слики 123 00:04:33,510 --> 00:04:36,120 и на крајот се разбере она што е случува под хауба. 124 00:04:36,120 --> 00:04:38,540 >> И, што се испоставува, тоа е всушност не е толку комплициран. 125 00:04:38,540 --> 00:04:41,320 На пример, ако сакаме да претставува насмеано лице каде 126 00:04:41,320 --> 00:04:44,160 со овие црни точки, или овие црни точки, 127 00:04:44,160 --> 00:04:47,230 Па, ние едноставно може да претставуваат нив како вистински битмапа. 128 00:04:47,230 --> 00:04:50,040 И ако го чул дека изразување bitmap, можеби 129 00:04:50,040 --> 00:04:52,330 што е сега почнува да се направи Денес малку повеќе смисла. 130 00:04:52,330 --> 00:04:53,580 >> Ние веќе знаеме што малку е. 131 00:04:53,580 --> 00:04:54,160 Тоа е 0 или 1. 132 00:04:54,160 --> 00:04:56,201 И карта е само нешто како парче хартија 133 00:04:56,201 --> 00:04:59,180 кој ви дава насоки и има можеби мрежа на x- и y-координата. 134 00:04:59,180 --> 00:05:00,540 Па тука е битмапа. 135 00:05:00,540 --> 00:05:03,680 Тоа е мапа на битови при што 1 е очигледно 136 00:05:03,680 --> 00:05:07,857 ќе претставуваат еден бел пиксел, и 0 ќе претставуваат еден црн пиксел. 137 00:05:07,857 --> 00:05:09,440 Но секако може да го флип наоколу. 138 00:05:09,440 --> 00:05:11,648 Тоа навистина не е важно толку додека ние сме доследни. 139 00:05:11,648 --> 00:05:15,570 И тука е како, во внатрешноста binary-- меморија на компјутерот, па дури и во внатрешноста 140 00:05:15,570 --> 00:05:18,160 на фајл на вашиот хард drive-- би можеле да ги чувате 141 00:05:18,160 --> 00:05:20,240 наједноставните смешковци слики лицето. 142 00:05:20,240 --> 00:05:23,990 Но, она што сме ние, се разбира, во недостаток на оваа слика? 143 00:05:23,990 --> 00:05:24,610 Боја, нели? 144 00:05:24,610 --> 00:05:28,220 Тоа е очигледен следен чекор или подобрување за да се подобри ова со боја. 145 00:05:28,220 --> 00:05:32,230 Па за жал само со еден малку, 0 или 1, ние би можеле да претставуваат боја. 146 00:05:32,230 --> 00:05:36,100 Тоа може да биде црвена или сина боја, или црна или бела боја, или зелена, или розово, 147 00:05:36,100 --> 00:05:37,420 или било парови на бои. 148 00:05:37,420 --> 00:05:40,860 Но заради едноставност, ние ќе само да се претпостави црна и бела боја. 149 00:05:40,860 --> 00:05:45,930 >> Значи она што не ни треба логично ако се сакате да се спроведе на бои во сликата? 150 00:05:45,930 --> 00:05:49,080 Што треба да се направи? 151 00:05:49,080 --> 00:05:51,900 Како ако ограничувачки фактор тука е тоа што со една малку можете само да си 152 00:05:51,900 --> 00:05:55,977 претставуваат две држави, 0 или 1, бела или црна боја, што сакаш да правиш? 153 00:05:55,977 --> 00:05:56,810 ПУБЛИКАТА: Повеќе податоци. 154 00:05:56,810 --> 00:05:58,813 Дејвид Џ MALAN: Повеќе битови, је повеќе податоци, повеќе битови. 155 00:05:58,813 --> 00:06:01,440 И, навистина, тоа е точно слики во боја се претставени. 156 00:06:01,440 --> 00:06:05,120 Наместо да се користи еден малку, 0 или 1 за секој пиксел, секоја точка, 157 00:06:05,120 --> 00:06:06,170 можете само да се користи на повеќе. 158 00:06:06,170 --> 00:06:09,660 Можеби користите 8, можеби, почесто користат 24, а всушност, во Проблем Постави 159 00:06:09,660 --> 00:06:13,300 4, ќе си играш со датотека формат, кој го користи 24 бита обично. 160 00:06:13,300 --> 00:06:15,430 >> Но, повеќето од вас се веројатно запознаени со JPEG слики. 161 00:06:15,430 --> 00:06:17,460 Ако некогаш сте се земени Фото на вашиот телефон, 162 00:06:17,460 --> 00:06:20,360 или качен или видел нешто на Фејсбук, или Фликр, било кој број 163 00:06:20,360 --> 00:06:24,882 на веб-сајтови фото-базирани, сте веројатно виделе JPEG сликата порано. 164 00:06:24,882 --> 00:06:27,840 И што излезе, ова е датотека формат, ние ќе треба да се користи во pset 4, 165 00:06:27,840 --> 00:06:30,340 при што ви се случува да имаат за враќање на сликите 166 00:06:30,340 --> 00:06:35,160 дека јас сум случајно избришани од оштетени мемориска картичка во апаратот, 167 00:06:35,160 --> 00:06:35,800 ако сакате. 168 00:06:35,800 --> 00:06:38,490 >> И излегува дека и покрај тоа JPEG е прилично sophisticated-- 169 00:06:38,490 --> 00:06:40,906 тоа е многу пософистициран од црно-бели точки 170 00:06:40,906 --> 00:06:44,480 видовме пред еден миг, бидејќи има всушност фенси алгоритми кои 171 00:06:44,480 --> 00:06:47,410 се користат за да се компресира JPEG, па што ќе може да има навистина убаво, 172 00:06:47,410 --> 00:06:49,832 квалитет на сликата, но со користење на релативно мал број на битови. 173 00:06:49,832 --> 00:06:51,790 И ние ќе се вратам на компресија пред долго. 174 00:06:51,790 --> 00:06:56,280 Излезе дека првиот три бајти во JPEG image-- 175 00:06:56,280 --> 00:07:02,750 без оглед на она што сте ги направиле фотографија of-- се вредностите, 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Со други зборови, ако само види дека шема на битови, 177 00:07:05,990 --> 00:07:09,180 претставен тука, како три бајти, или 24 бита вкупно, 178 00:07:09,180 --> 00:07:13,810 со голема веројатност може да се заклучи дека ќе се гледа во тоа што оваа првите три 179 00:07:13,810 --> 00:07:15,230 бајти на JPEG. 180 00:07:15,230 --> 00:07:18,040 И тоа е она што е познат како потпис на JPEG. 181 00:07:18,040 --> 00:07:20,540 А многу формати на датотеки таму имаат тенденција да започнат 182 00:07:20,540 --> 00:07:23,735 со одредени модели на 0-ти и 1S, така што Windows и Mac OS, и iOS, 183 00:07:23,735 --> 00:07:28,272 и Андроид знае каков вид на датотеката од која што се, во прилог на т.н. датотека 184 00:07:28,272 --> 00:07:29,730 продолжување дека многу датотеки има. 185 00:07:29,730 --> 00:07:32,590 Ако сте .jpg, тоа е уште еден знак за компјутер. 186 00:07:32,590 --> 00:07:35,310 >> Па да сега се погледне на овој малку повеќе технички. 187 00:07:35,310 --> 00:07:37,390 Знаеме децималниот систем е од 0 до 9. 188 00:07:37,390 --> 00:07:38,740 Знаеме бинарни е 0 и 1. 189 00:07:38,740 --> 00:07:41,842 И ако мислите дека назад во pset 0, моравме да ви се борат со, 190 00:07:41,842 --> 00:07:43,800 за малку, нешто наречен хексадецимален, 191 00:07:43,800 --> 00:07:47,320 каде што ќе има 16 цифри, наместо 10 или наместо 2. 192 00:07:47,320 --> 00:07:50,405 И оние бројки, по конвенција, се од 0 до 9, а потоа и 193 00:07:50,405 --> 00:07:55,040 преку f, каде што f претставува она децимален број, исто како брз разумност 194 00:07:55,040 --> 00:07:56,640 провери? 195 00:07:56,640 --> 00:07:57,610 Значи, 15. 196 00:07:57,610 --> 00:08:01,390 И мора да го претставуваат 10, само со природата на нарачување што сум ги дал. 197 00:08:01,390 --> 00:08:04,350 Тоа е само еден арбитрарен конвенција, но тоа е сосема стандард. 198 00:08:04,350 --> 00:08:06,870 >> Значи, ако ние се погледне на овој модел од три bytes-- ајде 199 00:08:06,870 --> 00:08:09,620 само да почне да се погледне во него во на начин во согласност со тоа како 200 00:08:09,620 --> 00:08:12,450 компјутерски научници, генерално, погледне и да размислуваат за датотеки. 201 00:08:12,450 --> 00:08:15,580 Сигурно може да се размислува за слики во 0-ти и 1S, и децимални, 202 00:08:15,580 --> 00:08:19,340 но во реалноста, ние се стремиме да се користи бинарен или повеќе обично hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 назад од pset 0. 204 00:08:20,760 --> 00:08:25,857 Значи, дозволете ми да предложи 255, 216, и 255 се само овие модели на 0-ти и 1S. 205 00:08:25,857 --> 00:08:28,440 И може да се провери ова, ако сакате да го направите математика од недела 0. 206 00:08:28,440 --> 00:08:30,810 Но, за сега, само да се претпостави дека ова е навистина точно. 207 00:08:30,810 --> 00:08:33,850 Јас сум само препишува три децимални број како и три бинарни вредности. 208 00:08:33,850 --> 00:08:36,100 Сега она што јас ќе одам да направите е да се само додадете малку бел простор, 209 00:08:36,100 --> 00:08:37,266 само поради читливост е. 210 00:08:37,266 --> 00:08:39,940 И известување, јас сум само ќе да се движат работите од друг. 211 00:08:39,940 --> 00:08:43,090 Па пред, по, пред, по. 212 00:08:43,090 --> 00:08:46,180 Јас го правам ништо интересно други од само ширење на работите надвор, така 213 00:08:46,180 --> 00:08:50,380 тоа известување на секој сет на осум битови сега е на две групи од четири бита. 214 00:08:50,380 --> 00:08:54,920 Ова е корисно бидејќи хексадецимален е особено модерен 215 00:08:54,920 --> 00:09:00,930 бидејќи секој хексадецимален цифрениот 0 преку f, или поконкретно од 0 до 15, 216 00:09:00,930 --> 00:09:03,430 може да се претстави со точно четири бита. 217 00:09:03,430 --> 00:09:07,960 Со други зборови, во хексадецимален ако сакаат да се претставуваат 0, тоа е само 0000, 218 00:09:07,960 --> 00:09:08,780 четири нули. 219 00:09:08,780 --> 00:09:13,997 И ако сакате да го претставуваат 15, тоа е од 1111, што е за четири бита. 220 00:09:13,997 --> 00:09:16,080 И ако го направите математика, дали тоа е во нивните места, 221 00:09:16,080 --> 00:09:18,210 ова е на 16 место, кој ќе даде you-- 222 00:09:18,210 --> 00:09:19,960 а што се случува to-- жал, во бинарен, 223 00:09:19,960 --> 00:09:23,660 кој ќе ви даде 15, оние место, twos место, четири и осмици место. 224 00:09:23,660 --> 00:09:26,821 Значи, дозволете ми да предложи дека поставени од четири бита на левата 225 00:09:26,821 --> 00:09:28,070 е она што ние ќе треба да се јавите на f. 226 00:09:28,070 --> 00:09:30,110 Тоа е најголемиот број што може да се претстави со четири бита. 227 00:09:30,110 --> 00:09:33,300 А ние веќе знаеме од хексадецимален, ѓ е најголемата цифра во хексадецимални. 228 00:09:33,300 --> 00:09:36,020 Имаме уште една ѓ таму, повеќе таму два. 229 00:09:36,020 --> 00:09:38,980 И сега за сега, само да се земе на верата дека сум се направи во право математика 230 00:09:38,980 --> 00:09:41,890 и на тој на левата половина од овие бајти, 1101, 231 00:09:41,890 --> 00:09:43,980 е истото што и г во хексадецимален. 232 00:09:43,980 --> 00:09:46,490 И на десната рака, 1000, е само 8. 233 00:09:46,490 --> 00:09:48,140 >> И лесно дека еден е да се види, нели? 234 00:09:48,140 --> 00:09:51,670 8 represents-- е во право под кои осмици место. 235 00:09:51,670 --> 00:09:56,040 Па ние имаме еден во колоната осмици и ништо во четири, двајца или оние. 236 00:09:56,040 --> 00:09:59,830 Па сега повеќе конвенционално, луѓето имаат тенденција да се напише хексадецимални цифри, како таков, 237 00:09:59,830 --> 00:10:03,000 можете само да ги мачкам заедно, а потоа ќе ги со префикс 0x. 238 00:10:03,000 --> 00:10:05,920 Тоа не значи ништо друго освен визуелна индикација на human-- 239 00:10:05,920 --> 00:10:10,350 тука доаѓа хексадецимално value-- бидејќи што инаку не би можеле да бидат очигледни. 240 00:10:10,350 --> 00:10:13,629 >> Што би се рекло, во крајна линија, дека моделот на нули и единици, 241 00:10:13,629 --> 00:10:16,170 или моделот на хексадецимално бројки еквивалентно дека сте 242 00:10:16,170 --> 00:10:18,990 ќе почнете да барате Проблем Постави во 4 е this-- 243 00:10:18,990 --> 00:10:22,120 и проблемот Постави 4 спецификации ќе одиме вас, преку овој во повеќе detail-- 244 00:10:22,120 --> 00:10:25,344 но сфати како еден вид на мистериозен како ова може да изгледа на прв поглед, 245 00:10:25,344 --> 00:10:27,010 си оди за да започнете да гледате ова многу. 246 00:10:27,010 --> 00:10:30,320 И всушност, дури и во GDB, на дебагерот воведовме во понеделникот 247 00:10:30,320 --> 00:10:35,440 Дан и го воведува во pset 3, се случува често да ви покаже хексадецимален вредности 248 00:10:35,440 --> 00:10:39,910 само затоа што тие имаат тенденција да бидат повеќе конвенционалните од децималниот или во бинарна 249 00:10:39,910 --> 00:10:41,157 во светот на компјутерите. 250 00:10:41,157 --> 00:10:42,490 Сега ајде да се стави ова во контекст. 251 00:10:42,490 --> 00:10:48,040 Многу од вас можеби се сеќаваат на овој слика овде, кој дојде од што? 252 00:10:48,040 --> 00:10:51,240 Vista, па дури и порано од дека, Windows XP, го направи ова деби. 253 00:10:51,240 --> 00:10:52,620 Значи ова е прекрасен пејзаж. 254 00:10:52,620 --> 00:10:55,940 И всушност, ако ѕиркаат наоколу online-- Мислам дека тоа е една статија на Википедија, 255 00:10:55,940 --> 00:11:00,110 назначено со тоа, некој многу неверојатно излезе најдов оваа локација во светот постави 256 00:11:00,110 --> 00:11:02,240 неговите или нејзините камера токму правото place-- 257 00:11:02,240 --> 00:11:06,510 и ова денес изгледа like-- но тоа е потполно ист амбиент. 258 00:11:06,510 --> 00:11:10,060 Оваа слика, сепак, е во датотека формат наречен bitmap, б-м-р. 259 00:11:10,060 --> 00:11:12,910 И ние ќе треба да се земе супер брз поглед на она што значи тоа. 260 00:11:12,910 --> 00:11:17,770 >> Но битмапа е само еден поинаков начин на што претставува уште слики со користење на пиксели 261 00:11:17,770 --> 00:11:19,580 во 0-ти и 1S, во крајна линија. 262 00:11:19,580 --> 00:11:23,282 Но на прв поглед, таа има поинтересна потпис 263 00:11:23,282 --> 00:11:24,490 на почетокот на датотеката. 264 00:11:24,490 --> 00:11:26,670 Тоа не е само три бајти, а има 265 00:11:26,670 --> 00:11:30,770 еден куп шеми на бајти кои се однапред одредени значење. 266 00:11:30,770 --> 00:11:34,490 На пример, некаде во првите неколку бајти на bitmap слика 267 00:11:34,490 --> 00:11:37,440 се случува да биде со големина на слика, ширината на сликата, 268 00:11:37,440 --> 00:11:40,390 висината на сликата, па корисно метаподатоци, ако сакате. 269 00:11:40,390 --> 00:11:43,940 Корисни информации кои Фотошоп или било која графичка програма што ја користите 270 00:11:43,940 --> 00:11:45,180 всушност би можеле да се грижат. 271 00:11:45,180 --> 00:11:47,170 >> Толку повеќе за ова во Проблем во собата 4, но ова 272 00:11:47,170 --> 00:11:49,220 е само да се каже дека на крајот на денот 273 00:11:49,220 --> 00:11:52,390 сите формати на датотеки сте биле со за years-- датотеки на Microsoft Word, 274 00:11:52,390 --> 00:11:55,820 Броеви на датотеки, датотеки на Excel, било кој број на формати на датотеки 275 00:11:55,820 --> 00:11:57,770 кои би можеле да имаат некои Познато наставката на датотеката 276 00:11:57,770 --> 00:12:00,130 се само 0-ти и 1S под хауба. 277 00:12:00,130 --> 00:12:02,970 И луѓето се одлучиле она што на конвенции, 278 00:12:02,970 --> 00:12:08,340 какви модели на 0-ти и 1S претставуваат Word документ наспроти една датотека Excel, 279 00:12:08,340 --> 00:12:10,322 наспроти било кој број на други формати на датотеки. 280 00:12:10,322 --> 00:12:12,780 Па во pset 4, ќе имаат можност да се игра со тоа. 281 00:12:12,780 --> 00:12:14,405 >> Но, што значи тоа да имаш struct. 282 00:12:14,405 --> 00:12:18,012 Ова е всушност убаво segue сега во C, која има само неколку 283 00:12:18,012 --> 00:12:20,220 на дополнителни функции, кои ние не го погледна уште. 284 00:12:20,220 --> 00:12:24,230 Тоа е прилично мал јазик и еден од убави особини за C е struct. 285 00:12:24,230 --> 00:12:27,300 На пример, ако сте сакаше да represent-- ајде 286 00:12:27,300 --> 00:12:33,690 речеме, ти сакаше да имаат променлива која претставува еден студент во некоја програма. 287 00:12:33,690 --> 00:12:37,330 Можеби сте биле пишување на курсот регистрација програма, или јадро шопинг 288 00:12:37,330 --> 00:12:38,870 алатка, или нешто слично. 289 00:12:38,870 --> 00:12:42,922 Кои се делови на податоци врска на ученикот кои доаѓаат на ум? 290 00:12:42,922 --> 00:12:44,880 Како студент е претставени со она што сака? 291 00:12:44,880 --> 00:12:45,732 Да? 292 00:12:45,732 --> 00:12:46,940 Имаш име како студент. 293 00:12:46,940 --> 00:12:48,900 Што друго типичниот студент има? 294 00:12:48,900 --> 00:12:49,320 >> ПУБЛИКАТА: [Беззвучен] 295 00:12:49,320 --> 00:12:50,200 >> Дејвид Џ MALAN: Значи, жалам. 296 00:12:50,200 --> 00:12:50,660 >> ПУБЛИКАТА: доба. 297 00:12:50,660 --> 00:12:52,980 >> Дејвид Џ MALAN: возраст или роденден еквивалентно, Да. 298 00:12:52,980 --> 00:12:53,557 Што друго? 299 00:12:53,557 --> 00:12:54,390 ПУБЛИКАТА: ID број? 300 00:12:54,390 --> 00:12:57,460 Дејвид Џ MALAN: Значи идентификациски број, можеби телефонски број, а можеби и студентски дом, или куќа, 301 00:12:57,460 --> 00:12:58,670 или колеџ, или нешто слично. 302 00:12:58,670 --> 00:13:01,820 Било кој број на делови на податоци кои може да имате во вашата листа на контакти 303 00:13:01,820 --> 00:13:03,890 е она што може да се дефинира како студент. 304 00:13:03,890 --> 00:13:08,490 Значи, ако сакаме да го направите ова, во кодот, ние би можеле да се направи нешто едноставно како ова. 305 00:13:08,490 --> 00:13:15,670 Ние би можеле да имаат програма, така што има да речеме, int главната (празно). 306 00:13:15,670 --> 00:13:18,920 И ако сакам да го застапува студент би можел да има, на пример, 307 00:13:18,920 --> 00:13:24,330 низа наречен име за кои ученикот, низа наречен студентски дом за тој студент, 308 00:13:24,330 --> 00:13:26,900 можеби на int нарекува проект за кој студентот. 309 00:13:26,900 --> 00:13:30,840 И затоа јас сум со користење низа, јас треба да се врати и да постават cs50.h. 310 00:13:30,840 --> 00:13:33,300 Можеби и јас ќе одам да се потребни stdio.h. 311 00:13:33,300 --> 00:13:38,190 Значи, дозволете ми превентивно се направи тие и јас сум требаше да се јавите на оваа student.c за сега 312 00:13:38,190 --> 00:13:40,080 и да го спаси ова. 313 00:13:40,080 --> 00:13:44,206 >> И сега можам да направам нешто со овие променливи. 314 00:13:44,206 --> 00:13:46,830 И ние сме само ќе да се напише што како коментар во псевдо код, 315 00:13:46,830 --> 00:13:48,829 затоа што тоа не е интересно она што го правиме сега за сега. 316 00:13:48,829 --> 00:13:51,242 Добро, така што ова е програма со која некако продавници студент. 317 00:13:51,242 --> 00:13:53,450 Што сакам да се направи, ако јас сакате да ги чувате двајца студенти? 318 00:13:53,450 --> 00:13:55,991 Така мојот прв инстинкт се случува да се биде во ред, почекајте една минута, 319 00:13:55,991 --> 00:14:01,920 ако имам друг ученик Зошто не јас само го направи низа име 2, стринг dorm 2, 320 00:14:01,920 --> 00:14:04,190 int id2. 321 00:14:04,190 --> 00:14:06,540 И ние го направивме заминувам надолу овој пат пред 322 00:14:06,540 --> 00:14:10,890 и она што беше нашето решение за она што се чини да биде еден вид на hackish копија паста 323 00:14:10,890 --> 00:14:11,555 работа тука? 324 00:14:11,555 --> 00:14:12,346 ПУБЛИКАТА: Низа. 325 00:14:12,346 --> 00:14:13,830 Дејвид Џ MALAN: Да, ние би можеле да се користи низа. 326 00:14:13,830 --> 00:14:15,620 Право ова многу брзо станува тежок за употреба. 327 00:14:15,620 --> 00:14:18,453 Мора да се најде решение на произволно проектот именување сите овие променливи. 328 00:14:18,453 --> 00:14:22,190 А ти, со луѓе, мора да се задржи следи дека во ред name2 одговара 329 00:14:22,190 --> 00:14:25,060 со dorm2 кореспондира со id2. 330 00:14:25,060 --> 00:14:26,200 Тоа само станува хаос. 331 00:14:26,200 --> 00:14:29,350 Така, тоа е многу полесно, потсетиме од пред неколку недели, 332 00:14:29,350 --> 00:14:34,300 само да се има да се нарекува имиња низа а можеби и да ни даде три од нив. 333 00:14:34,300 --> 00:14:36,940 А потоа можеби и имаме стринг домови и имаат 334 00:14:36,940 --> 00:14:41,900 три од оние, или со постојан, int IDS и имаат три од нив. 335 00:14:41,900 --> 00:14:45,250 Но дури и сега тоа се чувствува малку невешт, нели. 336 00:14:45,250 --> 00:14:49,440 Зборуваме за студенти и уште Јас сум навистина живеат на ниско ниво 337 00:14:49,440 --> 00:14:50,470 имплементација детали. 338 00:14:50,470 --> 00:14:52,790 Студентот се името и студентски дом и проект. 339 00:14:52,790 --> 00:14:59,814 >> Зошто не можам само да декларирате променлива наречен студент и повик е тоа. 340 00:14:59,814 --> 00:15:02,230 И ако сакам друг ученик, зошто да не само го нарекуваат т. 341 00:15:02,230 --> 00:15:05,260 Или ако сакам целиот куп на студентите, зошто да не се направи јас само 342 00:15:05,260 --> 00:15:09,740 велат дека имам една цела класа студентите, и тоа е три од нив. 343 00:15:09,740 --> 00:15:12,470 Со други зборови, зошто не можам да се со мојот сопствен тип на податоци, наречен 344 00:15:12,470 --> 00:15:15,641 Ученици, во внатрешноста на кој е име, е проект, е дом, 345 00:15:15,641 --> 00:15:16,890 е било кој број на други области. 346 00:15:16,890 --> 00:15:19,030 И излегува вас може да го направи токму тоа. 347 00:15:19,030 --> 00:15:21,850 >> Па C има оваа функција наречена struct. 348 00:15:21,850 --> 00:15:24,700 Тоа е карактеристика јазик кој ни овозможува да го прават токму тоа. 349 00:15:24,700 --> 00:15:28,370 Одам да се оди напред и ќе отвори structs.h 350 00:15:28,370 --> 00:15:32,299 каде што ние ќе треба да се види по дефиниција на студент. 351 00:15:32,299 --> 00:15:35,215 Излегува - и ова е уште една поедноставна од една од кои еден проект 352 00:15:35,215 --> 00:15:36,080 пред еден миг. 353 00:15:36,080 --> 00:15:39,120 Ако сакате да се излезе со вашата домашна тип на податоци, 354 00:15:39,120 --> 00:15:42,750 а во прилог на int, и знак и плови и сите овие другите кои постојат, 355 00:15:42,750 --> 00:15:45,810 можете да го направите со буквално пишување typedef struct, 356 00:15:45,810 --> 00:15:47,880 тогаш некои големи загради, во внатрешноста на кој ќе се 357 00:15:47,880 --> 00:15:51,460 листата на променливи што сакате да го се дружат со овој нов сопствени податоци 358 00:15:51,460 --> 00:15:55,670 тип како име и студентски дом, а потоа и по големите загради 359 00:15:55,670 --> 00:15:57,860 ви даде името на новиот тип на податок. 360 00:15:57,860 --> 00:15:59,220 Така, на пример, студент. 361 00:15:59,220 --> 00:16:03,247 >> И она што е убаво за ова сега е дека ако се осврнеме на соодветниот код, 362 00:16:03,247 --> 00:16:05,080 Конвенцијата, првиот на сите, е да се стави ова 363 00:16:05,080 --> 00:16:08,230 во датотека наречена нешто точка ж, датотека со глава, кои не сме 364 00:16:08,230 --> 00:16:09,780 почна да го користи себеси премногу. 365 00:16:09,780 --> 00:16:12,120 Но, ние се случува да започне користење на сосема малку сега. 366 00:16:12,120 --> 00:16:18,650 И она што може да се направи со ова, во крајна линија, во тие неколку линии на код 367 00:16:18,650 --> 00:16:22,130 се прогласат токму тоа тип на податоци, еден студент. 368 00:16:22,130 --> 00:16:23,230 И сега ајде да го користат. 369 00:16:23,230 --> 00:16:27,274 >> Одам да сега одиме во датотека наречена structs1.c. 370 00:16:27,274 --> 00:16:29,440 И ајде да ги разгледаме во некој Неколку карактеристики тука. 371 00:16:29,440 --> 00:16:32,250 Па работи тука е најмногу познат, и ние ќе го 372 00:16:32,250 --> 00:16:35,040 се врати на она што не е запознаени со само еден миг. 373 00:16:35,040 --> 00:16:39,880 Секако, ова е и моите хедер датотека, кој е нов, како и, 374 00:16:39,880 --> 00:16:42,580 освен за pset 3, каде што, Потсетиме, имаме helpers.h. 375 00:16:42,580 --> 00:16:45,150 Па може да се сети # Include helpers.h. 376 00:16:45,150 --> 00:16:49,381 >> Зошто иако сум користите наводници наместо аглести загради? 377 00:16:49,381 --> 00:16:50,630 Кога треба да се избере помеѓу нив? 378 00:16:50,630 --> 00:16:52,310 Речиси секогаш јас се чини дека да се користи аголни загради. 379 00:16:52,310 --> 00:16:55,040 И тогаш, одеднаш, на линија шест јас сум со користење двојни наводници. 380 00:16:55,040 --> 00:16:55,860 Зошто тоа би можело да биде? 381 00:16:55,860 --> 00:16:56,700 Да? 382 00:16:56,700 --> 00:16:57,725 >> ПУБЛИКАТА: [Беззвучен] 383 00:16:57,725 --> 00:16:59,350 Дејвид Џ MALAN: Тоа е реален, што? 384 00:16:59,350 --> 00:17:00,559 ПУБЛИКАТА: Тоа е во вашата ИРО. 385 00:17:00,559 --> 00:17:02,475 Дејвид Џ MALAN: Да, тоа е во мојот вистински ИРО. 386 00:17:02,475 --> 00:17:05,690 И да не се задржиме на ИРО, бидејќи тоа е само алатка која јас користам. 387 00:17:05,690 --> 00:17:08,119 Тоа е во мојот тековната директориум, конкретно. 388 00:17:08,119 --> 00:17:11,647 Па structs.h е моето досие не се инсталирани во ИРО, 389 00:17:11,647 --> 00:17:14,480 во самиот оперативен систем, а тоа е во мојот тековниот директориум. 390 00:17:14,480 --> 00:17:16,910 Па конвенцијата е ако сакате за да го вклучите вашиот сопствен хедер датотека, 391 00:17:16,910 --> 00:17:18,200 можете само да користат двојни наводници. 392 00:17:18,200 --> 00:17:23,290 >> Она што ние го нарекуваме оваа работа во алинеја 8, општо земено? 393 00:17:23,290 --> 00:17:25,200 Тоа е она што? 394 00:17:25,200 --> 00:17:28,220 #define нешто. 395 00:17:28,220 --> 00:17:31,040 Ова претставува константи, нели? 396 00:17:31,040 --> 00:17:33,140 Ако сакате да имаат вредност во вашата програма 397 00:17:33,140 --> 00:17:35,110 што ќе се користи во целина куп пати, тоа е 398 00:17:35,110 --> 00:17:39,330 добра конвенција да го земеш надвор, го покаже, со симболот на хаш 399 00:17:39,330 --> 00:17:43,340 се дефинира, а потоа, по конвенција, во сите големи букви word-- иако тоа не е 400 00:17:43,340 --> 00:17:45,320 строго неопходно, но тоа е човечкиот конгрес 401 00:17:45,320 --> 00:17:47,210 за да профитираат константи така што тие скокаат 402 00:17:47,210 --> 00:17:50,380 во вас visually-- простор и тогаш вредноста што сакате да биде 403 00:17:50,380 --> 00:17:52,250 еквивалент на името што е константа. 404 00:17:52,250 --> 00:17:56,110 Не запирка, но вие едноставно го следи тој модел таму. 405 00:17:56,110 --> 00:17:57,770 >> Значи она што го правам во овој вистински код. 406 00:17:57,770 --> 00:18:00,660 Па ајде да ги разгледаме во во главната програма тука. 407 00:18:00,660 --> 00:18:04,080 Во алинејата 12, бидејќи јас се вклучени structs.h, 408 00:18:04,080 --> 00:18:06,492 Јас сега имаат магично во мојата стои нов тип на податок. 409 00:18:06,492 --> 00:18:09,200 Јас не само да имаат пристап до int, и знак, и плови, и стринг, 410 00:18:09,200 --> 00:18:10,060 и сина и други. 411 00:18:10,060 --> 00:18:12,470 Јас сега имаат пристап до тип студент податоци. 412 00:18:12,470 --> 00:18:17,740 Па во линија 12, јас сум комбинирање на две ideas-- еден вид сопствени податоци и два, 413 00:18:17,740 --> 00:18:18,940 користење низа. 414 00:18:18,940 --> 00:18:21,700 И така во оваа програма ако Сакам да всушност поддршка 415 00:18:21,700 --> 00:18:24,320 три различни студенти во мојата програма, јас 416 00:18:24,320 --> 00:18:30,480 можеме да кажеме едноставно ми даде една променлива наречен ученици, од кои секоја 417 00:18:30,480 --> 00:18:32,970 е од учениците тип, што е мојот тип сопствени податоци. 418 00:18:32,970 --> 00:18:35,890 И, посебно, да ми даде три од оние во мојот низа. 419 00:18:35,890 --> 00:18:37,750 >> Па сега што ќе правиме во оваа програма? 420 00:18:37,750 --> 00:18:40,670 Еве само за телефонска линија процесирањето од 0 до 3, затоа што тоа е 421 00:18:40,670 --> 00:18:42,110 она што е вредноста на студенти. 422 00:18:42,110 --> 00:18:44,420 Јас сум само прашува корисникот дај ми име на студентот. 423 00:18:44,420 --> 00:18:48,090 А потоа и во линија 17, ние имаат најмногу зна- линија. 424 00:18:48,090 --> 00:18:50,370 Имаме нашиот стар пријател Getstring на десната страна. 425 00:18:50,370 --> 00:18:52,345 И она парче синтакса очигледно е ново, 426 00:18:52,345 --> 00:18:55,130 ако никогаш не сум програмиран во C и досега, и никогаш не користеле structs? 427 00:18:55,130 --> 00:18:55,510 Да? 428 00:18:55,510 --> 00:18:56,417 >> Публика: .name. 429 00:18:56,417 --> 00:18:57,500 Дејвид Џ MALAN: На .name. 430 00:18:57,500 --> 00:19:01,220 Но тоа не е премногу на скок, бидејќи сега студенти заградата јас 431 00:19:01,220 --> 00:19:02,590 ви дава i-тиот студент. 432 00:19:02,590 --> 00:19:04,730 И ако сакате да се нурне во внатрешноста на таа структура, 433 00:19:04,730 --> 00:19:09,490 можете само да се користи еден период и потоа името на променливата во внатрешноста, 434 00:19:09,490 --> 00:19:11,900 или имотот во внатрешноста, кои сакате да се добие пристап до. 435 00:19:11,900 --> 00:19:14,816 Слично на тоа, тогаш, ако јас тогаш го извести корисник, дај ми студентски дом на студентот, 436 00:19:14,816 --> 00:19:18,390 Слично на тоа што можете да ги чувате дека стринг променлива во внатрешноста на домот 437 00:19:18,390 --> 00:19:19,940 на оној студент структура. 438 00:19:19,940 --> 00:19:21,410 >> И сега работите се малку фенси. 439 00:19:21,410 --> 00:19:24,420 И тоа се случува да се погледне можеби во многу скоро време. 440 00:19:24,420 --> 00:19:27,970 Но ќе видите оваа далеку повеќе во pset 4, па да само се загледувам во тоа сега. 441 00:19:27,970 --> 00:19:33,364 Излегува дека во согласност со 23 38, што мислиш, јас сум можеби правиш? 442 00:19:33,364 --> 00:19:35,530 Сум отстрани коментарите за денес, но на верзијата 443 00:19:35,530 --> 00:19:38,660 од кодот онлајн референца има сите коментари. 444 00:19:38,660 --> 00:19:40,171 Што ми се чини дека да се прави? 445 00:19:40,171 --> 00:19:42,530 >> ПУБЛИКАТА: Зачувување на датотека со сите информации што корисникот внесе. 446 00:19:42,530 --> 00:19:44,530 >> Дејвид Џ MALAN: Да, точно, ова е нов начин 447 00:19:44,530 --> 00:19:46,370 што сме сведоци две, Друга карактеристика на C, 448 00:19:46,370 --> 00:19:48,700 со која можам да се создаде мојата датотеки. 449 00:19:48,700 --> 00:19:51,580 Досега, речиси секоја програма што сум напишал е без државјанство. 450 00:19:51,580 --> 00:19:53,334 Штом тоа е направено по ред, тоа е тоа. 451 00:19:53,334 --> 00:19:55,000 Нема меморија или сеќавање на него. 452 00:19:55,000 --> 00:19:56,110 Не постои датотеката зачувана. 453 00:19:56,110 --> 00:19:58,120 Но, ако вие не сакате да спаси внесување дека има 454 00:19:58,120 --> 00:20:02,100 се случи, како што се во игра или програма вака, излегува можеме да го стори тоа. 455 00:20:02,100 --> 00:20:04,360 И ќе видите дека ова повеќе во pset 4 и точка. 456 00:20:04,360 --> 00:20:08,661 Но оваа линија 23 во суштина креира датотека наречена students.csv. 457 00:20:08,661 --> 00:20:10,160 А вие може да се види тоа порано. 458 00:20:10,160 --> 00:20:14,250 Дури и ако никогаш не сум студирал CS пред, CSV е разделени со запирки променливи. 459 00:20:14,250 --> 00:20:19,000 Тоа е како многу лош верзија на една датотека Excel, 460 00:20:19,000 --> 00:20:22,270 што значи дека може да се отвори во Excel и во Apple броеви, 461 00:20:22,270 --> 00:20:23,830 и има редови и колони. 462 00:20:23,830 --> 00:20:26,485 Но тоа не е комерцијален формат како Microsoft или Apple. 463 00:20:26,485 --> 00:20:29,840 Тоа е само запирки одвојување на вредности кои ние ќе се види во еден момент. 464 00:20:29,840 --> 00:20:31,010 >> И само се погоди. 465 00:20:31,010 --> 00:20:33,480 Во линија 23, на самиот крај, мојот втор аргумент 466 00:20:33,480 --> 00:20:37,700 на оваа нова функција наречена ѓ отворен за отворена датотека е w. 467 00:20:37,700 --> 00:20:39,430 Она што може да се означи w? 468 00:20:39,430 --> 00:20:40,022 Да? 469 00:20:40,022 --> 00:20:41,260 >> ПУБЛИКАТА: Тоа ви овозможува да се запише во датотеката? 470 00:20:41,260 --> 00:20:42,630 >> Дејвид Џ MALAN: Таа им овозможува на можете да запишам во датотеката. 471 00:20:42,630 --> 00:20:44,810 Па има неколку варијанти дека ние може да се вклучи во тука. 472 00:20:44,810 --> 00:20:47,184 Но, ако само сакате да го прочитате на датотеката, тоа е се погледне во него 473 00:20:47,184 --> 00:20:50,010 и да го прочита во меморијата, што го само користење цитат unquote "р". 474 00:20:50,010 --> 00:20:53,110 Ако сакате да се напише на датотека, можете да користите цитат unquote "W". 475 00:20:53,110 --> 00:20:55,190 Има исто така, го додаваат и неколку други работи 476 00:20:55,190 --> 00:20:57,356 ако сакате да го менувате постоечките датотеки. 477 00:20:57,356 --> 00:21:00,480 Сега ние ќе треба да ги гледате ова нешто, тогаш ние ќе се вратам на линијата 24. 478 00:21:00,480 --> 00:21:02,640 NULL, што се испоставува, е посебна вредност што 479 00:21:02,640 --> 00:21:06,070 може да се врати од страна на одредени функции ако нешто не е во wrong-- 480 00:21:06,070 --> 00:21:08,490 Ако датотеката не постои, ако сте снема меморија, 481 00:21:08,490 --> 00:21:09,620 или еден куп други грешки. 482 00:21:09,620 --> 00:21:13,470 Но, за сега, ајде само да се претпостави дека ова е само конвенционален грешка проверка. 483 00:21:13,470 --> 00:21:17,090 Тука во линија 26, Јас сум во процесирањето 0-3 над сите мои студенти. 484 00:21:17,090 --> 00:21:20,470 И ова е вид на вид на новата функција, fprintf, 485 00:21:20,470 --> 00:21:21,460 туку само се погоди. 486 00:21:21,460 --> 00:21:24,370 Ако printf е само за печатење форматиран стринг, 487 00:21:24,370 --> 00:21:26,507 што значи fprintf веројатно значи? 488 00:21:26,507 --> 00:21:27,590 ПУБЛИКАТА: Печати во датотека. 489 00:21:27,590 --> 00:21:29,290 Дејвид Џ MALAN: Испечатете форматиран стринг во датотека. 490 00:21:29,290 --> 00:21:31,180 Тоа е она што на дополнителни ѓ значи е датотека. 491 00:21:31,180 --> 00:21:36,420 И новиот Првиот аргумент мора да биде променливата што го претставува вашиот фајл. 492 00:21:36,420 --> 00:21:38,866 Тогаш можеме само да има формат стринг како printf. 493 00:21:38,866 --> 00:21:40,740 И иако ова Синтаксата е ново, тоа само 494 00:21:40,740 --> 00:21:44,610 значи да се вклучи во името на студентот, plug-in-на студентски дом, а потоа 495 00:21:44,610 --> 00:21:47,160 со запишам, во близина на датотеката. 496 00:21:47,160 --> 00:21:49,730 А потоа lastly-- ова е ново и ние ќе се вратам на оваа 497 00:21:49,730 --> 00:21:53,240 пред long-- јас сум ослободување ученикот од причини 498 00:21:53,240 --> 00:21:54,860 што се случи таму горе. 499 00:21:54,860 --> 00:21:56,820 Но, ние ќе се вратам да дека пред long-- 500 00:21:56,820 --> 00:21:59,820 тоа е затоа што на тоа како GetString е всушност работат под хауба. 501 00:21:59,820 --> 00:22:01,280 >> Значи, да се земе брз поглед тука. 502 00:22:01,280 --> 00:22:04,380 Ако сум тип ls во мојот именик, забележите дека јас не 503 00:22:04,380 --> 00:22:09,360 имаат фајл наречен students.csv, едноставно не постои, не постои. 504 00:22:09,360 --> 00:22:14,965 Значи, ако јас сега собере на оваа програма, направи structs-1. / structs-1, 505 00:22:14,965 --> 00:22:20,570 а јас ќе одам да се оди напред и да внесете Анди, кој живее во Беркли на Јеил. 506 00:22:20,570 --> 00:22:26,350 Ние ќе треба да се има на Роб кој живее во Тајер овие денови. 507 00:22:26,350 --> 00:22:33,760 И ајде да се излезе со која е, мислам, Марија е во Mather, 508 00:22:33,760 --> 00:22:35,100 ако јас ги помнам правилно. 509 00:22:35,100 --> 00:22:36,460 >> Па ништо не чини да се случи. 510 00:22:36,460 --> 00:22:40,680 Но, ако сум тип ls сега, постои students.csv. 511 00:22:40,680 --> 00:22:43,080 Ајде да одиме напред и отворени students.csv. 512 00:22:43,080 --> 00:22:46,050 Ова е повторно една многу лесен формат на датотека. 513 00:22:46,050 --> 00:22:49,570 Но, јас сум едноставно усвои конвенција дека имам две редови и колони тука. 514 00:22:49,570 --> 00:22:52,020 Првата колона Првиот имињата на луѓето. 515 00:22:52,020 --> 00:22:55,740 Втората колона е на студентот студентски дом, или колеџ, или куќа, или какво ли не. 516 00:22:55,740 --> 00:22:57,900 И сега јас сум спасен ова трајно во датотека. 517 00:22:57,900 --> 00:22:59,280 >> Па тоа не е сè што интересно. 518 00:22:59,280 --> 00:23:02,980 Но ова е само отскочна штица сега да се биде во можност да се истрае информации 519 00:23:02,980 --> 00:23:04,040 трајно. 520 00:23:04,040 --> 00:23:08,340 Да видиме сега што повеќе можеме да се прави со овие и други карактеристики. 521 00:23:08,340 --> 00:23:10,729 Но, прво, било какви прашања? 522 00:23:10,729 --> 00:23:12,145 Тоа беше многу, и тоа беше брзо. 523 00:23:12,145 --> 00:23:16,131 Но, ќе видиме многу повеќе во pset 4, како и. 524 00:23:16,131 --> 00:23:16,630 Да? 525 00:23:16,630 --> 00:23:19,360 >> ПУБЛИКАТА: Дали постои начин да се продолжи додавајќи имиња на таа датотека? 526 00:23:19,360 --> 00:23:19,880 >> Дејвид Џ MALAN: Добро прашање. 527 00:23:19,880 --> 00:23:21,800 Дали постои начин да се продолжи додавање имиња во таа датотека? 528 00:23:21,800 --> 00:23:22,340 Да. 529 00:23:22,340 --> 00:23:24,630 И дека, всушност, ако заврши до повторно отворање на датотеката, 530 00:23:24,630 --> 00:23:26,780 ќе се користи цитат unquote "а" за додавај, 531 00:23:26,780 --> 00:23:31,090 кој само ќе додадете нова линија, нова линија повторно и повторно, точно. 532 00:23:31,090 --> 00:23:32,010 Добро прашање. 533 00:23:32,010 --> 00:23:32,950 Други прашања? 534 00:23:32,950 --> 00:23:33,450 Да? 535 00:23:33,450 --> 00:23:35,580 ПУБЛИКАТА: Ако го истрча програмата повторно, токму сега, 536 00:23:35,580 --> 00:23:38,000 би ја задржите додавањето на имињата на поднесе или тоа ќе се отвори нова датотека? 537 00:23:38,000 --> 00:23:38,740 >> Дејвид Џ MALAN: Ах, добро прашање. 538 00:23:38,740 --> 00:23:41,448 Ако повторно право да истрча на програмата сега, можеби чука со нови имиња, 539 00:23:41,448 --> 00:23:44,820 ќе ја додадете во датотеката или да запише врз датотеката? 540 00:23:44,820 --> 00:23:47,420 Второто, затоа што јас сум не користи append режим. 541 00:23:47,420 --> 00:23:49,930 И бидејќи јас сум само слепо отворањето на датотека за запишување, 542 00:23:49,930 --> 00:23:51,310 тоа е само ќе да запише врз датотеката. 543 00:23:51,310 --> 00:23:54,570 Па јас навистина ќе треба да направите е да додадете, ако сакам да се, всушност, имаат долгорочен 544 00:23:54,570 --> 00:23:55,350 база на податоци. 545 00:23:55,350 --> 00:23:58,220 >> Сега CSV е корисно, искрено, дури и за како ако сте writing-- 546 00:23:58,220 --> 00:24:00,100 и ние на крајот ќе го видите овој подоцна во текот на семестарот, кога 547 00:24:00,100 --> 00:24:01,455 ние ги користиме CSVs за други цели. 548 00:24:01,455 --> 00:24:04,920 Ако сакате да ја запази сите луѓе кои се регистрирани за некој настан, 549 00:24:04,920 --> 00:24:07,420 или да се регистрираа за вашиот студент група, или нешто слично, 550 00:24:07,420 --> 00:24:10,330 складирање на податоците во овој вид на формат е супер лесен. 551 00:24:10,330 --> 00:24:12,580 Бидејќи буквално, ако можам требаше да го симнете овој фајл. 552 00:24:12,580 --> 00:24:14,540 Можев и double-- ајде да се, всушност, се обиде овој 553 00:24:14,540 --> 00:24:16,720 ако имам Excel или броеви за тука. 554 00:24:16,720 --> 00:24:19,130 >> Одам да кликнете со десното копче или контрола-клик моето досие. 555 00:24:19,130 --> 00:24:20,020 Whoops. 556 00:24:20,020 --> 00:24:21,830 Кликнете со десното копче или контрола-клик моето досие. 557 00:24:21,830 --> 00:24:24,960 Ајде, мојот глушец не соработува. 558 00:24:24,960 --> 00:24:32,694 Download-- Одам да преземете сите датотеки тука, па 559 00:24:32,694 --> 00:24:33,860 само за да можам да го зграби оваа. 560 00:24:33,860 --> 00:24:37,850 И ајде да видиме дали тоа функционира students.csv-- прв пат 561 00:24:37,850 --> 00:24:39,310 Сум се активира. 562 00:24:39,310 --> 00:24:41,360 Сега тие сакаат да се види моите контакти. 563 00:24:41,360 --> 00:24:44,310 Сега, јас треба да се регистрирате. 564 00:24:44,310 --> 00:24:47,620 Видите колку е лесно е да се користи CSVs? 565 00:24:47,620 --> 00:24:50,840 Да, тоа се задржи до датумот. 566 00:24:50,840 --> 00:24:52,375 Добро, сега ние сме подготвени за класа. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 Добро, ох, што има ново? 569 00:25:00,370 --> 00:25:02,920 ОК, блиску. 570 00:25:02,920 --> 00:25:04,750 Кој беше магично. 571 00:25:04,750 --> 00:25:07,280 Во ред, сега ние треба да се ажурира. 572 00:25:07,280 --> 00:25:10,890 И сега, тоа заборавив што поднесе Јас првично се отвори, 573 00:25:10,890 --> 00:25:13,090 но она што a-- таму ќе одиме. 574 00:25:13,090 --> 00:25:16,341 Добро, па сега имаме една датотека Excel. 575 00:25:16,341 --> 00:25:18,290 Ти благодарам. 576 00:25:18,290 --> 00:25:20,764 >> Добро, па она што го направив беше лесно дел. 577 00:25:20,764 --> 00:25:23,930 Се разбира дека би можеле да имаат пред-инсталиран Excel, или броеви, или што и програма. 578 00:25:23,930 --> 00:25:25,846 Но, ова е убаво, бидејќи Јас сега може да се манипулира 579 00:25:25,846 --> 00:25:28,090 податоците во стандарден формат. 580 00:25:28,090 --> 00:25:30,294 >> Контекст Па сега ајде префрлат на каде што застанавте 581 00:25:30,294 --> 00:25:32,710 Последниот пат, кој требаше да започне да ги тргнеме обука тркала. 582 00:25:32,710 --> 00:25:34,543 Но, прво, не види ова порано ручек 583 00:25:34,543 --> 00:25:38,150 повторно се случува тука во пожар и Мразот во Кембриџ, sitar во Њу Хејвен. 584 00:25:38,150 --> 00:25:43,150 Регистрирај се на Facebook за веб CS50s ПОБРЗО да се приклучат на студентите и вработените CS50. 585 00:25:43,150 --> 00:25:46,090 >> Значи ние се обука тркала во понеделник како follows-- 586 00:25:46,090 --> 00:25:49,120 стринг е прогласена во CS50s библиотека за некое време. 587 00:25:49,120 --> 00:25:52,650 И тоа е убаво, бидејќи им овозможува на ни да се зборува за варијабли, како да бидат 588 00:25:52,650 --> 00:25:54,660 заврши зборови и реченици и многу повеќе. 589 00:25:54,660 --> 00:25:56,710 Но, се покажа стринг не постои. 590 00:25:56,710 --> 00:26:00,200 Тоа е само синоним, или псевдоним, кои ние направивме за нешто што 591 00:26:00,200 --> 00:26:03,780 всушност е малку повеќе технички нарекува знак *. 592 00:26:03,780 --> 00:26:07,900 >> И навистина, видовме еден пример на програма во понеделникот 593 00:26:07,900 --> 00:26:11,200 кои не се однесуваат сосема како што се очекуваше. 594 00:26:11,200 --> 00:26:13,630 Ова беше фајлови, да ги споредиме-0. 595 00:26:13,630 --> 00:26:17,910 И се сети дека се споредуваат-0, ако Јас го прекомпајлирате програма во понеделникот 596 00:26:17,910 --> 00:26:22,670 и да ја стартувате споредуваат-0 и тип во мајка во мали букви, и мајка со мали букви повторно. 597 00:26:22,670 --> 00:26:25,320 Програмата инсистирав напишете различни нешта, 598 00:26:25,320 --> 00:26:29,210 и покрај тоа што мајка ти, и сето тоа во мали букви, е идентичен визуелно. 599 00:26:29,210 --> 00:26:31,990 Значи она што е на краток одговор зошто компјутерот мисли 600 00:26:31,990 --> 00:26:34,500 овие две жици се различни? 601 00:26:34,500 --> 00:26:35,250 Да? 602 00:26:35,250 --> 00:26:36,534 >> ПУБЛИКАТА: [Беззвучен] 603 00:26:36,534 --> 00:26:37,450 Дејвид Џ MALAN: Токму така. 604 00:26:37,450 --> 00:26:39,600 Значи, мајка, за прв пат Јас ја напишете во, е да се биде 605 00:26:39,600 --> 00:26:42,710 чуваат некаде во мојот компјутер меморија, но на друга локација 606 00:26:42,710 --> 00:26:44,690 од вториот пат кога ќе напишете во мајка. 607 00:26:44,690 --> 00:26:46,580 Сега тоа сигурно не може да се оптимизира. 608 00:26:46,580 --> 00:26:49,205 На компјутерот може да биде паметен и реализација на овие две жици, еј, 609 00:26:49,205 --> 00:26:49,954 тие се идентични. 610 00:26:49,954 --> 00:26:51,520 Дозволете ми да не redundantly ја продавницата. 611 00:26:51,520 --> 00:26:54,229 Но, компјутери не го сторат тоа оптимизација, освен ако не им каже да. 612 00:26:54,229 --> 00:26:56,061 Значи, по правило, тие се само ќе се заокружи 613 00:26:56,061 --> 00:26:57,670 во две различни места во меморијата. 614 00:26:57,670 --> 00:27:01,570 И така да биде појасно, кога ние во споредба на две жици, 615 00:27:01,570 --> 00:27:03,950 првиот беше наречен с, вториот беше наречен 616 00:27:03,950 --> 00:27:08,530 т, она што посебно беше јас споредување тука на линија 13? 617 00:27:08,530 --> 00:27:09,494 Је. 618 00:27:09,494 --> 00:27:12,390 >> ПУБЛИКАТА: Тоа е местото во меморијата дека променливата ќе точка. 619 00:27:12,390 --> 00:27:14,900 >> Дејвид Џ MALAN: Точно, јас бев споредување на место во меморијата 620 00:27:14,900 --> 00:27:16,300 дека овие променливи посочи. 621 00:27:16,300 --> 00:27:20,560 Значи конкретно, ако мајка беше на бајт број 1, и 2, и 3, 622 00:27:20,560 --> 00:27:24,020 и 4-- бидејќи се сеќавам на обратна коса црта 0 треба да биде на целиот пат на крајот. 623 00:27:24,020 --> 00:27:29,420 А другата инстанца на мајка ти, м-о-м, беше на адреса 10, 11, 12 и 13. 624 00:27:29,420 --> 00:27:33,100 Бев споредување 1, таа адреса, таа локација во меморијата, 625 00:27:33,100 --> 00:27:35,160 против, 10, кој е очигледно не е исто. 626 00:27:35,160 --> 00:27:36,260 1 не е 10. 627 00:27:36,260 --> 00:27:39,620 >> Значи ова е убаво во таа тоа е прилично јасна. 628 00:27:39,620 --> 00:27:42,870 Но, тоа е проблематично доколку ние не може да изгледа да се споредат жици. 629 00:27:42,870 --> 00:27:44,930 Па fundamentally-- и во ова ниско ниво, 630 00:27:44,930 --> 00:27:47,300 ако си сакал да се имплементира програма за споредба 631 00:27:47,300 --> 00:27:50,270 две одделни зборови дека корисникот има пишани во квалитет, 632 00:27:50,270 --> 00:27:53,944 дали тие се редат знак за знак, само со општи термини, 633 00:27:53,944 --> 00:27:55,360 што ни е потребно да се направи, очигледно? 634 00:27:55,360 --> 00:27:57,940 Тоа не е доволно само да се погледнете во овие две адреси. 635 00:27:57,940 --> 00:27:58,860 Што треба да се направи? 636 00:27:58,860 --> 00:27:59,360 Да? 637 00:27:59,360 --> 00:28:01,120 >> ПУБЛИКАТА: iterate преку стрингот [Беззвучен]. 638 00:28:01,120 --> 00:28:02,600 >> Дејвид Џ MALAN: Да, ајде iterate преку низа. 639 00:28:02,600 --> 00:28:05,808 Ајде да го користите за телефонска линија, додека јамка, или она што сте најмногу задоволни. 640 00:28:05,808 --> 00:28:08,840 И ако имаме две жици некаде во меморијата, ајде да погледнеме во секоја екипа 641 00:28:08,840 --> 00:28:11,770 Првиот карактер, тогаш секој е втор карактер, тогаш третиот и четвртиот, 642 00:28:11,770 --> 00:28:15,206 и петта, додека не се погоди она што посебно стража вредност? 643 00:28:15,206 --> 00:28:16,080 ПУБЛИКАТА: [Беззвучен] 644 00:28:16,080 --> 00:28:18,800 Дејвид Џ MALAN: Да, обратна коса црта нула, на која точка во која било низа 645 00:28:18,800 --> 00:28:20,100 може да се заклучи дека тоа е. 646 00:28:20,100 --> 00:28:21,970 Дали сме исти секој карактер? 647 00:28:21,970 --> 00:28:22,990 Ако не, return false. 648 00:28:22,990 --> 00:28:24,770 Ако е така, врати вистина. 649 00:28:24,770 --> 00:28:28,800 И така тоа е токму она што оваа верзија на програмата се споредат-1.в прави. 650 00:28:28,800 --> 00:28:31,677 Тој е идентичен со она што ние погледна во понеделник, освен дека сум 651 00:28:31,677 --> 00:28:34,760 добиле ослободи од зборот string-- иако дека нема функционална impact-- сите 652 00:28:34,760 --> 00:28:37,450 Што го правам сега е отстранување некои визуелни тркала обука, 653 00:28:37,450 --> 00:28:40,880 но да се види јасно дека s и t се адреси. 654 00:28:40,880 --> 00:28:43,020 И тоа е она што на ѕвезда, ѕвездичка, претставува 655 00:28:43,020 --> 00:28:46,690 е адреса, инаку познат повеќе технички како покажувач. 656 00:28:46,690 --> 00:28:49,880 >> Па кога ќе се прогласи и за алинеја 9 и велат char * с, 657 00:28:49,880 --> 00:28:52,160 тоа не значи дека ми даде низа. 658 00:28:52,160 --> 00:28:56,360 Тоа значи дека ќе ме променлива чија цел во животот е да ги чувате на адреса. 659 00:28:56,360 --> 00:29:00,400 Затоа што јас сум за да се стави на адреса на стринг во него. 660 00:29:00,400 --> 00:29:03,500 И навистина, GetString, да биде јасно, не се враќа стринг. 661 00:29:03,500 --> 00:29:06,110 Тоа не го врати мајка обратна коса црта нула, сам по себе. 662 00:29:06,110 --> 00:29:10,005 Што значи getstring конкретно и прецизно да се вратат? 663 00:29:10,005 --> 00:29:10,880 ПУБЛИКАТА: [Беззвучен] 664 00:29:10,880 --> 00:29:14,080 Дејвид Џ MALAN: адреса, адресата на првиот карактер 665 00:29:14,080 --> 00:29:16,070 во некои стринг има добивано. 666 00:29:16,070 --> 00:29:19,250 Па сега сме сведоци посебна клучен збор. 667 00:29:19,250 --> 00:29:20,640 А, јас се алудира на тоа порано. 668 00:29:20,640 --> 00:29:23,620 Ова се случува да се биде добар конгрес дека ќе видиме повторно и повторно сега. 669 00:29:23,620 --> 00:29:27,540 Јас сум проверка за да бидете сигурни дека s не е ништовен и t не е нула. 670 00:29:27,540 --> 00:29:30,100 Бидејќи врз основа на моето навистина брз споменување порано, 671 00:29:30,100 --> 00:29:35,510 она што би можело да значи ако GetString не се враќа адреса но N-U-L-L, што е повторно, 672 00:29:35,510 --> 00:29:36,990 некои посебни вредност? 673 00:29:36,990 --> 00:29:37,890 >> ПУБЛИКАТА: Грешка. 674 00:29:37,890 --> 00:29:38,600 >> Дејвид Џ MALAN: Тоа е грешка. 675 00:29:38,600 --> 00:29:39,550 Нешто тргна наопаку. 676 00:29:39,550 --> 00:29:41,341 И она што обично може да се случи, особено 677 00:29:41,341 --> 00:29:45,162 strings-- со која може да биде со непозната должина во advance-- 678 00:29:45,162 --> 00:29:46,870 можеби на компјутерите " надвор од меморија, можеби 679 00:29:46,870 --> 00:29:49,280 сте ја внеле во таков долго збор или реченица 680 00:29:49,280 --> 00:29:51,880 или поставите таква огромна есеј таму не е само доволно меморија. 681 00:29:51,880 --> 00:29:55,340 И така GetString не можат да се вратат на адреса на целата работа, 682 00:29:55,340 --> 00:29:56,620 па тоа само се враќа ништо. 683 00:29:56,620 --> 00:30:00,580 И што вели една грешка се случила со враќање на специјални NULL вредности. 684 00:30:00,580 --> 00:30:02,890 Тоа е адреса нула, така да се каже. 685 00:30:02,890 --> 00:30:06,157 >> Сега излегува C доаѓа со функција која го прави тоа повторување. 686 00:30:06,157 --> 00:30:09,240 Ние не треба да се спроведе оваа со за телефонска линија или додека јамка за нас самите. 687 00:30:09,240 --> 00:30:11,150 Ние може да се користи некоја функција, наречен посочно, 688 00:30:11,150 --> 00:30:15,400 промешува комп, или стринг споредуваат, чие цел во животот е да го прават токму тоа. 689 00:30:15,400 --> 00:30:19,990 Ќе го даде два покажувачи, две адреси, и тоа ќе оди на тие адреси 690 00:30:19,990 --> 00:30:23,130 а потоа спореди писмо за писмо за писмо за квалитет, 691 00:30:23,130 --> 00:30:26,610 запирање само кога она што е вистина? 692 00:30:26,610 --> 00:30:31,540 Кога треба да се промешува интуитивно комп престанат процесирањето, само за да биде јасно? 693 00:30:31,540 --> 00:30:35,400 Кога ќе се појави обратна коса црта 0 во двата стринг, на која точка може да одлучи 694 00:30:35,400 --> 00:30:38,910 има се што се исти, или немало разлика? 695 00:30:38,910 --> 00:30:42,740 >> Значи, ако ние ја извршите оваа сега и да се обиде нашата мала капитализација игра, 696 00:30:42,740 --> 00:30:49,260 така осигурајте се споредат-1, ./compare-1, и напишете мајка со мали букви двата пати. 697 00:30:49,260 --> 00:30:50,560 Сега тоа е иста работа. 698 00:30:50,560 --> 00:30:54,080 И ако јас го направи тоа повторно со мали букви, а потоа можеби и големи букви. 699 00:30:54,080 --> 00:30:56,720 Сега е навистина прави разлика помеѓу големи и мали букви. 700 00:30:56,720 --> 00:31:00,440 Затоа, не сето тоа тешко или магични, но тоа го прави сега објасни 701 00:31:00,440 --> 00:31:03,140 она што се случува под хауба. 702 00:31:03,140 --> 00:31:07,640 >> Па што повеќе можеме да се извлече од овој вид на час? 703 00:31:07,640 --> 00:31:08,980 Па ајде да ги разгледаме во тоа. 704 00:31:08,980 --> 00:31:15,380 Одам да се оди напред и да се напише брзо програма тука наречен копи-0. 705 00:31:15,380 --> 00:31:21,594 И сега ајде да одиме напред и, всушност, ајде да направиме this-- со копи-0, 706 00:31:21,594 --> 00:31:23,010 да ги разгледаме во она што имам тука. 707 00:31:23,010 --> 00:31:24,712 Јас прв пат му кажете на корисникот, да каже нешто. 708 00:31:24,712 --> 00:31:26,420 Сетне се низа и јас тоа се чуваат во ОК. 709 00:31:26,420 --> 00:31:29,810 Јас тогаш проверете дали е еднаква на еднаква NULL, само се вратат 1. 710 00:31:29,810 --> 00:31:31,590 Значи ова е само стандардна грешка проверка. 711 00:31:31,590 --> 00:31:33,112 Ништо интересно не се случило. 712 00:31:33,112 --> 00:31:36,320 И всушност, ако можеме да се ослободи од грешка проверка, ова изгледа како недела 1 кодот 713 00:31:36,320 --> 00:31:36,985 во моментот. 714 00:31:36,985 --> 00:31:39,110 Но почнав да се добие малку подобро за тоа. 715 00:31:39,110 --> 00:31:43,340 >> Сега во линија 16, пред една недела, можеби па дури и неколку дена пред или минути, 716 00:31:43,340 --> 00:31:46,720 може да се каже на линија 16 е создавањето променлива наречена т 717 00:31:46,720 --> 00:31:48,219 и копирање е во неа. 718 00:31:48,219 --> 00:31:50,010 И тоа е совршено разумни готова брза. 719 00:31:50,010 --> 00:31:51,560 Но, поточно сега. 720 00:31:51,560 --> 00:31:54,190 Што се случува во линија 16? 721 00:31:54,190 --> 00:31:56,170 Што е добивање копирани од десно кон лево? 722 00:31:56,170 --> 00:31:56,669 Да? 723 00:31:56,669 --> 00:31:58,490 ПУБЛИКАТА: е т добивање на адреса на е? 724 00:31:58,490 --> 00:32:01,220 >> Дејвид Џ MALAN: Токму така, т е добивање на адресата на е. 725 00:32:01,220 --> 00:32:05,170 Значи да биде јасно сега, кога ќе отидам назад кон тоа порано пример 726 00:32:05,170 --> 00:32:08,520 и јас го извлече нешто што сум го внеле во. 727 00:32:08,520 --> 00:32:11,640 И она што го напишавте in-- тука е ОК, и тука 728 00:32:11,640 --> 00:32:15,830 е она што сум го внеле во некаде во меморија, мајка, а потоа обратна коса црта 729 00:32:15,830 --> 00:32:17,840 0 кој додаде за мене. 730 00:32:17,840 --> 00:32:23,060 Она што јас се чуваат во тука, да се потсетиме, ова е на локација, 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 тоа е она што е ново е. 732 00:32:24,655 --> 00:32:29,220 Значи, ако на линија 16, велам дај ми друга променлива наречен т и продавница 733 00:32:29,220 --> 00:32:33,590 во на вредноста на s, што добива чуваат овде нема мајка 734 00:32:33,590 --> 00:32:35,480 туку само на бројот 1. 735 00:32:35,480 --> 00:32:38,520 >> Значи, ако ние се погледне напред во оваа програма Сега, она што ќе се случи? 736 00:32:38,520 --> 00:32:40,690 Значи забележите дека има оваа функција можеби ќе 737 00:32:40,690 --> 00:32:44,410 го користеле овој пред некое време за Цезар, или Vigenere, или можеби не на сите. 738 00:32:44,410 --> 00:32:48,170 Тврдам со мојот printf, јас сум ќе профитираат копијата т. 739 00:32:48,170 --> 00:32:51,616 Прва во редот 19, брз разумност чек, strlen проверки на должината на т. 740 00:32:51,616 --> 00:32:53,740 Затоа што не сакаат да се обидуваат да профитираат нешто 741 00:32:53,740 --> 00:32:55,104 ако нема стринг таму. 742 00:32:55,104 --> 00:32:57,520 Ако корисникот едноставно притиснете Ентер, нема ништо да профитираат. 743 00:32:57,520 --> 00:33:01,100 Па јас не сакам да го направи линија 21. 744 00:33:01,100 --> 00:33:05,758 Па линија 21 е Капитализиране која буква, очигледно, во Т? 745 00:33:05,758 --> 00:33:06,514 >> ПУБЛИКАТА: м? 746 00:33:06,514 --> 00:33:08,722 Дејвид Џ MALAN: Тоа изгледа како тоа е кој копирање? 747 00:33:08,722 --> 00:33:09,486 ПУБЛИКАТА: м. 748 00:33:09,486 --> 00:33:10,450 Дејвид Џ MALAN: Ух, м. 749 00:33:10,450 --> 00:33:12,685 Добро, така што првиот м, затоа што забележавте дека сум 750 00:33:12,685 --> 00:33:14,935 полагање да toupper, која ако никогаш не сум го видел тоа е 751 00:33:14,935 --> 00:33:16,980 само една функција да профитираат како свој придонес. 752 00:33:16,980 --> 00:33:20,240 т заградата нула значи даде мене нула карактер на т. 753 00:33:20,240 --> 00:33:22,550 И така како го прави ова промена на сликата, да биде јасно? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Она што треба да се препишува и повторно да се промени во однос на s и t и мајка 756 00:33:29,160 --> 00:33:30,097 обратна коса црта нула. 757 00:33:30,097 --> 00:33:31,470 >> ПУБЛИКАТА: [Беззвучен] 758 00:33:31,470 --> 00:33:34,030 >> Дејвид Џ MALAN: Да, па овој овде едноставно 759 00:33:34,030 --> 00:33:40,860 треба да добие променил to-- поправат this-- треба да се промени во капиталот м. 760 00:33:40,860 --> 00:33:44,330 Но, сега, погледнете подолу во програма, ако јас се печати 761 00:33:44,330 --> 00:33:49,800 s и t како што е чист, да се види што е ќе се случи печатење s и t. 762 00:33:49,800 --> 00:33:54,310 Така бидете копи-0, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Дозволете ми да оди напред и да напишеш во мајка во сите мали букви. 764 00:33:57,140 --> 00:34:00,140 Известување и на оригинални и копија се капитализирани. 765 00:34:00,140 --> 00:34:00,850 Зошто? 766 00:34:00,850 --> 00:34:04,431 Па, s и t се двете укажува на, ако сакате, исто парче на меморија. 767 00:34:04,431 --> 00:34:06,930 И искрено, ова е добивање навистина uninteresting-- фактот 768 00:34:06,930 --> 00:34:09,150 дека ние сме со користење адреса нула тука. 769 00:34:09,150 --> 00:34:11,719 Мислам, јас навистина не се грижат каде работи е во меморијата. 770 00:34:11,719 --> 00:34:13,550 Жал ми е јас сум бришење малку премногу. 771 00:34:13,550 --> 00:34:15,674 Но јас навистина не се грижат каде работите се во меморијата. 772 00:34:15,674 --> 00:34:18,510 И така, навистина она што програмери имаат тенденција да размислуваат за 773 00:34:18,510 --> 00:34:21,080 е дека кога се зборува за адреса, или покажувач, 774 00:34:21,080 --> 00:34:22,679 кој се грижи каде што е во меморијата. 775 00:34:22,679 --> 00:34:24,989 Не ми е гајле ако е така, бајт еден или една милијарда. 776 00:34:24,989 --> 00:34:27,920 Јас само се грижат дека овој променлива е ефективно 777 00:34:27,920 --> 00:34:29,620 укажувајќи на тоа парче на меморија. 778 00:34:29,620 --> 00:34:33,350 И така, сега па натаму, наместо каламбур преку произволни адреси меморија, ајде 779 00:34:33,350 --> 00:34:36,710 само да почне да се подготви покажувачи како покажувачи, како стрели. 780 00:34:36,710 --> 00:34:39,340 Значи она што S и T навистина се, според оваа програма, 781 00:34:39,340 --> 00:34:42,130 бидејќи за тоа како јас создаде т, тоа е само две одделни променливи 782 00:34:42,130 --> 00:34:43,840 укажувајќи на исто парче на меморија. 783 00:34:43,840 --> 00:34:45,215 И не ми е грижа каде и да се. 784 00:34:45,215 --> 00:34:47,130 Па ние може да се апстрактни далеку дека детали. 785 00:34:47,130 --> 00:34:48,780 >> Па како можам да го надминете овој? 786 00:34:48,780 --> 00:34:54,120 Ако сакам да се напише една верзија на копија програма со која всушност копии стрингот 787 00:34:54,120 --> 00:34:56,840 и капитализира само копија, само интуитивно, 788 00:34:56,840 --> 00:34:59,766 она што е мора да биде состојка за нашето решение? 789 00:34:59,766 --> 00:35:00,640 ПУБЛИКАТА: [Беззвучен] 790 00:35:00,640 --> 00:35:01,420 Дејвид Џ MALAN: Потребен ни е што? 791 00:35:01,420 --> 00:35:01,820 ПУБЛИКАТА: парче меморија. 792 00:35:01,820 --> 00:35:03,280 Дејвид Џ MALAN: Ние треба друго парче на меморија, нели? 793 00:35:03,280 --> 00:35:05,360 Ние не знаеме како да се да го направи тоа, сепак, е задолжително. 794 00:35:05,360 --> 00:35:11,330 Но јас вид на тоа да се случи, па дека оригиналниот мајка со мали букви 795 00:35:11,330 --> 00:35:14,170 завршува во тоа екстра парче на меморија. 796 00:35:14,170 --> 00:35:19,770 А потоа кога ќе се промени на копија, не сакаат да се промени оваа копија овде. 797 00:35:19,770 --> 00:35:26,020 Јас наместо сакате да го промените само овој примерок, така што оригиналниот е непроменета. 798 00:35:26,020 --> 00:35:27,980 >> Значи, ајде да видиме како да го направите тоа. 799 00:35:27,980 --> 00:35:31,800 На копи-1, која веќе има е лишена од коментар, 800 00:35:31,800 --> 00:35:33,250 но е коментираше онлајн. 801 00:35:33,250 --> 00:35:36,710 Ние наместо да го направите овие following-- линии се идентични, ме низа 802 00:35:36,710 --> 00:35:38,340 и повик е тоа. 803 00:35:38,340 --> 00:35:43,500 А сега да ги погледнеме во еден од нашите најважни комплекс, но на последниот на сложеност 804 00:35:43,500 --> 00:35:47,340 за некое време, линија 16 прави токму тоа. 805 00:35:47,340 --> 00:35:49,400 Значи, ако вашиот удобен со слика ние само drew-- 806 00:35:49,400 --> 00:35:51,790 ми даде нов парче меморија, копирајте се што е во него, 807 00:35:51,790 --> 00:35:53,730 ајде да видиме како можеме да го преведеме тој код. 808 00:35:53,730 --> 00:35:59,400 >> Па линија 16, на левата страна, char * т ми дава оваа рубрика овде. 809 00:35:59,400 --> 00:36:00,230 Тоа е се што го прави тоа. 810 00:36:00,230 --> 00:36:03,240 На десната страна, м alloc или Примерок, 811 00:36:03,240 --> 00:36:06,480 е распределбата на меморија, супер фенси, криптичната начин само велејќи: 812 00:36:06,480 --> 00:36:07,640 ми даде парче меморија. 813 00:36:07,640 --> 00:36:09,290 Колку меморија ни треба? 814 00:36:09,290 --> 00:36:10,910 Па, е вид на голема израз. 815 00:36:10,910 --> 00:36:12,570 Но, ајде да видиме што вели тука. 816 00:36:12,570 --> 00:36:15,940 Па ова, се разбира, е да даде ме на должината на стрингот е. 817 00:36:15,940 --> 00:36:19,094 Значи, мамо што треба да биде што? 818 00:36:19,094 --> 00:36:21,010 Па само три, нели? мајка е три карактери. 819 00:36:21,010 --> 00:36:22,830 Вие не се брои обратна коса црта нула кога ќе 820 00:36:22,830 --> 00:36:25,960 зборува за должината на стрингот е всушност, човековите видливи букви. 821 00:36:25,960 --> 00:36:28,020 Па мајка, па ова ми дава 3. 822 00:36:28,020 --> 00:36:31,170 Но чекајте, јас сум сега додавање на 1. 823 00:36:31,170 --> 00:36:34,861 Зошто ми е, всушност, сакаат да одвои 4 бајти, а не само 3? 824 00:36:34,861 --> 00:36:35,360 Да? 825 00:36:35,360 --> 00:36:36,910 >> ПУБЛИКАТА: За вредноста на стража? 826 00:36:36,910 --> 00:36:38,951 >> Дејвид Џ MALAN: Точно, за кои стража вредност. 827 00:36:38,951 --> 00:36:40,840 За обратна коса црта нула, Ми треба 4 бајти вкупно. 828 00:36:40,840 --> 00:36:42,870 Па ми треба должина на стрингот плус 1. 829 00:36:42,870 --> 00:36:45,400 А потоа само за добра measure-- и покрај тоа што на овој систем, 830 00:36:45,400 --> 00:36:49,390 тоа е секогаш се случува да биде 1-- сакам да кажам дека усоврши оваа страна на големината на знак. 831 00:36:49,390 --> 00:36:51,552 Излегува sizeof е оператор дека во C 832 00:36:51,552 --> 00:36:53,260 само ти го кажува број на бајти тоа е 833 00:36:53,260 --> 00:36:54,700 потребни за одреден тип на податок. 834 00:36:54,700 --> 00:36:57,740 Тоа не функционира за низи, обично, понекогаш го прави тоа. 835 00:36:57,740 --> 00:36:59,210 Но, во општ случај, бр. 836 00:36:59,210 --> 00:37:02,330 Но, тоа ќе ми кажете колку бајти на знак е, што излегува е секогаш 1. 837 00:37:02,330 --> 00:37:04,080 Значи ова е како множење со 1. 838 00:37:04,080 --> 00:37:05,900 >> Па супер криптичната потрага линија код. 839 00:37:05,900 --> 00:37:09,320 Но сето тоа се дава ми парче меморија. 840 00:37:09,320 --> 00:37:13,590 Но, дали тоа се чини дека се копира ништо во таа меморија? 841 00:37:13,590 --> 00:37:14,560 Не сеуште. 842 00:37:14,560 --> 00:37:22,040 И така тоа што го правам на линија 22, и 23, 24, 25, добро, јас едноставно да го направите тоа. 843 00:37:22,040 --> 00:37:23,760 И ова е вид на старата школа работи сега. 844 00:37:23,760 --> 00:37:26,010 Ова е како pset 2, каде што ти си само придвижување на работите 845 00:37:26,010 --> 00:37:28,620 наоколу во меморија, или подобро кажано со жици. 846 00:37:28,620 --> 00:37:31,920 >> Па јас сум процесирањето од 0 до должината на стрингот е. 847 00:37:31,920 --> 00:37:37,820 И јас сум со копирање на i-тиот карактер во ОК во i-тиот карактер во т. 848 00:37:37,820 --> 00:37:41,820 И затоа што, на програмерот, направени сигурни да одвои точно колку бајти 849 00:37:41,820 --> 00:37:44,600 како што треба, тоа е совршен еден-на-еден однос. 850 00:37:44,600 --> 00:37:47,060 И го копирам мајка во мали букви на нов. 851 00:37:47,060 --> 00:37:50,170 А потоа и на крај, да направам оваа линија. 852 00:37:50,170 --> 00:37:54,637 И па ефектот е само за да профитираат на оваа т тука. 853 00:37:54,637 --> 00:37:56,470 Толку многу да се апсорбира, но ако само се разгледа 854 00:37:56,470 --> 00:37:58,220 она што е навистина се случува на под хауба 855 00:37:58,220 --> 00:38:00,880 е само да се движат овие бајти околу сето тоа, 856 00:38:00,880 --> 00:38:06,617 Потребно е да се реши овој проблем е само за да ни го даде ова парче на меморија. 857 00:38:06,617 --> 00:38:08,450 Сега по ризик големо, дозволете ми да се покаже 858 00:38:08,450 --> 00:38:13,200 уште еден пример дека е речиси идентични, освен за тоа еден 859 00:38:13,200 --> 00:38:14,350 линија код. 860 00:38:14,350 --> 00:38:18,870 Значи ова е хакер верзија на оваа програма, ако сакате. 861 00:38:18,870 --> 00:38:21,050 Но ајде да го дестилираат тоа во она што се случува. 862 00:38:21,050 --> 00:38:28,920 Линија 24 се користи да биде на оваа т заградата јас добива на заградата i. 863 00:38:28,920 --> 00:38:33,370 Сега, јас сум ова да се менува многу повеќе криптичната ѕвезда т 864 00:38:33,370 --> 00:38:36,280 плус 1 еднакво ѕвезда ОК плус 1. 865 00:38:36,280 --> 00:38:38,702 >> Значи она што се случува и зошто имаме една ѕвезда карактер? 866 00:38:38,702 --> 00:38:41,410 Ние сме виделе ѕвездата пред, и тоа е се користат различно тука. 867 00:38:41,410 --> 00:38:45,490 Ние претходно видовме char *, сега гледам ѕвезда на почетокот, и тоа е во ред. 868 00:38:45,490 --> 00:38:48,190 Бидејќи излегува ние може да се заклучи само вид на 869 00:38:48,190 --> 00:38:50,280 од тие први принципи што се случува. 870 00:38:50,280 --> 00:38:53,860 Па само да биде јасно, она што е, а? 871 00:38:53,860 --> 00:38:55,052 Минатата недела, таа беше стринг. 872 00:38:55,052 --> 00:38:56,260 Дека не е доволно веќе. 873 00:38:56,260 --> 00:38:57,690 Она што е ОК, посебно? 874 00:38:57,690 --> 00:38:58,590 >> ПУБЛИКАТА: [Беззвучен] 875 00:38:58,590 --> 00:38:59,881 >> Дејвид Џ MALAN: Тоа е покажувачот. 876 00:38:59,881 --> 00:39:02,610 Тоа е на адреса на Првиот карактер ги внеле во. 877 00:39:02,610 --> 00:39:04,780 Добро, што е т? 878 00:39:04,780 --> 00:39:05,660 >> ПУБЛИКАТА: [Беззвучен] 879 00:39:05,660 --> 00:39:07,950 >> Дејвид Џ MALAN: На адресата на првиот бајт 880 00:39:07,950 --> 00:39:10,490 во т, дека парче меморија пренасочени. 881 00:39:10,490 --> 00:39:14,720 Значи излегува дека кога ние iterate од 0 да се качуваат до низа 882 00:39:14,720 --> 00:39:17,424 length-- прв од сите, јас започнува на 0, бидејќи 883 00:39:17,424 --> 00:39:18,840 на оваа старата школа за јамка работа. 884 00:39:18,840 --> 00:39:22,400 Па само за едноставност, ајде се претпостави дека на првата линија на кодот 885 00:39:22,400 --> 00:39:23,760 е навистина само ова, нели. 886 00:39:23,760 --> 00:39:26,080 Ако ми е нула, додавајќи нула до нешто веројатно 887 00:39:26,080 --> 00:39:27,540 нема да имаат ефект. 888 00:39:27,540 --> 00:39:28,560 >> Па што е ова што зборуваш? 889 00:39:28,560 --> 00:39:31,600 Излегува дека ѕвездата Операторот во овој контекст 890 00:39:31,600 --> 00:39:33,700 е dereference оператор, кој е само 891 00:39:33,700 --> 00:39:37,530 фенси начин да се каже да одат на следната адреса. 892 00:39:37,530 --> 00:39:42,080 Па ако е е адресата на првиот лик во оваа парче меморија, 893 00:39:42,080 --> 00:39:43,630 * Кликнете средства одат таму. 894 00:39:43,630 --> 00:39:45,630 И затоа што ние сме подготвени сликата на овој начин, 895 00:39:45,630 --> 00:39:47,430 Можете да ги прифаќаат Следните ментална модел. 896 00:39:47,430 --> 00:39:51,030 Ако ова е ОК, и велиш * s, * s вид на како Улеи и скали, 897 00:39:51,030 --> 00:39:54,540 ако се сеќавате на играта од детството, е како да го следат тоа стрелката и да си одат 898 00:39:54,540 --> 00:39:55,570 на адреса. 899 00:39:55,570 --> 00:39:57,080 >> * T е иста работа. 900 00:39:57,080 --> 00:39:59,855 Така на проектот тука, отидете на својата парче. 901 00:39:59,855 --> 00:40:03,350 Јас не може само да се подготви за овој екран на тој начин. 902 00:40:03,350 --> 00:40:05,560 * T значи да се оди тука. 903 00:40:05,560 --> 00:40:08,830 А потоа, за телефонска линија е само велејќи дека овој лик се движат тука, 904 00:40:08,830 --> 00:40:11,330 се движи овој лик тука, се движи овој лик тука. 905 00:40:11,330 --> 00:40:12,890 Но, како да го направам тоа incrementation? 906 00:40:12,890 --> 00:40:15,430 Јас треба да го вратите она што јас само избришани. 907 00:40:15,430 --> 00:40:18,140 Ова е она што обично се нарекува покажувачот аритметика, која 908 00:40:18,140 --> 00:40:20,040 значи математика со адреси. 909 00:40:20,040 --> 00:40:22,460 >> Ако, во овој за телефонска линија, Продолжувам да ја зголемува I, 910 00:40:22,460 --> 00:40:26,880 и s е адреса, а t е адреса, ако јас само ја задржите додавањето на 1, 911 00:40:26,880 --> 00:40:31,406 тоа само значи да се движат напред, и напред, и напред во меморијата. 912 00:40:31,406 --> 00:40:34,030 Тоа е како Оксфорд Стрит, улица дека зградата CS е вклучен. 913 00:40:34,030 --> 00:40:36,490 Зградите CS е на 33 Оксфорд Стрит. 914 00:40:36,490 --> 00:40:39,870 Значи, ако сте во ситуација да се направи 33 Оксфорд Стрит плус 1, 915 00:40:39,870 --> 00:40:42,870 што ќе ги носи 34 Оксфорд Улицата, а потоа 35 Оксфорд Стрит, 916 00:40:42,870 --> 00:40:46,380 потоа 36 Оксфорд Стрит, што и оние згради, всушност се - доколку тие постојат. 917 00:40:46,380 --> 00:40:50,540 И така, тоа е се што го правиме тука со покажувач аритметика. 918 00:40:50,540 --> 00:40:53,820 >> Па тоа е супер мистериозен начин за изразување на себеси. 919 00:40:53,820 --> 00:40:56,160 Но сето тоа се случува под хаубата 920 00:40:56,160 --> 00:40:59,330 е само по овие адреси, како следнава мапа, ако сакате, 921 00:40:59,330 --> 00:41:02,692 или по стрели како ние сме подготвени на екранот. 922 00:41:02,692 --> 00:41:04,910 Добро, многу да се вари. 923 00:41:04,910 --> 00:41:10,410 На секое прашање на синтаксата, концепти, покажувачи, Примерок, или слично. 924 00:41:10,410 --> 00:41:11,480 Да, овде прво. 925 00:41:11,480 --> 00:41:13,755 >> ПУБЛИКАТА: Значи, каде што вели * T еднаква toupper * т, 926 00:41:13,755 --> 00:41:15,575 е тоа што ќе профитираат сите букви или just-- 927 00:41:15,575 --> 00:41:17,283 >> Дејвид Џ MALAN: Ах, навистина добро прашање. 928 00:41:17,283 --> 00:41:19,805 Значи во оваа линија, тука, 31, е ова се случува да профитираат 929 00:41:19,805 --> 00:41:21,430 првата буква или сите букви. 930 00:41:21,430 --> 00:41:23,460 Значи, да се одговори на тоа со одење назад кон првите принципи. 931 00:41:23,460 --> 00:41:26,168 И првите принципи тука мислам Едноставно кликнете на основни дефиниции 932 00:41:26,168 --> 00:41:27,000 на она што се вклучени. 933 00:41:27,000 --> 00:41:29,770 Па toupper е функција дека капитализира знак. 934 00:41:29,770 --> 00:41:30,530 Тоа е се. 935 00:41:30,530 --> 00:41:36,740 * T значи оди на first-- одат на адреса во т. 936 00:41:36,740 --> 00:41:40,350 Значи, на сликата, ако ова е парче меморија ние распределени со Примерок, 937 00:41:40,350 --> 00:41:43,310 и ова е т, * T значи одат овде. 938 00:41:43,310 --> 00:41:46,710 >> Во меѓувреме, ти си поминува таа вредност, мали букви m 939 00:41:46,710 --> 00:41:50,040 да toupper, ти си добивање назад М капитал, каде што ви го стави? 940 00:41:50,040 --> 00:41:52,410 Ти си тоа ставање во истата таа локација. 941 00:41:52,410 --> 00:41:55,540 И така со таа логика на оние основни дефиниции тоа е само 942 00:41:55,540 --> 00:41:58,792 Капитализиране на првата буква освен ако iterate со I или 943 00:41:58,792 --> 00:42:02,000 за телефонска линија или додека јамка, тоа не се случува да се направи нешто повеќе од ќе го прашам. 944 00:42:02,000 --> 00:42:02,583 Добро прашање. 945 00:42:02,583 --> 00:42:03,237 Да? 946 00:42:03,237 --> 00:42:05,369 >> ПУБЛИКАТА: Зошто го користите dereference начин, отколку 947 00:42:05,369 --> 00:42:05,979 низата? 948 00:42:05,979 --> 00:42:07,395 >> Дејвид Џ MALAN: Ах, добро прашање. 949 00:42:07,395 --> 00:42:10,672 Зошто и вие ќе ја користите dereference метод наместо метод низата? 950 00:42:10,672 --> 00:42:12,130 Без некоја посебна причина, да бидам искрен. 951 00:42:12,130 --> 00:42:15,290 И дека, всушност, за ова вид на пример, десно, 952 00:42:15,290 --> 00:42:17,556 Јас сум само се расправаат со што програма покомплицирано, 953 00:42:17,556 --> 00:42:19,680 повеќе очи глазура над, луѓе се одјавувањето 954 00:42:19,680 --> 00:42:22,830 затоа што ова изгледа супер таинствени, но и покрај тоа што таа го прави истото. 955 00:42:22,830 --> 00:42:26,695 И така, искрено, ова е непотребно визуелно комплекс решение 956 00:42:26,695 --> 00:42:27,320 за проблемот. 957 00:42:27,320 --> 00:42:29,580 >> Тоа е сепак добар дизајн, пет од пет за проектирање, 958 00:42:29,580 --> 00:42:33,140 без разлика дали е во држачот нотација или нотација на покажувачот. 959 00:42:33,140 --> 00:42:36,299 But-- особено кога ќе го добиеме Подоцна во текот на pset 5 960 00:42:36,299 --> 00:42:39,340 кога ќе го имплементира овој речник што Што сум споменат неколку times-- 961 00:42:39,340 --> 00:42:42,300 ние, всушност, ќе се грижат за ниско ниво адреси меморија 962 00:42:42,300 --> 00:42:44,140 дека ние навистина се разбере што се случува. 963 00:42:44,140 --> 00:42:48,300 >> Но, за сега, излегува дека овој линија код овде квадратни загради 964 00:42:48,300 --> 00:42:49,900 навистина не постои. 965 00:42:49,900 --> 00:42:52,230 Тие се она што се нарекува синтаксички шеќер, кој 966 00:42:52,230 --> 00:42:58,390 е само чудно кул начин на велејќи дека компајлерот претвора квадратни загради да биде 967 00:42:58,390 --> 00:43:00,420 дека математички израз. 968 00:43:00,420 --> 00:43:02,660 Така, тоа е човечко конгрес за да може да се пишува 969 00:43:02,660 --> 00:43:04,220 овие многу user-friendly загради. 970 00:43:04,220 --> 00:43:06,850 Но, она што на компајлерот, ѕвекот, е навистина прави секое време 971 00:43:06,850 --> 00:43:10,970 ти пишувам она што се истакнати во линија 24, под хаубата, тоа е навистина 972 00:43:10,970 --> 00:43:12,330 конвертирање на ова. 973 00:43:12,330 --> 00:43:16,200 Тоа е само повеќе пријатни како човек да читаат и пишуваат код како линијата 24. 974 00:43:16,200 --> 00:43:18,530 Но на крајот тие обука тркала премногу падне 975 00:43:18,530 --> 00:43:21,780 кога сопствената удобност се засилува. 976 00:43:21,780 --> 00:43:27,240 >> Добро, па потоа да се потсетиме дека овој е вид на најголемиот проблем 977 00:43:27,240 --> 00:43:27,807 ние трчаше во. 978 00:43:27,807 --> 00:43:30,640 И тоа е она што предизвика целата оваа проклето разговор за покажувачи, 979 00:43:30,640 --> 00:43:32,340 и адреси, и копирање работи. 980 00:43:32,340 --> 00:43:35,410 Тоа е затоа што ние се сопна овој глупав, глупав прашање, при што 981 00:43:35,410 --> 00:43:38,830 Се спроведува logically-- со Лорен до тука на демо и сок од портокал 982 00:43:38,830 --> 00:43:43,770 во milk-- совршено алгоритамски точната функција 983 00:43:43,770 --> 00:43:47,010 Замена за две променливи " вредности, но проклето нешто 984 00:43:47,010 --> 00:43:50,550 не имате било какви упорни, или постојан, ефект на мојот код. 985 00:43:50,550 --> 00:43:51,820 >> И зошто тоа? 986 00:43:51,820 --> 00:43:54,650 Во мало, зошто е ова имплементација на swap 987 00:43:54,650 --> 00:43:58,740 логично е точно, но нема влијание на променливи кои се пренесуваат до него, 988 00:43:58,740 --> 00:44:01,119 како x и y за главната? 989 00:44:01,119 --> 00:44:02,410 Она што беше главното обележје на тоа прашање? 990 00:44:02,410 --> 00:44:02,909 Да? 991 00:44:02,909 --> 00:44:05,532 ПУБЛИКАТА: Поради променливата направени копии на променлива во пас 992 00:44:05,532 --> 00:44:06,240 преку функцијата. 993 00:44:06,240 --> 00:44:09,060 >> Дејвид Џ MALAN: Токму така, кога ќе помине променливи во функција, или аргументи 994 00:44:09,060 --> 00:44:11,030 во функција, тие се донесени од страна на примерок, кој 995 00:44:11,030 --> 00:44:14,770 значи можеш да изгледа идентично шема на битови за x и y, 996 00:44:14,770 --> 00:44:15,955 нарекува тука a и b. 997 00:44:15,955 --> 00:44:18,080 И можете да направите ништо што сакате со овие копии, 998 00:44:18,080 --> 00:44:20,657 но тие се случува да немаме ефект врз функцијата на повик. 999 00:44:20,657 --> 00:44:22,990 И дека, всушност, ние привлече дека сликата на екранот, да се потсетиме 1000 00:44:22,990 --> 00:44:25,520 Последниот пат, при што ако навистина мислат за она што е 1001 00:44:25,520 --> 00:44:28,570 случува под hood-- ако ова е меморијата на вашиот компјутер, 1002 00:44:28,570 --> 00:44:31,650 и овде е парче меморија се користи за главната, 1003 00:44:31,650 --> 00:44:34,020 ова е парче меморија се користи за трампа, 1004 00:44:34,020 --> 00:44:37,090 па дури и ако има главна две променливи, x и y, 1005 00:44:37,090 --> 00:44:41,840 своп би можеле да имаат идентични потрага вредности, од кои и двете се 1 и 2, 1006 00:44:41,840 --> 00:44:44,520 но тие се целосно различни делови од меморијата. 1007 00:44:44,520 --> 00:44:46,130 >> Па ние треба решение за ова. 1008 00:44:46,130 --> 00:44:51,580 И искрено, се чини дека ние сега да има решение за овој проблем, во право. 1009 00:44:51,580 --> 00:44:55,760 Ако ние сега имаат способност да манипулира работи по пат на адреси 1010 00:44:55,760 --> 00:44:59,310 и, на некој начин Улеи и скали стил, следете стрели 1011 00:44:59,310 --> 00:45:02,820 и оди никаде сакаме во меморијата, ние не можевме 1012 00:45:02,820 --> 00:45:06,220 реши овој проблем со преминувајќи од главните да се разменуваат 1013 00:45:06,220 --> 00:45:09,650 не вредностите сакаме да swap, но само интуитивно 1014 00:45:09,650 --> 00:45:11,630 што би можело да се поминува, наместо да се разменуваат? 1015 00:45:11,630 --> 00:45:12,620 >> [Interposing ГЛАСОВИ] 1016 00:45:12,620 --> 00:45:15,244 >> Дејвид Џ MALAN: Зошто да не се само да го давате на адресите, нели? 1017 00:45:15,244 --> 00:45:17,470 Зошто не можеме да се даде се разменуваат со богатство карта, ако сакате, 1018 00:45:17,470 --> 00:45:20,950 дека тоа доведува до Вистинските вредности x и y. 1019 00:45:20,950 --> 00:45:24,340 Ајде, swap, всушност ја менува оние оригинални делови, наместо 1020 00:45:24,340 --> 00:45:26,797 само поминуваат копии на битови. 1021 00:45:26,797 --> 00:45:29,130 И така, всушност, тоа е она што е нема да биде решение. 1022 00:45:29,130 --> 00:45:31,899 Оваа верзија е тука јасно се лоши и недостатоци. 1023 00:45:31,899 --> 00:45:35,190 И сега, на прв поглед, тоа само изгледа како што додаде еден куп ѕвезди случајно 1024 00:45:35,190 --> 00:45:37,106 и нашите прсти ја преминал дека тоа ќе се состави. 1025 00:45:37,106 --> 00:45:38,460 Но, тоа сега се собере. 1026 00:45:38,460 --> 00:45:40,090 >> Но, да видиме што значи тоа. 1027 00:45:40,090 --> 00:45:43,990 И, за жал, авторите на С можел да избере друг симбол 1028 00:45:43,990 --> 00:45:46,380 да се направи ова малку појасно, но операторот на ѕвезда 1029 00:45:46,380 --> 00:45:48,610 има различно значење во две различни контексти. 1030 00:45:48,610 --> 00:45:50,890 И видовме и двете, но, ајде да се направи разлика. 1031 00:45:50,890 --> 00:45:55,310 >> Па на врвот таму, кога ќе се менуваат a и b 1032 00:45:55,310 --> 00:46:00,470 од тоа да биде цел број во лоша верзија за да се int ѕвезди, a и b, 1033 00:46:00,470 --> 00:46:01,740 Претходно, беа цели броеви. 1034 00:46:01,740 --> 00:46:05,752 Кои се a и b, сега во доброто, зелена верзија? 1035 00:46:05,752 --> 00:46:06,900 Тие се адреси. 1036 00:46:06,900 --> 00:46:09,610 Адресите на тоа што, за да биде јасно? 1037 00:46:09,610 --> 00:46:10,770 Адресите на цели броеви. 1038 00:46:10,770 --> 00:46:12,520 Значи фактот дека јас сум велејќи int ѕвезда средства 1039 00:46:12,520 --> 00:46:15,440 ова е адресата на цел број, посебно. 1040 00:46:15,440 --> 00:46:19,120 >> Па сега се забележи во линии на код, нешто се сменило премногу. 1041 00:46:19,120 --> 00:46:22,770 tmp останува иста, бидејќи тоа е само привремена цел број, 1042 00:46:22,770 --> 00:46:24,110 Нема магија меморија таму. 1043 00:46:24,110 --> 00:46:26,370 Но сега треба ѕвезда. 1044 00:46:26,370 --> 00:46:28,560 И дека, всушност, секој други споменување од a и b, 1045 00:46:28,560 --> 00:46:31,780 забележите дека сето она што е менува од црвена во зелена 1046 00:46:31,780 --> 00:46:34,209 е во тоа што јас сум на префиксот овие променливи со ѕвездите. 1047 00:46:34,209 --> 00:46:35,750 Затоа што не сакате да ги копирате a и b. 1048 00:46:35,750 --> 00:46:40,350 Затоа што ако јас само копија a и b и swap a и b, што зборувам јас всушност Замена? 1049 00:46:40,350 --> 00:46:43,760 Само адреси, сакам да се разменуваат што е на тие адреси. 1050 00:46:43,760 --> 00:46:44,860 Сакам да одам таму. 1051 00:46:44,860 --> 00:46:48,000 И така операторот на ѕвезда внатрешноста на мојата функција, 1052 00:46:48,000 --> 00:46:51,700 не и во внатрешноста на листата на параметарот, значи да одите на тие адреси 1053 00:46:51,700 --> 00:46:54,490 а всушност се променат овие вредности. 1054 00:46:54,490 --> 00:46:56,500 >> Значи она што не ја сликата сега изгледа, наместо. 1055 00:46:56,500 --> 00:47:03,250 Па, ако наместо сум полагање во за А и Б не 1 и 2-- 1056 00:47:03,250 --> 00:47:05,790 Јас всушност треба да се додаде една друга дефиниција тука. 1057 00:47:05,790 --> 00:47:09,030 Па претпоставувам дека ова парче меморија е на 10 место. 1058 00:47:09,030 --> 00:47:12,960 >> Ова е на 11 место, но ова е малку на поедноставување, 1059 00:47:12,960 --> 00:47:18,900 Јас сега имаат два избора ми помине x и y или да го поминат нивните адреси? 1060 00:47:18,900 --> 00:47:22,500 Ако јас го положат своите адреси вака, јас само 1061 00:47:22,500 --> 00:47:25,390 сега треба да се имплементираат Трампа на зелените код 1062 00:47:25,390 --> 00:47:29,080 така што кога ќе види и кога се б гледа, не е само копија на a и b 1063 00:47:29,080 --> 00:47:30,540 и се движат на млеко и сок од портокал. 1064 00:47:30,540 --> 00:47:32,664 Сок од млеко и портокал метафора сега се распаѓа, 1065 00:47:32,664 --> 00:47:35,060 бидејќи тоа се чаши на течни и не мапи. 1066 00:47:35,060 --> 00:47:37,750 Ние наместо да треба да одат да се справат со 10 и ние 1067 00:47:37,750 --> 00:47:42,420 треба да се обратите за решавање на 11, и потоа да се извршат дека Замена логика. 1068 00:47:42,420 --> 00:47:45,580 >> Па логиката е иста, но ние треба малку поинаков начин 1069 00:47:45,580 --> 00:47:47,160 на пристап до овие променливи. 1070 00:47:47,160 --> 00:47:52,400 И така, на крајот, она што Програмата има за да изгледа како што е оваа. 1071 00:47:52,400 --> 00:47:56,610 Во swap.c буквално копирани и атипичен зелена верзија. 1072 00:47:56,610 --> 00:47:58,450 Но, јас треба да се направи една промена. 1073 00:47:58,450 --> 00:48:00,180 Тоа не е доволно само да се промени трампа. 1074 00:48:00,180 --> 00:48:03,830 Кои други линија на кодот Дали треба да се промени? 1075 00:48:03,830 --> 00:48:04,330 Да? 1076 00:48:04,330 --> 00:48:05,770 >> ПУБЛИКАТА: Таму каде што е потребно аргументите. 1077 00:48:05,770 --> 00:48:07,603 >> Дејвид Џ MALAN: Каде што е потребно аргумент. 1078 00:48:07,603 --> 00:48:09,985 Значи, ако јас се движите нагоре кон главната, јас не може да помине во x и y, 1079 00:48:09,985 --> 00:48:12,820 и, ветувам, последниот парче од нова синтакса денес. 1080 00:48:12,820 --> 00:48:17,200 Јас треба да се помине во не x и y но на адреса на x и y. 1081 00:48:17,200 --> 00:48:20,400 И што излезе, симболот дека авторите на С одбрав 1082 00:48:20,400 --> 00:48:23,860 е ако користите симболот тука, да не се да се мешаат со bitwise симболот, 1083 00:48:23,860 --> 00:48:27,130 ако користите симболот тука и симболот тука, 1084 00:48:27,130 --> 00:48:29,570 ова фигури за вас, што е адреса на x, 1085 00:48:29,570 --> 00:48:31,740 можеби тоа е 10, што е адреса на y, можеби тоа е 1086 00:48:31,740 --> 00:48:35,400 11, и поминува оние во, наместо. 1087 00:48:35,400 --> 00:48:37,210 >> Толку многу да ги апсорбира сите одеднаш. 1088 00:48:37,210 --> 00:48:40,190 Но, да видиме сега брзо во нашите преостанатите четири минути 1089 00:48:40,190 --> 00:48:42,150 каде што работите може да тргне на лошо. 1090 00:48:42,150 --> 00:48:45,120 И како настрана, всушност, Зедов оваа слика, 1091 00:48:45,120 --> 00:48:46,920 ТФ Зедов оваа слика пред една година или две. 1092 00:48:46,920 --> 00:48:49,190 Значи ова е задниот агол на Елиот Јадење сала. 1093 00:48:49,190 --> 00:48:52,310 Покажувачи се можеби најтешкиот тема која ќе покрие во CS50. 1094 00:48:52,310 --> 00:48:54,810 Значи, ако сте загрижени дека вид на патека е како што можеби е 1095 00:48:54,810 --> 00:48:56,770 повеќе на хокеј стап како ова, се реализира 1096 00:48:56,770 --> 00:49:00,160 ние сме вид на близу врвот во однос на концептуалните комплексност. 1097 00:49:00,160 --> 00:49:02,300 >> И јас се донесе до оваа слика, бидејќи се колнам 1098 00:49:02,300 --> 00:49:05,920 на Бога, во есента 1996 година, кога го зедов CS50 со мојот настава колеги, 1099 00:49:05,920 --> 00:49:09,620 Nishat Мехта, ме седна во агол на Д. Дом Елиот над ручек, 1100 00:49:09,620 --> 00:49:12,330 или вечера, или нешто да се обиде да ми помогне да се разбере покажувачи. 1101 00:49:12,330 --> 00:49:16,520 И ова е местото каде што бев недели по тоа беше воведен во предавање кога 1102 00:49:16,520 --> 00:49:18,170 Јас конечно сфати покажувачи. 1103 00:49:18,170 --> 00:49:20,590 И јас сум се надеваме дека оваа ќе кликнете далеку порано за вас. 1104 00:49:20,590 --> 00:49:23,540 Но сфати ова апсолутно меѓу пософистицираните теми 1105 00:49:23,540 --> 00:49:24,420 ние сме погледна. 1106 00:49:24,420 --> 00:49:25,819 Но, тоа е една од најмоќните. 1107 00:49:25,819 --> 00:49:28,860 И кога ќе го добие, тоа е навистина сите само ќе се конечно дојде заедно. 1108 00:49:28,860 --> 00:49:31,460 Така бидете сигурни дека не го прави тоа треба да се потоне во денес. 1109 00:49:31,460 --> 00:49:32,980 >> Значи тука е последната програма ние ќе треба да се погледне. 1110 00:49:32,980 --> 00:49:35,605 И ние ќе треба да заврши со брзо три минути од claymation 1111 00:49:35,605 --> 00:49:37,030 направени од страна на нашиот пријател, Ник Parlante. 1112 00:49:37,030 --> 00:49:41,440 Еве една програма, односно на првите две линии изјавува променлива x и y. 1113 00:49:41,440 --> 00:49:44,780 Од кои и двете се адреси на цели броеви, АКА покажувачи. 1114 00:49:44,780 --> 00:49:48,125 Ние тогаш се одвојат доволно меморија за складирање на int 1115 00:49:48,125 --> 00:49:51,344 и чување на адресата од таа меморија во х. 1116 00:49:51,344 --> 00:49:53,260 Значи, тоа е уште поедноставно отколку на пример порано. 1117 00:49:53,260 --> 00:49:56,100 Дај ми четири бајти меморија, тоа е големината на int, 1118 00:49:56,100 --> 00:49:58,000 и да се стави таа адреса во х. 1119 00:49:58,000 --> 00:50:01,070 Оваа линија тука значи одат на адреса во х 1120 00:50:01,070 --> 00:50:05,270 и го стави на значењето на живот, бројот 42 таму. 1121 00:50:05,270 --> 00:50:07,710 Но оваа линија ме загрижува. 1122 00:50:07,710 --> 00:50:12,620 Ѕвезда y значи одат на адреса во y, и го стави на несреќен број 13 таму. 1123 00:50:12,620 --> 00:50:15,780 Зошто е опасно, во овој момент во story-- иако брзо изјави 1124 00:50:15,780 --> 00:50:17,980 во нашата самрак минути here-- зошто тоа е лоша 1125 00:50:17,980 --> 00:50:19,660 за мене да кажам, одете на адресата во y? 1126 00:50:19,660 --> 00:50:21,077 >> ПУБЛИКАТА: не Имате [Беззвучен]. 1127 00:50:21,077 --> 00:50:22,910 Дејвид Џ MALAN: Не сум стави нешто во y. 1128 00:50:22,910 --> 00:50:25,520 Значи она што е вредноста на y, во овој момент во приказната? 1129 00:50:25,520 --> 00:50:26,570 Немаме поим. 1130 00:50:26,570 --> 00:50:29,190 Тоа е некоја вредност ѓубре и ниту Binky знам. 1131 00:50:29,190 --> 00:50:32,532 Ако би можеле да се стави крај на оваа белешка. 1132 00:50:32,532 --> 00:50:34,832 >> [Видео репродукција] 1133 00:50:34,832 --> 00:50:36,500 >> -Hey, Binky, разбуди се. 1134 00:50:36,500 --> 00:50:39,140 Тоа е време за покажувачот забава. 1135 00:50:39,140 --> 00:50:40,210 >> -Што е тоа? 1136 00:50:40,210 --> 00:50:41,690 Учат за покажувачи? 1137 00:50:41,690 --> 00:50:43,570 Ох, стрина. 1138 00:50:43,570 --> 00:50:46,600 >> -Па, За да започнете, претпоставувам дека ние сме ќе треба неколку совети. 1139 00:50:46,600 --> 00:50:47,380 >> -ВО РЕД. 1140 00:50:47,380 --> 00:50:51,120 Овој код одвојува два покажувачи која може да укаже на цели броеви. 1141 00:50:51,120 --> 00:50:53,557 >> -OK, И ја гледам два покажувачи, но тие 1142 00:50:53,557 --> 00:50:55,140 не се чини дека се укажува на ништо. 1143 00:50:55,140 --> 00:50:55,970 >> -Тоа е точно. 1144 00:50:55,970 --> 00:50:58,100 Првично покажувачи не укажуваат на ништо. 1145 00:50:58,100 --> 00:51:00,950 Работите што укажуваат на се наречен pointees и поставување на нив 1146 00:51:00,950 --> 00:51:02,330 е посебен чекор. 1147 00:51:02,330 --> 00:51:03,210 >> -OH, Нели, нели. 1148 00:51:03,210 --> 00:51:03,940 Знаев дека. 1149 00:51:03,940 --> 00:51:05,730 На pointees се одвоени. 1150 00:51:05,730 --> 00:51:08,310 Па, како да ги распредели pointee? 1151 00:51:08,310 --> 00:51:11,960 >> -OK, И овој код Доделува нова цел број pointee, 1152 00:51:11,960 --> 00:51:15,050 и овој дел сета x за да укажуваат на тоа. 1153 00:51:15,050 --> 00:51:16,240 >> -Hey, Дека изгледа подобро. 1154 00:51:16,240 --> 00:51:17,743 Така да тоа се направи нешто. 1155 00:51:17,743 --> 00:51:23,580 >> -OK, Јас ќе dereference покажувачот x за да го чување на број 42 во својата pointee. 1156 00:51:23,580 --> 00:51:27,130 За овој трик, ќе ми треба магично стапче на dereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> -Твојата Магично стапче на dereferencing? 1158 00:51:30,200 --> 00:51:32,310 Ух, тоа, тоа е одлично. 1159 00:51:32,310 --> 00:51:34,270 >> -Ова Е она што го кодот личи. 1160 00:51:34,270 --> 00:51:35,970 Јас само ќе се постави на бројот and-- 1161 00:51:35,970 --> 00:51:37,070 >> [Поп звук] 1162 00:51:37,070 --> 00:51:39,140 >> -Hey, Погледнете таму оди. 1163 00:51:39,140 --> 00:51:43,980 Така, прави dereference на X следува на стрелката за да пристапите до своите pointee. 1164 00:51:43,980 --> 00:51:46,150 Во овој случај, за чување на 42 во таму. 1165 00:51:46,150 --> 00:51:50,700 Еј, се обиде да го користи за чување на бројот 13 преку други покажувач, y. 1166 00:51:50,700 --> 00:51:51,840 >> -ВО РЕД. 1167 00:51:51,840 --> 00:51:56,270 Јас само ќе одиме во текот тука за да y, и да се добие бројот 13 поставеност. 1168 00:51:56,270 --> 00:52:00,380 А потоа да се стапот dereferencing и just-- 1169 00:52:00,380 --> 00:52:01,646 >> [BUZZER SOUND] 1170 00:52:01,646 --> 00:52:04,080 >> -OH, Еј што не работат. 1171 00:52:04,080 --> 00:52:06,470 Велат, Ш, Binky, јас не мислам dereferencing 1172 00:52:06,470 --> 00:52:10,850 y е добра идеја, бидејќи поставување до pointee е посебен чекор. 1173 00:52:10,850 --> 00:52:12,480 И јас не мислам дека ние некогаш го направив тоа. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Добра поента. 1175 00:52:14,620 --> 00:52:19,810 >> -Да, Ние распределени на покажувачот, y, но ние никогаш не го постави за да се укаже на една pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Многу капацитет. 1177 00:52:21,590 --> 00:52:23,215 -Hey, Вие барате добро таму, Binky. 1178 00:52:23,215 --> 00:52:26,390 Можете ли да го поправам, така што y поени на истиот pointee како x. 1179 00:52:26,390 --> 00:52:29,290 >> -Sure, Јас го користам моето магично стапче на покажувачот задача. 1180 00:52:29,290 --> 00:52:31,970 >> -Дали Таа ќе биде Проблемот, како и пред тоа? 1181 00:52:31,970 --> 00:52:33,790 >> Не, ова не допира pointees. 1182 00:52:33,790 --> 00:52:35,840 Тоа го менува еден покажувач да укажуваат на истата thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [Пукање SOUND] 1184 00:52:36,465 --> 00:52:37,450 --as друг. 1185 00:52:37,450 --> 00:52:38,440 >> -Ох гледам. 1186 00:52:38,440 --> 00:52:41,200 Сега y укажува на истото место како и х. 1187 00:52:41,200 --> 00:52:42,950 Значи, чекај, сега y е фиксна. 1188 00:52:42,950 --> 00:52:44,110 Таа има pointee. 1189 00:52:44,110 --> 00:52:47,779 Па можете да се обидете на стапче dereferencing повторно да се испрати во текот на 13-те. 1190 00:52:47,779 --> 00:52:51,110 >> -OH, Во ред, тука оди. 1191 00:52:51,110 --> 00:52:52,330 >> -Hey, Погледнете во тоа. 1192 00:52:52,330 --> 00:52:53,570 Сега dereferencing работи на y. 1193 00:52:53,570 --> 00:52:57,900 И затоа што се делат совети дека еден pointee, тие и двете се види на 13. 1194 00:52:57,900 --> 00:52:59,952 >> -Да, Споделување, ух, сеедно. 1195 00:52:59,952 --> 00:53:01,535 Значи, одиме да се префрлиш места сега? 1196 00:53:01,535 --> 00:53:03,730 >> -OH, Изгледа ние сме надвор од времето. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -Само Се сеќавате на три правила е покажувачот. 1199 00:53:06,520 --> 00:53:09,550 Број 1, основната структура е дека ќе имаат покажувач, 1200 00:53:09,550 --> 00:53:11,630 и тоа укажува на посебен pointee. 1201 00:53:11,630 --> 00:53:13,740 Но го покажувачот и pointee се одвоени. 1202 00:53:13,740 --> 00:53:15,620 И честа грешка е да се постави на покажувачот 1203 00:53:15,620 --> 00:53:18,000 но да се заборави да го даде pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Број 2, покажувачот dereferencing почнува на покажувачот 1205 00:53:21,170 --> 00:53:24,020 и го следи нејзиното стрелката над да пристапите до своите pointee. 1206 00:53:24,020 --> 00:53:27,815 Како што сите знаеме, ова работи само ако има е pointee, кој вид на добива назад 1207 00:53:27,815 --> 00:53:29,260 да се Правило број 1. 1208 00:53:29,260 --> 00:53:31,990 >> Број 3, покажувачот задача трае еден покажувач 1209 00:53:31,990 --> 00:53:35,330 и се менува за да се укаже на исто pointee како уште еден покажувач. 1210 00:53:35,330 --> 00:53:37,150 Па по задача, два покажувачи 1211 00:53:37,150 --> 00:53:40,927 ќе укажуваат на истата pointee, понекогаш тоа се вика споделување. 1212 00:53:40,927 --> 00:53:42,510 И тоа е сè што постои на неа, навистина. 1213 00:53:42,510 --> 00:53:43,130 Спане сега. 1214 00:53:43,130 --> 00:53:43,475 >> [END репродукција] 1215 00:53:43,475 --> 00:53:44,830 >> Дејвид Џ MALAN: Тоа е тоа за CS50. 1216 00:53:44,830 --> 00:53:46,246 Благодарение на професорот Ник Parlante. 1217 00:53:46,246 --> 00:53:47,730 Ќе се видиме следната недела. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [ЕЛЕКТРОНСКИ музички] 1220 00:53:56,435 --> 00:57:22,775