1 00:00:00,000 --> 00:00:02,395 >> [Играет музыка] 2 00:00:02,395 --> 00:00:05,750 3 00:00:05,750 --> 00:00:06,506 >> ДАГ Lloyd: ОК. 4 00:00:06,506 --> 00:00:08,880 Мы работали с целыми числами, мы работали с персонажами, 5 00:00:08,880 --> 00:00:11,930 мы работали поплавки, удваивается, строки и Bools. 6 00:00:11,930 --> 00:00:14,870 Мы исчерпали почти все из [неразборчиво] типов, 7 00:00:14,870 --> 00:00:17,100 были доступны для всех нас вместе. 8 00:00:17,100 --> 00:00:19,430 Но теперь мы хотим сделать что-то еще. 9 00:00:19,430 --> 00:00:20,210 Как мы это делаем? 10 00:00:20,210 --> 00:00:22,560 Как создать различные типы данных? 11 00:00:22,560 --> 00:00:26,130 Мы можем сделать это с помощью структур. 12 00:00:26,130 --> 00:00:30,180 Так структуры позволяют унифицировать переменные различных типов 13 00:00:30,180 --> 00:00:34,810 в один новый тип переменной, которые мы можем назначить свое имя типа. 14 00:00:34,810 --> 00:00:37,570 Это действительно сильный вещь, чтобы быть в состоянии сделать, 15 00:00:37,570 --> 00:00:40,900 потому что теперь мы можем группа элементы разных типов данных 16 00:00:40,900 --> 00:00:43,910 вместе, которые имеют логическую связь. 17 00:00:43,910 --> 00:00:46,440 Мы были в состоянии это сделать с массивами рода, верно? 18 00:00:46,440 --> 00:00:49,540 Мы можем групповые переменные того же типа данных 19 00:00:49,540 --> 00:00:53,410 вместе в большом блоке памяти, массива. 20 00:00:53,410 --> 00:00:56,660 >> Но мы не в состоянии смешать до различных типов данных вместе. 21 00:00:56,660 --> 00:01:02,610 Мы не можем, скажем, пару целое, и характер, и двойной все 22 00:01:02,610 --> 00:01:05,330 в то же самое и называем это единое целое. 23 00:01:05,330 --> 00:01:08,830 Но структуры, или часто упоминается как структур, 24 00:01:08,830 --> 00:01:09,585 мы на самом деле можем. 25 00:01:09,585 --> 00:01:12,370 Таким образом, структура является своего рода из себя супер переменной. 26 00:01:12,370 --> 00:01:16,530 Это переменная, которая содержит другие переменные внутри него. 27 00:01:16,530 --> 00:01:19,650 Так вот пример очень простая структура. 28 00:01:19,650 --> 00:01:23,380 Это то, что синтаксис будет выглядеть бы создать структуру для автомобиля. 29 00:01:23,380 --> 00:01:25,250 Теперь, давайте пройти через синтаксис здесь. 30 00:01:25,250 --> 00:01:27,400 Структура,, что это Ключевое слово, которое указывает, 31 00:01:27,400 --> 00:01:30,270 что я создаю новый тип данных здесь. 32 00:01:30,270 --> 00:01:33,860 В частности, имя типа данных является будет структура автомобиля, как мы увидим. 33 00:01:33,860 --> 00:01:36,640 Но это своего рода наконечником от компилятору, что это 34 00:01:36,640 --> 00:01:42,440 как группа переменных, что происходит следует рассматривать как часть одного и того же типа 35 00:01:42,440 --> 00:01:44,010 в минуту. 36 00:01:44,010 --> 00:01:46,340 >> Автомобили, просто название структуры. 37 00:01:46,340 --> 00:01:50,590 Опять же, тип данных здесь будет быть структура автомобиля, а не только автомобиль. 38 00:01:50,590 --> 00:01:53,060 Но если у вас есть different-- если вы создаете несколько структур 39 00:01:53,060 --> 00:01:56,950 в той же программе, что вам нужно различать структуры и структуры. 40 00:01:56,950 --> 00:02:00,140 Так структура автомобиля, я мог бы также структура студент, например, 41 00:02:00,140 --> 00:02:01,790 в той же программе. 42 00:02:01,790 --> 00:02:05,980 Внутри фигурных скобках являются все так называемые поля, 43 00:02:05,980 --> 00:02:07,954 или члены структуры. 44 00:02:07,954 --> 00:02:10,370 Так что некоторые из вещей, что присущи в автомобиле? 45 00:02:10,370 --> 00:02:15,270 Ну, это, как правило, имеет году, имя модели и номерной знак, 46 00:02:15,270 --> 00:02:18,000 одометр, что, как правило, имеет некоторое количество миль на этом, 47 00:02:18,000 --> 00:02:19,225 и может быть, объем двигателя. 48 00:02:19,225 --> 00:02:23,570 И, как вы видите, я смешивая целые и символы и парном разряде. 49 00:02:23,570 --> 00:02:26,420 Они все будет часть этого нового типа данных. 50 00:02:26,420 --> 00:02:29,750 >> Наконец, последнее, что мне нужно сделать, не забудьте эту маленькую точку с запятой 51 00:02:29,750 --> 00:02:30,290 в конце. 52 00:02:30,290 --> 00:02:34,380 После мы закончим, определяющий структуру, мы должны поставить точку с запятой в конце. 53 00:02:34,380 --> 00:02:37,325 Это очень распространенная синтаксический ошибка, потому что с функцией, 54 00:02:37,325 --> 00:02:40,200 Например, вы бы просто открыт фигурная скобка, недалеко фигурная скобка. 55 00:02:40,200 --> 00:02:42,950 Вы не ставите точку с запятой в конец определения функции. 56 00:02:42,950 --> 00:02:46,430 Это выглядит как функции определение, но это не так, 57 00:02:46,430 --> 00:02:49,653 и так как точка с запятой есть это просто напоминание, что вам 58 00:02:49,653 --> 00:02:52,440 нужно поставить его там, потому что компилятор будет в противном случае не 59 00:02:52,440 --> 00:02:53,510 знаю, что с ним делать. 60 00:02:53,510 --> 00:02:56,160 Это очень распространенная ошибка случайно сделать 61 00:02:56,160 --> 00:02:58,570 когда вы в первую очередь определение структуры. 62 00:02:58,570 --> 00:02:59,500 >> ХОРОШО. 63 00:02:59,500 --> 00:03:02,824 Таким образом, мы, как правило, определяют наши структуры на самом верху наших программ 64 00:03:02,824 --> 00:03:05,490 потому что они, вероятно, будет для использования нескольких функций. 65 00:03:05,490 --> 00:03:08,850 Мы не хотим, чтобы определить Struct внутри функции, 66 00:03:08,850 --> 00:03:12,110 потому что тогда мы можем only-- Сфера структуры действительно 67 00:03:12,110 --> 00:03:13,790 существует только внутри этой функции. 68 00:03:13,790 --> 00:03:17,450 Мы, вероятно, хотите, чтобы определить структуру поэтому мы можем использовать его в нескольких функций, 69 00:03:17,450 --> 00:03:20,670 или, возможно, в нескольких файлы, которые связаны друг с другом 70 00:03:20,670 --> 00:03:22,920 чтобы создать нашу единую программу. 71 00:03:22,920 --> 00:03:24,920 Иногда также вместо определения структуры 72 00:03:24,920 --> 00:03:27,961 на самом верху, где вы кладете фунт включает в себя и ваш фунт определяет, 73 00:03:27,961 --> 00:03:32,080 Например, вы могли бы поставить их в отдельных точек ч файлы, которые вы затем 74 00:03:32,080 --> 00:03:35,020 фунт включить себя. 75 00:03:35,020 --> 00:03:37,620 >> Итак, мы имеем структуры, но теперь мы должны попасть внутрь них. 76 00:03:37,620 --> 00:03:39,800 Как мы попасть внутрь структура доступа 77 00:03:39,800 --> 00:03:43,530 эти суб-переменные, эти переменные что существуют внутри структуры? 78 00:03:43,530 --> 00:03:46,810 Ну, у нас есть то, что называется оператор точка, которая позволяет нам 79 00:03:46,810 --> 00:03:50,990 доступ к полям структуры. 80 00:03:50,990 --> 00:03:55,490 Так, например, скажем, я объявил мои данные структуры типа где-то 81 00:03:55,490 --> 00:03:59,020 в верхней части моей программы, или, возможно, в точка ч файл, что я фунт включены. 82 00:03:59,020 --> 00:04:03,360 Если я хочу, то для создания новой переменная этого типа данных, я могу сказать 83 00:04:03,360 --> 00:04:06,260 структура автомобиля, моя машина, точка с запятой. 84 00:04:06,260 --> 00:04:11,580 Так же, как я мог бы сказать Int х, или имя строки точка с запятой. 85 00:04:11,580 --> 00:04:18,100 >> Тип данных здесь структура автомобиля, имя переменной моя машина, 86 00:04:18,100 --> 00:04:23,770 и тогда я могу использовать точечную оператору доступ к различным поля моего автомобиля. 87 00:04:23,770 --> 00:04:27,494 Поэтому я могу сказать мой автомобиль точка году равен 2011. 88 00:04:27,494 --> 00:04:28,410 Это прекрасно. 89 00:04:28,410 --> 00:04:34,210 Год, если вы помните, был определен как целочисленное поле внутри этой структуры автомобиля 90 00:04:34,210 --> 00:04:35,200 тип данных. 91 00:04:35,200 --> 00:04:39,966 Таким образом, любой переменная данных структура автомобиля тип, например, моей машине, я могу сказать, мой автомобиль 92 00:04:39,966 --> 00:04:44,030 точка году равен, а затем назначить это некоторое целое число значение 2011. 93 00:04:44,030 --> 00:04:47,290 Мой автомобиль точка пластины равна CS50. 94 00:04:47,290 --> 00:04:51,180 Моя карта точек одометра равна 50505 запятой. 95 00:04:51,180 --> 00:04:53,270 Все те прекрасно, и это 96 00:04:53,270 --> 00:04:57,802 как мы доступ к Поля структуры. 97 00:04:57,802 --> 00:05:00,260 Структуры, хотя, не нужно должны быть созданы в стеке. 98 00:05:00,260 --> 00:05:02,950 Так же, как любой другой переменной, мы может динамически выделять их. 99 00:05:02,950 --> 00:05:06,309 Если у нас есть программы, которые могут порождающие множество структур, 100 00:05:06,309 --> 00:05:08,100 мы не знаем, сколько мы собираемся нужно, 101 00:05:08,100 --> 00:05:10,800 то мы должны динамически выделить те структуры 102 00:05:10,800 --> 00:05:12,960 а нашей программе работает. 103 00:05:12,960 --> 00:05:16,600 И поэтому, если мы собираемся получить доступ к Поля структуры в этом контексте, 104 00:05:16,600 --> 00:05:20,660 напомним, что мы в первую очередь необходимо разыменования указатель на структуру, 105 00:05:20,660 --> 00:05:24,810 а затем один раз мы разыменовать указатель, то мы можем получить доступ к полям. 106 00:05:24,810 --> 00:05:26,830 Если у нас есть только указатель на структуру, 107 00:05:26,830 --> 00:05:32,120 мы не можем просто сказать, указатель точечного поля имя и получить то, что мы ищем. 108 00:05:32,120 --> 00:05:34,259 Там это дополнительный шаг разыменования. 109 00:05:34,259 --> 00:05:36,050 Так что давайте говорить, что вместо previous-- 110 00:05:36,050 --> 00:05:38,770 так же, как и в предыдущем примере, вместо того, чтобы объявить его 111 00:05:38,770 --> 00:05:43,680 в стеке, структуры автомобиля, мой автомобиль, точка с запятой, я говорю структуры автомобиля, 112 00:05:43,680 --> 00:05:48,020 звезда, указатель на структура автомобиль называется мой автомобиль, 113 00:05:48,020 --> 00:05:51,250 равна выделения памяти размер структуры автомобиля. 114 00:05:51,250 --> 00:05:54,950 Размер мы выяснить, сколько байты ваш новый тип данных занимает. 115 00:05:54,950 --> 00:05:58,570 Вам не обязательно нужно только использовать размер, ширина, Int, или угля или любой 116 00:05:58,570 --> 00:05:59,715 из встроенных типов данных. 117 00:05:59,715 --> 00:06:02,090 Компилятор достаточно умен, чтобы выяснить, как много байт 118 00:06:02,090 --> 00:06:04,170 требуются вашей новой структуры. 119 00:06:04,170 --> 00:06:09,610 Так что я таНос себе блок памяти достаточно большой, чтобы провести структуры автомобиля, 120 00:06:09,610 --> 00:06:12,410 и я получаю указатель назад к этому блоку памяти, 121 00:06:12,410 --> 00:06:16,090 и что указатель присваивается моей машине. 122 00:06:16,090 --> 00:06:18,050 >> Теперь, если я хочу, чтобы доступ поля моего автомобиля, 123 00:06:18,050 --> 00:06:22,615 Я впервые разыменовать моей машине с помощью оператор разыменовывания, звезда 124 00:06:22,615 --> 00:06:26,620 что мы видели от указателей видео, а затем, после I разыменования, 125 00:06:26,620 --> 00:06:32,200 то я могу использовать точечную оператору доступ к различным поля моего автомобиля. 126 00:06:32,200 --> 00:06:35,490 Звезда мою машину точка году равен 2011. 127 00:06:35,490 --> 00:06:38,480 Это будет иметь эффект мы хотим в этом случае, 128 00:06:38,480 --> 00:06:41,960 Потому что мы динамически выделено мою машину. 129 00:06:41,960 --> 00:06:43,610 >> Это вид раздражает, хотя, не так ли? 130 00:06:43,610 --> 00:06:44,818 Там это 2-х ступенчатый процесс в настоящее время. 131 00:06:44,818 --> 00:06:47,460 Теперь мы должны dereference-- у нас есть звезды оператора, 132 00:06:47,460 --> 00:06:48,910 и у нас есть оператор точка. 133 00:06:48,910 --> 00:06:51,660 И, как вы могли бы ожидать, потому что Программисты любят короткие пути 134 00:06:51,660 --> 00:06:53,740 чтобы делать вещи, есть короче способ сделать это. 135 00:06:53,740 --> 00:06:57,790 Существует другой оператор называется стрелка, что делает этот процесс намного проще. 136 00:06:57,790 --> 00:07:00,750 Путь стрелка работает он сначала разыменовывает 137 00:07:00,750 --> 00:07:03,560 указатель на левом части оператора, 138 00:07:03,560 --> 00:07:06,620 а затем, после того, разыменовываются указатель слева, 139 00:07:06,620 --> 00:07:09,620 он обращается поле справа. 140 00:07:09,620 --> 00:07:14,170 И так уже у нас было такого рода звезды моя машина расставить все эти вещи, 141 00:07:14,170 --> 00:07:15,880 как там было много происходит. 142 00:07:15,880 --> 00:07:22,040 Но то, что мы можем сделать, это вместо this-- моя машина стрелка году равен 2011. 143 00:07:22,040 --> 00:07:23,580 >> Опять же, что здесь происходит? 144 00:07:23,580 --> 00:07:25,720 Во-первых, я разыменования мою машину. 145 00:07:25,720 --> 00:07:27,810 Что еще раз, это указатель здесь. 146 00:07:27,810 --> 00:07:31,270 Затем после того, разыменовываются мою машину, я 147 00:07:31,270 --> 00:07:35,130 Затем можно получить доступ к полям год, плита, и одометр 148 00:07:35,130 --> 00:07:40,020 как я мог до того, в первую очередь б звезда разыменовать моей машине, 149 00:07:40,020 --> 00:07:42,020 и точка доступа к поле. 150 00:07:42,020 --> 00:07:45,290 Таким образом, вы можете иметь структуры, вы может иметь указатели на структуры, 151 00:07:45,290 --> 00:07:48,360 и у вас есть способы доступа поля этих структур, 152 00:07:48,360 --> 00:07:52,600 есть ли у вас ссылки на им или сами переменные. 153 00:07:52,600 --> 00:07:57,640 Точка или стрелка, в зависимости от как был объявлен переменная. 154 00:07:57,640 --> 00:08:00,510 Я Дуг Ллойд, это CS50. 155 00:08:00,510 --> 00:08:01,975