Struct

Struktura jest obiektem składającym się ze zbioru nazwanych składowych o różnych typach. Specyfikator struktury ma postać:

           
struct [<nazwa_typu_strukturalnego >] {
        [<typ> <nazwa_zmiennej [,nazwa_zmiennej, ...]>] ;
        } [<nazwa_zmiennej_strukturalnej>] ;


     Przykład struktury w języku C:

struct rodzina{
char imie[20];
char nazwisko[20];
int wiek;
}osoba;


      Aby dostać się do elementu w strukturze stosujemy notację:
[<nazwa_zmiennej_strukturalnej>].element=zmienna;

Na przykład:
osoba.wiek=20;

Możemy także zadeklarować tablicę struktur:
struct rodzina osoby[5];


    Pola struktur  możemy  inicjować w miejscu ich deklaracji. Wartości na liście inicjacyjnej  muszą być zgodne z liczbą, kolejnością i typami danych pól danej struktury:
struct rodzina{
char imie[20];
char nazwisko[20];
int wiek;
};
Ojciec={"Adam", "Kowalski",45},
Matka={"Ewa", "Kowalska",39};


     Zastanówmy się ile zajmują struktury deklarowane przez nas w pamięci.Pola struktury są umieszczane w pamięci zgodnie z kolejnością występowania w deklaracji. Każde pole struktury zajmuje osobny obszar pamięci. Łączny rozmiar struktury jest równy sumie rozmiarów jej składowych.Rozmiar struktury jest zawsze większy lub równy sumie rozmiarów jej składowych.

struct rodzina{
char imie[20];
char nazwisko[20];
int wiek;
}osoba;

     Rozmiar powyższej struktury będzie równy  20+20+4=44 bajtów.
printf("rozmiar=%d",sizeof(struct rodzina));

    Składowymi struktur może być oczywiście inna struktura. Aby odwołać się do pola struktury będącej składową innej struktury należy wykorzystać kropkę.

struct miejsce_zamieszkania{
char kraj[20];
char wojewodztwo[40];
char powiat[40];
char miasto[40];
char dzielnica[40];
char ulica[40];
};

struct rodzina{
char imie[20];
char nazwisko[20];
int wiek;
miejsce_zamieszkania adres;
}osoba;

strcpy(osoba.adres.kraj,"Polska");


     Zastanówmy czy możemy powoływać wskaźnik na strukturę ?? Oczywiście ,że tak. Podobnie jak na inne zmienne wskaźnik może wskazywać na strukturę:
  struct  node{
   int key;
  struct *left,*right;
 } *korzen;
 

    Aby dostać się do elementu struktury możemy to zrobić na dwa sposoby.Zapis korzen->key=10; jest (z definicji) równoważny (*korzen).key=10;, ale bardziej przejrzysty i powszechnie stosowany.
Informacje
Ostatnia modyfikacja 30-09-2009 10:02 Ostatni autor ferdzikamil
Ilość wyświetleń 1900 Wersja 9
Komentarz
ferdzikamil dnia 30-09-2009 15:08
O co chodzi wyjaśnij to po ludzku .
flabra dnia 30-09-2009 13:58
nie jestem pewien czy mnozenie bytow, to dobry pomysl. lepiej popraw i rozwin swoj poprzedni art.

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0406 sek. (zapytań SQL: 10)