Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki,...

33
Wska´ zniki, funkcje i tablice Marcin Makowski Zaklad Chemii Teoretycznej UJ 20 listopada 2008

Transcript of Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki,...

Page 1: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

Wskazniki, funkcje i tablice

Marcin Makowski

Zak lad Chemii Teoretycznej UJ

20 listopada 2008

Preliminary version – 20 listopada 2008

Page 2: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

1 Wskazniki

2 Funkcje

3 Tablice

4 Tablice wielowymiarowe

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 3: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Czym s ↪a wskazniki?

Zmienne wskaznikowe

wskazuj ↪a na inne zmienne (obiekty)

wartosci ↪a zmiennej wskaznikowej(wskaznika) jest adresobszaru pami ↪eci zajmowanego przez jak ↪as zmienn ↪a (obiekt)

wskaznik nalezy do konkretnego typu (typu wskazywanegoobiektu)

wartosci ↪a wskaznika moze byc adres pusty

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 4: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Definicja zmiennej wskaznikowej

i n t * i p ; // i p j e s t wskazn ik i em na zmienna typu i n tdouble *ap , *bp , *cp ; // wska zn i k i na zmienne typu doub l euns igned *a , b , c ; // b i c to zmienne typu uns igned , n i e w s k a zn i k i !

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 5: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Operator adresu

&

Zastosowany do zmiennej (obiektu) zwraca jej (jego) adres

i n t i = 1 0 2 4 ;i n t *wi = &i ; // wi wskazu je t e r a z na zmienna ii n t *wi2 = wi ; // wi2 rown i e zi n t *wi3 = &wi ; // b l ednei n t **wi3 = &wi ; // poprawne , wi3 to wskazn ik do wskazn ika do zmienne j typu i n ti n t *wi4 = i ; // pod ad r e s n i e mozna p r z y p i s a c po p r o s t u wa r t o s c i typu i n t

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 6: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Operator wy luskania (adresowania posredniego)

?

Zastosowany do wskaznika zwraca zawartosc zmiennej (obiektu)wskazywanego przez ten wskaznik

i n t i = 1 0 2 4 ;i n t *wi = &i ;i n t k = *wi ; // k ma t e r a z ta sama war tosc co i/* k i l k a o p e r a c j i na zmienne j wskazywanej p r z e z wi */*wi = k + 1 ;*wi = abs (*wi ) ;*wi = *wi + 1 ;*wi = *wi + 2 ; // zw i ek s za war to sc zmienne j wskazywanej p r z e z wiwi = wi + 2 ; // zw i ek s za war to sc wskazn ika ( ad r e su )

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 7: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

void*

Wskaznik do typu void:

moze przechowywac adres zmiennej dowolnego typu

nie mozna go stosowac do adresowania posredniego

konwersja z(do) wskaznikow innego typu jest automatyczna

i n t i = 1 0 2 4 ;v o i d *wv = &i ; // poprawne , konwe r s j a do vo i d*i n t * i p ;double* j p ;i p = wv ; //poprawne , konwe r s j a z vo i d*j p = i p ; // blad , w s k a zn i k i roznych typowj p = ( double *) i p ; // poprawne ( jawna konwer s j a )

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 8: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Arytmetyka dla wskaznikow

Wskazniki i liczby ca lkowite nie mog ↪a byc stosowane zamiennie

double *a ;i n t i = 1 0 2 4 ;a = i ; // b l ada = 0 ; // poprawne : wyjatek , 0 r e p r e z e n t u j e pus ty ad r e sa = NULL ; // poprawne : j a k wyze ja = a + 1 ; /* ad r e s zw i ek s zony o l i c z b e ba j tow zajmowanych

p r z e z j edna l i c z b e typu doub l e */a = a − 1 0 ; /* ad r e s zmn i e j s zony o l i c z b e ba j tow zajmowanych

p r z e z d z i e s i e c l i c z b typu doub l e */double j = *a++; /* pod j podstaw war tosc zmienne j wskazywanej

p r z e z a i zw i e k s z wskazn ik o 1 */

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 9: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Sta le wskazniki i wskazniki do sta lych

