PO W2 IV ZIN id 364240 Nieznany

background image

1

Programowanie obiektowe

Lokalizacja plików do wykładów



http://members.lycos.co.uk/pkjw84/kw/



w folderze:

Programowanie obiektowe IV ZIN



logowanie:



nazwa u

ż

ytkownika

2007/2008



hasło

kw

background image

2

Programowanie obiektowe

Wykład 2: Wskaźnikowe typy danych



Podstawy typów wska

ź

nikowych



Operatory wska

ź

nikowe



Tablice



Wska

ź

niki a typy tablicowe i napisy



Struktury

background image

3

Programowanie obiektowe

Podstawy typów wskaźnikowych



Zmienna typu wskaźnikowego (wskaźnik) jest zmienną przechowującą
adres do innego obiektu (zmiennej) w pamięci operacyjnej



Wskaźniki mają określoną specjalną arytmetykę wskaźników, dzięki czemu
można w stosunkowo łatwy sposób operować na adresach w pamięci
operacyjnej

Adres

Wartość

Wskaźnik

Zmienna

background image

4

Programowanie obiektowe

 Deklaracja wskaźnika:

typ *nazwa;

 Przykłady:

int *wsk1;

char *wsk2;

Wskaźniki - podstawy

background image

5

Programowanie obiektowe

Operatory wskaźnikowe:

*

oraz

&



Jednoargumentowy operator

&

zwraca adres w pamięci

Operacja:

m = &count;

umieszcza w zmiennej

m

adres zmiennej

count



Załóżmy, że zmienna

count

zajmuje komórkę pamięci o adresie

2000

.

Załóżmy, też że jej wartość to

100



W wyniku powyższego przypisania zmienna

m

będzie miała wartość

2000, tzn. zmienna m otrzymuje adres zmiennej count

background image

6

Programowanie obiektowe

 Jednoargumentowy operator

*

zwraca wartość zmiennej,

znajdującej się pod adresem następującym po operatorze

 Jeśli zmienna

m

zawiera adres zmiennej

count

to instrukcja

q = *m;

umieszcza wartość zmiennej

count

w zmiennej

q

 Tak więc zmienna

q

będzie miała wartość

100

, gdyż

100

znajduje się

pod adresem

2000

, który jest adresem zapisanym w

m

q

otrzymuje wartość, znajdującą się pod adresem

m

Operatory wskaźnikowe:

*

oraz

&

background image

7

Programowanie obiektowe

Zadanie

Napisa

ć

program wypisuj

ą

cy na ekranie liczb

ę

100 z u

ż

yciem

wska

ź

nika na liczb

ę

typu int.

Wskaźniki - podstawy

background image

8

Programowanie obiektowe

#include <iostream>

using namespace std;

int main() {

int *p, q;

q = 100;

/* przypisanie do q warto

ś

ci 100 */

p = &q;

/* przypisanie do p adresu q */

cout << *p;

/* wy

ś

wietlenie warto

ś

ci q z u

ż

yciem wska

ź

nika */

return 0;

}

Wskaźniki - podstawy

Sposób 1

background image

9

Programowanie obiektowe

#include <iostream>

using namespace std;

int main()

{

int *p, q;

p = &q;

/* pobranie adresu q */

*p = 100;

/* przypisanie warto

ś

ci q z wykorzystaniem wska

ź

nika */

cout <<

″″″″

Warto

ś

ci

ą

zmiennej q jest

″″″″

<< q;

return 0;

}

Wskaźniki - podstawy

Sposób 2

background image

10

Programowanie obiektowe



Przykład niepoprawnego wykorzystania wska

ź

nika

int main(void)

{

int *p;

*p = 10;

}

Wskaźniki - podstawy

/* niepoprawnie - p jeszcze na nic nie wskazuje! */

background image

11

Programowanie obiektowe

 Oprócz operatorów * i & istnieją tylko cztery inne operatory,

które można stosować ze wskaźnikami: +, ++, -, --.

 Operator ++ zwiększa adres, na który wskazuje wskaźnik o jedną długość

