Ako Odovzdať Pole Funkcii

Obsah:

Ako Odovzdať Pole Funkcii
Ako Odovzdať Pole Funkcii

Video: Ako Odovzdať Pole Funkcii

Video: Ako Odovzdať Pole Funkcii
Video: Хореография Pole Exotic - полный видео урок 2024, November
Anonim

Polia sú jednou z najbežnejšie používaných foriem štruktúrovaného ukladania údajov v počítačových programoch. Ich spracovanie je možné vykonať rôznymi algoritmami implementovanými do metód a funkcií triedy. Preto sa často vyžaduje, aby sa pole odovzdalo funkcii. Jazyky C a C ++ ponúkajú veľkú slobodu pri výbere metód vykonávania tejto akcie.

Ako odovzdať pole funkcii
Ako odovzdať pole funkcii

Je to nevyhnutné

kompilátory jazykov C a C ++

Inštrukcie

Krok 1

Funkcii odovzdajte pole pevnej veľkosti. Zmeňte prototyp funkcie tak, aby obsahoval argument príslušného typu. Napríklad deklarácia funkcie, ktorá berie ako parameter pole celočíselných číselných hodnôt troch prvkov, môže vyzerať takto:

void ArrayFunction (int aNumbers [3]);

Takáto funkcia sa volá tak, že sa k nej priamo odovzdá pole ako argument:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

Prenesené údaje sa skopírujú do stohu. Úpravou poľa volanej funkcie sa nezmení zdroj.

Krok 2

Funkcii odovzdajte polia s premennou dĺžkou. Ak to chcete urobiť, jednoducho nezadajte rozmer zodpovedajúceho argumentu:

void ArrayFunction (int aNumbers );

Viacrozmerné polia je možné odovzdať aj podobným spôsobom (premennými môžu byť iba prvá „dimenzia“):

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

Tieto funkcie sa volajú rovnako ako v prvom kroku.

Aby ste mohli správne spracovať polia premennej dĺžky vo funkcii, musíte buď explicitne preniesť počet ich prvkov cez ďalší parameter, alebo použiť konvencie, ktoré ukladajú obmedzenia na hodnoty samotných prvkov (určitá hodnota musí byť znakom konca poľa).

Krok 3

Predajte pole ukazovateľom. Argument funkcie musí byť ukazovateľ na hodnotu s typom zodpovedajúcim prvkom poľa. Napríklad:

void ArrayFunction (int * pNumbers);

Prístup k údajom vo funkcii je možné vykonať jednak v notácii pre prácu s prvkami poľa, jednak pomocou aritmetiky adries:

void ArrayFunction (int * pNumbers)

{

pČísla [0] = 10; // prístup k prvku 0

* (pČísla + 1) = 20; // prístup k položke 1

}

Buď opatrný! Pretože funkcia odovzdáva nie kópiu údajov, ale ukazovateľ na ňu, pôvodné pole sa upraví.

Výhodou tejto metódy je rýchlosť, hospodárnosť výpočtových zdrojov a určitá flexibilita. Cieľovú funkciu teda môžete nazvať odovzdaním ukazovateľa na ľubovoľný prvok poľa:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // celé pole

ArrayFunction (& aNumbers [1]); // od druhého prvku

}

Táto metóda tiež zvyčajne zahŕňa odovzdanie počtu dostupných prvkov v ďalšom parametri alebo použitie zakončenia poľa.

Krok 4

Odošlite údaje funkcii s parametrom, ktorým je objekt, alebo odkazom na objekt triedy, ktorý implementuje funkčnosť poľa. Takéto triedy alebo šablóny tried sa zvyčajne nachádzajú v populárnych knižniciach a frameworkoch (QVector v Qt, CArray v MFC, std:: vector v STL atď.).

Tieto triedy často implementujú implicitnú stratégiu zdieľania údajov s počítaním referencií, pričom hĺbkovú kópiu vykonávajú iba pri zmene údajov (kopírovanie pri zápise). To vám umožní minimalizovať spotrebu výpočtových zdrojov aj v prípade odovzdávania objektov poľa podľa hodnoty prostredníctvom argumentov funkcií a metód:

void ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

void SomeFunction ()

{

QVector oArray (10);

pre (int i = 0; i

Odporúča: