Kako Posredovati Matriko Funkciji

Kazalo:

Kako Posredovati Matriko Funkciji
Kako Posredovati Matriko Funkciji

Video: Kako Posredovati Matriko Funkciji

Video: Kako Posredovati Matriko Funkciji
Video: ОБЯЗАТЕЛЬНО ПОСМОТРИТЕ: Важное замечание по обработке персональных данных в Google Forms. 2024, Maj
Anonim

Nizi so ena najbolj pogosto uporabljenih oblik strukturiranega shranjevanja podatkov v računalniških programih. Njihovo obdelavo je mogoče izvajati z različnimi algoritmi, vgrajenimi v metode in funkcije razredov. V skladu s tem je pogosto treba funkciji predati matriko. Jezika C in C ++ ponujata veliko svobodo pri izbiri načinov izvajanja tega dejanja.

Kako posredovati matriko funkciji
Kako posredovati matriko funkciji

Potrebno je

prevajalniki jezikov C in C ++

Navodila

Korak 1

Posreduj matriko v funkcijo. Spremenite prototip funkcije tako, da vsebuje argument ustrezne vrste. Na primer, izjava funkcije, ki kot parameter sprejme niz celoštevilskih številskih vrednosti treh elementov, bi lahko izgledala takole:

void ArrayFunction (int aNumbers [3]);

Takšna funkcija se pokliče tako, da se ji kot argument posreduje matrika neposredno:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

Preneseni podatki se kopirajo v sklad. Spreminjanje polja v priklicani funkciji ne spremeni vira.

2. korak

Polju spremenljive dolžine posredujte funkcijo. Če želite to narediti, preprosto ne določite dimenzije ustreznega argumenta:

void ArrayFunction (int aNumbers );

Večdimenzionalni nizi se lahko prenesejo tudi na podoben način (spremenljivke so lahko le prve "dimenzije"):

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

Te funkcije se pokličejo na enak način kot v prvem koraku.

Če želite v funkciji pravilno obdelati polja s spremenljivo dolžino, morate bodisi izrecno prenesti število njihovih elementov skozi dodaten parameter ali pa uporabiti konvencije, ki nalagajo omejitve na vrednosti elementov samih (določena vrednost mora biti znak konca polja).

3. korak

Spremeni matriko po kazalcu. Argument funkcije mora biti kazalec na vrednost s tipom, ki ustreza elementom matrike. Na primer:

void ArrayFunction (int * pNumbers);

Dostop do podatkov v funkciji je mogoč tako v zapisu za delo z elementi matrike kot tudi z uporabo aritmetike naslova:

void ArrayFunction (int * pNumbers)

{

pŠtevilke [0] = 10; // dostop do elementa 0

* (pŠtevilke + 1) = 20; // dostop do točke 1

}

Bodi previden! Ker funkcija posreduje ne kopijo podatkov, temveč kazalec nanjo, bo izvirna matrika spremenjena.

Prednost te metode je hitrost, ekonomičnost računskih virov in določena prilagodljivost. Torej, ciljno funkcijo lahko pokličete tako, da ji posredujete kazalec na poljuben element polja:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // celo polje

ArrayFunction (& aNumbers [1]); // začenši z drugim elementom

}

Ta metoda običajno vključuje tudi prenos števila razpoložljivih elementov v dodatni parameter ali uporabo zaključevalnika matrike.

4. korak

Posreduj podatke funkciji s parametrom, ki je objekt, ali sklic na objekt razreda, ki izvaja funkcionalnost matrike. Takšne razrede ali predloge razredov običajno najdemo v priljubljenih knjižnicah in okvirih (QVector v Qt, CArray v MFC, std:: vector v STL itd.).

Ti razredi pogosto izvajajo implicitno strategijo izmenjave podatkov s štetjem referenc, pri čemer izvedejo globoko kopijo le, če so podatki spremenjeni (kopiranje pri pisanju). To vam omogoča, da zmanjšate porabo računskih virov tudi v primeru posredovanja predmetov matrike po vrednosti skozi argumente funkcij in metod:

void ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

void SomeFunction ()

{

QVector oArray (10);

za (int i = 0; i

Priporočena: