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 >> Гэта CS50, і гэта канец тыдня 4. 11 00:00:28,000 --> 00:00:30,820 Так што, калі вы калі-небудзь назіраў Тэлевізар ці кіно, у якім 12 00:00:30,820 --> 00:00:34,690 ёсць некаторыя кампутарныя эксперты і паліцыя, ФБР або, ці некаторыя агенцтва 13 00:00:34,690 --> 00:00:36,930 спрабуе злавіць некаторых праціўнік, добра, вы, 14 00:00:36,930 --> 00:00:40,850 напэўна, чулі выраз "павышэння", у выніку чаго, што тэхнік-то 15 00:00:40,850 --> 00:00:44,750 чароўна павялічвае ў бясконца далёка, каб убачыць злачынцаў 16 00:00:44,750 --> 00:00:48,640 асобу або нумарны знак нават у адлівам люстэркам 17 00:00:48,640 --> 00:00:50,390 або бляск чыёй-то вочы. 18 00:00:50,390 --> 00:00:55,196 Так на самой справе, давайце зірнем на некалькі такіх сцэн з Галівуду. 19 00:00:55,196 --> 00:00:55,862 [Прайграванне відэа] 20 00:00:55,862 --> 00:00:59,243 -Добра, Зараз давайце атрымаць добры погляд на вас. 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 -Tighten На што, ці не так? 30 00:01:14,820 --> 00:01:16,530 -векторных У тым, што на хлопец з задняга кола. 31 00:01:16,530 --> 00:01:19,400 -zoom У прама тут, на гэтым месцы. 32 00:01:19,400 --> 00:01:22,846 -З Правам абсталявання, малюнак можа быць павялічана і заточаныя. 33 00:01:22,846 --> 00:01:24,065 -Што Гэта? 34 00:01:24,065 --> 00:01:25,600 -Гэта Праграма павышэння. 35 00:01:25,600 --> 00:01:26,860 -Можа Вы ясна, што да любой? 36 00:01:26,860 --> 00:01:27,890 -Не ведаю. 37 00:01:27,890 --> 00:01:29,050 Давайце павышэння яго. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Раздзеле A6. 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 -Edgar, Вы можаце павысіць гэта? 44 00:01:40,100 --> 00:01:41,875 >> -hang На. 45 00:01:41,875 --> 00:01:44,010 >> -Я Працую на гэтым адлюстраванні. 46 00:01:44,010 --> 00:01:44,995 >> Адлюстраванне -Someone ст. 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 -The Адлюстраванне. 50 00:01:48,065 --> 00:01:48,981 -Ёсць Гэта адлюстраванне. 51 00:01:48,981 --> 00:01:50,600 -zoom У на люстэрку. 52 00:01:50,600 --> 00:01:52,712 -Вы Можаце бачыць адлюстраванне. 53 00:01:52,712 --> 00:01:54,350 -Можа Вам павысіць імідж адсюль? 54 00:01:54,350 --> 00:01:55,370 -Можа Вам павысіць яго прама тут? 55 00:01:55,370 --> 00:01:56,210 -Можа Вам павысіць яго? 56 00:01:56,210 --> 00:01:56,900 Вы можаце павялічыць гэта? 57 00:01:56,900 --> 00:01:57,870 >> -Можа Мы павялічваем гэта? 58 00:01:57,870 --> 00:01:58,717 >> -Можа Вам павысіць яго? 59 00:01:58,717 --> 00:02:00,050 -Постой На секунду, я павышэння. 60 00:02:00,050 --> 00:02:00,924 -zoom На дзверы. 61 00:02:00,924 --> 00:02:01,700 -кратного 10. 62 00:02:01,700 --> 00:02:02,586 -Zoom. 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 -Stop. 67 00:02:05,190 --> 00:02:05,970 -Pause Яго. 68 00:02:05,970 --> 00:02:09,460 -rotate Нам 75 градусаў вакол вертыкальнай, калі ласка. 69 00:02:09,460 --> 00:02:10,962 -Stop. 70 00:02:10,962 --> 00:02:14,040 Вярніцеся да часткі аб дзверы, зноў. 71 00:02:14,040 --> 00:02:15,860 >> -Got Энхансер малюнкі, якія могуць растравага малюнка? 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 >> -The Уласнае выключаны. 75 00:02:21,845 --> 00:02:24,300 >> -З Правы Спалучэнне algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> Прынятыя ліквідацыю -Ён алгарытмы на наступны ўзровень, 77 00:02:26,755 --> 00:02:28,730 і я магу выкарыстоўваць іх для узмацніць гэтую фатаграфію. 78 00:02:28,730 --> 00:02:31,286 >> -Lock, І павялічыць Z-восі. 79 00:02:31,286 --> 00:02:32,560 >> -Enhance. 80 00:02:32,560 --> 00:02:33,100 >> -Enhance. 81 00:02:33,100 --> 00:02:33,600 >> -Enhance. 82 00:02:33,600 --> 00:02:34,960 -Freeze І павышэння. 83 00:02:34,960 --> 00:02:37,180 >> [КАНЕЦ ПРАГЛЯДУ] 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 І на самай справе, CS50 і курсы, як гэта імкнецца разбурыць шмат тэлебачання і кіно 87 00:02:48,400 --> 00:02:48,900 для вас. 88 00:02:48,900 --> 00:02:52,330 Таму што, калі тыя камп'ютэрных спецыялістаў якія сыпаць ўмовы і казаў 89 00:02:52,330 --> 00:02:56,860 модныя рэчы, як ўласныя, і г-вось, 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 І гэта тое, што з'яўляюцца званыя пікселяў, Р-І-Х-E-L-S, 105 00:03:41,900 --> 00:03:45,740 які знаходзіцца ўсяго ў квадрат, як правіла, гэта значыць кропка, якая складае малюнак. 106 00:03:45,740 --> 00:03:49,200 І яшчэ ў той дзень, а на самай справе нават сёння з некаторымі з сённяшніх LED-тэлевізараў 107 00:03:49,200 --> 00:03:51,950 ці ВК-тэлевізары, калі ў вас ёсць адным ў вашым нумары або на хаце, 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 У задачы Set 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 А вось як, у binary-- ўнутры памяці кампутара, або нават унутры 140 00:05:15,570 --> 00:05:18,160 файла на ваш жорсткі drive-- можна захоўваць 141 00:05:18,160 --> 00:05:20,240 найпросты з смайлік малюнкаў. 142 00:05:20,240 --> 00:05:23,990 Але тое, што мы, вядома, не хапае ў гэтым вобразе? 143 00:05:23,990 --> 00:05:24,610 Колер, праўда? 144 00:05:24,610 --> 00:05:28,220 Гэта відавочна, наступным крокам або ўдасканаленне палепшыць гэта з колерам. 145 00:05:28,220 --> 00:05:32,230 Таму, на жаль толькі з адной трохі, 0 або 1, можна ўявіць колер. 146 00:05:32,230 --> 00:05:36,100 Гэта можа быць чырвоным або сінім, або чорны, ці белы, ці зялёны, ці ружовага, 147 00:05:36,100 --> 00:05:37,420 або любыя пары кветак. 148 00:05:37,420 --> 00:05:40,860 Але для прастаты, мы будзем проста выказаць здагадку, чорны і белы. 149 00:05:40,860 --> 00:05:45,930 >> Так што лагічна нам трэба, калі мы хочаце рэалізаваць колер у малюнку? 150 00:05:45,930 --> 00:05:49,080 Што мы павінны рабіць? 151 00:05:49,080 --> 00:05:51,900 Падобна гэтаму, калі абмяжоўвалым фактарам тут з'яўляецца тое, што з адным бітам можна толькі 152 00:05:51,900 --> 00:05:55,977 прадстаўляюць два стану, 0 або 1, белы або чорны, тое, што вы хочаце зрабіць? 153 00:05:55,977 --> 00:05:56,810 Аўдыторыя: больш дадзеных. 154 00:05:56,810 --> 00:05:58,813 Дэвід Дж малая: Яшчэ біт, ага больш дадзеных, больш біт. 155 00:05:58,813 --> 00:06:01,440 І, сапраўды, гэта менавіта тое, як прадстаўлены каляровыя выявы. 156 00:06:01,440 --> 00:06:05,120 Замест таго, каб выкарыстоўваць адзін біт, А 0 або 1 для кожнага пікселя, кожная кропка, 157 00:06:05,120 --> 00:06:06,170 Вы проста выкарыстоўваць некалькі. 158 00:06:06,170 --> 00:06:09,660 Можа быць, выкарыстоўваць 8, можа быць, часцей выкарыстоўваць 24, і сапраўды, у задачы Набор 159 00:06:09,660 --> 00:06:13,300 4, вы будзеце гуляць з файлам Фармат, які выкарыстоўвае 24 біта, як правіла ,. 160 00:06:13,300 --> 00:06:15,430 >> Але большасць з вас, верагодна, знаёмыя з JPEG. 161 00:06:15,430 --> 00:06:17,460 Калі вы калі-небудзь фота на тэлефоне, 162 00:06:17,460 --> 00:06:20,360 або загружаныя або бачылі што-то на Facebook або Flickr, любую колькасць 163 00:06:20,360 --> 00:06:24,882 фота-аснове вэб-сайтаў, вы маеце напэўна, бачылі выявы JPEG з раней. 164 00:06:24,882 --> 00:06:27,840 І аказваецца, гэта файл Фармат мы збіраемся выкарыстоўваць у Pset 4, 165 00:06:27,840 --> 00:06:30,340 у якім вы збіраецеся прыйдзецца аднаўляць малюнка 166 00:06:30,340 --> 00:06:35,160 што я выпадкова выдаленыя з пашкоджаны карты памяці ў камеры, 167 00:06:35,160 --> 00:06:35,800 калі вы будзеце. 168 00:06:35,800 --> 00:06:38,490 >> І атрымліваецца, што, хоць JPEG даволі sophisticated-- 169 00:06:38,490 --> 00:06:40,906 гэта значна больш складаны чым чорных і белых кропак 170 00:06:40,906 --> 00:06:44,480 мы бачылі некалькі хвілін таму, таму што ёсць на самай справе фантазіі алгарытмы, якія 171 00:06:44,480 --> 00:06:47,410 выкарыстоўваюцца для сціску JPEG, так што вы можаце мець сапраўды добры, 172 00:06:47,410 --> 00:06:49,832 якасць малюнка, але з выкарыстаннем параўнальна мала біт. 173 00:06:49,832 --> 00:06:51,790 І мы вернемся да сціску ў хуткім часе. 174 00:06:51,790 --> 00:06:56,280 Аказваецца, што першы тры байта ў image-- JPEG 175 00:06:56,280 --> 00:07:02,750 незалежна ад таго, што вы зрабілі фатаграфію of-- з'яўляюцца значэння 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Іншымі словамі, калі вы проста бачыць, што набор бітаў, 177 00:07:05,990 --> 00:07:09,180 тут прадстаўлены як тры байт, або 24 біта складзе, 178 00:07:09,180 --> 00:07:13,810 з высокай верагоднасцю можна выказаць здагадку, што Вы глядзіце на гэта гэты першы тры 179 00:07:13,810 --> 00:07:15,230 байты JPEG. 180 00:07:15,230 --> 00:07:18,040 І гэта тое, што вядома ў якасці подпісы ў фармаце JPEG. 181 00:07:18,040 --> 00:07:20,540 Шмат фарматаў файлаў там, як правіла, каб пачаць 182 00:07:20,540 --> 00:07:23,735 з некаторымі мадэлямі 0 і 1, так што Windows, і Mac OS, і прашыўкай, 183 00:07:23,735 --> 00:07:28,272 і Android-ведаю, які тып файла яны гэта, у дадатак да так званай файла 184 00:07:28,272 --> 00:07:29,730 пашырэнне, якое шмат файлаў ёсць. 185 00:07:29,730 --> 00:07:32,590 Калі вы .jpg, гэта яшчэ адзін ключ да кампутара. 186 00:07:32,590 --> 00:07:35,310 >> Такім чынам, давайце паглядзім на гэта трохі больш тэхнічна. 187 00:07:35,310 --> 00:07:37,390 Мы ведаем дзесятковай сістэма ад 0 да 9. 188 00:07:37,390 --> 00:07:38,740 Мы ведаем, двайковы 0 і 1. 189 00:07:38,740 --> 00:07:41,842 І калі вы ўспомніце Pset 0, у вас змагацца з, 190 00:07:41,842 --> 00:07:43,800 для трохі, нешта называецца шаснаццатковым 191 00:07:43,800 --> 00:07:47,320 дзе ў вас ёсць 16 лічбаў, замест 10 ці замест 2. 192 00:07:47,320 --> 00:07:50,405 І гэтыя лічбы, па пагадненні, ад 0 да 9, а затым 193 00:07:50,405 --> 00:07:55,040 праз F, дзе F ўяўляе тое, што дзесятковы лік, як хутка здаровае 194 00:07:55,040 --> 00:07:56,640 праверыць? 195 00:07:56,640 --> 00:07:57,610 Так, 15. 196 00:07:57,610 --> 00:08:01,390 І павінен прадстаўляць 10, проста Характар ​​упарадкавання, што я даў. 197 00:08:01,390 --> 00:08:04,350 Гэта проста адвольнае пагадненне, але гэта цалкам стандартны. 198 00:08:04,350 --> 00:08:06,870 >> Так што, калі мы паглядзім на гэты шаблон з трох bytes-- давайце 199 00:08:06,870 --> 00:08:09,620 проста пачаць глядзець на яго ў адпаведнасці з тым, як 200 00:08:09,620 --> 00:08:12,450 кампутарныя навукоўцы наогул глядзець і думаць пра файлах. 201 00:08:12,450 --> 00:08:15,580 Вы, вядома, можаце думаць аб Файлы ў 0s, 1с і і дзесятковай, 202 00:08:15,580 --> 00:08:19,340 але ў рэчаіснасці, мы схільныя выкарыстоўваць бінарны або больш, як правіла, hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 назад ад Pset 0. 204 00:08:20,760 --> 00:08:25,857 Такім чынам, дазвольце мне выказаць здагадку, што 255, 216, 255 і проста гэтыя мадэлі 0 і 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 да F, або, больш канкрэтна ад 0 да 15, 216 00:09:00,930 --> 00:09:03,430 можа быць прадстаўлена з роўна чатыры біта. 217 00:09:03,430 --> 00:09:07,960 Іншымі словамі, у шаснаццатковым калі вы хачу, каб прадстаўляць 0, гэта проста 0000, 218 00:09:07,960 --> 00:09:08,780 чатыры нулі. 219 00:09:08,780 --> 00:09:13,997 І калі вы хочаце, каб прадстаўляць 15, гэта 1111, які чатыры біта. 220 00:09:13,997 --> 00:09:16,080 І калі вы робіце матэматыку, калі гэта месца тыя, 221 00:09:16,080 --> 00:09:18,210 гэта месца 16s, што збіраецца даць you-- 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 У нас ёсць яшчэ адзін F ёсць, больш за тое там два. 229 00:09:36,020 --> 00:09:38,980 І зараз, толькі прыняць на веру што я зрабіў матэматыку права 230 00:09:38,980 --> 00:09:41,890 і што левая палова з гэтых бітаў, 1101, 231 00:09:41,890 --> 00:09:43,980 гэта тое ж самае, як д у шаснаццатковым выглядзе. 232 00:09:43,980 --> 00:09:46,490 І правая рука, 1000, знаходзіцца ўсяго ў 8. 233 00:09:46,490 --> 00:09:48,140 >> І, што адзін лёгка ўбачыць, правільна? 234 00:09:48,140 --> 00:09:51,670 8-represents-- правоў пад гэтай васьмёркі месцы. 235 00:09:51,670 --> 00:09:56,040 Такім чынам, мы маем адзін у слупку васьмёркі і нічога ў карачках, двое ці тыя. 236 00:09:56,040 --> 00:09:59,830 Так што цяпер больш традыцыйна, людзі схільныя напісаць шаснаццаткавыя лічбы, як гэта, 237 00:09:59,830 --> 00:10:03,000 вы проста хлюпаць іх разам, і тады вы прэфікс іх з 0x. 238 00:10:03,000 --> 00:10:05,920 Гэта нічога не значыць, акрамя візуальны ключ да human-- 239 00:10:05,920 --> 00:10:10,350 вось ідзе шаснаццатковае value-- таму не маглі б быць відавочным. 240 00:10:10,350 --> 00:10:13,629 >> Які ёсць, у канчатковым рахунку, што карціна з нулёў і адзінак, 241 00:10:13,629 --> 00:10:16,170 ці карціна шаснаццатковай лічбы ж самае, што вы 242 00:10:16,170 --> 00:10:18,990 збіраецца пачаць шукаць ў задачы Набор 4 this-- 243 00:10:18,990 --> 00:10:22,120 і праблема Набор 4 спецыфікацыі будуць хадзіць Вы праз гэта больш detail-- 244 00:10:22,120 --> 00:10:25,344 але разумею, як свайго роду магіі, як гэта можа выглядаць на першы погляд, 245 00:10:25,344 --> 00:10:27,010 Вы пачнеце бачыць гэта шмат. 246 00:10:27,010 --> 00:10:30,320 І на самай справе, нават у GDB, то адладчык мы ўвялі ў панядзелак 247 00:10:30,320 --> 00:10:35,440 і Дэн ўкараняе ў Pset 3, будзе каб паказаць вам часта шаснаццаткавыя значэння 248 00:10:35,440 --> 00:10:39,910 толькі таму, што яны маюць тэндэнцыю быць больш звычайны, чым дзесятковая або двайковы 249 00:10:39,910 --> 00:10:41,157 ў свеце кампутараў. 250 00:10:41,157 --> 00:10:42,490 Зараз давайце паставіць гэта ў кантэксце. 251 00:10:42,490 --> 00:10:48,040 Многія з вас, магчыма, памятаеце, што гэта Тут карціна, якая прыйшла ад чаго? 252 00:10:48,040 --> 00:10:51,240 Vista ,, так што нават раней, чым што Windows XP зрабіў гэта дэбют. 253 00:10:51,240 --> 00:10:52,620 Так што гэта прыгожы краявід. 254 00:10:52,620 --> 00:10:55,940 І на самай справе, калі вы капацца online-- Я думаю, што гэта артыкул з Вікіпедыі, 255 00:10:55,940 --> 00:11:00,110 дзе хтосьці вельмі дзіўна выйшаў знайшлі гэта месца ў свеце створана 256 00:11:00,110 --> 00:11:02,240 яго ці яе камера менавіта права place-- 257 00:11:02,240 --> 00:11:06,510 і гэта сёння выглядае like-- але гэта сапраўды гэтак жа, ўстаноўка. 258 00:11:06,510 --> 00:11:10,060 Гэты вобраз, хоць, знаходзіцца ў файле фармат, званы растравы, б-м-р. 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 Карысная інфармацыя, што Photoshop або якія-небудзь графічныя праграмы вы карыстаецеся 270 00:11:43,940 --> 00:11:45,180 можа на самай справе хвалюе. 271 00:11:45,180 --> 00:11:47,170 >> Так падрабязней пра гэта ў Праблема паказаны 4, але гэта 272 00:11:47,170 --> 00:11:49,220 толькі сказаць, што ў канцы дня 273 00:11:49,220 --> 00:11:52,390 усе фарматы файлаў вы карыстаецеся для years-- файлаў Microsoft Word, 274 00:11:52,390 --> 00:11:55,820 Нумары, файлы Excel, любую колькасць фарматаў файлаў 275 00:11:55,820 --> 00:11:57,770 што, магчыма, некаторыя Вядома, пашырэнне файла 276 00:11:57,770 --> 00:12:00,130 проста 0 і 1 пад капотам. 277 00:12:00,130 --> 00:12:02,970 І людзі вырашылі тое, што канвенцыі з'яўляюцца, 278 00:12:02,970 --> 00:12:08,340 Якія мадэлі 0 і 1 ўяўляюць Слова файл у параўнанні файл Excel, 279 00:12:08,340 --> 00:12:10,322 у параўнанні з любым колькасцю іншых фарматаў. 280 00:12:10,322 --> 00:12:12,780 Такім чынам, у Pset 4, вы будзеце мець магчымасць гуляць з гэтым. 281 00:12:12,780 --> 00:12:14,405 >> Але што гэта значыць мець структуры. 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 Напрыклад, калі вы хацеў represent-- давайце 286 00:12:27,300 --> 00:12:33,690 што вы хацелі, каб мець зменную, якая ўяўляе студэнта ў некаторым праграмы. 287 00:12:33,690 --> 00:12:37,330 Можа быць, вы пішаце курс праграма рэгістрацыі, або ядро ​​гандлёвы 288 00:12:37,330 --> 00:12:38,870 інструмент, ці нешта падобнае. 289 00:12:38,870 --> 00:12:42,922 Якія часткі дадзеных, звязаных студэнту, якія прыходзяць на розум? 290 00:12:42,922 --> 00:12:44,880 Як студэнт прадстаўлены з тым, што шануе? 291 00:12:44,880 --> 00:12:45,732 Да? 292 00:12:45,732 --> 00:12:46,940 У вас ёсць імя ў якасці студэнта. 293 00:12:46,940 --> 00:12:48,900 Што яшчэ тыповы студэнт мае? 294 00:12:48,900 --> 00:12:49,320 >> АЎДЫТОРЫЯ: [неразборліва] 295 00:12:49,320 --> 00:12:50,200 >> Дэвід Дж малая: Так, прабачце. 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 Мы маглі б мець праграму так, каб мае, скажам, INT асноўны (пустэчу). 306 00:13:15,670 --> 00:13:18,920 І калі я хачу, каб прадстаўляць студэнт, я мог бы, напрыклад, 307 00:13:18,920 --> 00:13:24,330 радок называецца імя для гэтага студэнта, радок называецца інтэрната для гэтага студэнта, 308 00:13:24,330 --> 00:13:26,900 можа быць, INT называецца ID для гэтага студэнта. 309 00:13:26,900 --> 00:13:30,840 І таму, што я выкарыстоўваю радок, я трэба вярнуцца і паставіць CS50.h. 310 00:13:30,840 --> 00:13:33,300 Можа быць, я буду мець патрэбу ў stdio.h. 311 00:13:33,300 --> 00:13:38,190 Такім чынам, дазвольце мне прэвентыўна рабіць тым, і я буду называць гэтую student.c зараз 312 00:13:38,190 --> 00:13:40,080 і захаваць гэта. 313 00:13:40,080 --> 00:13:44,206 >> І цяпер я магу нешта зрабіць з гэтымі зменнымі. 314 00:13:44,206 --> 00:13:46,830 І мы толькі збіраемся напісаць што ў якасці каментара ў псевдокоде, 315 00:13:46,830 --> 00:13:48,829 таму што гэта не цікава што мы робім цяпер. 316 00:13:48,829 --> 00:13:51,242 ОК, так што гэта праграма, якая то захоўвае студэнта. 317 00:13:51,242 --> 00:13:53,450 Што я хачу рабіць, калі я хочаце захаваць двух студэнтаў? 318 00:13:53,450 --> 00:13:55,991 Так што мой першы інстынкт будзе усё будзе добра, пачакай хвілінку, 319 00:13:55,991 --> 00:14:01,920 калі ў мяне ёсць яшчэ адзін студэнт, чаму не я проста зрабіць імя радкі 2, радок 2 інтэрнаты, 320 00:14:01,920 --> 00:14:04,190 INT id2. 321 00:14:04,190 --> 00:14:06,540 І мы зрабілі сышоў па гэтай дарозе да 322 00:14:06,540 --> 00:14:10,890 і якое ж было наша рашэнне, што, здаецца, каб быць свайго роду хаком пасты капіявання 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 А вы, чалавек, павінны мець адсочваць, што ОК NAME2 адпавядае 329 00:14:22,190 --> 00:14:25,060 з dorm2 адпавядае id2. 330 00:14:25,060 --> 00:14:26,200 Гэта проста становіцца беспарадак. 331 00:14:26,200 --> 00:14:29,350 Так што гэта нашмат прасцей, Нагадаем, з некалькі тыдняў таму, 332 00:14:29,350 --> 00:14:34,300 проста таго, каб званых імёны радкоў і, магчыма, даць нам тры з іх. 333 00:14:34,300 --> 00:14:36,940 І тады, можа быць, у нас ёсць радок інтэрната і ёсць 334 00:14:36,940 --> 00:14:41,900 тры з іх, або з канстантай, Int ідэнтыфікатары і маюць тры з іх. 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 Студэнт імя і інтэрнаты і ID. 339 00:14:52,790 --> 00:14:59,814 >> Чаму я не магу проста абвясціць зменную называецца студэнтам і называюць гэта S. 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 Я збіраюся ісці наперад і адкрыць structs.h 350 00:15:28,370 --> 00:15:32,299 куды мы ідзем, каб убачыць наступнае вызначэнне студэнта. 351 00:15:32,299 --> 00:15:35,215 Аказваецца - і гэта адна нават прасцей, чым той, з удзелам ідэнтыфікатар 352 00:15:35,215 --> 00:15:36,080 Хвіліну таму. 353 00:15:36,080 --> 00:15:39,120 Калі вы хочаце, каб прыдумаць Ваш хатні тып дадзеных, 354 00:15:39,120 --> 00:15:42,750 і ў дадатак да INT, CHAR і і плаваць і ўсе гэтыя іншыя, якія існуюць, 355 00:15:42,750 --> 00:15:45,810 Вы можаце зрабіць гэта ў літаральным сэнсе пісаць TYPEDEF-структуру, 356 00:15:45,810 --> 00:15:47,880 то некаторыя фігурныя дужкі, усярэдзіне якога вы 357 00:15:47,880 --> 00:15:51,460 спіс зменных, якія вы хочаце звязаць з гэтай новай карыстацкай інфармацыі 358 00:15:51,460 --> 00:15:55,670 увядзіце як імя і інтэрнаце, а затым, пасля фігурных дужках 359 00:15:55,670 --> 00:15:57,860 Вы даць імя для новага тыпу дадзеных. 360 00:15:57,860 --> 00:15:59,220 Так, напрыклад, студэнт. 361 00:15:59,220 --> 00:16:03,247 >> І, што прыемна пра гэта цяпер, што калі мы паглядзім на адпаведны код, 362 00:16:03,247 --> 00:16:05,080 Канвенцыя, у першую за ўсё, гэта паставіць гэта 363 00:16:05,080 --> 00:16:08,230 ў файле то кропка ч, файл загалоўка, які мы не 364 00:16:08,230 --> 00:16:09,780 пачалі выкарыстоўваць сябе занадта шмат. 365 00:16:09,780 --> 00:16:12,120 Але мы збіраемся, каб пачаць выкарыстоўваючы зусім трохі ў цяперашні час. 366 00:16:12,120 --> 00:16:18,650 І тое, што мы можам зрабіць з гэтым, У канчатковым рахунку, у гэтыя некалькі радкоў кода 367 00:16:18,650 --> 00:16:22,130 гэта аб'явіць, што менавіта Тып дадзеных, студэнт. 368 00:16:22,130 --> 00:16:23,230 А цяпер давайце выкарыстоўваць яго. 369 00:16:23,230 --> 00:16:27,274 >> Я збіраюся зараз паглыбляцца ў файл называецца structs1.c. 370 00:16:27,274 --> 00:16:29,440 І давайце паглядзім на некалькі характарыстык тут. 371 00:16:29,440 --> 00:16:32,250 Такім чынам, матэрыял тут з'яўляецца у асноўным знаёмыя, і мы 372 00:16:32,250 --> 00:16:35,040 вярнуцца да таго, што не знаёмыя у хвіліну. 373 00:16:35,040 --> 00:16:39,880 Гэта, вядома, у тым ліку мой уласны Файл загалоўка, які з'яўляецца новым, а таксама, 374 00:16:39,880 --> 00:16:42,580 для Pset 3, дзе акрамя, Нагадаем, у нас ёсць helpers.h. 375 00:16:42,580 --> 00:16:45,150 Такім чынам, вы, магчыма, памятаеце #include helpers.h. 376 00:16:45,150 --> 00:16:49,381 >> Чаму, хоць я выкарыстоўваю цытаты а кутнія дужкі? 377 00:16:49,381 --> 00:16:50,630 Калі я выбіраю паміж імі? 378 00:16:50,630 --> 00:16:52,310 Амаль заўсёды я, здаецца, выкарыстоўваць вуглавыя дужкі. 379 00:16:52,310 --> 00:16:55,040 А потым, раптам на Лінія шэсць я выкарыстоўваю падвойныя двукоссі. 380 00:16:55,040 --> 00:16:55,860 Чаму гэта можа быць? 381 00:16:55,860 --> 00:16:56,700 Да? 382 00:16:56,700 --> 00:16:57,725 >> АЎДЫТОРЫЯ: [неразборліва] 383 00:16:57,725 --> 00:16:59,350 Дэвід Дж малая: Гэта актуальна, што? 384 00:16:59,350 --> 00:17:00,559 АЎДЫТОРЫЯ: Гэта ў IDE. 385 00:17:00,559 --> 00:17:02,475 Дэвід Дж малая: Так, што ў маёй фактычнай IDE. 386 00:17:02,475 --> 00:17:05,690 І давайце не будзем спыняцца на IDE, так як гэта проста інструмент, які я выкарыстоўваю. 387 00:17:05,690 --> 00:17:08,119 Вось у маім току Каталог, у прыватнасці. 388 00:17:08,119 --> 00:17:11,647 Так structs.h мой уласны файл не ўстаноўлены ў IDE, 389 00:17:11,647 --> 00:17:14,480 у самой аперацыйнай сістэме, хутчэй гэта ў маім бягучым каталогу. 390 00:17:14,480 --> 00:17:16,910 Такім чынам, Канвенцыя, калі вы хочаце каб уключыць свой уласны файл загалоўка, 391 00:17:16,910 --> 00:17:18,200 Вы проста выкарыстоўваць двайныя двукоссі. 392 00:17:18,200 --> 00:17:23,290 >> Што мы называем гэтую рэч у лінія 8, наогул кажучы? 393 00:17:23,290 --> 00:17:25,200 Гэта што? 394 00:17:25,200 --> 00:17:28,220 #define то. 395 00:17:28,220 --> 00:17:31,040 Гэта ўяўляе канстанты, праўда? 396 00:17:31,040 --> 00:17:33,140 Калі вы хочаце, каб мець значэнне ў вашай праграме 397 00:17:33,140 --> 00:17:35,110 выкарыстоўваць цэлы кучу раз, гэта 398 00:17:35,110 --> 00:17:39,330 Добрае пагадненне фактар ​​яго, аб'явім яго з хэш-сімвала 399 00:17:39,330 --> 00:17:43,340 вызначыць, то, у адпаведнасці з пагадненнем, усяго верхні рэгістр word-- хоць гэта не 400 00:17:43,340 --> 00:17:45,320 строга неабходным, але гэта пагадненне чалавекам 401 00:17:45,320 --> 00:17:47,210 зарабіць канстанты так што яны выскокваюць 402 00:17:47,210 --> 00:17:50,380 ў вас visually-- прастору і тое значэнне, якое вы хочаце быць 403 00:17:50,380 --> 00:17:52,250 эквівалентна імя, што пастаянныя ст. 404 00:17:52,250 --> 00:17:56,110 Няма коскі, але вы проста вынікае, што малюнак ёсць. 405 00:17:56,110 --> 00:17:57,770 >> Так што я раблю ў гэтай фактычнага кода. 406 00:17:57,770 --> 00:18:00,660 Такім чынам, давайце зірнем на асноўная праграма тут. 407 00:18:00,660 --> 00:18:04,080 У радку 12, таму што я ўключылі structs.h, 408 00:18:04,080 --> 00:18:06,492 Цяпер я чароўна на маю утылізацыя новы тып дадзеных. 409 00:18:06,492 --> 00:18:09,200 Я не проста мець доступ да Int, і сімвал, і паплавок, і радок, 410 00:18:09,200 --> 00:18:10,060 і сіні і іншыя. 411 00:18:10,060 --> 00:18:12,470 Цяпер у мяне ёсць доступ да тып дадзеных студэнтам. 412 00:18:12,470 --> 00:18:17,740 Такім чынам, у радку 12, я аб'яднання дзвюх ideas-- адзін тып дадзеных і два, 413 00:18:17,740 --> 00:18:18,940 з выкарыстаннем масіва. 414 00:18:18,940 --> 00:18:21,700 І так у гэтай праграме, калі Я хачу, каб на самой справе падтрымліваюць 415 00:18:21,700 --> 00:18:24,320 тры розных студэнтаў у маёй праграме, я 416 00:18:24,320 --> 00:18:30,480 можна проста сказаць, дайце мне зменную званыя вучні, кожны з якіх 417 00:18:30,480 --> 00:18:32,970 гэта тыпу студэнтаў, якія мой карыстацкі тып дадзеных. 418 00:18:32,970 --> 00:18:35,890 І, у прыватнасці, даць мне тры з іх у маім масіве. 419 00:18:35,890 --> 00:18:37,750 >> Так што цяпер нам рабіць у гэтай праграме? 420 00:18:37,750 --> 00:18:40,670 Вось толькі для контуру ітэрацыі ад 0 да 3, таму што гэта 421 00:18:40,670 --> 00:18:42,110 тое, што велічыня студэнтаў. 422 00:18:42,110 --> 00:18:44,420 Я проста прапаноўваючы карыстачу даць мне імя студэнта. 423 00:18:44,420 --> 00:18:48,090 І тады ў радку 17, мы ёсць у асноўным знаёмыя радкі. 424 00:18:48,090 --> 00:18:50,370 У нас ёсць стары сябар GetString справа. 425 00:18:50,370 --> 00:18:52,345 І тое, што частка сінтаксісу па-відаць, новы, 426 00:18:52,345 --> 00:18:55,130 калі вы ніколі не праграмавалі ў C, перш чым, і ніколі не выкарыстоўваў структур? 427 00:18:55,130 --> 00:18:55,510 Да? 428 00:18:55,510 --> 00:18:56,417 >> Аўдыторыя: .name. 429 00:18:56,417 --> 00:18:57,500 Дэвід Дж малая: The .name. 430 00:18:57,500 --> 00:19:01,220 Але гэта не занадта шмат скачком, таму што цяпер студэнты дужкі I 431 00:19:01,220 --> 00:19:02,590 дае I-й студэнт. 432 00:19:02,590 --> 00:19:04,730 І калі вы хочаце, каб нырнуць ўнутры гэтай структуры, 433 00:19:04,730 --> 00:19:09,490 вы проста карыстаецеся адзін перыяд і то імя зменнай ўнутры, 434 00:19:09,490 --> 00:19:11,900 або ўласцівасць ўнутры, што Вы хочаце, каб атрымаць доступ да. 435 00:19:11,900 --> 00:19:14,816 Дакладна тое, калі я тады заахвоціць Карыстальнік, дай мне студэнта інтэрнат, 436 00:19:14,816 --> 00:19:18,390 Вы можаце так жа магазін, які радок ў зменнай інтэрната ўнутры 437 00:19:18,390 --> 00:19:19,940 гэтай студэнцкай структуры. 438 00:19:19,940 --> 00:19:21,410 >> А цяпер усё становіцца трохі фантазіі. 439 00:19:21,410 --> 00:19:24,420 І гэта будзе выглядаць на, магчыма, шмат даволі хутка. 440 00:19:24,420 --> 00:19:27,970 Але вы ўбачыце, што гэта значна больш Pset 4, так што давайце проста погляд на яго цяпер. 441 00:19:27,970 --> 00:19:33,364 Аказваецца, што ў радку 23 праз 38, што вы думаеце, што я, магчыма, робіце? 442 00:19:33,364 --> 00:19:35,530 Я зняў каментары на сённяшні дзень, але версія 443 00:19:35,530 --> 00:19:38,660 кода для анлайн- даведнік мае ўсе каментары. 444 00:19:38,660 --> 00:19:40,171 Што я, здаецца, робяць? 445 00:19:40,171 --> 00:19:42,530 >> АЎДЫТОРЫЯ: Захаванне файла з усімі інфармацыя, увайшоў карыстальнік. 446 00:19:42,530 --> 00:19:44,530 >> Дэвід Дж малая: Так, дакладна, гэта новы спосаб 447 00:19:44,530 --> 00:19:46,370 што мы бачым два, Яшчэ адна асаблівасць C, 448 00:19:46,370 --> 00:19:48,700 у выніку чаго я магу стварыць мае ўласныя файлы. 449 00:19:48,700 --> 00:19:51,580 Да гэтага часу, амаль кожная праграма Вы напісалі з'яўляецца асобай без грамадзянства. 450 00:19:51,580 --> 00:19:53,334 Як толькі гэта будзе зроблена працуе, вось і ўсё. 451 00:19:53,334 --> 00:19:55,000 Там няма памяці або ўспамін пра яго. 452 00:19:55,000 --> 00:19:56,110 Там няма файла захоўваецца. 453 00:19:56,110 --> 00:19:58,120 Але калі вы хочаце, каб захаваць ўвод, які мае 454 00:19:58,120 --> 00:20:02,100 адбылося, як у гульні або праграме як гэта, аказваецца, мы можам гэта зрабіць. 455 00:20:02,100 --> 00:20:04,360 І вы ўбачыце, што гэта больш у Pset 4 і ў раздзеле. 456 00:20:04,360 --> 00:20:08,661 Але гэтая лінія 23 па сутнасці стварае файл з імем students.csv. 457 00:20:08,661 --> 00:20:10,160 І вы, магчыма, бачылі гэта раней. 458 00:20:10,160 --> 00:20:14,250 Нават калі вы ніколі не вывучалі CS раней, CSV з'яўляецца падзеленых коскамі зменных. 459 00:20:14,250 --> 00:20:19,000 Гэта як вельмі беднага чалавека версія файла Excel, 460 00:20:19,000 --> 00:20:22,270 што азначае, што яна можа быць адкрыта у Excel і ў Apple, Numbers, 461 00:20:22,270 --> 00:20:23,830 і мае радкоў і слупкоў. 462 00:20:23,830 --> 00:20:26,485 Але гэта не ўласнасць Фармат, як Microsoft або Apple. 463 00:20:26,485 --> 00:20:29,840 Гэта проста коскі, якія падзяляюць каштоўнасці, якія мы бачым у цяперашні час. 464 00:20:29,840 --> 00:20:31,010 >> І толькі зрабіць здагадку. 465 00:20:31,010 --> 00:20:33,480 У радку 23, у самым канец, мой другі аргумент 466 00:20:33,480 --> 00:20:37,700 да гэтай новай функцыі, званай е адкрыты для адкрытага файла з'яўляецца ш. 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 NULL, то аказваецца, спецыяльнае значэнне, што 479 00:21:02,640 --> 00:21:06,070 могуць быць вернутыя пэўных функцый калі нешта пайшло wrong-- 480 00:21:06,070 --> 00:21:08,490 калі файл не існуе, калі вы запусціце з памяці, 481 00:21:08,490 --> 00:21:09,620 або куча іншых памылак. 482 00:21:09,620 --> 00:21:13,470 Але цяпер, давайце выкажам здагадку, што гэта проста звычайны праверка памылак. 483 00:21:13,470 --> 00:21:17,090 Тут, у лініі 26, я ітэрацыі ад 0 да 3 на працягу ўсіх маіх студэнтаў. 484 00:21:17,090 --> 00:21:20,470 І гэта свайго роду роду новай функцыі, fprintf, 485 00:21:20,470 --> 00:21:21,460 але проста ўзяць здагадку. 486 00:21:21,460 --> 00:21:24,370 Калі Printf проста раздрукаваць адфарматаваную радок, 487 00:21:24,370 --> 00:21:26,507 Што ж fprintf, верагодна, азначае? 488 00:21:26,507 --> 00:21:27,590 АЎДЫТОРЫЯ: Друк у файл. 489 00:21:27,590 --> 00:21:29,290 Дэвід Дж малая: Раздрукуйце адфарматаваць радок у файле. 490 00:21:29,290 --> 00:21:31,180 Гэта тое, што дадатковыя е сродкі файлаў. 491 00:21:31,180 --> 00:21:36,420 І новы першы аргумент павінен быць пераменная, якая ўяўляе файл. 492 00:21:36,420 --> 00:21:38,866 Тады мы проста павінны фармат радок, як Printf. 493 00:21:38,866 --> 00:21:40,740 І нават калі гэта Сінтаксіс з'яўляецца новым, гэта толькі 494 00:21:40,740 --> 00:21:44,610 сродкі падключыць імя студэнта, убудова ў студэнцкіх інтэрнатах, а затым 495 00:21:44,610 --> 00:21:47,160 з fclose, зачыніць файл. 496 00:21:47,160 --> 00:21:49,730 А потым lastly-- гэта новы і мы вернемся да гэтага 497 00:21:49,730 --> 00:21:53,240 Перад long-- Я вызваляючы студэнт па прычынах 498 00:21:53,240 --> 00:21:54,860 што здарылася наверсе там. 499 00:21:54,860 --> 00:21:56,820 Але мы вернемся каб што да long-- 500 00:21:56,820 --> 00:21:59,820 гэта таму, што, як гэта GetString на самай справе працуе пад капотам. 501 00:21:59,820 --> 00:22:01,280 >> Такім чынам, давайце зірнем тут. 502 00:22:01,280 --> 00:22:04,380 Калі я друкую Ls ў маім каталогу, заўважыць, што я не 503 00:22:04,380 --> 00:22:09,360 ёсць файл з імем students.csv, проста не існуе, не існуе. 504 00:22:09,360 --> 00:22:14,965 Так што, калі цяпер я скампіляваць гэтую праграму, зрабіць Структуры 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 І давайце прыдумаць, дзе гэта, я думаю, Марыя знаходзіцца ў Mather, 508 00:22:33,760 --> 00:22:35,100 калі я правільна ўспомніў. 509 00:22:35,100 --> 00:22:36,460 >> Так што нічога, здаецца, не адбудзецца. 510 00:22:36,460 --> 00:22:40,680 Але калі я тыпу Ls зараз, ёсць students.csv. 511 00:22:40,680 --> 00:22:43,080 Давайце ісці наперад і адкрыты students.csv. 512 00:22:43,080 --> 00:22:46,050 Гэта зноў вельмі лёгкі фармат. 513 00:22:46,050 --> 00:22:49,570 Але я проста прыняла канвенцыю што ў мяне ёсць два радкоў і слупкоў тут. 514 00:22:49,570 --> 00:22:52,020 У першай калонцы Першыя імёны людзей. 515 00:22:52,020 --> 00:22:55,740 Другі слупок навучэнца інтэрната, або каледж, або дом, ці яшчэ шмат чаго. 516 00:22:55,740 --> 00:22:57,900 І зараз я захаваў гэта на пастаяннай аснове ў выглядзе файла. 517 00:22:57,900 --> 00:22:59,280 >> Так што гэта не ўсё, што цікава. 518 00:22:59,280 --> 00:23:02,980 Але гэта ўсяго толькі прыступкай у цяперашні час каб быць у стане захавання інфармацыі 519 00:23:02,980 --> 00:23:04,040 пастаянна. 520 00:23:04,040 --> 00:23:08,340 Такім чынам, давайце зараз паглядзім, што яшчэ мы можам рабіць з гэтымі і іншымі функцыямі. 521 00:23:08,340 --> 00:23:10,729 Але спачатку, якія-небудзь пытанні? 522 00:23:10,729 --> 00:23:12,145 Гэта было шмат, і гэта было хутка. 523 00:23:12,145 --> 00:23:16,131 Але вы ўбачыце шмат больш Pset 4, а таксама. 524 00:23:16,131 --> 00:23:16,630 Да? 525 00:23:16,630 --> 00:23:19,360 >> АЎДЫТОРЫЯ: Ці ёсць спосаб, каб працягнуць даданне імёнаў у гэты файл? 526 00:23:19,360 --> 00:23:19,880 >> Дэвід Дж малая: Добры пытанне. 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 Вы б выкарыстоўваць цытату канец цытаты "а" для Append, 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 базы дадзеных. 545 00:23:55,350 --> 00:23:58,220 >> Цяпер CSV карысна, шчыра кажучы, нават для, як, калі вы writing-- 546 00:23:58,220 --> 00:24:00,100 і мы ў канчатковым выніку бачым гэта пазней у семестр, калі 547 00:24:00,100 --> 00:24:01,455 мы выкарыстоўваем тамоў CSV для іншых мэтаў. 548 00:24:01,455 --> 00:24:04,920 Калі вы хочаце захаваць ўсіх людзей хто зарэгістраваўся для якога-небудзь падзеі, 549 00:24:04,920 --> 00:24:07,420 або зарэгістраваліся для студэнта група ці нешта падобнае, 550 00:24:07,420 --> 00:24:10,330 захоўвання дадзеных у гэтым родзе фармату супер зручна. 551 00:24:10,330 --> 00:24:12,580 Таму што літаральна, калі б я былі ўкласці менавіта гэты файл. 552 00:24:12,580 --> 00:24:14,540 Я мог бы і double-- давайце на самой справе спрабуюць гэта 553 00:24:14,540 --> 00:24:16,720 калі ў мяне ёсць Excel або Numbers тут. 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 Download-- я збіраюся спампаваць усе файлы вось так 559 00:24:32,694 --> 00:24:33,860 толькі так я магу захапіць гэты. 560 00:24:33,860 --> 00:24:37,850 І давайце паглядзім, калі гэта працуе students.csv-- першы раз 561 00:24:37,850 --> 00:24:39,310 Я актываваў. 562 00:24:39,310 --> 00:24:41,360 Цяпер яны хочуць, каб убачыць мае кантакты. 563 00:24:41,360 --> 00:24:44,310 Цяпер, мне трэба, каб зарэгістравацца. 564 00:24:44,310 --> 00:24:47,620 Паглядзіце, як лёгка гэта выкарыстоўваць тамоў CSV? 565 00:24:47,620 --> 00:24:50,840 Так, трымаць яго ў курсе. 566 00:24:50,840 --> 00:24:52,375 Добра, зараз мы гатовыя да класа. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 ОК, ну, што новага? 569 00:25:00,370 --> 00:25:02,920 ОК, блізка. 570 00:25:02,920 --> 00:25:04,750 Гэта было чароўна. 571 00:25:04,750 --> 00:25:07,280 Добра, зараз у нас ёсць, каб абнавіць. 572 00:25:07,280 --> 00:25:10,890 І зараз, гэта забыўся, што падаць Першапачаткова я адкрыў, 573 00:25:10,890 --> 00:25:13,090 але тое, што A-- мы ідзем. 574 00:25:13,090 --> 00:25:16,341 ОК, так што цяпер у нас ёсць файл Excel. 575 00:25:16,341 --> 00:25:18,290 Дзякуй. 576 00:25:18,290 --> 00:25:20,764 >> ОК, так што тое, што я рабіў, было лёгка. 577 00:25:20,764 --> 00:25:23,930 Вядома, я мог бы загадзя ўсталяваныя Excel, або лікаў, або тое, што праграма. 578 00:25:23,930 --> 00:25:25,846 Але гэта добра, таму што Цяпер я магу маніпуляваць 579 00:25:25,846 --> 00:25:28,090 Дадзеныя ў стандартным фармаце. 580 00:25:28,090 --> 00:25:30,294 >> Так што цяпер давайце кантэкст перайсці да дзе мы спыніліся 581 00:25:30,294 --> 00:25:32,710 у мінулы раз, які быў пачаць зняць навучальныя колы. 582 00:25:32,710 --> 00:25:34,543 Але спачатку, вы не зрабілі паглядзець раней абед 583 00:25:34,543 --> 00:25:38,150 адбываецца зноў тут Агню і Лёд у Кембрыджы, сітары ў Нью-Хейвене. 584 00:25:38,150 --> 00:25:43,150 Зарэгістравацца на сайце CS50s як мага хутчэй далучыцца да студэнтаў і супрацоўнікам CS50. 585 00:25:43,150 --> 00:25:46,090 >> Таму мы прынялі навучальныя дыскі у панядзелак, як follows-- 586 00:25:46,090 --> 00:25:49,120 Радок быў абвешчаны ў Бібліятэка CS50s на працягу некаторага часу. 587 00:25:49,120 --> 00:25:52,650 І гэта добра, таму што гэта дазваляе нам казаць аб зменных як 588 00:25:52,650 --> 00:25:54,660 поўных слоў і прапаноў і многае іншае. 589 00:25:54,660 --> 00:25:56,710 Але, аказваецца, радок не існуе. 590 00:25:56,710 --> 00:26:00,200 Гэта проста сінонімам, або псеўданім, што мы стварылі за тое, што 591 00:26:00,200 --> 00:26:03,780 на самай справе трохі больш тэхнічная называецца сімвал *. 592 00:26:03,780 --> 00:26:07,900 >> І на самай справе, мы бачылі прыклад праграмы на панядзелак 593 00:26:07,900 --> 00:26:11,200 што не вядуць сябе зусім, як мы чакалі. 594 00:26:11,200 --> 00:26:13,630 Гэта быў файл, параўнаць і 0. 595 00:26:13,630 --> 00:26:17,910 І нагадаем, што параўноўваць-0, калі Я перакампіляваць праграму панядзелак 596 00:26:17,910 --> 00:26:22,670 і запусціць параўноўваць-0 і ўвядзіце ў маму у ніжнім рэгістры, і мама ў ніжнім рэгістры зноў. 597 00:26:22,670 --> 00:26:25,320 Праграма настаяў, каб я увядзіце розныя рэчы, 598 00:26:25,320 --> 00:26:29,210 нават калі мама, усё ў у ніжнім рэгістры, ідэнтычны візуальна. 599 00:26:29,210 --> 00:26:31,990 Дык што ж кароткі адказ чаму кампутар лічыць 600 00:26:31,990 --> 00:26:34,500 гэтыя два радкі адрозніваюцца? 601 00:26:34,500 --> 00:26:35,250 Да? 602 00:26:35,250 --> 00:26:36,534 >> АЎДЫТОРЫЯ: [неразборліва] 603 00:26:36,534 --> 00:26:37,450 Дэвід Дж малая: Дакладна. 604 00:26:37,450 --> 00:26:39,600 Так, мама, упершыню Я увядзiце яго ў, у цяперашні час 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 Так fundamentally-- і ў гэтым нізкім узроўні, 630 00:27:44,930 --> 00:27:47,300 калі вы хочаце рэалізаваць праграма для параўнання 631 00:27:47,300 --> 00:27:50,270 два асобных словы, якія карыстач увёў у якасць, 632 00:27:50,270 --> 00:27:53,944 яны выстройваюцца сімвал для сімвал, толькі ў агульных рысах, 633 00:27:53,944 --> 00:27:55,360 тое, што нам трэба зрабіць, па-відаць? 634 00:27:55,360 --> 00:27:57,940 Гэта не дастаткова проста паглядзіце на гэтыя два адрасы. 635 00:27:57,940 --> 00:27:58,860 Што нам трэба рабіць? 636 00:27:58,860 --> 00:27:59,360 Да? 637 00:27:59,360 --> 00:28:01,120 >> АЎДЫТОРЫЯ: перабіраць радок [неразборліва]. 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.c робіць. 650 00:28:28,800 --> 00:28:31,677 Гэта ідэнтычна таго, што мы паглядзеў на панядзелак акрамя таго, што я 651 00:28:31,677 --> 00:28:34,760 пазбавіўся ад слова string-- хоць што не мае ніякага функцыянальнага impact-- ўсе 652 00:28:34,760 --> 00:28:37,450 Я зараз раблю гэта выдаленне некаторыя візуальныя навучальныя дыскі, 653 00:28:37,450 --> 00:28:40,880 але ясна бачыць, што з і Т-адрасы. 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 І на самай справе, GetString, каб быць ясна, не вяртае радок. 661 00:29:03,500 --> 00:29:06,110 Ён не вяртае маме Зваротная касая рыса нуля, як такія. 662 00:29:06,110 --> 00:29:10,005 Што канкрэтна GetString і дакладна вярнуцца? 663 00:29:10,005 --> 00:29:10,880 АЎДЫТОРЫЯ: [неразборліва] 664 00:29:10,880 --> 00:29:14,080 Дэвід Дж малая: адрас, адрас адрас першага сімвала 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 тое, што можа азначаць, калі не вяртае GetString адрас, але Н-У-Л-Л, што зноў-такі, 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 з strings-- якая можа быць з невядомай даўжыні ў advance-- 678 00:29:45,162 --> 00:29:46,870 Магчыма кампутары » з памяці, можа быць, 679 00:29:46,870 --> 00:29:49,280 Вы ўвялі ў такім доўгае слова або прапанову 680 00:29:49,280 --> 00:29:51,880 або ўставіць такую ​​велізарную эсэ там проста не хапае памяці. 681 00:29:51,880 --> 00:29:55,340 І так GetString не можа вярнуцца адрас ўсёй рэчы, 682 00:29:55,340 --> 00:29:56,620 так што проста нічога не вяртае. 683 00:29:56,620 --> 00:30:00,580 І гэта кажа пра памылку адбылося вярнуўшы асаблівае значэнне NULL. 684 00:30:00,580 --> 00:30:02,890 Гэта нулявы адрас, так бы мовіць. 685 00:30:02,890 --> 00:30:06,157 >> Цяпер высвятляецца, З пастаўляецца з Функцыя, якая робіць гэтую ітэрацыю. 686 00:30:06,157 --> 00:30:09,240 Мы не павінны рэалізоўваць гэта з для цыклу або час цыклу самі. 687 00:30:09,240 --> 00:30:11,150 Мы можам выкарыстоўваць функцыю, называецца лаканічна, 688 00:30:11,150 --> 00:30:15,400 змяшаць комп, або радок параўноўваць, чыя Мэта ў жыцці з'яўляецца менавіта гэта і робяць. 689 00:30:15,400 --> 00:30:19,990 Вы даеце яму два паказальніка, два адрасы, і яна будзе ісці па гэтых адрасах 690 00:30:19,990 --> 00:30:23,130 а затым параўнаць ліст для літара ў літару за якасць, 691 00:30:23,130 --> 00:30:26,610 спыняючыся толькі калі тое, што гэта праўда? 692 00:30:26,610 --> 00:30:31,540 Калі інтуітыўна варта змяшаць комп спыніць ітэрацыі, проста каб быць зразумела? 693 00:30:31,540 --> 00:30:35,400 Калі яна трапляе зваротны слеш 0 ў любым Радок, у гэты момант ён можа вырашыць, 694 00:30:35,400 --> 00:30:38,910 мае ўсе адпавядае, або яшчэ не было неадпаведнасць? 695 00:30:38,910 --> 00:30:42,740 >> Такім чынам, калі мы запусцім гэта цяпер і спрабуюць наша маленькая капіталізацыя гульня, 696 00:30:42,740 --> 00:30:49,260 таму пераканайцеся, параўнаць-1, ./compare-1, і увядзіце мама ў ніжнім рэгістры абодва разы. 697 00:30:49,260 --> 00:30:50,560 Цяпер тое ж самае. 698 00:30:50,560 --> 00:30:54,080 І калі я зраблю гэта зноў малыя і вялікія то, магчыма ,. 699 00:30:54,080 --> 00:30:56,720 Цяпер сапраўды адрознівае паміж загалоўнымі і малымі. 700 00:30:56,720 --> 00:31:00,440 Так што не ўсё так складана, ці чароўны, але гэта цяпер вытлумачальны 701 00:31:00,440 --> 00:31:03,140 што адбываецца пад капотам. 702 00:31:03,140 --> 00:31:07,640 >> Так што яшчэ мы можам атрымаць ад гэтага віду ўрока? 703 00:31:07,640 --> 00:31:08,980 Такім чынам, давайце зірнем на гэта. 704 00:31:08,980 --> 00:31:15,380 Я збіраюся ісці наперад і напісаць Хуткі праграмы тут называецца капіявання 0. 705 00:31:15,380 --> 00:31:21,594 А цяпер давайце ісці наперад і фактычна давайце зробім this-- з копіяй 0, 706 00:31:21,594 --> 00:31:23,010 зірнем на тое, што я трапіў сюды. 707 00:31:23,010 --> 00:31:24,712 Я спачатку расказаць карыстачу, што-небудзь сказаць. 708 00:31:24,712 --> 00:31:26,420 Тады я атрымліваю радок і я захаваў яго ў с. 709 00:31:26,420 --> 00:31:29,810 Затым я правяраю, калі ёй роўная роўны NULL, проста вяртае 1. 710 00:31:29,810 --> 00:31:31,590 Так што гэта проста стандартная праверка памылак. 711 00:31:31,590 --> 00:31:33,112 Нічога цікавага не адбылося. 712 00:31:33,112 --> 00:31:36,320 І на самай справе, калі мы пазбавімся ад памылкі праверкі, як гэта выглядае тыдзень 1 кода 713 00:31:36,320 --> 00:31:36,985 на дадзены момант. 714 00:31:36,985 --> 00:31:39,110 Але я пачаў, каб атрымаць крыху лепш пра гэта. 715 00:31:39,110 --> 00:31:43,340 >> Зараз у лініі 16, тыдзень таму, можа быць, нават пару дзён ці гадзін таму, 716 00:31:43,340 --> 00:31:46,720 Вы маглі б сказаць лініі 16 Стварэнне зменнай называецца т 717 00:31:46,720 --> 00:31:48,219 і капіраванне S ў яго. 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 І тое, што мы набралі in-- вось з, а вось 728 00:32:11,640 --> 00:32:15,830 гэта тое, што я набраў у дзесьці ў памяці, мама, а затым зваротны слеш 729 00:32:15,830 --> 00:32:17,840 0, які дадаецца для мяне. 730 00:32:17,840 --> 00:32:23,060 Тое, што я захоўваюцца тут, нагадаем, Гэта ў месцазнаходжанні 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 гэта тое, што ў цяперашні час у с. 732 00:32:24,655 --> 00:32:29,220 Так што, калі ў радку 16, я кажу дайце мне іншай зменнай называецца т і магазін 733 00:32:29,220 --> 00:32:33,590 па меншай кошту з, тое, што атрымлівае захоўваецца тут не будзе мама 734 00:32:33,590 --> 00:32:35,480 а проста лік 1. 735 00:32:35,480 --> 00:32:38,520 >> Так што, калі мы паглядзім наперад у гэтай праграме Цяпер, што адбудзецца? 736 00:32:38,520 --> 00:32:40,690 Так заўважыць, што ёсць гэтая функцыя вы маглі 737 00:32:40,690 --> 00:32:44,410 выкарыстаў гэта некаторы час таму для Цэзара, або Vigenere, або, можа быць, не на ўсіх. 738 00:32:44,410 --> 00:32:48,170 Я сцвярджаю, з майго Printf, я збіраецца атрымаць выгаду капіявання т. 739 00:32:48,170 --> 00:32:51,616 Першы ў лініі 19, хутка разважнасці праверыць, STRLEN правярае даўжыню т. 740 00:32:51,616 --> 00:32:53,740 Таму што я не хачу, каб паспрабуйце скарыстацца нешта 741 00:32:53,740 --> 00:32:55,104 калі няма радка там. 742 00:32:55,104 --> 00:32:57,520 Калі карыстальнік проста націсніце Enter, няма нічога, каб атрымаць выгаду. 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 перайсці да TOUPPER, што калі вы ніколі не бачылі яго, гэта 751 00:33:14,935 --> 00:33:16,980 проста функцыя выгаду ў якасці ўваходных дадзеных. 752 00:33:16,980 --> 00:33:20,240 т кранштэйн нуль азначае даць мне нулявы характар ​​т. 753 00:33:20,240 --> 00:33:22,550 І так, як робіць гэта змена малюнка, каб было ясна? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Што трэба, каб перапісаць ці змяніць па адносінах да S і T і мама 756 00:33:29,160 --> 00:33:30,097 Зваротная касая рыса нуля. 757 00:33:30,097 --> 00:33:31,470 >> АЎДЫТОРЫЯ: [неразборліва] 758 00:33:31,470 --> 00:33:34,030 >> Дэвід Дж малая: Так, так што гэта адно тут проста 759 00:33:34,030 --> 00:33:40,860 неабходна атрымаць змянілася, мэтай якіх выправіць this-- неабходна атрымаць зменены на літары М. 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, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Дазвольце мне ісці наперад і ўвесці у маме ў ніжнім рэгістры. 764 00:33:57,140 --> 00:34:00,140 Звярніце ўвагу, як арыгінальны і копія былі капіталізаваць. 765 00:34:00,140 --> 00:34:00,850 Чаму? 766 00:34:00,850 --> 00:34:04,431 Ну, з т і абодва паказваючы на, калі хочаце, тое ж самае кавалак памяці. 767 00:34:04,431 --> 00:34:06,930 І, шчыра кажучы, гэта становіцца сапраўды uninteresting-- той факт, 768 00:34:06,930 --> 00:34:09,150 што мы выкарыстоўваем адрас нуля тут. 769 00:34:09,150 --> 00:34:11,719 Я маю на ўвазе, я сапраўды не хвалюе, дзе матэрыял у памяці. 770 00:34:11,719 --> 00:34:13,550 На жаль, я пры спробе ачысціць занадта шмат. 771 00:34:13,550 --> 00:34:15,674 Але я сапраўды не хвалюе, дзе рэчы знаходзяцца ў памяці. 772 00:34:15,674 --> 00:34:18,510 І так, сапраўды тое, што праграмісты схільныя думаць аб 773 00:34:18,510 --> 00:34:21,080 з'яўляецца тое, што калі вы кажаце пра адрас, або паказальнік, 774 00:34:21,080 --> 00:34:22,679 хто клапоціцца, дзе яна знаходзіцца ў памяці. 775 00:34:22,679 --> 00:34:24,989 Я не хвалюе, калі гэта ў байт адзін або адзін мільярд. 776 00:34:24,989 --> 00:34:27,920 Я проста ўсё роўна, што гэта пераменная эфектыўна 777 00:34:27,920 --> 00:34:29,620 паказваючы на ​​тое кавалак памяці. 778 00:34:29,620 --> 00:34:33,350 І так з гэтага часу замест каламбур над адвольным адрасах памяці, давайце 779 00:34:33,350 --> 00:34:36,710 проста пачаць маляваць паказальнікі як паказальнікі, як стрэлы. 780 00:34:36,710 --> 00:34:39,340 Так што з і т на самай справе, у адпаведнасці з гэтай праграмай, 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 Замест гэтага мы зрабіць гэта following-- лініі ідэнтычныя, дай мне радок 802 00:35:36,710 --> 00:35:38,340 і называюць гэта S. 803 00:35:38,340 --> 00:35:43,500 Але цяпер давайце паглядзім на адзін з нашых самых складаны, але апошні з-за складанасці 804 00:35:43,500 --> 00:35:47,340 на некаторы час, радок 16 робіць менавіта гэта. 805 00:35:47,340 --> 00:35:49,400 Так што, калі ваш зручны з Карціна, якую мы толькі што drew-- 806 00:35:49,400 --> 00:35:51,790 даць мне новую частку памяці, скапіяваць ўсе ў яе, 807 00:35:51,790 --> 00:35:53,730 давайце паглядзім, як мы пераводзім што код. 808 00:35:53,730 --> 00:35:59,400 >> Так лініі 16, на левым баку, сімвал * т дае мне гэтую скрынку тут. 809 00:35:59,400 --> 00:36:00,230 Гэта ўсё, што ён робіць. 810 00:36:00,230 --> 00:36:03,240 На правай баку, м Alloc, або Таноса, 811 00:36:03,240 --> 00:36:06,480 з'яўляецца вылучэнне памяці, супер фантазіі, загадкавыя спосаб проста кажу 812 00:36:06,480 --> 00:36:07,640 даць мне кавалак памяці. 813 00:36:07,640 --> 00:36:09,290 Колькі памяці трэба? 814 00:36:09,290 --> 00:36:10,910 Ну, гэта свайго роду вялікі выразы. 815 00:36:10,910 --> 00:36:12,570 Але давайце паглядзім, што ён кажа тут. 816 00:36:12,570 --> 00:36:15,940 Так што гэта, вядома, даць мне даўжыню радка з с. 817 00:36:15,940 --> 00:36:19,094 Так, мама гэта павінна быць што? 818 00:36:19,094 --> 00:36:21,010 Так што тры, ці не так? мама трох знакаў. 819 00:36:21,010 --> 00:36:22,830 Вы не палічыць Зваротная касая рыса нуля, калі вы 820 00:36:22,830 --> 00:36:25,960 казаць аб даўжыні радка гэта На самай справе чалавека бачныя літары. 821 00:36:25,960 --> 00:36:28,020 Так мама, так што гэта дае мне 3. 822 00:36:28,020 --> 00:36:31,170 Але пачакайце хвіліну, я зараз, дадаўшы 1. 823 00:36:31,170 --> 00:36:34,861 Чаму я на самой справе хачу, каб вылучыць 4 байта, а не толькі 3? 824 00:36:34,861 --> 00:36:35,360 Да? 825 00:36:35,360 --> 00:36:36,910 >> АЎДЫТОРЫЯ: Для значэння дазорнай? 826 00:36:36,910 --> 00:36:38,951 >> Дэвід Дж малая: Роўна, для гэтага значэння дазорнай. 827 00:36:38,951 --> 00:36:40,840 Для зваротнай касой рысы нулявы, Мне трэба ўсяго 4 байта. 828 00:36:40,840 --> 00:36:42,870 Таму мне трэба даўжыню радкі плюс 1. 829 00:36:42,870 --> 00:36:45,400 А потым проста для добрага measure-- нават калі на гэтай сістэме, 830 00:36:45,400 --> 00:36:49,390 гэта заўсёды будзе 1-- Я кажу памножыць гэта памерам з гольца. 831 00:36:49,390 --> 00:36:51,552 Аказваецца SizeOf гэта аператар у З, 832 00:36:51,552 --> 00:36:53,260 проста кажа вам, у колькасць байт, што гэта 833 00:36:53,260 --> 00:36:54,700 патрабуецца для пэўнага тыпу дадзеных. 834 00:36:54,700 --> 00:36:57,740 Гэта не працуе для масіваў, Як правіла, часам ён робіць. 835 00:36:57,740 --> 00:36:59,210 Але ўвогуле выпадку, няма. 836 00:36:59,210 --> 00:37:02,330 Але ён скажа мне, колькі байтаў, сімвал з'яўляецца, што аказваецца заўсёды 1. 837 00:37:02,330 --> 00:37:04,080 Так што гэта, як множанне на 1. 838 00:37:04,080 --> 00:37:05,900 >> Так супер загадкавыя гледзячы радок кода. 839 00:37:05,900 --> 00:37:09,320 Але ўсё гэта робіць дае мне кавалак памяці. 840 00:37:09,320 --> 00:37:13,590 Але гэта, здаецца, капіраванне нічога ў гэтай памяці? 841 00:37:13,590 --> 00:37:14,560 Пакуль няма. 842 00:37:14,560 --> 00:37:22,040 І так што я на лініі 22, а 23, 24, 25, ну, я проста гэта зрабіць. 843 00:37:22,040 --> 00:37:23,760 І гэта свайго роду старая школа матэрыял у цяперашні час. 844 00:37:23,760 --> 00:37:26,010 Гэта як Pset 2, дзе Вы проста перасоўванне рэчы 845 00:37:26,010 --> 00:37:28,620 вакол у памяці, або, хутчэй, у радках. 846 00:37:28,620 --> 00:37:31,920 >> Так што я ітэрацыі ад 0 да даўжыня радка з. 847 00:37:31,920 --> 00:37:37,820 І я капіявання я-й сімвал у з у я-га сімвала у т. 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 >> Дэвід Дж малая: The адрас першага байта 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 length-- у першую чаргу, я пачынаецца з 0, таму што 883 00:39:17,424 --> 00:39:18,840 гэтай старой школы завесы рэчы. 884 00:39:18,840 --> 00:39:22,400 Так што для прастаты, давайце Выкажам здагадку, што першы радок кода 885 00:39:22,400 --> 00:39:23,760 на самай справе проста гэта, права. 886 00:39:23,760 --> 00:39:26,080 Калі я роўная нуля, дадаўшы нуль да чаго-то, верагодна, 887 00:39:26,080 --> 00:39:27,540 не будзе мець эфекту. 888 00:39:27,540 --> 00:39:28,560 >> Так што гэта выказванне? 889 00:39:28,560 --> 00:39:31,600 Аказваецца, зоркі Аператар у дадзеным кантэксце 890 00:39:31,600 --> 00:39:33,700 гэта разыменовать Аператар, які знаходзіцца ўсяго 891 00:39:33,700 --> 00:39:37,530 мудрагелісты спосаб сказаць перайсці па наступным адрасе. 892 00:39:37,530 --> 00:39:42,080 Так што, калі ёй гэта адрас першага характар ​​гэтага кавалка памяці, 893 00:39:42,080 --> 00:39:43,630 * З сродкам ісці туды. 894 00:39:43,630 --> 00:39:45,630 І таму, што мы намалявалі карціна, такім чынам, 895 00:39:45,630 --> 00:39:47,430 Вы можаце прыняць наступная мадэль псіхічнага. 896 00:39:47,430 --> 00:39:51,030 Калі гэта ёй, а вы кажаце * S * S, накшталт як жолабаў і ўсходаў, 897 00:39:51,030 --> 00:39:54,540 калі вы памятаеце гульню з дзяцінства, гэта як след, што стрэлку і перайсці 898 00:39:54,540 --> 00:39:55,570 па адрасе. 899 00:39:55,570 --> 00:39:57,080 >> * Т тое ж самае. 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 >> Калі ў гэты цыкл, Я працягваю павялічваючы I, 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 У CS будынка знаходзіцца ў 33 Оксфард-стрыт. 914 00:40:36,490 --> 00:40:39,870 Так што, калі вы павінны былі зрабіць 33 Оксфард-стрыт плюс 1, 915 00:40:39,870 --> 00:40:42,870 што прыносіць вам 34 Оксфард Вуліца, то 35 Оксфард-стрыт, 916 00:40:42,870 --> 00:40:46,380 затым 36 Оксфард-стрыт, усе тыя, будынка на самай справе - калі яны існуюць. 917 00:40:46,380 --> 00:40:50,540 І так, што ўсё, што мы робім тут з арыфметыкай паказальніка. 918 00:40:50,540 --> 00:40:53,820 >> Так што гэта супер таямніцай спосаб выразы сябе. 919 00:40:53,820 --> 00:40:56,160 Але ўсё, што адбываецца пад капотам 920 00:40:56,160 --> 00:40:59,330 толькі наступныя адрасы, як пасля карты, калі хочаце, 921 00:40:59,330 --> 00:41:02,692 або пасля стрэлкі як мы намалявалі на экране. 922 00:41:02,692 --> 00:41:04,910 ОК, шмат, каб пераварыць. 923 00:41:04,910 --> 00:41:10,410 Любое пытанне па сінтаксісе, канцэпцыі, паказальнікі, Таноса, і таму падобнае. 924 00:41:10,410 --> 00:41:11,480 Так, тут у першую чаргу. 925 00:41:11,480 --> 00:41:13,755 >> АЎДЫТОРЫЯ: Дык дзе, што кажа * т роўная ToUpper * т, 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 Так ToUpper гэта функцыя што капитализирует паўкокс. 934 00:41:29,770 --> 00:41:30,530 Гэта ўсё. 935 00:41:30,530 --> 00:41:36,740 * Т азначае ісці да first-- перайсці па адрасе ў т. 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 каб ToUpper, вы атрымліваеце назад Сталіца М, дзе вы пакласці яго? 940 00:41:50,040 --> 00:41:52,410 Ты ставіш яго ў тым жа месцы. 941 00:41:52,410 --> 00:41:55,540 І так па гэтай логіцы тых, асноўныя вызначэння, што гэта толькі 942 00:41:55,540 --> 00:41:58,792 загалоўнай першую літару калі вы не ітэрацыі з I або а 943 00:41:58,792 --> 00:42:02,000 цыкл або час цыклу, ён не збіраецца рабіць што-небудзь большае, чым вы спытаеце яго. 944 00:42:02,000 --> 00:42:02,583 Добры пытанне. 945 00:42:02,583 --> 00:42:03,237 Да? 946 00:42:03,237 --> 00:42:05,369 >> АЎДЫТОРЫЯ: Чаму вы карыстаецеся разыменовать метаду, а не 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 Но-- асабліва, калі мы атрымліваем пазней у ходзе ў Pset 5 960 00:42:36,299 --> 00:42:39,340 калі мы рэалізуем гэтую слоўніка, Я ўжо згадваў пару times-- 961 00:42:39,340 --> 00:42:42,300 мы на самай справе клапоцяцца аб адрасы нізкі ўзровень памяці 962 00:42:42,300 --> 00:42:44,140 што мы сапраўды разумеем, тое, што адбываецца. 963 00:42:44,140 --> 00:42:48,300 >> Але цяпер, аказваецца, што гэта радок кода тут квадратныя дужкі 964 00:42:48,300 --> 00:42:49,900 самай справе не існуе. 965 00:42:49,900 --> 00:42:52,230 Яны, што называецца сінтаксічны цукар, які 966 00:42:52,230 --> 00:42:58,390 гэта проста дзіўна халаднавата спосаб сказаць кампілятар пераўтворыць квадратныя дужкі, каб быць 967 00:42:58,390 --> 00:43:00,420 што матэматычнае выраз. 968 00:43:00,420 --> 00:43:02,660 Так што гэта чалавек канвенцыі каб мець магчымасць проста напісаць 969 00:43:02,660 --> 00:43:04,220 гэтыя вельмі зручныя кранштэйны. 970 00:43:04,220 --> 00:43:06,850 Але тое, што кампілятар, ляск, на самай справе робіць любы час 971 00:43:06,850 --> 00:43:10,970 Вы пішаце што выдзелены ў адпаведнасці 24, пад капотам, гэта сапраўды 972 00:43:10,970 --> 00:43:12,330 ператвараючы яго на гэта. 973 00:43:12,330 --> 00:43:16,200 Гэта проста больш прыемным, як чалавек чытаць і пісаць код, як лініі 24. 974 00:43:16,200 --> 00:43:18,530 Але ў рэшце рэшт тых, навучальныя колы занадта адарвацца 975 00:43:18,530 --> 00:43:21,780 калі сваё ўласнае камфорт мацнее. 976 00:43:21,780 --> 00:43:27,240 >> Добра, так ўспомніць тое, што гэта быў свайго роду вялікай праблемай 977 00:43:27,240 --> 00:43:27,807 мы пабеглі ў. 978 00:43:27,807 --> 00:43:30,640 І гэта тое, што выклікала гэтае цэлае блін размова аб паказальнікаў, 979 00:43:30,640 --> 00:43:32,340 і адрасы, і капіраванне рэчы. 980 00:43:32,340 --> 00:43:35,410 Гэта таму, што мы спатыкнуўся гэта глупства, дурное пытанне, у выніку чаго 981 00:43:35,410 --> 00:43:38,830 Я рэалізаваў logically-- з Ларэн тут, на дэма і апельсінавага соку 982 00:43:38,830 --> 00:43:43,770 у milk-- цалкам алгарытмічных правільная функцыя 983 00:43:43,770 --> 00:43:47,010 для перапампоўкі дзве зменныя " значэння, але рыса 984 00:43:47,010 --> 00:43:50,550 не мае якога-небудзь пастаянныя або пастаянны, эфект на мой код. 985 00:43:50,550 --> 00:43:51,820 >> І чаму? 986 00:43:51,820 --> 00:43:54,650 У двух словах, чаму гэта Рэалізацыя абмену 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 адбываецца пад hood-- калі гэта памяць кампутара, 1002 00:44:28,570 --> 00:44:31,650 і тут ёсць кавалак памяць выкарыстоўваецца для асноўнай, 1003 00:44:31,650 --> 00:44:34,020 гэта кавалак памяць выкарыстоўваецца для абмену, 1004 00:44:34,020 --> 00:44:37,090 і таму, нават калі асноўная мае дзве зменныя х і у, 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 ад таго, INT ў ў дрэнна Версія для INT зорак, а, бы, 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 Таму той факт, што я кажучы INT зоркі сродкі 1039 00:46:12,520 --> 00:46:15,440 гэта адрас цэлы лік, у прыватнасці. 1040 00:46:15,440 --> 00:46:19,120 >> Так што цяпер заўважыць у радкоў кода, нешта яшчэ занадта змянілася. 1041 00:46:19,120 --> 00:46:22,770 TMP застаецца нязменным, паколькі гэта проста часовае цэлае, 1042 00:46:22,770 --> 00:46:24,110 няма чароўнай памяці там. 1043 00:46:24,110 --> 00:46:26,370 Але ў цяперашні час мае патрэбу ў зорку. 1044 00:46:26,370 --> 00:46:28,560 І, на самай справе, кожны іншы любое а і Ь, 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 У swap.c літаральна скапіяваныя і ўставіць зялёны версіі. 1072 00:47:56,610 --> 00:47:58,450 Але мне трэба, каб зрабіць адно змяненне. 1073 00:47:58,450 --> 00:48:00,180 Гэта не дастаткова проста змяніць падпампоўкі. 1074 00:48:00,180 --> 00:48:03,830 Якія іншыя радкі кода мне трэба змяніць? 1075 00:48:03,830 --> 00:48:04,330 Да? 1076 00:48:04,330 --> 00:48:05,770 >> АЎДЫТОРЫЯ: Дзе ён прымае аргументы. 1077 00:48:05,770 --> 00:48:07,603 >> Дэвід Дж малая: Дзе ён прымае аргумент. 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 І аказваецца, сімвал што аўтары абралі C 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 гэта высвятляе для вас, што адрас X, 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 TF ўзяў гэтую карціну ў год ці два таму. 1092 00:48:46,920 --> 00:48:49,190 Так што гэта яшчэ кут Эліота сталовай. 1093 00:48:49,190 --> 00:48:52,310 Паказальнікі з'яўляюцца, бадай, самая цяжкая тэма, што мы разгледзім у CS50. 1094 00:48:52,310 --> 00:48:54,810 Так што, калі вы турбуецеся выгляд нахілу, як можа быць, гэта 1095 00:48:54,810 --> 00:48:56,770 больш хакейнай клюшкі як гэта, разумею, 1096 00:48:56,770 --> 00:49:00,160 мы накшталт набліжаецца пік Умовы канцэптуальнай складанасці. 1097 00:49:00,160 --> 00:49:02,300 >> І я выхоўваю гэта фота, таму што я клянуся, 1098 00:49:02,300 --> 00:49:05,920 богу, восенню 1996 года, калі я ўзяў CS50 з маёй выкладчыцкай хлопец, 1099 00:49:05,920 --> 00:49:09,620 Нишат Мехта, ён пасадзіў мяне ў кут Эліёт Д. Хол за абедам, 1100 00:49:09,620 --> 00:49:12,330 ці вячэру, ці нешта, каб паспрабаваць каб дапамагчы мне зразумець паказальнікі. 1101 00:49:12,330 --> 00:49:16,520 І гэта, дзе я быў тыдняў пасля яна была ўведзена ў лекцыі калі гэта 1102 00:49:16,520 --> 00:49:18,170 Я, нарэшце, зразумеў паказальнікі. 1103 00:49:18,170 --> 00:49:20,590 І я спадзяюся, што гэта прыціснуць значна раней для вас. 1104 00:49:20,590 --> 00:49:23,540 Але разумею, што гэта абсалютна сярод больш складаныя тэмы 1105 00:49:23,540 --> 00:49:24,420 мы глядзелі на. 1106 00:49:24,420 --> 00:49:25,819 Але гэта адным з самых магутных. 1107 00:49:25,819 --> 00:49:28,860 І калі вы атрымаеце яго, гэта сапраўды ўсё проста хачу, каб, нарэшце, прыйсці разам. 1108 00:49:28,860 --> 00:49:31,460 Так будзьце ўпэўненыя, гэта не трэба ўсяго ракавінай ў сённяшні дзень. 1109 00:49:31,460 --> 00:49:32,980 >> Дык вось апошняя праграма мы будзем глядзець на. 1110 00:49:32,980 --> 00:49:35,605 І мы збіраемся, каб скончыць з хуткія тры хвіліны claymation 1111 00:49:35,605 --> 00:49:37,030 зрабіў наш сябар, Нік Parlante. 1112 00:49:37,030 --> 00:49:41,440 Вось праграма, што на двух верхніх Лініі аб'яўляе зменную х і у. 1113 00:49:41,440 --> 00:49:44,780 Абодва з якіх з'яўляюцца адрасы цэлых лікаў, AKA паказальнікі. 1114 00:49:44,780 --> 00:49:48,125 Мы тады вылучыць дастаткова памяць для захоўвання Int 1115 00:49:48,125 --> 00:49:51,344 і захоўваць адрас гэтай памяці ў х. 1116 00:49:51,344 --> 00:49:53,260 Такім чынам, гэта яшчэ прасцей Напрыклад, чым раней. 1117 00:49:53,260 --> 00:49:56,100 Дайце мне чатыры байта памяці, гэта памер з Int, 1118 00:49:56,100 --> 00:49:58,000 і паставіць гэты адрас у х. 1119 00:49:58,000 --> 00:50:01,070 Гэтая лінія азначае тут перайсці па адрасе у х 1120 00:50:01,070 --> 00:50:05,270 і паставіць значэнне жыццё, лік 42 ёсць. 1121 00:50:05,270 --> 00:50:07,710 Але гэтая лінія мяне турбуе. 1122 00:50:07,710 --> 00:50:12,620 Зорка ў сродкі ідуць на адрас у у, і паставіць там нешчаслівае лік 13. 1123 00:50:12,620 --> 00:50:15,780 Чаму гэта небяспечна, у гэтай кропцы у story-- хоць хутка сказаў 1124 00:50:15,780 --> 00:50:17,980 у нашых слабее хвілін here-- чаму гэта дрэнна 1125 00:50:17,980 --> 00:50:19,660 для мяне, каб сказаць, перайсці па адрасе ў г.? 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 Рэчы, якія яны паказваюць на гэта называецца pointees і ўстаноўка іх 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 У pointees асобна. 1150 00:51:05,730 --> 00:51:08,310 Такім чынам, як вы вылучыць pointee? 1151 00:51:08,310 --> 00:51:11,960 >> -Добра, А гэты код вылучае новая лік pointee, 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 у яго pointee. 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 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> Эй, паглядзіце там ідзе. 1163 00:51:39,140 --> 00:51:43,980 Так, робячы разнаймення на х наступным стрэлка, каб атрымаць доступ да яго pointee. 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 у гэта добрая ідэя, таму што ўстаноўка уверх па pointee асобны крок. 1173 00:52:10,850 --> 00:52:12,480 І я не думаю, што мы калі-небудзь рабілі гэта. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Добры момант. 1175 00:52:14,620 --> 00:52:19,810 >> -Так, Мы выдзелілі паказальнік, у, але мы ніколі не ставілі яго, каб паказаць на pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Вельмі назіральныя. 1177 00:52:21,590 --> 00:52:23,215 Эй, вы шукаеце там добра, Бинки. 1178 00:52:23,215 --> 00:52:26,390 Вы можаце гэта выправіць, так што ў пункту да таго ж, як pointee х. 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 >> Не, гэта не датычыцца pointees. 1182 00:52:33,790 --> 00:52:35,840 Гэта проста мяняе адзін паказальнік каб паказаць на тое ж самае thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [Воплескамі] 1184 00:52:36,465 --> 00:52:37,450 --as іншы. 1185 00:52:37,450 --> 00:52:38,440 >> -О, Я бачу. 1186 00:52:38,440 --> 00:52:41,200 Цяпер у паказвае на тое ж месца, што і х. 1187 00:52:41,200 --> 00:52:42,950 Так, пачакайце, зараз у фіксавана. 1188 00:52:42,950 --> 00:52:44,110 Ён мае pointee. 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 І таму, што паказальнікі дзеляцца што адной pointee, яны абодва ўбачыць 13. 1194 00:52:57,900 --> 00:52:59,952 >> -Так, Абмен, э-э, што заўгодна. 1195 00:52:59,952 --> 00:53:01,535 Так, мы збіраемся, каб памяняцца месцамі цяпер? 1196 00:53:01,535 --> 00:53:03,730 >> -ай, Глядзіце, мы па-за часам. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -Проста Памятаеце тры правілы паказальнік. 1199 00:53:06,520 --> 00:53:09,550 Колькасць 1, базавая структура з'яўляецца тое, што ў вас ёсць паказальнік, 1200 00:53:09,550 --> 00:53:11,630 і паказвае на больш pointee. 1201 00:53:11,630 --> 00:53:13,740 Але паказальнік і pointee асобна. 1202 00:53:13,740 --> 00:53:15,620 І агульная памылка з'яўляецца стварэнне паказальнік 1203 00:53:15,620 --> 00:53:18,000 але забудзьцеся даць яму pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Нумар 2, паказальнік разнаймення пачынаецца з паказальнікам 1205 00:53:21,170 --> 00:53:24,020 і варта яго стрэлку над каб атрымаць доступ да яго pointee. 1206 00:53:24,020 --> 00:53:27,815 Як мы ўсе ведаем, гэта працуе толькі, калі ёсць з'яўляецца pointee, які выгляд атрымлівае назад 1207 00:53:27,815 --> 00:53:29,260 правіць нумар 1. 1208 00:53:29,260 --> 00:53:31,990 >> Нумар 3, паказальнік прысвойванне аднаго паказальніка 1209 00:53:31,990 --> 00:53:35,330 і змяняе яго, каб паказаць на жа, як pointee іншы паказальнік. 1210 00:53:35,330 --> 00:53:37,150 Такім чынам, пасля заданні, два паказальнікі 1211 00:53:37,150 --> 00:53:40,927 будзе паказваць на той жа pointee, часам, што называецца сумеснае. 1212 00:53:40,927 --> 00:53:42,510 І гэта ўсё, што ёсць у ім, на самай справе. 1213 00:53:42,510 --> 00:53:43,130 Да пабачэння ў цяперашні час. 1214 00:53:43,130 --> 00:53:43,475 >> [КАНЕЦ ПРАГЛЯДУ] 1215 00:53:43,475 --> 00:53:44,830 >> Дэвід Дж малая: Вось гэта для CS50. 1216 00:53:44,830 --> 00:53:46,246 Дзякуючы прафесару Нік Parlante. 1217 00:53:46,246 --> 00:53:47,730 Мы будзем бачыць Вас на наступным тыдні. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [Электронны прайгравання музыкі] 1220 00:53:56,435 --> 00:57:22,775