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 >> -Подожди. 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 -Стоп. 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 -Стоп. 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 >> -Усилить. 80 00:02:32,560 --> 00:02:33,100 >> -Усилить. 81 00:02:33,100 --> 00:02:33,600 >> -Усилить. 82 00:02:33,600 --> 00:02:34,960 -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 Так, мама, впервые Я введите его в, в настоящее время 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 >> -Но-- 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