i n t i ;const i n t k = 2 ;i n t *const wi = &i ; /* wi to s t a l y wskazn ik do zmienne j typu i n t

j e go war to sc ( przechowywany ad r e s ) n i e moze u l e c zmian ie ,c z y l i zawsze b ed z i e wskazywal na zmienna i */

const i n t *wi2 = &i ; /* wi2 to wskazn ik do s t a l e j typu i n t */const i n t *wi3 = &k ; /* wi3 to t e z wskazn ik do s t a l e j typu i n t ,

co prawda k n i e j e s t s t a l a , a l e n i emozna zm i en i c wa r t o s c i k za pomoca tego wskazn ika ,kazda zmienna na j aka wskazu je t a k i wskazn ik j e s t d l a n i egos t a l a */

const i n t *const wi4 = &k ; /* s t a l y wskazn ik do s t a l e j typu i n t */

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 10: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Podzia l programu na funkcje

Kazdy program w C zawiera przynajmniej jedn ↪a funkcj ↪e, ktor ↪a jestfunkcja main. Po co w ogole wydzielac inne fragmenty jakofunkcje?

przejrzystosc, jesli pewien ci ↪ag operacji tworzy logiczn ↪a ca losc,wyodr ↪ebnienie go jako funkcji u latwia zrozumienie tresciprogramu i poprawia jego struktur ↪e

wygoda, jesli pewien ci ↪ag operacji jest powtarzanywielokrotnie na rozni ↪acych si ↪e od siebie wartosciamiargumentach, wyodr ↪ebnienie go w postaci funkcji pozwalaunikn ↪ac powtarzania prawie identycznego kodu

przenosnosc i mozliwosc wielokrotnego wykorzystania, funkcjemozna skompilowac do osobnych plikow (czy stworzycbiblioteki) i do l ↪aczac do tworzonych programow w raziepotrzeby

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 11: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Definicja funkcji

/*t y p zw r a c a n e j w a r t o s c i nazwa ( l i s t a d e k l a r a c j i a r g um e n t ow ) {. . .. . .. . .}*/

i n t mojabs ( i n t a ) {r e t u r n ( a < 0 ? −a : a ) ;

}

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 12: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Deklaracje funkcji

Uzycie funkcji wymaga jej wczesniejszego zadeklarowania.Deklaracj ↪e stanowi rowniez sama definicja funkcji.

// we r s j a p i e rw s z a#i n c l u d e <s t d i o . h>

i n t min ( i n t a , i n t b ) { // d e f i n i c j a p e l n i r o l e d e k l a r a c j ir e t u r n ( a < b ? a : b ) ;

}

i n t main ( ){i n t x = 2 , y = 4 ;p r i n t f ( ”%d ” , min ( x , y ) ) ;r e t u r n 0 ;

}

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 13: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Deklaracje funkcji II

/*d e k l a r a c j a :t y p zw r a c a n e j w a r t o s c i n a zwa f unk c j i ( l i s t a t ypow a rgumen tow z opc j ona l n ym i nazwami )*/

// we r s j a druga#i n c l u d e <s t d i o . h>

i n t min ( i n t , i n t ) ; // d e k l a r a c j a

i n t main ( ){i n t x = 2 , y = 4 ;p r i n t f ( ”%d ” , min ( x , y ) ) ;r e t u r n 0 ;

}

i n t min ( i n t a , i n t b ) {r e t u r n ( a < b ? a : b ) ;

}

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 14: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Specjalne deklaracje

/* f u n k c j a o konk r e tn e j , a l e n i e z n a n e j w momencie d ek l a r owan i al i c z b i e i t y p i e argumentow */

i n t f o o ( ) ;

/* f u n k c j a o z e r owe j l i c z b i e argumentow */i n t f o o ( v o i d ) ;

/* p i e rw s z y argument f u n k c j i j e s t typu char * , moga t e z po j aw i cs i e i nn e argumenty o nieznanym a p r i o r i t y p i e i l i c z b i e */

i n t p r i n t f ( char * , . . . ) ;

Standardy wczesniejsze niz C99 dopuszczaj ↪a domysln ↪a deklaracj ↪e.

/* min n i e zadek la rowane ,domyslna d e k l a r a c j a ma pos taci n t min ( ) ;

*/i n t main ( ){

i n t x = 2 , y = 4 ;p r i n t f ( ”%d ” , min ( x , y ) ) ;r e t u r n 0 ;

}

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 15: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Deklarowanie funkcji jako inline

Deklarowanie funkcji jako inline jest sugesti ↪a dla kompilatora, zebyzast ↪api l w kodzie wywo lania funkcji jej rozwini ↪et ↪a tresci ↪a.

#i n c l u d e <s t d i o . h>

i n l i n e i n t min ( i n t , i n t ) ; // d e k l a r a c j a f u n k c j i typu i n l i n e

i n t main ( ){i n t x = 2 , y = 4 ;p r i n t f ( ”%d ” , min ( x , y ) ) ;r e t u r n 0 ;

}

i n t min ( i n t a , i n t b ) {r e t u r n ( a < b ? a : b ) ;

}

/* Funkc ja main po r o zw i n i e c i u */i n t main ( ){

i n t x = 2 , y = 4 ;p r i n t f ( ”%d ” , ( x < y ? x : y ) ) ;r e t u r n 0 ;

}

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 16: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Przekazywanie argumentow do funkcji

Argumenty s ↪a przekazywane do funkcji zawsze przez wartosc.Oznacza to, ze w momencie wywo lania tworzone s ↪a lokalne kopieprzekazanych zmiennych(obiektow), ktore s ↪a uzywane wewn ↪atrzfunkcji.v o i d swap ( i n t a , i n t b ) {

i n t tmp = a ;a = b ;b = tmp ;

}

v o i d s w a p c o r r e c t e d ( i n t *a , i n t *b ) {i n t tmp = *a ;*a = *b ;*b = tmp ;

}

i n t main ( ) {i n t x = 2 , y = 4 ;swap ( x , y ) ;p r i n t f ( ”%d %d ” , x , y ) ; // wyp i s z e : 2 4s w a p c o r r e c t e d (&x , &y ) ;p r i n t f ( ”%d %d ” , x , y ) ; // wyp i s z e : 4 2r e t u r n 0 ;

}Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 17: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Uzycie zmiennych zewn ↪etrznych w celu przekazaniaargumentow

Pewnym sposobem przekazania argumentow do funkcji jest uzyciezmiennych zewn ↪etrznych.

i n t x = 2 , y = 4 ;

v o i d swap ( ) {i n t tmp = x ;x = y ;y = tmp ;

}

i n t main ( ) {swap ( ) ;r e t u r n 0 ;

}

Stanowi to zazwyczaj rowniez swietny sposob na uczynienie kodumniej odpornym na b l ↪edy.

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 18: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Wejscie i wyjscie z funkcji

Wejscie do funkcji nast ↪epuje w chwili napotkania instrukcji nazwafunkcji(lista argumentow). Wyjscie z funkcji nast ↪epuje w momencienapotkania instrukcji return wyrazenie; b ↪adz nawiasu klamrowegoj ↪a koncz ↪acego. Funkcja zadeklarowana jako zwracaj ↪aca wartoscpowinna we wszystkich punktach wyjscia byc zaopatrzona winstrukcj ↪e return wyrazenie; (wymog od standardu C99).double min ( double a , double b ) {

r e t u r n ( a < b ? a : b ) ;}

double min ( double a , double b ) {i f ( a < b )

r e t u r n a ;e l s e

r e t u r n b ;}

v o i d swap ( double *a , double *b ) {i n t tmp = *a ;*a = *b ;*b = tmp ;r e t u r n 0 ; // b l ad

} Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 19: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Rekurencja

Funkcja rekurencyjna, to taka, ktora bezposrednio lub posredniowywo luje sam ↪a siebie.

// n !uns igned long s i l n i a ( i n t n ) {

i f ( n > 1)r e t u r n n * s i l n i a ( n − 1 ) ;

r e t u r n n ;}

// na jw i e k s z y wspo lny d z i e l n i ki n t nwd ( i n t m, i n t n ) {

i f ( ! n )r e t u r n n ;

r e t u r n nwd ( n , m % n ) ;}

Rekurencyjnie czy iteracyjnie?

krotszy i prostszy kod

zazwyczaj mniej efektywne wykonanie

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 20: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Typ tablicowy

Tablica

