Dynamische Speicherverwaltung

Ich bin gerade am herumspielen mit dynamischer Speicherverwaltung und teste einfach verschiedenes. Deswegen weiß ich auch nicht ob was ich gerade versuche überhupt geht...
Man kann ja ein Zeiger-Array erstellen und für die einzelnen Adressen Zellen für Werte erstellen
Zum Beispiel:
Code:
int *p[10];
p[5] = new int;
cin >> *p[5];
Meine Überlegung ist ob man für die einzelnen Stellen auch weitere Arrays mit theoretisch unterschiedlichen Größen erstellen könnte. Dan hätte man ein 2D-Array mit unterschiedlichen größen.
was ich mich frage ist wie man dann auf die einzelnen Stellen zugreifen kann.
Das habe ich bis jetzt hinbekommen:
Code:
  float *pf[10];
int groesse;
cout << "Groesse:";
cin >> groesse;
    for(int i=0;i<10;i++) {
        cout << "Float:";                            
        pf[i] = new float[groesse];
        for(int j=0;j<groesse;j++) {
          cin >> *pf[i][j];           //Hier
        }
    }
Muss der Zugriff anders als bei 2D-Arrays erfolgen oder geht das so gar nicht?
 

vfl_freak

Premium-User
Moin,

int *p[10];
p[5] = new int;
Du hast hier ein int-Array mit 10 Stellen deklariert, somit ist die zweite Zeile überflüssig!!

float *pf[10];
// ....
*pf
Hier hast Du wiederum ein (eindimensionales) Array mit 10 Stellen deklariert, also kannst Du auch nur mit den Indexen [0]-[9] drauf zugreifen!!
Für *pf müsstest Du es auch entsprechend deklarieren, bzw. float *pf[10][15];
Der Zugriff erfolgt dann in der Regel innerhalb von zwei for-Schleifen!

Und Deine 'groesse' in zweiten Beispiel ist 10!!
Also wird pf = new float[groesse]; auch scheitern ....

Hier mal ein bisschen was zum Lesen zu diesem Thema!

VG Klaus
 

cwriter

Erfahrenes Mitglied
Du hast hier ein int-Array mit 10 Stellen deklariert, somit ist die zweite Zeile überflüssig!!
?
Das ist schon richtig so. Es ist ein Array von int-Pointern, nicht ints.


Dan hätte man ein 2D-Array mit unterschiedlichen größen.
2D-Arrays gehen immer:
C++:
float *fp[10][10]; // Im Speicher: float *fp[100].
Du musst immer überlegen, was du willst.
C:
float *fp; // Pointer auf eine undefinierte Anzahl floats
float *fp[10]; // Array von 10 Pointern wie bevor
float *fp[10][10]; // Array von 10*10 Pointern
float **fp; // Pointer auf unbestimmte Anzahl Pointer auf Float
Oft braucht man nur einen Pointer (braucht weniger Speicher) und teilt den Speicher selbst
C:
constexpr size_t width = 20;
constexpr size_t height = 5;
float* fp = new float[width * height];

fp[x + y * width]; // auf Element (x,y) zugreifen.

Gruss
cwriter