Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.

Hasonló előadás


Az előadások a következő témára: "Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési."— Előadás másolata:

1 Függvények, mutatók Csernoch Mária

2 Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési értéke –x  f(x) –D f  R f definíció szerint egy értéket adnak vissza C-ben –értéket nem adnak vissza –egy értéket adnak vissza –több értéket adnak vissza

3 Függvények a függvény definícióban szereplő tárolók –formális paraméterek –formális argumentumok –paraméterek a függvényhívás során megadott értékek –aktuális paraméter –aktuális argumentumok –argumentumok

4 Függvények paraméterezése és a függvényérték a paraméterek deklarációs sorrendje követi a pareméterek sorrendjét semmilyen összevonás sem lehetséges a deklarált paramétereket a függvényen belül a függvény lokális változóként használja, a függvényen kívülről nem érhetők el a visszaadott érték az utasításban szereplő kifejezés értéke –return kifejezés;

5 Függvények paraméterezése és a függvényérték ha a függvény definíciójában nem adjuk meg a visszatérési típust, akkor alapértelmezés szerint int típusú lesz a függvény a void típus felhasználásával olyan függvényeket készíthetünk, amelyek nem adnak vissza értéket

6 Függvényhívás a függvényhívás olyan kifejezés, amely átadja a vezérlést és az argumentumokat az aktualizált függvénynek a C, C++ nyelveken az argumentumok érték szerint adódnak át –az argumentumok másolatát veszi fel a megfelelő paraméter értékként –következmény a függvényen belül a paraméteren bármilyen műveletet végezhetünk, annak nincs kihatása a híváskor megadott argumentumra –átadott érték változónak a címe függvényből „kihivatkozva” megváltoztathatjuk a változó értékét

7 Pointerek, mutatók minden változónak van címe annak a memóriarekesznek a címe, amellyel kezdődően hely van foglalva számára a memóriában változó címe tárolható címtípusú változókban tárolhatók a címek pointerek, mutatók

8 Pointerek definiálása * pl. –int *p; egy int típusú változó címét tartalmazhatja –double *q; egy double típusú változó címét tartalmazhatja

9 Pointer operátorok & –a változó címére hivatkozunk –& * –a pointeren keresztül arra a változóra hivatkozunk, amelyre mutat (a pointer által mutatott objektum, a mutatott érték előállítása) –* pl. –int a=5, *p; p = &a; // p pointer az ‘a’ változóra mutat printf(”%d\t%d\t%d\n”,p, a,*p); printf(”%X\t%X\t%X\n”,p, a,*p);

10 Mit csinál? int k1=1, k2=2, k3=3, k4=4, k5=5; int *p; p=&k1; printf("%X\t%d\n",p,*p); printf("%X\t%X\t%X\t%X\t%X\n",p,p+1,p+2,p+3, p+4);

11 Tárolás címértéknév 22FF6C1k1 pointer p

12 Tárolás címértéknév 22FF6C1k1 22FF70 pointer p p+1

13 Tárolás címértéknév 22FF6C1k1 22FF70 22FF74 pointer p p+1 p+2

14 Tárolás címértéknév 22FF6C1k1 22FF70 22FF74 22FF78 pointer p p+1 p+2 p+3

15 Tárolás címértéknév 22FF6C1k1 22FF70 22FF74 22FF78 22FF7C pointer p p+1 p+2 p+3 p+4

16 Mit csinál? int i; int k[5]; int *kt; kt=k; for (i=0; i<5; i++){ k[i]=i; printf("%d\t",k[i]); printf("%d\n",kt); printf("%d\n",kt+i); }

17 Mit csinál? int i; int k[5]; int *kt; kt=k; for (i=0; i<5; i++){ k[i]=i; printf("%d\t",k[i]); printf("%d\t",kt); printf("%d\n",kt+i); }

18 Mit csinál? int i; char c, *p1=&c; float *p2=(float *)&c; printf("%X\n%X\n\n",p1,p2); for (i=0; i<20; i++){ printf("%X\t%X\n",p1+i,p2+i); }

19 Mit csinál? int i; char c, *p1=&c; float *p2=(float *)&c; printf("%X\n%X\n\n",p1,p2); for (i=0; i<20; i++){ printf("%X\t%X\n",p1+i,p2+i); }

20 Lépésköz charfloatcímnév p1p222FF2Bc p1+122FF2C p1+222FF2D p1+322FF2E p1+4p2+122FF2F p1+522FF30 p1+622FF31 p1+722FF32 p1+8p2+222FF33

21 Egydimenziós tömbök egydimenziós tömbök (vektorok) deklarálása típus név[méret] méret –konstans –a tömbben tárolható elemek számát definiálja példák egydimenziós tömbök deklarálására –int a[5]; –float b[20]; –tömb méretének megadása makróval: char c[N]; #define N 100; char c[N];

22 Tömbök a tömb elemei azonos típusúak tömb elemeinek indexelése –0-tól (méret − 1)-ig hivatkozás tömb elemre –pl.: a[0], b[5] 0a[0] 1a[1] 4a[2] 9a[3] 16a[4] int a[5]tömb dekl. atömb neve a: a[0]a[1]a[2]a[3]a[4]

23 Egydimenziós tömbök inicializálása int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; char szo[15] = {‘a’, ‘l’, ‘m’, ‘a’}; –tárolási osztálytól függően 0 v. határozatlan float valosak[ ] = {23.5, 49.2, 3.45}; –a tömb automatikusan 3 eleműre definiálódik int a[5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; –helytelen, túl sok a kezdőérték –C semmilyen ellenőrzést nem végez a tömb indexeire vonatkozóan –indexhatár átlépése veszélyes

24 Tömbök és pointerek egy tömb neve nulladik elemének címe (pointer konstans, amely a tömb 0-dik elemére mutat) int a[5]; int *p; p = &a[0]; // a mutatót a tömb első elemére irányítjuk p = a; vagy int a[5], *p = a; a: a[0]a[1]a[2]a[3]a[4] p: p+1p+2p+3p+4

25 Tömbök és pointerek A tömb 0-dik elemének a címe –a  &a[0] A tömb i-edik elemének címe –a + i  &a[ i ] –&p[ i ] –a + i –p + i Különbség ‘p’ és ‘a’ között, hogy ‘a’ konstans, ‘p’ változó –p = a; // helyes –p++; // helyes –a = p; // hibás –a++; // hibás

26 Tömbök és pointerek A tömb 0-dik eleme –a[0] –p[0] –*(a + 0) –*(p + 0) –*a –*p A tömb i-edik eleme –a[ i ] –p[ i ] –*(a + i) –*(p + i)

27 Többdimenziós tömbök Általános alak –típus név [méret1] [méret2] … [méretn]; Kétdimenziós tömbök (mátrixok) –típus név [méret1] [méret2] –méret1: tömb sorainak száma –méret2 tömb oszlopainak száma

28 Kétdimenziós tömbök inicializálása int matrix [3] [5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; int matrix [3] [5] = {{1, 2, 3, 4, 5} {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}};

29 Kétdimenziós tömbök elemeinek elérése matrix [2] [3] Sorok címe:s/o01234 matrix[0]  012345 matrix[1]  1678910 matrix[2]  21112131415

30 Tömbök átadása paraméterként #define N 10 void tombolvas(int * a, int n); main(){ int i, m=5; int aa[N]; srand(time(NULL)); tombolvas(aa,m); for(i=0; i<m; i++){ printf("%d\t",aa[i]); } } void tombolvas(int * a, int n){ int i; for(i=0; i<n; i++){ a[i]=rand()%41+10; printf("%d\t",a[i]); } printf("\n"); }

31 Tömbök átadása paraméterként #define N 10 void tombolvas2(int a[ ], int n); main(){ int i, m=5; int aa[N]; srand(time(NULL)); tombolvas2(aa,m); for(i=0; i<m; i++){ printf("%d\t",aa[i]); } } void tombolvas2(int a[ ], int n){ int i; for(i=0; i<n; i++){ a[i]=rand()%41+10; printf("%d\t",a[i]); } printf("\n"); }

32 Tömbök átadása paraméterként #define N 10 typedef int i10vek[N]; void tombolvas3(i10vek a, int n); main(){ int i, m=5; i10vek vel; srand(time(NULL)); tombolvas3(vel,m); for(i=0; i<m; i++){ printf("%d\t",vel[i]); } } void tombolvas3(i10vek a, int n){ int i; for (i=0; i<n; i++){ a[i]=rand()%41+10; printf("%d\t",a[i]); } printf("\n"); }


Letölteni ppt "Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési."

Hasonló előadás


Google Hirdetések