typu wskaźnika;
np. je
żeli

p

zawiera adres

200

do liczby całkowitej (o długości 2 bajtów),

to instrukcja

p++

powoduje, że

p

będzie miało adres

202

, tzn. 200+(1*2).

Równoważnie można to zapisać:

p+=1;

 Jeżeli mamy:

int *p;
p=p+200;

to

p

będzie wskazywało na 200. liczbę całkowitą, występująca za liczbą

wskazywaną poprzednio.

 Podobnie działają operatory odejmowania.

Wskaźniki - podstawy

background image

12

Programowanie obiektowe

 Aby otrzymać wartość o jeden większą od wskazywanej przez wskaźnik,

należy posłużyć się konstrukcją:

(*p)++;

(Jeżeli założymy, że

p

wskazuje na adres

200

, pod którym znajduje się

liczba

100

typu int, to po wykonaniu ww. instrukcji

p

wskazuje na liczbę

101

nadal pod adresem

200

).

 UWAGA!

Instrukcja:

*p++;

powoduje zwiększenia wskaźnika

p

o

1

(a nie wartości obiektu, na który

wskazuje!!!), tzn.

p

wskazuje na adres

202

(zakładamy, że liczba typu int

zajmuje 2 bajty).

Wskaźniki - podstawy

background image

13

Programowanie obiektowe

 Aby rzutować zmienną

t

typu

T

na inny typ

S

, poprzedzamy

t

nazwą

typu

S

ujętą w nawias.

 Przykład

float f;

f=100.2;

cout << (int) f; /*wyświetlenie f jako liczby całkowitej */

Rzutowanie typów

background image

14

Programowanie obiektowe

 Ta sama zasada dotyczy rzutowania wskaźników
 Załóżmy, że mamy:

int *iptr;

float *fptr;

 Aby przypisać wskaźnik do liczby całkowitej

iptr

wskaźnikowi do liczby

zmiennoprzecinkowej

fptr

, piszemy:

fptr=(float *) iptr;

Rzutowanie typów

background image

15

Programowanie obiektowe

Wskaźniki a typy tablicowe



J

ę

zyk C/C++ w sposób wyj

ą

tkowy ł

ą

czy wska

ź

niki i tablice



W wyniku deklaracji zmiennej tablicowej,

ś

rodowisko j

ę

zyka C/C++

tworzy wska

ź

nik na pocz

ą

tek tej tablicy. Miejsca na pozostałe

elementy tablicy s

ą

zajmowane w zale

ż

no

ś

ci od rozmiaru tablicy.



Tablica zajmuje spójny obszar pami

ę

ci operacyjnej



Tak wi

ę

c do tablic mo

ż

emy odnosi

ć

si

ę

w sposób tradycyjny, tzn.

przy pomocy nazwy zmiennej z indeksem tablicy: tab[i] lub
stosuj

ą

c arytmetyk

ę

wska

ź

ników



Takie traktowanie tablic jest szczególnie przydatne dla tzw. tablic
otwartych
i ła

ń

cuchów znaków - bez wst

ę

pnego okre

ś

lenia ich

długo

ś

ci



Takich cech nie ma wi

ę

kszo

ść

innych j

ę

zyków programowania

background image

16

Programowanie obiektowe

Wskaźniki i tablice

 Niech:

int sample[10];

 Można utworzyć wskaźnik do pierwszego elementu, używając nazwy

sample

 Poniższy fragment programu przypisuje zmiennej

p

adres

pierwszego elementu tablicy

sample

:

int *p;
int sample[10];
p = sample;

 Równoważne są również odwołania:

sample[i]

oraz

*(sample+i)

background image

17

Programowanie obiektowe



Nazwa tablicy bez indeksu jest wska

ź

nikiem do pocz

ą

tku

tablicy



Przeanalizujmy poni

ż

szy przykład

#include <iostream>

