Wie übergibt man 2d-Arrays in c++ an eine Funktion?

... komplette Frage anzeigen

1 Antwort

Die Dimension darf nur in der letzten Klammer fehlen. Gib die inneren Dimensionen also explizit in der Deklaration an: int f(value[10][]).

In C99 kamen trickreichere Wege für variable Arrays hinzu, aber ich weiß nicht, wie weit Dein Compiler das unterstützt. Standardmäßig behilft man sich in diesem Fall mit:

A) Arrays von Zeigern verwenden. Hier muss man aber zuerst den Speicher für jede Zeile anfordern:

int *value[17]; 
for (int i=0; i<17; ++i) {
 value[i] = new int[20];
for (int j=0; j<20; ++j)
value[i][j] = i*j;

f(value, 20);

int f(int *value[], int const w) {
x_ij = value[i][j];
 ...
}

B) Nur die Adresse des ersten Elements übergeben und die 2D-Indizes selbst berechnen:

int value[20][17] = { ... };

f(&value[0][0], 20);

int f(int *value, int const w) {
 ...
int x_ij = value[i*w+j];
 ...
}

Die eingefleischten C++-Freaks stehen aber auf std::vector<>. Damit soll es angeblich keine Probleme mehr geben :-)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von WarumGeld
19.04.2016, 14:40

Super Antwort ! An std::vector <> hab ich auch schon gedacht, aber ich glaube das ich erst mal die Grundlagen durchkaue bis ich anfange den ganzen schönen Kram aus der STL zu nutzen...

0

Was möchtest Du wissen?