Wie bekomme ich einen Zeiger auf ein struct Array?

Hallo,

ich habe mir in C++ ein struct definiert, das folgendermaßen aussieht:

struct Color{ byte r; byte g; byte b; byte a; };

Dazu noch einen Zeiger auf diese Struktur:

Color *p;

Nun brauche ich diese Struktur aber nicht nur einmal, sondern z.B. 10mal. Das könnte ich mit der Zeile

Color *p[10];

ja relativ einfach lösen. Nun kommt aber endlich das Problem :wink: Die Größe des Arrays ist mir noch nicht bekannt, sondern wird erst beim Programmstart festgelegt. Im Internet habe ich mehrere Ansätze gefunden, die das so aussehen lassen:

Color *p;
p = new Color[size];

Das wird zwar auch einwandfrei compiliert, doch wenn ich mir den Debugger anschaue, dann zeigt p nicht auf size (z.B. 10) Strukturen, sondern immer nur noch auf eine. Wie kann ich das ändern?

Viele Grüße, Robert

Hi Robert,

Color *p;
p = new Color[size];

Das wird zwar auch einwandfrei compiliert, doch wenn ich mir
den Debugger anschaue, dann zeigt p nicht auf size (z.B. 10)
Strukturen, sondern immer nur noch auf eine. Wie kann ich das
ändern?

ein Zeiger kann doch nur auf eine Adresse im Speicher zeigen, daher zeigt es standardmäßig auf das erste Element deines Arrays.
Du kannst ihn aber auch auf das 2., 3. oder x. Element deines Arrays zeigen lassen, indem du dann um sizeof Color weiterspringst.

Ciao, Bill

vector oder malloc
Hallo Robert,

was Du machen willst, nennt man „dynamische Speicherverwaltung“. Am besten benutzt Du dazu den Datentyp vector aus der STL. Sollte Dir der aber nicht zur Verfügung stehen, so kannst Du den Speicher auch selbst verwalten:

Color *p=0; // Zeiger auf das erste Element

p=malloc(size*sizeof(Color)); // Speicher für size viele Elemente reservieren

dummy=p[200]; // Elemente ansprechen (Vorsicht: maximal size viele!

free§; // Am Ende: Speicher wieder freigeben

Ein Array ist nämlich eigentlich nichts anderes als ein Zeiger auf das erste Element eines Arrays. Die weiteren Elemente werden einfach durch Addition zu dieser Adresse ermittelt. Die Index-Schreibweise i[100] ist nur eine Abkürzung für *(i+100) (oder richtiger *(i+sizeof(Color)*100)).

Ich hoffe, ich konnte Dir helfen.

Matthias Orgler