hi, ich will dynamisch ein zweidimensionales feld anlegen dessen größe ebenfalls dynamisch ist (also erst zur laufzeit bekannt). bisher war ich immer der meinung das bei einem zweidimensionalen feld sie spalen als ganzes hintereinander weg im speicher liegen, durch das anlegen mit z b feld[3][3] weiß der compiler beim zugriff welchen offset er addieren muss um ins "richtige" feld zu treffen. meine frage, was genau wird aus der konstruktion feld[x][y] beim übersetzen!ß das muss sich doch auch in c ausdrücken lassen, oder!? ich hoffe mein problem ist verständlich...da müsste etwas mit zeiger auf zeiger passieren, oder!? d.
nach langem suchen ahbe ich es endlich selbst gefunden: y[a][b] entspricht *(*(y+a)+b) d.
Hallo, bei einem 2 Dimensionalen Array wird in der ersten Stufen ein Array von Zeigern auf die einzelnen Datenarrays angelegt ich versuche das mal zu zeichnen: Zeigrearay Darenaray -> [] -> [] -> [] wenn dann musst du also zuerst ein Array mit zeigen auf Arrays anlegen und anschließend die einzelnen Datenarrays Grüße Tom
> bei einem 2 Dimensionalen Array wird in der ersten Stufen > ein Array von Zeigern auf die einzelnen Datenarrays angelegt Nur dann, wenn es sich um ein selbst erstelltes dynamisches Array handelt. Wenn du ein statisches 2D-Array erzeugst, dann generiert der Compiler keine verzeigerte Struktur! int main() { // das hier ist kein verzeigertes Gebilde! // die einzelnen Elemente liegen direkt hintereinander im // Speicher. // int check[4][5]; }
hi, danke für die antworten, das ganze hat sich auch für mich so bestätigt. bei einem 2 dim stitischen array liegt keine zeigerstruktur auf eindimensionale felder dahinter, anders bei dyn 2d arrays: hier wird ein zeigerfeld angelegt und anschließend auf 1d arrays verwiesen. sie lassen sich später in c gleich behandeln: array[0][1]=5; // wenn array zb ein int array ist... hier noch ein kleines bsp.: #define DIMX 2 #define DIMX 3 voif function(void) { int x[DIMX][DIMY]; int **y; int i; y=(int**)malloc(DIMX*sizeof(int*); for (i=0; i<DIMX; i++) { y[i] =(int*) malloc(sizeof(int) * DIMY); } } x ist hier statisch, y dynamisch dank euch, dennis
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.