Jak Předat Pole Funkci

Obsah:

Jak Předat Pole Funkci
Jak Předat Pole Funkci

Video: Jak Předat Pole Funkci

Video: Jak Předat Pole Funkci
Video: Jak přidat pole použitím funkce "Vyberte pole" 2024, Smět
Anonim

Pole jsou jednou z nejčastěji používaných forem ukládání strukturovaných dat v počítačových programech. Jejich zpracování lze provádět různými algoritmy implementovanými do třídních metod a funkcí. Proto je často nutné předat pole funkci. Jazyky C a C ++ nabízejí velkou svobodu při výběru metod provádění této akce.

Jak předat pole funkci
Jak předat pole funkci

Je to nutné

překladače jazyků C a C ++

Instrukce

Krok 1

Předejte funkci pole pevné velikosti. Změňte prototyp funkce tak, aby obsahoval argument příslušného typu. Například deklarace funkce, která jako parametr přebírá pole celých číselných hodnot tří prvků, může vypadat například takto:

void ArrayFunction (int aNumbers [3]);

Taková funkce se nazývá předáním pole přímo do něj jako argument:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

Přenesená data se zkopírují do zásobníku. Úpravou pole ve volané funkci se zdroj nezmění.

Krok 2

Předejte matici pole proměnné délky. Chcete-li to provést, jednoduše nezadejte rozměr příslušného argumentu:

void ArrayFunction (int aNumbers );

Vícerozměrná pole lze také předat podobným způsobem (proměnnými mohou být pouze první „dimenze“):

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

Tyto funkce se nazývají stejným způsobem jako v prvním kroku.

Aby bylo možné správně zpracovat pole proměnné délky ve funkci, musíte buď explicitně předat počet jejich prvků prostřednictvím dalšího parametru, nebo použít konvence, které ukládají omezení hodnot samotných prvků (určitá hodnota musí být znamením konce pole).

Krok 3

Předejte pole ukazatelem. Argument funkce musí být ukazatel na hodnotu s typem odpovídajícím prvkům pole. Například:

void ArrayFunction (int * pNumbers);

Přístup k datům ve funkci lze provádět jak v notaci pro práci s prvky pole, tak pomocí aritmetiky adres:

void ArrayFunction (int * pNumbers)

{

pNumbers [0] = 10; // přístup k prvku 0

* (pNumbers + 1) = 20; // přístup k položce 1

}

Buď opatrný! Protože funkce není předána kopií dat, ale ukazatelem na ni, bude původní pole změněno.

Výhodou této metody je rychlost, hospodárnost výpočetních zdrojů a určitá flexibilita. Cílovou funkci tedy můžete zavolat tak, že jí předáte ukazatel na libovolný prvek pole:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // celé pole

ArrayFunction (& aNumbers [1]); // počínaje druhým prvkem

}

Tato metoda také obvykle zahrnuje předání počtu dostupných prvků v dalším parametru nebo použití terminátoru pole.

Krok 4

Předejte data funkci s parametrem, který je objektem nebo odkazem na objekt třídy, která implementuje funkčnost pole. Takové třídy nebo šablony tříd se obvykle nacházejí v populárních knihovnách a rámcích (QVector v Qt, CArray v MFC, std:: vector v STL atd.).

Tyto třídy často implementují implicitní strategii sdílení dat s počítáním odkazů, provádějí hlubokou kopii pouze v případě, že jsou data upravena (kopírování při zápisu). To vám umožní minimalizovat spotřebu výpočetních prostředků i v případě předávání objektů pole podle hodnoty prostřednictvím argumentů funkcí a metod:

void ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

void SomeFunction ()

{

QVector oArray (10);

pro (int i = 0; i

Doporučuje: