C ++ multidimensionale Array-Initialisierung

7

in C ++ Ich möchte eine Doppelmatrix (zweidimensionales Doppelarray) initialisieren, wie ich es normalerweise ohne Zeiger tun würde:

%Vor%

Da ich jedoch zurückgeben und es an Funktionen übergeben möchte, brauche ich es als double** -Zeiger. Also, im Grunde muss ich Daten auf eine nette Weise initialisieren (wie oben), aber danach muss ich den Zeiger auf das 2D-Array speichern, ohne die Daten zu verlieren, wenn die Funktion beendet wird.

Irgendwelche Hilfe dazu? : -)

    
Felix 24.08.2010, 07:14
quelle

6 Antworten

9

Wenn Sie nicht besonders auf Zeiger achten, würde ich hier eine Referenz bevorzugen

%Vor%

Übrigens, wenn Sie es auf diese Weise an eine Funktion übergeben, würden Sie "zuweisen" statt "initialisieren".

    
Chubsdad 24.08.2010, 07:19
quelle
5

Sind all deine Matrizen 4x4? Dann würde ich einfach eine Klasse mit einem double[4][4] -Member definieren und Objekte dieser Klasse übergeben:

%Vor%

Wenn Sie Matrizen verschiedener Dimensionen benötigen, die aber zur Kompilierungszeit bekannt sind, verwenden Sie eine Vorlage:

%Vor%

Dadurch ersparen Sie sich den Verfall von Arrays und Pointern und machen den Code IMHO besser lesbar.

    
fredoverflow 24.08.2010 07:26
quelle
4

Erstens ist die Deklaration des zweidimensionalen Arrays nicht korrekt. Es muss wie folgt gemacht werden:

%Vor%

Zweitens, um es in einer Funktion zu übergeben, können Sie es wie

machen %Vor%

In der Funktionsdeklaration müssen Sie das Argument als ein Array angeben, das alle Dimensionen mit Ausnahme der ersten angibt. So würde die Deklaration wie folgt aussehen:

%Vor%

Dies übergibt das Array als Referenz, ohne dass Sie einen Zeiger verwenden müssen.

Ich hoffe, das hat geholfen.

    
user428339 24.08.2010 08:13
quelle
3

double (*)[4] unterscheidet sich sehr von double **

Skizzieren Sie einfach das Layout Ihrer Doppel im Speicher für beide und Sie sollten verstehen, warum Sie sie nicht synonym verwenden können.

    
Didier Trosset 24.08.2010 07:19
quelle
1

Initialisiere die temporäre Variable auf diese Weise und kopiere sie dann in den dynamisch zugewiesenen Speicher.

    
Kirill V. Lyadvinsky 24.08.2010 07:17
quelle
0

Wie wäre es damit (mit Zeigern, und tut, was Sie gefragt haben)

%Vor%     
SandBag_1996 13.01.2013 00:13
quelle