Arrays, Pointer, usw.
-
Hallo.
Habe hier ein kleines Problem: Wie übergebe ich mehrdimensionale Arrays von Pointern? Bzw. wie soll man dann auf die Elemente in einer Funktion zugreifen?
Hab hier mal ein wenig Code gemacht:#include <iostream> #include <math.h> void bla(int x,int y,int *** blab) { for(y; y>=0; y--) { for(x; x>=0; x--) { printf(" %d ", *blab[y][x]); } printf("\n", NULL); } } int main() { int *jo[20][15]; int xyz[20][15]; for(int y = 0; y<20; y++) for(int x = 0; x<15; x++) { xyz[y][x] =(int) sqrtf((y+x)*(y-x)); jo[y][x] = &xyz[y][x]; } bla(15,20,(int***) jo); return 0; }
sollte doch eigentlich klappen
-
Azrael, il Meraz schrieb:
sollte doch eigentlich klappen
Ja, nein... was war nochmal die Frage?
Nö, im Ernst: Probiers erst mal mit bla(int *ptr); dann mit bla(int **Ptr); und ausgeben mit printf("ptr %p\n", ptr[0]); usw.
-
arrays sind keine pointer.
void bla(int x,int y,int *(*blab)[15]);
oder
void bla(int x,int y,int *blab[][15]);
und vergiss den cast.
-
camper schrieb:
arrays sind keine pointer.
void bla(int x,int y,int *(*blab)[15]);
oder
void bla(int x,int y,int *blab[][15]);
und vergiss den cast.
Die Lösung ist dann aber nicht mehr so dynamisch
. Hängt das damit zusammen, dass der Compiler wissen muss, wie lang die Zeilen sein sollen?
Gibt es keine andere möglichkeit?dabei dachte ich immer,
a[b][c]
wäre dasselbe wie
((a+b)+c)
-
Azrael, il Meraz schrieb:
dabei dachte ich immer,
a[b][c]
wäre dasselbe wie
((a+b)+c)Das ist es auch. Aber denk einfach mal über den Typ des Ausdrucks *(a+b) nach. C kennt eigentlich keine mehrdimensionalen arrays, stattdessen können die Elemente eines Arrays selbst Arrays sein...
-
deswegen dachte ich, dass meine version klappen würde - dass er die länge nicht braucht, weil das ja ein array von pointer ist. Ist wohl aber nicht so...
-
umgebaut (ungetestet) versuch mal so, den 'int *jo[20][15]' brauchste eigentlich nicht:
void bla (int x,int y, void *blab) { int s; for (s=0; s<(x*y); s++) printf ("%d ", ((int*)blab)[s]); } int main() { int xyz[20][15]; int y, x; for(x = 0; x<20; x++) for(y = 0; y<15; y++) xyz[x][y] = (int) sqrtf((y+x)*(y-x)); bla(20,15,xyz); return 0; }