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.
O co chodzi wyjaśnij to po ludzku .
nie jestem pewien czy mnozenie bytow, to dobry pomysl. lepiej popraw i rozwin swoj poprzedni art.