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 értéke x f(x) Df Rf definíció szerint egy értéket adnak vissza C-ben egy értéket adnak vissza értéket nem adnak vissza több értéket adnak vissza
Egy visszaadott érték síkidomok kerülete, területe testek felszíne, térfogata n-jegyű szám beolvasása egész szám hossza egész szám számjegyeinek az összege n-tagú sorozatok összege (faktoriális, hatványozás) végtelen sorok összege véletlen szám
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
Pointerek definiálása <típus> * <pointer> 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
Pointer operátorok & * pl. 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) *<pointer> 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);
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);
Tárolás cím érték név 22FF6C 1 k1 pointer p
Tárolás cím érték név 22FF6C 1 k1 22FF70 pointer p p+1
Tárolás cím érték név 22FF6C 1 k1 22FF70 22FF74 pointer p p+1 p+2
Tárolás cím érték név 22FF6C 1 k1 22FF70 22FF74 22FF78 pointer p p+1
Tárolás cím érték név 22FF6C 1 k1 22FF70 22FF74 22FF78 22FF7C pointer
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
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;
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
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
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\t",kt+i); printf("%d\n",*(kt+i)); }
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]); k[i]=i%2; printf("%d\t",k[i]); printf("%d\t",kt); printf("%d\t",kt+i); printf("%d\n",*(kt+i)); }
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); }
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); }
Lépésköz char float cím név p1 p2 22FF2B c p1+1 22FF2C p1+2 22FF2D 22FF2E p1+4 p2+1 22FF2F p1+5 22FF30 p1+6 22FF31 p1+7 22FF32 p1+8 p2+2 22FF33