Kaip Perduoti Masyvą Funkcijai

Turinys:

Kaip Perduoti Masyvą Funkcijai
Kaip Perduoti Masyvą Funkcijai

Video: Kaip Perduoti Masyvą Funkcijai

Video: Kaip Perduoti Masyvą Funkcijai
Video: Passing Array as an Argument to a Function 2024, Balandis
Anonim

Masyvai yra viena iš dažniausiai naudojamų struktūrizuotų duomenų saugojimo kompiuterinėse programose formų. Jų apdorojimas gali būti atliekamas įvairiais algoritmais, įgyvendinamais klasės metodais ir funkcijomis. Atitinkamai dažnai reikia perduoti masyvą funkcijai. C ir C ++ kalbos suteikia didelę laisvę pasirinkti šio veiksmo atlikimo metodus.

Kaip perduoti masyvą funkcijai
Kaip perduoti masyvą funkcijai

Tai būtina

C ir C ++ kalbų sudarytojai

Nurodymai

1 žingsnis

Perduokite fiksuoto dydžio masyvą funkcijai. Pakeiskite funkcijos prototipą, kad jame būtų atitinkamo tipo argumentas. Pvz., Funkcijos, kurios parametru imamas trijų elementų skaičių ir skaitmenų reikšmių masyvas, deklaravimas gali atrodyti taip:

void „ArrayFunction“(int aNumbers [3]);

Tokia funkcija vadinama perduodant masyvą tiesiai į ją kaip argumentą:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

„ArrayFunction“(aNumbers);

}

Perkelti duomenys nukopijuojami į rietuvę. Pakeitus masyvą iškviestoje funkcijoje, šaltinis nepasikeis.

2 žingsnis

Perduokite kintamo ilgio masyvus funkcijai. Norėdami tai padaryti, tiesiog nenurodykite atitinkamo argumento dimensijos:

void „ArrayFunction“(int aNumbers );

Daugialypės masyvai taip pat gali būti perduodami panašiai (tik pirmasis „matmuo“gali būti kintamieji):

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

Šios funkcijos vadinamos taip pat, kaip ir pirmame etape.

Norėdami tinkamai apdoroti kintamo ilgio masyvus funkcijoje, turite arba aiškiai perduoti jų elementų skaičių per papildomą parametrą, arba naudoti konvencijas, kurios nustato apribojimus pačių elementų reikšmėms (tam tikra reikšmė). turi būti masyvo pabaigos ženklas).

3 žingsnis

Perduokite masyvą rodykle. Funkcijos argumentas turi būti vertės, kurios tipas atitinka masyvo elementus, žymeklis. Pavyzdžiui:

void „ArrayFunction“(int * pNumbers);

Prieiga prie duomenų, esančių funkcijoje, gali būti atliekama tiek dirbant su masyvo elementais, tiek naudojant adreso aritmetiką:

void „ArrayFunction“(int * pNumbers)

{

pSkaičiai [0] = 10; // prieiga prie 0 elemento

* (pSkaičiai + 1) = 20; // prieiga prie 1 punkto

}

Būk atsargus! Kadangi funkcija perduodama ne duomenų kopija, o jų rodyklė, originalus masyvas bus pakeistas.

Šio metodo pranašumas yra greitis, skaičiavimo išteklių taupumas ir tam tikras lankstumas. Taigi, tikslinę funkciją galite iškviesti perduodami žymeklį į savavališką masyvo elementą:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

„ArrayFunction“(aNumbers); // visas masyvas

„ArrayFunction“(& aNumbers [1]); // pradedant nuo antrojo elemento

}

Šis metodas taip pat paprastai apima galimų elementų skaičiaus perdavimą papildomame parametre arba masyvo terminatoriaus naudojimą.

4 žingsnis

Duokite duomenis funkcijai su parametru, kuris yra objektas arba nuoroda į klasės objektą, įgyvendinantį masyvo funkciją. Tokių klasių ar klasių šablonų dažniausiai galima rasti populiariose bibliotekose ir sistemose (QVector Qt, CArray MFC, std:: vector STL ir kt.).

Dažnai šios klasės įgyvendina numanomą duomenų mainų strategiją su nuorodų skaičiavimu, giluminę kopiją atlieka tik tada, kai duomenys yra modifikuoti (kopija rašant). Tai leidžia sumažinti skaičiavimo išteklių sunaudojimą net tuo atveju, jei masyvo objektai perduodami pagal vertę per funkcijų ir metodų argumentus:

void „ArrayFunction“(„QVector oArray“)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

void SomeFunction ()

{

„QVector oArray“(10);

už (int i = 0; i

Rekomenduojamas: