[Гуляе музыка] 

Даг Lloyd: ОК. Мы працавалі з цэлымі лікамі, мы працавалі з персанажамі, мы працавалі паплаўкі, падвойваецца, радкі і Bools. Мы вычарпалі амаль усе з [неразборліва] тыпаў, былі даступныя для ўсіх нас разам. Але зараз мы хочам зрабіць нешта яшчэ. Як мы гэта робім? Як стварыць розныя тыпы дадзеных? Мы можам зрабіць гэта з дапамогай структур. Так мадэлі дазваляюць уніфікаваць зменныя розных тыпаў ў адзін новы тып зменнай, якія мы можам прызначыць сваё імя тыпу. Гэта сапраўды моцны рэч, каб быць у стане зрабіць, таму што зараз мы можам група элементы розных тыпаў дадзеных разам, якія маюць лагічную сувязь. Мы былі ў стане гэта зрабіць з масівамі роду, праўда? Мы можам групавыя зменныя таго ж тыпу дадзеных разам у вялікім блоку памяці, масіва. 

Але мы не ў стане змяшаць да розных тыпаў дадзеных разам. Мы не можам, скажам, пару цэлае, і характар, і двайны ўсе у тое ж самае і называем гэта адзінае цэлае. Але структуры, або часта згадваецца як структур, мы на самай справе можам. Такім чынам, структура з'яўляецца свайго роду з сябе супер зменнай. Гэта зменная, якая змяшчае іншыя зменныя ўнутры яго. Дык вось прыклад вельмі простая структура. Гэта тое, што сінтаксіс будзе выглядаць б стварыць структуру для аўтамабіля. Цяпер, давайце прайсці праз сінтаксіс тут. Структура ,, што гэта Ключавое слова, якое паказвае, што я ствараю новы тып дадзеных тут. У прыватнасці, імя тыпу дадзеных з'яўляецца будзе структура аўтамабіля, як мы ўбачым. Але гэта свайго роду наканечнікам ад кампілятара, што гэта як група зменных, што адбываецца варта разглядаць як частка аднаго і таго ж тыпу у хвіліну. 

Аўтамабілі, проста назва структуры. Зноў жа, тып дадзеных тут будзе быць структура аўтамабіля, а не толькі аўтамабіль. Але калі ў вас ёсць different-- калі вы ствараеце некалькі структур у той жа праграме, што вам трэба адрозніваць структуры і структуры. Так структура аўтамабіля, я мог бы таксама структура студэнт, напрыклад, у той жа праграме. Ўнутры фігурных дужках з'яўляюцца ўсё так званыя поля, або члены структуры. Так што некаторыя з рэчаў, што ўласцівыя ў аўтамабілі? Ну, гэта, як правіла, мае годзе, імя мадэлі і нумарны знак, одометр, што, як правіла, мае некаторы колькасць міль на гэтым, і можа быць, аб'ём рухавіка. І, як вы бачыце, я змешваючы цэлыя і сімвалы і парным разрадзе. Яны ўсё будзе частку гэтага новага тыпу дадзеных. 

Нарэшце, апошняе, што мне трэба зрабіць, не забудзьцеся гэтую маленькую кропку з коскі напрыканцы. Пасля мы скончым, які вызначае структуру, мы павінны паставіць кропку з коскі ў канцы. Гэта вельмі распаўсюджаная сінтаксічны памылка, таму што з функцыяй, Напрыклад, вы б проста адкрыты фігурная дужка, недалёка фігурная дужка. Вы не ставіце кропку з коскі ў канец вызначэння функцыі. Гэта выглядае як функцыі вызначэнне, але гэта не так, і так як кропка з коскі ёсць гэта проста напамін, што вам трэба паставіць яго там, таму што кампілятар будзе ў адваротным разе не ведаю, што з ім рабіць. Гэта вельмі распаўсюджаная памылка выпадкова зрабіць калі вы ў першую чаргу вызначэнне структуры. 

ДОБРА. Такім чынам, мы, як правіла, вызначаюць нашы мадэлі на самым версе нашых праграм таму што яны, верагодна, будзе для выкарыстання некалькіх функцый. Мы не хочам, каб вызначыць Struct ўнутры функцыі, таму што тады мы можам only-- Сфера структуры сапраўды існуе толькі ўнутры гэтай функцыі. Мы, верагодна, хочаце, каб вызначыць структуру таму мы можам выкарыстоўваць яго ў некалькіх функцый, або, магчыма, у некалькіх файлы, якія звязаны адзін з адным каб стварыць нашу адзіную праграму. Часам таксама замест вызначэння структуры на самым версе, дзе вы кладзеце фунт ўключае ў сябе і ваш фунт вызначае, Напрыклад, вы маглі б паставіць іх у асобных кропак ч файлы, якія вы затым фунт ўключыць сябе. 

Такім чынам, мы маем структуры, але цяпер мы павінны трапіць ўнутр іх. Як мы патрапіць унутр структура доступу гэтыя суб-зменныя, гэтыя зменныя што існуюць ўнутры структуры? Ну, у нас ёсць тое, што называецца аператар кропка, якая дазваляе нам доступ да палях структуры. Так, напрыклад, скажам, я абвясціў мае дадзеныя структуры тыпу дзесьці у верхняй частцы маёй праграмы, або, магчыма, у кропка ч файл, што я фунт ўключаны. Калі я хачу, то для стварэння новай пераменная гэтага тыпу дадзеных, я магу сказаць структура аўтамабіля, мая машына, кропка з коскі. Гэтак жа, як я мог бы сказаць Int х, або імя радкі кропка з коскі. 

Тып дадзеных тут структура аўтамабіля, імя зменнай мая машына, і тады я магу выкарыстоўваць кропкавую аператару доступ да розных поля майго аўтамабіля. Таму я магу сказаць мой аўтамабіль кропка годзе роўны 2011. Гэта выдатна. Год, калі вы памятаеце, быў вызначаны як цэлалікавых поле ўнутры гэтай структуры аўтамабіля Тып дадзеных. Такім чынам, любы пераменная дадзеных структура аўтамабіля тып, напрыклад, маёй машыне, я магу сказаць, мой аўтамабіль кропка годзе роўны, а затым прызначыць гэта некаторы цэлае лік значэнне 2011. Мой аўтамабіль кропка пласціны роўная CS50. Мая карта кропак одометра роўная 50505 коскі. Усе тыя выдатна, і гэта як мы доступ да Поля структуры. Структуры, хоць, не трэба павінны быць створаны ў стэку. Гэтак жа, як любы іншы зменнай, мы можа дынамічна вылучаць іх. Калі ў нас ёсць праграмы, якія могуць спараджаюць мноства структур, мы не ведаем, колькі мы збіраемся трэба, то мы павінны дынамічна вылучыць тыя структуры а нашай праграме працуе. І таму, калі мы збіраемся атрымаць доступ да Поля структуры ў гэтым кантэксце, нагадаем, што мы ў першую чаргу неабходна разнаймення паказальнік на структуру, а затым адзін раз мы разыменовать паказальнік, то мы можам атрымаць доступ да палях. Калі ў нас ёсць толькі паказальнік на структуру, мы не можам проста сказаць, паказальнік кропкавага поля імя і атрымаць тое, што мы шукаем. Там гэта дадатковы крок разнаймення. Так што давайце казаць, што замест previous-- гэтак жа, як і ў папярэднім прыкладзе, замест таго, каб аб'явіць яго у стэку, структуры аўтамабіля, мой аўтамабіль, кропка з коскі, я кажу мадэлі аўтамабіля, зорка, паказальнік на структура аўтамабіль называецца мой аўтамабіль, роўная выдзялення памяці памер мадэлі аўтамабіля. Памер мы высветліць, колькі байты ваш новы тып дадзеных займае. Вам не абавязкова трэба толькі выкарыстоўваць памер, шырыня, Int, або вугалю або любы з убудаваных тыпаў дадзеных. Кампілятар досыць разумны, каб высветліць, як шмат байт патрабуюцца вашай новай структуры. Так што я Таноса сабе блок памяці досыць вялікі, каб правесці структуры аўтамабіля, і я атрымліваю паказальнік таму да гэтага блоку памяці, і што паказальнік прысвойваецца маёй машыне. 

Цяпер, калі я хачу, каб доступ поля майго аўтамабіля, Я ўпершыню разыменовать маёй машыне з дапамогай аператар разыменовывания, зорка што мы бачылі ад паказальнікаў відэа, а затым, пасля I разнаймення, то я магу выкарыстоўваць кропкавую аператару доступ да розных поля майго аўтамабіля. Зорка маю машыну кропка годзе роўны 2011. Гэта будзе мець эфект мы хочам у гэтым выпадку, Таму што мы дынамічна выдзелена маю машыну. 

Гэта выгляд раздражняе, хоць, ці не так? Там гэта 2-х ступеністы працэс у цяперашні час. Цяпер мы павінны dereference-- у нас ёсць зоркі аператара, і ў нас ёсць аператар кропка. І, як вы маглі б чакаць, таму што Праграмісты любяць кароткія шляху каб рабіць рэчы, ёсць карацей спосаб зрабіць гэта. Існуе іншы аператар называецца стрэлка, што робіць гэты працэс нашмат прасцей. Шлях стрэлка працуе ён спачатку разыменовывает паказальнік на левым часткі аператара, а затым, пасля таго, разыменовываются паказальнік злева, ён звяртаецца поле справа. І так ужо ў нас было такога роду зоркі мая машына расставіць усе гэтыя рэчы, як там было шмат адбываецца. Але тое, што мы можам зрабіць, гэта замест this-- мая машына стрэлка годзе роўны 2011. 

Зноў жа, што тут адбываецца? Па-першае, я разнаймення маю машыну. Што яшчэ раз, гэта паказальнік тут. Затым пасля таго, разыменовываются маю машыну, я Затым можна атрымаць доступ да палях год, пліта, і одометр як я мог да таго, у першую чаргу б зорка разыменовать маёй машыне, і кропка доступу да полі. Такім чынам, вы можаце мець структуры, вы можа мець паказальнікі на структуры, і ў вас ёсць спосабы доступу поля гэтых структур, ці ёсць у вас спасылкі на ім ці самі зменныя. Кропка або стрэлка, у залежнасці ад як быў абвешчаны пераменная. Я Дуг Лойд, гэта CS50.