Kako Proslijediti Niz Funkciji

Sadržaj:

Kako Proslijediti Niz Funkciji
Kako Proslijediti Niz Funkciji

Video: Kako Proslijediti Niz Funkciji

Video: Kako Proslijediti Niz Funkciji
Video: Как сделать самый простой фрезерный стол! И тут же его усовершенствовать! 2024, Novembar
Anonim

Nizovi su jedan od najčešće korištenih oblika strukturiranog skladištenja podataka u računarskim programima. Njihova obrada može se izvršiti pomoću različitih algoritama implementiranih u metode i funkcije klase. U skladu s tim, često je potrebno proslijediti niz funkciji. Jezici C i C ++ nude veliku slobodu u odabiru metoda izvođenja ove radnje.

Kako proslijediti niz funkciji
Kako proslijediti niz funkciji

Neophodno je

kompajleri jezika C i C ++

Instrukcije

Korak 1

Proslijedite funkciju niza fiksne veličine. Promijenite prototip funkcije tako da sadrži argument odgovarajućeg tipa. Na primjer, deklaracija funkcije koja uzima niz cjelobrojnih numeričkih vrijednosti tri elementa kao parametar može izgledati ovako:

void ArrayFunction (int aNumbers [3]);

Takva se funkcija poziva prenošenjem niza izravno na nju kao argumenta:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

Preneseni podaci kopiraju se u stog. Izmjena niza u pozvanoj funkciji ne mijenja izvor.

Korak 2

Prenesite funkciji nizove promjenjive duljine. Da biste to učinili, jednostavno ne navedite dimenziju odgovarajućeg argumenta:

void ArrayFunction (int aNumbers );

Multidimenzionalni nizovi se također mogu proslijediti na sličan način (samo prva "dimenzija" može biti varijable):

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

Te se funkcije pozivaju na isti način kao u prvom koraku.

Da biste mogli pravilno obraditi nizove promjenjive dužine u funkciji, morate ili eksplicitno proslijediti broj njihovih elemenata kroz dodatni parametar, ili koristiti konvencije koje nameću ograničenja na vrijednosti samih elemenata (određena vrijednost mora biti znak kraja niza).

Korak 3

Proslijedite niz pokazivačem. Argument funkcije mora biti pokazivač na vrijednost s tipom koji odgovara elementima niza. Na primjer:

void ArrayFunction (int * pNumbers);

Pristup podacima u funkciji može se izvršiti kako u zapisu za rad s elementima niza, tako i koristeći aritmetiku adrese:

void ArrayFunction (int * pNumbers)

{

pBrojevi [0] = 10; // pristup elementu 0

* (pBrojevi + 1) = 20; // pristup stavci 1

}

Budi pazljiv! Budući da se funkcija prenosi ne kopija podataka, već pokazivač na nju, izvorni niz će se izmijeniti.

Prednost ove metode je brzina, ekonomičnost računarskih resursa i određena fleksibilnost. Dakle, možete pozvati ciljnu funkciju dodavanjem pokazivača na proizvoljan element niza:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // cijeli niz

ArrayFunction (& aNumbers [1]); // polazeći od drugog elementa

}

Ova metoda također obično uključuje prosljeđivanje broja dostupnih elemenata u dodatni parametar ili upotrebu terminatora niza.

Korak 4

Proslijedite podatke funkciji s parametrom koji je objekt ili referenca na objekt klase koji implementira funkcionalnost niza. Takve klase ili predlošci klasa obično se nalaze u popularnim bibliotekama i okvirima (QVector u Qt, CArray u MFC, std:: vector u STL, itd.).

Često ove klase implementiraju implicitnu strategiju dijeljenja podataka s brojanjem referenci, izvodeći dubinsku kopiju samo kada su podaci modificirani (kopija pri pisanju). To vam omogućava da smanjite potrošnju računarskih resursa čak i u slučaju prosljeđivanja objekata niza po vrijednosti kroz argumente funkcija i metoda:

void ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

void SomeFunction ()

{

QVector oArray (10);

za (int i = 0; i

Preporučuje se: