Arrays sind eine der am häufigsten verwendeten Formen der strukturierten Datenspeicherung in Computerprogrammen. Ihre Verarbeitung kann durch verschiedene Algorithmen erfolgen, die in Klassenmethoden und -funktionen implementiert sind. Dementsprechend ist es oft erforderlich, ein Array an eine Funktion zu übergeben. Die Sprachen C und C ++ bieten große Freiheit bei der Auswahl der Methoden zur Durchführung dieser Aktion.
Es ist notwendig
Compiler von C- und C++-Sprachen
Anleitung
Schritt 1
Übergeben Sie ein Array fester Größe an die Funktion. Ändern Sie den Prototyp der Funktion so, dass er ein Argument des entsprechenden Typs enthält. Die Deklaration einer Funktion, die ein Array aus ganzzahligen numerischen Werten von drei Elementen als Parameter übernimmt, könnte beispielsweise so aussehen:
void ArrayFunction (int aNumbers [3]);
Eine solche Funktion wird aufgerufen, indem ihr ein Array direkt als Argument übergeben wird:
void SomeFunction ()
{
int aZahlen = {1, 2, 3};
ArrayFunction (aNumbers);
}
Die übertragenen Daten werden auf den Stack kopiert. Das Ändern des Arrays in der aufgerufenen Funktion ändert die Quelle nicht.
Schritt 2
Übergeben Sie Arrays mit variabler Länge an die Funktion. Geben Sie dazu einfach nicht die Dimension des entsprechenden Arguments an:
void ArrayFunction (int aNumbers );
Auf ähnliche Weise können auch mehrdimensionale Arrays übergeben werden (nur die erste "Dimension" kann Variablen sein):
void ArrayFunction (int aNumbers [3] [2]);
Diese Funktionen werden wie im ersten Schritt aufgerufen.
Um Arrays variabler Länge in einer Funktion korrekt verarbeiten zu können, müssen Sie entweder die Anzahl ihrer Elemente explizit über einen zusätzlichen Parameter übergeben oder Konventionen verwenden, die die Werte der Elemente selbst einschränken (ein bestimmter Wert muss ein Zeichen für das Ende des Arrays sein).
Schritt 3
Übergeben Sie das Array per Zeiger. Das Funktionsargument muss ein Zeiger auf einen Wert mit einem Typ sein, der den Elementen des Arrays entspricht. Beispielsweise:
void ArrayFunction (int * pNumbers);
Der Zugriff auf Daten in einer Funktion kann sowohl in der Notation zum Arbeiten mit Array-Elementen als auch über die Adressarithmetik erfolgen:
void ArrayFunction (int * pNumbers)
{
pZahlen [0] = 10; // Zugriff auf Element 0
* (pZahlen + 1) = 20; // Zugriff auf Punkt 1
}
Seien Sie vorsichtig! Da der Funktion keine Kopie der Daten, sondern ein Zeiger darauf übergeben wird, wird das ursprüngliche Array modifiziert.
Der Vorteil dieser Methode ist Geschwindigkeit, Wirtschaftlichkeit der Rechenressourcen und eine gewisse Flexibilität. Sie können also die Zielfunktion aufrufen, indem Sie ihr einen Zeiger auf ein beliebiges Element des Arrays übergeben:
void SomeFunction ()
{
int aZahlen = {1, 2, 3};
ArrayFunction (aNumbers); // ganzes Array
Array-Funktion (& aNumbers [1]); // beginnend mit dem zweiten Element
}
Bei dieser Methode wird normalerweise auch die Anzahl der verfügbaren Elemente in einem zusätzlichen Parameter übergeben oder ein Array-Abschlusszeichen verwendet.
Schritt 4
Übergeben Sie Daten an eine Funktion mit einem Parameter, bei dem es sich um ein Objekt oder einen Verweis auf ein Objekt der Klasse handelt, die die Array-Funktionalität implementiert. Solche Klassen oder Klassenvorlagen finden sich normalerweise in gängigen Bibliotheken und Frameworks (QVector in Qt, CArray in MFC, std:: vector in STL usw.).
Häufig implementieren diese Klassen eine implizite Strategie für die gemeinsame Datennutzung mit Referenzzählung, die eine Tiefenkopie nur dann durchführt, wenn die Daten geändert werden (Kopie beim Schreiben). Auf diese Weise können Sie den Verbrauch von Rechenressourcen minimieren, selbst wenn Array-Objekte nach Wert durch die Argumente von Funktionen und Methoden übergeben werden:
void ArrayFunction (QVector oArray)
{
int nItemCount = oArray.count ();
int nItem = oArray [0];
}
void SomeFunction ()
{
QVector oArray (10);
für (int i = 0; i