using namespace std;
int main() {

int a[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int *p;
p = a;

/* przypisanie p adresu pocz

ą

tkowego tablicy a */

/* wypisanie pierwszych trzech elementów tablicy a z u

ż

yciem p */

cout << *p << *(p+1) << *(p+2);

/* to samo z wykorzystaniem a */

cout << a[0] << a[1] << a[2];
return 0;

}

Wskaźniki i tablice

background image

18

Programowanie obiektowe

Zadanie

Jaka warto

ść

zostanie wypisana na ekranie?

int temp[5] = {10, 19, 23, 8, 9};

int *p;

p = temp;

Cout << *(p+3);

Odpowiedź: 8

Wskaźniki i tablice

background image

19

Programowanie obiektowe

Zadanie

Napisa

ć

program wczytuj

ą

cy napis jako ła

ń

cuch znaków. Nast

ę

pnie

program powinien odszuka

ć

pierwszy ci

ą

g spacji w ła

ń

cuchu,

po czym wy

ś

wietli

ć

pozostał

ą

cz

ęść

napisu.

Wykorzysta

ć

zmienne wska

ź

nikowe.

Wskaźniki i tablice

background image

20

Programowanie obiektowe

#include <iostream>
using namespace std;

int main(void)
{

char str[80], *p;
cout << "Wprowadz lancuch znakow: ";
gets(str);
p = str;
while(*p && *p!=' ') p++;
while(*p && *p==' ') p++;
cout << p;
getchar();
return 0;

}

Program 2.1

Wskaźniki i tablice

background image

21

Programowanie obiektowe

Wskaźniki wielokrotne



Mo

ż

liwe jest, aby wska

ź

nik wskazywał na inny wska

ź

nik

(tzw. wielokrotne odwołanie niejawne).



Aby zadeklarowa

ć

wska

ź

nik do wska

ź

nika, nale

ż

y przed

nazw

ą

wska

ź

nika umie

ś

ci

ć

dodatkow

ą

gwiazdk

ę

:

char

char

**

**

mp

mp

;

;

Adres

Wartość

Wskaźnik
do wskaźnika

Zmienna

Adres

Wskaźnik

background image

22

Programowanie obiektowe



Aby dosta

ć

si

ę

do warto

ś

ci wskazywanej niejawnie przez

wska

ź

nik do wska

ź

nika, nale

ż

y zastosowa

ć

operator *

dwukrotnie:

char **mp, *p, ch;
p=&ch;

// pobranie adresu ch

mp=&p;

// pobranie adresu p

/* przypisanie ch warto

ś

ci A z wykorzystaniem wielokrotnego

odwołania niejawnego */

**mp=‘A’;

Wskaźniki wielokrotne

background image

23

Programowanie obiektowe

Arytmetyka wskaźników



Przeanalizuj i wyja

ś

nij poni

ż

szy kod:

int x=1, y, z[10];

int *ip, *iq;

ip = &x;

y = *ip;

*ip = 0;

*ip += 1;

y = *ip+2;

ip = &z[0];

iq = ip;

// ip wskazuje na x

// y=1

// x=0

// x=1

// y=3

// ip wskazuje na z[0]

// iq wskazuje na z[0]

background image

24

Programowanie obiektowe

Arytmetyka wskaźników



Przykład operacji dla typu prostego:



int *px;



px += 2;



px = (adres wskazywany przez px) + (2 * rozmiar obiektu
wskazywanego przez
px);



np. dla px równego 3000 i rozmiaru 4 (dla int):



3000 + 2 * 4 = 3008;



Przykład dla tablicy:



int a[4];



int *pa;



pa = a; /* lub pa=&a[0]; */



pa ++;

/*pa wskazuje na a[1] */



pa = pa+2;

/*pa wskazuje na a[3] */



pa --;

/*pa wskazuje na a[2] */

a[0] a[1] a[2] a[3]

3000

3004

3008

3012

pa

background image

25

Programowanie obiektowe

Wprowadzenie do języka C++



Dynamiczny przydział pami

ę

ci (alokacja):



operator new



np.

int *point;

point = new int;

*point = 999;

background image

26

Programowanie obiektowe

Wprowadzenie do języka C++



Dynamiczne zwolnienie pami

ę

ci:



operator delete



np.

delete point;



usuwanie tablicy zaalokowanej dynamicznie:

/* new tab[2]; */

delete [ ] tab;

background image

27

Programowanie obiektowe

Tablice sekwencyjne



W j

ę

zykach programowania przez tablic

ę

rozumie si

ę

ci

ą

g warto

ś

ci

(np. liczb, znaków, innych typów prawidłowych dla kompilatora),
b

ę

d

ą

cych tego samego typu,



Pojedyncza zmienna w tablicy nazywana jest elementem tablicy,



Do wszystkich zmiennych w tablicy odwołujemy si

ę

poprzez t

ę

sam

ą

nazw

ę

wykorzystuj

ą

c indeks elementu tablicy,



Indeks tablicy budowany jest na podstawie typu wyliczeniowego -
najcz

ęś

ciej s

ą

to liczby naturalne z zerem (0) wł

ą

cznie,



S

ą

j

ę

zyki programowania (np. Pascal), w których indeksy mog

ą

by

ć

znakami

ASCII lub własnymi typami wyliczeniowymi,



W j

ę

zyku C/C++ domy

ś

lnym indeksem tablicy s

ą

liczby naturalne

z zerem

background image

28

Programowanie obiektowe

Deklarowanie tablic jednowymiarowych (wektorów)



W j

ę

zyku C/C++ tablice jednowymiarowe deklarujemy według schematu:

typ_elementów nazwa_tablicy [rozmiar]

każdy z elementów tablicy

jest typu „typ_elementów”

dostęp do każdego

z elementów tablicy

jest realizowany

poprzez jej nazwę

rozmiar podawany jest

jako liczba naturalna w otoczeniu

nawiasów kwadratowych



Zmienne i stałe typu tablicowego deklarujemy w cz

ęś

ci

deklaracyjnej programu C/C++ jest liczony od zera do warto

ś

ci

rozmiar-1

background image

29

Programowanie obiektowe

Tablice jednowymiarowe



Przykład: deklaracja pi

ę

ciopozycyjnej tablicy liczb całkowitych:

int tab[5];



Po wykonaniu powy

ż

szej deklaracji powstaje w pami

ę

ci

operacyjnej nast

ę

puj

ą

ca struktura danych:

tab[0]

tab[1]

tab[2]

tab[3]

tab[4]

spójny obszar pamięci operacyjnej

najmłodszy adres

najstarszy adres

background image

30

Programowanie obiektowe

Tablice jednowymiarowe



Wypełnienie tablicy z wykorzystanie p

ę

tli for :

int tab[5];

int j;

for (j=0; j<5; j++)

{

tab [ j ] = j;

/* podstawienie warto

ś

ci do elementu tablicy */

}



Po wykonaniu powy

ż

szych działa

ń

otrzymujemy:

0

tab[0]

1

tab[1]

2

tab[2]

3

tab[3]

4

tab[4]

background image

31

Programowanie obiektowe

Tablice jednowymiarowe

Przykład: Wczytanie elementów do tablicy i wypisanie ich na ekranie:

#include <iostream>
using namespace std;
int moja_tab[5];
int j;

int main( ) {

for (j=0; j<5; j++)
{

/*wczytanie elementu do tablicy*/

cout << endl << "Wprowadz element na pozycje " << j << endl;
cin >> moja_tab[j];

/* wypisanie elementu z opisem i now

ą

lini

ą

*/

cout << "moja_tab[" << j << "] = " << moja_tab[j];
}
getchar();

return 0;

}

Program 2.2

background image

32

Programowanie obiektowe

Inicjowanie wartości elementów tablic



Tablic

ę

mo

ż

na zainicjowa

ć

przy pomocy p

ę

tli, np.: for



Mo

ż

na równie

ż

wczyta

ć

warto

ś

ci elementów przy pomocy funkcji

scanf



Zainicjowanie warto

ś

ci tablicy w postaci wyliczenia listy warto

ś

ci:



typ_elementów nazwa_tablicy [rozmiar] = {lista_warto

ś

ci}



Przykład:



char znaki[5] = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’}

