1 00:00:00,000 --> 00:00:04,970 2 00:00:04,970 --> 00:00:07,220 DOUG LLOYD: Så hvis du har sett vår video på konstruksjoner, 3 00:00:07,220 --> 00:00:10,950 du allerede vet at vi har muligheten til å definere egne datatyper. 4 00:00:10,950 --> 00:00:14,530 Men hvis du har brukt strukturer, vet du at noen ganger bruker de datatyper 5 00:00:14,530 --> 00:00:16,446 faktisk kan være litt tungvint fordi vi 6 00:00:16,446 --> 00:00:19,210 må bruke struct søkeord når vi jobber med them-- 7 00:00:19,210 --> 00:00:21,257 struct bil eller struct student. 8 00:00:21,257 --> 00:00:23,090 Det er mye å skrive hvis vi bare vil ha 9 00:00:23,090 --> 00:00:24,830 noe enkelt, som en struktur. 10 00:00:24,830 --> 00:00:26,390 Vi ønsker å have-- vi ønsker å kunne arbeide med ting 11 00:00:26,390 --> 00:00:29,350 litt mer stenografi måte, som int eller røye, noe mye 12 00:00:29,350 --> 00:00:31,240 mer praktisk å skrive. 13 00:00:31,240 --> 00:00:33,100 >> Heldigvis finnes det en måte å gjøre dette i C, 14 00:00:33,100 --> 00:00:37,150 med noe som kalles typedef, som er en måte å skape stenografi eller omskrevet 15 00:00:37,150 --> 00:00:38,640 navn for datatyper. 16 00:00:38,640 --> 00:00:40,720 Du kan skrive data typer som allerede finnes, 17 00:00:40,720 --> 00:00:43,970 eller du kan skrive datatyper av dine egne. 18 00:00:43,970 --> 00:00:46,890 >> Det første du gjør er du definere en type på vanlig måte, 19 00:00:46,890 --> 00:00:52,271 og så du bare alias den til noe else-- typedef gamle navnet nytt navn. 20 00:00:52,271 --> 00:00:53,520 Ganske grei, ikke sant? 21 00:00:53,520 --> 00:00:56,240 Slik at vi kunne typedef for eksempel den allerede eksisterende data 22 00:00:56,240 --> 00:01:00,266 type unsigned char som byte. 23 00:01:00,266 --> 00:01:03,140 Og så, fra nå av, etter at vi har gjort denne type definition-- igjen, 24 00:01:03,140 --> 00:01:07,570 som vanligvis kommer til å være på toppen av våre dot C-filer, eller i en prikk H fil 25 00:01:07,570 --> 00:01:10,590 separat, kan vi bare bruker bite overalt 26 00:01:10,590 --> 00:01:12,180 vi ville ha brukt unsigned char. 27 00:01:12,180 --> 00:01:14,300 Det er mye kortere å skrive. 28 00:01:14,300 --> 00:01:19,280 >> I CS50 bibliotek, gjør vi dette-- vi typedef røye stjerne som streng. 29 00:01:19,280 --> 00:01:21,400 Fordi vi abstrahert bort ideen om pekere. 30 00:01:21,400 --> 00:01:25,072 Og det faktum at en streng er virkelig en peker til den første character-- 31 00:01:25,072 --> 00:01:26,780 en rekke tegn, fordi det er bare 32 00:01:26,780 --> 00:01:29,863 så forvirrende å få hodet rundt at-- men faktisk det er hva vi gjør. 33 00:01:29,863 --> 00:01:35,140 Og denne linjen med kode faktisk eksisterer i CS50 dot H typedef røye stjerners streng, 34 00:01:35,140 --> 00:01:39,021 bare for å gjøre det litt mindre tungvint å måtte forholde seg til. 35 00:01:39,021 --> 00:01:41,520 Allerede du har sett sannsynligvis en litt av verdien her, 36 00:01:41,520 --> 00:01:44,160 men typedef blir stor når kombinert med strukturer 37 00:01:44,160 --> 00:01:45,780 som jeg antydet tidligere. 38 00:01:45,780 --> 00:01:48,550 Strukturer har en to-ord typenavn. 39 00:01:48,550 --> 00:01:52,020 Og slik at de kan være veldig irriterende for å lage variabler av denne typen, 40 00:01:52,020 --> 00:01:56,310 eller [uhørbart] av struct noe, din linjer kan bare bli veldig, veldig lang. 41 00:01:56,310 --> 00:01:59,400 Og så du kan bruke typedef å komme opp med noe mye kortere. 42 00:01:59,400 --> 00:02:04,650 >> Så hvis jeg definerer en bil som følger, har jeg min definisjon av en car-- struct bil, 43 00:02:04,650 --> 00:02:07,230 og deretter åpne klammeparentes, alle innen min struktur, 44 00:02:07,230 --> 00:02:11,030 nær klammeparentes, semi-colon-- etter at jeg har definert min datatype, 45 00:02:11,030 --> 00:02:15,680 Jeg kan typedef struct bil som bil strek t. 46 00:02:15,680 --> 00:02:19,670 Og så når jeg har gjort det, nå hver gang jeg ellers ville ha brukt struct 47 00:02:19,670 --> 00:02:22,680 bil, kan jeg bare bruke bilen strek t. 48 00:02:22,680 --> 00:02:26,480 Det er mye kortere på en måte å uttrykke denne ideen om denne strukturen 49 00:02:26,480 --> 00:02:28,530 at jeg nettopp opprettet. 50 00:02:28,530 --> 00:02:33,620 >> Alternativt fordi strukturer blir så vanligvis brukes i typedef, 51 00:02:33,620 --> 00:02:37,980 det er a-- du faktisk kan definere skriver i mellom starten og slutten. 52 00:02:37,980 --> 00:02:42,020 Så typedef struktur igjen er vanligvis typedef, gamle navn, nytt navn, 53 00:02:42,020 --> 00:02:45,360 hvor navnene er allerede typer som du har opprettet. 54 00:02:45,360 --> 00:02:49,620 Men du kan faktisk definere en struktur rett i midten av typedef 55 00:02:49,620 --> 00:02:51,760 i stedet for å måtte definere det separat, og deretter 56 00:02:51,760 --> 00:02:52,990 gjøre en typedef av det. 57 00:02:52,990 --> 00:02:55,780 Og det ville se ut akkurat som dette-- typedef struct bil, 58 00:02:55,780 --> 00:02:59,957 åpen klammeparentes, alle av feltet definisjoner, nær klammeparentes, bil t. 59 00:02:59,957 --> 00:03:03,290 Så det gamle navnet er alle de greiene i rød, du er bare å definere strukturen 60 00:03:03,290 --> 00:03:05,610 og navngi den på samme tid. 61 00:03:05,610 --> 00:03:07,790 Og så det nye navnet er bilen strek t. 62 00:03:07,790 --> 00:03:10,150 Og så hvis vi begynner å bruke dette i kode, I tidligere 63 00:03:10,150 --> 00:03:13,279 kunne ha sagt, struct bil MyCar semikolon. 64 00:03:13,279 --> 00:03:14,820 Vel, jeg trenger ikke å gjøre det lenger. 65 00:03:14,820 --> 00:03:20,265 Nå som jeg har brukt typedef, jeg kan bare si bil strek t, MyCar. 66 00:03:20,265 --> 00:03:22,640 Det er mye kortere på en måte å gjøre det, og faktisk er det 67 00:03:22,640 --> 00:03:24,515 kommer til å være mye mer praktisk, spesielt 68 00:03:24,515 --> 00:03:27,730 når du begynner å bruke strukturer mye mer i koden. 69 00:03:27,730 --> 00:03:28,810 >> Jeg er Doug Lloyd. 70 00:03:28,810 --> 00:03:30,640 Dette er CS50. 71 00:03:30,640 --> 00:03:32,415