Vertauschen Sie Arrays mit Hilfe von Zeigern in C ++

8

Ich habe zwei Arrays von Zeigern auf Doubles, die ich tauschen muss. Anstatt nur die Daten innerhalb der Arrays zu kopieren, wäre es effizienter, die Zeiger nur auf die Arrays zu tauschen. Ich hatte immer den Eindruck, dass Array-Namen im Wesentlichen nur Zeiger sind, aber der folgende Code einen Compilerfehler empfängt:

%Vor%

Das dynamische Erstellen der Arrays würde das Problem lösen, kann aber nicht in meiner Anwendung durchgeführt werden. Wie mache ich das?

    
thornate 03.08.2010, 04:09
quelle

7 Antworten

12

Arrays sind nicht identisch mit Zeigern und können nicht wie beschrieben ausgetauscht werden. Um den Pointer-Tausch-Trick auszuführen, müssen Sie Zeiger verwenden, entweder den Speicher dynamisch zuweisen oder Zeiger verwenden, um auf die Daten zuzugreifen (wie Daniel beschrieben hat).

    
5ound 03.08.2010 05:06
quelle
7
%Vor%

Funktioniert gut.

bearbeiten: Die Definitionen array_one und array_two sollten nicht verwendet werden und das Double left und double Recht sollte so öffentlich sein wie Ihre ursprünglichen linken und rechten Definitionen.

    
Daniel 03.08.2010 04:14
quelle
4

C-artige Arrays sind keine Zeiger, aber wie die meisten Objekte können sie mit dem Standard std::swap() :

getauscht werden %Vor%

Eigentlich sieht std :: swap () für Arrays nur in C ++ 0x (20.3.2) aus, also vergiss es. Die richtige Antwort ist für beide Arrays im Bereich und Arrays als Zeiger auf die ersten Elemente:

%Vor%     
Cubbi 03.08.2010 04:47
quelle
2

Eine der einfachsten Möglichkeiten, Leute davon zu überzeugen, dass sie keine Zeiger sind und nicht leicht vertauscht werden können, ist der folgende Code:

%Vor%

Jetzt sind eindeutig a.d und b.d Arrays. Sie zu tauschen, wird harte Arbeit erfordern, da das Array {6,7,8} nach a.c=="foo" im Speicher enden muss und das heißt 3 Doppelkopien kopieren. Es gibt keinen Zeiger auf dem Bild.

    
MSalters 03.08.2010 14:48
quelle
1

Versuchen Sie es

%Vor%     
Charles Ma 03.08.2010 04:13
quelle
-1

Sie können beide Zeiger auf Arrays durch Referenzen übergeben, und falls Pointer nicht const sind, können Sie sie einfach austauschen:

%Vor%     
UnknownGosu 03.08.2010 14:23
quelle
-2

Wenn Sie ein Array deklarieren, ist der Name ein Zeiger, der nicht geändert werden kann.

Beispiel:

%Vor%

Die einzige Möglichkeit, den Austausch zu erreichen, ist die Verwendung neuer Zeiger auf das Array.

Dies sollte Ihnen helfen:

SO fragt den Array-Namen als Zeiger ab

    
KedarX 03.08.2010 04:52
quelle

Tags und Links