mehrdimensionales Feld übergeben ??
-
Sowas ginge:
#include <iostream> template<int x, int y> void foo(int bar[x][y]) { std::cout << x << ' ' << y << std::endl; } int main() { int baz[3][4]; foo<3, 4>(baz); }
-
miller_m schrieb:
bsp:
void func(int *pFoo, int nRows, int nCols) { ... } func(&matrix[0][0], 3, 4);
Aber da wird doch nur die Adresse des Elementes [0][0] von matrix übergeben, oder?
-
Aber da alles am Stück liegt, hat das den gleichen Effekt.
-
Versteh ich nicht.
Aus dem Kopf hätte ich es einfach so gemacht:
foo(int **matrix, int rows, int cols)
-
Nur ist int[3][4] kein Array von pointern, sondern ein Array von Arrays. Das heißt, es steht alles Im Speicher hintereinander, und das Ding lässt sich nur sinnvoll in einen int* umwandeln, nicht in einen int**.
-
Es muss doch nicht zwingend hintereinander im Speicher stehen. Ich kann die Arrays ja auch an unterschiedlichen Stellen des Programms anlegen, dann liegen sie nicht zwangsläufig in einem Block.
In der Schule hat man mir beigebracht, dass man statt
int main(int argc, char *argv[])
auch
int main(int argc, char **argv)
oder
int main(int argc, char argv[][])
schreiben kann. Ist doch das selber in grün oder?
-
Ich bezweifle, dass du nen Compiler findest, der dir
int main(int argc, char argv[][])
abkauft.
-
Ja, ok, dann geht das nicht, aber
int main(int argc, char **argv)
funktioniert.
Wo ist jetzt der Unterschied zu
foo(int **matrix, int rows, int cols)
?
Und warum müssen alle Elemnte der Matrix in einem Block im Speicher stehen?
-
Das ist ein 1D Array von Pointern. Aber wollen ein 2D Array von Werten.
int *
-
Warum wird eigentlich die Größenangabe der ersten Dimension ignoriert?
Zum Beispiel:#include <iostream> using namespace std; void test(int matrix[3][4]) { cout<<"ok"<<endl; } int main(int argc, char *argv[]) { int foo[2][4]; int bar[4][4]; test(foo); test(bar); system("PAUSE"); }
Und warum sind ab der 2ten Dimension die Größenangaben zwingend erforderlich?
int main(int argc, char argv[][])
geht deswegen nicht, dafür aber zum Beispiel
int main(int argc, char argv[][0])