[Играет музыка] ДАГ Lloyd: ОК. Мы работали с целыми числами, мы работали с персонажами, мы работали поплавки, удваивается, строки и Bools. Мы исчерпали почти все из [неразборчиво] типов, были доступны для всех нас вместе. Но теперь мы хотим сделать что-то еще. Как мы это делаем? Как создать различные типы данных? Мы можем сделать это с помощью структур. Так структуры позволяют унифицировать переменные различных типов в один новый тип переменной, которые мы можем назначить свое имя типа. Это действительно сильный вещь, чтобы быть в состоянии сделать, потому что теперь мы можем группа элементы разных типов данных вместе, которые имеют логическую связь. Мы были в состоянии это сделать с массивами рода, верно? Мы можем групповые переменные того же типа данных вместе в большом блоке памяти, массива. Но мы не в состоянии смешать до различных типов данных вместе. Мы не можем, скажем, пару целое, и характер, и двойной все в то же самое и называем это единое целое. Но структуры, или часто упоминается как структур, мы на самом деле можем. Таким образом, структура является своего рода из себя супер переменной. Это переменная, которая содержит другие переменные внутри него. Так вот пример очень простая структура. Это то, что синтаксис будет выглядеть бы создать структуру для автомобиля. Теперь, давайте пройти через синтаксис здесь. Структура,, что это Ключевое слово, которое указывает, что я создаю новый тип данных здесь. В частности, имя типа данных является будет структура автомобиля, как мы увидим. Но это своего рода наконечником от компилятору, что это как группа переменных, что происходит следует рассматривать как часть одного и того же типа в минуту. Автомобили, просто название структуры. Опять же, тип данных здесь будет быть структура автомобиля, а не только автомобиль. Но если у вас есть different-- если вы создаете несколько структур в той же программе, что вам нужно различать структуры и структуры. Так структура автомобиля, я мог бы также структура студент, например, в той же программе. Внутри фигурных скобках являются все так называемые поля, или члены структуры. Так что некоторые из вещей, что присущи в автомобиле? Ну, это, как правило, имеет году, имя модели и номерной знак, одометр, что, как правило, имеет некоторое количество миль на этом, и может быть, объем двигателя. И, как вы видите, я смешивая целые и символы и парном разряде. Они все будет часть этого нового типа данных. Наконец, последнее, что мне нужно сделать, не забудьте эту маленькую точку с запятой в конце. После мы закончим, определяющий структуру, мы должны поставить точку с запятой в конце. Это очень распространенная синтаксический ошибка, потому что с функцией, Например, вы бы просто открыт фигурная скобка, недалеко фигурная скобка. Вы не ставите точку с запятой в конец определения функции. Это выглядит как функции определение, но это не так, и так как точка с запятой есть это просто напоминание, что вам нужно поставить его там, потому что компилятор будет в противном случае не знаю, что с ним делать. Это очень распространенная ошибка случайно сделать когда вы в первую очередь определение структуры. ХОРОШО. Таким образом, мы, как правило, определяют наши структуры на самом верху наших программ потому что они, вероятно, будет для использования нескольких функций. Мы не хотим, чтобы определить Struct внутри функции, потому что тогда мы можем only-- Сфера структуры действительно существует только внутри этой функции. Мы, вероятно, хотите, чтобы определить структуру поэтому мы можем использовать его в нескольких функций, или, возможно, в нескольких файлы, которые связаны друг с другом чтобы создать нашу единую программу. Иногда также вместо определения структуры на самом верху, где вы кладете фунт включает в себя и ваш фунт определяет, Например, вы могли бы поставить их в отдельных точек ч файлы, которые вы затем фунт включить себя. Итак, мы имеем структуры, но теперь мы должны попасть внутрь них. Как мы попасть внутрь структура доступа эти суб-переменные, эти переменные что существуют внутри структуры? Ну, у нас есть то, что называется оператор точка, которая позволяет нам доступ к полям структуры. Так, например, скажем, я объявил мои данные структуры типа где-то в верхней части моей программы, или, возможно, в точка ч файл, что я фунт включены. Если я хочу, то для создания новой переменная этого типа данных, я могу сказать структура автомобиля, моя машина, точка с запятой. Так же, как я мог бы сказать Int х, или имя строки точка с запятой. Тип данных здесь структура автомобиля, имя переменной моя машина, и тогда я могу использовать точечную оператору доступ к различным поля моего автомобиля. Поэтому я могу сказать мой автомобиль точка году равен 2011. Это прекрасно. Год, если вы помните, был определен как целочисленное поле внутри этой структуры автомобиля тип данных. Таким образом, любой переменная данных структура автомобиля тип, например, моей машине, я могу сказать, мой автомобиль точка году равен, а затем назначить это некоторое целое число значение 2011. Мой автомобиль точка пластины равна CS50. Моя карта точек одометра равна 50505 запятой. Все те прекрасно, и это как мы доступ к Поля структуры. Структуры, хотя, не нужно должны быть созданы в стеке. Так же, как любой другой переменной, мы может динамически выделять их. Если у нас есть программы, которые могут порождающие множество структур, мы не знаем, сколько мы собираемся нужно, то мы должны динамически выделить те структуры а нашей программе работает. И поэтому, если мы собираемся получить доступ к Поля структуры в этом контексте, напомним, что мы в первую очередь необходимо разыменования указатель на структуру, а затем один раз мы разыменовать указатель, то мы можем получить доступ к полям. Если у нас есть только указатель на структуру, мы не можем просто сказать, указатель точечного поля имя и получить то, что мы ищем. Там это дополнительный шаг разыменования. Так что давайте говорить, что вместо previous-- так же, как и в предыдущем примере, вместо того, чтобы объявить его в стеке, структуры автомобиля, мой автомобиль, точка с запятой, я говорю структуры автомобиля, звезда, указатель на структура автомобиль называется мой автомобиль, равна выделения памяти размер структуры автомобиля. Размер мы выяснить, сколько байты ваш новый тип данных занимает. Вам не обязательно нужно только использовать размер, ширина, Int, или угля или любой из встроенных типов данных. Компилятор достаточно умен, чтобы выяснить, как много байт требуются вашей новой структуры. Так что я таНос себе блок памяти достаточно большой, чтобы провести структуры автомобиля, и я получаю указатель назад к этому блоку памяти, и что указатель присваивается моей машине. Теперь, если я хочу, чтобы доступ поля моего автомобиля, Я впервые разыменовать моей машине с помощью оператор разыменовывания, звезда что мы видели от указателей видео, а затем, после I разыменования, то я могу использовать точечную оператору доступ к различным поля моего автомобиля. Звезда мою машину точка году равен 2011. Это будет иметь эффект мы хотим в этом случае, Потому что мы динамически выделено мою машину. Это вид раздражает, хотя, не так ли? Там это 2-х ступенчатый процесс в настоящее время. Теперь мы должны dereference-- у нас есть звезды оператора, и у нас есть оператор точка. И, как вы могли бы ожидать, потому что Программисты любят короткие пути чтобы делать вещи, есть короче способ сделать это. Существует другой оператор называется стрелка, что делает этот процесс намного проще. Путь стрелка работает он сначала разыменовывает указатель на левом части оператора, а затем, после того, разыменовываются указатель слева, он обращается поле справа. И так уже у нас было такого рода звезды моя машина расставить все эти вещи, как там было много происходит. Но то, что мы можем сделать, это вместо this-- моя машина стрелка году равен 2011. Опять же, что здесь происходит? Во-первых, я разыменования мою машину. Что еще раз, это указатель здесь. Затем после того, разыменовываются мою машину, я Затем можно получить доступ к полям год, плита, и одометр как я мог до того, в первую очередь б звезда разыменовать моей машине, и точка доступа к поле. Таким образом, вы можете иметь структуры, вы может иметь указатели на структуры, и у вас есть способы доступа поля этих структур, есть ли у вас ссылки на им или сами переменные. Точка или стрелка, в зависимости от как был объявлен переменная. Я Дуг Ллойд, это CS50.