Groesse eines 3D Arrays zur Laufzeit festlegen

Gast #3975676
Hallo,

ich müsste während der Laufzeit, abhängig von einer User Eingabe ein 2D 
Array anlegen. x_size und y_size sind vorher unbekannt. Um effizient zu 
bleiben möchte ich keine Maximalgroesse festlegen und dann quasi 
Max-Indizes verwenden.

Meine Idee wäre das in einem Struct auf dem Heap zu erledigen aber wie 
geht das genau?

Wäre ein Zugriff dann so möglich

hptr = struct->myarray[x][y]

Oder gibt es da elegantere Lösungen?


Gruss,
Christian
Gast
Aber wie wird das deklariert? Ein Array braucht ja nunmal eine 
zugewiesene Groeße.....

1. read x,y von user
2. allokiere array mit y*y elementen
3. pointer auf heap erzeugen
4. zugriff auf array

wie sehen 2,3 und 4 aus?
Gast
Christian J. schrieb:
> Aber wie wird das deklariert? Ein Array braucht ja nunmal eine
> zugewiesene Groeße.....

Aber in C darfst du doch sowieso alles - auch auf ein als 2 x 2 
deklariertes array mit den Indexen x und y beliebiger Grösse zugreifen. 
Dazu brauchst du nur den Pointer auf das erste (bzw. nullte) Element. 
Das geht auch in anderen Sprachen, solange du nicht den Compiler 
explizit anweist, die Arraygrenzen beim Zugriff zu überwachen.

Georg
Christian J. schrieb:
> Aber wie wird das deklariert? Ein Array braucht ja nunmal eine
> zugewiesene Groeße.....

Da du aber kein Array hast, sondern nur einen Pointer ....

Selber indizieren ist schon ok.
1
   int size_x, size_y;
2

3
   size_x und size_y einlesen 
4

5
   int * pData = malloc( size_x * size_y * sizeof(int) );
6

7
   x = 5;
8
   y = 8;
9

10
   pData[ y * size_x + x ] = 45;
11

12
   free( pData );

Am besten die ganze Sache in ein paar Funktionen kapseln.
* Array allokieren
* Wert von einer Position lesen
* Wert an eine Position schreiben
* Array freigeben
Gast
Karl Heinz schrieb:
> Am besten die ganze Sache in ein paar Funktionen kapseln.
> * Array allokieren
> * Wert von einer Position lesen
> * Wert an eine Position schreiben
> * Array freigeben

Cool, danke !!!! Was wäre dieses Forum ohne Karl-heinz? :-)
Christian J. schrieb:
> Karl Heinz schrieb:
>
>> Was wären die Frager, wenn sie sich jeder einfach mal ein C-Buch kaufen
>> würden?
>
> Tja, vielleicht ein leeres Forum?

unwahrscheinlich.
Da bleibt noch genug übrig. Die Beherrschung der Programmiersprache ist 
gerade mal das Wissen, wie man Schachfiguren bewegt. Den Rest seines 
Lebens lernt man, wie man mit Zugfolgen ein Schachspiel gewinnen kann. 
Was beim Schach die Zugfolgen sind, sind in der Programmierung 
Algorithmen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.