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
Christian J. schrieb: > hptr = struct->myarray[x][y] einfach selber rechnen hptr = struct->myarray[x*SIZE_Y + y]
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?
braucht es das? Also eine zugewiesene Größe?! Wäre mir neu.
Sorry, ich kann mit Einzeilerantworten und Gegenfragen nicht viel anfangen. Danke, ich suche es mir selbst im Netz zusammen.....
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
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: >> 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? :-) Was wären die Frager, wenn sie sich jeder einfach mal ein C-Buch kaufen würden?
:
Bearbeitet durch User
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? Ich bräuchte meine Kollegen eigentlich auch nichts mehr fragen, es steht sicher irgendwo auch im Internet.... http://de.wikibooks.org/wiki/C-Programmierung:_Arrays
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.
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.