Massiivi Edastamine Funktsioonile

Sisukord:

Massiivi Edastamine Funktsioonile
Massiivi Edastamine Funktsioonile

Video: Massiivi Edastamine Funktsioonile

Video: Massiivi Edastamine Funktsioonile
Video: נתקעתי בכלוב עם כרישים ענקיים!! (מתחת למים בדובאי!) 2024, Mai
Anonim

Massiivid on arvutiprogrammides üks enim kasutatavaid struktureeritud andmete salvestamise vorme. Nende töötlemist saab teha erinevate algoritmidega, mis on rakendatud klassi meetodites ja funktsioonides. Vastavalt sellele on sageli vaja massiivi edastamine funktsioonile. C ja C ++ keel pakuvad selle toimingu teostamise meetodite valimisel suurt vabadust.

Massiivi edastamine funktsioonile
Massiivi edastamine funktsioonile

See on vajalik

C ja C ++ keelte koostajad

Juhised

Samm 1

Edastage funktsioonile kindla suurusega massiiv. Muutke funktsiooni prototüüpi, et see sisaldaks sobivat tüüpi argumenti. Näiteks funktsiooni deklaratsioon, mis võtab kolme elemendi täisarvuliste arvväärtuste massiivi parameetriks, võib välja näha järgmine:

void ArrayFunction (int aNumbrid [3]);

Sellist funktsiooni nimetatakse massiivi edastamiseks otse argumendina:

void SomeFunction ()

{

int aNumbrid = {1, 2, 3};

ArrayFunction (aNumbrid);

}

Edastatud andmed kopeeritakse virna. Massiivi muutmine kutsutud funktsioonis ei muuda allikat.

2. samm

Muutuva pikkusega massiivi edastamine funktsioonile Selleks ärge lihtsalt määrake vastava argumendi dimensiooni:

void ArrayFunction (int aNumbrid );

Mitmemõõtmelisi massiive saab edastada ka sarnaselt (muutujad võivad olla ainult esimene "mõõde"):

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

Neid funktsioone kutsutakse samamoodi nagu esimeses etapis.

Funktsioonis erineva pikkusega massiivide õigeks töötlemiseks peate kas nende elementide arvu sõnaselgelt edastama täiendava parameetri kaudu või kasutama konventsioone, mis seavad piirangud elementide enda väärtustele (teatud väärtus peab olema märk massiivi lõpust).

3. samm

Massiivi edastamine osuti abil. Funktsiooni argument peab olema osutus väärtusele, mille tüüp vastab massiivi elementidele. Näiteks:

void ArrayFunction (int * pNumbrid);

Juurdepääsu funktsiooni andmetele saab teostada nii massiivi elementidega töötamise märkuses kui ka aadressiaritmeetika abil:

void ArrayFunction (int * pNumbers)

{

pNumbrid [0] = 10; // juurdepääs elemendile 0

* (pNumbrid + 1) = 20; // juurdepääs üksusele 1

}

Ole ettevaatlik! Kuna funktsioonile ei edastata mitte andmete koopiat, vaid sellele osutavat kursorit, muudetakse algset massiivi.

Selle meetodi eeliseks on kiirus, arvutusressursside säästlikkus ja teatav paindlikkus. Niisiis, saate helistada sihtfunktsioonile, edastades selle osakaalu massiivi suvalisele elemendile:

void SomeFunction ()

{

int aNumbrid = {1, 2, 3};

ArrayFunction (aNumbrid); // kogu massiiv

ArrayFunction (& aNumbrid [1]); // alustades teisest elemendist

}

See meetod hõlmab tavaliselt ka saadaolevate elementide arvu edastamist täiendavas parameetris või massiivi terminali kasutamist.

4. samm

Andmete edastamine funktsioonile parameetriga, mis on objekt või viide massiivi funktsionaalsust rakendava klassi objektile. Selliseid klasse või klasside malle leidub tavaliselt populaarsetes raamatukogudes ja raamistikes (QVector Qt-s, CArray MFC-s, std:: vektor STL-is jne).

Sageli rakendavad need klassid implitsiitset andmete jagamise strateegiat koos viidete loendamisega, sooritades sügava koopia ainult siis, kui andmeid muudetakse (koopia kirjutamisel). See võimaldab teil arvutuslike ressursside tarbimist minimeerida isegi massiiviobjektide väärtuse kaudu edastamise korral funktsioonide ja meetodite argumentide kaudu:

void ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

void SomeFunction ()

{

QVector oArray (10);

jaoks (int i = 0; i

Soovitan: