Startuj z nami!

www.szkolnictwo.pl

praca, nauka, rozrywka....

mapa polskich szkół
Nauka Nauka
Uczelnie Uczelnie
Mój profil / Znajomi Mój profil/Znajomi
Poczta Poczta/Dokumenty
Przewodnik Przewodnik
Nauka Konkurs
uczelnie

zamów reklamę
zobacz szczegóły
uczelnie

Struktura (programowanie)

Struktura (programowanie)

Struktura lub rekord - to złożony typ danych występujący w wielu językach programowania , grupujący logicznie powiązane ze sobą dane różnego typu w jednym obszarze pamięci. Składowe struktury - pola - są etykietowane, tj. mają swoje unikatowe nazwy; poprzez podanie nazwy otrzymuje się dostęp do danego pola.

Struktury są powszechnie stosowane w programowaniu, pozwalają bowiem w przejrzysty sposób opisywać złożone obiekty. Przykładem struktury może być informacja o książce: imię i nazwisko autora ( typ łańcuchowy ), tytuł (typ łańcuchowy), rok wydania (liczba całkowita), liczba stron (liczba całkowita), nazwa wydawnictwa, numer ISBN itp.

W językach z silną typizacją , zanim zostanie stworzona zmienna typu rekordowego, musi zostać zdefiniowany odpowiedni typ opisujący strukturę rekordu; takie typy nazywa się typami rekordowymi lub po prostu rekordami.

Podobną strukturą danych są krotki , w których pola nie są identyfikowane nazwą, lecz indeksem. W odróżnieniu jednak od krotek, dopuszcza się modyfikację pól struktury.

Spis treści

Struktura w języku C

 /* deklaracja */ struct miasto {     long ludnosc;     char* rzeka; };                           /* definicja */ struct miasto Poznan; Poznan.ludnosc = 600000; Poznan.rzeka = (char*)malloc(sizeof(char)*6); strncpy(Poznan.rzeka, "Warta\0", 6);

Struktury w C mogą zawierać także pola zajmujące mniej niż 1 bajt . Aby zadeklarować takie pole, należy podać po dwukropku liczbę bitów .

 struct liczba {     unsigned int mlodszy_bajt :8;     unsigned int starszy_bajt :7;     unsigned int znak :1; };

Pola bitowe mogą mieć typ int lub unsigned int. W tym pierwszym wypadku najstarszy bit będzie przeznaczony na znak danego pola.

Wyrównanie pól struktury

W języku C (a także C++) rozmiar struktury może być większy niż suma rozmiarów poszczególnych pól struktury. Wynika to z umieszczania przez kompilator pól po adresami wyrównanymi do granicy słowa maszynowego (zwykle 2, 4 lub 8 bajtów), co zapewnia szybszy dostęp przez mikroprocesor, ale jednocześnie utrudnia przekazywanie (np. przez sieć) lub zapis takich struktur.

Na przykład przyjmując wyrównanie do granicy 4 bajtów, poniższa struktura nie będzie zajmowała 5, lecz 8 bajtów:

struct {char a;          /* sizeof(a) = 1 */int  b;          /* sizeof(b) = 4 */} S;                     /* sizeof(S) = 8 */

Wyrównanie można rozumieć jako dodatkowe pola, niedostępne dla programisty:

struct {char a;char [3];        /* wyrównanie */int  b;} S;

Czasami wyrównanie pól struktury jest niepożądane, większość kompilatorów umożliwia programiście zmianę lub wyłączenie poprzez dyrektywę #pragma pack, np.:

#pragma pack(push)       /* zapamiętaj bieżącą wartość wyrównania */#pragma pack(1)          /* brak wyrównania */struct {char a;          /* sizeof(a) = 1 */int  b;          /* sizeof(b) = 4 */} S;                     /* sizeof(S) = 5 */#pragma pack(pop)

Zobacz też: unia

Struktura w języku C++

Struktury w C++ są deklarowane tak jak w C, jednak oprócz pól mogą zawierać także funkcje (tzw. metody) i mogą dziedziczyć z innych klas i struktur.

Struktura różni się w C++ od klasy wyłącznie domniemanym zakresem widoczności jej pól i metod - dla klasy jest to private a dla struktur public. Używanie struktur zamiast klas nie jest jednak dobrą praktyką programowania, gdyż zaciemnia budowę programu.

 /* deklaracja */ struct miasto {     long ludnosc;     char* rzeka;     miasto(long ludnosc,char *rzeka):      ludnosc(ludnosc), rzeka(strdup(rzeka)) {}; /*konstruktor*/     inline char* wez_rzeke() {return rzeka};     ~miasto() {free( (void*)rzeka );} /*destruktor*/ };

Struktura w Matlabie

 % definicja Poznan.ludnosc = 600000 Poznan.rzeka = 'Warta'

Struktura w języku Fortran 90/95

 ! deklaracja TYPE::miasto   INTEGER(KIND=4)::ludnosc   CHARACTER(20)::rzeka   END TYPE miasto             ! definicja TYPE(miasto)::Poznan Poznan%ludnosc = 6000000 Poznan%rzeka = 'Warta' ! albo Poznan = miasto(6000000,'Warta')

Struktura w Pascalu

 {deklaracja} TYPE miasto = RECORD     ludnosc : longint;     rzeka   : array[1..20] of char; END;                        {definicja} VAR Poznan: miasto; Poznan.ludnosc := 600000; Poznan.rzeka := 'Warta';

Struktura w PL/1

W języku PL/1 deklaracja struktury zawiera wprost podany przez programistę poziom zagłębienia w hierarchii struktury w postaci liczby całkowitej umieszczonej przed nazwą pola. Struktury na poziomie 1 to niezależne od siebie obiekty programowe, natomiast każdy kolejny poziom deklaruje pola lub kolejne podstruktury zawarte w strukturze nadrzędnej. Zdefiniowana hierarchia struktury może być użyta w innej deklaracji dzięki użyciu frazy LIKE, kopiującej zdefiniowaną strukturę.

  dcl  1 miasto,    2 ludnosc fixed dec(7,0),    2 rzeka char(20);  ...  miasto.ludnosc=6000;  miasto.rzeka='Warta';

Struktura w SML-u

(* deklaracja typu rekordu (struktury) *)type miasto = {       ludnosc : int,       nazwa   : string,       rzeka   : string};(* utworzenie zmiennej *)val Poznan = {nazwa="Poznań", rzeka="Warta", ludnosc=600000};(* pobranie tylko jednego pola (wygodne przy przypisywaniu większej liczby pól niż jedno)   można podać albo nazwę zmiennej ('Ludnosc_zmiennej'),   albo przyjmowana jest nazwa taka sama nazwa jak pola ('rzeka') *)val {ludnosc = Ludnosc_Poznania, rzeka, ...} = Poznan;(* pobranie tylko jednego pola *)val Ludnosc_Poznania = #ludnosc Poznan;


Inne hasła zawierające informacje o "Struktura (programowanie)":

Rodzimy Kościół Polski ...

Adwentyzm ...

Brno ...

Organellum ...

Uniwersytet Witolda Wielkiego ...

Mioglobina ...

Nowa Anglia ...

Ciałko nerkowe ...

Kowary ...

Agent ...


Inne lekcje zawierające informacje o "Struktura (programowanie)":

212 Gospodarcze i społeczne problemy II Rzeczypospolitej (plansza 3) ...

213 Polska kultura, sztuka i nauka dwudziestolecia międzywojennego (plansza 12) ...

35. Organizacje międzynarodowe ? Rada Europy, NATO (plansza 19) ...





Zachodniopomorskie Pomorskie Warmińsko-Mazurskie Podlaskie Mazowieckie Lubelskie Kujawsko-Pomorskie Wielkopolskie Lubuskie Łódzkie Świętokrzyskie Podkarpackie Małopolskie Śląskie Opolskie Dolnośląskie