mikrocontroller.net

Forum: PC-Programmierung Parameterübergabe an eine struktur


Autor: LuckyLuke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:

struct bla { char *zeiger_auf_array };

int main(void)
{
   struct bla example;
   char *memory = malloc(123);
   if( memory ) {
     example.zeiger_auf_array = memory;
   }
   else {
     // malloc fehlgeschlagen
   }

}

Beste Grüße

Alfred

Autor: Oliver K. (okraits)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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
struct s {
 int i; 
 char str[];   // Das geht
};
Praktisch ist das bei initialisierten structs, z.B.
struct s var1 = { 2, "Hallo" };
struct s var2 = { 3, "Noch'n Menüpunkt" };
oder bei dynamisch verwalteten structs, z.B.
// im Code
int m;
m = 22;
struct s *p = malloc(sizeof (struct s) + sizeof (char [m]));
wo die Maximalgröße erst beim Allozieren des Speicherplatzes bekannt 
ist.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.