A

znaki[0]

B

znaki[1]

C

znaki[2]

D

znaki[3]

E

znaki[4]

background image

33

Programowanie obiektowe

Inicjowanie wartości elementów tablic



Nie nale

ż

y polega

ć

na warto

ś

ciach inicjalizacyjnych tablic. Mo

ż

e to by

ć

ż

nie realizowane dla poszczególnych

ś

rodowisk j

ę

zyka C i dla ró

ż

nych

systemów operacyjnych. Dlatego te

ż

w dobrym zwyczaju le

ż

y jawne

wypełnienie tablicy warto

ś

ciami pocz

ą

tkowymi, na przykład z

wykorzystaniem p

ę

tli for

:

int tab[100];
int j;
for (j=0; j<100; j++)
{

tab[ j ] = 0;

/* wyzerowanie tablicy */

}

tab[0]

tab[1]

tab[2]

tab[99]

0

0

0

0

Po wykonaniu zerowania:

......................

background image

34

Programowanie obiektowe

Wykorzystywanie tablic „otwartych”



Je

ż

eli z góry nie zakładamy ile elementów ma mie

ć

tablica, to

mo

ż

emy u

ż

y

ć

deklaracji tzw. tablicy otwartej:

typ_elementów nazwa_tablicy [ ] = {lista_warto

ś

ci}

