Arrays er en av de mest brukte formene for strukturert datalagring i dataprogrammer. Behandlingen av dem kan gjøres med forskjellige algoritmer implementert i klassemetoder og funksjoner. Følgelig er det ofte nødvendig å overføre en matrise til en funksjon. Språkene C og C ++ gir stor frihet til å velge metodene for å utføre denne handlingen.
Det er nødvendig
kompilatorer av C og C ++ språk
Bruksanvisning
Trinn 1
Gi en matrise med fast størrelse til funksjonen. Endre prototypen til funksjonen slik at den inneholder et argument av riktig type. For eksempel kan deklarasjonen av en funksjon som tar en rekke numeriske verdier av tre elementer som en parameter, se slik ut:
ugyldig ArrayFunction (int aNumbers [3]);
En slik funksjon kalles ved å sende en matrise direkte til den som et argument:
ugyldig SomeFunction ()
{
int aNumbers = {1, 2, 3};
ArrayFunction (aNumbers);
}
De overførte dataene kopieres til bunken. Endring av matrisen i den anropte funksjonen endrer ikke kilden.
Steg 2
Gi arrays med variabel lengde til funksjonen. For å gjøre dette, bare ikke spesifiser dimensjonen til det tilsvarende argumentet:
ugyldig ArrayFunction (int aNumbers );
Flerdimensjonale matriser kan også sendes på en lignende måte (bare den første "dimensjonen" kan være variabler):
ugyldig ArrayFunction (int numre [3] [2]);
Disse funksjonene kalles på samme måte som i første trinn.
For å kunne behandle matriser av variabel lengde i en funksjon riktig, må du enten eksplisitt føre antallet av elementene deres gjennom en tilleggsparameter, eller bruke konvensjoner som pålegger restriksjoner på verdiene til selve elementene (en viss verdi må være et tegn på slutten av matrisen).
Trinn 3
Gi matrisen etter pekeren. Funksjonsargumentet må være en peker til en verdi med en type som tilsvarer elementene i matrisen. For eksempel:
ugyldig ArrayFunction (int * pNumbers);
Tilgang til data i en funksjon kan utføres både i notasjonen for å jobbe med matriseelementer, og ved å bruke adressearitmetikk:
ugyldig ArrayFunction (int * pNumbers)
{
pNumbers [0] = 10; // tilgang til element 0
* (pNumre + 1) = 20; // tilgang til element 1
}
Vær forsiktig! Siden funksjonen sendes ikke en kopi av dataene, men en peker til den, vil den opprinnelige matrisen endres.
Fordelen med denne metoden er hastighet, økonomi for beregningsressurser og en viss fleksibilitet. Så du kan kalle målfunksjonen ved å sende den en peker til et vilkårlig element i matrisen:
ugyldig SomeFunction ()
{
int aNumbers = {1, 2, 3};
ArrayFunction (aNumbers); // hele matrisen
ArrayFunction (& numre [1]); // starter fra det andre elementet
}
Denne metoden innebærer vanligvis også å sende antall tilgjengelige elementer i en tilleggsparameter eller bruke en array-terminator.
Trinn 4
Gi data til en funksjon med en parameter som er et objekt eller en referanse til et objekt i klassen som implementerer matrisefunksjonaliteten. Slike klasser eller klassemaler finnes vanligvis i populære biblioteker og rammer (QVector i Qt, CArray i MFC, std:: vector i STL, etc.).
Ofte implementerer disse klassene en implisitt datadelingsstrategi med referansetelling, og utfører en dyp kopi bare når dataene er modifisert (kopi på skriv). Dette lar deg minimere forbruket av beregningsressurser, selv når du overfører matriseobjekter etter verdi gjennom argumentene til funksjoner og metoder:
void ArrayFunction (QVector oArray)
{
int nItemCount = oArray.count ();
int nItem = oArray [0];
}
ugyldig SomeFunction ()
{
QVector oArray (10);
for (int i = 0; i