Zeiger auf 2 dimensionales Feld aus Parameterliste
-
Hallo C-Gurus,
mich plagt folgendes Problem:
in Main() sind mehrere 2-dimensionale Felder deklariert. Diese werden als Paramter in eine Funktion übergeben, wo sie in Abhängigkeit von bestimmten Bedingungen gefüllt werden.
In der Funktion möchte ich einen Zeiger deklarieren, der auf das jeweilige aktuell zu füllende Array zeigt und dann, wenn die Bedingung erfüllt ist, 'umschwengt'. Soweit die Idee. Ohne Funktion klappt es auch, aber in der Funktion....
Dabei bringt Visual-C einen Fehler, der mir von der Aussage her klar ist, aber wie kann ich ihn beseitigen?void main(){ int iArray1[10][10]; int iArray2[10][10]; funktion( iArray1, iArray2 ); } void funktion( int iFeld1[10][10], int iFeld2[10][10] ) { int Test[10][10]; /* so zum ausprobieren */ int (*ipTest)[10][10]; /* so klappts ohne Parameter*/ ipTest = &Test; /* ok */ *ipTest[0][0] = 1; int (*ipFelder)[10][10]; /* wie wird dieser Pointer deklariert */ ipFelder = &iFeld1; /* error C2440: '=' : 'int * [][10]' kann nicht in 'int (*)[10][10]' konvertiert werden. */ }
Bin für jeden Tipp dankbar, skriptor
-
skriptor schrieb:
... int (*ipFelder)[10][10]; /* wie wird dieser Pointer deklariert */ ipFelder = &iFeld1; ...
einfach so:
int *ipFelder = (int*)iFeld1;
zugriff auf's array über den pointer geht dann so:
int element_x_y = ipFelder[x*10 + y];
-
skriptor schrieb:
int (*ipFelder)[10][10]; /* wie wird dieser Pointer deklariert /
ipFelder = &iFeld1;
/* error C2440: '=' : 'int * [][10]' kann nicht in 'int ()[10][10]' konvertiert werden. */Der Pointer wird so deklariert:
typedef int(*Ptr)[10]; Ptr ipFelder = iFeld;
-
Hallo Zusammen,
danke für die schnellen Antworten.@net: So funktioniert es, aber Helmuts Lösung fände ich schöner, wenn sie funktionieren würde.
@ Helmut S: Deine Lösung sieht elegant aus, bringt aber erneut eine Fehlermeldung:
error C2440: 'initializing' : 'int * [][10]' kann nicht in 'int (*)[10]' konvertiert werden.Gruß skriptor
Nachtrag:
Nach ein wenig Nachdenken scheint Helmuts Lösung so zu funktionieren:
typedef int(*Ptr)[MAX_ANZAHL]; Ptr ipFelder = &iStartFeld[ 0 ]; ipFelder[ 0][ 0] = 1;
-
skriptor schrieb:
@ Helmut S: Deine Lösung sieht elegant aus, bringt aber erneut eine Fehlermeldung:
error C2440: 'initializing' : 'int * [][10]' kann nicht in 'int (*)[10]' konvertiert werden.//Bin mir sicher, dass das funktioniert. typedef int (*Ptr)[10]; void funktion( Ptr, Ptr); int main(){ int iArray1[10][10]; int iArray2[10][10]; funktion( iArray1, iArray2 ); } void funktion( Ptr iFeld1, Ptr iFeld2) { int Test[10][10]; Ptr ipTest; ipTest = Test; /* ok */ ipTest[0][0] = 1; iFeld1[4][7] = 47; iFeld2[0][0] = ipTest[0][0]; }
-
Hallo Helmut,
deine Lösung funktioniert!!!
Mein Fehler war, dass ich die Funktionsargumente nicht als Ptr deklariert hatte, sondern nur den Pointer in der Funktion. Daher die erneute Fehlermeldung.Herzlichen Dank, skriptor