Zajmuj ↪acy spojny obszar w pami ↪eci zestaw zmiennych (obiektow)tego samego typu. Poszczegolne zmienne(obiekty) nie maj ↪a nazw adost ↪ep do nich jest mozliwy przez indeks. Pierwszy element tablicyma indeks rowny zeru.

i n t i ; // po j edyncza zmienna typu i n ti n t t i [ 1 0 ] ; // d z i e s i e c i o e l emen t owa t a b l i c a zmiennych typu i n ti = t i [ 2 ] ; // i ma t e r a z war to sc t r z e c i e g o e lementu t a b l i c yt i [ 7 ] = i ; // zmodyf ikowany osmy e lement

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 21: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Definicja tablicy

specyfikator typu nazwa[rozmiar]

Rozmiar powinien byc wyrazeniem sta lym typu ca lkowitego (zzastrzezeniem, ze standard C99 wprowadza tablice o dynamicznieustalanym rozmiarze). Definicja tablicy moze zawierac jejinicjalizacj ↪e. Rozmiar w pewnych sytuacjach nie musi bycpodawany, kompilator odgaduje go na podstawie dokonanejinicjalizacji.

i n t t i [ 1 0 ] ; //10−elementowa t a b l i c aconst i n t s i z e = 3 ;i n t wi [ s i z e ] = {0 , 1 , 2} ; /* z a i n i c j a l i z o w a n a : wi [ 0 ] = 0 ,

wi [ 1 ] = 1 , wi [ 2 ] = 2 */i n t x i [ ] = {0 , 1 , 2} ; /* z a i n i c j a l i z ow a n a , a r o zm ia r u s t a l o n y na 3 */const i n t s i z e 2 = 5 ;i n t y i [ s i z e 2 ] = {0 , 1 , 2} ; /* z a i n i c j a l i z o w a n a : wi [ 0 ] = 0 ,

wi [ 1 ] = 1 , wi [ 2 ] = 2 , pozos ta l ymelementom p r z y p i s a n e 0 */

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 22: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Tablice o dynamicznym rozmiarze - C99

i n t n ;s c a n f ( ”%d ” , &n ) ;double a [ n ] ; /* poprawne w C99 ,

n i edozwo lone w s ta r s zym s t a n d a r d z i e */

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 23: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Tablice znakowe

char t z 1 [ ] = { ’C ’ , ’D ’ , ’ a ’ } ; // rozm ia r u s t a l o n y na 3char t z 2 [ ] = ”CDa ”; /* r o zm ia r u s t a l o n y na 4 , bo

kazdy nap i s z aw i e r a na koncuznak pus ty ’\0 ’ */

char t z 3 [ 3 ] = ”CDa ”; /* poprawne w C , wymuszony ro zm ia r 3 ,znak pus ty z k o n i e c z n o s c i z ignorowany */

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 24: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Ograniczenia

nie mozna dokonac przypisania tablicy jako ca losci

const s i z e = 3 ;i n t t i [ s i z e ] = {0 , 1 , 2} ;i n t t i 2 [ s i z e ] = t i ; // b l ad

/* poprawne r o zw i a z a n i e wymaga p e t l i */i n t t i 2 [ s i z e ] ;f o r ( i n t i = 0 ; i < s i z e ; ++i )

t i 2 [ i ] = t i [ i ] ;

tablica nie pami ↪eta swojego rozmiaru

wyjscie z indeksem poza obszar tablicy nie jest wykrywaneprzez kompilator

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 25: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

sizeof

operator jednoargumentowy

sk ladnia:

sizeof (nazwa typu)sizeof (obiekt)sizeof obiekt

zwraca wartosc typu ca lkowitego bez znaku odpowiadaj ↪ac ↪arozmiarowi obiektu (zmiennej danego typu)

wyliczany na etapie kompilacji, wyj ↪atek stanowi uzycie dotablic o dynamicznym rozmiarze (C99)

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 26: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Jeszcze o sizeof

i n t a ;double b [ 3 ] ;s i z e o f ( f l o a t ) ;s i z e o f a ;s i z e o f ( b ) ; // rozm ia r t a b l i c y (w ba j tach , n i e w l i c z b i e elementow )s i z e o f ( b [ 0 ] ) ; // rozm ia r e lementui n t n o e l e m e n t s = s i z e o f ( b ) / s i z e o f ( b [ 0 ] ) ;

