Dynamische Arrays
-
wie kann ich Arraygröße später ändern (egal ob Werte verlorengehen oder nicht) - und wenn es geht wie kann man dynamische Arrays machen?
-
schau mal nach dynamischen datenstrukturen, wie
baeume und listen.
-
dynamische array's kann man so implementieren:
wenn du ein array mit einer dim willst:
datentyp *array;
array = (datentyp*)malloc(10*sizeof(datentyp));
//hier kannst du 10 mal deinen datentypen ablegen (von array[0] - array[9])
erweitern:
array = (datentyp*)realloc(10*10*sizeof(datentyp));//nun kannst du insgesamt 100 mal deinen datentypen ablegen
und wenn schon daten drin stehen bleiben die drinwenn du jedoch ein array mit zwei dim willst:
datentyp **array;
array = (datentyp**)malloc(10*sizeof(datentyp));
for(int n = 0;n <= 10; n++)
{
array[n] = (datentyp*) malloc(10*sizeof(datentyp));
}
//Schleife weil du ja jetzt mehrere ebenen hast für die du platz anfordern musstErweitern ist das selbe nur halt wieder mit realloc!
-
Hm, erweitert man nicht mit
x = (datentyp*) realloc(x,20*sizeof(datentyp);
-
Hallöchen an Alle! Ich bräuchte Dringend mal Hilfe zu dem o.g. Problem, und zwar wisst ihr vielleicht auch wie man ein mehrdimensionales Array deklarieren kann? Im folgenden will ein x-Dimensionales Array erzeugen (d.h. Dimensionen und Elemente je Dimension sollen dynamisch sein), aber ich glaube da hapert's irgendwie an der Logik:
int dimensions = 3; int elements[] = {2, 40, 100}; void **array_ptr = (void**) malloc(dimensions * sizeof(void*)); for(int a = dimensions; a > 0; a--) { for(int b = 0; b < elements[a]; b++) { if(b == 0) { array_ptr[a] = (void*) malloc(elements[a] * sizeof(void*)); } else { array_ptr[a] = (void*) realloc(array_ptr[a], a * (elements[a] * sizeof(void*))); } } } //sollte also folgendem entsprechen: char [2][40][100];
Ich weis zwar das ich nur mit void* arbeite, aber eigentlich kann ich doch dann damit einen String-Erzeugen mit (char*) malloc(1024*sizeof(char) ... ??? Ich weis auch nicht irgendwie kapier ich nicht ob mein Beispiel richtig ist oder nicht ... ausgeführt wird das Programm ohne Fehler...
Dank & Gruss,
~code_pilot
-
Hmmm... kannst du vielleicht noch genauer erklären was du damit bezwecken willst?
Einen Fehler hab ich aber trotzdem gesehen. Der Index beginnt in C immer bei 0 nicht bei 1. Schau mal mit welchem Wert du a initialisierst und wie weit du a runterzählst ;).
Die casts vor malloc() und realloc() kannst du dir in ANSI-C übrigens sparen. Das meckert nur ein C++-Compiler an ;).