Programowanie w języku C/C++

Struct

  • 2009-09-30 10:02
  • 4 komentarze
  • 10184 odsłony
  • Oceń ten tekst jako pierwszy
 

       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.

4 komentarze

Brak avatara
janusz 2014-04-26 20:27

Czy mogę prosić trochè sera?

Brak avatara
janusz 2014-04-26 20:24

Pieczeń

ferdzikamil 2009-09-30 15:08

O co chodzi wyjaśnij to po ludzku .

flabra 2009-09-30 13:58

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