Hoe Om 'n Skikking Na 'n Funksie Oor Te Dra

INHOUDSOPGAWE:

Hoe Om 'n Skikking Na 'n Funksie Oor Te Dra
Hoe Om 'n Skikking Na 'n Funksie Oor Te Dra

Video: Hoe Om 'n Skikking Na 'n Funksie Oor Te Dra

Video: Hoe Om 'n Skikking Na 'n Funksie Oor Te Dra
Video: Gezichtsbehandeling aan huis na 50 jaar. Advies van de schoonheidsspecialiste. 2024, November
Anonim

Skikkings is een van die mees gebruikte vorms van gestruktureerde datastoor in rekenaarprogramme. Die verwerking daarvan kan gedoen word deur verskillende algoritmes wat in klasmetodes en funksies geïmplementeer word. Gevolglik is dit dikwels nodig om 'n skikking aan 'n funksie oor te dra. Die tale C en C ++ bied groot vryheid om die metodes te kies om hierdie aksie uit te voer.

Hoe om 'n skikking na 'n funksie oor te dra
Hoe om 'n skikking na 'n funksie oor te dra

Dit is nodig

samestellers van C en C ++ tale

Instruksies

Stap 1

Gee 'n skikking van vaste grootte na die funksie. Verander die prototipe van die funksie sodat dit 'n argument van die toepaslike tipe bevat. Byvoorbeeld, die verklaring van 'n funksie wat 'n skikking van heelgetalle-waardes van drie elemente as parameter neem, kan so lyk:

nietig ArrayFunction (int aNumbers [3]);

So 'n funksie word genoem deur 'n skikking direk daaraan deur te gee as 'n argument:

nietig SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

Die oordra data word na die stapel gekopieer. Die verandering van die skikking in die genoemde funksie verander nie die bron nie.

Stap 2

Gee skikkings met veranderlike lengte na die funksie. Om dit te doen, moet u eenvoudig nie die dimensie van die ooreenstemmende argument spesifiseer nie:

nietig ArrayFunction (int aNumbers );

Multidimensionele skikkings kan ook op soortgelyke wyse oorgedra word (slegs die eerste "dimensie" kan veranderlikes wees):

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

Hierdie funksies word op dieselfde manier genoem as in die eerste stap.

Om skikkings van veranderlike lengte in 'n funksie korrek te kan verwerk, moet u die aantal elemente eksplisiet deur 'n bykomende parameter stuur, of konvensies gebruik wat beperkings op die waardes van die elemente self oplewer ('n sekere moet 'n teken van die einde van die skikking wees).

Stap 3

Gee die skikking volgens wyser. Die funksie-argument moet 'n wyser wees na 'n waarde met 'n tipe wat ooreenstem met die elemente van die skikking. Byvoorbeeld:

nietig ArrayFunction (int * pNumbers);

Toegang tot data in 'n funksie kan plaasvind in die notasie vir die werk met skikking-elemente en met behulp van adresrekeningkunde:

nietig ArrayFunction (int * pNumbers)

{

pNommers [0] = 10; // toegang tot element 0

* (pnommers + 1) = 20; // toegang tot item 1

}

Wees versigtig! Aangesien die funksie nie 'n kopie van die data is nie, maar 'n aanwyser daarna, sal die oorspronklike skikking gewysig word.

Die voordeel van hierdie metode is spoed, besparing van berekeningsbronne en 'n sekere buigsaamheid. U kan dus die teikenfunksie noem deur dit 'n wyser na 'n arbitrêre element van die skikking te gee:

nietig SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // hele skikking

ArrayFunction (& getalle [1]); // vanaf die tweede element

}

Hierdie metode behels gewoonlik ook dat die aantal beskikbare elemente in 'n addisionele parameter oorgedra word of 'n skikkingsterminator gebruik word.

Stap 4

Gee data na 'n funksie met 'n parameter wat 'n voorwerp is of 'n verwysing na 'n voorwerp van die klas wat die skikkingfunksionaliteit implementeer. Sulke klasse of klassjablone word gewoonlik in gewilde biblioteke en raamwerke aangetref (QVector in Qt, CArray in MFC, std:: vector in STL, ens.).

Dikwels implementeer hierdie klasse 'n implisiete datadelingstrategie met verwysingtelling, en voer slegs 'n diep kopie uit wanneer die data gewysig word (kopie op skryf). Hiermee kan u die verbruik van berekeningsbronne tot die minimum beperk, selfs as u skikkingvoorwerpe volgens waarde deurgee deur die argumente van funksies en metodes:

nietig ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

nietig SomeFunction ()

{

QVector oArray (10);

vir (int i = 0; i

Aanbeveel: