Hallo Marcel,
Mhmmm...wenn ich nun den Pointer *p welcher auf einen Block von 64 MB Grösse zeigt erhalte, wie kann ich dann die ein solches Struct z.B. am Anfang des Blocks platzieren und dann z.B. in der Mitte des Speichers nochmals...?
also ein Beispiel. Nehmen wir mal an, du hast eine x-beliebige Struktur deklariert:
typedef struct
{ // Aufbau der Struktur belanglos
} ANYSTRUCT;
Dann reservierst du einen üppigen Speicherblock:
ANYSTRUCT *p;
p = malloc(12000*sizeof(ANYSTRUCT));
Jetzt solltest du noch prüfen, ob die Reservierung vielleicht fehlgeschlagen ist (dann wäre p==NULL), und wann das in Ordnungist, kannst du mit dem Basiszeiger p umgehen, als wäre er ein Array, weil Arrays und Zeiger in C in den meisten Kontexten gleichwertig sind:
p[17] = p[0];
Wenn die Indizierung nicht nach deinem Geschmack ist, kannst du auch explizit mit Zeigern hantieren:
ANYSTRUCT *p1, *p2;
p1 = p+120; // p1 zeigt jetzt auf p[120]
p2 = p+700; // p2 zeigt jetzt auf p[700]
p1->feld1 = 1; // Zugriff auf struct-Elemente über den Zeiger
p1->feld2 = 4; // Zugriff auf struct-Elemente über den Zeiger
*p2 = *p1; // kopiere das Element, auf das p1 zeigt, nach p2
p1++; // p1 zeigt _jetzt_ auf p[121]
Du siehst also, dass man auch mit Zeigern recht komfortabel arbeiten kann, wenn man ihnen einen Typ verpasst, anstatt void* zu deklarieren. Vielleicht sieht das am Anfang alles noch ein bisschen kryptisch aus, aber Übung macht den Meister.
Schönes Wochenende schon mal,
Martin
--
Paradox ist, wenn der Innenminister sich äußert und der Außenminister sich erinnert.