www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik struct array


Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie kann ich von so einer struct ein struct array anlegen?
 
struct _strArray {
  unsigned int *ID; 
  unsigned short Length; 
  unsigned short State; 
  unsigned short Type; 
  void          *pValue; 
}; 
struct _strArray StrArray[] = { 
    
   {NBR_1, LENGTH_11, STRING_1, ... usw},             
   {NBR_2, LENGTH_5, STRING_2,  ... usw},              
   {.... usw}                                 
};

im C-file möchte ich sowas in der richtung haben:
struct StrArray Array[10]; 
-> hier kommt immer die Fehlermeldung "variable Array was declared with 
a never-completed type"


Erreichen möchte ich folgendes: in der struct StrArray sollen die 
Spaltenelemente aufgelistet sein einer Tabelle. Zu jeder Spalte gibt es 
mehrere Variablen, die in der Struct _strArray deklariert sind (wie z.B. 
länge und Spalteninhalt (z.B. String oder Integer in der Spalte 
stehen)).

Insgesamt soll es 10 Reihen geben / also 10 Variablen die während der 
Laufzeit die Tabelle Array[10] füllen sollen.


Leider funktioniert mein Ansatz noch nicht.

main.c
struct StrArray *ptr; 
ptr = &Array[10]     //ptr soll auf den anfang der tabelle zeigen

for(i=0; i<10; i++)
{
  //elemente in der tabelle vordefinieren
}

gruß
Bernd

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
struct _strArray StrArray[] = {
   ...
};

definiert eine Variable StrArray vom Typ _strArray

struct StrArray Array[10];

gebraucht die Variable StrArray als Typ - das geht natürlich 
nicht...

Autor: christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
mit
 struct _strArray StrArray[]; 
legst du keinen typ an, sonder deklarierst eine Variable, die ein array 
ist. Du kannst also direkt auf StrArray arbeiten:
struct _strArray {
  unsigned int *ID; 
  unsigned short Length; 
  unsigned short State; 
  unsigned short Type; 
  void          *pValue; 
}; 
struct _strArray StrArray[] = { 
    
   {NBR_1, LENGTH_11, STRING_1, ... usw},             
   {NBR_2, LENGTH_5, STRING_2,  ... usw},              
   {.... usw}                                 
};
for(i=0; i<sizeof(StrArray)/sizeof(struct _strArray); i++)
{
  StrArray[i].Length = 34;
}

zu spaet....

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>struct StrArray Array[10];

>gebraucht die Variable StrArray als Typ - das geht natürlich
>nicht...

danke für deine Erklärung.

Wie kann ich das anders machen? Ich möchte ja ein Array erstellen, 
welches vom Typ StrArray sein soll. Sprich jeder Array-Index von Array[] 
sollte die Elemente die innerhalb der struct StrArray gelistet sind, 
beinhalten.


>zu spaet....

me too - dankeschön...

gruß
Bernd

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich es etwas umschreibe
typedef struct list_struct {

   struct StrArray *list; 

} LIST_STR; 

dann kann ich den pointer setzen sowie die Tabelle.

Aber wie kann ich dann genau auf ein Element von StrArray zugreifen?

LIST_STR *ptr;
LIST_STR LIST_TBL[10]; 
 
ptr = &LIST_TBL[0]     //ptr soll auf den anfang der tabelle zeigen

for(i=0; i<10; i++)
{
  //hier bekomm ich noch einen fehler
  ptr->list[0]->Length = 0; 
}

gruß
Bernd

Autor: christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arbeite mit der von dir angelegten Variable StrArray.
Die behinhaltet eine Tabelle, wobei jeder Eintrag vom Typ struct 
_strArray ist. Die Anzahl der Einträge hast du in der definition 
festgelegt.

Tipp: http://mindview.net/CDs/ThinkingInC/beta3

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
d.h. wenn ich eine Tabelle anlegen möchte mit jeweils 4x _strArray 
structs muss ich in der StrArray struct 40 einträge vornehmen.

gruß
Bernd

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.