Struktury - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 6 5 kwietnia 2019 (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 1 / 12
Outline 1 Struktury (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 2 / 12
Niestandardowe typy danych Sposoby definiowania w języku C niestandardowych typów danych: struktury - grupy zmiennych, do których można odwoływać się za pośrednictwem jednej nazwy, (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 3 / 12
Niestandardowe typy danych Sposoby definiowania w języku C niestandardowych typów danych: struktury - grupy zmiennych, do których można odwoływać się za pośrednictwem jednej nazwy, unie - pozwalają definiować kilka typów dla jednego obszaru pamięci, (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 3 / 12
Niestandardowe typy danych Sposoby definiowania w języku C niestandardowych typów danych: struktury - grupy zmiennych, do których można odwoływać się za pośrednictwem jednej nazwy, unie - pozwalają definiować kilka typów dla jednego obszaru pamięci, pola bitowe - elementy struktur, pozwalają operować na poszczególnych bitach, (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 3 / 12
Niestandardowe typy danych Sposoby definiowania w języku C niestandardowych typów danych: struktury - grupy zmiennych, do których można odwoływać się za pośrednictwem jednej nazwy, unie - pozwalają definiować kilka typów dla jednego obszaru pamięci, pola bitowe - elementy struktur, pozwalają operować na poszczególnych bitach, wyliczenia - listy stałych wartości o określonych nazwach, (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 3 / 12
Niestandardowe typy danych Sposoby definiowania w języku C niestandardowych typów danych: struktury - grupy zmiennych, do których można odwoływać się za pośrednictwem jednej nazwy, unie - pozwalają definiować kilka typów dla jednego obszaru pamięci, pola bitowe - elementy struktur, pozwalają operować na poszczególnych bitach, wyliczenia - listy stałych wartości o określonych nazwach, typedef - definiuje nową nazwę dla istniejącego typu. (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 3 / 12
Struktury Struktura to wygodny sposób na przechowywanie pokrewnych informacji (zbiór zmiennych), do których można odwoływać za pomocą jednej nazwy. (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 4 / 12
Struktury Struktura to wygodny sposób na przechowywanie pokrewnych informacji (zbiór zmiennych), do których można odwoływać za pomocą jednej nazwy. struct { int id_nmbr ; char name [ SIZE ]; int on_shelf ; } item1, item2 ; (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 4 / 12
Struktury Struktura to wygodny sposób na przechowywanie pokrewnych informacji (zbiór zmiennych), do których można odwoływać za pomocą jednej nazwy. struct { int id_nmbr ; char name [ SIZE ]; int on_shelf ; } item1, item2 ; Każda struktura reprezentuje nowy zakres widzialności zmiennych. (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 4 / 12
Struktury Struktura to wygodny sposób na przechowywanie pokrewnych informacji (zbiór zmiennych), do których można odwoływać za pomocą jednej nazwy. struct { int id_nmbr ; char name [ SIZE ]; int on_shelf ; } item1, item2 ; Każda struktura reprezentuje nowy zakres widzialności zmiennych. Każda struktura reprezentuje oddzielną przestrzeń nazw. (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 4 / 12
Struktury Struktura to wygodny sposób na przechowywanie pokrewnych informacji (zbiór zmiennych), do których można odwoływać za pomocą jednej nazwy. struct { int id_nmbr ; char name [ SIZE ]; int on_shelf ; } item1, item2 ; Każda struktura reprezentuje nowy zakres widzialności zmiennych. Każda struktura reprezentuje oddzielną przestrzeń nazw. struct { int id_nmbr ; char name [ SIZE ]; int age ; } person1, person2 ; (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 4 / 12
Struktury struct { int id_nmbr ; char name [ SIZE ]; int on_shelf ; } item1 = {528, " Hard drive ", 100}, item2 = {914, " Printer cable ", 57}; printf (" Item id: %d\n", item1. id_nmbr ); printf (" Item name : %s\n", item1. name ); printf (" Item quantity in store : %d\n", item1. on_shelf ); item1. id_nmbr = 767; item1. on_shelf ++; scanf ("%d\n", & item1. id_nmbr ); item2 = item1 ; Do składowych struktury odwołujemy się za pomocą operatora.(kropka): nazwa-struktury.nazwa-pola-struktury. (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 5 / 12
Struktury Deklaracja struktury to szablon, którego można używać do tworzenia kolejnych instancji struktury. (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 6 / 12
Struktury Deklaracja struktury to szablon, którego można używać do tworzenia kolejnych instancji struktury. Ogólna postać deklaracji struktury: struct [ etykieta ]{ typ pole_struktury ; } [ zmienne ]; (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 6 / 12
Struktury Deklaracja struktury to szablon, którego można używać do tworzenia kolejnych instancji struktury. Ogólna postać deklaracji struktury: struct [ etykieta ]{ typ pole_struktury ; } [ zmienne ]; Przykład. struct iteminstore { int id_nmbr ; char name [ SIZE ]; int on_shelf ; }; (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 6 / 12
Struktury Deklaracja struktury to szablon, którego można używać do tworzenia kolejnych instancji struktury. Ogólna postać deklaracji struktury: struct [ etykieta ]{ typ pole_struktury ; } [ zmienne ]; Przykład. struct iteminstore { int id_nmbr ; char name [ SIZE ]; int on_shelf ; }; Po deklaracji struktury nie powstaje jeszcze żadna zmienna. Zadeklarowany został jedynie nowy złożony typ danych, a nie zmienna. (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 6 / 12
Struktury Przykładowa deklaracja struktury: struct iteminstore { int id_nmbr ; char name [ SIZE ]; int on_shelf ; }; (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 7 / 12
Struktury Przykładowa deklaracja struktury: struct iteminstore { int id_nmbr ; char name [ SIZE ]; int on_shelf ; }; Aby zadeklarować zmienną należy napisać: struct iteminstore item1 ; struct iteminstore item2, item3 ; struct iteminstore item4 = {914, " Printer cable ", 57}; item1 = item4 ; (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 7 / 12
Struktury Przykładowa deklaracja struktury: struct iteminstore { int id_nmbr ; char name [ SIZE ]; int on_shelf ; }; Aby zadeklarować zmienną należy napisać: struct iteminstore item1 ; struct iteminstore item2, item3 ; struct iteminstore item4 = {914, " Printer cable ", 57}; item1 = item4 ; W trakcie deklaracji zmiennej będącej zmienną strukturalną iteminstore, kompilator automatycznie rezerwuje odpowiednią ilość pamięci na wszystkie składowe struktury. (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 7 / 12
Przekazywanie pól struktury do funkcji Przekazując składową(pole) struktury, przekazujemy wartość i nie ma znaczenia, że wartość pochodzi ze składowej struktury. (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 8 / 12
Przekazywanie pól struktury do funkcji Przekazując składową(pole) struktury, przekazujemy wartość i nie ma znaczenia, że wartość pochodzi ze składowej struktury. Przykład. Deklaracja:int is on shelf(int); Wywołanie:int qi = is on shelf(item1.on shelf); (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 8 / 12
Przekazywanie pól struktury do funkcji Przekazując składową(pole) struktury, przekazujemy wartość i nie ma znaczenia, że wartość pochodzi ze składowej struktury. Przykład. Deklaracja:int is on shelf(int); Wywołanie:int qi = is on shelf(item1.on shelf); Aby przekazać adres składowej struktury należy skorzystać z operatora &. (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 8 / 12
Przekazywanie pól struktury do funkcji Przekazując składową(pole) struktury, przekazujemy wartość i nie ma znaczenia, że wartość pochodzi ze składowej struktury. Przykład. Deklaracja:int is on shelf(int); Wywołanie:int qi = is on shelf(item1.on shelf); Aby przekazać adres składowej struktury należy skorzystać z operatora &. Przykład. Deklaracja:int put on shelf(int*); Wywołanie:int iq = put on shelf(&item1.on shelf); (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 8 / 12
Przekazywanie pól struktury do funkcji Przekazując składową(pole) struktury, przekazujemy wartość i nie ma znaczenia, że wartość pochodzi ze składowej struktury. Przykład. Deklaracja:int is on shelf(int); Wywołanie:int qi = is on shelf(item1.on shelf); Aby przekazać adres składowej struktury należy skorzystać z operatora &. Przykład. Deklaracja:int put on shelf(int*); Wywołanie:int iq = put on shelf(&item1.on shelf); Przykład. Wywołanie:scanf( %d,&item1.on shelf); (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 8 / 12
Przekazywanie struktur do funkcji struct iteminstore { int id_nmbr ; char name [ SIZE ]; int on_shelf ; }; void print_itme ( struct iteminstore p){ printf (" Item nmbr : %d\n", p. id_nmbr ); printf (" Item name : %s\n", p. name ); printf (" On shelf : %d\n", p. on_shelf ); }... struct iteminstore item = {914, " Printer cable ", 57};... print_item ( item ); (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 9 / 12
Funkcja zwracająca strukturę struct iteminstore { int id_nmbr ; char name [ SIZE ]; int on_shelf ; }; struct iteminstore build_itme ( int n, const char * name, int ns){ struct iteminstore temp ; temp. id_nmbr = n; strcpy ( temp.name, name ); temp. on_shelf = ns; return temp ; }... struct iteminstore item = build_item (914, " Printer cable ", 57) ; (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 10 / 12
Zagneżdżanie struktur struct iin { char imie [ SIZE +1]; char nazw [ SIZE +1]; }; struct student { struct iin nm; int idnmbr, wk; char brg ; } s, t; strcpy (s.nm.imie, " Fred "); strcpy (s.nm.nazw, " Perry "); display_name (s.nm); struct iin abc ; t.nm=abc ; t.wk =23; (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 11 / 12
Tablice struktur struct iteminstore { int id_nmbr ; char name [ SIZE ]; int on_shelf ; }; struct iteminstore inventory [ 100]; inventory [ i]. id_nmbr = 883; inventory [i]. name [0] = \0 ; print_item ( inventory [i]); int iq = put_on_shelf (& inventory [ i]. on_shelf ); struct iteminstore nvntr [] = { {914, " Printer cable ", 57}, {528, " Hard drive ", 100} }; (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 12 / 12