Kurs programowania w C cz. 125

Nasza ocena:

5
Wyświetleń: 553
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Kurs programowania w C  cz. 125 - strona 1

Fragment notatki:

142 ROZDZIAŁ 19. TYPY ZŁOŻONE kierunek = W_DOL; printf("%i\n", kierunek); /* wypisze 1 */ Kolejne wartości to po prostu liczby naturalne: domyślnie pierwsza to zero, druga jeden itp. Możemy przy deklarowaniu typu wyliczeniowego zmienić domyślne przyporządkowanie: enum Kierunek { W_GORE, W_DOL = 8, W_LEWO, W_PRAWO }; printf("%i %i\n", W_DOL, W_LEWO); /* wypisze 8 9 */ Co więcej liczby mogą się powtarzać i wcale nie muszą być ustawione w kolejności rosnącej: enum Kierunek { W_GORE = 5, W_DOL = 5, W_LEWO = 2, W_PRAWO = 1 }; printf("%i %i\n", W_DOL, W_LEWO); /* wypisze 5 2 */ Traktowanie przez kompilator typu wyliczeniowego jako liczby pozwala na wydajną ich obsługę, ale stwarza niebezpieczeństwa — można przypisywać pod typ wyliczeniowy liczby, nawet nie mające odpowiednika w wartościach, a kompilator może o tym nawet nie ostrzec: kierunek = 40; Unie Są to twory deklarowane w następujący sposób: union Nazwa { typ1 nazwa1; typ2 nazwa2; /* ... */ }; Na przykład: union LiczbaLubZnak { int calkowita; char znak; double rzeczywista; }; Pola w unii  nakładają  się na siebie w ten sposób, że w danej chwili można w niej przechowywać wartość tylko jednego typu. Unia zajmuje w pamięci tyle miejsca, ile zajmuje największa z jej składowych. W powyższym przypadku unia będzie miała prawdopodobnie rozmiar typu double czyli często 64 bity, a całkowita i znak będą wskazywały odpowiednio na pierwsze cztery bajty lub na pierwszy bajt unii (choć nie musi tak być zawsze). Do konkretnych wartości pól unii odwołujemy się przy pomocy  operatorem wyboru składnika  — kropki: union LiczbaLubZnak liczba; liczba.calkowita = 10; printf("%d\n", liczba.calkowita); Zazwyczaj użycie unii ma na celu zmniejszenie zapotrzebowania na pamięć, gdy naraz będzie wykorzystywane tylko jedno pole i jest często łączone z użyciem struktur. Życiowy przykład użycia — zamieniamy kolejnosc bajtow w p.p1 — np. w kodzie opro- gramowania sieciowego Big Endian -   Little Endian, gdypotrzeba zmiany numeru portu podanego w “nie sieciowej” kolejnosci bajtów: ... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz