PO W2 IV ZIN

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 W2 IV ZIN id 364240 Nieznany
PO W4 IV ZIN
PO W1 IV ZIN id 364236 Nieznany
PO W3 IV ZIN id 364242 Nieznany
PO W3 IV ZIN
po w2 id 557612 Nieznany
Test sprawdzający po klasie IV, Dzieci, edukacja
PO W7 8 II ZIN
Pielegnow po zabiegu IV wyklad
PO W4 II ZIN
PO W1 2 II ZIN id 364239 Nieznany
PO w2
Pielegnow po zabiegu IV wyklad 2
po w2 id 557612 Nieznany
Test sprawdzający po klasie IV, Dzieci, edukacja

więcej podobnych podstron