Forum: PC-Programmierung Parameterübergabe an eine struktur


von LuckyLuke (Gast)


Lesenswert?

Hallo, ich habe eine Frage über Strukturen. Ich habe eine Struktur und 
in der Struktur habe ich Arrays mit fester Größe (z.b. int xyz[10];) 
angelegt.
Jetzt meine Frage, ich möchte die Größe der Arrays von einer Variablen 
abhängig machen und möchte daher der Struktur einen Parameter übergeben 
wenn ich Variablen von Typ der Struktur anlege !? Gibt es da eine 
Möglichkeit ?

Danke für Eure Hilfe !

LuckyLuke

von Alfred (Gast)


Lesenswert?

Hallo,

die Möglichkeit gibt es: Du musst in Deiner Struktur statt der Arrays 
Zeiger verwalten.
Denen kannst Du dann mit malloc() allokierte Speicherbereiche zuweisen:
1
struct bla { char *zeiger_auf_array };
2
3
int main(void)
4
{
5
   struct bla example;
6
   char *memory = malloc(123);
7
   if( memory ) {
8
     example.zeiger_auf_array = memory;
9
   }
10
   else {
11
     // malloc fehlgeschlagen
12
   }
13
14
}

Beste Grüße

Alfred

von Oliver K. (okraits)


Lesenswert?

Die Größe von C-Arrays muss bei der Übersetzung bekannt sein, von daher 
ist sowas nicht möglich. Eine Parameter-Übergabe an eine Struktur ist 
mir grundsätzlich auch nicht bekannt.

von Rolf Magnus (Gast)


Lesenswert?

Datentypen haben generell eine Größe, die dem Compiler bekannt ist, d.h. 
daß alle Instanzen deiner Struktur dieselbe Größe haben.

von Hc Z. (mizch)


Lesenswert?

Arrays variabler Länge gibt es bei C zwar grundsätzlich nicht.  Das 
letzte Element einer struct (mit mehr als einem Element) darf jedoch ein 
Array ohne Größenangabe sein, also
1
struct s {
2
 int i; 
3
 char str[];   // Das geht
4
};
Praktisch ist das bei initialisierten structs, z.B.
1
struct s var1 = { 2, "Hallo" };
2
struct s var2 = { 3, "Noch'n Menüpunkt" };
oder bei dynamisch verwalteten structs, z.B.
1
// im Code
2
int m;
3
m = 22;
4
struct s *p = malloc(sizeof (struct s) + sizeof (char [m]));
wo die Maximalgröße erst beim Allozieren des Speicherplatzes bekannt 
ist.

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
Noch kein Account? Hier anmelden.