Zugriff auf dynamisches Array in Struktur
-
Hallo Leute,
ich habe hier eine Strukturstruct Test {
int*** aptr;
int xmax;
} Struktur;nun habe ich ein (dynamisches) Array in meinem Programm, z.B.:
(ist zwar nicht dynamisch, aber vom Prinzip her kommts ja aufs gleiche raus)
int array[4][4][5];auf das aptr in meiner Struktur verweisen soll:
Struktur.aptr = array;dann weise ich (beliebig) zu:
array[1][1][0] = 5;und möchte dies nun über printf ausgeben, aber indem ich über die Struktur gehe:
printf("%i\n", Struktur.aptr[1][1][0]);was allerdings nicht klappt, er gibt mir da eine x-beliebige Zahl aus.
mit Struktur.aptr[1][1][0] = 7; klappt eine Zuweisung jedoch!
Wo liegt mein Fehler?Und: wenn ich einen Pointer auf die Struktur habe, wie greife ich dann über den Pointer auf aptr in der Struktur zu, also auf ein bestimmtes Feld in dem Dreidimensionalen Array?
struct Test* sptr = &Struktur;
printf("%i\n", sptr->aptr[1][1][0]);
klappt nicht! (Speicherzugriffsfehler)Bereits jetzt vielen Dank und viele Grüße,
bob10
-
Mit int*** aptr definierst du keinen Pointer auf array[4][4][5]
Schreibe
array[1][2][3]
einfach mal in der Pointer-Schreibweise um - das macht der Compiler intern auch:
(*(*(*(arr+1)+2)+3))
Und dann überlege dir nochmal, was das '+' jeweils bedeutet. Hier ein Beispiel:
int arr[4][4][6]; arr[1][2][3]=77; int ***p = arr ; /* richtig: int (*p)[4][6] = arr ; */ printf("Zahl:%d\n",arr[1][2][3]); printf("Zahl:%d\n", (*(*(*(arr+1)+2)+3)) ) ; printf("%p\n",arr); printf("%p\n",arr+1); printf("%p\n",*(arr+1)+2); printf("%p\n",*(*(arr+1)+2)+3); printf("%p\n",p); printf("%p\n",p+1); /* beachte den Unterschied zu arr+1 */ /* führt vermutlich zum segmantation fault bei int ***p : printf("%p\n",*(p+1)+2); printf("%p\n",*(*(p+1)+2)+3); */
Multidimensionala Arrays sind in Wirklichkeit Arrays von Arrays von Arrays,...
Und der Typ von 'int (*p)[4][6]' ist ein anderer wie bei 'int (*p)[4][5]' oder gar 'int *** p'. Und daher kommt dann auch immer etwas anderes dabei heraus.
-
nochKeinen schrieb:
Multidimensionala Arrays sind in Wirklichkeit Arrays von Arrays von Arrays,...
Nööööh, sind in Wirklichkeit ein einziges Array mit zusammenhängendem Speicherbereich.
-
Hallo,
danke für die Antwort, jetzt klappt der Zugriff!
Grüße,
bob10