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: Калькулятор больше не нужен! Как быстро считать | Математика 9 класс | TutorOnline 2024, Svibanj
Anonim

Nizovi su jedan od najčešće korištenih oblika strukturirane pohrane podataka u računalnim programima. Njihova obrada može se izvršiti različitim algoritmima implementiranim 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

Nužno je

kompajleri jezika C i C ++

Upute

Korak 1

Proslijedite funkciji niz 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 triju elemenata kao parametar može izgledati ovako:

void ArrayFunction (int aNumbers [3]);

Takva se funkcija poziva predavanjem niza izravno njoj kao argument:

void SomeFunction ()

{

int aBrojevi = {1, 2, 3};

ArrayFunction (aBrojevi);

}

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 );

Višedimenzionalni nizovi također se 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 duljine u funkciji, morate ili izričito 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).

3. korak

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 pomoću aritmetike adrese:

void ArrayFunction (int * pNumbers)

{

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

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

}

Budi oprezan! Budući da se funkcija prosljeđuje ne kopija podataka, već pokazivač na nju, izvorni će se niz izmijeniti.

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

void SomeFunction ()

{

int aBrojevi = {1, 2, 3};

ArrayFunction (aBrojevi); // cijeli niz

ArrayFunction (& aNumbers [1]); // počevši od drugog elementa

}

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

4. korak

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

Te klase često implementiraju implicitnu strategiju dijeljenja podataka s brojanjem referenci, izvodeći dubinsku kopiju samo kada su podaci modificirani (kopija pri pisanju). To vam omogućuje 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čeni: