Funktion mit mehrdimensionaler Variable
-
Hi Leute
Habe eine globale Funktion :
bool istSymm(double);
Jetzt möchte ich sie mit einem zweidimensionalen Double initialisieren.
bool istSymm(double a[zeilen][splaten]);
zeilen und spalten sind feste Werte;
Geht das so ???
-
Ja, aber nur wenn du den "zeilen" und "spalten" konstant sind, z.B. 23 und 25.
Ansonsten musst du 2 Felder zu einem Feld umrechnen und kannst es dann wieder an einen Zeiger übergeben. Felder kannst du so umrechnen, beispiel:
int a[6][8];
int a[x][y] = 3;C++ rechnet dann auf 2 Indizes um:
a[x*8+y] = 3;wo ich 8 habe kommt immer die größe des 2. feldes rein, also wenn da jetzt
int a[2][5];
int a[x][y] = 2;stünde würde die umrechnung so aussehen:
a[x*5+y] = 2;Wenn du das jetzt also auf ein Feld umrechnest kannst du es wieder an einen zeiger übergeben.
Code-Hacker
-
Hi
THX so mach ichs !!!
Noch eine Frage kann eine Funktion auch einen Array als Prameter haben dessen Größe nicht bekannt ist
bool istSymm(double a[][]);
THX
-
Ja, wie gesagt, in dem du in der Funktion einen Zeiger dekarierst:
bool istSymm(double *a);
Dann musst du nur noch die obige Formel anwenden und schon kannst du beliebig große Felder übergeben, allerdings nur 2 dimensionale, für 3 dimensionale brauchst du eine erweitere Formel.
Code-Hacker
-
HI
Alles klar THX
Fleedo
-
Wenn zeilen und spalten zur Kompilierzeit konstant sind, ist
bool istSymm(/*const?*/ double (&array)[zeilen][spalten])
die typsicherste Lösung: Einfach eine Referenz auf double[zeilen][spalten], und auch nur solche Arrays können der Funktion übergeben werden. Ohne die Referenz kann man der Funktion auch Arrays mit falscher Größe übergeben (jedenfalls unter VC7.1, warum das genau so ist, verstehe ich aber auch nicht...).