>> [MUZYKI]
>> DOUG LLOYD: OK.
Pracowaliśmy z liczb całkowitych, Pracowaliśmy z postaciami,
Pracowaliśmy pływaków, dwuosobowe, łańcuchy i bools.
Byliśmy wyczerpani prawie wszystkie z [niesłyszalne] typów, które
były dostępne dla nas wszystkich razem.
Ale teraz chcemy zrobić coś więcej.
Jak mamy to zrobić?
W jaki sposób możemy tworzyć różne typy danych?
Możemy to zrobić za pomocą struktur.
Więc struktur pozwoli nam zjednoczyć zmienne różnych typów
w jeden nowy typ zmiennej, które możemy przypisać własną nazwę typu.
To jest naprawdę silna rzeczą, aby być w stanie zrobić,
dlatego, że może teraz grupy elementy różnych typów danych
razem, że ma logicznego związku.
Byliśmy w stanie to zrobić z tablicami rodzaju, prawda?
Możemy zmienne grupy tego samego typu
wspólnie w dużym urządzeniu pamięci, tablicy.
>> Ale nie udało się mieszać różnych typów danych razem.
Nie możemy, mówią, powiązać liczbę całkowitą, i charakter, i podwójną wszystkie
w samej rzeczy i nazwać jednym urządzeniu.
Ale ze struktur, lub często nazywane elemencie,
rzeczywiście możliwe.
Tak więc struktura jest rodzajem jakby zmiennej Super.
Jest to zmienna, która zawiera inne zmienne w jej wnętrzu.
Więc tutaj jest przykład bardzo prosta konstrukcja.
To jest to, co składnia będzie jak na utworzenie struktury samochodu.
Teraz idziemy przez składni tutaj.
Struct, że to słowo kluczowe, które wskazuje,
że tworzę nowy typ danych tutaj.
W szczególności, nazwa typu danych jest będzie struktura samochodu, jak zobaczymy.
Ale to jest coś w rodzaju końcówki się do kompilatora, że ​​ta
jako grupy zmiennych, który ma należy uznać za część tego samego typu
w minutę.
>> Samochody, tylko nazwa struktury.
Ponownie, typ danych tu się dzieje Samochód będzie struktura, nie tylko samochód.
Ale jeśli masz different-- W przypadku tworzenia wielu konstrukcjom
w tym samym programie, należy rozróżnić struktury i struktury.
Tak więc struktura samochodu, może ja też mam Student struktura, na przykład,
w tym samym programie.
Wewnątrz nawiasy są wszystkich tak zwanych polach
lub członkowie struktury.
Więc co to tylko niektóre z rzeczy, które są nieodłączne w samochodzie?
Cóż, to zwykle ma rok, jest nazwę modelu oraz tablic rejestracyjnych,
drogomierz, że zazwyczaj ma niektóre liczba mil na jej temat,
a może i pojemności silnika.
I jak widać, jestem mieszania liczby całkowite i znaków i dwuosobowe.
Oni wszystko będzie część tego nowego typu danych.
>> Ostatni wreszcie coś muszę zrobić, nie zapomnij, ten mały średnik
na końcu.
Po zakończeniu definiowania mamy strukturę, musimy postawić średnik na końcu.
Jest to bardzo często składniowej błąd, ponieważ z funkcji,
na przykład, to po prostu trzeba otwarty nawias klamrowy, blisko nawias klamrowy.
Nie postawić średnik u koniec definicji funkcji.
To wygląda jak funkcja definicja, ale to nie jest,
i tak średnik nie jest tylko przypomnienie, że cię
Należy umieścić go tam, bo kompilator nie będzie inaczej
wiesz co z nim zrobić.
Jest to bardzo częsty błąd przypadkowo zrobić
kiedy pierwszy definiowania struktury.
>> OK.
Więc zwykle definiują nasze struktury na samym szczycie z naszych programów
ponieważ są one prawdopodobnie będzie być używana przez wiele funkcji.
Nie chcemy, aby zdefiniować struct wewnątrz funkcji,
bo wtedy możemy only-- Zakres struktury naprawdę
istnieje tylko wewnątrz tej funkcji.
Chcemy prawdopodobnie chcesz zdefiniować strukturę więc możemy używać go w wielu funkcji,
a może w wielu Pliki, które są ze sobą powiązane
aby stworzyć jeden program.
Czasami też, zamiast zdefiniowania struktury
na samym szczycie, gdzie można umieścić Obejmuje a funta funt określa,
na przykład, można umieścić je w Kropka h oddzielne pliki, które następnie
funt to samemu.
>> Więc mamy struktur, ale teraz Musimy dostać się do środka z nich.
W jaki sposób możemy uzyskać wewnątrz struktura dostępu
te zmienne, sub-tych zmiennych które występują wewnątrz struktury?
Cóż, mamy coś, co nazywa operator kropki, które pozwala nam
Aby uzyskać dostęp do pola tej struktury.
Tak na przykład, powiedzmy, że mam oświadczył Struktura wpisać moje dane gdzieś
na szczycie mojego programu, a może w plik dot h, że mam funta włączone.
Jeżeli więc Ja chcę stworzyć nowy Zmienna tego typu danych, można powiedzieć,
Samochód struct, mój samochód, średnik.
Tak jak mógłbym powiedzieć int x, lub nazwa ciąg średnik.
>> Typ danych tutaj jest struktura samochodu, nazwa zmiennej jest mój samochód,
a następnie można użyć operatora kropki dostęp do różnych dziedzin mojego samochodu.
Więc mogę powiedzieć, mój samochód Kropka roku wynosi 2011.
To jest całkowicie w porządku.
Roku, jeśli przypomnieć, został określony jako całkowita pola wewnątrz tej struktury samochodu
typ danych.
Tak więc każda zmienna danych struct samochodu typu, takich jak mój samochód, mogę powiedzieć, mój samochód
Kropka roku równa, a następnie przypisać to jakaś wartość całkowita 2011.
Mój samochód dot płyta równa CS50.
Moja karta kropka licznik kilometrów wynosi 50505 średnik.
Wszystkie te są perfekcyjnie i to
jak uzyskać dostęp do Pola konstrukcji.
Struktury, choć nie muszą zostać utworzony na stos.
Podobnie jak wszelkie inne zmienne, możemy mogą dynamicznie przydzielać im.
Jeżeli mamy program, który może generować wiele struktur,
nie wiemy, jak wiele będziemy potrzebować,
to musimy dynamicznie rozdysponowaniu tych struktur
a nasz program jest uruchomiony.
I tak, jeśli chcemy, aby uzyskać dostęp do pola struktury w tym kontekście,
Przypomnijmy, że najpierw musimy dereference wskaźnik do struktury,
a następnie gdy już dereference wskaźnik, to możemy przejść do pola.
Jeśli mamy tylko wskaźnik do struktury,
nie możemy po prostu powiedzieć pole wskaźnik dot imię i dostać to, czego szukamy.
Jest to dodatkowy krok od wyłuskania.
Więc powiedzmy, że Zamiast previous--
podobnie jak w poprzednim przykładzie, zamiast deklarowania
na stos, struct samochód, mój Samochód, średnik, mówię struct samochód,
gwiazda, wskaźnikiem do struct samochodu zadzwonił do mojego samochodu,
równa malloc rozmiar struct samochodu.
Rozmiar będziemy dowiedzieć się, jak wiele bajty nowy typ danych zajmuje.
Nie musisz koniecznie używać tylko wielkość, szerokość, int lub char, lub którykolwiek
z wbudowanych typów danych.
Kompilator jest wystarczająco inteligentny, dowiedzieć się, jak wiele bajtów
są wymagane przez nową strukturę.
Więc malloc sobie jednostkę pamięci wystarczająco duże, aby utrzymać samochód struct,
i uzyskać wskaźnik powrotem do tego bloku pamięci
i że wskaźnik jest przypisany do mojego samochodu.
>> Teraz, jeśli chcę, aby uzyskać dostęp pola z mojego samochodu,
Pierwszy raz dereference mojego samochodu za pomocą operator wyłuskiwania, gwiazda
które widzieliśmy od wskaźników filmy, a następnie po I dereference,
to mogę użyć operatora kropki dostęp do różnych dziedzin mojego samochodu.
Gwiazda mojego samochodu kropka roku wynosi 2011.
To spowodowałoby Chcemy w tym przypadku,
bo mamy dynamicznie przydzielone mój samochód.
>> To trochę irytujące, prawda?
Jest to proces 2-stopniowy teraz.
Teraz musimy dereference-- mamy operatora gwiazdy,
i mamy operatora kropki.
I jak można się spodziewać, ponieważ Programiści C kocham krótsze drogi
robić rzeczy, nie jest krótszy sposób to zrobić.
Nie ma innego operatora o nazwie strzałka, co sprawia, że ​​ten proces o wiele łatwiejsze.
Sposób strzałka działa jest najpierw dereferences
wskaźnik lewej stronie operatora
a następnie, po dereferencjonowane wskaźnik po lewej stronie,
to uzyskuje dostęp do pola po prawej stronie.
I tak wcześniej mieliśmy tego rodzaju Star mój samochód dot wszystkie rzeczy,
jak było dużo dzieje.
Ale zamiast tego, co możemy zrobić, to this-- mój samochód strzałka roku wynosi 2011.
>> Ponownie, co się tutaj dzieje?
Po pierwsze, jestem dereferencji mój samochód.
Co znowu, jest wskaźnikiem tutaj.
Następnie po dereferencjonowane mój samochód,
Można wtedy uzyskać dostęp do pól roku, płyta, i licznik kilometrów
jak mogłem przed uprzednim Używane gwiazda dereference mojego samochodu,
a dot aby uzyskać dostęp do pola.
Więc możesz mieć struktury, można mogą mieć wskaźniki do struktur,
i masz sposoby na dostęp pola tych struktur,
czy masz wskaźniki do je lub same zmienne.
Dot lub strzałka, w zależności od jak zmienna została zadeklarowana.
Jestem Doug Lloyd, to CS50.