Cześć i witaj. Jesteśmy w nowej sekcji.
Będziemy rozmawiać o strukturach.
Jest to nowa koncepcja w c, która pozwala
grupować elementy razem, podobnie jak tablica, ale jest bardziej wydajna.
Chcę porozmawiać o tym, czym jest struktura, jak można ją tworzyć i
jak można jej używać.
Zatem struktury w c zapewniają kolejne narzędzie do grupowania elementów razem.
Ponownie wspomniałem, że są podobne do tablicy, ale w rzeczywistości są nieco bardziej wydajne.
Jeśli jesteś zaznajomiony z
programowaniem obiektowym, jeśli programujesz w Javie, c-plus
plus lub jakimkolwiek języku zorientowanym obiektowo, jest to rodzaj
obiektu, ale tylko z elementami składowymi danych, bez rzeczywistego zachowania, bez metod.
Jest to więc potężna
koncepcja, której będziesz używać w wielu programach w
języku C, które opracujesz, ponieważ możesz grupować różne elementy
w jednej nazwie, a te mogą zasadniczo reprezentować atrybuty danych.
Załóżmy na przykład, że chcesz przechowywać datę w programie.
Data zwykle składa się z trzech zmiennych: miesiąca, dnia i roku.
Utworzyłbyś te trzy zmienne do przechowywania tych danych.
Na przykład można powiedzieć, że int miesiąc równa się 9 dni równa się 25
lat równa się 2015.
Załóżmy, że Twój program musi również przechowywać datę zakupu określonej pozycji.
Cóż, prawdopodobnie musiałbyś utworzyć trzy dodatkowe zmienne dla każdej daty,
której używasz w swoim programie. Możesz więc zobaczyć, jak może się
to stać bardzo powtarzalne i w końcu tworzysz wiele zmiennych.
Ale powinieneś zauważyć, że te zmienne są logicznie powiązane. Wszystkie są randkami.
Naprawdę powinny być zgrupowane razem.
Powinny być prawie własnym typem danych, a następnie powinieneś być w stanie je utworzyć i
uzyskać dostęp do różnych elementów.
Nie powinieneś tworzyć trzech oddzielnych zmiennych dla każdej daty.
Więc znowu tutaj chodzi o relacje z obiektami i
klasą, która ma trzy atrybuty danych.
Byłoby więc znacznie lepiej, gdybyś mógł w jakiś sposób pogrupować te zestawy trzech zmiennych.
I to jest dokładnie to, co robi element struktury ic.
Pozwala na zgrupowanie tych różnych elementów razem z określoną nazwą.
Następnie możesz utworzyć różne zmienne o tej nazwie i
uzyskać dostęp do elementów w
tej nazwie, różnych atrybutów danych, tak naprawdę nazywają się członkami.
Jak więc stworzyć strukturę w c.
To bardzo proste. Deklaracja struktury opisuje, w jaki sposób struktura jest składana.
Jakie elementy znajdują się wewnątrz konstrukcji.
Zwykle nazywamy te elementy członkami.
Ponieważ najpierw musisz zdefiniować strukturę lub zadeklarować strukturę, opisz,
co znajduje się wewnątrz struktury.
Możesz to zrobić za pomocą słowa kluczowego struct.
Słowo kluczowe struct umożliwia zdefiniowanie zbioru
zmiennych różnych typów nazywanych strukturą, którą można traktować jako pojedynczą jednostkę.
Bardzo, bardzo potężne.
Więc używając tego słowa kluczowego struct, wszystko, co musisz zrobić, to podać
nazwę, która jest zwykle nazywana nazwą tagu. W tym przykładzie mamy nazwę tagu z datą.
Ale widzisz słowo kluczowe struct, to słowo kluczowe, które mówi
kompilatorowi c, że będzie to określona funkcja.
Może to mieć określoną funkcjonalność, która pozwala grupować elementy.
Zatem struct jest słowem kluczowym, po którym następuje nazwa
tagu, a na końcu znajduje się lewy
nawias klamrowy i prawy nawias klamrowy, po którym następuje średnik.
Wewnątrz możesz zdefiniować dowolne typy zmiennych, możesz nawet umieścić tam wskaźniki.
A ci nazywani są członkami struktury.
Więc to jest instrukcja ponownie definiująca strukturę daty,
którą kompilator c zrozumie.
Mówi kompilatorowi c, co będzie zawierać struktura stanu,
trzy elementy: miesiąc, dzień
i rok. Nie ma alokacji pamięci dla tej deklaracji.
Powtarzam, że to jest struktura, która istnieje.
Jeszcze nie zacząłem go używać. Właśnie powiedziałem, jak to zostanie zdefiniowane.
To będzie struktura daty iz tego się ona składa.
Nazwy zmiennych w strukturze daty, miesiąc, dzień i rok,
nazywane są członkami lub polami.
Elementy struktury pojawiają się między nawiasami klamrowymi,
które następują po dacie nazwy znacznika struct, czyli data nazwy znacznika.
Bardzo, bardzo prosta składnia do grupowania tych elementów razem w jednej nazwie, którą jest data.
Zauważasz, że różni się od tablicy, ponieważ nie
ma indeksów, tak naprawdę nie określasz rozmiaru.
To nie jest dokładnie ten sam typ danych.
Możesz mieć różne typy danych i możesz mieć wiele różnych.
Jak więc wykorzystasz tę strukturę.
Cóż, definicja daty definiuje nowy typ w języku.
Możesz naprawdę myśleć o tym jako o innym typie, takim jak int, double lub float.
Poza tym typem, który zdefiniowałeś, możesz traktować go prawie jak wyliczenie.
Z wyjątkiem, że wyliczenie ma tylko jedną wartość.
Ta struktura daty może zawierać trzy wartości, ale jest to inny typ danych.
Obecnie można zadeklarować zmienne jako typu struct.
Więc to jest dokładnie to, co byś zrobił.
Mógłbyś stworzyć nową zmienną o nazwie dzisiaj i
będzie to typ typu struct date.
A dzisiaj zasadniczo będzie w stanie utrzymać trzy wartości.
A jeśli chcesz zadeklarować więcej
dat, możesz utworzyć więcej zmiennych tego samego typu.
Dzięki temu nie musisz już mieć trzech osobnych zmiennych na datę
zakupu, trzech osobnych zmiennych na
bieżącą datę, trzech osobnych zmiennych na datę rozliczenia.
Możesz mieć jedną zmienną
lub dwie zmienne z różnych instancji tej faktycznej struktury.
Miejmy nadzieję, że zauważysz, jak potężne może to być.
Więc to powyższe oświadczenie jest typu struct date, data
zakupu.
Pamięć jest teraz przydzielana, ponieważ zadeklarowano zmienną Pamięć
jest przydzielana dla tej struktury.
Pamięć jest przydzielana dla trzech wartości całkowitych lub trzech
członków każdej zmiennej,
dzięki czemu pamięć zostanie przydzielona.
A także dlatego, że zostanie przydzielony, ponieważ nie ma tam żadnych wskazówek.
Gdyby w tej strukturze były wskaźniki, musiałbyś przydzielić pamięć dla tego wskaźnika.
Ale ponieważ ta dzisiejsza struktura date jest bardzo prosta,
zaczynam powoli, zawiera trzy liczby int, te elementy są automatycznie przydzielane.
Ale upewnij się, że rozumiesz różnicę w stosunku do poprzedniego i bieżącego slajdu.
Istnieje różnica między definiowaniem struktury a deklarowaniem zmiennych tego
konkretnego typu struktury.
Struktura finansów po prostu mówi kompilatorowi c, oto struktura, a
to - to są dane, które się w niej znajdują.
Ale tak naprawdę zadeklarowanie zmiennej tego konkretnego typu struktury
oznacza, że zacznę używać tej struktury.
Mam teraz przydzieloną pamięć dla trzech elementów w naszym przykładzie i mogę
uzyskać dostęp do tych elementów i je ustawić.
Jak więc uzyskać dostęp do członków w strukturze?
Teraz, gdy wiesz, jak zdefiniować strukturę i wiesz,
jak deklarować zmienne struktury, musisz teraz
być w stanie zrozumieć, jak odwoływać się do tych elementów członkowskich struct.
Musisz mieć do nich dostęp. Jeśli nie możesz uzyskać do nich dostępu, aby zobaczyć wartości lub ustawić wartości, byłoby to bezużyteczne.
Zatem nazwa zmiennej strukturalnej nie jest wskaźnikiem.
Potrzebujesz więc specjalnej składni, aby uzyskać dostęp do członków.
Ponieważ wskaźniki zwykle zawierają tylko wartość
adresu.
A jeśli to nie jest wskaźnik, będziesz potrzebować specjalnej składni.
Możesz odwołać się do elementu członkowskiego struktury, pisząc nazwę zmiennej, po której następuje kropka.
Zwykle nazywa się to operatorem kropki.
A następnie po tym okresie
operatora kropki, podążasz za nazwą zmiennej składowej wewnątrz tej struktury.
Okres między nazwą zmiennej
strukturalnej a nazwą elementu jest nazywany operatorem wyboru
elementu, nazywanym również operatorem kropki.
Pomiędzy nazwą zmiennej, kropką i nazwą elementu nie może być spacji.
Aby ustawić wartość dnia w zmiennej dzisiaj na 25, po
prostu zrobiłbym coś takiego. Nazwa zmiennej, która jest
dzisiaj, a wtedy powiedziałbym kropka, bez spacji między bokami.
Następnie podałbym nazwę elementu wewnątrz definicji struktury,
czyli dzień.
A potem przypisałbym to tak, jak przypisuję każdą inną liczbę całkowitą.
Użyłbym operatora przypisania
równości, dosłownej stałej tutaj i średnika.
Bardzo, bardzo proste. Jeśli chcę przypisać
rok, powiedziałbym, że dzisiaj. rok i powiedziałbym na przykład równy 2015.
A kiedy chcę uzyskać dostęp do wartości członkowskich.
Na przykład, gdybym chciał uzyskać dostęp do wartości elementu członkowskiego miesiąca, aby sprawdzić, czy jest równa
12, nadal używałbym tej składni kropki, tego operatora wyboru elementu członkowskiego.
Możesz więc użyć operatora wyboru członków, aby uzyskać dostęp do wartości członków.
A kiedy uzyskujesz dostęp do
tych zmiennych składowych, możesz ich używać tak samo, jak innych zmiennych.
Możesz ich używać w operacjach arytmetycznych, jeśli są ints.
Będziesz postępować zgodnie z regułami tego typu danych.
W tym przypadku możemy porównać to do liczby 12, używając
po prostu równości równa się wewnątrz instrukcji if.
A potem, na przykład, gdyby było równe 12, moglibyśmy powiedzieć, że następny miesiąc równa się 1.
Może to być zmienna lokalna, którą byśmy przypisali.
Spójrzmy więc na przykład. Tutaj definiujemy strukturę o nazwie date.
Mamy trzy elementy, liczby całkowite: miesiąc, dzień i rok.
Wiemy, że go definiujemy, ponieważ mamy słowo kluczowe struct i te nawiasy klamrowe.
Zwróć też uwagę, że prawy nawias klamrowy ma średnik na końcu definicji.
W tym momencie żadna pamięć nie jest przydzielana dla tej struktury.
W następnym wierszu faktycznie deklarujemy zmienną tego typu,
więc teraz przydzielamy pamięć dla nazwy zmiennej, która zawiera
zasadniczo trzy elementy: miesiąc, dzień i rok typu int.
Możemy dziś przypisać dane do tych trzech elementów wewnątrz tej struktury, po
prostu używając tego dostępu do elementu z kropką.
Więc dzisiaj. miesiąc równa się dziś dziewięć. dzień równa się 25 i dzisiaj. rok 2015.
Gdybyśmy chcieli je wydrukować lub uzyskać dostęp do tych danych, uzyskalibyśmy do nich dostęp w ten sam
sposób po ich przypisaniu. Po prostu skorzystalibyśmy z tego wyboru członków: dzisiaj. miesiąc, dzisiaj. dzień
do dnia. rok. I znowu możemy na nim wykonywać operacje arytmetyczne, ponieważ jest to int.
Użylibyśmy procenta d lub gdybyśmy chcieli sformatować go na
2, moglibyśmy powiedzieć procent 2I lub procent 2D.
Jest to więc dość prosta składnia, bardzo
łatwa do tworzenia i definiowania struktur, a następnie używania ich, a następnie
uzyskiwania do nich dostępu za pomocą operatora wyboru elementu kropkowego.
A co ze strukturami i wyrażeniami?
Cóż, właśnie zobaczyłeś, że udało mi się uzyskać dostęp do danych i użyć wyrażenia arytmetycznego
i nie jest inaczej.
Jeśli chodzi o ocenę wyrażenia, elementy
struktury kierują się tymi samymi regułami, co zwykłe zmienne.
Jeśli masz elementy wewnątrz tej struktury, które są liczbami całkowitymi, możesz wykonać te
same reguły co dla każdej innej liczby całkowitej.
Możesz zastosować dodawanie, odejmowanie i tak dalej. Jeśli jest to bufor znaków, możesz stosować
tylko zasady dotyczące buforów znaków. Czy możesz dodać i odjąć bufory
znaków, takie rzeczy, zwykle nie.
Więc zmiennoprzecinkowe, podwajane, wszystkie różne typy danych,
po prostu przestrzegasz tych samych reguł, gdy używasz tych elementów członkowskich wewnątrz wyrażeń.
Oto przykład.
Mówię dzisiaj. lata podzielone przez sto plus jeden.
Idealnie poprawne, ponieważ year jest liczbą
int, nie różni się od użycia zwykłej zmiennej typu int.
Po prostu uzyskujesz do niego dostęp w inny sposób, używając tego operatora wyboru członka.
Teraz są warianty. Istnieją różne sposoby definiowania struktur.
Jedyną wielką zaletą c jest jego elastyczność, a c
pozwala zdefiniować strukturę na wiele różnych sposobów. Dlatego podczas definiowania
struktury możesz zobaczyć inną składnię.
Pierwszy przykład, który ci pokazałem, jest naprawdę tym, za którym powinieneś podążać. Powinieneś zawsze mieć nazwę tagu
i powinieneś zdefiniować strukturę w jednym miejscu swojego kodu, a następnie zadeklarować
jej zmienne w innym. Ale c będąc takim,
jakim jest, jest bardzo elastyczny. Możesz faktycznie definiować struktury i deklarować zmienne w tej samej linii.
Możesz także zdefiniować struktury anonimowe lub bez struktur nazwanych.
Jest więc duża elastyczność. Ważne jest, aby zadeklarować
zmienną jako część określonej struktury w tym samym czasie, gdy faktycznie definiujesz strukturę.
Możesz umieścić nazwę zmiennej na dole. Pokażę ci, jak to zrobić.
Uwzględnij nazwę lub nazwy zmiennej przed końcowym średnikiem definicji struktury.
Możesz także przypisywać i inicjalizować wartości do tych zmiennych w normalny
sposób, w jaki przypisujesz zmienne. Spójrzmy więc na to.
Odmiana definiowania struktury, która robi to w tym samym czasie, w którym ją
definiujesz, możesz zadeklarować zmienną. W tym przypadku
zdefiniowaliśmy datę naszej struktury, ale utworzyliśmy również zmienną o nazwie dzisiaj.
Ponieważ na końcu prawego nawiasu klamrowego jest to nazwa przed średnikiem,
czyli zarówno tworzenie zmiennej typu struktura date, jak i definicja struktury date.
Więc w powyższym przypadku tworzysz
zmienną struktury.
Odnosimy się do tego również jako do przykładu struktury. Nazywa się dzisiaj.
Jest deklarowana w tym samym czasie, gdy definiowana jest struktura.
Więc dzisiaj jest zmienna typu data, zrobiliśmy to wszystko w jednym.
Mógłbyś właściwie zaraz po zrobieniu
dzisiejszego dnia, mógł faktycznie zainicjować te zmienne, używając
nawiasów, a następnie mówiąc,
że miesiąc równa się pięć, dzień równa się i tak
dalej, tak jak inicjalizujesz inne liczby całkowite.
Teraz znowu, innym sposobem tworzenia struktury jest
utworzenie nienazwanej struktury. Jest to trochę bardziej ograniczone, ponieważ
niewiele można z tym zrobić.
Ale nie musisz w rzeczywistości podawać nazwy tagu.
Pamiętaj, że nazwa tagu znajduje się u góry, zaraz po słowie kluczowym struct.
W poprzednich przykładach nazwą tagu była data.
Ale nie musisz podawać tej daty.
Jeśli wszystkie zmienne określonego typu konstrukcji są zdefiniowane podczas definiowania struktury,
to nazwę można pominąć.
A to naprawdę oznacza, że będziesz używać struktury tylko
raz i tylko jeden raz.
Moglibyśmy więc po prostu powiedzieć
struct int day, int year, int month, a
następnie zadeklarować zmienną w ten sam sposób.
Ale zauważysz, że po słowie kluczowym struct nie ma nazwy tagu.
To tylko jedna struktura. Zamierzamy użyć raz, więc
tworzymy zmienną dzisiaj, a potem już nigdy jej nie użyjemy.
I to jest naprawdę wada i ograniczenie.
Naprawdę nigdy nie chcesz tego robić, chyba że masz jakąś lokalną strukturę, której użyjesz raz.
Ale nie możesz zdefiniować dalszych przykładów tego, jeśli zdefiniujesz
strukturę w ten sposób
jako strukturę bez nazwy, strukturę bez nazwy.
Wszystkie zmienne tego typu struktury, które chcesz mieć w programie, muszą być zdefiniowane w jednej instrukcji.
Możesz utworzyć więcej niż jedną zmienną, możesz zrobić dzisiejszy przecinek, a
następnie inną zmienną, aby móc utworzyć wiele zmiennych.
Możesz zainicjować wiele zmiennych.
Ale ten sposób jest nieco ograniczony, ponieważ po
tej deklaracji zmiennej na dole nie możesz utworzyć więcej zmiennych.
Istnieją więc trzy sposoby definiowania różnych struktur.
Jednym ze sposobów jest zdefiniowanie struktury za pomocą nazwy
tagu i nie tworzenie zmiennej. Tworzysz zmienną w oddzielnym wystąpieniu, gdy pamięć jest przydzielana.
Innym sposobem jest utworzenie zmiennej i struktury
w tym samym czasie, w którym miałbyś
nazwę tagu, a to pozwoliłoby
ci utworzyć inne instancje lub inne zmienne tego typu struktury później
w programie lub trzecią opcję, w której możesz utworzyć nienazwana
struktura bez nazwy
i tylko zmienna na dole. I znowu, możesz zainicjować to wszystko
za każdym razem, gdy tworzysz zmienne za pomocą nawiasów klamrowych i tak dalej.
Więc teraz inicjalizuję struktury.
Inicjowanie struktur jest bardzo podobne do inicjowania tablic.
Elementy są wymienione w nawiasach klamrowych, przy czym
każdy element jest oddzielony przecinkiem.
Żadnych nowych rzeczy do nauczenia się tutaj naprawdę.
Wartości początkowe podane w nawiasach klamrowych muszą być wyrażeniami stałymi. Nie można
używać zmiennych, wygląda po prostu podobnie do tablicy.
Tutaj tworzymy dzisiejszą zmienną typu struct date
i mówimy, że pierwszy element członkowski to siedem, drugi
to dwa, a trzeci to 2015, co odpowiada dniu miesiąca w
roku, ponieważ taka jest kolejność tego,
jak zostały zdefiniowane w strukturze.
Tak więc, podobnie jak przy inicjalizacji
tablicy, może zostać wyświetlonych mniej wartości niż jest zawartych w strukturze.
Nie musisz podawać wszystkich trzech, możesz po
prostu podać dwa, a to zainicjuje miesiąc i dzień,
a rok nie zainicjuje.
Więc to ustaliłoby datę. jeden. miesiąc do
12 data 1. dzień do 10, ale do tej pory nie podaje żadnej wartości początkowej. rok.
Możesz także określić nazwy członków na liście inicjalizacyjnej, dzięki czemu
nie musisz mieć żadnego zamówienia.
Możesz ułożyć je w dowolnej kolejności i nie jesteś od tego zależny.
Więc możesz zrobić coś takiego. element członkowski równa się
wartość i data struktury, data pierwsza. Można powiedzieć, że kropka miesiąc równa się 12.
Tak więc początkowa składnia tego polega na ustawieniu elementu członkowskiego
wewnątrz nawiasów klamrowych za pomocą kropki, a następnie przypisaniu wartości, kropka miesiąc równa
się 12 przecinkiem kropka data równa się 10.
Potrzebujesz tej kropki. Ta kropka jest ważna, więc nie zapomnij o niej.
Nie potrzebujesz instancji przed kropką.
Więc to po prostu ustawi element członkowski roku
zmiennej struktury daty dzisiaj na 2015 w
tym następnym przykładzie.
Więc tutaj po prostu mówimy, ponieważ pamiętaj, że możesz
pominąć niektóre inne zmienne składowe. W tym przypadku przyjmujemy miesiąc
dnia, więc po prostu ustawimy rok na 2015.
W poprzednim przypadku właściwie pominęliśmy rok i po
prostu ustawiliśmy miesiąc i datę odpowiednio na 12 i 10.
Możemy również wykonać przypisanie za pomocą literałów złożonych.
Cóż, co to dokładnie jest literałem złożonym.
Możesz przypisać jedną lub więcej wartości do struktury w
pojedynczej instrukcji, używając tak zwanego literału złożonego.
Myślę, że to może być tylko w C11.
Ale mamy dzisiaj,
załóżmy, że utworzyliśmy zmienną struct date Today,
a następnie faktycznie umieszczamy w nawiasach struct date.
W nawiasach klamrowych mówimy 9 przecinków 25 przecinków 2015.
A to jest dosłowny złożony.
Ta instrukcja może pojawić się w dowolnym miejscu programu.
Więc w przeciwieństwie do faktycznego inicjowania lub przypisywania wartości za pomocą elementu dot,
możesz umieścić to w dowolnym miejscu programu po tym, jak faktycznie
zainicjowałeś dzisiejszą strukturę. To nie jest deklaracja.
To jest przypisanie literału złożonego.
Operator typecast służy do informowania kompilatora o typie wyrażenia.
Potrzebujesz więc tych rzeczy w nawiasach, które są cast, struct date.
Lista wartości jest zgodna z rzutowaniem i
mają być przypisane do elementów struktury w takiej kolejności, w jakiej jest ona zależna od kolejności.
Jest więc wyświetlana w taki sam sposób, jak w przypadku inicjalizacji zmiennej strukturalnej.
Ponownie, zaletą tego jest
to, że nie musisz przypisywać każdej zmiennej składowej osobno w oddzielnych wierszach.
Możesz to wszystko zrobić w jednej linii i powiedzieć okej, to jest dzisiaj
nowa wartość tej zmiennej.
Możesz również określić wartości, używając notacji składowej z kropką, jak wspomniałem.
Wystarczyłoby to zrobić w jednym wierszu, takim jak ten
lub w oddzielnych wierszach. W ten sposób wygląda to trochę jak
inicjalizacja, ale nadal robisz literały złożone.
Zaletą takiego podejścia jest to, że argumenty mogą pojawiać się w dowolnej
kolejności, tak jak poprzednio.
Ponownie, kluczem i różnicą tych przypisań jest to, że nie
dzieje się to podczas inicjalizacji, robisz
to gdzieś indziej w programie, aby przypisać nowe wartości do tego typu.
A więc wiele dobrych informacji w tym wykładzie.
Rozmawialiśmy o strukturach i ich mocy oraz o tym, jak możemy
grupować różne elementy lub różne zmienne w jedną nazwę.
Definiujemy tę strukturę. Istnieją różne sposoby definiowania struktury.
Następnie musimy również zadeklarować zmienną.
Gdy już mamy tę zmienną, możemy
uzyskać dostęp, przypisać dane do tej struktury za pomocą operatora wyboru elementu kropkowego.
Następnie omówimy również niektóre z różnych notacji
i różnych sposobów wykonywania zadań, a także inicjalizację.
Będziemy trochę używać struktur.
Mam kilka wyzwań, które pomogą ci zapoznać się z tą składnią.
Ale to dopiero początek struktury. Musimy również porozmawiać
o zagnieżdżonych strukturach, o tym, jak używać wskaźników
i struktur i tym podobnych.
Powodzenia, to będzie zabawna i ekscytująca sekcja. Dziękuję Ci.