Podobne

[ Pobierz całość w formacie PDF ]

Można nawet powiedzieć, że w pojęciu języka C++ zarówno struktury jak i unie są typami "klasowymi",
czyli typu class. Ale o tym pomówimy w przyszłym semestrze. Na tym wykładzie omówimy struktury w
starym stylu, natomiast po omówieniu klas powrócimy do struktur w nowym ujęciu.
Deklarację stuktury rozpoczyna słowo kluczowe struct. Podajmy przykład struktury odpowiedniej dla
grafiki. Punkt opisują dwie współrzędne, zadeklarowane jako składowe struktury:
struct point
{
int x;
int x;
}
Po słowie struct występuje nazwa struktury (point) zwana etykietą struktury. Nazwy zmiennych
występujących w strukturze nazywamy składowymi struktury.
Obiekt typu struktura wymaga tyle pamięci do zapisu, ile wynosi suma pamięci koniecznej do zapisu
poszczególnych składowych struktury.
Składowa struktury, normalna zmienna, etykieta mogą mieć te same nazwy bez obawy o konflikt.
Deklaracja struct jest definicją nowego typu złożonego.
Po prawej klamrze zamykającej listę zmiennych może występować lista zmiennych, tak jak po każdym
podstawowym typie. Zatem definicja:
struct {...} x,y,z
odpowiada składniowo definicji:
int x,y,z;
Deklaracja struktury, która nie zawiera listy zmiennych nie rezerwuje pamięci, jedynie opisuje wzorzec
struktury. Mając deklarację struktury można używać jej do deklaracji zmiennych typu struktura np.:
struct point punkt; //równoważne point punkt;
deklaruje zmienną punkt będącą strukturą typu point.
Strukturę można zainicjować dopisując na końcu jej definicji listę wartości początkowych jej składowych
np:
struct point maxpoint = {320,200};
W wyrażeniach dostęp do konkretnej składowej struktury umożliwia konstrukcja:
nazwa_struktury.składowa
dla zmiennej strukturalnej punkt owdołania są nastepujące:
a = punkt.x;
b = punkt.y;
Język C umożliwia konstruowanie struktur zagnieżdżonych:
struct rect{
struct point p1;
struct point p2;
}
W takich strukturach dostęp do składowych podstawowych wykonuje się przy pomocy operacji:
struct rect ekran;
a1 = ekran.p1.x
b1 = ekran.p1.y;
Podobnie jak w przypadku zmiennych podstawowych, możemy posługiwać się tablicami struktur. Jest to
często spotykane przy tworzeniu rekordów, które mają być zapisane do pliku. Można więc stworzyć tablicę
struktur rect:
struct rect{
struct point p1;
struct point p2;
} okno[5];
Każdy element tablicy jest strukturą. Powyższy zapis można zapisać inaczej:
struct rect okno[5];
Inicjowanie tablicy struktur przeprowadza się podobnie jak dla pojedynczych struktur, po definicji podaje
się ujętą w nawiasy klamrowe listę wartości początkowych:
struct point {
int x;
int y;
} punkt[ ] = {
0,0,
1,1,
1.5,
16,8 }
Precyzyjniej byłoby ująć wszystkie elementy wierszy tablicy w nawias {}np.:
{1,2},
{1.4},
{1,5},
........
ale gdy podano wszystkie wartości i gdy wartościami są proste stałe lub napisy, wówczas wewnętrzne
nawiasy można pominąć. Jak w przypadku normalnych tablic, gdy pominięto wymiar i podano listę
wartości początkowych, to liczba elementów tablic struktur zostaje wyliczona automatycznie.
Podczas omawiania wskazników powiedzieliśmy, że można je tworzyć do większości typów podstawowych
i pochodnych (złożonych). Pora wię teraz na omówienie wskazników do struktur. Są one tak powszchne, że
do języka włączono specjalny operator (strzałkę), mający postać: ->. Użycie tego operatora przedstawimy
na przykładzie struktury dane:
struct dane{
int klucz;
int tabllica[200];
}dane_dos
Deklarujemy wskażnik wsk_str do zmiennej dane_dos:
struct dane *dane_dos;
inicjujemy go zmienna dane_dos:
wsk_str = &dane_dos;
Od tego czasu do pól struktury można odwoływać sie poprzez wskaznik w następujący sposób:
wsk_str->klucz = 1; // ekwiwalent dane_dos .klucz = 1;
Zwróćmy uwagę, że nie stosujemy * do odwoływania się do wartości elementu składowego struktury
wskazanej przez wskaznik wsk_str. Powodem wprowadzenia operatora -> do obsługi stuktur jest fakt, że
przez operatory * i & nie uzyskamy dostępu do poszczególnych elementów struktury.Nie ma więc czegoś
takiego jak:
*wsk_str.klucz;
Unie
Unia jest zmienną, która w różnych momentach może przechowywać w tym samym miejscu pamięci
obiekty różnych typów. Obiekty typu unia wymagają do zapisu tyle bajtów pamięci ile wynosi liczba
bajtów potrzebna na przechowanie najdłuższego elementu uni. Deklaracja unii podobna jest do deklaracji [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • grolux.keep.pl
  • Powered by MyScript