Rozmiar tablicy nie jest podawany wprost.

Faktyczny rozmiar tablicy jest wyliczany przez

środowisko języka C na podstawie liczby elementów

zamieszczonych na liście wartości wprowadzanych do tablicy



Przykłady:



int całkowite[ ] = {1, 4, 6, -8, 3, -56, 19, 27, -13};



float rzeczywiste[ ] = {-12.23, 45.0, 1.4};



unsigned int naturalne[ ] = {0, 2, 8, 9, 23, 90, 100, 234};

Program 2.3

background image

35

Programowanie obiektowe

Przepisywanie zawartości z tablicy do innej tablicy



Aby przepisa

ć

zawarto

ść

jednej tablicy do innej tablicy musimy

przepisa

ć

kolejno jej poszczególne elementy



DOZWOLONY SPOSÓB PRZEPISYWANIA WARTO

Ś

CI:



int

ź

ródło[5] = {0, 1, 2, 3, 4}

int wynik[5];
int i;

for (i=0; i<5; i++)
{

wynik[i] =

ź

ródło[i];

/*przepisywanie pojedynczych elementów*/

}



NIEDOZWOLONY SPOSÓB:



wynik =

ź

ródło;

/*nieprawidłowa próba u

ż

ycia nazwy całej tablicy*/

background image

36

Programowanie obiektowe

Przykłady wykorzystania tablic jednowymiarowych



Wyliczenie warto

ś

ci

ś

redniej elementów tablicy



Wykorzystanie niesko

ń

czonej p

ę

tli for

Program 2.4

Program 2.5

background image

37

Programowanie obiektowe

Tablice wielowymiarowe



W j

ę

zyku C tablice wielowymiarowe deklarujemy według schematu:

typ_elementów nazwa_tablicy [wymiar1]...[wymiarN]

każdy z elementów tablicy

jest typu „typ_elementów”

dostęp do każdego

z elementów tablicy

jest realizowany

poprzez jej nazwę

każdy z wymiarów podawany jest

jako liczba naturalna w

nawiasach kwadratowych



Przykład: deklaracja dwuwymiarowej tablicy (macierzy) liczb rzeczywistych:

float macierz [4][3];

indeks

wiersza

indeks

kolumny

background image

38

Programowanie obiektowe

Inicjowanie wartości elementów macierzy



Przy pomocy podwójnej p

ę

tli for :

float macierz_R[4][3]

int i, j;

for(i=0; i<4; i++) {

for (j=0; j<3; j++) {

macierz_R[i][j] = 0.0;

}

}

0.0

0.0

0.0

0.0

0.0

0.0

0.0

0.0

0.0

0.0

0.0

0.0

0

