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: OK. 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 Но със структури, или често по-нататък structs, 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 Struct, това е най- ключова дума, която показва, 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-- ако създадете няколко structs 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 Ние не искаме да се определи структура на вътрешната страна на функция, 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 Точно като мога да кажа, инт х, или име низ и запетая. 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 Картата ми дот километража се равнява на 50 505 и запетая. 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 Има допълнително етап на dereferencing. 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 Не е задължително само трябва да използвате размер на, ширина, инт, или Чар, или който и да е 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 които сме виждали от указателите видеоклипове, и след това, след като сочен, 125 00:06:26,620 --> 00:06:32,200 След това мога да използвам оператора на точка до достъп до различни области на колата ми. 126 00:06:32,200 --> 00:06:35,490 Star колата ми точка се равнява на 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 Начинът, по който работи е стрелка то първите dereferences 137 00:07:00,750 --> 00:07:03,560 показалеца вляво страна на оператора, 138 00:07:03,560 --> 00:07:06,620 и след това, след като dereferenced показалеца вляво, 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 Първо, аз съм dereferencing колата ми. 145 00:07:25,720 --> 00:07:27,810 Което отново е указател тук. 146 00:07:27,810 --> 00:07:31,270 След това, след като dereferenced колата ми, аз 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 Dot или стрелка, в зависимост от как променливата е обявена. 154 00:07:57,640 --> 00:08:00,510 Аз съм Дъг Лойд, това е CS50. 155 00:08:00,510 --> 00:08:01,975