mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik c und zweidimensionale arrary im speicher


Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nach langem suchen ahbe ich es endlich selbst gefunden:

y[a][b] entspricht *(*(y+a)+b)

d.

Autor: Tom_1975AQ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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];
}


Autor: dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.