1

2

0

1

2

3

background image

39

Programowanie obiektowe

Inicjowanie wartości elementów macierzy



Jawnie ustalaj

ą

c list

ę

warto

ś

ci:

float macierz_R[4][3]=

{

0.0, 0.0, 0.0,

0.2, 1.23, 2.12,

1.12, 3.45, 7.23,

3.2, 5.0, 8.7

};

0.0

0.0

0.0

0.2

1.23

2.12

1.12

3.45

7.23

3.2

5.0

8.7

0

1

2

3

background image

40

Programowanie obiektowe

Inicjowanie wartości elementów macierzy



Selektywnie wstawianie warto

ś

ci do tablicy:



macierz_R[2][2] = 1.0;



macierz_R[0][2] = 12.5;



macierz_R[3][1] = 4.78;

12.5

1.0

4.78

0

1

2

3

background image

41

Programowanie obiektowe

#include <iostream>
using namespace std;
int macierz[4][5];
int i,j;
int main() {

for(i=0; i<4; i++)

for(j=0; j<5; j++)

macierz[i][j] = i*j;

for(i=0; i<4; i++) {

for(j=0; j<5; j++)

cout << macierz[i][j];

cout << endl;

}
getchar();
return 0;

}

Przykład wykorzystania tablicy dwuwymiarowej

W poni

ż

szym przykładzie do macierzy liczb całkowitych wstawiana jest, a

nast

ę

pnie wypisywana warto

ść

iloczynu indeksów wierszy i kolumn

poszczególnych elementów macierzy:

Wynik zadziałania programu:

0 0 0 0 0
0 1 2 3 4
0 2 4 6 8
0 3 6 9 12

Program 2.6

background image

42

Programowanie obiektowe

Typy rekordowe - struktury



Do tej pory poznali

ś

my ju

ż

typy tablicowe, które s

ą

zło

ż

onymi

typami danych



Charakterystyczne dla tablicy jest to,

ż

e ka

ż

dy element jest tego

samego typu; mog

ą

to by

ć

na przykład tablice liczb całkowitych,

rzeczywistych, znaków ASCII itd.



Nie mo

ż

emy mie

ć

natomiast tablicy, w której wyst

ę

puj

ą

elementy

ż

nych typów



Nowe mo

ż

liwo

ś

ci w tym zakresie stwarzaj

ą

tzw. struktury



Struktura jest konglomeratem typów danych i składa si

ę

z kilku

zwi

ą

zanych zmiennych, nazywanych składowymi



W przeciwie

ń

stwie do tablic, gdzie wszystkie elementy s

ą

tego

samego typu, ka

ż

da składowa struktury mo

ż

e mie

ć

własny typ,

ż

ny od typów innych składowych

background image

43

Programowanie obiektowe

Struktury



Przykład: dane osobowe

Imię

tekst do 25 znaków

Nazwisko

tekst do 35 znaków

PESEL

tekst 11 znakowy

Wiek

unsigned int

Wzrost

unsigned int

Płeć

char

Składowe stanowią jedną, logiczną całość

background image

44

Programowanie obiektowe

Struktury



Schemat definicji typu strukturowego:

struct nazwa_rekordu {

Typ1 pole1;

Typ2 pole2;

Typ3 pole3;

…………

………...

TypN poleN;

} nazwa_zmiennej1, nazwa_zmiennej2, … ;

Pola w strukturze mogą

miećżne typy danych

background image

45

Programowanie obiektowe

Struktury



Zdefiniujmy trzy zmienne strukturowe przechowuj

ą

ce dane

osobowe:

struct osoba {

char imie[25];

char nazwisko[35];

char PESEL[11];

unsigned int wiek;

unsigned int wzrost;

char plec;

} Osoba1, Osoba2, Osoba3;

Trzy zmienne

strukturowe

Polami struktury mogą

być tablice

Albo zmienne typu

prostego

background image

46

Programowanie obiektowe

Struktury



A zatem mamy trzy zmienne strukturowe o nazwach: Osoba1,
Osoba2, Osoba3, które b

