Frage

Sind Arrays standardmäßig durch ref oder Wert übergeben? Danke.

War es hilfreich?

Lösung

Sie werden als Zeiger übergeben. Dies bedeutet, dass alle Informationen über die Array-Größe verloren. Sie würden viel besser zu nutzen std :: geraten werden Vektoren, die von Wert oder als Referenz übergeben werden können, wie Sie sich entscheiden, und die daher alle behalten ihre Informationen.

Hier ist ein Beispiel der Übergabe eines Arrays an eine Funktion. Beachten Sie, müssen wir die Anzahl der Elemente speziell angeben, wie sizeof (p) würde die Größe des Zeigers geben.

int add( int * p, int n ) {
   int total = 0;
   for ( int i = 0; i < n; i++ ) {
       total += p[i];
   }
   return total;
}


int main() {
    int a[] = { 1, 7, 42 };
    int n = add( a, 3 );
}

Andere Tipps

Als erstes können Sie nicht ein Array von Wert in dem Sinne, passieren, dass eine Kopie des Arrays hergestellt wird. Wenn Sie diese Funktionalität, Verwendung std::vector oder boost::array.

Normalerweise wird ein Zeiger auf das erste Element wird durch den Wert übergeben. Die Größe des Arrays wird in diesem Prozess verloren und muss separat übergeben werden. Die folgenden Signaturen sind alle gleichwertig:

void by_pointer(int *p, int size);
void by_pointer(int p[], int size);
void by_pointer(int p[7], int size);   // the 7 is ignored in this context!

Wenn Sie mit dem Verweis übergeben wollen, ist die Größe Teil des Typs:

void by_reference(int (&a)[7]);   // only arrays of size 7 can be passed here!

Oft kombinieren Sie Pass durch Verweis mit Vorlagen, so dass Sie die Funktion mit verschiedenen statisch bekannten Größen verwendet werden:

template<size_t size>
void by_reference(int (&a)[size]);

Hope, das hilft.

Arrays sind speziell: sie werden immer als Zeiger auf das erste Elemente des Arrays übergeben

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top