Struct

ferdzikamil
   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.

2 komentarzy

O co chodzi wyjaśnij to po ludzku .

nie jestem pewien czy mnozenie bytow, to dobry pomysl. lepiej popraw i rozwin swoj poprzedni art.