c und zweidimensionale arrary im speicher

Gast #478929
Lesenswert?
• ▲
▼
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.
Gast #479087
Lesenswert?
• ▲
▼
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
#479125
Lesenswert?
• ▲
▼
> 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];
}

Gast #479604
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.