Groesse eines 3D Arrays zur Laufzeit festlegen

Gast #3975676
Lesenswert?

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 #3975705
Lesenswert?

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 #3975740
Lesenswert?

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
#3975749
Lesenswert?

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
#3977604
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren