next up previous contents
Elõre: Pointer aritmetika Fel: Mutatók és tömbök Vissza: Értékadás mutatóknak

Mutatók függvényparaméterként

Mutatókat igen gyakran használunk függvényhívásoknál. Ennek oka az, hogy a hagyományos C nyelvben minden, függvénynek átadott paraméter érték szerint kerül át. A függvénynek jogában áll paramétereinek értékét módosítani, de a módosítás nem hat vissza a paraméterként álló változóra. Ha az f1 függvény definíciója a következõ:

            void f1(long a)
            {
               a += 2L;
            } /* end f1() */
akkor a függvény semmi hasznosat sem fog csinálni (a BORLAND C++ figyelmeztet is rá), azaz a következõ kódrészlet után
            alfa = 0L; f1(alfa);
alfa értéke nulla lesz. Hogyan lehet akkor olyan függvényt írni, amelyiknek kimenõ vagy átmenõ paraméterei is vannak? Természetesen a pointerek felhasználásával. Az adott mutató ugyan érték szerint kerül át, de az általa mutatott tárterület tartalmát a hívott függvény indirekció útján megváltoztathatja. Ilyen függvényt a pointerekre vonatkozó "ökölszabályunk" segítségével készíthetünk, azaz a függvényben a módosítandó paraméter minden elõfordulását a zárójelezett indirekciós formával helyettesítjük:
            void f1(long (*a))
            {
               (*a) += 2L;
            } /* end f1() */
és a hívásban is ennek megfelelõen a változó helyébe annak címe kerül:
            alfa = 0L; f1(&alfa);
A fenti kódrészlet után alfa 2-t fog tartalmazni.

A C++ az ún. reference type segítségével sokkal áttekinthetõbb megoldást nyújt a cím szerinti paraméterátadásra. Ezzel majd a 2.1.2-es pontban foglakozunk bõvebben.