Pointer Array übergeben
-
Hallo beisammen,
ich habe eine Methode vom Typ:
int methode(int array[10][15]){ }
so wird ja aber beim Aufruf das ganze Array in die Methode kopiert, oder? Ich wollte das ganze nun über Pointer lösen, damit man nur eine Referenz auf die Daten hat, aber irgendwie habe ich das nicht hinbekommen. Dachte an so was:
int methode(int* array[10][15]){ }
aber da gibts nen Fehler im Compiler... kann mir jemand helfen? Danke!
-
Das zweite ist ein int-Zeiger-Array und keint int-Array.
Das erste passt schon, ein Array zerfällt bei soetwas zu einem Pointer, da wird nichts kopiert.
-
danke
-
das bin ichichichich schrieb:
Ich wollte das ganze nun über Pointer lösen, damit man nur eine Referenz auf die Daten hat, aber irgendwie habe ich das nicht hinbekommen.
int methode(int (*p)[15]) {}
-
Gugelmoser schrieb:
das bin ichichichich schrieb:
Ich wollte das ganze nun über Pointer lösen, damit man nur eine Referenz auf die Daten hat, aber irgendwie habe ich das nicht hinbekommen.
int methode(int (*p)[15]) {}
Und woher weiss die Funktion nun wie gross das Array ist? Eigentlich muss hier noch ein Parameter size_t len übergeben werden und dann wird alles komplexer.
Mit anderen Worten: Die erste Signatur ist immer noch das beste.
-
Das wird eh zu einem Pointer, da kannst du nichts gegen machen. Die Funktion weiß auch so nicht wie groß das Array ist. GCC gibt hier nicht mal eine Warnung:
http://ideone.com/0Hl18
Von daher: Lieber gleich das hinschreiben, was (leider) Sache ist. Besser ist natürlich (wenn das wirklich das ist, was man haben möchte):void foo(int (&a)[10][15]);
-
das bin ichichichich schrieb:
Ich wollte das ganze nun über Pointer lösen, damit man nur eine Referenz auf die Daten hat, aber irgendwie habe ich das nicht hinbekommen. Dachte an so was:
int methode(int* array[10][15]){ }
Knapp daneben ist auch daneben.
int methode(int (*array)[10][15]) { printf("%lu",(unsigned long)(sizeof*array)); } int a[10][15]; methode(&a);