Gibt ein Array in C ++ zurück

7

Angenommen, ich habe ein Array

%Vor%

Ich habe die Funktion als

%Vor%

Welchen Fehler mache ich hier?

    
manugupt1 20.02.2010, 13:13
quelle

11 Antworten

7
%Vor%

In dieser Funktion ist arr ein Zeiger, und es gibt keine Möglichkeit, ihn wieder in ein Array umzuwandeln. Es ist dasselbe wie

%Vor% %Vor%

Wenn angenommen wird, dass die Funktion einen Verweis auf Array zurückgibt, funktioniert dies immer noch nicht. Sie können einem Array nicht zuweisen. Im besten Fall könnte man das Ergebnis an eine "Referenz eines Arrays von X-Ints" binden (mit einem Typedef, weil die Syntax ansonsten sehr hässlich würde):

%Vor%

Es ist jedoch völlig unklar, was der Code in Ihrer Frage erreichen soll. Alle Änderungen, die Sie am Array in Funktion vornehmen, sind für den Aufrufer sichtbar. Es gibt also keinen Grund zu versuchen, das Array zurückzugeben oder es dem ursprünglichen Array zuzuordnen.

Wenn Sie ein Array mit fester Größe haben möchten, das Sie einem Wert zuweisen und übergeben können (mit den kopierten Inhalten), gibt es std::tr1::array (oder boost::array ). std::vector ist auch eine Option, aber das ist ein dynamisches Array, also kein exaktes Äquivalent.

    
UncleBens 20.02.2010, 14:14
quelle
6

Wie andere schon sagten, gibt es bessere Optionen wie STL-Container und die interessanteste Frage ist, warum Sie das Array zu einer Funktion zurückgeben müssen, die es bereits im Umfang hat.

Das heißt, Sie können Arrays nicht als Wert übergeben oder zurückgeben und müssen vermeiden, dass das Array zu einem Zeiger abfällt (siehe zB hier ), entweder mit Hilfe von Zeigern oder Verweisen darauf:

%Vor%

Wenn Sie die Größe nicht fest codieren möchten, können Sie Vorlagenfunktionen verwenden:

%Vor%     
Georg Fritzsche 20.02.2010 13:53
quelle
4

Die Semantik der Übergabe und Rückgabe von Arrays kann ziemlich verwirrend sein. Verwenden Sie stattdessen einen std :: vector.

    
anon 20.02.2010 13:17
quelle
3

Sie geben einen Verweis auf ein int zurück, nicht einen Verweis auf ein Array.

Sie wollen:

%Vor%

Wie bereits gesagt, ist das keine gute Übung.

    
Klaim 20.02.2010 13:17
quelle
3

Folgendes funktioniert und scheint nicht unordentlich oder falsch zu verstehen!

%Vor%     
Rajendra Uppal 20.02.2010 17:49
quelle
1
  • Ein Array als Argument ist eigentlich ein Zeiger. Arrays werden automatisch zu Zeigern "geworfen", wenn sie als Argument
  • angegeben werden
  • Sie können ein Array in C / C ++ keinem anderen Array zuweisen. Sie müssen ein Memcpy oder eine Schleife verwenden, um die Werte zu kopieren.
  • Wenn Funktion das arr-Argument ändert, ändert es tatsächlich den Wert der vom Aufrufer angegebenen arr-Variable. Auch hier ist das Array eigentlich ein Zeiger. Also im Caller arr ist arr zugewiesen, was hier nutzlos ist.
Patrick 20.02.2010 13:17
quelle
1

Ich denke, Ihre beste Wette besteht darin, sie als Zeiger auf ein Array zurückzugeben. Hier ist ein Beispiel:

%Vor%     
Fadrian Sudaman 20.02.2010 14:26
quelle
0

Nun, arr ist kompatibel mit int* , nicht int& . Dein Code wird nicht kompiliert. Vielleicht wollten Sie return arr[0] ?

    
Vlad 20.02.2010 13:18
quelle
0

Sie können ein Array in C ++ keinem anderen Array zuweisen. Erwägen Sie die Verwendung eines AWL-Vektors: Ссылка

    
IVlad 20.02.2010 13:19
quelle
0

Verwenden Sie std :: vector so.

%Vor%

Ein Array wie

%Vor%

ist nicht nützlich, um von einer Funktion zurückgegeben zu werden, da es sich nicht selbst kopieren kann.

    
Totonga 20.02.2010 13:55
quelle
0

Wenn nicht notwendig, verwenden Sie es nicht. Sie können einfach eine Referenz eines Arrays übergeben, beispielsweise:

%Vor%

wenn Sie Folgendes verwenden:

%Vor%

Es wird einen Kopiervorgang des Containers geben, die Kosten sind teuer.

Zu Ihrer Information: NRVO kann die Kosten möglicherweise eliminieren

    
ddh 20.02.2010 14:01
quelle

Tags und Links