W poprzednim rozdziale poznałeś tablicę. Wiesz, że jest to zbiór wielu zmiennych umieszczonych w jednej tablicy. Struktura to także połączenie wielu zmiennych, tyle że połączone zmienne mogą być różnych typów. Np. w tablicy miałeś trzy zmienne typu int. W strukturze możesz mieć trzy zmienne dowolnych typów, np. pierwsza będzie typu int, druga będzie typu char, trzecia bool. Oczywiście zmienne te nadal będą obok siebie w pamięci, w takiej kolejności, w jakiej będą ułożone w strukturze.

DEFINIOWANIE STRUKTURY

Aby móc używać struktury, należą ją najpierw zdefiniować:

...
struct definicja_struktury
{
  int liczba1,liczba2;
  bool zmienna;
  char znak;
};
...

Definicję struktury rozpoczynamy od słówka struct. Dalej piszemy nazwę naszej definicji struktury i kolejno wymieniamy zmienne w strukturze. Nasza struktura składa się z czterech zmiennych.

TWORZENIE STRUKTURY W PAMIĘCI

Dopiero stworzyliśmy definicję struktury, czyli to jak ma taka struktura wyglądać. Należy o tym pamiętać, gdyż czym innym jest stworzenie definicji struktury, a czym innym utworzenie jej w pamięci.

No więc mamy definicję. Jak stworzyć obraz takiej struktury w pamięci? Nic prostszego:

...
definicja_struktury struktura;
...

Najpierw piszemy z jakiej definicji korzystamy, bo może być ich wiele, a po spacji nazwę naszej struktury utworzonej w pamięci. W programie mając definicję jednej struktury możemy utworzyć wiele struktur w pamięci z niej.

...
definicja_struktury struktura1;
definicja_struktury struktura2;
...

Utworzyliśmy w pamięci dwie struktury z definicji definicja_struktury.

Po utworzeniu struktury w pamięci, należy ją zainicjować, chyba, że wolimy jakieś nieznane nam wartości.

...
definicja_struktury struktura;
struktura.liczba1=
123
;
struktura.liczba2=
-1234
;
struktura.zmienna=true;
struktura.znak='r';
...

Aby przypisać wartość zmiennej w strukturze, należy przed nazwą zmiennej podać nazwę struktury, w jakiej jest utworzona i oddzielić to kropką. Początkujący programiści(a przynajmniej ja jak zaczynałem) często mylą się podając przed zmienną definicję struktury, a należy podać strukturę utworzoną w pamięci, NIE DEFINICJĘ STRUKTURY, bo to dwie inne rzeczy.

Zastosowanie struktur jest szerokie, używa się je, gdy w programie mamy zmienne, które coś łączy, np. w grach statystyki naszego bohatera będą taką strukturą, jak mogłaby wyglądać przykładowa struktura takiego bohatera:

...
struct Bohater
{
  int zycie,walka,magia,sila;
  char imie[
256
];
  bool praworeczny;
};
...

I możemy sobie w grze stworzyć wiele takich postaci(o tej definicji):

...
Bohater Nasz;
Bohater Przeciwnik1;
Bohater Przeciwnik2;
...

I już mamy trzy takie postaci, jeszcze trzeba każdą z nich zainicjować i mamy jakieś postaci w grze :)

Odwoływanie się przez wskaźnik

Czasami zdarza się, że używamy nie tylko struktury, ale także wskaźnika do niej, przy odwoływaniu się do elementów struktury przez wskaźnik, używamy nie kropki, ale operatora strzałeczki "->".

...
definicja_struktury struktura;
//zakładamy, że mamy jakąś definicję struktury i tworzymy strukturę w pamięci

definicja_struktury* wskaz_na_strukture=&struktura;
//tworzymy wskaźnik na tę strukturę

struktura.liczba1=
34
;
//tutaj odwołujemy się do elementu poprzez strukturę w pamięci

wskaz_na_strukture->liczba1=
23
;
//natomiast tutaj odwołujemy się do elementu struktury poprzez wskaźnik

...

Zagnieżdżanie struktur

Ten akapit dotyczy umieszczania struktury w strukturze, myślę, że tutaj nie jest potrzebny komentarz, wystarczy kod:

#include <iostream>


struct Def_Struct_1
{
  int liczba;
  char litera;
};

struct Def_Struct_2
{
  int liczba;
  Def_Struct_1 struktura;
};
//I co my tu mamy? W strukturze 2, mamy umieszczoną strukturę 1, ważne, aby struktura którą umieszczamy,
//była zadeklarowana pierwsza, gdyż kompilator musi ją już znać

int main(int argc,char* argv[])
{
  Def_Struct_2 strukt;
  
//tworzymy strukturę 2 w pamięci, tworząc 2, automatycznie jest tworzona struktura 1, gdyż zawira się ona w 2

  strukt.liczba=
23
;
//tutaj zwykłe przypisanie wartości elementowi w strukturze 2

  strukt.struktura.liczba=
34
;
//chyba widać o co w tym biega, struktura w strukturze

  strukt.struktura.litera='a';
  system(
"PAUSE"
);
  return
0
;
}


Oczywiście można dalej zagnieżdżać kolejne struktury w sobie.

Wejść na stronę:     Ilość osób online:
Prawa autorskie © 2008 crayze. Wszelkie prawa zastrzeżone.
crayze7@gmail.com