size t: typ danych definiowany w bibliotece standardowej, tak abyodpowiada l typowi zwracanemu przez operator sizeof

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 27: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Co kryje si ↪e pod nazw ↪a tablicy

char buf [ 8 ] = ”a b c d e f g ” ;char v a r ;

/* buf j e s t nazwa t a b l i c y i r ownocze sn i e s ta l ym wskazn ik i em dop i e rw s z ego j e j e l ementu ; buf == &buf [ 0 ] */

/* buf [ 0 ] == *buf == ’ a ’ */v a r = buf [ 1 ] ; v a r = *( buf + 1 ) ; // te i n s t r u k c j e da j a i d e n t y c z n y e f e k t

f o r ( i n t i x = 0 ; i x < 8 ; ++i x )i f ( buf [ i x ] != *( buf + i x ) )

p r i n t f ( ”Houston , mamy problem \n ” ) ;

char *const wBuf = buf ; // po obu s t r ona ch wskazn ik tego samego typuchar *wBuf 2 = buf ; // automatyczna konwe r s j a cha r * con s t do char*

/* no t a c j a t a b l i c a [ i n d e k s ] j e s t rownowaznan o t a c j i *( wskazn ik + o f f s e t ) */

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 28: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Tablice jako argumenty funkcji

#i n c l u d e <s t d i o . h>

v o i d p r i n t i n t t a b l e ( i n t c [ ] , i n t n ) {f o r ( i n t i = 0 ; i < n ; ++i )

p r i n t f ( ”%d\n ” , c [ i ] ) ;}

/* rownowazne znaczen iowo :vo i d p r i n t i n t t a b l e ( i n t c [ 5 ] , i n t n )vo i d p r i n t i n t t a b l e ( i n t c [ 2 ] , i n t n )vo i d p r i n t i n t t a b l e ( i n t *c , i n t n ) */

i n t main ( ) {i n t a [ 5 ] = {2 , 3 , 5 , 9 , 1 1} ;p r i n t i n t t a b l e ( a , 3 ) ; // wydrukuj p i e rw s z e 3 e l ementy t a b l i c y ar e t u r n 0 ;

}

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 29: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Jeszcze jedna funkcja operuj ↪aca na tablicach(wskaznikach)

#i n c l u d e <s t d i o . h>

i n t s t r l e n ( char s [ ] ) {/* argumentem j e s t t a b l i c a znakow , a tak naprawde

wskazn ik typu char * , w momencie wywolan ia tworzonaj e s t prywatna kop i a p rzekazanego wskazn ika */

i n t n ;f o r ( n = 0 ; * s != ’ \0 ’ ; ++s )

n++;r e t u r n n ;

}

i n t main ( ) {char a [ ] = ”Napis ” ;p r i n t f ( ”Dlugosc n a p i s u wynos i %d\n ” , s t r l e n ( a ) ) ;/* wywolana z argumentem bedacym nazwa t a b l i c y ,

c z y l i wskazn ik i em typu char * con s t */p r i n t f ( ”Dlugosc n a p i s u wynos i %d\n ” , s t r l e n ( ”Napis ” ) ) ;/* wywolana z argumentem bedacym wskazn ik i em typu

cons t cha r* */r e t u r n 0 ;

}

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 30: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Czym s ↪a tablice wielowymiarowe?

i n t t i [ 3 ] [ 2 ] ; /* t a b l i c a dwuwymiarowa o rozmia rach 3( w i e r s z e ) i 2( kolumny ) ,a tak naprawde to t a b l i c a jednowymiarowao ro zm i a r z e 3 , k t o r e j e lementami sat a b l i c e o r o zm i a r z e 2 */

t i [ 2 ] [ 1 ] = 0 ; /* p r z y p i s u j e 0 do e lementuw t r z e c im w i e r s z u i d r u g i e j ko lumnie */

i n t i = t i [ 0 ] [ 0 ] ; /* p r z y p i s u j e zm ienne j i wa r to sc e lementu zp i e rw s z ego w i e r s z a i p i e r w s z e j kolumny */

/* Z tego , ze to t a b l i c e t a b l i c wynika , ze e l ementy sa przechowywane w i e r s z am i .Ko l e j n o s c w pamiec i b e d z i e n a s t e pu j a c a :t i [ 0 ] [ 0 ] , t i [ 0 ] [ 1 ] , t i [ 1 ] [ 0 ] , t i [ 1 ] [ 1 ] , t i [ 2 ] [ 0 ] , t i [ 2 ] [ 1 ] */

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 31: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Definicje tablic wielowymiarowych

i n t t i [ 3 ] [ 2 ] = {0 , 1 , 2 , 3 , 4 , 5} ;/* t i [ 0 ] [ 0 ] = 0 , t i [ 0 ] [ 1 ] = 1 , t i [ 1 ] [ 0 ] = 2 ,

t i [ 1 ] [ 1 ] = 3 , t i [ 2 ] [ 0 ] = 4 , t i [ 2 ] [ 1 ] = 5 */

i n t t i [ 3 ] [ 2 ] = {{0 , 1} , {2 , 3} , {4 , 5}} ;/* I d e n t y c zn y e f e k t j a k wyze j */

i n t t i [ 3 ] [ 2 ] = {0 , 2 , 4} ;/* t i [ 0 ] [ 0 ] = 0 , t i [ 0 ] [ 1 ] = 2 , t i [ 1 ] [ 0 ] = 4 ,

r e s z t a z a i n i c j a l i z o w a n a na 0 */

i n t t i [ 3 ] [ 2 ] = {{0} , {2} , {4}} ;/* t i [ 0 ] [ 0 ] = 0 , t i [ 1 ] [ 0 ] = 2 , t i [ 2 ] [ 0 ] = 4 ,

r e s z t a z a i n i c j a l i z o w a n a na 0 */

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 32: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Tablice wielowymiarowe jako argumenty funkcji

#i n c l u d e <s t d i o . h>

v o i d p r i n t m u l t i a r r a y ( i n t c [ ] [ 2 ] , i n t m, i n t n ) {/* wyp i s u j e e l ementy z b loku m x n p r z e k a z an e j

t a b l i c y o 2 kolumnach */f o r ( i n t i = 0 ; i < m; i ++)

f o r ( i n t j = 0 ; j < n ; j ++)p r i n t f ( ”%d\n ” , c [ i ] [ j ] ) ;

}

/* rownowazne znaczen iowo :vo i d p r i n t m u l t i a r r a y ( i n t c [ 1 2 ] [ 2 ] , i n t m, i n t n )vo i d p r i n t m u l t i a r r a y ( i n t (* c ) [ 2 ] , i n t m, i n t n )

*/

i n t main ( ) {i n t t i [ 3 ] [ 2 ] = {0 , 1 , 2 , 3 , 4 , 5} ;p r i n t m u l t i a r r a y ( t i , 2 , 2 ) ; /* wyp i s z e e l ementy z b loku

2 x 2 t a b l i c y t i */r e t u r n 0 ;

}

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008

Page 33: Wskazniki, funkcje i tablice - Wydział Chemii UJmakowskm/game_set_and_match.pdf · Wska zniki, funkcje i tablice Marcin Makowski Zak lad Chemii Teoretycznej UJ 20 listopada 2008

PlanWskazniki

FunkcjeTablice

Tablice wielowymiarowe

Tablice wielowymiarowe jako argumenty funkcji II

#i n c l u d e <s t d i o . h>

v o i d p r i n t m u l t i a r r a y ( i n t *c , i n t np , i n t m, i n t n ) {/* wyp i s u j e e l ementy z b loku m x n p r z e k a z an e j

t a b l i c y o np kolumnach */f o r ( i n t i = 0 ; i < m; i ++)

f o r ( i n t j = 0 ; j < n ; j ++)p r i n t f ( ”%d\n ” , *( c + i * np + j ) ) ;

}

i n t main ( ) {i n t t i [ 3 ] [ 2 ] = {0 , 1 , 2 , 3 , 4 , 5} ;p r i n t m u l t i a r r a y (& t i [ 0 ] [ 0 ] , 2 , 2 , 2 ) ; /* wyp i s z e e l ementy z b loku

2 x 2 t a b l i c y t i */r e t u r n 0 ;

}

Marcin Makowski Wskazniki, funkcje i tablice

Preliminary version – 20 listopada 2008