Struktury ® najbardziej elastyczny sposób reprezentowania danych w języku C (odpowiednik rekordów w języku Pascal),
® obiekt złożony z jednej lub kilku zmiennych, które mogą być różnego typu (w przeciwieństwie do tablic),
® budowa - układ i typy pól składowych - typu strukturalnegosą definiowane przez programistę.
Przykład:
nazwisko
imię
rok_urodz
płeć
wzrost
stypendium
char [30]
char [15]
int
char
unsigned char
double
· Deklarowanie typu strukturalnego
struct nazwa_typu ¬ nazwa tworzonego typu strukturalnego
{
typ_pola_1 nazwa_pola_1;
typ_pola_2 nazwa_pola_2; ¬ typy i nazwy pól składowych
· · ·
typ_pola_n nazwa_pola_n;
} ;
Przykłady:
struct dane_osobowe
char nazwisko[31];
char imie[16];
int rok_urodz;
char plec;
unsigned char wzrost;
double stypendium;
struct punkt { double x, y; } ;
struct okrag
struct punkt srodek_okregu; // struktura zagnieżdżona
double promien;
· Definiowanie (tworzenie) zmiennych strukturalnych
struct nazwa_typu nazwa_tworzonej_zmiennej;
struct dane_osobowe student;
struct okrag figura_1;
· Można połączyć definicję zmiennej z inicjacją jej wartości. Np.
// { Nazwisko, Imie, Rok_urodz, Plec,Wzrost, Stypendium }
struct dane_osobowe student = { ”Kowalski”, ”Jan”, 1970,‘M’, 175, 320.0 };
// { { x , y } , promień }
struct okrag figura_1 = { { 10.0, 15.75 } , 50.5 };
· Można połączyć deklarację typu strukturalnego z definicją zmiennych
struct nazwa_typu ¬ nazwę typu można pominąć
} nazwa_ zmiennej ; ¬ nazwa definiowanej zmiennej
Np.
struct // pominięto nazwę typu
} student_1, student_2; // definicja dwóch zmiennych strukturalnych
struct okrag // jednoczesna deklaracja typów i definicja zmiennych
struct punkt // bezpośrednia definicja struktury zagnieżdżonej
double x, y;
} srodek_okregu;
} figura_1;
· Odwoływanie się do elementów struktury ® za pomocą kropki
student . wzrost = 180 ; // przypisanie wartości
student_1 . wzrost = student_2 . wzrost;
figura_1 . promien = 50;
figura_1 . srodek_okregu . x = 15;
scanf( ”%lf” , &student . stypendium ); // wczytanie z klawiatury
scanf( ”%s” , student . nazwisko ); // wczytanie łańcucha znaków
strcpy( student . imie, ”Tomasz” );
W pierwotnej wersji języka C (Kernigham, Ritchie) jedynymi dozwolonymi operacjami na strukturze były pobranie adresu (&) oraz działania na składowych.
W wersji ANSI-C (Turbo C++) możliwe jest bezpośrednie przypisanie struktur, struktura może być również argumentem i wynikiem zwracanym przez funkcję.
student_1 = student_2; // bezpośrednie przypisanie struktur
memcpy( &student_1, &student_2, sizeof( student_1 ) );
student_1 . nazwisko = student_2 . nazwisko
strcpy( student_1 . nazwisko, student_2 . nazwisko );
// funkcja zwracająca daną strukturalną
struct dane_osobowe Wczytaj_Dane_Osobowe( void )
struct dane_osobowe nowe_dane;
printf( ”Podaj nazwisko: ” );
scanf( ”%s” , nowe_dane . nazwisko );
return( nowe_dane );
}
// funkcja której argumentem jest zmienna strukturalna
void Wyswietl_Dane_Osobowe( struct dane_osobowe osoba )
printf( ”Nazwisko: %s\n” , osoba . nazwisko );
...
klamer87