array referenz an Methode
-
Schönen guten Tag,
ich versuche die Referenz dieses Arrays -" int feld[7][4][2] "- an eine Methode zu übergeben.
Ich habe es so versucht:int feld[7][4][2]; // Initialisierung des feldes... // ... int result = methode(&feld);
der Methodenkopf sieht so aus;
int methode(int *f);
Die Fehlermeldung ist folgende:
error C2664: 'CMyEventReceiver::CMyEventReceiver(irr::core::position2d<T> *,int *)' : cannot convert parameter 2 from 'int (*__w64 )[7][4][2]' to 'int *'
Ich habe leider keine Idee wie es besser geht.
Kann mir jemand helfen?
-
Ne du versucht eine Adresse zu uebergeben.
&feld[0][0][0] // das ist die Adresse des ersten ints!
-
Danke, damit ist zumindest die Fehlermeldung weg.
Und wie kann ich nun damit weiterarbeiten?
Zumindest kann ich in der methode nicht f[0][1][2] nutzenerror C2109: subscript requires array or pointer type
-
@Thomas: Das ist keine Lösung, sondern bestenfalls ein Workaround um das Problem herum.
@Staati: Eindimensionale Arrays können als Pointer angesprochen/konvertiert) werden, bei mehrdimensionalen Arrays geht das nicht mehr (das hängt mit den technischen Gegebenheiten der Pointer-Arithmetik und der Speicheraufteilung von Arrays zusammen). Damit deine Funktion so ein Array schluckt, benötigt sie einen passenden Prototyp:
int methode(int* val[7][4]);
(mit Thomas' Ansatz erhältst du einen nackten Zeiger auf den Speicherbereich des Arrays - und mit dem Wissen, daß die einzelnen Zeilen deines Arrays hintereinander abgelegt werden, könntest du dich dort durchhangeln)
-
Danke für die Antwort.
Könntest du mir ein Beispiel posten? Ich versteh nicht ganz wie du das meinst.
-
Naja das kann man nicht sagen was hier sinnvoll ist, wenn man nicht die Aufgabe kennt. Ich halte es im Allgemeinen nie fuer sinnvoll Arrays mit mehr als 2 Dimensionen zu erstellen.
Koennt ja auch sein, dass die Methode bewusst den Speicher linear interpretieren soll... [was nicht der Fall ist was der letzte Post des OP zeigt]
-
typedef int (*ptr)[4][2]; int methode(ptr feld) // feld ist ein Zeiger (ptr) oder int(*)[4][2] { feld[0][0][0] = 7; // Damit schreibst Du 7 ins Feld[0][0][0] ausserhalb der methode! return feld[0][0][0]; // 7 wird zurückgegeben, 7 stammt aus Feld ausserhalb der Methode } int main() { int feld[7][4][2]; int a = methode(feld); return 0; }
-
Danke!
Nun habe ich aber ein neues Problem
Ich habe hier im Forum diesen Code-Schnipsel gefunden:int main() { // Einen Zeiger auf ein Int-Array mit 5 Elementen anlegen int (*pArr)[5] = 0; // Den Zeiger auf ein zweidimensionales Array zeigen lassen. // Wichtig: Die zweite Dimension muss mit der Array-Größe // übereinstimmen, mit der der Zeiger deklariert wurde // pArr = new int [5][2]; wäre z.B. illegal, da ein Zeiger auf ein // Array mit 5 Elementen nicht in einen Zeiger auf ein Array mit // 2 Elementen konvertiert werden kann. pArr = new int[2][5]; pArr[0][0] = 42; // ... // Am Ende aufräumen nicht vergessen delete [] pArr; }
Geht das mit 3 dimensionalen Arrays?
Ich würde gerne aus dem Array das ich am Anfang definiert habeint field[7][4][2];
später im Programm nach bedarf:
field[7][2][4];
machen...
Ich weiss mehrdimensionale arrays sind wahrscheinlich ne schlechte Lösung, und ich hätte nen vector nehmen sollen, aber nu is der Weg zurück länger als wenn ich es so weitermache..