Arrays zijn een van de meest gebruikte vormen van gestructureerde gegevensopslag in computerprogramma's. Hun verwerking kan worden gedaan door verschillende algoritmen die zijn geïmplementeerd in klassenmethoden en -functies. Dienovereenkomstig is het vaak nodig om een array door te geven aan een functie. De talen C en C++ bieden een grote vrijheid bij het kiezen van de methoden om deze actie uit te voeren.
Het is nodig
compilers van C- en C++-talen
instructies:
Stap 1
Geef een array met een vaste grootte door aan de functie. Wijzig het prototype van de functie zodat het een argument van het juiste type bevat. De declaratie van een functie die een array van gehele numerieke waarden van drie elementen als parameter nodig heeft, kan er bijvoorbeeld als volgt uitzien:
void ArrayFunction (int aNumbers [3]);
Zo'n functie wordt aangeroepen door er direct een array aan door te geven als argument:
een functie ongeldig maken ()
{
int aNumbers = {1, 2, 3};
ArrayFunctie (aNumbers);
}
De overgedragen gegevens worden naar de stapel gekopieerd. Het wijzigen van de array in de aangeroepen functie verandert de bron niet.
Stap 2
Geef arrays met variabele lengte door aan de functie. Om dit te doen, geeft u gewoon niet de dimensie van het bijbehorende argument op:
void ArrayFunction (int aNumbers );
Multidimensionale arrays kunnen ook op een vergelijkbare manier worden doorgegeven (alleen de eerste "dimensie" kan variabelen zijn):
void ArrayFunction (int aNumbers [3] [2]);
Deze functies worden op dezelfde manier aangeroepen als in de eerste stap.
Om arrays van variabele lengte in een functie correct te kunnen verwerken, moet je ofwel het aantal van hun elementen expliciet doorgeven via een extra parameter, ofwel conventies gebruiken die beperkingen opleggen aan de waarden van de elementen zelf (een bepaalde waarde moet een teken zijn van het einde van de array).
Stap 3
Geef de array door aanwijzer. Het functieargument moet een pointer zijn naar een waarde met een type dat overeenkomt met de elementen van de array. Bijvoorbeeld:
void ArrayFunction (int * pNumbers);
Toegang tot gegevens in een functie kan zowel in de notatie voor het werken met array-elementen als met behulp van adresberekeningen worden uitgevoerd:
void ArrayFunction (int * pNumbers)
{
pNummers [0] = 10; // toegang tot element 0
* (pNummers + 1) = 20; // toegang tot item 1
}
Doe voorzichtig! Aangezien aan de functie geen kopie van de gegevens wordt doorgegeven, maar een verwijzing ernaar, wordt de oorspronkelijke array gewijzigd.
Het voordeel van deze methode is snelheid, zuinigheid met computerbronnen en een zekere flexibiliteit. U kunt de doelfunctie dus aanroepen door deze een aanwijzer door te geven naar een willekeurig element van de array:
een functie ongeldig maken ()
{
int aNumbers = {1, 2, 3};
ArrayFunctie (aNumbers); // hele array
ArrayFunctie (& aNumbers [1]); // beginnend bij het tweede element
}
Deze methode omvat meestal ook het doorgeven van het aantal beschikbare elementen in een extra parameter of het gebruik van een array-terminator.
Stap 4
Geef gegevens door aan een functie met een parameter die een object is of een verwijzing naar een object van de klasse die de arrayfunctionaliteit implementeert. Dergelijke klassen of klassensjablonen zijn meestal te vinden in populaire bibliotheken en frameworks (QVector in Qt, CArray in MFC, std:: vector in STL, enz.).
Vaak implementeren deze klassen een impliciete strategie voor het delen van gegevens met referentietelling, waarbij alleen een diepe kopie wordt uitgevoerd wanneer de gegevens worden gewijzigd (kopiëren bij schrijven). Hierdoor kunt u het verbruik van rekenbronnen minimaliseren, zelfs in het geval van het doorgeven van array-objecten op waarde via de argumenten van functies en methoden:
void ArrayFunctie (QVector oArray)
{
int nItemCount = oArray.count ();
int nItem = oArray [0];
}
een functie ongeldig maken ()
{
QVector oArray (10);
voor (int i = 0; i