Hogyan Adhatunk át Egy Tömböt Egy Függvénynek

Tartalomjegyzék:

Hogyan Adhatunk át Egy Tömböt Egy Függvénynek
Hogyan Adhatunk át Egy Tömböt Egy Függvénynek

Videó: Hogyan Adhatunk át Egy Tömböt Egy Függvénynek

Videó: Hogyan Adhatunk át Egy Tömböt Egy Függvénynek
Videó: Passing Array as an Argument to a Function 2024, Április
Anonim

A tömbök a számítógépes programok egyik leggyakrabban használt strukturált adattárolási formája. Feldolgozásukat különféle algoritmusokkal lehet megvalósítani, amelyek osztálymódszerekben és függvényekben valósulnak meg. Ennek megfelelően gyakran meg kell adni egy tömböt egy függvénynek. A C és a C ++ nyelv nagy szabadságot kínál e művelet végrehajtásának módszereinek megválasztásában.

Hogyan adhatunk át egy tömböt egy függvénynek
Hogyan adhatunk át egy tömböt egy függvénynek

Szükséges

C és C ++ nyelv fordítói

Utasítás

1. lépés

Adjon át egy fix méretű tömböt a függvénynek. Módosítsa a függvény prototípusát, hogy tartalmazzon egy megfelelő típusú argumentumot. Például egy olyan függvény deklarációja, amely három elem egész számjegyű tömbjét veszi paraméterként, így nézhet ki:

void ArrayFunction (int aNumbers [3]);

Egy ilyen függvényt úgy hívunk meg, hogy egy tömböt közvetlenül argumentumként adunk át neki:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

Az átvitt adatokat átmásolja a veremre. A tömb módosítása a meghívott függvényben nem változtatja meg a forrást.

2. lépés

Adja meg a változó hosszúságú tömböket a függvénynek. Ehhez egyszerűen ne adja meg a megfelelő argumentum dimenzióját:

void ArrayFunction (int aNumbers );

A többdimenziós tömbök is átadhatók hasonló módon (csak az első "dimenzió" lehet változó):

void ArrayFunction (int aNumbers [3] [2]);

Ezeket a függvényeket ugyanúgy hívják meg, mint az első lépésben.

Ahhoz, hogy a függvényben változó hosszúságú tömböket helyesen tudja feldolgozni, vagy kifejezetten át kell adnia az elemek számát egy további paraméteren keresztül, vagy olyan konvenciókat kell használnia, amelyek korlátozásokat szabnak maguknak az elemeknek az értékeire (egy bizonyos értékre) a tömb végének jele kell legyen).

3. lépés

Adja át a tömböt mutatóval. A függvény argumentumnak a tömb elemeinek megfelelő típusú értékre kell mutatnia. Például:

void ArrayFunction (int * pNumbers);

A függvény adataihoz való hozzáférés mind a tömb elemekkel való munka jelölésében, mind a cím aritmetikájának segítségével elvégezhető:

void ArrayFunction (int * pNumbers)

{

pNumbers [0] = 10; // hozzáférés a 0 elemhez

* (pNumbers + 1) = 20; // hozzáférés az 1. tételhez

}

Légy óvatos! Mivel a függvénynek nem az adatok másolatát, hanem egy mutatót adunk át, az eredeti tömb módosul.

Ennek a módszernek az előnye a sebesség, a számítási erőforrások gazdaságossága és bizonyos rugalmasság. Tehát meghívhatja a célfüggvényt úgy, hogy mutatót juttat el a tömb tetszőleges eleméhez:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // egész tömb

ArrayFunction (& aNumbers [1]); // a második elemtől indulva

}

Ez a módszer általában magában foglalja a rendelkezésre álló elemek számának átadását egy további paraméterben vagy egy tömbterminátor használatát.

4. lépés

Adja át az adatokat egy függvénynek egy olyan paraméterrel, amely objektum vagy hivatkozás az osztály objektumára, amely megvalósítja a tömbfunkciót. Ilyen osztályok vagy osztálysablonok általában megtalálhatók a népszerű könyvtárakban és keretrendszerekben (QVector Qt-ben, CArray MFC-ben, std:: vektor STL-ben stb.).

Ezek az osztályok gyakran implicit adatmegosztási stratégiát hajtanak végre referenciaszámlálással, mély másolatot csak akkor hajtanak végre, ha az adatok módosulnak (másolás íráskor). Ez lehetővé teszi a számítási erőforrások felhasználásának minimalizálását még abban az esetben is, ha tömb objektumokat érték alapján adunk át a függvények és módszerek argumentumain keresztül:

void ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

void SomeFunction ()

{

QVector oArray (10);

mert (int i = 0; i

Ajánlott: