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 Давид Ј Малан: Ово је као бруцош Семинар данас. 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 Али ми ћемо почети отмено као и увек. 10 00:00:24,560 --> 00:00:28,000 >> Ово је ЦС50, а ово је крај недеље 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 ОК, сада идемо добро погледам. 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 ОК, замрзавање то. 29 00:01:13,558 --> 00:01:14,820 -Тигхтен Се на то, хоћеш ли? 30 00:01:14,820 --> 00:01:16,530 -Вецтор У оном Момак је задњи точак. 31 00:01:16,530 --> 00:01:19,400 -Зоом У управо овде на овом месту. 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 >> -Енханце Дио А6. 39 00:01:31,575 --> 00:01:33,642 >> -Ја Енханцед детаље, и-- Мислим да је 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 >> Пусти Води овоме Видео побољшање. 43 00:01:38,830 --> 00:01:40,100 Едгар, можете да побољшате ово? 44 00:01:40,100 --> 00:01:41,875 >> -Сачекај. 45 00:01:41,875 --> 00:01:44,010 >> -Била Сам радио на овом размишљање. 46 00:01:44,010 --> 00:01:44,995 >> -Неко Је одраз. 47 00:01:44,995 --> 00:01:45,495 -Рефлецтион. 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 -Зоом У на огледалу. 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 Држи на тренутак, ја ћу повећати. 60 00:02:00,050 --> 00:02:00,924 -Зоом У на вратима. 61 00:02:00,924 --> 00:02:01,700 -Тимес 10. 62 00:02:01,700 --> 00:02:02,586 -Зоом. 63 00:02:02,586 --> 00:02:03,490 -Уселити се. 64 00:02:03,490 --> 00:02:03,990 -Више. 65 00:02:03,990 --> 00:02:04,690 Чекај, стани. 66 00:02:04,690 --> 00:02:05,190 Престани. 67 00:02:05,190 --> 00:02:05,970 -Паусе Га. 68 00:02:05,970 --> 00:02:09,460 РОТАТЕ УС 75 степени око вертикалне, молим те. 69 00:02:09,460 --> 00:02:10,962 Престани. 70 00:02:10,962 --> 00:02:14,040 Вратите се на делу о врата, поново. 71 00:02:14,040 --> 00:02:15,860 >> -Имам Слику појачивач који може да БИТМАП? 72 00:02:15,860 --> 00:02:18,776 >> Хеј, можда можемо да користимо ПРАДЕЕП Сен начин да се види у прозорима. 73 00:02:18,776 --> 00:02:20,372 Ово софтвер је стате оф тхе арт. 74 00:02:20,372 --> 00:02:21,845 >> -У Еигенвалуе је искључен. 75 00:02:21,845 --> 00:02:24,300 >> -Са Десне стране комбинација алгоритхм-- 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 >> -Лоцк На и увећање З-оса. 79 00:02:31,286 --> 00:02:32,560 >> -Енханце. 80 00:02:32,560 --> 00:02:33,100 >> -Енханце. 81 00:02:33,100 --> 00:02:33,600 >> -Енханце. 82 00:02:33,600 --> 00:02:34,960 Стој и побољшати. 83 00:02:34,960 --> 00:02:37,180 >> [Крај репродукције] 84 00:02:37,180 --> 00:02:41,160 >> Давид Ј Малан: У реду, сви они су заправо речи. 85 00:02:41,160 --> 00:02:44,450 Они само нанизани заједно у начин на који то заправо није разумно. 86 00:02:44,450 --> 00:02:48,400 И, у ствари, ЦС50 и курсеви воле тежи да уништи много ТВ и филмове 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 фанци ствари као што су еигенвецторс, и З-оса, 90 00:02:56,860 --> 00:02:59,572 и било који број осталих заправо више технички услови, 91 00:02:59,572 --> 00:03:02,030 они стварно само низање речи заједно пречесто. 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 А ово су шта су називају пиксели П-И-Кс-Е-Л-С, 105 00:03:41,900 --> 00:03:45,740 што је само квадрат типично то је тачка која компонује слику. 106 00:03:45,740 --> 00:03:49,200 И назад у дану, и заправо чак и данас са неким од данашње ЛЕД телевизора 107 00:03:49,200 --> 00:03:51,950 или ЛЦД телевизори, ако имаш један у својој соби или код куће, 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 закључујете врста, врста шта Боја треба да буде Марије око следећи 113 00:04:09,040 --> 00:04:10,910 тако да није заправо тако пикселизирана. 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 А ако сте икада чули да израз Битмап, можда 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 који вам даје упутства и има мозда мрежа од к и и координата. 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 А ево како, у бинари-- унутра меморије рачунара, или чак унутар 140 00:05:15,570 --> 00:05:18,160 од датотеци на ваш хард дриве-- могао чувате 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 Давид Ј Малан: Више бита, иеах више података, више бита. 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 >> Али већина вас вероватно упознат са ЈПЕГ слику. 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 сајтова фото-басед, ти си Вероватно види ЈПЕГ слике раније. 164 00:06:24,882 --> 00:06:27,840 И испоставило се, ово је фајл Формат ћемо користити у ПСет 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 >> И испоставило се да, иако ЈПЕГ је прилично сопхистицатед-- 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 се користи за компресију у ЈПЕГ формату, тако да можете имати лепо, 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 Испоставило се да је први три бајта ЈПЕГ имаге-- 175 00:06:56,280 --> 00:07:02,750 без обзира шта сте узели фотографију од-- су вредности 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 бајтова ЈПЕГ формату. 180 00:07:15,230 --> 00:07:18,040 И то је оно што је познато као потпис на ЈПЕГ. 181 00:07:18,040 --> 00:07:20,540 Много формата датотека тамо имају тенденцију да почне 182 00:07:20,540 --> 00:07:23,735 са одређеним обрасцима 0с и 1с, тако да Виндовс и Мац ОС, и иОС, 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 Ако сте .јпг, то је још један траг на рачунар. 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 А ако мислите назад у ПСет 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 кроз ф, где је ф представља оно децимални број, као брз разум 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 >> Дакле, ако погледамо овај образац три битес-- хајдемо 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с, и 1с, и ​​децимале, 202 00:08:15,580 --> 00:08:19,340 али у стварности, склони смо да користимо бинарни или типичније хекадецимал-- 203 00:08:19,340 --> 00:08:20,760 вратио из ПСет 0. 204 00:08:20,760 --> 00:08:25,857 Дакле, дозволите ми предлажемо да 255, 216, 255 и су само ови обрасци 0с и 1с. 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 путем Ф, или још специфичније 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с, који ће дати тебе-- 222 00:09:18,210 --> 00:09:19,960 радије да иде да-- Жао ми је, у бинарном, 223 00:09:19,960 --> 00:09:23,660 то ће вам дати 15, оне место, Твос место, четири и осмице место. 224 00:09:23,660 --> 00:09:26,821 Дакле, дозволите ми да предложе да је сет од четири бита са леве стране 225 00:09:26,821 --> 00:09:28,070 је оно што ћемо звати ф. 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 репресентс-- је у праву испод тог осмице месту. 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 само их мљацкати заједно, и онда их префикс са 0к. 238 00:10:03,000 --> 00:10:05,920 То не значи ништа друго него визуелни траг на хуман-- 239 00:10:05,920 --> 00:10:10,350 ево хексадецимална валуе-- јер не би иначе било очигледно. 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 је ово-- 243 00:10:18,990 --> 00:10:22,120 и проблем сет 4 Спец ће ходати сте кроз ово у више детаил-- 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 И у ствари, чак иу ГДБ је отклањање грешака смо увели у понедељак 247 00:10:30,320 --> 00:10:35,440 и Дан уводи у ПСет 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 Виста па чак и раније него да, Виндовс Виста урадио ову деби. 253 00:10:51,240 --> 00:10:52,620 Дакле, ово је лепа пејзаж. 254 00:10:52,620 --> 00:10:55,940 У ствари, ако поке око онлине-- Мислим да је то Википедиа артицле, 255 00:10:55,940 --> 00:11:00,110 где је неко врло невероватно изашли наћи ова локација у свету подесити 256 00:11:00,110 --> 00:11:02,240 његов или њен камера Управо право место-- 257 00:11:02,240 --> 00:11:06,510 а ово данас изгледа као-- али потпуно је исто подешавање. 258 00:11:06,510 --> 00:11:10,060 Ова слика је, међутим, у датотеци формату зове Битмап б-м стр. 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с и 1с, на крају. 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 На пример, негде у Првих неколико бајтова битмап слике 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 сви формати датотека коју сте користили за године-- Мицрософт Ворд фајлове, 274 00:11:52,390 --> 00:11:55,820 Бројеви фајлова, Екцел филес, било који број формата датотека 275 00:11:55,820 --> 00:11:57,770 да можда има неки Познато филе ектенсион 276 00:11:57,770 --> 00:12:00,130 су само 0с и 1с испод хаубе. 277 00:12:00,130 --> 00:12:02,970 И људи су одлучили шта су конвенције, 278 00:12:02,970 --> 00:12:08,340 шта обрасци 0с и 1с представљају Ворд филе у односу Екцел фајл, 279 00:12:08,340 --> 00:12:10,322 у односу на било који број других формата. 280 00:12:10,322 --> 00:12:12,780 Дакле, у ПСет 4, имаћете прилика да се играју са тим. 281 00:12:12,780 --> 00:12:14,405 >> Али, шта то значи да имамо градитеља. 282 00:12:14,405 --> 00:12:18,012 То је заправо лепо Сегуе сада у Ц, који има само неколико 283 00:12:18,012 --> 00:12:20,220 од додатне карактеристике које нисмо гледали још. 284 00:12:20,220 --> 00:12:24,230 То је прилично мали језик и један од фини карактеристике о Ц је структура. 285 00:12:24,230 --> 00:12:27,300 На пример, ако вас желео да репресент-- хајдемо 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 >> Давид Ј Малан: Па, жао ми је. 296 00:12:50,200 --> 00:12:50,660 >> ПУБЛИКА: Године. 297 00:12:50,660 --> 00:12:52,980 >> Давид Ј Малан Ан старост или рођендан еквивалентно, да. 298 00:12:52,980 --> 00:12:53,557 Шта даље? 299 00:12:53,557 --> 00:12:54,390 ПУБЛИКА: ИД број? 300 00:12:54,390 --> 00:12:57,460 Давид Ј Малан: Тако се један број, можда број телефона, можда спаваоница или кућа, 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 Можда имамо програм, тако да има рецимо, инт маин (воид). 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 Можда инт зове ИД за студента. 309 00:13:26,900 --> 00:13:30,840 И зато ја користим стринг, ја треба да се врати и стави ЦС50.х. 310 00:13:30,840 --> 00:13:33,300 Можда ћу морати стдио.х. 311 00:13:33,300 --> 00:13:38,190 Дакле, дозволите ми да превентивно ли они и ја сам ће назвати студент.ц за сада 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, ниска спаваоница 2, 320 00:14:01,920 --> 00:14:04,190 Инт ид2. 321 00:14:04,190 --> 00:14:06,540 И ми смо урадили нема овим путем прије 322 00:14:06,540 --> 00:14:10,890 и оно што је наше решење за оно што изгледа да буде нека врста хацкисх Цопи Пасте 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 Давид Ј Малан: Да, можемо користити низ. 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 А ти, људски, морати да задржи трацк то ОК име2 одговара 329 00:14:22,190 --> 00:14:25,060 са дорм2 одговара ид2. 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 три од њих, или са константа, инт исказнице и имају три таква. 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 >> Дакле, Ц има ову функцију која се зове струцт. 348 00:15:21,850 --> 00:15:24,700 То је особина језик који нам омогућава да управо то урадите. 349 00:15:24,700 --> 00:15:28,370 Ја ћу ићи напред и отвори струцтс.х 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 а поред ИНТ, и цхар и флоат и све ове друге које постоје, 355 00:15:42,750 --> 00:15:45,810 то можете да урадите буквално писање типедеф струцт, 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 >> Ја ћу да идем у фајл под именом струцтс1.ц. 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 осим ПСет 3 где, опозив, имамо хелперс.х. 375 00:16:42,580 --> 00:16:45,150 Дакле, можда се сећате #инцлуде хелперс.х. 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 Давид Ј Малан: То је стварни, шта? 384 00:16:59,350 --> 00:17:00,559 ПУБЛИКА: То је у вашем ИДЕ. 385 00:17:00,559 --> 00:17:02,475 Давид Ј Малан: Да, то је у мом стварном ИДЕ. 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 Дакле, струцтс.х је мој лични фајл није инсталирана у ИДЕ, 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 #дефине нешто. 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 дефинисати, онда, по обичају, у свим велика слова ворд-- иако то није 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 на тебе висуалли-- простора и онда је вредност желите да будете 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 јер ја укључују струцтс.х, 408 00:18:04,080 --> 00:18:06,492 Сада имам магично на мој Одлагање нови тип података. 409 00:18:06,492 --> 00:18:09,200 Не само да имају приступ инт, и знак, и пловак, и гудачки, 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, ја комбиновањем два идејама-- један обичај податке Тип и два, 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 Ми имамо нашег старог пријатеља ГетСтринг на десној страни. 425 00:18:50,370 --> 00:18:52,345 А шта комад синтаксе је очигледно ново, 426 00:18:52,345 --> 00:18:55,130 ако никада нисте програмирали у Ц пре, и никада нису користили Структуре? 427 00:18:55,130 --> 00:18:55,510 Да? 428 00:18:55,510 --> 00:18:56,417 >> ПУБЛИКА Тхе .наме. 429 00:18:56,417 --> 00:18:57,500 ДАВИД Ј. Малан Тхе .наме. 430 00:18:57,500 --> 00:19:01,220 Али то није превише скок, јер сада студенти изједначи И 431 00:19:01,220 --> 00:19:02,590 даје ученику и-тог. 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 Али видећете ово далеко у ПСет 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 >> Давид Ј Малан: Да, тацно, ово је нови начин 447 00:19:44,530 --> 00:19:46,370 да видимо два, Друга карактеристика Ц, 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 И ви ћете видети више у ПСет 4 и у одељку. 456 00:20:04,360 --> 00:20:08,661 Али ова линија 23 у суштини креира фајл који се зове студентс.цсв. 457 00:20:08,661 --> 00:20:10,160 А можда сте већ видели ово. 458 00:20:10,160 --> 00:20:14,250 Чак и ако никада нисте студирали ЦС раније, ЦСВ је раздвојене зарезима варијабле. 459 00:20:14,250 --> 00:20:19,000 То је као веома сиромашан човек је верзија Екцел фајл, 460 00:20:19,000 --> 00:20:22,270 што значи да се може отворити у Екцел и Аппле Нумберс, 461 00:20:22,270 --> 00:20:23,830 и има редове и колоне. 462 00:20:23,830 --> 00:20:26,485 Али то није власништво Формат попут Мицрософт или Аппле-а. 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 на ову нову функцију која се зове Ф отворен за Филе Опен је в. 467 00:20:37,700 --> 00:20:39,430 Шта би в означавају? 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 >> Давид Ј Малан: Омогућава пишете на фајл. 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 и прочитао га у меморију, те користите само под знацима навода "Р". 474 00:20:50,010 --> 00:20:53,110 Ако желите да пишете до датотека, користите под знацима навода "В". 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 НУЛЛ, испоставило се, није посебна вредност која 479 00:21:02,640 --> 00:21:06,070 може да се врати одређеним функцијама ако нешто кренуло вронг-- 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 И ово је нека врста врста новог функције, фпринтф, 485 00:21:20,470 --> 00:21:21,460 али само да претпоставите. 486 00:21:21,460 --> 00:21:24,370 Ако је само штампани иф форматиран стринг 487 00:21:24,370 --> 00:21:26,507 Шта фпринтф вероватно значи? 488 00:21:26,507 --> 00:21:27,590 ПУБЛИКА: Штампање у датотеку. 489 00:21:27,590 --> 00:21:29,290 Давид Ј Малан: Штампање форматиран низ у датотеку. 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 Онда имамо само формат ниска као принтф. 493 00:21:38,866 --> 00:21:40,740 И иако је ово синтакса је нова, ово само 494 00:21:40,740 --> 00:21:44,610 значи плуг у име ученика, плуг-у студентском дому, а затим 495 00:21:44,610 --> 00:21:47,160 са фцлосе, затворите датотеку. 496 00:21:47,160 --> 00:21:49,730 А онда ластли-- ово је нова па ћемо се вратити на ово 497 00:21:49,730 --> 00:21:53,240 пре него што сам ослобађање лонг-- студент из разлога 498 00:21:53,240 --> 00:21:54,860 што се десило изнад тамо. 499 00:21:54,860 --> 00:21:56,820 Али ми ћемо се вратити да је пре лонг-- 500 00:21:56,820 --> 00:21:59,820 то је зато што како је ГетСтринг заправо раде испод хаубе. 501 00:21:59,820 --> 00:22:01,280 >> Дакле, хајде да бацимо поглед овде. 502 00:22:01,280 --> 00:22:04,380 Ако куцам лс у свом именику, приметити да не 503 00:22:04,380 --> 00:22:09,360 имате фајл под називом студентс.цсв, Једноставно не постоји, не постоји. 504 00:22:09,360 --> 00:22:14,965 Дакле, ако ја сада саставити овај програм, чине струцт-1,. / струцт-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 И хајде да смислимо где је, ја мислим, Марија је у Матхер, 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 Али ако куцам сада лс, има студентс.цсв. 511 00:22:40,680 --> 00:22:43,080 Идемо напред и отворен студентс.цсв. 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 Али видећете много више у ПСет 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 >> Давид Ј Малан: Добро питање. 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 коју ће користити цитат под знацима навода "а" за додати, 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 >> Давид Ј Малан: Ах, добро питање. 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 Ово друго, јер сам не користите Аппенд режим. 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 baza podataka. 545 00:23:55,350 --> 00:23:58,220 >> Сада ЦСВ је корисно, искрено, чак и за слично ако сте вритинг-- 546 00:23:58,220 --> 00:24:00,100 а ми на крају ћете видети касније у семестру када је 547 00:24:00,100 --> 00:24:01,455 користимо ЦСВ извештаји за друге сврхе. 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 Могао бих и доубле-- хајде да пробамо ово стварно 553 00:24:14,540 --> 00:24:16,720 ако имам Екцел или Нумберс овде. 554 00:24:16,720 --> 00:24:19,130 >> Идем да десним кликом или контрола кликните мој досије. 555 00:24:19,130 --> 00:24:20,020 Упс. 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 Довнлоад-- Идем у преузети све фајлове овде тако 559 00:24:32,694 --> 00:24:33,860 само да могу да узмем ово. 560 00:24:33,860 --> 00:24:37,850 И да видимо да ли ово ради студентс.цсв-- први пут 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 Погледајте како је лако користити ЦСВ извештаји? 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 али оно што у-- тамо идемо. 574 00:25:13,090 --> 00:25:16,341 У реду, тако да сада имамо Екцел фајл. 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 Наравно да сам могао пре-инсталлед Екцел или бројеви, или било шта друго програма. 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 се понови овде Фире и Хокеј у Кембриџу, Ситар у Нев Хавен. 584 00:25:38,150 --> 00:25:43,150 Пријавите се на ЦС50с сајту ЛОЛ да се придруже ЦС50 студената и особља. 585 00:25:43,150 --> 00:25:46,090 >> Дакле, узели смо обуку точкова офф на понедељак као фолловс-- 586 00:25:46,090 --> 00:25:49,120 стринг проглашен у ЦС50с библиотека за неко време. 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 Давид Ј Малан: Тако је. 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 Да не редундантно га чувате. 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 >> Давид Ј Малан: Тачно, ја сам био поредећи место у меморији 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 Тако фундаменталли-- и на овако ниском нивоу, 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 >> ПУБЛИКА: прелазили преко стринг [неразумљиво]. 638 00:28:01,120 --> 00:28:02,600 >> Давид Ј Малан: Да, хајде да Посматрајте кроз низ. 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 Давид Ј Малан: Да, обрнута коса црта нула, на којој тачки у оба стринг 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 Ако не, ретурн фалсе. 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 се отарасили речи стринг-- иако да нема функционалну импацт-- све 652 00:28:34,760 --> 00:28:37,450 Радим сада је уклањање неки визуелни точкови обуке, 653 00:28:37,450 --> 00:28:40,880 али да се јасно види да је С и Т су адресе. 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 и рећи цхар * с, 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 И заиста, ГетСтринг, да се јасно, не враћа стринг. 661 00:29:03,500 --> 00:29:06,110 То не врати маму обрнута коса црта нула, само по себи. 662 00:29:06,110 --> 00:29:10,005 Шта конкретно ГетСтринг и прецизно се вратите? 663 00:29:10,005 --> 00:29:10,880 ПУБЛИКА: [неразумљиво] 664 00:29:10,880 --> 00:29:14,080 Давид Ј Малан Ан адреса, адреса првог карактера 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 Гледам да се уверите да а није ништаван и т није нула. 670 00:29:27,540 --> 00:29:30,100 Јер, на основу мог стварно брзо помиње раније, 671 00:29:30,100 --> 00:29:35,510 шта би могло значити ако ГетСтринг врати не адреса, али Н-У-Л-Л, који је опет, 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 >> Давид Ј Малан: То је грешка. 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 са стрингс-- што може бити непознатог дужине у адванце-- 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 И тако ГетСтринг не могу вратити адреса целе ствари, 682 00:29:55,340 --> 00:29:56,620 тако да само враћа ништа. 683 00:29:56,620 --> 00:30:00,580 И каже грешка што се догодило враћањем посебну НУЛЛ вредност. 684 00:30:00,580 --> 00:30:02,890 То је нула адреса, да тако кажем. 685 00:30:02,890 --> 00:30:06,157 >> Сада испада да, Ц долази са функција која вам то итерација. 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, ./цомпаре-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 А сада идемо напред и заправо хајде да урадимо ово-- са копијом-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 Онда сам проверите да ли ови једнако једнако НУЛЛ, само се врати 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 >> Давид Ј Малан: Тачно, Т добија адресу с. 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 И оно што сам откуцао у-- ево ова, и овде 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 у у вредности од с, што се складишти овде неће мама 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 су користили ово пре неког времена за Цезара, или Вигенере, или можда уопште не. 738 00:32:44,410 --> 00:32:48,170 Тврдим са мојим принтф, ја сам ће да искористи копирање т. 739 00:32:48,170 --> 00:32:51,616 Први у реду 19, брз разум цхецк, стрлен проверава дужину т. 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 Давид Ј Малан: Изгледа као да је копирање којих је један? 747 00:33:08,722 --> 00:33:09,486 ПУБЛИКА: м. 748 00:33:09,486 --> 00:33:10,450 Давид Ј Малан Ух, м. 749 00:33:10,450 --> 00:33:12,685 У реду, тако да у првој м, јер најаве да сам 750 00:33:12,685 --> 00:33:14,935 пролази на тоуппер, који ако никада нисам видела да је 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 Шта треба да се поново написана или мењане у односу на С и Т и маме 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 >> Давид Ј Малан: Да, Дакле, ова овде једноставно 759 00:33:34,030 --> 00:33:40,860 треба да се променио да-- поправити ово-- треба да се мења у великим м. 760 00:33:40,860 --> 00:33:44,330 Али сада, погледајте касније у Програм, ако исписати 761 00:33:44,330 --> 00:33:49,800 С и Т, као што сам овде чисти, пази шта је ће се догодити штампање С и Т. 762 00:33:49,800 --> 00:33:54,310 Тако да цопи-0, ./цопи-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 Zašto? 766 00:34:00,850 --> 00:34:04,431 Па, С и Т су обе указују на, ако хоћете, исти комад меморије. 767 00:34:04,431 --> 00:34:06,930 И искрено, ово постаје Заиста унинтерестинг-- чињеницу 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 Па шта с и т заиста, према овом програму, 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 Давид Ј Малан: Треба нам шта? 791 00:35:01,420 --> 00:35:01,820 ПУБЛИКА: меморију. 792 00:35:01,820 --> 00:35:03,280 Давид Ј Малан: Морамо још један комад сећања, зар не? 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 Уместо тога урадите ово фолловинг-- линије су идентични, дај ми низ 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 Дакле, ако ваш удобан са слика коју смо управо древ-- 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, на лијевој страни, Чар * Т ми даје ову кутију овде. 809 00:35:59,400 --> 00:36:00,230 То је све што ради. 810 00:36:00,230 --> 00:36:03,240 На десној страни, м Аллоц, или маллоц, 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 >> Давид Ј Малан: Тачно, за тај сентинел вредности. 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 И онда само због доброг меасуре-- иако на овом систему, 830 00:36:45,400 --> 00:36:49,390 то увек бити 1-- говорим помножите то од величине цхар. 831 00:36:49,390 --> 00:36:51,552 Испоставило се да је сизеоф оператор у Ц који 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 Ово је као ПСет 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 И ја копирање и-ти карактер у с у и-том карактера у т. 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 се користи да се ово Т носач ја добија ова конзола и. 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 Раније смо видели цхар *, сада видим звезда на почетку, и то је у реду. 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 >> Давид Ј Малан: То је показивач. 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 >> ДАВИД Ј. Малан Тхе адреса првог бајта 880 00:39:07,950 --> 00:39:10,490 у т, који комад меморије прерасподјела. 881 00:39:10,490 --> 00:39:14,720 Тако испада да кад Посматрајте од 0 он до низа 882 00:39:14,720 --> 00:39:17,424 ленгтх-- пре свега, ја почиње на 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 је дереференце оператер, који је само 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 Ако је ово а, а ви кажете * с * с, нешто као падобрани и мердевина, 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 >> * т је иста ствар. 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 * Т значи да одем одавде. 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 Али како то да урадим Инкрементација? 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 >> Ако у ово петље, Стално се увецава и, 910 00:40:22,460 --> 00:40:26,880 и с је адреса и т је адреса, ако само задржати додајући 1, 911 00:40:26,880 --> 00:40:31,406 то само значи кретати напред, и напред и доставља у меморији. 912 00:40:31,406 --> 00:40:34,030 То је као Окфорд Стреет, Тхе улица да је зграда ЦС је на. 913 00:40:34,030 --> 00:40:36,490 ЦС зграде је на 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 >> ПУБЛИКА: Па где је каже * Т једнака тоуппер * т, 926 00:41:13,755 --> 00:41:15,575 је да ће да искористе сва писма или само-- 927 00:41:15,575 --> 00:41:17,283 >> Давид Ј Малан Ах, Стварно добро питање. 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 Дакле, тоуппер је функција да капитализовано цхар. 934 00:41:29,770 --> 00:41:30,530 То је све. 935 00:41:30,530 --> 00:41:36,740 * Т значи ићи на фирст-- идите на адресу у т. 936 00:41:36,740 --> 00:41:40,350 Дакле, на слици, ако је ово комад меморије издвојили смо са маллоц, 937 00:41:40,350 --> 00:41:43,310 и ово је т, * Т знаци иду овде. 938 00:41:43,310 --> 00:41:46,710 >> У међувремену, ти пролазу та вредност, мала слова м 939 00:41:46,710 --> 00:41:50,040 да тоуппер, ви се вратимо Цапитал М, где си га ставља? 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 капитализацијом прво слово осим ако поновити са И или 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 >> ПУБЛИКА: Зашто сте користити дереференце метод него 947 00:42:05,369 --> 00:42:05,979 Низ? 948 00:42:05,979 --> 00:42:07,395 >> Давид Ј Малан: Ах, добро питање. 949 00:42:07,395 --> 00:42:10,672 Зашто би сте користили Дереференце метод уместо метода арраи? 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 Али- нарочито када дођемо Касније у току у ПСет 5 960 00:42:36,299 --> 00:42:39,340 кад смо спроведе ту речник који Ја сам поменуо неколико тимес-- 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 ови врло разумљив заградама. 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 Имплементиран сам логицалли-- са Лаурен овде на демо и сок од поморанџе 982 00:43:38,830 --> 00:43:43,770 у милк-- савршено алгоритмички исправна функција 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 Укратко, зашто је ово имплементација свап 987 00:43:54,650 --> 00:43:58,740 логички исправан, али нема утицаја на варијабли које се доносе на њега, 988 00:43:58,740 --> 00:44:01,119 као кии за главни? 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 >> Давид Ј Малан: Тачно, када прођете варијабли у функцији, или аргументи 994 00:44:09,060 --> 00:44:11,030 у функцији, они су доноси копију, која 995 00:44:11,030 --> 00:44:14,770 значи добијате идентична лоокинг образац бита за оба Кс и И, 996 00:44:14,770 --> 00:44:15,955 позвао овде и б. 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 дешава се испод хоод-- ако ово је меморија рачунара, 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 па чак и ако главни има две варијабле, Кс и И, 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 не вредности желимо да Свап, али само интуитивно 1014 00:45:09,650 --> 00:45:11,630 Шта смо могли проћи да уместо замене? 1015 00:45:11,630 --> 00:45:12,620 >> [Ставим Воицес] 1016 00:45:12,620 --> 00:45:15,244 >> Давид Ј Малан: Зашто не бисмо пасс то адресе, зар не? 1017 00:45:15,244 --> 00:45:17,470 Зашто не дајемо свап А благо карта, ако хоћете, 1018 00:45:17,470 --> 00:45:20,950 који га води до стварне вриједности Кс и И. 1019 00:45:20,950 --> 00:45:24,340 Идемо замена, заиста променити те оригиналне бита, а не 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 >> Дакле, горе на врху, када сам променио и б 1032 00:45:55,310 --> 00:46:00,470 од тога инт је у лоше Верзија за инт старс, А и Б, 1033 00:46:00,470 --> 00:46:01,740 претходно били бројеви. 1034 00:46:01,740 --> 00:46:05,752 Шта су А и Б сада у добро, зелена верзија? 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 Дакле, чињеница да сам рекавши Инт звезд средства 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 тмп остаје исти, јер то је само привремено цео број, 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 А, у ствари, сваки друго помињање А и Б, 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 Зато што не желите да копирате А и Б. 1048 00:46:35,750 --> 00:46:40,350 Јер ако сам само цопи а и б и свап А и Б, шта ја заправо замене? 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 Сада имам два избора ја проћи х и и или да донесу своје адресе? 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 тако да када види и када га види Б, не само копирати А и Б 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 У свап.ц буквално копирао и залепио зелену верзију. 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 >> Давид Ј Малан: Где потребно је његов аргумент. 1078 00:48:07,603 --> 00:48:09,985 Дакле, ако сам дођите до главног, ја Не могу само проћи у Кс и И, 1079 00:48:09,985 --> 00:48:12,820 и, обећавам, последњи комад нове синтаксе данас. 1080 00:48:12,820 --> 00:48:17,200 Морам да прође у не Кс и година али је адреса к и и. 1081 00:48:17,200 --> 00:48:20,400 И испоставило се, симбол да су аутори изабрали Ц 1082 00:48:20,400 --> 00:48:23,860 је ако користите амперсанд овде, не да треба мешати са битовима амперсанд, 1083 00:48:23,860 --> 00:48:27,130 ако користите амперсанд овде и један Амперсанд овде, 1084 00:48:27,130 --> 00:48:29,570 ово схвати за вас, која је адреса од к, 1085 00:48:29,570 --> 00:48:31,740 можда је 10, што је адреса и, можда је 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 Показивачи су можда најтежи тема које смо покрили у ЦС50. 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. године, када сам узео ЦС50 са мојим демонстратор, 1099 00:49:05,920 --> 00:49:09,620 Нисхат Мехта, он ме је сео у угао Елиот Д. Халл током ручка, 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 И ми ћемо завршити са брзе три минута Цлаиматион 1111 00:49:35,605 --> 00:49:37,030 маде би нашег пријатеља, Ницк Парланте. 1112 00:49:37,030 --> 00:49:41,440 Ево програм, који на врху два линија декларише променљиву к и и. 1113 00:49:41,440 --> 00:49:44,780 Оба су адресе за целих, ака показивачи. 1114 00:49:44,780 --> 00:49:48,125 Затим смо издвојити довољно меморија за складиштење инт 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 Дај ми четири бајта меморије, То је величина инт, 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 Стар И значи отићи на адресу у и, и стави несрећан број 13 тамо. 1123 00:50:12,620 --> 00:50:15,780 Зашто је то опасно, у овом тренутку у стори-- мада брзо рекао 1124 00:50:15,780 --> 00:50:17,980 у нашим последњим минута овдје-- зашто је лоше 1125 00:50:17,980 --> 00:50:19,660 да кажем, идите на адресу у И? 1126 00:50:19,660 --> 00:50:21,077 >> ПУБЛИКА: Немате [неразумљиво]. 1127 00:50:21,077 --> 00:50:22,910 Давид Ј Малан: Немам стави нешто у и. 1128 00:50:22,910 --> 00:50:25,520 Дакле, шта је вредност и, у овом тренутку у причи? 1129 00:50:25,520 --> 00:50:26,570 Немамо појма. 1130 00:50:26,570 --> 00:50:29,190 То је нека вредност смеће и нити Бинки зна. 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 >> Хеј, Бинки, пробуди се. 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 >> ОК, добро видим да је два показивачи, али су 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 У ствари, они указују на су зове поинтеес и постављање их 1146 00:51:00,950 --> 00:51:02,330 представља одвојени корак. 1147 00:51:02,330 --> 00:51:03,210 >> Ох, да, да. 1148 00:51:03,210 --> 00:51:03,940 Знала сам да. 1149 00:51:03,940 --> 00:51:05,730 У поинтеес су одвојени. 1150 00:51:05,730 --> 00:51:08,310 Па како издвојити поинтее? 1151 00:51:08,310 --> 00:51:11,960 >> ОК, и овог законика додељује нова цео поинтее, 1152 00:51:11,960 --> 00:51:15,050 и овај део комплета х да укаже на то. 1153 00:51:15,050 --> 00:51:16,240 >> Хеј, то изгледа боље. 1154 00:51:16,240 --> 00:51:17,743 Тако да то уради нешто. 1155 00:51:17,743 --> 00:51:23,580 >> ОК, ја ћу дереференце показивачем Кс да сачувате број 42 у својој поинтее. 1156 00:51:23,580 --> 00:51:27,130 За овај трик, треба ми мој чаробни штапић за дереференцинг. 1157 00:51:27,130 --> 00:51:30,200 >> Твој чаробни штапић од дереференцинг? 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 Само ћу поставити број и-- 1161 00:51:35,970 --> 00:51:37,070 >> [Поп звук] 1162 00:51:37,070 --> 00:51:39,140 >> Хеј, гледај тамо иде. 1163 00:51:39,140 --> 00:51:43,980 Дакле, радећи на Дереференце к следи стрелице за приступ поинтее. 1164 00:51:43,980 --> 00:51:46,150 У овом случају, да складиште 42 унутра. 1165 00:51:46,150 --> 00:51:50,700 Хеј, покушајте да га користи за чување броја 13. кроз други показивача и. 1166 00:51:50,700 --> 00:51:51,840 >> -ОК. 1167 00:51:51,840 --> 00:51:56,270 Идем тамо да и, и добити број 13 поставку. 1168 00:51:56,270 --> 00:52:00,380 А онда се штапић од дереференцинг и само-- 1169 00:52:00,380 --> 00:52:01,646 >> [БУЗЗЕР Соунд] 1170 00:52:01,646 --> 00:52:04,080 >> Ох, хеј то није успело. 1171 00:52:04,080 --> 00:52:06,470 Рецимо, ух, Бинки, не знам Мислим дереференцинг 1172 00:52:06,470 --> 00:52:10,850 и је добра идеја, јер постављање горе уз поинтее је посебан корак. 1173 00:52:10,850 --> 00:52:12,480 И не мислим да смо икада то урадили. 1174 00:52:12,480 --> 00:52:14,620 >> Хмм, добра ствар. 1175 00:52:14,620 --> 00:52:19,810 >> -Да, Издвојила се показивач, и, али нисмо га поставили да укаже на поинтее. 1176 00:52:19,810 --> 00:52:21,590 >> Хмм, врло пажљиви. 1177 00:52:21,590 --> 00:52:23,215 Хеј, добро изгледаш ту, Бинки. 1178 00:52:23,215 --> 00:52:26,390 Можеш ли то поправити тако да и бодова на исти поинтее као к. 1179 00:52:26,390 --> 00:52:29,290 >> Наравно, ја користим свој чаробни штапић од показивача задатка. 1180 00:52:29,290 --> 00:52:31,970 >> -Је Ли то це бити Проблем, као пре? 1181 00:52:31,970 --> 00:52:33,790 >> Не, то не додирује поинтеес. 1182 00:52:33,790 --> 00:52:35,840 Само један показивач мења да укаже на исти ствар-- 1183 00:52:35,840 --> 00:52:36,465 >> [Пуцкетање] 1184 00:52:36,465 --> 00:52:37,450 --ас друго. 1185 00:52:37,450 --> 00:52:38,440 >> -Ох сад видим. 1186 00:52:38,440 --> 00:52:41,200 Сада и указује на истом месту као и к. 1187 00:52:41,200 --> 00:52:42,950 Па, чекај, сада год је фиксна. 1188 00:52:42,950 --> 00:52:44,110 Има поинтее. 1189 00:52:44,110 --> 00:52:47,779 Дакле, можете пробати штап од Поново дереференцинг послати 13 овер. 1190 00:52:47,779 --> 00:52:51,110 >> Ох, ОК, ево иде. 1191 00:52:51,110 --> 00:52:52,330 >> Хеј, погледај то. 1192 00:52:52,330 --> 00:52:53,570 Сада дереференцинг радове на год. 1193 00:52:53,570 --> 00:52:57,900 И зато су показивачи деле да једном поинтее, обојица виде 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 >> Ох, гледај смо више времена. 1197 00:53:03,730 --> 00:53:04,660 >> -Ali-- 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 и указује на преко поинтее. 1201 00:53:11,630 --> 00:53:13,740 Али показивач и поинтее су одвојени. 1202 00:53:13,740 --> 00:53:15,620 А честа грешка је да се успостави показивач 1203 00:53:15,620 --> 00:53:18,000 али заборавити да му дати поинтее. 1204 00:53:18,000 --> 00:53:21,170 >> Број 2, показивач дереференцинг почиње у показивача 1205 00:53:21,170 --> 00:53:24,020 и прати његову стрелу преко за приступ поинтее. 1206 00:53:24,020 --> 00:53:27,815 Као што сви знамо, ово ради само ако постоји је поинтее, која врста врати 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 и мења га да се укаже на Исто поинтее као још један показивач. 1210 00:53:35,330 --> 00:53:37,150 Дакле, после задатка, два показивачи 1211 00:53:37,150 --> 00:53:40,927 ће указати на исти поинтее, понекад то се зове дељење. 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 >> [Крај репродукције] 1215 00:53:43,475 --> 00:53:44,830 >> Давид Ј Малан: То је то за ЦС50. 1216 00:53:44,830 --> 00:53:46,246 Захваљујући професору Ницк Парланте. 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