ę

d

ą

przechowywały informacje o

trzech ró

ż

nych osobach



Zapiszemy dane Osoby1:

Osoba1.imie = „Franciszek”;

Osoba1.nazwisko = „Abacki”;

Osoba1.PESEL = „54061201254”;

Osoba1.wiek = 49;

Osoba1.wzrost = 175;

Osoba1.plec = ‘M’;

Uwaga na KROPKĘ – jest bardzo ważna !!!!!!

Oddziela nazwę zmiennej strukturowej od nazwy jej pola

background image

47

Programowanie obiektowe

Struktury zagnieżdżone w strukturach



Załó

ż

my,

ż

e chcemy dodatkowo przechowywa

ć

dane

adresowe dla ka

ż

dej osoby. Definicja struktury dla adresu

mo

ż

e by

ć

nast

ę

puj

ą

ca:

Struct dane_adresowe {

Char ulica[40];

Char dom[4], lokal[4];

Char kod_p[6];

Char miejscowo

ść

[30];

};



W jaki sposób doł

ą

czy

ć

dane_adresowe do definicji struktury

dla danych osobowych?

background image

48

Programowanie obiektowe

Struktury zagnieżdżone w strukturach



Po prostu jako jedno z pól struktury nale

ż

y zdefiniowa

ć

pole

zdefiniowane jako dane_adresowe:

struct osoba {

char imie[25];

char nazwisko[35];

char PESEL[11];

unsigned int wiek;

unsigned int wzrost;

char plec;

struct dane_adresowe adres;

} Osoba1, Osoba2, Osoba3;

Pole strukturowe,

zagnieżdżone wewnątrz

struktury

Struktura dane_adresowe

została zdefiniowana

wcześniej

background image

49

Programowanie obiektowe

Struktury zagnieżdżone w strukturach



Jak zapisa

ć

informacje o tym,

ż

e Osoba1 mieszka w

Warszawie, Osoba2 w Krakowie, a Osoba3 w Olsztynie?
Mo

ż

na to zrobi

ć

tak, jak przedstawiono poni

ż

ej:

Osoba1.adres.miejscowo

ść

=„Warszawa”;

Osoba2.adres.miejscowo

ść

=„Kraków”;

Osoba3.adres.miejscowo

ść

=„Olsztyn”;



Mo

ż

na równie

ż

wczyta

ć

dowoln

ą

nazw

ę

z klawiatury,np.:

gets(Osoba3.adres.miejscowo

ść

);

Kolejne kropki wskazują na kolejne poziomy

zagnieżdżeń struktury

background image

50

Programowanie obiektowe

Wskaźniki do struktur



Mo

ż

emy definiowa

ć

równie

ż

wska

ź

niki do struktur, np.:

struct osoba *wsk_osoba



Wówczas do pól struktury dostajemy si

ę

wykorzystuj

ą

c

zamiast kropki tzw. operator strzałkowy, np.:

wsk_osoba -> imie = „Anna”;



Pozostałe reguły pracy ze zmiennymi strukturowymi nie
ulegaj

ą

zmianie



Przykład u

ż

ycia wska

ź

ników do struktur

Program 2.7

background image

51

Programowanie obiektowe


Wyszukiwarka

Podobne podstrony:
PO W1 IV ZIN id 364236 Nieznany
PO W3 IV ZIN id 364242 Nieznany
PO W1 2 II ZIN id 364239 Nieznany
PO W2 IV ZIN
PO W 5 6 II ZIN id 364233 Nieznany
Fotogrametria IV 007 id 180190 Nieznany
MSI w2 konspekt 2010 id 309790 Nieznany
audyt W2 c wymiana okien id 722 Nieznany (2)
PO W4 IV ZIN
IV WYZN id 221018 Nieznany
Fotogrametria IV 007 id 180190 Nieznany
PO W3 IV ZIN
po w2 id 557612 Nieznany
po w2 id 557612 Nieznany
PO lab 5 id 364195 Nieznany
ASK w2 id 70602 Nieznany (2)

więcej podobnych podstron